2025-12-24T09:00:04.856 [DEBUG] [Thread-299389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:00:08.148 [DEBUG] [Thread-299390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:00:19.954 [DEBUG] [Thread-299391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:00:26.423 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:00:26.425 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:00:35.078 [DEBUG] [Thread-299392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:00:50.138 [DEBUG] [Thread-299393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:01:05.225 [DEBUG] [Thread-299394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:01:08.454 [DEBUG] [Thread-299395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:01:20.287 [DEBUG] [Thread-299396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:01:26.568 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:01:26.570 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:01:35.314 [DEBUG] [Thread-299397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:01:38.670 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T09:01:50.351 [DEBUG] [Thread-299398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:02:05.398 [DEBUG] [Thread-299399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:02:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:02:08.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:02:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:02:08.780 [DEBUG] [Thread-299400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:02:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 1, 36), 8.85, 55.85, 0.0, 14.2, 16.64, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:02:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:01:36
2025-12-24T09:02:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:02:10.451 [DEBUG] [Thread-299401] [transport.py] [_log()] starting thread (client mode): 0xf5770100
2025-12-24T09:02:10.452 [DEBUG] [Thread-299401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:02:10.465 [DEBUG] [Thread-299401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:02:10.465 [INFO] [Thread-299401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] client lang: <none>
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] server lang: <none>
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] kex follows: False
2025-12-24T09:02:10.478 [DEBUG] [Thread-299401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:02:10.479 [DEBUG] [Thread-299401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:02:10.479 [DEBUG] [Thread-299401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:02:10.479 [DEBUG] [Thread-299401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:02:10.479 [DEBUG] [Thread-299401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:02:10.479 [DEBUG] [Thread-299401] [transport.py] [_log()] Compression: none
2025-12-24T09:02:10.479 [DEBUG] [Thread-299401] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:02:10.505 [DEBUG] [Thread-299401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:02:10.508 [DEBUG] [Thread-299401] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:02:10.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:02:10.510 [DEBUG] [Thread-299401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:02:10.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:02:10.512 [DEBUG] [Thread-299401] [transport.py] [_log()] userauth is OK
2025-12-24T09:02:10.512 [DEBUG] [Thread-299401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:02:10.512 [DEBUG] [Thread-299401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:02:10.512 [DEBUG] [Thread-299401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:02:10.512 [DEBUG] [Thread-299401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:02:10.532 [INFO] [Thread-299401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:02:10.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:02:11.161 [DEBUG] [Thread-299401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:02:11.161 [DEBUG] [Thread-299401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:02:11.162 [DEBUG] [Thread-299401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:02:11.202 [DEBUG] [Thread-299401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:02:11.202 [DEBUG] [Thread-299401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:02:11.204 [DEBUG] [Thread-299401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:02:11.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:02:11.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:02:11.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:02:11.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:02:11.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:02:11.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:02:11.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:02:11.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:02:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:02:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.292780 -999.00  +16.70  13.10     60   +9.00 1 1 1 1 1   888    0 9.44 79.53 ----- 10.5 13.1 164.7 15.7 24.2 -26.8 23.6 -24.9 22.1 -24.7 22.6 -26.1
2025-12-24T09:02:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:02:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:02:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.292780
2025-12-24T09:02:11.232 [DEBUG] [Thread-299401] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:02:11.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:02:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:02:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:02:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:02:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:02:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:01:36', tmtdew=8.85, humidity=55.85, cloud=0.0, wind=14.2, temperature=16.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:01:36.192', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:02:11.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:02:11.336 [DEBUG] [Thread-299404] [transport.py] [_log()] starting thread (client mode): 0xf5770fd0
2025-12-24T09:02:11.336 [DEBUG] [Thread-299404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:02:11.354 [DEBUG] [Thread-299404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:02:11.354 [INFO] [Thread-299404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:02:11.364 [DEBUG] [Thread-299404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:02:11.364 [DEBUG] [Thread-299404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:02:11.364 [DEBUG] [Thread-299404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:02:11.364 [DEBUG] [Thread-299404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:02:11.364 [DEBUG] [Thread-299404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:02:11.364 [DEBUG] [Thread-299404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] client lang: <none>
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] server lang: <none>
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] kex follows: False
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] Compression: none
2025-12-24T09:02:11.365 [DEBUG] [Thread-299404] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:02:11.426 [DEBUG] [Thread-299404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:02:11.426 [DEBUG] [Thread-299404] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:02:11.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:02:11.426 [DEBUG] [Thread-299404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:02:11.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:02:11.487 [DEBUG] [Thread-299404] [transport.py] [_log()] userauth is OK
2025-12-24T09:02:11.487 [DEBUG] [Thread-299404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:02:11.487 [DEBUG] [Thread-299404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:02:11.487 [DEBUG] [Thread-299404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:02:11.487 [DEBUG] [Thread-299404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:02:11.506 [INFO] [Thread-299404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:02:11.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:02:11.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:02:12.369 [DEBUG] [Thread-299404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:02:12.369 [DEBUG] [Thread-299404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:02:12.420 [DEBUG] [Thread-299404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:02:12.420 [DEBUG] [Thread-299404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:02:12.429 [DEBUG] [Thread-299404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:02:12.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:02:12.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:02:12.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
2025-12-24T09:02:12.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:02:12.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:02:12.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:02:12.468 [DEBUG] [Thread-299404] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:02:20.452 [DEBUG] [Thread-299406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:02:26.721 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:02:26.723 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:02:35.569 [DEBUG] [Thread-299407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:02:42.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:02:42.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:02:42.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:02:43.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 2, 9), 8.92, 55.6, 0.0, 15.39, 16.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:02:43.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:02:09
2025-12-24T09:02:43.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:02:44.097 [DEBUG] [Thread-299408] [transport.py] [_log()] starting thread (client mode): 0xf5771030
2025-12-24T09:02:44.098 [DEBUG] [Thread-299408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:02:44.110 [DEBUG] [Thread-299408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:02:44.111 [INFO] [Thread-299408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:02:44.115 [DEBUG] [Thread-299408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] client lang: <none>
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] server lang: <none>
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] kex follows: False
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:02:44.116 [DEBUG] [Thread-299408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:02:44.117 [DEBUG] [Thread-299408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:02:44.117 [DEBUG] [Thread-299408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:02:44.117 [DEBUG] [Thread-299408] [transport.py] [_log()] Compression: none
2025-12-24T09:02:44.117 [DEBUG] [Thread-299408] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:02:44.151 [DEBUG] [Thread-299408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:02:44.155 [DEBUG] [Thread-299408] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:02:44.157 [DEBUG] [Thread-299408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:02:44.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:02:44.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:02:44.160 [DEBUG] [Thread-299408] [transport.py] [_log()] userauth is OK
2025-12-24T09:02:44.160 [DEBUG] [Thread-299408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:02:44.160 [DEBUG] [Thread-299408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:02:44.160 [DEBUG] [Thread-299408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:02:44.160 [DEBUG] [Thread-299408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:02:44.179 [INFO] [Thread-299408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:02:44.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:02:44.824 [DEBUG] [Thread-299408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:02:44.824 [DEBUG] [Thread-299408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:02:44.825 [DEBUG] [Thread-299408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:02:44.865 [DEBUG] [Thread-299408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:02:44.865 [DEBUG] [Thread-299408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:02:44.867 [DEBUG] [Thread-299408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:02:44.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:02:44.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:02:44.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:02:44.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:02:44.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:02:44.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:02:44.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:02:44.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:02:44.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:02:44.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.293127 -999.00  +16.80  14.77     60   +9.00 1 1 1 1 1   888    0 9.39 79.34 ----- 12.1 14.8 144.0 18.6 24.3 -26.2 23.5 -25.7 22.1 -25.3 22.6 -26.4
2025-12-24T09:02:44.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:02:44.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:02:44.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.293127
2025-12-24T09:02:44.898 [DEBUG] [Thread-299408] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:02:44.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:02:44.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:02:44.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:02:44.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:02:44.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:02:44.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:02:09', tmtdew=8.92, humidity=55.6, cloud=0.0, wind=15.39, temperature=16.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:02:06.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:02:44.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:02:45.003 [DEBUG] [Thread-299411] [transport.py] [_log()] starting thread (client mode): 0xf5771240
2025-12-24T09:02:45.003 [DEBUG] [Thread-299411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:02:45.016 [DEBUG] [Thread-299411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:02:45.016 [INFO] [Thread-299411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] client lang: <none>
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] server lang: <none>
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] kex follows: False
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] Compression: none
2025-12-24T09:02:45.024 [DEBUG] [Thread-299411] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:02:45.087 [DEBUG] [Thread-299411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:02:45.087 [DEBUG] [Thread-299411] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:02:45.087 [DEBUG] [Thread-299411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:02:45.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:02:45.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:02:45.144 [DEBUG] [Thread-299411] [transport.py] [_log()] userauth is OK
2025-12-24T09:02:45.144 [DEBUG] [Thread-299411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:02:45.144 [DEBUG] [Thread-299411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:02:45.144 [DEBUG] [Thread-299411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:02:45.144 [DEBUG] [Thread-299411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:02:45.158 [INFO] [Thread-299411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:02:45.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:02:45.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:02:45.976 [DEBUG] [Thread-299411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:02:45.977 [DEBUG] [Thread-299411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:02:46.024 [DEBUG] [Thread-299411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:02:46.024 [DEBUG] [Thread-299411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:02:46.034 [DEBUG] [Thread-299411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:02:46.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:02:46.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:02:46.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:02:46.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:02:46.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:02:46.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:02:46.074 [DEBUG] [Thread-299411] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:02:50.623 [DEBUG] [Thread-299413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:03:05.723 [DEBUG] [Thread-299414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:03:09.115 [DEBUG] [Thread-299415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:03:16.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:03:16.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:03:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:03:17.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 2, 42), 9.07, 54.9, 0.0, 13.48, 16.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:03:17.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:02:42
2025-12-24T09:03:17.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:03:17.423 [DEBUG] [Thread-299416] [transport.py] [_log()] starting thread (client mode): 0xf5770670
2025-12-24T09:03:17.424 [DEBUG] [Thread-299416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:03:17.431 [DEBUG] [Thread-299416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:03:17.431 [INFO] [Thread-299416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:03:17.434 [DEBUG] [Thread-299416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] client lang: <none>
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] server lang: <none>
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] kex follows: False
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:03:17.435 [DEBUG] [Thread-299416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:03:17.436 [DEBUG] [Thread-299416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:03:17.436 [DEBUG] [Thread-299416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:03:17.436 [DEBUG] [Thread-299416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:03:17.436 [DEBUG] [Thread-299416] [transport.py] [_log()] Compression: none
2025-12-24T09:03:17.436 [DEBUG] [Thread-299416] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:03:17.465 [DEBUG] [Thread-299416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:03:17.468 [DEBUG] [Thread-299416] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:03:17.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:03:17.470 [DEBUG] [Thread-299416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:03:17.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:03:17.508 [DEBUG] [Thread-299416] [transport.py] [_log()] userauth is OK
2025-12-24T09:03:17.508 [DEBUG] [Thread-299416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:03:17.508 [DEBUG] [Thread-299416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:03:17.509 [DEBUG] [Thread-299416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:03:17.509 [DEBUG] [Thread-299416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:03:17.539 [INFO] [Thread-299416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:03:17.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:03:18.164 [DEBUG] [Thread-299416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:03:18.164 [DEBUG] [Thread-299416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:03:18.164 [DEBUG] [Thread-299416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:03:18.205 [DEBUG] [Thread-299416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:03:18.205 [DEBUG] [Thread-299416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:03:18.207 [DEBUG] [Thread-299416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:03:18.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:03:18.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:03:18.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:03:18.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:03:18.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:03:18.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:03:18.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:03:18.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:03:18.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:03:18.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.293822 -999.00  +17.00  15.83     59   +9.10 1 1 1 1 1   888    0 9.43 78.17 ----- 13.9 15.8 133.2 20.3 24.3 -25.5 23.6 -24.9 22.2 -24.2 22.7 -25.8
2025-12-24T09:03:18.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:03:18.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:03:18.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.293822
2025-12-24T09:03:18.236 [DEBUG] [Thread-299416] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:03:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:03:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:03:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:03:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:03:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:03:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:02:42', tmtdew=9.07, humidity=54.9, cloud=0.0, wind=13.48, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:03:06.221', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:03:18.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:03:18.334 [DEBUG] [Thread-299419] [transport.py] [_log()] starting thread (client mode): 0xf8157b50
2025-12-24T09:03:18.334 [DEBUG] [Thread-299419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:03:18.349 [DEBUG] [Thread-299419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:03:18.349 [INFO] [Thread-299419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:03:18.356 [DEBUG] [Thread-299419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] client lang: <none>
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] server lang: <none>
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] kex follows: False
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:03:18.357 [DEBUG] [Thread-299419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:03:18.358 [DEBUG] [Thread-299419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:03:18.358 [DEBUG] [Thread-299419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:03:18.358 [DEBUG] [Thread-299419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:03:18.358 [DEBUG] [Thread-299419] [transport.py] [_log()] Compression: none
2025-12-24T09:03:18.358 [DEBUG] [Thread-299419] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:03:18.418 [DEBUG] [Thread-299419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:03:18.418 [DEBUG] [Thread-299419] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:03:18.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:03:18.419 [DEBUG] [Thread-299419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:03:18.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:03:18.478 [DEBUG] [Thread-299419] [transport.py] [_log()] userauth is OK
2025-12-24T09:03:18.478 [DEBUG] [Thread-299419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:03:18.478 [DEBUG] [Thread-299419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:03:18.478 [DEBUG] [Thread-299419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:03:18.478 [DEBUG] [Thread-299419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:03:18.497 [INFO] [Thread-299419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:03:18.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:03:18.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:03:19.395 [DEBUG] [Thread-299419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:03:19.396 [DEBUG] [Thread-299419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:03:19.443 [DEBUG] [Thread-299419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:03:19.443 [DEBUG] [Thread-299419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:03:19.456 [DEBUG] [Thread-299419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:03:19.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:03:19.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:03:19.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:03:19.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:03:19.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:03:19.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:03:19.489 [DEBUG] [Thread-299419] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:03:20.771 [DEBUG] [Thread-299421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:03:26.874 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:03:26.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:03:35.870 [DEBUG] [Thread-299422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:03:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:03:49.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:03:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:03:50.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 3, 15), 9.04, 55.03, 0.0, 13.78, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:03:50.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:03:15
2025-12-24T09:03:50.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:03:50.903 [DEBUG] [Thread-299423] [transport.py] [_log()] starting thread (client mode): 0xfabc5600
2025-12-24T09:03:50.904 [DEBUG] [Thread-299423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:03:50.911 [DEBUG] [Thread-299423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:03:50.911 [INFO] [Thread-299423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:03:50.916 [DEBUG] [Thread-299423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:03:50.916 [DEBUG] [Thread-299423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:03:50.916 [DEBUG] [Thread-299423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:03:50.916 [DEBUG] [Thread-299423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:03:50.916 [DEBUG] [Thread-299423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:03:50.917 [DEBUG] [Thread-299423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:03:50.917 [DEBUG] [Thread-299423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:03:50.917 [DEBUG] [Thread-299423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:03:50.917 [DEBUG] [Thread-299423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:03:50.917 [DEBUG] [Thread-299423] [transport.py] [_log()] client lang: <none>
2025-12-24T09:03:50.917 [DEBUG] [Thread-299423] [transport.py] [_log()] server lang: <none>
2025-12-24T09:03:50.917 [DEBUG] [Thread-299423] [transport.py] [_log()] kex follows: False
2025-12-24T09:03:50.917 [DEBUG] [Thread-299423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:03:50.918 [DEBUG] [Thread-299423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:03:50.918 [DEBUG] [Thread-299423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:03:50.918 [DEBUG] [Thread-299423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:03:50.918 [DEBUG] [Thread-299423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:03:50.918 [DEBUG] [Thread-299423] [transport.py] [_log()] Compression: none
2025-12-24T09:03:50.918 [DEBUG] [Thread-299423] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:03:50.934 [DEBUG] [Thread-299425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:03:50.960 [DEBUG] [Thread-299423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:03:50.964 [DEBUG] [Thread-299423] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:03:50.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:03:50.968 [DEBUG] [Thread-299423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:03:50.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:03:50.969 [DEBUG] [Thread-299423] [transport.py] [_log()] userauth is OK
2025-12-24T09:03:50.970 [DEBUG] [Thread-299423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:03:50.970 [DEBUG] [Thread-299423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:03:50.970 [DEBUG] [Thread-299423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:03:50.970 [DEBUG] [Thread-299423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:03:50.991 [INFO] [Thread-299423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:03:50.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:03:51.644 [DEBUG] [Thread-299423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:03:51.645 [DEBUG] [Thread-299423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:03:51.648 [DEBUG] [Thread-299423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:03:51.686 [DEBUG] [Thread-299423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:03:51.686 [DEBUG] [Thread-299423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:03:51.690 [DEBUG] [Thread-299423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:03:51.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:03:51.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:03:51.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:03:51.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:03:51.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:03:51.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:03:51.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:03:51.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:03:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:03:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.294169 -999.00  +16.60  16.01     59   +8.80 1 1 1 1 1   888    0 9.73 84.33 ----- 10.0 16.0 133.0 18.4 24.2 -27.0 23.6 -25.9 22.1 -25.1 22.6 -26.0
2025-12-24T09:03:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:03:51.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:03:51.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.294169
2025-12-24T09:03:51.731 [DEBUG] [Thread-299423] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:03:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:03:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:03:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:03:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:03:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:03:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:03:15', tmtdew=9.04, humidity=55.03, cloud=0.0, wind=13.78, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:03:36.202', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:03:51.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:03:51.845 [DEBUG] [Thread-299427] [transport.py] [_log()] starting thread (client mode): 0xf5771510
2025-12-24T09:03:51.845 [DEBUG] [Thread-299427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:03:51.859 [DEBUG] [Thread-299427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:03:51.859 [INFO] [Thread-299427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] client lang: <none>
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] server lang: <none>
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] kex follows: False
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:03:51.867 [DEBUG] [Thread-299427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:03:51.868 [DEBUG] [Thread-299427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:03:51.868 [DEBUG] [Thread-299427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:03:51.868 [DEBUG] [Thread-299427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:03:51.868 [DEBUG] [Thread-299427] [transport.py] [_log()] Compression: none
2025-12-24T09:03:51.868 [DEBUG] [Thread-299427] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:03:51.924 [DEBUG] [Thread-299427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:03:51.924 [DEBUG] [Thread-299427] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:03:51.925 [DEBUG] [Thread-299427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:03:51.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:03:51.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:03:51.980 [DEBUG] [Thread-299427] [transport.py] [_log()] userauth is OK
2025-12-24T09:03:51.980 [DEBUG] [Thread-299427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:03:51.980 [DEBUG] [Thread-299427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:03:51.980 [DEBUG] [Thread-299427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:03:51.980 [DEBUG] [Thread-299427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:03:51.998 [INFO] [Thread-299427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:03:51.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:03:52.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:03:52.814 [DEBUG] [Thread-299427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:03:52.814 [DEBUG] [Thread-299427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:03:52.862 [DEBUG] [Thread-299427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:03:52.862 [DEBUG] [Thread-299427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:03:52.870 [DEBUG] [Thread-299427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:03:52.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:03:52.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:03:52.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
2025-12-24T09:03:52.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:03:52.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:03:52.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:03:52.907 [DEBUG] [Thread-299427] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:04:06.016 [DEBUG] [Thread-299429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:04:09.327 [DEBUG] [Thread-299430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:04:21.118 [DEBUG] [Thread-299431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:04:22.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:04:22.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:04:22.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
2025-12-24T09:04:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 3, 48), 8.94, 55.53, 0.0, 13.78, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:04:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:03:48
2025-12-24T09:04:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:04:24.347 [DEBUG] [Thread-299432] [transport.py] [_log()] starting thread (client mode): 0xfabc7730
2025-12-24T09:04:24.348 [DEBUG] [Thread-299432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:04:24.361 [DEBUG] [Thread-299432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:04:24.361 [INFO] [Thread-299432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] client lang: <none>
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] server lang: <none>
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] kex follows: False
2025-12-24T09:04:24.365 [DEBUG] [Thread-299432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:04:24.366 [DEBUG] [Thread-299432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:04:24.366 [DEBUG] [Thread-299432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:04:24.366 [DEBUG] [Thread-299432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:04:24.366 [DEBUG] [Thread-299432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:04:24.366 [DEBUG] [Thread-299432] [transport.py] [_log()] Compression: none
2025-12-24T09:04:24.366 [DEBUG] [Thread-299432] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:04:24.397 [DEBUG] [Thread-299432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:04:24.400 [DEBUG] [Thread-299432] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:04:24.403 [DEBUG] [Thread-299432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:04:24.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:04:24.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:04:24.412 [DEBUG] [Thread-299432] [transport.py] [_log()] userauth is OK
2025-12-24T09:04:24.412 [DEBUG] [Thread-299432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:04:24.412 [DEBUG] [Thread-299432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:04:24.412 [DEBUG] [Thread-299432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:04:24.412 [DEBUG] [Thread-299432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:04:24.432 [INFO] [Thread-299432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:04:24.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:04:25.071 [DEBUG] [Thread-299432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:04:25.071 [DEBUG] [Thread-299432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:04:25.072 [DEBUG] [Thread-299432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:04:25.112 [DEBUG] [Thread-299432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:04:25.112 [DEBUG] [Thread-299432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:04:25.116 [DEBUG] [Thread-299432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:04:25.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:04:25.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:04:25.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:04:25.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:04:25.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:04:25.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:04:25.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:04:25.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:04:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:04:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.294516 -999.00  +16.60   9.40     61   +9.00 1 1 1 1 1   888    0 9.64 81.93 ----- 7.5 9.4 140.2 15.4 24.3 -26.0 23.7 -25.5 22.3 -24.2 22.6 -25.8
2025-12-24T09:04:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:04:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:04:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.294516
2025-12-24T09:04:25.149 [DEBUG] [Thread-299432] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:04:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:04:25.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:04:25.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:04:25.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:04:25.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:04:25.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:03:48', tmtdew=8.94, humidity=55.53, cloud=0.0, wind=13.78, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:04:06.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:04:25.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:04:25.247 [DEBUG] [Thread-299435] [transport.py] [_log()] starting thread (client mode): 0xf5772ef0
2025-12-24T09:04:25.247 [DEBUG] [Thread-299435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:04:25.262 [DEBUG] [Thread-299435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:04:25.262 [INFO] [Thread-299435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] client lang: <none>
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] server lang: <none>
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] kex follows: False
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] Compression: none
2025-12-24T09:04:25.270 [DEBUG] [Thread-299435] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:04:25.326 [DEBUG] [Thread-299435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:04:25.326 [DEBUG] [Thread-299435] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:04:25.327 [DEBUG] [Thread-299435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:04:25.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:04:25.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:04:25.388 [DEBUG] [Thread-299435] [transport.py] [_log()] userauth is OK
2025-12-24T09:04:25.388 [DEBUG] [Thread-299435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:04:25.388 [DEBUG] [Thread-299435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:04:25.388 [DEBUG] [Thread-299435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:04:25.388 [DEBUG] [Thread-299435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:04:25.404 [INFO] [Thread-299435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:04:25.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:04:25.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:04:26.310 [DEBUG] [Thread-299435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:04:26.310 [DEBUG] [Thread-299435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:04:26.361 [DEBUG] [Thread-299435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:04:26.361 [DEBUG] [Thread-299435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:04:26.370 [DEBUG] [Thread-299435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:04:26.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:04:26.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:04:26.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:04:26.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:04:26.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:04:26.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:04:26.402 [DEBUG] [Thread-299435] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:04:27.016 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:04:27.017 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:04:36.158 [DEBUG] [Thread-299437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:04:51.290 [DEBUG] [Thread-299438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:04:56.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:04:56.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:04:56.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:04:57.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 4, 21), 8.94, 55.53, 0.0, 13.78, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:04:57.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:04:21
2025-12-24T09:04:57.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:04:57.754 [DEBUG] [Thread-299439] [transport.py] [_log()] starting thread (client mode): 0xf57712d0
2025-12-24T09:04:57.755 [DEBUG] [Thread-299439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:04:57.769 [DEBUG] [Thread-299439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:04:57.769 [INFO] [Thread-299439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:04:57.773 [DEBUG] [Thread-299439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:04:57.773 [DEBUG] [Thread-299439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:04:57.773 [DEBUG] [Thread-299439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:04:57.773 [DEBUG] [Thread-299439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:04:57.773 [DEBUG] [Thread-299439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:04:57.774 [DEBUG] [Thread-299439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:04:57.774 [DEBUG] [Thread-299439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:04:57.774 [DEBUG] [Thread-299439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:04:57.774 [DEBUG] [Thread-299439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:04:57.774 [DEBUG] [Thread-299439] [transport.py] [_log()] client lang: <none>
2025-12-24T09:04:57.774 [DEBUG] [Thread-299439] [transport.py] [_log()] server lang: <none>
2025-12-24T09:04:57.774 [DEBUG] [Thread-299439] [transport.py] [_log()] kex follows: False
2025-12-24T09:04:57.774 [DEBUG] [Thread-299439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:04:57.775 [DEBUG] [Thread-299439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:04:57.775 [DEBUG] [Thread-299439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:04:57.775 [DEBUG] [Thread-299439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:04:57.775 [DEBUG] [Thread-299439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:04:57.775 [DEBUG] [Thread-299439] [transport.py] [_log()] Compression: none
2025-12-24T09:04:57.775 [DEBUG] [Thread-299439] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:04:57.807 [DEBUG] [Thread-299439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:04:57.812 [DEBUG] [Thread-299439] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:04:57.814 [DEBUG] [Thread-299439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:04:57.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:04:57.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:04:57.820 [DEBUG] [Thread-299439] [transport.py] [_log()] userauth is OK
2025-12-24T09:04:57.820 [DEBUG] [Thread-299439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:04:57.820 [DEBUG] [Thread-299439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:04:57.820 [DEBUG] [Thread-299439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:04:57.820 [DEBUG] [Thread-299439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:04:57.846 [INFO] [Thread-299439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:04:57.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:04:58.469 [DEBUG] [Thread-299439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:04:58.470 [DEBUG] [Thread-299439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:04:58.470 [DEBUG] [Thread-299439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:04:58.520 [DEBUG] [Thread-299439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:04:58.520 [DEBUG] [Thread-299439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:04:58.525 [DEBUG] [Thread-299439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:04:58.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:04:58.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:04:58.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:04:58.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:04:58.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:04:58.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:04:58.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:04:58.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:04:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:04:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.294863 -999.00  +16.90   8.36     60   +9.10 1 1 1 1 1   888    0 9.61 84.93 ----- 8.3 8.4 176.0 14.8 24.4 -26.1 23.8 -28.7 22.4 -24.3 22.8 -25.5
2025-12-24T09:04:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:04:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:04:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.294863
2025-12-24T09:04:58.566 [DEBUG] [Thread-299439] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:04:58.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:04:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:04:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:04:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:04:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:04:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:04:21', tmtdew=8.94, humidity=55.53, cloud=0.0, wind=13.78, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:04:36.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:04:58.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:04:58.683 [DEBUG] [Thread-299442] [transport.py] [_log()] starting thread (client mode): 0xf5743fd0
2025-12-24T09:04:58.683 [DEBUG] [Thread-299442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:04:58.696 [DEBUG] [Thread-299442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:04:58.696 [INFO] [Thread-299442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:04:58.704 [DEBUG] [Thread-299442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:04:58.704 [DEBUG] [Thread-299442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:04:58.704 [DEBUG] [Thread-299442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:04:58.705 [DEBUG] [Thread-299442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:04:58.705 [DEBUG] [Thread-299442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:04:58.705 [DEBUG] [Thread-299442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:04:58.705 [DEBUG] [Thread-299442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:04:58.705 [DEBUG] [Thread-299442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:04:58.705 [DEBUG] [Thread-299442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:04:58.705 [DEBUG] [Thread-299442] [transport.py] [_log()] client lang: <none>
2025-12-24T09:04:58.705 [DEBUG] [Thread-299442] [transport.py] [_log()] server lang: <none>
2025-12-24T09:04:58.706 [DEBUG] [Thread-299442] [transport.py] [_log()] kex follows: False
2025-12-24T09:04:58.706 [DEBUG] [Thread-299442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:04:58.706 [DEBUG] [Thread-299442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:04:58.706 [DEBUG] [Thread-299442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:04:58.706 [DEBUG] [Thread-299442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:04:58.706 [DEBUG] [Thread-299442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:04:58.706 [DEBUG] [Thread-299442] [transport.py] [_log()] Compression: none
2025-12-24T09:04:58.706 [DEBUG] [Thread-299442] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:04:58.764 [DEBUG] [Thread-299442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:04:58.765 [DEBUG] [Thread-299442] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:04:58.765 [DEBUG] [Thread-299442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:04:58.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:04:58.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:04:58.828 [DEBUG] [Thread-299442] [transport.py] [_log()] userauth is OK
2025-12-24T09:04:58.829 [DEBUG] [Thread-299442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:04:58.829 [DEBUG] [Thread-299442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:04:58.829 [DEBUG] [Thread-299442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:04:58.829 [DEBUG] [Thread-299442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:04:58.848 [INFO] [Thread-299442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:04:58.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:04:58.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:04:59.695 [DEBUG] [Thread-299442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:04:59.695 [DEBUG] [Thread-299442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:04:59.734 [DEBUG] [Thread-299442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:04:59.734 [DEBUG] [Thread-299442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:04:59.744 [DEBUG] [Thread-299442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:04:59.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:04:59.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:04:59.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:04:59.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:04:59.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:04:59.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:04:59.781 [DEBUG] [Thread-299442] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:05:06.334 [DEBUG] [Thread-299444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:05:09.561 [DEBUG] [Thread-299445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:05:21.450 [DEBUG] [Thread-299446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:05:27.167 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:05:27.170 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:05:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:05:29.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:05:29.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:05:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 4, 54), 9.43, 53.87, 0.0, 13.25, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:05:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:04:54
2025-12-24T09:05:30.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:05:31.104 [DEBUG] [Thread-299447] [transport.py] [_log()] starting thread (client mode): 0xfabc6380
2025-12-24T09:05:31.104 [DEBUG] [Thread-299447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:05:31.117 [DEBUG] [Thread-299447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:05:31.118 [INFO] [Thread-299447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] client lang: <none>
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] server lang: <none>
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] kex follows: False
2025-12-24T09:05:31.123 [DEBUG] [Thread-299447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:05:31.124 [DEBUG] [Thread-299447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:05:31.124 [DEBUG] [Thread-299447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:05:31.124 [DEBUG] [Thread-299447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:05:31.124 [DEBUG] [Thread-299447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:05:31.124 [DEBUG] [Thread-299447] [transport.py] [_log()] Compression: none
2025-12-24T09:05:31.124 [DEBUG] [Thread-299447] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:05:31.153 [DEBUG] [Thread-299447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:05:31.158 [DEBUG] [Thread-299447] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:05:31.160 [DEBUG] [Thread-299447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:05:31.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:05:31.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:05:31.164 [DEBUG] [Thread-299447] [transport.py] [_log()] userauth is OK
2025-12-24T09:05:31.164 [DEBUG] [Thread-299447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:05:31.165 [DEBUG] [Thread-299447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:05:31.165 [DEBUG] [Thread-299447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:05:31.165 [DEBUG] [Thread-299447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:05:31.192 [INFO] [Thread-299447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:05:31.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:05:31.761 [DEBUG] [Thread-299447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:05:31.761 [DEBUG] [Thread-299447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:05:31.763 [DEBUG] [Thread-299447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:05:31.803 [DEBUG] [Thread-299447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:05:31.803 [DEBUG] [Thread-299447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:05:31.806 [DEBUG] [Thread-299447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:05:31.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:05:31.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:05:31.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:05:31.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:05:31.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:05:31.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:05:31.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:05:31.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:05:31.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:05:31.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.295210 -999.00  +17.10   4.20     59   +9.20 1 1 1 1 1   888    0 9.82 87.18 ----- 6.1 4.2 173.5 8.5 24.6 -25.0 23.8 -24.5 22.5 -23.5 22.9 -24.5
2025-12-24T09:05:31.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:05:31.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:05:31.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.295210
2025-12-24T09:05:31.855 [DEBUG] [Thread-299447] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:05:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:05:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:05:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:05:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:05:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:05:31.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:04:54', tmtdew=9.43, humidity=53.87, cloud=0.0, wind=13.25, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:05:06.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:05:31.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:05:31.973 [DEBUG] [Thread-299450] [transport.py] [_log()] starting thread (client mode): 0xf8155a20
2025-12-24T09:05:31.974 [DEBUG] [Thread-299450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:05:31.991 [DEBUG] [Thread-299450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:05:31.992 [INFO] [Thread-299450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:05:32.000 [DEBUG] [Thread-299450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:05:32.001 [DEBUG] [Thread-299450] [transport.py] [_log()] client lang: <none>
2025-12-24T09:05:32.002 [DEBUG] [Thread-299450] [transport.py] [_log()] server lang: <none>
2025-12-24T09:05:32.002 [DEBUG] [Thread-299450] [transport.py] [_log()] kex follows: False
2025-12-24T09:05:32.002 [DEBUG] [Thread-299450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:05:32.002 [DEBUG] [Thread-299450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:05:32.002 [DEBUG] [Thread-299450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:05:32.002 [DEBUG] [Thread-299450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:05:32.002 [DEBUG] [Thread-299450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:05:32.003 [DEBUG] [Thread-299450] [transport.py] [_log()] Compression: none
2025-12-24T09:05:32.003 [DEBUG] [Thread-299450] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:05:32.063 [DEBUG] [Thread-299450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:05:32.064 [DEBUG] [Thread-299450] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:05:32.064 [DEBUG] [Thread-299450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:05:32.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:05:32.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:05:32.131 [DEBUG] [Thread-299450] [transport.py] [_log()] userauth is OK
2025-12-24T09:05:32.131 [DEBUG] [Thread-299450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:05:32.132 [DEBUG] [Thread-299450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:05:32.132 [DEBUG] [Thread-299450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:05:32.132 [DEBUG] [Thread-299450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:05:32.152 [INFO] [Thread-299450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:05:32.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:05:32.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:05:33.006 [DEBUG] [Thread-299450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:05:33.006 [DEBUG] [Thread-299450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:05:33.055 [DEBUG] [Thread-299450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:05:33.055 [DEBUG] [Thread-299450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:05:33.069 [DEBUG] [Thread-299450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:05:33.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:05:33.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:05:33.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:05:33.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:05:33.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:05:33.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:05:33.113 [DEBUG] [Thread-299450] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:05:36.507 [DEBUG] [Thread-299452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:05:51.635 [DEBUG] [Thread-299453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:06:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:06:03.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:06:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:06:04.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 5, 27), 9.31, 54.25, 0.0, 10.59, 16.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:06:04.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:05:27
2025-12-24T09:06:04.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:06:04.461 [DEBUG] [Thread-299454] [transport.py] [_log()] starting thread (client mode): 0xf57ca410
2025-12-24T09:06:04.462 [DEBUG] [Thread-299454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:06:04.462 [DEBUG] [Thread-299454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:06:04.462 [INFO] [Thread-299454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] client lang: <none>
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] server lang: <none>
2025-12-24T09:06:04.467 [DEBUG] [Thread-299454] [transport.py] [_log()] kex follows: False
2025-12-24T09:06:04.468 [DEBUG] [Thread-299454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:06:04.468 [DEBUG] [Thread-299454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:06:04.468 [DEBUG] [Thread-299454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:06:04.468 [DEBUG] [Thread-299454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:06:04.469 [DEBUG] [Thread-299454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:06:04.469 [DEBUG] [Thread-299454] [transport.py] [_log()] Compression: none
2025-12-24T09:06:04.469 [DEBUG] [Thread-299454] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:06:04.504 [DEBUG] [Thread-299454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:06:04.508 [DEBUG] [Thread-299454] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:06:04.511 [DEBUG] [Thread-299454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:06:04.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:06:04.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:06:04.515 [DEBUG] [Thread-299454] [transport.py] [_log()] userauth is OK
2025-12-24T09:06:04.516 [DEBUG] [Thread-299454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:06:04.516 [DEBUG] [Thread-299454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:06:04.516 [DEBUG] [Thread-299454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:06:04.516 [DEBUG] [Thread-299454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:06:04.538 [INFO] [Thread-299454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:06:04.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:06:05.132 [DEBUG] [Thread-299454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:06:05.132 [DEBUG] [Thread-299454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:06:05.133 [DEBUG] [Thread-299454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:06:05.174 [DEBUG] [Thread-299454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:06:05.174 [DEBUG] [Thread-299454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:06:05.176 [DEBUG] [Thread-299454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:06:05.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:06:05.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:06:05.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:06:05.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:06:05.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:06:05.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:06:05.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:06:05.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:06:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:06:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.295558 -999.00  +17.20   7.48     58   +9.10 1 1 1 1 1   888    0 10.03 88.82 ----- 7.0 7.5 186.2 9.7 24.7 -25.7 23.8 -26.7 22.6 -23.8 22.9 -25.0
2025-12-24T09:06:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:06:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:06:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.295558
2025-12-24T09:06:05.196 [DEBUG] [Thread-299454] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:06:05.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:06:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:06:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:06:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:06:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:06:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:05:27', tmtdew=9.31, humidity=54.25, cloud=0.0, wind=10.59, temperature=16.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:05:36.211', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:06:05.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:06:05.296 [DEBUG] [Thread-299457] [transport.py] [_log()] starting thread (client mode): 0xf81540a0
2025-12-24T09:06:05.297 [DEBUG] [Thread-299457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:06:05.312 [DEBUG] [Thread-299457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:06:05.312 [INFO] [Thread-299457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:06:05.319 [DEBUG] [Thread-299457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:06:05.319 [DEBUG] [Thread-299457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:06:05.319 [DEBUG] [Thread-299457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:06:05.319 [DEBUG] [Thread-299457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:06:05.319 [DEBUG] [Thread-299457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:06:05.319 [DEBUG] [Thread-299457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] client lang: <none>
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] server lang: <none>
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] kex follows: False
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] Compression: none
2025-12-24T09:06:05.320 [DEBUG] [Thread-299457] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:06:05.375 [DEBUG] [Thread-299457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:06:05.375 [DEBUG] [Thread-299457] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:06:05.375 [DEBUG] [Thread-299457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:06:05.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:06:05.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:06:05.432 [DEBUG] [Thread-299457] [transport.py] [_log()] userauth is OK
2025-12-24T09:06:05.432 [DEBUG] [Thread-299457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:06:05.432 [DEBUG] [Thread-299457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:06:05.432 [DEBUG] [Thread-299457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:06:05.432 [DEBUG] [Thread-299457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:06:05.446 [INFO] [Thread-299457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:06:05.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:06:05.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:06:06.267 [DEBUG] [Thread-299457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:06:06.267 [DEBUG] [Thread-299457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:06:06.313 [DEBUG] [Thread-299457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:06:06.313 [DEBUG] [Thread-299457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:06:06.322 [DEBUG] [Thread-299457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:06:06.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:06:06.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:06:06.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:06:06.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:06:06.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:06:06.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:06:06.360 [DEBUG] [Thread-299457] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:06:06.727 [DEBUG] [Thread-299459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:06:09.882 [DEBUG] [Thread-299460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:06:21.896 [DEBUG] [Thread-299461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:06:27.312 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:06:27.314 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:06:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:06:36.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:06:36.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:06:36.944 [DEBUG] [Thread-299462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:06:37.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 6), 8.94, 55.5, 0.0, 5.47, 16.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:06:37.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:06:00
2025-12-24T09:06:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:06:37.574 [DEBUG] [Thread-299463] [transport.py] [_log()] starting thread (client mode): 0xf5770880
2025-12-24T09:06:37.574 [DEBUG] [Thread-299463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:06:37.585 [DEBUG] [Thread-299463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:06:37.585 [INFO] [Thread-299463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] client lang: <none>
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] server lang: <none>
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] kex follows: False
2025-12-24T09:06:37.588 [DEBUG] [Thread-299463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:06:37.589 [DEBUG] [Thread-299463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:06:37.589 [DEBUG] [Thread-299463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:06:37.589 [DEBUG] [Thread-299463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:06:37.589 [DEBUG] [Thread-299463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:06:37.589 [DEBUG] [Thread-299463] [transport.py] [_log()] Compression: none
2025-12-24T09:06:37.589 [DEBUG] [Thread-299463] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:06:37.612 [DEBUG] [Thread-299463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:06:37.616 [DEBUG] [Thread-299463] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:06:37.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:06:37.620 [DEBUG] [Thread-299463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:06:37.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:06:37.622 [DEBUG] [Thread-299463] [transport.py] [_log()] userauth is OK
2025-12-24T09:06:37.622 [DEBUG] [Thread-299463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:06:37.622 [DEBUG] [Thread-299463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:06:37.622 [DEBUG] [Thread-299463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:06:37.623 [DEBUG] [Thread-299463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:06:37.647 [INFO] [Thread-299463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:06:37.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:06:38.253 [DEBUG] [Thread-299463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:06:38.253 [DEBUG] [Thread-299463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:06:38.264 [DEBUG] [Thread-299463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:06:38.294 [DEBUG] [Thread-299463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:06:38.295 [DEBUG] [Thread-299463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:06:38.297 [DEBUG] [Thread-299463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:06:38.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:06:38.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:06:38.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:06:38.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:06:38.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:06:38.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:06:38.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:06:38.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:06:38.322 [DEBUG] [Thread-299463] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:06:38.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:06:38.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.295905 -999.00  +17.30  16.26     58   +9.10 1 1 1 1 1   888    0 10.40 100.34 ----- 15.4 16.3 165.8 19.0 24.7 -26.7 23.9 -25.1 22.6 -24.8 23.1 -25.2
2025-12-24T09:06:38.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:06:38.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:06:38.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.295905
2025-12-24T09:06:38.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:06:38.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:06:38.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:06:38.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:06:38.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:06:38.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:06:00', tmtdew=8.94, humidity=55.5, cloud=0.0, wind=5.47, temperature=16.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:06:06.192', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:06:38.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:06:38.425 [DEBUG] [Thread-299466] [transport.py] [_log()] starting thread (client mode): 0xf5770760
2025-12-24T09:06:38.426 [DEBUG] [Thread-299466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:06:38.440 [DEBUG] [Thread-299466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:06:38.440 [INFO] [Thread-299466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:06:38.448 [DEBUG] [Thread-299466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:06:38.448 [DEBUG] [Thread-299466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:06:38.448 [DEBUG] [Thread-299466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:06:38.448 [DEBUG] [Thread-299466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:06:38.448 [DEBUG] [Thread-299466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:06:38.448 [DEBUG] [Thread-299466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] client lang: <none>
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] server lang: <none>
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] kex follows: False
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] Compression: none
2025-12-24T09:06:38.449 [DEBUG] [Thread-299466] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:06:38.507 [DEBUG] [Thread-299466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:06:38.507 [DEBUG] [Thread-299466] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:06:38.507 [DEBUG] [Thread-299466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:06:38.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:06:38.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:06:38.565 [DEBUG] [Thread-299466] [transport.py] [_log()] userauth is OK
2025-12-24T09:06:38.565 [DEBUG] [Thread-299466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:06:38.565 [DEBUG] [Thread-299466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:06:38.565 [DEBUG] [Thread-299466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:06:38.565 [DEBUG] [Thread-299466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:06:38.579 [INFO] [Thread-299466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:06:38.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:06:38.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:06:39.411 [DEBUG] [Thread-299466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:06:39.411 [DEBUG] [Thread-299466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:06:39.459 [DEBUG] [Thread-299466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:06:39.459 [DEBUG] [Thread-299466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:06:39.469 [DEBUG] [Thread-299466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:06:39.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:06:39.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:06:39.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:06:39.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:06:39.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:06:39.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:06:39.512 [DEBUG] [Thread-299466] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:06:51.997 [DEBUG] [Thread-299468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:07:07.070 [DEBUG] [Thread-299469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:07:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:07:09.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:07:09.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:07:10.144 [DEBUG] [Thread-299470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:07:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 6, 33), 8.94, 55.68, 0.0, 16.25, 16.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:07:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:06:33
2025-12-24T09:07:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:07:10.725 [DEBUG] [Thread-299471] [transport.py] [_log()] starting thread (client mode): 0xf5700b20
2025-12-24T09:07:10.725 [DEBUG] [Thread-299471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:07:10.738 [DEBUG] [Thread-299471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:07:10.738 [INFO] [Thread-299471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:07:10.742 [DEBUG] [Thread-299471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:07:10.743 [DEBUG] [Thread-299471] [transport.py] [_log()] client lang: <none>
2025-12-24T09:07:10.743 [DEBUG] [Thread-299471] [transport.py] [_log()] server lang: <none>
2025-12-24T09:07:10.743 [DEBUG] [Thread-299471] [transport.py] [_log()] kex follows: False
2025-12-24T09:07:10.743 [DEBUG] [Thread-299471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:07:10.743 [DEBUG] [Thread-299471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:07:10.743 [DEBUG] [Thread-299471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:07:10.744 [DEBUG] [Thread-299471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:07:10.744 [DEBUG] [Thread-299471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:07:10.744 [DEBUG] [Thread-299471] [transport.py] [_log()] Compression: none
2025-12-24T09:07:10.744 [DEBUG] [Thread-299471] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:07:10.764 [DEBUG] [Thread-299471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:07:10.767 [DEBUG] [Thread-299471] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:07:10.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:07:10.769 [DEBUG] [Thread-299471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:07:10.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:07:10.808 [DEBUG] [Thread-299471] [transport.py] [_log()] userauth is OK
2025-12-24T09:07:10.809 [DEBUG] [Thread-299471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:07:10.809 [DEBUG] [Thread-299471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:07:10.809 [DEBUG] [Thread-299471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:07:10.809 [DEBUG] [Thread-299471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:07:10.821 [INFO] [Thread-299471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:07:10.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:07:11.399 [DEBUG] [Thread-299471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:07:11.400 [DEBUG] [Thread-299471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:07:11.400 [DEBUG] [Thread-299471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:07:11.440 [DEBUG] [Thread-299471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:07:11.440 [DEBUG] [Thread-299471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:07:11.443 [DEBUG] [Thread-299471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:07:11.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:07:11.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:07:11.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:07:11.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:07:11.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:07:11.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:07:11.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:07:11.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:07:11.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:07:11.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.296600 -999.00  +17.40  11.32     58   +9.20 1 1 1 1 1   888    0 10.34 96.31 ----- 11.2 11.3 142.1 13.5 24.8 -25.2 23.9 -24.5 22.6 -23.8 23.1 -24.7
2025-12-24T09:07:11.465 [DEBUG] [Thread-299471] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:07:11.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:07:11.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:07:11.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.296600
2025-12-24T09:07:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:07:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:07:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:07:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:07:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:07:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:06:33', tmtdew=8.94, humidity=55.68, cloud=0.0, wind=16.25, temperature=16.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:07:06.240', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:07:11.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:07:11.561 [DEBUG] [Thread-299474] [transport.py] [_log()] starting thread (client mode): 0xf5743910
2025-12-24T09:07:11.561 [DEBUG] [Thread-299474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:07:11.575 [DEBUG] [Thread-299474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:07:11.575 [INFO] [Thread-299474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] client lang: <none>
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] server lang: <none>
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] kex follows: False
2025-12-24T09:07:11.584 [DEBUG] [Thread-299474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:07:11.585 [DEBUG] [Thread-299474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:07:11.585 [DEBUG] [Thread-299474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:07:11.585 [DEBUG] [Thread-299474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:07:11.585 [DEBUG] [Thread-299474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:07:11.585 [DEBUG] [Thread-299474] [transport.py] [_log()] Compression: none
2025-12-24T09:07:11.585 [DEBUG] [Thread-299474] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:07:11.638 [DEBUG] [Thread-299474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:07:11.638 [DEBUG] [Thread-299474] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:07:11.639 [DEBUG] [Thread-299474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:07:11.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:07:11.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:07:11.700 [DEBUG] [Thread-299474] [transport.py] [_log()] userauth is OK
2025-12-24T09:07:11.700 [DEBUG] [Thread-299474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:07:11.700 [DEBUG] [Thread-299474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:07:11.700 [DEBUG] [Thread-299474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:07:11.700 [DEBUG] [Thread-299474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:07:11.714 [INFO] [Thread-299474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:07:11.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:07:11.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:07:12.549 [DEBUG] [Thread-299474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:07:12.549 [DEBUG] [Thread-299474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:07:12.596 [DEBUG] [Thread-299474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:07:12.597 [DEBUG] [Thread-299474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:07:12.605 [DEBUG] [Thread-299474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:07:12.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:07:12.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:07:12.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:07:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:07:12.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:07:12.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:07:12.639 [DEBUG] [Thread-299474] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:07:22.146 [DEBUG] [Thread-299476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:07:27.455 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:07:27.456 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:07:37.280 [DEBUG] [Thread-299477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:07:42.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:07:42.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:07:42.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:07:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 7, 6), 9.08, 55.22, 0.0, 14.66, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:07:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:07:06
2025-12-24T09:07:43.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:07:43.959 [DEBUG] [Thread-299478] [transport.py] [_log()] starting thread (client mode): 0xf57bd780
2025-12-24T09:07:43.960 [DEBUG] [Thread-299478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:07:43.972 [DEBUG] [Thread-299478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:07:43.972 [INFO] [Thread-299478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:07:43.977 [DEBUG] [Thread-299478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:07:43.977 [DEBUG] [Thread-299478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:07:43.977 [DEBUG] [Thread-299478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:07:43.977 [DEBUG] [Thread-299478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] client lang: <none>
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] server lang: <none>
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] kex follows: False
2025-12-24T09:07:43.978 [DEBUG] [Thread-299478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:07:43.979 [DEBUG] [Thread-299478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:07:43.979 [DEBUG] [Thread-299478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:07:43.980 [DEBUG] [Thread-299478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:07:43.980 [DEBUG] [Thread-299478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:07:43.980 [DEBUG] [Thread-299478] [transport.py] [_log()] Compression: none
2025-12-24T09:07:43.980 [DEBUG] [Thread-299478] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:07:44.009 [DEBUG] [Thread-299478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:07:44.014 [DEBUG] [Thread-299478] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:07:44.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:07:44.018 [DEBUG] [Thread-299478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:07:44.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:07:44.021 [DEBUG] [Thread-299478] [transport.py] [_log()] userauth is OK
2025-12-24T09:07:44.022 [DEBUG] [Thread-299478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:07:44.022 [DEBUG] [Thread-299478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:07:44.022 [DEBUG] [Thread-299478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:07:44.022 [DEBUG] [Thread-299478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:07:44.049 [INFO] [Thread-299478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:07:44.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:07:44.655 [DEBUG] [Thread-299478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:07:44.655 [DEBUG] [Thread-299478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:07:44.658 [DEBUG] [Thread-299478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:07:44.696 [DEBUG] [Thread-299478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:07:44.696 [DEBUG] [Thread-299478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:07:44.698 [DEBUG] [Thread-299478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:07:44.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:07:44.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:07:44.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:07:44.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:07:44.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:07:44.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:07:44.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:07:44.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:07:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:07:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.296947 -999.00  +17.60  12.43     57   +9.20 1 1 1 1 1   888    0 10.32 99.39 ----- 12.3 12.4 167.6 17.6 24.8 -27.0 24.1 -26.6 22.6 -23.7 23.2 -25.5
2025-12-24T09:07:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:07:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:07:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.296947
2025-12-24T09:07:44.736 [DEBUG] [Thread-299478] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:07:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:07:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:07:06', tmtdew=9.08, humidity=55.22, cloud=0.0, wind=14.66, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:07:36.221', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:07:44.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:07:44.865 [DEBUG] [Thread-299481] [transport.py] [_log()] starting thread (client mode): 0xf575c400
2025-12-24T09:07:44.865 [DEBUG] [Thread-299481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:07:44.879 [DEBUG] [Thread-299481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:07:44.879 [INFO] [Thread-299481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] client lang: <none>
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] server lang: <none>
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] kex follows: False
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] Compression: none
2025-12-24T09:07:44.887 [DEBUG] [Thread-299481] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:07:44.944 [DEBUG] [Thread-299481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:07:44.944 [DEBUG] [Thread-299481] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:07:44.945 [DEBUG] [Thread-299481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:07:44.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:07:44.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:07:45.001 [DEBUG] [Thread-299481] [transport.py] [_log()] userauth is OK
2025-12-24T09:07:45.001 [DEBUG] [Thread-299481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:07:45.002 [DEBUG] [Thread-299481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:07:45.002 [DEBUG] [Thread-299481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:07:45.002 [DEBUG] [Thread-299481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:07:45.020 [INFO] [Thread-299481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:07:45.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:07:45.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:07:45.875 [DEBUG] [Thread-299481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:07:45.875 [DEBUG] [Thread-299481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:07:45.913 [DEBUG] [Thread-299481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:07:45.913 [DEBUG] [Thread-299481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:07:45.922 [DEBUG] [Thread-299481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:07:45.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:07:45.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')
2025-12-24T09:07:45.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:07:45.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:07:45.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:07:45.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:07:45.955 [DEBUG] [Thread-299481] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:07:52.310 [DEBUG] [Thread-299483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:08:07.395 [DEBUG] [Thread-299484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:08:10.394 [DEBUG] [Thread-299485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:08:15.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:08:15.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:08:15.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:08:16.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 7, 39), 9.28, 54.38, 0.0, 17.61, 17.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:08:16.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:07:39
2025-12-24T09:08:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:08:17.218 [DEBUG] [Thread-299486] [transport.py] [_log()] starting thread (client mode): 0xf57bfca0
2025-12-24T09:08:17.219 [DEBUG] [Thread-299486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:08:17.226 [DEBUG] [Thread-299486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:08:17.227 [INFO] [Thread-299486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:08:17.230 [DEBUG] [Thread-299486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:08:17.230 [DEBUG] [Thread-299486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:08:17.230 [DEBUG] [Thread-299486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] client lang: <none>
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] server lang: <none>
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] kex follows: False
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] Compression: none
2025-12-24T09:08:17.231 [DEBUG] [Thread-299486] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:08:17.267 [DEBUG] [Thread-299486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:08:17.270 [DEBUG] [Thread-299486] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:08:17.272 [DEBUG] [Thread-299486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:08:17.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:08:17.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:08:17.278 [DEBUG] [Thread-299486] [transport.py] [_log()] userauth is OK
2025-12-24T09:08:17.278 [DEBUG] [Thread-299486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:08:17.279 [DEBUG] [Thread-299486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:08:17.279 [DEBUG] [Thread-299486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:08:17.279 [DEBUG] [Thread-299486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:08:17.305 [INFO] [Thread-299486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:08:17.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:08:18.075 [DEBUG] [Thread-299486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:08:18.076 [DEBUG] [Thread-299486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:08:18.077 [DEBUG] [Thread-299486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:08:18.116 [DEBUG] [Thread-299486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:08:18.116 [DEBUG] [Thread-299486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:08:18.118 [DEBUG] [Thread-299486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:08:18.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:08:18.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:08:18.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:08:18.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:08:18.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:08:18.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:08:18.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:08:18.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:08:18.144 [DEBUG] [Thread-299486] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:08:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:08:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.296947 -999.00  +17.60  12.43     57   +9.20 1 1 1 1 1   888    0 10.32 99.39 ----- 12.3 12.4 167.6 17.6 24.8 -27.0 24.1 -26.6 22.6 -23.7 23.2 -25.5
2025-12-24T09:08:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:08:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:08:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.296947
2025-12-24T09:08:18.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:08:18.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:08:18.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:08:18.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:08:18.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:08:18.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:07:39', tmtdew=9.28, humidity=54.38, cloud=0.0, wind=17.61, temperature=17.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:07:36.221', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:08:18.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:08:18.259 [DEBUG] [Thread-299489] [transport.py] [_log()] starting thread (client mode): 0xf57bf790
2025-12-24T09:08:18.259 [DEBUG] [Thread-299489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:08:18.273 [DEBUG] [Thread-299489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:08:18.273 [INFO] [Thread-299489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:08:18.280 [DEBUG] [Thread-299489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:08:18.280 [DEBUG] [Thread-299489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] client lang: <none>
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] server lang: <none>
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] kex follows: False
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] Compression: none
2025-12-24T09:08:18.281 [DEBUG] [Thread-299489] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:08:18.342 [DEBUG] [Thread-299489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:08:18.343 [DEBUG] [Thread-299489] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:08:18.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:08:18.344 [DEBUG] [Thread-299489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:08:18.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:08:18.401 [DEBUG] [Thread-299489] [transport.py] [_log()] userauth is OK
2025-12-24T09:08:18.401 [DEBUG] [Thread-299489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:08:18.401 [DEBUG] [Thread-299489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:08:18.401 [DEBUG] [Thread-299489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:08:18.401 [DEBUG] [Thread-299489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:08:18.422 [INFO] [Thread-299489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:08:18.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:08:18.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:08:19.215 [DEBUG] [Thread-299489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:08:19.215 [DEBUG] [Thread-299489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:08:19.263 [DEBUG] [Thread-299489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:08:19.263 [DEBUG] [Thread-299489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:08:19.271 [DEBUG] [Thread-299489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:08:19.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:08:19.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:08:19.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:08:19.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:08:19.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:08:19.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:08:19.304 [DEBUG] [Thread-299489] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:08:22.484 [DEBUG] [Thread-299491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:08:27.606 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:08:27.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:08:37.609 [DEBUG] [Thread-299492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:08:49.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:08:49.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:08:49.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:08:50.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 8, 46), 9.11, 54.76, 0.0, 12.09, 16.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:08:50.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:08:46
2025-12-24T09:08:50.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:08:50.550 [DEBUG] [Thread-299493] [transport.py] [_log()] starting thread (client mode): 0xf5772320
2025-12-24T09:08:50.550 [DEBUG] [Thread-299493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:08:50.558 [DEBUG] [Thread-299493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:08:50.558 [INFO] [Thread-299493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] client lang: <none>
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] server lang: <none>
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] kex follows: False
2025-12-24T09:08:50.562 [DEBUG] [Thread-299493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:08:50.563 [DEBUG] [Thread-299493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:08:50.563 [DEBUG] [Thread-299493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:08:50.563 [DEBUG] [Thread-299493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:08:50.563 [DEBUG] [Thread-299493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:08:50.563 [DEBUG] [Thread-299493] [transport.py] [_log()] Compression: none
2025-12-24T09:08:50.564 [DEBUG] [Thread-299493] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:08:50.592 [DEBUG] [Thread-299493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:08:50.595 [DEBUG] [Thread-299493] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:08:50.596 [DEBUG] [Thread-299493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:08:50.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:08:50.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:08:50.637 [DEBUG] [Thread-299493] [transport.py] [_log()] userauth is OK
2025-12-24T09:08:50.637 [DEBUG] [Thread-299493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:08:50.637 [DEBUG] [Thread-299493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:08:50.637 [DEBUG] [Thread-299493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:08:50.638 [DEBUG] [Thread-299493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:08:50.664 [INFO] [Thread-299493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:08:50.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:08:51.308 [DEBUG] [Thread-299493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:08:51.308 [DEBUG] [Thread-299493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:08:51.315 [DEBUG] [Thread-299493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:08:51.349 [DEBUG] [Thread-299493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:08:51.349 [DEBUG] [Thread-299493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:08:51.351 [DEBUG] [Thread-299493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:08:51.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:08:51.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:08:51.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:08:51.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:08:51.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:08:51.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:08:51.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:08:51.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:08:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:08:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.297294 -999.00  +17.60  17.73     57   +9.00 1 1 1 1 1   888    0 10.56 104.16 ----- 16.3 17.7 136.8 20.8 24.8 -26.2 24.1 -25.5 22.6 -24.5 23.1 -25.0
2025-12-24T09:08:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:08:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:08:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.297294
2025-12-24T09:08:51.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:08:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:08:51.378 [DEBUG] [Thread-299493] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:08:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:08:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:08:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:08:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:08:46', tmtdew=9.11, humidity=54.76, cloud=0.0, wind=12.09, temperature=16.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:08:06.202', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:08:51.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:08:51.464 [DEBUG] [Thread-299496] [transport.py] [_log()] starting thread (client mode): 0xf574f850
2025-12-24T09:08:51.464 [DEBUG] [Thread-299496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:08:51.479 [DEBUG] [Thread-299496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:08:51.479 [INFO] [Thread-299496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:08:51.488 [DEBUG] [Thread-299496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:08:51.488 [DEBUG] [Thread-299496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:08:51.488 [DEBUG] [Thread-299496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:08:51.488 [DEBUG] [Thread-299496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:08:51.488 [DEBUG] [Thread-299496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:08:51.488 [DEBUG] [Thread-299496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:08:51.488 [DEBUG] [Thread-299496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] client lang: <none>
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] server lang: <none>
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] kex follows: False
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] Compression: none
2025-12-24T09:08:51.489 [DEBUG] [Thread-299496] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:08:51.543 [DEBUG] [Thread-299496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:08:51.544 [DEBUG] [Thread-299496] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:08:51.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:08:51.544 [DEBUG] [Thread-299496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:08:51.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:08:51.600 [DEBUG] [Thread-299496] [transport.py] [_log()] userauth is OK
2025-12-24T09:08:51.600 [DEBUG] [Thread-299496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:08:51.600 [DEBUG] [Thread-299496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:08:51.600 [DEBUG] [Thread-299496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:08:51.600 [DEBUG] [Thread-299496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:08:51.614 [INFO] [Thread-299496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:08:51.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:08:51.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:08:52.446 [DEBUG] [Thread-299496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:08:52.447 [DEBUG] [Thread-299496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:08:52.496 [DEBUG] [Thread-299496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:08:52.496 [DEBUG] [Thread-299496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:08:52.508 [DEBUG] [Thread-299496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:08:52.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:08:52.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:08:52.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:08:52.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:08:52.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:08:52.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:08:52.549 [DEBUG] [Thread-299496] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:08:52.639 [DEBUG] [Thread-299498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:09:07.745 [DEBUG] [Thread-299499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:09:10.689 [DEBUG] [Thread-299500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:09:22.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:09:22.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:09:22.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:09:22.809 [DEBUG] [Thread-299501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:09:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 9, 18), 9.01, 55.08, 0.0, 11.7, 16.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:09:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:09:18
2025-12-24T09:09:23.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:09:23.850 [DEBUG] [Thread-299502] [transport.py] [_log()] starting thread (client mode): 0xf813cbe0
2025-12-24T09:09:23.850 [DEBUG] [Thread-299502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:09:23.857 [DEBUG] [Thread-299502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:09:23.857 [INFO] [Thread-299502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:09:23.861 [DEBUG] [Thread-299502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:09:23.861 [DEBUG] [Thread-299502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:09:23.861 [DEBUG] [Thread-299502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:09:23.861 [DEBUG] [Thread-299502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:09:23.861 [DEBUG] [Thread-299502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:09:23.861 [DEBUG] [Thread-299502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:09:23.861 [DEBUG] [Thread-299502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:09:23.861 [DEBUG] [Thread-299502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] client lang: <none>
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] server lang: <none>
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] kex follows: False
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:09:23.862 [DEBUG] [Thread-299502] [transport.py] [_log()] Compression: none
2025-12-24T09:09:23.863 [DEBUG] [Thread-299502] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:09:23.893 [DEBUG] [Thread-299502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:09:23.897 [DEBUG] [Thread-299502] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:09:23.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:09:23.899 [DEBUG] [Thread-299502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:09:23.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:09:23.901 [DEBUG] [Thread-299502] [transport.py] [_log()] userauth is OK
2025-12-24T09:09:23.901 [DEBUG] [Thread-299502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:09:23.902 [DEBUG] [Thread-299502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:09:23.902 [DEBUG] [Thread-299502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:09:23.902 [DEBUG] [Thread-299502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:09:23.915 [INFO] [Thread-299502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:09:23.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:09:24.698 [DEBUG] [Thread-299502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:09:24.698 [DEBUG] [Thread-299502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:09:24.699 [DEBUG] [Thread-299502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:09:24.740 [DEBUG] [Thread-299502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:09:24.740 [DEBUG] [Thread-299502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:09:24.742 [DEBUG] [Thread-299502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:09:24.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:09:24.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:09:24.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:09:24.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:09:24.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:09:24.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:09:24.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:09:24.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:09:24.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:09:24.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.297641 -999.00  +17.40  14.91     57   +9.00 1 1 1 1 1   888    0 10.76 111.03 ----- 15.3 14.9 122.4 20.2 24.9 -26.5 24.1 -24.9 22.7 -23.7 23.2 -25.2
2025-12-24T09:09:24.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:09:24.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:09:24.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.297641
2025-12-24T09:09:24.767 [DEBUG] [Thread-299502] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:09:24.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:09:24.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:09:24.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:09:24.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:09:24.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:09:24.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:09:18', tmtdew=9.01, humidity=55.08, cloud=0.0, wind=11.7, temperature=16.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:08:36.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:09:24.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:09:24.864 [DEBUG] [Thread-299505] [transport.py] [_log()] starting thread (client mode): 0xf57c8af0
2025-12-24T09:09:24.864 [DEBUG] [Thread-299505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:09:24.878 [DEBUG] [Thread-299505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:09:24.879 [INFO] [Thread-299505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] client lang: <none>
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] server lang: <none>
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] kex follows: False
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] Compression: none
2025-12-24T09:09:24.888 [DEBUG] [Thread-299505] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:09:24.947 [DEBUG] [Thread-299505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:09:24.947 [DEBUG] [Thread-299505] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:09:24.947 [DEBUG] [Thread-299505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:09:24.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:09:24.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:09:25.008 [DEBUG] [Thread-299505] [transport.py] [_log()] userauth is OK
2025-12-24T09:09:25.008 [DEBUG] [Thread-299505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:09:25.008 [DEBUG] [Thread-299505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:09:25.008 [DEBUG] [Thread-299505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:09:25.008 [DEBUG] [Thread-299505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:09:25.022 [INFO] [Thread-299505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:09:25.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:09:25.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:09:25.836 [DEBUG] [Thread-299505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:09:25.836 [DEBUG] [Thread-299505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:09:25.883 [DEBUG] [Thread-299505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:09:25.883 [DEBUG] [Thread-299505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:09:25.891 [DEBUG] [Thread-299505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:09:25.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:09:25.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:09:25.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:09:25.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:09:25.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:09:25.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:09:25.929 [DEBUG] [Thread-299505] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:09:27.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:09:27.750 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:09:37.874 [DEBUG] [Thread-299507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:09:52.977 [DEBUG] [Thread-299508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:09:55.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:09:55.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:09:55.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
2025-12-24T09:09:56.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 9, 51), 9.18, 54.55, 0.0, 13.23, 16.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:09:56.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:09:51
2025-12-24T09:09:56.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:09:57.131 [DEBUG] [Thread-299509] [transport.py] [_log()] starting thread (client mode): 0xf5770d90
2025-12-24T09:09:57.131 [DEBUG] [Thread-299509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:09:57.150 [DEBUG] [Thread-299509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:09:57.151 [INFO] [Thread-299509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] client lang: <none>
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] server lang: <none>
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] kex follows: False
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] Compression: none
2025-12-24T09:09:57.154 [DEBUG] [Thread-299509] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:09:57.170 [DEBUG] [Thread-299509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:09:57.170 [DEBUG] [Thread-299509] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:09:57.170 [DEBUG] [Thread-299509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:09:57.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:09:57.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:09:57.212 [DEBUG] [Thread-299509] [transport.py] [_log()] userauth is OK
2025-12-24T09:09:57.212 [DEBUG] [Thread-299509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:09:57.212 [DEBUG] [Thread-299509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:09:57.212 [DEBUG] [Thread-299509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:09:57.212 [DEBUG] [Thread-299509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:09:57.232 [INFO] [Thread-299509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:09:57.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:09:57.890 [DEBUG] [Thread-299509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:09:57.891 [DEBUG] [Thread-299509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:09:57.891 [DEBUG] [Thread-299509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:09:57.931 [DEBUG] [Thread-299509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:09:57.931 [DEBUG] [Thread-299509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:09:57.933 [DEBUG] [Thread-299509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:09:57.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:09:57.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:09:57.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:09:57.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:09:57.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:09:57.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:09:57.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:09:57.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:09:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:09:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.297988 -999.00  +17.30  17.71     57   +8.90 1 1 1 1 1   888    0 11.41 131.14 ----- 17.8 17.7 111.8 20.6 24.8 -27.4 24.2 -25.5 22.8 -24.8 23.3 -25.1
2025-12-24T09:09:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:09:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:09:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.297988
2025-12-24T09:09:57.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:09:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:09:57.956 [DEBUG] [Thread-299509] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:09:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:09:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:09:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:09:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:09:51', tmtdew=9.18, humidity=54.55, cloud=0.0, wind=13.23, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:09:06.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:09:58.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:09:58.043 [DEBUG] [Thread-299512] [transport.py] [_log()] starting thread (client mode): 0xf575f0d0
2025-12-24T09:09:58.043 [DEBUG] [Thread-299512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:09:58.057 [DEBUG] [Thread-299512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:09:58.057 [INFO] [Thread-299512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] client lang: <none>
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] server lang: <none>
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] kex follows: False
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:09:58.066 [DEBUG] [Thread-299512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:09:58.067 [DEBUG] [Thread-299512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:09:58.067 [DEBUG] [Thread-299512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:09:58.067 [DEBUG] [Thread-299512] [transport.py] [_log()] Compression: none
2025-12-24T09:09:58.067 [DEBUG] [Thread-299512] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:09:58.123 [DEBUG] [Thread-299512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:09:58.123 [DEBUG] [Thread-299512] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:09:58.124 [DEBUG] [Thread-299512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:09:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:09:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:09:58.180 [DEBUG] [Thread-299512] [transport.py] [_log()] userauth is OK
2025-12-24T09:09:58.180 [DEBUG] [Thread-299512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:09:58.180 [DEBUG] [Thread-299512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:09:58.180 [DEBUG] [Thread-299512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:09:58.180 [DEBUG] [Thread-299512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:09:58.194 [INFO] [Thread-299512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:09:58.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:09:58.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:09:59.001 [DEBUG] [Thread-299512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:09:59.001 [DEBUG] [Thread-299512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:09:59.049 [DEBUG] [Thread-299512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:09:59.049 [DEBUG] [Thread-299512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:09:59.057 [DEBUG] [Thread-299512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:09:59.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:09:59.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:09:59.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:09:59.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:09:59.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:09:59.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:09:59.089 [DEBUG] [Thread-299512] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:10:08.073 [DEBUG] [Thread-299514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:10:10.920 [DEBUG] [Thread-299515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:10:23.195 [DEBUG] [Thread-299516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:10:27.891 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:10:27.892 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:10:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:10:29.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:10:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:10:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 9, 51), 9.18, 54.55, 0.0, 13.23, 16.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:10:30.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:09:51
2025-12-24T09:10:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:10:30.413 [DEBUG] [Thread-299517] [transport.py] [_log()] starting thread (client mode): 0xf5770c40
2025-12-24T09:10:30.414 [DEBUG] [Thread-299517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:10:30.428 [DEBUG] [Thread-299517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:10:30.428 [INFO] [Thread-299517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] client lang: <none>
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] server lang: <none>
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] kex follows: False
2025-12-24T09:10:30.432 [DEBUG] [Thread-299517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:10:30.433 [DEBUG] [Thread-299517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:10:30.433 [DEBUG] [Thread-299517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:10:30.433 [DEBUG] [Thread-299517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:10:30.433 [DEBUG] [Thread-299517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:10:30.433 [DEBUG] [Thread-299517] [transport.py] [_log()] Compression: none
2025-12-24T09:10:30.433 [DEBUG] [Thread-299517] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:10:30.467 [DEBUG] [Thread-299517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:10:30.472 [DEBUG] [Thread-299517] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:10:30.474 [DEBUG] [Thread-299517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:10:30.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:10:30.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:10:30.479 [DEBUG] [Thread-299517] [transport.py] [_log()] userauth is OK
2025-12-24T09:10:30.479 [DEBUG] [Thread-299517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:10:30.479 [DEBUG] [Thread-299517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:10:30.480 [DEBUG] [Thread-299517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:10:30.480 [DEBUG] [Thread-299517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:10:30.505 [INFO] [Thread-299517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:10:30.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:10:31.095 [DEBUG] [Thread-299517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:10:31.095 [DEBUG] [Thread-299517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:10:31.105 [DEBUG] [Thread-299517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:10:31.137 [DEBUG] [Thread-299517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:10:31.137 [DEBUG] [Thread-299517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:10:31.139 [DEBUG] [Thread-299517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:10:31.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:10:31.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:10:31.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:10:31.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:10:31.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:10:31.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:10:31.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:10:31.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:10:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:10:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.298336 -999.00  +17.00  15.30     59   +8.90 1 1 1 1 1   888    0 11.17 122.17 ----- 15.6 15.3 110.4 18.8 24.8 -26.2 24.2 -24.9 22.8 -24.0 23.3 -25.8
2025-12-24T09:10:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:10:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:10:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.298336
2025-12-24T09:10:31.168 [DEBUG] [Thread-299517] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:10:31.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:10:31.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:10:31.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:10:31.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:10:31.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:10:31.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:09:51', tmtdew=9.18, humidity=54.55, cloud=0.0, wind=13.23, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:09:36.230', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:10:31.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:10:31.272 [DEBUG] [Thread-299520] [transport.py] [_log()] starting thread (client mode): 0xf5742b60
2025-12-24T09:10:31.272 [DEBUG] [Thread-299520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:10:31.287 [DEBUG] [Thread-299520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:10:31.287 [INFO] [Thread-299520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:10:31.294 [DEBUG] [Thread-299520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:10:31.294 [DEBUG] [Thread-299520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:10:31.294 [DEBUG] [Thread-299520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:10:31.294 [DEBUG] [Thread-299520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:10:31.294 [DEBUG] [Thread-299520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:10:31.294 [DEBUG] [Thread-299520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:10:31.294 [DEBUG] [Thread-299520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:10:31.294 [DEBUG] [Thread-299520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] client lang: <none>
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] server lang: <none>
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] kex follows: False
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] Compression: none
2025-12-24T09:10:31.295 [DEBUG] [Thread-299520] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:10:31.353 [DEBUG] [Thread-299520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:10:31.353 [DEBUG] [Thread-299520] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:10:31.354 [DEBUG] [Thread-299520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:10:31.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:10:31.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:10:31.409 [DEBUG] [Thread-299520] [transport.py] [_log()] userauth is OK
2025-12-24T09:10:31.409 [DEBUG] [Thread-299520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:10:31.410 [DEBUG] [Thread-299520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:10:31.410 [DEBUG] [Thread-299520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:10:31.410 [DEBUG] [Thread-299520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:10:31.432 [INFO] [Thread-299520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:10:31.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:10:31.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:10:32.272 [DEBUG] [Thread-299520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:10:32.272 [DEBUG] [Thread-299520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:10:32.310 [DEBUG] [Thread-299520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:10:32.311 [DEBUG] [Thread-299520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:10:32.319 [DEBUG] [Thread-299520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:10:32.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:10:32.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:10:32.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:10:32.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:10:32.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:10:32.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:10:32.352 [DEBUG] [Thread-299520] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:10:38.266 [DEBUG] [Thread-299522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:10:53.394 [DEBUG] [Thread-299523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:11:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:11:02.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:11:02.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:11:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 10, 24), 9.23, 54.36, 0.0, 12.51, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:11:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:10:24
2025-12-24T09:11:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:11:03.747 [DEBUG] [Thread-299524] [transport.py] [_log()] starting thread (client mode): 0xf575d840
2025-12-24T09:11:03.748 [DEBUG] [Thread-299524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:11:03.762 [DEBUG] [Thread-299524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:11:03.762 [INFO] [Thread-299524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] client lang: <none>
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] server lang: <none>
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] kex follows: False
2025-12-24T09:11:03.766 [DEBUG] [Thread-299524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:11:03.767 [DEBUG] [Thread-299524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:11:03.767 [DEBUG] [Thread-299524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:11:03.767 [DEBUG] [Thread-299524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:11:03.767 [DEBUG] [Thread-299524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:11:03.767 [DEBUG] [Thread-299524] [transport.py] [_log()] Compression: none
2025-12-24T09:11:03.767 [DEBUG] [Thread-299524] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:11:03.805 [DEBUG] [Thread-299524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:11:03.810 [DEBUG] [Thread-299524] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:11:03.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:11:03.812 [DEBUG] [Thread-299524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:11:03.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:11:03.814 [DEBUG] [Thread-299524] [transport.py] [_log()] userauth is OK
2025-12-24T09:11:03.814 [DEBUG] [Thread-299524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:11:03.815 [DEBUG] [Thread-299524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:11:03.815 [DEBUG] [Thread-299524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:11:03.815 [DEBUG] [Thread-299524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:11:03.844 [INFO] [Thread-299524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:11:03.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:11:04.502 [DEBUG] [Thread-299524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:11:04.502 [DEBUG] [Thread-299524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:11:04.511 [DEBUG] [Thread-299524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:11:04.543 [DEBUG] [Thread-299524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:11:04.543 [DEBUG] [Thread-299524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:11:04.547 [DEBUG] [Thread-299524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:11:04.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:11:04.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:11:04.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:11:04.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:11:04.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:11:04.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:11:04.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:11:04.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:11:04.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:11:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.298682 -999.00  +17.10  12.17     58   +8.90 1 1 1 1 1   888    0 11.35 128.84 ----- 9.0 12.2 115.4 16.3 24.9 -25.5 24.4 -25.4 22.9 -24.2 23.3 -24.9
2025-12-24T09:11:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:11:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:11:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.298682
2025-12-24T09:11:04.587 [DEBUG] [Thread-299524] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:11:04.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:11:04.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:11:04.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:11:04.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:11:04.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:11:04.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:10:24', tmtdew=9.23, humidity=54.36, cloud=0.0, wind=12.51, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:10:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:11:04.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:11:04.691 [DEBUG] [Thread-299527] [transport.py] [_log()] starting thread (client mode): 0xf574fd00
2025-12-24T09:11:04.691 [DEBUG] [Thread-299527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:11:04.705 [DEBUG] [Thread-299527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:11:04.705 [INFO] [Thread-299527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] client lang: <none>
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] server lang: <none>
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] kex follows: False
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] Compression: none
2025-12-24T09:11:04.716 [DEBUG] [Thread-299527] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:11:04.772 [DEBUG] [Thread-299527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:11:04.772 [DEBUG] [Thread-299527] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:11:04.772 [DEBUG] [Thread-299527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:11:04.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:11:04.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:11:04.828 [DEBUG] [Thread-299527] [transport.py] [_log()] userauth is OK
2025-12-24T09:11:04.828 [DEBUG] [Thread-299527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:11:04.828 [DEBUG] [Thread-299527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:11:04.828 [DEBUG] [Thread-299527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:11:04.828 [DEBUG] [Thread-299527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:11:04.845 [INFO] [Thread-299527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:11:04.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:11:04.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:11:05.690 [DEBUG] [Thread-299527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:11:05.690 [DEBUG] [Thread-299527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:11:05.737 [DEBUG] [Thread-299527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:11:05.738 [DEBUG] [Thread-299527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:11:05.747 [DEBUG] [Thread-299527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:11:05.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:11:05.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:11:05.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
2025-12-24T09:11:05.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:11:05.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:11:05.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:11:05.784 [DEBUG] [Thread-299527] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:11:08.434 [DEBUG] [Thread-299529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:11:11.204 [DEBUG] [Thread-299530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:11:23.497 [DEBUG] [Thread-299531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:11:28.033 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:11:28.034 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:11:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:11:35.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:11: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
2025-12-24T09:11:36.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 10, 59), 9.24, 54.45, 0.0, 11.89, 16.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:11:36.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:10:59
2025-12-24T09:11:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:11:37.036 [DEBUG] [Thread-299532] [transport.py] [_log()] starting thread (client mode): 0xf57ca5f0
2025-12-24T09:11:37.037 [DEBUG] [Thread-299532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:11:37.051 [DEBUG] [Thread-299532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:11:37.051 [INFO] [Thread-299532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] client lang: <none>
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] server lang: <none>
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] kex follows: False
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:11:37.055 [DEBUG] [Thread-299532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:11:37.056 [DEBUG] [Thread-299532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:11:37.056 [DEBUG] [Thread-299532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:11:37.056 [DEBUG] [Thread-299532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:11:37.056 [DEBUG] [Thread-299532] [transport.py] [_log()] Compression: none
2025-12-24T09:11:37.056 [DEBUG] [Thread-299532] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:11:37.087 [DEBUG] [Thread-299532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:11:37.089 [DEBUG] [Thread-299532] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:11:37.090 [DEBUG] [Thread-299532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:11:37.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:11:37.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:11:37.129 [DEBUG] [Thread-299532] [transport.py] [_log()] userauth is OK
2025-12-24T09:11:37.129 [DEBUG] [Thread-299532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:11:37.130 [DEBUG] [Thread-299532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:11:37.130 [DEBUG] [Thread-299532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:11:37.130 [DEBUG] [Thread-299532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:11:37.169 [INFO] [Thread-299532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:11:37.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:11:37.782 [DEBUG] [Thread-299532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:11:37.782 [DEBUG] [Thread-299532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:11:37.785 [DEBUG] [Thread-299532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:11:37.823 [DEBUG] [Thread-299532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:11:37.823 [DEBUG] [Thread-299532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:11:37.827 [DEBUG] [Thread-299532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:11:37.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:11:37.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:11:37.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:11:37.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:11:37.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:11:37.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:11:37.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:11:37.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:11:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:11:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.299377 -999.00  +17.10  16.47     57   +8.70 1 1 1 1 1   888    0 11.95 146.72 ----- 14.7 16.5 135.0 21.1 24.9 -26.2 24.3 -25.6 22.9 -25.2 23.3 -26.1
2025-12-24T09:11:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:11:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:11:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.299377
2025-12-24T09:11:37.861 [DEBUG] [Thread-299532] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:11:37.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:11:37.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:11:37.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:11:37.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:11:37.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:11:37.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:10:59', tmtdew=9.24, humidity=54.45, cloud=0.0, wind=11.89, temperature=16.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:11:06.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:11:37.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:11:37.997 [DEBUG] [Thread-299535] [transport.py] [_log()] starting thread (client mode): 0xf575d6c0
2025-12-24T09:11:37.998 [DEBUG] [Thread-299535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:11:38.011 [DEBUG] [Thread-299535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:11:38.011 [INFO] [Thread-299535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:11:38.019 [DEBUG] [Thread-299535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:11:38.019 [DEBUG] [Thread-299535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:11:38.019 [DEBUG] [Thread-299535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:11:38.019 [DEBUG] [Thread-299535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] client lang: <none>
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] server lang: <none>
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] kex follows: False
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] Compression: none
2025-12-24T09:11:38.020 [DEBUG] [Thread-299535] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:11:38.076 [DEBUG] [Thread-299535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:11:38.077 [DEBUG] [Thread-299535] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:11:38.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:11:38.078 [DEBUG] [Thread-299535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:11:38.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:11:38.133 [DEBUG] [Thread-299535] [transport.py] [_log()] userauth is OK
2025-12-24T09:11:38.133 [DEBUG] [Thread-299535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:11:38.133 [DEBUG] [Thread-299535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:11:38.133 [DEBUG] [Thread-299535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:11:38.133 [DEBUG] [Thread-299535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:11:38.156 [INFO] [Thread-299535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:11:38.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:11:38.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:11:38.571 [DEBUG] [Thread-299537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:11:38.979 [DEBUG] [Thread-299535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:11:38.979 [DEBUG] [Thread-299535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:11:39.018 [DEBUG] [Thread-299535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:11:39.018 [DEBUG] [Thread-299535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:11:39.027 [DEBUG] [Thread-299535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:11:39.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:11:39.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:11:39.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:11:39.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:11:39.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:11:39.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:11:39.059 [DEBUG] [Thread-299535] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:11:53.659 [DEBUG] [Thread-299538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:12:08.743 [DEBUG] [Thread-299539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:12:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:12:09.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:12:09.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:12:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 11, 33), 9.13, 54.86, 0.0, 13.76, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:12:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:11:33
2025-12-24T09:12:10.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:12:10.247 [DEBUG] [Thread-299540] [transport.py] [_log()] starting thread (client mode): 0xf574c6d0
2025-12-24T09:12:10.247 [DEBUG] [Thread-299540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:12:10.261 [DEBUG] [Thread-299540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:12:10.261 [INFO] [Thread-299540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] client lang: <none>
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] server lang: <none>
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] kex follows: False
2025-12-24T09:12:10.266 [DEBUG] [Thread-299540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:12:10.267 [DEBUG] [Thread-299540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:12:10.267 [DEBUG] [Thread-299540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:12:10.267 [DEBUG] [Thread-299540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:12:10.267 [DEBUG] [Thread-299540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:12:10.267 [DEBUG] [Thread-299540] [transport.py] [_log()] Compression: none
2025-12-24T09:12:10.267 [DEBUG] [Thread-299540] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:12:10.294 [DEBUG] [Thread-299540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:12:10.297 [DEBUG] [Thread-299540] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:12:10.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:12:10.300 [DEBUG] [Thread-299540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:12:10.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:12:10.301 [DEBUG] [Thread-299540] [transport.py] [_log()] userauth is OK
2025-12-24T09:12:10.302 [DEBUG] [Thread-299540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:12:10.302 [DEBUG] [Thread-299540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:12:10.302 [DEBUG] [Thread-299540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:12:10.302 [DEBUG] [Thread-299540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:12:10.314 [INFO] [Thread-299540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:12:10.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:12:10.958 [DEBUG] [Thread-299540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:12:10.958 [DEBUG] [Thread-299540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:12:10.958 [DEBUG] [Thread-299540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:12:10.998 [DEBUG] [Thread-299540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:12:10.999 [DEBUG] [Thread-299540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:12:11.001 [DEBUG] [Thread-299540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:12:11.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:12:11.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:12:11.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:12:11.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:12:11.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:12:11.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:12:11.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:12:11.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:12:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:12:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.299724 -999.00  +17.10  15.47     58   +8.80 1 1 1 1 1   888    0 11.17 120.97 ----- 11.8 15.5 165.6 17.0 24.9 -27.2 24.3 -25.5 22.8 -25.5 22.4 -25.7
2025-12-24T09:12:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:12:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:12:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.299724
2025-12-24T09:12:11.028 [DEBUG] [Thread-299540] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:12:11.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:12:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:12:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:12:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:12:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:12:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:11:33', tmtdew=9.13, humidity=54.86, cloud=0.0, wind=13.76, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:11:36.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:12:11.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:12:11.127 [DEBUG] [Thread-299543] [transport.py] [_log()] starting thread (client mode): 0xf574e590
2025-12-24T09:12:11.127 [DEBUG] [Thread-299543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:12:11.141 [DEBUG] [Thread-299543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:12:11.141 [INFO] [Thread-299543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] client lang: <none>
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] server lang: <none>
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] kex follows: False
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] Compression: none
2025-12-24T09:12:11.149 [DEBUG] [Thread-299543] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:12:11.207 [DEBUG] [Thread-299543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:12:11.207 [DEBUG] [Thread-299543] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:12:11.208 [DEBUG] [Thread-299543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:12:11.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:12:11.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:12:11.265 [DEBUG] [Thread-299543] [transport.py] [_log()] userauth is OK
2025-12-24T09:12:11.265 [DEBUG] [Thread-299543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:12:11.265 [DEBUG] [Thread-299543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:12:11.265 [DEBUG] [Thread-299543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:12:11.265 [DEBUG] [Thread-299543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:12:11.279 [INFO] [Thread-299543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:12:11.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:12:11.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:12:11.463 [DEBUG] [Thread-299545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:12:12.150 [DEBUG] [Thread-299543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:12:12.150 [DEBUG] [Thread-299543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:12:12.198 [DEBUG] [Thread-299543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:12:12.198 [DEBUG] [Thread-299543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:12:12.207 [DEBUG] [Thread-299543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:12:12.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:12:12.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:12:12.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:12:12.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:12:12.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:12:12.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:12:12.243 [DEBUG] [Thread-299543] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:12:23.832 [DEBUG] [Thread-299546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:12:28.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:12:28.185 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:12:38.918 [DEBUG] [Thread-299547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:12:42.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:12:42.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:12:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:12:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 12, 6), 9.1, 54.99, 0.0, 14.63, 16.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:12:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:12:06
2025-12-24T09:12:43.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:12:43.517 [DEBUG] [Thread-299548] [transport.py] [_log()] starting thread (client mode): 0xf813d000
2025-12-24T09:12:43.518 [DEBUG] [Thread-299548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:12:43.531 [DEBUG] [Thread-299548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:12:43.531 [INFO] [Thread-299548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:12:43.537 [DEBUG] [Thread-299548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:12:43.537 [DEBUG] [Thread-299548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:12:43.537 [DEBUG] [Thread-299548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:12:43.537 [DEBUG] [Thread-299548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] client lang: <none>
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] server lang: <none>
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] kex follows: False
2025-12-24T09:12:43.538 [DEBUG] [Thread-299548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:12:43.539 [DEBUG] [Thread-299548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:12:43.539 [DEBUG] [Thread-299548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:12:43.539 [DEBUG] [Thread-299548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:12:43.539 [DEBUG] [Thread-299548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:12:43.539 [DEBUG] [Thread-299548] [transport.py] [_log()] Compression: none
2025-12-24T09:12:43.539 [DEBUG] [Thread-299548] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:12:43.575 [DEBUG] [Thread-299548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:12:43.580 [DEBUG] [Thread-299548] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:12:43.582 [DEBUG] [Thread-299548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:12:43.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:12:43.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:12:43.587 [DEBUG] [Thread-299548] [transport.py] [_log()] userauth is OK
2025-12-24T09:12:43.588 [DEBUG] [Thread-299548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:12:43.588 [DEBUG] [Thread-299548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:12:43.588 [DEBUG] [Thread-299548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:12:43.588 [DEBUG] [Thread-299548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:12:43.628 [INFO] [Thread-299548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:12:43.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:12:44.275 [DEBUG] [Thread-299548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:12:44.275 [DEBUG] [Thread-299548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:12:44.276 [DEBUG] [Thread-299548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:12:44.316 [DEBUG] [Thread-299548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:12:44.316 [DEBUG] [Thread-299548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:12:44.320 [DEBUG] [Thread-299548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:12:44.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:12:44.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:12:44.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:12:44.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:12:44.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:12:44.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:12:44.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:12:44.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:12:44.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:12:44.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.300072 -999.00  +17.00  13.56     58   +8.80 1 1 1 1 1   888    0 11.18 119.56 ----- 10.7 13.6 148.0 14.3 25.0 -26.0 24.3 -25.5 22.9 -25.1 23.4 -25.7
2025-12-24T09:12:44.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:12:44.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:12:44.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.300072
2025-12-24T09:12:44.358 [DEBUG] [Thread-299548] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:12:44.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:12:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:12:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:12:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:12:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:12:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:12:06', tmtdew=9.1, humidity=54.99, cloud=0.0, wind=14.63, temperature=16.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:12:06.221', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:12:44.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:12:44.464 [DEBUG] [Thread-299551] [transport.py] [_log()] starting thread (client mode): 0xf81559f0
2025-12-24T09:12:44.464 [DEBUG] [Thread-299551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:12:44.479 [DEBUG] [Thread-299551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:12:44.479 [INFO] [Thread-299551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:12:44.487 [DEBUG] [Thread-299551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:12:44.487 [DEBUG] [Thread-299551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:12:44.487 [DEBUG] [Thread-299551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:12:44.487 [DEBUG] [Thread-299551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:12:44.488 [DEBUG] [Thread-299551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:12:44.488 [DEBUG] [Thread-299551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:12:44.488 [DEBUG] [Thread-299551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:12:44.488 [DEBUG] [Thread-299551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:12:44.488 [DEBUG] [Thread-299551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:12:44.488 [DEBUG] [Thread-299551] [transport.py] [_log()] client lang: <none>
2025-12-24T09:12:44.489 [DEBUG] [Thread-299551] [transport.py] [_log()] server lang: <none>
2025-12-24T09:12:44.489 [DEBUG] [Thread-299551] [transport.py] [_log()] kex follows: False
2025-12-24T09:12:44.489 [DEBUG] [Thread-299551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:12:44.489 [DEBUG] [Thread-299551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:12:44.489 [DEBUG] [Thread-299551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:12:44.489 [DEBUG] [Thread-299551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:12:44.489 [DEBUG] [Thread-299551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:12:44.490 [DEBUG] [Thread-299551] [transport.py] [_log()] Compression: none
2025-12-24T09:12:44.490 [DEBUG] [Thread-299551] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:12:44.546 [DEBUG] [Thread-299551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:12:44.547 [DEBUG] [Thread-299551] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:12:44.548 [DEBUG] [Thread-299551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:12:44.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:12:44.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:12:44.605 [DEBUG] [Thread-299551] [transport.py] [_log()] userauth is OK
2025-12-24T09:12:44.606 [DEBUG] [Thread-299551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:12:44.606 [DEBUG] [Thread-299551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:12:44.607 [DEBUG] [Thread-299551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:12:44.607 [DEBUG] [Thread-299551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:12:44.625 [INFO] [Thread-299551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:12:44.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:12:44.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:12:45.450 [DEBUG] [Thread-299551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:12:45.450 [DEBUG] [Thread-299551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:12:45.497 [DEBUG] [Thread-299551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:12:45.497 [DEBUG] [Thread-299551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:12:45.505 [DEBUG] [Thread-299551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:12:45.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:12:45.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:12:45.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:12:45.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:12:45.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:12:45.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:12:45.538 [DEBUG] [Thread-299551] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:12:53.978 [DEBUG] [Thread-299553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:13:09.087 [DEBUG] [Thread-299554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:13:11.700 [DEBUG] [Thread-299555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:13:15.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:13:15.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:13:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:13:16.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 13, 12), 9.13, 54.9, 0.0, 15.4, 16.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:13:16.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:13:12
2025-12-24T09:13:16.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:13:16.774 [DEBUG] [Thread-299556] [transport.py] [_log()] starting thread (client mode): 0xf8154460
2025-12-24T09:13:16.775 [DEBUG] [Thread-299556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:13:16.790 [DEBUG] [Thread-299556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:13:16.790 [INFO] [Thread-299556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:13:16.796 [DEBUG] [Thread-299556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:13:16.797 [DEBUG] [Thread-299556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:13:16.797 [DEBUG] [Thread-299556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:13:16.797 [DEBUG] [Thread-299556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:13:16.797 [DEBUG] [Thread-299556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:13:16.797 [DEBUG] [Thread-299556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:13:16.797 [DEBUG] [Thread-299556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:13:16.797 [DEBUG] [Thread-299556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:13:16.797 [DEBUG] [Thread-299556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:13:16.798 [DEBUG] [Thread-299556] [transport.py] [_log()] client lang: <none>
2025-12-24T09:13:16.798 [DEBUG] [Thread-299556] [transport.py] [_log()] server lang: <none>
2025-12-24T09:13:16.798 [DEBUG] [Thread-299556] [transport.py] [_log()] kex follows: False
2025-12-24T09:13:16.798 [DEBUG] [Thread-299556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:13:16.799 [DEBUG] [Thread-299556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:13:16.799 [DEBUG] [Thread-299556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:13:16.799 [DEBUG] [Thread-299556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:13:16.799 [DEBUG] [Thread-299556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:13:16.799 [DEBUG] [Thread-299556] [transport.py] [_log()] Compression: none
2025-12-24T09:13:16.800 [DEBUG] [Thread-299556] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:13:16.841 [DEBUG] [Thread-299556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:13:16.846 [DEBUG] [Thread-299556] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:13:16.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:13:16.850 [DEBUG] [Thread-299556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:13:16.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:13:16.855 [DEBUG] [Thread-299556] [transport.py] [_log()] userauth is OK
2025-12-24T09:13:16.855 [DEBUG] [Thread-299556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:13:16.855 [DEBUG] [Thread-299556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:13:16.856 [DEBUG] [Thread-299556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:13:16.856 [DEBUG] [Thread-299556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:13:16.884 [INFO] [Thread-299556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:13:16.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:13:17.466 [DEBUG] [Thread-299556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:13:17.475 [DEBUG] [Thread-299556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:13:17.477 [DEBUG] [Thread-299556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:13:17.508 [DEBUG] [Thread-299556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:13:17.508 [DEBUG] [Thread-299556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:13:17.510 [DEBUG] [Thread-299556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:13:17.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:13:17.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:13:17.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:13:17.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:13:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:13:17.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:13:17.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:13:17.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:13:17.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:13:17.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.300419 -999.00  +17.10   4.99     58   +8.90 1 1 1 1 1   888    0 10.81 104.38 ----- 3.5 5.0 184.5 15.8 25.1 -26.0 24.3 -25.7 23.0 -24.1 23.5 -25.1
2025-12-24T09:13:17.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:13:17.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:13:17.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.300419
2025-12-24T09:13:17.539 [DEBUG] [Thread-299556] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:13:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:13:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:13:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:13:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:13:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:13:17.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:13:12', tmtdew=9.13, humidity=54.9, cloud=0.0, wind=15.4, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:12:36.202', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:13:17.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:13:17.642 [DEBUG] [Thread-299559] [transport.py] [_log()] starting thread (client mode): 0xf57bc9a0
2025-12-24T09:13:17.642 [DEBUG] [Thread-299559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:13:17.656 [DEBUG] [Thread-299559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:13:17.656 [INFO] [Thread-299559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:13:17.664 [DEBUG] [Thread-299559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:13:17.664 [DEBUG] [Thread-299559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:13:17.664 [DEBUG] [Thread-299559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:13:17.664 [DEBUG] [Thread-299559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:13:17.664 [DEBUG] [Thread-299559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] client lang: <none>
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] server lang: <none>
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] kex follows: False
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] Compression: none
2025-12-24T09:13:17.665 [DEBUG] [Thread-299559] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:13:17.721 [DEBUG] [Thread-299559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:13:17.722 [DEBUG] [Thread-299559] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:13:17.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:13:17.723 [DEBUG] [Thread-299559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:13:17.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:13:17.777 [DEBUG] [Thread-299559] [transport.py] [_log()] userauth is OK
2025-12-24T09:13:17.778 [DEBUG] [Thread-299559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:13:17.778 [DEBUG] [Thread-299559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:13:17.778 [DEBUG] [Thread-299559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:13:17.778 [DEBUG] [Thread-299559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:13:17.796 [INFO] [Thread-299559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:13:17.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:13:17.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:13:18.638 [DEBUG] [Thread-299559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:13:18.638 [DEBUG] [Thread-299559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:13:18.677 [DEBUG] [Thread-299559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:13:18.677 [DEBUG] [Thread-299559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:13:18.687 [DEBUG] [Thread-299559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:13:18.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:13:18.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:13:18.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:13:18.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:13:18.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:13:18.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:13:18.724 [DEBUG] [Thread-299559] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:13:24.161 [DEBUG] [Thread-299561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:13:28.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:13:28.327 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:13:39.282 [DEBUG] [Thread-299562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:13:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:13:48.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:13:48.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:13:49.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 13, 45), 9.25, 54.63, 0.0, 14.58, 16.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:13:49.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:13:45
2025-12-24T09:13:49.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:13:49.954 [DEBUG] [Thread-299563] [transport.py] [_log()] starting thread (client mode): 0xf57bc430
2025-12-24T09:13:49.954 [DEBUG] [Thread-299563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:13:49.968 [DEBUG] [Thread-299563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:13:49.968 [INFO] [Thread-299563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:13:49.974 [DEBUG] [Thread-299563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:13:49.974 [DEBUG] [Thread-299563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:13:49.974 [DEBUG] [Thread-299563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:13:49.974 [DEBUG] [Thread-299563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:13:49.974 [DEBUG] [Thread-299563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:13:49.975 [DEBUG] [Thread-299563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:13:49.975 [DEBUG] [Thread-299563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:13:49.975 [DEBUG] [Thread-299563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:13:49.975 [DEBUG] [Thread-299563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:13:49.975 [DEBUG] [Thread-299563] [transport.py] [_log()] client lang: <none>
2025-12-24T09:13:49.975 [DEBUG] [Thread-299563] [transport.py] [_log()] server lang: <none>
2025-12-24T09:13:49.975 [DEBUG] [Thread-299563] [transport.py] [_log()] kex follows: False
2025-12-24T09:13:49.975 [DEBUG] [Thread-299563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:13:49.976 [DEBUG] [Thread-299563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:13:49.976 [DEBUG] [Thread-299563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:13:49.976 [DEBUG] [Thread-299563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:13:49.976 [DEBUG] [Thread-299563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:13:49.977 [DEBUG] [Thread-299563] [transport.py] [_log()] Compression: none
2025-12-24T09:13:49.977 [DEBUG] [Thread-299563] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:13:50.012 [DEBUG] [Thread-299563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:13:50.017 [DEBUG] [Thread-299563] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:13:50.019 [DEBUG] [Thread-299563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:13:50.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:13:50.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:13:50.024 [DEBUG] [Thread-299563] [transport.py] [_log()] userauth is OK
2025-12-24T09:13:50.024 [DEBUG] [Thread-299563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:13:50.025 [DEBUG] [Thread-299563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:13:50.025 [DEBUG] [Thread-299563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:13:50.025 [DEBUG] [Thread-299563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:13:50.050 [INFO] [Thread-299563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:13:50.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:13:50.637 [DEBUG] [Thread-299563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:13:50.637 [DEBUG] [Thread-299563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:13:50.639 [DEBUG] [Thread-299563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:13:50.678 [DEBUG] [Thread-299563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:13:50.678 [DEBUG] [Thread-299563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:13:50.682 [DEBUG] [Thread-299563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:13:50.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:13:50.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:13:50.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:13:50.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:13:50.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:13:50.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:13:50.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:13:50.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:13:50.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:13:50.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.300766 -999.00  +17.40  16.01     58   +9.00 1 1 1 1 1   888    0 10.81 102.30 ----- 12.7 16.0 118.6 20.6 25.2 -26.1 24.4 -25.7 23.1 -24.9 23.5 -25.4
2025-12-24T09:13:50.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:13:50.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:13:50.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.300766
2025-12-24T09:13:50.716 [DEBUG] [Thread-299563] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:13:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:13:50.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:13:50.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:13:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:13:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:13:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:13:45', tmtdew=9.25, humidity=54.63, cloud=0.0, wind=14.58, temperature=16.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:13:06.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:13:50.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:13:50.832 [DEBUG] [Thread-299566] [transport.py] [_log()] starting thread (client mode): 0xf575cb20
2025-12-24T09:13:50.833 [DEBUG] [Thread-299566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:13:50.847 [DEBUG] [Thread-299566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:13:50.847 [INFO] [Thread-299566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] client lang: <none>
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] server lang: <none>
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] kex follows: False
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:13:50.855 [DEBUG] [Thread-299566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:13:50.856 [DEBUG] [Thread-299566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:13:50.856 [DEBUG] [Thread-299566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:13:50.856 [DEBUG] [Thread-299566] [transport.py] [_log()] Compression: none
2025-12-24T09:13:50.856 [DEBUG] [Thread-299566] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:13:50.911 [DEBUG] [Thread-299566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:13:50.912 [DEBUG] [Thread-299566] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:13:50.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:13:50.913 [DEBUG] [Thread-299566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:13:50.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:13:50.969 [DEBUG] [Thread-299566] [transport.py] [_log()] userauth is OK
2025-12-24T09:13:50.970 [DEBUG] [Thread-299566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:13:50.970 [DEBUG] [Thread-299566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:13:50.970 [DEBUG] [Thread-299566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:13:50.970 [DEBUG] [Thread-299566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:13:50.991 [INFO] [Thread-299566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:13:50.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:13:50.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:13:51.822 [DEBUG] [Thread-299566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:13:51.822 [DEBUG] [Thread-299566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:13:51.861 [DEBUG] [Thread-299566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:13:51.861 [DEBUG] [Thread-299566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:13:51.870 [DEBUG] [Thread-299566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:13:51.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:13:51.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:13:51.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:13:51.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:13:51.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:13:51.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:13:51.903 [DEBUG] [Thread-299566] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:13:54.342 [DEBUG] [Thread-299568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:14:09.422 [DEBUG] [Thread-299569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:14:11.915 [DEBUG] [Thread-299570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:14:21.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:14:21.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:14:21.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
2025-12-24T09:14:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 14, 18), 9.02, 55.43, 0.0, 12.83, 16.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:14:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:14:18
2025-12-24T09:14:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:14:23.180 [DEBUG] [Thread-299571] [transport.py] [_log()] starting thread (client mode): 0xf574fbe0
2025-12-24T09:14:23.181 [DEBUG] [Thread-299571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:14:23.181 [DEBUG] [Thread-299571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:14:23.181 [INFO] [Thread-299571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] client lang: <none>
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] server lang: <none>
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] kex follows: False
2025-12-24T09:14:23.186 [DEBUG] [Thread-299571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:14:23.187 [DEBUG] [Thread-299571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:14:23.187 [DEBUG] [Thread-299571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:14:23.187 [DEBUG] [Thread-299571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:14:23.187 [DEBUG] [Thread-299571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:14:23.187 [DEBUG] [Thread-299571] [transport.py] [_log()] Compression: none
2025-12-24T09:14:23.187 [DEBUG] [Thread-299571] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:14:23.222 [DEBUG] [Thread-299571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:14:23.226 [DEBUG] [Thread-299571] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:14:23.228 [DEBUG] [Thread-299571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:14:23.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:14:23.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:14:23.233 [DEBUG] [Thread-299571] [transport.py] [_log()] userauth is OK
2025-12-24T09:14:23.233 [DEBUG] [Thread-299571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:14:23.234 [DEBUG] [Thread-299571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:14:23.234 [DEBUG] [Thread-299571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:14:23.234 [DEBUG] [Thread-299571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:14:23.268 [INFO] [Thread-299571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:14:23.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:14:23.920 [DEBUG] [Thread-299571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:14:23.920 [DEBUG] [Thread-299571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:14:23.922 [DEBUG] [Thread-299571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:14:23.959 [DEBUG] [Thread-299571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:14:23.960 [DEBUG] [Thread-299571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:14:23.963 [DEBUG] [Thread-299571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:14:23.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:14:23.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:14:23.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:14:23.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:14:23.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:14:23.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:14:23.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:14:23.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:14:23.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:14:23.991 [DEBUG] [Thread-299571] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:14:23.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.301113 -999.00  +17.40  12.74     57   +8.80 1 1 1 1 1   888    0 10.66 98.19 ----- 12.4 12.7 137.4 18.1 25.2 -26.6 24.4 -26.1 23.1 -25.4 23.5 -26.7
2025-12-24T09:14:23.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:14:23.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:14:23.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.301113
2025-12-24T09:14:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:14:24.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:14:24.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:14:24.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:14:24.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:14:24.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:14:18', tmtdew=9.02, humidity=55.43, cloud=0.0, wind=12.83, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:13:36.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:14:24.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:14:24.123 [DEBUG] [Thread-299574] [transport.py] [_log()] starting thread (client mode): 0xf574c8e0
2025-12-24T09:14:24.123 [DEBUG] [Thread-299574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:14:24.137 [DEBUG] [Thread-299574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:14:24.137 [INFO] [Thread-299574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:14:24.144 [DEBUG] [Thread-299574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:14:24.144 [DEBUG] [Thread-299574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:14:24.144 [DEBUG] [Thread-299574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] client lang: <none>
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] server lang: <none>
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] kex follows: False
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] Compression: none
2025-12-24T09:14:24.145 [DEBUG] [Thread-299574] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:14:24.201 [DEBUG] [Thread-299574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:14:24.202 [DEBUG] [Thread-299574] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:14:24.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:14:24.203 [DEBUG] [Thread-299574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:14:24.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:14:24.257 [DEBUG] [Thread-299574] [transport.py] [_log()] userauth is OK
2025-12-24T09:14:24.257 [DEBUG] [Thread-299574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:14:24.257 [DEBUG] [Thread-299574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:14:24.257 [DEBUG] [Thread-299574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:14:24.257 [DEBUG] [Thread-299574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:14:24.271 [INFO] [Thread-299574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:14:24.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:14:24.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:14:24.483 [DEBUG] [Thread-299576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:14:25.097 [DEBUG] [Thread-299574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:14:25.097 [DEBUG] [Thread-299574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:14:25.145 [DEBUG] [Thread-299574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:14:25.145 [DEBUG] [Thread-299574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:14:25.153 [DEBUG] [Thread-299574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:14:25.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:14:25.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:14:25.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:14:25.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:14:25.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:14:25.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:14:25.189 [DEBUG] [Thread-299574] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:14:28.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:14:28.479 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:14:39.616 [DEBUG] [Thread-299577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:14:54.664 [DEBUG] [Thread-299578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:14:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:14:55.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:14:55.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
2025-12-24T09:14:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 14, 51), 9.47, 53.56, 0.0, 10.22, 16.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:14:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:14:51
2025-12-24T09:14:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:14:56.478 [DEBUG] [Thread-299579] [transport.py] [_log()] starting thread (client mode): 0xf813ceb0
2025-12-24T09:14:56.479 [DEBUG] [Thread-299579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:14:56.500 [DEBUG] [Thread-299579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:14:56.500 [INFO] [Thread-299579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:14:56.503 [DEBUG] [Thread-299579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] client lang: <none>
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] server lang: <none>
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] kex follows: False
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] Compression: none
2025-12-24T09:14:56.504 [DEBUG] [Thread-299579] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:14:56.525 [DEBUG] [Thread-299579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:14:56.525 [DEBUG] [Thread-299579] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:14:56.526 [DEBUG] [Thread-299579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:14:56.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:14:56.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:14:56.526 [DEBUG] [Thread-299579] [transport.py] [_log()] userauth is OK
2025-12-24T09:14:56.526 [DEBUG] [Thread-299579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:14:56.526 [DEBUG] [Thread-299579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:14:56.526 [DEBUG] [Thread-299579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:14:56.526 [DEBUG] [Thread-299579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:14:56.536 [INFO] [Thread-299579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:14:56.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:14:57.345 [DEBUG] [Thread-299579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:14:57.345 [DEBUG] [Thread-299579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:14:57.345 [DEBUG] [Thread-299579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:14:57.386 [DEBUG] [Thread-299579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:14:57.386 [DEBUG] [Thread-299579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:14:57.388 [DEBUG] [Thread-299579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:14:57.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:14:57.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:14:57.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:14:57.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:14:57.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:14:57.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:14:57.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:14:57.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:14:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:14:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.301461 -999.00  +17.30  12.43     57   +8.80 1 1 1 1 1   888    0 10.79 101.62 ----- 16.1 12.4 129.6 15.7 25.2 -26.3 24.5 -25.8 23.1 -24.6 23.6 -25.8
2025-12-24T09:14:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:14:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:14:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.301461
2025-12-24T09:14:57.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:14:57.408 [DEBUG] [Thread-299579] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:14:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:14:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:14:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:14:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:14:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:14:51', tmtdew=9.47, humidity=53.56, cloud=0.0, wind=10.22, temperature=16.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:14:06.230', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:14:57.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:14:57.497 [DEBUG] [Thread-299582] [transport.py] [_log()] starting thread (client mode): 0xf8157670
2025-12-24T09:14:57.497 [DEBUG] [Thread-299582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:14:57.511 [DEBUG] [Thread-299582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:14:57.511 [INFO] [Thread-299582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] client lang: <none>
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] server lang: <none>
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] kex follows: False
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] Compression: none
2025-12-24T09:14:57.519 [DEBUG] [Thread-299582] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:14:57.576 [DEBUG] [Thread-299582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:14:57.576 [DEBUG] [Thread-299582] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:14:57.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:14:57.576 [DEBUG] [Thread-299582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:14:57.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:14:57.633 [DEBUG] [Thread-299582] [transport.py] [_log()] userauth is OK
2025-12-24T09:14:57.633 [DEBUG] [Thread-299582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:14:57.633 [DEBUG] [Thread-299582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:14:57.633 [DEBUG] [Thread-299582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:14:57.633 [DEBUG] [Thread-299582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:14:57.649 [INFO] [Thread-299582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:14:57.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:14:57.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:14:58.475 [DEBUG] [Thread-299582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:14:58.475 [DEBUG] [Thread-299582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:14:58.522 [DEBUG] [Thread-299582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:14:58.522 [DEBUG] [Thread-299582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:14:58.531 [DEBUG] [Thread-299582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:14:58.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:14:58.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:14:58.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:14:58.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:14:58.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:14:58.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:14:58.563 [DEBUG] [Thread-299582] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:15:09.713 [DEBUG] [Thread-299584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:15:12.212 [DEBUG] [Thread-299585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:15:24.807 [DEBUG] [Thread-299586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:15:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:15:28.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:15:28.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:15:28.624 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:15:28.626 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:15:29.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 15, 24), 9.53, 53.4, 0.0, 10.27, 17.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:15:29.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:15:24
2025-12-24T09:15:29.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:15:29.845 [DEBUG] [Thread-299587] [transport.py] [_log()] starting thread (client mode): 0xf57bd4e0
2025-12-24T09:15:29.845 [DEBUG] [Thread-299587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:15:29.857 [DEBUG] [Thread-299587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:15:29.857 [INFO] [Thread-299587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:15:29.862 [DEBUG] [Thread-299587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:15:29.862 [DEBUG] [Thread-299587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:15:29.862 [DEBUG] [Thread-299587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:15:29.862 [DEBUG] [Thread-299587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:15:29.862 [DEBUG] [Thread-299587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:15:29.862 [DEBUG] [Thread-299587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:15:29.863 [DEBUG] [Thread-299587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:15:29.863 [DEBUG] [Thread-299587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:15:29.863 [DEBUG] [Thread-299587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:15:29.863 [DEBUG] [Thread-299587] [transport.py] [_log()] client lang: <none>
2025-12-24T09:15:29.863 [DEBUG] [Thread-299587] [transport.py] [_log()] server lang: <none>
2025-12-24T09:15:29.863 [DEBUG] [Thread-299587] [transport.py] [_log()] kex follows: False
2025-12-24T09:15:29.863 [DEBUG] [Thread-299587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:15:29.864 [DEBUG] [Thread-299587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:15:29.864 [DEBUG] [Thread-299587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:15:29.864 [DEBUG] [Thread-299587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:15:29.864 [DEBUG] [Thread-299587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:15:29.864 [DEBUG] [Thread-299587] [transport.py] [_log()] Compression: none
2025-12-24T09:15:29.864 [DEBUG] [Thread-299587] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:15:29.905 [DEBUG] [Thread-299587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:15:29.910 [DEBUG] [Thread-299587] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:15:29.912 [DEBUG] [Thread-299587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:15:29.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:15:29.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:15:29.917 [DEBUG] [Thread-299587] [transport.py] [_log()] userauth is OK
2025-12-24T09:15:29.917 [DEBUG] [Thread-299587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:15:29.918 [DEBUG] [Thread-299587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:15:29.918 [DEBUG] [Thread-299587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:15:29.918 [DEBUG] [Thread-299587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:15:29.946 [INFO] [Thread-299587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:15:29.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:15:30.593 [DEBUG] [Thread-299587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:15:30.593 [DEBUG] [Thread-299587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:15:30.594 [DEBUG] [Thread-299587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:15:30.634 [DEBUG] [Thread-299587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:15:30.634 [DEBUG] [Thread-299587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:15:30.637 [DEBUG] [Thread-299587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:15:30.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:15:30.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:15:30.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:15:30.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:15:30.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:15:30.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:15:30.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:15:30.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:15:30.663 [DEBUG] [Thread-299587] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:15:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:15:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.301808 -999.00  +17.50  13.10     56   +8.70 1 1 1 1 1   888    0 11.06 106.62 ----- 13.8 13.1 120.0 17.1 25.1 -27.0 24.6 -26.0 23.2 -25.7 23.6 -26.5
2025-12-24T09:15:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:15:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:15:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.301808
2025-12-24T09:15:30.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:15:30.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:15:30.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:15:30.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:15:30.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:15:30.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:15:24', tmtdew=9.53, humidity=53.4, cloud=0.0, wind=10.27, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:14:36.211', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:15:30.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:15:30.794 [DEBUG] [Thread-299590] [transport.py] [_log()] starting thread (client mode): 0xf574d510
2025-12-24T09:15:30.794 [DEBUG] [Thread-299590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:15:30.809 [DEBUG] [Thread-299590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:15:30.809 [INFO] [Thread-299590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:15:30.816 [DEBUG] [Thread-299590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:15:30.816 [DEBUG] [Thread-299590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:15:30.816 [DEBUG] [Thread-299590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:15:30.816 [DEBUG] [Thread-299590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:15:30.816 [DEBUG] [Thread-299590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:15:30.816 [DEBUG] [Thread-299590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] client lang: <none>
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] server lang: <none>
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] kex follows: False
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] Compression: none
2025-12-24T09:15:30.817 [DEBUG] [Thread-299590] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:15:30.872 [DEBUG] [Thread-299590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:15:30.873 [DEBUG] [Thread-299590] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:15:30.873 [DEBUG] [Thread-299590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:15:30.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:15:30.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:15:30.933 [DEBUG] [Thread-299590] [transport.py] [_log()] userauth is OK
2025-12-24T09:15:30.933 [DEBUG] [Thread-299590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:15:30.933 [DEBUG] [Thread-299590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:15:30.933 [DEBUG] [Thread-299590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:15:30.933 [DEBUG] [Thread-299590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:15:30.954 [INFO] [Thread-299590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:15:30.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:15:30.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:15:31.799 [DEBUG] [Thread-299590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:15:31.799 [DEBUG] [Thread-299590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:15:31.847 [DEBUG] [Thread-299590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:15:31.847 [DEBUG] [Thread-299590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:15:31.856 [DEBUG] [Thread-299590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:15:31.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:15:31.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:15:31.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:15:31.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:15:31.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:15:31.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:15:31.894 [DEBUG] [Thread-299590] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:15:39.880 [DEBUG] [Thread-299592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:15:54.992 [DEBUG] [Thread-299593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:16:01.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:16:01.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:16:01.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:16:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 15, 57), 9.42, 53.57, 0.0, 10.82, 17.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:16:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:15:57
2025-12-24T09:16:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:16:03.293 [DEBUG] [Thread-299594] [transport.py] [_log()] starting thread (client mode): 0xf574e800
2025-12-24T09:16:03.294 [DEBUG] [Thread-299594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:16:03.304 [DEBUG] [Thread-299594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:16:03.305 [INFO] [Thread-299594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:16:03.311 [DEBUG] [Thread-299594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:16:03.311 [DEBUG] [Thread-299594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:16:03.311 [DEBUG] [Thread-299594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:16:03.311 [DEBUG] [Thread-299594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] client lang: <none>
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] server lang: <none>
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] kex follows: False
2025-12-24T09:16:03.312 [DEBUG] [Thread-299594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:16:03.313 [DEBUG] [Thread-299594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:16:03.314 [DEBUG] [Thread-299594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:16:03.314 [DEBUG] [Thread-299594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:16:03.314 [DEBUG] [Thread-299594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:16:03.314 [DEBUG] [Thread-299594] [transport.py] [_log()] Compression: none
2025-12-24T09:16:03.314 [DEBUG] [Thread-299594] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:16:03.349 [DEBUG] [Thread-299594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:16:03.354 [DEBUG] [Thread-299594] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:16:03.356 [DEBUG] [Thread-299594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:16:03.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:16:03.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:16:03.360 [DEBUG] [Thread-299594] [transport.py] [_log()] userauth is OK
2025-12-24T09:16:03.361 [DEBUG] [Thread-299594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:16:03.361 [DEBUG] [Thread-299594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:16:03.361 [DEBUG] [Thread-299594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:16:03.361 [DEBUG] [Thread-299594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:16:03.400 [INFO] [Thread-299594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:16:03.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:16:04.234 [DEBUG] [Thread-299594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:16:04.234 [DEBUG] [Thread-299594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:16:04.244 [DEBUG] [Thread-299594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:16:04.276 [DEBUG] [Thread-299594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:16:04.276 [DEBUG] [Thread-299594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:16:04.278 [DEBUG] [Thread-299594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:16:04.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:16:04.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:16:04.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:16:04.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:16:04.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:16:04.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:16:04.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:16:04.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:16:04.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:16:04.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.302502 -999.00  +17.10   9.72     57   +8.70 1 1 1 1 1   888    0 10.98 100.87 ----- 9.7 9.7 135.0 13.7 25.3 -26.2 24.7 -25.8 23.3 -25.5 23.6 -27.1
2025-12-24T09:16:04.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:16:04.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:16:04.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.302502
2025-12-24T09:16:04.306 [DEBUG] [Thread-299594] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:16:04.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:16:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:16:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:16:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:16:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:16:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:15:57', tmtdew=9.42, humidity=53.57, cloud=0.0, wind=10.82, temperature=17.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:15:36.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:16:04.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:16:04.404 [DEBUG] [Thread-299597] [transport.py] [_log()] starting thread (client mode): 0xf5796440
2025-12-24T09:16:04.404 [DEBUG] [Thread-299597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:16:04.418 [DEBUG] [Thread-299597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:16:04.418 [INFO] [Thread-299597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] client lang: <none>
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] server lang: <none>
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] kex follows: False
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] Compression: none
2025-12-24T09:16:04.426 [DEBUG] [Thread-299597] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:16:04.485 [DEBUG] [Thread-299597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:16:04.485 [DEBUG] [Thread-299597] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:16:04.485 [DEBUG] [Thread-299597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:16:04.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:16:04.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:16:04.545 [DEBUG] [Thread-299597] [transport.py] [_log()] userauth is OK
2025-12-24T09:16:04.546 [DEBUG] [Thread-299597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:16:04.546 [DEBUG] [Thread-299597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:16:04.546 [DEBUG] [Thread-299597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:16:04.546 [DEBUG] [Thread-299597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:16:04.563 [INFO] [Thread-299597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:16:04.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:16:04.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:16:05.414 [DEBUG] [Thread-299597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:16:05.414 [DEBUG] [Thread-299597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:16:05.453 [DEBUG] [Thread-299597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:16:05.453 [DEBUG] [Thread-299597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:16:05.461 [DEBUG] [Thread-299597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:16:05.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:16:05.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:16: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
2025-12-24T09:16:05.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:16:05.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:16:05.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:16:05.503 [DEBUG] [Thread-299597] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:16:10.029 [DEBUG] [Thread-299599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:16:12.452 [DEBUG] [Thread-299600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:16:25.169 [DEBUG] [Thread-299601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:16:28.777 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:16:28.778 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:16:35.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:16:35.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:16:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:16:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 16, 30), 9.44, 53.52, 0.0, 13.41, 17.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:16:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:16:30
2025-12-24T09:16:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:16:36.771 [DEBUG] [Thread-299602] [transport.py] [_log()] starting thread (client mode): 0xf5741db0
2025-12-24T09:16:36.771 [DEBUG] [Thread-299602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:16:36.784 [DEBUG] [Thread-299602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:16:36.784 [INFO] [Thread-299602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:16:36.789 [DEBUG] [Thread-299602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:16:36.789 [DEBUG] [Thread-299602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] client lang: <none>
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] server lang: <none>
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] kex follows: False
2025-12-24T09:16:36.790 [DEBUG] [Thread-299602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:16:36.791 [DEBUG] [Thread-299602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:16:36.791 [DEBUG] [Thread-299602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:16:36.791 [DEBUG] [Thread-299602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:16:36.791 [DEBUG] [Thread-299602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:16:36.791 [DEBUG] [Thread-299602] [transport.py] [_log()] Compression: none
2025-12-24T09:16:36.792 [DEBUG] [Thread-299602] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:16:36.831 [DEBUG] [Thread-299602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:16:36.835 [DEBUG] [Thread-299602] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:16:36.838 [DEBUG] [Thread-299602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:16:36.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:16:36.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:16:36.842 [DEBUG] [Thread-299602] [transport.py] [_log()] userauth is OK
2025-12-24T09:16:36.843 [DEBUG] [Thread-299602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:16:36.843 [DEBUG] [Thread-299602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:16:36.843 [DEBUG] [Thread-299602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:16:36.843 [DEBUG] [Thread-299602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:16:36.883 [INFO] [Thread-299602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:16:36.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:16:37.538 [DEBUG] [Thread-299602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:16:37.538 [DEBUG] [Thread-299602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:16:37.540 [DEBUG] [Thread-299602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:16:37.579 [DEBUG] [Thread-299602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:16:37.580 [DEBUG] [Thread-299602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:16:37.583 [DEBUG] [Thread-299602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:16:37.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:16:37.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:16:37.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:16:37.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:16:37.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:16:37.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:16:37.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:16:37.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:16:37.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:16:37.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.302849 -999.00  +17.20  12.20     57   +8.70 1 1 1 1 1   888    0 10.43 87.58 ----- 12.0 12.2 146.6 14.6 25.3 -26.9 24.8 -26.3 23.2 -25.9 23.7 -26.8
2025-12-24T09:16:37.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:16:37.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:16:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.302849
2025-12-24T09:16:37.618 [DEBUG] [Thread-299602] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:16:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:16:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:16:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:16:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:16:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:16:37.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:16:30', tmtdew=9.44, humidity=53.52, cloud=0.0, wind=13.41, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:16:06.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:16:37.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:16:37.739 [DEBUG] [Thread-299605] [transport.py] [_log()] starting thread (client mode): 0xf5740130
2025-12-24T09:16:37.739 [DEBUG] [Thread-299605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:16:37.753 [DEBUG] [Thread-299605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:16:37.753 [INFO] [Thread-299605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:16:37.761 [DEBUG] [Thread-299605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] client lang: <none>
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] server lang: <none>
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] kex follows: False
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] Compression: none
2025-12-24T09:16:37.762 [DEBUG] [Thread-299605] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:16:37.822 [DEBUG] [Thread-299605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:16:37.823 [DEBUG] [Thread-299605] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:16:37.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:16:37.824 [DEBUG] [Thread-299605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:16:37.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:16:37.881 [DEBUG] [Thread-299605] [transport.py] [_log()] userauth is OK
2025-12-24T09:16:37.882 [DEBUG] [Thread-299605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:16:37.882 [DEBUG] [Thread-299605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:16:37.882 [DEBUG] [Thread-299605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:16:37.882 [DEBUG] [Thread-299605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:16:37.906 [INFO] [Thread-299605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:16:37.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:16:37.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:16:38.759 [DEBUG] [Thread-299605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:16:38.759 [DEBUG] [Thread-299605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:16:38.807 [DEBUG] [Thread-299605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:16:38.807 [DEBUG] [Thread-299605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:16:38.816 [DEBUG] [Thread-299605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:16:38.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:16:38.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:16:38.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:16:38.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:16:38.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:16:38.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:16:38.859 [DEBUG] [Thread-299605] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:16:40.262 [DEBUG] [Thread-299607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:16:55.335 [DEBUG] [Thread-299608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:17:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:17:08.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:17:08.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
2025-12-24T09:17:09.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 17, 4), 9.52, 53.22, 0.0, 13.87, 17.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:17:09.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:17:04
2025-12-24T09:17:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:17:10.151 [DEBUG] [Thread-299609] [transport.py] [_log()] starting thread (client mode): 0xf57434c0
2025-12-24T09:17:10.152 [DEBUG] [Thread-299609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:17:10.152 [DEBUG] [Thread-299609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:17:10.152 [INFO] [Thread-299609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:17:10.157 [DEBUG] [Thread-299609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:17:10.158 [DEBUG] [Thread-299609] [transport.py] [_log()] client lang: <none>
2025-12-24T09:17:10.158 [DEBUG] [Thread-299609] [transport.py] [_log()] server lang: <none>
2025-12-24T09:17:10.158 [DEBUG] [Thread-299609] [transport.py] [_log()] kex follows: False
2025-12-24T09:17:10.158 [DEBUG] [Thread-299609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:17:10.158 [DEBUG] [Thread-299609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:17:10.158 [DEBUG] [Thread-299609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:17:10.159 [DEBUG] [Thread-299609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:17:10.159 [DEBUG] [Thread-299609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:17:10.159 [DEBUG] [Thread-299609] [transport.py] [_log()] Compression: none
2025-12-24T09:17:10.159 [DEBUG] [Thread-299609] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:17:10.195 [DEBUG] [Thread-299609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:17:10.199 [DEBUG] [Thread-299609] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:17:10.201 [DEBUG] [Thread-299609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:17:10.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:17:10.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:17:10.206 [DEBUG] [Thread-299609] [transport.py] [_log()] userauth is OK
2025-12-24T09:17:10.206 [DEBUG] [Thread-299609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:17:10.206 [DEBUG] [Thread-299609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:17:10.206 [DEBUG] [Thread-299609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:17:10.207 [DEBUG] [Thread-299609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:17:10.235 [INFO] [Thread-299609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:17:10.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:17:10.402 [DEBUG] [Thread-299611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:17:10.989 [DEBUG] [Thread-299609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:17:10.989 [DEBUG] [Thread-299609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:17:11.000 [DEBUG] [Thread-299609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:17:11.031 [DEBUG] [Thread-299609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:17:11.031 [DEBUG] [Thread-299609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:17:11.034 [DEBUG] [Thread-299609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:17:11.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:17:11.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:17:11.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:17:11.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:17:11.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:17:11.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:17:11.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:17:11.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:17:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:17:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.303197 -999.00  +17.10   9.40     57   +8.70 1 1 1 1 1   888    0 10.20 77.13 ----- 7.5 9.4 148.6 13.1 25.4 -26.0 24.8 -25.8 23.3 -24.7 23.7 -26.0
2025-12-24T09:17:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:17:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:17:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.303197
2025-12-24T09:17:11.066 [DEBUG] [Thread-299609] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:17:11.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:17:11.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:17:11.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:17:11.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:17:11.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:17:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:17:04', tmtdew=9.52, humidity=53.22, cloud=0.0, wind=13.87, temperature=17.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:16:36.221', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:17:11.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:17:11.180 [DEBUG] [Thread-299613] [transport.py] [_log()] starting thread (client mode): 0xf57bd210
2025-12-24T09:17:11.180 [DEBUG] [Thread-299613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:17:11.195 [DEBUG] [Thread-299613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:17:11.196 [INFO] [Thread-299613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:17:11.203 [DEBUG] [Thread-299613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:17:11.203 [DEBUG] [Thread-299613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] client lang: <none>
2025-12-24T09:17:11.204 [DEBUG] [Thread-299613] [transport.py] [_log()] server lang: <none>
2025-12-24T09:17:11.205 [DEBUG] [Thread-299613] [transport.py] [_log()] kex follows: False
2025-12-24T09:17:11.205 [DEBUG] [Thread-299613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:17:11.205 [DEBUG] [Thread-299613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:17:11.205 [DEBUG] [Thread-299613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:17:11.205 [DEBUG] [Thread-299613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:17:11.205 [DEBUG] [Thread-299613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:17:11.205 [DEBUG] [Thread-299613] [transport.py] [_log()] Compression: none
2025-12-24T09:17:11.206 [DEBUG] [Thread-299613] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:17:11.262 [DEBUG] [Thread-299613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:17:11.263 [DEBUG] [Thread-299613] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:17:11.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:17:11.265 [DEBUG] [Thread-299613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:17:11.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:17:11.321 [DEBUG] [Thread-299613] [transport.py] [_log()] userauth is OK
2025-12-24T09:17:11.322 [DEBUG] [Thread-299613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:17:11.322 [DEBUG] [Thread-299613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:17:11.322 [DEBUG] [Thread-299613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:17:11.322 [DEBUG] [Thread-299613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:17:11.340 [INFO] [Thread-299613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:17:11.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:17:11.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:17:12.179 [DEBUG] [Thread-299613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:17:12.180 [DEBUG] [Thread-299613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:17:12.218 [DEBUG] [Thread-299613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:17:12.218 [DEBUG] [Thread-299613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:17:12.227 [DEBUG] [Thread-299613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:17:12.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:17:12.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:17:12.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:17:12.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:17:12.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:17:12.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:17:12.271 [DEBUG] [Thread-299613] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:17:12.831 [DEBUG] [Thread-299615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:17:25.474 [DEBUG] [Thread-299616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:17:28.929 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:17:28.930 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:17:40.579 [DEBUG] [Thread-299617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:17:42.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:17:42.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:17:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:17:43.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 17, 37), 9.58, 53.0, 0.0, 11.19, 17.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:17:43.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:17:37
2025-12-24T09:17:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:17:43.494 [DEBUG] [Thread-299618] [transport.py] [_log()] starting thread (client mode): 0xf5742ec0
2025-12-24T09:17:43.495 [DEBUG] [Thread-299618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:17:43.502 [DEBUG] [Thread-299618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:17:43.502 [INFO] [Thread-299618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] client lang: <none>
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] server lang: <none>
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] kex follows: False
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:17:43.508 [DEBUG] [Thread-299618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:17:43.509 [DEBUG] [Thread-299618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:17:43.509 [DEBUG] [Thread-299618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:17:43.509 [DEBUG] [Thread-299618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:17:43.509 [DEBUG] [Thread-299618] [transport.py] [_log()] Compression: none
2025-12-24T09:17:43.509 [DEBUG] [Thread-299618] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:17:43.545 [DEBUG] [Thread-299618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:17:43.550 [DEBUG] [Thread-299618] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:17:43.552 [DEBUG] [Thread-299618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:17:43.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:17:43.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:17:43.556 [DEBUG] [Thread-299618] [transport.py] [_log()] userauth is OK
2025-12-24T09:17:43.556 [DEBUG] [Thread-299618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:17:43.556 [DEBUG] [Thread-299618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:17:43.556 [DEBUG] [Thread-299618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:17:43.556 [DEBUG] [Thread-299618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:17:43.575 [INFO] [Thread-299618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:17:43.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:17:44.181 [DEBUG] [Thread-299618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:17:44.181 [DEBUG] [Thread-299618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:17:44.181 [DEBUG] [Thread-299618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:17:44.222 [DEBUG] [Thread-299618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:17:44.222 [DEBUG] [Thread-299618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:17:44.224 [DEBUG] [Thread-299618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:17:44.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:17:44.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:17:44.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:17:44.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:17:44.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:17:44.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:17:44.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:17:44.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:17:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:17:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.303544 -999.00  +17.10   3.61     57   +8.70 1 1 1 1 1   888    0 10.18 76.30 ----- 6.8 3.6 136.7 12.7 25.4 -26.0 24.8 -25.1 23.4 -24.5 23.9 -25.7
2025-12-24T09:17:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:17:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:17:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.303544
2025-12-24T09:17:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:17:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:17:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:17:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:17:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:17:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:17:37', tmtdew=9.58, humidity=53.0, cloud=0.0, wind=11.19, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:17:06.202', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:17:44.255 [DEBUG] [Thread-299618] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:17:44.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:17:44.342 [DEBUG] [Thread-299621] [transport.py] [_log()] starting thread (client mode): 0xf5743220
2025-12-24T09:17:44.342 [DEBUG] [Thread-299621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:17:44.357 [DEBUG] [Thread-299621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:17:44.357 [INFO] [Thread-299621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] client lang: <none>
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] server lang: <none>
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] kex follows: False
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] Compression: none
2025-12-24T09:17:44.365 [DEBUG] [Thread-299621] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:17:44.419 [DEBUG] [Thread-299621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:17:44.419 [DEBUG] [Thread-299621] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:17:44.419 [DEBUG] [Thread-299621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:17:44.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:17:44.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:17:44.477 [DEBUG] [Thread-299621] [transport.py] [_log()] userauth is OK
2025-12-24T09:17:44.477 [DEBUG] [Thread-299621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:17:44.477 [DEBUG] [Thread-299621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:17:44.477 [DEBUG] [Thread-299621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:17:44.477 [DEBUG] [Thread-299621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:17:44.491 [INFO] [Thread-299621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:17:44.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:17:44.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:17:45.307 [DEBUG] [Thread-299621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:17:45.307 [DEBUG] [Thread-299621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:17:45.355 [DEBUG] [Thread-299621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:17:45.355 [DEBUG] [Thread-299621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:17:45.364 [DEBUG] [Thread-299621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:17:45.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:17:45.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:17:45.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:17:45.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:17:45.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:17:45.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:17:45.396 [DEBUG] [Thread-299621] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:17:55.617 [DEBUG] [Thread-299623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:18:10.711 [DEBUG] [Thread-299624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:18:13.119 [DEBUG] [Thread-299625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:18:15.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:18:15.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:18:15.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:18:16.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 18, 11), 9.62, 52.9, 0.0, 8.98, 17.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:18:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:18:11
2025-12-24T09:18:16.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:18:16.704 [DEBUG] [Thread-299626] [transport.py] [_log()] starting thread (client mode): 0xf5794760
2025-12-24T09:18:16.705 [DEBUG] [Thread-299626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:18:16.712 [DEBUG] [Thread-299626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:18:16.712 [INFO] [Thread-299626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] client lang: <none>
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] server lang: <none>
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] kex follows: False
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:18:16.716 [DEBUG] [Thread-299626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:18:16.717 [DEBUG] [Thread-299626] [transport.py] [_log()] Compression: none
2025-12-24T09:18:16.717 [DEBUG] [Thread-299626] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:18:16.743 [DEBUG] [Thread-299626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:18:16.746 [DEBUG] [Thread-299626] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:18:16.748 [DEBUG] [Thread-299626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:18:16.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:18:16.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:18:16.754 [DEBUG] [Thread-299626] [transport.py] [_log()] userauth is OK
2025-12-24T09:18:16.754 [DEBUG] [Thread-299626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:18:16.754 [DEBUG] [Thread-299626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:18:16.754 [DEBUG] [Thread-299626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:18:16.755 [DEBUG] [Thread-299626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:18:16.780 [INFO] [Thread-299626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:18:16.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:18:17.406 [DEBUG] [Thread-299626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:18:17.406 [DEBUG] [Thread-299626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:18:17.407 [DEBUG] [Thread-299626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:18:17.448 [DEBUG] [Thread-299626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:18:17.448 [DEBUG] [Thread-299626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:18:17.450 [DEBUG] [Thread-299626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:18:17.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:18:17.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:18:17.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:18:17.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:18:17.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:18:17.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:18:17.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:18:17.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:18:17.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:18:17.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.303891 -999.00  +17.30   9.91     57   +8.80 1 1 1 1 1   888    0 9.96 69.12 ----- 9.9 9.9 158.0 11.0 25.6 -26.6 24.9 -25.1 23.5 -24.6 23.9 -25.3
2025-12-24T09:18:17.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:18:17.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:18:17.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.303891
2025-12-24T09:18:17.483 [DEBUG] [Thread-299626] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:18:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:18:17.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:18:17.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:18:17.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:18:17.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:18:17.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:18:11', tmtdew=9.62, humidity=52.9, cloud=0.0, wind=8.98, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:17:36.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:18:17.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:18:17.596 [DEBUG] [Thread-299629] [transport.py] [_log()] starting thread (client mode): 0xf5743820
2025-12-24T09:18:17.596 [DEBUG] [Thread-299629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:18:17.610 [DEBUG] [Thread-299629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:18:17.610 [INFO] [Thread-299629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] client lang: <none>
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] server lang: <none>
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] kex follows: False
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:18:17.618 [DEBUG] [Thread-299629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:18:17.619 [DEBUG] [Thread-299629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:18:17.619 [DEBUG] [Thread-299629] [transport.py] [_log()] Compression: none
2025-12-24T09:18:17.619 [DEBUG] [Thread-299629] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:18:17.681 [DEBUG] [Thread-299629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:18:17.682 [DEBUG] [Thread-299629] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:18:17.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:18:17.683 [DEBUG] [Thread-299629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:18:17.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:18:17.737 [DEBUG] [Thread-299629] [transport.py] [_log()] userauth is OK
2025-12-24T09:18:17.738 [DEBUG] [Thread-299629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:18:17.738 [DEBUG] [Thread-299629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:18:17.738 [DEBUG] [Thread-299629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:18:17.738 [DEBUG] [Thread-299629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:18:17.757 [INFO] [Thread-299629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:18:17.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:18:17.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:18:18.599 [DEBUG] [Thread-299629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:18:18.599 [DEBUG] [Thread-299629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:18:18.646 [DEBUG] [Thread-299629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:18:18.646 [DEBUG] [Thread-299629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:18:18.655 [DEBUG] [Thread-299629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:18:18.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:18:18.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:18:18.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:18:18.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:18:18.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:18:18.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:18:18.687 [DEBUG] [Thread-299629] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:18:25.813 [DEBUG] [Thread-299631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:18:29.074 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:18:29.075 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:18:40.935 [DEBUG] [Thread-299632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:18:48.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:18:48.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:18:48.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:18:49.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 18, 44), 9.92, 52.22, 0.0, 7.85, 17.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:18:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:18:44
2025-12-24T09:18:49.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:18:50.028 [DEBUG] [Thread-299633] [transport.py] [_log()] starting thread (client mode): 0xf5740070
2025-12-24T09:18:50.028 [DEBUG] [Thread-299633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:18:50.042 [DEBUG] [Thread-299633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:18:50.042 [INFO] [Thread-299633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:18:50.045 [DEBUG] [Thread-299633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] client lang: <none>
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] server lang: <none>
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] kex follows: False
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:18:50.046 [DEBUG] [Thread-299633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:18:50.047 [DEBUG] [Thread-299633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:18:50.047 [DEBUG] [Thread-299633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:18:50.047 [DEBUG] [Thread-299633] [transport.py] [_log()] Compression: none
2025-12-24T09:18:50.047 [DEBUG] [Thread-299633] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:18:50.085 [DEBUG] [Thread-299633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:18:50.090 [DEBUG] [Thread-299633] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:18:50.092 [DEBUG] [Thread-299633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:18:50.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:18:50.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:18:50.097 [DEBUG] [Thread-299633] [transport.py] [_log()] userauth is OK
2025-12-24T09:18:50.097 [DEBUG] [Thread-299633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:18:50.098 [DEBUG] [Thread-299633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:18:50.098 [DEBUG] [Thread-299633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:18:50.098 [DEBUG] [Thread-299633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:18:50.136 [INFO] [Thread-299633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:18:50.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:18:50.786 [DEBUG] [Thread-299633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:18:50.786 [DEBUG] [Thread-299633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:18:50.787 [DEBUG] [Thread-299633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:18:50.827 [DEBUG] [Thread-299633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:18:50.827 [DEBUG] [Thread-299633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:18:50.829 [DEBUG] [Thread-299633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:18:50.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:18:50.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:18:50.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:18:50.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:18:50.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:18:50.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:18:50.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:18:50.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:18:50.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:18:50.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.304238 -999.00  +17.40   9.48     57   +8.80 1 1 1 1 1   888    0 10.07 72.69 ----- 9.3 9.5 133.0 13.5 25.7 -25.8 25.0 -25.7 23.5 -24.3 24.1 -25.6
2025-12-24T09:18:50.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:18:50.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:18:50.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.304238
2025-12-24T09:18:50.863 [DEBUG] [Thread-299633] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:18:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:18:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:18:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:18:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:18:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:18:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:18:44', tmtdew=9.92, humidity=52.22, cloud=0.0, wind=7.85, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:18:06.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:18:50.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:18:50.968 [DEBUG] [Thread-299636] [transport.py] [_log()] starting thread (client mode): 0xf5796620
2025-12-24T09:18:50.969 [DEBUG] [Thread-299636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:18:50.984 [DEBUG] [Thread-299636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:18:50.984 [INFO] [Thread-299636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:18:50.991 [DEBUG] [Thread-299636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:18:50.991 [DEBUG] [Thread-299636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] client lang: <none>
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] server lang: <none>
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] kex follows: False
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] Compression: none
2025-12-24T09:18:50.992 [DEBUG] [Thread-299636] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:18:51.058 [DEBUG] [Thread-299636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:18:51.058 [DEBUG] [Thread-299636] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:18:51.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:18:51.059 [DEBUG] [Thread-299636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:18:51.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:18:51.113 [DEBUG] [Thread-299636] [transport.py] [_log()] userauth is OK
2025-12-24T09:18:51.114 [DEBUG] [Thread-299636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:18:51.114 [DEBUG] [Thread-299636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:18:51.114 [DEBUG] [Thread-299636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:18:51.114 [DEBUG] [Thread-299636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:18:51.133 [INFO] [Thread-299636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:18:51.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:18:51.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:18:51.989 [DEBUG] [Thread-299636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:18:51.989 [DEBUG] [Thread-299636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:18:52.027 [DEBUG] [Thread-299636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:18:52.028 [DEBUG] [Thread-299636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:18:52.036 [DEBUG] [Thread-299636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:18:52.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:18:52.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:18:52.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:18:52.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:18:52.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:18:52.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:18:52.073 [DEBUG] [Thread-299636] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:18:56.005 [DEBUG] [Thread-299638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:19:11.159 [DEBUG] [Thread-299639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:19:13.492 [DEBUG] [Thread-299640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:19:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:19:22.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:19:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:19:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 19, 17), 9.93, 52.19, 0.0, 9.32, 17.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:19:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:19:17
2025-12-24T09:19:23.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:19:23.586 [DEBUG] [Thread-299641] [transport.py] [_log()] starting thread (client mode): 0xf57bd210
2025-12-24T09:19:23.587 [DEBUG] [Thread-299641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:19:23.597 [DEBUG] [Thread-299641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:19:23.597 [INFO] [Thread-299641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] client lang: <none>
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] server lang: <none>
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] kex follows: False
2025-12-24T09:19:23.602 [DEBUG] [Thread-299641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:19:23.603 [DEBUG] [Thread-299641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:19:23.603 [DEBUG] [Thread-299641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:19:23.603 [DEBUG] [Thread-299641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:19:23.603 [DEBUG] [Thread-299641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:19:23.603 [DEBUG] [Thread-299641] [transport.py] [_log()] Compression: none
2025-12-24T09:19:23.603 [DEBUG] [Thread-299641] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:19:23.640 [DEBUG] [Thread-299641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:19:23.645 [DEBUG] [Thread-299641] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:19:23.647 [DEBUG] [Thread-299641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:19:23.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:19:23.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:19:23.653 [DEBUG] [Thread-299641] [transport.py] [_log()] userauth is OK
2025-12-24T09:19:23.653 [DEBUG] [Thread-299641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:19:23.653 [DEBUG] [Thread-299641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:19:23.654 [DEBUG] [Thread-299641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:19:23.654 [DEBUG] [Thread-299641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:19:23.693 [INFO] [Thread-299641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:19:23.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:19:24.339 [DEBUG] [Thread-299641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:19:24.339 [DEBUG] [Thread-299641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:19:24.348 [DEBUG] [Thread-299641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:19:24.380 [DEBUG] [Thread-299641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:19:24.380 [DEBUG] [Thread-299641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:19:24.382 [DEBUG] [Thread-299641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:19:24.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:19:24.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:19:24.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:19:24.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:19:24.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:19:24.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:19:24.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:19:24.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:19:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:19:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.304585 -999.00  +17.60   8.03     56   +8.90 1 1 1 1 1   888    0 10.18 74.73 ----- 7.7 8.0 135.9 10.8 25.8 -26.5 25.1 -27.7 23.7 -24.6 24.1 -25.7
2025-12-24T09:19:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:19:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:19:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.304585
2025-12-24T09:19:24.414 [DEBUG] [Thread-299641] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:19:24.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:19:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:19:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:19:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:19:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:19:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:19:17', tmtdew=9.93, humidity=52.19, cloud=0.0, wind=9.32, temperature=17.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:18:36.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:19:24.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:19:26.267 [DEBUG] [Thread-299644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:19:29.216 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:19:29.217 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:19:41.407 [DEBUG] [Thread-299645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:19:56.440 [DEBUG] [Thread-299646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:20:11.490 [DEBUG] [Thread-299647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:20:13.771 [DEBUG] [Thread-299648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:20:26.557 [DEBUG] [Thread-299649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:20:29.357 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:20:29.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:20:41.645 [DEBUG] [Thread-299650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:20:56.694 [DEBUG] [Thread-299651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:21:11.769 [DEBUG] [Thread-299652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:21:14.034 [DEBUG] [Thread-299653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:21:26.846 [DEBUG] [Thread-299654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:21:29.508 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:21:29.510 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:21:38.800 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T09:21:41.891 [DEBUG] [Thread-299655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:21:56.954 [DEBUG] [Thread-299656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:22:08.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:22:08.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:22:08.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
2025-12-24T09:22:09.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 22, 2), 9.87, 52.25, 0.0, 12.14, 17.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:22:09.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:22:02
2025-12-24T09:22:09.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:22:10.125 [DEBUG] [Thread-299657] [transport.py] [_log()] starting thread (client mode): 0xf57bead0
2025-12-24T09:22:10.126 [DEBUG] [Thread-299657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:22:10.133 [DEBUG] [Thread-299657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:22:10.133 [INFO] [Thread-299657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:22:10.139 [DEBUG] [Thread-299657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:22:10.140 [DEBUG] [Thread-299657] [transport.py] [_log()] client lang: <none>
2025-12-24T09:22:10.140 [DEBUG] [Thread-299657] [transport.py] [_log()] server lang: <none>
2025-12-24T09:22:10.140 [DEBUG] [Thread-299657] [transport.py] [_log()] kex follows: False
2025-12-24T09:22:10.140 [DEBUG] [Thread-299657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:22:10.141 [DEBUG] [Thread-299657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:22:10.141 [DEBUG] [Thread-299657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:22:10.141 [DEBUG] [Thread-299657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:22:10.141 [DEBUG] [Thread-299657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:22:10.141 [DEBUG] [Thread-299657] [transport.py] [_log()] Compression: none
2025-12-24T09:22:10.141 [DEBUG] [Thread-299657] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:22:10.179 [DEBUG] [Thread-299657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:22:10.183 [DEBUG] [Thread-299657] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:22:10.186 [DEBUG] [Thread-299657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:22:10.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:22:10.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:22:10.191 [DEBUG] [Thread-299657] [transport.py] [_log()] userauth is OK
2025-12-24T09:22:10.191 [DEBUG] [Thread-299657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:22:10.191 [DEBUG] [Thread-299657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:22:10.191 [DEBUG] [Thread-299657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:22:10.191 [DEBUG] [Thread-299657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:22:10.218 [INFO] [Thread-299657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:22:10.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:22:10.882 [DEBUG] [Thread-299657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:22:10.882 [DEBUG] [Thread-299657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:22:10.883 [DEBUG] [Thread-299657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:22:10.923 [DEBUG] [Thread-299657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:22:10.923 [DEBUG] [Thread-299657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:22:10.925 [DEBUG] [Thread-299657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:22:10.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:22:10.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:22:10.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:22:10.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:22:10.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:22:10.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:22:10.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:22:10.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:22:10.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:22:10.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.306669 -999.00  +17.80  20.55     56   +8.90 1 1 1 1 1   888    0 10.67 83.65 ----- 13.1 20.6 117.8 27.8 25.8 -26.5 25.1 -26.1 23.7 -24.8 24.3 -25.4
2025-12-24T09:22:10.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:22:10.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:22:10.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.306669
2025-12-24T09:22:10.952 [DEBUG] [Thread-299657] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:22:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:22:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:22:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:22:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:22:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:22:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:22:02', tmtdew=9.87, humidity=52.25, cloud=0.0, wind=12.14, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:21:36.202', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:22:11.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:22:11.049 [DEBUG] [Thread-299660] [transport.py] [_log()] starting thread (client mode): 0xf57bc0d0
2025-12-24T09:22:11.049 [DEBUG] [Thread-299660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:22:11.063 [DEBUG] [Thread-299660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:22:11.064 [INFO] [Thread-299660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] client lang: <none>
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] server lang: <none>
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] kex follows: False
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] Compression: none
2025-12-24T09:22:11.071 [DEBUG] [Thread-299660] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:22:11.127 [DEBUG] [Thread-299660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:22:11.127 [DEBUG] [Thread-299660] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:22:11.128 [DEBUG] [Thread-299660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:22:11.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:22:11.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:22:11.186 [DEBUG] [Thread-299660] [transport.py] [_log()] userauth is OK
2025-12-24T09:22:11.186 [DEBUG] [Thread-299660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:22:11.186 [DEBUG] [Thread-299660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:22:11.186 [DEBUG] [Thread-299660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:22:11.186 [DEBUG] [Thread-299660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:22:11.204 [INFO] [Thread-299660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:22:11.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:22:11.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:22:11.989 [DEBUG] [Thread-299660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:22:11.989 [DEBUG] [Thread-299660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:22:12.010 [DEBUG] [Thread-299662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:22:12.029 [DEBUG] [Thread-299660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:22:12.029 [DEBUG] [Thread-299660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:22:12.038 [DEBUG] [Thread-299660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:22:12.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:22:12.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:22:12.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:22:12.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:22:12.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:22:12.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:22:12.078 [DEBUG] [Thread-299660] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:22:14.322 [DEBUG] [Thread-299663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:22:27.091 [DEBUG] [Thread-299664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:22:29.649 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:22:29.651 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:22:42.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:22:42.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:22:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:22:42.156 [DEBUG] [Thread-299665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:22:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 22, 35), 10.02, 51.72, 0.0, 14.5, 17.6, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:22:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:22:35
2025-12-24T09:22:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:22:43.400 [DEBUG] [Thread-299666] [transport.py] [_log()] starting thread (client mode): 0xf574f4f0
2025-12-24T09:22:43.401 [DEBUG] [Thread-299666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:22:43.415 [DEBUG] [Thread-299666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:22:43.416 [INFO] [Thread-299666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] client lang: <none>
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] server lang: <none>
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] kex follows: False
2025-12-24T09:22:43.421 [DEBUG] [Thread-299666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:22:43.422 [DEBUG] [Thread-299666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:22:43.422 [DEBUG] [Thread-299666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:22:43.422 [DEBUG] [Thread-299666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:22:43.423 [DEBUG] [Thread-299666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:22:43.423 [DEBUG] [Thread-299666] [transport.py] [_log()] Compression: none
2025-12-24T09:22:43.423 [DEBUG] [Thread-299666] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:22:43.451 [DEBUG] [Thread-299666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:22:43.454 [DEBUG] [Thread-299666] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:22:43.455 [DEBUG] [Thread-299666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:22:43.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:22:43.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:22:43.459 [DEBUG] [Thread-299666] [transport.py] [_log()] userauth is OK
2025-12-24T09:22:43.459 [DEBUG] [Thread-299666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:22:43.459 [DEBUG] [Thread-299666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:22:43.459 [DEBUG] [Thread-299666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:22:43.459 [DEBUG] [Thread-299666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:22:43.476 [INFO] [Thread-299666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:22:43.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:22:44.109 [DEBUG] [Thread-299666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:22:44.119 [DEBUG] [Thread-299666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:22:44.120 [DEBUG] [Thread-299666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:22:44.151 [DEBUG] [Thread-299666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:22:44.151 [DEBUG] [Thread-299666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:22:44.153 [DEBUG] [Thread-299666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:22:44.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:22:44.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:22:44.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:22:44.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:22:44.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:22:44.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:22:44.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:22:44.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:22:44.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:22:44.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.307016 -999.00  +17.40  16.21     56   +8.60 1 1 1 1 1   888    0 10.77 88.25 ----- 14.6 16.2 126.0 20.4 25.6 -35.3 25.1 -26.0 23.7 -25.2 24.2 -26.5
2025-12-24T09:22:44.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:22:44.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:22:44.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.307016
2025-12-24T09:22:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:22:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:22:44.181 [DEBUG] [Thread-299666] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:22:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:22:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:22:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:22:44.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:22:35', tmtdew=10.02, humidity=51.72, cloud=0.0, wind=14.5, temperature=17.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:22:06.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:22:44.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:22:44.269 [DEBUG] [Thread-299669] [transport.py] [_log()] starting thread (client mode): 0xf574f7f0
2025-12-24T09:22:44.269 [DEBUG] [Thread-299669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:22:44.283 [DEBUG] [Thread-299669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:22:44.283 [INFO] [Thread-299669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] client lang: <none>
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] server lang: <none>
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] kex follows: False
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] Compression: none
2025-12-24T09:22:44.291 [DEBUG] [Thread-299669] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:22:44.347 [DEBUG] [Thread-299669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:22:44.348 [DEBUG] [Thread-299669] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:22:44.348 [DEBUG] [Thread-299669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:22:44.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:22:44.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:22:44.405 [DEBUG] [Thread-299669] [transport.py] [_log()] userauth is OK
2025-12-24T09:22:44.405 [DEBUG] [Thread-299669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:22:44.406 [DEBUG] [Thread-299669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:22:44.406 [DEBUG] [Thread-299669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:22:44.406 [DEBUG] [Thread-299669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:22:44.424 [INFO] [Thread-299669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:22:44.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:22:44.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:22:45.264 [DEBUG] [Thread-299669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:22:45.265 [DEBUG] [Thread-299669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:22:45.313 [DEBUG] [Thread-299669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:22:45.314 [DEBUG] [Thread-299669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:22:45.323 [DEBUG] [Thread-299669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:22:45.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:22:45.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:22:45.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
2025-12-24T09:22:45.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:22:45.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:22:45.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:22:45.358 [DEBUG] [Thread-299669] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:22:57.205 [DEBUG] [Thread-299671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:23:12.390 [DEBUG] [Thread-299672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:23:14.547 [DEBUG] [Thread-299673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:23:15.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:23:15.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:23:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:23:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 23, 8), 9.98, 51.83, 0.0, 12.05, 17.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:23:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:23:08
2025-12-24T09:23:16.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:23:16.672 [DEBUG] [Thread-299674] [transport.py] [_log()] starting thread (client mode): 0xf5773070
2025-12-24T09:23:16.672 [DEBUG] [Thread-299674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:23:16.677 [DEBUG] [Thread-299674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:23:16.677 [INFO] [Thread-299674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] client lang: <none>
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] server lang: <none>
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] kex follows: False
2025-12-24T09:23:16.681 [DEBUG] [Thread-299674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:23:16.682 [DEBUG] [Thread-299674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:23:16.682 [DEBUG] [Thread-299674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:23:16.682 [DEBUG] [Thread-299674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:23:16.682 [DEBUG] [Thread-299674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:23:16.682 [DEBUG] [Thread-299674] [transport.py] [_log()] Compression: none
2025-12-24T09:23:16.682 [DEBUG] [Thread-299674] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:23:16.711 [DEBUG] [Thread-299674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:23:16.714 [DEBUG] [Thread-299674] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:23:16.715 [DEBUG] [Thread-299674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:23:16.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:23:16.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:23:16.718 [DEBUG] [Thread-299674] [transport.py] [_log()] userauth is OK
2025-12-24T09:23:16.718 [DEBUG] [Thread-299674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:23:16.719 [DEBUG] [Thread-299674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:23:16.719 [DEBUG] [Thread-299674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:23:16.719 [DEBUG] [Thread-299674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:23:16.737 [INFO] [Thread-299674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:23:16.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:23:17.365 [DEBUG] [Thread-299674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:23:17.365 [DEBUG] [Thread-299674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:23:17.366 [DEBUG] [Thread-299674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:23:17.407 [DEBUG] [Thread-299674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:23:17.407 [DEBUG] [Thread-299674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:23:17.410 [DEBUG] [Thread-299674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:23:17.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:23:17.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:23:17.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:23:17.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:23:17.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:23:17.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:23:17.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:23:17.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:23:17.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:23:17.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.307363 -999.00  +17.40  11.56     57   +8.90 1 1 1 1 1   888    0 11.05 95.10 ----- 11.4 11.6 138.8 16.1 25.7 -25.9 25.2 -26.2 23.7 -24.8 24.1 -26.6
2025-12-24T09:23:17.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:23:17.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:23:17.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.307363
2025-12-24T09:23:17.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:23:17.445 [DEBUG] [Thread-299674] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:23:17.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:23:17.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:23:17.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:23:17.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:23:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:23:08', tmtdew=9.98, humidity=51.83, cloud=0.0, wind=12.05, temperature=17.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:22:36.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:23:17.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:23:17.539 [DEBUG] [Thread-299677] [transport.py] [_log()] starting thread (client mode): 0xf57404c0
2025-12-24T09:23:17.539 [DEBUG] [Thread-299677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:23:17.554 [DEBUG] [Thread-299677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:23:17.554 [INFO] [Thread-299677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] client lang: <none>
2025-12-24T09:23:17.561 [DEBUG] [Thread-299677] [transport.py] [_log()] server lang: <none>
2025-12-24T09:23:17.562 [DEBUG] [Thread-299677] [transport.py] [_log()] kex follows: False
2025-12-24T09:23:17.562 [DEBUG] [Thread-299677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:23:17.562 [DEBUG] [Thread-299677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:23:17.562 [DEBUG] [Thread-299677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:23:17.562 [DEBUG] [Thread-299677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:23:17.562 [DEBUG] [Thread-299677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:23:17.562 [DEBUG] [Thread-299677] [transport.py] [_log()] Compression: none
2025-12-24T09:23:17.562 [DEBUG] [Thread-299677] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:23:17.620 [DEBUG] [Thread-299677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:23:17.620 [DEBUG] [Thread-299677] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:23:17.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:23:17.620 [DEBUG] [Thread-299677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:23:17.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:23:17.677 [DEBUG] [Thread-299677] [transport.py] [_log()] userauth is OK
2025-12-24T09:23:17.677 [DEBUG] [Thread-299677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:23:17.677 [DEBUG] [Thread-299677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:23:17.677 [DEBUG] [Thread-299677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:23:17.677 [DEBUG] [Thread-299677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:23:17.692 [INFO] [Thread-299677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:23:17.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:23:17.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:23:18.591 [DEBUG] [Thread-299677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:23:18.591 [DEBUG] [Thread-299677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:23:18.640 [DEBUG] [Thread-299677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:23:18.640 [DEBUG] [Thread-299677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:23:18.652 [DEBUG] [Thread-299677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:23:18.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:23:18.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:23:18.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:23:18.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:23:18.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:23:18.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:23:18.690 [DEBUG] [Thread-299677] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:23:27.512 [DEBUG] [Thread-299679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:23:29.793 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:23:29.794 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:23:42.628 [DEBUG] [Thread-299680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:23:48.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:23:48.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:23:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:23:49.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 23, 41), 9.78, 52.32, 0.0, 14.31, 17.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:23:49.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:23:41
2025-12-24T09:23:49.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:23:49.928 [DEBUG] [Thread-299681] [transport.py] [_log()] starting thread (client mode): 0xf57715a0
2025-12-24T09:23:49.929 [DEBUG] [Thread-299681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:23:49.942 [DEBUG] [Thread-299681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:23:49.942 [INFO] [Thread-299681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:23:49.946 [DEBUG] [Thread-299681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:23:49.946 [DEBUG] [Thread-299681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] client lang: <none>
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] server lang: <none>
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] kex follows: False
2025-12-24T09:23:49.947 [DEBUG] [Thread-299681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:23:49.948 [DEBUG] [Thread-299681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:23:49.948 [DEBUG] [Thread-299681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:23:49.948 [DEBUG] [Thread-299681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:23:49.948 [DEBUG] [Thread-299681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:23:49.948 [DEBUG] [Thread-299681] [transport.py] [_log()] Compression: none
2025-12-24T09:23:49.948 [DEBUG] [Thread-299681] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:23:49.986 [DEBUG] [Thread-299681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:23:49.991 [DEBUG] [Thread-299681] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:23:49.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:23:49.996 [DEBUG] [Thread-299681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:23:49.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:23:49.999 [DEBUG] [Thread-299681] [transport.py] [_log()] userauth is OK
2025-12-24T09:23:49.999 [DEBUG] [Thread-299681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:23:50.000 [DEBUG] [Thread-299681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:23:50.000 [DEBUG] [Thread-299681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:23:50.000 [DEBUG] [Thread-299681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:23:50.039 [INFO] [Thread-299681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:23:50.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:23:50.652 [DEBUG] [Thread-299681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:23:50.652 [DEBUG] [Thread-299681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:23:50.653 [DEBUG] [Thread-299681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:23:50.693 [DEBUG] [Thread-299681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:23:50.694 [DEBUG] [Thread-299681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:23:50.697 [DEBUG] [Thread-299681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:23:50.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:23:50.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:23:50.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:23:50.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:23:50.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:23:50.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:23:50.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:23:50.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:23:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:23:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.307710 -999.00  +17.80   8.86     56   +9.00 1 1 1 1 1   888    0 10.95 91.34 ----- 15.4 8.9 155.3 17.3 25.7 -31.3 25.1 -25.4 23.8 -24.6 24.2 -25.5
2025-12-24T09:23:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:23:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:23:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.307710
2025-12-24T09:23:50.734 [DEBUG] [Thread-299681] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:23:50.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:23:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:23:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:23:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:23:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:23:50.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:23:41', tmtdew=9.78, humidity=52.32, cloud=0.0, wind=14.31, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:23:06.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:23:50.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:23:57.682 [DEBUG] [Thread-299684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:24:12.796 [DEBUG] [Thread-299685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:24:14.780 [DEBUG] [Thread-299686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:24:27.915 [DEBUG] [Thread-299687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:24:29.937 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:24:29.938 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:24:42.988 [DEBUG] [Thread-299688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:24:58.103 [DEBUG] [Thread-299689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:25:13.199 [DEBUG] [Thread-299690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:25:15.118 [DEBUG] [Thread-299691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:25:28.277 [DEBUG] [Thread-299692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:25:30.082 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:25:30.084 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:25:43.347 [DEBUG] [Thread-299693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:25:58.425 [DEBUG] [Thread-299694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:26:05.038 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T09:26:13.492 [DEBUG] [Thread-299695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:26:15.488 [DEBUG] [Thread-299696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:26:28.564 [DEBUG] [Thread-299697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:26:30.229 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:26:30.231 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:26:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:26:35.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:26:35.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
2025-12-24T09:26:36.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 26, 26), 9.88, 52.02, 0.0, 9.63, 17.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:26:36.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:26:26
2025-12-24T09:26:36.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:26:36.410 [DEBUG] [Thread-299698] [transport.py] [_log()] starting thread (client mode): 0xf5773730
2025-12-24T09:26:36.411 [DEBUG] [Thread-299698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:26:36.424 [DEBUG] [Thread-299698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:26:36.424 [INFO] [Thread-299698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:26:36.438 [DEBUG] [Thread-299698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:26:36.438 [DEBUG] [Thread-299698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:26:36.438 [DEBUG] [Thread-299698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:26:36.438 [DEBUG] [Thread-299698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:26:36.438 [DEBUG] [Thread-299698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:26:36.438 [DEBUG] [Thread-299698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:26:36.438 [DEBUG] [Thread-299698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:26:36.439 [DEBUG] [Thread-299698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:26:36.439 [DEBUG] [Thread-299698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:26:36.439 [DEBUG] [Thread-299698] [transport.py] [_log()] client lang: <none>
2025-12-24T09:26:36.439 [DEBUG] [Thread-299698] [transport.py] [_log()] server lang: <none>
2025-12-24T09:26:36.439 [DEBUG] [Thread-299698] [transport.py] [_log()] kex follows: False
2025-12-24T09:26:36.439 [DEBUG] [Thread-299698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:26:36.440 [DEBUG] [Thread-299698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:26:36.440 [DEBUG] [Thread-299698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:26:36.440 [DEBUG] [Thread-299698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:26:36.440 [DEBUG] [Thread-299698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:26:36.440 [DEBUG] [Thread-299698] [transport.py] [_log()] Compression: none
2025-12-24T09:26:36.440 [DEBUG] [Thread-299698] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:26:36.477 [DEBUG] [Thread-299698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:26:36.481 [DEBUG] [Thread-299698] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:26:36.483 [DEBUG] [Thread-299698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:26:36.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:26:36.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:26:36.488 [DEBUG] [Thread-299698] [transport.py] [_log()] userauth is OK
2025-12-24T09:26:36.488 [DEBUG] [Thread-299698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:26:36.489 [DEBUG] [Thread-299698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:26:36.489 [DEBUG] [Thread-299698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:26:36.489 [DEBUG] [Thread-299698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:26:36.516 [INFO] [Thread-299698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:26:36.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:26:37.144 [DEBUG] [Thread-299698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:26:37.145 [DEBUG] [Thread-299698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:26:37.146 [DEBUG] [Thread-299698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:26:37.185 [DEBUG] [Thread-299698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:26:37.186 [DEBUG] [Thread-299698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:26:37.189 [DEBUG] [Thread-299698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:26:37.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:26:37.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:26:37.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:26:37.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:26:37.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:26:37.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:26:37.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:26:37.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:26:37.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:26:37.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.309794 -999.00  +18.10   7.30     54   +8.90 1 1 1 1 1   888    0 12.08 119.27 ----- 10.8 7.3 167.8 11.6 26.2 -26.3 25.4 -26.0 24.1 -24.0 24.6 -25.5
2025-12-24T09:26:37.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:26:37.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:26:37.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.309794
2025-12-24T09:26:37.222 [DEBUG] [Thread-299698] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:26:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:26:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:26:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:26:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:26:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:26:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:26:26', tmtdew=9.88, humidity=52.02, cloud=0.0, wind=9.63, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:26:06.202', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:26:37.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:26:37.338 [DEBUG] [Thread-299701] [transport.py] [_log()] starting thread (client mode): 0xf57712d0
2025-12-24T09:26:37.339 [DEBUG] [Thread-299701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:26:37.353 [DEBUG] [Thread-299701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:26:37.353 [INFO] [Thread-299701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:26:37.361 [DEBUG] [Thread-299701] [transport.py] [_log()] client lang: <none>
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] server lang: <none>
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] kex follows: False
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] Compression: none
2025-12-24T09:26:37.362 [DEBUG] [Thread-299701] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:26:37.418 [DEBUG] [Thread-299701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:26:37.419 [DEBUG] [Thread-299701] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:26:37.419 [DEBUG] [Thread-299701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:26:37.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:26:37.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:26:37.474 [DEBUG] [Thread-299701] [transport.py] [_log()] userauth is OK
2025-12-24T09:26:37.474 [DEBUG] [Thread-299701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:26:37.474 [DEBUG] [Thread-299701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:26:37.474 [DEBUG] [Thread-299701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:26:37.475 [DEBUG] [Thread-299701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:26:37.493 [INFO] [Thread-299701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:26:37.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:26:37.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:26:38.321 [DEBUG] [Thread-299701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:26:38.321 [DEBUG] [Thread-299701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:26:38.360 [DEBUG] [Thread-299701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:26:38.360 [DEBUG] [Thread-299701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:26:38.370 [DEBUG] [Thread-299701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:26:38.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:26:38.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')
2025-12-24T09:26:38.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:26:38.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:26:38.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:26:38.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:26:38.408 [DEBUG] [Thread-299701] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:26:43.600 [DEBUG] [Thread-299703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:26:58.732 [DEBUG] [Thread-299704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:27:08.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:27:08.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:27:08.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
2025-12-24T09:27:09.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 26, 59), 9.99, 51.85, 0.0, 14.17, 17.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:27:09.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:26:59
2025-12-24T09:27:09.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:27:09.842 [DEBUG] [Thread-299705] [transport.py] [_log()] starting thread (client mode): 0xf5771150
2025-12-24T09:27:09.842 [DEBUG] [Thread-299705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:27:09.851 [DEBUG] [Thread-299705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:27:09.851 [INFO] [Thread-299705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] client lang: <none>
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] server lang: <none>
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] kex follows: False
2025-12-24T09:27:09.855 [DEBUG] [Thread-299705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:27:09.856 [DEBUG] [Thread-299705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:27:09.856 [DEBUG] [Thread-299705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:27:09.856 [DEBUG] [Thread-299705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:27:09.856 [DEBUG] [Thread-299705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:27:09.856 [DEBUG] [Thread-299705] [transport.py] [_log()] Compression: none
2025-12-24T09:27:09.856 [DEBUG] [Thread-299705] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:27:09.886 [DEBUG] [Thread-299705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:27:09.891 [DEBUG] [Thread-299705] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:27:09.893 [DEBUG] [Thread-299705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:27:09.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:27:09.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:27:09.897 [DEBUG] [Thread-299705] [transport.py] [_log()] userauth is OK
2025-12-24T09:27:09.898 [DEBUG] [Thread-299705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:27:09.898 [DEBUG] [Thread-299705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:27:09.898 [DEBUG] [Thread-299705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:27:09.898 [DEBUG] [Thread-299705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:27:09.924 [INFO] [Thread-299705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:27:09.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:27:10.588 [DEBUG] [Thread-299705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:27:10.589 [DEBUG] [Thread-299705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:27:10.590 [DEBUG] [Thread-299705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:27:10.630 [DEBUG] [Thread-299705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:27:10.630 [DEBUG] [Thread-299705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:27:10.633 [DEBUG] [Thread-299705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:27:10.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:27:10.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:27:10.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:27:10.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:27:10.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:27:10.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:27:10.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:27:10.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:27:10.661 [DEBUG] [Thread-299705] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:27:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:27:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.310141 -999.00  +18.10  12.02     54   +8.80 1 1 1 1 1   888    0 11.89 118.89 ----- 11.3 12.0 145.6 16.2 26.2 -26.3 25.4 -25.8 24.1 -24.6 24.6 -25.7
2025-12-24T09:27:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:27:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:27:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.310141
2025-12-24T09:27:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:27:10.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:27:10.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:27:10.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:27:10.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:27:10.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:26:59', tmtdew=9.99, humidity=51.85, cloud=0.0, wind=14.17, temperature=17.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:26:36.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:27:10.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:27:10.771 [DEBUG] [Thread-299708] [transport.py] [_log()] starting thread (client mode): 0xf5742b00
2025-12-24T09:27:10.771 [DEBUG] [Thread-299708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:27:10.787 [DEBUG] [Thread-299708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:27:10.787 [INFO] [Thread-299708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:27:10.794 [DEBUG] [Thread-299708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] client lang: <none>
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] server lang: <none>
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] kex follows: False
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] Compression: none
2025-12-24T09:27:10.795 [DEBUG] [Thread-299708] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:27:10.853 [DEBUG] [Thread-299708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:27:10.854 [DEBUG] [Thread-299708] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:27:10.855 [DEBUG] [Thread-299708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:27:10.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:27:10.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:27:10.910 [DEBUG] [Thread-299708] [transport.py] [_log()] userauth is OK
2025-12-24T09:27:10.910 [DEBUG] [Thread-299708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:27:10.911 [DEBUG] [Thread-299708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:27:10.911 [DEBUG] [Thread-299708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:27:10.911 [DEBUG] [Thread-299708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:27:10.929 [INFO] [Thread-299708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:27:10.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:27:10.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:27:11.758 [DEBUG] [Thread-299708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:27:11.758 [DEBUG] [Thread-299708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:27:11.805 [DEBUG] [Thread-299708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:27:11.805 [DEBUG] [Thread-299708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:27:11.814 [DEBUG] [Thread-299708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:27:11.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:27: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')
2025-12-24T09:27: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
2025-12-24T09:27:11.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:27:11.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:27:11.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:27:11.853 [DEBUG] [Thread-299708] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:27:13.795 [DEBUG] [Thread-299710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:27:15.767 [DEBUG] [Thread-299711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:27:28.953 [DEBUG] [Thread-299712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:27:30.373 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:27:30.375 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:27:41.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:27:41.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:27:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:27:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 27, 33), 10.21, 51.16, 0.0, 12.81, 17.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:27:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:27:33
2025-12-24T09:27:43.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:27:43.269 [DEBUG] [Thread-299713] [transport.py] [_log()] starting thread (client mode): 0xf574e6e0
2025-12-24T09:27:43.269 [DEBUG] [Thread-299713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:27:43.270 [DEBUG] [Thread-299713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:27:43.270 [INFO] [Thread-299713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:27:43.274 [DEBUG] [Thread-299713] [transport.py] [_log()] client lang: <none>
2025-12-24T09:27:43.275 [DEBUG] [Thread-299713] [transport.py] [_log()] server lang: <none>
2025-12-24T09:27:43.275 [DEBUG] [Thread-299713] [transport.py] [_log()] kex follows: False
2025-12-24T09:27:43.275 [DEBUG] [Thread-299713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:27:43.275 [DEBUG] [Thread-299713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:27:43.275 [DEBUG] [Thread-299713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:27:43.276 [DEBUG] [Thread-299713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:27:43.276 [DEBUG] [Thread-299713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:27:43.276 [DEBUG] [Thread-299713] [transport.py] [_log()] Compression: none
2025-12-24T09:27:43.276 [DEBUG] [Thread-299713] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:27:43.311 [DEBUG] [Thread-299713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:27:43.315 [DEBUG] [Thread-299713] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:27:43.318 [DEBUG] [Thread-299713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:27:43.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:27:43.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:27:43.323 [DEBUG] [Thread-299713] [transport.py] [_log()] userauth is OK
2025-12-24T09:27:43.323 [DEBUG] [Thread-299713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:27:43.323 [DEBUG] [Thread-299713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:27:43.323 [DEBUG] [Thread-299713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:27:43.323 [DEBUG] [Thread-299713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:27:43.363 [INFO] [Thread-299713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:27:43.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:27:44.026 [DEBUG] [Thread-299713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:27:44.026 [DEBUG] [Thread-299713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:27:44.027 [DEBUG] [Thread-299713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:27:44.037 [DEBUG] [Thread-299715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:27:44.068 [DEBUG] [Thread-299713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:27:44.068 [DEBUG] [Thread-299713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:27:44.070 [DEBUG] [Thread-299713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:27:44.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:27:44.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:27:44.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:27:44.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:27:44.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:27:44.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:27:44.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:27:44.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:27:44.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:27:44.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.310488 -999.00  +18.00   4.99     55   +8.80 1 1 1 1 1   888    0 11.88 111.05 ----- 4.9 5.0 166.6 10.9 26.2 -26.9 25.5 -24.9 24.1 -23.8 24.6 -25.9
2025-12-24T09:27:44.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:27:44.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:27:44.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.310488
2025-12-24T09:27:44.096 [DEBUG] [Thread-299713] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:27:44.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:27:44.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:27:44.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:27:44.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:27:44.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:27:44.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:27:33', tmtdew=10.21, humidity=51.16, cloud=0.0, wind=12.81, temperature=17.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:27:06.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:27:44.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:27:44.192 [DEBUG] [Thread-299717] [transport.py] [_log()] starting thread (client mode): 0xfabc6200
2025-12-24T09:27:44.192 [DEBUG] [Thread-299717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:27:44.207 [DEBUG] [Thread-299717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:27:44.207 [INFO] [Thread-299717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] client lang: <none>
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] server lang: <none>
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] kex follows: False
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] Compression: none
2025-12-24T09:27:44.216 [DEBUG] [Thread-299717] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:27:44.272 [DEBUG] [Thread-299717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:27:44.272 [DEBUG] [Thread-299717] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:27:44.272 [DEBUG] [Thread-299717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:27:44.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:27:44.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:27:44.329 [DEBUG] [Thread-299717] [transport.py] [_log()] userauth is OK
2025-12-24T09:27:44.329 [DEBUG] [Thread-299717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:27:44.329 [DEBUG] [Thread-299717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:27:44.329 [DEBUG] [Thread-299717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:27:44.329 [DEBUG] [Thread-299717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:27:44.343 [INFO] [Thread-299717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:27:44.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:27:44.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:27:45.180 [DEBUG] [Thread-299717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:27:45.180 [DEBUG] [Thread-299717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:27:45.220 [DEBUG] [Thread-299717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:27:45.220 [DEBUG] [Thread-299717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:27:45.228 [DEBUG] [Thread-299717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:27:45.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:27:45.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:27:45.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
2025-12-24T09:27:45.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:27:45.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:27:45.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:27:45.261 [DEBUG] [Thread-299717] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:27:59.084 [DEBUG] [Thread-299719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:28:14.223 [DEBUG] [Thread-299720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:28:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:28:15.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:28:15.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
2025-12-24T09:28:16.006 [DEBUG] [Thread-299721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:28:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 28, 6), 10.24, 51.07, 0.0, 10.68, 17.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:28:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:28:06
2025-12-24T09:28:16.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:28:16.483 [DEBUG] [Thread-299722] [transport.py] [_log()] starting thread (client mode): 0xfabc7730
2025-12-24T09:28:16.483 [DEBUG] [Thread-299722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:28:16.496 [DEBUG] [Thread-299722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:28:16.496 [INFO] [Thread-299722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:28:16.501 [DEBUG] [Thread-299722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] client lang: <none>
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] server lang: <none>
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] kex follows: False
2025-12-24T09:28:16.502 [DEBUG] [Thread-299722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:28:16.503 [DEBUG] [Thread-299722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:28:16.503 [DEBUG] [Thread-299722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:28:16.504 [DEBUG] [Thread-299722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:28:16.504 [DEBUG] [Thread-299722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:28:16.504 [DEBUG] [Thread-299722] [transport.py] [_log()] Compression: none
2025-12-24T09:28:16.504 [DEBUG] [Thread-299722] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:28:16.538 [DEBUG] [Thread-299722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:28:16.542 [DEBUG] [Thread-299722] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:28:16.544 [DEBUG] [Thread-299722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:28:16.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:28:16.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:28:16.550 [DEBUG] [Thread-299722] [transport.py] [_log()] userauth is OK
2025-12-24T09:28:16.550 [DEBUG] [Thread-299722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:28:16.550 [DEBUG] [Thread-299722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:28:16.550 [DEBUG] [Thread-299722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:28:16.550 [DEBUG] [Thread-299722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:28:16.586 [INFO] [Thread-299722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:28:16.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:28:17.240 [DEBUG] [Thread-299722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:28:17.240 [DEBUG] [Thread-299722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:28:17.242 [DEBUG] [Thread-299722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:28:17.281 [DEBUG] [Thread-299722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:28:17.281 [DEBUG] [Thread-299722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:28:17.285 [DEBUG] [Thread-299722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:28:17.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:28:17.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:28:17.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:28:17.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:28:17.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:28:17.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:28:17.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:28:17.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:28:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:28:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.311183 -999.00  +18.30  13.55     54   +8.90 1 1 1 1 1   888    0 11.84 105.35 ----- 10.5 13.6 182.6 16.1 26.2 -27.0 24.9 -31.4 23.9 -24.8 24.6 -26.7
2025-12-24T09:28:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:28:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:28:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.311183
2025-12-24T09:28:17.320 [DEBUG] [Thread-299722] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:28:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:28:17.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:28:17.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:28:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:28:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:28:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:28:06', tmtdew=10.24, humidity=51.07, cloud=0.0, wind=10.68, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:28:06.211', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:28:17.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:28:17.435 [DEBUG] [Thread-299725] [transport.py] [_log()] starting thread (client mode): 0xfabc6b60
2025-12-24T09:28:17.435 [DEBUG] [Thread-299725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:28:17.449 [DEBUG] [Thread-299725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:28:17.449 [INFO] [Thread-299725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:28:17.456 [DEBUG] [Thread-299725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:28:17.456 [DEBUG] [Thread-299725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] client lang: <none>
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] server lang: <none>
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] kex follows: False
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] Compression: none
2025-12-24T09:28:17.457 [DEBUG] [Thread-299725] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:28:17.512 [DEBUG] [Thread-299725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:28:17.512 [DEBUG] [Thread-299725] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:28:17.512 [DEBUG] [Thread-299725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:28:17.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:28:17.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:28:17.574 [DEBUG] [Thread-299725] [transport.py] [_log()] userauth is OK
2025-12-24T09:28:17.574 [DEBUG] [Thread-299725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:28:17.574 [DEBUG] [Thread-299725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:28:17.574 [DEBUG] [Thread-299725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:28:17.574 [DEBUG] [Thread-299725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:28:17.588 [INFO] [Thread-299725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:28:17.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:28:17.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:28:18.435 [DEBUG] [Thread-299725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:28:18.435 [DEBUG] [Thread-299725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:28:18.486 [DEBUG] [Thread-299725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:28:18.487 [DEBUG] [Thread-299725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:28:18.496 [DEBUG] [Thread-299725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:28:18.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:28:18.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:28:18.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:28:18.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:28:18.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:28:18.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:28:18.534 [DEBUG] [Thread-299725] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:28:29.309 [DEBUG] [Thread-299727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:28:30.524 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:28:30.525 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:28:44.393 [DEBUG] [Thread-299728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:28:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:28:48.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:28:48.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:28:49.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 28, 39), 10.35, 50.93, 0.0, 10.62, 17.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:28:49.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:28:39
2025-12-24T09:28:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:28:49.946 [DEBUG] [Thread-299729] [transport.py] [_log()] starting thread (client mode): 0xfabc6320
2025-12-24T09:28:49.946 [DEBUG] [Thread-299729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:28:49.955 [DEBUG] [Thread-299729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:28:49.955 [INFO] [Thread-299729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:28:49.959 [DEBUG] [Thread-299729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:28:49.959 [DEBUG] [Thread-299729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:28:49.959 [DEBUG] [Thread-299729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:28:49.959 [DEBUG] [Thread-299729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:28:49.959 [DEBUG] [Thread-299729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:28:49.959 [DEBUG] [Thread-299729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:28:49.959 [DEBUG] [Thread-299729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:28:49.959 [DEBUG] [Thread-299729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:28:49.960 [DEBUG] [Thread-299729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:28:49.960 [DEBUG] [Thread-299729] [transport.py] [_log()] client lang: <none>
2025-12-24T09:28:49.960 [DEBUG] [Thread-299729] [transport.py] [_log()] server lang: <none>
2025-12-24T09:28:49.960 [DEBUG] [Thread-299729] [transport.py] [_log()] kex follows: False
2025-12-24T09:28:49.960 [DEBUG] [Thread-299729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:28:49.960 [DEBUG] [Thread-299729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:28:49.960 [DEBUG] [Thread-299729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:28:49.960 [DEBUG] [Thread-299729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:28:49.961 [DEBUG] [Thread-299729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:28:49.961 [DEBUG] [Thread-299729] [transport.py] [_log()] Compression: none
2025-12-24T09:28:49.961 [DEBUG] [Thread-299729] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:28:49.991 [DEBUG] [Thread-299729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:28:49.995 [DEBUG] [Thread-299729] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:28:49.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:28:49.997 [DEBUG] [Thread-299729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:28:49.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:28:50.000 [DEBUG] [Thread-299729] [transport.py] [_log()] userauth is OK
2025-12-24T09:28:50.000 [DEBUG] [Thread-299729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:28:50.000 [DEBUG] [Thread-299729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:28:50.000 [DEBUG] [Thread-299729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:28:50.000 [DEBUG] [Thread-299729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:28:50.018 [INFO] [Thread-299729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:28:50.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:28:50.703 [DEBUG] [Thread-299729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:28:50.703 [DEBUG] [Thread-299729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:28:50.704 [DEBUG] [Thread-299729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:28:50.745 [DEBUG] [Thread-299729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:28:50.745 [DEBUG] [Thread-299729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:28:50.747 [DEBUG] [Thread-299729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:28:50.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:28:50.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:28:50.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:28:50.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:28:50.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:28:50.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:28:50.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:28:50.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:28:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:28:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.311530 -999.00  +18.10   6.25     54   +8.90 1 1 1 1 1   888    0 11.40 95.45 ----- 8.8 6.2 192.2 11.3 26.2 -27.1 25.0 -28.1 23.9 -24.5 24.5 -27.0
2025-12-24T09:28:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:28:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:28:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.311530
2025-12-24T09:28:50.776 [DEBUG] [Thread-299729] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:28:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:28:50.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:28:50.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:28:50.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:28:50.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:28:50.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:28:39', tmtdew=10.35, humidity=50.93, cloud=0.0, wind=10.62, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:28:36.192', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:28:50.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:28:50.872 [DEBUG] [Thread-299732] [transport.py] [_log()] starting thread (client mode): 0xfabc5600
2025-12-24T09:28:50.872 [DEBUG] [Thread-299732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:28:50.887 [DEBUG] [Thread-299732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:28:50.887 [INFO] [Thread-299732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] client lang: <none>
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] server lang: <none>
2025-12-24T09:28:50.894 [DEBUG] [Thread-299732] [transport.py] [_log()] kex follows: False
2025-12-24T09:28:50.895 [DEBUG] [Thread-299732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:28:50.895 [DEBUG] [Thread-299732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:28:50.895 [DEBUG] [Thread-299732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:28:50.895 [DEBUG] [Thread-299732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:28:50.895 [DEBUG] [Thread-299732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:28:50.895 [DEBUG] [Thread-299732] [transport.py] [_log()] Compression: none
2025-12-24T09:28:50.895 [DEBUG] [Thread-299732] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:28:50.956 [DEBUG] [Thread-299732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:28:50.956 [DEBUG] [Thread-299732] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:28:50.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:28:50.957 [DEBUG] [Thread-299732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:28:50.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:28:51.013 [DEBUG] [Thread-299732] [transport.py] [_log()] userauth is OK
2025-12-24T09:28:51.013 [DEBUG] [Thread-299732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:28:51.013 [DEBUG] [Thread-299732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:28:51.013 [DEBUG] [Thread-299732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:28:51.013 [DEBUG] [Thread-299732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:28:51.027 [INFO] [Thread-299732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:28:51.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:28:51.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:28:51.855 [DEBUG] [Thread-299732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:28:51.856 [DEBUG] [Thread-299732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:28:51.907 [DEBUG] [Thread-299732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:28:51.907 [DEBUG] [Thread-299732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:28:51.915 [DEBUG] [Thread-299732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:28:51.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:28:51.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:28:51.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:28:51.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:28:51.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:28:51.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:28:51.954 [DEBUG] [Thread-299732] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:28:59.452 [DEBUG] [Thread-299734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:29:14.571 [DEBUG] [Thread-299735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:29:16.270 [DEBUG] [Thread-299736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:29:21.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:29:21.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:29:22.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:29:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 29, 12), 10.53, 50.38, 0.0, 11.12, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:29:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:29:12
2025-12-24T09:29:23.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:29:23.306 [DEBUG] [Thread-299737] [transport.py] [_log()] starting thread (client mode): 0xf5772350
2025-12-24T09:29:23.308 [DEBUG] [Thread-299737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:29:23.318 [DEBUG] [Thread-299737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:29:23.318 [INFO] [Thread-299737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] client lang: <none>
2025-12-24T09:29:23.322 [DEBUG] [Thread-299737] [transport.py] [_log()] server lang: <none>
2025-12-24T09:29:23.323 [DEBUG] [Thread-299737] [transport.py] [_log()] kex follows: False
2025-12-24T09:29:23.323 [DEBUG] [Thread-299737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:29:23.324 [DEBUG] [Thread-299737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:29:23.324 [DEBUG] [Thread-299737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:29:23.324 [DEBUG] [Thread-299737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:29:23.324 [DEBUG] [Thread-299737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:29:23.324 [DEBUG] [Thread-299737] [transport.py] [_log()] Compression: none
2025-12-24T09:29:23.324 [DEBUG] [Thread-299737] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:29:23.358 [DEBUG] [Thread-299737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:29:23.362 [DEBUG] [Thread-299737] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:29:23.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:29:23.364 [DEBUG] [Thread-299737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:29:23.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:29:23.366 [DEBUG] [Thread-299737] [transport.py] [_log()] userauth is OK
2025-12-24T09:29:23.366 [DEBUG] [Thread-299737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:29:23.366 [DEBUG] [Thread-299737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:29:23.366 [DEBUG] [Thread-299737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:29:23.366 [DEBUG] [Thread-299737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:29:23.384 [INFO] [Thread-299737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:29:23.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:29:24.021 [DEBUG] [Thread-299737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:29:24.022 [DEBUG] [Thread-299737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:29:24.024 [DEBUG] [Thread-299737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:29:24.063 [DEBUG] [Thread-299737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:29:24.064 [DEBUG] [Thread-299737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:29:24.067 [DEBUG] [Thread-299737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:29:24.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:29:24.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:29:24.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:29:24.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:29:24.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:29:24.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:29:24.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:29:24.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:29:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:29:24.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.311877 -999.00  +18.10  10.49     54   +8.80 1 1 1 1 1   888    0 11.77 102.65 ----- 10.6 10.5 189.0 13.5 26.1 -26.4 25.0 -27.3 23.9 -24.6 24.5 -26.4
2025-12-24T09:29:24.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:29:24.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:29:24.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.311877
2025-12-24T09:29:24.103 [DEBUG] [Thread-299737] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:29:24.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:29:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:29:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:29:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:29:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:29:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:29:12', tmtdew=10.53, humidity=50.38, cloud=0.0, wind=11.12, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:29:06.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:29:24.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:29:24.219 [DEBUG] [Thread-299740] [transport.py] [_log()] starting thread (client mode): 0xf5797a90
2025-12-24T09:29:24.219 [DEBUG] [Thread-299740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:29:24.233 [DEBUG] [Thread-299740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:29:24.233 [INFO] [Thread-299740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:29:24.241 [DEBUG] [Thread-299740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:29:24.241 [DEBUG] [Thread-299740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:29:24.241 [DEBUG] [Thread-299740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:29:24.241 [DEBUG] [Thread-299740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:29:24.241 [DEBUG] [Thread-299740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:29:24.241 [DEBUG] [Thread-299740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:29:24.241 [DEBUG] [Thread-299740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:29:24.242 [DEBUG] [Thread-299740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:29:24.242 [DEBUG] [Thread-299740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:29:24.242 [DEBUG] [Thread-299740] [transport.py] [_log()] client lang: <none>
2025-12-24T09:29:24.242 [DEBUG] [Thread-299740] [transport.py] [_log()] server lang: <none>
2025-12-24T09:29:24.242 [DEBUG] [Thread-299740] [transport.py] [_log()] kex follows: False
2025-12-24T09:29:24.242 [DEBUG] [Thread-299740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:29:24.242 [DEBUG] [Thread-299740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:29:24.242 [DEBUG] [Thread-299740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:29:24.243 [DEBUG] [Thread-299740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:29:24.243 [DEBUG] [Thread-299740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:29:24.243 [DEBUG] [Thread-299740] [transport.py] [_log()] Compression: none
2025-12-24T09:29:24.243 [DEBUG] [Thread-299740] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:29:24.298 [DEBUG] [Thread-299740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:29:24.299 [DEBUG] [Thread-299740] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:29:24.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:29:24.300 [DEBUG] [Thread-299740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:29:24.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:29:24.354 [DEBUG] [Thread-299740] [transport.py] [_log()] userauth is OK
2025-12-24T09:29:24.354 [DEBUG] [Thread-299740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:29:24.354 [DEBUG] [Thread-299740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:29:24.355 [DEBUG] [Thread-299740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:29:24.355 [DEBUG] [Thread-299740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:29:24.372 [INFO] [Thread-299740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:29:24.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:29:24.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:29:25.204 [DEBUG] [Thread-299740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:29:25.205 [DEBUG] [Thread-299740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:29:25.251 [DEBUG] [Thread-299740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:29:25.252 [DEBUG] [Thread-299740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:29:25.260 [DEBUG] [Thread-299740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:29:25.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:29:25.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:29:25.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
2025-12-24T09:29:25.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:29:25.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:29:25.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:29:25.295 [DEBUG] [Thread-299740] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:29:29.651 [DEBUG] [Thread-299742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:29:30.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:29:30.667 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:29:44.761 [DEBUG] [Thread-299743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:29:55.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:29:55.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:29:55.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
2025-12-24T09:29:56.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 29, 45), 10.57, 49.91, 0.0, 7.27, 17.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:29:56.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:29:45
2025-12-24T09:29:56.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:29:56.735 [DEBUG] [Thread-299744] [transport.py] [_log()] starting thread (client mode): 0xfabc6b90
2025-12-24T09:29:56.736 [DEBUG] [Thread-299744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:29:56.749 [DEBUG] [Thread-299744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:29:56.749 [INFO] [Thread-299744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:29:56.755 [DEBUG] [Thread-299744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:29:56.755 [DEBUG] [Thread-299744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:29:56.755 [DEBUG] [Thread-299744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:29:56.755 [DEBUG] [Thread-299744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:29:56.755 [DEBUG] [Thread-299744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:29:56.755 [DEBUG] [Thread-299744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:29:56.756 [DEBUG] [Thread-299744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:29:56.756 [DEBUG] [Thread-299744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:29:56.756 [DEBUG] [Thread-299744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:29:56.756 [DEBUG] [Thread-299744] [transport.py] [_log()] client lang: <none>
2025-12-24T09:29:56.756 [DEBUG] [Thread-299744] [transport.py] [_log()] server lang: <none>
2025-12-24T09:29:56.756 [DEBUG] [Thread-299744] [transport.py] [_log()] kex follows: False
2025-12-24T09:29:56.756 [DEBUG] [Thread-299744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:29:56.757 [DEBUG] [Thread-299744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:29:56.757 [DEBUG] [Thread-299744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:29:56.757 [DEBUG] [Thread-299744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:29:56.757 [DEBUG] [Thread-299744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:29:56.758 [DEBUG] [Thread-299744] [transport.py] [_log()] Compression: none
2025-12-24T09:29:56.758 [DEBUG] [Thread-299744] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:29:56.798 [DEBUG] [Thread-299744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:29:56.804 [DEBUG] [Thread-299744] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:29:56.807 [DEBUG] [Thread-299744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:29:56.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:29:56.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:29:56.812 [DEBUG] [Thread-299744] [transport.py] [_log()] userauth is OK
2025-12-24T09:29:56.813 [DEBUG] [Thread-299744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:29:56.813 [DEBUG] [Thread-299744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:29:56.813 [DEBUG] [Thread-299744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:29:56.813 [DEBUG] [Thread-299744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:29:56.842 [INFO] [Thread-299744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:29:56.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:29:57.482 [DEBUG] [Thread-299744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:29:57.482 [DEBUG] [Thread-299744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:29:57.491 [DEBUG] [Thread-299744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:29:57.524 [DEBUG] [Thread-299744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:29:57.524 [DEBUG] [Thread-299744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:29:57.526 [DEBUG] [Thread-299744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:29:57.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:29:57.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:29:57.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:29:57.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:29:57.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:29:57.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:29:57.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:29:57.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:29:57.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:29:57.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.312224 -999.00  +18.00   4.56     55   +8.90 1 1 1 1 1   888    0 11.42 93.75 ----- 6.4 4.6 152.2 12.1 26.1 -26.1 25.1 -27.8 24.0 -24.0 24.5 -25.6
2025-12-24T09:29:57.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:29:57.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:29:57.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.312224
2025-12-24T09:29:57.553 [DEBUG] [Thread-299744] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:29:57.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:29:57.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:29:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:29:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:29:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:29:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:29:45', tmtdew=10.57, humidity=49.91, cloud=0.0, wind=7.27, temperature=17.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:29:36.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:29:57.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:29:57.660 [DEBUG] [Thread-299747] [transport.py] [_log()] starting thread (client mode): 0xf5771240
2025-12-24T09:29:57.660 [DEBUG] [Thread-299747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:29:57.674 [DEBUG] [Thread-299747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:29:57.674 [INFO] [Thread-299747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:29:57.682 [DEBUG] [Thread-299747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:29:57.682 [DEBUG] [Thread-299747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:29:57.682 [DEBUG] [Thread-299747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:29:57.682 [DEBUG] [Thread-299747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:29:57.682 [DEBUG] [Thread-299747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:29:57.682 [DEBUG] [Thread-299747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:29:57.682 [DEBUG] [Thread-299747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:29:57.682 [DEBUG] [Thread-299747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] client lang: <none>
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] server lang: <none>
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] kex follows: False
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] Compression: none
2025-12-24T09:29:57.683 [DEBUG] [Thread-299747] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:29:57.741 [DEBUG] [Thread-299747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:29:57.742 [DEBUG] [Thread-299747] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:29:57.743 [DEBUG] [Thread-299747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:29:57.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:29:57.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:29:57.798 [DEBUG] [Thread-299747] [transport.py] [_log()] userauth is OK
2025-12-24T09:29:57.798 [DEBUG] [Thread-299747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:29:57.798 [DEBUG] [Thread-299747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:29:57.798 [DEBUG] [Thread-299747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:29:57.798 [DEBUG] [Thread-299747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:29:57.817 [INFO] [Thread-299747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:29:57.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:29:57.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:29:58.668 [DEBUG] [Thread-299747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:29:58.668 [DEBUG] [Thread-299747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:29:58.707 [DEBUG] [Thread-299747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:29:58.707 [DEBUG] [Thread-299747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:29:58.715 [DEBUG] [Thread-299747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:29:58.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:29:58.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:29:58.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:29:58.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:29:58.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:29:58.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:29:58.748 [DEBUG] [Thread-299747] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:29:59.816 [DEBUG] [Thread-299749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:30:14.958 [DEBUG] [Thread-299750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:30:16.524 [DEBUG] [Thread-299751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:30:28.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:30:28.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:30:28.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:30:29.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 30, 18), 10.57, 49.9, 0.0, 9.6, 17.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:30:29.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:30:18
2025-12-24T09:30:30.017 [DEBUG] [Thread-299752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:30:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:30:30.216 [DEBUG] [Thread-299753] [transport.py] [_log()] starting thread (client mode): 0xfabc6380
2025-12-24T09:30:30.216 [DEBUG] [Thread-299753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:30:30.223 [DEBUG] [Thread-299753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:30:30.223 [INFO] [Thread-299753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:30:30.226 [DEBUG] [Thread-299753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] client lang: <none>
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] server lang: <none>
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] kex follows: False
2025-12-24T09:30:30.227 [DEBUG] [Thread-299753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:30:30.228 [DEBUG] [Thread-299753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:30:30.228 [DEBUG] [Thread-299753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:30:30.228 [DEBUG] [Thread-299753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:30:30.228 [DEBUG] [Thread-299753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:30:30.228 [DEBUG] [Thread-299753] [transport.py] [_log()] Compression: none
2025-12-24T09:30:30.228 [DEBUG] [Thread-299753] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:30:30.264 [DEBUG] [Thread-299753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:30:30.268 [DEBUG] [Thread-299753] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:30:30.270 [DEBUG] [Thread-299753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:30:30.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:30:30.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:30:30.274 [DEBUG] [Thread-299753] [transport.py] [_log()] userauth is OK
2025-12-24T09:30:30.274 [DEBUG] [Thread-299753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:30:30.275 [DEBUG] [Thread-299753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:30:30.275 [DEBUG] [Thread-299753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:30:30.275 [DEBUG] [Thread-299753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:30:30.302 [INFO] [Thread-299753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:30:30.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:30:30.810 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:30:30.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:30:30.968 [DEBUG] [Thread-299753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:30:30.968 [DEBUG] [Thread-299753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:30:30.970 [DEBUG] [Thread-299753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:30:31.010 [DEBUG] [Thread-299753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:30:31.010 [DEBUG] [Thread-299753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:30:31.015 [DEBUG] [Thread-299753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:30:31.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:30:31.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:30:31.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:30:31.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:30:31.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:30:31.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:30:31.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:30:31.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:30:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:30:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.312571 -999.00  +18.40  15.30     54   +9.00 1 1 1 1 1   888    0 11.29 84.29 ----- 15.8 15.3 175.6 16.3 26.2 -25.5 25.2 -24.8 24.1 -24.5 24.6 -24.7
2025-12-24T09:30:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:30:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:30:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.312571
2025-12-24T09:30:31.051 [DEBUG] [Thread-299753] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:30:31.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:30:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:30:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:30:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:30:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:30:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:30:18', tmtdew=10.57, humidity=49.9, cloud=0.0, wind=9.6, temperature=17.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:30:06.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:30:31.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:30:31.163 [DEBUG] [Thread-299756] [transport.py] [_log()] starting thread (client mode): 0xf57734c0
2025-12-24T09:30:31.163 [DEBUG] [Thread-299756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:30:31.177 [DEBUG] [Thread-299756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:30:31.177 [INFO] [Thread-299756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:30:31.184 [DEBUG] [Thread-299756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:30:31.184 [DEBUG] [Thread-299756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] client lang: <none>
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] server lang: <none>
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] kex follows: False
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] Compression: none
2025-12-24T09:30:31.185 [DEBUG] [Thread-299756] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:30:31.243 [DEBUG] [Thread-299756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:30:31.244 [DEBUG] [Thread-299756] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:30:31.245 [DEBUG] [Thread-299756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:30:31.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:30:31.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:30:31.302 [DEBUG] [Thread-299756] [transport.py] [_log()] userauth is OK
2025-12-24T09:30:31.302 [DEBUG] [Thread-299756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:30:31.303 [DEBUG] [Thread-299756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:30:31.303 [DEBUG] [Thread-299756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:30:31.303 [DEBUG] [Thread-299756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:30:31.321 [INFO] [Thread-299756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:30:31.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:30:31.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:30:32.155 [DEBUG] [Thread-299756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:30:32.155 [DEBUG] [Thread-299756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:30:32.195 [DEBUG] [Thread-299756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:30:32.195 [DEBUG] [Thread-299756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:30:32.203 [DEBUG] [Thread-299756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:30:32.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:30:32.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:30:32.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:30:32.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:30:32.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:30:32.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:30:32.240 [DEBUG] [Thread-299756] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:30:45.067 [DEBUG] [Thread-299758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:31:00.183 [DEBUG] [Thread-299759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:31:02.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:31:02.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:31:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:31:03.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 30, 51), 10.66, 49.88, 0.0, 13.32, 17.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:31:03.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:30:51
2025-12-24T09:31:03.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:31:03.477 [DEBUG] [Thread-299760] [transport.py] [_log()] starting thread (client mode): 0xf5771ea0
2025-12-24T09:31:03.477 [DEBUG] [Thread-299760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:31:03.492 [DEBUG] [Thread-299760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:31:03.492 [INFO] [Thread-299760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] client lang: <none>
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] server lang: <none>
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] kex follows: False
2025-12-24T09:31:03.497 [DEBUG] [Thread-299760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:31:03.498 [DEBUG] [Thread-299760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:31:03.498 [DEBUG] [Thread-299760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:31:03.498 [DEBUG] [Thread-299760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:31:03.498 [DEBUG] [Thread-299760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:31:03.498 [DEBUG] [Thread-299760] [transport.py] [_log()] Compression: none
2025-12-24T09:31:03.498 [DEBUG] [Thread-299760] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:31:03.534 [DEBUG] [Thread-299760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:31:03.538 [DEBUG] [Thread-299760] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:31:03.540 [DEBUG] [Thread-299760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:31:03.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:31:03.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:31:03.544 [DEBUG] [Thread-299760] [transport.py] [_log()] userauth is OK
2025-12-24T09:31:03.544 [DEBUG] [Thread-299760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:31:03.544 [DEBUG] [Thread-299760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:31:03.544 [DEBUG] [Thread-299760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:31:03.544 [DEBUG] [Thread-299760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:31:03.562 [INFO] [Thread-299760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:31:03.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:31:04.181 [DEBUG] [Thread-299760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:31:04.181 [DEBUG] [Thread-299760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:31:04.192 [DEBUG] [Thread-299760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:31:04.222 [DEBUG] [Thread-299760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:31:04.222 [DEBUG] [Thread-299760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:31:04.225 [DEBUG] [Thread-299760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:31:04.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:31:04.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:31:04.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:31:04.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:31:04.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:31:04.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:31:04.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:31:04.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:31:04.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:31:04.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.312918 -999.00  +18.20  14.92     54   +8.90 1 1 1 1 1   888    0 11.21 85.72 ----- 13.0 14.9 168.2 16.6 26.2 -26.8 25.2 -24.9 24.1 -23.9 24.6 -26.6
2025-12-24T09:31:04.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:31:04.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:31:04.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.312918
2025-12-24T09:31:04.252 [DEBUG] [Thread-299760] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:31:04.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:31:04.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:31:04.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:31:04.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:31:04.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:31:04.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:30:51', tmtdew=10.66, humidity=49.88, cloud=0.0, wind=13.32, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:30:36.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:31:04.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:31:04.358 [DEBUG] [Thread-299763] [transport.py] [_log()] starting thread (client mode): 0xfabc6200
2025-12-24T09:31:04.358 [DEBUG] [Thread-299763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:31:04.375 [DEBUG] [Thread-299763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:31:04.376 [INFO] [Thread-299763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:31:04.386 [DEBUG] [Thread-299763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:31:04.386 [DEBUG] [Thread-299763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:31:04.386 [DEBUG] [Thread-299763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:31:04.386 [DEBUG] [Thread-299763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:31:04.386 [DEBUG] [Thread-299763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] client lang: <none>
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] server lang: <none>
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] kex follows: False
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] Compression: none
2025-12-24T09:31:04.387 [DEBUG] [Thread-299763] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:31:04.453 [DEBUG] [Thread-299763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:31:04.453 [DEBUG] [Thread-299763] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:31:04.454 [DEBUG] [Thread-299763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:31:04.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:31:04.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:31:04.514 [DEBUG] [Thread-299763] [transport.py] [_log()] userauth is OK
2025-12-24T09:31:04.514 [DEBUG] [Thread-299763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:31:04.514 [DEBUG] [Thread-299763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:31:04.514 [DEBUG] [Thread-299763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:31:04.515 [DEBUG] [Thread-299763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:31:04.533 [INFO] [Thread-299763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:31:04.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:31:04.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:31:05.376 [DEBUG] [Thread-299763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:31:05.376 [DEBUG] [Thread-299763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:31:05.422 [DEBUG] [Thread-299763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:31:05.422 [DEBUG] [Thread-299763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:31:05.438 [DEBUG] [Thread-299763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:31:05.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:31:05.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:31:05.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:31:05.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:31:05.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:31:05.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:31:05.493 [DEBUG] [Thread-299763] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:31:15.267 [DEBUG] [Thread-299765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:31:16.791 [DEBUG] [Thread-299766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:31:30.455 [DEBUG] [Thread-299767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:31:30.963 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:31:30.965 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:31:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:31:35.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:31:35.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
2025-12-24T09:31:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 31, 24), 10.63, 49.93, 0.0, 13.62, 17.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:31:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:31:24
2025-12-24T09:31:36.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:31:36.812 [DEBUG] [Thread-299768] [transport.py] [_log()] starting thread (client mode): 0xf5797a00
2025-12-24T09:31:36.813 [DEBUG] [Thread-299768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:31:36.826 [DEBUG] [Thread-299768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:31:36.826 [INFO] [Thread-299768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:31:36.830 [DEBUG] [Thread-299768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] client lang: <none>
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] server lang: <none>
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] kex follows: False
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:31:36.831 [DEBUG] [Thread-299768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:31:36.832 [DEBUG] [Thread-299768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:31:36.832 [DEBUG] [Thread-299768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:31:36.832 [DEBUG] [Thread-299768] [transport.py] [_log()] Compression: none
2025-12-24T09:31:36.832 [DEBUG] [Thread-299768] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:31:36.856 [DEBUG] [Thread-299768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:31:36.859 [DEBUG] [Thread-299768] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:31:36.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:31:36.862 [DEBUG] [Thread-299768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:31:36.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:31:36.864 [DEBUG] [Thread-299768] [transport.py] [_log()] userauth is OK
2025-12-24T09:31:36.864 [DEBUG] [Thread-299768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:31:36.865 [DEBUG] [Thread-299768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:31:36.865 [DEBUG] [Thread-299768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:31:36.865 [DEBUG] [Thread-299768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:31:36.887 [INFO] [Thread-299768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:31:36.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:31:37.533 [DEBUG] [Thread-299768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:31:37.533 [DEBUG] [Thread-299768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:31:37.534 [DEBUG] [Thread-299768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:31:37.575 [DEBUG] [Thread-299768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:31:37.575 [DEBUG] [Thread-299768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:31:37.578 [DEBUG] [Thread-299768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:31:37.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:31:37.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:31:37.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:31:37.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:31:37.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:31:37.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:31:37.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:31:37.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:31:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:31:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.313266 -999.00  +18.00  13.65     54   +8.70 1 1 1 1 1   888    0 11.18 78.52 ----- 11.0 13.7 194.2 18.4 26.2 -26.8 24.8 -30.6 24.1 -23.9 24.6 -26.2
2025-12-24T09:31:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:31:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:31:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.313266
2025-12-24T09:31:37.612 [DEBUG] [Thread-299768] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:31:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:31:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:31:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:31:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:31:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:31:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:31:24', tmtdew=10.63, humidity=49.93, cloud=0.0, wind=13.62, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:31:06.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:31:37.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:31:37.708 [DEBUG] [Thread-299771] [transport.py] [_log()] starting thread (client mode): 0xf5796b60
2025-12-24T09:31:37.708 [DEBUG] [Thread-299771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:31:37.720 [DEBUG] [Thread-299771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:31:37.721 [INFO] [Thread-299771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] client lang: <none>
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] server lang: <none>
2025-12-24T09:31:37.730 [DEBUG] [Thread-299771] [transport.py] [_log()] kex follows: False
2025-12-24T09:31:37.731 [DEBUG] [Thread-299771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:31:37.731 [DEBUG] [Thread-299771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:31:37.731 [DEBUG] [Thread-299771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:31:37.731 [DEBUG] [Thread-299771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:31:37.731 [DEBUG] [Thread-299771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:31:37.731 [DEBUG] [Thread-299771] [transport.py] [_log()] Compression: none
2025-12-24T09:31:37.731 [DEBUG] [Thread-299771] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:31:37.788 [DEBUG] [Thread-299771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:31:37.788 [DEBUG] [Thread-299771] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:31:37.789 [DEBUG] [Thread-299771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:31:37.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:31:37.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:31:37.848 [DEBUG] [Thread-299771] [transport.py] [_log()] userauth is OK
2025-12-24T09:31:37.848 [DEBUG] [Thread-299771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:31:37.848 [DEBUG] [Thread-299771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:31:37.848 [DEBUG] [Thread-299771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:31:37.848 [DEBUG] [Thread-299771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:31:37.867 [INFO] [Thread-299771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:31:37.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:31:37.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:31:38.675 [DEBUG] [Thread-299771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:31:38.675 [DEBUG] [Thread-299771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:31:38.722 [DEBUG] [Thread-299771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:31:38.722 [DEBUG] [Thread-299771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:31:38.730 [DEBUG] [Thread-299771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:31:38.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:31:38.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:31:38.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:31:38.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:31:38.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:31:38.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:31:38.764 [DEBUG] [Thread-299771] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:31:45.529 [DEBUG] [Thread-299773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:32:00.640 [DEBUG] [Thread-299774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:32:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:32:08.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:32:08.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:32:09.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 31, 57), 10.52, 50.26, 0.0, 14.47, 17.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:32:09.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:31:57
2025-12-24T09:32:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:32:10.069 [DEBUG] [Thread-299775] [transport.py] [_log()] starting thread (client mode): 0xf57718a0
2025-12-24T09:32:10.069 [DEBUG] [Thread-299775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:32:10.082 [DEBUG] [Thread-299775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:32:10.082 [INFO] [Thread-299775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:32:10.086 [DEBUG] [Thread-299775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:32:10.086 [DEBUG] [Thread-299775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:32:10.086 [DEBUG] [Thread-299775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:32:10.086 [DEBUG] [Thread-299775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:32:10.086 [DEBUG] [Thread-299775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:32:10.086 [DEBUG] [Thread-299775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:32:10.086 [DEBUG] [Thread-299775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:32:10.087 [DEBUG] [Thread-299775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:32:10.087 [DEBUG] [Thread-299775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:32:10.087 [DEBUG] [Thread-299775] [transport.py] [_log()] client lang: <none>
2025-12-24T09:32:10.087 [DEBUG] [Thread-299775] [transport.py] [_log()] server lang: <none>
2025-12-24T09:32:10.087 [DEBUG] [Thread-299775] [transport.py] [_log()] kex follows: False
2025-12-24T09:32:10.087 [DEBUG] [Thread-299775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:32:10.087 [DEBUG] [Thread-299775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:32:10.087 [DEBUG] [Thread-299775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:32:10.088 [DEBUG] [Thread-299775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:32:10.088 [DEBUG] [Thread-299775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:32:10.088 [DEBUG] [Thread-299775] [transport.py] [_log()] Compression: none
2025-12-24T09:32:10.088 [DEBUG] [Thread-299775] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:32:10.112 [DEBUG] [Thread-299775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:32:10.116 [DEBUG] [Thread-299775] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:32:10.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:32:10.120 [DEBUG] [Thread-299775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:32:10.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:32:10.123 [DEBUG] [Thread-299775] [transport.py] [_log()] userauth is OK
2025-12-24T09:32:10.123 [DEBUG] [Thread-299775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:32:10.123 [DEBUG] [Thread-299775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:32:10.123 [DEBUG] [Thread-299775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:32:10.123 [DEBUG] [Thread-299775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:32:10.148 [INFO] [Thread-299775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:32:10.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:32:10.774 [DEBUG] [Thread-299775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:32:10.775 [DEBUG] [Thread-299775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:32:10.776 [DEBUG] [Thread-299775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:32:10.817 [DEBUG] [Thread-299775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:32:10.817 [DEBUG] [Thread-299775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:32:10.821 [DEBUG] [Thread-299775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:32:10.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:32:10.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:32:10.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:32:10.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:32:10.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:32:10.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:32:10.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:32:10.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:32:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:32:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.313613 -999.00  +18.00   9.39     54   +8.80 1 1 1 1 1   888    0 11.05 75.25 ----- 7.2 9.4 180.6 12.9 26.1 -26.4 24.9 -26.7 24.1 -24.0 24.6 -26.7
2025-12-24T09:32:10.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:32:10.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:32:10.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.313613
2025-12-24T09:32:10.856 [DEBUG] [Thread-299775] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:32:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:32:10.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:32:10.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:32:10.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:32:10.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:32:10.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:31:57', tmtdew=10.52, humidity=50.26, cloud=0.0, wind=14.47, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:31:36.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:32:10.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:32:10.951 [DEBUG] [Thread-299778] [transport.py] [_log()] starting thread (client mode): 0xf57021a0
2025-12-24T09:32:10.951 [DEBUG] [Thread-299778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:32:10.965 [DEBUG] [Thread-299778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:32:10.965 [INFO] [Thread-299778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:32:10.972 [DEBUG] [Thread-299778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] client lang: <none>
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] server lang: <none>
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] kex follows: False
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] Compression: none
2025-12-24T09:32:10.973 [DEBUG] [Thread-299778] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:32:11.030 [DEBUG] [Thread-299778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:32:11.030 [DEBUG] [Thread-299778] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:32:11.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:32:11.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:32:11.031 [DEBUG] [Thread-299778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:32:11.086 [DEBUG] [Thread-299778] [transport.py] [_log()] userauth is OK
2025-12-24T09:32:11.086 [DEBUG] [Thread-299778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:32:11.087 [DEBUG] [Thread-299778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:32:11.087 [DEBUG] [Thread-299778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:32:11.087 [DEBUG] [Thread-299778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:32:11.104 [INFO] [Thread-299778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:32:11.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:32:11.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:32:11.918 [DEBUG] [Thread-299778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:32:11.918 [DEBUG] [Thread-299778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:32:11.967 [DEBUG] [Thread-299778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:32:11.967 [DEBUG] [Thread-299778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:32:11.976 [DEBUG] [Thread-299778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:32:11.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:32:11.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:32:11.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
2025-12-24T09:32:12.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:32:12.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:32:12.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:32:12.017 [DEBUG] [Thread-299778] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:32:15.674 [DEBUG] [Thread-299780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:32:17.054 [DEBUG] [Thread-299781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:32:30.789 [DEBUG] [Thread-299782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:32:31.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:32:31.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:32:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:32:42.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:32:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:32:42.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 32, 30), 10.6, 49.98, 0.0, 11.88, 17.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:32:42.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:32:30
2025-12-24T09:32:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:32:43.294 [DEBUG] [Thread-299783] [transport.py] [_log()] starting thread (client mode): 0xf5740bb0
2025-12-24T09:32:43.295 [DEBUG] [Thread-299783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:32:43.309 [DEBUG] [Thread-299783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:32:43.309 [INFO] [Thread-299783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:32:43.312 [DEBUG] [Thread-299783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] client lang: <none>
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] server lang: <none>
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] kex follows: False
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:32:43.313 [DEBUG] [Thread-299783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:32:43.314 [DEBUG] [Thread-299783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:32:43.314 [DEBUG] [Thread-299783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:32:43.314 [DEBUG] [Thread-299783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:32:43.314 [DEBUG] [Thread-299783] [transport.py] [_log()] Compression: none
2025-12-24T09:32:43.314 [DEBUG] [Thread-299783] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:32:43.337 [DEBUG] [Thread-299783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:32:43.339 [DEBUG] [Thread-299783] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:32:43.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:32:43.342 [DEBUG] [Thread-299783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:32:43.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:32:43.344 [DEBUG] [Thread-299783] [transport.py] [_log()] userauth is OK
2025-12-24T09:32:43.344 [DEBUG] [Thread-299783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:32:43.344 [DEBUG] [Thread-299783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:32:43.345 [DEBUG] [Thread-299783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:32:43.345 [DEBUG] [Thread-299783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:32:43.369 [INFO] [Thread-299783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:32:43.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:32:43.953 [DEBUG] [Thread-299783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:32:43.954 [DEBUG] [Thread-299783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:32:43.955 [DEBUG] [Thread-299783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:32:43.994 [DEBUG] [Thread-299783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:32:43.994 [DEBUG] [Thread-299783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:32:43.997 [DEBUG] [Thread-299783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:32:44.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:32:44.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:32:44.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:32:44.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:32:44.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:32:44.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:32:44.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:32:44.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:32:44.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:32:44.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.314307 -999.00  +18.70   5.75     53   +9.10 1 1 1 1 1   888    0 10.60 66.76 ----- 5.8 5.8 151.0 9.2 26.2 -25.3 25.4 -23.8 24.1 -23.5 24.7 -25.0
2025-12-24T09:32:44.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:32:44.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:32:44.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.314307
2025-12-24T09:32:44.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:32:44.024 [DEBUG] [Thread-299783] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:32:44.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:32:44.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:32:44.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:32:44.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:32:44.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:32:30', tmtdew=10.6, humidity=49.98, cloud=0.0, wind=11.88, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:32:36.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:32:44.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:32:44.120 [DEBUG] [Thread-299786] [transport.py] [_log()] starting thread (client mode): 0xf5742b00
2025-12-24T09:32:44.121 [DEBUG] [Thread-299786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:32:44.135 [DEBUG] [Thread-299786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:32:44.135 [INFO] [Thread-299786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] client lang: <none>
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] server lang: <none>
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] kex follows: False
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:32:44.143 [DEBUG] [Thread-299786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:32:44.144 [DEBUG] [Thread-299786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:32:44.144 [DEBUG] [Thread-299786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:32:44.144 [DEBUG] [Thread-299786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:32:44.144 [DEBUG] [Thread-299786] [transport.py] [_log()] Compression: none
2025-12-24T09:32:44.144 [DEBUG] [Thread-299786] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:32:44.200 [DEBUG] [Thread-299786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:32:44.200 [DEBUG] [Thread-299786] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:32:44.200 [DEBUG] [Thread-299786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:32:44.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:32:44.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:32:44.257 [DEBUG] [Thread-299786] [transport.py] [_log()] userauth is OK
2025-12-24T09:32:44.257 [DEBUG] [Thread-299786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:32:44.257 [DEBUG] [Thread-299786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:32:44.257 [DEBUG] [Thread-299786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:32:44.257 [DEBUG] [Thread-299786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:32:44.271 [INFO] [Thread-299786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:32:44.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:32:44.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:32:45.102 [DEBUG] [Thread-299786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:32:45.103 [DEBUG] [Thread-299786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:32:45.151 [DEBUG] [Thread-299786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:32:45.151 [DEBUG] [Thread-299786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:32:45.160 [DEBUG] [Thread-299786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:32:45.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:32: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')
2025-12-24T09:32:45.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
2025-12-24T09:32:45.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:32:45.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:32:45.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:32:45.198 [DEBUG] [Thread-299786] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:32:45.845 [DEBUG] [Thread-299788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:33:00.923 [DEBUG] [Thread-299789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:33:15.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:33:15.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:33:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:33:15.978 [DEBUG] [Thread-299790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:33:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 33, 3), 10.61, 49.99, 0.0, 12.76, 17.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:33:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:33:03
2025-12-24T09:33:16.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:33:16.418 [DEBUG] [Thread-299791] [transport.py] [_log()] starting thread (client mode): 0xf5743ca0
2025-12-24T09:33:16.419 [DEBUG] [Thread-299791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:33:16.426 [DEBUG] [Thread-299791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:33:16.426 [INFO] [Thread-299791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:33:16.429 [DEBUG] [Thread-299791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] client lang: <none>
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] server lang: <none>
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] kex follows: False
2025-12-24T09:33:16.430 [DEBUG] [Thread-299791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:33:16.431 [DEBUG] [Thread-299791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:33:16.431 [DEBUG] [Thread-299791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:33:16.431 [DEBUG] [Thread-299791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:33:16.431 [DEBUG] [Thread-299791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:33:16.431 [DEBUG] [Thread-299791] [transport.py] [_log()] Compression: none
2025-12-24T09:33:16.431 [DEBUG] [Thread-299791] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:33:16.459 [DEBUG] [Thread-299791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:33:16.462 [DEBUG] [Thread-299791] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:33:16.464 [DEBUG] [Thread-299791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:33:16.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:33:16.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:33:16.468 [DEBUG] [Thread-299791] [transport.py] [_log()] userauth is OK
2025-12-24T09:33:16.468 [DEBUG] [Thread-299791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:33:16.469 [DEBUG] [Thread-299791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:33:16.469 [DEBUG] [Thread-299791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:33:16.469 [DEBUG] [Thread-299791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:33:16.496 [INFO] [Thread-299791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:33:16.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:33:17.071 [DEBUG] [Thread-299791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:33:17.071 [DEBUG] [Thread-299791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:33:17.072 [DEBUG] [Thread-299791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:33:17.112 [DEBUG] [Thread-299791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:33:17.112 [DEBUG] [Thread-299791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:33:17.115 [DEBUG] [Thread-299791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:33:17.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:33:17.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:33:17.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:33:17.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:33:17.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:33:17.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:33:17.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:33:17.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:33:17.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:33:17.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.314655 -999.00  +19.00   7.74     53   +9.20 1 1 1 1 1   888    0 10.53 66.54 ----- 7.1 7.7 114.4 10.8 26.5 -24.7 25.7 -24.4 24.2 -22.9 24.9 -24.1
2025-12-24T09:33:17.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:33:17.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:33:17.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.314655
2025-12-24T09:33:17.147 [DEBUG] [Thread-299791] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:33:17.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:33:17.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:33:17.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:33:17.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:33:17.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:33:17.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:33:03', tmtdew=10.61, humidity=49.99, cloud=0.0, wind=12.76, temperature=17.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:33:06.192', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:33:17.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:33:17.261 [DEBUG] [Thread-299794] [transport.py] [_log()] starting thread (client mode): 0xf8154f40
2025-12-24T09:33:17.261 [DEBUG] [Thread-299794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:33:17.275 [DEBUG] [Thread-299794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:33:17.276 [INFO] [Thread-299794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:33:17.288 [DEBUG] [Thread-299794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] client lang: <none>
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] server lang: <none>
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] kex follows: False
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] Compression: none
2025-12-24T09:33:17.289 [DEBUG] [Thread-299794] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:33:17.340 [DEBUG] [Thread-299794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:33:17.340 [DEBUG] [Thread-299794] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:33:17.340 [DEBUG] [Thread-299794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:33:17.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:33:17.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:33:17.343 [DEBUG] [Thread-299796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:33:17.398 [DEBUG] [Thread-299794] [transport.py] [_log()] userauth is OK
2025-12-24T09:33:17.399 [DEBUG] [Thread-299794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:33:17.399 [DEBUG] [Thread-299794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:33:17.399 [DEBUG] [Thread-299794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:33:17.399 [DEBUG] [Thread-299794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:33:17.416 [INFO] [Thread-299794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:33:17.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:33:17.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:33:18.273 [DEBUG] [Thread-299794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:33:18.273 [DEBUG] [Thread-299794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:33:18.312 [DEBUG] [Thread-299794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:33:18.313 [DEBUG] [Thread-299794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:33:18.322 [DEBUG] [Thread-299794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:33:18.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:33:18.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')
2025-12-24T09:33:18.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
2025-12-24T09:33:18.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:33:18.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:33:18.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:33:18.360 [DEBUG] [Thread-299794] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:33:31.034 [DEBUG] [Thread-299797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:33:31.262 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:33:31.263 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:33:46.150 [DEBUG] [Thread-299798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:33:48.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:33:48.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:33:48.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:33:49.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 33, 36), 10.07, 51.42, 0.0, 9.55, 17.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:33:49.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:33:36
2025-12-24T09:33:49.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:33:49.602 [DEBUG] [Thread-299799] [transport.py] [_log()] starting thread (client mode): 0xf5773010
2025-12-24T09:33:49.602 [DEBUG] [Thread-299799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:33:49.615 [DEBUG] [Thread-299799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:33:49.615 [INFO] [Thread-299799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] client lang: <none>
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] server lang: <none>
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] kex follows: False
2025-12-24T09:33:49.620 [DEBUG] [Thread-299799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:33:49.621 [DEBUG] [Thread-299799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:33:49.621 [DEBUG] [Thread-299799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:33:49.621 [DEBUG] [Thread-299799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:33:49.622 [DEBUG] [Thread-299799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:33:49.622 [DEBUG] [Thread-299799] [transport.py] [_log()] Compression: none
2025-12-24T09:33:49.622 [DEBUG] [Thread-299799] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:33:49.654 [DEBUG] [Thread-299799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:33:49.658 [DEBUG] [Thread-299799] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:33:49.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:33:49.660 [DEBUG] [Thread-299799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:33:49.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:33:49.663 [DEBUG] [Thread-299799] [transport.py] [_log()] userauth is OK
2025-12-24T09:33:49.663 [DEBUG] [Thread-299799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:33:49.663 [DEBUG] [Thread-299799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:33:49.663 [DEBUG] [Thread-299799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:33:49.663 [DEBUG] [Thread-299799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:33:49.674 [INFO] [Thread-299799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:33:49.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:33:50.253 [DEBUG] [Thread-299799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:33:50.254 [DEBUG] [Thread-299799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:33:50.257 [DEBUG] [Thread-299799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:33:50.294 [DEBUG] [Thread-299799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:33:50.294 [DEBUG] [Thread-299799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:33:50.297 [DEBUG] [Thread-299799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:33:50.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:33:50.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:33:50.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:33:50.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:33:50.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:33:50.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:33:50.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:33:50.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:33:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:33:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.315002 -999.00  +19.20   9.02     52   +9.20 1 1 1 1 1   888    0 10.83 68.60 ----- 8.2 9.0 113.6 10.4 26.6 -25.4 25.9 -24.0 24.3 -23.5 25.0 -24.1
2025-12-24T09:33:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:33:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:33:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.315002
2025-12-24T09:33:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:33:50.328 [DEBUG] [Thread-299799] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:33:50.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:33:50.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:33:50.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:33:50.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:33:50.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:33:36', tmtdew=10.07, humidity=51.42, cloud=0.0, wind=9.55, temperature=17.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:33:36.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:33:50.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:33:50.421 [DEBUG] [Thread-299802] [transport.py] [_log()] starting thread (client mode): 0xf5771810
2025-12-24T09:33:50.422 [DEBUG] [Thread-299802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:33:50.436 [DEBUG] [Thread-299802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:33:50.436 [INFO] [Thread-299802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] client lang: <none>
2025-12-24T09:33:50.444 [DEBUG] [Thread-299802] [transport.py] [_log()] server lang: <none>
2025-12-24T09:33:50.445 [DEBUG] [Thread-299802] [transport.py] [_log()] kex follows: False
2025-12-24T09:33:50.445 [DEBUG] [Thread-299802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:33:50.445 [DEBUG] [Thread-299802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:33:50.445 [DEBUG] [Thread-299802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:33:50.445 [DEBUG] [Thread-299802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:33:50.445 [DEBUG] [Thread-299802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:33:50.445 [DEBUG] [Thread-299802] [transport.py] [_log()] Compression: none
2025-12-24T09:33:50.445 [DEBUG] [Thread-299802] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:33:50.503 [DEBUG] [Thread-299802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:33:50.504 [DEBUG] [Thread-299802] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:33:50.505 [DEBUG] [Thread-299802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:33:50.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:33:50.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:33:50.562 [DEBUG] [Thread-299802] [transport.py] [_log()] userauth is OK
2025-12-24T09:33:50.562 [DEBUG] [Thread-299802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:33:50.562 [DEBUG] [Thread-299802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:33:50.562 [DEBUG] [Thread-299802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:33:50.563 [DEBUG] [Thread-299802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:33:50.581 [INFO] [Thread-299802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:33:50.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:33:50.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:33:51.388 [DEBUG] [Thread-299802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:33:51.388 [DEBUG] [Thread-299802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:33:51.427 [DEBUG] [Thread-299802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:33:51.427 [DEBUG] [Thread-299802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:33:51.436 [DEBUG] [Thread-299802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:33:51.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:33:51.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')
2025-12-24T09:33:51.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:33:51.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:33:51.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:33:51.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:33:51.469 [DEBUG] [Thread-299802] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:34:01.197 [DEBUG] [Thread-299804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:34:16.303 [DEBUG] [Thread-299805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:34:17.667 [DEBUG] [Thread-299806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:34:21.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:34:21.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:34:21.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:34:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 34, 10), 9.98, 51.74, 0.0, 5.19, 17.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:34:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:34:10
2025-12-24T09:34:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:34:22.727 [DEBUG] [Thread-299807] [transport.py] [_log()] starting thread (client mode): 0xf57004f0
2025-12-24T09:34:22.728 [DEBUG] [Thread-299807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:34:22.738 [DEBUG] [Thread-299807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:34:22.738 [INFO] [Thread-299807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:34:22.746 [DEBUG] [Thread-299807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:34:22.747 [DEBUG] [Thread-299807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:34:22.747 [DEBUG] [Thread-299807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:34:22.747 [DEBUG] [Thread-299807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:34:22.747 [DEBUG] [Thread-299807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:34:22.748 [DEBUG] [Thread-299807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:34:22.748 [DEBUG] [Thread-299807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:34:22.748 [DEBUG] [Thread-299807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:34:22.748 [DEBUG] [Thread-299807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:34:22.748 [DEBUG] [Thread-299807] [transport.py] [_log()] client lang: <none>
2025-12-24T09:34:22.748 [DEBUG] [Thread-299807] [transport.py] [_log()] server lang: <none>
2025-12-24T09:34:22.748 [DEBUG] [Thread-299807] [transport.py] [_log()] kex follows: False
2025-12-24T09:34:22.748 [DEBUG] [Thread-299807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:34:22.749 [DEBUG] [Thread-299807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:34:22.750 [DEBUG] [Thread-299807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:34:22.750 [DEBUG] [Thread-299807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:34:22.750 [DEBUG] [Thread-299807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:34:22.750 [DEBUG] [Thread-299807] [transport.py] [_log()] Compression: none
2025-12-24T09:34:22.750 [DEBUG] [Thread-299807] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:34:22.783 [DEBUG] [Thread-299807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:34:22.788 [DEBUG] [Thread-299807] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:34:22.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:34:22.792 [DEBUG] [Thread-299807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:34:22.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:34:22.796 [DEBUG] [Thread-299807] [transport.py] [_log()] userauth is OK
2025-12-24T09:34:22.797 [DEBUG] [Thread-299807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:34:22.797 [DEBUG] [Thread-299807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:34:22.797 [DEBUG] [Thread-299807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:34:22.797 [DEBUG] [Thread-299807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:34:22.824 [INFO] [Thread-299807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:34:22.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:34:23.435 [DEBUG] [Thread-299807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:34:23.435 [DEBUG] [Thread-299807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:34:23.435 [DEBUG] [Thread-299807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:34:23.476 [DEBUG] [Thread-299807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:34:23.476 [DEBUG] [Thread-299807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:34:23.478 [DEBUG] [Thread-299807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:34:23.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:34:23.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:34:23.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:34:23.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:34:23.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:34:23.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:34:23.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:34:23.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:34:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:34:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.315349 -999.00  +19.20  11.51     52   +9.10 1 1 1 1 1   888    0 10.77 68.90 ----- 14.0 11.5 155.0 13.9 26.7 -24.6 25.9 -24.5 24.5 -23.3 25.1 -23.7
2025-12-24T09:34:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:34:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:34:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.315349
2025-12-24T09:34:23.507 [DEBUG] [Thread-299807] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:34:23.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:34:23.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:34:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:34:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:34:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:34:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:34:10', tmtdew=9.98, humidity=51.74, cloud=0.0, wind=5.19, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:34:06.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:34:23.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:34:23.636 [DEBUG] [Thread-299810] [transport.py] [_log()] starting thread (client mode): 0xf57bfd60
2025-12-24T09:34:23.637 [DEBUG] [Thread-299810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:34:23.651 [DEBUG] [Thread-299810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:34:23.651 [INFO] [Thread-299810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:34:23.659 [DEBUG] [Thread-299810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:34:23.659 [DEBUG] [Thread-299810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:34:23.659 [DEBUG] [Thread-299810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:34:23.659 [DEBUG] [Thread-299810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] client lang: <none>
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] server lang: <none>
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] kex follows: False
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] Compression: none
2025-12-24T09:34:23.660 [DEBUG] [Thread-299810] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:34:23.721 [DEBUG] [Thread-299810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:34:23.721 [DEBUG] [Thread-299810] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:34:23.721 [DEBUG] [Thread-299810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:34:23.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:34:23.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:34:23.777 [DEBUG] [Thread-299810] [transport.py] [_log()] userauth is OK
2025-12-24T09:34:23.778 [DEBUG] [Thread-299810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:34:23.778 [DEBUG] [Thread-299810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:34:23.778 [DEBUG] [Thread-299810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:34:23.778 [DEBUG] [Thread-299810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:34:23.791 [INFO] [Thread-299810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:34:23.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:34:23.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:34:24.600 [DEBUG] [Thread-299810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:34:24.600 [DEBUG] [Thread-299810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:34:24.647 [DEBUG] [Thread-299810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:34:24.648 [DEBUG] [Thread-299810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:34:24.656 [DEBUG] [Thread-299810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:34:24.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:34:24.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:34:24.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:34:24.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:34:24.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:34:24.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:34:24.689 [DEBUG] [Thread-299810] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:34:31.377 [DEBUG] [Thread-299812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:34:31.421 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:34:31.422 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:34:46.502 [DEBUG] [Thread-299813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:34:54.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:34:54.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:34:54.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:34:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 34, 43), 10.15, 51.19, 0.0, 11.73, 17.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:34:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:34:43
2025-12-24T09:34:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:34:55.933 [DEBUG] [Thread-299814] [transport.py] [_log()] starting thread (client mode): 0xf8157ac0
2025-12-24T09:34:55.934 [DEBUG] [Thread-299814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:34:55.947 [DEBUG] [Thread-299814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:34:55.947 [INFO] [Thread-299814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:34:55.951 [DEBUG] [Thread-299814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] client lang: <none>
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] server lang: <none>
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] kex follows: False
2025-12-24T09:34:55.952 [DEBUG] [Thread-299814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:34:55.953 [DEBUG] [Thread-299814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:34:55.953 [DEBUG] [Thread-299814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:34:55.953 [DEBUG] [Thread-299814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:34:55.953 [DEBUG] [Thread-299814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:34:55.953 [DEBUG] [Thread-299814] [transport.py] [_log()] Compression: none
2025-12-24T09:34:55.953 [DEBUG] [Thread-299814] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:34:55.990 [DEBUG] [Thread-299814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:34:55.995 [DEBUG] [Thread-299814] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:34:55.997 [DEBUG] [Thread-299814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:34:55.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:34:56.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:34:56.003 [DEBUG] [Thread-299814] [transport.py] [_log()] userauth is OK
2025-12-24T09:34:56.003 [DEBUG] [Thread-299814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:34:56.004 [DEBUG] [Thread-299814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:34:56.004 [DEBUG] [Thread-299814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:34:56.004 [DEBUG] [Thread-299814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:34:56.031 [INFO] [Thread-299814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:34:56.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:34:56.598 [DEBUG] [Thread-299814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:34:56.598 [DEBUG] [Thread-299814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:34:56.607 [DEBUG] [Thread-299814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:34:56.640 [DEBUG] [Thread-299814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:34:56.640 [DEBUG] [Thread-299814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:34:56.642 [DEBUG] [Thread-299814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:34:56.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:34:56.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:34:56.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:34:56.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:34:56.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:34:56.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:34:56.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:34:56.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:34:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:34:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.315349 -999.00  +19.20  11.51     52   +9.10 1 1 1 1 1   888    0 10.77 68.90 ----- 14.0 11.5 155.0 13.9 26.7 -24.6 25.9 -24.5 24.5 -23.3 25.1 -23.7
2025-12-24T09:34:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:34:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:34:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.315349
2025-12-24T09:34:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:34:56.674 [DEBUG] [Thread-299814] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:34:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:34:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:34:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:34:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:34:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:34:43', tmtdew=10.15, humidity=51.19, cloud=0.0, wind=11.73, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:34:06.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:34:56.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:34:56.763 [DEBUG] [Thread-299817] [transport.py] [_log()] starting thread (client mode): 0xf57bde70
2025-12-24T09:34:56.763 [DEBUG] [Thread-299817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:34:56.777 [DEBUG] [Thread-299817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:34:56.777 [INFO] [Thread-299817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] client lang: <none>
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] server lang: <none>
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] kex follows: False
2025-12-24T09:34:56.785 [DEBUG] [Thread-299817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:34:56.786 [DEBUG] [Thread-299817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:34:56.786 [DEBUG] [Thread-299817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:34:56.786 [DEBUG] [Thread-299817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:34:56.786 [DEBUG] [Thread-299817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:34:56.786 [DEBUG] [Thread-299817] [transport.py] [_log()] Compression: none
2025-12-24T09:34:56.786 [DEBUG] [Thread-299817] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:34:56.842 [DEBUG] [Thread-299817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:34:56.843 [DEBUG] [Thread-299817] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:34:56.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:34:56.844 [DEBUG] [Thread-299817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:34:56.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:34:56.898 [DEBUG] [Thread-299817] [transport.py] [_log()] userauth is OK
2025-12-24T09:34:56.899 [DEBUG] [Thread-299817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:34:56.899 [DEBUG] [Thread-299817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:34:56.899 [DEBUG] [Thread-299817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:34:56.899 [DEBUG] [Thread-299817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:34:56.920 [INFO] [Thread-299817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:34:56.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:34:56.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:34:57.762 [DEBUG] [Thread-299817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:34:57.762 [DEBUG] [Thread-299817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:34:57.811 [DEBUG] [Thread-299817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:34:57.811 [DEBUG] [Thread-299817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:34:57.819 [DEBUG] [Thread-299817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:34:57.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:34:57.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:34:57.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:34:57.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:34:57.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:34:57.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:34:57.852 [DEBUG] [Thread-299817] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:35:01.533 [DEBUG] [Thread-299819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:35:16.660 [DEBUG] [Thread-299820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:35:17.905 [DEBUG] [Thread-299821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:35:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:35:27.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:35:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:35:28.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 35, 17), 10.11, 51.32, 0.0, 13.62, 17.78, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:35:28.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:35:17
2025-12-24T09:35:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:35:29.251 [DEBUG] [Thread-299822] [transport.py] [_log()] starting thread (client mode): 0xf574c490
2025-12-24T09:35:29.252 [DEBUG] [Thread-299822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:35:29.266 [DEBUG] [Thread-299822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:35:29.267 [INFO] [Thread-299822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:35:29.273 [DEBUG] [Thread-299822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:35:29.273 [DEBUG] [Thread-299822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] client lang: <none>
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] server lang: <none>
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] kex follows: False
2025-12-24T09:35:29.274 [DEBUG] [Thread-299822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:35:29.275 [DEBUG] [Thread-299822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:35:29.275 [DEBUG] [Thread-299822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:35:29.275 [DEBUG] [Thread-299822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:35:29.275 [DEBUG] [Thread-299822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:35:29.275 [DEBUG] [Thread-299822] [transport.py] [_log()] Compression: none
2025-12-24T09:35:29.275 [DEBUG] [Thread-299822] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:35:29.312 [DEBUG] [Thread-299822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:35:29.316 [DEBUG] [Thread-299822] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:35:29.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:35:29.319 [DEBUG] [Thread-299822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:35:29.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:35:29.323 [DEBUG] [Thread-299822] [transport.py] [_log()] userauth is OK
2025-12-24T09:35:29.323 [DEBUG] [Thread-299822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:35:29.323 [DEBUG] [Thread-299822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:35:29.323 [DEBUG] [Thread-299822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:35:29.324 [DEBUG] [Thread-299822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:35:29.350 [INFO] [Thread-299822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:35:29.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:35:30.167 [DEBUG] [Thread-299822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:35:30.167 [DEBUG] [Thread-299822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:35:30.168 [DEBUG] [Thread-299822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:35:30.208 [DEBUG] [Thread-299822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:35:30.208 [DEBUG] [Thread-299822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:35:30.210 [DEBUG] [Thread-299822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:35:30.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:35:30.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:35:30.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:35:30.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:35:30.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:35:30.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:35:30.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:35:30.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:35:30.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:35:30.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.315696 -999.00  +19.20  10.90     52   +9.10 1 1 1 1 1   888    0 11.04 70.61 ----- 9.8 10.9 155.0 12.8 26.7 -25.7 25.9 -24.4 24.5 -24.1 25.1 -25.0
2025-12-24T09:35:30.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:35:30.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:35:30.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.315696
2025-12-24T09:35:30.233 [DEBUG] [Thread-299822] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:35:30.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:35:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:35:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:35:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:35:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:35:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:35:17', tmtdew=10.11, humidity=51.32, cloud=0.0, wind=13.62, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:34:36.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:35:30.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:35:30.332 [DEBUG] [Thread-299825] [transport.py] [_log()] starting thread (client mode): 0xf5770790
2025-12-24T09:35:30.332 [DEBUG] [Thread-299825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:35:30.346 [DEBUG] [Thread-299825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:35:30.346 [INFO] [Thread-299825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] client lang: <none>
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] server lang: <none>
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] kex follows: False
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] Compression: none
2025-12-24T09:35:30.353 [DEBUG] [Thread-299825] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:35:30.408 [DEBUG] [Thread-299825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:35:30.408 [DEBUG] [Thread-299825] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:35:30.408 [DEBUG] [Thread-299825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:35:30.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:35:30.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:35:30.465 [DEBUG] [Thread-299825] [transport.py] [_log()] userauth is OK
2025-12-24T09:35:30.465 [DEBUG] [Thread-299825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:35:30.465 [DEBUG] [Thread-299825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:35:30.465 [DEBUG] [Thread-299825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:35:30.465 [DEBUG] [Thread-299825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:35:30.479 [INFO] [Thread-299825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:35:30.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:35:30.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:35:31.327 [DEBUG] [Thread-299825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:35:31.327 [DEBUG] [Thread-299825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:35:31.374 [DEBUG] [Thread-299825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:35:31.374 [DEBUG] [Thread-299825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:35:31.382 [DEBUG] [Thread-299825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:35:31.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:35:31.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:35:31.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:35:31.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:35:31.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:35:31.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:35:31.414 [DEBUG] [Thread-299825] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:35:31.564 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:35:31.565 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:35:31.734 [DEBUG] [Thread-299827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:35:46.841 [DEBUG] [Thread-299828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:36:01.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:36:01.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:36:01.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:36:01.902 [DEBUG] [Thread-299829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:36:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 35, 50), 10.41, 50.82, 0.0, 12.14, 17.78, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:36:02.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:35:50
2025-12-24T09:36:02.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:36:03.188 [DEBUG] [Thread-299830] [transport.py] [_log()] starting thread (client mode): 0xf5772980
2025-12-24T09:36:03.189 [DEBUG] [Thread-299830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:36:03.192 [DEBUG] [Thread-299830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:36:03.192 [INFO] [Thread-299830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:36:03.195 [DEBUG] [Thread-299830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:36:03.195 [DEBUG] [Thread-299830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:36:03.195 [DEBUG] [Thread-299830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] client lang: <none>
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] server lang: <none>
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] kex follows: False
2025-12-24T09:36:03.196 [DEBUG] [Thread-299830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:36:03.197 [DEBUG] [Thread-299830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:36:03.197 [DEBUG] [Thread-299830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:36:03.197 [DEBUG] [Thread-299830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:36:03.197 [DEBUG] [Thread-299830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:36:03.197 [DEBUG] [Thread-299830] [transport.py] [_log()] Compression: none
2025-12-24T09:36:03.197 [DEBUG] [Thread-299830] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:36:03.233 [DEBUG] [Thread-299830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:36:03.237 [DEBUG] [Thread-299830] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:36:03.239 [DEBUG] [Thread-299830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:36:03.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:36:03.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:36:03.242 [DEBUG] [Thread-299830] [transport.py] [_log()] userauth is OK
2025-12-24T09:36:03.242 [DEBUG] [Thread-299830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:36:03.242 [DEBUG] [Thread-299830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:36:03.242 [DEBUG] [Thread-299830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:36:03.242 [DEBUG] [Thread-299830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:36:03.273 [INFO] [Thread-299830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:36:03.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:36:03.901 [DEBUG] [Thread-299830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:36:03.901 [DEBUG] [Thread-299830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:36:03.904 [DEBUG] [Thread-299830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:36:03.942 [DEBUG] [Thread-299830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:36:03.942 [DEBUG] [Thread-299830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:36:03.945 [DEBUG] [Thread-299830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:36:03.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:36:03.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:36:03.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:36:03.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:36:03.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:36:03.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:36:03.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:36:03.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:36:03.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:36:03.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.316043 -999.00  +19.30   7.02     51   +9.10 1 1 1 1 1   888    0 11.08 72.53 ----- 8.4 7.0 152.0 10.3 26.8 -26.0 26.0 -24.6 24.6 -23.7 25.2 -25.3
2025-12-24T09:36:03.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:36:03.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:36:03.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.316043
2025-12-24T09:36:03.979 [DEBUG] [Thread-299830] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:36:03.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:36:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:36:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:36:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:36:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:36:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:35:50', tmtdew=10.41, humidity=50.82, cloud=0.0, wind=12.14, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:35:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:36:04.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:36:04.100 [DEBUG] [Thread-299833] [transport.py] [_log()] starting thread (client mode): 0xf5700b20
2025-12-24T09:36:04.100 [DEBUG] [Thread-299833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:36:04.114 [DEBUG] [Thread-299833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:36:04.114 [INFO] [Thread-299833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] client lang: <none>
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] server lang: <none>
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] kex follows: False
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] Compression: none
2025-12-24T09:36:04.122 [DEBUG] [Thread-299833] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:36:04.186 [DEBUG] [Thread-299833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:36:04.186 [DEBUG] [Thread-299833] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:36:04.187 [DEBUG] [Thread-299833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:36:04.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:36:04.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:36:04.242 [DEBUG] [Thread-299833] [transport.py] [_log()] userauth is OK
2025-12-24T09:36:04.242 [DEBUG] [Thread-299833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:36:04.243 [DEBUG] [Thread-299833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:36:04.243 [DEBUG] [Thread-299833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:36:04.243 [DEBUG] [Thread-299833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:36:04.261 [INFO] [Thread-299833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:36:04.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:36:04.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:36:05.102 [DEBUG] [Thread-299833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:36:05.102 [DEBUG] [Thread-299833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:36:05.150 [DEBUG] [Thread-299833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:36:05.150 [DEBUG] [Thread-299833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:36:05.159 [DEBUG] [Thread-299833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:36:05.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:36:05.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:36:05.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
2025-12-24T09:36:05.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:36:05.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:36:05.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:36:05.197 [DEBUG] [Thread-299833] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:36:16.980 [DEBUG] [Thread-299835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:36:18.159 [DEBUG] [Thread-299836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:36:31.721 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:36:31.736 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:36:32.081 [DEBUG] [Thread-299837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:36:35.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:36:35.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:36:35.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:36:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 36, 22), 10.43, 50.76, 0.0, 13.18, 17.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:36:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:36:22
2025-12-24T09:36:36.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:36:36.304 [DEBUG] [Thread-299838] [transport.py] [_log()] starting thread (client mode): 0xf8154760
2025-12-24T09:36:36.305 [DEBUG] [Thread-299838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:36:36.318 [DEBUG] [Thread-299838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:36:36.318 [INFO] [Thread-299838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] client lang: <none>
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] server lang: <none>
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] kex follows: False
2025-12-24T09:36:36.322 [DEBUG] [Thread-299838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:36:36.323 [DEBUG] [Thread-299838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:36:36.323 [DEBUG] [Thread-299838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:36:36.323 [DEBUG] [Thread-299838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:36:36.323 [DEBUG] [Thread-299838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:36:36.323 [DEBUG] [Thread-299838] [transport.py] [_log()] Compression: none
2025-12-24T09:36:36.323 [DEBUG] [Thread-299838] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:36:36.359 [DEBUG] [Thread-299838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:36:36.364 [DEBUG] [Thread-299838] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:36:36.366 [DEBUG] [Thread-299838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:36:36.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:36:36.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:36:36.372 [DEBUG] [Thread-299838] [transport.py] [_log()] userauth is OK
2025-12-24T09:36:36.372 [DEBUG] [Thread-299838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:36:36.372 [DEBUG] [Thread-299838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:36:36.372 [DEBUG] [Thread-299838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:36:36.372 [DEBUG] [Thread-299838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:36:36.399 [INFO] [Thread-299838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:36:36.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:36:37.137 [DEBUG] [Thread-299838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:36:37.137 [DEBUG] [Thread-299838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:36:37.138 [DEBUG] [Thread-299838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:36:37.178 [DEBUG] [Thread-299838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:36:37.178 [DEBUG] [Thread-299838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:36:37.182 [DEBUG] [Thread-299838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:36:37.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:36:37.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:36:37.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:36:37.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:36:37.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:36:37.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:36:37.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:36:37.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:36:37.202 [DEBUG] [Thread-299838] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:36:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:36:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.316391 -999.00  +19.20   9.66     51   +9.00 1 1 1 1 1   888    0 11.07 75.03 ----- 11.8 9.7 189.4 11.6 26.9 -26.6 25.7 -26.2 24.7 -23.4 25.3 -26.1
2025-12-24T09:36:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:36:37.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:36:37.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.316391
2025-12-24T09:36:37.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:36:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:36:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:36:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:36:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:36:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:36:22', tmtdew=10.43, humidity=50.76, cloud=0.0, wind=13.18, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:35:36.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:36:37.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:36:37.314 [DEBUG] [Thread-299841] [transport.py] [_log()] starting thread (client mode): 0xf574c130
2025-12-24T09:36:37.314 [DEBUG] [Thread-299841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:36:37.328 [DEBUG] [Thread-299841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:36:37.328 [INFO] [Thread-299841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:36:37.335 [DEBUG] [Thread-299841] [transport.py] [_log()] client lang: <none>
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] server lang: <none>
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] kex follows: False
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] Compression: none
2025-12-24T09:36:37.336 [DEBUG] [Thread-299841] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:36:37.397 [DEBUG] [Thread-299841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:36:37.397 [DEBUG] [Thread-299841] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:36:37.397 [DEBUG] [Thread-299841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:36:37.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:36:37.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:36:37.454 [DEBUG] [Thread-299841] [transport.py] [_log()] userauth is OK
2025-12-24T09:36:37.454 [DEBUG] [Thread-299841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:36:37.454 [DEBUG] [Thread-299841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:36:37.454 [DEBUG] [Thread-299841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:36:37.454 [DEBUG] [Thread-299841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:36:37.470 [INFO] [Thread-299841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:36:37.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:36:37.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:36:38.310 [DEBUG] [Thread-299841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:36:38.310 [DEBUG] [Thread-299841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:36:38.349 [DEBUG] [Thread-299841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:36:38.349 [DEBUG] [Thread-299841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:36:38.359 [DEBUG] [Thread-299841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:36:38.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:36: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')
2025-12-24T09:36:38.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:36:38.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:36:38.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:36:38.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:36:38.398 [DEBUG] [Thread-299841] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:36:47.126 [DEBUG] [Thread-299843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:37:02.201 [DEBUG] [Thread-299844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:37:08.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:37:08.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:37:08.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:37:09.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 36, 56), 10.57, 50.01, 0.0, 13.0, 18.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:37:09.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:36:56
2025-12-24T09:37:09.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:37:09.828 [DEBUG] [Thread-299845] [transport.py] [_log()] starting thread (client mode): 0xf57be6b0
2025-12-24T09:37:09.829 [DEBUG] [Thread-299845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:37:09.837 [DEBUG] [Thread-299845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:37:09.837 [INFO] [Thread-299845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:37:09.841 [DEBUG] [Thread-299845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:37:09.841 [DEBUG] [Thread-299845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] client lang: <none>
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] server lang: <none>
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] kex follows: False
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:37:09.842 [DEBUG] [Thread-299845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:37:09.843 [DEBUG] [Thread-299845] [transport.py] [_log()] Compression: none
2025-12-24T09:37:09.843 [DEBUG] [Thread-299845] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:37:09.871 [DEBUG] [Thread-299845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:37:09.874 [DEBUG] [Thread-299845] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:37:09.875 [DEBUG] [Thread-299845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:37:09.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:37:09.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:37:09.879 [DEBUG] [Thread-299845] [transport.py] [_log()] userauth is OK
2025-12-24T09:37:09.879 [DEBUG] [Thread-299845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:37:09.879 [DEBUG] [Thread-299845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:37:09.880 [DEBUG] [Thread-299845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:37:09.880 [DEBUG] [Thread-299845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:37:09.893 [INFO] [Thread-299845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:37:09.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:37:10.519 [DEBUG] [Thread-299845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:37:10.519 [DEBUG] [Thread-299845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:37:10.520 [DEBUG] [Thread-299845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:37:10.561 [DEBUG] [Thread-299845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:37:10.561 [DEBUG] [Thread-299845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:37:10.564 [DEBUG] [Thread-299845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:37:10.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:37:10.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:37:10.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:37:10.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:37:10.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:37:10.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:37:10.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:37:10.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.316738 -999.00  +19.20  13.09     51   +8.90 1 1 1 1 1   888    0 11.27 78.44 ----- 12.2 13.1 133.2 15.0 26.9 -25.9 26.0 -25.3 24.6 -23.3 25.3 -25.4
2025-12-24T09:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:37:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.316738
2025-12-24T09:37:10.590 [DEBUG] [Thread-299845] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:37:10.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:37:10.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:37:10.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:37:10.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:37:10.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:37:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:36:56', tmtdew=10.57, humidity=50.01, cloud=0.0, wind=13.0, temperature=18.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:36:06.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:37:10.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:37:10.693 [DEBUG] [Thread-299848] [transport.py] [_log()] starting thread (client mode): 0xf574fd00
2025-12-24T09:37:10.694 [DEBUG] [Thread-299848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:37:10.711 [DEBUG] [Thread-299848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:37:10.711 [INFO] [Thread-299848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:37:10.719 [DEBUG] [Thread-299848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:37:10.719 [DEBUG] [Thread-299848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:37:10.719 [DEBUG] [Thread-299848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:37:10.719 [DEBUG] [Thread-299848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:37:10.719 [DEBUG] [Thread-299848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:37:10.719 [DEBUG] [Thread-299848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] client lang: <none>
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] server lang: <none>
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] kex follows: False
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] Compression: none
2025-12-24T09:37:10.720 [DEBUG] [Thread-299848] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:37:10.777 [DEBUG] [Thread-299848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:37:10.777 [DEBUG] [Thread-299848] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:37:10.777 [DEBUG] [Thread-299848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:37:10.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:37:10.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:37:10.834 [DEBUG] [Thread-299848] [transport.py] [_log()] userauth is OK
2025-12-24T09:37:10.834 [DEBUG] [Thread-299848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:37:10.834 [DEBUG] [Thread-299848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:37:10.834 [DEBUG] [Thread-299848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:37:10.834 [DEBUG] [Thread-299848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:37:10.848 [INFO] [Thread-299848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:37:10.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:37:10.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:37:11.706 [DEBUG] [Thread-299848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:37:11.706 [DEBUG] [Thread-299848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:37:11.753 [DEBUG] [Thread-299848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:37:11.754 [DEBUG] [Thread-299848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:37:11.762 [DEBUG] [Thread-299848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:37:11.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:37:11.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')
2025-12-24T09:37:11.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:37:11.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:37:11.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:37:11.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:37:11.796 [DEBUG] [Thread-299848] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:37:17.264 [DEBUG] [Thread-299850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:37:18.429 [DEBUG] [Thread-299851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:37:31.877 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:37:31.881 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:37:32.417 [DEBUG] [Thread-299852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:37:41.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:37:41.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:37:41.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:37:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 37, 28), 10.63, 49.81, 0.0, 14.05, 18.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:37:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:37:28
2025-12-24T09:37:42.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:37:43.127 [DEBUG] [Thread-299853] [transport.py] [_log()] starting thread (client mode): 0xf57bcb20
2025-12-24T09:37:43.128 [DEBUG] [Thread-299853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:37:43.139 [DEBUG] [Thread-299853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:37:43.139 [INFO] [Thread-299853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] client lang: <none>
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] server lang: <none>
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] kex follows: False
2025-12-24T09:37:43.144 [DEBUG] [Thread-299853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:37:43.145 [DEBUG] [Thread-299853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:37:43.145 [DEBUG] [Thread-299853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:37:43.145 [DEBUG] [Thread-299853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:37:43.145 [DEBUG] [Thread-299853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:37:43.145 [DEBUG] [Thread-299853] [transport.py] [_log()] Compression: none
2025-12-24T09:37:43.146 [DEBUG] [Thread-299853] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:37:43.175 [DEBUG] [Thread-299853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:37:43.178 [DEBUG] [Thread-299853] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:37:43.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:37:43.181 [DEBUG] [Thread-299853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:37:43.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:37:43.183 [DEBUG] [Thread-299853] [transport.py] [_log()] userauth is OK
2025-12-24T09:37:43.184 [DEBUG] [Thread-299853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:37:43.184 [DEBUG] [Thread-299853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:37:43.184 [DEBUG] [Thread-299853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:37:43.184 [DEBUG] [Thread-299853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:37:43.202 [INFO] [Thread-299853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:37:43.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:37:43.817 [DEBUG] [Thread-299853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:37:43.817 [DEBUG] [Thread-299853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:37:43.819 [DEBUG] [Thread-299853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:37:43.858 [DEBUG] [Thread-299853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:37:43.858 [DEBUG] [Thread-299853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:37:43.862 [DEBUG] [Thread-299853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:37:43.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:37:43.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:37:43.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:37:43.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:37:43.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:37:43.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:37:43.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:37:43.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:37:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:37:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.317432 -999.00  +18.70  11.69     52   +8.70 1 1 1 1 1   888    0 11.39 79.98 ----- 10.4 11.7 120.0 13.0 26.9 -26.6 26.2 -25.2 24.8 -24.6 25.4 -25.1
2025-12-24T09:37:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:37:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:37:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.317432
2025-12-24T09:37:43.898 [DEBUG] [Thread-299853] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:37:43.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:37:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:37:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:37:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:37:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:37:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:37:28', tmtdew=10.63, humidity=49.81, cloud=0.0, wind=14.05, temperature=18.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:37:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:37:43.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:37:43.994 [DEBUG] [Thread-299856] [transport.py] [_log()] starting thread (client mode): 0xf8157580
2025-12-24T09:37:43.994 [DEBUG] [Thread-299856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:37:44.009 [DEBUG] [Thread-299856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:37:44.009 [INFO] [Thread-299856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:37:44.016 [DEBUG] [Thread-299856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:37:44.016 [DEBUG] [Thread-299856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:37:44.016 [DEBUG] [Thread-299856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:37:44.016 [DEBUG] [Thread-299856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] client lang: <none>
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] server lang: <none>
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] kex follows: False
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:37:44.017 [DEBUG] [Thread-299856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:37:44.018 [DEBUG] [Thread-299856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:37:44.018 [DEBUG] [Thread-299856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:37:44.018 [DEBUG] [Thread-299856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:37:44.018 [DEBUG] [Thread-299856] [transport.py] [_log()] Compression: none
2025-12-24T09:37:44.018 [DEBUG] [Thread-299856] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:37:44.074 [DEBUG] [Thread-299856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:37:44.075 [DEBUG] [Thread-299856] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:37:44.075 [DEBUG] [Thread-299856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:37:44.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:37:44.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:37:44.131 [DEBUG] [Thread-299856] [transport.py] [_log()] userauth is OK
2025-12-24T09:37:44.131 [DEBUG] [Thread-299856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:37:44.131 [DEBUG] [Thread-299856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:37:44.131 [DEBUG] [Thread-299856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:37:44.131 [DEBUG] [Thread-299856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:37:44.150 [INFO] [Thread-299856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:37:44.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:37:44.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:37:45.010 [DEBUG] [Thread-299856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:37:45.010 [DEBUG] [Thread-299856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:37:45.053 [DEBUG] [Thread-299856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:37:45.053 [DEBUG] [Thread-299856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:37:45.061 [DEBUG] [Thread-299856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:37:45.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:37: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')
2025-12-24T09:37:45.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:37:45.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:37:45.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:37:45.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:37:45.098 [DEBUG] [Thread-299856] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:37:47.492 [DEBUG] [Thread-299858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:38:02.589 [DEBUG] [Thread-299859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:38:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:38:15.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:38:15.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:38:16.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 38, 2), 10.6, 49.88, 0.0, 11.89, 18.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:38:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:38:02
2025-12-24T09:38:16.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:38:16.580 [DEBUG] [Thread-299860] [transport.py] [_log()] starting thread (client mode): 0xf57004f0
2025-12-24T09:38:16.581 [DEBUG] [Thread-299860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:38:16.593 [DEBUG] [Thread-299860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:38:16.593 [INFO] [Thread-299860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:38:16.598 [DEBUG] [Thread-299860] [transport.py] [_log()] client lang: <none>
2025-12-24T09:38:16.599 [DEBUG] [Thread-299860] [transport.py] [_log()] server lang: <none>
2025-12-24T09:38:16.599 [DEBUG] [Thread-299860] [transport.py] [_log()] kex follows: False
2025-12-24T09:38:16.599 [DEBUG] [Thread-299860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:38:16.600 [DEBUG] [Thread-299860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:38:16.600 [DEBUG] [Thread-299860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:38:16.600 [DEBUG] [Thread-299860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:38:16.600 [DEBUG] [Thread-299860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:38:16.600 [DEBUG] [Thread-299860] [transport.py] [_log()] Compression: none
2025-12-24T09:38:16.600 [DEBUG] [Thread-299860] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:38:16.635 [DEBUG] [Thread-299860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:38:16.638 [DEBUG] [Thread-299860] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:38:16.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:38:16.643 [DEBUG] [Thread-299860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:38:16.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:38:16.646 [DEBUG] [Thread-299860] [transport.py] [_log()] userauth is OK
2025-12-24T09:38:16.646 [DEBUG] [Thread-299860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:38:16.646 [DEBUG] [Thread-299860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:38:16.646 [DEBUG] [Thread-299860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:38:16.646 [DEBUG] [Thread-299860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:38:16.672 [INFO] [Thread-299860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:38:16.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:38:17.338 [DEBUG] [Thread-299860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:38:17.339 [DEBUG] [Thread-299860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:38:17.340 [DEBUG] [Thread-299860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:38:17.380 [DEBUG] [Thread-299860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:38:17.380 [DEBUG] [Thread-299860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:38:17.384 [DEBUG] [Thread-299860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:38:17.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:38:17.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:38:17.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:38:17.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:38:17.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:38:17.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:38:17.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:38:17.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:38:17.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:38:17.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.317780 -999.00  +18.80  13.65     51   +8.70 1 1 1 1 1   888    0 11.44 78.14 ----- 14.9 13.7 138.8 16.2 26.9 -25.5 26.3 -25.9 24.9 -23.6 25.4 -25.3
2025-12-24T09:38:17.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:38:17.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:38:17.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.317780
2025-12-24T09:38:17.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:38:17.424 [DEBUG] [Thread-299860] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:38:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:38:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:38:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:38:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:38:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:38:02', tmtdew=10.6, humidity=49.88, cloud=0.0, wind=11.89, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:37:36.192', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:38:17.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:38:17.518 [DEBUG] [Thread-299863] [transport.py] [_log()] starting thread (client mode): 0xf5743b20
2025-12-24T09:38:17.518 [DEBUG] [Thread-299863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:38:17.533 [DEBUG] [Thread-299863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:38:17.533 [INFO] [Thread-299863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:38:17.541 [DEBUG] [Thread-299863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:38:17.541 [DEBUG] [Thread-299863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:38:17.541 [DEBUG] [Thread-299863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:38:17.541 [DEBUG] [Thread-299863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:38:17.541 [DEBUG] [Thread-299863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:38:17.541 [DEBUG] [Thread-299863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:38:17.541 [DEBUG] [Thread-299863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:38:17.541 [DEBUG] [Thread-299863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] client lang: <none>
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] server lang: <none>
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] kex follows: False
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:38:17.542 [DEBUG] [Thread-299863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:38:17.543 [DEBUG] [Thread-299863] [transport.py] [_log()] Compression: none
2025-12-24T09:38:17.543 [DEBUG] [Thread-299863] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:38:17.597 [DEBUG] [Thread-299863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:38:17.597 [DEBUG] [Thread-299863] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:38:17.597 [DEBUG] [Thread-299863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:38:17.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:38:17.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:38:17.654 [DEBUG] [Thread-299863] [transport.py] [_log()] userauth is OK
2025-12-24T09:38:17.654 [DEBUG] [Thread-299863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:38:17.655 [DEBUG] [Thread-299863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:38:17.655 [DEBUG] [Thread-299863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:38:17.655 [DEBUG] [Thread-299863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:38:17.661 [DEBUG] [Thread-299865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:38:17.679 [INFO] [Thread-299863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:38:17.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:38:17.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:38:18.508 [DEBUG] [Thread-299863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:38:18.508 [DEBUG] [Thread-299863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:38:18.555 [DEBUG] [Thread-299863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:38:18.556 [DEBUG] [Thread-299863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:38:18.565 [DEBUG] [Thread-299863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:38:18.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:38:18.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:38:18.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:38:18.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:38:18.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:38:18.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:38:18.602 [DEBUG] [Thread-299863] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:38:18.715 [DEBUG] [Thread-299866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:38:32.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:38:32.026 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:38:32.792 [DEBUG] [Thread-299867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:38:47.894 [DEBUG] [Thread-299868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:38:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:38:48.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:38:48.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:38:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 38, 35), 10.8, 49.52, 0.0, 14.33, 18.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:38:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:38:35
2025-12-24T09:38:49.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:38:50.041 [DEBUG] [Thread-299869] [transport.py] [_log()] starting thread (client mode): 0xf57a8160
2025-12-24T09:38:50.041 [DEBUG] [Thread-299869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:38:50.042 [DEBUG] [Thread-299869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:38:50.042 [INFO] [Thread-299869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] client lang: <none>
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] server lang: <none>
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] kex follows: False
2025-12-24T09:38:50.046 [DEBUG] [Thread-299869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:38:50.047 [DEBUG] [Thread-299869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:38:50.047 [DEBUG] [Thread-299869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:38:50.047 [DEBUG] [Thread-299869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:38:50.047 [DEBUG] [Thread-299869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:38:50.047 [DEBUG] [Thread-299869] [transport.py] [_log()] Compression: none
2025-12-24T09:38:50.047 [DEBUG] [Thread-299869] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:38:50.079 [DEBUG] [Thread-299869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:38:50.082 [DEBUG] [Thread-299869] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:38:50.084 [DEBUG] [Thread-299869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:38:50.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:38:50.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:38:50.089 [DEBUG] [Thread-299869] [transport.py] [_log()] userauth is OK
2025-12-24T09:38:50.089 [DEBUG] [Thread-299869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:38:50.090 [DEBUG] [Thread-299869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:38:50.090 [DEBUG] [Thread-299869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:38:50.090 [DEBUG] [Thread-299869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:38:50.116 [INFO] [Thread-299869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:38:50.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:38:50.767 [DEBUG] [Thread-299869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:38:50.767 [DEBUG] [Thread-299869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:38:50.776 [DEBUG] [Thread-299869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:38:50.808 [DEBUG] [Thread-299869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:38:50.808 [DEBUG] [Thread-299869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:38:50.810 [DEBUG] [Thread-299869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:38:50.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:38:50.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:38:50.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:38:50.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:38:50.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:38:50.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:38:50.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:38:50.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:38:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:38:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.318127 -999.00  +18.80  11.97     51   +8.70 1 1 1 1 1   888    0 11.61 85.04 ----- 15.2 12.0 145.6 16.4 26.9 -26.7 26.1 -26.0 24.9 -24.5 25.4 -27.1
2025-12-24T09:38:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:38:50.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:38:50.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.318127
2025-12-24T09:38:50.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:38:50.842 [DEBUG] [Thread-299869] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:38:50.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:38:50.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:38:50.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:38:50.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:38:50.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:38:35', tmtdew=10.8, humidity=49.52, cloud=0.0, wind=14.33, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:38:06.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:38:50.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:38:50.943 [DEBUG] [Thread-299872] [transport.py] [_log()] starting thread (client mode): 0xf57a8a60
2025-12-24T09:38:50.943 [DEBUG] [Thread-299872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:38:50.958 [DEBUG] [Thread-299872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:38:50.959 [INFO] [Thread-299872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:38:50.966 [DEBUG] [Thread-299872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:38:50.966 [DEBUG] [Thread-299872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:38:50.966 [DEBUG] [Thread-299872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:38:50.966 [DEBUG] [Thread-299872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] client lang: <none>
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] server lang: <none>
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] kex follows: False
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:38:50.967 [DEBUG] [Thread-299872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:38:50.968 [DEBUG] [Thread-299872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:38:50.968 [DEBUG] [Thread-299872] [transport.py] [_log()] Compression: none
2025-12-24T09:38:50.968 [DEBUG] [Thread-299872] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:38:51.027 [DEBUG] [Thread-299872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:38:51.027 [DEBUG] [Thread-299872] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:38:51.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:38:51.028 [DEBUG] [Thread-299872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:38:51.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:38:51.082 [DEBUG] [Thread-299872] [transport.py] [_log()] userauth is OK
2025-12-24T09:38:51.083 [DEBUG] [Thread-299872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:38:51.083 [DEBUG] [Thread-299872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:38:51.083 [DEBUG] [Thread-299872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:38:51.083 [DEBUG] [Thread-299872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:38:51.108 [INFO] [Thread-299872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:38:51.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:38:51.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:38:52.068 [DEBUG] [Thread-299872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:38:52.068 [DEBUG] [Thread-299872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:38:52.106 [DEBUG] [Thread-299872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:38:52.107 [DEBUG] [Thread-299872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:38:52.115 [DEBUG] [Thread-299872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:38:52.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:38:52.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:38:52.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:38:52.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:38:52.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:38:52.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:38:52.149 [DEBUG] [Thread-299872] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:39:02.973 [DEBUG] [Thread-299874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:39:18.108 [DEBUG] [Thread-299875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:39:18.961 [DEBUG] [Thread-299876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:39:22.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:39:22.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:39:22.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
2025-12-24T09:39:22.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 39, 7), 10.94, 49.06, 0.0, 11.51, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:39:22.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:39:07
2025-12-24T09:39:23.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:39:23.308 [DEBUG] [Thread-299877] [transport.py] [_log()] starting thread (client mode): 0xf57ab910
2025-12-24T09:39:23.310 [DEBUG] [Thread-299877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:39:23.321 [DEBUG] [Thread-299877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:39:23.322 [INFO] [Thread-299877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:39:23.340 [DEBUG] [Thread-299877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] client lang: <none>
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] server lang: <none>
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] kex follows: False
2025-12-24T09:39:23.341 [DEBUG] [Thread-299877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:39:23.342 [DEBUG] [Thread-299877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:39:23.342 [DEBUG] [Thread-299877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:39:23.343 [DEBUG] [Thread-299877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:39:23.343 [DEBUG] [Thread-299877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:39:23.343 [DEBUG] [Thread-299877] [transport.py] [_log()] Compression: none
2025-12-24T09:39:23.343 [DEBUG] [Thread-299877] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:39:23.379 [DEBUG] [Thread-299877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:39:23.384 [DEBUG] [Thread-299877] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:39:23.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:39:23.387 [DEBUG] [Thread-299877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:39:23.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:39:23.390 [DEBUG] [Thread-299877] [transport.py] [_log()] userauth is OK
2025-12-24T09:39:23.390 [DEBUG] [Thread-299877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:39:23.390 [DEBUG] [Thread-299877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:39:23.390 [DEBUG] [Thread-299877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:39:23.390 [DEBUG] [Thread-299877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:39:23.420 [INFO] [Thread-299877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:39:23.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:39:24.053 [DEBUG] [Thread-299877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:39:24.053 [DEBUG] [Thread-299877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:39:24.063 [DEBUG] [Thread-299877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:39:24.095 [DEBUG] [Thread-299877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:39:24.095 [DEBUG] [Thread-299877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:39:24.100 [DEBUG] [Thread-299877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:39:24.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:39:24.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:39:24.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:39:24.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:39:24.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:39:24.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:39:24.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:39:24.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:39:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:39:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.318474 -999.00  +18.50   8.77     52   +8.50 1 1 1 1 1   888    0 11.59 83.48 ----- 6.8 8.8 156.4 16.3 26.9 -26.6 26.2 -25.1 24.9 -25.5 25.3 -26.5
2025-12-24T09:39:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:39:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:39:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.318474
2025-12-24T09:39:24.141 [DEBUG] [Thread-299877] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:39:24.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:39:24.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:39:24.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:39:24.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:39:24.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:39:24.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:39:07', tmtdew=10.94, humidity=49.06, cloud=0.0, wind=11.51, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:38:36.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:39:24.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:39:24.244 [DEBUG] [Thread-299880] [transport.py] [_log()] starting thread (client mode): 0xf57aafb0
2025-12-24T09:39:24.245 [DEBUG] [Thread-299880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:39:24.259 [DEBUG] [Thread-299880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:39:24.259 [INFO] [Thread-299880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] client lang: <none>
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] server lang: <none>
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] kex follows: False
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:39:24.267 [DEBUG] [Thread-299880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:39:24.268 [DEBUG] [Thread-299880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:39:24.268 [DEBUG] [Thread-299880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:39:24.268 [DEBUG] [Thread-299880] [transport.py] [_log()] Compression: none
2025-12-24T09:39:24.268 [DEBUG] [Thread-299880] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:39:24.331 [DEBUG] [Thread-299880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:39:24.331 [DEBUG] [Thread-299880] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:39:24.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:39:24.333 [DEBUG] [Thread-299880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:39:24.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:39:24.394 [DEBUG] [Thread-299880] [transport.py] [_log()] userauth is OK
2025-12-24T09:39:24.395 [DEBUG] [Thread-299880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:39:24.395 [DEBUG] [Thread-299880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:39:24.395 [DEBUG] [Thread-299880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:39:24.395 [DEBUG] [Thread-299880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:39:24.414 [INFO] [Thread-299880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:39:24.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:39:24.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:39:25.293 [DEBUG] [Thread-299880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:39:25.293 [DEBUG] [Thread-299880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:39:25.332 [DEBUG] [Thread-299880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:39:25.332 [DEBUG] [Thread-299880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:39:25.340 [DEBUG] [Thread-299880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:39:25.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:39:25.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:39:25.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
2025-12-24T09:39:25.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:39:25.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:39:25.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:39:25.376 [DEBUG] [Thread-299880] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:39:32.174 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:39:32.175 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:39:33.149 [DEBUG] [Thread-299882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:39:48.212 [DEBUG] [Thread-299883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:39:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:39:55.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:39:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:39:56.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 39, 40), 10.9, 48.66, 0.0, 10.13, 18.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:39:56.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:39:40
2025-12-24T09:39:56.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:39:56.886 [DEBUG] [Thread-299884] [transport.py] [_log()] starting thread (client mode): 0xf57aa9e0
2025-12-24T09:39:56.887 [DEBUG] [Thread-299884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:39:56.895 [DEBUG] [Thread-299884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:39:56.895 [INFO] [Thread-299884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:39:56.899 [DEBUG] [Thread-299884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] client lang: <none>
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] server lang: <none>
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] kex follows: False
2025-12-24T09:39:56.900 [DEBUG] [Thread-299884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:39:56.901 [DEBUG] [Thread-299884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:39:56.901 [DEBUG] [Thread-299884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:39:56.901 [DEBUG] [Thread-299884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:39:56.901 [DEBUG] [Thread-299884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:39:56.901 [DEBUG] [Thread-299884] [transport.py] [_log()] Compression: none
2025-12-24T09:39:56.901 [DEBUG] [Thread-299884] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:39:56.936 [DEBUG] [Thread-299884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:39:56.939 [DEBUG] [Thread-299884] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:39:56.941 [DEBUG] [Thread-299884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:39:56.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:39:56.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:39:56.944 [DEBUG] [Thread-299884] [transport.py] [_log()] userauth is OK
2025-12-24T09:39:56.944 [DEBUG] [Thread-299884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:39:56.944 [DEBUG] [Thread-299884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:39:56.945 [DEBUG] [Thread-299884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:39:56.945 [DEBUG] [Thread-299884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:39:56.963 [INFO] [Thread-299884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:39:56.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:39:57.617 [DEBUG] [Thread-299884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:39:57.617 [DEBUG] [Thread-299884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:39:57.618 [DEBUG] [Thread-299884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:39:57.658 [DEBUG] [Thread-299884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:39:57.658 [DEBUG] [Thread-299884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:39:57.661 [DEBUG] [Thread-299884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:39:57.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:39:57.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:39:57.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:39:57.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:39:57.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:39:57.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:39:57.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:39:57.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:39:57.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:39:57.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.318821 -999.00  +18.50   7.42     52   +8.40 1 1 1 1 1   888    0 11.85 87.81 ----- 12.9 7.4 155.0 11.2 26.9 -25.9 26.2 -25.5 24.9 -23.7 25.5 -25.0
2025-12-24T09:39:57.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:39:57.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:39:57.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.318821
2025-12-24T09:39:57.689 [DEBUG] [Thread-299884] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:39:57.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:39:57.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:39:57.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:39:57.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:39:57.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:39:57.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:39:40', tmtdew=10.9, humidity=48.66, cloud=0.0, wind=10.13, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:39:06.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:39:57.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:39:57.791 [DEBUG] [Thread-299887] [transport.py] [_log()] starting thread (client mode): 0xf57a9540
2025-12-24T09:39:57.792 [DEBUG] [Thread-299887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:39:57.806 [DEBUG] [Thread-299887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:39:57.806 [INFO] [Thread-299887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] client lang: <none>
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] server lang: <none>
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] kex follows: False
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] Compression: none
2025-12-24T09:39:57.814 [DEBUG] [Thread-299887] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:39:57.868 [DEBUG] [Thread-299887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:39:57.868 [DEBUG] [Thread-299887] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:39:57.868 [DEBUG] [Thread-299887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:39:57.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:39:57.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:39:57.926 [DEBUG] [Thread-299887] [transport.py] [_log()] userauth is OK
2025-12-24T09:39:57.926 [DEBUG] [Thread-299887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:39:57.926 [DEBUG] [Thread-299887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:39:57.926 [DEBUG] [Thread-299887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:39:57.926 [DEBUG] [Thread-299887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:39:57.939 [INFO] [Thread-299887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:39:57.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:39:57.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:39:58.775 [DEBUG] [Thread-299887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:39:58.775 [DEBUG] [Thread-299887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:39:58.822 [DEBUG] [Thread-299887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:39:58.822 [DEBUG] [Thread-299887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:39:58.835 [DEBUG] [Thread-299887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:39:58.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:39:58.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:39:58.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:39:58.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:39:58.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:39:58.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:39:58.868 [DEBUG] [Thread-299887] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:40:03.280 [DEBUG] [Thread-299889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:40:18.437 [DEBUG] [Thread-299890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:40:19.218 [DEBUG] [Thread-299891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:40:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:40:28.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:40:28.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
2025-12-24T09:40:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 40, 13), 10.86, 48.82, 0.0, 9.16, 18.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:40:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:40:13
2025-12-24T09:40:29.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:40:30.177 [DEBUG] [Thread-299892] [transport.py] [_log()] starting thread (client mode): 0xf57ab6a0
2025-12-24T09:40:30.177 [DEBUG] [Thread-299892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:40:30.189 [DEBUG] [Thread-299892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:40:30.190 [INFO] [Thread-299892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:40:30.194 [DEBUG] [Thread-299892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] client lang: <none>
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] server lang: <none>
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] kex follows: False
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:40:30.195 [DEBUG] [Thread-299892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:40:30.196 [DEBUG] [Thread-299892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:40:30.196 [DEBUG] [Thread-299892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:40:30.196 [DEBUG] [Thread-299892] [transport.py] [_log()] Compression: none
2025-12-24T09:40:30.196 [DEBUG] [Thread-299892] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:40:30.230 [DEBUG] [Thread-299892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:40:30.235 [DEBUG] [Thread-299892] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:40:30.237 [DEBUG] [Thread-299892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:40:30.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:40:30.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:40:30.245 [DEBUG] [Thread-299892] [transport.py] [_log()] userauth is OK
2025-12-24T09:40:30.245 [DEBUG] [Thread-299892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:40:30.245 [DEBUG] [Thread-299892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:40:30.245 [DEBUG] [Thread-299892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:40:30.246 [DEBUG] [Thread-299892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:40:30.273 [INFO] [Thread-299892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:40:30.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:40:30.914 [DEBUG] [Thread-299892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:40:30.915 [DEBUG] [Thread-299892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:40:30.916 [DEBUG] [Thread-299892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:40:30.955 [DEBUG] [Thread-299892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:40:30.955 [DEBUG] [Thread-299892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:40:30.958 [DEBUG] [Thread-299892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:40:30.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:40:30.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:40:30.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:40:30.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:40:30.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:40:30.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:40:30.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:40:30.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:40:30.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:40:30.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.319169 -999.00  +18.60   9.25     51   +8.50 1 1 1 1 1   888    0 11.83 89.26 ----- 10.1 9.2 166.6 18.4 26.9 -27.5 25.9 -27.2 24.9 -26.0 25.3 -27.6
2025-12-24T09:40:30.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:40:30.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:40:30.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.319169
2025-12-24T09:40:30.990 [DEBUG] [Thread-299892] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:40:30.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:40:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:40:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:40:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:40:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:40:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:40:13', tmtdew=10.86, humidity=48.82, cloud=0.0, wind=9.16, temperature=18.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:39:36.202', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:40:31.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:40:31.092 [DEBUG] [Thread-299895] [transport.py] [_log()] starting thread (client mode): 0xf574d270
2025-12-24T09:40:31.092 [DEBUG] [Thread-299895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:40:31.107 [DEBUG] [Thread-299895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:40:31.107 [INFO] [Thread-299895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] client lang: <none>
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] server lang: <none>
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] kex follows: False
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] Compression: none
2025-12-24T09:40:31.115 [DEBUG] [Thread-299895] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:40:31.174 [DEBUG] [Thread-299895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:40:31.174 [DEBUG] [Thread-299895] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:40:31.174 [DEBUG] [Thread-299895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:40:31.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:40:31.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:40:31.230 [DEBUG] [Thread-299895] [transport.py] [_log()] userauth is OK
2025-12-24T09:40:31.230 [DEBUG] [Thread-299895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:40:31.231 [DEBUG] [Thread-299895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:40:31.231 [DEBUG] [Thread-299895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:40:31.231 [DEBUG] [Thread-299895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:40:31.249 [INFO] [Thread-299895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:40:31.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:40:31.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:40:32.144 [DEBUG] [Thread-299895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:40:32.144 [DEBUG] [Thread-299895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:40:32.183 [DEBUG] [Thread-299895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:40:32.183 [DEBUG] [Thread-299895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:40:32.192 [DEBUG] [Thread-299895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:40:32.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:40:32.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')
2025-12-24T09:40: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') -> 00000000
2025-12-24T09:40:32.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:40:32.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:40:32.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:40:32.224 [DEBUG] [Thread-299895] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:40:32.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:40:32.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:40:33.524 [DEBUG] [Thread-299897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:40:48.666 [DEBUG] [Thread-299898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:41:02.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:41:02.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:41:02.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:41:03.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 40, 46), 11.02, 48.44, 0.0, 9.05, 17.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:41:03.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:40:46
2025-12-24T09:41:03.726 [DEBUG] [Thread-299899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:41:03.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:41:03.961 [DEBUG] [Thread-299900] [transport.py] [_log()] starting thread (client mode): 0xf574f850
2025-12-24T09:41:03.961 [DEBUG] [Thread-299900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:41:03.974 [DEBUG] [Thread-299900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:41:03.975 [INFO] [Thread-299900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:41:03.981 [DEBUG] [Thread-299900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] client lang: <none>
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] server lang: <none>
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] kex follows: False
2025-12-24T09:41:03.982 [DEBUG] [Thread-299900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:41:03.984 [DEBUG] [Thread-299900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:41:03.984 [DEBUG] [Thread-299900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:41:03.984 [DEBUG] [Thread-299900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:41:03.984 [DEBUG] [Thread-299900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:41:03.984 [DEBUG] [Thread-299900] [transport.py] [_log()] Compression: none
2025-12-24T09:41:03.984 [DEBUG] [Thread-299900] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:41:04.023 [DEBUG] [Thread-299900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:41:04.028 [DEBUG] [Thread-299900] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:41:04.030 [DEBUG] [Thread-299900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:41:04.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:41:04.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:41:04.036 [DEBUG] [Thread-299900] [transport.py] [_log()] userauth is OK
2025-12-24T09:41:04.037 [DEBUG] [Thread-299900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:41:04.037 [DEBUG] [Thread-299900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:41:04.037 [DEBUG] [Thread-299900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:41:04.037 [DEBUG] [Thread-299900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:41:04.078 [INFO] [Thread-299900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:41:04.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:41:04.731 [DEBUG] [Thread-299900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:41:04.731 [DEBUG] [Thread-299900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:41:04.732 [DEBUG] [Thread-299900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:41:04.772 [DEBUG] [Thread-299900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:41:04.772 [DEBUG] [Thread-299900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:41:04.774 [DEBUG] [Thread-299900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:41:04.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:41:04.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:41:04.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:41:04.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:41:04.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:41:04.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:41:04.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:41:04.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:41:04.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:41:04.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.319515 -999.00  +18.70  12.26     51   +8.40 1 1 1 1 1   888    0 12.05 97.87 ----- 11.1 12.3 188.2 17.0 26.9 -27.0 25.8 -26.3 24.9 -25.2 25.4 -25.9
2025-12-24T09:41:04.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:41:04.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:41:04.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.319515
2025-12-24T09:41:04.804 [DEBUG] [Thread-299900] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:41:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:41:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:41:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:41:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:41:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:41:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:40:46', tmtdew=11.02, humidity=48.44, cloud=0.0, wind=9.05, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:40:06.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:41:04.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:41:04.905 [DEBUG] [Thread-299903] [transport.py] [_log()] starting thread (client mode): 0xf574e470
2025-12-24T09:41:04.905 [DEBUG] [Thread-299903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:41:04.922 [DEBUG] [Thread-299903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:41:04.922 [INFO] [Thread-299903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:41:04.930 [DEBUG] [Thread-299903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] client lang: <none>
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] server lang: <none>
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] kex follows: False
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:41:04.931 [DEBUG] [Thread-299903] [transport.py] [_log()] Compression: none
2025-12-24T09:41:04.932 [DEBUG] [Thread-299903] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:41:04.994 [DEBUG] [Thread-299903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:41:04.994 [DEBUG] [Thread-299903] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:41:04.995 [DEBUG] [Thread-299903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:41:04.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:41:04.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:41:05.050 [DEBUG] [Thread-299903] [transport.py] [_log()] userauth is OK
2025-12-24T09:41:05.050 [DEBUG] [Thread-299903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:41:05.050 [DEBUG] [Thread-299903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:41:05.050 [DEBUG] [Thread-299903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:41:05.050 [DEBUG] [Thread-299903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:41:05.064 [INFO] [Thread-299903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:41:05.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:41:05.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:41:05.885 [DEBUG] [Thread-299903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:41:05.885 [DEBUG] [Thread-299903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:41:05.933 [DEBUG] [Thread-299903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:41:05.933 [DEBUG] [Thread-299903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:41:05.942 [DEBUG] [Thread-299903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:41:05.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:41:05.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:41:05.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:41:05.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:41:05.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:41:05.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:41:05.978 [DEBUG] [Thread-299903] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:41:18.779 [DEBUG] [Thread-299905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:41:19.489 [DEBUG] [Thread-299906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:41:32.485 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:41:32.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:41:33.904 [DEBUG] [Thread-299907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:41:36.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:41:36.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:41:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:41:36.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 41, 18), 11.04, 48.38, 0.0, 8.65, 17.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:41:36.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:41:18
2025-12-24T09:41:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:41:37.252 [DEBUG] [Thread-299908] [transport.py] [_log()] starting thread (client mode): 0xf57a8550
2025-12-24T09:41:37.252 [DEBUG] [Thread-299908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:41:37.263 [DEBUG] [Thread-299908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:41:37.263 [INFO] [Thread-299908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] client lang: <none>
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] server lang: <none>
2025-12-24T09:41:37.266 [DEBUG] [Thread-299908] [transport.py] [_log()] kex follows: False
2025-12-24T09:41:37.267 [DEBUG] [Thread-299908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:41:37.267 [DEBUG] [Thread-299908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:41:37.267 [DEBUG] [Thread-299908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:41:37.267 [DEBUG] [Thread-299908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:41:37.267 [DEBUG] [Thread-299908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:41:37.267 [DEBUG] [Thread-299908] [transport.py] [_log()] Compression: none
2025-12-24T09:41:37.267 [DEBUG] [Thread-299908] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:41:37.299 [DEBUG] [Thread-299908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:41:37.303 [DEBUG] [Thread-299908] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:41:37.305 [DEBUG] [Thread-299908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:41:37.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:41:37.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:41:37.310 [DEBUG] [Thread-299908] [transport.py] [_log()] userauth is OK
2025-12-24T09:41:37.311 [DEBUG] [Thread-299908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:41:37.311 [DEBUG] [Thread-299908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:41:37.311 [DEBUG] [Thread-299908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:41:37.311 [DEBUG] [Thread-299908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:41:37.350 [INFO] [Thread-299908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:41:37.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:41:37.982 [DEBUG] [Thread-299908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:41:37.982 [DEBUG] [Thread-299908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:41:37.984 [DEBUG] [Thread-299908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:41:38.023 [DEBUG] [Thread-299908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:41:38.023 [DEBUG] [Thread-299908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:41:38.027 [DEBUG] [Thread-299908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:41:38.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:41:38.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:41:38.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:41:38.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:41:38.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:41:38.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:41:38.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:41:38.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:41:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:41:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.320210 -999.00  +18.90  14.38     49   +8.10 1 1 1 1 1   888    0 12.25 99.50 ----- 15.3 14.4 185.8 16.8 26.9 -26.4 25.4 -31.8 24.9 -24.1 25.4 -26.0
2025-12-24T09:41:38.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:41:38.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:41:38.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.320210
2025-12-24T09:41:38.061 [DEBUG] [Thread-299908] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:41:38.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:41:38.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:41:38.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:41:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:41:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:41:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:41:18', tmtdew=11.04, humidity=48.38, cloud=0.0, wind=8.65, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:41:06.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:41:38.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:41:38.167 [DEBUG] [Thread-299911] [transport.py] [_log()] starting thread (client mode): 0xf57bf220
2025-12-24T09:41:38.167 [DEBUG] [Thread-299911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:41:38.182 [DEBUG] [Thread-299911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:41:38.182 [INFO] [Thread-299911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:41:38.192 [DEBUG] [Thread-299911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] client lang: <none>
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] server lang: <none>
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] kex follows: False
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] Compression: none
2025-12-24T09:41:38.193 [DEBUG] [Thread-299911] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:41:38.250 [DEBUG] [Thread-299911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:41:38.251 [DEBUG] [Thread-299911] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:41:38.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:41:38.252 [DEBUG] [Thread-299911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:41:38.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:41:38.307 [DEBUG] [Thread-299911] [transport.py] [_log()] userauth is OK
2025-12-24T09:41:38.307 [DEBUG] [Thread-299911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:41:38.307 [DEBUG] [Thread-299911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:41:38.307 [DEBUG] [Thread-299911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:41:38.307 [DEBUG] [Thread-299911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:41:38.326 [INFO] [Thread-299911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:41:38.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:41:38.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:41:39.156 [DEBUG] [Thread-299911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:41:39.156 [DEBUG] [Thread-299911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:41:39.195 [DEBUG] [Thread-299911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:41:39.195 [DEBUG] [Thread-299911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:41:39.205 [DEBUG] [Thread-299911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:41:39.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:41:39.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:41:39.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:41:39.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:41:39.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:41:39.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:41:39.242 [DEBUG] [Thread-299911] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:41:48.985 [DEBUG] [Thread-299913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:42:04.083 [DEBUG] [Thread-299914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:42:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:42:09.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:42:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:42:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 41, 52), 10.78, 49.54, 0.0, 7.94, 17.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:42:09.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:41:52
2025-12-24T09:42:10.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:42:10.317 [DEBUG] [Thread-299915] [transport.py] [_log()] starting thread (client mode): 0xf57aa590
2025-12-24T09:42:10.317 [DEBUG] [Thread-299915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:42:10.330 [DEBUG] [Thread-299915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:42:10.330 [INFO] [Thread-299915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] client lang: <none>
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] server lang: <none>
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] kex follows: False
2025-12-24T09:42:10.334 [DEBUG] [Thread-299915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:42:10.335 [DEBUG] [Thread-299915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:42:10.335 [DEBUG] [Thread-299915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:42:10.335 [DEBUG] [Thread-299915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:42:10.335 [DEBUG] [Thread-299915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:42:10.335 [DEBUG] [Thread-299915] [transport.py] [_log()] Compression: none
2025-12-24T09:42:10.335 [DEBUG] [Thread-299915] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:42:10.362 [DEBUG] [Thread-299915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:42:10.365 [DEBUG] [Thread-299915] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:42:10.367 [DEBUG] [Thread-299915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:42:10.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:42:10.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:42:10.404 [DEBUG] [Thread-299915] [transport.py] [_log()] userauth is OK
2025-12-24T09:42:10.404 [DEBUG] [Thread-299915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:42:10.405 [DEBUG] [Thread-299915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:42:10.405 [DEBUG] [Thread-299915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:42:10.405 [DEBUG] [Thread-299915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:42:10.422 [INFO] [Thread-299915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:42:10.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:42:11.059 [DEBUG] [Thread-299915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:42:11.059 [DEBUG] [Thread-299915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:42:11.060 [DEBUG] [Thread-299915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:42:11.100 [DEBUG] [Thread-299915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:42:11.100 [DEBUG] [Thread-299915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:42:11.103 [DEBUG] [Thread-299915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:42:11.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:42:11.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:42:11.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:42:11.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:42:11.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:42:11.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:42:11.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:42:11.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:42:11.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:42:11.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.320557 -999.00  +18.70  10.96     50   +8.30 1 1 1 1 1   888    0 12.44 100.50 ----- 9.3 11.0 155.4 15.3 26.8 -27.1 25.8 -25.1 24.6 -25.3 25.3 -26.8
2025-12-24T09:42:11.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:42:11.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:42:11.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.320557
2025-12-24T09:42:11.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:42:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:42:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:42:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:42:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:42:11.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:41:52', tmtdew=10.78, humidity=49.54, cloud=0.0, wind=7.94, temperature=17.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:41:36.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:42:11.135 [DEBUG] [Thread-299915] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:42:11.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:42:11.230 [DEBUG] [Thread-299918] [transport.py] [_log()] starting thread (client mode): 0xf57a8be0
2025-12-24T09:42:11.230 [DEBUG] [Thread-299918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:42:11.247 [DEBUG] [Thread-299918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:42:11.248 [INFO] [Thread-299918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:42:11.255 [DEBUG] [Thread-299918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:42:11.255 [DEBUG] [Thread-299918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:42:11.255 [DEBUG] [Thread-299918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:42:11.255 [DEBUG] [Thread-299918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] client lang: <none>
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] server lang: <none>
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] kex follows: False
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:42:11.256 [DEBUG] [Thread-299918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:42:11.257 [DEBUG] [Thread-299918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:42:11.257 [DEBUG] [Thread-299918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:42:11.257 [DEBUG] [Thread-299918] [transport.py] [_log()] Compression: none
2025-12-24T09:42:11.257 [DEBUG] [Thread-299918] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:42:11.314 [DEBUG] [Thread-299918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:42:11.314 [DEBUG] [Thread-299918] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:42:11.315 [DEBUG] [Thread-299918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:42:11.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:42:11.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:42:11.375 [DEBUG] [Thread-299918] [transport.py] [_log()] userauth is OK
2025-12-24T09:42:11.375 [DEBUG] [Thread-299918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:42:11.375 [DEBUG] [Thread-299918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:42:11.375 [DEBUG] [Thread-299918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:42:11.375 [DEBUG] [Thread-299918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:42:11.395 [INFO] [Thread-299918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:42:11.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:42:11.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:42:12.277 [DEBUG] [Thread-299918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:42:12.278 [DEBUG] [Thread-299918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:42:12.316 [DEBUG] [Thread-299918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:42:12.317 [DEBUG] [Thread-299918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:42:12.325 [DEBUG] [Thread-299918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:42:12.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:42:12.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:42:12.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:42:12.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:42:12.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:42:12.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:42:12.360 [DEBUG] [Thread-299918] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:42:19.110 [DEBUG] [Thread-299920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:42:19.797 [DEBUG] [Thread-299921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:42:32.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:42:32.642 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:42:34.201 [DEBUG] [Thread-299922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:42:42.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:42:42.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:42:42.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:42:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 42, 25), 10.78, 49.59, 0.0, 11.13, 17.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:42:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:42:25
2025-12-24T09:42:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:42:43.944 [DEBUG] [Thread-299923] [transport.py] [_log()] starting thread (client mode): 0xf574fc40
2025-12-24T09:42:43.945 [DEBUG] [Thread-299923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:42:43.959 [DEBUG] [Thread-299923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:42:43.960 [INFO] [Thread-299923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:42:43.966 [DEBUG] [Thread-299923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:42:43.966 [DEBUG] [Thread-299923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] client lang: <none>
2025-12-24T09:42:43.967 [DEBUG] [Thread-299923] [transport.py] [_log()] server lang: <none>
2025-12-24T09:42:43.968 [DEBUG] [Thread-299923] [transport.py] [_log()] kex follows: False
2025-12-24T09:42:43.968 [DEBUG] [Thread-299923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:42:43.969 [DEBUG] [Thread-299923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:42:43.969 [DEBUG] [Thread-299923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:42:43.969 [DEBUG] [Thread-299923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:42:43.969 [DEBUG] [Thread-299923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:42:43.969 [DEBUG] [Thread-299923] [transport.py] [_log()] Compression: none
2025-12-24T09:42:43.969 [DEBUG] [Thread-299923] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:42:44.009 [DEBUG] [Thread-299923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:42:44.014 [DEBUG] [Thread-299923] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:42:44.017 [DEBUG] [Thread-299923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:42:44.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:42:44.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:42:44.023 [DEBUG] [Thread-299923] [transport.py] [_log()] userauth is OK
2025-12-24T09:42:44.023 [DEBUG] [Thread-299923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:42:44.023 [DEBUG] [Thread-299923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:42:44.024 [DEBUG] [Thread-299923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:42:44.024 [DEBUG] [Thread-299923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:42:44.064 [INFO] [Thread-299923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:42:44.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:42:44.716 [DEBUG] [Thread-299923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:42:44.716 [DEBUG] [Thread-299923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:42:44.716 [DEBUG] [Thread-299923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:42:44.757 [DEBUG] [Thread-299923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:42:44.757 [DEBUG] [Thread-299923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:42:44.760 [DEBUG] [Thread-299923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:42:44.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:42:44.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:42:44.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:42:44.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:42:44.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:42:44.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:42:44.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:42:44.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:42:44.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:42:44.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.320905 -999.00  +18.80   9.07     50   +8.30 1 1 1 1 1   888    0 12.33 100.06 ----- 8.0 9.1 172.2 10.7 26.8 -26.4 25.7 -31.7 24.8 -24.8 25.3 -25.6
2025-12-24T09:42:44.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:42:44.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:42:44.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.320905
2025-12-24T09:42:44.793 [DEBUG] [Thread-299923] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:42:44.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:42:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:42:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:42:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:42:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:42:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:42:25', tmtdew=10.78, humidity=49.59, cloud=0.0, wind=11.13, temperature=17.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:42:06.192', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:42:44.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:42:44.895 [DEBUG] [Thread-299926] [transport.py] [_log()] starting thread (client mode): 0xf574f2e0
2025-12-24T09:42:44.895 [DEBUG] [Thread-299926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:42:44.909 [DEBUG] [Thread-299926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:42:44.910 [INFO] [Thread-299926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] client lang: <none>
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] server lang: <none>
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] kex follows: False
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:42:44.917 [DEBUG] [Thread-299926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:42:44.918 [DEBUG] [Thread-299926] [transport.py] [_log()] Compression: none
2025-12-24T09:42:44.918 [DEBUG] [Thread-299926] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:42:44.973 [DEBUG] [Thread-299926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:42:44.973 [DEBUG] [Thread-299926] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:42:44.973 [DEBUG] [Thread-299926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:42:44.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:42:44.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:42:45.030 [DEBUG] [Thread-299926] [transport.py] [_log()] userauth is OK
2025-12-24T09:42:45.030 [DEBUG] [Thread-299926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:42:45.030 [DEBUG] [Thread-299926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:42:45.030 [DEBUG] [Thread-299926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:42:45.030 [DEBUG] [Thread-299926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:42:45.044 [INFO] [Thread-299926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:42:45.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:42:45.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:42:45.885 [DEBUG] [Thread-299926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:42:45.886 [DEBUG] [Thread-299926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:42:45.933 [DEBUG] [Thread-299926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:42:45.933 [DEBUG] [Thread-299926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:42:45.941 [DEBUG] [Thread-299926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:42:45.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:42:45.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:42:45.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:42:45.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:42:45.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:42:45.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:42:45.974 [DEBUG] [Thread-299926] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:42:49.265 [DEBUG] [Thread-299928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:43:04.366 [DEBUG] [Thread-299929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:43:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:43:15.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:43:16.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:43:17.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 42, 58), 10.8, 49.17, 0.0, 12.7, 17.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:43:17.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:42:58
2025-12-24T09:43:17.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:43:17.639 [DEBUG] [Thread-299930] [transport.py] [_log()] starting thread (client mode): 0xf5701ff0
2025-12-24T09:43:17.640 [DEBUG] [Thread-299930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:43:17.655 [DEBUG] [Thread-299930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:43:17.655 [INFO] [Thread-299930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] client lang: <none>
2025-12-24T09:43:17.661 [DEBUG] [Thread-299930] [transport.py] [_log()] server lang: <none>
2025-12-24T09:43:17.662 [DEBUG] [Thread-299930] [transport.py] [_log()] kex follows: False
2025-12-24T09:43:17.662 [DEBUG] [Thread-299930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:43:17.663 [DEBUG] [Thread-299930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:43:17.663 [DEBUG] [Thread-299930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:43:17.663 [DEBUG] [Thread-299930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:43:17.663 [DEBUG] [Thread-299930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:43:17.663 [DEBUG] [Thread-299930] [transport.py] [_log()] Compression: none
2025-12-24T09:43:17.663 [DEBUG] [Thread-299930] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:43:17.699 [DEBUG] [Thread-299930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:43:17.705 [DEBUG] [Thread-299930] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:43:17.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:43:17.710 [DEBUG] [Thread-299930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:43:17.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:43:17.713 [DEBUG] [Thread-299930] [transport.py] [_log()] userauth is OK
2025-12-24T09:43:17.713 [DEBUG] [Thread-299930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:43:17.714 [DEBUG] [Thread-299930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:43:17.714 [DEBUG] [Thread-299930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:43:17.714 [DEBUG] [Thread-299930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:43:17.740 [INFO] [Thread-299930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:43:17.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:43:18.400 [DEBUG] [Thread-299930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:43:18.400 [DEBUG] [Thread-299930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:43:18.402 [DEBUG] [Thread-299930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:43:18.441 [DEBUG] [Thread-299930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:43:18.441 [DEBUG] [Thread-299930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:43:18.446 [DEBUG] [Thread-299930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:43:18.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:43:18.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:43:18.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:43:18.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:43:18.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:43:18.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:43:18.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:43:18.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:43:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:43:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.321252 -999.00  +19.00   5.59     49   +8.30 1 1 1 1 1   888    0 12.47 97.53 ----- 5.3 5.6 163.4 10.2 26.9 -26.3 26.0 -25.2 24.8 -24.5 25.5 -24.5
2025-12-24T09:43:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:43:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:43:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.321252
2025-12-24T09:43:18.486 [DEBUG] [Thread-299930] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:43:18.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:43:18.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:43:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:43:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:43:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:43:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:42:58', tmtdew=10.8, humidity=49.17, cloud=0.0, wind=12.7, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:42:36.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:43:18.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:43:18.592 [DEBUG] [Thread-299933] [transport.py] [_log()] starting thread (client mode): 0xf5702710
2025-12-24T09:43:18.592 [DEBUG] [Thread-299933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:43:18.607 [DEBUG] [Thread-299933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:43:18.607 [INFO] [Thread-299933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:43:18.615 [DEBUG] [Thread-299933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:43:18.615 [DEBUG] [Thread-299933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:43:18.615 [DEBUG] [Thread-299933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:43:18.615 [DEBUG] [Thread-299933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:43:18.616 [DEBUG] [Thread-299933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:43:18.616 [DEBUG] [Thread-299933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:43:18.616 [DEBUG] [Thread-299933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:43:18.616 [DEBUG] [Thread-299933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:43:18.616 [DEBUG] [Thread-299933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:43:18.616 [DEBUG] [Thread-299933] [transport.py] [_log()] client lang: <none>
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] server lang: <none>
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] kex follows: False
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] Compression: none
2025-12-24T09:43:18.617 [DEBUG] [Thread-299933] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:43:18.679 [DEBUG] [Thread-299933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:43:18.680 [DEBUG] [Thread-299933] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:43:18.680 [DEBUG] [Thread-299933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:43:18.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:43:18.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:43:18.739 [DEBUG] [Thread-299933] [transport.py] [_log()] userauth is OK
2025-12-24T09:43:18.739 [DEBUG] [Thread-299933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:43:18.739 [DEBUG] [Thread-299933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:43:18.739 [DEBUG] [Thread-299933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:43:18.739 [DEBUG] [Thread-299933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:43:18.758 [INFO] [Thread-299933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:43:18.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:43:18.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:43:19.400 [DEBUG] [Thread-299935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:43:19.631 [DEBUG] [Thread-299933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:43:19.632 [DEBUG] [Thread-299933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:43:19.678 [DEBUG] [Thread-299933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:43:19.678 [DEBUG] [Thread-299933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:43:19.687 [DEBUG] [Thread-299933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:43:19.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:43:19.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:43:19.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:43:19.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:43:19.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:43:19.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:43:19.720 [DEBUG] [Thread-299933] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:43:20.082 [DEBUG] [Thread-299936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:43:32.788 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:43:32.791 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:43:34.502 [DEBUG] [Thread-299937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:43:49.568 [DEBUG] [Thread-299938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:43:49.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:43:49.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:43:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:43:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 43, 31), 11.09, 48.31, 0.0, 12.12, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:43:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:43:31
2025-12-24T09:43:51.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:43:51.240 [DEBUG] [Thread-299939] [transport.py] [_log()] starting thread (client mode): 0xf574dae0
2025-12-24T09:43:51.240 [DEBUG] [Thread-299939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:43:51.253 [DEBUG] [Thread-299939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:43:51.253 [INFO] [Thread-299939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] client lang: <none>
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] server lang: <none>
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] kex follows: False
2025-12-24T09:43:51.259 [DEBUG] [Thread-299939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:43:51.260 [DEBUG] [Thread-299939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:43:51.260 [DEBUG] [Thread-299939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:43:51.260 [DEBUG] [Thread-299939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:43:51.260 [DEBUG] [Thread-299939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:43:51.260 [DEBUG] [Thread-299939] [transport.py] [_log()] Compression: none
2025-12-24T09:43:51.260 [DEBUG] [Thread-299939] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:43:51.294 [DEBUG] [Thread-299939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:43:51.299 [DEBUG] [Thread-299939] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:43:51.301 [DEBUG] [Thread-299939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:43:51.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:43:51.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:43:51.306 [DEBUG] [Thread-299939] [transport.py] [_log()] userauth is OK
2025-12-24T09:43:51.306 [DEBUG] [Thread-299939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:43:51.307 [DEBUG] [Thread-299939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:43:51.307 [DEBUG] [Thread-299939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:43:51.307 [DEBUG] [Thread-299939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:43:51.333 [INFO] [Thread-299939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:43:51.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:43:51.988 [DEBUG] [Thread-299939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:43:51.989 [DEBUG] [Thread-299939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:43:51.990 [DEBUG] [Thread-299939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:43:52.029 [DEBUG] [Thread-299939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:43:52.030 [DEBUG] [Thread-299939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:43:52.033 [DEBUG] [Thread-299939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:43:52.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:43:52.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:43:52.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:43:52.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:43:52.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:43:52.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:43:52.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:43:52.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:43:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:43:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.321599 -999.00  +19.30   9.58     49   +8.40 1 1 1 1 1   888    0 12.42 95.58 ----- 13.2 9.6 177.0 13.5 27.0 -25.9 26.1 -24.9 24.9 -23.8 25.5 -25.4
2025-12-24T09:43:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:43:52.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:43:52.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.321599
2025-12-24T09:43:52.068 [DEBUG] [Thread-299939] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:43:52.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:43:52.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:43:52.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:43:52.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:43:52.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:43:52.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:43:31', tmtdew=11.09, humidity=48.31, cloud=0.0, wind=12.12, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:43:06.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:43:52.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:43:52.195 [DEBUG] [Thread-299942] [transport.py] [_log()] starting thread (client mode): 0xf57be2f0
2025-12-24T09:43:52.195 [DEBUG] [Thread-299942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:43:52.210 [DEBUG] [Thread-299942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:43:52.210 [INFO] [Thread-299942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:43:52.217 [DEBUG] [Thread-299942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:43:52.217 [DEBUG] [Thread-299942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:43:52.217 [DEBUG] [Thread-299942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:43:52.217 [DEBUG] [Thread-299942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:43:52.217 [DEBUG] [Thread-299942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:43:52.217 [DEBUG] [Thread-299942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:43:52.217 [DEBUG] [Thread-299942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] client lang: <none>
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] server lang: <none>
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] kex follows: False
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] Compression: none
2025-12-24T09:43:52.218 [DEBUG] [Thread-299942] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:43:52.283 [DEBUG] [Thread-299942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:43:52.283 [DEBUG] [Thread-299942] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:43:52.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:43:52.284 [DEBUG] [Thread-299942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:43:52.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:43:52.342 [DEBUG] [Thread-299942] [transport.py] [_log()] userauth is OK
2025-12-24T09:43:52.342 [DEBUG] [Thread-299942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:43:52.342 [DEBUG] [Thread-299942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:43:52.342 [DEBUG] [Thread-299942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:43:52.342 [DEBUG] [Thread-299942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:43:52.361 [INFO] [Thread-299942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:43:52.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:43:52.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:43:53.209 [DEBUG] [Thread-299942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:43:53.209 [DEBUG] [Thread-299942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:43:53.257 [DEBUG] [Thread-299942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:43:53.257 [DEBUG] [Thread-299942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:43:53.266 [DEBUG] [Thread-299942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:43:53.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:43:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:43:53.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:43:53.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:43:53.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:43:53.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:43:53.302 [DEBUG] [Thread-299942] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:44:04.609 [DEBUG] [Thread-299944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:44:19.715 [DEBUG] [Thread-299945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:44:20.292 [DEBUG] [Thread-299946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:44:23.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:44:23.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:44:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:44:24.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 44, 3), 11.16, 48.1, 0.0, 12.83, 18.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:44:24.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:44:03
2025-12-24T09:44:24.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:44:25.102 [DEBUG] [Thread-299947] [transport.py] [_log()] starting thread (client mode): 0xf8157700
2025-12-24T09:44:25.103 [DEBUG] [Thread-299947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:44:25.108 [DEBUG] [Thread-299947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:44:25.108 [INFO] [Thread-299947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:44:25.112 [DEBUG] [Thread-299947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:44:25.112 [DEBUG] [Thread-299947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:44:25.112 [DEBUG] [Thread-299947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:44:25.112 [DEBUG] [Thread-299947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:44:25.112 [DEBUG] [Thread-299947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:44:25.112 [DEBUG] [Thread-299947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:44:25.113 [DEBUG] [Thread-299947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:44:25.113 [DEBUG] [Thread-299947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:44:25.113 [DEBUG] [Thread-299947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:44:25.113 [DEBUG] [Thread-299947] [transport.py] [_log()] client lang: <none>
2025-12-24T09:44:25.113 [DEBUG] [Thread-299947] [transport.py] [_log()] server lang: <none>
2025-12-24T09:44:25.113 [DEBUG] [Thread-299947] [transport.py] [_log()] kex follows: False
2025-12-24T09:44:25.113 [DEBUG] [Thread-299947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:44:25.113 [DEBUG] [Thread-299947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:44:25.114 [DEBUG] [Thread-299947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:44:25.114 [DEBUG] [Thread-299947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:44:25.114 [DEBUG] [Thread-299947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:44:25.114 [DEBUG] [Thread-299947] [transport.py] [_log()] Compression: none
2025-12-24T09:44:25.114 [DEBUG] [Thread-299947] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:44:25.151 [DEBUG] [Thread-299947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:44:25.156 [DEBUG] [Thread-299947] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:44:25.158 [DEBUG] [Thread-299947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:44:25.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:44:25.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:44:25.163 [DEBUG] [Thread-299947] [transport.py] [_log()] userauth is OK
2025-12-24T09:44:25.163 [DEBUG] [Thread-299947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:44:25.163 [DEBUG] [Thread-299947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:44:25.164 [DEBUG] [Thread-299947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:44:25.164 [DEBUG] [Thread-299947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:44:25.185 [INFO] [Thread-299947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:44:25.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:44:25.829 [DEBUG] [Thread-299947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:44:25.830 [DEBUG] [Thread-299947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:44:25.830 [DEBUG] [Thread-299947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:44:25.871 [DEBUG] [Thread-299947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:44:25.871 [DEBUG] [Thread-299947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:44:25.873 [DEBUG] [Thread-299947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:44:25.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:44:25.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:44:25.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:44:25.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:44:25.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:44:25.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:44:25.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:44:25.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:44:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:44:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.321946 -999.00  +19.40  12.61     50   +8.70 1 1 1 1 1   888    0 12.35 96.23 ----- 11.8 12.6 165.8 15.7 27.2 -25.6 26.0 -26.4 25.0 -23.8 25.6 -25.2
2025-12-24T09:44:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:44:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:44:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.321946
2025-12-24T09:44:25.901 [DEBUG] [Thread-299947] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:44:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:44:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:44:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:44:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:44:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:44:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:44:03', tmtdew=11.16, humidity=48.1, cloud=0.0, wind=12.83, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:43:36.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:44:25.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:44:25.998 [DEBUG] [Thread-299950] [transport.py] [_log()] starting thread (client mode): 0xf575dd50
2025-12-24T09:44:25.998 [DEBUG] [Thread-299950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:44:26.012 [DEBUG] [Thread-299950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:44:26.012 [INFO] [Thread-299950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] client lang: <none>
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] server lang: <none>
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] kex follows: False
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:44:26.020 [DEBUG] [Thread-299950] [transport.py] [_log()] Compression: none
2025-12-24T09:44:26.021 [DEBUG] [Thread-299950] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:44:26.081 [DEBUG] [Thread-299950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:44:26.082 [DEBUG] [Thread-299950] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:44:26.082 [DEBUG] [Thread-299950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:44:26.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:44:26.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:44:26.143 [DEBUG] [Thread-299950] [transport.py] [_log()] userauth is OK
2025-12-24T09:44:26.143 [DEBUG] [Thread-299950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:44:26.143 [DEBUG] [Thread-299950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:44:26.143 [DEBUG] [Thread-299950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:44:26.143 [DEBUG] [Thread-299950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:44:26.163 [INFO] [Thread-299950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:44:26.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:44:26.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:44:26.993 [DEBUG] [Thread-299950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:44:26.994 [DEBUG] [Thread-299950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:44:27.040 [DEBUG] [Thread-299950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:44:27.041 [DEBUG] [Thread-299950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:44:27.049 [DEBUG] [Thread-299950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:44:27.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:44:27.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:44:27.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:44:27.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:44:27.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:44:27.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:44:27.087 [DEBUG] [Thread-299950] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:44:32.931 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:44:32.932 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:44:34.769 [DEBUG] [Thread-299952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:44:49.866 [DEBUG] [Thread-299953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:44:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:44:57.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:44:57.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:44:58.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 44, 36), 11.29, 47.43, 0.0, 13.78, 18.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:44:58.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:44:36
2025-12-24T09:44:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:44:58.369 [DEBUG] [Thread-299954] [transport.py] [_log()] starting thread (client mode): 0xf57a9330
2025-12-24T09:44:58.369 [DEBUG] [Thread-299954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:44:58.383 [DEBUG] [Thread-299954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:44:58.384 [INFO] [Thread-299954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:44:58.387 [DEBUG] [Thread-299954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] client lang: <none>
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] server lang: <none>
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] kex follows: False
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:44:58.388 [DEBUG] [Thread-299954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:44:58.389 [DEBUG] [Thread-299954] [transport.py] [_log()] Compression: none
2025-12-24T09:44:58.389 [DEBUG] [Thread-299954] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:44:58.417 [DEBUG] [Thread-299954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:44:58.419 [DEBUG] [Thread-299954] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:44:58.420 [DEBUG] [Thread-299954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:44:58.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:44:58.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:44:58.423 [DEBUG] [Thread-299954] [transport.py] [_log()] userauth is OK
2025-12-24T09:44:58.423 [DEBUG] [Thread-299954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:44:58.424 [DEBUG] [Thread-299954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:44:58.424 [DEBUG] [Thread-299954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:44:58.424 [DEBUG] [Thread-299954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:44:58.442 [INFO] [Thread-299954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:44:58.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:44:59.202 [DEBUG] [Thread-299954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:44:59.203 [DEBUG] [Thread-299954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:44:59.204 [DEBUG] [Thread-299954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:44:59.244 [DEBUG] [Thread-299954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:44:59.244 [DEBUG] [Thread-299954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:44:59.248 [DEBUG] [Thread-299954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:44:59.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:44:59.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:44:59.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:44:59.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:44:59.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:44:59.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:44:59.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:44:59.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:44:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:44:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.322293 -999.00  +19.60   9.90     49   +8.80 1 1 1 1 1   888    0 12.58 97.87 ----- 13.3 9.9 135.4 14.8 27.2 -25.2 26.4 -25.4 25.0 -23.6 25.7 -24.3
2025-12-24T09:44:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:44:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:44:59.278 [DEBUG] [Thread-299954] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:44:59.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.322293
2025-12-24T09:44:59.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:44:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:44:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:44:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:44:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:44:59.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:44:36', tmtdew=11.29, humidity=47.43, cloud=0.0, wind=13.78, temperature=18.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:44:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:44:59.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:44:59.400 [DEBUG] [Thread-299957] [transport.py] [_log()] starting thread (client mode): 0xf57a89d0
2025-12-24T09:44:59.400 [DEBUG] [Thread-299957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:44:59.415 [DEBUG] [Thread-299957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:44:59.415 [INFO] [Thread-299957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:44:59.423 [DEBUG] [Thread-299957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] client lang: <none>
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] server lang: <none>
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] kex follows: False
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:44:59.424 [DEBUG] [Thread-299957] [transport.py] [_log()] Compression: none
2025-12-24T09:44:59.425 [DEBUG] [Thread-299957] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:44:59.487 [DEBUG] [Thread-299957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:44:59.487 [DEBUG] [Thread-299957] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:44:59.488 [DEBUG] [Thread-299957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:44:59.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:44:59.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:44:59.551 [DEBUG] [Thread-299957] [transport.py] [_log()] userauth is OK
2025-12-24T09:44:59.551 [DEBUG] [Thread-299957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:44:59.551 [DEBUG] [Thread-299957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:44:59.551 [DEBUG] [Thread-299957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:44:59.551 [DEBUG] [Thread-299957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:44:59.572 [INFO] [Thread-299957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:44:59.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:44:59.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:45:00.440 [DEBUG] [Thread-299957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:45:00.440 [DEBUG] [Thread-299957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:45:00.487 [DEBUG] [Thread-299957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:45:00.488 [DEBUG] [Thread-299957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:45:00.497 [DEBUG] [Thread-299957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:45:00.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:45:00.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:45:00.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:45:00.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:45:00.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:45:00.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:45:00.535 [DEBUG] [Thread-299957] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:45:04.921 [DEBUG] [Thread-299959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:45:20.082 [DEBUG] [Thread-299960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:45:20.531 [DEBUG] [Thread-299961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:45:30.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:45:30.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:45:30.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:45:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 45, 9), 11.23, 47.58, 0.0, 13.5, 18.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:45:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:45:09
2025-12-24T09:45:31.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:45:31.954 [DEBUG] [Thread-299962] [transport.py] [_log()] starting thread (client mode): 0xf8157220
2025-12-24T09:45:31.954 [DEBUG] [Thread-299962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:45:31.967 [DEBUG] [Thread-299962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:45:31.967 [INFO] [Thread-299962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:45:31.973 [DEBUG] [Thread-299962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:45:31.973 [DEBUG] [Thread-299962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:45:31.973 [DEBUG] [Thread-299962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] client lang: <none>
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] server lang: <none>
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] kex follows: False
2025-12-24T09:45:31.974 [DEBUG] [Thread-299962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:45:31.975 [DEBUG] [Thread-299962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:45:31.975 [DEBUG] [Thread-299962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:45:31.976 [DEBUG] [Thread-299962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:45:31.976 [DEBUG] [Thread-299962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:45:31.976 [DEBUG] [Thread-299962] [transport.py] [_log()] Compression: none
2025-12-24T09:45:31.976 [DEBUG] [Thread-299962] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:45:32.022 [DEBUG] [Thread-299962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:45:32.028 [DEBUG] [Thread-299962] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:45:32.030 [DEBUG] [Thread-299962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:45:32.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:45:32.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:45:32.036 [DEBUG] [Thread-299962] [transport.py] [_log()] userauth is OK
2025-12-24T09:45:32.036 [DEBUG] [Thread-299962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:45:32.036 [DEBUG] [Thread-299962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:45:32.036 [DEBUG] [Thread-299962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:45:32.036 [DEBUG] [Thread-299962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:45:32.064 [INFO] [Thread-299962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:45:32.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:45:32.719 [DEBUG] [Thread-299962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:45:32.720 [DEBUG] [Thread-299962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:45:32.721 [DEBUG] [Thread-299962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:45:32.761 [DEBUG] [Thread-299962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:45:32.761 [DEBUG] [Thread-299962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:45:32.763 [DEBUG] [Thread-299962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:45:32.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:45:32.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:45:32.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:45:32.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:45:32.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:45:32.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:45:32.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:45:32.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:45:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:45:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.322641 -999.00  +19.20  14.93     50   +8.50 1 1 1 1 1   888    0 12.45 100.73 ----- 16.5 14.9 121.8 20.1 27.3 -26.9 26.4 -26.2 25.1 -24.5 25.7 -26.0
2025-12-24T09:45:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:45:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:45:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.322641
2025-12-24T09:45:32.796 [DEBUG] [Thread-299962] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:45:32.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:45:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:45:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:45:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:45:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:45:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:45:09', tmtdew=11.23, humidity=47.58, cloud=0.0, wind=13.5, temperature=18.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:44:36.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:45:32.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:45:32.902 [DEBUG] [Thread-299965] [transport.py] [_log()] starting thread (client mode): 0xf57a9d20
2025-12-24T09:45:32.903 [DEBUG] [Thread-299965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:45:32.921 [DEBUG] [Thread-299965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:45:32.921 [INFO] [Thread-299965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] client lang: <none>
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] server lang: <none>
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] kex follows: False
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] Compression: none
2025-12-24T09:45:32.929 [DEBUG] [Thread-299965] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:45:32.988 [DEBUG] [Thread-299965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:45:32.989 [DEBUG] [Thread-299965] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:45:32.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:45:32.989 [DEBUG] [Thread-299965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:45:32.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:45:33.046 [DEBUG] [Thread-299965] [transport.py] [_log()] userauth is OK
2025-12-24T09:45:33.046 [DEBUG] [Thread-299965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:45:33.046 [DEBUG] [Thread-299965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:45:33.046 [DEBUG] [Thread-299965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:45:33.046 [DEBUG] [Thread-299965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:45:33.060 [INFO] [Thread-299965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:45:33.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:45:33.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:45:33.075 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:45:33.076 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:45:33.958 [DEBUG] [Thread-299965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:45:33.958 [DEBUG] [Thread-299965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:45:34.005 [DEBUG] [Thread-299965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:45:34.005 [DEBUG] [Thread-299965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:45:34.013 [DEBUG] [Thread-299965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:45:34.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:45:34.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:45:34.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:45:34.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:45:34.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:45:34.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:45:34.052 [DEBUG] [Thread-299965] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:45:35.169 [DEBUG] [Thread-299967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:45:50.303 [DEBUG] [Thread-299968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:46:04.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:46:04.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:46:04.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:46:05.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 45, 43), 11.53, 46.74, 0.0, 12.83, 18.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:46:05.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:45:43
2025-12-24T09:46:05.366 [DEBUG] [Thread-299969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:46:05.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:46:05.651 [DEBUG] [Thread-299970] [transport.py] [_log()] starting thread (client mode): 0xf5700790
2025-12-24T09:46:05.651 [DEBUG] [Thread-299970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:46:05.661 [DEBUG] [Thread-299970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:46:05.661 [INFO] [Thread-299970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:46:05.666 [DEBUG] [Thread-299970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:46:05.666 [DEBUG] [Thread-299970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:46:05.666 [DEBUG] [Thread-299970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:46:05.666 [DEBUG] [Thread-299970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:46:05.666 [DEBUG] [Thread-299970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:46:05.667 [DEBUG] [Thread-299970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:46:05.667 [DEBUG] [Thread-299970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:46:05.667 [DEBUG] [Thread-299970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:46:05.667 [DEBUG] [Thread-299970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:46:05.667 [DEBUG] [Thread-299970] [transport.py] [_log()] client lang: <none>
2025-12-24T09:46:05.667 [DEBUG] [Thread-299970] [transport.py] [_log()] server lang: <none>
2025-12-24T09:46:05.667 [DEBUG] [Thread-299970] [transport.py] [_log()] kex follows: False
2025-12-24T09:46:05.667 [DEBUG] [Thread-299970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:46:05.668 [DEBUG] [Thread-299970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:46:05.668 [DEBUG] [Thread-299970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:46:05.668 [DEBUG] [Thread-299970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:46:05.668 [DEBUG] [Thread-299970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:46:05.668 [DEBUG] [Thread-299970] [transport.py] [_log()] Compression: none
2025-12-24T09:46:05.668 [DEBUG] [Thread-299970] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:46:05.700 [DEBUG] [Thread-299970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:46:05.705 [DEBUG] [Thread-299970] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:46:05.707 [DEBUG] [Thread-299970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:46:05.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:46:05.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:46:05.712 [DEBUG] [Thread-299970] [transport.py] [_log()] userauth is OK
2025-12-24T09:46:05.713 [DEBUG] [Thread-299970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:46:05.713 [DEBUG] [Thread-299970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:46:05.713 [DEBUG] [Thread-299970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:46:05.713 [DEBUG] [Thread-299970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:46:05.739 [INFO] [Thread-299970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:46:05.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:46:06.356 [DEBUG] [Thread-299970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:46:06.357 [DEBUG] [Thread-299970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:46:06.358 [DEBUG] [Thread-299970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:46:06.397 [DEBUG] [Thread-299970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:46:06.397 [DEBUG] [Thread-299970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:46:06.400 [DEBUG] [Thread-299970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:46:06.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:46:06.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:46:06.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:46:06.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:46:06.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:46:06.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:46:06.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:46:06.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:46:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:46:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.323335 -999.00  +18.60   8.74     49   +8.00 1 1 1 1 1   888    0 13.09 115.79 ----- 7.1 8.7 143.8 21.2 27.0 -26.4 26.4 -25.5 25.1 -25.3 25.5 -27.1
2025-12-24T09:46:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:46:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:46:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.323335
2025-12-24T09:46:06.434 [DEBUG] [Thread-299970] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:46:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:46:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:46:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:46:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:46:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:46:06.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:45:43', tmtdew=11.53, humidity=46.74, cloud=0.0, wind=12.83, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:45:36.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:46:06.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:46:06.547 [DEBUG] [Thread-299973] [transport.py] [_log()] starting thread (client mode): 0xf5795f30
2025-12-24T09:46:06.547 [DEBUG] [Thread-299973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:46:06.566 [DEBUG] [Thread-299973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:46:06.566 [INFO] [Thread-299973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] client lang: <none>
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] server lang: <none>
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] kex follows: False
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:46:06.574 [DEBUG] [Thread-299973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:46:06.575 [DEBUG] [Thread-299973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:46:06.575 [DEBUG] [Thread-299973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:46:06.575 [DEBUG] [Thread-299973] [transport.py] [_log()] Compression: none
2025-12-24T09:46:06.575 [DEBUG] [Thread-299973] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:46:06.629 [DEBUG] [Thread-299973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:46:06.629 [DEBUG] [Thread-299973] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:46:06.630 [DEBUG] [Thread-299973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:46:06.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:46:06.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:46:06.686 [DEBUG] [Thread-299973] [transport.py] [_log()] userauth is OK
2025-12-24T09:46:06.686 [DEBUG] [Thread-299973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:46:06.686 [DEBUG] [Thread-299973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:46:06.687 [DEBUG] [Thread-299973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:46:06.687 [DEBUG] [Thread-299973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:46:06.709 [INFO] [Thread-299973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:46:06.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:46:06.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:46:07.551 [DEBUG] [Thread-299973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:46:07.552 [DEBUG] [Thread-299973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:46:07.600 [DEBUG] [Thread-299973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:46:07.600 [DEBUG] [Thread-299973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:46:07.609 [DEBUG] [Thread-299973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:46:07.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:46:07.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:46:07.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:46:07.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:46:07.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:46:07.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:46:07.648 [DEBUG] [Thread-299973] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:46:20.428 [DEBUG] [Thread-299975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:46:20.808 [DEBUG] [Thread-299976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:46:33.216 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:46:33.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:46:35.543 [DEBUG] [Thread-299977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:46:37.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:46:37.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:46:37.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
2025-12-24T09:46:39.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 46, 15), 11.75, 46.13, 0.0, 13.89, 18.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:46:39.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:46:15
2025-12-24T09:46:39.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:46:39.420 [DEBUG] [Thread-299978] [transport.py] [_log()] starting thread (client mode): 0xf57aacb0
2025-12-24T09:46:39.421 [DEBUG] [Thread-299978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:46:39.435 [DEBUG] [Thread-299978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:46:39.435 [INFO] [Thread-299978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] client lang: <none>
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] server lang: <none>
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] kex follows: False
2025-12-24T09:46:39.441 [DEBUG] [Thread-299978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:46:39.442 [DEBUG] [Thread-299978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:46:39.442 [DEBUG] [Thread-299978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:46:39.442 [DEBUG] [Thread-299978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:46:39.442 [DEBUG] [Thread-299978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:46:39.442 [DEBUG] [Thread-299978] [transport.py] [_log()] Compression: none
2025-12-24T09:46:39.442 [DEBUG] [Thread-299978] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:46:39.483 [DEBUG] [Thread-299978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:46:39.488 [DEBUG] [Thread-299978] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:46:39.490 [DEBUG] [Thread-299978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:46:39.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:46:39.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:46:39.495 [DEBUG] [Thread-299978] [transport.py] [_log()] userauth is OK
2025-12-24T09:46:39.495 [DEBUG] [Thread-299978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:46:39.495 [DEBUG] [Thread-299978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:46:39.495 [DEBUG] [Thread-299978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:46:39.495 [DEBUG] [Thread-299978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:46:39.535 [INFO] [Thread-299978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:46:39.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:46:40.169 [DEBUG] [Thread-299978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:46:40.169 [DEBUG] [Thread-299978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:46:40.178 [DEBUG] [Thread-299978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:46:40.210 [DEBUG] [Thread-299978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:46:40.210 [DEBUG] [Thread-299978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:46:40.212 [DEBUG] [Thread-299978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:46:40.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:46:40.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:46:40.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:46:40.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:46:40.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:46:40.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:46:40.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:46:40.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:46:40.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:46:40.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.323682 -999.00  +18.50  12.82     50   +8.10 1 1 1 1 1   888    0 13.13 110.51 ----- 13.4 12.8 133.2 16.7 27.1 -25.8 26.4 -25.9 25.1 -24.5 25.6 -25.9
2025-12-24T09:46:40.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:46:40.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:46:40.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.323682
2025-12-24T09:46:40.257 [DEBUG] [Thread-299978] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:46:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:46:40.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:46:40.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:46:40.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:46:40.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:46:40.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:46:15', tmtdew=11.75, humidity=46.13, cloud=0.0, wind=13.89, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:46:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:46:40.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:46:40.353 [DEBUG] [Thread-299981] [transport.py] [_log()] starting thread (client mode): 0xf57bdf00
2025-12-24T09:46:40.354 [DEBUG] [Thread-299981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:46:40.372 [DEBUG] [Thread-299981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:46:40.372 [INFO] [Thread-299981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:46:40.380 [DEBUG] [Thread-299981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:46:40.380 [DEBUG] [Thread-299981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:46:40.380 [DEBUG] [Thread-299981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:46:40.380 [DEBUG] [Thread-299981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:46:40.380 [DEBUG] [Thread-299981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:46:40.380 [DEBUG] [Thread-299981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:46:40.380 [DEBUG] [Thread-299981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] client lang: <none>
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] server lang: <none>
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] kex follows: False
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] Compression: none
2025-12-24T09:46:40.381 [DEBUG] [Thread-299981] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:46:40.446 [DEBUG] [Thread-299981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:46:40.446 [DEBUG] [Thread-299981] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:46:40.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:46:40.447 [DEBUG] [Thread-299981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:46:40.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:46:40.502 [DEBUG] [Thread-299981] [transport.py] [_log()] userauth is OK
2025-12-24T09:46:40.503 [DEBUG] [Thread-299981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:46:40.503 [DEBUG] [Thread-299981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:46:40.503 [DEBUG] [Thread-299981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:46:40.503 [DEBUG] [Thread-299981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:46:40.523 [INFO] [Thread-299981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:46:40.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:46:40.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:46:41.357 [DEBUG] [Thread-299981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:46:41.357 [DEBUG] [Thread-299981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:46:41.405 [DEBUG] [Thread-299981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:46:41.406 [DEBUG] [Thread-299981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:46:41.418 [DEBUG] [Thread-299981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:46:41.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:46:41.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:46:41.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:46:41.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:46:41.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:46:41.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:46:41.457 [DEBUG] [Thread-299981] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:46:50.584 [DEBUG] [Thread-299983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:47:05.691 [DEBUG] [Thread-299984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:47:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:47:11.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:47:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:47:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 46, 48), 11.55, 46.48, 0.0, 15.18, 18.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:47:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:46:48
2025-12-24T09:47:12.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:47:13.005 [DEBUG] [Thread-299985] [transport.py] [_log()] starting thread (client mode): 0xf57bc550
2025-12-24T09:47:13.005 [DEBUG] [Thread-299985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:47:13.009 [DEBUG] [Thread-299985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:47:13.010 [INFO] [Thread-299985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] client lang: <none>
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] server lang: <none>
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] kex follows: False
2025-12-24T09:47:13.013 [DEBUG] [Thread-299985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:47:13.014 [DEBUG] [Thread-299985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:47:13.014 [DEBUG] [Thread-299985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:47:13.014 [DEBUG] [Thread-299985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:47:13.014 [DEBUG] [Thread-299985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:47:13.014 [DEBUG] [Thread-299985] [transport.py] [_log()] Compression: none
2025-12-24T09:47:13.014 [DEBUG] [Thread-299985] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:47:13.038 [DEBUG] [Thread-299985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:47:13.040 [DEBUG] [Thread-299985] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:47:13.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:47:13.044 [DEBUG] [Thread-299985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:47:13.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:47:13.080 [DEBUG] [Thread-299985] [transport.py] [_log()] userauth is OK
2025-12-24T09:47:13.081 [DEBUG] [Thread-299985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:47:13.081 [DEBUG] [Thread-299985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:47:13.081 [DEBUG] [Thread-299985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:47:13.081 [DEBUG] [Thread-299985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:47:13.120 [INFO] [Thread-299985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:47:13.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:47:13.771 [DEBUG] [Thread-299985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:47:13.771 [DEBUG] [Thread-299985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:47:13.780 [DEBUG] [Thread-299985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:47:13.813 [DEBUG] [Thread-299985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:47:13.813 [DEBUG] [Thread-299985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:47:13.816 [DEBUG] [Thread-299985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:47:13.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:47:13.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:47:13.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:47:13.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:47:13.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:47:13.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:47:13.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:47:13.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:47:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:47:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.324029 -999.00  +18.50  11.36     51   +8.20 1 1 1 1 1   888    0 13.37 114.70 ----- 12.6 11.4 156.4 17.7 27.1 -26.8 26.4 -26.0 25.1 -24.1 25.6 -27.0
2025-12-24T09:47:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:47:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:47:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.324029
2025-12-24T09:47:13.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:47:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:47:13.847 [DEBUG] [Thread-299985] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:47:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:47:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:47:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:47:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:46:48', tmtdew=11.55, humidity=46.48, cloud=0.0, wind=15.18, temperature=18.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:46:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:47:13.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:47:13.934 [DEBUG] [Thread-299988] [transport.py] [_log()] starting thread (client mode): 0xf575e980
2025-12-24T09:47:13.934 [DEBUG] [Thread-299988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:47:13.949 [DEBUG] [Thread-299988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:47:13.949 [INFO] [Thread-299988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:47:13.956 [DEBUG] [Thread-299988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:47:13.956 [DEBUG] [Thread-299988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:47:13.956 [DEBUG] [Thread-299988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:47:13.956 [DEBUG] [Thread-299988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:47:13.956 [DEBUG] [Thread-299988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] client lang: <none>
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] server lang: <none>
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] kex follows: False
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] Compression: none
2025-12-24T09:47:13.957 [DEBUG] [Thread-299988] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:47:14.013 [DEBUG] [Thread-299988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:47:14.014 [DEBUG] [Thread-299988] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:47:14.014 [DEBUG] [Thread-299988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:47:14.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:47:14.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:47:14.070 [DEBUG] [Thread-299988] [transport.py] [_log()] userauth is OK
2025-12-24T09:47:14.071 [DEBUG] [Thread-299988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:47:14.071 [DEBUG] [Thread-299988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:47:14.071 [DEBUG] [Thread-299988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:47:14.071 [DEBUG] [Thread-299988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:47:14.090 [INFO] [Thread-299988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:47:14.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:47:14.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:47:14.908 [DEBUG] [Thread-299988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:47:14.909 [DEBUG] [Thread-299988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:47:14.957 [DEBUG] [Thread-299988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:47:14.958 [DEBUG] [Thread-299988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:47:14.967 [DEBUG] [Thread-299988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:47:14.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:47:14.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:47:14.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:47:14.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:47:14.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:47:15.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:47:15.008 [DEBUG] [Thread-299988] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:47:20.757 [DEBUG] [Thread-299990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:47:21.111 [DEBUG] [Thread-299991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:47:33.362 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:47:33.365 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:47:35.862 [DEBUG] [Thread-299992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:47:45.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:47:45.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:47:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:47:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 47, 21), 11.77, 45.8, 0.0, 15.14, 18.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:47:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:47:21
2025-12-24T09:47:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:47:46.175 [DEBUG] [Thread-299993] [transport.py] [_log()] starting thread (client mode): 0xf57aa470
2025-12-24T09:47:46.176 [DEBUG] [Thread-299993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:47:46.185 [DEBUG] [Thread-299993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:47:46.186 [INFO] [Thread-299993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] client lang: <none>
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] server lang: <none>
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] kex follows: False
2025-12-24T09:47:46.191 [DEBUG] [Thread-299993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:47:46.192 [DEBUG] [Thread-299993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:47:46.192 [DEBUG] [Thread-299993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:47:46.192 [DEBUG] [Thread-299993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:47:46.192 [DEBUG] [Thread-299993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:47:46.192 [DEBUG] [Thread-299993] [transport.py] [_log()] Compression: none
2025-12-24T09:47:46.193 [DEBUG] [Thread-299993] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:47:46.230 [DEBUG] [Thread-299993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:47:46.235 [DEBUG] [Thread-299993] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:47:46.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:47:46.239 [DEBUG] [Thread-299993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:47:46.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:47:46.244 [DEBUG] [Thread-299993] [transport.py] [_log()] userauth is OK
2025-12-24T09:47:46.244 [DEBUG] [Thread-299993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:47:46.244 [DEBUG] [Thread-299993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:47:46.244 [DEBUG] [Thread-299993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:47:46.244 [DEBUG] [Thread-299993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:47:46.267 [INFO] [Thread-299993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:47:46.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:47:46.913 [DEBUG] [Thread-299993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:47:46.913 [DEBUG] [Thread-299993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:47:46.913 [DEBUG] [Thread-299993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:47:46.954 [DEBUG] [Thread-299993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:47:46.954 [DEBUG] [Thread-299993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:47:46.957 [DEBUG] [Thread-299993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:47:46.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:47:46.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:47:46.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:47:46.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:47:46.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:47:46.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:47:46.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:47:46.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:47:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:47:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.324377 -999.00  +18.60  11.53     50   +8.10 1 1 1 1 1   888    0 13.17 115.50 ----- 10.2 11.5 163.0 14.5 27.1 -27.2 26.4 -25.7 25.2 -24.2 25.7 -24.7
2025-12-24T09:47:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:47:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:47:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.324377
2025-12-24T09:47:46.987 [DEBUG] [Thread-299993] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:47:46.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:47:47.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:47:47.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:47:47.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:47:47.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:47:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:47:21', tmtdew=11.77, humidity=45.8, cloud=0.0, wind=15.14, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:47:06.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:47:47.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:47:47.092 [DEBUG] [Thread-299996] [transport.py] [_log()] starting thread (client mode): 0xf5701570
2025-12-24T09:47:47.092 [DEBUG] [Thread-299996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:47:47.107 [DEBUG] [Thread-299996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:47:47.107 [INFO] [Thread-299996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] client lang: <none>
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] server lang: <none>
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] kex follows: False
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:47:47.114 [DEBUG] [Thread-299996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:47:47.115 [DEBUG] [Thread-299996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:47:47.115 [DEBUG] [Thread-299996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:47:47.115 [DEBUG] [Thread-299996] [transport.py] [_log()] Compression: none
2025-12-24T09:47:47.115 [DEBUG] [Thread-299996] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:47:47.173 [DEBUG] [Thread-299996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:47:47.173 [DEBUG] [Thread-299996] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:47:47.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:47:47.173 [DEBUG] [Thread-299996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:47:47.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:47:47.230 [DEBUG] [Thread-299996] [transport.py] [_log()] userauth is OK
2025-12-24T09:47:47.230 [DEBUG] [Thread-299996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:47:47.230 [DEBUG] [Thread-299996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:47:47.230 [DEBUG] [Thread-299996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:47:47.230 [DEBUG] [Thread-299996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:47:47.244 [INFO] [Thread-299996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:47:47.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:47:47.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:47:48.110 [DEBUG] [Thread-299996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:47:48.110 [DEBUG] [Thread-299996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:47:48.158 [DEBUG] [Thread-299996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:47:48.158 [DEBUG] [Thread-299996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:47:48.166 [DEBUG] [Thread-299996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:47:48.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:47:48.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')
2025-12-24T09:47:48.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
2025-12-24T09:47:48.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:47:48.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:47:48.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:47:48.199 [DEBUG] [Thread-299996] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:47:50.944 [DEBUG] [Thread-299998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:48:06.100 [DEBUG] [Thread-299999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:48:18.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:48:18.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:48:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:48:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 47, 54), 11.62, 46.78, 0.0, 16.41, 18.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:48:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:47:54
2025-12-24T09:48:19.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:48:19.785 [DEBUG] [Thread-300000] [transport.py] [_log()] starting thread (client mode): 0xf57bd9c0
2025-12-24T09:48:19.786 [DEBUG] [Thread-300000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:48:19.798 [DEBUG] [Thread-300000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:48:19.798 [INFO] [Thread-300000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] client lang: <none>
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] server lang: <none>
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] kex follows: False
2025-12-24T09:48:19.802 [DEBUG] [Thread-300000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:48:19.803 [DEBUG] [Thread-300000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:48:19.803 [DEBUG] [Thread-300000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:48:19.803 [DEBUG] [Thread-300000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:48:19.803 [DEBUG] [Thread-300000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:48:19.803 [DEBUG] [Thread-300000] [transport.py] [_log()] Compression: none
2025-12-24T09:48:19.803 [DEBUG] [Thread-300000] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:48:19.834 [DEBUG] [Thread-300000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:48:19.837 [DEBUG] [Thread-300000] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:48:19.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:48:19.839 [DEBUG] [Thread-300000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:48:19.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:48:19.842 [DEBUG] [Thread-300000] [transport.py] [_log()] userauth is OK
2025-12-24T09:48:19.842 [DEBUG] [Thread-300000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:48:19.842 [DEBUG] [Thread-300000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:48:19.842 [DEBUG] [Thread-300000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:48:19.842 [DEBUG] [Thread-300000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:48:19.860 [INFO] [Thread-300000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:48:19.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:48:20.514 [DEBUG] [Thread-300000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:48:20.514 [DEBUG] [Thread-300000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:48:20.515 [DEBUG] [Thread-300000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:48:20.555 [DEBUG] [Thread-300000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:48:20.555 [DEBUG] [Thread-300000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:48:20.558 [DEBUG] [Thread-300000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:48:20.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:48:20.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:48:20.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:48:20.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:48:20.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:48:20.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:48:20.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:48:20.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:48:20.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:48:20.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.324724 -999.00  +18.50  13.49     50   +7.90 1 1 1 1 1   888    0 13.01 113.67 ----- 11.7 13.5 169.4 18.9 27.1 -27.6 26.4 -25.3 25.2 -24.5 25.7 -26.2
2025-12-24T09:48:20.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:48:20.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:48:20.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.324724
2025-12-24T09:48:20.587 [DEBUG] [Thread-300000] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:48:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:48:20.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:48:20.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:48:20.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:48:20.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:48:20.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:47:54', tmtdew=11.62, humidity=46.78, cloud=0.0, wind=16.41, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:47:36.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:48:20.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:48:20.691 [DEBUG] [Thread-300003] [transport.py] [_log()] starting thread (client mode): 0xf813ccd0
2025-12-24T09:48:20.691 [DEBUG] [Thread-300003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:48:20.705 [DEBUG] [Thread-300003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:48:20.705 [INFO] [Thread-300003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] client lang: <none>
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] server lang: <none>
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] kex follows: False
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] Compression: none
2025-12-24T09:48:20.713 [DEBUG] [Thread-300003] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:48:20.768 [DEBUG] [Thread-300003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:48:20.769 [DEBUG] [Thread-300003] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:48:20.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:48:20.769 [DEBUG] [Thread-300003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:48:20.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:48:20.830 [DEBUG] [Thread-300003] [transport.py] [_log()] userauth is OK
2025-12-24T09:48:20.830 [DEBUG] [Thread-300003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:48:20.830 [DEBUG] [Thread-300003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:48:20.830 [DEBUG] [Thread-300003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:48:20.830 [DEBUG] [Thread-300003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:48:20.847 [INFO] [Thread-300003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:48:20.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:48:20.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:48:21.144 [DEBUG] [Thread-300005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:48:21.365 [DEBUG] [Thread-300006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:48:21.677 [DEBUG] [Thread-300003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:48:21.677 [DEBUG] [Thread-300003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:48:21.727 [DEBUG] [Thread-300003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:48:21.727 [DEBUG] [Thread-300003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:48:21.736 [DEBUG] [Thread-300003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:48:21.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:48:21.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:48:21.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:48:21.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:48:21.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:48:21.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:48:21.775 [DEBUG] [Thread-300003] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:48:33.516 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:48:33.522 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:48:36.247 [DEBUG] [Thread-300007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:48:51.298 [DEBUG] [Thread-300008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:48:51.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:48:51.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:48:51.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:48:52.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 48, 27), 11.55, 46.98, 0.0, 15.62, 18.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:48:52.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:48:27
2025-12-24T09:48:53.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:48:53.339 [DEBUG] [Thread-300009] [transport.py] [_log()] starting thread (client mode): 0xf5743ee0
2025-12-24T09:48:53.340 [DEBUG] [Thread-300009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:48:53.354 [DEBUG] [Thread-300009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:48:53.354 [INFO] [Thread-300009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:48:53.357 [DEBUG] [Thread-300009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:48:53.357 [DEBUG] [Thread-300009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] client lang: <none>
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] server lang: <none>
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] kex follows: False
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:48:53.358 [DEBUG] [Thread-300009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:48:53.359 [DEBUG] [Thread-300009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:48:53.359 [DEBUG] [Thread-300009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:48:53.359 [DEBUG] [Thread-300009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:48:53.359 [DEBUG] [Thread-300009] [transport.py] [_log()] Compression: none
2025-12-24T09:48:53.359 [DEBUG] [Thread-300009] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:48:53.392 [DEBUG] [Thread-300009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:48:53.397 [DEBUG] [Thread-300009] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:48:53.399 [DEBUG] [Thread-300009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:48:53.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:48:53.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:48:53.440 [DEBUG] [Thread-300009] [transport.py] [_log()] userauth is OK
2025-12-24T09:48:53.440 [DEBUG] [Thread-300009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:48:53.441 [DEBUG] [Thread-300009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:48:53.441 [DEBUG] [Thread-300009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:48:53.441 [DEBUG] [Thread-300009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:48:53.470 [INFO] [Thread-300009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:48:53.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:48:54.096 [DEBUG] [Thread-300009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:48:54.097 [DEBUG] [Thread-300009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:48:54.098 [DEBUG] [Thread-300009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:48:54.137 [DEBUG] [Thread-300009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:48:54.138 [DEBUG] [Thread-300009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:48:54.141 [DEBUG] [Thread-300009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:48:54.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:48:54.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:48:54.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:48:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:48:54.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:48:54.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:48:54.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:48:54.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:48:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:48:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.325071 -999.00  +18.50  13.53     51   +8.20 1 1 1 1 1   888    0 12.95 104.66 ----- 13.2 13.5 180.0 16.6 27.1 -27.7 26.0 -30.3 25.2 -24.9 25.7 -26.1
2025-12-24T09:48:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:48:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:48:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.325071
2025-12-24T09:48:54.174 [DEBUG] [Thread-300009] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:48:54.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:48:54.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:48:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:48:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:48:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:48:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:48:27', tmtdew=11.55, humidity=46.98, cloud=0.0, wind=15.62, temperature=18.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:48:06.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:48:54.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:48:54.280 [DEBUG] [Thread-300012] [transport.py] [_log()] starting thread (client mode): 0xfabc7eb0
2025-12-24T09:48:54.280 [DEBUG] [Thread-300012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:48:54.297 [DEBUG] [Thread-300012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:48:54.298 [INFO] [Thread-300012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] client lang: <none>
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] server lang: <none>
2025-12-24T09:48:54.305 [DEBUG] [Thread-300012] [transport.py] [_log()] kex follows: False
2025-12-24T09:48:54.306 [DEBUG] [Thread-300012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:48:54.306 [DEBUG] [Thread-300012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:48:54.306 [DEBUG] [Thread-300012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:48:54.306 [DEBUG] [Thread-300012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:48:54.306 [DEBUG] [Thread-300012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:48:54.306 [DEBUG] [Thread-300012] [transport.py] [_log()] Compression: none
2025-12-24T09:48:54.306 [DEBUG] [Thread-300012] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:48:54.363 [DEBUG] [Thread-300012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:48:54.363 [DEBUG] [Thread-300012] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:48:54.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:48:54.365 [DEBUG] [Thread-300012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:48:54.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:48:54.418 [DEBUG] [Thread-300012] [transport.py] [_log()] userauth is OK
2025-12-24T09:48:54.419 [DEBUG] [Thread-300012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:48:54.419 [DEBUG] [Thread-300012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:48:54.419 [DEBUG] [Thread-300012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:48:54.419 [DEBUG] [Thread-300012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:48:54.438 [INFO] [Thread-300012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:48:54.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:48:54.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:48:55.363 [DEBUG] [Thread-300012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:48:55.363 [DEBUG] [Thread-300012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:48:55.412 [DEBUG] [Thread-300012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:48:55.412 [DEBUG] [Thread-300012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:48:55.429 [DEBUG] [Thread-300012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:48:55.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:48:55.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:48:55.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:48:55.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:48:55.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:48:55.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:48:55.496 [DEBUG] [Thread-300012] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:49:06.346 [DEBUG] [Thread-300014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:49:21.468 [DEBUG] [Thread-300015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:49:21.589 [DEBUG] [Thread-300016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:49:25.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:49:25.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:49:25.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:49:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 48, 27), 11.5, 46.98, 0.0, 13.82, 18.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:49:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:48:27
2025-12-24T09:49:26.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:49:27.155 [DEBUG] [Thread-300017] [transport.py] [_log()] starting thread (client mode): 0xf574f190
2025-12-24T09:49:27.156 [DEBUG] [Thread-300017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:49:27.169 [DEBUG] [Thread-300017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:49:27.169 [INFO] [Thread-300017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:49:27.173 [DEBUG] [Thread-300017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:49:27.173 [DEBUG] [Thread-300017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:49:27.173 [DEBUG] [Thread-300017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:49:27.173 [DEBUG] [Thread-300017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:49:27.173 [DEBUG] [Thread-300017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] client lang: <none>
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] server lang: <none>
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] kex follows: False
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:49:27.174 [DEBUG] [Thread-300017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:49:27.175 [DEBUG] [Thread-300017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:49:27.175 [DEBUG] [Thread-300017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:49:27.175 [DEBUG] [Thread-300017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:49:27.175 [DEBUG] [Thread-300017] [transport.py] [_log()] Compression: none
2025-12-24T09:49:27.175 [DEBUG] [Thread-300017] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:49:27.211 [DEBUG] [Thread-300017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:49:27.216 [DEBUG] [Thread-300017] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:49:27.218 [DEBUG] [Thread-300017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:49:27.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:49:27.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:49:27.224 [DEBUG] [Thread-300017] [transport.py] [_log()] userauth is OK
2025-12-24T09:49:27.224 [DEBUG] [Thread-300017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:49:27.224 [DEBUG] [Thread-300017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:49:27.224 [DEBUG] [Thread-300017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:49:27.225 [DEBUG] [Thread-300017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:49:27.260 [INFO] [Thread-300017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:49:27.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:49:27.906 [DEBUG] [Thread-300017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:49:27.907 [DEBUG] [Thread-300017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:49:27.909 [DEBUG] [Thread-300017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:49:27.947 [DEBUG] [Thread-300017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:49:27.947 [DEBUG] [Thread-300017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:49:27.951 [DEBUG] [Thread-300017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:49:27.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:49:27.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:49:27.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:49:27.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:49:27.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:49:27.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:49:27.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:49:27.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:49:27.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:49:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.325418 -999.00  +18.50  11.81     51   +8.40 1 1 1 1 1   888    0 12.76 98.94 ----- 9.8 11.8 152.8 15.7 27.2 -26.3 26.2 -26.0 25.1 -24.2 25.7 -26.1
2025-12-24T09:49:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:49:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:49:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.325418
2025-12-24T09:49:27.985 [DEBUG] [Thread-300017] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:49:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:49:28.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:49:28.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:49:28.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:49:28.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:49:28.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:48:27', tmtdew=11.5, humidity=46.98, cloud=0.0, wind=13.82, temperature=18.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:48:36.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:49:28.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:49:28.102 [DEBUG] [Thread-300020] [transport.py] [_log()] starting thread (client mode): 0xf57aaec0
2025-12-24T09:49:28.102 [DEBUG] [Thread-300020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:49:28.117 [DEBUG] [Thread-300020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:49:28.117 [INFO] [Thread-300020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] client lang: <none>
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] server lang: <none>
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] kex follows: False
2025-12-24T09:49:28.125 [DEBUG] [Thread-300020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:49:28.126 [DEBUG] [Thread-300020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:49:28.126 [DEBUG] [Thread-300020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:49:28.126 [DEBUG] [Thread-300020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:49:28.126 [DEBUG] [Thread-300020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:49:28.126 [DEBUG] [Thread-300020] [transport.py] [_log()] Compression: none
2025-12-24T09:49:28.126 [DEBUG] [Thread-300020] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:49:28.182 [DEBUG] [Thread-300020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:49:28.183 [DEBUG] [Thread-300020] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:49:28.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:49:28.184 [DEBUG] [Thread-300020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:49:28.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:49:28.244 [DEBUG] [Thread-300020] [transport.py] [_log()] userauth is OK
2025-12-24T09:49:28.244 [DEBUG] [Thread-300020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:49:28.244 [DEBUG] [Thread-300020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:49:28.244 [DEBUG] [Thread-300020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:49:28.244 [DEBUG] [Thread-300020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:49:28.267 [INFO] [Thread-300020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:49:28.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:49:28.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:49:29.104 [DEBUG] [Thread-300020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:49:29.104 [DEBUG] [Thread-300020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:49:29.151 [DEBUG] [Thread-300020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:49:29.152 [DEBUG] [Thread-300020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:49:29.161 [DEBUG] [Thread-300020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:49:29.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:49:29.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')
2025-12-24T09:49:29.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
2025-12-24T09:49:29.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:49:29.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:49:29.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:49:29.200 [DEBUG] [Thread-300020] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:49:33.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:49:33.666 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:49:36.536 [DEBUG] [Thread-300022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:49:51.643 [DEBUG] [Thread-300023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:49:59.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:49:59.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:49:59.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:50:00.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 49, 33), 11.93, 45.73, 0.0, 9.07, 18.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:50:00.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:49:33
2025-12-24T09:50:00.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:50:00.968 [DEBUG] [Thread-300024] [transport.py] [_log()] starting thread (client mode): 0xf5772a40
2025-12-24T09:50:00.969 [DEBUG] [Thread-300024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:50:00.969 [DEBUG] [Thread-300024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:50:00.969 [INFO] [Thread-300024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] client lang: <none>
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] server lang: <none>
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] kex follows: False
2025-12-24T09:50:00.974 [DEBUG] [Thread-300024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:50:00.975 [DEBUG] [Thread-300024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:50:00.975 [DEBUG] [Thread-300024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:50:00.975 [DEBUG] [Thread-300024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:50:00.975 [DEBUG] [Thread-300024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:50:00.975 [DEBUG] [Thread-300024] [transport.py] [_log()] Compression: none
2025-12-24T09:50:00.975 [DEBUG] [Thread-300024] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:50:01.009 [DEBUG] [Thread-300024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:50:01.013 [DEBUG] [Thread-300024] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:50:01.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:50:01.018 [DEBUG] [Thread-300024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:50:01.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:50:01.021 [DEBUG] [Thread-300024] [transport.py] [_log()] userauth is OK
2025-12-24T09:50:01.021 [DEBUG] [Thread-300024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:50:01.021 [DEBUG] [Thread-300024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:50:01.022 [DEBUG] [Thread-300024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:50:01.022 [DEBUG] [Thread-300024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:50:01.047 [INFO] [Thread-300024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:50:01.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:50:01.697 [DEBUG] [Thread-300024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:50:01.698 [DEBUG] [Thread-300024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:50:01.700 [DEBUG] [Thread-300024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:50:01.738 [DEBUG] [Thread-300024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:50:01.738 [DEBUG] [Thread-300024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:50:01.741 [DEBUG] [Thread-300024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:50:01.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:50:01.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:50:01.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:50:01.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:50:01.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:50:01.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:50:01.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:50:01.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:50:01.766 [DEBUG] [Thread-300024] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:50:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:50:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.325766 -999.00  +18.60   7.18     51   +8.40 1 1 1 1 1   888    0 12.73 98.14 ----- 5.7 7.2 131.6 13.0 27.2 -26.8 26.2 -25.0 25.1 -24.5 25.7 -25.5
2025-12-24T09:50:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:50:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:50:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.325766
2025-12-24T09:50:01.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:50:01.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:50:01.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:50:01.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:50:01.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:50:01.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:49:33', tmtdew=11.93, humidity=45.73, cloud=0.0, wind=9.07, temperature=18.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:49:06.182', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:50:01.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:50:01.880 [DEBUG] [Thread-300027] [transport.py] [_log()] starting thread (client mode): 0xfabc70d0
2025-12-24T09:50:01.881 [DEBUG] [Thread-300027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:50:01.896 [DEBUG] [Thread-300027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:50:01.896 [INFO] [Thread-300027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:50:01.903 [DEBUG] [Thread-300027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] client lang: <none>
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] server lang: <none>
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] kex follows: False
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:50:01.904 [DEBUG] [Thread-300027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:50:01.905 [DEBUG] [Thread-300027] [transport.py] [_log()] Compression: none
2025-12-24T09:50:01.905 [DEBUG] [Thread-300027] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:50:01.965 [DEBUG] [Thread-300027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:50:01.966 [DEBUG] [Thread-300027] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:50:01.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:50:01.967 [DEBUG] [Thread-300027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:50:01.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:50:02.023 [DEBUG] [Thread-300027] [transport.py] [_log()] userauth is OK
2025-12-24T09:50:02.023 [DEBUG] [Thread-300027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:50:02.024 [DEBUG] [Thread-300027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:50:02.024 [DEBUG] [Thread-300027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:50:02.024 [DEBUG] [Thread-300027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:50:02.043 [INFO] [Thread-300027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:50:02.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:50:02.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:50:02.894 [DEBUG] [Thread-300027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:50:02.895 [DEBUG] [Thread-300027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:50:02.943 [DEBUG] [Thread-300027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:50:02.943 [DEBUG] [Thread-300027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:50:02.951 [DEBUG] [Thread-300027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:50:02.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:50:02.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:50: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') -> 00000000
2025-12-24T09:50:02.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:50:02.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:50:02.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:50:02.988 [DEBUG] [Thread-300027] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:50:06.684 [DEBUG] [Thread-300029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:50:21.790 [DEBUG] [Thread-300030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:50:21.873 [DEBUG] [Thread-300031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:50:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:50:33.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:50:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:50:33.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:50:33.814 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:50:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 50, 5), 11.52, 46.55, 0.0, 9.71, 17.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:50:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:50:05
2025-12-24T09:50:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:50:34.331 [DEBUG] [Thread-300032] [transport.py] [_log()] starting thread (client mode): 0xf5772c80
2025-12-24T09:50:34.332 [DEBUG] [Thread-300032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:50:34.340 [DEBUG] [Thread-300032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:50:34.341 [INFO] [Thread-300032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:50:34.345 [DEBUG] [Thread-300032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:50:34.345 [DEBUG] [Thread-300032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] client lang: <none>
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] server lang: <none>
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] kex follows: False
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:50:34.346 [DEBUG] [Thread-300032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:50:34.347 [DEBUG] [Thread-300032] [transport.py] [_log()] Compression: none
2025-12-24T09:50:34.347 [DEBUG] [Thread-300032] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:50:34.379 [DEBUG] [Thread-300032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:50:34.382 [DEBUG] [Thread-300032] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:50:34.384 [DEBUG] [Thread-300032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:50:34.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:50:34.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:50:34.387 [DEBUG] [Thread-300032] [transport.py] [_log()] userauth is OK
2025-12-24T09:50:34.387 [DEBUG] [Thread-300032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:50:34.387 [DEBUG] [Thread-300032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:50:34.387 [DEBUG] [Thread-300032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:50:34.387 [DEBUG] [Thread-300032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:50:34.409 [INFO] [Thread-300032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:50:34.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:50:35.061 [DEBUG] [Thread-300032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:50:35.061 [DEBUG] [Thread-300032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:50:35.063 [DEBUG] [Thread-300032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:50:35.100 [DEBUG] [Thread-300032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:50:35.100 [DEBUG] [Thread-300032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:50:35.104 [DEBUG] [Thread-300032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:50:35.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:50:35.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:50:35.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:50:35.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:50:35.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:50:35.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:50:35.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:50:35.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:50:35.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:50:35.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.326460 -999.00  +19.10   5.72     50   +8.50 1 1 1 1 1   888    0 13.13 104.75 ----- 4.7 5.7 135.2 9.2 27.4 -25.9 26.5 -25.2 25.2 -23.9 25.8 -25.1
2025-12-24T09:50:35.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:50:35.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:50:35.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.326460
2025-12-24T09:50:35.139 [DEBUG] [Thread-300032] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:50:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:50:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:50:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:50:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:50:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:50:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:50:05', tmtdew=11.52, humidity=46.55, cloud=0.0, wind=9.71, temperature=17.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:50:06.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:50:35.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:50:35.257 [DEBUG] [Thread-300035] [transport.py] [_log()] starting thread (client mode): 0xf5770280
2025-12-24T09:50:35.257 [DEBUG] [Thread-300035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:50:35.272 [DEBUG] [Thread-300035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:50:35.272 [INFO] [Thread-300035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:50:35.280 [DEBUG] [Thread-300035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:50:35.281 [DEBUG] [Thread-300035] [transport.py] [_log()] client lang: <none>
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] server lang: <none>
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] kex follows: False
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] Compression: none
2025-12-24T09:50:35.282 [DEBUG] [Thread-300035] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:50:35.339 [DEBUG] [Thread-300035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:50:35.339 [DEBUG] [Thread-300035] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:50:35.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:50:35.340 [DEBUG] [Thread-300035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:50:35.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:50:35.619 [DEBUG] [Thread-300035] [transport.py] [_log()] userauth is OK
2025-12-24T09:50:35.619 [DEBUG] [Thread-300035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:50:35.619 [DEBUG] [Thread-300035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:50:35.619 [DEBUG] [Thread-300035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:50:35.619 [DEBUG] [Thread-300035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:50:35.645 [INFO] [Thread-300035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:50:35.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:50:35.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:50:36.501 [DEBUG] [Thread-300035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:50:36.501 [DEBUG] [Thread-300035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:50:36.548 [DEBUG] [Thread-300035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:50:36.548 [DEBUG] [Thread-300035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:50:36.557 [DEBUG] [Thread-300035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:50:36.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:50:36.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:50:36.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:50:36.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:50:36.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:50:36.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:50:36.606 [DEBUG] [Thread-300035] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:50:36.852 [DEBUG] [Thread-300037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:50:51.986 [DEBUG] [Thread-300038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:51:06.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:51:06.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:51:06.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:51:07.017 [DEBUG] [Thread-300039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:51:07.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 50, 39), 11.42, 47.14, 0.0, 5.12, 18.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:51:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:50:39
2025-12-24T09:51:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:51:08.222 [DEBUG] [Thread-300040] [transport.py] [_log()] starting thread (client mode): 0xf575ee30
2025-12-24T09:51:08.222 [DEBUG] [Thread-300040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:51:08.235 [DEBUG] [Thread-300040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:51:08.235 [INFO] [Thread-300040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] client lang: <none>
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] server lang: <none>
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] kex follows: False
2025-12-24T09:51:08.239 [DEBUG] [Thread-300040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:51:08.240 [DEBUG] [Thread-300040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:51:08.240 [DEBUG] [Thread-300040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:51:08.240 [DEBUG] [Thread-300040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:51:08.240 [DEBUG] [Thread-300040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:51:08.240 [DEBUG] [Thread-300040] [transport.py] [_log()] Compression: none
2025-12-24T09:51:08.240 [DEBUG] [Thread-300040] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:51:08.268 [DEBUG] [Thread-300040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:51:08.271 [DEBUG] [Thread-300040] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:51:08.272 [DEBUG] [Thread-300040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:51:08.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:51:08.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:51:08.276 [DEBUG] [Thread-300040] [transport.py] [_log()] userauth is OK
2025-12-24T09:51:08.276 [DEBUG] [Thread-300040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:51:08.276 [DEBUG] [Thread-300040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:51:08.276 [DEBUG] [Thread-300040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:51:08.276 [DEBUG] [Thread-300040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:51:08.293 [INFO] [Thread-300040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:51:08.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:51:09.042 [DEBUG] [Thread-300040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:51:09.042 [DEBUG] [Thread-300040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:51:09.043 [DEBUG] [Thread-300040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:51:09.083 [DEBUG] [Thread-300040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:51:09.083 [DEBUG] [Thread-300040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:51:09.086 [DEBUG] [Thread-300040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:51:09.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:51:09.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:51:09.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:51:09.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:51:09.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:51:09.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:51:09.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:51:09.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:51:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:51:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.326807 -999.00  +19.30   2.85     49   +8.50 1 1 1 1 1   888    0 12.73 101.66 ----- 3.8 2.9 245.2 5.8 27.6 -25.5 26.6 -25.3 25.4 -23.5 26.1 -24.8
2025-12-24T09:51:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:51:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:51:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.326807
2025-12-24T09:51:09.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:51:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:51:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:51:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:51:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:51:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:50:39', tmtdew=11.42, humidity=47.14, cloud=0.0, wind=5.12, temperature=18.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:50:36.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:51:09.117 [DEBUG] [Thread-300040] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:51:09.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:51:09.205 [DEBUG] [Thread-300043] [transport.py] [_log()] starting thread (client mode): 0xfabc5ea0
2025-12-24T09:51:09.205 [DEBUG] [Thread-300043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:51:09.220 [DEBUG] [Thread-300043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:51:09.220 [INFO] [Thread-300043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:51:09.227 [DEBUG] [Thread-300043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:51:09.227 [DEBUG] [Thread-300043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:51:09.227 [DEBUG] [Thread-300043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:51:09.227 [DEBUG] [Thread-300043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:51:09.227 [DEBUG] [Thread-300043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:51:09.227 [DEBUG] [Thread-300043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:51:09.227 [DEBUG] [Thread-300043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] client lang: <none>
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] server lang: <none>
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] kex follows: False
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] Compression: none
2025-12-24T09:51:09.228 [DEBUG] [Thread-300043] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:51:09.292 [DEBUG] [Thread-300043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:51:09.292 [DEBUG] [Thread-300043] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:51:09.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:51:09.293 [DEBUG] [Thread-300043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:51:09.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:51:09.353 [DEBUG] [Thread-300043] [transport.py] [_log()] userauth is OK
2025-12-24T09:51:09.353 [DEBUG] [Thread-300043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:51:09.353 [DEBUG] [Thread-300043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:51:09.353 [DEBUG] [Thread-300043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:51:09.353 [DEBUG] [Thread-300043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:51:09.371 [INFO] [Thread-300043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:51:09.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:51:09.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:51:10.217 [DEBUG] [Thread-300043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:51:10.217 [DEBUG] [Thread-300043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:51:10.268 [DEBUG] [Thread-300043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:51:10.268 [DEBUG] [Thread-300043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:51:10.276 [DEBUG] [Thread-300043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:51:10.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:51:10.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:51:10.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:51:10.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:51:10.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:51:10.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:51:10.308 [DEBUG] [Thread-300043] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:51:22.050 [DEBUG] [Thread-300045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:51:22.110 [DEBUG] [Thread-300046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:51:33.966 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:51:33.967 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:51:37.135 [DEBUG] [Thread-300047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:51:40.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:51:40.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:51:40.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:51:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 51, 12), 11.28, 47.6, 0.0, 5.05, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:51:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:51:12
2025-12-24T09:51:41.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:51:42.024 [DEBUG] [Thread-300048] [transport.py] [_log()] starting thread (client mode): 0xf5773e50
2025-12-24T09:51:42.024 [DEBUG] [Thread-300048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:51:42.037 [DEBUG] [Thread-300048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:51:42.037 [INFO] [Thread-300048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:51:42.041 [DEBUG] [Thread-300048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] client lang: <none>
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] server lang: <none>
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] kex follows: False
2025-12-24T09:51:42.042 [DEBUG] [Thread-300048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:51:42.043 [DEBUG] [Thread-300048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:51:42.043 [DEBUG] [Thread-300048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:51:42.043 [DEBUG] [Thread-300048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:51:42.043 [DEBUG] [Thread-300048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:51:42.043 [DEBUG] [Thread-300048] [transport.py] [_log()] Compression: none
2025-12-24T09:51:42.043 [DEBUG] [Thread-300048] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:51:42.075 [DEBUG] [Thread-300048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:51:42.079 [DEBUG] [Thread-300048] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:51:42.082 [DEBUG] [Thread-300048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:51:42.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:51:42.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:51:42.087 [DEBUG] [Thread-300048] [transport.py] [_log()] userauth is OK
2025-12-24T09:51:42.087 [DEBUG] [Thread-300048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:51:42.087 [DEBUG] [Thread-300048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:51:42.087 [DEBUG] [Thread-300048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:51:42.088 [DEBUG] [Thread-300048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:51:42.116 [INFO] [Thread-300048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:51:42.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:51:42.737 [DEBUG] [Thread-300048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:51:42.738 [DEBUG] [Thread-300048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:51:42.738 [DEBUG] [Thread-300048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:51:42.779 [DEBUG] [Thread-300048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:51:42.779 [DEBUG] [Thread-300048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:51:42.782 [DEBUG] [Thread-300048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:51:42.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:51:42.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:51:42.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:51:42.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:51:42.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:51:42.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:51:42.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:51:42.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:51:42.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:51:42.813 [DEBUG] [Thread-300048] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:51:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.327154 -999.00  +19.40   7.62     49   +8.60 1 1 1 1 1   888    0 13.26 104.76 ----- 7.0 7.6 145.4 9.8 27.7 -27.2 26.7 -25.3 25.5 -23.7 26.1 -25.0
2025-12-24T09:51:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:51:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:51:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.327154
2025-12-24T09:51:42.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:51:42.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:51:42.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:51:42.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:51:42.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:51:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:51:12', tmtdew=11.28, humidity=47.6, cloud=0.0, wind=5.05, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:51:06.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:51:42.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:51:42.921 [DEBUG] [Thread-300051] [transport.py] [_log()] starting thread (client mode): 0xf8155d50
2025-12-24T09:51:42.921 [DEBUG] [Thread-300051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:51:42.935 [DEBUG] [Thread-300051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:51:42.935 [INFO] [Thread-300051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:51:42.942 [DEBUG] [Thread-300051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:51:42.942 [DEBUG] [Thread-300051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:51:42.942 [DEBUG] [Thread-300051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] client lang: <none>
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] server lang: <none>
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] kex follows: False
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] Compression: none
2025-12-24T09:51:42.943 [DEBUG] [Thread-300051] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:51:43.005 [DEBUG] [Thread-300051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:51:43.005 [DEBUG] [Thread-300051] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:51:43.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:51:43.005 [DEBUG] [Thread-300051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:51:43.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:51:43.066 [DEBUG] [Thread-300051] [transport.py] [_log()] userauth is OK
2025-12-24T09:51:43.067 [DEBUG] [Thread-300051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:51:43.067 [DEBUG] [Thread-300051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:51:43.067 [DEBUG] [Thread-300051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:51:43.067 [DEBUG] [Thread-300051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:51:43.087 [INFO] [Thread-300051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:51:43.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:51:43.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:51:43.922 [DEBUG] [Thread-300051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:51:43.922 [DEBUG] [Thread-300051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:51:43.970 [DEBUG] [Thread-300051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:51:43.971 [DEBUG] [Thread-300051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:51:43.980 [DEBUG] [Thread-300051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:51:43.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:51:43.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:51:43.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:51:44.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:51:44.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:51:44.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:51:44.017 [DEBUG] [Thread-300051] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:51:52.184 [DEBUG] [Thread-300053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:52:07.300 [DEBUG] [Thread-300054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:52:14.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:52:14.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:52:14.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
2025-12-24T09:52:15.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 51, 44), 11.5, 46.92, 0.0, 8.19, 18.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:52:15.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:51:44
2025-12-24T09:52:15.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:52:15.602 [DEBUG] [Thread-300055] [transport.py] [_log()] starting thread (client mode): 0xf575e860
2025-12-24T09:52:15.602 [DEBUG] [Thread-300055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:52:15.615 [DEBUG] [Thread-300055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:52:15.615 [INFO] [Thread-300055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:52:15.621 [DEBUG] [Thread-300055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:52:15.621 [DEBUG] [Thread-300055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] client lang: <none>
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] server lang: <none>
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] kex follows: False
2025-12-24T09:52:15.622 [DEBUG] [Thread-300055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:52:15.623 [DEBUG] [Thread-300055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:52:15.623 [DEBUG] [Thread-300055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:52:15.624 [DEBUG] [Thread-300055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:52:15.624 [DEBUG] [Thread-300055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:52:15.624 [DEBUG] [Thread-300055] [transport.py] [_log()] Compression: none
2025-12-24T09:52:15.624 [DEBUG] [Thread-300055] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:52:15.655 [DEBUG] [Thread-300055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:52:15.660 [DEBUG] [Thread-300055] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:52:15.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:52:15.665 [DEBUG] [Thread-300055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:52:15.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:52:15.668 [DEBUG] [Thread-300055] [transport.py] [_log()] userauth is OK
2025-12-24T09:52:15.668 [DEBUG] [Thread-300055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:52:15.669 [DEBUG] [Thread-300055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:52:15.669 [DEBUG] [Thread-300055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:52:15.669 [DEBUG] [Thread-300055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:52:15.688 [INFO] [Thread-300055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:52:15.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:52:16.271 [DEBUG] [Thread-300055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:52:16.271 [DEBUG] [Thread-300055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:52:16.271 [DEBUG] [Thread-300055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:52:16.312 [DEBUG] [Thread-300055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:52:16.313 [DEBUG] [Thread-300055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:52:16.316 [DEBUG] [Thread-300055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:52:16.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:52:16.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:52:16.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:52:16.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:52:16.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:52:16.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:52:16.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:52:16.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:52:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:52:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.327502 -999.00  +19.50  12.11     49   +8.50 1 1 1 1 1   888    0 13.24 107.77 ----- 9.8 12.1 175.0 15.2 27.6 -27.0 26.5 -28.9 25.5 -24.9 26.1 -25.9
2025-12-24T09:52:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:52:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:52:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.327502
2025-12-24T09:52:16.350 [DEBUG] [Thread-300055] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:52:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:52:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:52:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:52:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:52:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:52:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:51:44', tmtdew=11.5, humidity=46.92, cloud=0.0, wind=8.19, temperature=18.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:51:36.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:52:16.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:52:16.466 [DEBUG] [Thread-300058] [transport.py] [_log()] starting thread (client mode): 0xf575ee30
2025-12-24T09:52:16.467 [DEBUG] [Thread-300058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:52:16.481 [DEBUG] [Thread-300058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:52:16.481 [INFO] [Thread-300058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:52:16.492 [DEBUG] [Thread-300058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:52:16.492 [DEBUG] [Thread-300058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:52:16.492 [DEBUG] [Thread-300058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:52:16.492 [DEBUG] [Thread-300058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] client lang: <none>
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] server lang: <none>
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] kex follows: False
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] Compression: none
2025-12-24T09:52:16.493 [DEBUG] [Thread-300058] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:52:16.547 [DEBUG] [Thread-300058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:52:16.548 [DEBUG] [Thread-300058] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:52:16.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:52:16.548 [DEBUG] [Thread-300058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:52:16.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:52:16.605 [DEBUG] [Thread-300058] [transport.py] [_log()] userauth is OK
2025-12-24T09:52:16.605 [DEBUG] [Thread-300058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:52:16.605 [DEBUG] [Thread-300058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:52:16.605 [DEBUG] [Thread-300058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:52:16.605 [DEBUG] [Thread-300058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:52:16.627 [INFO] [Thread-300058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:52:16.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:52:16.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:52:17.462 [DEBUG] [Thread-300058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:52:17.463 [DEBUG] [Thread-300058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:52:17.500 [DEBUG] [Thread-300058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:52:17.501 [DEBUG] [Thread-300058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:52:17.510 [DEBUG] [Thread-300058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:52:17.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:52:17.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:52: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
2025-12-24T09:52:17.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:52:17.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:52:17.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:52:17.554 [DEBUG] [Thread-300058] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:52:22.365 [DEBUG] [Thread-300060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:52:22.469 [DEBUG] [Thread-300061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:52:34.111 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:52:34.112 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:52:37.497 [DEBUG] [Thread-300062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:52:47.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:52:47.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:52:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:52:48.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 52, 17), 11.62, 46.57, 0.0, 14.65, 18.64, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:52:48.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:52:17
2025-12-24T09:52:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:52:48.868 [DEBUG] [Thread-300063] [transport.py] [_log()] starting thread (client mode): 0xf5773a90
2025-12-24T09:52:48.869 [DEBUG] [Thread-300063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:52:48.874 [DEBUG] [Thread-300063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:52:48.874 [INFO] [Thread-300063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:52:48.877 [DEBUG] [Thread-300063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:52:48.877 [DEBUG] [Thread-300063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:52:48.877 [DEBUG] [Thread-300063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:52:48.877 [DEBUG] [Thread-300063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:52:48.877 [DEBUG] [Thread-300063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] client lang: <none>
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] server lang: <none>
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] kex follows: False
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:52:48.878 [DEBUG] [Thread-300063] [transport.py] [_log()] Compression: none
2025-12-24T09:52:48.879 [DEBUG] [Thread-300063] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:52:48.910 [DEBUG] [Thread-300063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:52:48.914 [DEBUG] [Thread-300063] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:52:48.915 [DEBUG] [Thread-300063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:52:48.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:52:48.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:52:48.953 [DEBUG] [Thread-300063] [transport.py] [_log()] userauth is OK
2025-12-24T09:52:48.953 [DEBUG] [Thread-300063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:52:48.953 [DEBUG] [Thread-300063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:52:48.953 [DEBUG] [Thread-300063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:52:48.953 [DEBUG] [Thread-300063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:52:48.992 [INFO] [Thread-300063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:52:48.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:52:49.623 [DEBUG] [Thread-300063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:52:49.624 [DEBUG] [Thread-300063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:52:49.626 [DEBUG] [Thread-300063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:52:49.665 [DEBUG] [Thread-300063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:52:49.665 [DEBUG] [Thread-300063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:52:49.668 [DEBUG] [Thread-300063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:52:49.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:52:49.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:52:49.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:52:49.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:52:49.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:52:49.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:52:49.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:52:49.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:52:49.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:52:49.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.327849 -999.00  +19.40  11.56     48   +8.30 1 1 1 1 1   888    0 13.13 104.87 ----- 14.9 11.6 165.8 15.7 27.7 -26.2 26.5 -31.0 25.5 -24.6 26.2 -25.5
2025-12-24T09:52:49.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:52:49.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:52:49.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.327849
2025-12-24T09:52:49.702 [DEBUG] [Thread-300063] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:52:49.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:52:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:52:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:52:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:52:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:52:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:52:17', tmtdew=11.62, humidity=46.57, cloud=0.0, wind=14.65, temperature=18.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:52:06.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:52:49.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:52:49.820 [DEBUG] [Thread-300066] [transport.py] [_log()] starting thread (client mode): 0xf5741d50
2025-12-24T09:52:49.820 [DEBUG] [Thread-300066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:52:49.835 [DEBUG] [Thread-300066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:52:49.835 [INFO] [Thread-300066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] client lang: <none>
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] server lang: <none>
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] kex follows: False
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:52:49.843 [DEBUG] [Thread-300066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:52:49.844 [DEBUG] [Thread-300066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:52:49.844 [DEBUG] [Thread-300066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:52:49.844 [DEBUG] [Thread-300066] [transport.py] [_log()] Compression: none
2025-12-24T09:52:49.844 [DEBUG] [Thread-300066] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:52:49.905 [DEBUG] [Thread-300066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:52:49.905 [DEBUG] [Thread-300066] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:52:49.906 [DEBUG] [Thread-300066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:52:49.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:52:49.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:52:49.963 [DEBUG] [Thread-300066] [transport.py] [_log()] userauth is OK
2025-12-24T09:52:49.963 [DEBUG] [Thread-300066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:52:49.963 [DEBUG] [Thread-300066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:52:49.963 [DEBUG] [Thread-300066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:52:49.963 [DEBUG] [Thread-300066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:52:49.986 [INFO] [Thread-300066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:52:49.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:52:49.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:52:50.878 [DEBUG] [Thread-300066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:52:50.878 [DEBUG] [Thread-300066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:52:50.925 [DEBUG] [Thread-300066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:52:50.925 [DEBUG] [Thread-300066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:52:50.934 [DEBUG] [Thread-300066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:52:50.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:52:50.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:52:50.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:52:50.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:52:50.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:52:50.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:52:50.966 [DEBUG] [Thread-300066] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:52:52.549 [DEBUG] [Thread-300068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:53:07.641 [DEBUG] [Thread-300069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:53:20.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:53:21.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:53:21.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:53:21.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 52, 50), 11.75, 46.27, 0.0, 11.38, 18.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:53:21.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:52:50
2025-12-24T09:53:21.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:53:22.082 [DEBUG] [Thread-300070] [transport.py] [_log()] starting thread (client mode): 0xf5742dd0
2025-12-24T09:53:22.083 [DEBUG] [Thread-300070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:53:22.092 [DEBUG] [Thread-300070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:53:22.092 [INFO] [Thread-300070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:53:22.097 [DEBUG] [Thread-300070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:53:22.097 [DEBUG] [Thread-300070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] client lang: <none>
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] server lang: <none>
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] kex follows: False
2025-12-24T09:53:22.098 [DEBUG] [Thread-300070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:53:22.099 [DEBUG] [Thread-300070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:53:22.099 [DEBUG] [Thread-300070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:53:22.099 [DEBUG] [Thread-300070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:53:22.099 [DEBUG] [Thread-300070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:53:22.099 [DEBUG] [Thread-300070] [transport.py] [_log()] Compression: none
2025-12-24T09:53:22.099 [DEBUG] [Thread-300070] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:53:22.133 [DEBUG] [Thread-300070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:53:22.138 [DEBUG] [Thread-300070] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:53:22.140 [DEBUG] [Thread-300070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:53:22.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:53:22.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:53:22.145 [DEBUG] [Thread-300070] [transport.py] [_log()] userauth is OK
2025-12-24T09:53:22.146 [DEBUG] [Thread-300070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:53:22.146 [DEBUG] [Thread-300070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:53:22.146 [DEBUG] [Thread-300070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:53:22.146 [DEBUG] [Thread-300070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:53:22.174 [INFO] [Thread-300070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:53:22.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:53:22.702 [DEBUG] [Thread-300072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:53:22.819 [DEBUG] [Thread-300070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:53:22.819 [DEBUG] [Thread-300070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:53:22.820 [DEBUG] [Thread-300070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:53:22.860 [DEBUG] [Thread-300070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:53:22.860 [DEBUG] [Thread-300073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:53:22.860 [DEBUG] [Thread-300070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:53:22.863 [DEBUG] [Thread-300070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:53:22.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:53:22.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:53:22.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:53:22.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:53:22.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:53:22.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:53:22.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:53:22.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:53:22.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:53:22.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.328196 -999.00  +19.40   9.06     48   +8.20 1 1 1 1 1   888    0 13.23 102.86 ----- 9.1 9.1 163.1 13.6 27.8 -26.4 26.6 -25.7 25.5 -23.6 26.2 -25.5
2025-12-24T09:53:22.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:53:22.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:53:22.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.328196
2025-12-24T09:53:22.900 [DEBUG] [Thread-300070] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:53:22.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:53:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:53:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:53:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:53:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:53:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:52:50', tmtdew=11.75, humidity=46.27, cloud=0.0, wind=11.38, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:52:36.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:53:22.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:53:23.011 [DEBUG] [Thread-300075] [transport.py] [_log()] starting thread (client mode): 0xf5773070
2025-12-24T09:53:23.012 [DEBUG] [Thread-300075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:53:23.029 [DEBUG] [Thread-300075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:53:23.029 [INFO] [Thread-300075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] client lang: <none>
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] server lang: <none>
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] kex follows: False
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] Compression: none
2025-12-24T09:53:23.036 [DEBUG] [Thread-300075] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:53:23.093 [DEBUG] [Thread-300075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:53:23.093 [DEBUG] [Thread-300075] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:53:23.093 [DEBUG] [Thread-300075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:53:23.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:53:23.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:53:23.156 [DEBUG] [Thread-300075] [transport.py] [_log()] userauth is OK
2025-12-24T09:53:23.156 [DEBUG] [Thread-300075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:53:23.156 [DEBUG] [Thread-300075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:53:23.156 [DEBUG] [Thread-300075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:53:23.156 [DEBUG] [Thread-300075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:53:23.175 [INFO] [Thread-300075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:53:23.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:53:23.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:53:23.998 [DEBUG] [Thread-300075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:53:23.998 [DEBUG] [Thread-300075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:53:24.046 [DEBUG] [Thread-300075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:53:24.046 [DEBUG] [Thread-300075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:53:24.054 [DEBUG] [Thread-300075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:53:24.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:53:24.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:53:24.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:53:24.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:53:24.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:53:24.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:53:24.088 [DEBUG] [Thread-300075] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:53:34.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:53:34.263 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:53:37.788 [DEBUG] [Thread-300077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:53:52.902 [DEBUG] [Thread-300078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:53:54.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:53:54.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:53:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:53:55.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 53, 23), 11.56, 46.83, 0.0, 11.54, 18.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:53:55.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:53:23
2025-12-24T09:53:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:53:55.450 [DEBUG] [Thread-300079] [transport.py] [_log()] starting thread (client mode): 0xf5796a40
2025-12-24T09:53:55.451 [DEBUG] [Thread-300079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:53:55.463 [DEBUG] [Thread-300079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:53:55.463 [INFO] [Thread-300079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] client lang: <none>
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] server lang: <none>
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] kex follows: False
2025-12-24T09:53:55.467 [DEBUG] [Thread-300079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:53:55.468 [DEBUG] [Thread-300079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:53:55.468 [DEBUG] [Thread-300079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:53:55.468 [DEBUG] [Thread-300079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:53:55.468 [DEBUG] [Thread-300079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:53:55.468 [DEBUG] [Thread-300079] [transport.py] [_log()] Compression: none
2025-12-24T09:53:55.468 [DEBUG] [Thread-300079] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:53:55.494 [DEBUG] [Thread-300079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:53:55.496 [DEBUG] [Thread-300079] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:53:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:53:55.496 [DEBUG] [Thread-300079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:53:55.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:53:55.498 [DEBUG] [Thread-300079] [transport.py] [_log()] userauth is OK
2025-12-24T09:53:55.498 [DEBUG] [Thread-300079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:53:55.498 [DEBUG] [Thread-300079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:53:55.498 [DEBUG] [Thread-300079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:53:55.498 [DEBUG] [Thread-300079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:53:55.526 [INFO] [Thread-300079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:53:55.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:53:56.192 [DEBUG] [Thread-300079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:53:56.192 [DEBUG] [Thread-300079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:53:56.192 [DEBUG] [Thread-300079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:53:56.233 [DEBUG] [Thread-300079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:53:56.233 [DEBUG] [Thread-300079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:53:56.235 [DEBUG] [Thread-300079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:53:56.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:53:56.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:53:56.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:53:56.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:53:56.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:53:56.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:53:56.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:53:56.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:53:56.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:53:56.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.328543 -999.00  +19.60   8.01     48   +8.40 1 1 1 1 1   888    0 13.02 93.07 ----- 8.5 8.0 166.4 11.1 27.8 -26.2 26.6 -27.2 25.6 -24.9 26.2 -25.5
2025-12-24T09:53:56.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:53:56.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:53:56.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.328543
2025-12-24T09:53:56.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:53:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:53:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:53:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:53:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:53:56.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:53:23', tmtdew=11.56, humidity=46.83, cloud=0.0, wind=11.54, temperature=18.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:53:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:53:56.263 [DEBUG] [Thread-300079] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:53:56.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:53:56.348 [DEBUG] [Thread-300082] [transport.py] [_log()] starting thread (client mode): 0xfabc6650
2025-12-24T09:53:56.348 [DEBUG] [Thread-300082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:53:56.363 [DEBUG] [Thread-300082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:53:56.363 [INFO] [Thread-300082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] client lang: <none>
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] server lang: <none>
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] kex follows: False
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] Compression: none
2025-12-24T09:53:56.371 [DEBUG] [Thread-300082] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:53:56.433 [DEBUG] [Thread-300082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:53:56.433 [DEBUG] [Thread-300082] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:53:56.433 [DEBUG] [Thread-300082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:53:56.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:53:56.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:53:56.494 [DEBUG] [Thread-300082] [transport.py] [_log()] userauth is OK
2025-12-24T09:53:56.494 [DEBUG] [Thread-300082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:53:56.494 [DEBUG] [Thread-300082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:53:56.494 [DEBUG] [Thread-300082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:53:56.494 [DEBUG] [Thread-300082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:53:56.508 [INFO] [Thread-300082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:53:56.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:53:56.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:53:57.367 [DEBUG] [Thread-300082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:53:57.367 [DEBUG] [Thread-300082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:53:57.414 [DEBUG] [Thread-300082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:53:57.414 [DEBUG] [Thread-300082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:53:57.422 [DEBUG] [Thread-300082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:53:57.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:53:57.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:53:57.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:53:57.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:53:57.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:53:57.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:53:57.455 [DEBUG] [Thread-300082] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:54:07.947 [DEBUG] [Thread-300084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:54:23.041 [DEBUG] [Thread-300085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:54:23.199 [DEBUG] [Thread-300086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:54:27.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:54:27.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:54:27.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
2025-12-24T09:54:28.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 53, 56), 11.49, 47.03, 0.0, 11.43, 18.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:54:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:53:56
2025-12-24T09:54:29.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:54:29.333 [DEBUG] [Thread-300087] [transport.py] [_log()] starting thread (client mode): 0xf57967a0
2025-12-24T09:54:29.334 [DEBUG] [Thread-300087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:54:29.347 [DEBUG] [Thread-300087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:54:29.348 [INFO] [Thread-300087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:54:29.353 [DEBUG] [Thread-300087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] client lang: <none>
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] server lang: <none>
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] kex follows: False
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] Compression: none
2025-12-24T09:54:29.354 [DEBUG] [Thread-300087] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:54:29.390 [DEBUG] [Thread-300087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:54:29.393 [DEBUG] [Thread-300087] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:54:29.395 [DEBUG] [Thread-300087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:54:29.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:54:29.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:54:29.399 [DEBUG] [Thread-300087] [transport.py] [_log()] userauth is OK
2025-12-24T09:54:29.399 [DEBUG] [Thread-300087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:54:29.399 [DEBUG] [Thread-300087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:54:29.399 [DEBUG] [Thread-300087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:54:29.399 [DEBUG] [Thread-300087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:54:29.419 [INFO] [Thread-300087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:54:29.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:54:30.059 [DEBUG] [Thread-300087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:54:30.059 [DEBUG] [Thread-300087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:54:30.060 [DEBUG] [Thread-300087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:54:30.101 [DEBUG] [Thread-300087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:54:30.101 [DEBUG] [Thread-300087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:54:30.103 [DEBUG] [Thread-300087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:54:30.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:54:30.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:54:30.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:54:30.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:54:30.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:54:30.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:54:30.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:54:30.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:54:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:54:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.329238 -999.00  +19.60   4.29     48   +8.50 1 1 1 1 1   888    0 13.06 95.97 ----- 2.8 4.3 194.9 10.3 27.8 -26.2 26.7 -26.0 25.6 -25.2 26.2 -25.3
2025-12-24T09:54:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:54:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:54:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.329238
2025-12-24T09:54:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:54:30.144 [DEBUG] [Thread-300087] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:54:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:54:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:54:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:54:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:54:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:53:56', tmtdew=11.49, humidity=47.03, cloud=0.0, wind=11.43, temperature=18.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:54:06.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:54:30.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:54:30.233 [DEBUG] [Thread-300090] [transport.py] [_log()] starting thread (client mode): 0xf5700b20
2025-12-24T09:54:30.233 [DEBUG] [Thread-300090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:54:30.248 [DEBUG] [Thread-300090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:54:30.248 [INFO] [Thread-300090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] client lang: <none>
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] server lang: <none>
2025-12-24T09:54:30.255 [DEBUG] [Thread-300090] [transport.py] [_log()] kex follows: False
2025-12-24T09:54:30.256 [DEBUG] [Thread-300090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:54:30.256 [DEBUG] [Thread-300090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:54:30.256 [DEBUG] [Thread-300090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:54:30.256 [DEBUG] [Thread-300090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:54:30.256 [DEBUG] [Thread-300090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:54:30.256 [DEBUG] [Thread-300090] [transport.py] [_log()] Compression: none
2025-12-24T09:54:30.256 [DEBUG] [Thread-300090] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:54:30.313 [DEBUG] [Thread-300090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:54:30.314 [DEBUG] [Thread-300090] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:54:30.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:54:30.314 [DEBUG] [Thread-300090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:54:30.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:54:30.370 [DEBUG] [Thread-300090] [transport.py] [_log()] userauth is OK
2025-12-24T09:54:30.370 [DEBUG] [Thread-300090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:54:30.370 [DEBUG] [Thread-300090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:54:30.370 [DEBUG] [Thread-300090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:54:30.371 [DEBUG] [Thread-300090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:54:30.385 [INFO] [Thread-300090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:54:30.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:54:30.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:54:31.304 [DEBUG] [Thread-300090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:54:31.304 [DEBUG] [Thread-300090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:54:31.351 [DEBUG] [Thread-300090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:54:31.351 [DEBUG] [Thread-300090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:54:31.360 [DEBUG] [Thread-300090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:54:31.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:54:31.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:54:31.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:54:31.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:54:31.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:54:31.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:54:31.393 [DEBUG] [Thread-300090] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:54:34.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:54:34.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:54:38.108 [DEBUG] [Thread-300092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:54:53.229 [DEBUG] [Thread-300093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:55:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:55:01.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:55: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
2025-12-24T09:55:02.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 54, 29), 11.44, 47.18, 0.0, 7.27, 18.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:55:02.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:54:29
2025-12-24T09:55:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:55:03.290 [DEBUG] [Thread-300094] [transport.py] [_log()] starting thread (client mode): 0xfabc7730
2025-12-24T09:55:03.291 [DEBUG] [Thread-300094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:55:03.294 [DEBUG] [Thread-300094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:55:03.295 [INFO] [Thread-300094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:55:03.300 [DEBUG] [Thread-300094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] client lang: <none>
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] server lang: <none>
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] kex follows: False
2025-12-24T09:55:03.301 [DEBUG] [Thread-300094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:55:03.302 [DEBUG] [Thread-300094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:55:03.302 [DEBUG] [Thread-300094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:55:03.302 [DEBUG] [Thread-300094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:55:03.302 [DEBUG] [Thread-300094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:55:03.302 [DEBUG] [Thread-300094] [transport.py] [_log()] Compression: none
2025-12-24T09:55:03.302 [DEBUG] [Thread-300094] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:55:03.335 [DEBUG] [Thread-300094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:55:03.341 [DEBUG] [Thread-300094] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:55:03.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:55:03.344 [DEBUG] [Thread-300094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:55:03.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:55:03.346 [DEBUG] [Thread-300094] [transport.py] [_log()] userauth is OK
2025-12-24T09:55:03.347 [DEBUG] [Thread-300094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:55:03.347 [DEBUG] [Thread-300094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:55:03.347 [DEBUG] [Thread-300094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:55:03.347 [DEBUG] [Thread-300094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:55:03.368 [INFO] [Thread-300094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:55:03.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:55:04.057 [DEBUG] [Thread-300094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:55:04.057 [DEBUG] [Thread-300094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:55:04.057 [DEBUG] [Thread-300094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:55:04.098 [DEBUG] [Thread-300094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:55:04.098 [DEBUG] [Thread-300094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:55:04.100 [DEBUG] [Thread-300094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:55:04.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:55:04.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:55:04.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:55:04.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:55:04.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:55:04.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:55:04.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:55:04.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:55:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:55:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.329584 -999.00  +19.90  11.07     48   +8.70 1 1 1 1 1   888    0 13.02 96.57 ----- 8.3 11.1 191.5 15.3 27.9 -25.6 26.7 -29.2 25.7 -23.4 26.4 -24.7
2025-12-24T09:55:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:55:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:55:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.329584
2025-12-24T09:55:04.128 [DEBUG] [Thread-300094] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:55:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:55:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:55:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:55:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:55:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:55:04.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:54:29', tmtdew=11.44, humidity=47.18, cloud=0.0, wind=7.27, temperature=18.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:54:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:55:04.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:55:04.229 [DEBUG] [Thread-300097] [transport.py] [_log()] starting thread (client mode): 0xfabc7940
2025-12-24T09:55:04.229 [DEBUG] [Thread-300097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:55:04.245 [DEBUG] [Thread-300097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:55:04.245 [INFO] [Thread-300097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] client lang: <none>
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] server lang: <none>
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] kex follows: False
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:55:04.252 [DEBUG] [Thread-300097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:55:04.253 [DEBUG] [Thread-300097] [transport.py] [_log()] Compression: none
2025-12-24T09:55:04.253 [DEBUG] [Thread-300097] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:55:04.309 [DEBUG] [Thread-300097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:55:04.309 [DEBUG] [Thread-300097] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:55:04.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:55:04.309 [DEBUG] [Thread-300097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:55:04.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:55:04.370 [DEBUG] [Thread-300097] [transport.py] [_log()] userauth is OK
2025-12-24T09:55:04.370 [DEBUG] [Thread-300097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:55:04.370 [DEBUG] [Thread-300097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:55:04.370 [DEBUG] [Thread-300097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:55:04.370 [DEBUG] [Thread-300097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:55:04.384 [INFO] [Thread-300097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:55:04.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:55:04.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:55:05.255 [DEBUG] [Thread-300097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:55:05.255 [DEBUG] [Thread-300097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:55:05.305 [DEBUG] [Thread-300097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:55:05.306 [DEBUG] [Thread-300097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:55:05.315 [DEBUG] [Thread-300097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:55:05.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:55:05.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:55:05.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:55:05.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:55:05.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:55:05.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:55:05.353 [DEBUG] [Thread-300097] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:55:08.302 [DEBUG] [Thread-300099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:55:23.407 [DEBUG] [Thread-300100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:55:23.511 [DEBUG] [Thread-300101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:55:34.566 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:55:34.567 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:55:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:55:35.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:55:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:55:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 55, 1), 11.49, 47.07, 0.0, 10.89, 18.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:55:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:55:01
2025-12-24T09:55:36.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:55:36.919 [DEBUG] [Thread-300102] [transport.py] [_log()] starting thread (client mode): 0xfabc5600
2025-12-24T09:55:36.919 [DEBUG] [Thread-300102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:55:36.920 [DEBUG] [Thread-300102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:55:36.920 [INFO] [Thread-300102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] client lang: <none>
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] server lang: <none>
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] kex follows: False
2025-12-24T09:55:36.924 [DEBUG] [Thread-300102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:55:36.925 [DEBUG] [Thread-300102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:55:36.925 [DEBUG] [Thread-300102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:55:36.925 [DEBUG] [Thread-300102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:55:36.925 [DEBUG] [Thread-300102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:55:36.925 [DEBUG] [Thread-300102] [transport.py] [_log()] Compression: none
2025-12-24T09:55:36.925 [DEBUG] [Thread-300102] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:55:36.958 [DEBUG] [Thread-300102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:55:36.961 [DEBUG] [Thread-300102] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:55:36.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:55:36.963 [DEBUG] [Thread-300102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:55:36.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:55:36.965 [DEBUG] [Thread-300102] [transport.py] [_log()] userauth is OK
2025-12-24T09:55:36.965 [DEBUG] [Thread-300102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:55:36.965 [DEBUG] [Thread-300102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:55:36.965 [DEBUG] [Thread-300102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:55:36.965 [DEBUG] [Thread-300102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:55:36.984 [INFO] [Thread-300102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:55:36.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:55:37.627 [DEBUG] [Thread-300102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:55:37.627 [DEBUG] [Thread-300102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:55:37.628 [DEBUG] [Thread-300102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:55:37.667 [DEBUG] [Thread-300102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:55:37.668 [DEBUG] [Thread-300102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:55:37.670 [DEBUG] [Thread-300102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:55:37.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:55:37.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:55:37.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:55:37.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:55:37.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:55:37.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:55:37.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:55:37.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:55:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:55:37.691 [DEBUG] [Thread-300102] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:55:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.329932 -999.00  +19.80  15.37     47   +8.30 1 1 1 1 1   888    0 13.12 93.55 ----- 13.0 15.4 188.4 20.0 27.8 -27.0 26.3 -28.3 25.6 -24.9 26.3 -26.2
2025-12-24T09:55:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:55:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:55:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.329932
2025-12-24T09:55:37.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:55:37.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:55:37.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:55:37.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:55:37.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:55:37.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:55:01', tmtdew=11.49, humidity=47.07, cloud=0.0, wind=10.89, temperature=18.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:55:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:55:37.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:55:37.797 [DEBUG] [Thread-300105] [transport.py] [_log()] starting thread (client mode): 0xf57bedd0
2025-12-24T09:55:37.797 [DEBUG] [Thread-300105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:55:37.812 [DEBUG] [Thread-300105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:55:37.812 [INFO] [Thread-300105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:55:37.820 [DEBUG] [Thread-300105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:55:37.820 [DEBUG] [Thread-300105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:55:37.820 [DEBUG] [Thread-300105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] client lang: <none>
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] server lang: <none>
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] kex follows: False
2025-12-24T09:55:37.821 [DEBUG] [Thread-300105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:55:37.822 [DEBUG] [Thread-300105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:55:37.822 [DEBUG] [Thread-300105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:55:37.822 [DEBUG] [Thread-300105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:55:37.822 [DEBUG] [Thread-300105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:55:37.822 [DEBUG] [Thread-300105] [transport.py] [_log()] Compression: none
2025-12-24T09:55:37.822 [DEBUG] [Thread-300105] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:55:37.879 [DEBUG] [Thread-300105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:55:37.880 [DEBUG] [Thread-300105] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:55:37.880 [DEBUG] [Thread-300105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:55:37.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:55:37.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:55:37.942 [DEBUG] [Thread-300105] [transport.py] [_log()] userauth is OK
2025-12-24T09:55:37.943 [DEBUG] [Thread-300105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:55:37.943 [DEBUG] [Thread-300105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:55:37.943 [DEBUG] [Thread-300105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:55:37.943 [DEBUG] [Thread-300105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:55:37.963 [INFO] [Thread-300105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:55:37.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:55:37.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:55:38.492 [DEBUG] [Thread-300107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:55:38.769 [DEBUG] [Thread-300105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:55:38.770 [DEBUG] [Thread-300105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:55:38.822 [DEBUG] [Thread-300105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:55:38.822 [DEBUG] [Thread-300105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:55:38.834 [DEBUG] [Thread-300105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:55:38.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:55:38.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:55:38.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:55:38.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:55:38.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:55:38.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:55:38.883 [DEBUG] [Thread-300105] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:55:53.633 [DEBUG] [Thread-300108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:56:08.674 [DEBUG] [Thread-300109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:56:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:56:08.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:56:08.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:56:09.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 55, 34), 11.67, 46.8, 0.0, 17.4, 18.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:56:09.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:55:34
2025-12-24T09:56:09.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:56:10.143 [DEBUG] [Thread-300110] [transport.py] [_log()] starting thread (client mode): 0xf57430d0
2025-12-24T09:56:10.144 [DEBUG] [Thread-300110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:56:10.157 [DEBUG] [Thread-300110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:56:10.157 [INFO] [Thread-300110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] client lang: <none>
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] server lang: <none>
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] kex follows: False
2025-12-24T09:56:10.161 [DEBUG] [Thread-300110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:56:10.162 [DEBUG] [Thread-300110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:56:10.162 [DEBUG] [Thread-300110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:56:10.162 [DEBUG] [Thread-300110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:56:10.162 [DEBUG] [Thread-300110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:56:10.162 [DEBUG] [Thread-300110] [transport.py] [_log()] Compression: none
2025-12-24T09:56:10.162 [DEBUG] [Thread-300110] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:56:10.193 [DEBUG] [Thread-300110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:56:10.196 [DEBUG] [Thread-300110] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:56:10.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:56:10.199 [DEBUG] [Thread-300110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:56:10.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:56:10.201 [DEBUG] [Thread-300110] [transport.py] [_log()] userauth is OK
2025-12-24T09:56:10.201 [DEBUG] [Thread-300110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:56:10.201 [DEBUG] [Thread-300110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:56:10.201 [DEBUG] [Thread-300110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:56:10.202 [DEBUG] [Thread-300110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:56:10.220 [INFO] [Thread-300110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:56:10.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:56:10.879 [DEBUG] [Thread-300110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:56:10.879 [DEBUG] [Thread-300110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:56:10.880 [DEBUG] [Thread-300110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:56:10.921 [DEBUG] [Thread-300110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:56:10.921 [DEBUG] [Thread-300110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:56:10.925 [DEBUG] [Thread-300110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:56:10.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:56:10.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:56:10.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:56:10.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:56:10.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:56:10.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:56:10.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:56:10.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:56:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:56:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.330279 -999.00  +19.50  17.23     47   +8.00 1 1 1 1 1   888    0 13.30 97.19 ----- 17.4 17.2 200.2 22.1 27.7 -27.1 26.2 -30.7 25.5 -25.1 26.1 -27.1
2025-12-24T09:56:10.956 [DEBUG] [Thread-300110] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:56:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:56:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:56:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.330279
2025-12-24T09:56:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:56:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:56:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:56:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:56:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:56:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:55:34', tmtdew=11.67, humidity=46.8, cloud=0.0, wind=17.4, temperature=18.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:55:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:56:11.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:56:11.079 [DEBUG] [Thread-300113] [transport.py] [_log()] starting thread (client mode): 0xf5742800
2025-12-24T09:56:11.079 [DEBUG] [Thread-300113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:56:11.093 [DEBUG] [Thread-300113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:56:11.094 [INFO] [Thread-300113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:56:11.101 [DEBUG] [Thread-300113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:56:11.101 [DEBUG] [Thread-300113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:56:11.101 [DEBUG] [Thread-300113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] client lang: <none>
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] server lang: <none>
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] kex follows: False
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] Compression: none
2025-12-24T09:56:11.102 [DEBUG] [Thread-300113] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:56:11.163 [DEBUG] [Thread-300113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:56:11.164 [DEBUG] [Thread-300113] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:56:11.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:56:11.165 [DEBUG] [Thread-300113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:56:11.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:56:11.218 [DEBUG] [Thread-300113] [transport.py] [_log()] userauth is OK
2025-12-24T09:56:11.218 [DEBUG] [Thread-300113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:56:11.218 [DEBUG] [Thread-300113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:56:11.218 [DEBUG] [Thread-300113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:56:11.218 [DEBUG] [Thread-300113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:56:11.234 [INFO] [Thread-300113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:56:11.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:56:11.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:56:12.039 [DEBUG] [Thread-300113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:56:12.039 [DEBUG] [Thread-300113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:56:12.087 [DEBUG] [Thread-300113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:56:12.088 [DEBUG] [Thread-300113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:56:12.100 [DEBUG] [Thread-300113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:56:12.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:56:12.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:56:12.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:56:12.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:56:12.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:56:12.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:56:12.135 [DEBUG] [Thread-300113] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:56:23.756 [DEBUG] [Thread-300115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:56:23.852 [DEBUG] [Thread-300116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:56:34.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:56:34.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:56:38.843 [DEBUG] [Thread-300117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:56:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:56:42.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:56:42.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:56:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 56, 7), 11.94, 46.0, 0.0, 18.74, 18.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:56:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:56:07
2025-12-24T09:56:43.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:56:43.520 [DEBUG] [Thread-300118] [transport.py] [_log()] starting thread (client mode): 0xfabc7040
2025-12-24T09:56:43.521 [DEBUG] [Thread-300118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:56:43.535 [DEBUG] [Thread-300118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:56:43.536 [INFO] [Thread-300118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] client lang: <none>
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] server lang: <none>
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] kex follows: False
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:56:43.540 [DEBUG] [Thread-300118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:56:43.541 [DEBUG] [Thread-300118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:56:43.541 [DEBUG] [Thread-300118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:56:43.541 [DEBUG] [Thread-300118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:56:43.541 [DEBUG] [Thread-300118] [transport.py] [_log()] Compression: none
2025-12-24T09:56:43.541 [DEBUG] [Thread-300118] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:56:43.572 [DEBUG] [Thread-300118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:56:43.576 [DEBUG] [Thread-300118] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:56:43.577 [DEBUG] [Thread-300118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:56:43.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:56:43.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:56:43.581 [DEBUG] [Thread-300118] [transport.py] [_log()] userauth is OK
2025-12-24T09:56:43.581 [DEBUG] [Thread-300118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:56:43.581 [DEBUG] [Thread-300118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:56:43.581 [DEBUG] [Thread-300118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:56:43.581 [DEBUG] [Thread-300118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:56:43.614 [INFO] [Thread-300118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:56:43.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:56:44.314 [DEBUG] [Thread-300118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:56:44.314 [DEBUG] [Thread-300118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:56:44.315 [DEBUG] [Thread-300118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:56:44.354 [DEBUG] [Thread-300118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:56:44.355 [DEBUG] [Thread-300118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:56:44.357 [DEBUG] [Thread-300118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:56:44.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:56:44.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:56:44.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:56:44.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:56:44.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:56:44.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:56:44.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:56:44.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:56:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:56:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.330627 -999.00  +19.30  18.37     46   +7.60 1 1 1 1 1   888    0 13.39 102.18 ----- 14.3 18.4 198.4 20.9 27.4 -27.0 26.1 -28.0 25.4 -25.8 26.0 -26.2
2025-12-24T09:56:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:56:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:56:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.330627
2025-12-24T09:56:44.383 [DEBUG] [Thread-300118] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:56:44.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:56:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:56:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:56:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:56:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:56:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:56:07', tmtdew=11.94, humidity=46.0, cloud=0.0, wind=18.74, temperature=18.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:56:06.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:56:44.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:56:44.484 [DEBUG] [Thread-300121] [transport.py] [_log()] starting thread (client mode): 0xf5702380
2025-12-24T09:56:44.484 [DEBUG] [Thread-300121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:56:44.498 [DEBUG] [Thread-300121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:56:44.498 [INFO] [Thread-300121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] client lang: <none>
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] server lang: <none>
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] kex follows: False
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] Compression: none
2025-12-24T09:56:44.506 [DEBUG] [Thread-300121] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:56:44.565 [DEBUG] [Thread-300121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:56:44.565 [DEBUG] [Thread-300121] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:56:44.566 [DEBUG] [Thread-300121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:56:44.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:56:44.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:56:44.624 [DEBUG] [Thread-300121] [transport.py] [_log()] userauth is OK
2025-12-24T09:56:44.624 [DEBUG] [Thread-300121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:56:44.624 [DEBUG] [Thread-300121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:56:44.624 [DEBUG] [Thread-300121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:56:44.624 [DEBUG] [Thread-300121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:56:44.637 [INFO] [Thread-300121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:56:44.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:56:44.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:56:45.492 [DEBUG] [Thread-300121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:56:45.492 [DEBUG] [Thread-300121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:56:45.540 [DEBUG] [Thread-300121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:56:45.540 [DEBUG] [Thread-300121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:56:45.548 [DEBUG] [Thread-300121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:56:45.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:56:45.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:56:45.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
2025-12-24T09:56:45.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:56:45.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:56:45.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:56:45.580 [DEBUG] [Thread-300121] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:56:53.913 [DEBUG] [Thread-300123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:57:09.028 [DEBUG] [Thread-300124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:57:15.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:57:15.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:57:15.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:57:16.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 56, 40), 12.06, 45.07, 0.0, 12.33, 18.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:57:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:56:40
2025-12-24T09:57:16.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:57:16.963 [DEBUG] [Thread-300125] [transport.py] [_log()] starting thread (client mode): 0xf57733d0
2025-12-24T09:57:16.964 [DEBUG] [Thread-300125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:57:16.974 [DEBUG] [Thread-300125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:57:16.974 [INFO] [Thread-300125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:57:16.978 [DEBUG] [Thread-300125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] client lang: <none>
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] server lang: <none>
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] kex follows: False
2025-12-24T09:57:16.979 [DEBUG] [Thread-300125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:57:16.980 [DEBUG] [Thread-300125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:57:16.980 [DEBUG] [Thread-300125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:57:16.980 [DEBUG] [Thread-300125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:57:16.980 [DEBUG] [Thread-300125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:57:16.980 [DEBUG] [Thread-300125] [transport.py] [_log()] Compression: none
2025-12-24T09:57:16.980 [DEBUG] [Thread-300125] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:57:17.014 [DEBUG] [Thread-300125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:57:17.017 [DEBUG] [Thread-300125] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:57:17.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:57:17.019 [DEBUG] [Thread-300125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:57:17.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:57:17.022 [DEBUG] [Thread-300125] [transport.py] [_log()] userauth is OK
2025-12-24T09:57:17.022 [DEBUG] [Thread-300125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:57:17.022 [DEBUG] [Thread-300125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:57:17.022 [DEBUG] [Thread-300125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:57:17.022 [DEBUG] [Thread-300125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:57:17.041 [INFO] [Thread-300125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:57:17.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:57:17.611 [DEBUG] [Thread-300125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:57:17.612 [DEBUG] [Thread-300125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:57:17.613 [DEBUG] [Thread-300125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:57:17.653 [DEBUG] [Thread-300125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:57:17.653 [DEBUG] [Thread-300125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:57:17.656 [DEBUG] [Thread-300125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:57:17.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:57:17.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:57:17.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:57:17.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:57:17.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:57:17.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:57:17.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:57:17.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:57:17.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:57:17.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.330974 -999.00  +19.10   9.19     47   +7.70 1 1 1 1 1   888    0 13.12 94.68 ----- 9.3 9.2 189.4 17.9 27.2 -27.5 26.1 -27.9 25.3 -25.5 25.8 -27.2
2025-12-24T09:57:17.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:57:17.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:57:17.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.330974
2025-12-24T09:57:17.692 [DEBUG] [Thread-300125] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:57:17.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:57:17.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:57:17.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:57:17.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:57:17.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:57:17.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:56:40', tmtdew=12.06, humidity=45.07, cloud=0.0, wind=12.33, temperature=18.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:56:36.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:57:17.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:57:17.812 [DEBUG] [Thread-300128] [transport.py] [_log()] starting thread (client mode): 0xfabc4d30
2025-12-24T09:57:17.812 [DEBUG] [Thread-300128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:57:17.826 [DEBUG] [Thread-300128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:57:17.827 [INFO] [Thread-300128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] client lang: <none>
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] server lang: <none>
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] kex follows: False
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:57:17.834 [DEBUG] [Thread-300128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:57:17.835 [DEBUG] [Thread-300128] [transport.py] [_log()] Compression: none
2025-12-24T09:57:17.835 [DEBUG] [Thread-300128] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:57:17.891 [DEBUG] [Thread-300128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:57:17.891 [DEBUG] [Thread-300128] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:57:17.892 [DEBUG] [Thread-300128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:57:17.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:57:17.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:57:17.947 [DEBUG] [Thread-300128] [transport.py] [_log()] userauth is OK
2025-12-24T09:57:17.947 [DEBUG] [Thread-300128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:57:17.948 [DEBUG] [Thread-300128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:57:17.948 [DEBUG] [Thread-300128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:57:17.948 [DEBUG] [Thread-300128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:57:17.967 [INFO] [Thread-300128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:57:17.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:57:17.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:57:18.861 [DEBUG] [Thread-300128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:57:18.862 [DEBUG] [Thread-300128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:57:18.902 [DEBUG] [Thread-300128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:57:18.902 [DEBUG] [Thread-300128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:57:18.911 [DEBUG] [Thread-300128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:57:18.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:57:18.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:57:18.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:57:18.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:57:18.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:57:18.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:57:18.949 [DEBUG] [Thread-300128] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:57:24.077 [DEBUG] [Thread-300130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:57:24.136 [DEBUG] [Thread-300131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:57:34.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:57:34.862 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:57:39.193 [DEBUG] [Thread-300132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:57:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:57:48.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:57:48.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:57:50.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 57, 13), 11.97, 45.29, 0.0, 10.66, 18.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:57:50.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:57:13
2025-12-24T09:57:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:57:50.364 [DEBUG] [Thread-300133] [transport.py] [_log()] starting thread (client mode): 0xf5796890
2025-12-24T09:57:50.364 [DEBUG] [Thread-300133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:57:50.378 [DEBUG] [Thread-300133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:57:50.378 [INFO] [Thread-300133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:57:50.383 [DEBUG] [Thread-300133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] client lang: <none>
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] server lang: <none>
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] kex follows: False
2025-12-24T09:57:50.384 [DEBUG] [Thread-300133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:57:50.385 [DEBUG] [Thread-300133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:57:50.385 [DEBUG] [Thread-300133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:57:50.385 [DEBUG] [Thread-300133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:57:50.385 [DEBUG] [Thread-300133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:57:50.385 [DEBUG] [Thread-300133] [transport.py] [_log()] Compression: none
2025-12-24T09:57:50.385 [DEBUG] [Thread-300133] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:57:50.418 [DEBUG] [Thread-300133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:57:50.423 [DEBUG] [Thread-300133] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:57:50.425 [DEBUG] [Thread-300133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:57:50.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:57:50.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:57:50.431 [DEBUG] [Thread-300133] [transport.py] [_log()] userauth is OK
2025-12-24T09:57:50.431 [DEBUG] [Thread-300133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:57:50.431 [DEBUG] [Thread-300133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:57:50.432 [DEBUG] [Thread-300133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:57:50.432 [DEBUG] [Thread-300133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:57:50.458 [INFO] [Thread-300133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:57:50.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:57:51.088 [DEBUG] [Thread-300133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:57:51.091 [DEBUG] [Thread-300133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:57:51.092 [DEBUG] [Thread-300133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:57:51.131 [DEBUG] [Thread-300133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:57:51.131 [DEBUG] [Thread-300133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:57:51.135 [DEBUG] [Thread-300133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:57:51.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:57:51.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:57:51.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:57:51.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:57:51.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:57:51.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:57:51.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:57:51.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:57:51.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:57:51.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.331321 -999.00  +19.10   7.57     49   +8.20 1 1 1 1 1   888    0 13.02 88.30 ----- 7.3 7.6 202.0 14.1 27.3 -26.0 26.1 -25.0 25.4 -23.9 26.0 -25.1
2025-12-24T09:57:51.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:57:51.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:57:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.331321
2025-12-24T09:57:51.175 [DEBUG] [Thread-300133] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:57:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:57:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:57:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:57:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:57:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:57:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:57:13', tmtdew=11.97, humidity=45.29, cloud=0.0, wind=10.66, temperature=18.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:57:06.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:57:51.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:57:51.289 [DEBUG] [Thread-300136] [transport.py] [_log()] starting thread (client mode): 0xf574c160
2025-12-24T09:57:51.289 [DEBUG] [Thread-300136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:57:51.304 [DEBUG] [Thread-300136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:57:51.305 [INFO] [Thread-300136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] client lang: <none>
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] server lang: <none>
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] kex follows: False
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:57:51.312 [DEBUG] [Thread-300136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:57:51.313 [DEBUG] [Thread-300136] [transport.py] [_log()] Compression: none
2025-12-24T09:57:51.313 [DEBUG] [Thread-300136] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:57:51.372 [DEBUG] [Thread-300136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:57:51.373 [DEBUG] [Thread-300136] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:57:51.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:57:51.374 [DEBUG] [Thread-300136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:57:51.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:57:51.435 [DEBUG] [Thread-300136] [transport.py] [_log()] userauth is OK
2025-12-24T09:57:51.435 [DEBUG] [Thread-300136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:57:51.435 [DEBUG] [Thread-300136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:57:51.435 [DEBUG] [Thread-300136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:57:51.435 [DEBUG] [Thread-300136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:57:51.449 [INFO] [Thread-300136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:57:51.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:57:51.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:57:52.335 [DEBUG] [Thread-300136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:57:52.336 [DEBUG] [Thread-300136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:57:52.383 [DEBUG] [Thread-300136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:57:52.383 [DEBUG] [Thread-300136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:57:52.393 [DEBUG] [Thread-300136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:57:52.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:57:52.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:57:52.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:57:52.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:57:52.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:57:52.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:57:52.430 [DEBUG] [Thread-300136] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:57:54.271 [DEBUG] [Thread-300138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:58:09.395 [DEBUG] [Thread-300139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:58:22.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:58:22.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:58:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:58:23.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 57, 47), 11.52, 46.83, 0.0, 10.77, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:58:23.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:57:47
2025-12-24T09:58:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:58:23.886 [DEBUG] [Thread-300140] [transport.py] [_log()] starting thread (client mode): 0xf574e620
2025-12-24T09:58:23.887 [DEBUG] [Thread-300140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:58:23.894 [DEBUG] [Thread-300140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:58:23.895 [INFO] [Thread-300140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:58:23.898 [DEBUG] [Thread-300140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:58:23.898 [DEBUG] [Thread-300140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] client lang: <none>
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] server lang: <none>
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] kex follows: False
2025-12-24T09:58:23.899 [DEBUG] [Thread-300140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:58:23.900 [DEBUG] [Thread-300140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:58:23.900 [DEBUG] [Thread-300140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:58:23.900 [DEBUG] [Thread-300140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:58:23.900 [DEBUG] [Thread-300140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:58:23.900 [DEBUG] [Thread-300140] [transport.py] [_log()] Compression: none
2025-12-24T09:58:23.900 [DEBUG] [Thread-300140] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:58:23.940 [DEBUG] [Thread-300140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:58:23.944 [DEBUG] [Thread-300140] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:58:23.946 [DEBUG] [Thread-300140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:58:23.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:58:23.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:58:23.952 [DEBUG] [Thread-300140] [transport.py] [_log()] userauth is OK
2025-12-24T09:58:23.952 [DEBUG] [Thread-300140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:58:23.952 [DEBUG] [Thread-300140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:58:23.953 [DEBUG] [Thread-300140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:58:23.953 [DEBUG] [Thread-300140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:58:23.991 [INFO] [Thread-300140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:58:23.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:58:24.455 [DEBUG] [Thread-300142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:58:24.468 [DEBUG] [Thread-300143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:58:24.809 [DEBUG] [Thread-300140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:58:24.810 [DEBUG] [Thread-300140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:58:24.811 [DEBUG] [Thread-300140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:58:24.851 [DEBUG] [Thread-300140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:58:24.851 [DEBUG] [Thread-300140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:58:24.855 [DEBUG] [Thread-300140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:58:24.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:58:24.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:58:24.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:58:24.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:58:24.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:58:24.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:58:24.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:58:24.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:58:24.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:58:24.886 [DEBUG] [Thread-300140] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:58:24.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.331668 -999.00  +19.20   7.13     49   +8.30 1 1 1 1 1   888    0 12.84 83.81 ----- 7.5 7.1 168.0 8.7 27.4 -26.6 26.1 -29.8 25.4 -24.0 26.0 -25.9
2025-12-24T09:58:24.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:58:24.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:58:24.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.331668
2025-12-24T09:58:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:58:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:58:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:58:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:58:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:58:24.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:57:47', tmtdew=11.52, humidity=46.83, cloud=0.0, wind=10.77, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:57:36.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:58:25.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:58:25.017 [DEBUG] [Thread-300145] [transport.py] [_log()] starting thread (client mode): 0xf5773460
2025-12-24T09:58:25.019 [DEBUG] [Thread-300145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:58:25.031 [DEBUG] [Thread-300145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:58:25.031 [INFO] [Thread-300145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:58:25.038 [DEBUG] [Thread-300145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] client lang: <none>
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] server lang: <none>
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] kex follows: False
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] Compression: none
2025-12-24T09:58:25.039 [DEBUG] [Thread-300145] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:58:25.100 [DEBUG] [Thread-300145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:58:25.101 [DEBUG] [Thread-300145] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:58:25.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:58:25.103 [DEBUG] [Thread-300145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:58:25.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:58:25.163 [DEBUG] [Thread-300145] [transport.py] [_log()] userauth is OK
2025-12-24T09:58:25.163 [DEBUG] [Thread-300145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:58:25.164 [DEBUG] [Thread-300145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:58:25.164 [DEBUG] [Thread-300145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:58:25.164 [DEBUG] [Thread-300145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:58:25.188 [INFO] [Thread-300145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:58:25.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:58:25.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:58:26.062 [DEBUG] [Thread-300145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:58:26.062 [DEBUG] [Thread-300145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:58:26.102 [DEBUG] [Thread-300145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:58:26.102 [DEBUG] [Thread-300145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:58:26.114 [DEBUG] [Thread-300145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:58:26.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:58: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')
2025-12-24T09:58:26.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:58:26.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:58:26.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:58:26.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:58:26.152 [DEBUG] [Thread-300145] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:58:35.013 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:58:35.015 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:58:39.504 [DEBUG] [Thread-300147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:58:54.644 [DEBUG] [Thread-300148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:58:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:58:56.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:58:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:58:57.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 58, 20), 11.61, 46.6, 0.0, 12.26, 18.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:58:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:58:20
2025-12-24T09:58:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:58:57.424 [DEBUG] [Thread-300149] [transport.py] [_log()] starting thread (client mode): 0xf574d3f0
2025-12-24T09:58:57.425 [DEBUG] [Thread-300149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:58:57.438 [DEBUG] [Thread-300149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:58:57.438 [INFO] [Thread-300149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:58:57.442 [DEBUG] [Thread-300149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:58:57.442 [DEBUG] [Thread-300149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:58:57.442 [DEBUG] [Thread-300149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:58:57.442 [DEBUG] [Thread-300149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:58:57.442 [DEBUG] [Thread-300149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:58:57.442 [DEBUG] [Thread-300149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] client lang: <none>
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] server lang: <none>
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] kex follows: False
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] Compression: none
2025-12-24T09:58:57.443 [DEBUG] [Thread-300149] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:58:57.474 [DEBUG] [Thread-300149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:58:57.477 [DEBUG] [Thread-300149] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:58:57.478 [DEBUG] [Thread-300149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:58:57.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:58:57.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:58:57.482 [DEBUG] [Thread-300149] [transport.py] [_log()] userauth is OK
2025-12-24T09:58:57.482 [DEBUG] [Thread-300149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:58:57.482 [DEBUG] [Thread-300149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:58:57.482 [DEBUG] [Thread-300149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:58:57.482 [DEBUG] [Thread-300149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:58:57.503 [INFO] [Thread-300149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:58:57.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:58:58.169 [DEBUG] [Thread-300149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:58:58.169 [DEBUG] [Thread-300149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:58:58.170 [DEBUG] [Thread-300149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:58:58.210 [DEBUG] [Thread-300149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:58:58.210 [DEBUG] [Thread-300149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:58:58.212 [DEBUG] [Thread-300149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:58:58.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:58:58.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:58:58.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:58:58.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:58:58.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:58:58.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:58:58.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:58:58.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:58:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:58:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.332363 -999.00  +19.40   7.06     48   +8.20 1 1 1 1 1   888    0 12.99 84.52 ----- 4.9 7.1 178.7 14.2 27.3 -26.2 26.2 -25.8 25.3 -24.1 26.0 -25.5
2025-12-24T09:58:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:58:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:58:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.332363
2025-12-24T09:58:58.240 [DEBUG] [Thread-300149] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:58:58.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:58:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:58:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:58:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:58:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:58:58.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:58:20', tmtdew=11.61, humidity=46.6, cloud=0.0, wind=12.26, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:58:36.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:58:58.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:58:58.346 [DEBUG] [Thread-300152] [transport.py] [_log()] starting thread (client mode): 0xfabc7430
2025-12-24T09:58:58.346 [DEBUG] [Thread-300152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:58:58.361 [DEBUG] [Thread-300152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:58:58.361 [INFO] [Thread-300152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] client lang: <none>
2025-12-24T09:58:58.368 [DEBUG] [Thread-300152] [transport.py] [_log()] server lang: <none>
2025-12-24T09:58:58.369 [DEBUG] [Thread-300152] [transport.py] [_log()] kex follows: False
2025-12-24T09:58:58.369 [DEBUG] [Thread-300152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:58:58.369 [DEBUG] [Thread-300152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:58:58.369 [DEBUG] [Thread-300152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:58:58.369 [DEBUG] [Thread-300152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:58:58.369 [DEBUG] [Thread-300152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:58:58.369 [DEBUG] [Thread-300152] [transport.py] [_log()] Compression: none
2025-12-24T09:58:58.369 [DEBUG] [Thread-300152] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:58:58.432 [DEBUG] [Thread-300152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:58:58.432 [DEBUG] [Thread-300152] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:58:58.432 [DEBUG] [Thread-300152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:58:58.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:58:58.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:58:58.494 [DEBUG] [Thread-300152] [transport.py] [_log()] userauth is OK
2025-12-24T09:58:58.494 [DEBUG] [Thread-300152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:58:58.495 [DEBUG] [Thread-300152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:58:58.495 [DEBUG] [Thread-300152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:58:58.495 [DEBUG] [Thread-300152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:58:58.511 [INFO] [Thread-300152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:58:58.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:58:58.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:58:59.338 [DEBUG] [Thread-300152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:58:59.338 [DEBUG] [Thread-300152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:58:59.385 [DEBUG] [Thread-300152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:58:59.386 [DEBUG] [Thread-300152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:58:59.394 [DEBUG] [Thread-300152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:58:59.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:58:59.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T09:58:59.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T09:58:59.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:58:59.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:58:59.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:58:59.430 [DEBUG] [Thread-300152] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:59:09.703 [DEBUG] [Thread-300154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:59:24.714 [DEBUG] [Thread-300155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:59:24.786 [DEBUG] [Thread-300156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:59:29.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T09:59:29.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T09:59:29.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T09:59:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 59, 26), 11.63, 46.7, 0.0, 11.28, 18.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T09:59:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:59:26
2025-12-24T09:59:30.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T09:59:30.674 [DEBUG] [Thread-300157] [transport.py] [_log()] starting thread (client mode): 0xf574da80
2025-12-24T09:59:30.675 [DEBUG] [Thread-300157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:59:30.689 [DEBUG] [Thread-300157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T09:59:30.689 [INFO] [Thread-300157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T09:59:30.693 [DEBUG] [Thread-300157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] client lang: <none>
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] server lang: <none>
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] kex follows: False
2025-12-24T09:59:30.694 [DEBUG] [Thread-300157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:59:30.695 [DEBUG] [Thread-300157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:59:30.695 [DEBUG] [Thread-300157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:59:30.696 [DEBUG] [Thread-300157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:59:30.696 [DEBUG] [Thread-300157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:59:30.696 [DEBUG] [Thread-300157] [transport.py] [_log()] Compression: none
2025-12-24T09:59:30.696 [DEBUG] [Thread-300157] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:59:30.733 [DEBUG] [Thread-300157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:59:30.738 [DEBUG] [Thread-300157] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:59:30.740 [DEBUG] [Thread-300157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T09:59:30.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T09:59:30.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:59:30.745 [DEBUG] [Thread-300157] [transport.py] [_log()] userauth is OK
2025-12-24T09:59:30.745 [DEBUG] [Thread-300157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:59:30.746 [DEBUG] [Thread-300157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:59:30.746 [DEBUG] [Thread-300157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T09:59:30.746 [DEBUG] [Thread-300157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:59:30.785 [INFO] [Thread-300157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:59:30.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:59:31.575 [DEBUG] [Thread-300157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:59:31.575 [DEBUG] [Thread-300157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:59:31.576 [DEBUG] [Thread-300157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T09:59:31.616 [DEBUG] [Thread-300157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:59:31.616 [DEBUG] [Thread-300157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:59:31.620 [DEBUG] [Thread-300157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:59:31.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:59:31.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T09:59:31.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T09:59:31.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T09:59:31.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:59:31.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T09:59:31.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:59:31.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:59:31.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T09:59:31.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.332710 -999.00  +19.70   4.23     47   +8.30 1 1 1 1 1   888    0 12.93 79.81 ----- 6.5 4.2 209.9 7.3 27.5 -25.5 26.6 -24.6 25.4 -22.8 26.1 -24.4
2025-12-24T09:59:31.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T09:59:31.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T09:59:31.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.332710
2025-12-24T09:59:31.653 [DEBUG] [Thread-300157] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:59:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T09:59:31.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T09:59:31.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T09:59:31.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T09:59:31.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T09:59:31.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:59:26', tmtdew=11.63, humidity=46.7, cloud=0.0, wind=11.28, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:59:06.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T09:59:31.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T09:59:31.772 [DEBUG] [Thread-300160] [transport.py] [_log()] starting thread (client mode): 0xf574d3f0
2025-12-24T09:59:31.772 [DEBUG] [Thread-300160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T09:59:31.787 [DEBUG] [Thread-300160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T09:59:31.787 [INFO] [Thread-300160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T09:59:31.795 [DEBUG] [Thread-300160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T09:59:31.796 [DEBUG] [Thread-300160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T09:59:31.796 [DEBUG] [Thread-300160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T09:59:31.796 [DEBUG] [Thread-300160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:59:31.796 [DEBUG] [Thread-300160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T09:59:31.796 [DEBUG] [Thread-300160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:59:31.796 [DEBUG] [Thread-300160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] client lang: <none>
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] server lang: <none>
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] kex follows: False
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] Compression: none
2025-12-24T09:59:31.797 [DEBUG] [Thread-300160] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T09:59:31.855 [DEBUG] [Thread-300160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T09:59:31.855 [DEBUG] [Thread-300160] [transport.py] [_log()] Switch to new keys ...
2025-12-24T09:59:31.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T09:59:31.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T09:59:31.857 [DEBUG] [Thread-300160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T09:59:31.911 [DEBUG] [Thread-300160] [transport.py] [_log()] userauth is OK
2025-12-24T09:59:31.911 [DEBUG] [Thread-300160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T09:59:31.912 [DEBUG] [Thread-300160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T09:59:31.912 [DEBUG] [Thread-300160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T09:59:31.912 [DEBUG] [Thread-300160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T09:59:31.933 [INFO] [Thread-300160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T09:59:31.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T09:59:31.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T09:59:32.766 [DEBUG] [Thread-300160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T09:59:32.766 [DEBUG] [Thread-300160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T09:59:32.814 [DEBUG] [Thread-300160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T09:59:32.814 [DEBUG] [Thread-300160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T09:59:32.822 [DEBUG] [Thread-300160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T09:59:32.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T09:59: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')
2025-12-24T09:59: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
2025-12-24T09:59:32.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T09:59:32.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T09:59:32.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T09:59:32.854 [DEBUG] [Thread-300160] [transport.py] [_log()] EOF in transport thread
2025-12-24T09:59:35.156 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:59:35.158 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:59:39.838 [DEBUG] [Thread-300162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T09:59:54.944 [DEBUG] [Thread-300163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:00:02.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:00:02.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:00:02.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:00:03.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 9, 59, 59), 12.12, 45.04, 0.0, 13.89, 18.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:00:03.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 09:59:59
2025-12-24T10:00:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:00:04.256 [DEBUG] [Thread-300164] [transport.py] [_log()] starting thread (client mode): 0xf5742a10
2025-12-24T10:00:04.257 [DEBUG] [Thread-300164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:00:04.268 [DEBUG] [Thread-300164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:00:04.268 [INFO] [Thread-300164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:00:04.272 [DEBUG] [Thread-300164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] client lang: <none>
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] server lang: <none>
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] kex follows: False
2025-12-24T10:00:04.273 [DEBUG] [Thread-300164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:00:04.274 [DEBUG] [Thread-300164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:00:04.274 [DEBUG] [Thread-300164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:00:04.275 [DEBUG] [Thread-300164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:00:04.275 [DEBUG] [Thread-300164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:00:04.275 [DEBUG] [Thread-300164] [transport.py] [_log()] Compression: none
2025-12-24T10:00:04.275 [DEBUG] [Thread-300164] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:00:04.313 [DEBUG] [Thread-300164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:00:04.317 [DEBUG] [Thread-300164] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:00:04.318 [DEBUG] [Thread-300164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:00:04.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:00:04.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:00:04.322 [DEBUG] [Thread-300164] [transport.py] [_log()] userauth is OK
2025-12-24T10:00:04.322 [DEBUG] [Thread-300164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:00:04.322 [DEBUG] [Thread-300164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:00:04.322 [DEBUG] [Thread-300164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:00:04.322 [DEBUG] [Thread-300164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:00:04.340 [INFO] [Thread-300164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:00:04.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:00:05.170 [DEBUG] [Thread-300164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:00:05.170 [DEBUG] [Thread-300164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:00:05.173 [DEBUG] [Thread-300164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:00:05.212 [DEBUG] [Thread-300164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:00:05.212 [DEBUG] [Thread-300164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:00:05.214 [DEBUG] [Thread-300164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:00:05.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:00:05.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:00:05.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:00:05.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:00:05.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:00:05.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:00:05.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:00:05.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:00:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:00:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.333057 -999.00  +19.60  10.51     47   +8.10 1 1 1 1 1   888    0 13.05 80.41 ----- 9.4 10.5 105.4 14.6 27.5 -25.9 26.7 -25.2 25.4 -24.1 26.2 -25.2
2025-12-24T10:00:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:00:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:00:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.333057
2025-12-24T10:00:05.236 [DEBUG] [Thread-300164] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:00:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:00:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:00:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:00:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:00:05.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:00:05.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T09:59:59', tmtdew=12.12, humidity=45.04, cloud=0.0, wind=13.89, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T07:59:36.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:00:05.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:00:05.348 [DEBUG] [Thread-300167] [transport.py] [_log()] starting thread (client mode): 0xf574fe50
2025-12-24T10:00:05.349 [DEBUG] [Thread-300167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:00:05.365 [DEBUG] [Thread-300167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:00:05.365 [INFO] [Thread-300167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:00:05.372 [DEBUG] [Thread-300167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:00:05.372 [DEBUG] [Thread-300167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:00:05.373 [DEBUG] [Thread-300167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:00:05.373 [DEBUG] [Thread-300167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:00:05.373 [DEBUG] [Thread-300167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:00:05.373 [DEBUG] [Thread-300167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:00:05.373 [DEBUG] [Thread-300167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:00:05.373 [DEBUG] [Thread-300167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:00:05.373 [DEBUG] [Thread-300167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] client lang: <none>
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] server lang: <none>
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] kex follows: False
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] Compression: none
2025-12-24T10:00:05.374 [DEBUG] [Thread-300167] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:00:05.436 [DEBUG] [Thread-300167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:00:05.437 [DEBUG] [Thread-300167] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:00:05.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:00:05.438 [DEBUG] [Thread-300167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:00:05.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:00:05.495 [DEBUG] [Thread-300167] [transport.py] [_log()] userauth is OK
2025-12-24T10:00:05.495 [DEBUG] [Thread-300167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:00:05.496 [DEBUG] [Thread-300167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:00:05.496 [DEBUG] [Thread-300167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:00:05.496 [DEBUG] [Thread-300167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:00:05.515 [INFO] [Thread-300167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:00:05.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:00:05.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:00:06.392 [DEBUG] [Thread-300167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:00:06.392 [DEBUG] [Thread-300167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:00:06.430 [DEBUG] [Thread-300167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:00:06.430 [DEBUG] [Thread-300167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:00:06.438 [DEBUG] [Thread-300167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:00:06.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:00:06.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:00:06.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:00:06.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:00:06.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:00:06.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:00:06.472 [DEBUG] [Thread-300167] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:00:09.993 [DEBUG] [Thread-300169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:00:24.987 [DEBUG] [Thread-300170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:00:25.106 [DEBUG] [Thread-300171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:00:35.297 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:00:35.298 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:00:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:00:36.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:00:36.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:00:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 0, 32), 12.2, 44.77, 0.0, 13.32, 18.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:00:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:00:32
2025-12-24T10:00:37.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:00:37.634 [DEBUG] [Thread-300172] [transport.py] [_log()] starting thread (client mode): 0xfabc64d0
2025-12-24T10:00:37.635 [DEBUG] [Thread-300172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:00:37.649 [DEBUG] [Thread-300172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:00:37.649 [INFO] [Thread-300172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:00:37.653 [DEBUG] [Thread-300172] [transport.py] [_log()] client lang: <none>
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] server lang: <none>
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] kex follows: False
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] Compression: none
2025-12-24T10:00:37.654 [DEBUG] [Thread-300172] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:00:37.683 [DEBUG] [Thread-300172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:00:37.686 [DEBUG] [Thread-300172] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:00:37.688 [DEBUG] [Thread-300172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:00:37.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:00:37.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:00:37.724 [DEBUG] [Thread-300172] [transport.py] [_log()] userauth is OK
2025-12-24T10:00:37.725 [DEBUG] [Thread-300172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:00:37.725 [DEBUG] [Thread-300172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:00:37.725 [DEBUG] [Thread-300172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:00:37.725 [DEBUG] [Thread-300172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:00:37.761 [INFO] [Thread-300172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:00:37.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:00:38.483 [DEBUG] [Thread-300172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:00:38.491 [DEBUG] [Thread-300172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:00:38.492 [DEBUG] [Thread-300172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:00:38.524 [DEBUG] [Thread-300172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:00:38.524 [DEBUG] [Thread-300172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:00:38.526 [DEBUG] [Thread-300172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:00:38.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:00:38.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:00:38.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:00:38.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:00:38.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:00:38.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:00:38.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:00:38.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:00:38.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:00:38.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.333404 -999.00  +19.30  11.13     49   +8.30 1 1 1 1 1   888    0 13.00 78.08 ----- 11.1 11.1 153.2 19.1 27.5 -27.6 26.6 -25.7 25.5 -24.5 26.1 -27.2
2025-12-24T10:00:38.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:00:38.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:00:38.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.333404
2025-12-24T10:00:38.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:00:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:00:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:00:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:00:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:00:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:00:32', tmtdew=12.2, humidity=44.77, cloud=0.0, wind=13.32, temperature=18.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:00:06.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:00:38.554 [DEBUG] [Thread-300172] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:00:38.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:00:38.639 [DEBUG] [Thread-300175] [transport.py] [_log()] starting thread (client mode): 0xf57aa8c0
2025-12-24T10:00:38.639 [DEBUG] [Thread-300175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:00:38.655 [DEBUG] [Thread-300175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:00:38.656 [INFO] [Thread-300175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] client lang: <none>
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] server lang: <none>
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] kex follows: False
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] Compression: none
2025-12-24T10:00:38.663 [DEBUG] [Thread-300175] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:00:38.722 [DEBUG] [Thread-300175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:00:38.722 [DEBUG] [Thread-300175] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:00:38.722 [DEBUG] [Thread-300175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:00:38.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:00:38.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:00:38.778 [DEBUG] [Thread-300175] [transport.py] [_log()] userauth is OK
2025-12-24T10:00:38.779 [DEBUG] [Thread-300175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:00:38.779 [DEBUG] [Thread-300175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:00:38.779 [DEBUG] [Thread-300175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:00:38.779 [DEBUG] [Thread-300175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:00:38.794 [INFO] [Thread-300175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:00:38.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:00:38.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:00:39.690 [DEBUG] [Thread-300175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:00:39.690 [DEBUG] [Thread-300175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:00:39.736 [DEBUG] [Thread-300175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:00:39.736 [DEBUG] [Thread-300175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:00:39.745 [DEBUG] [Thread-300175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:00:39.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:00:39.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:00:39.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:00:39.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:00:39.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:00:39.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:00:39.777 [DEBUG] [Thread-300175] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:00:40.183 [DEBUG] [Thread-300177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:00:55.272 [DEBUG] [Thread-300178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:01:09.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:01:09.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:01:09.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
2025-12-24T10:01:10.350 [DEBUG] [Thread-300179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:01:10.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 1, 5), 12.06, 45.19, 0.0, 10.43, 18.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:01:10.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:01:05
2025-12-24T10:01:10.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:01:11.072 [DEBUG] [Thread-300180] [transport.py] [_log()] starting thread (client mode): 0xf5701810
2025-12-24T10:01:11.072 [DEBUG] [Thread-300180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:01:11.076 [DEBUG] [Thread-300180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:01:11.076 [INFO] [Thread-300180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] client lang: <none>
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] server lang: <none>
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] kex follows: False
2025-12-24T10:01:11.080 [DEBUG] [Thread-300180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:01:11.081 [DEBUG] [Thread-300180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:01:11.081 [DEBUG] [Thread-300180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:01:11.081 [DEBUG] [Thread-300180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:01:11.081 [DEBUG] [Thread-300180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:01:11.081 [DEBUG] [Thread-300180] [transport.py] [_log()] Compression: none
2025-12-24T10:01:11.081 [DEBUG] [Thread-300180] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:01:11.112 [DEBUG] [Thread-300180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:01:11.115 [DEBUG] [Thread-300180] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:01:11.117 [DEBUG] [Thread-300180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:01:11.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:01:11.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:01:11.123 [DEBUG] [Thread-300180] [transport.py] [_log()] userauth is OK
2025-12-24T10:01:11.123 [DEBUG] [Thread-300180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:01:11.123 [DEBUG] [Thread-300180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:01:11.123 [DEBUG] [Thread-300180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:01:11.123 [DEBUG] [Thread-300180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:01:11.150 [INFO] [Thread-300180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:01:11.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:01:11.817 [DEBUG] [Thread-300180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:01:11.817 [DEBUG] [Thread-300180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:01:11.818 [DEBUG] [Thread-300180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:01:11.859 [DEBUG] [Thread-300180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:01:11.860 [DEBUG] [Thread-300180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:01:11.863 [DEBUG] [Thread-300180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:01:11.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:01:11.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:01:11.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:01:11.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:01:11.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:01:11.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:01:11.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:01:11.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:01:11.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:01:11.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.333752 -999.00  +19.20  12.23     49   +8.20 1 1 1 1 1   888    0 12.96 74.71 ----- 12.2 12.2 170.2 19.1 27.5 -26.8 26.4 -25.4 25.4 -25.1 26.1 -26.7
2025-12-24T10:01:11.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:01:11.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:01:11.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.333752
2025-12-24T10:01:11.906 [DEBUG] [Thread-300180] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:01:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:01:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:01:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:01:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:01:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:01:11.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:01:05', tmtdew=12.06, humidity=45.19, cloud=0.0, wind=10.43, temperature=18.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:00:36.173', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:01:12.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:01:12.021 [DEBUG] [Thread-300183] [transport.py] [_log()] starting thread (client mode): 0xf57ab6a0
2025-12-24T10:01:12.022 [DEBUG] [Thread-300183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:01:12.036 [DEBUG] [Thread-300183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:01:12.036 [INFO] [Thread-300183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:01:12.044 [DEBUG] [Thread-300183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:01:12.044 [DEBUG] [Thread-300183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:01:12.044 [DEBUG] [Thread-300183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:01:12.044 [DEBUG] [Thread-300183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:01:12.044 [DEBUG] [Thread-300183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:01:12.044 [DEBUG] [Thread-300183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] client lang: <none>
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] server lang: <none>
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] kex follows: False
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:01:12.045 [DEBUG] [Thread-300183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:01:12.046 [DEBUG] [Thread-300183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:01:12.046 [DEBUG] [Thread-300183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:01:12.046 [DEBUG] [Thread-300183] [transport.py] [_log()] Compression: none
2025-12-24T10:01:12.046 [DEBUG] [Thread-300183] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:01:12.104 [DEBUG] [Thread-300183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:01:12.104 [DEBUG] [Thread-300183] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:01:12.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:01:12.105 [DEBUG] [Thread-300183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:01:12.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:01:12.163 [DEBUG] [Thread-300183] [transport.py] [_log()] userauth is OK
2025-12-24T10:01:12.164 [DEBUG] [Thread-300183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:01:12.164 [DEBUG] [Thread-300183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:01:12.164 [DEBUG] [Thread-300183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:01:12.164 [DEBUG] [Thread-300183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:01:12.182 [INFO] [Thread-300183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:01:12.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:01:12.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:01:12.996 [DEBUG] [Thread-300183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:01:12.996 [DEBUG] [Thread-300183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:01:13.043 [DEBUG] [Thread-300183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:01:13.044 [DEBUG] [Thread-300183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:01:13.052 [DEBUG] [Thread-300183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:01:13.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:01:13.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:01:13.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
2025-12-24T10:01:13.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:01:13.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:01:13.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:01:13.087 [DEBUG] [Thread-300183] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:01:25.271 [DEBUG] [Thread-300185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:01:25.418 [DEBUG] [Thread-300186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:01:35.448 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:01:35.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:01:40.554 [DEBUG] [Thread-300187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:01:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:01:43.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:01:43.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:01:44.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 1, 38), 12.24, 44.86, 0.0, 12.76, 18.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:01:44.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:01:38
2025-12-24T10:01:44.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:01:44.432 [DEBUG] [Thread-300188] [transport.py] [_log()] starting thread (client mode): 0xf57aab00
2025-12-24T10:01:44.432 [DEBUG] [Thread-300188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:01:44.447 [DEBUG] [Thread-300188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:01:44.447 [INFO] [Thread-300188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] client lang: <none>
2025-12-24T10:01:44.451 [DEBUG] [Thread-300188] [transport.py] [_log()] server lang: <none>
2025-12-24T10:01:44.452 [DEBUG] [Thread-300188] [transport.py] [_log()] kex follows: False
2025-12-24T10:01:44.452 [DEBUG] [Thread-300188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:01:44.452 [DEBUG] [Thread-300188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:01:44.452 [DEBUG] [Thread-300188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:01:44.452 [DEBUG] [Thread-300188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:01:44.452 [DEBUG] [Thread-300188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:01:44.452 [DEBUG] [Thread-300188] [transport.py] [_log()] Compression: none
2025-12-24T10:01:44.452 [DEBUG] [Thread-300188] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:01:44.472 [DEBUG] [Thread-300188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:01:44.475 [DEBUG] [Thread-300188] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:01:44.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:01:44.477 [DEBUG] [Thread-300188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:01:44.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:01:44.479 [DEBUG] [Thread-300188] [transport.py] [_log()] userauth is OK
2025-12-24T10:01:44.479 [DEBUG] [Thread-300188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:01:44.479 [DEBUG] [Thread-300188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:01:44.479 [DEBUG] [Thread-300188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:01:44.479 [DEBUG] [Thread-300188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:01:44.496 [INFO] [Thread-300188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:01:44.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:01:45.148 [DEBUG] [Thread-300188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:01:45.148 [DEBUG] [Thread-300188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:01:45.149 [DEBUG] [Thread-300188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:01:45.189 [DEBUG] [Thread-300188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:01:45.189 [DEBUG] [Thread-300188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:01:45.191 [DEBUG] [Thread-300188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:01:45.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:01:45.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:01:45.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:01:45.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:01:45.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:01:45.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:01:45.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:01:45.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:01:45.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:01:45.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.334099 -999.00  +19.10  14.85     49   +8.30 1 1 1 1 1   888    0 12.82 67.41 ----- 14.8 14.8 107.8 17.1 27.5 -26.0 26.6 -25.8 25.4 -24.5 26.1 -25.6
2025-12-24T10:01:45.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:01:45.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:01:45.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.334099
2025-12-24T10:01:45.217 [DEBUG] [Thread-300188] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:01:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:01:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:01:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:01:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:01:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:01:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:01:38', tmtdew=12.24, humidity=44.86, cloud=0.0, wind=12.76, temperature=18.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:01:06.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:01:45.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:01:45.314 [DEBUG] [Thread-300191] [transport.py] [_log()] starting thread (client mode): 0xf57aadd0
2025-12-24T10:01:45.314 [DEBUG] [Thread-300191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:01:45.328 [DEBUG] [Thread-300191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:01:45.328 [INFO] [Thread-300191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] client lang: <none>
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] server lang: <none>
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] kex follows: False
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] Compression: none
2025-12-24T10:01:45.336 [DEBUG] [Thread-300191] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:01:45.393 [DEBUG] [Thread-300191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:01:45.393 [DEBUG] [Thread-300191] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:01:45.393 [DEBUG] [Thread-300191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:01:45.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:01:45.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:01:45.451 [DEBUG] [Thread-300191] [transport.py] [_log()] userauth is OK
2025-12-24T10:01:45.451 [DEBUG] [Thread-300191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:01:45.451 [DEBUG] [Thread-300191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:01:45.451 [DEBUG] [Thread-300191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:01:45.451 [DEBUG] [Thread-300191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:01:45.468 [INFO] [Thread-300191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:01:45.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:01:45.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:01:46.325 [DEBUG] [Thread-300191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:01:46.325 [DEBUG] [Thread-300191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:01:46.375 [DEBUG] [Thread-300191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:01:46.375 [DEBUG] [Thread-300191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:01:46.383 [DEBUG] [Thread-300191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:01:46.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:01:46.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')
2025-12-24T10:01:46.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:01:46.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:01:46.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:01:46.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:01:46.419 [DEBUG] [Thread-300191] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:02:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:02:16.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:02:16.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:02:17.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 1, 38), 12.24, 44.86, 0.0, 12.76, 18.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:02:17.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:01:38
2025-12-24T10:02:17.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:02:22.196 [DEBUG] [Thread-300193] [transport.py] [_log()] starting thread (client mode): 0xfabc70d0
2025-12-24T10:02:22.196 [DEBUG] [Thread-300193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:02:22.209 [DEBUG] [Thread-300193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:02:22.209 [INFO] [Thread-300193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:02:22.213 [DEBUG] [Thread-300193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:02:22.213 [DEBUG] [Thread-300193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:02:22.213 [DEBUG] [Thread-300193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:02:22.213 [DEBUG] [Thread-300193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] client lang: <none>
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] server lang: <none>
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] kex follows: False
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] Compression: none
2025-12-24T10:02:22.214 [DEBUG] [Thread-300193] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:02:22.238 [DEBUG] [Thread-300193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:02:22.239 [DEBUG] [Thread-300193] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:02:22.240 [DEBUG] [Thread-300193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:02:22.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:02:22.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:02:22.281 [DEBUG] [Thread-300193] [transport.py] [_log()] userauth is OK
2025-12-24T10:02:22.282 [DEBUG] [Thread-300193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:02:22.282 [DEBUG] [Thread-300193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:02:22.282 [DEBUG] [Thread-300193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:02:22.282 [DEBUG] [Thread-300193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:02:22.300 [INFO] [Thread-300193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:02:22.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:02:23.089 [DEBUG] [Thread-300193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:02:23.089 [DEBUG] [Thread-300193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:02:23.089 [DEBUG] [Thread-300193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:02:23.131 [DEBUG] [Thread-300193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:02:23.131 [DEBUG] [Thread-300193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:02:23.134 [DEBUG] [Thread-300193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:02:23.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:02:23.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:02:23.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:02:23.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:02:23.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:02:23.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:02:23.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:02:23.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:02:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:02:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.334446 -999.00  +18.90  15.84     49   +8.00 1 1 1 1 1   888    0 12.47 58.01 ----- 15.8 15.8 138.6 19.3 27.5 -25.8 26.7 -25.4 25.5 -24.0 26.2 -25.2
2025-12-24T10:02:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:02:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:02:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.334446
2025-12-24T10:02:23.165 [DEBUG] [Thread-300193] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:02:23.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:02:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:02:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:02:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:02:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:02:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:01:38', tmtdew=12.24, humidity=44.86, cloud=0.0, wind=12.76, temperature=18.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:01:36.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:02:23.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:02:23.273 [DEBUG] [Thread-300196] [transport.py] [_log()] starting thread (client mode): 0xf57a8850
2025-12-24T10:02:23.273 [DEBUG] [Thread-300196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:02:23.288 [DEBUG] [Thread-300196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:02:23.289 [INFO] [Thread-300196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] client lang: <none>
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] server lang: <none>
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] kex follows: False
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] Compression: none
2025-12-24T10:02:23.296 [DEBUG] [Thread-300196] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:02:23.354 [DEBUG] [Thread-300196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:02:23.354 [DEBUG] [Thread-300196] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:02:23.354 [DEBUG] [Thread-300196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:02:23.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:02:23.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:02:23.411 [DEBUG] [Thread-300196] [transport.py] [_log()] userauth is OK
2025-12-24T10:02:23.411 [DEBUG] [Thread-300196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:02:23.411 [DEBUG] [Thread-300196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:02:23.411 [DEBUG] [Thread-300196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:02:23.411 [DEBUG] [Thread-300196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:02:23.429 [INFO] [Thread-300196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:02:23.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:02:23.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:02:24.267 [DEBUG] [Thread-300196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:02:24.267 [DEBUG] [Thread-300196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:02:24.274 [DEBUG] [Thread-300196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:02:24.274 [DEBUG] [Thread-300196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:02:24.282 [DEBUG] [Thread-300196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:02:24.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:02:24.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:02: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
2025-12-24T10:02:24.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:02:24.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:02:24.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:02:24.315 [DEBUG] [Thread-300196] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:02:25.597 [DEBUG] [Thread-300198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:02:34.373 [DEBUG] [Thread-300199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:02:35.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:02:35.597 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:02:49.515 [DEBUG] [Thread-300200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:02:54.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:02:54.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:02:54.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:02:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 2, 44), 12.19, 44.54, 0.0, 13.31, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:02:55.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:02:44
2025-12-24T10:02:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:02:55.607 [DEBUG] [Thread-300201] [transport.py] [_log()] starting thread (client mode): 0xfabc58a0
2025-12-24T10:02:55.608 [DEBUG] [Thread-300201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:02:55.620 [DEBUG] [Thread-300201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:02:55.621 [INFO] [Thread-300201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:02:55.628 [DEBUG] [Thread-300201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:02:55.628 [DEBUG] [Thread-300201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:02:55.628 [DEBUG] [Thread-300201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:02:55.628 [DEBUG] [Thread-300201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:02:55.628 [DEBUG] [Thread-300201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:02:55.628 [DEBUG] [Thread-300201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:02:55.629 [DEBUG] [Thread-300201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:02:55.629 [DEBUG] [Thread-300201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:02:55.629 [DEBUG] [Thread-300201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:02:55.629 [DEBUG] [Thread-300201] [transport.py] [_log()] client lang: <none>
2025-12-24T10:02:55.629 [DEBUG] [Thread-300201] [transport.py] [_log()] server lang: <none>
2025-12-24T10:02:55.629 [DEBUG] [Thread-300201] [transport.py] [_log()] kex follows: False
2025-12-24T10:02:55.629 [DEBUG] [Thread-300201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:02:55.629 [DEBUG] [Thread-300201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:02:55.630 [DEBUG] [Thread-300201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:02:55.630 [DEBUG] [Thread-300201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:02:55.630 [DEBUG] [Thread-300201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:02:55.630 [DEBUG] [Thread-300201] [transport.py] [_log()] Compression: none
2025-12-24T10:02:55.630 [DEBUG] [Thread-300201] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:02:55.663 [DEBUG] [Thread-300201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:02:55.667 [DEBUG] [Thread-300201] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:02:55.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:02:55.670 [DEBUG] [Thread-300201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:02:55.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:02:55.672 [DEBUG] [Thread-300201] [transport.py] [_log()] userauth is OK
2025-12-24T10:02:55.672 [DEBUG] [Thread-300201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:02:55.672 [DEBUG] [Thread-300201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:02:55.673 [DEBUG] [Thread-300201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:02:55.673 [DEBUG] [Thread-300201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:02:55.695 [INFO] [Thread-300201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:02:55.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:02:56.368 [DEBUG] [Thread-300201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:02:56.369 [DEBUG] [Thread-300201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:02:56.370 [DEBUG] [Thread-300201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:02:56.409 [DEBUG] [Thread-300201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:02:56.410 [DEBUG] [Thread-300201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:02:56.413 [DEBUG] [Thread-300201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:02:56.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:02:56.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:02:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:02:56.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:02:56.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:02:56.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:02:56.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:02:56.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:02:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:02:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.334793 -999.00  +19.10  12.12     49   +8.30 1 1 1 1 1   888    0 12.60 55.15 ----- 12.1 12.1 141.4 15.9 27.5 -26.1 26.7 -31.0 25.6 -24.0 26.1 -26.5
2025-12-24T10:02:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:02:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:02:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.334793
2025-12-24T10:02:56.446 [DEBUG] [Thread-300201] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:02:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:02:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:02:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:02:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:02:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:02:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:02:44', tmtdew=12.19, humidity=44.54, cloud=0.0, wind=13.31, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:02:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:02:56.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:02:56.583 [DEBUG] [Thread-300204] [transport.py] [_log()] starting thread (client mode): 0xf574cb50
2025-12-24T10:02:56.583 [DEBUG] [Thread-300204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:02:56.597 [DEBUG] [Thread-300204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:02:56.597 [INFO] [Thread-300204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] client lang: <none>
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] server lang: <none>
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] kex follows: False
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:02:56.605 [DEBUG] [Thread-300204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:02:56.606 [DEBUG] [Thread-300204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:02:56.606 [DEBUG] [Thread-300204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:02:56.606 [DEBUG] [Thread-300204] [transport.py] [_log()] Compression: none
2025-12-24T10:02:56.606 [DEBUG] [Thread-300204] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:02:56.667 [DEBUG] [Thread-300204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:02:56.668 [DEBUG] [Thread-300204] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:02:56.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:02:56.669 [DEBUG] [Thread-300204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:02:56.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:02:56.723 [DEBUG] [Thread-300204] [transport.py] [_log()] userauth is OK
2025-12-24T10:02:56.723 [DEBUG] [Thread-300204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:02:56.724 [DEBUG] [Thread-300204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:02:56.724 [DEBUG] [Thread-300204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:02:56.724 [DEBUG] [Thread-300204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:02:56.742 [INFO] [Thread-300204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:02:56.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:02:56.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:02:57.566 [DEBUG] [Thread-300204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:02:57.566 [DEBUG] [Thread-300204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:02:57.605 [DEBUG] [Thread-300204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:02:57.605 [DEBUG] [Thread-300204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:02:57.614 [DEBUG] [Thread-300204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:02:57.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:02:57.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:02:57.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:02:57.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:02:57.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:02:57.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:02:57.653 [DEBUG] [Thread-300204] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:03:04.568 [DEBUG] [Thread-300206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:03:19.695 [DEBUG] [Thread-300207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:03:25.882 [DEBUG] [Thread-300208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:03:27.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:03:27.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:03:27.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:03:28.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 3, 17), 12.2, 44.5, 0.0, 12.81, 18.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:03:28.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:03:17
2025-12-24T10:03:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:03:29.275 [DEBUG] [Thread-300209] [transport.py] [_log()] starting thread (client mode): 0xf574dde0
2025-12-24T10:03:29.276 [DEBUG] [Thread-300209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:03:29.291 [DEBUG] [Thread-300209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:03:29.291 [INFO] [Thread-300209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] client lang: <none>
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] server lang: <none>
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] kex follows: False
2025-12-24T10:03:29.296 [DEBUG] [Thread-300209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:03:29.297 [DEBUG] [Thread-300209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:03:29.297 [DEBUG] [Thread-300209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:03:29.297 [DEBUG] [Thread-300209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:03:29.297 [DEBUG] [Thread-300209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:03:29.297 [DEBUG] [Thread-300209] [transport.py] [_log()] Compression: none
2025-12-24T10:03:29.297 [DEBUG] [Thread-300209] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:03:29.332 [DEBUG] [Thread-300209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:03:29.337 [DEBUG] [Thread-300209] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:03:29.339 [DEBUG] [Thread-300209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:03:29.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:03:29.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:03:29.345 [DEBUG] [Thread-300209] [transport.py] [_log()] userauth is OK
2025-12-24T10:03:29.345 [DEBUG] [Thread-300209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:03:29.346 [DEBUG] [Thread-300209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:03:29.346 [DEBUG] [Thread-300209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:03:29.346 [DEBUG] [Thread-300209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:03:29.374 [INFO] [Thread-300209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:03:29.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:03:30.034 [DEBUG] [Thread-300209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:03:30.035 [DEBUG] [Thread-300209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:03:30.036 [DEBUG] [Thread-300209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:03:30.076 [DEBUG] [Thread-300209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:03:30.077 [DEBUG] [Thread-300209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:03:30.081 [DEBUG] [Thread-300209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:03:30.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:03:30.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:03:30.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:03:30.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:03:30.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:03:30.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:03:30.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:03:30.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:03:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:03:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.335488 -999.00  +19.40  17.68     48   +8.10 1 1 1 1 1   888    0 12.37 52.21 ----- 17.7 17.7 164.4 21.4 27.6 -26.2 26.7 -25.4 25.7 -24.3 26.2 -25.3
2025-12-24T10:03:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:03:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:03:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.335488
2025-12-24T10:03:30.122 [DEBUG] [Thread-300209] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:03:30.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:03:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:03:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:03:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:03:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:03:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:03:17', tmtdew=12.2, humidity=44.5, cloud=0.0, wind=12.81, temperature=18.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:03:06.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:03:30.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:03:30.242 [DEBUG] [Thread-300212] [transport.py] [_log()] starting thread (client mode): 0xfabc73a0
2025-12-24T10:03:30.242 [DEBUG] [Thread-300212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:03:30.256 [DEBUG] [Thread-300212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:03:30.256 [INFO] [Thread-300212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] client lang: <none>
2025-12-24T10:03:30.264 [DEBUG] [Thread-300212] [transport.py] [_log()] server lang: <none>
2025-12-24T10:03:30.265 [DEBUG] [Thread-300212] [transport.py] [_log()] kex follows: False
2025-12-24T10:03:30.265 [DEBUG] [Thread-300212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:03:30.265 [DEBUG] [Thread-300212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:03:30.265 [DEBUG] [Thread-300212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:03:30.265 [DEBUG] [Thread-300212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:03:30.265 [DEBUG] [Thread-300212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:03:30.265 [DEBUG] [Thread-300212] [transport.py] [_log()] Compression: none
2025-12-24T10:03:30.265 [DEBUG] [Thread-300212] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:03:30.324 [DEBUG] [Thread-300212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:03:30.324 [DEBUG] [Thread-300212] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:03:30.325 [DEBUG] [Thread-300212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:03:30.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:03:30.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:03:30.385 [DEBUG] [Thread-300212] [transport.py] [_log()] userauth is OK
2025-12-24T10:03:30.385 [DEBUG] [Thread-300212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:03:30.385 [DEBUG] [Thread-300212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:03:30.385 [DEBUG] [Thread-300212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:03:30.386 [DEBUG] [Thread-300212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:03:30.410 [INFO] [Thread-300212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:03:30.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:03:30.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:03:31.268 [DEBUG] [Thread-300212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:03:31.268 [DEBUG] [Thread-300212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:03:31.316 [DEBUG] [Thread-300212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:03:31.316 [DEBUG] [Thread-300212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:03:31.325 [DEBUG] [Thread-300212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:03:31.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:03:31.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:03:31.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:03:31.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:03:31.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:03:31.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:03:31.369 [DEBUG] [Thread-300212] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:03:34.786 [DEBUG] [Thread-300214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:03:35.746 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:03:35.748 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:03:49.871 [DEBUG] [Thread-300215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:04:01.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:04:01.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:04:01.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:04:02.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 3, 50), 12.57, 43.91, 0.0, 12.41, 18.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:04:02.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:03:50
2025-12-24T10:04:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:04:02.737 [DEBUG] [Thread-300216] [transport.py] [_log()] starting thread (client mode): 0xf57aa2c0
2025-12-24T10:04:02.738 [DEBUG] [Thread-300216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:04:02.738 [DEBUG] [Thread-300216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:04:02.738 [INFO] [Thread-300216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] client lang: <none>
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] server lang: <none>
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] kex follows: False
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:04:02.743 [DEBUG] [Thread-300216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:04:02.744 [DEBUG] [Thread-300216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:04:02.744 [DEBUG] [Thread-300216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:04:02.744 [DEBUG] [Thread-300216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:04:02.744 [DEBUG] [Thread-300216] [transport.py] [_log()] Compression: none
2025-12-24T10:04:02.744 [DEBUG] [Thread-300216] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:04:02.779 [DEBUG] [Thread-300216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:04:02.783 [DEBUG] [Thread-300216] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:04:02.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:04:02.786 [DEBUG] [Thread-300216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:04:02.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:04:02.788 [DEBUG] [Thread-300216] [transport.py] [_log()] userauth is OK
2025-12-24T10:04:02.789 [DEBUG] [Thread-300216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:04:02.789 [DEBUG] [Thread-300216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:04:02.789 [DEBUG] [Thread-300216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:04:02.789 [DEBUG] [Thread-300216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:04:02.823 [INFO] [Thread-300216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:04:02.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:04:03.448 [DEBUG] [Thread-300216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:04:03.448 [DEBUG] [Thread-300216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:04:03.449 [DEBUG] [Thread-300216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:04:03.490 [DEBUG] [Thread-300216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:04:03.490 [DEBUG] [Thread-300216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:04:03.492 [DEBUG] [Thread-300216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:04:03.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:04:03.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:04:03.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:04:03.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:04:03.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:04:03.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:04:03.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:04:03.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:04:03.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:04:03.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.335835 -999.00  +19.20  12.16     48   +8.00 1 1 1 1 1   888    0 12.35 53.08 ----- 12.2 12.2 194.2 19.4 27.5 -27.5 26.4 -28.3 25.6 -24.6 26.2 -25.6
2025-12-24T10:04:03.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:04:03.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:04:03.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.335835
2025-12-24T10:04:03.521 [DEBUG] [Thread-300216] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:04:03.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:04:03.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:04:03.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:04:03.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:04:03.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:04:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:03:50', tmtdew=12.57, humidity=43.91, cloud=0.0, wind=12.41, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:03:36.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:04:03.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:04:03.637 [DEBUG] [Thread-300219] [transport.py] [_log()] starting thread (client mode): 0xf57bceb0
2025-12-24T10:04:03.637 [DEBUG] [Thread-300219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:04:03.653 [DEBUG] [Thread-300219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:04:03.653 [INFO] [Thread-300219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:04:03.660 [DEBUG] [Thread-300219] [transport.py] [_log()] client lang: <none>
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] server lang: <none>
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] kex follows: False
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] Compression: none
2025-12-24T10:04:03.661 [DEBUG] [Thread-300219] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:04:03.719 [DEBUG] [Thread-300219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:04:03.719 [DEBUG] [Thread-300219] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:04:03.720 [DEBUG] [Thread-300219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:04:03.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:04:03.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:04:03.776 [DEBUG] [Thread-300219] [transport.py] [_log()] userauth is OK
2025-12-24T10:04:03.776 [DEBUG] [Thread-300219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:04:03.777 [DEBUG] [Thread-300219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:04:03.777 [DEBUG] [Thread-300219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:04:03.777 [DEBUG] [Thread-300219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:04:03.790 [INFO] [Thread-300219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:04:03.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:04:03.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:04:04.615 [DEBUG] [Thread-300219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:04:04.616 [DEBUG] [Thread-300219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:04:04.663 [DEBUG] [Thread-300219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:04:04.663 [DEBUG] [Thread-300219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:04:04.673 [DEBUG] [Thread-300219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:04:04.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:04:04.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:04:04.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:04:04.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:04:04.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:04:04.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:04:04.710 [DEBUG] [Thread-300219] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:04:04.942 [DEBUG] [Thread-300221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:04:20.089 [DEBUG] [Thread-300222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:04:26.146 [DEBUG] [Thread-300223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:04:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:04:34.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:04:34.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:04:35.173 [DEBUG] [Thread-300224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:04:35.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 4, 23), 12.88, 43.06, 0.0, 12.42, 18.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:04:35.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:04:23
2025-12-24T10:04:35.890 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:04:35.891 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:04:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:04:36.173 [DEBUG] [Thread-300225] [transport.py] [_log()] starting thread (client mode): 0xf57a81c0
2025-12-24T10:04:36.174 [DEBUG] [Thread-300225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:04:36.187 [DEBUG] [Thread-300225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:04:36.187 [INFO] [Thread-300225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] client lang: <none>
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] server lang: <none>
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] kex follows: False
2025-12-24T10:04:36.191 [DEBUG] [Thread-300225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:04:36.192 [DEBUG] [Thread-300225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:04:36.192 [DEBUG] [Thread-300225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:04:36.192 [DEBUG] [Thread-300225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:04:36.192 [DEBUG] [Thread-300225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:04:36.192 [DEBUG] [Thread-300225] [transport.py] [_log()] Compression: none
2025-12-24T10:04:36.192 [DEBUG] [Thread-300225] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:04:36.225 [DEBUG] [Thread-300225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:04:36.229 [DEBUG] [Thread-300225] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:04:36.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:04:36.231 [DEBUG] [Thread-300225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:04:36.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:04:36.233 [DEBUG] [Thread-300225] [transport.py] [_log()] userauth is OK
2025-12-24T10:04:36.233 [DEBUG] [Thread-300225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:04:36.234 [DEBUG] [Thread-300225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:04:36.234 [DEBUG] [Thread-300225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:04:36.234 [DEBUG] [Thread-300225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:04:36.255 [INFO] [Thread-300225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:04:36.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:04:36.883 [DEBUG] [Thread-300225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:04:36.884 [DEBUG] [Thread-300225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:04:36.884 [DEBUG] [Thread-300225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:04:36.925 [DEBUG] [Thread-300225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:04:36.925 [DEBUG] [Thread-300225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:04:36.927 [DEBUG] [Thread-300225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:04:36.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:04:36.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:04:36.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:04:36.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:04:36.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:04:36.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:04:36.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:04:36.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:04:36.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:04:36.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.336182 -999.00  +19.00  16.70     48   +7.90 1 1 1 1 1   888    0 12.37 54.40 ----- 16.7 16.7 172.0 21.8 27.6 -27.3 26.5 -28.9 25.6 -23.3 26.2 -25.8
2025-12-24T10:04:36.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:04:36.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:04:36.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.336182
2025-12-24T10:04:36.956 [DEBUG] [Thread-300225] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:04:36.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:04:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:04:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:04:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:04:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:04:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:04:23', tmtdew=12.88, humidity=43.06, cloud=0.0, wind=12.42, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:04:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:04:37.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:04:37.063 [DEBUG] [Thread-300228] [transport.py] [_log()] starting thread (client mode): 0xf57bdcc0
2025-12-24T10:04:37.063 [DEBUG] [Thread-300228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:04:37.078 [DEBUG] [Thread-300228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:04:37.079 [INFO] [Thread-300228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] client lang: <none>
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] server lang: <none>
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] kex follows: False
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:04:37.090 [DEBUG] [Thread-300228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:04:37.091 [DEBUG] [Thread-300228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:04:37.091 [DEBUG] [Thread-300228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:04:37.091 [DEBUG] [Thread-300228] [transport.py] [_log()] Compression: none
2025-12-24T10:04:37.091 [DEBUG] [Thread-300228] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:04:37.145 [DEBUG] [Thread-300228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:04:37.146 [DEBUG] [Thread-300228] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:04:37.146 [DEBUG] [Thread-300228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:04:37.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:04:37.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:04:37.206 [DEBUG] [Thread-300228] [transport.py] [_log()] userauth is OK
2025-12-24T10:04:37.207 [DEBUG] [Thread-300228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:04:37.207 [DEBUG] [Thread-300228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:04:37.207 [DEBUG] [Thread-300228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:04:37.207 [DEBUG] [Thread-300228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:04:37.220 [INFO] [Thread-300228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:04:37.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:04:37.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:04:38.039 [DEBUG] [Thread-300228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:04:38.040 [DEBUG] [Thread-300228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:04:38.088 [DEBUG] [Thread-300228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:04:38.088 [DEBUG] [Thread-300228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:04:38.096 [DEBUG] [Thread-300228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:04:38.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:04:38.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:04:38.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:04:38.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:04:38.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:04:38.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:04:38.130 [DEBUG] [Thread-300228] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:04:50.263 [DEBUG] [Thread-300230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:05:05.367 [DEBUG] [Thread-300231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:05:08.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:05:08.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:05:08.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:05:09.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 4, 57), 12.57, 43.57, 0.0, 12.28, 18.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:05:09.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:04:57
2025-12-24T10:05:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:05:09.501 [DEBUG] [Thread-300232] [transport.py] [_log()] starting thread (client mode): 0xf5703070
2025-12-24T10:05:09.501 [DEBUG] [Thread-300232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:05:09.515 [DEBUG] [Thread-300232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:05:09.515 [INFO] [Thread-300232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:05:09.521 [DEBUG] [Thread-300232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:05:09.522 [DEBUG] [Thread-300232] [transport.py] [_log()] client lang: <none>
2025-12-24T10:05:09.522 [DEBUG] [Thread-300232] [transport.py] [_log()] server lang: <none>
2025-12-24T10:05:09.522 [DEBUG] [Thread-300232] [transport.py] [_log()] kex follows: False
2025-12-24T10:05:09.522 [DEBUG] [Thread-300232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:05:09.522 [DEBUG] [Thread-300232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:05:09.523 [DEBUG] [Thread-300232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:05:09.523 [DEBUG] [Thread-300232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:05:09.523 [DEBUG] [Thread-300232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:05:09.523 [DEBUG] [Thread-300232] [transport.py] [_log()] Compression: none
2025-12-24T10:05:09.523 [DEBUG] [Thread-300232] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:05:09.552 [DEBUG] [Thread-300232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:05:09.556 [DEBUG] [Thread-300232] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:05:09.558 [DEBUG] [Thread-300232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:05:09.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:05:09.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:05:09.563 [DEBUG] [Thread-300232] [transport.py] [_log()] userauth is OK
2025-12-24T10:05:09.563 [DEBUG] [Thread-300232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:05:09.563 [DEBUG] [Thread-300232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:05:09.564 [DEBUG] [Thread-300232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:05:09.564 [DEBUG] [Thread-300232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:05:09.589 [INFO] [Thread-300232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:05:09.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:05:10.619 [DEBUG] [Thread-300232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:05:10.619 [DEBUG] [Thread-300232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:05:10.619 [DEBUG] [Thread-300232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:05:10.660 [DEBUG] [Thread-300232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:05:10.660 [DEBUG] [Thread-300232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:05:10.662 [DEBUG] [Thread-300232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:05:10.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:05:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:05:10.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:05:10.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:05:10.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:05:10.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:05:10.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:05:10.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:05:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:05:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.336529 -999.00  +18.70   9.99     49   +7.80 1 1 1 1 1   888    0 12.29 52.15 ----- 10.0 10.0 177.4 14.5 27.5 -26.8 26.5 -27.2 25.6 -24.6 26.1 -26.2
2025-12-24T10:05:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:05:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:05:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.336529
2025-12-24T10:05:10.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:05:10.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:05:10.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:05:10.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:05:10.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:05:10.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:04:57', tmtdew=12.57, humidity=43.57, cloud=0.0, wind=12.28, temperature=18.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:04:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:05:10.721 [DEBUG] [Thread-300232] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:05:10.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:05:20.404 [DEBUG] [Thread-300235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:05:26.476 [DEBUG] [Thread-300236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:05:35.528 [DEBUG] [Thread-300237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:05:36.043 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:05:36.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:05:50.616 [DEBUG] [Thread-300238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:06:05.690 [DEBUG] [Thread-300239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:06:20.757 [DEBUG] [Thread-300240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:06:26.768 [DEBUG] [Thread-300241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:06:35.845 [DEBUG] [Thread-300242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:06:36.195 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:06:36.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:06:50.969 [DEBUG] [Thread-300243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:07:06.100 [DEBUG] [Thread-300244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:07:21.206 [DEBUG] [Thread-300245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:07:23.119 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T10:07:27.032 [DEBUG] [Thread-300246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:07:36.328 [DEBUG] [Thread-300247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:07:36.338 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:07:36.340 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:07:51.424 [DEBUG] [Thread-300248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:07:53.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:07:53.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:07:53.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:07:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 7, 42), 12.67, 43.64, 0.0, 14.93, 18.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:07:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:07:42
2025-12-24T10:07:54.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:07:54.423 [DEBUG] [Thread-300249] [transport.py] [_log()] starting thread (client mode): 0xf5701f60
2025-12-24T10:07:54.423 [DEBUG] [Thread-300249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:07:54.436 [DEBUG] [Thread-300249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:07:54.436 [INFO] [Thread-300249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:07:54.442 [DEBUG] [Thread-300249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:07:54.442 [DEBUG] [Thread-300249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:07:54.443 [DEBUG] [Thread-300249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:07:54.443 [DEBUG] [Thread-300249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:07:54.443 [DEBUG] [Thread-300249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:07:54.443 [DEBUG] [Thread-300249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:07:54.443 [DEBUG] [Thread-300249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:07:54.443 [DEBUG] [Thread-300249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:07:54.444 [DEBUG] [Thread-300249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:07:54.444 [DEBUG] [Thread-300249] [transport.py] [_log()] client lang: <none>
2025-12-24T10:07:54.444 [DEBUG] [Thread-300249] [transport.py] [_log()] server lang: <none>
2025-12-24T10:07:54.444 [DEBUG] [Thread-300249] [transport.py] [_log()] kex follows: False
2025-12-24T10:07:54.444 [DEBUG] [Thread-300249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:07:54.445 [DEBUG] [Thread-300249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:07:54.445 [DEBUG] [Thread-300249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:07:54.445 [DEBUG] [Thread-300249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:07:54.445 [DEBUG] [Thread-300249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:07:54.446 [DEBUG] [Thread-300249] [transport.py] [_log()] Compression: none
2025-12-24T10:07:54.446 [DEBUG] [Thread-300249] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:07:54.483 [DEBUG] [Thread-300249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:07:54.488 [DEBUG] [Thread-300249] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:07:54.490 [DEBUG] [Thread-300249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:07:54.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:07:54.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:07:54.495 [DEBUG] [Thread-300249] [transport.py] [_log()] userauth is OK
2025-12-24T10:07:54.495 [DEBUG] [Thread-300249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:07:54.495 [DEBUG] [Thread-300249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:07:54.495 [DEBUG] [Thread-300249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:07:54.495 [DEBUG] [Thread-300249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:07:54.534 [INFO] [Thread-300249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:07:54.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:07:55.151 [DEBUG] [Thread-300249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:07:55.151 [DEBUG] [Thread-300249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:07:55.152 [DEBUG] [Thread-300249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:07:55.192 [DEBUG] [Thread-300249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:07:55.192 [DEBUG] [Thread-300249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:07:55.196 [DEBUG] [Thread-300249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:07:55.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:07:55.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:07:55.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:07:55.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:07:55.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:07:55.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:07:55.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:07:55.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:07:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:07:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.338613 -999.00  +19.20   7.39     46   +7.40 1 1 1 1 1   888    0 12.35 48.87 ----- 7.4 7.4 166.3 15.9 27.6 -27.0 26.6 -24.6 25.6 -25.3 26.3 -26.0
2025-12-24T10:07:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:07:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:07:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.338613
2025-12-24T10:07:55.230 [DEBUG] [Thread-300249] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:07:55.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:07:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:07:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:07:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:07:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:07:55.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:07:42', tmtdew=12.67, humidity=43.64, cloud=0.0, wind=14.93, temperature=18.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:07:36.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:07:55.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:07:55.371 [DEBUG] [Thread-300252] [transport.py] [_log()] starting thread (client mode): 0xf57037c0
2025-12-24T10:07:55.371 [DEBUG] [Thread-300252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:07:55.376 [DEBUG] [Thread-300252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:07:55.377 [INFO] [Thread-300252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:07:55.384 [DEBUG] [Thread-300252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:07:55.385 [DEBUG] [Thread-300252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:07:55.385 [DEBUG] [Thread-300252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:07:55.385 [DEBUG] [Thread-300252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:07:55.385 [DEBUG] [Thread-300252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:07:55.385 [DEBUG] [Thread-300252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:07:55.385 [DEBUG] [Thread-300252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:07:55.385 [DEBUG] [Thread-300252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:07:55.385 [DEBUG] [Thread-300252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:07:55.386 [DEBUG] [Thread-300252] [transport.py] [_log()] client lang: <none>
2025-12-24T10:07:55.386 [DEBUG] [Thread-300252] [transport.py] [_log()] server lang: <none>
2025-12-24T10:07:55.386 [DEBUG] [Thread-300252] [transport.py] [_log()] kex follows: False
2025-12-24T10:07:55.386 [DEBUG] [Thread-300252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:07:55.386 [DEBUG] [Thread-300252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:07:55.386 [DEBUG] [Thread-300252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:07:55.386 [DEBUG] [Thread-300252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:07:55.386 [DEBUG] [Thread-300252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:07:55.387 [DEBUG] [Thread-300252] [transport.py] [_log()] Compression: none
2025-12-24T10:07:55.387 [DEBUG] [Thread-300252] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:07:55.448 [DEBUG] [Thread-300252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:07:55.448 [DEBUG] [Thread-300252] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:07:55.449 [DEBUG] [Thread-300252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:07:55.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:07:55.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:07:55.511 [DEBUG] [Thread-300252] [transport.py] [_log()] userauth is OK
2025-12-24T10:07:55.511 [DEBUG] [Thread-300252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:07:55.511 [DEBUG] [Thread-300252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:07:55.511 [DEBUG] [Thread-300252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:07:55.511 [DEBUG] [Thread-300252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:07:55.525 [INFO] [Thread-300252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:07:55.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:07:55.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:07:56.409 [DEBUG] [Thread-300252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:07:56.409 [DEBUG] [Thread-300252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:07:56.457 [DEBUG] [Thread-300252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:07:56.457 [DEBUG] [Thread-300252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:07:56.466 [DEBUG] [Thread-300252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:07:56.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:07:56.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:07:56.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:07:56.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:07:56.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:07:56.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:07:56.505 [DEBUG] [Thread-300252] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:08:06.470 [DEBUG] [Thread-300254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:08:21.561 [DEBUG] [Thread-300255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:08:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:08:26.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:08:26.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:08:27.294 [DEBUG] [Thread-300256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:08:27.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 8, 15), 12.71, 43.48, 0.0, 15.32, 18.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:08:27.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:08:15
2025-12-24T10:08:27.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:08:28.158 [DEBUG] [Thread-300257] [transport.py] [_log()] starting thread (client mode): 0xfabc6770
2025-12-24T10:08:28.158 [DEBUG] [Thread-300257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:08:28.165 [DEBUG] [Thread-300257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:08:28.165 [INFO] [Thread-300257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] client lang: <none>
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] server lang: <none>
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] kex follows: False
2025-12-24T10:08:28.169 [DEBUG] [Thread-300257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:08:28.170 [DEBUG] [Thread-300257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:08:28.170 [DEBUG] [Thread-300257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:08:28.170 [DEBUG] [Thread-300257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:08:28.170 [DEBUG] [Thread-300257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:08:28.170 [DEBUG] [Thread-300257] [transport.py] [_log()] Compression: none
2025-12-24T10:08:28.170 [DEBUG] [Thread-300257] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:08:28.197 [DEBUG] [Thread-300257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:08:28.201 [DEBUG] [Thread-300257] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:08:28.202 [DEBUG] [Thread-300257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:08:28.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:08:28.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:08:28.241 [DEBUG] [Thread-300257] [transport.py] [_log()] userauth is OK
2025-12-24T10:08:28.241 [DEBUG] [Thread-300257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:08:28.241 [DEBUG] [Thread-300257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:08:28.241 [DEBUG] [Thread-300257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:08:28.241 [DEBUG] [Thread-300257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:08:28.264 [INFO] [Thread-300257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:08:28.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:08:28.913 [DEBUG] [Thread-300257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:08:28.914 [DEBUG] [Thread-300257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:08:28.915 [DEBUG] [Thread-300257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:08:28.955 [DEBUG] [Thread-300257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:08:28.955 [DEBUG] [Thread-300257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:08:28.958 [DEBUG] [Thread-300257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:08:28.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:08:28.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:08:28.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:08:28.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:08:28.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:08:28.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:08:28.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:08:28.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:08:28.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:08:28.987 [DEBUG] [Thread-300257] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:08:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.338960 -999.00  +18.90   7.04     44   +6.70 1 1 1 1 1   888    0 12.71 54.84 ----- 7.0 7.0 129.4 16.2 27.7 -27.0 26.8 -25.2 25.6 -25.0 26.4 -26.1
2025-12-24T10:08:28.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:08:28.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:08:28.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.338960
2025-12-24T10:08:29.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:08:29.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:08:29.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:08:29.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:08:29.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:08:29.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:08:15', tmtdew=12.71, humidity=43.48, cloud=0.0, wind=15.32, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:08:06.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:08:29.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:08:29.114 [DEBUG] [Thread-300260] [transport.py] [_log()] starting thread (client mode): 0xf8156dd0
2025-12-24T10:08:29.115 [DEBUG] [Thread-300260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:08:29.129 [DEBUG] [Thread-300260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:08:29.129 [INFO] [Thread-300260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:08:29.136 [DEBUG] [Thread-300260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] client lang: <none>
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] server lang: <none>
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] kex follows: False
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] Compression: none
2025-12-24T10:08:29.137 [DEBUG] [Thread-300260] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:08:29.196 [DEBUG] [Thread-300260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:08:29.196 [DEBUG] [Thread-300260] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:08:29.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:08:29.198 [DEBUG] [Thread-300260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:08:29.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:08:29.251 [DEBUG] [Thread-300260] [transport.py] [_log()] userauth is OK
2025-12-24T10:08:29.251 [DEBUG] [Thread-300260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:08:29.252 [DEBUG] [Thread-300260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:08:29.252 [DEBUG] [Thread-300260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:08:29.252 [DEBUG] [Thread-300260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:08:29.275 [INFO] [Thread-300260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:08:29.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:08:29.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:08:30.123 [DEBUG] [Thread-300260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:08:30.124 [DEBUG] [Thread-300260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:08:30.171 [DEBUG] [Thread-300260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:08:30.171 [DEBUG] [Thread-300260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:08:30.179 [DEBUG] [Thread-300260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:08:30.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:08:30.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:08:30.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:08:30.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:08:30.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:08:30.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:08:30.212 [DEBUG] [Thread-300260] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:08:36.489 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:08:36.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:08:36.640 [DEBUG] [Thread-300262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:08:51.782 [DEBUG] [Thread-300263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:09:00.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:09:00.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:09:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:09:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 8, 48), 12.99, 42.41, 0.0, 11.98, 18.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:09:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:08:48
2025-12-24T10:09:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:09:01.766 [DEBUG] [Thread-300264] [transport.py] [_log()] starting thread (client mode): 0xf57bee90
2025-12-24T10:09:01.767 [DEBUG] [Thread-300264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:09:01.783 [DEBUG] [Thread-300264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:09:01.783 [INFO] [Thread-300264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] client lang: <none>
2025-12-24T10:09:01.787 [DEBUG] [Thread-300264] [transport.py] [_log()] server lang: <none>
2025-12-24T10:09:01.788 [DEBUG] [Thread-300264] [transport.py] [_log()] kex follows: False
2025-12-24T10:09:01.788 [DEBUG] [Thread-300264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:09:01.788 [DEBUG] [Thread-300264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:09:01.788 [DEBUG] [Thread-300264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:09:01.789 [DEBUG] [Thread-300264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:09:01.789 [DEBUG] [Thread-300264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:09:01.789 [DEBUG] [Thread-300264] [transport.py] [_log()] Compression: none
2025-12-24T10:09:01.789 [DEBUG] [Thread-300264] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:09:01.820 [DEBUG] [Thread-300264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:09:01.824 [DEBUG] [Thread-300264] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:09:01.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:09:01.828 [DEBUG] [Thread-300264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:09:01.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:09:01.832 [DEBUG] [Thread-300264] [transport.py] [_log()] userauth is OK
2025-12-24T10:09:01.832 [DEBUG] [Thread-300264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:09:01.833 [DEBUG] [Thread-300264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:09:01.833 [DEBUG] [Thread-300264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:09:01.833 [DEBUG] [Thread-300264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:09:01.863 [INFO] [Thread-300264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:09:01.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:09:02.527 [DEBUG] [Thread-300264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:09:02.528 [DEBUG] [Thread-300264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:09:02.529 [DEBUG] [Thread-300264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:09:02.569 [DEBUG] [Thread-300264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:09:02.569 [DEBUG] [Thread-300264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:09:02.571 [DEBUG] [Thread-300264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:09:02.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:09:02.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:09:02.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:09:02.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:09:02.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:09:02.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:09:02.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:09:02.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:09:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:09:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.339307 -999.00  +19.00   8.34     44   +6.60 1 1 1 1 1   888    0 13.06 63.38 ----- 8.3 8.3 145.8 10.8 27.9 -25.9 26.9 -25.3 25.7 -24.6 26.5 -25.0
2025-12-24T10:09:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:09:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:09:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.339307
2025-12-24T10:09:02.600 [DEBUG] [Thread-300264] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:09:02.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:09:02.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:09:02.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:09:02.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:09:02.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:09:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:08:48', tmtdew=12.99, humidity=42.41, cloud=0.0, wind=11.98, temperature=18.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:08:36.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:09:02.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:09:02.708 [DEBUG] [Thread-300267] [transport.py] [_log()] starting thread (client mode): 0xfabc6b90
2025-12-24T10:09:02.708 [DEBUG] [Thread-300267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:09:02.722 [DEBUG] [Thread-300267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:09:02.722 [INFO] [Thread-300267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:09:02.730 [DEBUG] [Thread-300267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:09:02.730 [DEBUG] [Thread-300267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:09:02.730 [DEBUG] [Thread-300267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:09:02.730 [DEBUG] [Thread-300267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:09:02.730 [DEBUG] [Thread-300267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] client lang: <none>
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] server lang: <none>
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] kex follows: False
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:09:02.731 [DEBUG] [Thread-300267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:09:02.732 [DEBUG] [Thread-300267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:09:02.732 [DEBUG] [Thread-300267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:09:02.732 [DEBUG] [Thread-300267] [transport.py] [_log()] Compression: none
2025-12-24T10:09:02.732 [DEBUG] [Thread-300267] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:09:02.791 [DEBUG] [Thread-300267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:09:02.792 [DEBUG] [Thread-300267] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:09:02.792 [DEBUG] [Thread-300267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:09:02.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:09:02.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:09:02.851 [DEBUG] [Thread-300267] [transport.py] [_log()] userauth is OK
2025-12-24T10:09:02.851 [DEBUG] [Thread-300267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:09:02.851 [DEBUG] [Thread-300267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:09:02.852 [DEBUG] [Thread-300267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:09:02.852 [DEBUG] [Thread-300267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:09:02.873 [INFO] [Thread-300267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:09:02.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:09:02.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:09:03.774 [DEBUG] [Thread-300267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:09:03.774 [DEBUG] [Thread-300267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:09:03.822 [DEBUG] [Thread-300267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:09:03.822 [DEBUG] [Thread-300267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:09:03.834 [DEBUG] [Thread-300267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:09:03.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:09:03.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:09:03.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:09:03.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:09:03.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:09:03.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:09:03.870 [DEBUG] [Thread-300267] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:09:06.860 [DEBUG] [Thread-300269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:09:21.947 [DEBUG] [Thread-300270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:09:27.605 [DEBUG] [Thread-300271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:09:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:09:33.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:09:33.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:09:34.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 9, 23), 13.15, 41.95, 0.0, 10.29, 18.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:09:34.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:09:23
2025-12-24T10:09:34.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:09:35.183 [DEBUG] [Thread-300272] [transport.py] [_log()] starting thread (client mode): 0xf574f1c0
2025-12-24T10:09:35.184 [DEBUG] [Thread-300272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:09:35.196 [DEBUG] [Thread-300272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:09:35.196 [INFO] [Thread-300272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] client lang: <none>
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] server lang: <none>
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] kex follows: False
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:09:35.200 [DEBUG] [Thread-300272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:09:35.201 [DEBUG] [Thread-300272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:09:35.201 [DEBUG] [Thread-300272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:09:35.201 [DEBUG] [Thread-300272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:09:35.201 [DEBUG] [Thread-300272] [transport.py] [_log()] Compression: none
2025-12-24T10:09:35.201 [DEBUG] [Thread-300272] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:09:35.233 [DEBUG] [Thread-300272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:09:35.237 [DEBUG] [Thread-300272] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:09:35.238 [DEBUG] [Thread-300272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:09:35.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:09:35.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:09:35.241 [DEBUG] [Thread-300272] [transport.py] [_log()] userauth is OK
2025-12-24T10:09:35.242 [DEBUG] [Thread-300272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:09:35.242 [DEBUG] [Thread-300272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:09:35.242 [DEBUG] [Thread-300272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:09:35.242 [DEBUG] [Thread-300272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:09:35.260 [INFO] [Thread-300272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:09:35.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:09:35.906 [DEBUG] [Thread-300272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:09:35.906 [DEBUG] [Thread-300272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:09:35.907 [DEBUG] [Thread-300272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:09:35.947 [DEBUG] [Thread-300272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:09:35.947 [DEBUG] [Thread-300272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:09:35.949 [DEBUG] [Thread-300272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:09:35.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:09:35.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:09:35.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:09:35.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:09:35.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:09:35.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:09:35.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:09:35.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:09:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:09:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.339654 -999.00  +19.00   9.85     43   +6.40 1 1 1 1 1   888    0 12.97 67.11 ----- 9.8 9.8 143.0 15.0 27.9 -27.1 27.1 -25.5 25.9 -24.4 26.4 -26.1
2025-12-24T10:09:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:09:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:09:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.339654
2025-12-24T10:09:35.980 [DEBUG] [Thread-300272] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:09:35.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:09:36.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:09:36.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:09:36.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:09:36.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:09:36.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:09:23', tmtdew=13.15, humidity=41.95, cloud=0.0, wind=10.29, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:09:06.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:09:36.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:09:36.094 [DEBUG] [Thread-300275] [transport.py] [_log()] starting thread (client mode): 0xf574e890
2025-12-24T10:09:36.094 [DEBUG] [Thread-300275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:09:36.109 [DEBUG] [Thread-300275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:09:36.109 [INFO] [Thread-300275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:09:36.117 [DEBUG] [Thread-300275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:09:36.117 [DEBUG] [Thread-300275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:09:36.117 [DEBUG] [Thread-300275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] client lang: <none>
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] server lang: <none>
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] kex follows: False
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] Compression: none
2025-12-24T10:09:36.118 [DEBUG] [Thread-300275] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:09:36.181 [DEBUG] [Thread-300275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:09:36.181 [DEBUG] [Thread-300275] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:09:36.181 [DEBUG] [Thread-300275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:09:36.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:09:36.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:09:36.239 [DEBUG] [Thread-300275] [transport.py] [_log()] userauth is OK
2025-12-24T10:09:36.239 [DEBUG] [Thread-300275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:09:36.239 [DEBUG] [Thread-300275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:09:36.239 [DEBUG] [Thread-300275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:09:36.239 [DEBUG] [Thread-300275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:09:36.254 [INFO] [Thread-300275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:09:36.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:09:36.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:09:36.632 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:09:36.633 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:09:36.984 [DEBUG] [Thread-300277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:09:37.082 [DEBUG] [Thread-300275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:09:37.082 [DEBUG] [Thread-300275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:09:37.130 [DEBUG] [Thread-300275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:09:37.130 [DEBUG] [Thread-300275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:09:37.138 [DEBUG] [Thread-300275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:09:37.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:09: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')
2025-12-24T10:09:37.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:09:37.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:09:37.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:09:37.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:09:37.175 [DEBUG] [Thread-300275] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:09:52.096 [DEBUG] [Thread-300278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:10:07.162 [DEBUG] [Thread-300279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:10:07.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:10:07.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:10:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:10:08.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 9, 56), 13.84, 39.94, 0.0, 9.32, 18.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:10:08.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:09:56
2025-12-24T10:10:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:10:08.906 [DEBUG] [Thread-300280] [transport.py] [_log()] starting thread (client mode): 0xf57bd300
2025-12-24T10:10:08.906 [DEBUG] [Thread-300280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:10:08.918 [DEBUG] [Thread-300280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:10:08.918 [INFO] [Thread-300280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:10:08.924 [DEBUG] [Thread-300280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] client lang: <none>
2025-12-24T10:10:08.925 [DEBUG] [Thread-300280] [transport.py] [_log()] server lang: <none>
2025-12-24T10:10:08.926 [DEBUG] [Thread-300280] [transport.py] [_log()] kex follows: False
2025-12-24T10:10:08.926 [DEBUG] [Thread-300280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:10:08.927 [DEBUG] [Thread-300280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:10:08.927 [DEBUG] [Thread-300280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:10:08.927 [DEBUG] [Thread-300280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:10:08.927 [DEBUG] [Thread-300280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:10:08.928 [DEBUG] [Thread-300280] [transport.py] [_log()] Compression: none
2025-12-24T10:10:08.928 [DEBUG] [Thread-300280] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:10:08.967 [DEBUG] [Thread-300280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:10:08.972 [DEBUG] [Thread-300280] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:10:08.974 [DEBUG] [Thread-300280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:10:08.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:10:08.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:10:08.980 [DEBUG] [Thread-300280] [transport.py] [_log()] userauth is OK
2025-12-24T10:10:08.981 [DEBUG] [Thread-300280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:10:08.981 [DEBUG] [Thread-300280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:10:08.981 [DEBUG] [Thread-300280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:10:08.981 [DEBUG] [Thread-300280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:10:09.008 [INFO] [Thread-300280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:10:09.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:10:09.797 [DEBUG] [Thread-300280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:10:09.797 [DEBUG] [Thread-300280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:10:09.797 [DEBUG] [Thread-300280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:10:09.838 [DEBUG] [Thread-300280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:10:09.838 [DEBUG] [Thread-300280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:10:09.840 [DEBUG] [Thread-300280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:10:09.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:10:09.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:10:09.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:10:09.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:10:09.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:10:09.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:10:09.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:10:09.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:10:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:10:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.340001 -999.00  +19.00   9.71     45   +7.00 1 1 1 1 1   888    0 12.87 67.66 ----- 9.7 9.7 151.6 12.7 27.9 -26.9 27.0 -24.9 25.8 -24.0 26.5 -25.7
2025-12-24T10:10:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:10:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:10:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.340001
2025-12-24T10:10:09.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:10:09.871 [DEBUG] [Thread-300280] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:10:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:10:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:10:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:10:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:10:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:09:56', tmtdew=13.84, humidity=39.94, cloud=0.0, wind=9.32, temperature=18.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:09:36.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:10:09.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:10:09.965 [DEBUG] [Thread-300283] [transport.py] [_log()] starting thread (client mode): 0xf5700b20
2025-12-24T10:10:09.965 [DEBUG] [Thread-300283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:10:09.981 [DEBUG] [Thread-300283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:10:09.981 [INFO] [Thread-300283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:10:09.988 [DEBUG] [Thread-300283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:10:09.988 [DEBUG] [Thread-300283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:10:09.988 [DEBUG] [Thread-300283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:10:09.988 [DEBUG] [Thread-300283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] client lang: <none>
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] server lang: <none>
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] kex follows: False
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] Compression: none
2025-12-24T10:10:09.989 [DEBUG] [Thread-300283] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:10:10.051 [DEBUG] [Thread-300283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:10:10.052 [DEBUG] [Thread-300283] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:10:10.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:10:10.053 [DEBUG] [Thread-300283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:10:10.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:10:10.107 [DEBUG] [Thread-300283] [transport.py] [_log()] userauth is OK
2025-12-24T10:10:10.107 [DEBUG] [Thread-300283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:10:10.107 [DEBUG] [Thread-300283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:10:10.107 [DEBUG] [Thread-300283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:10:10.107 [DEBUG] [Thread-300283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:10:10.127 [INFO] [Thread-300283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:10:10.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:10:10.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:10:10.992 [DEBUG] [Thread-300283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:10:10.992 [DEBUG] [Thread-300283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:10:11.031 [DEBUG] [Thread-300283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:10:11.032 [DEBUG] [Thread-300283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:10:11.040 [DEBUG] [Thread-300283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:10:11.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:10:11.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:10:11.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:10:11.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:10:11.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:10:11.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:10:11.074 [DEBUG] [Thread-300283] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:10:22.303 [DEBUG] [Thread-300285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:10:27.919 [DEBUG] [Thread-300286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:10:36.796 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:10:36.804 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:10:37.489 [DEBUG] [Thread-300287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:10:41.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:10:41.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:10:41.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:10:42.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 10, 30), 13.76, 40.13, 0.0, 6.99, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:10:42.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:10:30
2025-12-24T10:10:42.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:10:42.367 [DEBUG] [Thread-300288] [transport.py] [_log()] starting thread (client mode): 0xf574c8e0
2025-12-24T10:10:42.367 [DEBUG] [Thread-300288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:10:42.380 [DEBUG] [Thread-300288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:10:42.380 [INFO] [Thread-300288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:10:42.384 [DEBUG] [Thread-300288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] client lang: <none>
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] server lang: <none>
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] kex follows: False
2025-12-24T10:10:42.385 [DEBUG] [Thread-300288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:10:42.386 [DEBUG] [Thread-300288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:10:42.386 [DEBUG] [Thread-300288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:10:42.386 [DEBUG] [Thread-300288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:10:42.386 [DEBUG] [Thread-300288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:10:42.386 [DEBUG] [Thread-300288] [transport.py] [_log()] Compression: none
2025-12-24T10:10:42.386 [DEBUG] [Thread-300288] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:10:42.421 [DEBUG] [Thread-300288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:10:42.426 [DEBUG] [Thread-300288] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:10:42.428 [DEBUG] [Thread-300288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:10:42.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:10:42.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:10:42.434 [DEBUG] [Thread-300288] [transport.py] [_log()] userauth is OK
2025-12-24T10:10:42.434 [DEBUG] [Thread-300288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:10:42.435 [DEBUG] [Thread-300288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:10:42.435 [DEBUG] [Thread-300288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:10:42.435 [DEBUG] [Thread-300288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:10:42.460 [INFO] [Thread-300288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:10:42.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:10:43.120 [DEBUG] [Thread-300288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:10:43.121 [DEBUG] [Thread-300288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:10:43.122 [DEBUG] [Thread-300288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:10:43.163 [DEBUG] [Thread-300288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:10:43.163 [DEBUG] [Thread-300288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:10:43.167 [DEBUG] [Thread-300288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:10:43.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:10:43.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:10:43.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:10:43.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:10:43.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:10:43.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:10:43.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:10:43.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:10:43.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:10:43.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.340348 -999.00  +19.20  13.15     44   +6.70 1 1 1 1 1   888    0 13.23 70.35 ----- 13.2 13.2 131.4 16.2 27.9 -26.5 27.1 -25.8 25.9 -24.7 26.4 -26.6
2025-12-24T10:10:43.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:10:43.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:10:43.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.340348
2025-12-24T10:10:43.200 [DEBUG] [Thread-300288] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:10:43.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:10:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:10:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:10:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:10:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:10:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:10:30', tmtdew=13.76, humidity=40.13, cloud=0.0, wind=6.99, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:10:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:10:43.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:10:43.313 [DEBUG] [Thread-300291] [transport.py] [_log()] starting thread (client mode): 0xf574f2e0
2025-12-24T10:10:43.313 [DEBUG] [Thread-300291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:10:43.329 [DEBUG] [Thread-300291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:10:43.329 [INFO] [Thread-300291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:10:43.341 [DEBUG] [Thread-300291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:10:43.342 [DEBUG] [Thread-300291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:10:43.342 [DEBUG] [Thread-300291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:10:43.342 [DEBUG] [Thread-300291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:10:43.342 [DEBUG] [Thread-300291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:10:43.342 [DEBUG] [Thread-300291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:10:43.342 [DEBUG] [Thread-300291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:10:43.342 [DEBUG] [Thread-300291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] client lang: <none>
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] server lang: <none>
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] kex follows: False
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:10:43.343 [DEBUG] [Thread-300291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:10:43.344 [DEBUG] [Thread-300291] [transport.py] [_log()] Compression: none
2025-12-24T10:10:43.344 [DEBUG] [Thread-300291] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:10:43.396 [DEBUG] [Thread-300291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:10:43.397 [DEBUG] [Thread-300291] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:10:43.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:10:43.398 [DEBUG] [Thread-300291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:10:43.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:10:43.452 [DEBUG] [Thread-300291] [transport.py] [_log()] userauth is OK
2025-12-24T10:10:43.452 [DEBUG] [Thread-300291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:10:43.452 [DEBUG] [Thread-300291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:10:43.453 [DEBUG] [Thread-300291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:10:43.453 [DEBUG] [Thread-300291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:10:43.471 [INFO] [Thread-300291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:10:43.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:10:43.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:10:44.329 [DEBUG] [Thread-300291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:10:44.329 [DEBUG] [Thread-300291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:10:44.377 [DEBUG] [Thread-300291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:10:44.377 [DEBUG] [Thread-300291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:10:44.386 [DEBUG] [Thread-300291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:10:44.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:10:44.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:10:44.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:10:44.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:10:44.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:10:44.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:10:44.423 [DEBUG] [Thread-300291] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:10:52.547 [DEBUG] [Thread-300293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:11:07.709 [DEBUG] [Thread-300294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:11:14.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:11:14.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:11:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:11:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 11, 3), 13.57, 40.63, 0.0, 8.65, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:11:15.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:11:03
2025-12-24T10:11:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:11:15.722 [DEBUG] [Thread-300295] [transport.py] [_log()] starting thread (client mode): 0xf5701f60
2025-12-24T10:11:15.722 [DEBUG] [Thread-300295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:11:15.728 [DEBUG] [Thread-300295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:11:15.728 [INFO] [Thread-300295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:11:15.732 [DEBUG] [Thread-300295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:11:15.732 [DEBUG] [Thread-300295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:11:15.732 [DEBUG] [Thread-300295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:11:15.732 [DEBUG] [Thread-300295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:11:15.732 [DEBUG] [Thread-300295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:11:15.732 [DEBUG] [Thread-300295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:11:15.733 [DEBUG] [Thread-300295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:11:15.733 [DEBUG] [Thread-300295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:11:15.733 [DEBUG] [Thread-300295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:11:15.733 [DEBUG] [Thread-300295] [transport.py] [_log()] client lang: <none>
2025-12-24T10:11:15.733 [DEBUG] [Thread-300295] [transport.py] [_log()] server lang: <none>
2025-12-24T10:11:15.733 [DEBUG] [Thread-300295] [transport.py] [_log()] kex follows: False
2025-12-24T10:11:15.733 [DEBUG] [Thread-300295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:11:15.734 [DEBUG] [Thread-300295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:11:15.734 [DEBUG] [Thread-300295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:11:15.734 [DEBUG] [Thread-300295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:11:15.734 [DEBUG] [Thread-300295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:11:15.735 [DEBUG] [Thread-300295] [transport.py] [_log()] Compression: none
2025-12-24T10:11:15.735 [DEBUG] [Thread-300295] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:11:15.770 [DEBUG] [Thread-300295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:11:15.774 [DEBUG] [Thread-300295] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:11:15.775 [DEBUG] [Thread-300295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:11:15.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:11:15.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:11:15.781 [DEBUG] [Thread-300295] [transport.py] [_log()] userauth is OK
2025-12-24T10:11:15.781 [DEBUG] [Thread-300295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:11:15.781 [DEBUG] [Thread-300295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:11:15.781 [DEBUG] [Thread-300295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:11:15.782 [DEBUG] [Thread-300295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:11:15.808 [INFO] [Thread-300295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:11:15.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:11:16.465 [DEBUG] [Thread-300295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:11:16.466 [DEBUG] [Thread-300295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:11:16.475 [DEBUG] [Thread-300295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:11:16.506 [DEBUG] [Thread-300295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:11:16.506 [DEBUG] [Thread-300295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:11:16.510 [DEBUG] [Thread-300295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:11:16.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:11:16.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:11:16.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:11:16.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:11:16.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:11:16.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:11:16.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:11:16.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.340696 -999.00  +19.10  11.02     43   +6.30 1 1 1 1 1   888    0 13.51 76.46 ----- 11.0 11.0 120.4 15.1 27.9 -26.1 27.1 -25.4 25.9 -25.4 26.5 -25.9
2025-12-24T10:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.340696
2025-12-24T10:11:16.543 [DEBUG] [Thread-300295] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:11:16.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:11:16.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:11:16.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:11:16.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:11:16.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:11:16.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:11:03', tmtdew=13.57, humidity=40.63, cloud=0.0, wind=8.65, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:10:36.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:11:16.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:11:16.653 [DEBUG] [Thread-300298] [transport.py] [_log()] starting thread (client mode): 0xf5703d30
2025-12-24T10:11:16.653 [DEBUG] [Thread-300298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:11:16.670 [DEBUG] [Thread-300298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:11:16.670 [INFO] [Thread-300298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:11:16.678 [DEBUG] [Thread-300298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] client lang: <none>
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] server lang: <none>
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] kex follows: False
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] Compression: none
2025-12-24T10:11:16.679 [DEBUG] [Thread-300298] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:11:16.735 [DEBUG] [Thread-300298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:11:16.736 [DEBUG] [Thread-300298] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:11:16.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:11:16.737 [DEBUG] [Thread-300298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:11:16.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:11:16.791 [DEBUG] [Thread-300298] [transport.py] [_log()] userauth is OK
2025-12-24T10:11:16.791 [DEBUG] [Thread-300298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:11:16.792 [DEBUG] [Thread-300298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:11:16.792 [DEBUG] [Thread-300298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:11:16.792 [DEBUG] [Thread-300298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:11:16.811 [INFO] [Thread-300298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:11:16.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:11:16.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:11:17.632 [DEBUG] [Thread-300298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:11:17.632 [DEBUG] [Thread-300298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:11:17.678 [DEBUG] [Thread-300298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:11:17.678 [DEBUG] [Thread-300298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:11:17.686 [DEBUG] [Thread-300298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:11:17.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:11:17.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')
2025-12-24T10:11: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') -> 00000000
2025-12-24T10:11:17.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:11:17.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:11:17.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:11:17.719 [DEBUG] [Thread-300298] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:11:22.804 [DEBUG] [Thread-300300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:11:28.256 [DEBUG] [Thread-300301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:11:36.945 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:11:36.946 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:11:37.913 [DEBUG] [Thread-300302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:11:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:11:47.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:11:47.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:11:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 11, 36), 13.56, 40.96, 0.0, 10.68, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:11:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:11:36
2025-12-24T10:11:48.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:11:48.984 [DEBUG] [Thread-300303] [transport.py] [_log()] starting thread (client mode): 0xf57bc2e0
2025-12-24T10:11:48.985 [DEBUG] [Thread-300303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:11:48.994 [DEBUG] [Thread-300303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:11:48.994 [INFO] [Thread-300303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:11:49.000 [DEBUG] [Thread-300303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:11:49.000 [DEBUG] [Thread-300303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:11:49.000 [DEBUG] [Thread-300303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:11:49.000 [DEBUG] [Thread-300303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:11:49.000 [DEBUG] [Thread-300303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:11:49.000 [DEBUG] [Thread-300303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:11:49.000 [DEBUG] [Thread-300303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:11:49.000 [DEBUG] [Thread-300303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:11:49.001 [DEBUG] [Thread-300303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:11:49.001 [DEBUG] [Thread-300303] [transport.py] [_log()] client lang: <none>
2025-12-24T10:11:49.001 [DEBUG] [Thread-300303] [transport.py] [_log()] server lang: <none>
2025-12-24T10:11:49.001 [DEBUG] [Thread-300303] [transport.py] [_log()] kex follows: False
2025-12-24T10:11:49.001 [DEBUG] [Thread-300303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:11:49.002 [DEBUG] [Thread-300303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:11:49.002 [DEBUG] [Thread-300303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:11:49.002 [DEBUG] [Thread-300303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:11:49.002 [DEBUG] [Thread-300303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:11:49.003 [DEBUG] [Thread-300303] [transport.py] [_log()] Compression: none
2025-12-24T10:11:49.003 [DEBUG] [Thread-300303] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:11:49.036 [DEBUG] [Thread-300303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:11:49.041 [DEBUG] [Thread-300303] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:11:49.043 [DEBUG] [Thread-300303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:11:49.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:11:49.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:11:49.049 [DEBUG] [Thread-300303] [transport.py] [_log()] userauth is OK
2025-12-24T10:11:49.049 [DEBUG] [Thread-300303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:11:49.049 [DEBUG] [Thread-300303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:11:49.049 [DEBUG] [Thread-300303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:11:49.050 [DEBUG] [Thread-300303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:11:49.077 [INFO] [Thread-300303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:11:49.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:11:49.629 [DEBUG] [Thread-300303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:11:49.629 [DEBUG] [Thread-300303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:11:49.631 [DEBUG] [Thread-300303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:11:49.670 [DEBUG] [Thread-300303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:11:49.670 [DEBUG] [Thread-300303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:11:49.672 [DEBUG] [Thread-300303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:11:49.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:11:49.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:11:49.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:11:49.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:11:49.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:11:49.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:11:49.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:11:49.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:11:49.697 [DEBUG] [Thread-300303] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:11:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:11:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.341390 -999.00  +19.10   2.45     42   +6.20 1 1 1 1 1   888    0 13.53 84.65 ----- 2.5 2.5 121.9 8.6 28.1 -25.8 27.4 -24.9 26.1 -24.0 26.7 -25.5
2025-12-24T10:11:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:11:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:11:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.341390
2025-12-24T10:11:49.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:11:49.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:11:49.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:11:49.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:11:49.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:11:49.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:11:36', tmtdew=13.56, humidity=40.96, cloud=0.0, wind=10.68, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:11:36.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:11:49.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:11:49.822 [DEBUG] [Thread-300306] [transport.py] [_log()] starting thread (client mode): 0xf57427a0
2025-12-24T10:11:49.822 [DEBUG] [Thread-300306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:11:49.836 [DEBUG] [Thread-300306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:11:49.836 [INFO] [Thread-300306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] client lang: <none>
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] server lang: <none>
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] kex follows: False
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] Compression: none
2025-12-24T10:11:49.844 [DEBUG] [Thread-300306] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:11:49.901 [DEBUG] [Thread-300306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:11:49.901 [DEBUG] [Thread-300306] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:11:49.902 [DEBUG] [Thread-300306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:11:49.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:11:49.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:11:49.959 [DEBUG] [Thread-300306] [transport.py] [_log()] userauth is OK
2025-12-24T10:11:49.959 [DEBUG] [Thread-300306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:11:49.959 [DEBUG] [Thread-300306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:11:49.959 [DEBUG] [Thread-300306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:11:49.959 [DEBUG] [Thread-300306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:11:49.979 [INFO] [Thread-300306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:11:49.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:11:49.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:11:50.828 [DEBUG] [Thread-300306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:11:50.828 [DEBUG] [Thread-300306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:11:50.875 [DEBUG] [Thread-300306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:11:50.875 [DEBUG] [Thread-300306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:11:50.884 [DEBUG] [Thread-300306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:11:50.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:11:50.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')
2025-12-24T10:11:50.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
2025-12-24T10:11:50.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:11:50.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:11:50.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:11:50.917 [DEBUG] [Thread-300306] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:11:53.004 [DEBUG] [Thread-300308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:12:08.164 [DEBUG] [Thread-300309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:12:20.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:12:20.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:12:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:12:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 12, 9), 14.01, 39.75, 0.0, 8.79, 18.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:12:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:12:09
2025-12-24T10:12:22.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:12:22.304 [DEBUG] [Thread-300310] [transport.py] [_log()] starting thread (client mode): 0xf574d750
2025-12-24T10:12:22.305 [DEBUG] [Thread-300310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:12:22.314 [DEBUG] [Thread-300310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:12:22.315 [INFO] [Thread-300310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] client lang: <none>
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] server lang: <none>
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] kex follows: False
2025-12-24T10:12:22.319 [DEBUG] [Thread-300310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:12:22.320 [DEBUG] [Thread-300310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:12:22.320 [DEBUG] [Thread-300310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:12:22.320 [DEBUG] [Thread-300310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:12:22.320 [DEBUG] [Thread-300310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:12:22.320 [DEBUG] [Thread-300310] [transport.py] [_log()] Compression: none
2025-12-24T10:12:22.320 [DEBUG] [Thread-300310] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:12:22.356 [DEBUG] [Thread-300310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:12:22.359 [DEBUG] [Thread-300310] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:12:22.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:12:22.362 [DEBUG] [Thread-300310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:12:22.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:12:22.364 [DEBUG] [Thread-300310] [transport.py] [_log()] userauth is OK
2025-12-24T10:12:22.364 [DEBUG] [Thread-300310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:12:22.364 [DEBUG] [Thread-300310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:12:22.364 [DEBUG] [Thread-300310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:12:22.364 [DEBUG] [Thread-300310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:12:22.385 [INFO] [Thread-300310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:12:22.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:12:23.058 [DEBUG] [Thread-300310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:12:23.058 [DEBUG] [Thread-300310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:12:23.059 [DEBUG] [Thread-300310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:12:23.098 [DEBUG] [Thread-300310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:12:23.098 [DEBUG] [Thread-300310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:12:23.100 [DEBUG] [Thread-300310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:12:23.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:12:23.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:12:23.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:12:23.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:12:23.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:12:23.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:12:23.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:12:23.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:12:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:12:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.341738 -999.00  +19.30   9.77     43   +6.60 1 1 1 1 1   888    0 13.83 87.28 ----- 9.8 9.8 126.4 11.9 28.2 -25.6 27.5 -25.1 26.2 -24.2 26.9 -25.0
2025-12-24T10:12:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:12:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:12:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.341738
2025-12-24T10:12:23.134 [DEBUG] [Thread-300310] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:12:23.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:12:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:12:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:12:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:12:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:12:23.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:12:09', tmtdew=14.01, humidity=39.75, cloud=0.0, wind=8.79, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:12:06.163', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:12:23.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:12:23.243 [DEBUG] [Thread-300313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:12:23.250 [DEBUG] [Thread-300314] [transport.py] [_log()] starting thread (client mode): 0xf57abe20
2025-12-24T10:12:23.250 [DEBUG] [Thread-300314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:12:23.264 [DEBUG] [Thread-300314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:12:23.264 [INFO] [Thread-300314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] client lang: <none>
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] server lang: <none>
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] kex follows: False
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] Compression: none
2025-12-24T10:12:23.272 [DEBUG] [Thread-300314] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:12:23.329 [DEBUG] [Thread-300314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:12:23.329 [DEBUG] [Thread-300314] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:12:23.329 [DEBUG] [Thread-300314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:12:23.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:12:23.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:12:23.386 [DEBUG] [Thread-300314] [transport.py] [_log()] userauth is OK
2025-12-24T10:12:23.386 [DEBUG] [Thread-300314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:12:23.386 [DEBUG] [Thread-300314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:12:23.386 [DEBUG] [Thread-300314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:12:23.386 [DEBUG] [Thread-300314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:12:23.400 [INFO] [Thread-300314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:12:23.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:12:23.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:12:24.232 [DEBUG] [Thread-300314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:12:24.232 [DEBUG] [Thread-300314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:12:24.280 [DEBUG] [Thread-300314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:12:24.280 [DEBUG] [Thread-300314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:12:24.288 [DEBUG] [Thread-300314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:12:24.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:12:24.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:12:24.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
2025-12-24T10:12:24.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:12:24.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:12:24.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:12:24.320 [DEBUG] [Thread-300314] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:12:28.548 [DEBUG] [Thread-300316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:12:37.096 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:12:37.097 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:12:38.395 [DEBUG] [Thread-300317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:12:53.439 [DEBUG] [Thread-300318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:12:54.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:12:54.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:12:54.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
2025-12-24T10:12:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 12, 42), 14.21, 38.97, 0.0, 12.26, 18.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:12:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:12:42
2025-12-24T10:12:55.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:12:55.616 [DEBUG] [Thread-300319] [transport.py] [_log()] starting thread (client mode): 0xf574e2c0
2025-12-24T10:12:55.616 [DEBUG] [Thread-300319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:12:55.629 [DEBUG] [Thread-300319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:12:55.630 [INFO] [Thread-300319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:12:55.634 [DEBUG] [Thread-300319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] client lang: <none>
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] server lang: <none>
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] kex follows: False
2025-12-24T10:12:55.635 [DEBUG] [Thread-300319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:12:55.636 [DEBUG] [Thread-300319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:12:55.636 [DEBUG] [Thread-300319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:12:55.636 [DEBUG] [Thread-300319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:12:55.636 [DEBUG] [Thread-300319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:12:55.636 [DEBUG] [Thread-300319] [transport.py] [_log()] Compression: none
2025-12-24T10:12:55.636 [DEBUG] [Thread-300319] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:12:55.664 [DEBUG] [Thread-300319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:12:55.667 [DEBUG] [Thread-300319] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:12:55.669 [DEBUG] [Thread-300319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:12:55.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:12:55.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:12:55.672 [DEBUG] [Thread-300319] [transport.py] [_log()] userauth is OK
2025-12-24T10:12:55.672 [DEBUG] [Thread-300319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:12:55.672 [DEBUG] [Thread-300319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:12:55.672 [DEBUG] [Thread-300319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:12:55.672 [DEBUG] [Thread-300319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:12:55.686 [INFO] [Thread-300319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:12:55.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:12:56.315 [DEBUG] [Thread-300319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:12:56.315 [DEBUG] [Thread-300319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:12:56.318 [DEBUG] [Thread-300319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:12:56.356 [DEBUG] [Thread-300319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:12:56.356 [DEBUG] [Thread-300319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:12:56.359 [DEBUG] [Thread-300319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:12:56.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:12:56.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:12:56.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:12:56.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:12:56.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:12:56.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:12:56.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:12:56.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:12:56.389 [DEBUG] [Thread-300319] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:12:56.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:12:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.342085 -999.00  +19.80  11.94     42   +6.80 1 1 1 1 1   888    0 14.23 92.20 ----- 11.9 11.9 167.4 12.9 28.3 -27.5 27.4 -25.8 26.3 -24.1 26.9 -25.5
2025-12-24T10:12:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:12:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:12:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.342085
2025-12-24T10:12:56.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:12:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:12:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:12:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:12:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:12:56.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:12:42', tmtdew=14.21, humidity=38.97, cloud=0.0, wind=12.26, temperature=18.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:12:36.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:12:56.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:12:56.517 [DEBUG] [Thread-300322] [transport.py] [_log()] starting thread (client mode): 0xf5703d30
2025-12-24T10:12:56.517 [DEBUG] [Thread-300322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:12:56.531 [DEBUG] [Thread-300322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:12:56.532 [INFO] [Thread-300322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:12:56.539 [DEBUG] [Thread-300322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:12:56.539 [DEBUG] [Thread-300322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] client lang: <none>
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] server lang: <none>
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] kex follows: False
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:12:56.540 [DEBUG] [Thread-300322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:12:56.541 [DEBUG] [Thread-300322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:12:56.541 [DEBUG] [Thread-300322] [transport.py] [_log()] Compression: none
2025-12-24T10:12:56.541 [DEBUG] [Thread-300322] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:12:56.603 [DEBUG] [Thread-300322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:12:56.604 [DEBUG] [Thread-300322] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:12:56.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:12:56.605 [DEBUG] [Thread-300322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:12:56.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:12:56.663 [DEBUG] [Thread-300322] [transport.py] [_log()] userauth is OK
2025-12-24T10:12:56.663 [DEBUG] [Thread-300322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:12:56.663 [DEBUG] [Thread-300322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:12:56.664 [DEBUG] [Thread-300322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:12:56.664 [DEBUG] [Thread-300322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:12:56.688 [INFO] [Thread-300322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:12:56.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:12:56.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:12:57.513 [DEBUG] [Thread-300322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:12:57.513 [DEBUG] [Thread-300322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:12:57.561 [DEBUG] [Thread-300322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:12:57.561 [DEBUG] [Thread-300322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:12:57.570 [DEBUG] [Thread-300322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:12:57.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:12:57.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:12:57.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:12:57.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:12:57.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:12:57.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:12:57.603 [DEBUG] [Thread-300322] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:13:08.487 [DEBUG] [Thread-300324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:13:23.620 [DEBUG] [Thread-300325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:13:27.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:13:27.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:13:27.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:13:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 13, 15), 13.94, 39.66, 0.0, 13.01, 18.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:13:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:13:15
2025-12-24T10:13:28.799 [DEBUG] [Thread-300326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:13:28.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:13:29.125 [DEBUG] [Thread-300327] [transport.py] [_log()] starting thread (client mode): 0xf57bc2e0
2025-12-24T10:13:29.125 [DEBUG] [Thread-300327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:13:29.138 [DEBUG] [Thread-300327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:13:29.138 [INFO] [Thread-300327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:13:29.143 [DEBUG] [Thread-300327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:13:29.143 [DEBUG] [Thread-300327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] client lang: <none>
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] server lang: <none>
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] kex follows: False
2025-12-24T10:13:29.144 [DEBUG] [Thread-300327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:13:29.145 [DEBUG] [Thread-300327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:13:29.145 [DEBUG] [Thread-300327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:13:29.146 [DEBUG] [Thread-300327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:13:29.146 [DEBUG] [Thread-300327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:13:29.146 [DEBUG] [Thread-300327] [transport.py] [_log()] Compression: none
2025-12-24T10:13:29.146 [DEBUG] [Thread-300327] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:13:29.186 [DEBUG] [Thread-300327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:13:29.191 [DEBUG] [Thread-300327] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:13:29.193 [DEBUG] [Thread-300327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:13:29.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:13:29.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:13:29.199 [DEBUG] [Thread-300327] [transport.py] [_log()] userauth is OK
2025-12-24T10:13:29.199 [DEBUG] [Thread-300327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:13:29.200 [DEBUG] [Thread-300327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:13:29.200 [DEBUG] [Thread-300327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:13:29.200 [DEBUG] [Thread-300327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:13:29.236 [INFO] [Thread-300327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:13:29.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:13:29.834 [DEBUG] [Thread-300327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:13:29.843 [DEBUG] [Thread-300327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:13:29.845 [DEBUG] [Thread-300327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:13:29.875 [DEBUG] [Thread-300327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:13:29.875 [DEBUG] [Thread-300327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:13:29.879 [DEBUG] [Thread-300327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:13:29.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:13:29.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:13:29.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:13:29.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:13:29.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:13:29.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:13:29.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:13:29.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:13:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:13:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.342432 -999.00  +19.90   9.89     42   +6.70 1 1 1 1 1   888    0 14.23 94.04 ----- 9.9 9.9 163.0 11.7 28.4 -26.1 27.4 -25.8 26.4 -24.0 27.1 -25.1
2025-12-24T10:13:29.911 [DEBUG] [Thread-300327] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:13:29.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:13:29.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:13:29.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.342432
2025-12-24T10:13:29.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:13:29.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:13:29.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:13:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:13:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:13:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:13:15', tmtdew=13.94, humidity=39.66, cloud=0.0, wind=13.01, temperature=18.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:13:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:13:30.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:13:30.030 [DEBUG] [Thread-300330] [transport.py] [_log()] starting thread (client mode): 0xf5772c20
2025-12-24T10:13:30.030 [DEBUG] [Thread-300330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:13:30.049 [DEBUG] [Thread-300330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:13:30.049 [INFO] [Thread-300330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:13:30.056 [DEBUG] [Thread-300330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:13:30.057 [DEBUG] [Thread-300330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:13:30.057 [DEBUG] [Thread-300330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:13:30.057 [DEBUG] [Thread-300330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:13:30.057 [DEBUG] [Thread-300330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:13:30.057 [DEBUG] [Thread-300330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:13:30.057 [DEBUG] [Thread-300330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:13:30.057 [DEBUG] [Thread-300330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] client lang: <none>
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] server lang: <none>
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] kex follows: False
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:13:30.058 [DEBUG] [Thread-300330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:13:30.059 [DEBUG] [Thread-300330] [transport.py] [_log()] Compression: none
2025-12-24T10:13:30.059 [DEBUG] [Thread-300330] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:13:30.118 [DEBUG] [Thread-300330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:13:30.119 [DEBUG] [Thread-300330] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:13:30.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:13:30.120 [DEBUG] [Thread-300330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:13:30.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:13:30.174 [DEBUG] [Thread-300330] [transport.py] [_log()] userauth is OK
2025-12-24T10:13:30.174 [DEBUG] [Thread-300330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:13:30.174 [DEBUG] [Thread-300330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:13:30.174 [DEBUG] [Thread-300330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:13:30.174 [DEBUG] [Thread-300330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:13:30.188 [INFO] [Thread-300330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:13:30.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:13:30.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:13:31.013 [DEBUG] [Thread-300330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:13:31.013 [DEBUG] [Thread-300330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:13:31.052 [DEBUG] [Thread-300330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:13:31.052 [DEBUG] [Thread-300330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:13:31.061 [DEBUG] [Thread-300330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:13:31.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:13:31.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:13:31.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:13:31.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:13:31.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:13:31.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:13:31.095 [DEBUG] [Thread-300330] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:13:37.245 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:13:37.246 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:13:38.672 [DEBUG] [Thread-300332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:13:53.776 [DEBUG] [Thread-300333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:14:01.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:14:01.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:14:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:14:02.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 13, 48), 13.95, 39.88, 0.0, 8.1, 18.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:14:02.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:13:48
2025-12-24T10:14:02.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:14:02.985 [DEBUG] [Thread-300334] [transport.py] [_log()] starting thread (client mode): 0xf5771540
2025-12-24T10:14:02.985 [DEBUG] [Thread-300334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:14:02.990 [DEBUG] [Thread-300334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:14:02.991 [INFO] [Thread-300334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] client lang: <none>
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] server lang: <none>
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] kex follows: False
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:14:02.995 [DEBUG] [Thread-300334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:14:02.996 [DEBUG] [Thread-300334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:14:02.996 [DEBUG] [Thread-300334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:14:02.996 [DEBUG] [Thread-300334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:14:02.996 [DEBUG] [Thread-300334] [transport.py] [_log()] Compression: none
2025-12-24T10:14:02.996 [DEBUG] [Thread-300334] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:14:03.016 [DEBUG] [Thread-300334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:14:03.019 [DEBUG] [Thread-300334] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:14:03.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:14:03.021 [DEBUG] [Thread-300334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:14:03.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:14:03.060 [DEBUG] [Thread-300334] [transport.py] [_log()] userauth is OK
2025-12-24T10:14:03.060 [DEBUG] [Thread-300334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:14:03.061 [DEBUG] [Thread-300334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:14:03.061 [DEBUG] [Thread-300334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:14:03.061 [DEBUG] [Thread-300334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:14:03.091 [INFO] [Thread-300334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:14:03.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:14:03.729 [DEBUG] [Thread-300334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:14:03.729 [DEBUG] [Thread-300334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:14:03.730 [DEBUG] [Thread-300334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:14:03.770 [DEBUG] [Thread-300334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:14:03.770 [DEBUG] [Thread-300334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:14:03.772 [DEBUG] [Thread-300334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:14:03.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:14:03.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:14:03.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:14:03.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:14:03.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:14:03.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:14:03.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:14:03.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:14:03.798 [DEBUG] [Thread-300334] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:14:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:14:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.342779 -999.00  +20.00   8.02     41   +6.60 1 1 1 1 1   888    0 14.55 103.53 ----- 8.0 8.0 199.6 12.1 28.5 -26.2 27.4 -25.4 26.5 -23.8 27.1 -25.1
2025-12-24T10:14:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:14:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:14:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.342779
2025-12-24T10:14:03.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:14:03.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:14:03.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:14:03.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:14:03.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:14:03.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:13:48', tmtdew=13.95, humidity=39.88, cloud=0.0, wind=8.1, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:13:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:14:03.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:14:03.898 [DEBUG] [Thread-300337] [transport.py] [_log()] starting thread (client mode): 0xf5742650
2025-12-24T10:14:03.898 [DEBUG] [Thread-300337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:14:03.913 [DEBUG] [Thread-300337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:14:03.913 [INFO] [Thread-300337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] client lang: <none>
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] server lang: <none>
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] kex follows: False
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] Compression: none
2025-12-24T10:14:03.924 [DEBUG] [Thread-300337] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:14:03.981 [DEBUG] [Thread-300337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:14:03.981 [DEBUG] [Thread-300337] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:14:03.981 [DEBUG] [Thread-300337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:14:03.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:14:03.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:14:04.042 [DEBUG] [Thread-300337] [transport.py] [_log()] userauth is OK
2025-12-24T10:14:04.042 [DEBUG] [Thread-300337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:14:04.042 [DEBUG] [Thread-300337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:14:04.042 [DEBUG] [Thread-300337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:14:04.042 [DEBUG] [Thread-300337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:14:04.058 [INFO] [Thread-300337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:14:04.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:14:04.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:14:04.916 [DEBUG] [Thread-300337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:14:04.917 [DEBUG] [Thread-300337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:14:04.962 [DEBUG] [Thread-300337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:14:04.962 [DEBUG] [Thread-300337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:14:04.970 [DEBUG] [Thread-300337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:14:04.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:14:04.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:14:04.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:14:05.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:14:05.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:14:05.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:14:05.012 [DEBUG] [Thread-300337] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:14:08.833 [DEBUG] [Thread-300339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:14:23.955 [DEBUG] [Thread-300340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:14:29.058 [DEBUG] [Thread-300341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:14:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:14:35.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:14:35.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:14:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 14, 21), 13.88, 40.03, 0.0, 7.11, 18.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:14:35.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:14:21
2025-12-24T10:14:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:14:36.269 [DEBUG] [Thread-300342] [transport.py] [_log()] starting thread (client mode): 0xf5770fd0
2025-12-24T10:14:36.269 [DEBUG] [Thread-300342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:14:36.284 [DEBUG] [Thread-300342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:14:36.284 [INFO] [Thread-300342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:14:36.291 [DEBUG] [Thread-300342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:14:36.291 [DEBUG] [Thread-300342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:14:36.291 [DEBUG] [Thread-300342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:14:36.291 [DEBUG] [Thread-300342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:14:36.291 [DEBUG] [Thread-300342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:14:36.291 [DEBUG] [Thread-300342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:14:36.291 [DEBUG] [Thread-300342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:14:36.291 [DEBUG] [Thread-300342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:14:36.292 [DEBUG] [Thread-300342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:14:36.292 [DEBUG] [Thread-300342] [transport.py] [_log()] client lang: <none>
2025-12-24T10:14:36.292 [DEBUG] [Thread-300342] [transport.py] [_log()] server lang: <none>
2025-12-24T10:14:36.292 [DEBUG] [Thread-300342] [transport.py] [_log()] kex follows: False
2025-12-24T10:14:36.292 [DEBUG] [Thread-300342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:14:36.293 [DEBUG] [Thread-300342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:14:36.293 [DEBUG] [Thread-300342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:14:36.293 [DEBUG] [Thread-300342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:14:36.293 [DEBUG] [Thread-300342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:14:36.293 [DEBUG] [Thread-300342] [transport.py] [_log()] Compression: none
2025-12-24T10:14:36.294 [DEBUG] [Thread-300342] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:14:36.326 [DEBUG] [Thread-300342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:14:36.331 [DEBUG] [Thread-300342] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:14:36.333 [DEBUG] [Thread-300342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:14:36.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:14:36.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:14:36.338 [DEBUG] [Thread-300342] [transport.py] [_log()] userauth is OK
2025-12-24T10:14:36.339 [DEBUG] [Thread-300342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:14:36.339 [DEBUG] [Thread-300342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:14:36.339 [DEBUG] [Thread-300342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:14:36.339 [DEBUG] [Thread-300342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:14:36.360 [INFO] [Thread-300342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:14:36.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:14:36.957 [DEBUG] [Thread-300342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:14:36.957 [DEBUG] [Thread-300342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:14:36.966 [DEBUG] [Thread-300342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:14:36.999 [DEBUG] [Thread-300342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:14:37.000 [DEBUG] [Thread-300342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:14:37.004 [DEBUG] [Thread-300342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:14:37.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:14:37.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:14:37.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:14:37.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:14:37.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:14:37.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:14:37.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:14:37.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:14:37.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:14:37.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.343126 -999.00  +20.00   3.14     41   +6.50 1 1 1 1 1   888    0 15.11 114.48 ----- 3.1 3.1 219.5 12.5 28.5 -26.6 27.4 -25.8 26.5 -25.3 27.1 -25.4
2025-12-24T10:14:37.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:14:37.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:14:37.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.343126
2025-12-24T10:14:37.040 [DEBUG] [Thread-300342] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:14:37.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:14:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:14:37.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:14:37.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:14:37.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:14:37.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:14:21', tmtdew=13.88, humidity=40.03, cloud=0.0, wind=7.11, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:14:06.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:14:37.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:14:37.397 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:14:37.399 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:14:39.019 [DEBUG] [Thread-300345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:14:54.142 [DEBUG] [Thread-300346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:15:09.228 [DEBUG] [Thread-300347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:15:24.320 [DEBUG] [Thread-300348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:15:29.319 [DEBUG] [Thread-300349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:15:37.550 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:15:37.554 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:15:39.369 [DEBUG] [Thread-300350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:15:54.414 [DEBUG] [Thread-300351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:16:09.458 [DEBUG] [Thread-300352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:16:24.494 [DEBUG] [Thread-300353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:16:29.633 [DEBUG] [Thread-300354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:16:37.711 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:16:37.727 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:16:39.561 [DEBUG] [Thread-300355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:16:52.473 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T10:16:54.631 [DEBUG] [Thread-300356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:17:09.683 [DEBUG] [Thread-300357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:17:22.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:17:22.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:17:22.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:17:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 17, 6), 13.79, 39.95, 0.0, 4.2, 18.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:17:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:17:06
2025-12-24T10:17:23.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:17:23.737 [DEBUG] [Thread-300358] [transport.py] [_log()] starting thread (client mode): 0xf574ff40
2025-12-24T10:17:23.738 [DEBUG] [Thread-300358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:17:23.748 [DEBUG] [Thread-300358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:17:23.748 [INFO] [Thread-300358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] client lang: <none>
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] server lang: <none>
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] kex follows: False
2025-12-24T10:17:23.765 [DEBUG] [Thread-300358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:17:23.766 [DEBUG] [Thread-300358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:17:23.766 [DEBUG] [Thread-300358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:17:23.766 [DEBUG] [Thread-300358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:17:23.766 [DEBUG] [Thread-300358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:17:23.766 [DEBUG] [Thread-300358] [transport.py] [_log()] Compression: none
2025-12-24T10:17:23.766 [DEBUG] [Thread-300358] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:17:23.799 [DEBUG] [Thread-300358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:17:23.803 [DEBUG] [Thread-300358] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:17:23.805 [DEBUG] [Thread-300358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:17:23.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:17:23.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:17:23.810 [DEBUG] [Thread-300358] [transport.py] [_log()] userauth is OK
2025-12-24T10:17:23.810 [DEBUG] [Thread-300358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:17:23.810 [DEBUG] [Thread-300358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:17:23.810 [DEBUG] [Thread-300358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:17:23.810 [DEBUG] [Thread-300358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:17:23.830 [INFO] [Thread-300358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:17:23.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:17:24.450 [DEBUG] [Thread-300358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:17:24.450 [DEBUG] [Thread-300358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:17:24.450 [DEBUG] [Thread-300358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:17:24.490 [DEBUG] [Thread-300358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:17:24.490 [DEBUG] [Thread-300358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:17:24.493 [DEBUG] [Thread-300358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:17:24.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:17:24.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:17:24.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:17:24.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:17:24.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:17:24.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:17:24.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:17:24.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:17:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:17:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.345210 -999.00  +19.10   0.35     43   +6.50 1 1 1 1 1   888    0 16.08 143.36 ----- 0.3 0.3 333.9 6.3 28.8 -26.3 27.9 -26.0 26.4 -23.6 27.1 -24.2
2025-12-24T10:17:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:17:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:17:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.345210
2025-12-24T10:17:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:17:24.529 [DEBUG] [Thread-300358] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:17:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:17:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:17:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:17:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:17:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:17:06', tmtdew=13.79, humidity=39.95, cloud=0.0, wind=4.2, temperature=18.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:17:06.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:17:24.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:17:24.621 [DEBUG] [Thread-300361] [transport.py] [_log()] starting thread (client mode): 0xf5771810
2025-12-24T10:17:24.621 [DEBUG] [Thread-300361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:17:24.636 [DEBUG] [Thread-300361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:17:24.636 [INFO] [Thread-300361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:17:24.644 [DEBUG] [Thread-300361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:17:24.644 [DEBUG] [Thread-300361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] client lang: <none>
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] server lang: <none>
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] kex follows: False
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] Compression: none
2025-12-24T10:17:24.645 [DEBUG] [Thread-300361] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:17:24.711 [DEBUG] [Thread-300361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:17:24.712 [DEBUG] [Thread-300361] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:17:24.712 [DEBUG] [Thread-300361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:17:24.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:17:24.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:17:24.725 [DEBUG] [Thread-300363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:17:24.774 [DEBUG] [Thread-300361] [transport.py] [_log()] userauth is OK
2025-12-24T10:17:24.775 [DEBUG] [Thread-300361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:17:24.775 [DEBUG] [Thread-300361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:17:24.775 [DEBUG] [Thread-300361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:17:24.775 [DEBUG] [Thread-300361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:17:24.794 [INFO] [Thread-300361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:17:24.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:17:24.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:17:25.620 [DEBUG] [Thread-300361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:17:25.620 [DEBUG] [Thread-300361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:17:25.659 [DEBUG] [Thread-300361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:17:25.659 [DEBUG] [Thread-300361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:17:25.668 [DEBUG] [Thread-300361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:17:25.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:17:25.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')
2025-12-24T10:17:25.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:17:25.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:17:25.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:17:25.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:17:25.701 [DEBUG] [Thread-300361] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:17:29.956 [DEBUG] [Thread-300364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:17:37.874 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:17:37.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:17:39.843 [DEBUG] [Thread-300365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:17:54.906 [DEBUG] [Thread-300366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:17:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:17:55.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:17:55.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:17:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 17, 39), 14.11, 39.27, 0.0, 5.14, 19.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:17:56.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:17:39
2025-12-24T10:17:56.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:17:57.101 [DEBUG] [Thread-300367] [transport.py] [_log()] starting thread (client mode): 0xf5773640
2025-12-24T10:17:57.102 [DEBUG] [Thread-300367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:17:57.115 [DEBUG] [Thread-300367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:17:57.115 [INFO] [Thread-300367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] client lang: <none>
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] server lang: <none>
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] kex follows: False
2025-12-24T10:17:57.119 [DEBUG] [Thread-300367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:17:57.120 [DEBUG] [Thread-300367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:17:57.120 [DEBUG] [Thread-300367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:17:57.120 [DEBUG] [Thread-300367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:17:57.120 [DEBUG] [Thread-300367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:17:57.120 [DEBUG] [Thread-300367] [transport.py] [_log()] Compression: none
2025-12-24T10:17:57.120 [DEBUG] [Thread-300367] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:17:57.150 [DEBUG] [Thread-300367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:17:57.153 [DEBUG] [Thread-300367] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:17:57.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:17:57.155 [DEBUG] [Thread-300367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:17:57.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:17:57.158 [DEBUG] [Thread-300367] [transport.py] [_log()] userauth is OK
2025-12-24T10:17:57.158 [DEBUG] [Thread-300367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:17:57.158 [DEBUG] [Thread-300367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:17:57.158 [DEBUG] [Thread-300367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:17:57.158 [DEBUG] [Thread-300367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:17:57.177 [INFO] [Thread-300367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:17:57.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:17:57.797 [DEBUG] [Thread-300367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:17:57.797 [DEBUG] [Thread-300367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:17:57.798 [DEBUG] [Thread-300367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:17:57.838 [DEBUG] [Thread-300367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:17:57.838 [DEBUG] [Thread-300367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:17:57.841 [DEBUG] [Thread-300367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:17:57.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:17:57.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:17:57.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:17:57.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:17:57.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:17:57.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:17:57.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:17:57.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:17:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:17:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.345557 -999.00  +19.30   4.68     43   +6.60 1 1 1 1 1   888    0 15.62 131.66 ----- 4.7 4.7 305.0 6.2 29.1 -25.8 28.1 -25.5 26.5 -23.1 27.3 -24.1
2025-12-24T10:17:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:17:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:17:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.345557
2025-12-24T10:17:57.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:17:57.866 [DEBUG] [Thread-300367] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:17:57.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:17:57.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:17:57.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:17:57.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:17:57.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:17:39', tmtdew=14.11, humidity=39.27, cloud=0.0, wind=5.14, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:17:36.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:17:57.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:17:57.954 [DEBUG] [Thread-300370] [transport.py] [_log()] starting thread (client mode): 0xf57729b0
2025-12-24T10:17:57.954 [DEBUG] [Thread-300370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:17:57.971 [DEBUG] [Thread-300370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:17:57.971 [INFO] [Thread-300370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] client lang: <none>
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] server lang: <none>
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] kex follows: False
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] Compression: none
2025-12-24T10:17:57.979 [DEBUG] [Thread-300370] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:17:58.036 [DEBUG] [Thread-300370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:17:58.036 [DEBUG] [Thread-300370] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:17:58.036 [DEBUG] [Thread-300370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:17:58.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:17:58.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:17:58.092 [DEBUG] [Thread-300370] [transport.py] [_log()] userauth is OK
2025-12-24T10:17:58.093 [DEBUG] [Thread-300370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:17:58.093 [DEBUG] [Thread-300370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:17:58.093 [DEBUG] [Thread-300370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:17:58.093 [DEBUG] [Thread-300370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:17:58.111 [INFO] [Thread-300370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:17:58.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:17:58.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:17:58.959 [DEBUG] [Thread-300370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:17:58.959 [DEBUG] [Thread-300370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:17:59.006 [DEBUG] [Thread-300370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:17:59.007 [DEBUG] [Thread-300370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:17:59.015 [DEBUG] [Thread-300370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:17:59.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:17:59.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:17:59.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:17:59.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:17:59.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:17:59.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:17:59.048 [DEBUG] [Thread-300370] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:18:09.966 [DEBUG] [Thread-300372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:18:25.114 [DEBUG] [Thread-300373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:18:29.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:18:29.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:18:29.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:18:30.197 [DEBUG] [Thread-300374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:18:30.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 18, 12), 14.15, 39.24, 0.0, 8.84, 19.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:18:30.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:18:12
2025-12-24T10:18:30.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:18:30.696 [DEBUG] [Thread-300375] [transport.py] [_log()] starting thread (client mode): 0xf57716c0
2025-12-24T10:18:30.697 [DEBUG] [Thread-300375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:18:30.697 [DEBUG] [Thread-300375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:18:30.697 [INFO] [Thread-300375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:18:30.707 [DEBUG] [Thread-300375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] client lang: <none>
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] server lang: <none>
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] kex follows: False
2025-12-24T10:18:30.708 [DEBUG] [Thread-300375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:18:30.709 [DEBUG] [Thread-300375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:18:30.709 [DEBUG] [Thread-300375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:18:30.709 [DEBUG] [Thread-300375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:18:30.709 [DEBUG] [Thread-300375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:18:30.709 [DEBUG] [Thread-300375] [transport.py] [_log()] Compression: none
2025-12-24T10:18:30.709 [DEBUG] [Thread-300375] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:18:30.736 [DEBUG] [Thread-300375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:18:30.739 [DEBUG] [Thread-300375] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:18:30.740 [DEBUG] [Thread-300375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:18:30.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:18:30.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:18:30.744 [DEBUG] [Thread-300375] [transport.py] [_log()] userauth is OK
2025-12-24T10:18:30.744 [DEBUG] [Thread-300375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:18:30.744 [DEBUG] [Thread-300375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:18:30.744 [DEBUG] [Thread-300375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:18:30.744 [DEBUG] [Thread-300375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:18:30.764 [INFO] [Thread-300375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:18:30.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:18:31.365 [DEBUG] [Thread-300375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:18:31.365 [DEBUG] [Thread-300375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:18:31.366 [DEBUG] [Thread-300375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:18:31.406 [DEBUG] [Thread-300375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:18:31.406 [DEBUG] [Thread-300375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:18:31.408 [DEBUG] [Thread-300375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:18:31.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:18:31.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:18:31.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:18:31.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:18:31.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:18:31.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:18:31.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:18:31.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:18:31.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:18:31.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.345904 -999.00  +19.50   3.49     42   +6.60 1 1 1 1 1   888    0 15.55 127.45 ----- 3.5 3.5 63.6 4.0 29.3 -25.2 28.2 -25.0 26.7 -23.6 27.4 -24.3
2025-12-24T10:18:31.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:18:31.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:18:31.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.345904
2025-12-24T10:18:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:18:31.454 [DEBUG] [Thread-300375] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:18:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:18:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:18:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:18:31.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:18:31.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:18:12', tmtdew=14.15, humidity=39.24, cloud=0.0, wind=8.84, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:18:06.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:18:31.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:18:31.547 [DEBUG] [Thread-300378] [transport.py] [_log()] starting thread (client mode): 0xf5743fa0
2025-12-24T10:18:31.547 [DEBUG] [Thread-300378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:18:31.562 [DEBUG] [Thread-300378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:18:31.562 [INFO] [Thread-300378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:18:31.570 [DEBUG] [Thread-300378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:18:31.570 [DEBUG] [Thread-300378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:18:31.570 [DEBUG] [Thread-300378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:18:31.570 [DEBUG] [Thread-300378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:18:31.570 [DEBUG] [Thread-300378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:18:31.570 [DEBUG] [Thread-300378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] client lang: <none>
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] server lang: <none>
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] kex follows: False
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] Compression: none
2025-12-24T10:18:31.571 [DEBUG] [Thread-300378] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:18:31.630 [DEBUG] [Thread-300378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:18:31.631 [DEBUG] [Thread-300378] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:18:31.631 [DEBUG] [Thread-300378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:18:31.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:18:31.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:18:31.689 [DEBUG] [Thread-300378] [transport.py] [_log()] userauth is OK
2025-12-24T10:18:31.689 [DEBUG] [Thread-300378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:18:31.690 [DEBUG] [Thread-300378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:18:31.690 [DEBUG] [Thread-300378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:18:31.690 [DEBUG] [Thread-300378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:18:31.714 [INFO] [Thread-300378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:18:31.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:18:31.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:18:32.555 [DEBUG] [Thread-300378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:18:32.555 [DEBUG] [Thread-300378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:18:32.603 [DEBUG] [Thread-300378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:18:32.603 [DEBUG] [Thread-300378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:18:32.611 [DEBUG] [Thread-300378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:18:32.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:18: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')
2025-12-24T10:18:32.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:18:32.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:18:32.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:18:32.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:18:32.646 [DEBUG] [Thread-300378] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:18:38.019 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:18:38.020 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:18:40.170 [DEBUG] [Thread-300380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:18:55.258 [DEBUG] [Thread-300381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:19:02.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:19:02.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:19:02.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:19:04.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 18, 45), 14.57, 38.45, 0.0, 5.51, 19.78, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:19:04.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:18:45
2025-12-24T10:19:04.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:19:04.441 [DEBUG] [Thread-300382] [transport.py] [_log()] starting thread (client mode): 0xf5741a50
2025-12-24T10:19:04.441 [DEBUG] [Thread-300382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:19:04.455 [DEBUG] [Thread-300382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:19:04.455 [INFO] [Thread-300382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] client lang: <none>
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] server lang: <none>
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] kex follows: False
2025-12-24T10:19:04.459 [DEBUG] [Thread-300382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:19:04.460 [DEBUG] [Thread-300382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:19:04.460 [DEBUG] [Thread-300382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:19:04.460 [DEBUG] [Thread-300382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:19:04.460 [DEBUG] [Thread-300382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:19:04.460 [DEBUG] [Thread-300382] [transport.py] [_log()] Compression: none
2025-12-24T10:19:04.460 [DEBUG] [Thread-300382] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:19:04.491 [DEBUG] [Thread-300382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:19:04.495 [DEBUG] [Thread-300382] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:19:04.497 [DEBUG] [Thread-300382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:19:04.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:19:04.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:19:04.534 [DEBUG] [Thread-300382] [transport.py] [_log()] userauth is OK
2025-12-24T10:19:04.534 [DEBUG] [Thread-300382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:19:04.534 [DEBUG] [Thread-300382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:19:04.534 [DEBUG] [Thread-300382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:19:04.534 [DEBUG] [Thread-300382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:19:04.560 [INFO] [Thread-300382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:19:04.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:19:05.130 [DEBUG] [Thread-300382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:19:05.139 [DEBUG] [Thread-300382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:19:05.139 [DEBUG] [Thread-300382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:19:05.171 [DEBUG] [Thread-300382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:19:05.171 [DEBUG] [Thread-300382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:19:05.173 [DEBUG] [Thread-300382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:19:05.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:19:05.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:19:05.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:19:05.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:19:05.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:19:05.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:19:05.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:19:05.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:19:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:19:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.346251 -999.00  +19.90   3.36     42   +6.80 1 1 1 1 1   888    0 16.16 133.47 ----- 3.4 3.4 210.8 4.9 29.5 -25.5 28.3 -25.0 26.8 -22.9 27.6 -24.4
2025-12-24T10:19:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:19:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:19:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.346251
2025-12-24T10:19:05.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:19:05.206 [DEBUG] [Thread-300382] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:19:05.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:19:05.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:19:05.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:19:05.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:19:05.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:18:45', tmtdew=14.57, humidity=38.45, cloud=0.0, wind=5.51, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:18:36.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:19:05.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:19:05.292 [DEBUG] [Thread-300385] [transport.py] [_log()] starting thread (client mode): 0xf5770e50
2025-12-24T10:19:05.292 [DEBUG] [Thread-300385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:19:05.307 [DEBUG] [Thread-300385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:19:05.307 [INFO] [Thread-300385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] client lang: <none>
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] server lang: <none>
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] kex follows: False
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:19:05.314 [DEBUG] [Thread-300385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:19:05.315 [DEBUG] [Thread-300385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:19:05.315 [DEBUG] [Thread-300385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:19:05.315 [DEBUG] [Thread-300385] [transport.py] [_log()] Compression: none
2025-12-24T10:19:05.315 [DEBUG] [Thread-300385] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:19:05.371 [DEBUG] [Thread-300385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:19:05.371 [DEBUG] [Thread-300385] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:19:05.371 [DEBUG] [Thread-300385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:19:05.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:19:05.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:19:05.428 [DEBUG] [Thread-300385] [transport.py] [_log()] userauth is OK
2025-12-24T10:19:05.428 [DEBUG] [Thread-300385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:19:05.428 [DEBUG] [Thread-300385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:19:05.428 [DEBUG] [Thread-300385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:19:05.428 [DEBUG] [Thread-300385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:19:05.442 [INFO] [Thread-300385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:19:05.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:19:05.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:19:06.292 [DEBUG] [Thread-300385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:19:06.292 [DEBUG] [Thread-300385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:19:06.339 [DEBUG] [Thread-300385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:19:06.339 [DEBUG] [Thread-300385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:19:06.348 [DEBUG] [Thread-300385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:19:06.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:19:06.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:19:06.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:19:06.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:19:06.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:19:06.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:19:06.385 [DEBUG] [Thread-300385] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:19:10.303 [DEBUG] [Thread-300387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:19:25.407 [DEBUG] [Thread-300388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:19:30.543 [DEBUG] [Thread-300389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:19:36.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:19:36.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:19:36.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:19:37.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 19, 18), 14.63, 38.32, 0.0, 7.39, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:19:37.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:19:18
2025-12-24T10:19:37.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:19:37.755 [DEBUG] [Thread-300390] [transport.py] [_log()] starting thread (client mode): 0xf5770910
2025-12-24T10:19:37.756 [DEBUG] [Thread-300390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:19:37.767 [DEBUG] [Thread-300390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:19:37.767 [INFO] [Thread-300390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:19:37.773 [DEBUG] [Thread-300390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:19:37.773 [DEBUG] [Thread-300390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:19:37.773 [DEBUG] [Thread-300390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:19:37.773 [DEBUG] [Thread-300390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:19:37.773 [DEBUG] [Thread-300390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:19:37.773 [DEBUG] [Thread-300390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:19:37.774 [DEBUG] [Thread-300390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:19:37.774 [DEBUG] [Thread-300390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:19:37.774 [DEBUG] [Thread-300390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:19:37.774 [DEBUG] [Thread-300390] [transport.py] [_log()] client lang: <none>
2025-12-24T10:19:37.774 [DEBUG] [Thread-300390] [transport.py] [_log()] server lang: <none>
2025-12-24T10:19:37.774 [DEBUG] [Thread-300390] [transport.py] [_log()] kex follows: False
2025-12-24T10:19:37.774 [DEBUG] [Thread-300390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:19:37.775 [DEBUG] [Thread-300390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:19:37.775 [DEBUG] [Thread-300390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:19:37.775 [DEBUG] [Thread-300390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:19:37.775 [DEBUG] [Thread-300390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:19:37.775 [DEBUG] [Thread-300390] [transport.py] [_log()] Compression: none
2025-12-24T10:19:37.775 [DEBUG] [Thread-300390] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:19:37.814 [DEBUG] [Thread-300390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:19:37.819 [DEBUG] [Thread-300390] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:19:37.821 [DEBUG] [Thread-300390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:19:37.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:19:37.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:19:37.825 [DEBUG] [Thread-300390] [transport.py] [_log()] userauth is OK
2025-12-24T10:19:37.825 [DEBUG] [Thread-300390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:19:37.826 [DEBUG] [Thread-300390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:19:37.826 [DEBUG] [Thread-300390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:19:37.826 [DEBUG] [Thread-300390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:19:37.851 [INFO] [Thread-300390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:19:37.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:19:38.159 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:19:38.161 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:19:38.420 [DEBUG] [Thread-300390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:19:38.420 [DEBUG] [Thread-300390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:19:38.421 [DEBUG] [Thread-300390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:19:38.461 [DEBUG] [Thread-300390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:19:38.461 [DEBUG] [Thread-300390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:19:38.464 [DEBUG] [Thread-300390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:19:38.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:19:38.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:19:38.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:19:38.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:19:38.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:19:38.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:19:38.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:19:38.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:19:38.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:19:38.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.346599 -999.00  +20.40   2.24     41   +7.00 1 1 1 1 1   888    0 16.24 141.54 ----- 2.2 2.2 40.3 5.9 29.5 -26.6 28.5 -25.2 26.9 -23.5 27.6 -24.8
2025-12-24T10:19:38.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:19:38.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:19:38.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.346599
2025-12-24T10:19:38.498 [DEBUG] [Thread-300390] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:19:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:19:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:19:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:19:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:19:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:19:38.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:19:18', tmtdew=14.63, humidity=38.32, cloud=0.0, wind=7.39, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:19:06.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:19:38.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:19:38.611 [DEBUG] [Thread-300393] [transport.py] [_log()] starting thread (client mode): 0xf57721d0
2025-12-24T10:19:38.611 [DEBUG] [Thread-300393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:19:38.626 [DEBUG] [Thread-300393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:19:38.626 [INFO] [Thread-300393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:19:38.634 [DEBUG] [Thread-300393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:19:38.634 [DEBUG] [Thread-300393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:19:38.634 [DEBUG] [Thread-300393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:19:38.634 [DEBUG] [Thread-300393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:19:38.634 [DEBUG] [Thread-300393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:19:38.634 [DEBUG] [Thread-300393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:19:38.634 [DEBUG] [Thread-300393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:19:38.634 [DEBUG] [Thread-300393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] client lang: <none>
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] server lang: <none>
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] kex follows: False
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] Compression: none
2025-12-24T10:19:38.635 [DEBUG] [Thread-300393] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:19:38.697 [DEBUG] [Thread-300393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:19:38.698 [DEBUG] [Thread-300393] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:19:38.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:19:38.699 [DEBUG] [Thread-300393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:19:38.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:19:38.753 [DEBUG] [Thread-300393] [transport.py] [_log()] userauth is OK
2025-12-24T10:19:38.753 [DEBUG] [Thread-300393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:19:38.753 [DEBUG] [Thread-300393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:19:38.753 [DEBUG] [Thread-300393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:19:38.753 [DEBUG] [Thread-300393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:19:38.772 [INFO] [Thread-300393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:19:38.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:19:38.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:19:39.614 [DEBUG] [Thread-300393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:19:39.614 [DEBUG] [Thread-300393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:19:39.662 [DEBUG] [Thread-300393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:19:39.662 [DEBUG] [Thread-300393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:19:39.671 [DEBUG] [Thread-300393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:19:39.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:19:39.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')
2025-12-24T10:19:39.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:19:39.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:19:39.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:19:39.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:19:39.704 [DEBUG] [Thread-300393] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:19:40.466 [DEBUG] [Thread-300395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:19:55.613 [DEBUG] [Thread-300396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:20:09.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:20:09.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:20:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:20:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 19, 51), 14.92, 37.86, 0.0, 9.67, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:20:10.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:19:51
2025-12-24T10:20:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:20:10.707 [DEBUG] [Thread-300397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:20:10.873 [DEBUG] [Thread-300398] [transport.py] [_log()] starting thread (client mode): 0xf5702a40
2025-12-24T10:20:10.874 [DEBUG] [Thread-300398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:20:10.886 [DEBUG] [Thread-300398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:20:10.886 [INFO] [Thread-300398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:20:10.890 [DEBUG] [Thread-300398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:20:10.890 [DEBUG] [Thread-300398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:20:10.890 [DEBUG] [Thread-300398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:20:10.890 [DEBUG] [Thread-300398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:20:10.890 [DEBUG] [Thread-300398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:20:10.890 [DEBUG] [Thread-300398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:20:10.890 [DEBUG] [Thread-300398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] client lang: <none>
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] server lang: <none>
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] kex follows: False
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:20:10.891 [DEBUG] [Thread-300398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:20:10.892 [DEBUG] [Thread-300398] [transport.py] [_log()] Compression: none
2025-12-24T10:20:10.892 [DEBUG] [Thread-300398] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:20:10.922 [DEBUG] [Thread-300398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:20:10.925 [DEBUG] [Thread-300398] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:20:10.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:20:10.928 [DEBUG] [Thread-300398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:20:10.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:20:10.930 [DEBUG] [Thread-300398] [transport.py] [_log()] userauth is OK
2025-12-24T10:20:10.930 [DEBUG] [Thread-300398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:20:10.930 [DEBUG] [Thread-300398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:20:10.930 [DEBUG] [Thread-300398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:20:10.930 [DEBUG] [Thread-300398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:20:10.948 [INFO] [Thread-300398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:20:10.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:20:13.753 [DEBUG] [Thread-300398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:20:13.753 [DEBUG] [Thread-300398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:20:13.754 [DEBUG] [Thread-300398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:20:13.794 [DEBUG] [Thread-300398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:20:13.794 [DEBUG] [Thread-300398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:20:13.796 [DEBUG] [Thread-300398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:20:13.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:20:13.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:20:13.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:20:13.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:20:13.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:20:13.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:20:13.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:20:13.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:20:13.824 [DEBUG] [Thread-300398] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:20:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:20:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.347293 -999.00  +20.40   6.65     41   +6.80 1 1 1 1 1   888    0 15.94 131.81 ----- 6.7 6.7 80.6 10.8 29.1 -28.2 28.6 -26.7 26.9 -25.4 27.7 -25.5
2025-12-24T10:20:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:20:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:20:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.347293
2025-12-24T10:20:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:20:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:20:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:20:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:20:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:20:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:19:51', tmtdew=14.92, humidity=37.86, cloud=0.0, wind=9.67, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:20:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:20:13.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:20:13.945 [DEBUG] [Thread-300401] [transport.py] [_log()] starting thread (client mode): 0xf5797280
2025-12-24T10:20:13.945 [DEBUG] [Thread-300401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:20:13.960 [DEBUG] [Thread-300401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:20:13.960 [INFO] [Thread-300401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] client lang: <none>
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] server lang: <none>
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] kex follows: False
2025-12-24T10:20:13.967 [DEBUG] [Thread-300401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:20:13.968 [DEBUG] [Thread-300401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:20:13.968 [DEBUG] [Thread-300401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:20:13.968 [DEBUG] [Thread-300401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:20:13.968 [DEBUG] [Thread-300401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:20:13.968 [DEBUG] [Thread-300401] [transport.py] [_log()] Compression: none
2025-12-24T10:20:13.968 [DEBUG] [Thread-300401] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:20:14.024 [DEBUG] [Thread-300401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:20:14.025 [DEBUG] [Thread-300401] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:20:14.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:20:14.026 [DEBUG] [Thread-300401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:20:14.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:20:14.086 [DEBUG] [Thread-300401] [transport.py] [_log()] userauth is OK
2025-12-24T10:20:14.087 [DEBUG] [Thread-300401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:20:14.087 [DEBUG] [Thread-300401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:20:14.088 [DEBUG] [Thread-300401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:20:14.088 [DEBUG] [Thread-300401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:20:14.107 [INFO] [Thread-300401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:20:14.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:20:14.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:20:14.933 [DEBUG] [Thread-300401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:20:14.933 [DEBUG] [Thread-300401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:20:14.979 [DEBUG] [Thread-300401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:20:14.979 [DEBUG] [Thread-300401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:20:14.988 [DEBUG] [Thread-300401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:20:14.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:20:14.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')
2025-12-24T10:20:15.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:20:15.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:20:15.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:20:15.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:20:15.021 [DEBUG] [Thread-300401] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:20:25.772 [DEBUG] [Thread-300403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:20:30.800 [DEBUG] [Thread-300404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:20:38.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:20:38.313 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:20:40.884 [DEBUG] [Thread-300405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:20:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:20:45.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:20:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:20:46.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 20, 24), 15.09, 37.46, 0.0, 8.68, 20.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:20:46.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:20:24
2025-12-24T10:20:46.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:20:46.429 [DEBUG] [Thread-300406] [transport.py] [_log()] starting thread (client mode): 0xf5742740
2025-12-24T10:20:46.429 [DEBUG] [Thread-300406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:20:46.442 [DEBUG] [Thread-300406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:20:46.443 [INFO] [Thread-300406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] client lang: <none>
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] server lang: <none>
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] kex follows: False
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:20:46.447 [DEBUG] [Thread-300406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:20:46.448 [DEBUG] [Thread-300406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:20:46.448 [DEBUG] [Thread-300406] [transport.py] [_log()] Compression: none
2025-12-24T10:20:46.448 [DEBUG] [Thread-300406] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:20:46.478 [DEBUG] [Thread-300406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:20:46.482 [DEBUG] [Thread-300406] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:20:46.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:20:46.484 [DEBUG] [Thread-300406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:20:46.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:20:46.487 [DEBUG] [Thread-300406] [transport.py] [_log()] userauth is OK
2025-12-24T10:20:46.487 [DEBUG] [Thread-300406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:20:46.487 [DEBUG] [Thread-300406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:20:46.487 [DEBUG] [Thread-300406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:20:46.487 [DEBUG] [Thread-300406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:20:46.504 [INFO] [Thread-300406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:20:46.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:20:47.097 [DEBUG] [Thread-300406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:20:47.098 [DEBUG] [Thread-300406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:20:47.098 [DEBUG] [Thread-300406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:20:47.139 [DEBUG] [Thread-300406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:20:47.139 [DEBUG] [Thread-300406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:20:47.142 [DEBUG] [Thread-300406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:20:47.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:20:47.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:20:47.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:20:47.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:20:47.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:20:47.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:20:47.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:20:47.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:20:47.165 [DEBUG] [Thread-300406] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:20:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:20:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.347293 -999.00  +20.40   6.65     41   +6.80 1 1 1 1 1   888    0 15.94 131.81 ----- 6.7 6.7 80.6 10.8 29.1 -28.2 28.6 -26.7 26.9 -25.4 27.7 -25.5
2025-12-24T10:20:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:20:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:20:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.347293
2025-12-24T10:20:47.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:20:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:20:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:20:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:20:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:20:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:20:24', tmtdew=15.09, humidity=37.46, cloud=0.0, wind=8.68, temperature=20.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:20:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:20:47.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:20:47.289 [DEBUG] [Thread-300409] [transport.py] [_log()] starting thread (client mode): 0xf57425c0
2025-12-24T10:20:47.289 [DEBUG] [Thread-300409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:20:47.304 [DEBUG] [Thread-300409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:20:47.304 [INFO] [Thread-300409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:20:47.311 [DEBUG] [Thread-300409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:20:47.311 [DEBUG] [Thread-300409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:20:47.311 [DEBUG] [Thread-300409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:20:47.311 [DEBUG] [Thread-300409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:20:47.311 [DEBUG] [Thread-300409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:20:47.311 [DEBUG] [Thread-300409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:20:47.311 [DEBUG] [Thread-300409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:20:47.311 [DEBUG] [Thread-300409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] client lang: <none>
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] server lang: <none>
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] kex follows: False
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] Compression: none
2025-12-24T10:20:47.312 [DEBUG] [Thread-300409] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:20:47.371 [DEBUG] [Thread-300409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:20:47.372 [DEBUG] [Thread-300409] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:20:47.372 [DEBUG] [Thread-300409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:20:47.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:20:47.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:20:47.432 [DEBUG] [Thread-300409] [transport.py] [_log()] userauth is OK
2025-12-24T10:20:47.432 [DEBUG] [Thread-300409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:20:47.432 [DEBUG] [Thread-300409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:20:47.432 [DEBUG] [Thread-300409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:20:47.432 [DEBUG] [Thread-300409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:20:47.449 [INFO] [Thread-300409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:20:47.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:20:47.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:20:48.302 [DEBUG] [Thread-300409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:20:48.302 [DEBUG] [Thread-300409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:20:48.351 [DEBUG] [Thread-300409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:20:48.351 [DEBUG] [Thread-300409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:20:48.359 [DEBUG] [Thread-300409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:20:48.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:20:48.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:20:48.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:20:48.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:20:48.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:20:48.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:20:48.392 [DEBUG] [Thread-300409] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:20:55.956 [DEBUG] [Thread-300411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:21:11.105 [DEBUG] [Thread-300412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:21:18.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:21:18.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:21:18.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:21:19.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 20, 57), 15.19, 36.83, 0.0, 7.96, 20.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:21:19.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:20:57
2025-12-24T10:21:19.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:21:20.057 [DEBUG] [Thread-300413] [transport.py] [_log()] starting thread (client mode): 0xf5770940
2025-12-24T10:21:20.057 [DEBUG] [Thread-300413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:21:20.066 [DEBUG] [Thread-300413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:21:20.066 [INFO] [Thread-300413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] client lang: <none>
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] server lang: <none>
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] kex follows: False
2025-12-24T10:21:20.070 [DEBUG] [Thread-300413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:21:20.071 [DEBUG] [Thread-300413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:21:20.071 [DEBUG] [Thread-300413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:21:20.071 [DEBUG] [Thread-300413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:21:20.071 [DEBUG] [Thread-300413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:21:20.071 [DEBUG] [Thread-300413] [transport.py] [_log()] Compression: none
2025-12-24T10:21:20.071 [DEBUG] [Thread-300413] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:21:20.103 [DEBUG] [Thread-300413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:21:20.106 [DEBUG] [Thread-300413] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:21:20.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:21:20.108 [DEBUG] [Thread-300413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:21:20.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:21:20.110 [DEBUG] [Thread-300413] [transport.py] [_log()] userauth is OK
2025-12-24T10:21:20.110 [DEBUG] [Thread-300413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:21:20.110 [DEBUG] [Thread-300413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:21:20.111 [DEBUG] [Thread-300413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:21:20.111 [DEBUG] [Thread-300413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:21:20.128 [INFO] [Thread-300413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:21:20.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:21:20.933 [DEBUG] [Thread-300413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:21:20.933 [DEBUG] [Thread-300413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:21:20.933 [DEBUG] [Thread-300413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:21:20.974 [DEBUG] [Thread-300413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:21:20.974 [DEBUG] [Thread-300413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:21:20.976 [DEBUG] [Thread-300413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:21:20.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:21:20.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:21:20.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:21:20.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:21:20.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:21:20.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:21:20.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:21:20.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:21:20.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:21:20.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.347640 -999.00  +20.50   2.42     41   +6.90 1 1 1 1 1   888    0 16.69 143.56 ----- 2.4 2.4 44.9 7.4 29.5 -25.7 28.6 -27.1 27.1 -23.1 27.8 -24.7
2025-12-24T10:21:20.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:21:20.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:21:20.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.347640
2025-12-24T10:21:21.009 [DEBUG] [Thread-300413] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:21:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:21:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:21:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:21:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:21:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:21:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:20:57', tmtdew=15.19, humidity=36.83, cloud=0.0, wind=7.96, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:20:36.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:21:21.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:21:21.105 [DEBUG] [Thread-300416] [transport.py] [_log()] starting thread (client mode): 0xf57701c0
2025-12-24T10:21:21.105 [DEBUG] [Thread-300416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:21:21.124 [DEBUG] [Thread-300416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:21:21.124 [INFO] [Thread-300416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] client lang: <none>
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] server lang: <none>
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] kex follows: False
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] Compression: none
2025-12-24T10:21:21.132 [DEBUG] [Thread-300416] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:21:21.192 [DEBUG] [Thread-300416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:21:21.192 [DEBUG] [Thread-300416] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:21:21.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:21:21.193 [DEBUG] [Thread-300416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:21:21.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:21:21.252 [DEBUG] [Thread-300416] [transport.py] [_log()] userauth is OK
2025-12-24T10:21:21.252 [DEBUG] [Thread-300416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:21:21.252 [DEBUG] [Thread-300416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:21:21.252 [DEBUG] [Thread-300416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:21:21.252 [DEBUG] [Thread-300416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:21:21.273 [INFO] [Thread-300416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:21:21.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:21:21.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:21:22.091 [DEBUG] [Thread-300416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:21:22.091 [DEBUG] [Thread-300416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:21:22.131 [DEBUG] [Thread-300416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:21:22.131 [DEBUG] [Thread-300416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:21:22.140 [DEBUG] [Thread-300416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:21:22.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:21:22.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')
2025-12-24T10:21:22.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:21:22.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:21:22.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:21:22.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:21:22.181 [DEBUG] [Thread-300416] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:21:26.200 [DEBUG] [Thread-300418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:21:31.067 [DEBUG] [Thread-300419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:21:38.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:21:38.466 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:21:41.347 [DEBUG] [Thread-300420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:21:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:21:52.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:21:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:21:53.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 21, 31), 14.96, 37.36, 0.0, 6.57, 20.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:21:53.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:21:31
2025-12-24T10:21:53.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:21:53.637 [DEBUG] [Thread-300421] [transport.py] [_log()] starting thread (client mode): 0xf57425c0
2025-12-24T10:21:53.637 [DEBUG] [Thread-300421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:21:53.652 [DEBUG] [Thread-300421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:21:53.652 [INFO] [Thread-300421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] client lang: <none>
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] server lang: <none>
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] kex follows: False
2025-12-24T10:21:53.656 [DEBUG] [Thread-300421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:21:53.657 [DEBUG] [Thread-300421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:21:53.657 [DEBUG] [Thread-300421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:21:53.657 [DEBUG] [Thread-300421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:21:53.657 [DEBUG] [Thread-300421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:21:53.657 [DEBUG] [Thread-300421] [transport.py] [_log()] Compression: none
2025-12-24T10:21:53.657 [DEBUG] [Thread-300421] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:21:53.694 [DEBUG] [Thread-300421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:21:53.699 [DEBUG] [Thread-300421] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:21:53.701 [DEBUG] [Thread-300421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:21:53.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:21:53.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:21:53.705 [DEBUG] [Thread-300421] [transport.py] [_log()] userauth is OK
2025-12-24T10:21:53.705 [DEBUG] [Thread-300421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:21:53.705 [DEBUG] [Thread-300421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:21:53.705 [DEBUG] [Thread-300421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:21:53.706 [DEBUG] [Thread-300421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:21:53.744 [INFO] [Thread-300421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:21:53.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:21:54.391 [DEBUG] [Thread-300421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:21:54.391 [DEBUG] [Thread-300421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:21:54.392 [DEBUG] [Thread-300421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:21:54.433 [DEBUG] [Thread-300421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:21:54.433 [DEBUG] [Thread-300421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:21:54.435 [DEBUG] [Thread-300421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:21:54.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:21:54.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:21:54.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:21:54.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:21:54.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:21:54.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:21:54.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:21:54.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:21:54.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:21:54.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.347987 -999.00  +20.40   7.04     41   +6.80 1 1 1 1 1   888    0 16.39 142.80 ----- 7.0 7.0 151.0 13.1 29.6 -26.1 28.6 -24.8 27.3 -23.8 27.9 -24.2
2025-12-24T10:21:54.467 [DEBUG] [Thread-300421] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:21:54.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:21:54.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:21:54.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.347987
2025-12-24T10:21:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:21:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:21:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:21:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:21:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:21:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:21:31', tmtdew=14.96, humidity=37.36, cloud=0.0, wind=6.57, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:21:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:21:54.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:21:54.588 [DEBUG] [Thread-300424] [transport.py] [_log()] starting thread (client mode): 0xf5742ec0
2025-12-24T10:21:54.588 [DEBUG] [Thread-300424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:21:54.604 [DEBUG] [Thread-300424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:21:54.604 [INFO] [Thread-300424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:21:54.611 [DEBUG] [Thread-300424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:21:54.612 [DEBUG] [Thread-300424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:21:54.612 [DEBUG] [Thread-300424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:21:54.612 [DEBUG] [Thread-300424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:21:54.612 [DEBUG] [Thread-300424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:21:54.612 [DEBUG] [Thread-300424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:21:54.612 [DEBUG] [Thread-300424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:21:54.613 [DEBUG] [Thread-300424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:21:54.613 [DEBUG] [Thread-300424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:21:54.613 [DEBUG] [Thread-300424] [transport.py] [_log()] client lang: <none>
2025-12-24T10:21:54.613 [DEBUG] [Thread-300424] [transport.py] [_log()] server lang: <none>
2025-12-24T10:21:54.613 [DEBUG] [Thread-300424] [transport.py] [_log()] kex follows: False
2025-12-24T10:21:54.613 [DEBUG] [Thread-300424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:21:54.613 [DEBUG] [Thread-300424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:21:54.613 [DEBUG] [Thread-300424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:21:54.614 [DEBUG] [Thread-300424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:21:54.614 [DEBUG] [Thread-300424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:21:54.614 [DEBUG] [Thread-300424] [transport.py] [_log()] Compression: none
2025-12-24T10:21:54.614 [DEBUG] [Thread-300424] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:21:54.668 [DEBUG] [Thread-300424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:21:54.669 [DEBUG] [Thread-300424] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:21:54.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:21:54.670 [DEBUG] [Thread-300424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:21:54.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:21:54.724 [DEBUG] [Thread-300424] [transport.py] [_log()] userauth is OK
2025-12-24T10:21:54.725 [DEBUG] [Thread-300424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:21:54.725 [DEBUG] [Thread-300424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:21:54.725 [DEBUG] [Thread-300424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:21:54.725 [DEBUG] [Thread-300424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:21:54.745 [INFO] [Thread-300424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:21:54.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:21:54.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:21:55.591 [DEBUG] [Thread-300424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:21:55.591 [DEBUG] [Thread-300424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:21:55.630 [DEBUG] [Thread-300424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:21:55.631 [DEBUG] [Thread-300424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:21:55.639 [DEBUG] [Thread-300424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:21:55.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:21:55.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:21:55.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:21:55.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:21:55.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:21:55.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:21:55.673 [DEBUG] [Thread-300424] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:21:56.411 [DEBUG] [Thread-300426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:22:11.492 [DEBUG] [Thread-300427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:22:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:22:25.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:22:25.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:22:26.551 [DEBUG] [Thread-300428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:22:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 22, 3), 14.93, 37.46, 0.0, 7.39, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:22:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:22:03
2025-12-24T10:22:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:22:27.370 [DEBUG] [Thread-300429] [transport.py] [_log()] starting thread (client mode): 0xf5701a80
2025-12-24T10:22:27.370 [DEBUG] [Thread-300429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:22:27.380 [DEBUG] [Thread-300429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:22:27.380 [INFO] [Thread-300429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:22:27.385 [DEBUG] [Thread-300429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:22:27.385 [DEBUG] [Thread-300429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:22:27.385 [DEBUG] [Thread-300429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] client lang: <none>
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] server lang: <none>
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] kex follows: False
2025-12-24T10:22:27.386 [DEBUG] [Thread-300429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:22:27.387 [DEBUG] [Thread-300429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:22:27.387 [DEBUG] [Thread-300429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:22:27.387 [DEBUG] [Thread-300429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:22:27.387 [DEBUG] [Thread-300429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:22:27.387 [DEBUG] [Thread-300429] [transport.py] [_log()] Compression: none
2025-12-24T10:22:27.387 [DEBUG] [Thread-300429] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:22:27.424 [DEBUG] [Thread-300429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:22:27.429 [DEBUG] [Thread-300429] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:22:27.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:22:27.433 [DEBUG] [Thread-300429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:22:27.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:22:27.438 [DEBUG] [Thread-300429] [transport.py] [_log()] userauth is OK
2025-12-24T10:22:27.438 [DEBUG] [Thread-300429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:22:27.439 [DEBUG] [Thread-300429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:22:27.439 [DEBUG] [Thread-300429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:22:27.439 [DEBUG] [Thread-300429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:22:27.476 [INFO] [Thread-300429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:22:27.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:22:28.058 [DEBUG] [Thread-300429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:22:28.058 [DEBUG] [Thread-300429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:22:28.059 [DEBUG] [Thread-300429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:22:28.099 [DEBUG] [Thread-300429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:22:28.099 [DEBUG] [Thread-300429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:22:28.102 [DEBUG] [Thread-300429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:22:28.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:22:28.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:22:28.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:22:28.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:22:28.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:22:28.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:22:28.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:22:28.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:22:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:22:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.348335 -999.00  +20.40   9.11     41   +6.80 1 1 1 1 1   888    0 16.67 151.03 ----- 9.1 9.1 63.6 15.0 29.5 -26.6 28.8 -25.2 27.3 -24.3 28.0 -25.1
2025-12-24T10:22:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:22:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:22:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.348335
2025-12-24T10:22:28.134 [DEBUG] [Thread-300429] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:22:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:22:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:22:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:22:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:22:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:22:28.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:22:03', tmtdew=14.93, humidity=37.46, cloud=0.0, wind=7.39, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:21:36.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:22:28.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:22:28.232 [DEBUG] [Thread-300432] [transport.py] [_log()] starting thread (client mode): 0xf5794400
2025-12-24T10:22:28.232 [DEBUG] [Thread-300432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:22:28.248 [DEBUG] [Thread-300432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:22:28.248 [INFO] [Thread-300432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:22:28.255 [DEBUG] [Thread-300432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:22:28.255 [DEBUG] [Thread-300432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:22:28.255 [DEBUG] [Thread-300432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:22:28.255 [DEBUG] [Thread-300432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] client lang: <none>
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] server lang: <none>
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] kex follows: False
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] Compression: none
2025-12-24T10:22:28.256 [DEBUG] [Thread-300432] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:22:28.316 [DEBUG] [Thread-300432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:22:28.317 [DEBUG] [Thread-300432] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:22:28.317 [DEBUG] [Thread-300432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:22:28.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:22:28.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:22:28.376 [DEBUG] [Thread-300432] [transport.py] [_log()] userauth is OK
2025-12-24T10:22:28.376 [DEBUG] [Thread-300432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:22:28.376 [DEBUG] [Thread-300432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:22:28.377 [DEBUG] [Thread-300432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:22:28.377 [DEBUG] [Thread-300432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:22:28.395 [INFO] [Thread-300432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:22:28.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:22:28.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:22:29.248 [DEBUG] [Thread-300432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:22:29.248 [DEBUG] [Thread-300432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:22:29.296 [DEBUG] [Thread-300432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:22:29.296 [DEBUG] [Thread-300432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:22:29.305 [DEBUG] [Thread-300432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:22:29.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:22:29.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:22:29.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:22:29.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:22:29.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:22:29.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:22:29.338 [DEBUG] [Thread-300432] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:22:31.389 [DEBUG] [Thread-300434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:22:38.612 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:22:38.613 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:22:41.617 [DEBUG] [Thread-300435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:22:56.723 [DEBUG] [Thread-300436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:22:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:22:59.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:22:59.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
2025-12-24T10:23:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 22, 36), 14.96, 37.46, 0.0, 7.76, 20.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:23:00.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:22:36
2025-12-24T10:23:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:23:00.612 [DEBUG] [Thread-300437] [transport.py] [_log()] starting thread (client mode): 0xf5773340
2025-12-24T10:23:00.612 [DEBUG] [Thread-300437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:23:00.619 [DEBUG] [Thread-300437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:23:00.619 [INFO] [Thread-300437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:23:00.623 [DEBUG] [Thread-300437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:23:00.623 [DEBUG] [Thread-300437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:23:00.623 [DEBUG] [Thread-300437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:23:00.623 [DEBUG] [Thread-300437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:23:00.623 [DEBUG] [Thread-300437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:23:00.623 [DEBUG] [Thread-300437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:23:00.623 [DEBUG] [Thread-300437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] client lang: <none>
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] server lang: <none>
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] kex follows: False
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:23:00.624 [DEBUG] [Thread-300437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:23:00.625 [DEBUG] [Thread-300437] [transport.py] [_log()] Compression: none
2025-12-24T10:23:00.625 [DEBUG] [Thread-300437] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:23:00.659 [DEBUG] [Thread-300437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:23:00.664 [DEBUG] [Thread-300437] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:23:00.666 [DEBUG] [Thread-300437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:23:00.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:23:00.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:23:00.701 [DEBUG] [Thread-300437] [transport.py] [_log()] userauth is OK
2025-12-24T10:23:00.701 [DEBUG] [Thread-300437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:23:00.701 [DEBUG] [Thread-300437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:23:00.702 [DEBUG] [Thread-300437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:23:00.702 [DEBUG] [Thread-300437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:23:00.740 [INFO] [Thread-300437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:23:00.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:23:01.394 [DEBUG] [Thread-300437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:23:01.394 [DEBUG] [Thread-300437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:23:01.404 [DEBUG] [Thread-300437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:23:01.435 [DEBUG] [Thread-300437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:23:01.435 [DEBUG] [Thread-300437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:23:01.438 [DEBUG] [Thread-300437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:23:01.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:23:01.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:23:01.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:23:01.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:23:01.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:23:01.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:23:01.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:23:01.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:23:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:23:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.348682 -999.00  +20.40   7.44     41   +6.90 1 1 1 1 1   888    0 16.68 149.57 ----- 7.4 7.4 102.2 11.3 29.4 -28.5 28.8 -25.4 27.3 -24.7 28.0 -25.1
2025-12-24T10:23:01.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:23:01.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:23:01.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.348682
2025-12-24T10:23:01.464 [DEBUG] [Thread-300437] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:23:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:23:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:23:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:23:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:23:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:23:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:22:36', tmtdew=14.96, humidity=37.46, cloud=0.0, wind=7.76, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:22:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:23:01.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:23:01.576 [DEBUG] [Thread-300440] [transport.py] [_log()] starting thread (client mode): 0xf5742770
2025-12-24T10:23:01.576 [DEBUG] [Thread-300440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:23:01.591 [DEBUG] [Thread-300440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:23:01.591 [INFO] [Thread-300440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] client lang: <none>
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] server lang: <none>
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] kex follows: False
2025-12-24T10:23:01.598 [DEBUG] [Thread-300440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:23:01.599 [DEBUG] [Thread-300440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:23:01.599 [DEBUG] [Thread-300440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:23:01.599 [DEBUG] [Thread-300440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:23:01.599 [DEBUG] [Thread-300440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:23:01.599 [DEBUG] [Thread-300440] [transport.py] [_log()] Compression: none
2025-12-24T10:23:01.599 [DEBUG] [Thread-300440] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:23:01.655 [DEBUG] [Thread-300440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:23:01.655 [DEBUG] [Thread-300440] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:23:01.655 [DEBUG] [Thread-300440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:23:01.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:23:01.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:23:01.712 [DEBUG] [Thread-300440] [transport.py] [_log()] userauth is OK
2025-12-24T10:23:01.712 [DEBUG] [Thread-300440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:23:01.712 [DEBUG] [Thread-300440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:23:01.712 [DEBUG] [Thread-300440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:23:01.712 [DEBUG] [Thread-300440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:23:01.726 [INFO] [Thread-300440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:23:01.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:23:01.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:23:02.555 [DEBUG] [Thread-300440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:23:02.555 [DEBUG] [Thread-300440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:23:02.603 [DEBUG] [Thread-300440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:23:02.603 [DEBUG] [Thread-300440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:23:02.612 [DEBUG] [Thread-300440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:23:02.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:23:02.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')
2025-12-24T10:23:02.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:23:02.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:23:02.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:23:02.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:23:02.644 [DEBUG] [Thread-300440] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:23:11.764 [DEBUG] [Thread-300442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:23:26.876 [DEBUG] [Thread-300443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:23:31.627 [DEBUG] [Thread-300444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:23:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:23:32.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:23:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:23:33.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 23, 9), 14.64, 38.19, 0.0, 7.73, 19.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:23:33.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:23:09
2025-12-24T10:23:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:23:34.348 [DEBUG] [Thread-300445] [transport.py] [_log()] starting thread (client mode): 0xf5796f20
2025-12-24T10:23:34.349 [DEBUG] [Thread-300445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:23:34.362 [DEBUG] [Thread-300445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:23:34.362 [INFO] [Thread-300445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] client lang: <none>
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] server lang: <none>
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] kex follows: False
2025-12-24T10:23:34.367 [DEBUG] [Thread-300445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:23:34.368 [DEBUG] [Thread-300445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:23:34.368 [DEBUG] [Thread-300445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:23:34.368 [DEBUG] [Thread-300445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:23:34.368 [DEBUG] [Thread-300445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:23:34.368 [DEBUG] [Thread-300445] [transport.py] [_log()] Compression: none
2025-12-24T10:23:34.368 [DEBUG] [Thread-300445] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:23:34.392 [DEBUG] [Thread-300445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:23:34.395 [DEBUG] [Thread-300445] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:23:34.396 [DEBUG] [Thread-300445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:23:34.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:23:34.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:23:34.400 [DEBUG] [Thread-300445] [transport.py] [_log()] userauth is OK
2025-12-24T10:23:34.400 [DEBUG] [Thread-300445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:23:34.400 [DEBUG] [Thread-300445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:23:34.400 [DEBUG] [Thread-300445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:23:34.400 [DEBUG] [Thread-300445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:23:34.412 [INFO] [Thread-300445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:23:34.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:23:35.042 [DEBUG] [Thread-300445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:23:35.042 [DEBUG] [Thread-300445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:23:35.042 [DEBUG] [Thread-300445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:23:35.083 [DEBUG] [Thread-300445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:23:35.083 [DEBUG] [Thread-300445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:23:35.085 [DEBUG] [Thread-300445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:23:35.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:23:35.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:23:35.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:23:35.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:23:35.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:23:35.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:23:35.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:23:35.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:23:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:23:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.349029 -999.00  +20.30   7.77     42   +7.00 1 1 1 1 1   888    0 16.66 137.87 ----- 7.8 7.8 116.8 10.9 29.6 -25.8 28.8 -25.7 27.5 -24.1 28.1 -24.9
2025-12-24T10:23:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:23:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:23:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.349029
2025-12-24T10:23:35.113 [DEBUG] [Thread-300445] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:23:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:23:35.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:23:35.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:23:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:23:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:23:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:23:09', tmtdew=14.64, humidity=38.19, cloud=0.0, wind=7.73, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:22:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:23:35.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:23:35.213 [DEBUG] [Thread-300448] [transport.py] [_log()] starting thread (client mode): 0xf574c2e0
2025-12-24T10:23:35.213 [DEBUG] [Thread-300448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:23:35.230 [DEBUG] [Thread-300448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:23:35.230 [INFO] [Thread-300448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] client lang: <none>
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] server lang: <none>
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] kex follows: False
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] Compression: none
2025-12-24T10:23:35.237 [DEBUG] [Thread-300448] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:23:35.303 [DEBUG] [Thread-300448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:23:35.303 [DEBUG] [Thread-300448] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:23:35.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:23:35.303 [DEBUG] [Thread-300448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:23:35.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:23:35.360 [DEBUG] [Thread-300448] [transport.py] [_log()] userauth is OK
2025-12-24T10:23:35.360 [DEBUG] [Thread-300448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:23:35.360 [DEBUG] [Thread-300448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:23:35.360 [DEBUG] [Thread-300448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:23:35.360 [DEBUG] [Thread-300448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:23:35.374 [INFO] [Thread-300448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:23:35.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:23:35.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:23:36.221 [DEBUG] [Thread-300448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:23:36.221 [DEBUG] [Thread-300448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:23:36.269 [DEBUG] [Thread-300448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:23:36.269 [DEBUG] [Thread-300448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:23:36.277 [DEBUG] [Thread-300448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:23:36.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:23:36.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:23:36.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:23:36.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:23:36.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:23:36.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:23:36.314 [DEBUG] [Thread-300448] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:23:38.755 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:23:38.756 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:23:41.935 [DEBUG] [Thread-300450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:23:57.054 [DEBUG] [Thread-300451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:24:06.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:24:06.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:24:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:24:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 23, 42), 14.51, 38.5, 0.0, 8.15, 19.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:24:07.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:23:42
2025-12-24T10:24:07.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:24:08.029 [DEBUG] [Thread-300452] [transport.py] [_log()] starting thread (client mode): 0xf5773280
2025-12-24T10:24:08.029 [DEBUG] [Thread-300452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:24:08.031 [DEBUG] [Thread-300452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:24:08.031 [INFO] [Thread-300452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] client lang: <none>
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] server lang: <none>
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] kex follows: False
2025-12-24T10:24:08.035 [DEBUG] [Thread-300452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:24:08.036 [DEBUG] [Thread-300452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:24:08.036 [DEBUG] [Thread-300452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:24:08.036 [DEBUG] [Thread-300452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:24:08.036 [DEBUG] [Thread-300452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:24:08.036 [DEBUG] [Thread-300452] [transport.py] [_log()] Compression: none
2025-12-24T10:24:08.036 [DEBUG] [Thread-300452] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:24:08.061 [DEBUG] [Thread-300452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:24:08.065 [DEBUG] [Thread-300452] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:24:08.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:24:08.070 [DEBUG] [Thread-300452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:24:08.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:24:08.105 [DEBUG] [Thread-300452] [transport.py] [_log()] userauth is OK
2025-12-24T10:24:08.106 [DEBUG] [Thread-300452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:24:08.107 [DEBUG] [Thread-300452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:24:08.107 [DEBUG] [Thread-300452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:24:08.107 [DEBUG] [Thread-300452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:24:08.146 [INFO] [Thread-300452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:24:08.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:24:08.782 [DEBUG] [Thread-300452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:24:08.782 [DEBUG] [Thread-300452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:24:08.784 [DEBUG] [Thread-300452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:24:08.823 [DEBUG] [Thread-300452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:24:08.823 [DEBUG] [Thread-300452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:24:08.827 [DEBUG] [Thread-300452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:24:08.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:24:08.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:24:08.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:24:08.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:24:08.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:24:08.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:24:08.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:24:08.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:24:08.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:24:08.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.349376 -999.00  +20.10   7.89     42   +7.00 1 1 1 1 1   888    0 16.20 138.50 ----- 7.9 7.9 103.7 12.7 29.4 -29.4 28.9 -26.4 27.5 -24.5 28.0 -26.0
2025-12-24T10:24:08.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:24:08.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:24:08.859 [DEBUG] [Thread-300452] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:24:08.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.349376
2025-12-24T10:24:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:24:08.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:24:08.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:24:08.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:24:08.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:24:08.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:23:42', tmtdew=14.51, humidity=38.5, cloud=0.0, wind=8.15, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:23:06.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:24:08.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:24:08.962 [DEBUG] [Thread-300455] [transport.py] [_log()] starting thread (client mode): 0xf5770a00
2025-12-24T10:24:08.962 [DEBUG] [Thread-300455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:24:08.981 [DEBUG] [Thread-300455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:24:08.981 [INFO] [Thread-300455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:24:08.988 [DEBUG] [Thread-300455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] client lang: <none>
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] server lang: <none>
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] kex follows: False
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:24:08.989 [DEBUG] [Thread-300455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:24:08.990 [DEBUG] [Thread-300455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:24:08.990 [DEBUG] [Thread-300455] [transport.py] [_log()] Compression: none
2025-12-24T10:24:08.990 [DEBUG] [Thread-300455] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:24:09.048 [DEBUG] [Thread-300455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:24:09.049 [DEBUG] [Thread-300455] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:24:09.049 [DEBUG] [Thread-300455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:24:09.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:24:09.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:24:09.108 [DEBUG] [Thread-300455] [transport.py] [_log()] userauth is OK
2025-12-24T10:24:09.109 [DEBUG] [Thread-300455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:24:09.109 [DEBUG] [Thread-300455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:24:09.109 [DEBUG] [Thread-300455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:24:09.109 [DEBUG] [Thread-300455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:24:09.127 [INFO] [Thread-300455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:24:09.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:24:09.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:24:09.958 [DEBUG] [Thread-300455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:24:09.958 [DEBUG] [Thread-300455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:24:09.996 [DEBUG] [Thread-300455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:24:09.997 [DEBUG] [Thread-300455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:24:10.005 [DEBUG] [Thread-300455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:24:10.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:24:10.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:24:10.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:24:10.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:24:10.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:24:10.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:24:10.038 [DEBUG] [Thread-300455] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:24:12.117 [DEBUG] [Thread-300457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:24:27.315 [DEBUG] [Thread-300458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:24:31.946 [DEBUG] [Thread-300459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:24:38.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:24:38.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:24:40.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:24:40.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:24:40.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:24:41.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 24, 15), 14.62, 38.23, 0.0, 6.67, 19.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:24:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:24:15
2025-12-24T10:24:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:24:41.719 [DEBUG] [Thread-300460] [transport.py] [_log()] starting thread (client mode): 0xfabc6a40
2025-12-24T10:24:41.720 [DEBUG] [Thread-300460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:24:41.733 [DEBUG] [Thread-300460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:24:41.733 [INFO] [Thread-300460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] client lang: <none>
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] server lang: <none>
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] kex follows: False
2025-12-24T10:24:41.739 [DEBUG] [Thread-300460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:24:41.740 [DEBUG] [Thread-300460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:24:41.740 [DEBUG] [Thread-300460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:24:41.740 [DEBUG] [Thread-300460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:24:41.740 [DEBUG] [Thread-300460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:24:41.740 [DEBUG] [Thread-300460] [transport.py] [_log()] Compression: none
2025-12-24T10:24:41.740 [DEBUG] [Thread-300460] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:24:41.772 [DEBUG] [Thread-300460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:24:41.778 [DEBUG] [Thread-300460] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:24:41.780 [DEBUG] [Thread-300460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:24:41.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:24:41.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:24:41.785 [DEBUG] [Thread-300460] [transport.py] [_log()] userauth is OK
2025-12-24T10:24:41.786 [DEBUG] [Thread-300460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:24:41.786 [DEBUG] [Thread-300460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:24:41.786 [DEBUG] [Thread-300460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:24:41.786 [DEBUG] [Thread-300460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:24:41.824 [INFO] [Thread-300460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:24:41.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:24:42.398 [DEBUG] [Thread-300462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:24:42.441 [DEBUG] [Thread-300460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:24:42.442 [DEBUG] [Thread-300460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:24:42.443 [DEBUG] [Thread-300460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:24:42.483 [DEBUG] [Thread-300460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:24:42.483 [DEBUG] [Thread-300460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:24:42.486 [DEBUG] [Thread-300460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:24:42.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:24:42.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:24:42.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:24:42.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:24:42.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:24:42.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:24:42.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:24:42.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:24:42.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:24:42.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.350071 -999.00  +19.90   4.47     42   +6.90 1 1 1 1 1   888    0 16.71 149.17 ----- 4.5 4.5 83.2 13.8 29.4 -26.1 28.9 -25.7 27.6 -25.5 28.2 -25.4
2025-12-24T10:24:42.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:24:42.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:24:42.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.350071
2025-12-24T10:24:42.519 [DEBUG] [Thread-300460] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:24:42.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:24:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:24:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:24:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:24:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:24:42.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:24:15', tmtdew=14.62, humidity=38.23, cloud=0.0, wind=6.67, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:24:06.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:24:42.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:24:42.651 [DEBUG] [Thread-300464] [transport.py] [_log()] starting thread (client mode): 0xf574e830
2025-12-24T10:24:42.651 [DEBUG] [Thread-300464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:24:42.665 [DEBUG] [Thread-300464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:24:42.666 [INFO] [Thread-300464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] client lang: <none>
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] server lang: <none>
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] kex follows: False
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] Compression: none
2025-12-24T10:24:42.673 [DEBUG] [Thread-300464] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:24:42.731 [DEBUG] [Thread-300464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:24:42.732 [DEBUG] [Thread-300464] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:24:42.732 [DEBUG] [Thread-300464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:24:42.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:24:42.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:24:42.787 [DEBUG] [Thread-300464] [transport.py] [_log()] userauth is OK
2025-12-24T10:24:42.787 [DEBUG] [Thread-300464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:24:42.787 [DEBUG] [Thread-300464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:24:42.788 [DEBUG] [Thread-300464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:24:42.788 [DEBUG] [Thread-300464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:24:42.802 [INFO] [Thread-300464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:24:42.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:24:42.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:24:43.646 [DEBUG] [Thread-300464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:24:43.646 [DEBUG] [Thread-300464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:24:43.693 [DEBUG] [Thread-300464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:24:43.694 [DEBUG] [Thread-300464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:24:43.703 [DEBUG] [Thread-300464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:24:43.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:24:43.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:24:43.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:24:43.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:24:43.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:24:43.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:24:43.740 [DEBUG] [Thread-300464] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:24:57.458 [DEBUG] [Thread-300466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:25:12.615 [DEBUG] [Thread-300467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:25:13.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:25:13.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:25:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:25:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 24, 48), 14.43, 38.73, 0.0, 9.03, 19.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:25:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:24:48
2025-12-24T10:25:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:25:15.121 [DEBUG] [Thread-300468] [transport.py] [_log()] starting thread (client mode): 0xf5700b80
2025-12-24T10:25:15.122 [DEBUG] [Thread-300468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:25:15.134 [DEBUG] [Thread-300468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:25:15.134 [INFO] [Thread-300468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:25:15.139 [DEBUG] [Thread-300468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:25:15.139 [DEBUG] [Thread-300468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:25:15.139 [DEBUG] [Thread-300468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:25:15.139 [DEBUG] [Thread-300468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:25:15.139 [DEBUG] [Thread-300468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:25:15.139 [DEBUG] [Thread-300468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:25:15.140 [DEBUG] [Thread-300468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:25:15.140 [DEBUG] [Thread-300468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:25:15.140 [DEBUG] [Thread-300468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:25:15.140 [DEBUG] [Thread-300468] [transport.py] [_log()] client lang: <none>
2025-12-24T10:25:15.140 [DEBUG] [Thread-300468] [transport.py] [_log()] server lang: <none>
2025-12-24T10:25:15.140 [DEBUG] [Thread-300468] [transport.py] [_log()] kex follows: False
2025-12-24T10:25:15.140 [DEBUG] [Thread-300468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:25:15.141 [DEBUG] [Thread-300468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:25:15.141 [DEBUG] [Thread-300468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:25:15.141 [DEBUG] [Thread-300468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:25:15.141 [DEBUG] [Thread-300468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:25:15.141 [DEBUG] [Thread-300468] [transport.py] [_log()] Compression: none
2025-12-24T10:25:15.141 [DEBUG] [Thread-300468] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:25:15.179 [DEBUG] [Thread-300468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:25:15.183 [DEBUG] [Thread-300468] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:25:15.185 [DEBUG] [Thread-300468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:25:15.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:25:15.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:25:15.190 [DEBUG] [Thread-300468] [transport.py] [_log()] userauth is OK
2025-12-24T10:25:15.190 [DEBUG] [Thread-300468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:25:15.191 [DEBUG] [Thread-300468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:25:15.191 [DEBUG] [Thread-300468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:25:15.191 [DEBUG] [Thread-300468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:25:15.218 [INFO] [Thread-300468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:25:15.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:25:15.863 [DEBUG] [Thread-300468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:25:15.872 [DEBUG] [Thread-300468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:25:15.874 [DEBUG] [Thread-300468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:25:15.904 [DEBUG] [Thread-300468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:25:15.904 [DEBUG] [Thread-300468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:25:15.909 [DEBUG] [Thread-300468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:25:15.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:25:15.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:25:15.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:25:15.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:25:15.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:25:15.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:25:15.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:25:15.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:25:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:25:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.350417 -999.00  +19.90  10.28     43   +7.00 1 1 1 1 1   888    0 16.58 145.61 ----- 10.3 10.3 120.0 12.0 29.5 -25.9 28.9 -25.3 27.6 -24.7 28.3 -24.5
2025-12-24T10:25:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:25:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:25:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.350417
2025-12-24T10:25:15.945 [DEBUG] [Thread-300468] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:25:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:25:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:25:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:25:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:25:15.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:25:15.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:24:48', tmtdew=14.43, humidity=38.73, cloud=0.0, wind=9.03, temperature=19.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:24:36.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:25:16.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:25:16.061 [DEBUG] [Thread-300471] [transport.py] [_log()] starting thread (client mode): 0xf574e890
2025-12-24T10:25:16.061 [DEBUG] [Thread-300471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:25:16.076 [DEBUG] [Thread-300471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:25:16.076 [INFO] [Thread-300471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:25:16.084 [DEBUG] [Thread-300471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:25:16.084 [DEBUG] [Thread-300471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:25:16.084 [DEBUG] [Thread-300471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:25:16.084 [DEBUG] [Thread-300471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:25:16.084 [DEBUG] [Thread-300471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:25:16.084 [DEBUG] [Thread-300471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:25:16.084 [DEBUG] [Thread-300471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:25:16.084 [DEBUG] [Thread-300471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] client lang: <none>
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] server lang: <none>
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] kex follows: False
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] Compression: none
2025-12-24T10:25:16.085 [DEBUG] [Thread-300471] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:25:16.144 [DEBUG] [Thread-300471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:25:16.145 [DEBUG] [Thread-300471] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:25:16.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:25:16.146 [DEBUG] [Thread-300471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:25:16.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:25:16.204 [DEBUG] [Thread-300471] [transport.py] [_log()] userauth is OK
2025-12-24T10:25:16.205 [DEBUG] [Thread-300471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:25:16.205 [DEBUG] [Thread-300471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:25:16.205 [DEBUG] [Thread-300471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:25:16.205 [DEBUG] [Thread-300471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:25:16.229 [INFO] [Thread-300471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:25:16.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:25:16.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:25:17.060 [DEBUG] [Thread-300471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:25:17.060 [DEBUG] [Thread-300471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:25:17.099 [DEBUG] [Thread-300471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:25:17.099 [DEBUG] [Thread-300471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:25:17.108 [DEBUG] [Thread-300471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:25:17.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:25: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')
2025-12-24T10:25:17.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:25:17.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:25:17.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:25:17.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:25:17.146 [DEBUG] [Thread-300471] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:25:27.725 [DEBUG] [Thread-300473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:25:32.242 [DEBUG] [Thread-300474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:25:39.042 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:25:39.043 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:25:42.845 [DEBUG] [Thread-300475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:25:47.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:25:47.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:25:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:25:48.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 25, 20), 14.51, 38.55, 0.0, 10.34, 19.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:25:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:25:20
2025-12-24T10:25:48.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:25:48.396 [DEBUG] [Thread-300476] [transport.py] [_log()] starting thread (client mode): 0xf574cd30
2025-12-24T10:25:48.397 [DEBUG] [Thread-300476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:25:48.410 [DEBUG] [Thread-300476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:25:48.410 [INFO] [Thread-300476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:25:48.413 [DEBUG] [Thread-300476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] client lang: <none>
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] server lang: <none>
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] kex follows: False
2025-12-24T10:25:48.414 [DEBUG] [Thread-300476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:25:48.415 [DEBUG] [Thread-300476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:25:48.415 [DEBUG] [Thread-300476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:25:48.415 [DEBUG] [Thread-300476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:25:48.415 [DEBUG] [Thread-300476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:25:48.415 [DEBUG] [Thread-300476] [transport.py] [_log()] Compression: none
2025-12-24T10:25:48.415 [DEBUG] [Thread-300476] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:25:48.449 [DEBUG] [Thread-300476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:25:48.454 [DEBUG] [Thread-300476] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:25:48.457 [DEBUG] [Thread-300476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:25:48.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:25:48.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:25:48.462 [DEBUG] [Thread-300476] [transport.py] [_log()] userauth is OK
2025-12-24T10:25:48.462 [DEBUG] [Thread-300476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:25:48.462 [DEBUG] [Thread-300476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:25:48.462 [DEBUG] [Thread-300476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:25:48.462 [DEBUG] [Thread-300476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:25:48.490 [INFO] [Thread-300476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:25:48.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:25:49.286 [DEBUG] [Thread-300476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:25:49.286 [DEBUG] [Thread-300476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:25:49.296 [DEBUG] [Thread-300476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:25:49.327 [DEBUG] [Thread-300476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:25:49.327 [DEBUG] [Thread-300476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:25:49.330 [DEBUG] [Thread-300476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:25:49.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:25:49.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:25:49.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:25:49.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:25:49.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:25:49.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:25:49.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:25:49.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:25:49.356 [DEBUG] [Thread-300476] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:25:49.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:25:49.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.350765 -999.00  +19.90   6.08     42   +6.90 1 1 1 1 1   888    0 16.87 155.64 ----- 6.1 6.1 97.6 9.7 29.5 -26.0 29.0 -26.2 27.7 -24.1 28.3 -25.0
2025-12-24T10:25:49.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:25:49.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:25:49.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.350765
2025-12-24T10:25:49.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:25:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:25:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:25:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:25:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:25:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:25:20', tmtdew=14.51, humidity=38.55, cloud=0.0, wind=10.34, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:25:06.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:25:49.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:25:49.479 [DEBUG] [Thread-300479] [transport.py] [_log()] starting thread (client mode): 0xf5743ac0
2025-12-24T10:25:49.479 [DEBUG] [Thread-300479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:25:49.493 [DEBUG] [Thread-300479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:25:49.493 [INFO] [Thread-300479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] client lang: <none>
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] server lang: <none>
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] kex follows: False
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:25:49.501 [DEBUG] [Thread-300479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:25:49.502 [DEBUG] [Thread-300479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:25:49.502 [DEBUG] [Thread-300479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:25:49.502 [DEBUG] [Thread-300479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:25:49.502 [DEBUG] [Thread-300479] [transport.py] [_log()] Compression: none
2025-12-24T10:25:49.502 [DEBUG] [Thread-300479] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:25:49.560 [DEBUG] [Thread-300479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:25:49.561 [DEBUG] [Thread-300479] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:25:49.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:25:49.562 [DEBUG] [Thread-300479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:25:49.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:25:49.616 [DEBUG] [Thread-300479] [transport.py] [_log()] userauth is OK
2025-12-24T10:25:49.616 [DEBUG] [Thread-300479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:25:49.617 [DEBUG] [Thread-300479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:25:49.617 [DEBUG] [Thread-300479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:25:49.617 [DEBUG] [Thread-300479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:25:49.635 [INFO] [Thread-300479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:25:49.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:25:49.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:25:50.455 [DEBUG] [Thread-300479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:25:50.455 [DEBUG] [Thread-300479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:25:50.493 [DEBUG] [Thread-300479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:25:50.493 [DEBUG] [Thread-300479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:25:50.501 [DEBUG] [Thread-300479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:25:50.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:25:50.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:25:50.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:25:50.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:25:50.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:25:50.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:25:50.534 [DEBUG] [Thread-300479] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:25:57.926 [DEBUG] [Thread-300481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:26:13.069 [DEBUG] [Thread-300482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:26:20.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:26:20.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:26:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:26:21.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 25, 54), 14.55, 38.45, 0.0, 6.71, 19.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:26:21.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:25:54
2025-12-24T10:26:22.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:26:22.203 [DEBUG] [Thread-300483] [transport.py] [_log()] starting thread (client mode): 0xf574c6d0
2025-12-24T10:26:22.204 [DEBUG] [Thread-300483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:26:22.213 [DEBUG] [Thread-300483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:26:22.213 [INFO] [Thread-300483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] client lang: <none>
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] server lang: <none>
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] kex follows: False
2025-12-24T10:26:22.218 [DEBUG] [Thread-300483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:26:22.219 [DEBUG] [Thread-300483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:26:22.219 [DEBUG] [Thread-300483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:26:22.219 [DEBUG] [Thread-300483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:26:22.219 [DEBUG] [Thread-300483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:26:22.219 [DEBUG] [Thread-300483] [transport.py] [_log()] Compression: none
2025-12-24T10:26:22.219 [DEBUG] [Thread-300483] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:26:22.241 [DEBUG] [Thread-300483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:26:22.245 [DEBUG] [Thread-300483] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:26:22.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:26:22.248 [DEBUG] [Thread-300483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:26:22.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:26:22.284 [DEBUG] [Thread-300483] [transport.py] [_log()] userauth is OK
2025-12-24T10:26:22.284 [DEBUG] [Thread-300483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:26:22.285 [DEBUG] [Thread-300483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:26:22.285 [DEBUG] [Thread-300483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:26:22.285 [DEBUG] [Thread-300483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:26:22.314 [INFO] [Thread-300483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:26:22.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:26:22.971 [DEBUG] [Thread-300483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:26:22.971 [DEBUG] [Thread-300483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:26:22.972 [DEBUG] [Thread-300483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:26:23.012 [DEBUG] [Thread-300483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:26:23.012 [DEBUG] [Thread-300483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:26:23.014 [DEBUG] [Thread-300483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:26:23.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:26:23.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:26:23.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:26:23.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:26:23.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:26:23.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:26:23.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:26:23.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:26:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:26:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.351112 -999.00  +19.80   9.71     43   +6.90 1 1 1 1 1   888    0 16.94 159.83 ----- 9.7 9.7 66.2 12.8 29.1 -27.8 29.0 -25.7 27.6 -26.4 28.1 -25.9
2025-12-24T10:26:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:26:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:26:23.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.351112
2025-12-24T10:26:23.046 [DEBUG] [Thread-300483] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:26:23.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:26:23.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:26:23.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:26:23.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:26:23.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:26:23.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:25:54', tmtdew=14.55, humidity=38.45, cloud=0.0, wind=6.71, temperature=19.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:25:36.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:26:23.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:26:23.157 [DEBUG] [Thread-300486] [transport.py] [_log()] starting thread (client mode): 0xf5700ee0
2025-12-24T10:26:23.157 [DEBUG] [Thread-300486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:26:23.172 [DEBUG] [Thread-300486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:26:23.172 [INFO] [Thread-300486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] client lang: <none>
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] server lang: <none>
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] kex follows: False
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] Compression: none
2025-12-24T10:26:23.179 [DEBUG] [Thread-300486] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:26:23.233 [DEBUG] [Thread-300486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:26:23.234 [DEBUG] [Thread-300486] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:26:23.234 [DEBUG] [Thread-300486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:26:23.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:26:23.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:26:23.291 [DEBUG] [Thread-300486] [transport.py] [_log()] userauth is OK
2025-12-24T10:26:23.291 [DEBUG] [Thread-300486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:26:23.291 [DEBUG] [Thread-300486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:26:23.291 [DEBUG] [Thread-300486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:26:23.291 [DEBUG] [Thread-300486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:26:23.305 [INFO] [Thread-300486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:26:23.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:26:23.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:26:24.134 [DEBUG] [Thread-300486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:26:24.134 [DEBUG] [Thread-300486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:26:24.181 [DEBUG] [Thread-300486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:26:24.181 [DEBUG] [Thread-300486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:26:24.190 [DEBUG] [Thread-300486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:26:24.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:26: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')
2025-12-24T10:26:24.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:26:24.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:26:24.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:26:24.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:26:24.225 [DEBUG] [Thread-300486] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:26:28.131 [DEBUG] [Thread-300488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:26:32.548 [DEBUG] [Thread-300489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:26:39.196 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:26:39.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:26:43.271 [DEBUG] [Thread-300490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:26:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:26:54.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:26:54.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:26:55.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 26, 26), 14.35, 38.92, 0.0, 5.61, 19.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:26:55.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:26:26
2025-12-24T10:26:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:26:55.999 [DEBUG] [Thread-300491] [transport.py] [_log()] starting thread (client mode): 0xf57a9810
2025-12-24T10:26:55.999 [DEBUG] [Thread-300491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:26:56.003 [DEBUG] [Thread-300491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:26:56.003 [INFO] [Thread-300491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] client lang: <none>
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] server lang: <none>
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] kex follows: False
2025-12-24T10:26:56.007 [DEBUG] [Thread-300491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:26:56.008 [DEBUG] [Thread-300491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:26:56.008 [DEBUG] [Thread-300491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:26:56.008 [DEBUG] [Thread-300491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:26:56.008 [DEBUG] [Thread-300491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:26:56.008 [DEBUG] [Thread-300491] [transport.py] [_log()] Compression: none
2025-12-24T10:26:56.008 [DEBUG] [Thread-300491] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:26:56.035 [DEBUG] [Thread-300491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:26:56.039 [DEBUG] [Thread-300491] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:26:56.040 [DEBUG] [Thread-300491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:26:56.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:26:56.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:26:56.045 [DEBUG] [Thread-300491] [transport.py] [_log()] userauth is OK
2025-12-24T10:26:56.045 [DEBUG] [Thread-300491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:26:56.045 [DEBUG] [Thread-300491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:26:56.045 [DEBUG] [Thread-300491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:26:56.045 [DEBUG] [Thread-300491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:26:56.076 [INFO] [Thread-300491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:26:56.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:26:56.720 [DEBUG] [Thread-300491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:26:56.721 [DEBUG] [Thread-300491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:26:56.722 [DEBUG] [Thread-300491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:26:56.762 [DEBUG] [Thread-300491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:26:56.762 [DEBUG] [Thread-300491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:26:56.766 [DEBUG] [Thread-300491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:26:56.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:26:56.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:26:56.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:26:56.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:26:56.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:26:56.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:26:56.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:26:56.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:26:56.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:26:56.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.351460 -999.00  +19.60  10.02     44   +7.00 1 1 1 1 1   888    0 17.24 158.33 ----- 10.0 10.0 63.0 19.0 29.0 -26.7 28.8 -26.2 27.5 -25.6 28.1 -25.4
2025-12-24T10:26:56.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:26:56.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:26:56.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.351460
2025-12-24T10:26:56.803 [DEBUG] [Thread-300491] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:26:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:26:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:26:26', tmtdew=14.35, humidity=38.92, cloud=0.0, wind=5.61, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:26:06.144', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:26:56.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:26:56.920 [DEBUG] [Thread-300494] [transport.py] [_log()] starting thread (client mode): 0xf574cfd0
2025-12-24T10:26:56.920 [DEBUG] [Thread-300494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:26:56.934 [DEBUG] [Thread-300494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:26:56.934 [INFO] [Thread-300494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:26:56.942 [DEBUG] [Thread-300494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:26:56.942 [DEBUG] [Thread-300494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:26:56.942 [DEBUG] [Thread-300494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:26:56.942 [DEBUG] [Thread-300494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] client lang: <none>
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] server lang: <none>
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] kex follows: False
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] Compression: none
2025-12-24T10:26:56.943 [DEBUG] [Thread-300494] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:26:57.004 [DEBUG] [Thread-300494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:26:57.005 [DEBUG] [Thread-300494] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:26:57.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:26:57.006 [DEBUG] [Thread-300494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:26:57.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:26:57.060 [DEBUG] [Thread-300494] [transport.py] [_log()] userauth is OK
2025-12-24T10:26:57.061 [DEBUG] [Thread-300494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:26:57.061 [DEBUG] [Thread-300494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:26:57.061 [DEBUG] [Thread-300494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:26:57.061 [DEBUG] [Thread-300494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:26:57.080 [INFO] [Thread-300494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:26:57.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:26:57.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:26:57.896 [DEBUG] [Thread-300494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:26:57.896 [DEBUG] [Thread-300494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:26:57.935 [DEBUG] [Thread-300494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:26:57.935 [DEBUG] [Thread-300494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:26:57.942 [DEBUG] [Thread-300494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:26:57.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:26:57.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:26:57.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') -> 00000000
2025-12-24T10:26:57.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:26:57.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:26:57.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:26:57.976 [DEBUG] [Thread-300494] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:26:58.323 [DEBUG] [Thread-300496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:27:13.458 [DEBUG] [Thread-300497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:27:27.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:27:27.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:27:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:27:28.532 [DEBUG] [Thread-300498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:27:29.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 26, 59), 13.97, 39.75, 0.0, 9.12, 19.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:27:29.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:26:59
2025-12-24T10:27:29.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:27:29.712 [DEBUG] [Thread-300499] [transport.py] [_log()] starting thread (client mode): 0xf5795570
2025-12-24T10:27:29.713 [DEBUG] [Thread-300499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:27:29.727 [DEBUG] [Thread-300499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:27:29.727 [INFO] [Thread-300499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:27:29.731 [DEBUG] [Thread-300499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:27:29.731 [DEBUG] [Thread-300499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:27:29.731 [DEBUG] [Thread-300499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] client lang: <none>
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] server lang: <none>
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] kex follows: False
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:27:29.732 [DEBUG] [Thread-300499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:27:29.733 [DEBUG] [Thread-300499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:27:29.733 [DEBUG] [Thread-300499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:27:29.733 [DEBUG] [Thread-300499] [transport.py] [_log()] Compression: none
2025-12-24T10:27:29.733 [DEBUG] [Thread-300499] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:27:29.769 [DEBUG] [Thread-300499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:27:29.774 [DEBUG] [Thread-300499] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:27:29.776 [DEBUG] [Thread-300499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:27:29.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:27:29.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:27:29.781 [DEBUG] [Thread-300499] [transport.py] [_log()] userauth is OK
2025-12-24T10:27:29.782 [DEBUG] [Thread-300499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:27:29.782 [DEBUG] [Thread-300499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:27:29.782 [DEBUG] [Thread-300499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:27:29.782 [DEBUG] [Thread-300499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:27:29.821 [INFO] [Thread-300499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:27:29.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:27:30.501 [DEBUG] [Thread-300499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:27:30.501 [DEBUG] [Thread-300499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:27:30.502 [DEBUG] [Thread-300499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:27:30.543 [DEBUG] [Thread-300499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:27:30.543 [DEBUG] [Thread-300499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:27:30.545 [DEBUG] [Thread-300499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:27:30.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:27:30.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:27:30.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:27:30.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:27:30.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:27:30.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:27:30.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:27:30.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:27:30.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:27:30.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.351807 -999.00  +19.60   4.59     44   +7.10 1 1 1 1 1   888    0 17.50 163.26 ----- 4.6 4.6 53.8 9.5 29.3 -25.7 28.8 -26.1 27.6 -25.0 28.2 -24.8
2025-12-24T10:27:30.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:27:30.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:27:30.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.351807
2025-12-24T10:27:30.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:27:30.584 [DEBUG] [Thread-300499] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:27:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:27:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:27:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:27:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:27:30.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:26:59', tmtdew=13.97, humidity=39.75, cloud=0.0, wind=9.12, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:26:36.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:27:30.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:27:30.670 [DEBUG] [Thread-300502] [transport.py] [_log()] starting thread (client mode): 0xf57a9cc0
2025-12-24T10:27:30.670 [DEBUG] [Thread-300502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:27:30.685 [DEBUG] [Thread-300502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:27:30.686 [INFO] [Thread-300502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:27:30.693 [DEBUG] [Thread-300502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:27:30.694 [DEBUG] [Thread-300502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:27:30.694 [DEBUG] [Thread-300502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:27:30.694 [DEBUG] [Thread-300502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:27:30.694 [DEBUG] [Thread-300502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:27:30.694 [DEBUG] [Thread-300502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:27:30.694 [DEBUG] [Thread-300502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:27:30.694 [DEBUG] [Thread-300502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:27:30.694 [DEBUG] [Thread-300502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] client lang: <none>
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] server lang: <none>
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] kex follows: False
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:27:30.695 [DEBUG] [Thread-300502] [transport.py] [_log()] Compression: none
2025-12-24T10:27:30.696 [DEBUG] [Thread-300502] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:27:30.753 [DEBUG] [Thread-300502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:27:30.754 [DEBUG] [Thread-300502] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:27:30.755 [DEBUG] [Thread-300502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:27:30.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:27:30.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:27:30.812 [DEBUG] [Thread-300502] [transport.py] [_log()] userauth is OK
2025-12-24T10:27:30.813 [DEBUG] [Thread-300502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:27:30.813 [DEBUG] [Thread-300502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:27:30.813 [DEBUG] [Thread-300502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:27:30.813 [DEBUG] [Thread-300502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:27:30.832 [INFO] [Thread-300502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:27:30.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:27:30.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:27:31.808 [DEBUG] [Thread-300502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:27:31.808 [DEBUG] [Thread-300502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:27:31.855 [DEBUG] [Thread-300502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:27:31.855 [DEBUG] [Thread-300502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:27:31.865 [DEBUG] [Thread-300502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:27:31.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:27:31.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:27:31.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:27:31.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:27:31.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:27:31.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:27:31.908 [DEBUG] [Thread-300502] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:27:32.858 [DEBUG] [Thread-300504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:27:39.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:27:39.351 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:27:43.565 [DEBUG] [Thread-300505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:27:58.657 [DEBUG] [Thread-300506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:28:01.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:28:01.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:28:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:28:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 27, 32), 14.0, 39.68, 0.0, 6.76, 19.35, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:28:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:27:32
2025-12-24T10:28:03.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:28:03.783 [DEBUG] [Thread-300507] [transport.py] [_log()] starting thread (client mode): 0xf5741930
2025-12-24T10:28:03.784 [DEBUG] [Thread-300507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:28:03.796 [DEBUG] [Thread-300507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:28:03.797 [INFO] [Thread-300507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:28:03.802 [DEBUG] [Thread-300507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] client lang: <none>
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] server lang: <none>
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] kex follows: False
2025-12-24T10:28:03.803 [DEBUG] [Thread-300507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:28:03.804 [DEBUG] [Thread-300507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:28:03.805 [DEBUG] [Thread-300507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:28:03.805 [DEBUG] [Thread-300507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:28:03.805 [DEBUG] [Thread-300507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:28:03.805 [DEBUG] [Thread-300507] [transport.py] [_log()] Compression: none
2025-12-24T10:28:03.805 [DEBUG] [Thread-300507] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:28:03.838 [DEBUG] [Thread-300507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:28:03.842 [DEBUG] [Thread-300507] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:28:03.844 [DEBUG] [Thread-300507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:28:03.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:28:03.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:28:03.850 [DEBUG] [Thread-300507] [transport.py] [_log()] userauth is OK
2025-12-24T10:28:03.850 [DEBUG] [Thread-300507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:28:03.850 [DEBUG] [Thread-300507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:28:03.851 [DEBUG] [Thread-300507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:28:03.851 [DEBUG] [Thread-300507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:28:03.877 [INFO] [Thread-300507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:28:03.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:28:04.533 [DEBUG] [Thread-300507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:28:04.535 [DEBUG] [Thread-300507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:28:04.535 [DEBUG] [Thread-300507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:28:04.575 [DEBUG] [Thread-300507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:28:04.575 [DEBUG] [Thread-300507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:28:04.577 [DEBUG] [Thread-300507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:28:04.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:28:04.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:28:04.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:28:04.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:28:04.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:28:04.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:28:04.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:28:04.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:28:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:28:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.352154 -999.00  +19.60   8.34     44   +7.20 1 1 1 1 1   888    0 17.16 157.88 ----- 8.3 8.3 66.9 10.2 29.5 -25.7 28.7 -26.6 27.7 -23.8 28.3 -24.6
2025-12-24T10:28:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:28:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:28:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.352154
2025-12-24T10:28:04.606 [DEBUG] [Thread-300507] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:28:04.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:28:04.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:28:04.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:28:04.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:28:04.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:28:04.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:27:32', tmtdew=14.0, humidity=39.68, cloud=0.0, wind=6.76, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:27:06.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:28:04.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:28:04.702 [DEBUG] [Thread-300510] [transport.py] [_log()] starting thread (client mode): 0xf57ab4f0
2025-12-24T10:28:04.702 [DEBUG] [Thread-300510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:28:04.716 [DEBUG] [Thread-300510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:28:04.717 [INFO] [Thread-300510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:28:04.724 [DEBUG] [Thread-300510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:28:04.724 [DEBUG] [Thread-300510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:28:04.724 [DEBUG] [Thread-300510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:28:04.724 [DEBUG] [Thread-300510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] client lang: <none>
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] server lang: <none>
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] kex follows: False
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] Compression: none
2025-12-24T10:28:04.725 [DEBUG] [Thread-300510] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:28:04.784 [DEBUG] [Thread-300510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:28:04.784 [DEBUG] [Thread-300510] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:28:04.785 [DEBUG] [Thread-300510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:28:04.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:28:04.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:28:04.844 [DEBUG] [Thread-300510] [transport.py] [_log()] userauth is OK
2025-12-24T10:28:04.845 [DEBUG] [Thread-300510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:28:04.845 [DEBUG] [Thread-300510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:28:04.845 [DEBUG] [Thread-300510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:28:04.845 [DEBUG] [Thread-300510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:28:04.864 [INFO] [Thread-300510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:28:04.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:28:04.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:28:05.730 [DEBUG] [Thread-300510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:28:05.731 [DEBUG] [Thread-300510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:28:05.771 [DEBUG] [Thread-300510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:28:05.772 [DEBUG] [Thread-300510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:28:05.781 [DEBUG] [Thread-300510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:28:05.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:28:05.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:28:05.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:28:05.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:28:05.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:28:05.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:28:05.819 [DEBUG] [Thread-300510] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:28:13.701 [DEBUG] [Thread-300512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:28:28.783 [DEBUG] [Thread-300513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:28:33.146 [DEBUG] [Thread-300514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:28:35.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:28:35.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:28:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:28:37.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 28, 5), 14.07, 39.53, 0.0, 6.42, 19.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:28:37.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:28:05
2025-12-24T10:28:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:28:37.538 [DEBUG] [Thread-300515] [transport.py] [_log()] starting thread (client mode): 0xf5772290
2025-12-24T10:28:37.538 [DEBUG] [Thread-300515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:28:37.555 [DEBUG] [Thread-300515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:28:37.555 [INFO] [Thread-300515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:28:37.558 [DEBUG] [Thread-300515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] client lang: <none>
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] server lang: <none>
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] kex follows: False
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] Compression: none
2025-12-24T10:28:37.559 [DEBUG] [Thread-300515] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:28:37.583 [DEBUG] [Thread-300515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:28:37.585 [DEBUG] [Thread-300515] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:28:37.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:28:37.587 [DEBUG] [Thread-300515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:28:37.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:28:37.590 [DEBUG] [Thread-300515] [transport.py] [_log()] userauth is OK
2025-12-24T10:28:37.591 [DEBUG] [Thread-300515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:28:37.591 [DEBUG] [Thread-300515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:28:37.591 [DEBUG] [Thread-300515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:28:37.591 [DEBUG] [Thread-300515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:28:37.616 [INFO] [Thread-300515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:28:37.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:28:38.258 [DEBUG] [Thread-300515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:28:38.258 [DEBUG] [Thread-300515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:28:38.258 [DEBUG] [Thread-300515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:28:38.298 [DEBUG] [Thread-300515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:28:38.299 [DEBUG] [Thread-300515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:28:38.301 [DEBUG] [Thread-300515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:28:38.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:28:38.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:28:38.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:28:38.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:28:38.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:28:38.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:28:38.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:28:38.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:28:38.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:28:38.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.352848 -999.00  +20.20   7.33     44   +7.60 1 1 1 1 1   888    0 16.99 150.00 ----- 7.3 7.3 145.0 14.1 29.6 -25.9 28.9 -27.0 27.7 -24.5 28.2 -25.0
2025-12-24T10:28:38.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:28:38.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:28:38.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.352848
2025-12-24T10:28:38.328 [DEBUG] [Thread-300515] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:28:38.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:28:38.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:28:38.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:28:38.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:28:38.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:28:38.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:28:05', tmtdew=14.07, humidity=39.53, cloud=0.0, wind=6.42, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:28:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:28:38.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:28:38.421 [DEBUG] [Thread-300518] [transport.py] [_log()] starting thread (client mode): 0xf5700f40
2025-12-24T10:28:38.421 [DEBUG] [Thread-300518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:28:38.437 [DEBUG] [Thread-300518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:28:38.437 [INFO] [Thread-300518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:28:38.444 [DEBUG] [Thread-300518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] client lang: <none>
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] server lang: <none>
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] kex follows: False
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] Compression: none
2025-12-24T10:28:38.445 [DEBUG] [Thread-300518] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:28:38.504 [DEBUG] [Thread-300518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:28:38.504 [DEBUG] [Thread-300518] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:28:38.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:28:38.505 [DEBUG] [Thread-300518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:28:38.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:28:38.564 [DEBUG] [Thread-300518] [transport.py] [_log()] userauth is OK
2025-12-24T10:28:38.564 [DEBUG] [Thread-300518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:28:38.564 [DEBUG] [Thread-300518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:28:38.564 [DEBUG] [Thread-300518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:28:38.564 [DEBUG] [Thread-300518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:28:38.589 [INFO] [Thread-300518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:28:38.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:28:38.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:28:39.472 [DEBUG] [Thread-300518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:28:39.472 [DEBUG] [Thread-300518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:28:39.492 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:28:39.493 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:28:39.519 [DEBUG] [Thread-300518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:28:39.519 [DEBUG] [Thread-300518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:28:39.528 [DEBUG] [Thread-300518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:28:39.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:28:39.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')
2025-12-24T10:28: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
2025-12-24T10:28:39.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:28:39.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:28:39.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:28:39.560 [DEBUG] [Thread-300518] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:28:43.859 [DEBUG] [Thread-300520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:28:59.006 [DEBUG] [Thread-300521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:29:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:29:09.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:29:09.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
2025-12-24T10:29:10.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 28, 38), 13.89, 40.37, 0.0, 7.52, 19.35, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:29:10.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:28:38
2025-12-24T10:29:11.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:29:11.332 [DEBUG] [Thread-300522] [transport.py] [_log()] starting thread (client mode): 0xf572e500
2025-12-24T10:29:11.332 [DEBUG] [Thread-300522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:29:11.346 [DEBUG] [Thread-300522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:29:11.347 [INFO] [Thread-300522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] client lang: <none>
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] server lang: <none>
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] kex follows: False
2025-12-24T10:29:11.352 [DEBUG] [Thread-300522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:29:11.353 [DEBUG] [Thread-300522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:29:11.353 [DEBUG] [Thread-300522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:29:11.353 [DEBUG] [Thread-300522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:29:11.353 [DEBUG] [Thread-300522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:29:11.353 [DEBUG] [Thread-300522] [transport.py] [_log()] Compression: none
2025-12-24T10:29:11.353 [DEBUG] [Thread-300522] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:29:11.389 [DEBUG] [Thread-300522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:29:11.396 [DEBUG] [Thread-300522] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:29:11.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:29:11.402 [DEBUG] [Thread-300522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:29:11.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:29:11.406 [DEBUG] [Thread-300522] [transport.py] [_log()] userauth is OK
2025-12-24T10:29:11.406 [DEBUG] [Thread-300522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:29:11.406 [DEBUG] [Thread-300522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:29:11.406 [DEBUG] [Thread-300522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:29:11.407 [DEBUG] [Thread-300522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:29:11.446 [INFO] [Thread-300522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:29:11.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:29:12.076 [DEBUG] [Thread-300522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:29:12.077 [DEBUG] [Thread-300522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:29:12.077 [DEBUG] [Thread-300522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:29:12.118 [DEBUG] [Thread-300522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:29:12.118 [DEBUG] [Thread-300522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:29:12.120 [DEBUG] [Thread-300522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:29:12.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:29:12.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:29:12.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:29:12.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:29:12.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:29:12.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:29:12.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:29:12.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:29:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:29:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.353196 -999.00  +20.50   8.24     43   +7.70 1 1 1 1 1   888    0 16.43 134.42 ----- 8.2 8.2 137.6 9.0 29.7 -25.8 28.9 -25.1 27.9 -23.1 28.4 -25.2
2025-12-24T10:29:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:29:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:29:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.353196
2025-12-24T10:29:12.148 [DEBUG] [Thread-300522] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:29:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:29:12.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:29:12.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:29:12.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:29:12.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:29:12.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:28:38', tmtdew=13.89, humidity=40.37, cloud=0.0, wind=7.52, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:28:36.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:29:12.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:29:14.075 [DEBUG] [Thread-300525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:29:29.195 [DEBUG] [Thread-300526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:29:33.478 [DEBUG] [Thread-300527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:29:39.643 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:29:39.644 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:29:44.240 [DEBUG] [Thread-300528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:29:59.339 [DEBUG] [Thread-300529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:30:14.400 [DEBUG] [Thread-300530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:30:29.456 [DEBUG] [Thread-300531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:30:33.798 [DEBUG] [Thread-300532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:30:39.793 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:30:39.795 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:30:44.505 [DEBUG] [Thread-300533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:30:59.574 [DEBUG] [Thread-300534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:31:14.640 [DEBUG] [Thread-300535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:31:24.922 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T10:31:29.746 [DEBUG] [Thread-300536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:31:34.081 [DEBUG] [Thread-300537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:31:39.936 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:31:39.938 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:31:44.826 [DEBUG] [Thread-300538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:31:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:31:54.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:31:55.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
2025-12-24T10:31:56.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 31, 22), 13.69, 40.63, 0.0, 16.16, 19.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:31:56.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:31:22
2025-12-24T10:31:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:31:56.606 [DEBUG] [Thread-300539] [transport.py] [_log()] starting thread (client mode): 0xf572d5a0
2025-12-24T10:31:56.607 [DEBUG] [Thread-300539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:31:56.618 [DEBUG] [Thread-300539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:31:56.618 [INFO] [Thread-300539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:31:56.623 [DEBUG] [Thread-300539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] client lang: <none>
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] server lang: <none>
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] kex follows: False
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:31:56.624 [DEBUG] [Thread-300539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:31:56.625 [DEBUG] [Thread-300539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:31:56.625 [DEBUG] [Thread-300539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:31:56.625 [DEBUG] [Thread-300539] [transport.py] [_log()] Compression: none
2025-12-24T10:31:56.625 [DEBUG] [Thread-300539] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:31:56.658 [DEBUG] [Thread-300539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:31:56.661 [DEBUG] [Thread-300539] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:31:56.663 [DEBUG] [Thread-300539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:31:56.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:31:56.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:31:56.666 [DEBUG] [Thread-300539] [transport.py] [_log()] userauth is OK
2025-12-24T10:31:56.666 [DEBUG] [Thread-300539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:31:56.666 [DEBUG] [Thread-300539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:31:56.666 [DEBUG] [Thread-300539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:31:56.666 [DEBUG] [Thread-300539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:31:56.696 [INFO] [Thread-300539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:31:56.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:31:57.301 [DEBUG] [Thread-300539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:31:57.301 [DEBUG] [Thread-300539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:31:57.302 [DEBUG] [Thread-300539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:31:57.343 [DEBUG] [Thread-300539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:31:57.343 [DEBUG] [Thread-300539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:31:57.345 [DEBUG] [Thread-300539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:31:57.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:31:57.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:31:57.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:31:57.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:31:57.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:31:57.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:31:57.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:31:57.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:31:57.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:31:57.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.354932 -999.00  +19.90   9.44     44   +7.30 1 1 1 1 1   888    0 15.76 111.13 ----- 9.4 9.4 171.0 16.3 29.4 -26.4 28.8 -26.1 27.7 -24.6 28.2 -25.8
2025-12-24T10:31:57.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:31:57.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:31:57.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.354932
2025-12-24T10:31:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:31:57.385 [DEBUG] [Thread-300539] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:31:57.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:31:57.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:31:57.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:31:57.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:31:57.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:31:22', tmtdew=13.69, humidity=40.63, cloud=0.0, wind=16.16, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:31:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:31:57.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:31:57.474 [DEBUG] [Thread-300542] [transport.py] [_log()] starting thread (client mode): 0xf572f5e0
2025-12-24T10:31:57.474 [DEBUG] [Thread-300542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:31:57.489 [DEBUG] [Thread-300542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:31:57.489 [INFO] [Thread-300542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:31:57.496 [DEBUG] [Thread-300542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:31:57.496 [DEBUG] [Thread-300542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:31:57.496 [DEBUG] [Thread-300542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:31:57.496 [DEBUG] [Thread-300542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:31:57.496 [DEBUG] [Thread-300542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] client lang: <none>
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] server lang: <none>
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] kex follows: False
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] Compression: none
2025-12-24T10:31:57.497 [DEBUG] [Thread-300542] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:31:57.554 [DEBUG] [Thread-300542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:31:57.554 [DEBUG] [Thread-300542] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:31:57.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:31:57.554 [DEBUG] [Thread-300542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:31:57.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:31:57.611 [DEBUG] [Thread-300542] [transport.py] [_log()] userauth is OK
2025-12-24T10:31:57.611 [DEBUG] [Thread-300542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:31:57.611 [DEBUG] [Thread-300542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:31:57.611 [DEBUG] [Thread-300542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:31:57.611 [DEBUG] [Thread-300542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:31:57.627 [INFO] [Thread-300542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:31:57.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:31:57.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:31:58.458 [DEBUG] [Thread-300542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:31:58.458 [DEBUG] [Thread-300542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:31:58.506 [DEBUG] [Thread-300542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:31:58.506 [DEBUG] [Thread-300542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:31:58.514 [DEBUG] [Thread-300542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:31:58.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:31:58.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:31:58.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
2025-12-24T10:31:58.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:31:58.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:31:58.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:31:58.547 [DEBUG] [Thread-300542] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:31:59.863 [DEBUG] [Thread-300544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:32:15.010 [DEBUG] [Thread-300545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:32:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:32:28.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:32:28.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:32:29.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 31, 56), 13.48, 41.01, 0.0, 11.84, 19.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:32:29.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:31:56
2025-12-24T10:32:29.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:32:29.966 [DEBUG] [Thread-300546] [transport.py] [_log()] starting thread (client mode): 0xf572fd30
2025-12-24T10:32:29.967 [DEBUG] [Thread-300546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:32:29.969 [DEBUG] [Thread-300546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:32:29.969 [INFO] [Thread-300546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] client lang: <none>
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] server lang: <none>
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] kex follows: False
2025-12-24T10:32:29.974 [DEBUG] [Thread-300546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:32:29.975 [DEBUG] [Thread-300546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:32:29.975 [DEBUG] [Thread-300546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:32:29.975 [DEBUG] [Thread-300546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:32:29.975 [DEBUG] [Thread-300546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:32:29.975 [DEBUG] [Thread-300546] [transport.py] [_log()] Compression: none
2025-12-24T10:32:29.975 [DEBUG] [Thread-300546] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:32:30.003 [DEBUG] [Thread-300546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:32:30.007 [DEBUG] [Thread-300546] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:32:30.008 [DEBUG] [Thread-300546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:32:30.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:32:30.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:32:30.012 [DEBUG] [Thread-300546] [transport.py] [_log()] userauth is OK
2025-12-24T10:32:30.012 [DEBUG] [Thread-300546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:32:30.012 [DEBUG] [Thread-300546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:32:30.012 [DEBUG] [Thread-300546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:32:30.012 [DEBUG] [Thread-300546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:32:30.046 [INFO] [Thread-300546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:32:30.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:32:30.088 [DEBUG] [Thread-300548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:32:30.687 [DEBUG] [Thread-300546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:32:30.687 [DEBUG] [Thread-300546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:32:30.688 [DEBUG] [Thread-300546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:32:30.729 [DEBUG] [Thread-300546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:32:30.729 [DEBUG] [Thread-300546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:32:30.731 [DEBUG] [Thread-300546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:32:30.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:32:30.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:32:30.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:32:30.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:32:30.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:32:30.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:32:30.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:32:30.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:32:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:32:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.355279 -999.00  +19.90   3.14     44   +7.40 1 1 1 1 1   888    0 15.74 101.83 ----- 3.1 3.1 191.2 6.2 29.6 -25.6 28.5 -25.6 27.8 -23.9 28.4 -25.0
2025-12-24T10:32:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:32:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:32:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.355279
2025-12-24T10:32:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:32:30.764 [DEBUG] [Thread-300546] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:32:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:32:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:32:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:32:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:32:30.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:31:56', tmtdew=13.48, humidity=41.01, cloud=0.0, wind=11.84, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:31:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:32:30.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:32:30.860 [DEBUG] [Thread-300550] [transport.py] [_log()] starting thread (client mode): 0xf572cd60
2025-12-24T10:32:30.860 [DEBUG] [Thread-300550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:32:30.877 [DEBUG] [Thread-300550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:32:30.877 [INFO] [Thread-300550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:32:30.884 [DEBUG] [Thread-300550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:32:30.884 [DEBUG] [Thread-300550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:32:30.884 [DEBUG] [Thread-300550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:32:30.884 [DEBUG] [Thread-300550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:32:30.884 [DEBUG] [Thread-300550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:32:30.884 [DEBUG] [Thread-300550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:32:30.884 [DEBUG] [Thread-300550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] client lang: <none>
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] server lang: <none>
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] kex follows: False
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:32:30.885 [DEBUG] [Thread-300550] [transport.py] [_log()] Compression: none
2025-12-24T10:32:30.886 [DEBUG] [Thread-300550] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:32:30.942 [DEBUG] [Thread-300550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:32:30.942 [DEBUG] [Thread-300550] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:32:30.942 [DEBUG] [Thread-300550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:32:30.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:32:30.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:32:30.999 [DEBUG] [Thread-300550] [transport.py] [_log()] userauth is OK
2025-12-24T10:32:30.999 [DEBUG] [Thread-300550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:32:30.999 [DEBUG] [Thread-300550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:32:30.999 [DEBUG] [Thread-300550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:32:30.999 [DEBUG] [Thread-300550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:32:31.016 [INFO] [Thread-300550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:32:31.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:32:31.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:32:31.911 [DEBUG] [Thread-300550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:32:31.911 [DEBUG] [Thread-300550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:32:31.959 [DEBUG] [Thread-300550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:32:31.959 [DEBUG] [Thread-300550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:32:31.968 [DEBUG] [Thread-300550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:32:31.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:32:31.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:32:31.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:32:31.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:32:31.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:32:31.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:32:32.007 [DEBUG] [Thread-300550] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:32:34.378 [DEBUG] [Thread-300552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:32:40.087 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:32:40.089 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:32:45.163 [DEBUG] [Thread-300553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:33:00.270 [DEBUG] [Thread-300554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:33:02.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:33:02.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:33:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:33:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 32, 28), 13.6, 40.68, 0.0, 8.21, 19.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:33:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:32:28
2025-12-24T10:33:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:33:03.235 [DEBUG] [Thread-300555] [transport.py] [_log()] starting thread (client mode): 0xf57abe20
2025-12-24T10:33:03.235 [DEBUG] [Thread-300555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:33:03.242 [DEBUG] [Thread-300555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:33:03.242 [INFO] [Thread-300555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] client lang: <none>
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] server lang: <none>
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] kex follows: False
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] Compression: none
2025-12-24T10:33:03.246 [DEBUG] [Thread-300555] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:33:03.268 [DEBUG] [Thread-300555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:33:03.270 [DEBUG] [Thread-300555] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:33:03.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:33:03.271 [DEBUG] [Thread-300555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:33:03.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:33:03.312 [DEBUG] [Thread-300555] [transport.py] [_log()] userauth is OK
2025-12-24T10:33:03.312 [DEBUG] [Thread-300555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:33:03.312 [DEBUG] [Thread-300555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:33:03.312 [DEBUG] [Thread-300555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:33:03.312 [DEBUG] [Thread-300555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:33:03.333 [INFO] [Thread-300555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:33:03.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:33:03.989 [DEBUG] [Thread-300555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:33:03.989 [DEBUG] [Thread-300555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:33:03.990 [DEBUG] [Thread-300555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:33:04.030 [DEBUG] [Thread-300555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:33:04.031 [DEBUG] [Thread-300555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:33:04.033 [DEBUG] [Thread-300555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:33:04.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:33:04.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:33:04.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:33:04.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:33:04.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:33:04.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:33:04.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:33:04.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:33:04.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:33:04.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.355973 -999.00  +20.30  15.98     43   +7.60 1 1 1 1 1   888    0 14.98 69.29 ----- 16.0 16.0 110.0 18.6 29.8 -25.8 29.0 -24.8 27.9 -23.6 28.6 -25.5
2025-12-24T10:33:04.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:33:04.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:33:04.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.355973
2025-12-24T10:33:04.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:32:28', tmtdew=13.6, humidity=40.68, cloud=0.0, wind=8.21, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:32:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:33:04.057 [DEBUG] [Thread-300555] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:33:04.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:33:04.152 [DEBUG] [Thread-300558] [transport.py] [_log()] starting thread (client mode): 0xf57a8be0
2025-12-24T10:33:04.152 [DEBUG] [Thread-300558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:33:04.166 [DEBUG] [Thread-300558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:33:04.166 [INFO] [Thread-300558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] client lang: <none>
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] server lang: <none>
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] kex follows: False
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] Compression: none
2025-12-24T10:33:04.174 [DEBUG] [Thread-300558] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:33:04.230 [DEBUG] [Thread-300558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:33:04.230 [DEBUG] [Thread-300558] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:33:04.230 [DEBUG] [Thread-300558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:33:04.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:33:04.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:33:04.287 [DEBUG] [Thread-300558] [transport.py] [_log()] userauth is OK
2025-12-24T10:33:04.287 [DEBUG] [Thread-300558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:33:04.287 [DEBUG] [Thread-300558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:33:04.287 [DEBUG] [Thread-300558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:33:04.287 [DEBUG] [Thread-300558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:33:04.304 [INFO] [Thread-300558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:33:04.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:33:04.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:33:05.122 [DEBUG] [Thread-300558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:33:05.122 [DEBUG] [Thread-300558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:33:05.169 [DEBUG] [Thread-300558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:33:05.170 [DEBUG] [Thread-300558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:33:05.179 [DEBUG] [Thread-300558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:33:05.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:33:05.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:33:05.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:33:05.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:33:05.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:33:05.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:33:05.212 [DEBUG] [Thread-300558] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:33:15.315 [DEBUG] [Thread-300560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:33:30.398 [DEBUG] [Thread-300561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:33:34.622 [DEBUG] [Thread-300562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:33:35.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:33:35.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:33:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:33:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 33, 1), 13.47, 41.05, 0.0, 11.33, 19.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:33:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:33:01
2025-12-24T10:33:36.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:33:36.746 [DEBUG] [Thread-300563] [transport.py] [_log()] starting thread (client mode): 0xf572e590
2025-12-24T10:33:36.747 [DEBUG] [Thread-300563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:33:36.760 [DEBUG] [Thread-300563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:33:36.760 [INFO] [Thread-300563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] client lang: <none>
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] server lang: <none>
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] kex follows: False
2025-12-24T10:33:36.764 [DEBUG] [Thread-300563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:33:36.765 [DEBUG] [Thread-300563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:33:36.765 [DEBUG] [Thread-300563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:33:36.765 [DEBUG] [Thread-300563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:33:36.765 [DEBUG] [Thread-300563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:33:36.765 [DEBUG] [Thread-300563] [transport.py] [_log()] Compression: none
2025-12-24T10:33:36.765 [DEBUG] [Thread-300563] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:33:36.790 [DEBUG] [Thread-300563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:33:36.794 [DEBUG] [Thread-300563] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:33:36.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:33:36.796 [DEBUG] [Thread-300563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:33:36.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:33:36.799 [DEBUG] [Thread-300563] [transport.py] [_log()] userauth is OK
2025-12-24T10:33:36.799 [DEBUG] [Thread-300563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:33:36.799 [DEBUG] [Thread-300563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:33:36.799 [DEBUG] [Thread-300563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:33:36.799 [DEBUG] [Thread-300563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:33:36.818 [INFO] [Thread-300563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:33:36.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:33:37.477 [DEBUG] [Thread-300563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:33:37.477 [DEBUG] [Thread-300563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:33:37.477 [DEBUG] [Thread-300563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:33:37.518 [DEBUG] [Thread-300563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:33:37.518 [DEBUG] [Thread-300563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:33:37.520 [DEBUG] [Thread-300563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:33:37.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:33:37.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:33:37.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:33:37.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:33:37.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:33:37.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:33:37.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:33:37.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:33:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:33:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.356321 -999.00  +20.00  14.21     43   +7.20 1 1 1 1 1   888    0 14.42 60.58 ----- 14.2 14.2 104.8 23.2 29.6 -26.2 28.9 -27.5 27.8 -25.1 28.5 -24.9
2025-12-24T10:33:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:33:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:33:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.356321
2025-12-24T10:33:37.555 [DEBUG] [Thread-300563] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:33:37.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:33:37.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:33:37.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:33:37.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:33:37.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:33:37.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:33:01', tmtdew=13.47, humidity=41.05, cloud=0.0, wind=11.33, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:33:06.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:33:37.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:33:37.652 [DEBUG] [Thread-300566] [transport.py] [_log()] starting thread (client mode): 0xf572de40
2025-12-24T10:33:37.652 [DEBUG] [Thread-300566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:33:37.668 [DEBUG] [Thread-300566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:33:37.668 [INFO] [Thread-300566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] client lang: <none>
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] server lang: <none>
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] kex follows: False
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:33:37.675 [DEBUG] [Thread-300566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:33:37.676 [DEBUG] [Thread-300566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:33:37.676 [DEBUG] [Thread-300566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:33:37.676 [DEBUG] [Thread-300566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:33:37.676 [DEBUG] [Thread-300566] [transport.py] [_log()] Compression: none
2025-12-24T10:33:37.676 [DEBUG] [Thread-300566] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:33:37.734 [DEBUG] [Thread-300566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:33:37.734 [DEBUG] [Thread-300566] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:33:37.734 [DEBUG] [Thread-300566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:33:37.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:33:37.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:33:37.791 [DEBUG] [Thread-300566] [transport.py] [_log()] userauth is OK
2025-12-24T10:33:37.791 [DEBUG] [Thread-300566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:33:37.791 [DEBUG] [Thread-300566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:33:37.792 [DEBUG] [Thread-300566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:33:37.792 [DEBUG] [Thread-300566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:33:37.814 [INFO] [Thread-300566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:33:37.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:33:37.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:33:38.662 [DEBUG] [Thread-300566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:33:38.662 [DEBUG] [Thread-300566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:33:38.710 [DEBUG] [Thread-300566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:33:38.710 [DEBUG] [Thread-300566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:33:38.719 [DEBUG] [Thread-300566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:33:38.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:33:38.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:33:38.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:33:38.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:33:38.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:33:38.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:33:38.757 [DEBUG] [Thread-300566] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:33:40.231 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:33:40.232 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:33:45.462 [DEBUG] [Thread-300568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:34:00.621 [DEBUG] [Thread-300569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:34:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:34:08.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:34:08.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
2025-12-24T10:34:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 33, 34), 13.79, 40.21, 0.0, 10.11, 19.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:34:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:33:34
2025-12-24T10:34:10.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:34:10.195 [DEBUG] [Thread-300570] [transport.py] [_log()] starting thread (client mode): 0xf572cee0
2025-12-24T10:34:10.196 [DEBUG] [Thread-300570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:34:10.207 [DEBUG] [Thread-300570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:34:10.207 [INFO] [Thread-300570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] client lang: <none>
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] server lang: <none>
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] kex follows: False
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:34:10.212 [DEBUG] [Thread-300570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:34:10.213 [DEBUG] [Thread-300570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:34:10.213 [DEBUG] [Thread-300570] [transport.py] [_log()] Compression: none
2025-12-24T10:34:10.213 [DEBUG] [Thread-300570] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:34:10.238 [DEBUG] [Thread-300570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:34:10.241 [DEBUG] [Thread-300570] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:34:10.242 [DEBUG] [Thread-300570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:34:10.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:34:10.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:34:10.245 [DEBUG] [Thread-300570] [transport.py] [_log()] userauth is OK
2025-12-24T10:34:10.245 [DEBUG] [Thread-300570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:34:10.245 [DEBUG] [Thread-300570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:34:10.245 [DEBUG] [Thread-300570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:34:10.245 [DEBUG] [Thread-300570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:34:10.256 [INFO] [Thread-300570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:34:10.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:34:10.872 [DEBUG] [Thread-300570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:34:10.872 [DEBUG] [Thread-300570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:34:10.873 [DEBUG] [Thread-300570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:34:10.913 [DEBUG] [Thread-300570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:34:10.913 [DEBUG] [Thread-300570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:34:10.917 [DEBUG] [Thread-300570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:34:10.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:34:10.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:34:10.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:34:10.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:34:10.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:34:10.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:34:10.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:34:10.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:34:10.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:34:10.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.356668 -999.00  +20.00   6.16     43   +7.20 1 1 1 1 1   888    0 14.21 54.95 ----- 6.2 6.2 95.2 13.3 29.5 -26.6 29.0 -25.8 27.9 -25.3 28.4 -26.2
2025-12-24T10:34:10.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:34:10.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:34:10.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.356668
2025-12-24T10:34:10.951 [DEBUG] [Thread-300570] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:34:10.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:34:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:34:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:34:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:34:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:34:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:33:34', tmtdew=13.79, humidity=40.21, cloud=0.0, wind=10.11, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:33:36.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:34:11.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:34:11.061 [DEBUG] [Thread-300573] [transport.py] [_log()] starting thread (client mode): 0xf572c310
2025-12-24T10:34:11.061 [DEBUG] [Thread-300573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:34:11.076 [DEBUG] [Thread-300573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:34:11.076 [INFO] [Thread-300573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:34:11.085 [DEBUG] [Thread-300573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:34:11.085 [DEBUG] [Thread-300573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:34:11.085 [DEBUG] [Thread-300573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:34:11.085 [DEBUG] [Thread-300573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:34:11.086 [DEBUG] [Thread-300573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:34:11.086 [DEBUG] [Thread-300573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:34:11.086 [DEBUG] [Thread-300573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:34:11.086 [DEBUG] [Thread-300573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:34:11.086 [DEBUG] [Thread-300573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:34:11.086 [DEBUG] [Thread-300573] [transport.py] [_log()] client lang: <none>
2025-12-24T10:34:11.086 [DEBUG] [Thread-300573] [transport.py] [_log()] server lang: <none>
2025-12-24T10:34:11.087 [DEBUG] [Thread-300573] [transport.py] [_log()] kex follows: False
2025-12-24T10:34:11.087 [DEBUG] [Thread-300573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:34:11.087 [DEBUG] [Thread-300573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:34:11.087 [DEBUG] [Thread-300573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:34:11.087 [DEBUG] [Thread-300573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:34:11.088 [DEBUG] [Thread-300573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:34:11.088 [DEBUG] [Thread-300573] [transport.py] [_log()] Compression: none
2025-12-24T10:34:11.088 [DEBUG] [Thread-300573] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:34:11.145 [DEBUG] [Thread-300573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:34:11.146 [DEBUG] [Thread-300573] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:34:11.146 [DEBUG] [Thread-300573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:34:11.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:34:11.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:34:11.203 [DEBUG] [Thread-300573] [transport.py] [_log()] userauth is OK
2025-12-24T10:34:11.204 [DEBUG] [Thread-300573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:34:11.204 [DEBUG] [Thread-300573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:34:11.204 [DEBUG] [Thread-300573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:34:11.204 [DEBUG] [Thread-300573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:34:11.223 [INFO] [Thread-300573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:34:11.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:34:11.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:34:12.078 [DEBUG] [Thread-300573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:34:12.078 [DEBUG] [Thread-300573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:34:12.117 [DEBUG] [Thread-300573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:34:12.117 [DEBUG] [Thread-300573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:34:12.126 [DEBUG] [Thread-300573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:34:12.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:34:12.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')
2025-12-24T10:34:12.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:34:12.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:34:12.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:34:12.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:34:12.159 [DEBUG] [Thread-300573] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:34:15.673 [DEBUG] [Thread-300575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:34:30.775 [DEBUG] [Thread-300576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:34:34.945 [DEBUG] [Thread-300577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:34:40.383 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:34:40.385 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:34:42.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:34:42.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:34: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
2025-12-24T10:34:43.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 34, 7), 13.91, 39.91, 0.0, 11.1, 19.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:34:43.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:34:07
2025-12-24T10:34:43.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:34:43.656 [DEBUG] [Thread-300578] [transport.py] [_log()] starting thread (client mode): 0xf57aba00
2025-12-24T10:34:43.657 [DEBUG] [Thread-300578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:34:43.669 [DEBUG] [Thread-300578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:34:43.669 [INFO] [Thread-300578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] client lang: <none>
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] server lang: <none>
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] kex follows: False
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:34:43.674 [DEBUG] [Thread-300578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:34:43.675 [DEBUG] [Thread-300578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:34:43.675 [DEBUG] [Thread-300578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:34:43.675 [DEBUG] [Thread-300578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:34:43.675 [DEBUG] [Thread-300578] [transport.py] [_log()] Compression: none
2025-12-24T10:34:43.675 [DEBUG] [Thread-300578] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:34:43.708 [DEBUG] [Thread-300578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:34:43.712 [DEBUG] [Thread-300578] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:34:43.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:34:43.713 [DEBUG] [Thread-300578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:34:43.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:34:43.716 [DEBUG] [Thread-300578] [transport.py] [_log()] userauth is OK
2025-12-24T10:34:43.716 [DEBUG] [Thread-300578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:34:43.717 [DEBUG] [Thread-300578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:34:43.717 [DEBUG] [Thread-300578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:34:43.717 [DEBUG] [Thread-300578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:34:43.736 [INFO] [Thread-300578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:34:43.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:34:44.402 [DEBUG] [Thread-300578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:34:44.403 [DEBUG] [Thread-300578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:34:44.404 [DEBUG] [Thread-300578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:34:44.443 [DEBUG] [Thread-300578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:34:44.444 [DEBUG] [Thread-300578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:34:44.447 [DEBUG] [Thread-300578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:34:44.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:34:44.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:34:44.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:34:44.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:34:44.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:34:44.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:34:44.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:34:44.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:34:44.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:34:44.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.357015 -999.00  +20.00  16.18     44   +7.40 1 1 1 1 1   888    0 14.31 53.76 ----- 16.2 16.2 90.3 24.5 29.4 -26.6 28.9 -26.1 27.7 -25.1 28.4 -24.8
2025-12-24T10:34:44.478 [DEBUG] [Thread-300578] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:34:44.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:34:44.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:34:44.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.357015
2025-12-24T10:34:44.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:34:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:34:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:34:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:34:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:34:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:34:07', tmtdew=13.91, humidity=39.91, cloud=0.0, wind=11.1, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:34:06.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:34:44.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:34:45.867 [DEBUG] [Thread-300581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:35:01.011 [DEBUG] [Thread-300582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:35:16.091 [DEBUG] [Thread-300583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:35:31.198 [DEBUG] [Thread-300584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:35:35.273 [DEBUG] [Thread-300585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:35:40.527 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:35:40.530 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:35:46.233 [DEBUG] [Thread-300586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:36:01.284 [DEBUG] [Thread-300587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:36:16.339 [DEBUG] [Thread-300588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:36:31.410 [DEBUG] [Thread-300589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:36:35.531 [DEBUG] [Thread-300590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:36:40.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:36:40.676 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:36:46.460 [DEBUG] [Thread-300591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:36:56.703 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T10:37:01.564 [DEBUG] [Thread-300592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:37:16.670 [DEBUG] [Thread-300593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:37:26.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:37:26.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:37:26.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:37:27.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 36, 52), 13.57, 40.63, 0.0, 11.58, 18.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:37:27.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:36:52
2025-12-24T10:37:28.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:37:28.193 [DEBUG] [Thread-300594] [transport.py] [_log()] starting thread (client mode): 0xf57021a0
2025-12-24T10:37:28.194 [DEBUG] [Thread-300594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:37:28.204 [DEBUG] [Thread-300594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:37:28.204 [INFO] [Thread-300594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:37:28.208 [DEBUG] [Thread-300594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:37:28.208 [DEBUG] [Thread-300594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] client lang: <none>
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] server lang: <none>
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] kex follows: False
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:37:28.209 [DEBUG] [Thread-300594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:37:28.210 [DEBUG] [Thread-300594] [transport.py] [_log()] Compression: none
2025-12-24T10:37:28.210 [DEBUG] [Thread-300594] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:37:28.239 [DEBUG] [Thread-300594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:37:28.243 [DEBUG] [Thread-300594] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:37:28.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:37:28.245 [DEBUG] [Thread-300594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:37:28.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:37:28.248 [DEBUG] [Thread-300594] [transport.py] [_log()] userauth is OK
2025-12-24T10:37:28.248 [DEBUG] [Thread-300594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:37:28.248 [DEBUG] [Thread-300594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:37:28.248 [DEBUG] [Thread-300594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:37:28.248 [DEBUG] [Thread-300594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:37:28.281 [INFO] [Thread-300594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:37:28.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:37:28.926 [DEBUG] [Thread-300594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:37:28.926 [DEBUG] [Thread-300594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:37:28.926 [DEBUG] [Thread-300594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:37:28.966 [DEBUG] [Thread-300594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:37:28.967 [DEBUG] [Thread-300594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:37:28.969 [DEBUG] [Thread-300594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:37:28.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:37:28.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:37:28.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:37:28.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:37:28.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:37:28.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:37:28.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:37:28.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:37:28.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:37:28.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.359098 -999.00  +19.40   9.66     44   +7.10 1 1 1 1 1   888    0 12.37 -8.68 ----- 9.7 9.7 110.4 16.6 28.8 -28.0 28.6 -25.2 27.5 -23.4 27.9 -25.5
2025-12-24T10:37:28.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:37:28.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:37:28.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.359098
2025-12-24T10:37:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:37:29.003 [DEBUG] [Thread-300594] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:37:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:37:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:37:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:37:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:37:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:36:52', tmtdew=13.57, humidity=40.63, cloud=0.0, wind=11.58, temperature=18.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:37:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:37:29.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:37:29.101 [DEBUG] [Thread-300597] [transport.py] [_log()] starting thread (client mode): 0xfabc7940
2025-12-24T10:37:29.102 [DEBUG] [Thread-300597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:37:29.118 [DEBUG] [Thread-300597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:37:29.118 [INFO] [Thread-300597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] client lang: <none>
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] server lang: <none>
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] kex follows: False
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] Compression: none
2025-12-24T10:37:29.128 [DEBUG] [Thread-300597] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:37:29.182 [DEBUG] [Thread-300597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:37:29.182 [DEBUG] [Thread-300597] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:37:29.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:37:29.183 [DEBUG] [Thread-300597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:37:29.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:37:29.238 [DEBUG] [Thread-300597] [transport.py] [_log()] userauth is OK
2025-12-24T10:37:29.239 [DEBUG] [Thread-300597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:37:29.239 [DEBUG] [Thread-300597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:37:29.239 [DEBUG] [Thread-300597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:37:29.239 [DEBUG] [Thread-300597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:37:29.254 [INFO] [Thread-300597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:37:29.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:37:29.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:37:30.141 [DEBUG] [Thread-300597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:37:30.142 [DEBUG] [Thread-300597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:37:30.190 [DEBUG] [Thread-300597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:37:30.190 [DEBUG] [Thread-300597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:37:30.200 [DEBUG] [Thread-300597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:37:30.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:37:30.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')
2025-12-24T10:37:30.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:37:30.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:37:30.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:37:30.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:37:30.243 [DEBUG] [Thread-300597] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:37:31.731 [DEBUG] [Thread-300599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:37:35.804 [DEBUG] [Thread-300600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:37:40.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:37:40.819 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:37:46.839 [DEBUG] [Thread-300601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:38:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:38:00.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:38:00.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:38:01.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 37, 25), 13.6, 40.54, 0.0, 10.48, 18.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:38:01.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:37:25
2025-12-24T10:38:01.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:38:01.543 [DEBUG] [Thread-300602] [transport.py] [_log()] starting thread (client mode): 0xfabc50f0
2025-12-24T10:38:01.544 [DEBUG] [Thread-300602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:38:01.554 [DEBUG] [Thread-300602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:38:01.554 [INFO] [Thread-300602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:38:01.558 [DEBUG] [Thread-300602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] client lang: <none>
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] server lang: <none>
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] kex follows: False
2025-12-24T10:38:01.559 [DEBUG] [Thread-300602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:38:01.560 [DEBUG] [Thread-300602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:38:01.560 [DEBUG] [Thread-300602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:38:01.560 [DEBUG] [Thread-300602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:38:01.560 [DEBUG] [Thread-300602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:38:01.560 [DEBUG] [Thread-300602] [transport.py] [_log()] Compression: none
2025-12-24T10:38:01.560 [DEBUG] [Thread-300602] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:38:01.592 [DEBUG] [Thread-300602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:38:01.595 [DEBUG] [Thread-300602] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:38:01.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:38:01.597 [DEBUG] [Thread-300602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:38:01.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:38:01.599 [DEBUG] [Thread-300602] [transport.py] [_log()] userauth is OK
2025-12-24T10:38:01.600 [DEBUG] [Thread-300602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:38:01.600 [DEBUG] [Thread-300602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:38:01.600 [DEBUG] [Thread-300602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:38:01.600 [DEBUG] [Thread-300602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:38:01.621 [INFO] [Thread-300602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:38:01.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:38:01.875 [DEBUG] [Thread-300604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:38:02.258 [DEBUG] [Thread-300602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:38:02.258 [DEBUG] [Thread-300602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:38:02.259 [DEBUG] [Thread-300602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:38:02.300 [DEBUG] [Thread-300602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:38:02.300 [DEBUG] [Thread-300602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:38:02.302 [DEBUG] [Thread-300602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:38:02.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:38:02.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:38:02.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:38:02.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:38:02.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:38:02.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:38:02.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:38:02.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:38:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:38:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.359446 -999.00  +19.30  11.50     44   +7.00 1 1 1 1 1   888    0 11.82 -19.63 ----- 11.5 11.5 110.6 16.2 28.8 -26.3 28.5 -25.5 27.5 -24.3 27.9 -25.0
2025-12-24T10:38:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:38:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:38:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.359446
2025-12-24T10:38:02.329 [DEBUG] [Thread-300602] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:38:02.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:38:02.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:38:02.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:38:02.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:38:02.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:38:02.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:37:25', tmtdew=13.6, humidity=40.54, cloud=0.0, wind=10.48, temperature=18.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:37:36.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:38:02.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:38:02.423 [DEBUG] [Thread-300606] [transport.py] [_log()] starting thread (client mode): 0xf574d2d0
2025-12-24T10:38:02.423 [DEBUG] [Thread-300606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:38:02.437 [DEBUG] [Thread-300606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:38:02.437 [INFO] [Thread-300606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:38:02.444 [DEBUG] [Thread-300606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:38:02.444 [DEBUG] [Thread-300606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:38:02.444 [DEBUG] [Thread-300606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:38:02.444 [DEBUG] [Thread-300606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] client lang: <none>
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] server lang: <none>
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] kex follows: False
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] Compression: none
2025-12-24T10:38:02.445 [DEBUG] [Thread-300606] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:38:02.501 [DEBUG] [Thread-300606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:38:02.501 [DEBUG] [Thread-300606] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:38:02.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:38:02.502 [DEBUG] [Thread-300606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:38:02.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:38:02.559 [DEBUG] [Thread-300606] [transport.py] [_log()] userauth is OK
2025-12-24T10:38:02.559 [DEBUG] [Thread-300606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:38:02.559 [DEBUG] [Thread-300606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:38:02.559 [DEBUG] [Thread-300606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:38:02.559 [DEBUG] [Thread-300606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:38:02.572 [INFO] [Thread-300606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:38:02.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:38:02.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:38:03.402 [DEBUG] [Thread-300606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:38:03.402 [DEBUG] [Thread-300606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:38:03.449 [DEBUG] [Thread-300606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:38:03.449 [DEBUG] [Thread-300606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:38:03.457 [DEBUG] [Thread-300606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:38:03.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:38:03.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:38:03.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:38:03.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:38:03.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:38:03.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:38:03.491 [DEBUG] [Thread-300606] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:38:16.938 [DEBUG] [Thread-300608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:38:32.044 [DEBUG] [Thread-300609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:38:33.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:38:33.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:38:33.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:38:34.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 37, 59), 13.46, 40.98, 0.0, 9.71, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:38:34.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:37:59
2025-12-24T10:38:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:38:34.887 [DEBUG] [Thread-300610] [transport.py] [_log()] starting thread (client mode): 0xf574e320
2025-12-24T10:38:34.888 [DEBUG] [Thread-300610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:38:34.902 [DEBUG] [Thread-300610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:38:34.902 [INFO] [Thread-300610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:38:34.906 [DEBUG] [Thread-300610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:38:34.906 [DEBUG] [Thread-300610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:38:34.906 [DEBUG] [Thread-300610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:38:34.906 [DEBUG] [Thread-300610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] client lang: <none>
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] server lang: <none>
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] kex follows: False
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:38:34.907 [DEBUG] [Thread-300610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:38:34.908 [DEBUG] [Thread-300610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:38:34.908 [DEBUG] [Thread-300610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:38:34.908 [DEBUG] [Thread-300610] [transport.py] [_log()] Compression: none
2025-12-24T10:38:34.908 [DEBUG] [Thread-300610] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:38:34.939 [DEBUG] [Thread-300610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:38:34.943 [DEBUG] [Thread-300610] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:38:34.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:38:34.945 [DEBUG] [Thread-300610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:38:34.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:38:34.947 [DEBUG] [Thread-300610] [transport.py] [_log()] userauth is OK
2025-12-24T10:38:34.947 [DEBUG] [Thread-300610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:38:34.948 [DEBUG] [Thread-300610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:38:34.948 [DEBUG] [Thread-300610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:38:34.948 [DEBUG] [Thread-300610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:38:34.977 [INFO] [Thread-300610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:38:34.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:38:35.616 [DEBUG] [Thread-300610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:38:35.616 [DEBUG] [Thread-300610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:38:35.618 [DEBUG] [Thread-300610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:38:35.657 [DEBUG] [Thread-300610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:38:35.657 [DEBUG] [Thread-300610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:38:35.661 [DEBUG] [Thread-300610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:38:35.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:38:35.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:38:35.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:38:35.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:38:35.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:38:35.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:38:35.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:38:35.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:38:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:38:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.359793 -999.00  +19.30   7.43     44   +7.00 1 1 1 1 1   888    0 11.77 -26.22 ----- 7.4 7.4 45.6 9.1 28.9 -25.2 28.6 -25.1 27.6 -24.4 28.1 -24.4
2025-12-24T10:38:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:38:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:38:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.359793
2025-12-24T10:38:35.697 [DEBUG] [Thread-300610] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:38:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:38:35.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:38:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:38:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:38:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:38:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:37:59', tmtdew=13.46, humidity=40.98, cloud=0.0, wind=9.71, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:38:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:38:35.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:38:35.817 [DEBUG] [Thread-300613] [transport.py] [_log()] starting thread (client mode): 0xf572dc60
2025-12-24T10:38:35.817 [DEBUG] [Thread-300613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:38:35.835 [DEBUG] [Thread-300613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:38:35.835 [INFO] [Thread-300613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:38:35.843 [DEBUG] [Thread-300613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:38:35.843 [DEBUG] [Thread-300613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:38:35.843 [DEBUG] [Thread-300613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:38:35.843 [DEBUG] [Thread-300613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:38:35.843 [DEBUG] [Thread-300613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:38:35.843 [DEBUG] [Thread-300613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:38:35.843 [DEBUG] [Thread-300613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] client lang: <none>
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] server lang: <none>
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] kex follows: False
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:38:35.844 [DEBUG] [Thread-300613] [transport.py] [_log()] Compression: none
2025-12-24T10:38:35.845 [DEBUG] [Thread-300613] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:38:35.903 [DEBUG] [Thread-300613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:38:35.904 [DEBUG] [Thread-300613] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:38:35.904 [DEBUG] [Thread-300613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:38:35.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:38:35.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:38:35.965 [DEBUG] [Thread-300613] [transport.py] [_log()] userauth is OK
2025-12-24T10:38:35.965 [DEBUG] [Thread-300613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:38:35.965 [DEBUG] [Thread-300613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:38:35.965 [DEBUG] [Thread-300613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:38:35.965 [DEBUG] [Thread-300613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:38:35.981 [INFO] [Thread-300613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:38:35.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:38:35.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:38:36.064 [DEBUG] [Thread-300615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:38:36.807 [DEBUG] [Thread-300613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:38:36.807 [DEBUG] [Thread-300613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:38:36.858 [DEBUG] [Thread-300613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:38:36.859 [DEBUG] [Thread-300613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:38:36.870 [DEBUG] [Thread-300613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:38:36.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:38:36.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:38:36.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:38:36.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:38:36.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:38:36.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:38:36.918 [DEBUG] [Thread-300613] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:38:40.962 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:38:40.963 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:38:47.114 [DEBUG] [Thread-300616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:39:02.235 [DEBUG] [Thread-300617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:39:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:39:06.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:39:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:39:07.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 38, 31), 13.41, 41.14, 0.0, 9.27, 18.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:39:07.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:38:31
2025-12-24T10:39:08.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:39:08.312 [DEBUG] [Thread-300618] [transport.py] [_log()] starting thread (client mode): 0xf5702fe0
2025-12-24T10:39:08.313 [DEBUG] [Thread-300618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:39:08.316 [DEBUG] [Thread-300618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:39:08.317 [INFO] [Thread-300618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:39:08.320 [DEBUG] [Thread-300618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] client lang: <none>
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] server lang: <none>
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] kex follows: False
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] Compression: none
2025-12-24T10:39:08.321 [DEBUG] [Thread-300618] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:39:08.351 [DEBUG] [Thread-300618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:39:08.354 [DEBUG] [Thread-300618] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:39:08.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:39:08.357 [DEBUG] [Thread-300618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:39:08.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:39:08.359 [DEBUG] [Thread-300618] [transport.py] [_log()] userauth is OK
2025-12-24T10:39:08.359 [DEBUG] [Thread-300618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:39:08.359 [DEBUG] [Thread-300618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:39:08.359 [DEBUG] [Thread-300618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:39:08.359 [DEBUG] [Thread-300618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:39:08.378 [INFO] [Thread-300618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:39:08.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:39:09.012 [DEBUG] [Thread-300618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:39:09.013 [DEBUG] [Thread-300618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:39:09.014 [DEBUG] [Thread-300618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:39:09.053 [DEBUG] [Thread-300618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:39:09.054 [DEBUG] [Thread-300618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:39:09.057 [DEBUG] [Thread-300618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:39:09.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:39:09.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:39:09.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:39:09.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:39:09.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:39:09.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:39:09.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:39:09.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:39:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:39:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.360140 -999.00  +19.60  10.46     44   +7.10 1 1 1 1 1   888    0 11.88 -30.33 ----- 10.5 10.5 141.6 11.6 29.1 -25.3 28.6 -25.1 27.7 -22.7 28.1 -24.8
2025-12-24T10:39:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:39:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:39:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.360140
2025-12-24T10:39:09.091 [DEBUG] [Thread-300618] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:39:09.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:39:09.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:39:09.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:39:09.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:39:09.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:39:09.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:38:31', tmtdew=13.41, humidity=41.14, cloud=0.0, wind=9.27, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:38:36.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:39:09.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:39:09.208 [DEBUG] [Thread-300621] [transport.py] [_log()] starting thread (client mode): 0xf57bd510
2025-12-24T10:39:09.208 [DEBUG] [Thread-300621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:39:09.222 [DEBUG] [Thread-300621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:39:09.223 [INFO] [Thread-300621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:39:09.230 [DEBUG] [Thread-300621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:39:09.231 [DEBUG] [Thread-300621] [transport.py] [_log()] client lang: <none>
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] server lang: <none>
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] kex follows: False
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] Compression: none
2025-12-24T10:39:09.232 [DEBUG] [Thread-300621] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:39:09.291 [DEBUG] [Thread-300621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:39:09.292 [DEBUG] [Thread-300621] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:39:09.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:39:09.293 [DEBUG] [Thread-300621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:39:09.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:39:09.347 [DEBUG] [Thread-300621] [transport.py] [_log()] userauth is OK
2025-12-24T10:39:09.347 [DEBUG] [Thread-300621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:39:09.347 [DEBUG] [Thread-300621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:39:09.347 [DEBUG] [Thread-300621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:39:09.348 [DEBUG] [Thread-300621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:39:09.366 [INFO] [Thread-300621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:39:09.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:39:09.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:39:10.188 [DEBUG] [Thread-300621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:39:10.188 [DEBUG] [Thread-300621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:39:10.236 [DEBUG] [Thread-300621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:39:10.237 [DEBUG] [Thread-300621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:39:10.246 [DEBUG] [Thread-300621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:39:10.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:39:10.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:39:10.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:39:10.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:39:10.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:39:10.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:39:10.284 [DEBUG] [Thread-300621] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:39:17.288 [DEBUG] [Thread-300623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:39:32.438 [DEBUG] [Thread-300624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:39:36.340 [DEBUG] [Thread-300625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:39:40.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:39:40.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:39:40.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:39:41.103 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:39:41.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:39:41.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 39, 5), 13.42, 41.13, 0.0, 8.54, 18.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:39:41.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:39:05
2025-12-24T10:39:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:39:41.676 [DEBUG] [Thread-300626] [transport.py] [_log()] starting thread (client mode): 0xf57a8d00
2025-12-24T10:39:41.676 [DEBUG] [Thread-300626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:39:41.689 [DEBUG] [Thread-300626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:39:41.689 [INFO] [Thread-300626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:39:41.693 [DEBUG] [Thread-300626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:39:41.693 [DEBUG] [Thread-300626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:39:41.693 [DEBUG] [Thread-300626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:39:41.693 [DEBUG] [Thread-300626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:39:41.693 [DEBUG] [Thread-300626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:39:41.693 [DEBUG] [Thread-300626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] client lang: <none>
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] server lang: <none>
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] kex follows: False
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:39:41.694 [DEBUG] [Thread-300626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:39:41.695 [DEBUG] [Thread-300626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:39:41.695 [DEBUG] [Thread-300626] [transport.py] [_log()] Compression: none
2025-12-24T10:39:41.695 [DEBUG] [Thread-300626] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:39:41.725 [DEBUG] [Thread-300626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:39:41.728 [DEBUG] [Thread-300626] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:39:41.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:39:41.730 [DEBUG] [Thread-300626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:39:41.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:39:41.733 [DEBUG] [Thread-300626] [transport.py] [_log()] userauth is OK
2025-12-24T10:39:41.733 [DEBUG] [Thread-300626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:39:41.733 [DEBUG] [Thread-300626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:39:41.733 [DEBUG] [Thread-300626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:39:41.733 [DEBUG] [Thread-300626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:39:41.750 [INFO] [Thread-300626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:39:41.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:39:42.340 [DEBUG] [Thread-300626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:39:42.340 [DEBUG] [Thread-300626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:39:42.341 [DEBUG] [Thread-300626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:39:42.381 [DEBUG] [Thread-300626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:39:42.381 [DEBUG] [Thread-300626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:39:42.385 [DEBUG] [Thread-300626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:39:42.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:39:42.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:39:42.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:39:42.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:39:42.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:39:42.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:39:42.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:39:42.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:39:42.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:39:42.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.360487 -999.00  +19.70   8.73     43   +7.00 1 1 1 1 1   888    0 11.80 -31.87 ----- 8.7 8.7 129.8 11.3 29.2 -25.0 28.7 -25.5 27.7 -23.0 28.2 -24.0
2025-12-24T10:39:42.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:39:42.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:39:42.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.360487
2025-12-24T10:39:42.420 [DEBUG] [Thread-300626] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:39:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:39:42.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:39:42.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:39:42.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:39:42.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:39:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:39:05', tmtdew=13.42, humidity=41.13, cloud=0.0, wind=8.54, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:39:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:39:42.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:39:42.534 [DEBUG] [Thread-300629] [transport.py] [_log()] starting thread (client mode): 0xf572dcf0
2025-12-24T10:39:42.534 [DEBUG] [Thread-300629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:39:42.549 [DEBUG] [Thread-300629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:39:42.549 [INFO] [Thread-300629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:39:42.556 [DEBUG] [Thread-300629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:39:42.557 [DEBUG] [Thread-300629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:39:42.557 [DEBUG] [Thread-300629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:39:42.557 [DEBUG] [Thread-300629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:39:42.557 [DEBUG] [Thread-300629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:39:42.557 [DEBUG] [Thread-300629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:39:42.557 [DEBUG] [Thread-300629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:39:42.557 [DEBUG] [Thread-300629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:39:42.557 [DEBUG] [Thread-300629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] client lang: <none>
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] server lang: <none>
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] kex follows: False
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] Compression: none
2025-12-24T10:39:42.558 [DEBUG] [Thread-300629] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:39:42.613 [DEBUG] [Thread-300629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:39:42.613 [DEBUG] [Thread-300629] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:39:42.613 [DEBUG] [Thread-300629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:39:42.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:39:42.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:39:42.675 [DEBUG] [Thread-300629] [transport.py] [_log()] userauth is OK
2025-12-24T10:39:42.675 [DEBUG] [Thread-300629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:39:42.675 [DEBUG] [Thread-300629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:39:42.675 [DEBUG] [Thread-300629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:39:42.675 [DEBUG] [Thread-300629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:39:42.693 [INFO] [Thread-300629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:39:42.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:39:42.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:39:43.510 [DEBUG] [Thread-300629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:39:43.510 [DEBUG] [Thread-300629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:39:43.559 [DEBUG] [Thread-300629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:39:43.559 [DEBUG] [Thread-300629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:39:43.567 [DEBUG] [Thread-300629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:39:43.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:39:43.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:39:43.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:39:43.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:39:43.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:39:43.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:39:43.602 [DEBUG] [Thread-300629] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:39:47.520 [DEBUG] [Thread-300631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:40:02.660 [DEBUG] [Thread-300632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:40:13.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:40:13.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:40:13.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:40:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 39, 38), 13.87, 40.25, 0.0, 12.53, 19.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:40:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:39:38
2025-12-24T10:40:14.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:40:15.053 [DEBUG] [Thread-300633] [transport.py] [_log()] starting thread (client mode): 0xf574d600
2025-12-24T10:40:15.054 [DEBUG] [Thread-300633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:40:15.068 [DEBUG] [Thread-300633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:40:15.068 [INFO] [Thread-300633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:40:15.071 [DEBUG] [Thread-300633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] client lang: <none>
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] server lang: <none>
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] kex follows: False
2025-12-24T10:40:15.072 [DEBUG] [Thread-300633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:40:15.073 [DEBUG] [Thread-300633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:40:15.073 [DEBUG] [Thread-300633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:40:15.073 [DEBUG] [Thread-300633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:40:15.073 [DEBUG] [Thread-300633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:40:15.073 [DEBUG] [Thread-300633] [transport.py] [_log()] Compression: none
2025-12-24T10:40:15.073 [DEBUG] [Thread-300633] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:40:15.106 [DEBUG] [Thread-300633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:40:15.111 [DEBUG] [Thread-300633] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:40:15.113 [DEBUG] [Thread-300633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:40:15.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:40:15.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:40:15.119 [DEBUG] [Thread-300633] [transport.py] [_log()] userauth is OK
2025-12-24T10:40:15.119 [DEBUG] [Thread-300633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:40:15.120 [DEBUG] [Thread-300633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:40:15.120 [DEBUG] [Thread-300633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:40:15.120 [DEBUG] [Thread-300633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:40:15.147 [INFO] [Thread-300633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:40:15.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:40:15.785 [DEBUG] [Thread-300633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:40:15.785 [DEBUG] [Thread-300633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:40:15.786 [DEBUG] [Thread-300633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:40:15.826 [DEBUG] [Thread-300633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:40:15.826 [DEBUG] [Thread-300633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:40:15.830 [DEBUG] [Thread-300633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:40:15.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:40:15.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:40:15.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:40:15.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:40:15.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:40:15.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:40:15.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:40:15.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:40:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:40:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.360834 -999.00  +20.40  10.15     42   +7.30 1 1 1 1 1   888    0 11.91 -34.49 ----- 10.2 10.2 146.4 13.4 29.4 -25.6 28.8 -24.7 27.8 -23.3 28.3 -24.8
2025-12-24T10:40:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:40:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:40:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.360834
2025-12-24T10:40:15.864 [DEBUG] [Thread-300633] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:40:15.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:40:15.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:40:15.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:40:15.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:40:15.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:40:15.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:39:38', tmtdew=13.87, humidity=40.25, cloud=0.0, wind=12.53, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:39:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:40:15.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:40:15.981 [DEBUG] [Thread-300636] [transport.py] [_log()] starting thread (client mode): 0xf574ef50
2025-12-24T10:40:15.981 [DEBUG] [Thread-300636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:40:15.996 [DEBUG] [Thread-300636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:40:15.997 [INFO] [Thread-300636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:40:16.004 [DEBUG] [Thread-300636] [transport.py] [_log()] client lang: <none>
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] server lang: <none>
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] kex follows: False
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] Compression: none
2025-12-24T10:40:16.005 [DEBUG] [Thread-300636] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:40:16.062 [DEBUG] [Thread-300636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:40:16.063 [DEBUG] [Thread-300636] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:40:16.063 [DEBUG] [Thread-300636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:40:16.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:40:16.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:40:16.119 [DEBUG] [Thread-300636] [transport.py] [_log()] userauth is OK
2025-12-24T10:40:16.119 [DEBUG] [Thread-300636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:40:16.119 [DEBUG] [Thread-300636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:40:16.119 [DEBUG] [Thread-300636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:40:16.119 [DEBUG] [Thread-300636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:40:16.133 [INFO] [Thread-300636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:40:16.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:40:16.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:40:16.972 [DEBUG] [Thread-300636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:40:16.972 [DEBUG] [Thread-300636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:40:17.020 [DEBUG] [Thread-300636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:40:17.020 [DEBUG] [Thread-300636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:40:17.029 [DEBUG] [Thread-300636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:40:17.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:40:17.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:40:17.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:40:17.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:40:17.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:40:17.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:40:17.067 [DEBUG] [Thread-300636] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:40:17.714 [DEBUG] [Thread-300638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:40:32.802 [DEBUG] [Thread-300639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:40:36.582 [DEBUG] [Thread-300640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:40:41.253 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:40:41.254 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:40:47.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:40:47.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:40:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:40:47.837 [DEBUG] [Thread-300641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:40:47.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 40, 11), 14.03, 39.85, 0.0, 8.24, 19.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:40:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:40:11
2025-12-24T10:40:48.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:40:48.324 [DEBUG] [Thread-300642] [transport.py] [_log()] starting thread (client mode): 0xf5703ac0
2025-12-24T10:40:48.325 [DEBUG] [Thread-300642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:40:48.336 [DEBUG] [Thread-300642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:40:48.336 [INFO] [Thread-300642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:40:48.340 [DEBUG] [Thread-300642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:40:48.340 [DEBUG] [Thread-300642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:40:48.340 [DEBUG] [Thread-300642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:40:48.340 [DEBUG] [Thread-300642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:40:48.340 [DEBUG] [Thread-300642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:40:48.340 [DEBUG] [Thread-300642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:40:48.340 [DEBUG] [Thread-300642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] client lang: <none>
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] server lang: <none>
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] kex follows: False
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:40:48.341 [DEBUG] [Thread-300642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:40:48.342 [DEBUG] [Thread-300642] [transport.py] [_log()] Compression: none
2025-12-24T10:40:48.342 [DEBUG] [Thread-300642] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:40:48.374 [DEBUG] [Thread-300642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:40:48.377 [DEBUG] [Thread-300642] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:40:48.379 [DEBUG] [Thread-300642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:40:48.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:40:48.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:40:48.382 [DEBUG] [Thread-300642] [transport.py] [_log()] userauth is OK
2025-12-24T10:40:48.382 [DEBUG] [Thread-300642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:40:48.382 [DEBUG] [Thread-300642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:40:48.382 [DEBUG] [Thread-300642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:40:48.382 [DEBUG] [Thread-300642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:40:48.400 [INFO] [Thread-300642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:40:48.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:40:49.039 [DEBUG] [Thread-300642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:40:49.039 [DEBUG] [Thread-300642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:40:49.039 [DEBUG] [Thread-300642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:40:49.079 [DEBUG] [Thread-300642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:40:49.079 [DEBUG] [Thread-300642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:40:49.081 [DEBUG] [Thread-300642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:40:49.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:40:49.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:40:49.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:40:49.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:40:49.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:40:49.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:40:49.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:40:49.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:40:49.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:40:49.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.361181 -999.00  +20.50   4.41     42   +7.20 1 1 1 1 1   888    0 11.71 -33.47 ----- 4.4 4.4 147.4 6.4 29.6 -25.0 28.9 -25.6 27.9 -23.3 28.4 -24.2
2025-12-24T10:40:49.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:40:49.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:40:49.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.361181
2025-12-24T10:40:49.110 [DEBUG] [Thread-300642] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:40:49.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:40:49.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:40:49.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:40:49.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:40:49.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:40:49.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:40:11', tmtdew=14.03, humidity=39.85, cloud=0.0, wind=8.24, temperature=19.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:40:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:40:49.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:40:49.212 [DEBUG] [Thread-300645] [transport.py] [_log()] starting thread (client mode): 0xfabc6a70
2025-12-24T10:40:49.212 [DEBUG] [Thread-300645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:40:49.226 [DEBUG] [Thread-300645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:40:49.226 [INFO] [Thread-300645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:40:49.233 [DEBUG] [Thread-300645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:40:49.233 [DEBUG] [Thread-300645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] client lang: <none>
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] server lang: <none>
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] kex follows: False
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] Compression: none
2025-12-24T10:40:49.234 [DEBUG] [Thread-300645] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:40:49.293 [DEBUG] [Thread-300645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:40:49.293 [DEBUG] [Thread-300645] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:40:49.293 [DEBUG] [Thread-300645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:40:49.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:40:49.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:40:49.350 [DEBUG] [Thread-300645] [transport.py] [_log()] userauth is OK
2025-12-24T10:40:49.350 [DEBUG] [Thread-300645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:40:49.350 [DEBUG] [Thread-300645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:40:49.350 [DEBUG] [Thread-300645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:40:49.351 [DEBUG] [Thread-300645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:40:49.364 [INFO] [Thread-300645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:40:49.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:40:49.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:40:50.200 [DEBUG] [Thread-300645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:40:50.200 [DEBUG] [Thread-300645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:40:50.248 [DEBUG] [Thread-300645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:40:50.248 [DEBUG] [Thread-300645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:40:50.256 [DEBUG] [Thread-300645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:40:50.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:40:50.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:40:50.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:40:50.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:40:50.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:40:50.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:40:50.289 [DEBUG] [Thread-300645] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:41:02.880 [DEBUG] [Thread-300647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:41:17.985 [DEBUG] [Thread-300648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:41:20.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:41:20.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:41:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:41:21.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 40, 44), 14.1, 39.28, 0.0, 5.24, 19.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:41:21.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:40:44
2025-12-24T10:41:21.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:41:21.591 [DEBUG] [Thread-300649] [transport.py] [_log()] starting thread (client mode): 0xf57bea70
2025-12-24T10:41:21.592 [DEBUG] [Thread-300649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:41:21.605 [DEBUG] [Thread-300649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:41:21.605 [INFO] [Thread-300649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] client lang: <none>
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] server lang: <none>
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] kex follows: False
2025-12-24T10:41:21.609 [DEBUG] [Thread-300649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:41:21.610 [DEBUG] [Thread-300649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:41:21.610 [DEBUG] [Thread-300649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:41:21.610 [DEBUG] [Thread-300649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:41:21.610 [DEBUG] [Thread-300649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:41:21.610 [DEBUG] [Thread-300649] [transport.py] [_log()] Compression: none
2025-12-24T10:41:21.610 [DEBUG] [Thread-300649] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:41:21.637 [DEBUG] [Thread-300649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:41:21.641 [DEBUG] [Thread-300649] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:41:21.642 [DEBUG] [Thread-300649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:41:21.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:41:21.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:41:21.682 [DEBUG] [Thread-300649] [transport.py] [_log()] userauth is OK
2025-12-24T10:41:21.682 [DEBUG] [Thread-300649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:41:21.682 [DEBUG] [Thread-300649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:41:21.682 [DEBUG] [Thread-300649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:41:21.682 [DEBUG] [Thread-300649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:41:21.721 [INFO] [Thread-300649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:41:21.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:41:22.352 [DEBUG] [Thread-300649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:41:22.360 [DEBUG] [Thread-300649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:41:22.361 [DEBUG] [Thread-300649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:41:22.393 [DEBUG] [Thread-300649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:41:22.393 [DEBUG] [Thread-300649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:41:22.395 [DEBUG] [Thread-300649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:41:22.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:41:22.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:41:22.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:41:22.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:41:22.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:41:22.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:41:22.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:41:22.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:41:22.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:41:22.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.361876 -999.00  +20.50  10.56     41   +6.80 1 1 1 1 1   888    0 11.86 -25.35 ----- 10.6 10.6 97.3 14.3 29.5 -26.3 29.0 -26.1 27.9 -25.4 28.5 -25.8
2025-12-24T10:41:22.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:41:22.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:41:22.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.361876
2025-12-24T10:41:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:41:22.432 [DEBUG] [Thread-300649] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:41:22.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:41:22.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:41:22.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:41:22.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:41:22.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:40:44', tmtdew=14.1, humidity=39.28, cloud=0.0, wind=5.24, temperature=19.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:41:06.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:41:22.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:41:22.519 [DEBUG] [Thread-300652] [transport.py] [_log()] starting thread (client mode): 0xf57bf1f0
2025-12-24T10:41:22.519 [DEBUG] [Thread-300652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:41:22.533 [DEBUG] [Thread-300652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:41:22.533 [INFO] [Thread-300652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:41:22.540 [DEBUG] [Thread-300652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:41:22.540 [DEBUG] [Thread-300652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:41:22.540 [DEBUG] [Thread-300652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:41:22.540 [DEBUG] [Thread-300652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:41:22.540 [DEBUG] [Thread-300652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] client lang: <none>
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] server lang: <none>
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] kex follows: False
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] Compression: none
2025-12-24T10:41:22.541 [DEBUG] [Thread-300652] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:41:22.598 [DEBUG] [Thread-300652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:41:22.599 [DEBUG] [Thread-300652] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:41:22.599 [DEBUG] [Thread-300652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:41:22.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:41:22.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:41:22.655 [DEBUG] [Thread-300652] [transport.py] [_log()] userauth is OK
2025-12-24T10:41:22.655 [DEBUG] [Thread-300652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:41:22.655 [DEBUG] [Thread-300652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:41:22.655 [DEBUG] [Thread-300652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:41:22.655 [DEBUG] [Thread-300652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:41:22.674 [INFO] [Thread-300652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:41:22.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:41:22.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:41:23.524 [DEBUG] [Thread-300652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:41:23.524 [DEBUG] [Thread-300652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:41:23.572 [DEBUG] [Thread-300652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:41:23.572 [DEBUG] [Thread-300652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:41:23.580 [DEBUG] [Thread-300652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:41:23.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:41:23.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:41:23.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:41:23.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:41:23.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:41:23.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:41:23.616 [DEBUG] [Thread-300652] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:41:33.061 [DEBUG] [Thread-300654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:41:36.836 [DEBUG] [Thread-300655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:41:41.396 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:41:41.397 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:41:48.179 [DEBUG] [Thread-300656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:41:53.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:41:53.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:41:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:41:54.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 41, 17), 14.02, 39.5, 0.0, 6.44, 19.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:41:54.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:41:17
2025-12-24T10:41:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:41:54.922 [DEBUG] [Thread-300657] [transport.py] [_log()] starting thread (client mode): 0xf57be0e0
2025-12-24T10:41:54.923 [DEBUG] [Thread-300657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:41:54.925 [DEBUG] [Thread-300657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:41:54.925 [INFO] [Thread-300657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] client lang: <none>
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] server lang: <none>
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] kex follows: False
2025-12-24T10:41:54.929 [DEBUG] [Thread-300657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:41:54.930 [DEBUG] [Thread-300657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:41:54.930 [DEBUG] [Thread-300657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:41:54.930 [DEBUG] [Thread-300657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:41:54.930 [DEBUG] [Thread-300657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:41:54.930 [DEBUG] [Thread-300657] [transport.py] [_log()] Compression: none
2025-12-24T10:41:54.930 [DEBUG] [Thread-300657] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:41:54.962 [DEBUG] [Thread-300657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:41:54.965 [DEBUG] [Thread-300657] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:41:54.966 [DEBUG] [Thread-300657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:41:54.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:41:54.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:41:55.004 [DEBUG] [Thread-300657] [transport.py] [_log()] userauth is OK
2025-12-24T10:41:55.005 [DEBUG] [Thread-300657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:41:55.005 [DEBUG] [Thread-300657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:41:55.005 [DEBUG] [Thread-300657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:41:55.005 [DEBUG] [Thread-300657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:41:55.023 [INFO] [Thread-300657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:41:55.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:41:55.664 [DEBUG] [Thread-300657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:41:55.665 [DEBUG] [Thread-300657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:41:55.666 [DEBUG] [Thread-300657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:41:55.706 [DEBUG] [Thread-300657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:41:55.706 [DEBUG] [Thread-300657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:41:55.708 [DEBUG] [Thread-300657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:41:55.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:41:55.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:41:55.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:41:55.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:41:55.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:41:55.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:41:55.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:41:55.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:41:55.741 [DEBUG] [Thread-300657] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:41:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:41:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.362223 -999.00  +20.20   6.80     41   +6.80 1 1 1 1 1   888    0 12.17 -22.57 ----- 6.8 6.8 73.2 10.3 29.5 -26.1 29.0 -26.5 27.9 -24.5 28.5 -25.7
2025-12-24T10:41:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:41:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:41:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.362223
2025-12-24T10:41:55.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:41:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:41:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:41:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:41:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:41:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:41:17', tmtdew=14.02, humidity=39.5, cloud=0.0, wind=6.44, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:41:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:41:55.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:41:55.856 [DEBUG] [Thread-300660] [transport.py] [_log()] starting thread (client mode): 0xf57becb0
2025-12-24T10:41:55.857 [DEBUG] [Thread-300660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:41:55.874 [DEBUG] [Thread-300660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:41:55.874 [INFO] [Thread-300660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:41:55.881 [DEBUG] [Thread-300660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:41:55.882 [DEBUG] [Thread-300660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:41:55.882 [DEBUG] [Thread-300660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:41:55.882 [DEBUG] [Thread-300660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:41:55.882 [DEBUG] [Thread-300660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] client lang: <none>
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] server lang: <none>
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] kex follows: False
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] Compression: none
2025-12-24T10:41:55.883 [DEBUG] [Thread-300660] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:41:55.939 [DEBUG] [Thread-300660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:41:55.940 [DEBUG] [Thread-300660] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:41:55.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:41:55.941 [DEBUG] [Thread-300660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:41:55.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:41:55.999 [DEBUG] [Thread-300660] [transport.py] [_log()] userauth is OK
2025-12-24T10:41:56.000 [DEBUG] [Thread-300660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:41:56.000 [DEBUG] [Thread-300660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:41:56.000 [DEBUG] [Thread-300660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:41:56.000 [DEBUG] [Thread-300660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:41:56.018 [INFO] [Thread-300660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:41:56.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:41:56.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:41:56.866 [DEBUG] [Thread-300660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:41:56.867 [DEBUG] [Thread-300660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:41:56.905 [DEBUG] [Thread-300660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:41:56.905 [DEBUG] [Thread-300660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:41:56.914 [DEBUG] [Thread-300660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:41:56.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:41:56.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')
2025-12-24T10:41:56.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
2025-12-24T10:41:56.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:41:56.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:41:56.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:41:56.947 [DEBUG] [Thread-300660] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:42:03.219 [DEBUG] [Thread-300662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:42:18.331 [DEBUG] [Thread-300663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:42:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:42:26.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:42:26.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:42:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 41, 51), 13.96, 39.6, 0.0, 7.76, 19.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:42:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:41:51
2025-12-24T10:42:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:42:28.236 [DEBUG] [Thread-300664] [transport.py] [_log()] starting thread (client mode): 0xf572e680
2025-12-24T10:42:28.237 [DEBUG] [Thread-300664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:42:28.247 [DEBUG] [Thread-300664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:42:28.247 [INFO] [Thread-300664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:42:28.251 [DEBUG] [Thread-300664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] client lang: <none>
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] server lang: <none>
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] kex follows: False
2025-12-24T10:42:28.252 [DEBUG] [Thread-300664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:42:28.253 [DEBUG] [Thread-300664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:42:28.253 [DEBUG] [Thread-300664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:42:28.253 [DEBUG] [Thread-300664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:42:28.253 [DEBUG] [Thread-300664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:42:28.253 [DEBUG] [Thread-300664] [transport.py] [_log()] Compression: none
2025-12-24T10:42:28.253 [DEBUG] [Thread-300664] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:42:28.283 [DEBUG] [Thread-300664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:42:28.286 [DEBUG] [Thread-300664] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:42:28.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:42:28.288 [DEBUG] [Thread-300664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:42:28.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:42:28.291 [DEBUG] [Thread-300664] [transport.py] [_log()] userauth is OK
2025-12-24T10:42:28.291 [DEBUG] [Thread-300664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:42:28.291 [DEBUG] [Thread-300664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:42:28.291 [DEBUG] [Thread-300664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:42:28.291 [DEBUG] [Thread-300664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:42:28.310 [INFO] [Thread-300664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:42:28.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:42:28.936 [DEBUG] [Thread-300664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:42:28.937 [DEBUG] [Thread-300664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:42:28.946 [DEBUG] [Thread-300664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:42:28.978 [DEBUG] [Thread-300664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:42:28.978 [DEBUG] [Thread-300664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:42:28.981 [DEBUG] [Thread-300664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:42:28.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:42:28.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:42:28.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:42:28.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:42:29.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:42:29.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:42:29.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:42:29.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:42:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:42:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.362571 -999.00  +20.10   5.34     42   +6.80 1 1 1 1 1   888    0 12.19 -20.85 ----- 5.3 5.3 40.8 6.4 29.6 -25.7 28.9 -26.3 28.0 -25.2 28.6 -24.6
2025-12-24T10:42:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:42:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:42:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.362571
2025-12-24T10:42:29.009 [DEBUG] [Thread-300664] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:42:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:42:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:42:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:42:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:42:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:42:29.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:41:51', tmtdew=13.96, humidity=39.6, cloud=0.0, wind=7.76, temperature=19.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:42:06.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:42:29.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:42:29.100 [DEBUG] [Thread-300667] [transport.py] [_log()] starting thread (client mode): 0xf572c490
2025-12-24T10:42:29.100 [DEBUG] [Thread-300667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:42:29.114 [DEBUG] [Thread-300667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:42:29.114 [INFO] [Thread-300667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] client lang: <none>
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] server lang: <none>
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] kex follows: False
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] Compression: none
2025-12-24T10:42:29.126 [DEBUG] [Thread-300667] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:42:29.177 [DEBUG] [Thread-300667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:42:29.177 [DEBUG] [Thread-300667] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:42:29.177 [DEBUG] [Thread-300667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:42:29.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:42:29.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:42:29.234 [DEBUG] [Thread-300667] [transport.py] [_log()] userauth is OK
2025-12-24T10:42:29.234 [DEBUG] [Thread-300667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:42:29.235 [DEBUG] [Thread-300667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:42:29.235 [DEBUG] [Thread-300667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:42:29.235 [DEBUG] [Thread-300667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:42:29.248 [INFO] [Thread-300667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:42:29.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:42:29.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:42:30.105 [DEBUG] [Thread-300667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:42:30.105 [DEBUG] [Thread-300667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:42:30.143 [DEBUG] [Thread-300667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:42:30.143 [DEBUG] [Thread-300667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:42:30.153 [DEBUG] [Thread-300667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:42:30.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:42:30.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:42:30.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:42:30.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:42:30.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:42:30.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:42:30.193 [DEBUG] [Thread-300667] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:42:33.411 [DEBUG] [Thread-300669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:42:37.166 [DEBUG] [Thread-300670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:42:41.549 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:42:41.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:42:48.529 [DEBUG] [Thread-300671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:43:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:43:00.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:43:00.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:43:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 42, 25), 13.9, 39.75, 0.0, 9.28, 19.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:43:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:42:25
2025-12-24T10:43:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:43:01.625 [DEBUG] [Thread-300672] [transport.py] [_log()] starting thread (client mode): 0xf57a9cc0
2025-12-24T10:43:01.625 [DEBUG] [Thread-300672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:43:01.636 [DEBUG] [Thread-300672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:43:01.637 [INFO] [Thread-300672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:43:01.641 [DEBUG] [Thread-300672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:43:01.641 [DEBUG] [Thread-300672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:43:01.641 [DEBUG] [Thread-300672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:43:01.641 [DEBUG] [Thread-300672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] client lang: <none>
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] server lang: <none>
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] kex follows: False
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:43:01.642 [DEBUG] [Thread-300672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:43:01.643 [DEBUG] [Thread-300672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:43:01.643 [DEBUG] [Thread-300672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:43:01.643 [DEBUG] [Thread-300672] [transport.py] [_log()] Compression: none
2025-12-24T10:43:01.643 [DEBUG] [Thread-300672] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:43:01.672 [DEBUG] [Thread-300672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:43:01.674 [DEBUG] [Thread-300672] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:43:01.675 [DEBUG] [Thread-300672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:43:01.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:43:01.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:43:01.679 [DEBUG] [Thread-300672] [transport.py] [_log()] userauth is OK
2025-12-24T10:43:01.679 [DEBUG] [Thread-300672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:43:01.679 [DEBUG] [Thread-300672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:43:01.679 [DEBUG] [Thread-300672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:43:01.679 [DEBUG] [Thread-300672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:43:01.704 [INFO] [Thread-300672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:43:01.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:43:02.331 [DEBUG] [Thread-300672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:43:02.340 [DEBUG] [Thread-300672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:43:02.341 [DEBUG] [Thread-300672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:43:02.372 [DEBUG] [Thread-300672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:43:02.372 [DEBUG] [Thread-300672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:43:02.375 [DEBUG] [Thread-300672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:43:02.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:43:02.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:43:02.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:43:02.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:43:02.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:43:02.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:43:02.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:43:02.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:43:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:43:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.362918 -999.00  +20.10   8.52     42   +6.90 1 1 1 1 1   888    0 12.53 -20.03 ----- 8.5 8.5 104.8 10.8 29.5 -29.2 29.0 -26.0 28.0 -25.3 28.6 -26.0
2025-12-24T10:43:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:43:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:43:02.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.362918
2025-12-24T10:43:02.407 [DEBUG] [Thread-300672] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:43:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:43:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:43:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:43:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:43:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:43:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:42:25', tmtdew=13.9, humidity=39.75, cloud=0.0, wind=9.28, temperature=19.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:42:36.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:43:02.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:43:02.509 [DEBUG] [Thread-300675] [transport.py] [_log()] starting thread (client mode): 0xf572ca30
2025-12-24T10:43:02.509 [DEBUG] [Thread-300675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:43:02.523 [DEBUG] [Thread-300675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:43:02.523 [INFO] [Thread-300675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:43:02.531 [DEBUG] [Thread-300675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:43:02.531 [DEBUG] [Thread-300675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:43:02.531 [DEBUG] [Thread-300675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:43:02.531 [DEBUG] [Thread-300675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:43:02.531 [DEBUG] [Thread-300675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:43:02.531 [DEBUG] [Thread-300675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:43:02.531 [DEBUG] [Thread-300675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:43:02.531 [DEBUG] [Thread-300675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] client lang: <none>
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] server lang: <none>
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] kex follows: False
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:43:02.532 [DEBUG] [Thread-300675] [transport.py] [_log()] Compression: none
2025-12-24T10:43:02.533 [DEBUG] [Thread-300675] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:43:02.591 [DEBUG] [Thread-300675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:43:02.592 [DEBUG] [Thread-300675] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:43:02.593 [DEBUG] [Thread-300675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:43:02.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:43:02.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:43:02.654 [DEBUG] [Thread-300675] [transport.py] [_log()] userauth is OK
2025-12-24T10:43:02.655 [DEBUG] [Thread-300675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:43:02.655 [DEBUG] [Thread-300675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:43:02.655 [DEBUG] [Thread-300675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:43:02.655 [DEBUG] [Thread-300675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:43:02.678 [INFO] [Thread-300675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:43:02.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:43:02.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:43:03.576 [DEBUG] [Thread-300677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:43:03.586 [DEBUG] [Thread-300675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:43:03.586 [DEBUG] [Thread-300675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:43:03.633 [DEBUG] [Thread-300675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:43:03.633 [DEBUG] [Thread-300675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:43:03.642 [DEBUG] [Thread-300675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:43:03.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:43:03.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')
2025-12-24T10:43:03.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
2025-12-24T10:43:03.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:43:03.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:43:03.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:43:03.677 [DEBUG] [Thread-300675] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:43:18.672 [DEBUG] [Thread-300678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:43:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:43:33.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:43:33.716 [DEBUG] [Thread-300679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:43:33.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:43:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 42, 58), 14.01, 39.73, 0.0, 11.28, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:43:34.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:42:58
2025-12-24T10:43:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:43:35.012 [DEBUG] [Thread-300680] [transport.py] [_log()] starting thread (client mode): 0xf572dff0
2025-12-24T10:43:35.012 [DEBUG] [Thread-300680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:43:35.028 [DEBUG] [Thread-300680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:43:35.028 [INFO] [Thread-300680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] client lang: <none>
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] server lang: <none>
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] kex follows: False
2025-12-24T10:43:35.032 [DEBUG] [Thread-300680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:43:35.033 [DEBUG] [Thread-300680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:43:35.033 [DEBUG] [Thread-300680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:43:35.033 [DEBUG] [Thread-300680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:43:35.033 [DEBUG] [Thread-300680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:43:35.033 [DEBUG] [Thread-300680] [transport.py] [_log()] Compression: none
2025-12-24T10:43:35.033 [DEBUG] [Thread-300680] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:43:35.066 [DEBUG] [Thread-300680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:43:35.070 [DEBUG] [Thread-300680] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:43:35.071 [DEBUG] [Thread-300680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:43:35.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:43:35.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:43:35.077 [DEBUG] [Thread-300680] [transport.py] [_log()] userauth is OK
2025-12-24T10:43:35.078 [DEBUG] [Thread-300680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:43:35.078 [DEBUG] [Thread-300680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:43:35.078 [DEBUG] [Thread-300680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:43:35.078 [DEBUG] [Thread-300680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:43:35.104 [INFO] [Thread-300680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:43:35.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:43:35.759 [DEBUG] [Thread-300680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:43:35.759 [DEBUG] [Thread-300680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:43:35.759 [DEBUG] [Thread-300680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:43:35.801 [DEBUG] [Thread-300680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:43:35.801 [DEBUG] [Thread-300680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:43:35.803 [DEBUG] [Thread-300680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:43:35.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:43:35.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:43:35.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:43:35.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:43:35.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:43:35.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:43:35.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:43:35.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:43:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:43:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.363265 -999.00  +20.20   2.71     41   +6.80 1 1 1 1 1   888    0 12.35 -18.94 ----- 2.7 2.7 59.6 9.4 29.7 -25.8 29.0 -26.0 28.0 -25.7 28.6 -24.8
2025-12-24T10:43:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:43:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:43:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.363265
2025-12-24T10:43:35.829 [DEBUG] [Thread-300680] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:43:35.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:43:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:43:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:43:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:43:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:43:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:42:58', tmtdew=14.01, humidity=39.73, cloud=0.0, wind=11.28, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:43:06.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:43:35.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:43:35.926 [DEBUG] [Thread-300683] [transport.py] [_log()] starting thread (client mode): 0xf5797b80
2025-12-24T10:43:35.926 [DEBUG] [Thread-300683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:43:35.940 [DEBUG] [Thread-300683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:43:35.940 [INFO] [Thread-300683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] client lang: <none>
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] server lang: <none>
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] kex follows: False
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] Compression: none
2025-12-24T10:43:35.948 [DEBUG] [Thread-300683] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:43:36.005 [DEBUG] [Thread-300683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:43:36.005 [DEBUG] [Thread-300683] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:43:36.005 [DEBUG] [Thread-300683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:43:36.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:43:36.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:43:36.062 [DEBUG] [Thread-300683] [transport.py] [_log()] userauth is OK
2025-12-24T10:43:36.062 [DEBUG] [Thread-300683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:43:36.062 [DEBUG] [Thread-300683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:43:36.062 [DEBUG] [Thread-300683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:43:36.062 [DEBUG] [Thread-300683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:43:36.077 [INFO] [Thread-300683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:43:36.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:43:36.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:43:36.891 [DEBUG] [Thread-300683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:43:36.892 [DEBUG] [Thread-300683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:43:36.940 [DEBUG] [Thread-300683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:43:36.940 [DEBUG] [Thread-300683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:43:36.948 [DEBUG] [Thread-300683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:43:36.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:43:36.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:43:36.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
2025-12-24T10:43:36.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:43:36.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:43:36.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:43:36.979 [DEBUG] [Thread-300683] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:43:37.389 [DEBUG] [Thread-300685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:43:41.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:43:41.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:43:48.770 [DEBUG] [Thread-300686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:44:03.865 [DEBUG] [Thread-300687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:44:06.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:44:06.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:44:06.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:44:07.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 43, 31), 13.99, 39.8, 0.0, 8.7, 18.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:44:07.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:43:31
2025-12-24T10:44:08.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:44:08.282 [DEBUG] [Thread-300688] [transport.py] [_log()] starting thread (client mode): 0xf57406d0
2025-12-24T10:44:08.283 [DEBUG] [Thread-300688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:44:08.298 [DEBUG] [Thread-300688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:44:08.298 [INFO] [Thread-300688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:44:08.304 [DEBUG] [Thread-300688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:44:08.304 [DEBUG] [Thread-300688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:44:08.304 [DEBUG] [Thread-300688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] client lang: <none>
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] server lang: <none>
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] kex follows: False
2025-12-24T10:44:08.305 [DEBUG] [Thread-300688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:44:08.306 [DEBUG] [Thread-300688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:44:08.306 [DEBUG] [Thread-300688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:44:08.307 [DEBUG] [Thread-300688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:44:08.307 [DEBUG] [Thread-300688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:44:08.307 [DEBUG] [Thread-300688] [transport.py] [_log()] Compression: none
2025-12-24T10:44:08.307 [DEBUG] [Thread-300688] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:44:08.342 [DEBUG] [Thread-300688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:44:08.347 [DEBUG] [Thread-300688] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:44:08.348 [DEBUG] [Thread-300688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:44:08.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:44:08.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:44:08.352 [DEBUG] [Thread-300688] [transport.py] [_log()] userauth is OK
2025-12-24T10:44:08.353 [DEBUG] [Thread-300688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:44:08.353 [DEBUG] [Thread-300688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:44:08.353 [DEBUG] [Thread-300688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:44:08.353 [DEBUG] [Thread-300688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:44:08.379 [INFO] [Thread-300688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:44:08.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:44:08.967 [DEBUG] [Thread-300688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:44:08.968 [DEBUG] [Thread-300688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:44:08.969 [DEBUG] [Thread-300688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:44:09.008 [DEBUG] [Thread-300688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:44:09.009 [DEBUG] [Thread-300688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:44:09.012 [DEBUG] [Thread-300688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:44:09.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:44:09.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:44:09.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:44:09.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:44:09.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:44:09.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:44:09.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:44:09.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:44:09.037 [DEBUG] [Thread-300688] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:44:09.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:44:09.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.363612 -999.00  +20.40   5.93     41   +6.90 1 1 1 1 1   888    0 12.42 -14.76 ----- 5.9 5.9 56.8 7.6 29.9 -25.5 29.1 -26.5 28.1 -23.7 28.8 -24.2
2025-12-24T10:44:09.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:44:09.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:44:09.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.363612
2025-12-24T10:44:09.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:44:09.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:44:09.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:44:09.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:44:09.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:44:09.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:43:31', tmtdew=13.99, humidity=39.8, cloud=0.0, wind=8.7, temperature=18.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:43:36.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:44:09.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:44:09.157 [DEBUG] [Thread-300691] [transport.py] [_log()] starting thread (client mode): 0xf57abd30
2025-12-24T10:44:09.158 [DEBUG] [Thread-300691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:44:09.172 [DEBUG] [Thread-300691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:44:09.172 [INFO] [Thread-300691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:44:09.179 [DEBUG] [Thread-300691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:44:09.179 [DEBUG] [Thread-300691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:44:09.179 [DEBUG] [Thread-300691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:44:09.179 [DEBUG] [Thread-300691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:44:09.179 [DEBUG] [Thread-300691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:44:09.179 [DEBUG] [Thread-300691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] client lang: <none>
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] server lang: <none>
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] kex follows: False
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] Compression: none
2025-12-24T10:44:09.180 [DEBUG] [Thread-300691] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:44:09.237 [DEBUG] [Thread-300691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:44:09.237 [DEBUG] [Thread-300691] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:44:09.237 [DEBUG] [Thread-300691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:44:09.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:44:09.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:44:09.298 [DEBUG] [Thread-300691] [transport.py] [_log()] userauth is OK
2025-12-24T10:44:09.298 [DEBUG] [Thread-300691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:44:09.298 [DEBUG] [Thread-300691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:44:09.298 [DEBUG] [Thread-300691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:44:09.298 [DEBUG] [Thread-300691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:44:09.312 [INFO] [Thread-300691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:44:09.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:44:09.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:44:10.155 [DEBUG] [Thread-300691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:44:10.155 [DEBUG] [Thread-300691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:44:10.203 [DEBUG] [Thread-300691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:44:10.204 [DEBUG] [Thread-300691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:44:10.213 [DEBUG] [Thread-300691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:44:10.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:44:10.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:44:10.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
2025-12-24T10:44:10.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:44:10.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:44:10.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:44:10.250 [DEBUG] [Thread-300691] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:44:18.916 [DEBUG] [Thread-300693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:44:34.038 [DEBUG] [Thread-300694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:44:37.646 [DEBUG] [Thread-300695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:44:40.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:44:40.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:44:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:44:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 44, 4), 14.15, 39.38, 0.0, 10.89, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:44:41.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:44:04
2025-12-24T10:44:41.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:44:41.631 [DEBUG] [Thread-300696] [transport.py] [_log()] starting thread (client mode): 0xf57415a0
2025-12-24T10:44:41.631 [DEBUG] [Thread-300696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:44:41.632 [DEBUG] [Thread-300696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:44:41.632 [INFO] [Thread-300696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:44:41.636 [DEBUG] [Thread-300696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:44:41.636 [DEBUG] [Thread-300696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:44:41.636 [DEBUG] [Thread-300696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:44:41.636 [DEBUG] [Thread-300696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:44:41.636 [DEBUG] [Thread-300696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:44:41.636 [DEBUG] [Thread-300696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:44:41.637 [DEBUG] [Thread-300696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:44:41.637 [DEBUG] [Thread-300696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:44:41.637 [DEBUG] [Thread-300696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:44:41.637 [DEBUG] [Thread-300696] [transport.py] [_log()] client lang: <none>
2025-12-24T10:44:41.637 [DEBUG] [Thread-300696] [transport.py] [_log()] server lang: <none>
2025-12-24T10:44:41.637 [DEBUG] [Thread-300696] [transport.py] [_log()] kex follows: False
2025-12-24T10:44:41.637 [DEBUG] [Thread-300696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:44:41.638 [DEBUG] [Thread-300696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:44:41.638 [DEBUG] [Thread-300696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:44:41.638 [DEBUG] [Thread-300696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:44:41.638 [DEBUG] [Thread-300696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:44:41.638 [DEBUG] [Thread-300696] [transport.py] [_log()] Compression: none
2025-12-24T10:44:41.638 [DEBUG] [Thread-300696] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:44:41.676 [DEBUG] [Thread-300696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:44:41.680 [DEBUG] [Thread-300696] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:44:41.681 [DEBUG] [Thread-300696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:44:41.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:44:41.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:44:41.686 [DEBUG] [Thread-300696] [transport.py] [_log()] userauth is OK
2025-12-24T10:44:41.687 [DEBUG] [Thread-300696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:44:41.687 [DEBUG] [Thread-300696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:44:41.687 [DEBUG] [Thread-300696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:44:41.687 [DEBUG] [Thread-300696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:44:41.726 [INFO] [Thread-300696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:44:41.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:44:41.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:44:41.838 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:44:42.353 [DEBUG] [Thread-300696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:44:42.353 [DEBUG] [Thread-300696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:44:42.363 [DEBUG] [Thread-300696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:44:42.394 [DEBUG] [Thread-300696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:44:42.394 [DEBUG] [Thread-300696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:44:42.398 [DEBUG] [Thread-300696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:44:42.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:44:42.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:44:42.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:44:42.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:44:42.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:44:42.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:44:42.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:44:42.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:44:42.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:44:42.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.363959 -999.00  +20.50   4.22     41   +6.90 1 1 1 1 1   888    0 12.65 -9.17 ----- 4.2 4.2 101.9 5.3 29.9 -27.7 29.3 -26.4 28.1 -25.2 28.7 -26.4
2025-12-24T10:44:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:44:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:44:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.363959
2025-12-24T10:44:42.440 [DEBUG] [Thread-300696] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:44:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:44:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:44:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:44:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:44:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:44:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:44:04', tmtdew=14.15, humidity=39.38, cloud=0.0, wind=10.89, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:44:06.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:44:42.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:44:42.548 [DEBUG] [Thread-300699] [transport.py] [_log()] starting thread (client mode): 0xf57be050
2025-12-24T10:44:42.549 [DEBUG] [Thread-300699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:44:42.563 [DEBUG] [Thread-300699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:44:42.563 [INFO] [Thread-300699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:44:42.571 [DEBUG] [Thread-300699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:44:42.571 [DEBUG] [Thread-300699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:44:42.571 [DEBUG] [Thread-300699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:44:42.571 [DEBUG] [Thread-300699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] client lang: <none>
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] server lang: <none>
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] kex follows: False
2025-12-24T10:44:42.572 [DEBUG] [Thread-300699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:44:42.573 [DEBUG] [Thread-300699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:44:42.573 [DEBUG] [Thread-300699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:44:42.573 [DEBUG] [Thread-300699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:44:42.573 [DEBUG] [Thread-300699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:44:42.573 [DEBUG] [Thread-300699] [transport.py] [_log()] Compression: none
2025-12-24T10:44:42.573 [DEBUG] [Thread-300699] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:44:42.629 [DEBUG] [Thread-300699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:44:42.629 [DEBUG] [Thread-300699] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:44:42.629 [DEBUG] [Thread-300699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:44:42.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:44:42.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:44:42.686 [DEBUG] [Thread-300699] [transport.py] [_log()] userauth is OK
2025-12-24T10:44:42.686 [DEBUG] [Thread-300699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:44:42.687 [DEBUG] [Thread-300699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:44:42.687 [DEBUG] [Thread-300699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:44:42.687 [DEBUG] [Thread-300699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:44:42.713 [INFO] [Thread-300699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:44:42.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:44:42.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:44:43.536 [DEBUG] [Thread-300699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:44:43.536 [DEBUG] [Thread-300699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:44:43.584 [DEBUG] [Thread-300699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:44:43.584 [DEBUG] [Thread-300699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:44:43.593 [DEBUG] [Thread-300699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:44:43.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:44:43.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:44:43.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:44:43.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:44:43.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:44:43.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:44:43.628 [DEBUG] [Thread-300699] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:44:49.122 [DEBUG] [Thread-300701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:45:04.283 [DEBUG] [Thread-300702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:45:13.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:45:13.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:45:13.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:45:14.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 44, 37), 14.51, 38.25, 0.0, 10.52, 19.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:45:14.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:44:37
2025-12-24T10:45:14.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:45:14.945 [DEBUG] [Thread-300703] [transport.py] [_log()] starting thread (client mode): 0xf5740190
2025-12-24T10:45:14.946 [DEBUG] [Thread-300703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:45:14.953 [DEBUG] [Thread-300703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:45:14.953 [INFO] [Thread-300703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] client lang: <none>
2025-12-24T10:45:14.960 [DEBUG] [Thread-300703] [transport.py] [_log()] server lang: <none>
2025-12-24T10:45:14.961 [DEBUG] [Thread-300703] [transport.py] [_log()] kex follows: False
2025-12-24T10:45:14.961 [DEBUG] [Thread-300703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:45:14.961 [DEBUG] [Thread-300703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:45:14.962 [DEBUG] [Thread-300703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:45:14.962 [DEBUG] [Thread-300703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:45:14.962 [DEBUG] [Thread-300703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:45:14.962 [DEBUG] [Thread-300703] [transport.py] [_log()] Compression: none
2025-12-24T10:45:14.962 [DEBUG] [Thread-300703] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:45:15.002 [DEBUG] [Thread-300703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:45:15.008 [DEBUG] [Thread-300703] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:45:15.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:45:15.012 [DEBUG] [Thread-300703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:45:15.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:45:15.015 [DEBUG] [Thread-300703] [transport.py] [_log()] userauth is OK
2025-12-24T10:45:15.015 [DEBUG] [Thread-300703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:45:15.015 [DEBUG] [Thread-300703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:45:15.015 [DEBUG] [Thread-300703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:45:15.015 [DEBUG] [Thread-300703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:45:15.053 [INFO] [Thread-300703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:45:15.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:45:15.687 [DEBUG] [Thread-300703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:45:15.687 [DEBUG] [Thread-300703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:45:15.697 [DEBUG] [Thread-300703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:45:15.728 [DEBUG] [Thread-300703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:45:15.728 [DEBUG] [Thread-300703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:45:15.732 [DEBUG] [Thread-300703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:45:15.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:45:15.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:45:15.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:45:15.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:45:15.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:45:15.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:45:15.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:45:15.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:45:15.761 [DEBUG] [Thread-300703] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:45:15.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:45:15.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.364653 -999.00  +20.70  11.82     40   +6.60 1 1 1 1 1   888    0 12.82 2.94 ----- 11.8 11.8 135.6 14.9 30.2 -25.6 29.4 -26.7 28.3 -23.7 28.9 -24.4
2025-12-24T10:45:15.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:45:15.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:45:15.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.364653
2025-12-24T10:45:15.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:45:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:45:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:45:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:45:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:45:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:44:37', tmtdew=14.51, humidity=38.25, cloud=0.0, wind=10.52, temperature=19.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:45:06.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:45:15.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:45:15.886 [DEBUG] [Thread-300706] [transport.py] [_log()] starting thread (client mode): 0xf5742800
2025-12-24T10:45:15.886 [DEBUG] [Thread-300706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:45:15.900 [DEBUG] [Thread-300706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:45:15.901 [INFO] [Thread-300706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:45:15.908 [DEBUG] [Thread-300706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:45:15.909 [DEBUG] [Thread-300706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:45:15.909 [DEBUG] [Thread-300706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:45:15.909 [DEBUG] [Thread-300706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:45:15.909 [DEBUG] [Thread-300706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:45:15.909 [DEBUG] [Thread-300706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:45:15.909 [DEBUG] [Thread-300706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:45:15.909 [DEBUG] [Thread-300706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:45:15.909 [DEBUG] [Thread-300706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:45:15.910 [DEBUG] [Thread-300706] [transport.py] [_log()] client lang: <none>
2025-12-24T10:45:15.910 [DEBUG] [Thread-300706] [transport.py] [_log()] server lang: <none>
2025-12-24T10:45:15.910 [DEBUG] [Thread-300706] [transport.py] [_log()] kex follows: False
2025-12-24T10:45:15.910 [DEBUG] [Thread-300706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:45:15.910 [DEBUG] [Thread-300706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:45:15.911 [DEBUG] [Thread-300706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:45:15.911 [DEBUG] [Thread-300706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:45:15.911 [DEBUG] [Thread-300706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:45:15.911 [DEBUG] [Thread-300706] [transport.py] [_log()] Compression: none
2025-12-24T10:45:15.911 [DEBUG] [Thread-300706] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:45:15.967 [DEBUG] [Thread-300706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:45:15.967 [DEBUG] [Thread-300706] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:45:15.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:45:15.969 [DEBUG] [Thread-300706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:45:15.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:45:16.022 [DEBUG] [Thread-300706] [transport.py] [_log()] userauth is OK
2025-12-24T10:45:16.022 [DEBUG] [Thread-300706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:45:16.022 [DEBUG] [Thread-300706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:45:16.022 [DEBUG] [Thread-300706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:45:16.022 [DEBUG] [Thread-300706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:45:16.040 [INFO] [Thread-300706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:45:16.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:45:16.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:45:16.848 [DEBUG] [Thread-300706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:45:16.848 [DEBUG] [Thread-300706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:45:16.888 [DEBUG] [Thread-300706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:45:16.888 [DEBUG] [Thread-300706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:45:16.897 [DEBUG] [Thread-300706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:45:16.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:45:16.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:45:16.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
2025-12-24T10:45:16.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:45:16.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:45:16.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:45:16.933 [DEBUG] [Thread-300706] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:45:19.347 [DEBUG] [Thread-300708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:45:34.538 [DEBUG] [Thread-300709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:45:37.928 [DEBUG] [Thread-300710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:45:41.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:45:41.980 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:45:46.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:45:46.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:45:46.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:45:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 45, 11), 14.5, 38.27, 0.0, 10.39, 19.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:45:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:45:11
2025-12-24T10:45:47.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:45:48.122 [DEBUG] [Thread-300711] [transport.py] [_log()] starting thread (client mode): 0xf5740850
2025-12-24T10:45:48.123 [DEBUG] [Thread-300711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:45:48.132 [DEBUG] [Thread-300711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:45:48.132 [INFO] [Thread-300711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] client lang: <none>
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] server lang: <none>
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] kex follows: False
2025-12-24T10:45:48.137 [DEBUG] [Thread-300711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:45:48.138 [DEBUG] [Thread-300711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:45:48.138 [DEBUG] [Thread-300711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:45:48.138 [DEBUG] [Thread-300711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:45:48.138 [DEBUG] [Thread-300711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:45:48.138 [DEBUG] [Thread-300711] [transport.py] [_log()] Compression: none
2025-12-24T10:45:48.138 [DEBUG] [Thread-300711] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:45:48.167 [DEBUG] [Thread-300711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:45:48.169 [DEBUG] [Thread-300711] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:45:48.171 [DEBUG] [Thread-300711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:45:48.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:45:48.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:45:48.175 [DEBUG] [Thread-300711] [transport.py] [_log()] userauth is OK
2025-12-24T10:45:48.175 [DEBUG] [Thread-300711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:45:48.175 [DEBUG] [Thread-300711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:45:48.175 [DEBUG] [Thread-300711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:45:48.175 [DEBUG] [Thread-300711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:45:48.193 [INFO] [Thread-300711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:45:48.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:45:48.836 [DEBUG] [Thread-300711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:45:48.836 [DEBUG] [Thread-300711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:45:48.836 [DEBUG] [Thread-300711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:45:48.877 [DEBUG] [Thread-300711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:45:48.877 [DEBUG] [Thread-300711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:45:48.880 [DEBUG] [Thread-300711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:45:48.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:45:48.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:45:48.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:45:48.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:45:48.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:45:48.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:45:48.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:45:48.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:45:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:45:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.365001 -999.00  +20.60   8.56     38   +5.90 1 1 1 1 1   888    0 13.13 10.32 ----- 8.6 8.6 119.4 11.8 30.2 -26.8 29.3 -25.6 28.4 -24.3 29.0 -25.8
2025-12-24T10:45:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:45:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:45:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.365001
2025-12-24T10:45:48.917 [DEBUG] [Thread-300711] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:45:48.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:45:48.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:45:48.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:45:48.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:45:48.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:45:48.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:45:11', tmtdew=14.5, humidity=38.27, cloud=0.0, wind=10.39, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:45:36.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:45:48.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:45:49.007 [DEBUG] [Thread-300714] [transport.py] [_log()] starting thread (client mode): 0xf57bccd0
2025-12-24T10:45:49.007 [DEBUG] [Thread-300714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:45:49.022 [DEBUG] [Thread-300714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:45:49.022 [INFO] [Thread-300714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:45:49.029 [DEBUG] [Thread-300714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:45:49.029 [DEBUG] [Thread-300714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:45:49.029 [DEBUG] [Thread-300714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] client lang: <none>
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] server lang: <none>
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] kex follows: False
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] Compression: none
2025-12-24T10:45:49.030 [DEBUG] [Thread-300714] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:45:49.085 [DEBUG] [Thread-300714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:45:49.085 [DEBUG] [Thread-300714] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:45:49.085 [DEBUG] [Thread-300714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:45:49.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:45:49.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:45:49.142 [DEBUG] [Thread-300714] [transport.py] [_log()] userauth is OK
2025-12-24T10:45:49.142 [DEBUG] [Thread-300714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:45:49.142 [DEBUG] [Thread-300714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:45:49.142 [DEBUG] [Thread-300714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:45:49.142 [DEBUG] [Thread-300714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:45:49.157 [INFO] [Thread-300714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:45:49.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:45:49.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:45:49.599 [DEBUG] [Thread-300716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:45:49.991 [DEBUG] [Thread-300714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:45:49.991 [DEBUG] [Thread-300714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:45:50.038 [DEBUG] [Thread-300714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:45:50.039 [DEBUG] [Thread-300714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:45:50.047 [DEBUG] [Thread-300714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:45:50.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:45:50.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:45:50.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:45:50.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:45:50.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:45:50.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:45:50.079 [DEBUG] [Thread-300714] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:46:04.713 [DEBUG] [Thread-300717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:46:19.771 [DEBUG] [Thread-300718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:46:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:46:20.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:46:20.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:46:21.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 45, 44), 14.77, 37.59, 0.0, 7.09, 19.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:46:21.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:45:44
2025-12-24T10:46:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:46:21.380 [DEBUG] [Thread-300719] [transport.py] [_log()] starting thread (client mode): 0xf57bd210
2025-12-24T10:46:21.380 [DEBUG] [Thread-300719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:46:21.393 [DEBUG] [Thread-300719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:46:21.393 [INFO] [Thread-300719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] client lang: <none>
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] server lang: <none>
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] kex follows: False
2025-12-24T10:46:21.397 [DEBUG] [Thread-300719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:46:21.398 [DEBUG] [Thread-300719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:46:21.398 [DEBUG] [Thread-300719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:46:21.398 [DEBUG] [Thread-300719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:46:21.398 [DEBUG] [Thread-300719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:46:21.398 [DEBUG] [Thread-300719] [transport.py] [_log()] Compression: none
2025-12-24T10:46:21.398 [DEBUG] [Thread-300719] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:46:21.426 [DEBUG] [Thread-300719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:46:21.431 [DEBUG] [Thread-300719] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:46:21.434 [DEBUG] [Thread-300719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:46:21.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:46:21.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:46:21.441 [DEBUG] [Thread-300719] [transport.py] [_log()] userauth is OK
2025-12-24T10:46:21.441 [DEBUG] [Thread-300719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:46:21.442 [DEBUG] [Thread-300719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:46:21.442 [DEBUG] [Thread-300719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:46:21.442 [DEBUG] [Thread-300719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:46:21.467 [INFO] [Thread-300719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:46:21.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:46:22.133 [DEBUG] [Thread-300719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:46:22.134 [DEBUG] [Thread-300719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:46:22.135 [DEBUG] [Thread-300719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:46:22.175 [DEBUG] [Thread-300719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:46:22.176 [DEBUG] [Thread-300719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:46:22.179 [DEBUG] [Thread-300719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:46:22.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:46:22.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:46:22.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:46:22.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:46:22.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:46:22.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:46:22.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:46:22.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:46:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:46:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.365349 -999.00  +20.40   3.02     38   +5.90 1 1 1 1 1   888    0 13.56 17.90 ----- 3.0 3.0 40.1 9.2 30.1 -25.9 29.4 -26.2 28.4 -25.0 29.0 -25.0
2025-12-24T10:46:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:46:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:46:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.365349
2025-12-24T10:46:22.216 [DEBUG] [Thread-300719] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:46:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:46:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:46:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:46:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:46:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:46:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:45:44', tmtdew=14.77, humidity=37.59, cloud=0.0, wind=7.09, temperature=19.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:46:06.154', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:46:22.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:46:22.328 [DEBUG] [Thread-300722] [transport.py] [_log()] starting thread (client mode): 0xf5742f20
2025-12-24T10:46:22.328 [DEBUG] [Thread-300722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:46:22.343 [DEBUG] [Thread-300722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:46:22.343 [INFO] [Thread-300722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:46:22.351 [DEBUG] [Thread-300722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:46:22.351 [DEBUG] [Thread-300722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:46:22.351 [DEBUG] [Thread-300722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:46:22.351 [DEBUG] [Thread-300722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:46:22.351 [DEBUG] [Thread-300722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:46:22.351 [DEBUG] [Thread-300722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:46:22.351 [DEBUG] [Thread-300722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] client lang: <none>
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] server lang: <none>
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] kex follows: False
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:46:22.352 [DEBUG] [Thread-300722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:46:22.353 [DEBUG] [Thread-300722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:46:22.353 [DEBUG] [Thread-300722] [transport.py] [_log()] Compression: none
2025-12-24T10:46:22.353 [DEBUG] [Thread-300722] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:46:22.411 [DEBUG] [Thread-300722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:46:22.411 [DEBUG] [Thread-300722] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:46:22.412 [DEBUG] [Thread-300722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:46:22.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:46:22.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:46:22.470 [DEBUG] [Thread-300722] [transport.py] [_log()] userauth is OK
2025-12-24T10:46:22.470 [DEBUG] [Thread-300722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:46:22.471 [DEBUG] [Thread-300722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:46:22.471 [DEBUG] [Thread-300722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:46:22.471 [DEBUG] [Thread-300722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:46:22.493 [INFO] [Thread-300722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:46:22.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:46:22.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:46:23.345 [DEBUG] [Thread-300722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:46:23.345 [DEBUG] [Thread-300722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:46:23.392 [DEBUG] [Thread-300722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:46:23.392 [DEBUG] [Thread-300722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:46:23.400 [DEBUG] [Thread-300722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:46:23.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:46:23.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:46:23.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:46:23.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:46:23.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:46:23.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:46:23.433 [DEBUG] [Thread-300722] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:46:34.893 [DEBUG] [Thread-300724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:46:38.268 [DEBUG] [Thread-300725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:46:42.121 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:46:42.123 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:46:50.051 [DEBUG] [Thread-300726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:46:53.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:46:53.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:46:53.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:46:54.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 46, 17), 14.97, 37.12, 0.0, 5.17, 19.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:46:54.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:46:17
2025-12-24T10:46:54.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:46:54.721 [DEBUG] [Thread-300727] [transport.py] [_log()] starting thread (client mode): 0xf57947c0
2025-12-24T10:46:54.722 [DEBUG] [Thread-300727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:46:54.729 [DEBUG] [Thread-300727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:46:54.729 [INFO] [Thread-300727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:46:54.733 [DEBUG] [Thread-300727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:46:54.733 [DEBUG] [Thread-300727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:46:54.733 [DEBUG] [Thread-300727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] client lang: <none>
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] server lang: <none>
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] kex follows: False
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] Compression: none
2025-12-24T10:46:54.734 [DEBUG] [Thread-300727] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:46:54.761 [DEBUG] [Thread-300727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:46:54.765 [DEBUG] [Thread-300727] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:46:54.767 [DEBUG] [Thread-300727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:46:54.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:46:54.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:46:54.772 [DEBUG] [Thread-300727] [transport.py] [_log()] userauth is OK
2025-12-24T10:46:54.773 [DEBUG] [Thread-300727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:46:54.773 [DEBUG] [Thread-300727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:46:54.773 [DEBUG] [Thread-300727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:46:54.773 [DEBUG] [Thread-300727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:46:54.799 [INFO] [Thread-300727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:46:54.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:46:55.410 [DEBUG] [Thread-300727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:46:55.410 [DEBUG] [Thread-300727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:46:55.419 [DEBUG] [Thread-300727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:46:55.451 [DEBUG] [Thread-300727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:46:55.451 [DEBUG] [Thread-300727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:46:55.453 [DEBUG] [Thread-300727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:46:55.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:46:55.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:46:55.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:46:55.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:46:55.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:46:55.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:46:55.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:46:55.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:46:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:46:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.365695 -999.00  +20.40  10.79     38   +5.80 1 1 1 1 1   888    0 13.86 22.43 ----- 10.8 10.8 54.8 12.6 30.2 -26.6 29.4 -26.4 28.5 -24.7 29.1 -25.0
2025-12-24T10:46:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:46:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:46:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.365695
2025-12-24T10:46:55.475 [DEBUG] [Thread-300727] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:46:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:46:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:46:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:46:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:46:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:46:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:46:17', tmtdew=14.97, humidity=37.12, cloud=0.0, wind=5.17, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:46:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:46:55.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:46:55.573 [DEBUG] [Thread-300730] [transport.py] [_log()] starting thread (client mode): 0xf5743ee0
2025-12-24T10:46:55.573 [DEBUG] [Thread-300730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:46:55.589 [DEBUG] [Thread-300730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:46:55.589 [INFO] [Thread-300730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:46:55.596 [DEBUG] [Thread-300730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] client lang: <none>
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] server lang: <none>
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] kex follows: False
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] Compression: none
2025-12-24T10:46:55.597 [DEBUG] [Thread-300730] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:46:55.653 [DEBUG] [Thread-300730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:46:55.654 [DEBUG] [Thread-300730] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:46:55.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:46:55.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:46:55.654 [DEBUG] [Thread-300730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:46:55.710 [DEBUG] [Thread-300730] [transport.py] [_log()] userauth is OK
2025-12-24T10:46:55.710 [DEBUG] [Thread-300730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:46:55.710 [DEBUG] [Thread-300730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:46:55.710 [DEBUG] [Thread-300730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:46:55.710 [DEBUG] [Thread-300730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:46:55.728 [INFO] [Thread-300730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:46:55.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:46:55.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:46:56.559 [DEBUG] [Thread-300730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:46:56.560 [DEBUG] [Thread-300730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:46:56.607 [DEBUG] [Thread-300730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:46:56.607 [DEBUG] [Thread-300730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:46:56.616 [DEBUG] [Thread-300730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:46:56.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:46:56.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:46:56.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:46:56.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:46:56.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:46:56.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:46:56.655 [DEBUG] [Thread-300730] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:47:05.117 [DEBUG] [Thread-300732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:47:20.209 [DEBUG] [Thread-300733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:47:26.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:47:26.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:47:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:47:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 46, 50), 15.07, 36.87, 0.0, 5.45, 19.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:47:27.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:46:50
2025-12-24T10:47:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:47:27.949 [DEBUG] [Thread-300734] [transport.py] [_log()] starting thread (client mode): 0xf5743a90
2025-12-24T10:47:27.950 [DEBUG] [Thread-300734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:47:27.950 [DEBUG] [Thread-300734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:47:27.950 [INFO] [Thread-300734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] client lang: <none>
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] server lang: <none>
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] kex follows: False
2025-12-24T10:47:27.953 [DEBUG] [Thread-300734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:47:27.954 [DEBUG] [Thread-300734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:47:27.954 [DEBUG] [Thread-300734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:47:27.954 [DEBUG] [Thread-300734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:47:27.954 [DEBUG] [Thread-300734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:47:27.954 [DEBUG] [Thread-300734] [transport.py] [_log()] Compression: none
2025-12-24T10:47:27.954 [DEBUG] [Thread-300734] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:47:27.978 [DEBUG] [Thread-300734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:47:27.982 [DEBUG] [Thread-300734] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:47:27.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:47:27.985 [DEBUG] [Thread-300734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:47:27.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:47:27.990 [DEBUG] [Thread-300734] [transport.py] [_log()] userauth is OK
2025-12-24T10:47:27.990 [DEBUG] [Thread-300734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:47:27.990 [DEBUG] [Thread-300734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:47:27.990 [DEBUG] [Thread-300734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:47:27.990 [DEBUG] [Thread-300734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:47:28.020 [INFO] [Thread-300734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:47:28.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:47:28.615 [DEBUG] [Thread-300734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:47:28.615 [DEBUG] [Thread-300734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:47:28.625 [DEBUG] [Thread-300734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:47:28.656 [DEBUG] [Thread-300734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:47:28.657 [DEBUG] [Thread-300734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:47:28.660 [DEBUG] [Thread-300734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:47:28.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:47:28.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:47:28.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:47:28.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:47:28.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:47:28.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:47:28.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:47:28.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:47:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:47:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.366043 -999.00  +20.00   8.75     39   +5.70 1 1 1 1 1   888    0 14.08 30.17 ----- 8.8 8.8 38.0 14.5 30.1 -27.4 29.4 -27.2 28.1 -27.8 28.9 -27.6
2025-12-24T10:47:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:47:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:47:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.366043
2025-12-24T10:47:28.695 [DEBUG] [Thread-300734] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:47:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:47:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:47:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:47:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:47:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:47:28.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:46:50', tmtdew=15.07, humidity=36.87, cloud=0.0, wind=5.45, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:47:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:47:28.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:47:28.807 [DEBUG] [Thread-300737] [transport.py] [_log()] starting thread (client mode): 0xf5772440
2025-12-24T10:47:28.807 [DEBUG] [Thread-300737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:47:28.825 [DEBUG] [Thread-300737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:47:28.825 [INFO] [Thread-300737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] client lang: <none>
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] server lang: <none>
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] kex follows: False
2025-12-24T10:47:28.833 [DEBUG] [Thread-300737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:47:28.834 [DEBUG] [Thread-300737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:47:28.834 [DEBUG] [Thread-300737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:47:28.834 [DEBUG] [Thread-300737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:47:28.834 [DEBUG] [Thread-300737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:47:28.834 [DEBUG] [Thread-300737] [transport.py] [_log()] Compression: none
2025-12-24T10:47:28.834 [DEBUG] [Thread-300737] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:47:28.889 [DEBUG] [Thread-300737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:47:28.889 [DEBUG] [Thread-300737] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:47:28.889 [DEBUG] [Thread-300737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:47:28.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:47:28.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:47:28.946 [DEBUG] [Thread-300737] [transport.py] [_log()] userauth is OK
2025-12-24T10:47:28.946 [DEBUG] [Thread-300737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:47:28.946 [DEBUG] [Thread-300737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:47:28.946 [DEBUG] [Thread-300737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:47:28.946 [DEBUG] [Thread-300737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:47:28.961 [INFO] [Thread-300737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:47:28.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:47:28.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:47:29.868 [DEBUG] [Thread-300737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:47:29.868 [DEBUG] [Thread-300737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:47:29.907 [DEBUG] [Thread-300737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:47:29.907 [DEBUG] [Thread-300737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:47:29.915 [DEBUG] [Thread-300737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:47:29.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:47:29.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:47:29.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:47:29.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:47:29.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:47:29.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:47:29.948 [DEBUG] [Thread-300737] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:47:35.253 [DEBUG] [Thread-300739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:47:38.547 [DEBUG] [Thread-300740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:47:42.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:47:42.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:47:50.324 [DEBUG] [Thread-300741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:47:59.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:47:59.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:47:59.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:48:00.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 47, 24), 15.23, 36.49, 0.0, 4.55, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:48:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:47:24
2025-12-24T10:48:01.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:48:01.230 [DEBUG] [Thread-300742] [transport.py] [_log()] starting thread (client mode): 0xf5770d00
2025-12-24T10:48:01.230 [DEBUG] [Thread-300742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:48:01.231 [DEBUG] [Thread-300742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:48:01.231 [INFO] [Thread-300742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:48:01.235 [DEBUG] [Thread-300742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] client lang: <none>
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] server lang: <none>
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] kex follows: False
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:48:01.236 [DEBUG] [Thread-300742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:48:01.237 [DEBUG] [Thread-300742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:48:01.237 [DEBUG] [Thread-300742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:48:01.237 [DEBUG] [Thread-300742] [transport.py] [_log()] Compression: none
2025-12-24T10:48:01.237 [DEBUG] [Thread-300742] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:48:01.270 [DEBUG] [Thread-300742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:48:01.275 [DEBUG] [Thread-300742] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:48:01.276 [DEBUG] [Thread-300742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:48:01.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:48:01.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:48:01.282 [DEBUG] [Thread-300742] [transport.py] [_log()] userauth is OK
2025-12-24T10:48:01.282 [DEBUG] [Thread-300742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:48:01.282 [DEBUG] [Thread-300742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:48:01.282 [DEBUG] [Thread-300742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:48:01.282 [DEBUG] [Thread-300742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:48:01.310 [INFO] [Thread-300742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:48:01.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:48:01.908 [DEBUG] [Thread-300742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:48:01.908 [DEBUG] [Thread-300742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:48:01.909 [DEBUG] [Thread-300742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:48:01.949 [DEBUG] [Thread-300742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:48:01.949 [DEBUG] [Thread-300742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:48:01.951 [DEBUG] [Thread-300742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:48:01.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:48:01.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:48:01.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:48:01.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:48:01.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:48:01.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:48:01.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:48:01.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:48:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:48:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.366390 -999.00  +20.00  10.55     39   +6.00 1 1 1 1 1   888    0 13.97 31.64 ----- 10.6 10.6 100.7 11.7 30.2 -26.0 29.3 -26.6 28.2 -24.6 28.9 -24.4
2025-12-24T10:48:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:48:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:48:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.366390
2025-12-24T10:48:01.971 [DEBUG] [Thread-300742] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:48:01.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:48:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:48:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:48:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:48:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:48:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:47:24', tmtdew=15.23, humidity=36.49, cloud=0.0, wind=4.55, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:47:36.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:48:02.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:48:02.114 [DEBUG] [Thread-300745] [transport.py] [_log()] starting thread (client mode): 0xf5741f60
2025-12-24T10:48:02.115 [DEBUG] [Thread-300745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:48:02.129 [DEBUG] [Thread-300745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:48:02.129 [INFO] [Thread-300745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:48:02.137 [DEBUG] [Thread-300745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:48:02.137 [DEBUG] [Thread-300745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:48:02.137 [DEBUG] [Thread-300745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:48:02.137 [DEBUG] [Thread-300745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:48:02.137 [DEBUG] [Thread-300745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:48:02.137 [DEBUG] [Thread-300745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:48:02.137 [DEBUG] [Thread-300745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:48:02.138 [DEBUG] [Thread-300745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:48:02.138 [DEBUG] [Thread-300745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:48:02.138 [DEBUG] [Thread-300745] [transport.py] [_log()] client lang: <none>
2025-12-24T10:48:02.138 [DEBUG] [Thread-300745] [transport.py] [_log()] server lang: <none>
2025-12-24T10:48:02.138 [DEBUG] [Thread-300745] [transport.py] [_log()] kex follows: False
2025-12-24T10:48:02.138 [DEBUG] [Thread-300745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:48:02.138 [DEBUG] [Thread-300745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:48:02.138 [DEBUG] [Thread-300745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:48:02.139 [DEBUG] [Thread-300745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:48:02.139 [DEBUG] [Thread-300745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:48:02.139 [DEBUG] [Thread-300745] [transport.py] [_log()] Compression: none
2025-12-24T10:48:02.139 [DEBUG] [Thread-300745] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:48:02.198 [DEBUG] [Thread-300745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:48:02.198 [DEBUG] [Thread-300745] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:48:02.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:48:02.199 [DEBUG] [Thread-300745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:48:02.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:48:02.254 [DEBUG] [Thread-300745] [transport.py] [_log()] userauth is OK
2025-12-24T10:48:02.254 [DEBUG] [Thread-300745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:48:02.254 [DEBUG] [Thread-300745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:48:02.254 [DEBUG] [Thread-300745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:48:02.254 [DEBUG] [Thread-300745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:48:02.273 [INFO] [Thread-300745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:48:02.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:48:02.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:48:03.124 [DEBUG] [Thread-300745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:48:03.124 [DEBUG] [Thread-300745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:48:03.172 [DEBUG] [Thread-300745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:48:03.172 [DEBUG] [Thread-300745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:48:03.180 [DEBUG] [Thread-300745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:48:03.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:48:03.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:48:03.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:48:03.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:48:03.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:48:03.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:48:03.213 [DEBUG] [Thread-300745] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:48:05.379 [DEBUG] [Thread-300747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:48:20.481 [DEBUG] [Thread-300748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:48:33.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:48:33.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:48:33.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:48:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 47, 57), 15.56, 36.04, 0.0, 3.05, 19.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:48:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:47:57
2025-12-24T10:48:34.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:48:34.587 [DEBUG] [Thread-300749] [transport.py] [_log()] starting thread (client mode): 0xf57427a0
2025-12-24T10:48:34.588 [DEBUG] [Thread-300749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:48:34.598 [DEBUG] [Thread-300749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:48:34.598 [INFO] [Thread-300749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] client lang: <none>
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] server lang: <none>
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] kex follows: False
2025-12-24T10:48:34.603 [DEBUG] [Thread-300749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:48:34.604 [DEBUG] [Thread-300749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:48:34.604 [DEBUG] [Thread-300749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:48:34.604 [DEBUG] [Thread-300749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:48:34.604 [DEBUG] [Thread-300749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:48:34.604 [DEBUG] [Thread-300749] [transport.py] [_log()] Compression: none
2025-12-24T10:48:34.604 [DEBUG] [Thread-300749] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:48:34.630 [DEBUG] [Thread-300749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:48:34.634 [DEBUG] [Thread-300749] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:48:34.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:48:34.636 [DEBUG] [Thread-300749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:48:34.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:48:34.639 [DEBUG] [Thread-300749] [transport.py] [_log()] userauth is OK
2025-12-24T10:48:34.639 [DEBUG] [Thread-300749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:48:34.640 [DEBUG] [Thread-300749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:48:34.640 [DEBUG] [Thread-300749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:48:34.640 [DEBUG] [Thread-300749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:48:34.659 [INFO] [Thread-300749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:48:34.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:48:35.224 [DEBUG] [Thread-300749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:48:35.224 [DEBUG] [Thread-300749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:48:35.225 [DEBUG] [Thread-300749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:48:35.265 [DEBUG] [Thread-300749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:48:35.265 [DEBUG] [Thread-300749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:48:35.267 [DEBUG] [Thread-300749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:48:35.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:48:35.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:48:35.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:48:35.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:48:35.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:48:35.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:48:35.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:48:35.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:48:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:48:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.366737 -999.00  +20.20   4.37     39   +6.00 1 1 1 1 1   888    0 14.04 34.19 ----- 4.4 4.4 124.4 10.5 30.3 -28.1 29.4 -25.4 28.4 -24.0 28.9 -25.1
2025-12-24T10:48:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:48:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:48:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.366737
2025-12-24T10:48:35.300 [DEBUG] [Thread-300749] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:48:35.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:48:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:48:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:48:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:48:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:48:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:47:57', tmtdew=15.56, humidity=36.04, cloud=0.0, wind=3.05, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:48:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:48:35.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:48:35.403 [DEBUG] [Thread-300752] [transport.py] [_log()] starting thread (client mode): 0xf5740fd0
2025-12-24T10:48:35.403 [DEBUG] [Thread-300752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:48:35.418 [DEBUG] [Thread-300752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:48:35.418 [INFO] [Thread-300752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] client lang: <none>
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] server lang: <none>
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] kex follows: False
2025-12-24T10:48:35.426 [DEBUG] [Thread-300752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:48:35.427 [DEBUG] [Thread-300752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:48:35.427 [DEBUG] [Thread-300752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:48:35.427 [DEBUG] [Thread-300752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:48:35.427 [DEBUG] [Thread-300752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:48:35.427 [DEBUG] [Thread-300752] [transport.py] [_log()] Compression: none
2025-12-24T10:48:35.427 [DEBUG] [Thread-300752] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:48:35.480 [DEBUG] [Thread-300752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:48:35.480 [DEBUG] [Thread-300752] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:48:35.481 [DEBUG] [Thread-300752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:48:35.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:48:35.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:48:35.538 [DEBUG] [Thread-300752] [transport.py] [_log()] userauth is OK
2025-12-24T10:48:35.538 [DEBUG] [Thread-300752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:48:35.538 [DEBUG] [Thread-300752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:48:35.538 [DEBUG] [Thread-300752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:48:35.538 [DEBUG] [Thread-300752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:48:35.549 [DEBUG] [Thread-300754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:48:35.552 [INFO] [Thread-300752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:48:35.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:48:35.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:48:36.469 [DEBUG] [Thread-300752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:48:36.469 [DEBUG] [Thread-300752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:48:36.516 [DEBUG] [Thread-300752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:48:36.516 [DEBUG] [Thread-300752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:48:36.525 [DEBUG] [Thread-300752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:48:36.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:48:36.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:48:36.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:48:36.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:48:36.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:48:36.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:48:36.557 [DEBUG] [Thread-300752] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:48:38.797 [DEBUG] [Thread-300755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:48:42.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:48:42.415 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:48:50.746 [DEBUG] [Thread-300756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:49:05.783 [DEBUG] [Thread-300757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:49:06.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:49:06.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:49:06.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:49:07.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 48, 30), 15.57, 36.04, 0.0, 4.31, 19.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:49:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:48:30
2025-12-24T10:49:07.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:49:07.890 [DEBUG] [Thread-300758] [transport.py] [_log()] starting thread (client mode): 0xf5743910
2025-12-24T10:49:07.891 [DEBUG] [Thread-300758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:49:07.903 [DEBUG] [Thread-300758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:49:07.903 [INFO] [Thread-300758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:49:07.907 [DEBUG] [Thread-300758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] client lang: <none>
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] server lang: <none>
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] kex follows: False
2025-12-24T10:49:07.908 [DEBUG] [Thread-300758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:49:07.909 [DEBUG] [Thread-300758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:49:07.909 [DEBUG] [Thread-300758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:49:07.909 [DEBUG] [Thread-300758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:49:07.909 [DEBUG] [Thread-300758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:49:07.909 [DEBUG] [Thread-300758] [transport.py] [_log()] Compression: none
2025-12-24T10:49:07.909 [DEBUG] [Thread-300758] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:49:07.941 [DEBUG] [Thread-300758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:49:07.945 [DEBUG] [Thread-300758] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:49:07.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:49:07.948 [DEBUG] [Thread-300758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:49:07.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:49:07.949 [DEBUG] [Thread-300758] [transport.py] [_log()] userauth is OK
2025-12-24T10:49:07.950 [DEBUG] [Thread-300758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:49:07.950 [DEBUG] [Thread-300758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:49:07.950 [DEBUG] [Thread-300758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:49:07.950 [DEBUG] [Thread-300758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:49:07.962 [INFO] [Thread-300758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:49:07.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:49:08.585 [DEBUG] [Thread-300758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:49:08.585 [DEBUG] [Thread-300758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:49:08.587 [DEBUG] [Thread-300758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:49:08.626 [DEBUG] [Thread-300758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:49:08.626 [DEBUG] [Thread-300758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:49:08.630 [DEBUG] [Thread-300758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:49:08.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:49:08.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:49:08.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:49:08.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:49:08.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:49:08.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:49:08.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:49:08.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:49:08.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:49:08.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.367084 -999.00  +20.50  11.39     40   +6.50 1 1 1 1 1   888    0 14.29 39.17 ----- 11.4 11.4 126.6 13.6 30.4 -26.3 29.6 -26.6 28.4 -24.2 29.1 -25.2
2025-12-24T10:49:08.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:49:08.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:49:08.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.367084
2025-12-24T10:49:08.668 [DEBUG] [Thread-300758] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:49:08.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:49:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:49:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:49:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:49:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:49:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:48:30', tmtdew=15.57, humidity=36.04, cloud=0.0, wind=4.31, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:48:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:49:08.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:49:08.794 [DEBUG] [Thread-300761] [transport.py] [_log()] starting thread (client mode): 0xf5742770
2025-12-24T10:49:08.795 [DEBUG] [Thread-300761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:49:08.809 [DEBUG] [Thread-300761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:49:08.810 [INFO] [Thread-300761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:49:08.817 [DEBUG] [Thread-300761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:49:08.818 [DEBUG] [Thread-300761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:49:08.818 [DEBUG] [Thread-300761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:49:08.818 [DEBUG] [Thread-300761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:49:08.818 [DEBUG] [Thread-300761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:49:08.818 [DEBUG] [Thread-300761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:49:08.818 [DEBUG] [Thread-300761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:49:08.818 [DEBUG] [Thread-300761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:49:08.819 [DEBUG] [Thread-300761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:49:08.819 [DEBUG] [Thread-300761] [transport.py] [_log()] client lang: <none>
2025-12-24T10:49:08.819 [DEBUG] [Thread-300761] [transport.py] [_log()] server lang: <none>
2025-12-24T10:49:08.819 [DEBUG] [Thread-300761] [transport.py] [_log()] kex follows: False
2025-12-24T10:49:08.819 [DEBUG] [Thread-300761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:49:08.819 [DEBUG] [Thread-300761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:49:08.820 [DEBUG] [Thread-300761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:49:08.820 [DEBUG] [Thread-300761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:49:08.820 [DEBUG] [Thread-300761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:49:08.820 [DEBUG] [Thread-300761] [transport.py] [_log()] Compression: none
2025-12-24T10:49:08.820 [DEBUG] [Thread-300761] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:49:08.880 [DEBUG] [Thread-300761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:49:08.881 [DEBUG] [Thread-300761] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:49:08.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:49:08.882 [DEBUG] [Thread-300761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:49:08.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:49:08.938 [DEBUG] [Thread-300761] [transport.py] [_log()] userauth is OK
2025-12-24T10:49:08.939 [DEBUG] [Thread-300761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:49:08.939 [DEBUG] [Thread-300761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:49:08.939 [DEBUG] [Thread-300761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:49:08.939 [DEBUG] [Thread-300761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:49:08.958 [INFO] [Thread-300761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:49:08.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:49:08.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:49:09.822 [DEBUG] [Thread-300761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:49:09.822 [DEBUG] [Thread-300761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:49:09.861 [DEBUG] [Thread-300761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:49:09.861 [DEBUG] [Thread-300761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:49:09.870 [DEBUG] [Thread-300761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:49:09.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:49:09.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:49:09.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:49:09.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:49:09.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:49:09.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:49:09.902 [DEBUG] [Thread-300761] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:49:20.881 [DEBUG] [Thread-300763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:49:36.010 [DEBUG] [Thread-300764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:49:39.043 [DEBUG] [Thread-300765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:49:39.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:49:39.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:49:39.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:49:40.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 49, 5), 15.66, 35.83, 0.0, 2.6, 19.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:49:40.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:49:05
2025-12-24T10:49:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:49:41.285 [DEBUG] [Thread-300766] [transport.py] [_log()] starting thread (client mode): 0xf574f670
2025-12-24T10:49:41.286 [DEBUG] [Thread-300766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:49:41.298 [DEBUG] [Thread-300766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:49:41.298 [INFO] [Thread-300766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:49:41.302 [DEBUG] [Thread-300766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:49:41.302 [DEBUG] [Thread-300766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:49:41.302 [DEBUG] [Thread-300766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:49:41.302 [DEBUG] [Thread-300766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:49:41.302 [DEBUG] [Thread-300766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:49:41.302 [DEBUG] [Thread-300766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] client lang: <none>
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] server lang: <none>
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] kex follows: False
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] Compression: none
2025-12-24T10:49:41.303 [DEBUG] [Thread-300766] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:49:41.334 [DEBUG] [Thread-300766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:49:41.338 [DEBUG] [Thread-300766] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:49:41.339 [DEBUG] [Thread-300766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:49:41.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:49:41.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:49:41.343 [DEBUG] [Thread-300766] [transport.py] [_log()] userauth is OK
2025-12-24T10:49:41.343 [DEBUG] [Thread-300766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:49:41.343 [DEBUG] [Thread-300766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:49:41.343 [DEBUG] [Thread-300766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:49:41.343 [DEBUG] [Thread-300766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:49:41.358 [INFO] [Thread-300766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:49:41.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:49:41.930 [DEBUG] [Thread-300766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:49:41.930 [DEBUG] [Thread-300766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:49:41.931 [DEBUG] [Thread-300766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:49:41.971 [DEBUG] [Thread-300766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:49:41.971 [DEBUG] [Thread-300766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:49:41.974 [DEBUG] [Thread-300766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:49:41.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:49:41.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:49:41.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:49:41.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:49:41.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:49:41.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:49:41.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:49:41.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:49:41.995 [DEBUG] [Thread-300766] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:49:41.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:49:41.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.367779 -999.00  +20.10  10.13     40   +6.30 1 1 1 1 1   888    0 14.63 50.56 ----- 10.1 10.1 138.8 15.2 30.1 -26.2 29.5 -26.4 28.4 -24.7 28.9 -26.4
2025-12-24T10:49:41.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:49:41.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:49:41.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.367779
2025-12-24T10:49:42.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:49:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:49:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:49:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:49:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:49:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:49:05', tmtdew=15.66, humidity=35.83, cloud=0.0, wind=2.6, temperature=19.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:49:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:49:42.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:49:42.110 [DEBUG] [Thread-300769] [transport.py] [_log()] starting thread (client mode): 0xf5771f00
2025-12-24T10:49:42.110 [DEBUG] [Thread-300769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:49:42.126 [DEBUG] [Thread-300769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:49:42.126 [INFO] [Thread-300769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:49:42.133 [DEBUG] [Thread-300769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] client lang: <none>
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] server lang: <none>
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] kex follows: False
2025-12-24T10:49:42.134 [DEBUG] [Thread-300769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:49:42.135 [DEBUG] [Thread-300769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:49:42.135 [DEBUG] [Thread-300769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:49:42.135 [DEBUG] [Thread-300769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:49:42.135 [DEBUG] [Thread-300769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:49:42.135 [DEBUG] [Thread-300769] [transport.py] [_log()] Compression: none
2025-12-24T10:49:42.135 [DEBUG] [Thread-300769] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:49:42.195 [DEBUG] [Thread-300769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:49:42.195 [DEBUG] [Thread-300769] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:49:42.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:49:42.196 [DEBUG] [Thread-300769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:49:42.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:49:42.250 [DEBUG] [Thread-300769] [transport.py] [_log()] userauth is OK
2025-12-24T10:49:42.250 [DEBUG] [Thread-300769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:49:42.251 [DEBUG] [Thread-300769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:49:42.251 [DEBUG] [Thread-300769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:49:42.251 [DEBUG] [Thread-300769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:49:42.270 [INFO] [Thread-300769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:49:42.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:49:42.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:49:42.556 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:49:42.557 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:49:43.093 [DEBUG] [Thread-300769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:49:43.093 [DEBUG] [Thread-300769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:49:43.141 [DEBUG] [Thread-300769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:49:43.142 [DEBUG] [Thread-300769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:49:43.150 [DEBUG] [Thread-300769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:49:43.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:49:43.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:49:43.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:49:43.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:49:43.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:49:43.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:49:43.185 [DEBUG] [Thread-300769] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:49:51.052 [DEBUG] [Thread-300771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:50:06.152 [DEBUG] [Thread-300772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:50:13.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:50:13.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:50:13.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:50:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 49, 38), 15.95, 34.96, 0.0, 7.36, 19.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:50:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:49:38
2025-12-24T10:50:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:50:14.631 [DEBUG] [Thread-300773] [transport.py] [_log()] starting thread (client mode): 0xf574c1f0
2025-12-24T10:50:14.632 [DEBUG] [Thread-300773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:50:14.640 [DEBUG] [Thread-300773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:50:14.640 [INFO] [Thread-300773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:50:14.643 [DEBUG] [Thread-300773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] client lang: <none>
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] server lang: <none>
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] kex follows: False
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:50:14.644 [DEBUG] [Thread-300773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:50:14.645 [DEBUG] [Thread-300773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:50:14.645 [DEBUG] [Thread-300773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:50:14.645 [DEBUG] [Thread-300773] [transport.py] [_log()] Compression: none
2025-12-24T10:50:14.645 [DEBUG] [Thread-300773] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:50:14.672 [DEBUG] [Thread-300773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:50:14.675 [DEBUG] [Thread-300773] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:50:14.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:50:14.677 [DEBUG] [Thread-300773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:50:14.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:50:14.679 [DEBUG] [Thread-300773] [transport.py] [_log()] userauth is OK
2025-12-24T10:50:14.679 [DEBUG] [Thread-300773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:50:14.679 [DEBUG] [Thread-300773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:50:14.679 [DEBUG] [Thread-300773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:50:14.679 [DEBUG] [Thread-300773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:50:14.696 [INFO] [Thread-300773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:50:14.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:50:15.416 [DEBUG] [Thread-300773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:50:15.416 [DEBUG] [Thread-300773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:50:15.417 [DEBUG] [Thread-300773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:50:15.456 [DEBUG] [Thread-300773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:50:15.456 [DEBUG] [Thread-300773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:50:15.458 [DEBUG] [Thread-300773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:50:15.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:50:15.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:50:15.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:50:15.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:50:15.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:50:15.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:50:15.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:50:15.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:50:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:50:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.367779 -999.00  +20.10  10.13     40   +6.30 1 1 1 1 1   888    0 14.63 50.56 ----- 10.1 10.1 138.8 15.2 30.1 -26.2 29.5 -26.4 28.4 -24.7 28.9 -26.4
2025-12-24T10:50:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:50:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:50:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.367779
2025-12-24T10:50:15.485 [DEBUG] [Thread-300773] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:50:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:50:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:50:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:50:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:50:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:50:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:49:38', tmtdew=15.95, humidity=34.96, cloud=0.0, wind=7.36, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:49:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:50:15.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:50:15.581 [DEBUG] [Thread-300776] [transport.py] [_log()] starting thread (client mode): 0xf57712a0
2025-12-24T10:50:15.581 [DEBUG] [Thread-300776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:50:15.596 [DEBUG] [Thread-300776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:50:15.596 [INFO] [Thread-300776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:50:15.603 [DEBUG] [Thread-300776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:50:15.603 [DEBUG] [Thread-300776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:50:15.603 [DEBUG] [Thread-300776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:50:15.603 [DEBUG] [Thread-300776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:50:15.603 [DEBUG] [Thread-300776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] client lang: <none>
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] server lang: <none>
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] kex follows: False
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] Compression: none
2025-12-24T10:50:15.604 [DEBUG] [Thread-300776] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:50:15.662 [DEBUG] [Thread-300776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:50:15.663 [DEBUG] [Thread-300776] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:50:15.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:50:15.664 [DEBUG] [Thread-300776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:50:15.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:50:15.718 [DEBUG] [Thread-300776] [transport.py] [_log()] userauth is OK
2025-12-24T10:50:15.718 [DEBUG] [Thread-300776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:50:15.719 [DEBUG] [Thread-300776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:50:15.719 [DEBUG] [Thread-300776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:50:15.719 [DEBUG] [Thread-300776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:50:15.737 [INFO] [Thread-300776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:50:15.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:50:15.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:50:16.612 [DEBUG] [Thread-300776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:50:16.612 [DEBUG] [Thread-300776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:50:16.651 [DEBUG] [Thread-300776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:50:16.651 [DEBUG] [Thread-300776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:50:16.661 [DEBUG] [Thread-300776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:50:16.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:50:16.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:50:16.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:50:16.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:50:16.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:50:16.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:50:16.702 [DEBUG] [Thread-300776] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:50:21.219 [DEBUG] [Thread-300778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:50:36.370 [DEBUG] [Thread-300779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:50:39.279 [DEBUG] [Thread-300780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:50:42.699 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:50:42.700 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:50:46.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:50:46.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:50:46.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:50:47.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 50, 11), 15.72, 35.56, 0.0, 9.72, 20.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:50:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:50:11
2025-12-24T10:50:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:50:48.063 [DEBUG] [Thread-300781] [transport.py] [_log()] starting thread (client mode): 0xf5740910
2025-12-24T10:50:48.064 [DEBUG] [Thread-300781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:50:48.072 [DEBUG] [Thread-300781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:50:48.073 [INFO] [Thread-300781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] client lang: <none>
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] server lang: <none>
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] kex follows: False
2025-12-24T10:50:48.077 [DEBUG] [Thread-300781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:50:48.078 [DEBUG] [Thread-300781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:50:48.078 [DEBUG] [Thread-300781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:50:48.078 [DEBUG] [Thread-300781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:50:48.078 [DEBUG] [Thread-300781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:50:48.078 [DEBUG] [Thread-300781] [transport.py] [_log()] Compression: none
2025-12-24T10:50:48.078 [DEBUG] [Thread-300781] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:50:48.112 [DEBUG] [Thread-300781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:50:48.117 [DEBUG] [Thread-300781] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:50:48.119 [DEBUG] [Thread-300781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:50:48.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:50:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:50:48.124 [DEBUG] [Thread-300781] [transport.py] [_log()] userauth is OK
2025-12-24T10:50:48.124 [DEBUG] [Thread-300781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:50:48.125 [DEBUG] [Thread-300781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:50:48.125 [DEBUG] [Thread-300781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:50:48.125 [DEBUG] [Thread-300781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:50:48.150 [INFO] [Thread-300781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:50:48.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:50:48.802 [DEBUG] [Thread-300781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:50:48.803 [DEBUG] [Thread-300781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:50:48.805 [DEBUG] [Thread-300781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:50:48.843 [DEBUG] [Thread-300781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:50:48.843 [DEBUG] [Thread-300781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:50:48.847 [DEBUG] [Thread-300781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:50:48.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:50:48.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:50:48.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:50:48.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:50:48.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:50:48.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:50:48.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:50:48.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:50:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:50:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.368126 -999.00  +20.20  13.26     40   +6.30 1 1 1 1 1   888    0 14.51 54.15 ----- 13.3 13.3 143.6 15.8 30.1 -27.5 29.4 -26.5 28.3 -23.9 28.9 -26.0
2025-12-24T10:50:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:50:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:50:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.368126
2025-12-24T10:50:48.885 [DEBUG] [Thread-300781] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:50:48.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:50:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:50:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:50:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:50:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:50:48.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:50:11', tmtdew=15.72, humidity=35.56, cloud=0.0, wind=9.72, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:50:06.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:50:48.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:50:49.010 [DEBUG] [Thread-300784] [transport.py] [_log()] starting thread (client mode): 0xf5742b30
2025-12-24T10:50:49.010 [DEBUG] [Thread-300784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:50:49.024 [DEBUG] [Thread-300784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:50:49.024 [INFO] [Thread-300784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] client lang: <none>
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] server lang: <none>
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] kex follows: False
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] Compression: none
2025-12-24T10:50:49.032 [DEBUG] [Thread-300784] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:50:49.092 [DEBUG] [Thread-300784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:50:49.093 [DEBUG] [Thread-300784] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:50:49.093 [DEBUG] [Thread-300784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:50:49.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:50:49.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:50:49.150 [DEBUG] [Thread-300784] [transport.py] [_log()] userauth is OK
2025-12-24T10:50:49.150 [DEBUG] [Thread-300784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:50:49.150 [DEBUG] [Thread-300784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:50:49.150 [DEBUG] [Thread-300784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:50:49.150 [DEBUG] [Thread-300784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:50:49.164 [INFO] [Thread-300784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:50:49.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:50:49.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:50:49.989 [DEBUG] [Thread-300784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:50:49.989 [DEBUG] [Thread-300784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:50:50.028 [DEBUG] [Thread-300784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:50:50.028 [DEBUG] [Thread-300784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:50:50.037 [DEBUG] [Thread-300784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:50:50.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:50:50.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:50:50.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:50:50.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:50:50.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:50:50.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:50:50.076 [DEBUG] [Thread-300784] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:50:51.455 [DEBUG] [Thread-300786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:51:06.596 [DEBUG] [Thread-300787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:51:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:51:20.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:51:20.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:51:21.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 50, 45), 15.6, 35.91, 0.0, 14.17, 20.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:51:21.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:50:45
2025-12-24T10:51:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:51:21.460 [DEBUG] [Thread-300788] [transport.py] [_log()] starting thread (client mode): 0xf5742770
2025-12-24T10:51:21.461 [DEBUG] [Thread-300788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:51:21.471 [DEBUG] [Thread-300788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:51:21.471 [INFO] [Thread-300788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] client lang: <none>
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] server lang: <none>
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] kex follows: False
2025-12-24T10:51:21.477 [DEBUG] [Thread-300788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:51:21.478 [DEBUG] [Thread-300788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:51:21.478 [DEBUG] [Thread-300788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:51:21.479 [DEBUG] [Thread-300788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:51:21.479 [DEBUG] [Thread-300788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:51:21.479 [DEBUG] [Thread-300788] [transport.py] [_log()] Compression: none
2025-12-24T10:51:21.479 [DEBUG] [Thread-300788] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:51:21.517 [DEBUG] [Thread-300788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:51:21.524 [DEBUG] [Thread-300788] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:51:21.526 [DEBUG] [Thread-300788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:51:21.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:51:21.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:51:21.532 [DEBUG] [Thread-300788] [transport.py] [_log()] userauth is OK
2025-12-24T10:51:21.532 [DEBUG] [Thread-300788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:51:21.533 [DEBUG] [Thread-300788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:51:21.533 [DEBUG] [Thread-300788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:51:21.533 [DEBUG] [Thread-300788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:51:21.572 [INFO] [Thread-300788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:51:21.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:51:21.678 [DEBUG] [Thread-300790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:51:22.203 [DEBUG] [Thread-300788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:51:22.203 [DEBUG] [Thread-300788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:51:22.203 [DEBUG] [Thread-300788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:51:22.243 [DEBUG] [Thread-300788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:51:22.243 [DEBUG] [Thread-300788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:51:22.246 [DEBUG] [Thread-300788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:51:22.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:51:22.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:51:22.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:51:22.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:51:22.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:51:22.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:51:22.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:51:22.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:51:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:51:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.368473 -999.00  +20.20   9.77     40   +6.20 1 1 1 1 1   888    0 14.97 63.02 ----- 9.8 9.8 131.2 16.7 30.1 -26.3 29.3 -27.0 28.4 -23.8 28.9 -26.0
2025-12-24T10:51:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:51:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:51:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.368473
2025-12-24T10:51:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:51:22.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:51:22.274 [DEBUG] [Thread-300788] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:51:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:51:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:51:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:51:22.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:50:45', tmtdew=15.6, humidity=35.91, cloud=0.0, wind=14.17, temperature=20.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:50:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:51:22.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:51:22.359 [DEBUG] [Thread-300792] [transport.py] [_log()] starting thread (client mode): 0xf574c730
2025-12-24T10:51:22.360 [DEBUG] [Thread-300792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:51:22.373 [DEBUG] [Thread-300792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:51:22.373 [INFO] [Thread-300792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:51:22.380 [DEBUG] [Thread-300792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:51:22.380 [DEBUG] [Thread-300792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:51:22.380 [DEBUG] [Thread-300792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:51:22.380 [DEBUG] [Thread-300792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:51:22.380 [DEBUG] [Thread-300792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] client lang: <none>
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] server lang: <none>
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] kex follows: False
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] Compression: none
2025-12-24T10:51:22.381 [DEBUG] [Thread-300792] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:51:22.444 [DEBUG] [Thread-300792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:51:22.444 [DEBUG] [Thread-300792] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:51:22.444 [DEBUG] [Thread-300792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:51:22.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:51:22.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:51:22.502 [DEBUG] [Thread-300792] [transport.py] [_log()] userauth is OK
2025-12-24T10:51:22.502 [DEBUG] [Thread-300792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:51:22.502 [DEBUG] [Thread-300792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:51:22.502 [DEBUG] [Thread-300792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:51:22.502 [DEBUG] [Thread-300792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:51:22.516 [INFO] [Thread-300792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:51:22.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:51:22.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:51:23.348 [DEBUG] [Thread-300792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:51:23.348 [DEBUG] [Thread-300792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:51:23.396 [DEBUG] [Thread-300792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:51:23.396 [DEBUG] [Thread-300792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:51:23.405 [DEBUG] [Thread-300792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:51:23.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:51: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')
2025-12-24T10:51: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
2025-12-24T10:51:23.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:51:23.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:51:23.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:51:23.437 [DEBUG] [Thread-300792] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:51:36.800 [DEBUG] [Thread-300794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:51:39.588 [DEBUG] [Thread-300795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:51:42.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:51:42.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:51:51.900 [DEBUG] [Thread-300796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:51:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:51:53.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:51:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:51:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 51, 17), 15.75, 35.58, 0.0, 14.52, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:51:54.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:51:17
2025-12-24T10:51:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:51:54.797 [DEBUG] [Thread-300797] [transport.py] [_log()] starting thread (client mode): 0xf572e500
2025-12-24T10:51:54.797 [DEBUG] [Thread-300797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:51:54.810 [DEBUG] [Thread-300797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:51:54.810 [INFO] [Thread-300797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:51:54.815 [DEBUG] [Thread-300797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:51:54.815 [DEBUG] [Thread-300797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:51:54.815 [DEBUG] [Thread-300797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:51:54.815 [DEBUG] [Thread-300797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:51:54.815 [DEBUG] [Thread-300797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:51:54.815 [DEBUG] [Thread-300797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:51:54.815 [DEBUG] [Thread-300797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:51:54.816 [DEBUG] [Thread-300797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:51:54.816 [DEBUG] [Thread-300797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:51:54.816 [DEBUG] [Thread-300797] [transport.py] [_log()] client lang: <none>
2025-12-24T10:51:54.816 [DEBUG] [Thread-300797] [transport.py] [_log()] server lang: <none>
2025-12-24T10:51:54.816 [DEBUG] [Thread-300797] [transport.py] [_log()] kex follows: False
2025-12-24T10:51:54.816 [DEBUG] [Thread-300797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:51:54.817 [DEBUG] [Thread-300797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:51:54.817 [DEBUG] [Thread-300797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:51:54.817 [DEBUG] [Thread-300797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:51:54.817 [DEBUG] [Thread-300797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:51:54.817 [DEBUG] [Thread-300797] [transport.py] [_log()] Compression: none
2025-12-24T10:51:54.817 [DEBUG] [Thread-300797] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:51:54.855 [DEBUG] [Thread-300797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:51:54.860 [DEBUG] [Thread-300797] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:51:54.862 [DEBUG] [Thread-300797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:51:54.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:51:54.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:51:54.868 [DEBUG] [Thread-300797] [transport.py] [_log()] userauth is OK
2025-12-24T10:51:54.869 [DEBUG] [Thread-300797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:51:54.869 [DEBUG] [Thread-300797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:51:54.869 [DEBUG] [Thread-300797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:51:54.869 [DEBUG] [Thread-300797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:51:54.895 [INFO] [Thread-300797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:51:54.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:51:55.571 [DEBUG] [Thread-300797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:51:55.580 [DEBUG] [Thread-300797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:51:55.582 [DEBUG] [Thread-300797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:51:55.612 [DEBUG] [Thread-300797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:51:55.612 [DEBUG] [Thread-300797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:51:55.615 [DEBUG] [Thread-300797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:51:55.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:51:55.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:51:55.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:51:55.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:51:55.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:51:55.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:51:55.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:51:55.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:51:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:51:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.368820 -999.00  +20.10  11.59     40   +6.10 1 1 1 1 1   888    0 14.97 63.51 ----- 11.6 11.6 112.6 15.1 29.9 -27.7 29.3 -26.1 28.4 -24.4 29.0 -25.8
2025-12-24T10:51:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:51:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:51:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.368820
2025-12-24T10:51:55.651 [DEBUG] [Thread-300797] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:51:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:51:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:51:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:51:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:51:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:51:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:51:17', tmtdew=15.75, humidity=35.58, cloud=0.0, wind=14.52, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:51:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:51:55.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:51:55.763 [DEBUG] [Thread-300800] [transport.py] [_log()] starting thread (client mode): 0xf5703ac0
2025-12-24T10:51:55.763 [DEBUG] [Thread-300800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:51:55.777 [DEBUG] [Thread-300800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:51:55.777 [INFO] [Thread-300800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] client lang: <none>
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] server lang: <none>
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] kex follows: False
2025-12-24T10:51:55.785 [DEBUG] [Thread-300800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:51:55.786 [DEBUG] [Thread-300800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:51:55.786 [DEBUG] [Thread-300800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:51:55.786 [DEBUG] [Thread-300800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:51:55.786 [DEBUG] [Thread-300800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:51:55.786 [DEBUG] [Thread-300800] [transport.py] [_log()] Compression: none
2025-12-24T10:51:55.786 [DEBUG] [Thread-300800] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:51:55.841 [DEBUG] [Thread-300800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:51:55.841 [DEBUG] [Thread-300800] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:51:55.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:51:55.841 [DEBUG] [Thread-300800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:51:55.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:51:55.898 [DEBUG] [Thread-300800] [transport.py] [_log()] userauth is OK
2025-12-24T10:51:55.898 [DEBUG] [Thread-300800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:51:55.898 [DEBUG] [Thread-300800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:51:55.898 [DEBUG] [Thread-300800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:51:55.898 [DEBUG] [Thread-300800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:51:55.913 [INFO] [Thread-300800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:51:55.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:51:55.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:51:56.721 [DEBUG] [Thread-300800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:51:56.721 [DEBUG] [Thread-300800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:51:56.770 [DEBUG] [Thread-300800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:51:56.770 [DEBUG] [Thread-300800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:51:56.779 [DEBUG] [Thread-300800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:51:56.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:51:56.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')
2025-12-24T10:51:56.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
2025-12-24T10:51:56.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:51:56.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:51:56.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:51:56.817 [DEBUG] [Thread-300800] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:52:06.979 [DEBUG] [Thread-300802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:52:22.175 [DEBUG] [Thread-300803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:52:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:52:26.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:52:26.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:52:27.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 51, 51), 16.19, 34.68, 0.0, 12.23, 20.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:52:27.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:51:51
2025-12-24T10:52:27.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:52:28.144 [DEBUG] [Thread-300804] [transport.py] [_log()] starting thread (client mode): 0xf574d960
2025-12-24T10:52:28.144 [DEBUG] [Thread-300804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:52:28.154 [DEBUG] [Thread-300804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:52:28.155 [INFO] [Thread-300804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] client lang: <none>
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] server lang: <none>
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] kex follows: False
2025-12-24T10:52:28.160 [DEBUG] [Thread-300804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:52:28.161 [DEBUG] [Thread-300804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:52:28.161 [DEBUG] [Thread-300804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:52:28.161 [DEBUG] [Thread-300804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:52:28.161 [DEBUG] [Thread-300804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:52:28.161 [DEBUG] [Thread-300804] [transport.py] [_log()] Compression: none
2025-12-24T10:52:28.161 [DEBUG] [Thread-300804] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:52:28.193 [DEBUG] [Thread-300804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:52:28.198 [DEBUG] [Thread-300804] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:52:28.200 [DEBUG] [Thread-300804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:52:28.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:52:28.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:52:28.205 [DEBUG] [Thread-300804] [transport.py] [_log()] userauth is OK
2025-12-24T10:52:28.205 [DEBUG] [Thread-300804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:52:28.205 [DEBUG] [Thread-300804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:52:28.205 [DEBUG] [Thread-300804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:52:28.205 [DEBUG] [Thread-300804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:52:28.230 [INFO] [Thread-300804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:52:28.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:52:28.886 [DEBUG] [Thread-300804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:52:28.886 [DEBUG] [Thread-300804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:52:28.888 [DEBUG] [Thread-300804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:52:28.927 [DEBUG] [Thread-300804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:52:28.927 [DEBUG] [Thread-300804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:52:28.931 [DEBUG] [Thread-300804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:52:28.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:52:28.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:52:28.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:52:28.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:52:28.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:52:28.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:52:28.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:52:28.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:52:28.963 [DEBUG] [Thread-300804] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:52:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:52:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.369168 -999.00  +20.10   7.73     40   +6.10 1 1 1 1 1   888    0 15.24 67.69 ----- 7.7 7.7 113.9 13.6 30.0 -26.1 29.4 -26.3 28.4 -23.7 29.0 -25.7
2025-12-24T10:52:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:52:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:52:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.369168
2025-12-24T10:52:28.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:52:28.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:52:28.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:52:28.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:52:28.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:52:28.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:51:51', tmtdew=16.19, humidity=34.68, cloud=0.0, wind=12.23, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:51:36.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:52:29.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:52:29.088 [DEBUG] [Thread-300807] [transport.py] [_log()] starting thread (client mode): 0xf574fb80
2025-12-24T10:52:29.088 [DEBUG] [Thread-300807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:52:29.104 [DEBUG] [Thread-300807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:52:29.104 [INFO] [Thread-300807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:52:29.111 [DEBUG] [Thread-300807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:52:29.111 [DEBUG] [Thread-300807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] client lang: <none>
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] server lang: <none>
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] kex follows: False
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] Compression: none
2025-12-24T10:52:29.112 [DEBUG] [Thread-300807] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:52:29.170 [DEBUG] [Thread-300807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:52:29.170 [DEBUG] [Thread-300807] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:52:29.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:52:29.171 [DEBUG] [Thread-300807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:52:29.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:52:29.236 [DEBUG] [Thread-300807] [transport.py] [_log()] userauth is OK
2025-12-24T10:52:29.236 [DEBUG] [Thread-300807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:52:29.237 [DEBUG] [Thread-300807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:52:29.237 [DEBUG] [Thread-300807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:52:29.237 [DEBUG] [Thread-300807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:52:29.255 [INFO] [Thread-300807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:52:29.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:52:29.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:52:30.119 [DEBUG] [Thread-300807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:52:30.119 [DEBUG] [Thread-300807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:52:30.157 [DEBUG] [Thread-300807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:52:30.157 [DEBUG] [Thread-300807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:52:30.166 [DEBUG] [Thread-300807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:52:30.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:52:30.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')
2025-12-24T10:52:30.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:52:30.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:52:30.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:52:30.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:52:30.205 [DEBUG] [Thread-300807] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:52:37.286 [DEBUG] [Thread-300809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:52:39.812 [DEBUG] [Thread-300810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:52:42.982 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:52:42.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:52:52.406 [DEBUG] [Thread-300811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:53:00.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:53:00.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:53:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:53:01.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 52, 24), 16.09, 34.9, 0.0, 11.63, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:53:01.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:52:24
2025-12-24T10:53:01.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:53:01.626 [DEBUG] [Thread-300812] [transport.py] [_log()] starting thread (client mode): 0xf574d210
2025-12-24T10:53:01.627 [DEBUG] [Thread-300812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:53:01.627 [DEBUG] [Thread-300812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:53:01.627 [INFO] [Thread-300812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] client lang: <none>
2025-12-24T10:53:01.631 [DEBUG] [Thread-300812] [transport.py] [_log()] server lang: <none>
2025-12-24T10:53:01.632 [DEBUG] [Thread-300812] [transport.py] [_log()] kex follows: False
2025-12-24T10:53:01.632 [DEBUG] [Thread-300812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:53:01.632 [DEBUG] [Thread-300812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:53:01.632 [DEBUG] [Thread-300812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:53:01.632 [DEBUG] [Thread-300812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:53:01.633 [DEBUG] [Thread-300812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:53:01.633 [DEBUG] [Thread-300812] [transport.py] [_log()] Compression: none
2025-12-24T10:53:01.633 [DEBUG] [Thread-300812] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:53:01.673 [DEBUG] [Thread-300812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:53:01.677 [DEBUG] [Thread-300812] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:53:01.679 [DEBUG] [Thread-300812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:53:01.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:53:01.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:53:01.740 [DEBUG] [Thread-300812] [transport.py] [_log()] userauth is OK
2025-12-24T10:53:01.741 [DEBUG] [Thread-300812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:53:01.746 [DEBUG] [Thread-300812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:53:01.752 [DEBUG] [Thread-300812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:53:01.752 [DEBUG] [Thread-300812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:53:01.801 [INFO] [Thread-300812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:53:01.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:53:02.430 [DEBUG] [Thread-300812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:53:02.431 [DEBUG] [Thread-300812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:53:02.431 [DEBUG] [Thread-300812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:53:02.472 [DEBUG] [Thread-300812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:53:02.472 [DEBUG] [Thread-300812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:53:02.474 [DEBUG] [Thread-300812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:53:02.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:53:02.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:53:02.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:53:02.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:53:02.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:53:02.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:53:02.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:53:02.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:53:02.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:53:02.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.369515 -999.00  +20.60   8.79     39   +6.30 1 1 1 1 1   888    0 15.45 72.20 ----- 8.8 8.8 145.5 13.2 30.1 -26.2 29.4 -25.0 28.6 -24.1 29.1 -25.0
2025-12-24T10:53:02.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:53:02.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:53:02.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.369515
2025-12-24T10:53:02.498 [DEBUG] [Thread-300812] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:53:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:53:02.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:53:02.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:53:02.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:53:02.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:53:02.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:52:24', tmtdew=16.09, humidity=34.9, cloud=0.0, wind=11.63, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:52:06.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:53:02.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:53:02.606 [DEBUG] [Thread-300815] [transport.py] [_log()] starting thread (client mode): 0xf57715d0
2025-12-24T10:53:02.606 [DEBUG] [Thread-300815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:53:02.621 [DEBUG] [Thread-300815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:53:02.621 [INFO] [Thread-300815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] client lang: <none>
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] server lang: <none>
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] kex follows: False
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:53:02.628 [DEBUG] [Thread-300815] [transport.py] [_log()] Compression: none
2025-12-24T10:53:02.629 [DEBUG] [Thread-300815] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:53:02.684 [DEBUG] [Thread-300815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:53:02.685 [DEBUG] [Thread-300815] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:53:02.685 [DEBUG] [Thread-300815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:53:02.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:53:02.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:53:02.741 [DEBUG] [Thread-300815] [transport.py] [_log()] userauth is OK
2025-12-24T10:53:02.742 [DEBUG] [Thread-300815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:53:02.742 [DEBUG] [Thread-300815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:53:02.742 [DEBUG] [Thread-300815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:53:02.742 [DEBUG] [Thread-300815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:53:02.761 [INFO] [Thread-300815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:53:02.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:53:02.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:53:03.584 [DEBUG] [Thread-300815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:53:03.584 [DEBUG] [Thread-300815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:53:03.635 [DEBUG] [Thread-300815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:53:03.635 [DEBUG] [Thread-300815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:53:03.645 [DEBUG] [Thread-300815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:53:03.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:53:03.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')
2025-12-24T10:53:03.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:53:03.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:53:03.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:53:03.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:53:03.680 [DEBUG] [Thread-300815] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:53:07.472 [DEBUG] [Thread-300817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:53:22.578 [DEBUG] [Thread-300818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:53:33.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:53:33.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:53:33.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:53:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 53, 30), 16.09, 34.62, 0.0, 10.02, 19.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:53:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:53:30
2025-12-24T10:53:34.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:53:35.019 [DEBUG] [Thread-300819] [transport.py] [_log()] starting thread (client mode): 0xf574e650
2025-12-24T10:53:35.020 [DEBUG] [Thread-300819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:53:35.030 [DEBUG] [Thread-300819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:53:35.030 [INFO] [Thread-300819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] client lang: <none>
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] server lang: <none>
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] kex follows: False
2025-12-24T10:53:35.035 [DEBUG] [Thread-300819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:53:35.036 [DEBUG] [Thread-300819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:53:35.036 [DEBUG] [Thread-300819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:53:35.036 [DEBUG] [Thread-300819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:53:35.036 [DEBUG] [Thread-300819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:53:35.037 [DEBUG] [Thread-300819] [transport.py] [_log()] Compression: none
2025-12-24T10:53:35.037 [DEBUG] [Thread-300819] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:53:35.066 [DEBUG] [Thread-300819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:53:35.069 [DEBUG] [Thread-300819] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:53:35.070 [DEBUG] [Thread-300819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:53:35.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:53:35.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:53:35.074 [DEBUG] [Thread-300819] [transport.py] [_log()] userauth is OK
2025-12-24T10:53:35.074 [DEBUG] [Thread-300819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:53:35.074 [DEBUG] [Thread-300819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:53:35.074 [DEBUG] [Thread-300819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:53:35.074 [DEBUG] [Thread-300819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:53:35.092 [INFO] [Thread-300819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:53:35.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:53:35.734 [DEBUG] [Thread-300819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:53:35.734 [DEBUG] [Thread-300819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:53:35.734 [DEBUG] [Thread-300819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:53:35.775 [DEBUG] [Thread-300819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:53:35.775 [DEBUG] [Thread-300819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:53:35.777 [DEBUG] [Thread-300819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:53:35.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:53:35.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:53:35.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:53:35.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:53:35.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:53:35.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:53:35.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:53:35.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:53:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:53:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.369862 -999.00  +20.70  12.74     37   +5.80 1 1 1 1 1   888    0 15.63 82.14 ----- 12.7 12.7 199.1 16.8 29.9 -27.5 29.4 -25.7 28.4 -25.8 28.9 -27.1
2025-12-24T10:53:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:53:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:53:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.369862
2025-12-24T10:53:35.804 [DEBUG] [Thread-300819] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:53:35.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:53:35.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:53:35.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:53:35.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:53:35.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:53:35.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:53:30', tmtdew=16.09, humidity=34.62, cloud=0.0, wind=10.02, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:52:36.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:53:35.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:53:35.905 [DEBUG] [Thread-300822] [transport.py] [_log()] starting thread (client mode): 0xf574e6b0
2025-12-24T10:53:35.906 [DEBUG] [Thread-300822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:53:35.921 [DEBUG] [Thread-300822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:53:35.921 [INFO] [Thread-300822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:53:35.928 [DEBUG] [Thread-300822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:53:35.928 [DEBUG] [Thread-300822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:53:35.928 [DEBUG] [Thread-300822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:53:35.928 [DEBUG] [Thread-300822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] client lang: <none>
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] server lang: <none>
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] kex follows: False
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] Compression: none
2025-12-24T10:53:35.929 [DEBUG] [Thread-300822] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:53:35.989 [DEBUG] [Thread-300822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:53:35.989 [DEBUG] [Thread-300822] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:53:35.990 [DEBUG] [Thread-300822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:53:35.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:53:35.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:53:36.045 [DEBUG] [Thread-300822] [transport.py] [_log()] userauth is OK
2025-12-24T10:53:36.045 [DEBUG] [Thread-300822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:53:36.045 [DEBUG] [Thread-300822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:53:36.045 [DEBUG] [Thread-300822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:53:36.046 [DEBUG] [Thread-300822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:53:36.061 [INFO] [Thread-300822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:53:36.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:53:36.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:53:36.887 [DEBUG] [Thread-300822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:53:36.887 [DEBUG] [Thread-300822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:53:36.934 [DEBUG] [Thread-300822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:53:36.935 [DEBUG] [Thread-300822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:53:36.943 [DEBUG] [Thread-300822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:53:36.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:53:36.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:53:36.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:53:36.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:53:36.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:53:36.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:53:36.976 [DEBUG] [Thread-300822] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:53:37.625 [DEBUG] [Thread-300824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:53:40.118 [DEBUG] [Thread-300825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:53:43.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:53:43.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:53:52.731 [DEBUG] [Thread-300826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:54:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:54:07.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:54:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:54:07.772 [DEBUG] [Thread-300827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:54:07.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 54, 3), 15.98, 34.87, 0.0, 10.41, 19.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:54:07.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:54:03
2025-12-24T10:54:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:54:08.301 [DEBUG] [Thread-300828] [transport.py] [_log()] starting thread (client mode): 0xf5700ee0
2025-12-24T10:54:08.301 [DEBUG] [Thread-300828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:54:08.316 [DEBUG] [Thread-300828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:54:08.316 [INFO] [Thread-300828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] client lang: <none>
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] server lang: <none>
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] kex follows: False
2025-12-24T10:54:08.321 [DEBUG] [Thread-300828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:54:08.322 [DEBUG] [Thread-300828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:54:08.322 [DEBUG] [Thread-300828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:54:08.322 [DEBUG] [Thread-300828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:54:08.322 [DEBUG] [Thread-300828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:54:08.322 [DEBUG] [Thread-300828] [transport.py] [_log()] Compression: none
2025-12-24T10:54:08.322 [DEBUG] [Thread-300828] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:54:08.355 [DEBUG] [Thread-300828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:54:08.360 [DEBUG] [Thread-300828] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:54:08.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:54:08.362 [DEBUG] [Thread-300828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:54:08.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:54:08.368 [DEBUG] [Thread-300828] [transport.py] [_log()] userauth is OK
2025-12-24T10:54:08.368 [DEBUG] [Thread-300828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:54:08.369 [DEBUG] [Thread-300828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:54:08.369 [DEBUG] [Thread-300828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:54:08.369 [DEBUG] [Thread-300828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:54:08.417 [INFO] [Thread-300828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:54:08.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:54:09.032 [DEBUG] [Thread-300828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:54:09.033 [DEBUG] [Thread-300828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:54:09.034 [DEBUG] [Thread-300828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:54:09.075 [DEBUG] [Thread-300828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:54:09.075 [DEBUG] [Thread-300828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:54:09.078 [DEBUG] [Thread-300828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:54:09.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:54:09.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:54:09.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:54:09.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:54:09.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:54:09.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:54:09.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:54:09.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.370557 -999.00  +20.60  10.33     38   +6.10 1 1 1 1 1   888    0 16.39 100.57 ----- 10.3 10.3 164.6 12.6 30.1 -27.6 28.8 -27.6 28.4 -24.2 29.1 -26.3
2025-12-24T10:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.370557
2025-12-24T10:54:09.114 [DEBUG] [Thread-300828] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:54:09.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:54:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:54:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:54:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:54:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:54:09.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:54:03', tmtdew=15.98, humidity=34.87, cloud=0.0, wind=10.41, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:53:36.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:54:09.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:54:09.224 [DEBUG] [Thread-300831] [transport.py] [_log()] starting thread (client mode): 0xf574c310
2025-12-24T10:54:09.224 [DEBUG] [Thread-300831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:54:09.240 [DEBUG] [Thread-300831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:54:09.240 [INFO] [Thread-300831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] client lang: <none>
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] server lang: <none>
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] kex follows: False
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:54:09.248 [DEBUG] [Thread-300831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:54:09.249 [DEBUG] [Thread-300831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:54:09.249 [DEBUG] [Thread-300831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:54:09.249 [DEBUG] [Thread-300831] [transport.py] [_log()] Compression: none
2025-12-24T10:54:09.249 [DEBUG] [Thread-300831] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:54:09.305 [DEBUG] [Thread-300831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:54:09.306 [DEBUG] [Thread-300831] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:54:09.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:54:09.306 [DEBUG] [Thread-300831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:54:09.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:54:09.362 [DEBUG] [Thread-300831] [transport.py] [_log()] userauth is OK
2025-12-24T10:54:09.362 [DEBUG] [Thread-300831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:54:09.362 [DEBUG] [Thread-300831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:54:09.362 [DEBUG] [Thread-300831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:54:09.362 [DEBUG] [Thread-300831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:54:09.380 [INFO] [Thread-300831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:54:09.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:54:09.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:54:10.227 [DEBUG] [Thread-300831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:54:10.227 [DEBUG] [Thread-300831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:54:10.271 [DEBUG] [Thread-300831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:54:10.271 [DEBUG] [Thread-300831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:54:10.279 [DEBUG] [Thread-300831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:54:10.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:54:10.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')
2025-12-24T10:54:10.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:54:10.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:54:10.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:54:10.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:54:10.317 [DEBUG] [Thread-300831] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:54:22.902 [DEBUG] [Thread-300833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:54:38.065 [DEBUG] [Thread-300834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:54:40.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:54:40.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:54:40.339 [DEBUG] [Thread-300835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:54:40.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:54:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 54, 36), 15.67, 35.32, 0.0, 4.96, 19.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:54:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:54:36
2025-12-24T10:54:41.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:54:41.561 [DEBUG] [Thread-300836] [transport.py] [_log()] starting thread (client mode): 0xf5700b50
2025-12-24T10:54:41.561 [DEBUG] [Thread-300836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:54:41.577 [DEBUG] [Thread-300836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:54:41.577 [INFO] [Thread-300836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] client lang: <none>
2025-12-24T10:54:41.582 [DEBUG] [Thread-300836] [transport.py] [_log()] server lang: <none>
2025-12-24T10:54:41.583 [DEBUG] [Thread-300836] [transport.py] [_log()] kex follows: False
2025-12-24T10:54:41.583 [DEBUG] [Thread-300836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:54:41.584 [DEBUG] [Thread-300836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:54:41.584 [DEBUG] [Thread-300836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:54:41.584 [DEBUG] [Thread-300836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:54:41.584 [DEBUG] [Thread-300836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:54:41.584 [DEBUG] [Thread-300836] [transport.py] [_log()] Compression: none
2025-12-24T10:54:41.584 [DEBUG] [Thread-300836] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:54:41.620 [DEBUG] [Thread-300836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:54:41.626 [DEBUG] [Thread-300836] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:54:41.628 [DEBUG] [Thread-300836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:54:41.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:54:41.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:54:41.634 [DEBUG] [Thread-300836] [transport.py] [_log()] userauth is OK
2025-12-24T10:54:41.634 [DEBUG] [Thread-300836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:54:41.635 [DEBUG] [Thread-300836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:54:41.635 [DEBUG] [Thread-300836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:54:41.635 [DEBUG] [Thread-300836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:54:41.663 [INFO] [Thread-300836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:54:41.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:54:42.308 [DEBUG] [Thread-300836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:54:42.308 [DEBUG] [Thread-300836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:54:42.312 [DEBUG] [Thread-300836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:54:42.349 [DEBUG] [Thread-300836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:54:42.349 [DEBUG] [Thread-300836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:54:42.352 [DEBUG] [Thread-300836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:54:42.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:54:42.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:54:42.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:54:42.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:54:42.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:54:42.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:54:42.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:54:42.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:54:42.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:54:42.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.370904 -999.00  +20.60   6.25     38   +6.10 1 1 1 1 1   888    0 16.38 104.24 ----- 6.2 6.2 155.0 11.2 30.1 -25.5 29.1 -27.1 28.4 -24.1 29.1 -25.0
2025-12-24T10:54:42.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:54:42.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:54:42.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.370904
2025-12-24T10:54:42.381 [DEBUG] [Thread-300836] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:54:42.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:54:42.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:54:42.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:54:42.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:54:42.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:54:42.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:54:36', tmtdew=15.67, humidity=35.32, cloud=0.0, wind=4.96, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:54:06.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:54:42.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:54:42.476 [DEBUG] [Thread-300839] [transport.py] [_log()] starting thread (client mode): 0xf5701840
2025-12-24T10:54:42.476 [DEBUG] [Thread-300839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:54:42.492 [DEBUG] [Thread-300839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:54:42.492 [INFO] [Thread-300839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] client lang: <none>
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] server lang: <none>
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] kex follows: False
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:54:42.499 [DEBUG] [Thread-300839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:54:42.500 [DEBUG] [Thread-300839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:54:42.500 [DEBUG] [Thread-300839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:54:42.500 [DEBUG] [Thread-300839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:54:42.500 [DEBUG] [Thread-300839] [transport.py] [_log()] Compression: none
2025-12-24T10:54:42.500 [DEBUG] [Thread-300839] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:54:42.556 [DEBUG] [Thread-300839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:54:42.556 [DEBUG] [Thread-300839] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:54:42.556 [DEBUG] [Thread-300839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:54:42.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:54:42.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:54:42.613 [DEBUG] [Thread-300839] [transport.py] [_log()] userauth is OK
2025-12-24T10:54:42.613 [DEBUG] [Thread-300839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:54:42.614 [DEBUG] [Thread-300839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:54:42.614 [DEBUG] [Thread-300839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:54:42.614 [DEBUG] [Thread-300839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:54:42.627 [INFO] [Thread-300839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:54:42.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:54:42.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:54:43.267 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:54:43.268 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:54:43.472 [DEBUG] [Thread-300839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:54:43.473 [DEBUG] [Thread-300839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:54:43.520 [DEBUG] [Thread-300839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:54:43.520 [DEBUG] [Thread-300839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:54:43.529 [DEBUG] [Thread-300839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:54:43.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:54:43.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')
2025-12-24T10:54:43.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:54:43.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:54:43.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:54:43.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:54:43.565 [DEBUG] [Thread-300839] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:54:53.149 [DEBUG] [Thread-300841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:55:08.328 [DEBUG] [Thread-300842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:55:13.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:55:13.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:55:13.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:55:14.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 55, 10), 15.98, 34.63, 0.0, 7.39, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:55:14.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:55:10
2025-12-24T10:55:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:55:14.846 [DEBUG] [Thread-300843] [transport.py] [_log()] starting thread (client mode): 0xf574f3a0
2025-12-24T10:55:14.846 [DEBUG] [Thread-300843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:55:14.859 [DEBUG] [Thread-300843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:55:14.859 [INFO] [Thread-300843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] client lang: <none>
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] server lang: <none>
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] kex follows: False
2025-12-24T10:55:14.865 [DEBUG] [Thread-300843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:55:14.866 [DEBUG] [Thread-300843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:55:14.866 [DEBUG] [Thread-300843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:55:14.866 [DEBUG] [Thread-300843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:55:14.866 [DEBUG] [Thread-300843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:55:14.866 [DEBUG] [Thread-300843] [transport.py] [_log()] Compression: none
2025-12-24T10:55:14.866 [DEBUG] [Thread-300843] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:55:14.902 [DEBUG] [Thread-300843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:55:14.907 [DEBUG] [Thread-300843] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:55:14.909 [DEBUG] [Thread-300843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:55:14.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:55:14.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:55:14.914 [DEBUG] [Thread-300843] [transport.py] [_log()] userauth is OK
2025-12-24T10:55:14.914 [DEBUG] [Thread-300843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:55:14.915 [DEBUG] [Thread-300843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:55:14.915 [DEBUG] [Thread-300843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:55:14.915 [DEBUG] [Thread-300843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:55:14.942 [INFO] [Thread-300843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:55:14.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:55:15.593 [DEBUG] [Thread-300843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:55:15.594 [DEBUG] [Thread-300843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:55:15.595 [DEBUG] [Thread-300843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:55:15.634 [DEBUG] [Thread-300843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:55:15.634 [DEBUG] [Thread-300843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:55:15.638 [DEBUG] [Thread-300843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:55:15.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:55:15.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:55:15.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:55:15.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:55:15.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:55:15.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:55:15.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:55:15.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:55:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:55:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.371251 -999.00  +20.70   7.00     38   +6.00 1 1 1 1 1   888    0 16.44 107.06 ----- 7.0 7.0 181.7 10.3 30.0 -27.3 29.0 -28.7 28.4 -25.9 29.1 -25.6
2025-12-24T10:55:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:55:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:55:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.371251
2025-12-24T10:55:15.673 [DEBUG] [Thread-300843] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:55:15.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:55:15.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:55:15.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:55:15.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:55:15.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:55:15.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:55:10', tmtdew=15.98, humidity=34.63, cloud=0.0, wind=7.39, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:54:36.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:55:15.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:55:15.786 [DEBUG] [Thread-300846] [transport.py] [_log()] starting thread (client mode): 0xf57a8c10
2025-12-24T10:55:15.787 [DEBUG] [Thread-300846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:55:15.802 [DEBUG] [Thread-300846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:55:15.802 [INFO] [Thread-300846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] client lang: <none>
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] server lang: <none>
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] kex follows: False
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:55:15.810 [DEBUG] [Thread-300846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:55:15.811 [DEBUG] [Thread-300846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:55:15.811 [DEBUG] [Thread-300846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:55:15.811 [DEBUG] [Thread-300846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:55:15.811 [DEBUG] [Thread-300846] [transport.py] [_log()] Compression: none
2025-12-24T10:55:15.811 [DEBUG] [Thread-300846] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:55:15.870 [DEBUG] [Thread-300846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:55:15.870 [DEBUG] [Thread-300846] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:55:15.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:55:15.871 [DEBUG] [Thread-300846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:55:15.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:55:15.926 [DEBUG] [Thread-300846] [transport.py] [_log()] userauth is OK
2025-12-24T10:55:15.927 [DEBUG] [Thread-300846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:55:15.927 [DEBUG] [Thread-300846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:55:15.927 [DEBUG] [Thread-300846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:55:15.927 [DEBUG] [Thread-300846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:55:15.952 [INFO] [Thread-300846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:55:15.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:55:15.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:55:16.824 [DEBUG] [Thread-300846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:55:16.824 [DEBUG] [Thread-300846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:55:16.872 [DEBUG] [Thread-300846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:55:16.872 [DEBUG] [Thread-300846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:55:16.881 [DEBUG] [Thread-300846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:55:16.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:55:16.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:55:16.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:55:16.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:55:16.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:55:16.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:55:16.914 [DEBUG] [Thread-300846] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:55:23.421 [DEBUG] [Thread-300848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:55:38.541 [DEBUG] [Thread-300849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:55:40.573 [DEBUG] [Thread-300850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:55:43.409 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:55:43.410 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:55:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:55:46.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:55:46.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
2025-12-24T10:55:47.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 55, 43), 15.95, 35.09, 0.0, 6.79, 19.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:55:47.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:55:43
2025-12-24T10:55:47.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:55:48.167 [DEBUG] [Thread-300851] [transport.py] [_log()] starting thread (client mode): 0xf5794400
2025-12-24T10:55:48.168 [DEBUG] [Thread-300851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:55:48.181 [DEBUG] [Thread-300851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:55:48.181 [INFO] [Thread-300851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] client lang: <none>
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] server lang: <none>
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] kex follows: False
2025-12-24T10:55:48.186 [DEBUG] [Thread-300851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:55:48.187 [DEBUG] [Thread-300851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:55:48.187 [DEBUG] [Thread-300851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:55:48.187 [DEBUG] [Thread-300851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:55:48.187 [DEBUG] [Thread-300851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:55:48.187 [DEBUG] [Thread-300851] [transport.py] [_log()] Compression: none
2025-12-24T10:55:48.187 [DEBUG] [Thread-300851] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:55:48.222 [DEBUG] [Thread-300851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:55:48.225 [DEBUG] [Thread-300851] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:55:48.226 [DEBUG] [Thread-300851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:55:48.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:55:48.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:55:48.229 [DEBUG] [Thread-300851] [transport.py] [_log()] userauth is OK
2025-12-24T10:55:48.229 [DEBUG] [Thread-300851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:55:48.230 [DEBUG] [Thread-300851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:55:48.230 [DEBUG] [Thread-300851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:55:48.230 [DEBUG] [Thread-300851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:55:48.248 [INFO] [Thread-300851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:55:48.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:55:48.908 [DEBUG] [Thread-300851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:55:48.908 [DEBUG] [Thread-300851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:55:48.910 [DEBUG] [Thread-300851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:55:48.949 [DEBUG] [Thread-300851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:55:48.949 [DEBUG] [Thread-300851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:55:48.953 [DEBUG] [Thread-300851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:55:48.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:55:48.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:55:48.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:55:48.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:55:48.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:55:48.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:55:48.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:55:48.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:55:48.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:55:48.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.371598 -999.00  +20.90   5.77     37   +6.00 1 1 1 1 1   888    0 17.06 111.38 ----- 5.8 5.8 115.4 8.8 30.3 -25.7 29.0 -25.2 28.4 -23.2 29.2 -24.9
2025-12-24T10:55:48.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:55:48.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:55:48.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.371598
2025-12-24T10:55:48.987 [DEBUG] [Thread-300851] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:55:48.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:55:49.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:55:49.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:55:49.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:55:49.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:55:49.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:55:43', tmtdew=15.95, humidity=35.09, cloud=0.0, wind=6.79, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:55:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:55:49.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:55:49.114 [DEBUG] [Thread-300854] [transport.py] [_log()] starting thread (client mode): 0xf57a8c40
2025-12-24T10:55:49.114 [DEBUG] [Thread-300854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:55:49.129 [DEBUG] [Thread-300854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:55:49.129 [INFO] [Thread-300854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:55:49.137 [DEBUG] [Thread-300854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:55:49.137 [DEBUG] [Thread-300854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:55:49.137 [DEBUG] [Thread-300854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:55:49.137 [DEBUG] [Thread-300854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:55:49.137 [DEBUG] [Thread-300854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] client lang: <none>
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] server lang: <none>
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] kex follows: False
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:55:49.138 [DEBUG] [Thread-300854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:55:49.139 [DEBUG] [Thread-300854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:55:49.139 [DEBUG] [Thread-300854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:55:49.139 [DEBUG] [Thread-300854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:55:49.139 [DEBUG] [Thread-300854] [transport.py] [_log()] Compression: none
2025-12-24T10:55:49.139 [DEBUG] [Thread-300854] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:55:49.195 [DEBUG] [Thread-300854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:55:49.196 [DEBUG] [Thread-300854] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:55:49.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:55:49.197 [DEBUG] [Thread-300854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:55:49.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:55:49.261 [DEBUG] [Thread-300854] [transport.py] [_log()] userauth is OK
2025-12-24T10:55:49.261 [DEBUG] [Thread-300854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:55:49.261 [DEBUG] [Thread-300854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:55:49.262 [DEBUG] [Thread-300854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:55:49.262 [DEBUG] [Thread-300854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:55:49.286 [INFO] [Thread-300854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:55:49.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:55:49.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:55:50.163 [DEBUG] [Thread-300854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:55:50.164 [DEBUG] [Thread-300854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:55:50.211 [DEBUG] [Thread-300854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:55:50.212 [DEBUG] [Thread-300854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:55:50.221 [DEBUG] [Thread-300854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:55:50.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:55:50.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:55:50.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:55:50.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:55:50.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:55:50.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:55:50.263 [DEBUG] [Thread-300854] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:55:53.593 [DEBUG] [Thread-300856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:56:08.728 [DEBUG] [Thread-300857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:56:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:56:20.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:56:20.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:56:21.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 56, 16), 16.11, 34.76, 0.0, 6.34, 20.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:56:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:56:16
2025-12-24T10:56:21.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:56:21.488 [DEBUG] [Thread-300858] [transport.py] [_log()] starting thread (client mode): 0xf57abd30
2025-12-24T10:56:21.489 [DEBUG] [Thread-300858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:56:21.502 [DEBUG] [Thread-300858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:56:21.502 [INFO] [Thread-300858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] client lang: <none>
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] server lang: <none>
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] kex follows: False
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] Compression: none
2025-12-24T10:56:21.506 [DEBUG] [Thread-300858] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:56:21.534 [DEBUG] [Thread-300858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:56:21.536 [DEBUG] [Thread-300858] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:56:21.537 [DEBUG] [Thread-300858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:56:21.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:56:21.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:56:21.576 [DEBUG] [Thread-300858] [transport.py] [_log()] userauth is OK
2025-12-24T10:56:21.576 [DEBUG] [Thread-300858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:56:21.577 [DEBUG] [Thread-300858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:56:21.577 [DEBUG] [Thread-300858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:56:21.577 [DEBUG] [Thread-300858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:56:21.606 [INFO] [Thread-300858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:56:21.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:56:22.251 [DEBUG] [Thread-300858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:56:22.251 [DEBUG] [Thread-300858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:56:22.251 [DEBUG] [Thread-300858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:56:22.292 [DEBUG] [Thread-300858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:56:22.292 [DEBUG] [Thread-300858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:56:22.294 [DEBUG] [Thread-300858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:56:22.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:56:22.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:56:22.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:56:22.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:56:22.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:56:22.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:56:22.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:56:22.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:56:22.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:56:22.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.371945 -999.00  +20.70   5.87     38   +6.10 1 1 1 1 1   888    0 16.86 111.87 ----- 5.9 5.9 146.8 9.0 30.4 -25.7 29.3 -25.4 28.5 -24.4 29.3 -25.2
2025-12-24T10:56:22.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:56:22.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:56:22.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.371945
2025-12-24T10:56:22.324 [DEBUG] [Thread-300858] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:56:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:56:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:56:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:56:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:56:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:56:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:56:16', tmtdew=16.11, humidity=34.76, cloud=0.0, wind=6.34, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:55:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:56:22.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:56:22.420 [DEBUG] [Thread-300861] [transport.py] [_log()] starting thread (client mode): 0xfabc5b40
2025-12-24T10:56:22.421 [DEBUG] [Thread-300861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:56:22.434 [DEBUG] [Thread-300861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:56:22.435 [INFO] [Thread-300861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] client lang: <none>
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] server lang: <none>
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] kex follows: False
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:56:22.442 [DEBUG] [Thread-300861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:56:22.443 [DEBUG] [Thread-300861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:56:22.443 [DEBUG] [Thread-300861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:56:22.443 [DEBUG] [Thread-300861] [transport.py] [_log()] Compression: none
2025-12-24T10:56:22.443 [DEBUG] [Thread-300861] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:56:22.500 [DEBUG] [Thread-300861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:56:22.500 [DEBUG] [Thread-300861] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:56:22.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:56:22.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:56:22.501 [DEBUG] [Thread-300861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:56:22.558 [DEBUG] [Thread-300861] [transport.py] [_log()] userauth is OK
2025-12-24T10:56:22.558 [DEBUG] [Thread-300861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:56:22.558 [DEBUG] [Thread-300861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:56:22.558 [DEBUG] [Thread-300861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:56:22.558 [DEBUG] [Thread-300861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:56:22.575 [INFO] [Thread-300861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:56:22.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:56:22.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:56:23.380 [DEBUG] [Thread-300861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:56:23.380 [DEBUG] [Thread-300861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:56:23.431 [DEBUG] [Thread-300861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:56:23.431 [DEBUG] [Thread-300861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:56:23.439 [DEBUG] [Thread-300861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:56:23.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:56:23.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:56:23.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:56:23.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:56:23.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:56:23.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:56:23.472 [DEBUG] [Thread-300861] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:56:23.790 [DEBUG] [Thread-300863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:56:38.898 [DEBUG] [Thread-300864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:56:40.907 [DEBUG] [Thread-300865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:56:43.552 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:56:43.554 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:56:53.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:56:53.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:56:53.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:56:53.947 [DEBUG] [Thread-300866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:56:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 56, 49), 16.14, 34.6, 0.0, 4.85, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:56:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:56:49
2025-12-24T10:56:54.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:56:54.736 [DEBUG] [Thread-300867] [transport.py] [_log()] starting thread (client mode): 0xf5796890
2025-12-24T10:56:54.737 [DEBUG] [Thread-300867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:56:54.744 [DEBUG] [Thread-300867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:56:54.744 [INFO] [Thread-300867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:56:54.749 [DEBUG] [Thread-300867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] client lang: <none>
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] server lang: <none>
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] kex follows: False
2025-12-24T10:56:54.750 [DEBUG] [Thread-300867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:56:54.751 [DEBUG] [Thread-300867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:56:54.751 [DEBUG] [Thread-300867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:56:54.751 [DEBUG] [Thread-300867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:56:54.751 [DEBUG] [Thread-300867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:56:54.751 [DEBUG] [Thread-300867] [transport.py] [_log()] Compression: none
2025-12-24T10:56:54.751 [DEBUG] [Thread-300867] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:56:54.789 [DEBUG] [Thread-300867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:56:54.794 [DEBUG] [Thread-300867] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:56:54.796 [DEBUG] [Thread-300867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:56:54.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:56:54.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:56:54.802 [DEBUG] [Thread-300867] [transport.py] [_log()] userauth is OK
2025-12-24T10:56:54.803 [DEBUG] [Thread-300867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:56:54.803 [DEBUG] [Thread-300867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:56:54.803 [DEBUG] [Thread-300867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:56:54.803 [DEBUG] [Thread-300867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:56:54.829 [INFO] [Thread-300867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:56:54.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:56:55.628 [DEBUG] [Thread-300867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:56:55.628 [DEBUG] [Thread-300867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:56:55.629 [DEBUG] [Thread-300867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:56:55.669 [DEBUG] [Thread-300867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:56:55.669 [DEBUG] [Thread-300867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:56:55.672 [DEBUG] [Thread-300867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:56:55.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:56:55.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:56:55.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:56:55.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:56:55.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:56:55.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:56:55.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:56:55.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:56:55.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:56:55.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.372293 -999.00  +20.70   4.38     38   +6.10 1 1 1 1 1   888    0 17.44 121.90 ----- 4.4 4.4 121.3 8.9 30.4 -26.0 29.4 -25.7 28.6 -24.1 29.4 -25.3
2025-12-24T10:56:55.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:56:55.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:56:55.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.372293
2025-12-24T10:56:55.711 [DEBUG] [Thread-300867] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:56:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:56:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:56:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:56:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:56:55.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:56:55.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:56:49', tmtdew=16.14, humidity=34.6, cloud=0.0, wind=4.85, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:56:06.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:56:55.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:56:55.814 [DEBUG] [Thread-300870] [transport.py] [_log()] starting thread (client mode): 0xf5703460
2025-12-24T10:56:55.814 [DEBUG] [Thread-300870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:56:55.834 [DEBUG] [Thread-300870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:56:55.834 [INFO] [Thread-300870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:56:55.842 [DEBUG] [Thread-300870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:56:55.842 [DEBUG] [Thread-300870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:56:55.842 [DEBUG] [Thread-300870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:56:55.842 [DEBUG] [Thread-300870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:56:55.842 [DEBUG] [Thread-300870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:56:55.842 [DEBUG] [Thread-300870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:56:55.843 [DEBUG] [Thread-300870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:56:55.843 [DEBUG] [Thread-300870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:56:55.843 [DEBUG] [Thread-300870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:56:55.843 [DEBUG] [Thread-300870] [transport.py] [_log()] client lang: <none>
2025-12-24T10:56:55.843 [DEBUG] [Thread-300870] [transport.py] [_log()] server lang: <none>
2025-12-24T10:56:55.843 [DEBUG] [Thread-300870] [transport.py] [_log()] kex follows: False
2025-12-24T10:56:55.843 [DEBUG] [Thread-300870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:56:55.843 [DEBUG] [Thread-300870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:56:55.844 [DEBUG] [Thread-300870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:56:55.844 [DEBUG] [Thread-300870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:56:55.844 [DEBUG] [Thread-300870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:56:55.844 [DEBUG] [Thread-300870] [transport.py] [_log()] Compression: none
2025-12-24T10:56:55.844 [DEBUG] [Thread-300870] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:56:55.907 [DEBUG] [Thread-300870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:56:55.908 [DEBUG] [Thread-300870] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:56:55.909 [DEBUG] [Thread-300870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:56:55.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:56:55.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:56:55.970 [DEBUG] [Thread-300870] [transport.py] [_log()] userauth is OK
2025-12-24T10:56:55.970 [DEBUG] [Thread-300870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:56:55.971 [DEBUG] [Thread-300870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:56:55.971 [DEBUG] [Thread-300870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:56:55.971 [DEBUG] [Thread-300870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:56:55.989 [INFO] [Thread-300870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:56:55.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:56:55.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:56:56.826 [DEBUG] [Thread-300870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:56:56.826 [DEBUG] [Thread-300870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:56:56.874 [DEBUG] [Thread-300870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:56:56.874 [DEBUG] [Thread-300870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:56:56.883 [DEBUG] [Thread-300870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:56:56.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:56:56.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:56:56.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:56:56.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:56:56.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:56:56.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:56:56.916 [DEBUG] [Thread-300870] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:57:08.998 [DEBUG] [Thread-300872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:57:24.100 [DEBUG] [Thread-300873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:57:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:57:26.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:57:26.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:57:27.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 57, 22), 16.09, 34.7, 0.0, 5.45, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:57:27.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:57:22
2025-12-24T10:57:28.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:57:28.182 [DEBUG] [Thread-300874] [transport.py] [_log()] starting thread (client mode): 0xf5700b20
2025-12-24T10:57:28.182 [DEBUG] [Thread-300874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:57:28.192 [DEBUG] [Thread-300874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:57:28.193 [INFO] [Thread-300874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:57:28.197 [DEBUG] [Thread-300874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:57:28.197 [DEBUG] [Thread-300874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:57:28.197 [DEBUG] [Thread-300874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:57:28.197 [DEBUG] [Thread-300874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] client lang: <none>
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] server lang: <none>
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] kex follows: False
2025-12-24T10:57:28.198 [DEBUG] [Thread-300874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:57:28.199 [DEBUG] [Thread-300874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:57:28.199 [DEBUG] [Thread-300874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:57:28.199 [DEBUG] [Thread-300874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:57:28.199 [DEBUG] [Thread-300874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:57:28.199 [DEBUG] [Thread-300874] [transport.py] [_log()] Compression: none
2025-12-24T10:57:28.199 [DEBUG] [Thread-300874] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:57:28.234 [DEBUG] [Thread-300874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:57:28.240 [DEBUG] [Thread-300874] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:57:28.243 [DEBUG] [Thread-300874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:57:28.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:57:28.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:57:28.247 [DEBUG] [Thread-300874] [transport.py] [_log()] userauth is OK
2025-12-24T10:57:28.248 [DEBUG] [Thread-300874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:57:28.248 [DEBUG] [Thread-300874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:57:28.248 [DEBUG] [Thread-300874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:57:28.248 [DEBUG] [Thread-300874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:57:28.287 [INFO] [Thread-300874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:57:28.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:57:28.941 [DEBUG] [Thread-300874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:57:28.942 [DEBUG] [Thread-300874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:57:28.943 [DEBUG] [Thread-300874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:57:28.982 [DEBUG] [Thread-300874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:57:28.982 [DEBUG] [Thread-300874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:57:28.986 [DEBUG] [Thread-300874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:57:28.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:57:29.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:57:29.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:57:29.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:57:29.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:57:29.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:57:29.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:57:29.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:57:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:57:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.372640 -999.00  +21.00   2.76     38   +6.40 1 1 1 1 1   888    0 17.60 131.73 ----- 2.8 2.8 352.3 4.3 30.5 -26.7 29.6 -25.8 28.7 -24.4 29.5 -25.5
2025-12-24T10:57:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:57:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:57:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.372640
2025-12-24T10:57:29.024 [DEBUG] [Thread-300874] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:57:29.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:57:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:57:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:57:29.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:57:29.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:57:29.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:57:22', tmtdew=16.09, humidity=34.7, cloud=0.0, wind=5.45, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:56:36.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:57:29.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:57:29.144 [DEBUG] [Thread-300877] [transport.py] [_log()] starting thread (client mode): 0xf57bfca0
2025-12-24T10:57:29.144 [DEBUG] [Thread-300877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:57:29.158 [DEBUG] [Thread-300877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:57:29.159 [INFO] [Thread-300877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:57:29.166 [DEBUG] [Thread-300877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:57:29.167 [DEBUG] [Thread-300877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:57:29.167 [DEBUG] [Thread-300877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:57:29.167 [DEBUG] [Thread-300877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:57:29.167 [DEBUG] [Thread-300877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:57:29.167 [DEBUG] [Thread-300877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:57:29.167 [DEBUG] [Thread-300877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] client lang: <none>
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] server lang: <none>
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] kex follows: False
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] Compression: none
2025-12-24T10:57:29.168 [DEBUG] [Thread-300877] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:57:29.226 [DEBUG] [Thread-300877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:57:29.227 [DEBUG] [Thread-300877] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:57:29.228 [DEBUG] [Thread-300877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:57:29.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:57:29.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:57:29.282 [DEBUG] [Thread-300877] [transport.py] [_log()] userauth is OK
2025-12-24T10:57:29.282 [DEBUG] [Thread-300877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:57:29.282 [DEBUG] [Thread-300877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:57:29.282 [DEBUG] [Thread-300877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:57:29.283 [DEBUG] [Thread-300877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:57:29.301 [INFO] [Thread-300877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:57:29.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:57:29.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:57:30.152 [DEBUG] [Thread-300877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:57:30.152 [DEBUG] [Thread-300877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:57:30.191 [DEBUG] [Thread-300877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:57:30.192 [DEBUG] [Thread-300877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:57:30.200 [DEBUG] [Thread-300877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:57:30.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:57:30.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:57: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') -> 00000000
2025-12-24T10:57:30.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:57:30.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:57:30.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:57:30.233 [DEBUG] [Thread-300877] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:57:39.155 [DEBUG] [Thread-300879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:57:41.177 [DEBUG] [Thread-300880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:57:43.703 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:57:43.704 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:57:54.262 [DEBUG] [Thread-300881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:58:00.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:58:00.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:58:00.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:58:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 57, 55), 15.93, 35.14, 0.0, 6.76, 20.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:58:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:57:55
2025-12-24T10:58:01.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:58:01.560 [DEBUG] [Thread-300882] [transport.py] [_log()] starting thread (client mode): 0xf57bec50
2025-12-24T10:58:01.560 [DEBUG] [Thread-300882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:58:01.573 [DEBUG] [Thread-300882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:58:01.573 [INFO] [Thread-300882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:58:01.579 [DEBUG] [Thread-300882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:58:01.580 [DEBUG] [Thread-300882] [transport.py] [_log()] client lang: <none>
2025-12-24T10:58:01.581 [DEBUG] [Thread-300882] [transport.py] [_log()] server lang: <none>
2025-12-24T10:58:01.581 [DEBUG] [Thread-300882] [transport.py] [_log()] kex follows: False
2025-12-24T10:58:01.581 [DEBUG] [Thread-300882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:58:01.582 [DEBUG] [Thread-300882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:58:01.582 [DEBUG] [Thread-300882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:58:01.582 [DEBUG] [Thread-300882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:58:01.582 [DEBUG] [Thread-300882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:58:01.582 [DEBUG] [Thread-300882] [transport.py] [_log()] Compression: none
2025-12-24T10:58:01.582 [DEBUG] [Thread-300882] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:58:01.611 [DEBUG] [Thread-300882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:58:01.616 [DEBUG] [Thread-300882] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:58:01.618 [DEBUG] [Thread-300882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:58:01.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:58:01.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:58:01.623 [DEBUG] [Thread-300882] [transport.py] [_log()] userauth is OK
2025-12-24T10:58:01.623 [DEBUG] [Thread-300882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:58:01.623 [DEBUG] [Thread-300882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:58:01.624 [DEBUG] [Thread-300882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:58:01.624 [DEBUG] [Thread-300882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:58:01.662 [INFO] [Thread-300882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:58:01.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:58:02.469 [DEBUG] [Thread-300882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:58:02.469 [DEBUG] [Thread-300882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:58:02.478 [DEBUG] [Thread-300882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:58:02.510 [DEBUG] [Thread-300882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:58:02.510 [DEBUG] [Thread-300882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:58:02.513 [DEBUG] [Thread-300882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:58:02.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:58:02.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:58:02.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:58:02.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:58:02.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:58:02.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:58:02.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:58:02.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:58:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:58:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.372987 -999.00  +21.20   3.33     38   +6.40 1 1 1 1 1   888    0 17.44 130.02 ----- 3.3 3.3 242.1 5.1 30.7 -26.3 29.7 -25.7 28.9 -23.6 29.6 -25.4
2025-12-24T10:58:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:58:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:58:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.372987
2025-12-24T10:58:02.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:58:02.547 [DEBUG] [Thread-300882] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:58:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:58:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:58:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:58:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:58:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:57:55', tmtdew=15.93, humidity=35.14, cloud=0.0, wind=6.76, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:57:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:58:02.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:58:02.643 [DEBUG] [Thread-300885] [transport.py] [_log()] starting thread (client mode): 0xf57aad70
2025-12-24T10:58:02.643 [DEBUG] [Thread-300885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:58:02.659 [DEBUG] [Thread-300885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:58:02.659 [INFO] [Thread-300885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] client lang: <none>
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] server lang: <none>
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] kex follows: False
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] Compression: none
2025-12-24T10:58:02.667 [DEBUG] [Thread-300885] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:58:02.731 [DEBUG] [Thread-300885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:58:02.731 [DEBUG] [Thread-300885] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:58:02.732 [DEBUG] [Thread-300885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:58:02.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:58:02.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:58:02.790 [DEBUG] [Thread-300885] [transport.py] [_log()] userauth is OK
2025-12-24T10:58:02.790 [DEBUG] [Thread-300885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:58:02.790 [DEBUG] [Thread-300885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:58:02.790 [DEBUG] [Thread-300885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:58:02.790 [DEBUG] [Thread-300885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:58:02.809 [INFO] [Thread-300885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:58:02.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:58:02.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:58:03.641 [DEBUG] [Thread-300885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:58:03.641 [DEBUG] [Thread-300885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:58:03.688 [DEBUG] [Thread-300885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:58:03.688 [DEBUG] [Thread-300885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:58:03.697 [DEBUG] [Thread-300885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:58:03.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:58: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')
2025-12-24T10:58:03.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:58:03.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:58:03.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:58:03.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:58:03.735 [DEBUG] [Thread-300885] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:58:09.318 [DEBUG] [Thread-300887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:58:24.402 [DEBUG] [Thread-300888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:58:33.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:58:33.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:58:33.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:58:34.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 58, 29), 15.98, 35.06, 0.0, 7.68, 20.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:58:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:58:29
2025-12-24T10:58:34.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:58:35.081 [DEBUG] [Thread-300889] [transport.py] [_log()] starting thread (client mode): 0xf57aacb0
2025-12-24T10:58:35.081 [DEBUG] [Thread-300889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:58:35.083 [DEBUG] [Thread-300889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:58:35.083 [INFO] [Thread-300889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] client lang: <none>
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] server lang: <none>
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] kex follows: False
2025-12-24T10:58:35.087 [DEBUG] [Thread-300889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:58:35.088 [DEBUG] [Thread-300889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:58:35.088 [DEBUG] [Thread-300889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:58:35.088 [DEBUG] [Thread-300889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:58:35.088 [DEBUG] [Thread-300889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:58:35.088 [DEBUG] [Thread-300889] [transport.py] [_log()] Compression: none
2025-12-24T10:58:35.088 [DEBUG] [Thread-300889] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:58:35.122 [DEBUG] [Thread-300889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:58:35.125 [DEBUG] [Thread-300889] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:58:35.127 [DEBUG] [Thread-300889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:58:35.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:58:35.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:58:35.131 [DEBUG] [Thread-300889] [transport.py] [_log()] userauth is OK
2025-12-24T10:58:35.131 [DEBUG] [Thread-300889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:58:35.131 [DEBUG] [Thread-300889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:58:35.131 [DEBUG] [Thread-300889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:58:35.132 [DEBUG] [Thread-300889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:58:35.173 [INFO] [Thread-300889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:58:35.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:58:35.839 [DEBUG] [Thread-300889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:58:35.839 [DEBUG] [Thread-300889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:58:35.840 [DEBUG] [Thread-300889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:58:35.880 [DEBUG] [Thread-300889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:58:35.880 [DEBUG] [Thread-300889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:58:35.884 [DEBUG] [Thread-300889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:58:35.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:58:35.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:58:35.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:58:35.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:58:35.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:58:35.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:58:35.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:58:35.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:58:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:58:35.912 [DEBUG] [Thread-300889] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:58:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.373682 -999.00  +21.50   3.23     38   +6.60 1 1 1 1 1   888    0 17.61 128.68 ----- 3.2 3.2 190.5 4.8 31.1 -26.0 30.0 -26.3 29.1 -23.9 29.8 -25.3
2025-12-24T10:58:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:58:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:58:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.373682
2025-12-24T10:58:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:58:35.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:58:35.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:58:35.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:58:35.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:58:35.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:58:29', tmtdew=15.98, humidity=35.06, cloud=0.0, wind=7.68, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:58:06.125', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:58:36.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:58:36.033 [DEBUG] [Thread-300892] [transport.py] [_log()] starting thread (client mode): 0xf57a8490
2025-12-24T10:58:36.033 [DEBUG] [Thread-300892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:58:36.048 [DEBUG] [Thread-300892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:58:36.048 [INFO] [Thread-300892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] client lang: <none>
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] server lang: <none>
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] kex follows: False
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:58:36.056 [DEBUG] [Thread-300892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:58:36.057 [DEBUG] [Thread-300892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:58:36.057 [DEBUG] [Thread-300892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:58:36.057 [DEBUG] [Thread-300892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:58:36.057 [DEBUG] [Thread-300892] [transport.py] [_log()] Compression: none
2025-12-24T10:58:36.057 [DEBUG] [Thread-300892] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:58:36.114 [DEBUG] [Thread-300892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:58:36.114 [DEBUG] [Thread-300892] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:58:36.115 [DEBUG] [Thread-300892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:58:36.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:58:36.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:58:36.170 [DEBUG] [Thread-300892] [transport.py] [_log()] userauth is OK
2025-12-24T10:58:36.170 [DEBUG] [Thread-300892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:58:36.170 [DEBUG] [Thread-300892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:58:36.170 [DEBUG] [Thread-300892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:58:36.170 [DEBUG] [Thread-300892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:58:36.189 [INFO] [Thread-300892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:58:36.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:58:36.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:58:37.036 [DEBUG] [Thread-300892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:58:37.036 [DEBUG] [Thread-300892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:58:37.075 [DEBUG] [Thread-300892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:58:37.075 [DEBUG] [Thread-300892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:58:37.084 [DEBUG] [Thread-300892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:58:37.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:58:37.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:58:37.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:58:37.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:58:37.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:58:37.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:58:37.118 [DEBUG] [Thread-300892] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:58:39.459 [DEBUG] [Thread-300894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:58:41.428 [DEBUG] [Thread-300895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:58:43.844 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:58:43.845 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:58:54.588 [DEBUG] [Thread-300896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:59:07.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:59:07.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:59:07.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:59:08.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 59, 1), 16.03, 34.95, 0.0, 6.92, 20.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:59:08.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:59:01
2025-12-24T10:59:08.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:59:08.523 [DEBUG] [Thread-300897] [transport.py] [_log()] starting thread (client mode): 0xf57ab820
2025-12-24T10:59:08.523 [DEBUG] [Thread-300897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:59:08.536 [DEBUG] [Thread-300897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:59:08.536 [INFO] [Thread-300897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] client lang: <none>
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] server lang: <none>
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] kex follows: False
2025-12-24T10:59:08.542 [DEBUG] [Thread-300897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:59:08.543 [DEBUG] [Thread-300897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:59:08.543 [DEBUG] [Thread-300897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:59:08.543 [DEBUG] [Thread-300897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:59:08.543 [DEBUG] [Thread-300897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:59:08.543 [DEBUG] [Thread-300897] [transport.py] [_log()] Compression: none
2025-12-24T10:59:08.543 [DEBUG] [Thread-300897] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:59:08.577 [DEBUG] [Thread-300897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:59:08.581 [DEBUG] [Thread-300897] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:59:08.583 [DEBUG] [Thread-300897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:59:08.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:59:08.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:59:08.588 [DEBUG] [Thread-300897] [transport.py] [_log()] userauth is OK
2025-12-24T10:59:08.588 [DEBUG] [Thread-300897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:59:08.588 [DEBUG] [Thread-300897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:59:08.589 [DEBUG] [Thread-300897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:59:08.589 [DEBUG] [Thread-300897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:59:08.616 [INFO] [Thread-300897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:59:08.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:59:09.414 [DEBUG] [Thread-300897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:59:09.414 [DEBUG] [Thread-300897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:59:09.415 [DEBUG] [Thread-300897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:59:09.457 [DEBUG] [Thread-300897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:59:09.457 [DEBUG] [Thread-300897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:59:09.459 [DEBUG] [Thread-300897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:59:09.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:59:09.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:59:09.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:59:09.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:59:09.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:59:09.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:59:09.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:59:09.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:59:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:59:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.374029 -999.00  +21.80   5.14     37   +6.60 1 1 1 1 1   888    0 17.76 138.86 ----- 5.1 5.1 192.4 13.5 31.0 -27.2 30.1 -25.7 29.1 -24.7 29.8 -25.6
2025-12-24T10:59:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:59:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:59:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.374029
2025-12-24T10:59:09.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:59:09.495 [DEBUG] [Thread-300897] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:59:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:59:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:59:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:59:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:59:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:59:01', tmtdew=16.03, humidity=34.95, cloud=0.0, wind=6.92, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:58:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:59:09.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:59:09.588 [DEBUG] [Thread-300900] [transport.py] [_log()] starting thread (client mode): 0xf57bc0d0
2025-12-24T10:59:09.588 [DEBUG] [Thread-300900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:59:09.604 [DEBUG] [Thread-300900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:59:09.604 [INFO] [Thread-300900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:59:09.611 [DEBUG] [Thread-300900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] client lang: <none>
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] server lang: <none>
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] kex follows: False
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] Compression: none
2025-12-24T10:59:09.612 [DEBUG] [Thread-300900] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:59:09.643 [DEBUG] [Thread-300902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:59:09.668 [DEBUG] [Thread-300900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:59:09.668 [DEBUG] [Thread-300900] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:59:09.668 [DEBUG] [Thread-300900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:59:09.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:59:09.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:59:09.725 [DEBUG] [Thread-300900] [transport.py] [_log()] userauth is OK
2025-12-24T10:59:09.725 [DEBUG] [Thread-300900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:59:09.725 [DEBUG] [Thread-300900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:59:09.725 [DEBUG] [Thread-300900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:59:09.725 [DEBUG] [Thread-300900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:59:09.739 [INFO] [Thread-300900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:59:09.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:59:09.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:59:10.587 [DEBUG] [Thread-300900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:59:10.587 [DEBUG] [Thread-300900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:59:10.635 [DEBUG] [Thread-300900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:59:10.636 [DEBUG] [Thread-300900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:59:10.644 [DEBUG] [Thread-300900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:59:10.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:59:10.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T10:59:10.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:59:10.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:59:10.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:59:10.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:59:10.679 [DEBUG] [Thread-300900] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:59:24.855 [DEBUG] [Thread-300903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:59:39.963 [DEBUG] [Thread-300904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:59:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T10:59:40.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T10:59:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T10:59:41.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 10, 59, 35), 16.16, 34.38, 0.0, 6.58, 20.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T10:59:41.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 10:59:35
2025-12-24T10:59:41.682 [DEBUG] [Thread-300905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:59:41.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T10:59:41.986 [DEBUG] [Thread-300906] [transport.py] [_log()] starting thread (client mode): 0xf57947c0
2025-12-24T10:59:41.986 [DEBUG] [Thread-300906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:59:42.001 [DEBUG] [Thread-300906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T10:59:42.001 [INFO] [Thread-300906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] client lang: <none>
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] server lang: <none>
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] kex follows: False
2025-12-24T10:59:42.006 [DEBUG] [Thread-300906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:59:42.007 [DEBUG] [Thread-300906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:59:42.007 [DEBUG] [Thread-300906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:59:42.007 [DEBUG] [Thread-300906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:59:42.007 [DEBUG] [Thread-300906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:59:42.007 [DEBUG] [Thread-300906] [transport.py] [_log()] Compression: none
2025-12-24T10:59:42.007 [DEBUG] [Thread-300906] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:59:42.042 [DEBUG] [Thread-300906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:59:42.047 [DEBUG] [Thread-300906] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:59:42.049 [DEBUG] [Thread-300906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T10:59:42.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T10:59:42.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:59:42.054 [DEBUG] [Thread-300906] [transport.py] [_log()] userauth is OK
2025-12-24T10:59:42.054 [DEBUG] [Thread-300906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:59:42.054 [DEBUG] [Thread-300906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:59:42.054 [DEBUG] [Thread-300906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T10:59:42.054 [DEBUG] [Thread-300906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:59:42.082 [INFO] [Thread-300906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:59:42.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:59:42.718 [DEBUG] [Thread-300906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:59:42.718 [DEBUG] [Thread-300906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:59:42.719 [DEBUG] [Thread-300906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T10:59:42.760 [DEBUG] [Thread-300906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:59:42.760 [DEBUG] [Thread-300906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:59:42.763 [DEBUG] [Thread-300906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:59:42.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:59:42.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T10:59:42.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T10:59:42.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T10:59:42.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:59:42.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T10:59:42.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:59:42.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:59:42.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T10:59:42.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.374376 -999.00  +22.10   7.26     36   +6.60 1 1 1 1 1   888    0 18.10 148.62 ----- 7.3 7.3 185.0 9.6 31.0 -27.4 29.8 -30.8 29.1 -24.2 29.8 -26.7
2025-12-24T10:59:42.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T10:59:42.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T10:59:42.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.374376
2025-12-24T10:59:42.800 [DEBUG] [Thread-300906] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:59:42.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T10:59:42.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T10:59:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T10:59:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T10:59:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T10:59:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T10:59:35', tmtdew=16.16, humidity=34.38, cloud=0.0, wind=6.58, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:59:06.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T10:59:42.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T10:59:42.919 [DEBUG] [Thread-300909] [transport.py] [_log()] starting thread (client mode): 0xf5700790
2025-12-24T10:59:42.919 [DEBUG] [Thread-300909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T10:59:42.934 [DEBUG] [Thread-300909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T10:59:42.934 [INFO] [Thread-300909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T10:59:42.941 [DEBUG] [Thread-300909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T10:59:42.941 [DEBUG] [Thread-300909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] client lang: <none>
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] server lang: <none>
2025-12-24T10:59:42.942 [DEBUG] [Thread-300909] [transport.py] [_log()] kex follows: False
2025-12-24T10:59:42.943 [DEBUG] [Thread-300909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T10:59:42.943 [DEBUG] [Thread-300909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T10:59:42.943 [DEBUG] [Thread-300909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T10:59:42.943 [DEBUG] [Thread-300909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T10:59:42.943 [DEBUG] [Thread-300909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T10:59:42.943 [DEBUG] [Thread-300909] [transport.py] [_log()] Compression: none
2025-12-24T10:59:42.943 [DEBUG] [Thread-300909] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T10:59:43.002 [DEBUG] [Thread-300909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T10:59:43.003 [DEBUG] [Thread-300909] [transport.py] [_log()] Switch to new keys ...
2025-12-24T10:59:43.004 [DEBUG] [Thread-300909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T10:59:43.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T10:59:43.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T10:59:43.057 [DEBUG] [Thread-300909] [transport.py] [_log()] userauth is OK
2025-12-24T10:59:43.058 [DEBUG] [Thread-300909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T10:59:43.058 [DEBUG] [Thread-300909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T10:59:43.058 [DEBUG] [Thread-300909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T10:59:43.058 [DEBUG] [Thread-300909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T10:59:43.080 [INFO] [Thread-300909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T10:59:43.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T10:59:43.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T10:59:43.909 [DEBUG] [Thread-300909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T10:59:43.909 [DEBUG] [Thread-300909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T10:59:43.957 [DEBUG] [Thread-300909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T10:59:43.957 [DEBUG] [Thread-300909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T10:59:43.966 [DEBUG] [Thread-300909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T10:59:43.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T10:59: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')
2025-12-24T10:59:43.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T10:59:43.987 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:59:43.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T10:59:43.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T10:59:43.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T10:59:43.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T10:59:44.003 [DEBUG] [Thread-300909] [transport.py] [_log()] EOF in transport thread
2025-12-24T10:59:55.024 [DEBUG] [Thread-300911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:00:10.167 [DEBUG] [Thread-300912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:00:14.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:00:14.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:00:14.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:00:14.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 0, 8), 16.2, 34.3, 0.0, 3.42, 20.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:00:14.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:00:08
2025-12-24T11:00:15.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:00:15.279 [DEBUG] [Thread-300913] [transport.py] [_log()] starting thread (client mode): 0xf572d2a0
2025-12-24T11:00:15.280 [DEBUG] [Thread-300913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:00:15.293 [DEBUG] [Thread-300913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:00:15.293 [INFO] [Thread-300913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:00:15.298 [DEBUG] [Thread-300913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:00:15.298 [DEBUG] [Thread-300913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:00:15.298 [DEBUG] [Thread-300913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:00:15.298 [DEBUG] [Thread-300913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:00:15.298 [DEBUG] [Thread-300913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:00:15.298 [DEBUG] [Thread-300913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:00:15.298 [DEBUG] [Thread-300913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:00:15.299 [DEBUG] [Thread-300913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:00:15.299 [DEBUG] [Thread-300913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:00:15.299 [DEBUG] [Thread-300913] [transport.py] [_log()] client lang: <none>
2025-12-24T11:00:15.299 [DEBUG] [Thread-300913] [transport.py] [_log()] server lang: <none>
2025-12-24T11:00:15.299 [DEBUG] [Thread-300913] [transport.py] [_log()] kex follows: False
2025-12-24T11:00:15.299 [DEBUG] [Thread-300913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:00:15.299 [DEBUG] [Thread-300913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:00:15.299 [DEBUG] [Thread-300913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:00:15.300 [DEBUG] [Thread-300913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:00:15.300 [DEBUG] [Thread-300913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:00:15.300 [DEBUG] [Thread-300913] [transport.py] [_log()] Compression: none
2025-12-24T11:00:15.300 [DEBUG] [Thread-300913] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:00:15.336 [DEBUG] [Thread-300913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:00:15.342 [DEBUG] [Thread-300913] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:00:15.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:00:15.346 [DEBUG] [Thread-300913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:00:15.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:00:15.349 [DEBUG] [Thread-300913] [transport.py] [_log()] userauth is OK
2025-12-24T11:00:15.350 [DEBUG] [Thread-300913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:00:15.350 [DEBUG] [Thread-300913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:00:15.350 [DEBUG] [Thread-300913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:00:15.350 [DEBUG] [Thread-300913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:00:15.389 [INFO] [Thread-300913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:00:15.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:00:15.993 [DEBUG] [Thread-300913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:00:15.993 [DEBUG] [Thread-300913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:00:15.994 [DEBUG] [Thread-300913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:00:16.034 [DEBUG] [Thread-300913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:00:16.034 [DEBUG] [Thread-300913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:00:16.037 [DEBUG] [Thread-300913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:00:16.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:00:16.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:00:16.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:00:16.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:00:16.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:00:16.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:00:16.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:00:16.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:00:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:00:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.374723 -999.00  +22.20   8.99     36   +6.40 1 1 1 1 1   888    0 18.60 157.17 ----- 9.0 9.0 194.6 12.1 30.9 -27.2 29.7 -27.9 29.0 -25.3 29.8 -26.3
2025-12-24T11:00:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:00:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:00:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.374723
2025-12-24T11:00:16.068 [DEBUG] [Thread-300913] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:00:16.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:00:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:00:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:00:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:00:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:00:16.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:00:08', tmtdew=16.2, humidity=34.3, cloud=0.0, wind=3.42, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T08:59:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:00:16.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:00:16.164 [DEBUG] [Thread-300916] [transport.py] [_log()] starting thread (client mode): 0xf57bc0a0
2025-12-24T11:00:16.164 [DEBUG] [Thread-300916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:00:16.181 [DEBUG] [Thread-300916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:00:16.181 [INFO] [Thread-300916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] client lang: <none>
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] server lang: <none>
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] kex follows: False
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] Compression: none
2025-12-24T11:00:16.189 [DEBUG] [Thread-300916] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:00:16.245 [DEBUG] [Thread-300916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:00:16.246 [DEBUG] [Thread-300916] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:00:16.246 [DEBUG] [Thread-300916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:00:16.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:00:16.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:00:16.302 [DEBUG] [Thread-300916] [transport.py] [_log()] userauth is OK
2025-12-24T11:00:16.302 [DEBUG] [Thread-300916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:00:16.302 [DEBUG] [Thread-300916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:00:16.302 [DEBUG] [Thread-300916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:00:16.303 [DEBUG] [Thread-300916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:00:16.321 [INFO] [Thread-300916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:00:16.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:00:16.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:00:17.194 [DEBUG] [Thread-300916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:00:17.195 [DEBUG] [Thread-300916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:00:17.242 [DEBUG] [Thread-300916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:00:17.242 [DEBUG] [Thread-300916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:00:17.251 [DEBUG] [Thread-300916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:00:17.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:00:17.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:00:17.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:00:17.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:00:17.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:00:17.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:00:17.289 [DEBUG] [Thread-300916] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:00:25.246 [DEBUG] [Thread-300918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:00:40.341 [DEBUG] [Thread-300919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:00:41.940 [DEBUG] [Thread-300920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:00:44.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:00:44.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:00:47.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:00:47.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:00:47.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:00:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 0, 41), 16.09, 34.51, 0.0, 3.85, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:00:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:00:41
2025-12-24T11:00:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:00:48.688 [DEBUG] [Thread-300921] [transport.py] [_log()] starting thread (client mode): 0xf572d210
2025-12-24T11:00:48.689 [DEBUG] [Thread-300921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:00:48.700 [DEBUG] [Thread-300921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:00:48.701 [INFO] [Thread-300921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:00:48.707 [DEBUG] [Thread-300921] [transport.py] [_log()] client lang: <none>
2025-12-24T11:00:48.708 [DEBUG] [Thread-300921] [transport.py] [_log()] server lang: <none>
2025-12-24T11:00:48.708 [DEBUG] [Thread-300921] [transport.py] [_log()] kex follows: False
2025-12-24T11:00:48.708 [DEBUG] [Thread-300921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:00:48.709 [DEBUG] [Thread-300921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:00:48.709 [DEBUG] [Thread-300921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:00:48.709 [DEBUG] [Thread-300921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:00:48.709 [DEBUG] [Thread-300921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:00:48.709 [DEBUG] [Thread-300921] [transport.py] [_log()] Compression: none
2025-12-24T11:00:48.709 [DEBUG] [Thread-300921] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:00:48.742 [DEBUG] [Thread-300921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:00:48.746 [DEBUG] [Thread-300921] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:00:48.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:00:48.749 [DEBUG] [Thread-300921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:00:48.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:00:48.753 [DEBUG] [Thread-300921] [transport.py] [_log()] userauth is OK
2025-12-24T11:00:48.753 [DEBUG] [Thread-300921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:00:48.753 [DEBUG] [Thread-300921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:00:48.754 [DEBUG] [Thread-300921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:00:48.754 [DEBUG] [Thread-300921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:00:48.794 [INFO] [Thread-300921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:00:48.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:00:49.426 [DEBUG] [Thread-300921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:00:49.426 [DEBUG] [Thread-300921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:00:49.427 [DEBUG] [Thread-300921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:00:49.467 [DEBUG] [Thread-300921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:00:49.467 [DEBUG] [Thread-300921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:00:49.470 [DEBUG] [Thread-300921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:00:49.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:00:49.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:00:49.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:00:49.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:00:49.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:00:49.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:00:49.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:00:49.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:00:49.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:00:49.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.375070 -999.00  +22.10   2.69     36   +6.50 1 1 1 1 1   888    0 18.55 158.21 ----- 2.7 2.7 158.9 10.0 30.9 -26.6 29.6 -31.8 29.0 -24.5 29.8 -26.4
2025-12-24T11:00:49.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:00:49.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:00:49.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.375070
2025-12-24T11:00:49.497 [DEBUG] [Thread-300921] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:00:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:00:49.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:00:49.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:00:49.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:00:49.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:00:49.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:00:41', tmtdew=16.09, humidity=34.51, cloud=0.0, wind=3.85, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:00:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:00:49.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:00:49.597 [DEBUG] [Thread-300924] [transport.py] [_log()] starting thread (client mode): 0xf57a8550
2025-12-24T11:00:49.598 [DEBUG] [Thread-300924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:00:49.612 [DEBUG] [Thread-300924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:00:49.612 [INFO] [Thread-300924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] client lang: <none>
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] server lang: <none>
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] kex follows: False
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] Compression: none
2025-12-24T11:00:49.620 [DEBUG] [Thread-300924] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:00:49.678 [DEBUG] [Thread-300924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:00:49.679 [DEBUG] [Thread-300924] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:00:49.680 [DEBUG] [Thread-300924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:00:49.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:00:49.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:00:49.734 [DEBUG] [Thread-300924] [transport.py] [_log()] userauth is OK
2025-12-24T11:00:49.734 [DEBUG] [Thread-300924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:00:49.734 [DEBUG] [Thread-300924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:00:49.734 [DEBUG] [Thread-300924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:00:49.735 [DEBUG] [Thread-300924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:00:49.753 [INFO] [Thread-300924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:00:49.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:00:49.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:00:50.618 [DEBUG] [Thread-300924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:00:50.618 [DEBUG] [Thread-300924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:00:50.666 [DEBUG] [Thread-300924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:00:50.666 [DEBUG] [Thread-300924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:00:50.674 [DEBUG] [Thread-300924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:00:50.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:00:50.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:00:50.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:00:50.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:00:50.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:00:50.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:00:50.708 [DEBUG] [Thread-300924] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:00:55.384 [DEBUG] [Thread-300926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:01:10.519 [DEBUG] [Thread-300927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:01:20.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:01:20.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:01:20.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:01:21.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 1, 14), 16.0, 34.69, 0.0, 3.83, 20.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:01:21.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:01:14
2025-12-24T11:01:21.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:01:21.915 [DEBUG] [Thread-300928] [transport.py] [_log()] starting thread (client mode): 0xf574d2d0
2025-12-24T11:01:21.916 [DEBUG] [Thread-300928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:01:21.916 [DEBUG] [Thread-300928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:01:21.916 [INFO] [Thread-300928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:01:21.919 [DEBUG] [Thread-300928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] client lang: <none>
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] server lang: <none>
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] kex follows: False
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:01:21.920 [DEBUG] [Thread-300928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:01:21.921 [DEBUG] [Thread-300928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:01:21.921 [DEBUG] [Thread-300928] [transport.py] [_log()] Compression: none
2025-12-24T11:01:21.921 [DEBUG] [Thread-300928] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:01:21.941 [DEBUG] [Thread-300928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:01:21.943 [DEBUG] [Thread-300928] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:01:21.944 [DEBUG] [Thread-300928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:01:21.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:01:21.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:01:21.947 [DEBUG] [Thread-300928] [transport.py] [_log()] userauth is OK
2025-12-24T11:01:21.947 [DEBUG] [Thread-300928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:01:21.947 [DEBUG] [Thread-300928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:01:21.947 [DEBUG] [Thread-300928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:01:21.947 [DEBUG] [Thread-300928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:01:21.959 [INFO] [Thread-300928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:01:21.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:01:22.600 [DEBUG] [Thread-300928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:01:22.601 [DEBUG] [Thread-300928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:01:22.602 [DEBUG] [Thread-300928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:01:22.642 [DEBUG] [Thread-300928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:01:22.642 [DEBUG] [Thread-300928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:01:22.644 [DEBUG] [Thread-300928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:01:22.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:01:22.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:01:22.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:01:22.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:01:22.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:01:22.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:01:22.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:01:22.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:01:22.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:01:22.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.375418 -999.00  +21.90   3.47     36   +6.30 1 1 1 1 1   888    0 18.47 153.23 ----- 3.5 3.5 201.5 10.4 30.9 -27.0 29.8 -26.4 28.9 -25.4 29.8 -25.3
2025-12-24T11:01:22.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:01:22.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:01:22.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.375418
2025-12-24T11:01:22.673 [DEBUG] [Thread-300928] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:01:22.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:01:22.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:01:22.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:01:22.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:01:22.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:01:22.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:01:14', tmtdew=16.0, humidity=34.69, cloud=0.0, wind=3.83, temperature=20.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:00:36.115', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:01:22.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:01:22.781 [DEBUG] [Thread-300931] [transport.py] [_log()] starting thread (client mode): 0xf574ee60
2025-12-24T11:01:22.781 [DEBUG] [Thread-300931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:01:22.796 [DEBUG] [Thread-300931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:01:22.796 [INFO] [Thread-300931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] client lang: <none>
2025-12-24T11:01:22.804 [DEBUG] [Thread-300931] [transport.py] [_log()] server lang: <none>
2025-12-24T11:01:22.805 [DEBUG] [Thread-300931] [transport.py] [_log()] kex follows: False
2025-12-24T11:01:22.805 [DEBUG] [Thread-300931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:01:22.805 [DEBUG] [Thread-300931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:01:22.805 [DEBUG] [Thread-300931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:01:22.805 [DEBUG] [Thread-300931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:01:22.805 [DEBUG] [Thread-300931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:01:22.805 [DEBUG] [Thread-300931] [transport.py] [_log()] Compression: none
2025-12-24T11:01:22.805 [DEBUG] [Thread-300931] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:01:22.860 [DEBUG] [Thread-300931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:01:22.860 [DEBUG] [Thread-300931] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:01:22.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:01:22.860 [DEBUG] [Thread-300931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:01:22.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:01:22.917 [DEBUG] [Thread-300931] [transport.py] [_log()] userauth is OK
2025-12-24T11:01:22.918 [DEBUG] [Thread-300931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:01:22.918 [DEBUG] [Thread-300931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:01:22.918 [DEBUG] [Thread-300931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:01:22.918 [DEBUG] [Thread-300931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:01:22.931 [INFO] [Thread-300931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:01:22.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:01:22.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:01:23.836 [DEBUG] [Thread-300931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:01:23.836 [DEBUG] [Thread-300931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:01:23.836 [DEBUG] [Thread-300931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:01:23.836 [DEBUG] [Thread-300931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:01:23.845 [DEBUG] [Thread-300931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:01:23.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:01:23.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:01:23.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:01:23.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:01:23.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:01:23.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:01:23.878 [DEBUG] [Thread-300931] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:01:25.575 [DEBUG] [Thread-300933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:01:40.645 [DEBUG] [Thread-300934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:01:42.259 [DEBUG] [Thread-300935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:01:44.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:01:44.277 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:01:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:01:53.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:01:53.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:01:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 1, 47), 15.93, 34.86, 0.0, 3.53, 20.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:01:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:01:47
2025-12-24T11:01:54.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:01:55.085 [DEBUG] [Thread-300936] [transport.py] [_log()] starting thread (client mode): 0xf57a98a0
2025-12-24T11:01:55.085 [DEBUG] [Thread-300936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:01:55.104 [DEBUG] [Thread-300936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:01:55.104 [INFO] [Thread-300936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] client lang: <none>
2025-12-24T11:01:55.107 [DEBUG] [Thread-300936] [transport.py] [_log()] server lang: <none>
2025-12-24T11:01:55.108 [DEBUG] [Thread-300936] [transport.py] [_log()] kex follows: False
2025-12-24T11:01:55.108 [DEBUG] [Thread-300936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:01:55.108 [DEBUG] [Thread-300936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:01:55.108 [DEBUG] [Thread-300936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:01:55.108 [DEBUG] [Thread-300936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:01:55.108 [DEBUG] [Thread-300936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:01:55.108 [DEBUG] [Thread-300936] [transport.py] [_log()] Compression: none
2025-12-24T11:01:55.108 [DEBUG] [Thread-300936] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:01:55.119 [DEBUG] [Thread-300936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:01:55.119 [DEBUG] [Thread-300936] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:01:55.120 [DEBUG] [Thread-300936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:01:55.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:01:55.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:01:55.161 [DEBUG] [Thread-300936] [transport.py] [_log()] userauth is OK
2025-12-24T11:01:55.162 [DEBUG] [Thread-300936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:01:55.162 [DEBUG] [Thread-300936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:01:55.162 [DEBUG] [Thread-300936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:01:55.162 [DEBUG] [Thread-300936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:01:55.183 [INFO] [Thread-300936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:01:55.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:01:55.677 [DEBUG] [Thread-300938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:01:55.803 [DEBUG] [Thread-300936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:01:55.803 [DEBUG] [Thread-300936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:01:55.804 [DEBUG] [Thread-300936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:01:55.845 [DEBUG] [Thread-300936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:01:55.846 [DEBUG] [Thread-300936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:01:55.848 [DEBUG] [Thread-300936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:01:55.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:01:55.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:01:55.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:01:55.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:01:55.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:01:55.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:01:55.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:01:55.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:01:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:01:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.375765 -999.00  +21.60   6.47     36   +6.30 1 1 1 1 1   888    0 18.78 152.12 ----- 6.5 6.5 353.6 8.4 31.0 -26.5 29.7 -25.7 29.0 -26.3 29.9 -25.5
2025-12-24T11:01:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:01:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:01:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.375765
2025-12-24T11:01:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:01:55.887 [DEBUG] [Thread-300936] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:01:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:01:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:01:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:01:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:01:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:01:47', tmtdew=15.93, humidity=34.86, cloud=0.0, wind=3.53, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:01:06.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:01:55.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:01:55.982 [DEBUG] [Thread-300940] [transport.py] [_log()] starting thread (client mode): 0xf574ea70
2025-12-24T11:01:55.982 [DEBUG] [Thread-300940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:01:55.996 [DEBUG] [Thread-300940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:01:55.997 [INFO] [Thread-300940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:01:56.004 [DEBUG] [Thread-300940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:01:56.004 [DEBUG] [Thread-300940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:01:56.004 [DEBUG] [Thread-300940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:01:56.004 [DEBUG] [Thread-300940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] client lang: <none>
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] server lang: <none>
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] kex follows: False
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] Compression: none
2025-12-24T11:01:56.005 [DEBUG] [Thread-300940] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:01:56.066 [DEBUG] [Thread-300940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:01:56.066 [DEBUG] [Thread-300940] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:01:56.067 [DEBUG] [Thread-300940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:01:56.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:01:56.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:01:56.122 [DEBUG] [Thread-300940] [transport.py] [_log()] userauth is OK
2025-12-24T11:01:56.122 [DEBUG] [Thread-300940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:01:56.122 [DEBUG] [Thread-300940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:01:56.122 [DEBUG] [Thread-300940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:01:56.122 [DEBUG] [Thread-300940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:01:56.141 [INFO] [Thread-300940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:01:56.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:01:56.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:01:57.020 [DEBUG] [Thread-300940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:01:57.020 [DEBUG] [Thread-300940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:01:57.068 [DEBUG] [Thread-300940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:01:57.068 [DEBUG] [Thread-300940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:01:57.076 [DEBUG] [Thread-300940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:01:57.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:01:57.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:01: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') -> 00000000
2025-12-24T11:01:57.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:01:57.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:01:57.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:01:57.107 [DEBUG] [Thread-300940] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:02:10.728 [DEBUG] [Thread-300942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:02:25.937 [DEBUG] [Thread-300943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:02:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:02:27.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:02:27.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
2025-12-24T11:02:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 2, 20), 16.02, 34.66, 0.0, 3.71, 20.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:02:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:02:20
2025-12-24T11:02:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:02:28.351 [DEBUG] [Thread-300944] [transport.py] [_log()] starting thread (client mode): 0xf572d960
2025-12-24T11:02:28.352 [DEBUG] [Thread-300944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:02:28.364 [DEBUG] [Thread-300944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:02:28.365 [INFO] [Thread-300944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:02:28.369 [DEBUG] [Thread-300944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] client lang: <none>
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] server lang: <none>
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] kex follows: False
2025-12-24T11:02:28.370 [DEBUG] [Thread-300944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:02:28.371 [DEBUG] [Thread-300944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:02:28.371 [DEBUG] [Thread-300944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:02:28.371 [DEBUG] [Thread-300944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:02:28.371 [DEBUG] [Thread-300944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:02:28.371 [DEBUG] [Thread-300944] [transport.py] [_log()] Compression: none
2025-12-24T11:02:28.371 [DEBUG] [Thread-300944] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:02:28.408 [DEBUG] [Thread-300944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:02:28.413 [DEBUG] [Thread-300944] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:02:28.415 [DEBUG] [Thread-300944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:02:28.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:02:28.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:02:28.421 [DEBUG] [Thread-300944] [transport.py] [_log()] userauth is OK
2025-12-24T11:02:28.421 [DEBUG] [Thread-300944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:02:28.421 [DEBUG] [Thread-300944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:02:28.421 [DEBUG] [Thread-300944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:02:28.421 [DEBUG] [Thread-300944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:02:28.449 [INFO] [Thread-300944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:02:28.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:02:29.097 [DEBUG] [Thread-300944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:02:29.098 [DEBUG] [Thread-300944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:02:29.108 [DEBUG] [Thread-300944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:02:29.138 [DEBUG] [Thread-300944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:02:29.139 [DEBUG] [Thread-300944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:02:29.142 [DEBUG] [Thread-300944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:02:29.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:02:29.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:02:29.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:02:29.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:02:29.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:02:29.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:02:29.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:02:29.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:02:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:02:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.376112 -999.00  +21.70   5.17     37   +6.40 1 1 1 1 1   888    0 18.34 141.32 ----- 5.2 5.2 139.2 9.0 31.1 -26.8 29.9 -25.3 29.1 -23.8 29.9 -25.1
2025-12-24T11:02:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:02:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:02:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.376112
2025-12-24T11:02:29.178 [DEBUG] [Thread-300944] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:02:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:02:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:02:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:02:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:02:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:02:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:02:20', tmtdew=16.02, humidity=34.66, cloud=0.0, wind=3.71, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:01:36.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:02:29.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:02:29.277 [DEBUG] [Thread-300947] [transport.py] [_log()] starting thread (client mode): 0xf572dc60
2025-12-24T11:02:29.277 [DEBUG] [Thread-300947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:02:29.292 [DEBUG] [Thread-300947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:02:29.292 [INFO] [Thread-300947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:02:29.300 [DEBUG] [Thread-300947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:02:29.300 [DEBUG] [Thread-300947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:02:29.300 [DEBUG] [Thread-300947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] client lang: <none>
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] server lang: <none>
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] kex follows: False
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:02:29.301 [DEBUG] [Thread-300947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:02:29.302 [DEBUG] [Thread-300947] [transport.py] [_log()] Compression: none
2025-12-24T11:02:29.302 [DEBUG] [Thread-300947] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:02:29.358 [DEBUG] [Thread-300947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:02:29.359 [DEBUG] [Thread-300947] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:02:29.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:02:29.360 [DEBUG] [Thread-300947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:02:29.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:02:29.414 [DEBUG] [Thread-300947] [transport.py] [_log()] userauth is OK
2025-12-24T11:02:29.415 [DEBUG] [Thread-300947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:02:29.415 [DEBUG] [Thread-300947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:02:29.415 [DEBUG] [Thread-300947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:02:29.415 [DEBUG] [Thread-300947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:02:29.434 [INFO] [Thread-300947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:02:29.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:02:29.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:02:30.291 [DEBUG] [Thread-300947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:02:30.291 [DEBUG] [Thread-300947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:02:30.330 [DEBUG] [Thread-300947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:02:30.330 [DEBUG] [Thread-300947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:02:30.339 [DEBUG] [Thread-300947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:02:30.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:02:30.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:02:30.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:02:30.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:02:30.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:02:30.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:02:30.371 [DEBUG] [Thread-300947] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:02:41.000 [DEBUG] [Thread-300949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:02:42.505 [DEBUG] [Thread-300950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:02:44.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:02:44.421 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:02:56.096 [DEBUG] [Thread-300951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:03:00.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:03:00.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:03:00.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
2025-12-24T11:03:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 2, 53), 16.16, 34.73, 0.0, 10.38, 20.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:03:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:02:53
2025-12-24T11:03:01.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:03:01.670 [DEBUG] [Thread-300952] [transport.py] [_log()] starting thread (client mode): 0xf57abcd0
2025-12-24T11:03:01.670 [DEBUG] [Thread-300952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:03:01.687 [DEBUG] [Thread-300952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:03:01.687 [INFO] [Thread-300952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:03:01.692 [DEBUG] [Thread-300952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] client lang: <none>
2025-12-24T11:03:01.693 [DEBUG] [Thread-300952] [transport.py] [_log()] server lang: <none>
2025-12-24T11:03:01.694 [DEBUG] [Thread-300952] [transport.py] [_log()] kex follows: False
2025-12-24T11:03:01.694 [DEBUG] [Thread-300952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:03:01.694 [DEBUG] [Thread-300952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:03:01.695 [DEBUG] [Thread-300952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:03:01.695 [DEBUG] [Thread-300952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:03:01.695 [DEBUG] [Thread-300952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:03:01.695 [DEBUG] [Thread-300952] [transport.py] [_log()] Compression: none
2025-12-24T11:03:01.695 [DEBUG] [Thread-300952] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:03:01.734 [DEBUG] [Thread-300952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:03:01.739 [DEBUG] [Thread-300952] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:03:01.741 [DEBUG] [Thread-300952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:03:01.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:03:01.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:03:01.746 [DEBUG] [Thread-300952] [transport.py] [_log()] userauth is OK
2025-12-24T11:03:01.746 [DEBUG] [Thread-300952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:03:01.747 [DEBUG] [Thread-300952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:03:01.747 [DEBUG] [Thread-300952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:03:01.747 [DEBUG] [Thread-300952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:03:01.774 [INFO] [Thread-300952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:03:01.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:03:02.440 [DEBUG] [Thread-300952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:03:02.440 [DEBUG] [Thread-300952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:03:02.441 [DEBUG] [Thread-300952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:03:02.482 [DEBUG] [Thread-300952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:03:02.482 [DEBUG] [Thread-300952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:03:02.485 [DEBUG] [Thread-300952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:03:02.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:03:02.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:03:02.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:03:02.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:03:02.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:03:02.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:03:02.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:03:02.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:03:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:03:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.376806 -999.00  +21.80  14.28     36   +6.30 1 1 1 1 1   888    0 18.62 146.96 ----- 14.3 14.3 110.2 20.7 30.9 -26.3 30.1 -26.4 29.1 -25.2 29.9 -25.1
2025-12-24T11:03:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:03:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:03:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.376806
2025-12-24T11:03:02.516 [DEBUG] [Thread-300952] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:03:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:03:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:03:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:03:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:03:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:03:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:02:53', tmtdew=16.16, humidity=34.73, cloud=0.0, wind=10.38, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:02:36.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:03:02.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:03:02.628 [DEBUG] [Thread-300955] [transport.py] [_log()] starting thread (client mode): 0xf572faf0
2025-12-24T11:03:02.628 [DEBUG] [Thread-300955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:03:02.642 [DEBUG] [Thread-300955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:03:02.642 [INFO] [Thread-300955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:03:02.650 [DEBUG] [Thread-300955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:03:02.651 [DEBUG] [Thread-300955] [transport.py] [_log()] client lang: <none>
2025-12-24T11:03:02.651 [DEBUG] [Thread-300955] [transport.py] [_log()] server lang: <none>
2025-12-24T11:03:02.651 [DEBUG] [Thread-300955] [transport.py] [_log()] kex follows: False
2025-12-24T11:03:02.651 [DEBUG] [Thread-300955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:03:02.651 [DEBUG] [Thread-300955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:03:02.651 [DEBUG] [Thread-300955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:03:02.651 [DEBUG] [Thread-300955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:03:02.652 [DEBUG] [Thread-300955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:03:02.652 [DEBUG] [Thread-300955] [transport.py] [_log()] Compression: none
2025-12-24T11:03:02.652 [DEBUG] [Thread-300955] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:03:02.709 [DEBUG] [Thread-300955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:03:02.710 [DEBUG] [Thread-300955] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:03:02.710 [DEBUG] [Thread-300955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:03:02.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:03:02.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:03:02.766 [DEBUG] [Thread-300955] [transport.py] [_log()] userauth is OK
2025-12-24T11:03:02.766 [DEBUG] [Thread-300955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:03:02.766 [DEBUG] [Thread-300955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:03:02.766 [DEBUG] [Thread-300955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:03:02.766 [DEBUG] [Thread-300955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:03:02.788 [INFO] [Thread-300955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:03:02.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:03:02.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:03:03.610 [DEBUG] [Thread-300955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:03:03.611 [DEBUG] [Thread-300955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:03:03.660 [DEBUG] [Thread-300955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:03:03.660 [DEBUG] [Thread-300955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:03:03.668 [DEBUG] [Thread-300955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:03:03.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:03: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')
2025-12-24T11:03:03.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:03:03.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:03:03.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:03:03.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:03:03.700 [DEBUG] [Thread-300955] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:03:11.177 [DEBUG] [Thread-300957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:03:26.318 [DEBUG] [Thread-300958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:03:33.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:03:33.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:03:33.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:03:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 3, 26), 16.46, 34.11, 0.0, 12.44, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:03:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:03:26
2025-12-24T11:03:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:03:34.906 [DEBUG] [Thread-300959] [transport.py] [_log()] starting thread (client mode): 0xf572d120
2025-12-24T11:03:34.906 [DEBUG] [Thread-300959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:03:34.920 [DEBUG] [Thread-300959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:03:34.920 [INFO] [Thread-300959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] client lang: <none>
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] server lang: <none>
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] kex follows: False
2025-12-24T11:03:34.923 [DEBUG] [Thread-300959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:03:34.924 [DEBUG] [Thread-300959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:03:34.924 [DEBUG] [Thread-300959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:03:34.924 [DEBUG] [Thread-300959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:03:34.924 [DEBUG] [Thread-300959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:03:34.924 [DEBUG] [Thread-300959] [transport.py] [_log()] Compression: none
2025-12-24T11:03:34.924 [DEBUG] [Thread-300959] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:03:34.958 [DEBUG] [Thread-300959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:03:34.962 [DEBUG] [Thread-300959] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:03:34.963 [DEBUG] [Thread-300959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:03:34.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:03:34.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:03:34.968 [DEBUG] [Thread-300959] [transport.py] [_log()] userauth is OK
2025-12-24T11:03:34.969 [DEBUG] [Thread-300959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:03:34.969 [DEBUG] [Thread-300959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:03:34.969 [DEBUG] [Thread-300959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:03:34.969 [DEBUG] [Thread-300959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:03:34.995 [INFO] [Thread-300959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:03:34.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:03:35.640 [DEBUG] [Thread-300959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:03:35.650 [DEBUG] [Thread-300959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:03:35.651 [DEBUG] [Thread-300959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:03:35.682 [DEBUG] [Thread-300959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:03:35.682 [DEBUG] [Thread-300959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:03:35.686 [DEBUG] [Thread-300959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:03:35.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:03:35.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:03:35.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:03:35.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:03:35.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:03:35.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:03:35.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:03:35.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:03:35.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:03:35.719 [DEBUG] [Thread-300959] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:03:35.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.377154 -999.00  +21.50  13.44     37   +6.20 1 1 1 1 1   888    0 18.76 149.68 ----- 13.4 13.4 104.2 19.8 30.7 -29.8 30.1 -26.3 29.1 -24.7 29.8 -26.0
2025-12-24T11:03:35.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:03:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:03:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.377154
2025-12-24T11:03:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:03:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:03:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:03:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:03:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:03:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:03:26', tmtdew=16.46, humidity=34.11, cloud=0.0, wind=12.44, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:03:06.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:03:35.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:03:35.840 [DEBUG] [Thread-300962] [transport.py] [_log()] starting thread (client mode): 0xf57a8490
2025-12-24T11:03:35.841 [DEBUG] [Thread-300962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:03:35.854 [DEBUG] [Thread-300962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:03:35.855 [INFO] [Thread-300962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:03:35.865 [DEBUG] [Thread-300962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:03:35.866 [DEBUG] [Thread-300962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:03:35.866 [DEBUG] [Thread-300962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:03:35.866 [DEBUG] [Thread-300962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:03:35.866 [DEBUG] [Thread-300962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:03:35.866 [DEBUG] [Thread-300962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:03:35.866 [DEBUG] [Thread-300962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:03:35.867 [DEBUG] [Thread-300962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:03:35.867 [DEBUG] [Thread-300962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:03:35.867 [DEBUG] [Thread-300962] [transport.py] [_log()] client lang: <none>
2025-12-24T11:03:35.867 [DEBUG] [Thread-300962] [transport.py] [_log()] server lang: <none>
2025-12-24T11:03:35.867 [DEBUG] [Thread-300962] [transport.py] [_log()] kex follows: False
2025-12-24T11:03:35.867 [DEBUG] [Thread-300962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:03:35.867 [DEBUG] [Thread-300962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:03:35.867 [DEBUG] [Thread-300962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:03:35.868 [DEBUG] [Thread-300962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:03:35.868 [DEBUG] [Thread-300962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:03:35.868 [DEBUG] [Thread-300962] [transport.py] [_log()] Compression: none
2025-12-24T11:03:35.868 [DEBUG] [Thread-300962] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:03:35.932 [DEBUG] [Thread-300962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:03:35.933 [DEBUG] [Thread-300962] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:03:35.934 [DEBUG] [Thread-300962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:03:35.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:03:35.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:03:35.990 [DEBUG] [Thread-300962] [transport.py] [_log()] userauth is OK
2025-12-24T11:03:35.991 [DEBUG] [Thread-300962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:03:35.991 [DEBUG] [Thread-300962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:03:35.991 [DEBUG] [Thread-300962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:03:35.991 [DEBUG] [Thread-300962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:03:36.009 [INFO] [Thread-300962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:03:36.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:03:36.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:03:36.820 [DEBUG] [Thread-300962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:03:36.820 [DEBUG] [Thread-300962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:03:36.868 [DEBUG] [Thread-300962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:03:36.868 [DEBUG] [Thread-300962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:03:36.877 [DEBUG] [Thread-300962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:03:36.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:03: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')
2025-12-24T11:03:36.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:03:36.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:03:36.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:03:36.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:03:36.915 [DEBUG] [Thread-300962] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:03:41.364 [DEBUG] [Thread-300964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:03:42.848 [DEBUG] [Thread-300965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:03:44.589 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:03:44.591 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:03:56.441 [DEBUG] [Thread-300966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:04:06.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:04:06.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:04:06.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:04:07.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 3, 59), 17.08, 32.46, 0.0, 15.33, 21.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:04:07.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:03:59
2025-12-24T11:04:07.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:04:08.105 [DEBUG] [Thread-300967] [transport.py] [_log()] starting thread (client mode): 0xf57a89d0
2025-12-24T11:04:08.105 [DEBUG] [Thread-300967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:04:08.123 [DEBUG] [Thread-300967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:04:08.123 [INFO] [Thread-300967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] client lang: <none>
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] server lang: <none>
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] kex follows: False
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] Compression: none
2025-12-24T11:04:08.124 [DEBUG] [Thread-300967] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:04:08.131 [DEBUG] [Thread-300967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:04:08.131 [DEBUG] [Thread-300967] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:04:08.131 [DEBUG] [Thread-300967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:04:08.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:04:08.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:04:08.132 [DEBUG] [Thread-300967] [transport.py] [_log()] userauth is OK
2025-12-24T11:04:08.132 [DEBUG] [Thread-300967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:04:08.132 [DEBUG] [Thread-300967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:04:08.132 [DEBUG] [Thread-300967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:04:08.132 [DEBUG] [Thread-300967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:04:08.145 [INFO] [Thread-300967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:04:08.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:04:08.800 [DEBUG] [Thread-300967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:04:08.800 [DEBUG] [Thread-300967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:04:08.800 [DEBUG] [Thread-300967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:04:08.841 [DEBUG] [Thread-300967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:04:08.841 [DEBUG] [Thread-300967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:04:08.843 [DEBUG] [Thread-300967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:04:08.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:04:08.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:04:08.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:04:08.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:04:08.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:04:08.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:04:08.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.377501 -999.00  +21.30  17.70     37   +6.30 1 1 1 1 1   888    0 18.79 148.93 ----- 17.7 17.7 124.2 20.0 30.7 -27.4 30.0 -27.4 29.1 -24.7 29.8 -26.0
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.377501
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:04:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:03:59', tmtdew=17.08, humidity=32.46, cloud=0.0, wind=15.33, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:03:36.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:04:08.862 [DEBUG] [Thread-300967] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:04:08.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:04:08.948 [DEBUG] [Thread-300970] [transport.py] [_log()] starting thread (client mode): 0xf57abf10
2025-12-24T11:04:08.948 [DEBUG] [Thread-300970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:04:08.963 [DEBUG] [Thread-300970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:04:08.963 [INFO] [Thread-300970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] client lang: <none>
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] server lang: <none>
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] kex follows: False
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] Compression: none
2025-12-24T11:04:08.971 [DEBUG] [Thread-300970] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:04:09.033 [DEBUG] [Thread-300970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:04:09.033 [DEBUG] [Thread-300970] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:04:09.033 [DEBUG] [Thread-300970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:04:09.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:04:09.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:04:09.089 [DEBUG] [Thread-300970] [transport.py] [_log()] userauth is OK
2025-12-24T11:04:09.089 [DEBUG] [Thread-300970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:04:09.090 [DEBUG] [Thread-300970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:04:09.090 [DEBUG] [Thread-300970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:04:09.090 [DEBUG] [Thread-300970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:04:09.103 [INFO] [Thread-300970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:04:09.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:04:09.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:04:09.906 [DEBUG] [Thread-300970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:04:09.906 [DEBUG] [Thread-300970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:04:09.954 [DEBUG] [Thread-300970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:04:09.954 [DEBUG] [Thread-300970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:04:09.962 [DEBUG] [Thread-300970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:04:09.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:04:09.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:04:09.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:04:09.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:04:09.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:04:09.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:04:09.994 [DEBUG] [Thread-300970] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:04:11.474 [DEBUG] [Thread-300972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:04:26.545 [DEBUG] [Thread-300973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:04:40.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:04:40.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:04:40.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
2025-12-24T11:04:40.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 4, 33), 17.0, 32.58, 0.0, 14.38, 21.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:04:40.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:04:33
2025-12-24T11:04:41.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:04:41.238 [DEBUG] [Thread-300974] [transport.py] [_log()] starting thread (client mode): 0xf5772c50
2025-12-24T11:04:41.238 [DEBUG] [Thread-300974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:04:41.248 [DEBUG] [Thread-300974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:04:41.248 [INFO] [Thread-300974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:04:41.254 [DEBUG] [Thread-300974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:04:41.254 [DEBUG] [Thread-300974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:04:41.254 [DEBUG] [Thread-300974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:04:41.254 [DEBUG] [Thread-300974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:04:41.254 [DEBUG] [Thread-300974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:04:41.254 [DEBUG] [Thread-300974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:04:41.254 [DEBUG] [Thread-300974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:04:41.255 [DEBUG] [Thread-300974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:04:41.255 [DEBUG] [Thread-300974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:04:41.255 [DEBUG] [Thread-300974] [transport.py] [_log()] client lang: <none>
2025-12-24T11:04:41.255 [DEBUG] [Thread-300974] [transport.py] [_log()] server lang: <none>
2025-12-24T11:04:41.255 [DEBUG] [Thread-300974] [transport.py] [_log()] kex follows: False
2025-12-24T11:04:41.255 [DEBUG] [Thread-300974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:04:41.256 [DEBUG] [Thread-300974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:04:41.256 [DEBUG] [Thread-300974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:04:41.256 [DEBUG] [Thread-300974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:04:41.256 [DEBUG] [Thread-300974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:04:41.256 [DEBUG] [Thread-300974] [transport.py] [_log()] Compression: none
2025-12-24T11:04:41.256 [DEBUG] [Thread-300974] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:04:41.294 [DEBUG] [Thread-300974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:04:41.298 [DEBUG] [Thread-300974] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:04:41.300 [DEBUG] [Thread-300974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:04:41.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:04:41.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:04:41.307 [DEBUG] [Thread-300974] [transport.py] [_log()] userauth is OK
2025-12-24T11:04:41.307 [DEBUG] [Thread-300974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:04:41.307 [DEBUG] [Thread-300974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:04:41.307 [DEBUG] [Thread-300974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:04:41.307 [DEBUG] [Thread-300974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:04:41.334 [INFO] [Thread-300974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:04:41.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:04:41.616 [DEBUG] [Thread-300976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:04:41.976 [DEBUG] [Thread-300974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:04:41.976 [DEBUG] [Thread-300974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:04:41.986 [DEBUG] [Thread-300974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:04:42.017 [DEBUG] [Thread-300974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:04:42.017 [DEBUG] [Thread-300974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:04:42.019 [DEBUG] [Thread-300974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:04:42.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:04:42.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:04:42.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:04:42.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:04:42.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:04:42.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:04:42.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:04:42.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:04:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:04:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.377848 -999.00  +20.70  16.21     38   +6.00 1 1 1 1 1   888    0 18.55 138.65 ----- 16.2 16.2 114.4 23.1 30.5 -29.4 30.0 -27.3 29.0 -25.9 29.7 -26.0
2025-12-24T11:04:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:04:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:04:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.377848
2025-12-24T11:04:42.047 [DEBUG] [Thread-300974] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:04:42.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:04:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:04:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:04:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:04:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:04:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:04:33', tmtdew=17.0, humidity=32.58, cloud=0.0, wind=14.38, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:04:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:04:42.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:04:42.141 [DEBUG] [Thread-300978] [transport.py] [_log()] starting thread (client mode): 0xf574e2c0
2025-12-24T11:04:42.141 [DEBUG] [Thread-300978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:04:42.156 [DEBUG] [Thread-300978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:04:42.156 [INFO] [Thread-300978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] client lang: <none>
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] server lang: <none>
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] kex follows: False
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] Compression: none
2025-12-24T11:04:42.164 [DEBUG] [Thread-300978] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:04:42.222 [DEBUG] [Thread-300978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:04:42.223 [DEBUG] [Thread-300978] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:04:42.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:04:42.224 [DEBUG] [Thread-300978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:04:42.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:04:42.278 [DEBUG] [Thread-300978] [transport.py] [_log()] userauth is OK
2025-12-24T11:04:42.278 [DEBUG] [Thread-300978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:04:42.279 [DEBUG] [Thread-300978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:04:42.279 [DEBUG] [Thread-300978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:04:42.279 [DEBUG] [Thread-300978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:04:42.297 [INFO] [Thread-300978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:04:42.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:04:42.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:04:43.102 [DEBUG] [Thread-300978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:04:43.102 [DEBUG] [Thread-300978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:04:43.149 [DEBUG] [Thread-300978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:04:43.150 [DEBUG] [Thread-300978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:04:43.158 [DEBUG] [Thread-300978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:04:43.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:04:43.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:04:43.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
2025-12-24T11:04:43.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:04:43.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:04:43.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:04:43.191 [DEBUG] [Thread-300978] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:04:43.206 [DEBUG] [Thread-300980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:04:44.733 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:04:44.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:04:56.697 [DEBUG] [Thread-300981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:05:11.854 [DEBUG] [Thread-300982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:05:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:05:13.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:05:13.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:05:14.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 5, 6), 16.96, 32.61, 0.0, 11.79, 20.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:05:14.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:05:06
2025-12-24T11:05:14.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:05:14.447 [DEBUG] [Thread-300983] [transport.py] [_log()] starting thread (client mode): 0xf57a9030
2025-12-24T11:05:14.448 [DEBUG] [Thread-300983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:05:14.460 [DEBUG] [Thread-300983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:05:14.460 [INFO] [Thread-300983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:05:14.466 [DEBUG] [Thread-300983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:05:14.466 [DEBUG] [Thread-300983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:05:14.466 [DEBUG] [Thread-300983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:05:14.466 [DEBUG] [Thread-300983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:05:14.466 [DEBUG] [Thread-300983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:05:14.467 [DEBUG] [Thread-300983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:05:14.467 [DEBUG] [Thread-300983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:05:14.467 [DEBUG] [Thread-300983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:05:14.467 [DEBUG] [Thread-300983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:05:14.467 [DEBUG] [Thread-300983] [transport.py] [_log()] client lang: <none>
2025-12-24T11:05:14.467 [DEBUG] [Thread-300983] [transport.py] [_log()] server lang: <none>
2025-12-24T11:05:14.467 [DEBUG] [Thread-300983] [transport.py] [_log()] kex follows: False
2025-12-24T11:05:14.467 [DEBUG] [Thread-300983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:05:14.468 [DEBUG] [Thread-300983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:05:14.468 [DEBUG] [Thread-300983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:05:14.468 [DEBUG] [Thread-300983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:05:14.468 [DEBUG] [Thread-300983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:05:14.468 [DEBUG] [Thread-300983] [transport.py] [_log()] Compression: none
2025-12-24T11:05:14.468 [DEBUG] [Thread-300983] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:05:14.506 [DEBUG] [Thread-300983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:05:14.511 [DEBUG] [Thread-300983] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:05:14.513 [DEBUG] [Thread-300983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:05:14.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:05:14.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:05:14.519 [DEBUG] [Thread-300983] [transport.py] [_log()] userauth is OK
2025-12-24T11:05:14.520 [DEBUG] [Thread-300983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:05:14.520 [DEBUG] [Thread-300983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:05:14.520 [DEBUG] [Thread-300983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:05:14.521 [DEBUG] [Thread-300983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:05:14.560 [INFO] [Thread-300983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:05:14.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:05:15.343 [DEBUG] [Thread-300983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:05:15.344 [DEBUG] [Thread-300983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:05:15.345 [DEBUG] [Thread-300983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:05:15.387 [DEBUG] [Thread-300983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:05:15.387 [DEBUG] [Thread-300983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:05:15.393 [DEBUG] [Thread-300983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:05:15.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:05:15.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:05:15.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:05:15.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:05:15.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:05:15.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:05:15.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:05:15.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:05:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.378195 -999.00  +20.70  14.67     38   +6.10 1 1 1 1 1   888    0 17.93 123.87 ----- 14.7 14.7 111.0 19.7 30.2 -29.6 30.0 -26.2 29.1 -24.9 29.6 -26.2
2025-12-24T11:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.378195
2025-12-24T11:05:15.451 [DEBUG] [Thread-300983] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:05:15.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:05:15.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:05:15.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:05:15.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:05:15.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:05:15.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:05:06', tmtdew=16.96, humidity=32.61, cloud=0.0, wind=11.79, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:04:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:05:15.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:05:15.562 [DEBUG] [Thread-300986] [transport.py] [_log()] starting thread (client mode): 0xf572d1b0
2025-12-24T11:05:15.562 [DEBUG] [Thread-300986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:05:15.576 [DEBUG] [Thread-300986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:05:15.576 [INFO] [Thread-300986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] client lang: <none>
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] server lang: <none>
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] kex follows: False
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:05:15.585 [DEBUG] [Thread-300986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:05:15.586 [DEBUG] [Thread-300986] [transport.py] [_log()] Compression: none
2025-12-24T11:05:15.586 [DEBUG] [Thread-300986] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:05:15.640 [DEBUG] [Thread-300986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:05:15.640 [DEBUG] [Thread-300986] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:05:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:05:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:05:15.640 [DEBUG] [Thread-300986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:05:15.698 [DEBUG] [Thread-300986] [transport.py] [_log()] userauth is OK
2025-12-24T11:05:15.698 [DEBUG] [Thread-300986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:05:15.698 [DEBUG] [Thread-300986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:05:15.698 [DEBUG] [Thread-300986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:05:15.698 [DEBUG] [Thread-300986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:05:15.716 [INFO] [Thread-300986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:05:15.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:05:15.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:05:16.538 [DEBUG] [Thread-300986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:05:16.538 [DEBUG] [Thread-300986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:05:16.577 [DEBUG] [Thread-300986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:05:16.578 [DEBUG] [Thread-300986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:05:16.587 [DEBUG] [Thread-300986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:05:16.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:05:16.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:05:16.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:05:16.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:05:16.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:05:16.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:05:16.626 [DEBUG] [Thread-300986] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:05:26.941 [DEBUG] [Thread-300988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:05:42.044 [DEBUG] [Thread-300989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:05:43.501 [DEBUG] [Thread-300990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:05:44.884 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:05:44.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:05:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:05:46.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:05:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:05:47.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 5, 39), 16.81, 32.96, 0.0, 10.38, 20.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:05:47.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:05:39
2025-12-24T11:05:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:05:48.257 [DEBUG] [Thread-300991] [transport.py] [_log()] starting thread (client mode): 0xf572ca90
2025-12-24T11:05:48.257 [DEBUG] [Thread-300991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:05:48.272 [DEBUG] [Thread-300991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:05:48.272 [INFO] [Thread-300991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:05:48.276 [DEBUG] [Thread-300991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:05:48.276 [DEBUG] [Thread-300991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:05:48.276 [DEBUG] [Thread-300991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:05:48.276 [DEBUG] [Thread-300991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:05:48.276 [DEBUG] [Thread-300991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:05:48.277 [DEBUG] [Thread-300991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:05:48.277 [DEBUG] [Thread-300991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:05:48.277 [DEBUG] [Thread-300991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:05:48.277 [DEBUG] [Thread-300991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:05:48.277 [DEBUG] [Thread-300991] [transport.py] [_log()] client lang: <none>
2025-12-24T11:05:48.277 [DEBUG] [Thread-300991] [transport.py] [_log()] server lang: <none>
2025-12-24T11:05:48.277 [DEBUG] [Thread-300991] [transport.py] [_log()] kex follows: False
2025-12-24T11:05:48.277 [DEBUG] [Thread-300991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:05:48.278 [DEBUG] [Thread-300991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:05:48.278 [DEBUG] [Thread-300991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:05:48.278 [DEBUG] [Thread-300991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:05:48.278 [DEBUG] [Thread-300991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:05:48.278 [DEBUG] [Thread-300991] [transport.py] [_log()] Compression: none
2025-12-24T11:05:48.278 [DEBUG] [Thread-300991] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:05:48.306 [DEBUG] [Thread-300991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:05:48.310 [DEBUG] [Thread-300991] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:05:48.312 [DEBUG] [Thread-300991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:05:48.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:05:48.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:05:48.315 [DEBUG] [Thread-300991] [transport.py] [_log()] userauth is OK
2025-12-24T11:05:48.315 [DEBUG] [Thread-300991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:05:48.316 [DEBUG] [Thread-300991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:05:48.316 [DEBUG] [Thread-300991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:05:48.316 [DEBUG] [Thread-300991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:05:48.338 [INFO] [Thread-300991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:05:48.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:05:48.968 [DEBUG] [Thread-300991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:05:48.968 [DEBUG] [Thread-300991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:05:48.978 [DEBUG] [Thread-300991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:05:49.009 [DEBUG] [Thread-300991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:05:49.009 [DEBUG] [Thread-300991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:05:49.012 [DEBUG] [Thread-300991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:05:49.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:05:49.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:05:49.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:05:49.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:05:49.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:05:49.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:05:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:05:49.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:05:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:05:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.378542 -999.00  +20.70   9.69     38   +6.10 1 1 1 1 1   888    0 17.70 122.34 ----- 9.7 9.7 110.0 14.7 30.0 -29.6 29.8 -26.4 29.0 -24.6 29.6 -25.4
2025-12-24T11:05:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:05:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:05:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.378542
2025-12-24T11:05:49.047 [DEBUG] [Thread-300991] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:05:49.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:05:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:05:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:05:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:05:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:05:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:05:39', tmtdew=16.81, humidity=32.96, cloud=0.0, wind=10.38, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:05:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:05:49.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:05:49.143 [DEBUG] [Thread-300994] [transport.py] [_log()] starting thread (client mode): 0xf57a8970
2025-12-24T11:05:49.143 [DEBUG] [Thread-300994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:05:49.158 [DEBUG] [Thread-300994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:05:49.158 [INFO] [Thread-300994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] client lang: <none>
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] server lang: <none>
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] kex follows: False
2025-12-24T11:05:49.166 [DEBUG] [Thread-300994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:05:49.175 [DEBUG] [Thread-300994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:05:49.175 [DEBUG] [Thread-300994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:05:49.175 [DEBUG] [Thread-300994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:05:49.175 [DEBUG] [Thread-300994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:05:49.175 [DEBUG] [Thread-300994] [transport.py] [_log()] Compression: none
2025-12-24T11:05:49.175 [DEBUG] [Thread-300994] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:05:49.224 [DEBUG] [Thread-300994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:05:49.225 [DEBUG] [Thread-300994] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:05:49.225 [DEBUG] [Thread-300994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:05:49.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:05:49.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:05:49.288 [DEBUG] [Thread-300994] [transport.py] [_log()] userauth is OK
2025-12-24T11:05:49.288 [DEBUG] [Thread-300994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:05:49.289 [DEBUG] [Thread-300994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:05:49.289 [DEBUG] [Thread-300994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:05:49.289 [DEBUG] [Thread-300994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:05:49.303 [INFO] [Thread-300994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:05:49.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:05:49.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:05:50.171 [DEBUG] [Thread-300994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:05:50.172 [DEBUG] [Thread-300994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:05:50.211 [DEBUG] [Thread-300994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:05:50.211 [DEBUG] [Thread-300994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:05:50.220 [DEBUG] [Thread-300994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:05:50.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:05:50.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:05:50.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:05:50.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:05:50.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:05:50.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:05:50.258 [DEBUG] [Thread-300994] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:05:57.088 [DEBUG] [Thread-300996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:06:12.201 [DEBUG] [Thread-300997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:06:20.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:06:20.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:06:20.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:06:21.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 6, 12), 16.91, 32.76, 0.0, 12.7, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:06:21.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:06:12
2025-12-24T11:06:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:06:21.569 [DEBUG] [Thread-300998] [transport.py] [_log()] starting thread (client mode): 0xf5741270
2025-12-24T11:06:21.570 [DEBUG] [Thread-300998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:06:21.580 [DEBUG] [Thread-300998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:06:21.580 [INFO] [Thread-300998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:06:21.586 [DEBUG] [Thread-300998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:06:21.587 [DEBUG] [Thread-300998] [transport.py] [_log()] client lang: <none>
2025-12-24T11:06:21.588 [DEBUG] [Thread-300998] [transport.py] [_log()] server lang: <none>
2025-12-24T11:06:21.588 [DEBUG] [Thread-300998] [transport.py] [_log()] kex follows: False
2025-12-24T11:06:21.588 [DEBUG] [Thread-300998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:06:21.588 [DEBUG] [Thread-300998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:06:21.589 [DEBUG] [Thread-300998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:06:21.589 [DEBUG] [Thread-300998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:06:21.589 [DEBUG] [Thread-300998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:06:21.589 [DEBUG] [Thread-300998] [transport.py] [_log()] Compression: none
2025-12-24T11:06:21.589 [DEBUG] [Thread-300998] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:06:21.631 [DEBUG] [Thread-300998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:06:21.635 [DEBUG] [Thread-300998] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:06:21.637 [DEBUG] [Thread-300998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:06:21.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:06:21.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:06:21.642 [DEBUG] [Thread-300998] [transport.py] [_log()] userauth is OK
2025-12-24T11:06:21.642 [DEBUG] [Thread-300998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:06:21.642 [DEBUG] [Thread-300998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:06:21.642 [DEBUG] [Thread-300998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:06:21.642 [DEBUG] [Thread-300998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:06:21.681 [INFO] [Thread-300998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:06:21.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:06:22.330 [DEBUG] [Thread-300998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:06:22.331 [DEBUG] [Thread-300998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:06:22.331 [DEBUG] [Thread-300998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:06:22.372 [DEBUG] [Thread-300998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:06:22.372 [DEBUG] [Thread-300998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:06:22.374 [DEBUG] [Thread-300998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:06:22.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:06:22.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:06:22.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:06:22.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:06:22.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:06:22.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:06:22.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:06:22.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:06:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:06:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.378890 -999.00  +20.90   5.03     38   +6.10 1 1 1 1 1   888    0 18.11 131.27 ----- 5.0 5.0 61.9 10.7 30.0 -27.6 29.9 -25.8 29.2 -24.9 29.7 -25.0
2025-12-24T11:06:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:06:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:06:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.378890
2025-12-24T11:06:22.402 [DEBUG] [Thread-300998] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:06:22.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:06:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:06:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:06:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:06:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:06:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:06:12', tmtdew=16.91, humidity=32.76, cloud=0.0, wind=12.7, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:05:36.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:06:22.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:06:22.502 [DEBUG] [Thread-301001] [transport.py] [_log()] starting thread (client mode): 0xf5742710
2025-12-24T11:06:22.502 [DEBUG] [Thread-301001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:06:22.517 [DEBUG] [Thread-301001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:06:22.517 [INFO] [Thread-301001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:06:22.525 [DEBUG] [Thread-301001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:06:22.525 [DEBUG] [Thread-301001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:06:22.526 [DEBUG] [Thread-301001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:06:22.526 [DEBUG] [Thread-301001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:06:22.526 [DEBUG] [Thread-301001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:06:22.526 [DEBUG] [Thread-301001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:06:22.526 [DEBUG] [Thread-301001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:06:22.526 [DEBUG] [Thread-301001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:06:22.526 [DEBUG] [Thread-301001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:06:22.526 [DEBUG] [Thread-301001] [transport.py] [_log()] client lang: <none>
2025-12-24T11:06:22.527 [DEBUG] [Thread-301001] [transport.py] [_log()] server lang: <none>
2025-12-24T11:06:22.527 [DEBUG] [Thread-301001] [transport.py] [_log()] kex follows: False
2025-12-24T11:06:22.527 [DEBUG] [Thread-301001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:06:22.527 [DEBUG] [Thread-301001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:06:22.527 [DEBUG] [Thread-301001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:06:22.527 [DEBUG] [Thread-301001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:06:22.527 [DEBUG] [Thread-301001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:06:22.527 [DEBUG] [Thread-301001] [transport.py] [_log()] Compression: none
2025-12-24T11:06:22.528 [DEBUG] [Thread-301001] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:06:22.582 [DEBUG] [Thread-301001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:06:22.582 [DEBUG] [Thread-301001] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:06:22.583 [DEBUG] [Thread-301001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:06:22.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:06:22.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:06:22.638 [DEBUG] [Thread-301001] [transport.py] [_log()] userauth is OK
2025-12-24T11:06:22.638 [DEBUG] [Thread-301001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:06:22.638 [DEBUG] [Thread-301001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:06:22.638 [DEBUG] [Thread-301001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:06:22.639 [DEBUG] [Thread-301001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:06:22.659 [INFO] [Thread-301001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:06:22.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:06:22.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:06:23.490 [DEBUG] [Thread-301001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:06:23.491 [DEBUG] [Thread-301001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:06:23.537 [DEBUG] [Thread-301001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:06:23.537 [DEBUG] [Thread-301001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:06:23.545 [DEBUG] [Thread-301001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:06:23.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:06:23.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:06:23.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:06:23.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:06:23.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:06:23.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:06:23.580 [DEBUG] [Thread-301001] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:06:27.280 [DEBUG] [Thread-301003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:06:42.376 [DEBUG] [Thread-301004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:06:43.818 [DEBUG] [Thread-301005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:06:45.035 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:06:45.037 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:06:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:06:53.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:06:53.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
2025-12-24T11:06:54.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 6, 45), 16.56, 33.33, 0.0, 12.23, 20.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:06:54.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:06:45
2025-12-24T11:06:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:06:54.983 [DEBUG] [Thread-301006] [transport.py] [_log()] starting thread (client mode): 0xf57435e0
2025-12-24T11:06:54.984 [DEBUG] [Thread-301006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:06:54.984 [DEBUG] [Thread-301006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:06:54.984 [INFO] [Thread-301006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] client lang: <none>
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] server lang: <none>
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] kex follows: False
2025-12-24T11:06:54.989 [DEBUG] [Thread-301006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:06:54.990 [DEBUG] [Thread-301006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:06:54.990 [DEBUG] [Thread-301006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:06:54.990 [DEBUG] [Thread-301006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:06:54.990 [DEBUG] [Thread-301006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:06:54.990 [DEBUG] [Thread-301006] [transport.py] [_log()] Compression: none
2025-12-24T11:06:54.990 [DEBUG] [Thread-301006] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:06:55.022 [DEBUG] [Thread-301006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:06:55.025 [DEBUG] [Thread-301006] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:06:55.026 [DEBUG] [Thread-301006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:06:55.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:06:55.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:06:55.031 [DEBUG] [Thread-301006] [transport.py] [_log()] userauth is OK
2025-12-24T11:06:55.031 [DEBUG] [Thread-301006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:06:55.031 [DEBUG] [Thread-301006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:06:55.031 [DEBUG] [Thread-301006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:06:55.031 [DEBUG] [Thread-301006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:06:55.051 [INFO] [Thread-301006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:06:55.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:06:55.634 [DEBUG] [Thread-301006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:06:55.635 [DEBUG] [Thread-301006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:06:55.635 [DEBUG] [Thread-301006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:06:55.677 [DEBUG] [Thread-301006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:06:55.677 [DEBUG] [Thread-301006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:06:55.680 [DEBUG] [Thread-301006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:06:55.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:06:55.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:06:55.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:06:55.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:06:55.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:06:55.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:06:55.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:06:55.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:06:55.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:06:55.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.379584 -999.00  +21.20   8.09     37   +6.10 1 1 1 1 1   888    0 18.03 116.04 ----- 8.1 8.1 114.0 14.9 30.5 -26.1 30.0 -26.3 29.2 -24.7 29.8 -24.8
2025-12-24T11:06:55.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:06:55.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:06:55.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.379584
2025-12-24T11:06:55.717 [DEBUG] [Thread-301006] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:06:55.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:06:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:06:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:06:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:06:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:06:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:06:45', tmtdew=16.56, humidity=33.33, cloud=0.0, wind=12.23, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:06:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:06:55.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:06:55.814 [DEBUG] [Thread-301009] [transport.py] [_log()] starting thread (client mode): 0xf57413c0
2025-12-24T11:06:55.814 [DEBUG] [Thread-301009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:06:55.829 [DEBUG] [Thread-301009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:06:55.829 [INFO] [Thread-301009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] client lang: <none>
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] server lang: <none>
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] kex follows: False
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:06:55.836 [DEBUG] [Thread-301009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:06:55.837 [DEBUG] [Thread-301009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:06:55.837 [DEBUG] [Thread-301009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:06:55.837 [DEBUG] [Thread-301009] [transport.py] [_log()] Compression: none
2025-12-24T11:06:55.837 [DEBUG] [Thread-301009] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:06:55.892 [DEBUG] [Thread-301009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:06:55.892 [DEBUG] [Thread-301009] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:06:55.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:06:55.892 [DEBUG] [Thread-301009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:06:55.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:06:55.949 [DEBUG] [Thread-301009] [transport.py] [_log()] userauth is OK
2025-12-24T11:06:55.949 [DEBUG] [Thread-301009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:06:55.949 [DEBUG] [Thread-301009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:06:55.949 [DEBUG] [Thread-301009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:06:55.949 [DEBUG] [Thread-301009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:06:55.963 [INFO] [Thread-301009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:06:55.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:06:55.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:06:56.760 [DEBUG] [Thread-301009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:06:56.760 [DEBUG] [Thread-301009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:06:56.808 [DEBUG] [Thread-301009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:06:56.808 [DEBUG] [Thread-301009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:06:56.816 [DEBUG] [Thread-301009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:06:56.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:06:56.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:06:56.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:06:56.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:06:56.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:06:56.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:06:56.849 [DEBUG] [Thread-301009] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:06:57.406 [DEBUG] [Thread-301011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:07:12.496 [DEBUG] [Thread-301012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:07:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:07:26.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:07:26.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:07:27.541 [DEBUG] [Thread-301013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:07:28.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 7, 18), 16.35, 33.78, 0.0, 8.54, 20.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:07:28.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:07:18
2025-12-24T11:07:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:07:28.435 [DEBUG] [Thread-301014] [transport.py] [_log()] starting thread (client mode): 0xf57417b0
2025-12-24T11:07:28.435 [DEBUG] [Thread-301014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:07:28.451 [DEBUG] [Thread-301014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:07:28.451 [INFO] [Thread-301014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:07:28.456 [DEBUG] [Thread-301014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] client lang: <none>
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] server lang: <none>
2025-12-24T11:07:28.457 [DEBUG] [Thread-301014] [transport.py] [_log()] kex follows: False
2025-12-24T11:07:28.458 [DEBUG] [Thread-301014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:07:28.458 [DEBUG] [Thread-301014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:07:28.458 [DEBUG] [Thread-301014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:07:28.459 [DEBUG] [Thread-301014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:07:28.459 [DEBUG] [Thread-301014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:07:28.459 [DEBUG] [Thread-301014] [transport.py] [_log()] Compression: none
2025-12-24T11:07:28.459 [DEBUG] [Thread-301014] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:07:28.496 [DEBUG] [Thread-301014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:07:28.500 [DEBUG] [Thread-301014] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:07:28.502 [DEBUG] [Thread-301014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:07:28.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:07:28.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:07:28.508 [DEBUG] [Thread-301014] [transport.py] [_log()] userauth is OK
2025-12-24T11:07:28.508 [DEBUG] [Thread-301014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:07:28.509 [DEBUG] [Thread-301014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:07:28.509 [DEBUG] [Thread-301014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:07:28.509 [DEBUG] [Thread-301014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:07:28.536 [INFO] [Thread-301014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:07:28.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:07:29.172 [DEBUG] [Thread-301014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:07:29.173 [DEBUG] [Thread-301014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:07:29.174 [DEBUG] [Thread-301014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:07:29.213 [DEBUG] [Thread-301014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:07:29.214 [DEBUG] [Thread-301014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:07:29.217 [DEBUG] [Thread-301014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:07:29.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:07:29.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:07:29.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:07:29.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:07:29.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:07:29.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:07:29.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:07:29.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:07:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:07:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.379931 -999.00  +20.90   6.88     37   +6.00 1 1 1 1 1   888    0 18.25 117.08 ----- 6.9 6.9 115.4 10.2 30.6 -25.6 30.0 -26.2 29.3 -24.4 29.8 -24.8
2025-12-24T11:07:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:07:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:07:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.379931
2025-12-24T11:07:29.252 [DEBUG] [Thread-301014] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:07:29.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:07:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:07:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:07:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:07:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:07:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:07:18', tmtdew=16.35, humidity=33.78, cloud=0.0, wind=8.54, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:07:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:07:29.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:07:29.364 [DEBUG] [Thread-301017] [transport.py] [_log()] starting thread (client mode): 0xf5742350
2025-12-24T11:07:29.364 [DEBUG] [Thread-301017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:07:29.381 [DEBUG] [Thread-301017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:07:29.381 [INFO] [Thread-301017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:07:29.389 [DEBUG] [Thread-301017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:07:29.389 [DEBUG] [Thread-301017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:07:29.389 [DEBUG] [Thread-301017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:07:29.389 [DEBUG] [Thread-301017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:07:29.389 [DEBUG] [Thread-301017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] client lang: <none>
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] server lang: <none>
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] kex follows: False
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:07:29.390 [DEBUG] [Thread-301017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:07:29.391 [DEBUG] [Thread-301017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:07:29.391 [DEBUG] [Thread-301017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:07:29.391 [DEBUG] [Thread-301017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:07:29.391 [DEBUG] [Thread-301017] [transport.py] [_log()] Compression: none
2025-12-24T11:07:29.391 [DEBUG] [Thread-301017] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:07:29.454 [DEBUG] [Thread-301017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:07:29.455 [DEBUG] [Thread-301017] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:07:29.455 [DEBUG] [Thread-301017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:07:29.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:07:29.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:07:29.514 [DEBUG] [Thread-301017] [transport.py] [_log()] userauth is OK
2025-12-24T11:07:29.514 [DEBUG] [Thread-301017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:07:29.514 [DEBUG] [Thread-301017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:07:29.514 [DEBUG] [Thread-301017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:07:29.514 [DEBUG] [Thread-301017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:07:29.533 [INFO] [Thread-301017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:07:29.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:07:29.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:07:30.405 [DEBUG] [Thread-301017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:07:30.405 [DEBUG] [Thread-301017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:07:30.444 [DEBUG] [Thread-301017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:07:30.444 [DEBUG] [Thread-301017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:07:30.455 [DEBUG] [Thread-301017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:07:30.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:07:30.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:07:30.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:07:30.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:07:30.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:07:30.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:07:30.494 [DEBUG] [Thread-301017] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:07:42.579 [DEBUG] [Thread-301019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:07:44.120 [DEBUG] [Thread-301020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:07:45.178 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:07:45.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:07:57.697 [DEBUG] [Thread-301021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:08:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:08:00.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:08:00.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:08:01.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 7, 51), 16.17, 34.49, 0.0, 6.57, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:08:01.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:07:51
2025-12-24T11:08:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:08:01.802 [DEBUG] [Thread-301022] [transport.py] [_log()] starting thread (client mode): 0xf5743bb0
2025-12-24T11:08:01.803 [DEBUG] [Thread-301022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:08:01.816 [DEBUG] [Thread-301022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:08:01.817 [INFO] [Thread-301022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:08:01.823 [DEBUG] [Thread-301022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:08:01.823 [DEBUG] [Thread-301022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:08:01.823 [DEBUG] [Thread-301022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:08:01.823 [DEBUG] [Thread-301022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:08:01.823 [DEBUG] [Thread-301022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:08:01.824 [DEBUG] [Thread-301022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:08:01.824 [DEBUG] [Thread-301022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:08:01.824 [DEBUG] [Thread-301022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:08:01.824 [DEBUG] [Thread-301022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:08:01.824 [DEBUG] [Thread-301022] [transport.py] [_log()] client lang: <none>
2025-12-24T11:08:01.824 [DEBUG] [Thread-301022] [transport.py] [_log()] server lang: <none>
2025-12-24T11:08:01.824 [DEBUG] [Thread-301022] [transport.py] [_log()] kex follows: False
2025-12-24T11:08:01.824 [DEBUG] [Thread-301022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:08:01.825 [DEBUG] [Thread-301022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:08:01.825 [DEBUG] [Thread-301022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:08:01.825 [DEBUG] [Thread-301022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:08:01.825 [DEBUG] [Thread-301022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:08:01.826 [DEBUG] [Thread-301022] [transport.py] [_log()] Compression: none
2025-12-24T11:08:01.826 [DEBUG] [Thread-301022] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:08:01.866 [DEBUG] [Thread-301022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:08:01.871 [DEBUG] [Thread-301022] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:08:01.873 [DEBUG] [Thread-301022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:08:01.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:08:01.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:08:01.880 [DEBUG] [Thread-301022] [transport.py] [_log()] userauth is OK
2025-12-24T11:08:01.880 [DEBUG] [Thread-301022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:08:01.880 [DEBUG] [Thread-301022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:08:01.880 [DEBUG] [Thread-301022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:08:01.880 [DEBUG] [Thread-301022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:08:01.921 [INFO] [Thread-301022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:08:01.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:08:02.567 [DEBUG] [Thread-301022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:08:02.568 [DEBUG] [Thread-301022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:08:02.569 [DEBUG] [Thread-301022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:08:02.609 [DEBUG] [Thread-301022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:08:02.609 [DEBUG] [Thread-301022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:08:02.612 [DEBUG] [Thread-301022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:08:02.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:08:02.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:08:02.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:08:02.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:08:02.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:08:02.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:08:02.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:08:02.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:08:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:08:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.380279 -999.00  +21.00  13.56     38   +6.20 1 1 1 1 1   888    0 18.07 120.14 ----- 13.6 13.6 139.8 15.4 30.5 -26.6 30.1 -25.8 29.3 -24.8 29.9 -25.1
2025-12-24T11:08:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:08:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:08:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.380279
2025-12-24T11:08:02.648 [DEBUG] [Thread-301022] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:08:02.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:08:02.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:08:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:08:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:08:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:08:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:07:51', tmtdew=16.17, humidity=34.49, cloud=0.0, wind=6.57, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:07:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:08:02.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:08:02.752 [DEBUG] [Thread-301025] [transport.py] [_log()] starting thread (client mode): 0xf5740280
2025-12-24T11:08:02.752 [DEBUG] [Thread-301025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:08:02.767 [DEBUG] [Thread-301025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:08:02.767 [INFO] [Thread-301025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:08:02.775 [DEBUG] [Thread-301025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:08:02.775 [DEBUG] [Thread-301025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:08:02.775 [DEBUG] [Thread-301025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:08:02.775 [DEBUG] [Thread-301025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:08:02.775 [DEBUG] [Thread-301025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:08:02.775 [DEBUG] [Thread-301025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:08:02.775 [DEBUG] [Thread-301025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:08:02.775 [DEBUG] [Thread-301025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:08:02.776 [DEBUG] [Thread-301025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:08:02.776 [DEBUG] [Thread-301025] [transport.py] [_log()] client lang: <none>
2025-12-24T11:08:02.776 [DEBUG] [Thread-301025] [transport.py] [_log()] server lang: <none>
2025-12-24T11:08:02.776 [DEBUG] [Thread-301025] [transport.py] [_log()] kex follows: False
2025-12-24T11:08:02.776 [DEBUG] [Thread-301025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:08:02.776 [DEBUG] [Thread-301025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:08:02.776 [DEBUG] [Thread-301025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:08:02.776 [DEBUG] [Thread-301025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:08:02.777 [DEBUG] [Thread-301025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:08:02.777 [DEBUG] [Thread-301025] [transport.py] [_log()] Compression: none
2025-12-24T11:08:02.777 [DEBUG] [Thread-301025] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:08:02.833 [DEBUG] [Thread-301025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:08:02.833 [DEBUG] [Thread-301025] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:08:02.834 [DEBUG] [Thread-301025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:08:02.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:08:02.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:08:02.889 [DEBUG] [Thread-301025] [transport.py] [_log()] userauth is OK
2025-12-24T11:08:02.889 [DEBUG] [Thread-301025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:08:02.889 [DEBUG] [Thread-301025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:08:02.890 [DEBUG] [Thread-301025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:08:02.890 [DEBUG] [Thread-301025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:08:02.908 [INFO] [Thread-301025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:08:02.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:08:02.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:08:03.733 [DEBUG] [Thread-301025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:08:03.734 [DEBUG] [Thread-301025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:08:03.780 [DEBUG] [Thread-301025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:08:03.781 [DEBUG] [Thread-301025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:08:03.789 [DEBUG] [Thread-301025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:08:03.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:08:03.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:08:03.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:08:03.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:08:03.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:08:03.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:08:03.821 [DEBUG] [Thread-301025] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:08:12.737 [DEBUG] [Thread-301027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:08:27.871 [DEBUG] [Thread-301028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:08:33.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:08:33.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:08:33.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
2025-12-24T11:08:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 8, 24), 16.17, 34.47, 0.0, 6.18, 20.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:08:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:08:24
2025-12-24T11:08:34.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:08:35.102 [DEBUG] [Thread-301029] [transport.py] [_log()] starting thread (client mode): 0xf5740f40
2025-12-24T11:08:35.103 [DEBUG] [Thread-301029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:08:35.116 [DEBUG] [Thread-301029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:08:35.116 [INFO] [Thread-301029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:08:35.121 [DEBUG] [Thread-301029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] client lang: <none>
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] server lang: <none>
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] kex follows: False
2025-12-24T11:08:35.122 [DEBUG] [Thread-301029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:08:35.123 [DEBUG] [Thread-301029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:08:35.123 [DEBUG] [Thread-301029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:08:35.123 [DEBUG] [Thread-301029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:08:35.123 [DEBUG] [Thread-301029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:08:35.123 [DEBUG] [Thread-301029] [transport.py] [_log()] Compression: none
2025-12-24T11:08:35.123 [DEBUG] [Thread-301029] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:08:35.160 [DEBUG] [Thread-301029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:08:35.164 [DEBUG] [Thread-301029] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:08:35.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:08:35.168 [DEBUG] [Thread-301029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:08:35.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:08:35.171 [DEBUG] [Thread-301029] [transport.py] [_log()] userauth is OK
2025-12-24T11:08:35.171 [DEBUG] [Thread-301029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:08:35.172 [DEBUG] [Thread-301029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:08:35.172 [DEBUG] [Thread-301029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:08:35.172 [DEBUG] [Thread-301029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:08:35.210 [INFO] [Thread-301029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:08:35.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:08:35.852 [DEBUG] [Thread-301029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:08:35.853 [DEBUG] [Thread-301029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:08:35.855 [DEBUG] [Thread-301029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:08:35.893 [DEBUG] [Thread-301029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:08:35.894 [DEBUG] [Thread-301029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:08:35.896 [DEBUG] [Thread-301029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:08:35.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:08:35.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:08:35.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:08:35.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:08:35.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:08:35.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:08:35.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:08:35.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:08:35.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:08:35.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.380626 -999.00  +20.70  13.86     38   +5.90 1 1 1 1 1   888    0 18.16 116.84 ----- 13.9 13.9 103.5 16.0 30.6 -26.7 30.0 -25.8 29.3 -25.2 29.8 -26.7
2025-12-24T11:08:35.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:08:35.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:08:35.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.380626
2025-12-24T11:08:35.925 [DEBUG] [Thread-301029] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:08:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:08:35.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:08:35.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:08:35.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:08:35.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:08:35.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:08:24', tmtdew=16.17, humidity=34.47, cloud=0.0, wind=6.18, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:08:06.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:08:36.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:08:36.026 [DEBUG] [Thread-301032] [transport.py] [_log()] starting thread (client mode): 0xf57704f0
2025-12-24T11:08:36.026 [DEBUG] [Thread-301032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:08:36.042 [DEBUG] [Thread-301032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:08:36.042 [INFO] [Thread-301032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:08:36.049 [DEBUG] [Thread-301032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:08:36.049 [DEBUG] [Thread-301032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:08:36.049 [DEBUG] [Thread-301032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] client lang: <none>
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] server lang: <none>
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] kex follows: False
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] Compression: none
2025-12-24T11:08:36.050 [DEBUG] [Thread-301032] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:08:36.110 [DEBUG] [Thread-301032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:08:36.111 [DEBUG] [Thread-301032] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:08:36.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:08:36.112 [DEBUG] [Thread-301032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:08:36.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:08:36.166 [DEBUG] [Thread-301032] [transport.py] [_log()] userauth is OK
2025-12-24T11:08:36.166 [DEBUG] [Thread-301032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:08:36.166 [DEBUG] [Thread-301032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:08:36.166 [DEBUG] [Thread-301032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:08:36.167 [DEBUG] [Thread-301032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:08:36.188 [INFO] [Thread-301032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:08:36.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:08:36.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:08:37.083 [DEBUG] [Thread-301032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:08:37.083 [DEBUG] [Thread-301032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:08:37.123 [DEBUG] [Thread-301032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:08:37.123 [DEBUG] [Thread-301032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:08:37.131 [DEBUG] [Thread-301032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:08:37.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:08:37.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:08:37.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:08:37.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:08:37.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:08:37.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:08:37.168 [DEBUG] [Thread-301032] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:08:42.946 [DEBUG] [Thread-301034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:08:44.404 [DEBUG] [Thread-301035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:08:45.329 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:08:45.331 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:08:58.047 [DEBUG] [Thread-301036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:09:07.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:09:07.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:09:07.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:09:08.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 8, 58), 16.13, 34.41, 0.0, 8.75, 20.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:09:08.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:08:58
2025-12-24T11:09:08.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:09:08.453 [DEBUG] [Thread-301037] [transport.py] [_log()] starting thread (client mode): 0xf5773880
2025-12-24T11:09:08.454 [DEBUG] [Thread-301037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:09:08.467 [DEBUG] [Thread-301037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:09:08.468 [INFO] [Thread-301037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:09:08.473 [DEBUG] [Thread-301037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:09:08.473 [DEBUG] [Thread-301037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:09:08.473 [DEBUG] [Thread-301037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:09:08.473 [DEBUG] [Thread-301037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:09:08.473 [DEBUG] [Thread-301037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:09:08.473 [DEBUG] [Thread-301037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:09:08.473 [DEBUG] [Thread-301037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:09:08.474 [DEBUG] [Thread-301037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:09:08.474 [DEBUG] [Thread-301037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:09:08.474 [DEBUG] [Thread-301037] [transport.py] [_log()] client lang: <none>
2025-12-24T11:09:08.474 [DEBUG] [Thread-301037] [transport.py] [_log()] server lang: <none>
2025-12-24T11:09:08.474 [DEBUG] [Thread-301037] [transport.py] [_log()] kex follows: False
2025-12-24T11:09:08.474 [DEBUG] [Thread-301037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:09:08.475 [DEBUG] [Thread-301037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:09:08.475 [DEBUG] [Thread-301037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:09:08.475 [DEBUG] [Thread-301037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:09:08.475 [DEBUG] [Thread-301037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:09:08.475 [DEBUG] [Thread-301037] [transport.py] [_log()] Compression: none
2025-12-24T11:09:08.475 [DEBUG] [Thread-301037] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:09:08.511 [DEBUG] [Thread-301037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:09:08.515 [DEBUG] [Thread-301037] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:09:08.517 [DEBUG] [Thread-301037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:09:08.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:09:08.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:09:08.523 [DEBUG] [Thread-301037] [transport.py] [_log()] userauth is OK
2025-12-24T11:09:08.523 [DEBUG] [Thread-301037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:09:08.523 [DEBUG] [Thread-301037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:09:08.523 [DEBUG] [Thread-301037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:09:08.523 [DEBUG] [Thread-301037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:09:08.561 [INFO] [Thread-301037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:09:08.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:09:09.198 [DEBUG] [Thread-301037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:09:09.198 [DEBUG] [Thread-301037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:09:09.199 [DEBUG] [Thread-301037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:09:09.239 [DEBUG] [Thread-301037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:09:09.239 [DEBUG] [Thread-301037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:09:09.243 [DEBUG] [Thread-301037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:09:09.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:09:09.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:09:09.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:09:09.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:09:09.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:09:09.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:09:09.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:09:09.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:09:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:09:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.380973 -999.00  +20.50   7.42     38   +5.90 1 1 1 1 1   888    0 17.82 110.39 ----- 7.4 7.4 112.6 13.2 30.6 -26.8 30.0 -26.5 29.3 -24.3 29.8 -25.7
2025-12-24T11:09:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:09:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:09:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.380973
2025-12-24T11:09:09.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:09:09.274 [DEBUG] [Thread-301037] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:09:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:09:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:09:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:09:09.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:09:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:08:58', tmtdew=16.13, humidity=34.41, cloud=0.0, wind=8.75, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:08:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:09:09.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:09:09.368 [DEBUG] [Thread-301040] [transport.py] [_log()] starting thread (client mode): 0xf5740430
2025-12-24T11:09:09.368 [DEBUG] [Thread-301040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:09:09.383 [DEBUG] [Thread-301040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:09:09.383 [INFO] [Thread-301040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:09:09.391 [DEBUG] [Thread-301040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:09:09.391 [DEBUG] [Thread-301040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:09:09.391 [DEBUG] [Thread-301040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:09:09.391 [DEBUG] [Thread-301040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:09:09.391 [DEBUG] [Thread-301040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] client lang: <none>
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] server lang: <none>
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] kex follows: False
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] Compression: none
2025-12-24T11:09:09.392 [DEBUG] [Thread-301040] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:09:09.452 [DEBUG] [Thread-301040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:09:09.453 [DEBUG] [Thread-301040] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:09:09.453 [DEBUG] [Thread-301040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:09:09.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:09:09.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:09:09.509 [DEBUG] [Thread-301040] [transport.py] [_log()] userauth is OK
2025-12-24T11:09:09.509 [DEBUG] [Thread-301040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:09:09.509 [DEBUG] [Thread-301040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:09:09.509 [DEBUG] [Thread-301040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:09:09.509 [DEBUG] [Thread-301040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:09:09.524 [INFO] [Thread-301040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:09:09.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:09:09.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:09:10.331 [DEBUG] [Thread-301040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:09:10.331 [DEBUG] [Thread-301040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:09:10.378 [DEBUG] [Thread-301040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:09:10.378 [DEBUG] [Thread-301040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:09:10.387 [DEBUG] [Thread-301040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:09:10.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:09:10.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:09:10.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:09:10.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:09:10.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:09:10.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:09:10.424 [DEBUG] [Thread-301040] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:09:13.120 [DEBUG] [Thread-301042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:09:28.270 [DEBUG] [Thread-301043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:09:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:09:40.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:09:40.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:09:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 9, 31), 16.42, 33.83, 0.0, 9.99, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:09:41.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:09:31
2025-12-24T11:09:41.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:09:41.771 [DEBUG] [Thread-301044] [transport.py] [_log()] starting thread (client mode): 0xf5772bf0
2025-12-24T11:09:41.772 [DEBUG] [Thread-301044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:09:41.777 [DEBUG] [Thread-301044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:09:41.777 [INFO] [Thread-301044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] client lang: <none>
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] server lang: <none>
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] kex follows: False
2025-12-24T11:09:41.782 [DEBUG] [Thread-301044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:09:41.783 [DEBUG] [Thread-301044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:09:41.783 [DEBUG] [Thread-301044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:09:41.783 [DEBUG] [Thread-301044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:09:41.783 [DEBUG] [Thread-301044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:09:41.783 [DEBUG] [Thread-301044] [transport.py] [_log()] Compression: none
2025-12-24T11:09:41.783 [DEBUG] [Thread-301044] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:09:41.807 [DEBUG] [Thread-301044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:09:41.809 [DEBUG] [Thread-301044] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:09:41.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:09:41.812 [DEBUG] [Thread-301044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:09:41.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:09:41.814 [DEBUG] [Thread-301044] [transport.py] [_log()] userauth is OK
2025-12-24T11:09:41.814 [DEBUG] [Thread-301044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:09:41.815 [DEBUG] [Thread-301044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:09:41.815 [DEBUG] [Thread-301044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:09:41.815 [DEBUG] [Thread-301044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:09:41.834 [INFO] [Thread-301044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:09:41.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:09:42.450 [DEBUG] [Thread-301044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:09:42.450 [DEBUG] [Thread-301044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:09:42.451 [DEBUG] [Thread-301044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:09:42.491 [DEBUG] [Thread-301044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:09:42.492 [DEBUG] [Thread-301044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:09:42.494 [DEBUG] [Thread-301044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:09:42.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:09:42.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:09:42.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:09:42.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:09:42.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:09:42.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:09:42.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:09:42.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:09:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:09:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.381320 -999.00  +20.80  14.65     38   +6.20 1 1 1 1 1   888    0 17.28 98.13 ----- 14.7 14.7 185.0 17.1 30.6 -26.2 30.1 -25.5 29.4 -23.9 29.9 -24.7
2025-12-24T11:09:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:09:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:09:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.381320
2025-12-24T11:09:42.523 [DEBUG] [Thread-301044] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:09:42.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:09:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:09:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:09:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:09:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:09:42.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:09:31', tmtdew=16.42, humidity=33.83, cloud=0.0, wind=9.99, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:09:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:09:42.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:09:42.640 [DEBUG] [Thread-301047] [transport.py] [_log()] starting thread (client mode): 0xf574d2a0
2025-12-24T11:09:42.640 [DEBUG] [Thread-301047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:09:42.655 [DEBUG] [Thread-301047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:09:42.655 [INFO] [Thread-301047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:09:42.665 [DEBUG] [Thread-301047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:09:42.665 [DEBUG] [Thread-301047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:09:42.665 [DEBUG] [Thread-301047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:09:42.665 [DEBUG] [Thread-301047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] client lang: <none>
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] server lang: <none>
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] kex follows: False
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] Compression: none
2025-12-24T11:09:42.666 [DEBUG] [Thread-301047] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:09:42.720 [DEBUG] [Thread-301047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:09:42.721 [DEBUG] [Thread-301047] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:09:42.721 [DEBUG] [Thread-301047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:09:42.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:09:42.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:09:42.777 [DEBUG] [Thread-301047] [transport.py] [_log()] userauth is OK
2025-12-24T11:09:42.777 [DEBUG] [Thread-301047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:09:42.777 [DEBUG] [Thread-301047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:09:42.777 [DEBUG] [Thread-301047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:09:42.777 [DEBUG] [Thread-301047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:09:42.796 [INFO] [Thread-301047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:09:42.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:09:42.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:09:43.315 [DEBUG] [Thread-301049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:09:43.619 [DEBUG] [Thread-301047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:09:43.619 [DEBUG] [Thread-301047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:09:43.667 [DEBUG] [Thread-301047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:09:43.667 [DEBUG] [Thread-301047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:09:43.675 [DEBUG] [Thread-301047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:09:43.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:09:43.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:09:43.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
2025-12-24T11:09:43.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:09:43.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:09:43.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:09:43.710 [DEBUG] [Thread-301047] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:09:44.672 [DEBUG] [Thread-301050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:09:45.471 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:09:45.472 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:09:58.369 [DEBUG] [Thread-301051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:10:13.405 [DEBUG] [Thread-301052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:10:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:10:13.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:10:13.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:10:14.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 10, 4), 16.4, 33.86, 0.0, 9.58, 20.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:10:14.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:10:04
2025-12-24T11:10:14.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:10:15.015 [DEBUG] [Thread-301053] [transport.py] [_log()] starting thread (client mode): 0xf5742f20
2025-12-24T11:10:15.015 [DEBUG] [Thread-301053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:10:15.031 [DEBUG] [Thread-301053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:10:15.031 [INFO] [Thread-301053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] client lang: <none>
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] server lang: <none>
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] kex follows: False
2025-12-24T11:10:15.035 [DEBUG] [Thread-301053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:10:15.036 [DEBUG] [Thread-301053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:10:15.036 [DEBUG] [Thread-301053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:10:15.036 [DEBUG] [Thread-301053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:10:15.036 [DEBUG] [Thread-301053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:10:15.036 [DEBUG] [Thread-301053] [transport.py] [_log()] Compression: none
2025-12-24T11:10:15.036 [DEBUG] [Thread-301053] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:10:15.069 [DEBUG] [Thread-301053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:10:15.074 [DEBUG] [Thread-301053] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:10:15.076 [DEBUG] [Thread-301053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:10:15.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:10:15.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:10:15.082 [DEBUG] [Thread-301053] [transport.py] [_log()] userauth is OK
2025-12-24T11:10:15.082 [DEBUG] [Thread-301053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:10:15.083 [DEBUG] [Thread-301053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:10:15.083 [DEBUG] [Thread-301053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:10:15.083 [DEBUG] [Thread-301053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:10:15.111 [INFO] [Thread-301053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:10:15.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:10:15.759 [DEBUG] [Thread-301053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:10:15.759 [DEBUG] [Thread-301053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:10:15.769 [DEBUG] [Thread-301053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:10:15.801 [DEBUG] [Thread-301053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:10:15.801 [DEBUG] [Thread-301053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:10:15.804 [DEBUG] [Thread-301053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:10:15.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:10:15.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:10:15.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:10:15.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:10:15.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:10:15.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:10:15.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:10:15.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:10:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:10:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.381667 -999.00  +20.70   7.21     38   +6.10 1 1 1 1 1   888    0 16.96 85.37 ----- 7.2 7.2 127.3 16.6 30.5 -26.7 30.0 -26.1 29.3 -24.3 29.8 -26.0
2025-12-24T11:10:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:10:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:10:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.381667
2025-12-24T11:10:15.842 [DEBUG] [Thread-301053] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:10:15.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:10:15.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:10:15.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:10:15.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:10:15.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:10:15.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:10:04', tmtdew=16.4, humidity=33.86, cloud=0.0, wind=9.58, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:09:36.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:10:15.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:10:15.941 [DEBUG] [Thread-301056] [transport.py] [_log()] starting thread (client mode): 0xf5743f10
2025-12-24T11:10:15.941 [DEBUG] [Thread-301056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:10:15.958 [DEBUG] [Thread-301056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:10:15.958 [INFO] [Thread-301056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:10:15.965 [DEBUG] [Thread-301056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] client lang: <none>
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] server lang: <none>
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] kex follows: False
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:10:15.966 [DEBUG] [Thread-301056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:10:15.967 [DEBUG] [Thread-301056] [transport.py] [_log()] Compression: none
2025-12-24T11:10:15.967 [DEBUG] [Thread-301056] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:10:16.025 [DEBUG] [Thread-301056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:10:16.025 [DEBUG] [Thread-301056] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:10:16.025 [DEBUG] [Thread-301056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:10:16.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:10:16.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:10:16.081 [DEBUG] [Thread-301056] [transport.py] [_log()] userauth is OK
2025-12-24T11:10:16.082 [DEBUG] [Thread-301056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:10:16.082 [DEBUG] [Thread-301056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:10:16.082 [DEBUG] [Thread-301056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:10:16.082 [DEBUG] [Thread-301056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:10:16.101 [INFO] [Thread-301056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:10:16.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:10:16.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:10:16.962 [DEBUG] [Thread-301056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:10:16.962 [DEBUG] [Thread-301056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:10:17.001 [DEBUG] [Thread-301056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:10:17.001 [DEBUG] [Thread-301056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:10:17.009 [DEBUG] [Thread-301056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:10:17.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:10:17.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:10:17.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:10:17.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:10:17.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:10:17.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:10:17.048 [DEBUG] [Thread-301056] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:10:28.481 [DEBUG] [Thread-301058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:10:43.596 [DEBUG] [Thread-301059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:10:45.003 [DEBUG] [Thread-301060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:10:45.623 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:10:45.625 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:10:47.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:10:47.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:10:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:10:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 10, 37), 16.57, 33.8, 0.0, 12.65, 20.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:10:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:10:37
2025-12-24T11:10:48.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:10:48.491 [DEBUG] [Thread-301061] [transport.py] [_log()] starting thread (client mode): 0xf57709d0
2025-12-24T11:10:48.491 [DEBUG] [Thread-301061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:10:48.505 [DEBUG] [Thread-301061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:10:48.506 [INFO] [Thread-301061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:10:48.510 [DEBUG] [Thread-301061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:10:48.510 [DEBUG] [Thread-301061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] client lang: <none>
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] server lang: <none>
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] kex follows: False
2025-12-24T11:10:48.511 [DEBUG] [Thread-301061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:10:48.512 [DEBUG] [Thread-301061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:10:48.512 [DEBUG] [Thread-301061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:10:48.512 [DEBUG] [Thread-301061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:10:48.513 [DEBUG] [Thread-301061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:10:48.513 [DEBUG] [Thread-301061] [transport.py] [_log()] Compression: none
2025-12-24T11:10:48.513 [DEBUG] [Thread-301061] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:10:48.550 [DEBUG] [Thread-301061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:10:48.554 [DEBUG] [Thread-301061] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:10:48.556 [DEBUG] [Thread-301061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:10:48.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:10:48.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:10:48.561 [DEBUG] [Thread-301061] [transport.py] [_log()] userauth is OK
2025-12-24T11:10:48.561 [DEBUG] [Thread-301061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:10:48.562 [DEBUG] [Thread-301061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:10:48.562 [DEBUG] [Thread-301061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:10:48.562 [DEBUG] [Thread-301061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:10:48.588 [INFO] [Thread-301061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:10:48.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:10:49.184 [DEBUG] [Thread-301061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:10:49.185 [DEBUG] [Thread-301061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:10:49.195 [DEBUG] [Thread-301061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:10:49.226 [DEBUG] [Thread-301061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:10:49.226 [DEBUG] [Thread-301061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:10:49.230 [DEBUG] [Thread-301061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:10:49.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:10:49.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:10:49.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:10:49.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:10:49.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:10:49.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:10:49.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:10:49.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:10:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:10:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.382014 -999.00  +21.00   3.45     38   +6.40 1 1 1 1 1   888    0 17.26 84.01 ----- 3.5 3.5 73.2 7.8 30.5 -25.2 30.0 -25.0 29.5 -23.3 29.9 -24.7
2025-12-24T11:10:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:10:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:10:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.382014
2025-12-24T11:10:49.268 [DEBUG] [Thread-301061] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:10:49.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:10:49.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:10:49.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:10:49.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:10:49.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:10:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:10:37', tmtdew=16.57, humidity=33.8, cloud=0.0, wind=12.65, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:10:06.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:10:49.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:10:58.650 [DEBUG] [Thread-301064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:11:13.784 [DEBUG] [Thread-301065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:11:28.897 [DEBUG] [Thread-301066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:11:43.936 [DEBUG] [Thread-301067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:11:45.258 [DEBUG] [Thread-301068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:11:45.765 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:11:45.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:11:59.033 [DEBUG] [Thread-301069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:12:14.112 [DEBUG] [Thread-301070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:12:29.190 [DEBUG] [Thread-301071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:12:44.257 [DEBUG] [Thread-301072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:12:45.596 [DEBUG] [Thread-301073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:12:45.907 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:12:45.909 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:12:59.317 [DEBUG] [Thread-301074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:13:03.470 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T11:13:14.404 [DEBUG] [Thread-301075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:13:29.469 [DEBUG] [Thread-301076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:13:33.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:13:33.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:13:33.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:13:34.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 13, 22), 16.26, 34.14, 0.0, 12.14, 20.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:13:34.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:13:22
2025-12-24T11:13:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:13:34.758 [DEBUG] [Thread-301077] [transport.py] [_log()] starting thread (client mode): 0xf5700e50
2025-12-24T11:13:34.759 [DEBUG] [Thread-301077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:13:34.772 [DEBUG] [Thread-301077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:13:34.773 [INFO] [Thread-301077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:13:34.778 [DEBUG] [Thread-301077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:13:34.779 [DEBUG] [Thread-301077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:13:34.779 [DEBUG] [Thread-301077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:13:34.779 [DEBUG] [Thread-301077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:13:34.779 [DEBUG] [Thread-301077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:13:34.779 [DEBUG] [Thread-301077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:13:34.779 [DEBUG] [Thread-301077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:13:34.779 [DEBUG] [Thread-301077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:13:34.779 [DEBUG] [Thread-301077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:13:34.780 [DEBUG] [Thread-301077] [transport.py] [_log()] client lang: <none>
2025-12-24T11:13:34.780 [DEBUG] [Thread-301077] [transport.py] [_log()] server lang: <none>
2025-12-24T11:13:34.780 [DEBUG] [Thread-301077] [transport.py] [_log()] kex follows: False
2025-12-24T11:13:34.780 [DEBUG] [Thread-301077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:13:34.781 [DEBUG] [Thread-301077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:13:34.781 [DEBUG] [Thread-301077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:13:34.781 [DEBUG] [Thread-301077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:13:34.781 [DEBUG] [Thread-301077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:13:34.782 [DEBUG] [Thread-301077] [transport.py] [_log()] Compression: none
2025-12-24T11:13:34.782 [DEBUG] [Thread-301077] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:13:34.819 [DEBUG] [Thread-301077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:13:34.824 [DEBUG] [Thread-301077] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:13:34.826 [DEBUG] [Thread-301077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:13:34.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:13:34.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:13:34.832 [DEBUG] [Thread-301077] [transport.py] [_log()] userauth is OK
2025-12-24T11:13:34.832 [DEBUG] [Thread-301077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:13:34.832 [DEBUG] [Thread-301077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:13:34.832 [DEBUG] [Thread-301077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:13:34.832 [DEBUG] [Thread-301077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:13:34.862 [INFO] [Thread-301077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:13:34.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:13:35.520 [DEBUG] [Thread-301077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:13:35.520 [DEBUG] [Thread-301077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:13:35.521 [DEBUG] [Thread-301077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:13:35.561 [DEBUG] [Thread-301077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:13:35.561 [DEBUG] [Thread-301077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:13:35.564 [DEBUG] [Thread-301077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:13:35.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:13:35.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:13:35.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:13:35.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:13:35.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:13:35.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:13:35.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:13:35.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:13:35.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:13:35.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.384098 -999.00  +21.30  13.77     37   +6.20 1 1 1 1 1   888    0 16.04 49.03 ----- 13.8 13.8 112.0 18.6 30.2 -28.9 30.0 -26.3 29.3 -25.0 29.9 -25.8
2025-12-24T11:13:35.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:13:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:13:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.384098
2025-12-24T11:13:35.604 [DEBUG] [Thread-301077] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:13:35.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:13:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:13:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:13:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:13:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:13:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:13:22', tmtdew=16.26, humidity=34.14, cloud=0.0, wind=12.14, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:13:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:13:35.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:13:35.720 [DEBUG] [Thread-301080] [transport.py] [_log()] starting thread (client mode): 0xf57727d0
2025-12-24T11:13:35.720 [DEBUG] [Thread-301080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:13:35.735 [DEBUG] [Thread-301080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:13:35.736 [INFO] [Thread-301080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:13:35.743 [DEBUG] [Thread-301080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:13:35.743 [DEBUG] [Thread-301080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:13:35.743 [DEBUG] [Thread-301080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:13:35.743 [DEBUG] [Thread-301080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:13:35.743 [DEBUG] [Thread-301080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] client lang: <none>
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] server lang: <none>
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] kex follows: False
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:13:35.744 [DEBUG] [Thread-301080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:13:35.745 [DEBUG] [Thread-301080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:13:35.745 [DEBUG] [Thread-301080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:13:35.745 [DEBUG] [Thread-301080] [transport.py] [_log()] Compression: none
2025-12-24T11:13:35.745 [DEBUG] [Thread-301080] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:13:35.801 [DEBUG] [Thread-301080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:13:35.802 [DEBUG] [Thread-301080] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:13:35.803 [DEBUG] [Thread-301080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:13:35.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:13:35.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:13:35.857 [DEBUG] [Thread-301080] [transport.py] [_log()] userauth is OK
2025-12-24T11:13:35.857 [DEBUG] [Thread-301080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:13:35.857 [DEBUG] [Thread-301080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:13:35.857 [DEBUG] [Thread-301080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:13:35.857 [DEBUG] [Thread-301080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:13:35.871 [INFO] [Thread-301080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:13:35.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:13:35.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:13:36.721 [DEBUG] [Thread-301080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:13:36.721 [DEBUG] [Thread-301080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:13:36.759 [DEBUG] [Thread-301080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:13:36.760 [DEBUG] [Thread-301080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:13:36.768 [DEBUG] [Thread-301080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:13:36.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:13:36.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:13:36.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:13:36.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:13:36.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:13:36.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:13:36.804 [DEBUG] [Thread-301080] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:13:44.528 [DEBUG] [Thread-301082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:13:45.855 [DEBUG] [Thread-301083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:13:46.049 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:13:46.051 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:13:59.639 [DEBUG] [Thread-301084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:14:06.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:14:06.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:14:06.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:14:08.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 13, 55), 16.51, 33.58, 0.0, 5.49, 20.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:14:08.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:13:55
2025-12-24T11:14:08.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:14:08.656 [DEBUG] [Thread-301085] [transport.py] [_log()] starting thread (client mode): 0xf5771a80
2025-12-24T11:14:08.656 [DEBUG] [Thread-301085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:14:08.666 [DEBUG] [Thread-301085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:14:08.666 [INFO] [Thread-301085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] client lang: <none>
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] server lang: <none>
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] kex follows: False
2025-12-24T11:14:08.670 [DEBUG] [Thread-301085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:14:08.672 [DEBUG] [Thread-301085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:14:08.672 [DEBUG] [Thread-301085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:14:08.672 [DEBUG] [Thread-301085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:14:08.672 [DEBUG] [Thread-301085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:14:08.672 [DEBUG] [Thread-301085] [transport.py] [_log()] Compression: none
2025-12-24T11:14:08.672 [DEBUG] [Thread-301085] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:14:08.707 [DEBUG] [Thread-301085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:14:08.710 [DEBUG] [Thread-301085] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:14:08.712 [DEBUG] [Thread-301085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:14:08.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:14:08.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:14:08.717 [DEBUG] [Thread-301085] [transport.py] [_log()] userauth is OK
2025-12-24T11:14:08.717 [DEBUG] [Thread-301085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:14:08.717 [DEBUG] [Thread-301085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:14:08.717 [DEBUG] [Thread-301085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:14:08.717 [DEBUG] [Thread-301085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:14:08.744 [INFO] [Thread-301085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:14:08.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:14:09.428 [DEBUG] [Thread-301085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:14:09.428 [DEBUG] [Thread-301085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:14:09.439 [DEBUG] [Thread-301085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:14:09.469 [DEBUG] [Thread-301085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:14:09.469 [DEBUG] [Thread-301085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:14:09.472 [DEBUG] [Thread-301085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:14:09.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:14:09.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:14:09.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:14:09.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:14:09.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:14:09.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:14:09.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:14:09.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:14:09.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:14:09.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.384445 -999.00  +21.00  13.58     37   +6.10 1 1 1 1 1   888    0 15.96 44.54 ----- 13.6 13.6 115.5 17.5 30.2 -25.9 30.0 -26.1 29.3 -25.2 29.9 -25.5
2025-12-24T11:14:09.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:14:09.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:14:09.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.384445
2025-12-24T11:14:09.504 [DEBUG] [Thread-301085] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:14:09.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:14:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:14:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:14:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:14:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:14:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:13:55', tmtdew=16.51, humidity=33.58, cloud=0.0, wind=5.49, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:13:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:14:09.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:14:09.623 [DEBUG] [Thread-301088] [transport.py] [_log()] starting thread (client mode): 0xf574c520
2025-12-24T11:14:09.623 [DEBUG] [Thread-301088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:14:09.638 [DEBUG] [Thread-301088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:14:09.638 [INFO] [Thread-301088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:14:09.646 [DEBUG] [Thread-301088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:14:09.646 [DEBUG] [Thread-301088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:14:09.646 [DEBUG] [Thread-301088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:14:09.646 [DEBUG] [Thread-301088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:14:09.646 [DEBUG] [Thread-301088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] client lang: <none>
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] server lang: <none>
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] kex follows: False
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] Compression: none
2025-12-24T11:14:09.647 [DEBUG] [Thread-301088] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:14:09.705 [DEBUG] [Thread-301088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:14:09.706 [DEBUG] [Thread-301088] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:14:09.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:14:09.707 [DEBUG] [Thread-301088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:14:09.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:14:09.765 [DEBUG] [Thread-301088] [transport.py] [_log()] userauth is OK
2025-12-24T11:14:09.766 [DEBUG] [Thread-301088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:14:09.766 [DEBUG] [Thread-301088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:14:09.766 [DEBUG] [Thread-301088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:14:09.766 [DEBUG] [Thread-301088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:14:09.784 [INFO] [Thread-301088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:14:09.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:14:09.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:14:10.600 [DEBUG] [Thread-301088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:14:10.600 [DEBUG] [Thread-301088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:14:10.648 [DEBUG] [Thread-301088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:14:10.648 [DEBUG] [Thread-301088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:14:10.657 [DEBUG] [Thread-301088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:14:10.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:14:10.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:14:10.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:14:10.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:14:10.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:14:10.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:14:10.695 [DEBUG] [Thread-301088] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:14:14.678 [DEBUG] [Thread-301090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:14:29.723 [DEBUG] [Thread-301091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:14:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:14:40.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:14:40.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:14:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 14, 28), 16.53, 33.51, 0.0, 6.02, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:14:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:14:28
2025-12-24T11:14:41.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:14:41.966 [DEBUG] [Thread-301092] [transport.py] [_log()] starting thread (client mode): 0xf5771030
2025-12-24T11:14:41.966 [DEBUG] [Thread-301092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:14:41.975 [DEBUG] [Thread-301092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:14:41.975 [INFO] [Thread-301092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] client lang: <none>
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] server lang: <none>
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] kex follows: False
2025-12-24T11:14:41.980 [DEBUG] [Thread-301092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:14:41.981 [DEBUG] [Thread-301092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:14:41.981 [DEBUG] [Thread-301092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:14:41.981 [DEBUG] [Thread-301092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:14:41.981 [DEBUG] [Thread-301092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:14:41.981 [DEBUG] [Thread-301092] [transport.py] [_log()] Compression: none
2025-12-24T11:14:41.981 [DEBUG] [Thread-301092] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:14:42.012 [DEBUG] [Thread-301092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:14:42.016 [DEBUG] [Thread-301092] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:14:42.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:14:42.018 [DEBUG] [Thread-301092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:14:42.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:14:42.020 [DEBUG] [Thread-301092] [transport.py] [_log()] userauth is OK
2025-12-24T11:14:42.020 [DEBUG] [Thread-301092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:14:42.020 [DEBUG] [Thread-301092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:14:42.020 [DEBUG] [Thread-301092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:14:42.020 [DEBUG] [Thread-301092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:14:42.041 [INFO] [Thread-301092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:14:42.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:14:42.667 [DEBUG] [Thread-301092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:14:42.667 [DEBUG] [Thread-301092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:14:42.668 [DEBUG] [Thread-301092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:14:42.708 [DEBUG] [Thread-301092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:14:42.709 [DEBUG] [Thread-301092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:14:42.711 [DEBUG] [Thread-301092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:14:42.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:14:42.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:14:42.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:14:42.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:14:42.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:14:42.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:14:42.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:14:42.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:14:42.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:14:42.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.384792 -999.00  +20.90  15.07     38   +6.00 1 1 1 1 1   888    0 15.82 39.12 ----- 15.1 15.1 106.6 20.4 30.1 -26.3 29.9 -25.8 29.2 -25.3 29.7 -25.3
2025-12-24T11:14:42.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:14:42.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:14:42.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.384792
2025-12-24T11:14:42.739 [DEBUG] [Thread-301092] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:14:42.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:14:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:14:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:14:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:14:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:14:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:14:28', tmtdew=16.53, humidity=33.51, cloud=0.0, wind=6.02, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:14:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:14:42.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:14:42.843 [DEBUG] [Thread-301095] [transport.py] [_log()] starting thread (client mode): 0xf5772e60
2025-12-24T11:14:42.843 [DEBUG] [Thread-301095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:14:42.859 [DEBUG] [Thread-301095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:14:42.859 [INFO] [Thread-301095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:14:42.866 [DEBUG] [Thread-301095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] client lang: <none>
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] server lang: <none>
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] kex follows: False
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] Compression: none
2025-12-24T11:14:42.867 [DEBUG] [Thread-301095] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:14:42.924 [DEBUG] [Thread-301095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:14:42.924 [DEBUG] [Thread-301095] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:14:42.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:14:42.924 [DEBUG] [Thread-301095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:14:42.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:14:42.985 [DEBUG] [Thread-301095] [transport.py] [_log()] userauth is OK
2025-12-24T11:14:42.985 [DEBUG] [Thread-301095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:14:42.985 [DEBUG] [Thread-301095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:14:42.985 [DEBUG] [Thread-301095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:14:42.985 [DEBUG] [Thread-301095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:14:42.999 [INFO] [Thread-301095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:14:42.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:14:43.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:14:43.828 [DEBUG] [Thread-301095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:14:43.828 [DEBUG] [Thread-301095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:14:43.876 [DEBUG] [Thread-301095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:14:43.876 [DEBUG] [Thread-301095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:14:43.885 [DEBUG] [Thread-301095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:14:43.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:14:43.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:14: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
2025-12-24T11:14:43.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:14:43.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:14:43.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:14:43.922 [DEBUG] [Thread-301095] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:14:44.781 [DEBUG] [Thread-301097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:14:46.186 [DEBUG] [Thread-301098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:14:46.193 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:14:46.194 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:14:59.915 [DEBUG] [Thread-301099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:15:13.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:15:13.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:15:13.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
2025-12-24T11:15:14.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 15, 1), 16.46, 33.68, 0.0, 5.75, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:15:14.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:15:01
2025-12-24T11:15:14.980 [DEBUG] [Thread-301100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:15:15.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:15:15.300 [DEBUG] [Thread-301101] [transport.py] [_log()] starting thread (client mode): 0xf57bf220
2025-12-24T11:15:15.300 [DEBUG] [Thread-301101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:15:15.314 [DEBUG] [Thread-301101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:15:15.314 [INFO] [Thread-301101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] client lang: <none>
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] server lang: <none>
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] kex follows: False
2025-12-24T11:15:15.318 [DEBUG] [Thread-301101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:15:15.319 [DEBUG] [Thread-301101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:15:15.319 [DEBUG] [Thread-301101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:15:15.319 [DEBUG] [Thread-301101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:15:15.319 [DEBUG] [Thread-301101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:15:15.319 [DEBUG] [Thread-301101] [transport.py] [_log()] Compression: none
2025-12-24T11:15:15.319 [DEBUG] [Thread-301101] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:15:15.354 [DEBUG] [Thread-301101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:15:15.359 [DEBUG] [Thread-301101] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:15:15.361 [DEBUG] [Thread-301101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:15:15.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:15:15.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:15:15.368 [DEBUG] [Thread-301101] [transport.py] [_log()] userauth is OK
2025-12-24T11:15:15.368 [DEBUG] [Thread-301101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:15:15.368 [DEBUG] [Thread-301101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:15:15.368 [DEBUG] [Thread-301101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:15:15.368 [DEBUG] [Thread-301101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:15:15.396 [INFO] [Thread-301101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:15:15.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:15:16.051 [DEBUG] [Thread-301101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:15:16.060 [DEBUG] [Thread-301101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:15:16.062 [DEBUG] [Thread-301101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:15:16.093 [DEBUG] [Thread-301101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:15:16.093 [DEBUG] [Thread-301101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:15:16.096 [DEBUG] [Thread-301101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:15:16.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:15:16.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:15:16.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:15:16.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:15:16.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:15:16.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:15:16.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:15:16.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:15:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:15:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.385487 -999.00  +20.50   8.86     39   +6.10 1 1 1 1 1   888    0 15.83 31.18 ----- 8.9 8.9 72.2 17.0 29.7 -26.7 29.8 -26.8 29.1 -24.7 29.5 -25.1
2025-12-24T11:15:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:15:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:15:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.385487
2025-12-24T11:15:16.131 [DEBUG] [Thread-301101] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:15:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:15:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:15:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:15:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:15:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:15:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:15:01', tmtdew=16.46, humidity=33.68, cloud=0.0, wind=5.75, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:15:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:15:16.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:15:16.248 [DEBUG] [Thread-301104] [transport.py] [_log()] starting thread (client mode): 0xf5770910
2025-12-24T11:15:16.248 [DEBUG] [Thread-301104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:15:16.263 [DEBUG] [Thread-301104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:15:16.263 [INFO] [Thread-301104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:15:16.270 [DEBUG] [Thread-301104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] client lang: <none>
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] server lang: <none>
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] kex follows: False
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:15:16.271 [DEBUG] [Thread-301104] [transport.py] [_log()] Compression: none
2025-12-24T11:15:16.272 [DEBUG] [Thread-301104] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:15:16.333 [DEBUG] [Thread-301104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:15:16.334 [DEBUG] [Thread-301104] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:15:16.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:15:16.335 [DEBUG] [Thread-301104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:15:16.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:15:16.390 [DEBUG] [Thread-301104] [transport.py] [_log()] userauth is OK
2025-12-24T11:15:16.390 [DEBUG] [Thread-301104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:15:16.390 [DEBUG] [Thread-301104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:15:16.390 [DEBUG] [Thread-301104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:15:16.390 [DEBUG] [Thread-301104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:15:16.408 [INFO] [Thread-301104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:15:16.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:15:16.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:15:17.298 [DEBUG] [Thread-301104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:15:17.298 [DEBUG] [Thread-301104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:15:17.345 [DEBUG] [Thread-301104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:15:17.345 [DEBUG] [Thread-301104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:15:17.353 [DEBUG] [Thread-301104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:15:17.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:15:17.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')
2025-12-24T11:15:17.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:15:17.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:15:17.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:15:17.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:15:17.392 [DEBUG] [Thread-301104] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:15:30.085 [DEBUG] [Thread-301106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:15:45.259 [DEBUG] [Thread-301107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:15:46.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:15:46.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:15:46.420 [DEBUG] [Thread-301108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:15:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:15:47.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:15:47.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:15:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 15, 35), 16.08, 34.64, 0.0, 7.34, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:15:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:15:35
2025-12-24T11:15:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:15:48.992 [DEBUG] [Thread-301109] [transport.py] [_log()] starting thread (client mode): 0xf57bf460
2025-12-24T11:15:48.993 [DEBUG] [Thread-301109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:15:49.006 [DEBUG] [Thread-301109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:15:49.007 [INFO] [Thread-301109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] client lang: <none>
2025-12-24T11:15:49.012 [DEBUG] [Thread-301109] [transport.py] [_log()] server lang: <none>
2025-12-24T11:15:49.013 [DEBUG] [Thread-301109] [transport.py] [_log()] kex follows: False
2025-12-24T11:15:49.013 [DEBUG] [Thread-301109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:15:49.013 [DEBUG] [Thread-301109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:15:49.013 [DEBUG] [Thread-301109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:15:49.014 [DEBUG] [Thread-301109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:15:49.014 [DEBUG] [Thread-301109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:15:49.014 [DEBUG] [Thread-301109] [transport.py] [_log()] Compression: none
2025-12-24T11:15:49.014 [DEBUG] [Thread-301109] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:15:49.052 [DEBUG] [Thread-301109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:15:49.058 [DEBUG] [Thread-301109] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:15:49.060 [DEBUG] [Thread-301109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:15:49.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:15:49.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:15:49.065 [DEBUG] [Thread-301109] [transport.py] [_log()] userauth is OK
2025-12-24T11:15:49.066 [DEBUG] [Thread-301109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:15:49.066 [DEBUG] [Thread-301109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:15:49.066 [DEBUG] [Thread-301109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:15:49.066 [DEBUG] [Thread-301109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:15:49.106 [INFO] [Thread-301109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:15:49.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:15:49.687 [DEBUG] [Thread-301109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:15:49.687 [DEBUG] [Thread-301109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:15:49.688 [DEBUG] [Thread-301109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:15:49.729 [DEBUG] [Thread-301109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:15:49.729 [DEBUG] [Thread-301109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:15:49.733 [DEBUG] [Thread-301109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:15:49.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:15:49.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:15:49.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:15:49.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:15:49.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:15:49.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:15:49.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:15:49.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:15:49.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:15:49.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.385834 -999.00  +20.70  12.69     38   +6.10 1 1 1 1 1   888    0 15.67 25.51 ----- 12.7 12.7 113.8 16.6 29.9 -24.9 29.7 -25.3 29.3 -23.6 29.6 -25.7
2025-12-24T11:15:49.762 [DEBUG] [Thread-301109] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:15:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:15:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:15:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.385834
2025-12-24T11:15:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:15:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:15:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:15:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:15:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:15:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:15:35', tmtdew=16.08, humidity=34.64, cloud=0.0, wind=7.34, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:15:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:15:49.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:15:49.879 [DEBUG] [Thread-301112] [transport.py] [_log()] starting thread (client mode): 0xf5773790
2025-12-24T11:15:49.879 [DEBUG] [Thread-301112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:15:49.893 [DEBUG] [Thread-301112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:15:49.894 [INFO] [Thread-301112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:15:49.901 [DEBUG] [Thread-301112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:15:49.902 [DEBUG] [Thread-301112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:15:49.902 [DEBUG] [Thread-301112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:15:49.902 [DEBUG] [Thread-301112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:15:49.902 [DEBUG] [Thread-301112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:15:49.902 [DEBUG] [Thread-301112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:15:49.902 [DEBUG] [Thread-301112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:15:49.902 [DEBUG] [Thread-301112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:15:49.903 [DEBUG] [Thread-301112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:15:49.903 [DEBUG] [Thread-301112] [transport.py] [_log()] client lang: <none>
2025-12-24T11:15:49.903 [DEBUG] [Thread-301112] [transport.py] [_log()] server lang: <none>
2025-12-24T11:15:49.903 [DEBUG] [Thread-301112] [transport.py] [_log()] kex follows: False
2025-12-24T11:15:49.903 [DEBUG] [Thread-301112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:15:49.903 [DEBUG] [Thread-301112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:15:49.903 [DEBUG] [Thread-301112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:15:49.903 [DEBUG] [Thread-301112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:15:49.904 [DEBUG] [Thread-301112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:15:49.904 [DEBUG] [Thread-301112] [transport.py] [_log()] Compression: none
2025-12-24T11:15:49.904 [DEBUG] [Thread-301112] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:15:49.966 [DEBUG] [Thread-301112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:15:49.967 [DEBUG] [Thread-301112] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:15:49.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:15:49.968 [DEBUG] [Thread-301112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:15:49.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:15:50.025 [DEBUG] [Thread-301112] [transport.py] [_log()] userauth is OK
2025-12-24T11:15:50.026 [DEBUG] [Thread-301112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:15:50.026 [DEBUG] [Thread-301112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:15:50.026 [DEBUG] [Thread-301112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:15:50.026 [DEBUG] [Thread-301112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:15:50.045 [INFO] [Thread-301112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:15:50.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:15:50.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:15:50.913 [DEBUG] [Thread-301112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:15:50.913 [DEBUG] [Thread-301112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:15:50.961 [DEBUG] [Thread-301112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:15:50.961 [DEBUG] [Thread-301112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:15:50.970 [DEBUG] [Thread-301112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:15:50.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:15:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:15:50.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:15:51.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:15:51.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:15:51.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:15:51.009 [DEBUG] [Thread-301112] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:16:00.317 [DEBUG] [Thread-301114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:16:15.473 [DEBUG] [Thread-301115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:16:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:16:21.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:16:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:16:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 16, 8), 16.12, 34.61, 0.0, 9.67, 20.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:16:22.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:16:08
2025-12-24T11:16:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:16:22.726 [DEBUG] [Thread-301116] [transport.py] [_log()] starting thread (client mode): 0xf5773640
2025-12-24T11:16:22.727 [DEBUG] [Thread-301116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:16:22.738 [DEBUG] [Thread-301116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:16:22.738 [INFO] [Thread-301116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] client lang: <none>
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] server lang: <none>
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] kex follows: False
2025-12-24T11:16:22.744 [DEBUG] [Thread-301116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:16:22.745 [DEBUG] [Thread-301116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:16:22.745 [DEBUG] [Thread-301116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:16:22.745 [DEBUG] [Thread-301116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:16:22.745 [DEBUG] [Thread-301116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:16:22.745 [DEBUG] [Thread-301116] [transport.py] [_log()] Compression: none
2025-12-24T11:16:22.745 [DEBUG] [Thread-301116] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:16:22.788 [DEBUG] [Thread-301116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:16:22.794 [DEBUG] [Thread-301116] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:16:22.796 [DEBUG] [Thread-301116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:16:22.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:16:22.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:16:22.801 [DEBUG] [Thread-301116] [transport.py] [_log()] userauth is OK
2025-12-24T11:16:22.802 [DEBUG] [Thread-301116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:16:22.802 [DEBUG] [Thread-301116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:16:22.802 [DEBUG] [Thread-301116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:16:22.802 [DEBUG] [Thread-301116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:16:22.841 [INFO] [Thread-301116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:16:22.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:16:23.510 [DEBUG] [Thread-301116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:16:23.510 [DEBUG] [Thread-301116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:16:23.510 [DEBUG] [Thread-301116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:16:23.550 [DEBUG] [Thread-301116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:16:23.551 [DEBUG] [Thread-301116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:16:23.553 [DEBUG] [Thread-301116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:16:23.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:16:23.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:16:23.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:16:23.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:16:23.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:16:23.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:16:23.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:16:23.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:16:23.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:16:23.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.386181 -999.00  +20.40   5.21     39   +6.00 1 1 1 1 1   888    0 15.34 25.46 ----- 5.2 5.2 134.9 18.0 29.9 -26.7 29.8 -26.8 29.2 -24.7 29.6 -26.1
2025-12-24T11:16:23.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:16:23.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:16:23.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.386181
2025-12-24T11:16:23.676 [DEBUG] [Thread-301116] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:16:23.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:16:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:16:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:16:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:16:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:16:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:16:08', tmtdew=16.12, humidity=34.61, cloud=0.0, wind=9.67, temperature=20.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:16:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:16:23.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:16:23.786 [DEBUG] [Thread-301119] [transport.py] [_log()] starting thread (client mode): 0xf5772e30
2025-12-24T11:16:23.786 [DEBUG] [Thread-301119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:16:23.800 [DEBUG] [Thread-301119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:16:23.800 [INFO] [Thread-301119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:16:23.807 [DEBUG] [Thread-301119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:16:23.807 [DEBUG] [Thread-301119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] client lang: <none>
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] server lang: <none>
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] kex follows: False
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] Compression: none
2025-12-24T11:16:23.808 [DEBUG] [Thread-301119] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:16:23.864 [DEBUG] [Thread-301119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:16:23.864 [DEBUG] [Thread-301119] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:16:23.864 [DEBUG] [Thread-301119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:16:23.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:16:23.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:16:23.921 [DEBUG] [Thread-301119] [transport.py] [_log()] userauth is OK
2025-12-24T11:16:23.921 [DEBUG] [Thread-301119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:16:23.921 [DEBUG] [Thread-301119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:16:23.921 [DEBUG] [Thread-301119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:16:23.921 [DEBUG] [Thread-301119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:16:23.938 [INFO] [Thread-301119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:16:23.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:16:23.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:16:24.760 [DEBUG] [Thread-301119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:16:24.761 [DEBUG] [Thread-301119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:16:24.809 [DEBUG] [Thread-301119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:16:24.809 [DEBUG] [Thread-301119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:16:24.818 [DEBUG] [Thread-301119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:16:24.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:16:24.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:16:24.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:16:24.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:16:24.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:16:24.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:16:24.858 [DEBUG] [Thread-301119] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:16:30.555 [DEBUG] [Thread-301121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:16:45.660 [DEBUG] [Thread-301122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:16:46.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:16:46.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:16:46.667 [DEBUG] [Thread-301123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:16:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:16:54.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:16:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:16:56.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 16, 41), 16.23, 34.16, 0.0, 11.58, 20.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:16:56.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:16:41
2025-12-24T11:16:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:16:56.697 [DEBUG] [Thread-301124] [transport.py] [_log()] starting thread (client mode): 0xf572dc60
2025-12-24T11:16:56.698 [DEBUG] [Thread-301124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:16:56.703 [DEBUG] [Thread-301124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:16:56.703 [INFO] [Thread-301124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] client lang: <none>
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] server lang: <none>
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] kex follows: False
2025-12-24T11:16:56.707 [DEBUG] [Thread-301124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:16:56.708 [DEBUG] [Thread-301124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:16:56.708 [DEBUG] [Thread-301124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:16:56.708 [DEBUG] [Thread-301124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:16:56.708 [DEBUG] [Thread-301124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:16:56.708 [DEBUG] [Thread-301124] [transport.py] [_log()] Compression: none
2025-12-24T11:16:56.708 [DEBUG] [Thread-301124] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:16:56.745 [DEBUG] [Thread-301124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:16:56.749 [DEBUG] [Thread-301124] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:16:56.751 [DEBUG] [Thread-301124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:16:56.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:16:56.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:16:56.756 [DEBUG] [Thread-301124] [transport.py] [_log()] userauth is OK
2025-12-24T11:16:56.756 [DEBUG] [Thread-301124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:16:56.756 [DEBUG] [Thread-301124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:16:56.756 [DEBUG] [Thread-301124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:16:56.756 [DEBUG] [Thread-301124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:16:56.784 [INFO] [Thread-301124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:16:56.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:16:57.404 [DEBUG] [Thread-301124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:16:57.404 [DEBUG] [Thread-301124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:16:57.404 [DEBUG] [Thread-301124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:16:57.445 [DEBUG] [Thread-301124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:16:57.445 [DEBUG] [Thread-301124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:16:57.447 [DEBUG] [Thread-301124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:16:57.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:16:57.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:16:57.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:16:57.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:16:57.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:16:57.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:16:57.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:16:57.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:16:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:16:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.386528 -999.00  +20.50   7.60     38   +6.00 1 1 1 1 1   888    0 15.51 23.24 ----- 7.6 7.6 96.9 18.3 30.0 -25.3 29.8 -26.3 29.1 -24.9 29.6 -24.9
2025-12-24T11:16:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:16:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:16:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.386528
2025-12-24T11:16:57.483 [DEBUG] [Thread-301124] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:16:57.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:16:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:16:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:16:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:16:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:16:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:16:41', tmtdew=16.23, humidity=34.16, cloud=0.0, wind=11.58, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:16:36.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:16:57.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:16:57.576 [DEBUG] [Thread-301127] [transport.py] [_log()] starting thread (client mode): 0xf572fb50
2025-12-24T11:16:57.576 [DEBUG] [Thread-301127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:16:57.590 [DEBUG] [Thread-301127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:16:57.590 [INFO] [Thread-301127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] client lang: <none>
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] server lang: <none>
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] kex follows: False
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] Compression: none
2025-12-24T11:16:57.598 [DEBUG] [Thread-301127] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:16:57.656 [DEBUG] [Thread-301127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:16:57.656 [DEBUG] [Thread-301127] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:16:57.656 [DEBUG] [Thread-301127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:16:57.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:16:57.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:16:57.713 [DEBUG] [Thread-301127] [transport.py] [_log()] userauth is OK
2025-12-24T11:16:57.713 [DEBUG] [Thread-301127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:16:57.713 [DEBUG] [Thread-301127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:16:57.713 [DEBUG] [Thread-301127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:16:57.713 [DEBUG] [Thread-301127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:16:57.727 [INFO] [Thread-301127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:16:57.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:16:57.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:16:58.553 [DEBUG] [Thread-301127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:16:58.554 [DEBUG] [Thread-301127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:16:58.601 [DEBUG] [Thread-301127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:16:58.601 [DEBUG] [Thread-301127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:16:58.611 [DEBUG] [Thread-301127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:16:58.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:16:58.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')
2025-12-24T11:16:58.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:16:58.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:16:58.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:16:58.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:16:58.649 [DEBUG] [Thread-301127] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:17:00.728 [DEBUG] [Thread-301129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:17:15.825 [DEBUG] [Thread-301130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:17:28.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:17:28.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:17:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:17:29.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 17, 14), 16.04, 34.54, 0.0, 12.71, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:17:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:17:14
2025-12-24T11:17:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:17:29.934 [DEBUG] [Thread-301131] [transport.py] [_log()] starting thread (client mode): 0xf572d0c0
2025-12-24T11:17:29.935 [DEBUG] [Thread-301131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:17:29.945 [DEBUG] [Thread-301131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:17:29.945 [INFO] [Thread-301131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] client lang: <none>
2025-12-24T11:17:29.949 [DEBUG] [Thread-301131] [transport.py] [_log()] server lang: <none>
2025-12-24T11:17:29.950 [DEBUG] [Thread-301131] [transport.py] [_log()] kex follows: False
2025-12-24T11:17:29.950 [DEBUG] [Thread-301131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:17:29.950 [DEBUG] [Thread-301131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:17:29.950 [DEBUG] [Thread-301131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:17:29.950 [DEBUG] [Thread-301131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:17:29.950 [DEBUG] [Thread-301131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:17:29.951 [DEBUG] [Thread-301131] [transport.py] [_log()] Compression: none
2025-12-24T11:17:29.951 [DEBUG] [Thread-301131] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:17:29.981 [DEBUG] [Thread-301131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:17:29.985 [DEBUG] [Thread-301131] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:17:29.986 [DEBUG] [Thread-301131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:17:29.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:17:29.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:17:29.990 [DEBUG] [Thread-301131] [transport.py] [_log()] userauth is OK
2025-12-24T11:17:29.990 [DEBUG] [Thread-301131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:17:29.991 [DEBUG] [Thread-301131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:17:29.991 [DEBUG] [Thread-301131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:17:29.991 [DEBUG] [Thread-301131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:17:30.010 [INFO] [Thread-301131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:17:30.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:17:30.662 [DEBUG] [Thread-301131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:17:30.662 [DEBUG] [Thread-301131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:17:30.663 [DEBUG] [Thread-301131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:17:30.704 [DEBUG] [Thread-301131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:17:30.704 [DEBUG] [Thread-301131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:17:30.706 [DEBUG] [Thread-301131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:17:30.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:17:30.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:17:30.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:17:30.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:17:30.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:17:30.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:17:30.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:17:30.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:17:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:17:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.386876 -999.00  +20.60   5.61     38   +6.00 1 1 1 1 1   888    0 15.36 22.00 ----- 5.6 5.6 67.9 6.8 30.1 -25.5 29.8 -25.7 29.3 -24.2 29.7 -24.9
2025-12-24T11:17:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:17:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:17:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.386876
2025-12-24T11:17:30.740 [DEBUG] [Thread-301131] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:17:30.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:17:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:17:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:17:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:17:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:17:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:17:14', tmtdew=16.04, humidity=34.54, cloud=0.0, wind=12.71, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:17:06.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:17:30.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:17:30.844 [DEBUG] [Thread-301134] [transport.py] [_log()] starting thread (client mode): 0xf57713c0
2025-12-24T11:17:30.844 [DEBUG] [Thread-301134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:17:30.858 [DEBUG] [Thread-301134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:17:30.859 [INFO] [Thread-301134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] client lang: <none>
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] server lang: <none>
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] kex follows: False
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:17:30.866 [DEBUG] [Thread-301134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:17:30.867 [DEBUG] [Thread-301134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:17:30.867 [DEBUG] [Thread-301134] [transport.py] [_log()] Compression: none
2025-12-24T11:17:30.867 [DEBUG] [Thread-301134] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:17:30.883 [DEBUG] [Thread-301136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:17:30.923 [DEBUG] [Thread-301134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:17:30.923 [DEBUG] [Thread-301134] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:17:30.924 [DEBUG] [Thread-301134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:17:30.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:17:30.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:17:30.981 [DEBUG] [Thread-301134] [transport.py] [_log()] userauth is OK
2025-12-24T11:17:30.981 [DEBUG] [Thread-301134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:17:30.981 [DEBUG] [Thread-301134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:17:30.981 [DEBUG] [Thread-301134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:17:30.981 [DEBUG] [Thread-301134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:17:30.999 [INFO] [Thread-301134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:17:30.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:17:31.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:17:31.831 [DEBUG] [Thread-301134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:17:31.832 [DEBUG] [Thread-301134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:17:31.879 [DEBUG] [Thread-301134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:17:31.880 [DEBUG] [Thread-301134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:17:31.888 [DEBUG] [Thread-301134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:17:31.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:17:31.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:17:31.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:17:31.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:17:31.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:17:31.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:17:31.921 [DEBUG] [Thread-301134] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:17:45.987 [DEBUG] [Thread-301137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:17:46.618 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:17:46.619 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:17:46.949 [DEBUG] [Thread-301138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:18:01.088 [DEBUG] [Thread-301139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:18:01.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:18:01.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:18:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:18:03.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 17, 47), 16.03, 34.92, 0.0, 7.52, 20.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:18:03.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:17:47
2025-12-24T11:18:03.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:18:03.631 [DEBUG] [Thread-301140] [transport.py] [_log()] starting thread (client mode): 0xf5770940
2025-12-24T11:18:03.632 [DEBUG] [Thread-301140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:18:03.646 [DEBUG] [Thread-301140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:18:03.646 [INFO] [Thread-301140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:18:03.650 [DEBUG] [Thread-301140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:18:03.650 [DEBUG] [Thread-301140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:18:03.650 [DEBUG] [Thread-301140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:18:03.650 [DEBUG] [Thread-301140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:18:03.650 [DEBUG] [Thread-301140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] client lang: <none>
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] server lang: <none>
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] kex follows: False
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] Compression: none
2025-12-24T11:18:03.651 [DEBUG] [Thread-301140] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:18:03.686 [DEBUG] [Thread-301140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:18:03.691 [DEBUG] [Thread-301140] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:18:03.692 [DEBUG] [Thread-301140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:18:03.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:18:03.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:18:03.698 [DEBUG] [Thread-301140] [transport.py] [_log()] userauth is OK
2025-12-24T11:18:03.698 [DEBUG] [Thread-301140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:18:03.699 [DEBUG] [Thread-301140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:18:03.699 [DEBUG] [Thread-301140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:18:03.699 [DEBUG] [Thread-301140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:18:03.739 [INFO] [Thread-301140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:18:03.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:18:04.400 [DEBUG] [Thread-301140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:18:04.401 [DEBUG] [Thread-301140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:18:04.402 [DEBUG] [Thread-301140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:18:04.442 [DEBUG] [Thread-301140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:18:04.442 [DEBUG] [Thread-301140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:18:04.445 [DEBUG] [Thread-301140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:18:04.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:18:04.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:18:04.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:18:04.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:18:04.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:18:04.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:18:04.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:18:04.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:18:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:18:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.387223 -999.00  +20.70   3.42     38   +6.10 1 1 1 1 1   888    0 15.37 18.43 ----- 3.4 3.4 136.0 5.3 30.3 -25.1 29.9 -25.1 29.5 -24.0 29.9 -24.2
2025-12-24T11:18:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:18:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:18:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.387223
2025-12-24T11:18:04.478 [DEBUG] [Thread-301140] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:18:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:18:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:18:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:18:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:18:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:18:04.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:17:47', tmtdew=16.03, humidity=34.92, cloud=0.0, wind=7.52, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:17:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:18:04.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:18:04.592 [DEBUG] [Thread-301143] [transport.py] [_log()] starting thread (client mode): 0xf572ca30
2025-12-24T11:18:04.592 [DEBUG] [Thread-301143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:18:04.606 [DEBUG] [Thread-301143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:18:04.606 [INFO] [Thread-301143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:18:04.613 [DEBUG] [Thread-301143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] client lang: <none>
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] server lang: <none>
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] kex follows: False
2025-12-24T11:18:04.614 [DEBUG] [Thread-301143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:18:04.615 [DEBUG] [Thread-301143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:18:04.615 [DEBUG] [Thread-301143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:18:04.615 [DEBUG] [Thread-301143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:18:04.615 [DEBUG] [Thread-301143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:18:04.615 [DEBUG] [Thread-301143] [transport.py] [_log()] Compression: none
2025-12-24T11:18:04.615 [DEBUG] [Thread-301143] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:18:04.673 [DEBUG] [Thread-301143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:18:04.674 [DEBUG] [Thread-301143] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:18:04.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:18:04.675 [DEBUG] [Thread-301143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:18:04.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:18:04.733 [DEBUG] [Thread-301143] [transport.py] [_log()] userauth is OK
2025-12-24T11:18:04.734 [DEBUG] [Thread-301143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:18:04.734 [DEBUG] [Thread-301143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:18:04.734 [DEBUG] [Thread-301143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:18:04.734 [DEBUG] [Thread-301143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:18:04.753 [INFO] [Thread-301143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:18:04.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:18:04.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:18:05.587 [DEBUG] [Thread-301143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:18:05.588 [DEBUG] [Thread-301143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:18:05.635 [DEBUG] [Thread-301143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:18:05.635 [DEBUG] [Thread-301143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:18:05.644 [DEBUG] [Thread-301143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:18:05.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:18:05.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:18:05.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
2025-12-24T11:18:05.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:18:05.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:18:05.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:18:05.677 [DEBUG] [Thread-301143] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:18:16.157 [DEBUG] [Thread-301145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:18:31.271 [DEBUG] [Thread-301146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:18:35.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:18:35.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:18:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:18:36.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 18, 20), 16.14, 34.67, 0.0, 5.61, 20.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:18:36.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:18:20
2025-12-24T11:18:36.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:18:37.114 [DEBUG] [Thread-301147] [transport.py] [_log()] starting thread (client mode): 0xf57a81c0
2025-12-24T11:18:37.114 [DEBUG] [Thread-301147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:18:37.128 [DEBUG] [Thread-301147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:18:37.129 [INFO] [Thread-301147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] client lang: <none>
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] server lang: <none>
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] kex follows: False
2025-12-24T11:18:37.133 [DEBUG] [Thread-301147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:18:37.134 [DEBUG] [Thread-301147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:18:37.134 [DEBUG] [Thread-301147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:18:37.134 [DEBUG] [Thread-301147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:18:37.134 [DEBUG] [Thread-301147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:18:37.134 [DEBUG] [Thread-301147] [transport.py] [_log()] Compression: none
2025-12-24T11:18:37.134 [DEBUG] [Thread-301147] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:18:37.168 [DEBUG] [Thread-301147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:18:37.172 [DEBUG] [Thread-301147] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:18:37.174 [DEBUG] [Thread-301147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:18:37.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:18:37.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:18:37.178 [DEBUG] [Thread-301147] [transport.py] [_log()] userauth is OK
2025-12-24T11:18:37.178 [DEBUG] [Thread-301147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:18:37.178 [DEBUG] [Thread-301147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:18:37.178 [DEBUG] [Thread-301147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:18:37.178 [DEBUG] [Thread-301147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:18:37.216 [INFO] [Thread-301147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:18:37.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:18:37.854 [DEBUG] [Thread-301147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:18:37.854 [DEBUG] [Thread-301147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:18:37.856 [DEBUG] [Thread-301147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:18:37.895 [DEBUG] [Thread-301147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:18:37.895 [DEBUG] [Thread-301147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:18:37.899 [DEBUG] [Thread-301147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:18:37.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:18:37.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:18:37.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:18:37.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:18:37.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:18:37.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:18:37.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:18:37.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:18:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:18:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.387571 -999.00  +21.10   7.82     38   +6.30 1 1 1 1 1   888    0 15.19 15.94 ----- 7.8 7.8 129.4 9.3 30.6 -25.2 30.1 -26.0 29.5 -24.1 30.0 -25.2
2025-12-24T11:18:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:18:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:18:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.387571
2025-12-24T11:18:37.939 [DEBUG] [Thread-301147] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:18:37.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:18:37.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:18:37.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:18:37.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:18:37.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:18:37.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:18:20', tmtdew=16.14, humidity=34.67, cloud=0.0, wind=5.61, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:18:06.134', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:18:38.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:18:38.062 [DEBUG] [Thread-301150] [transport.py] [_log()] starting thread (client mode): 0xfabc6a70
2025-12-24T11:18:38.062 [DEBUG] [Thread-301150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:18:38.080 [DEBUG] [Thread-301150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:18:38.080 [INFO] [Thread-301150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:18:38.088 [DEBUG] [Thread-301150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:18:38.088 [DEBUG] [Thread-301150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:18:38.088 [DEBUG] [Thread-301150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:18:38.088 [DEBUG] [Thread-301150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:18:38.088 [DEBUG] [Thread-301150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] client lang: <none>
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] server lang: <none>
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] kex follows: False
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] Compression: none
2025-12-24T11:18:38.089 [DEBUG] [Thread-301150] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:18:38.145 [DEBUG] [Thread-301150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:18:38.146 [DEBUG] [Thread-301150] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:18:38.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:18:38.147 [DEBUG] [Thread-301150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:18:38.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:18:38.201 [DEBUG] [Thread-301150] [transport.py] [_log()] userauth is OK
2025-12-24T11:18:38.202 [DEBUG] [Thread-301150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:18:38.202 [DEBUG] [Thread-301150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:18:38.202 [DEBUG] [Thread-301150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:18:38.202 [DEBUG] [Thread-301150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:18:38.228 [INFO] [Thread-301150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:18:38.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:18:38.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:18:39.089 [DEBUG] [Thread-301150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:18:39.089 [DEBUG] [Thread-301150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:18:39.136 [DEBUG] [Thread-301150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:18:39.136 [DEBUG] [Thread-301150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:18:39.145 [DEBUG] [Thread-301150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:18:39.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:18:39.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:18:39.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:18:39.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:18:39.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:18:39.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:18:39.178 [DEBUG] [Thread-301150] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:18:46.304 [DEBUG] [Thread-301152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:18:46.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:18:46.762 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:18:47.195 [DEBUG] [Thread-301153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:19:01.445 [DEBUG] [Thread-301154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:19:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:19:09.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:19:09.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
2025-12-24T11:19:10.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 18, 54), 15.96, 35.14, 0.0, 5.66, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:19:10.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:18:54
2025-12-24T11:19:10.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:19:10.692 [DEBUG] [Thread-301155] [transport.py] [_log()] starting thread (client mode): 0xfabc7e50
2025-12-24T11:19:10.693 [DEBUG] [Thread-301155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:19:10.702 [DEBUG] [Thread-301155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:19:10.703 [INFO] [Thread-301155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] client lang: <none>
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] server lang: <none>
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] kex follows: False
2025-12-24T11:19:10.708 [DEBUG] [Thread-301155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:19:10.709 [DEBUG] [Thread-301155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:19:10.709 [DEBUG] [Thread-301155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:19:10.709 [DEBUG] [Thread-301155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:19:10.709 [DEBUG] [Thread-301155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:19:10.710 [DEBUG] [Thread-301155] [transport.py] [_log()] Compression: none
2025-12-24T11:19:10.710 [DEBUG] [Thread-301155] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:19:10.739 [DEBUG] [Thread-301155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:19:10.742 [DEBUG] [Thread-301155] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:19:10.744 [DEBUG] [Thread-301155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:19:10.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:19:10.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:19:10.747 [DEBUG] [Thread-301155] [transport.py] [_log()] userauth is OK
2025-12-24T11:19:10.748 [DEBUG] [Thread-301155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:19:10.748 [DEBUG] [Thread-301155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:19:10.748 [DEBUG] [Thread-301155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:19:10.748 [DEBUG] [Thread-301155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:19:10.770 [INFO] [Thread-301155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:19:10.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:19:11.401 [DEBUG] [Thread-301155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:19:11.402 [DEBUG] [Thread-301155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:19:11.403 [DEBUG] [Thread-301155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:19:11.443 [DEBUG] [Thread-301155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:19:11.444 [DEBUG] [Thread-301155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:19:11.448 [DEBUG] [Thread-301155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:19:11.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:19:11.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:19:11.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:19:11.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:19:11.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:19:11.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:19:11.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:19:11.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:19:11.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:19:11.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.387917 -999.00  +21.10  10.97     38   +6.30 1 1 1 1 1   888    0 15.15 12.89 ----- 11.0 11.0 113.8 12.6 30.6 -25.3 30.2 -25.9 29.5 -24.4 30.1 -25.0
2025-12-24T11:19:11.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:19:11.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:19:11.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.387917
2025-12-24T11:19:11.492 [DEBUG] [Thread-301155] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:19:11.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:19:11.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:19:11.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:19:11.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:19:11.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:19:11.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:18:54', tmtdew=15.96, humidity=35.14, cloud=0.0, wind=5.66, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:18:36.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:19:11.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:19:11.602 [DEBUG] [Thread-301158] [transport.py] [_log()] starting thread (client mode): 0xf57aa710
2025-12-24T11:19:11.602 [DEBUG] [Thread-301158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:19:11.617 [DEBUG] [Thread-301158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:19:11.617 [INFO] [Thread-301158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:19:11.624 [DEBUG] [Thread-301158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] client lang: <none>
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] server lang: <none>
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] kex follows: False
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:19:11.625 [DEBUG] [Thread-301158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:19:11.626 [DEBUG] [Thread-301158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:19:11.626 [DEBUG] [Thread-301158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:19:11.626 [DEBUG] [Thread-301158] [transport.py] [_log()] Compression: none
2025-12-24T11:19:11.626 [DEBUG] [Thread-301158] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:19:11.681 [DEBUG] [Thread-301158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:19:11.682 [DEBUG] [Thread-301158] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:19:11.683 [DEBUG] [Thread-301158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:19:11.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:19:11.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:19:11.738 [DEBUG] [Thread-301158] [transport.py] [_log()] userauth is OK
2025-12-24T11:19:11.738 [DEBUG] [Thread-301158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:19:11.738 [DEBUG] [Thread-301158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:19:11.738 [DEBUG] [Thread-301158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:19:11.738 [DEBUG] [Thread-301158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:19:11.757 [INFO] [Thread-301158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:19:11.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:19:11.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:19:12.619 [DEBUG] [Thread-301158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:19:12.619 [DEBUG] [Thread-301158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:19:12.666 [DEBUG] [Thread-301158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:19:12.666 [DEBUG] [Thread-301158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:19:12.675 [DEBUG] [Thread-301158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:19:12.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:19:12.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:19:12.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:19:12.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:19:12.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:19:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:19:12.708 [DEBUG] [Thread-301158] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:19:16.552 [DEBUG] [Thread-301160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:19:31.670 [DEBUG] [Thread-301161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:19:42.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:19:42.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:19:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:19:43.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 19, 26), 16.17, 34.64, 0.0, 8.56, 20.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:19:43.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:19:26
2025-12-24T11:19:43.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:19:44.024 [DEBUG] [Thread-301162] [transport.py] [_log()] starting thread (client mode): 0xf574fe50
2025-12-24T11:19:44.025 [DEBUG] [Thread-301162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:19:44.025 [DEBUG] [Thread-301162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:19:44.025 [INFO] [Thread-301162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] client lang: <none>
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] server lang: <none>
2025-12-24T11:19:44.029 [DEBUG] [Thread-301162] [transport.py] [_log()] kex follows: False
2025-12-24T11:19:44.030 [DEBUG] [Thread-301162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:19:44.030 [DEBUG] [Thread-301162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:19:44.030 [DEBUG] [Thread-301162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:19:44.030 [DEBUG] [Thread-301162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:19:44.030 [DEBUG] [Thread-301162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:19:44.030 [DEBUG] [Thread-301162] [transport.py] [_log()] Compression: none
2025-12-24T11:19:44.030 [DEBUG] [Thread-301162] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:19:44.057 [DEBUG] [Thread-301162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:19:44.061 [DEBUG] [Thread-301162] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:19:44.063 [DEBUG] [Thread-301162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:19:44.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:19:44.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:19:44.067 [DEBUG] [Thread-301162] [transport.py] [_log()] userauth is OK
2025-12-24T11:19:44.068 [DEBUG] [Thread-301162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:19:44.068 [DEBUG] [Thread-301162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:19:44.068 [DEBUG] [Thread-301162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:19:44.068 [DEBUG] [Thread-301162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:19:44.094 [INFO] [Thread-301162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:19:44.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:19:44.690 [DEBUG] [Thread-301162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:19:44.690 [DEBUG] [Thread-301162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:19:44.691 [DEBUG] [Thread-301162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:19:44.732 [DEBUG] [Thread-301162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:19:44.732 [DEBUG] [Thread-301162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:19:44.733 [DEBUG] [Thread-301162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:19:44.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:19:44.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:19:44.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:19:44.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:19:44.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:19:44.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:19:44.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:19:44.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:19:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:19:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.388612 -999.00  +21.20  14.57     38   +6.30 1 1 1 1 1   888    0 15.02 6.11 ----- 14.6 14.6 111.4 20.4 30.4 -27.1 30.1 -27.3 29.4 -24.9 29.9 -26.0
2025-12-24T11:19:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:19:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:19:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.388612
2025-12-24T11:19:44.760 [DEBUG] [Thread-301162] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:19:44.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:19:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:19:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:19:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:19:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:19:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:19:26', tmtdew=16.17, humidity=34.64, cloud=0.0, wind=8.56, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:19:36.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:19:44.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:19:44.862 [DEBUG] [Thread-301165] [transport.py] [_log()] starting thread (client mode): 0xf572c190
2025-12-24T11:19:44.862 [DEBUG] [Thread-301165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:19:44.877 [DEBUG] [Thread-301165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:19:44.877 [INFO] [Thread-301165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:19:44.885 [DEBUG] [Thread-301165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:19:44.885 [DEBUG] [Thread-301165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:19:44.885 [DEBUG] [Thread-301165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] client lang: <none>
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] server lang: <none>
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] kex follows: False
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:19:44.886 [DEBUG] [Thread-301165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:19:44.887 [DEBUG] [Thread-301165] [transport.py] [_log()] Compression: none
2025-12-24T11:19:44.887 [DEBUG] [Thread-301165] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:19:44.949 [DEBUG] [Thread-301165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:19:44.950 [DEBUG] [Thread-301165] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:19:44.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:19:44.951 [DEBUG] [Thread-301165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:19:44.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:19:45.006 [DEBUG] [Thread-301165] [transport.py] [_log()] userauth is OK
2025-12-24T11:19:45.006 [DEBUG] [Thread-301165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:19:45.006 [DEBUG] [Thread-301165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:19:45.006 [DEBUG] [Thread-301165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:19:45.006 [DEBUG] [Thread-301165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:19:45.027 [INFO] [Thread-301165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:19:45.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:19:45.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:19:45.845 [DEBUG] [Thread-301165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:19:45.846 [DEBUG] [Thread-301165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:19:45.884 [DEBUG] [Thread-301165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:19:45.884 [DEBUG] [Thread-301165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:19:45.892 [DEBUG] [Thread-301165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:19:45.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:19:45.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:19: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
2025-12-24T11:19:45.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:19:45.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:19:45.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:19:45.925 [DEBUG] [Thread-301165] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:19:46.740 [DEBUG] [Thread-301167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:19:46.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:19:46.903 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:19:47.501 [DEBUG] [Thread-301168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:20:01.840 [DEBUG] [Thread-301169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:20:15.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:20:15.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:20:15.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
2025-12-24T11:20:16.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 19, 26), 16.17, 34.64, 0.0, 8.56, 20.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:20:16.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:19:26
2025-12-24T11:20:16.881 [DEBUG] [Thread-301170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:20:16.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:20:17.067 [DEBUG] [Thread-301171] [transport.py] [_log()] starting thread (client mode): 0xf574fa00
2025-12-24T11:20:17.068 [DEBUG] [Thread-301171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:20:17.081 [DEBUG] [Thread-301171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:20:17.081 [INFO] [Thread-301171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:20:17.085 [DEBUG] [Thread-301171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] client lang: <none>
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] server lang: <none>
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] kex follows: False
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:20:17.086 [DEBUG] [Thread-301171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:20:17.087 [DEBUG] [Thread-301171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:20:17.087 [DEBUG] [Thread-301171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:20:17.087 [DEBUG] [Thread-301171] [transport.py] [_log()] Compression: none
2025-12-24T11:20:17.087 [DEBUG] [Thread-301171] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:20:17.109 [DEBUG] [Thread-301171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:20:17.112 [DEBUG] [Thread-301171] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:20:17.113 [DEBUG] [Thread-301171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:20:17.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:20:17.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:20:17.117 [DEBUG] [Thread-301171] [transport.py] [_log()] userauth is OK
2025-12-24T11:20:17.117 [DEBUG] [Thread-301171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:20:17.117 [DEBUG] [Thread-301171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:20:17.117 [DEBUG] [Thread-301171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:20:17.117 [DEBUG] [Thread-301171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:20:17.130 [INFO] [Thread-301171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:20:17.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:20:17.714 [DEBUG] [Thread-301171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:20:17.714 [DEBUG] [Thread-301171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:20:17.715 [DEBUG] [Thread-301171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:20:17.755 [DEBUG] [Thread-301171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:20:17.755 [DEBUG] [Thread-301171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:20:17.757 [DEBUG] [Thread-301171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:20:17.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:20:17.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:20:17.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:20:17.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:20:17.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:20:17.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:20:17.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:20:17.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:20:17.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:20:17.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.388959 -999.00  +20.70  10.81     38   +6.10 1 1 1 1 1   888    0 14.85 2.14 ----- 10.8 10.8 110.4 17.1 30.1 -26.4 30.1 -25.7 29.5 -24.0 29.9 -25.4
2025-12-24T11:20:17.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:20:17.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:20:17.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.388959
2025-12-24T11:20:17.784 [DEBUG] [Thread-301171] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:20:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:20:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:20:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:20:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:20:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:20:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:19:26', tmtdew=16.17, humidity=34.64, cloud=0.0, wind=8.56, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:20:06.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:20:17.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:20:17.889 [DEBUG] [Thread-301174] [transport.py] [_log()] starting thread (client mode): 0xf57abd30
2025-12-24T11:20:17.889 [DEBUG] [Thread-301174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:20:17.903 [DEBUG] [Thread-301174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:20:17.904 [INFO] [Thread-301174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] client lang: <none>
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] server lang: <none>
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] kex follows: False
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] Compression: none
2025-12-24T11:20:17.911 [DEBUG] [Thread-301174] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:20:17.972 [DEBUG] [Thread-301174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:20:17.972 [DEBUG] [Thread-301174] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:20:17.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:20:17.973 [DEBUG] [Thread-301174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:20:17.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:20:18.029 [DEBUG] [Thread-301174] [transport.py] [_log()] userauth is OK
2025-12-24T11:20:18.029 [DEBUG] [Thread-301174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:20:18.029 [DEBUG] [Thread-301174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:20:18.029 [DEBUG] [Thread-301174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:20:18.029 [DEBUG] [Thread-301174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:20:18.043 [INFO] [Thread-301174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:20:18.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:20:18.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:20:18.877 [DEBUG] [Thread-301174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:20:18.878 [DEBUG] [Thread-301174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:20:18.923 [DEBUG] [Thread-301174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:20:18.923 [DEBUG] [Thread-301174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:20:18.931 [DEBUG] [Thread-301174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:20:18.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:20:18.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:20:18.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:20:18.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:20:18.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:20:18.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:20:18.964 [DEBUG] [Thread-301174] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:20:31.949 [DEBUG] [Thread-301176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:20:47.048 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:20:47.050 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:20:47.057 [DEBUG] [Thread-301177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:20:47.814 [DEBUG] [Thread-301178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:20:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:20:48.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:20:49.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
2025-12-24T11:20:49.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 20, 33), 16.4, 33.96, 0.0, 10.83, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:20:49.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:20:33
2025-12-24T11:20:50.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:20:50.252 [DEBUG] [Thread-301179] [transport.py] [_log()] starting thread (client mode): 0xfabc5930
2025-12-24T11:20:50.253 [DEBUG] [Thread-301179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:20:50.257 [DEBUG] [Thread-301179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:20:50.257 [INFO] [Thread-301179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] client lang: <none>
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] server lang: <none>
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] kex follows: False
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:20:50.262 [DEBUG] [Thread-301179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:20:50.263 [DEBUG] [Thread-301179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:20:50.263 [DEBUG] [Thread-301179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:20:50.263 [DEBUG] [Thread-301179] [transport.py] [_log()] Compression: none
2025-12-24T11:20:50.263 [DEBUG] [Thread-301179] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:20:50.290 [DEBUG] [Thread-301179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:20:50.294 [DEBUG] [Thread-301179] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:20:50.297 [DEBUG] [Thread-301179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:20:50.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:20:50.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:20:50.302 [DEBUG] [Thread-301179] [transport.py] [_log()] userauth is OK
2025-12-24T11:20:50.302 [DEBUG] [Thread-301179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:20:50.302 [DEBUG] [Thread-301179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:20:50.302 [DEBUG] [Thread-301179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:20:50.302 [DEBUG] [Thread-301179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:20:50.340 [INFO] [Thread-301179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:20:50.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:20:50.928 [DEBUG] [Thread-301179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:20:50.928 [DEBUG] [Thread-301179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:20:50.929 [DEBUG] [Thread-301179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:20:50.968 [DEBUG] [Thread-301179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:20:50.969 [DEBUG] [Thread-301179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:20:50.970 [DEBUG] [Thread-301179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:20:50.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:20:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:20:50.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:20:50.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:20:50.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:20:50.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:20:50.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:20:50.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:20:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:20:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.389306 -999.00  +20.70  15.34     38   +6.20 1 1 1 1 1   888    0 14.85 -2.53 ----- 15.3 15.3 101.3 23.0 30.3 -25.4 30.0 -25.8 29.5 -25.1 29.9 -25.5
2025-12-24T11:20:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:20:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:20:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.389306
2025-12-24T11:20:50.998 [DEBUG] [Thread-301179] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:20:51.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:20:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:20:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:20:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:20:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:20:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:20:33', tmtdew=16.4, humidity=33.96, cloud=0.0, wind=10.83, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:20:36.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:20:51.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:20:51.098 [DEBUG] [Thread-301182] [transport.py] [_log()] starting thread (client mode): 0xfabc64a0
2025-12-24T11:20:51.098 [DEBUG] [Thread-301182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:20:51.117 [DEBUG] [Thread-301182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:20:51.118 [INFO] [Thread-301182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] client lang: <none>
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] server lang: <none>
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] kex follows: False
2025-12-24T11:20:51.126 [DEBUG] [Thread-301182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:20:51.127 [DEBUG] [Thread-301182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:20:51.127 [DEBUG] [Thread-301182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:20:51.127 [DEBUG] [Thread-301182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:20:51.127 [DEBUG] [Thread-301182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:20:51.127 [DEBUG] [Thread-301182] [transport.py] [_log()] Compression: none
2025-12-24T11:20:51.127 [DEBUG] [Thread-301182] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:20:51.191 [DEBUG] [Thread-301182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:20:51.192 [DEBUG] [Thread-301182] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:20:51.192 [DEBUG] [Thread-301182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:20:51.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:20:51.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:20:51.249 [DEBUG] [Thread-301182] [transport.py] [_log()] userauth is OK
2025-12-24T11:20:51.249 [DEBUG] [Thread-301182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:20:51.249 [DEBUG] [Thread-301182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:20:51.249 [DEBUG] [Thread-301182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:20:51.249 [DEBUG] [Thread-301182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:20:51.265 [INFO] [Thread-301182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:20:51.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:20:51.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:20:52.148 [DEBUG] [Thread-301182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:20:52.148 [DEBUG] [Thread-301182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:20:52.195 [DEBUG] [Thread-301182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:20:52.195 [DEBUG] [Thread-301182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:20:52.204 [DEBUG] [Thread-301182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:20:52.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:20:52.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:20:52.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
2025-12-24T11:20:52.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:20:52.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:20:52.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:20:52.236 [DEBUG] [Thread-301182] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:21:02.155 [DEBUG] [Thread-301184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:21:17.273 [DEBUG] [Thread-301185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:21:22.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:21:22.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:21:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:21:23.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 21, 6), 16.35, 34.09, 0.0, 12.88, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:21:23.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:21:06
2025-12-24T11:21:23.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:21:24.142 [DEBUG] [Thread-301186] [transport.py] [_log()] starting thread (client mode): 0xf57aaec0
2025-12-24T11:21:24.143 [DEBUG] [Thread-301186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:21:24.153 [DEBUG] [Thread-301186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:21:24.153 [INFO] [Thread-301186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:21:24.157 [DEBUG] [Thread-301186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:21:24.157 [DEBUG] [Thread-301186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:21:24.157 [DEBUG] [Thread-301186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] client lang: <none>
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] server lang: <none>
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] kex follows: False
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:21:24.158 [DEBUG] [Thread-301186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:21:24.159 [DEBUG] [Thread-301186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:21:24.159 [DEBUG] [Thread-301186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:21:24.159 [DEBUG] [Thread-301186] [transport.py] [_log()] Compression: none
2025-12-24T11:21:24.159 [DEBUG] [Thread-301186] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:21:24.183 [DEBUG] [Thread-301186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:21:24.187 [DEBUG] [Thread-301186] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:21:24.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:21:24.190 [DEBUG] [Thread-301186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:21:24.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:21:24.192 [DEBUG] [Thread-301186] [transport.py] [_log()] userauth is OK
2025-12-24T11:21:24.192 [DEBUG] [Thread-301186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:21:24.192 [DEBUG] [Thread-301186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:21:24.192 [DEBUG] [Thread-301186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:21:24.192 [DEBUG] [Thread-301186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:21:24.210 [INFO] [Thread-301186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:21:24.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:21:24.798 [DEBUG] [Thread-301186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:21:24.807 [DEBUG] [Thread-301186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:21:24.807 [DEBUG] [Thread-301186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:21:24.838 [DEBUG] [Thread-301186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:21:24.839 [DEBUG] [Thread-301186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:21:24.841 [DEBUG] [Thread-301186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:21:24.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:21:24.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:21:24.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:21:24.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:21:24.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:21:24.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:21:24.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:21:24.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:21:24.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:21:24.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.389654 -999.00  +20.70  11.82     38   +6.00 1 1 1 1 1   888    0 14.63 -6.55 ----- 11.8 11.8 118.4 19.0 30.3 -25.8 30.0 -26.8 29.4 -24.4 29.9 -25.2
2025-12-24T11:21:24.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:21:24.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:21:24.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.389654
2025-12-24T11:21:24.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:21:24.872 [DEBUG] [Thread-301186] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:21:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:21:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:21:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:21:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:21:24.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:21:06', tmtdew=16.35, humidity=34.09, cloud=0.0, wind=12.88, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:21:06.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:21:24.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:21:24.956 [DEBUG] [Thread-301189] [transport.py] [_log()] starting thread (client mode): 0xfabc64a0
2025-12-24T11:21:24.956 [DEBUG] [Thread-301189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:21:24.970 [DEBUG] [Thread-301189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:21:24.970 [INFO] [Thread-301189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:21:24.978 [DEBUG] [Thread-301189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:21:24.978 [DEBUG] [Thread-301189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:21:24.978 [DEBUG] [Thread-301189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:21:24.978 [DEBUG] [Thread-301189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:21:24.978 [DEBUG] [Thread-301189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:21:24.978 [DEBUG] [Thread-301189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] client lang: <none>
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] server lang: <none>
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] kex follows: False
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:21:24.979 [DEBUG] [Thread-301189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:21:24.980 [DEBUG] [Thread-301189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:21:24.980 [DEBUG] [Thread-301189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:21:24.980 [DEBUG] [Thread-301189] [transport.py] [_log()] Compression: none
2025-12-24T11:21:24.980 [DEBUG] [Thread-301189] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:21:25.037 [DEBUG] [Thread-301189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:21:25.037 [DEBUG] [Thread-301189] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:21:25.037 [DEBUG] [Thread-301189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:21:25.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:21:25.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:21:25.094 [DEBUG] [Thread-301189] [transport.py] [_log()] userauth is OK
2025-12-24T11:21:25.095 [DEBUG] [Thread-301189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:21:25.095 [DEBUG] [Thread-301189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:21:25.095 [DEBUG] [Thread-301189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:21:25.095 [DEBUG] [Thread-301189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:21:25.113 [INFO] [Thread-301189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:21:25.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:21:25.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:21:25.967 [DEBUG] [Thread-301189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:21:25.967 [DEBUG] [Thread-301189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:21:26.006 [DEBUG] [Thread-301189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:21:26.007 [DEBUG] [Thread-301189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:21:26.016 [DEBUG] [Thread-301189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:21:26.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:21: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')
2025-12-24T11:21:26.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:21:26.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:21:26.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:21:26.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:21:26.053 [DEBUG] [Thread-301189] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:21:32.349 [DEBUG] [Thread-301191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:21:47.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:21:47.223 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:21:47.476 [DEBUG] [Thread-301192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:21:48.113 [DEBUG] [Thread-301193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:21:56.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:21:56.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:21:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:21:57.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 21, 39), 16.29, 34.28, 0.0, 16.07, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:21:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:21:39
2025-12-24T11:21:57.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:21:57.767 [DEBUG] [Thread-301194] [transport.py] [_log()] starting thread (client mode): 0xf57a8850
2025-12-24T11:21:57.768 [DEBUG] [Thread-301194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:21:57.778 [DEBUG] [Thread-301194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:21:57.778 [INFO] [Thread-301194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:21:57.783 [DEBUG] [Thread-301194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:21:57.784 [DEBUG] [Thread-301194] [transport.py] [_log()] client lang: <none>
2025-12-24T11:21:57.784 [DEBUG] [Thread-301194] [transport.py] [_log()] server lang: <none>
2025-12-24T11:21:57.784 [DEBUG] [Thread-301194] [transport.py] [_log()] kex follows: False
2025-12-24T11:21:57.784 [DEBUG] [Thread-301194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:21:57.784 [DEBUG] [Thread-301194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:21:57.784 [DEBUG] [Thread-301194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:21:57.784 [DEBUG] [Thread-301194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:21:57.784 [DEBUG] [Thread-301194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:21:57.785 [DEBUG] [Thread-301194] [transport.py] [_log()] Compression: none
2025-12-24T11:21:57.785 [DEBUG] [Thread-301194] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:21:57.812 [DEBUG] [Thread-301194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:21:57.816 [DEBUG] [Thread-301194] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:21:57.818 [DEBUG] [Thread-301194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:21:57.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:21:57.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:21:57.823 [DEBUG] [Thread-301194] [transport.py] [_log()] userauth is OK
2025-12-24T11:21:57.824 [DEBUG] [Thread-301194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:21:57.824 [DEBUG] [Thread-301194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:21:57.824 [DEBUG] [Thread-301194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:21:57.824 [DEBUG] [Thread-301194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:21:57.851 [INFO] [Thread-301194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:21:57.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:21:58.448 [DEBUG] [Thread-301194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:21:58.448 [DEBUG] [Thread-301194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:21:58.449 [DEBUG] [Thread-301194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:21:58.487 [DEBUG] [Thread-301194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:21:58.487 [DEBUG] [Thread-301194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:21:58.491 [DEBUG] [Thread-301194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:21:58.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:21:58.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:21:58.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:21:58.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:21:58.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:21:58.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:21:58.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:21:58.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:21:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:21:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.390001 -999.00  +21.10   9.40     37   +6.10 1 1 1 1 1   888    0 14.57 -11.23 ----- 9.4 9.4 112.8 15.1 30.2 -26.2 30.0 -26.0 29.4 -24.6 29.9 -24.9
2025-12-24T11:21:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:21:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:21:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.390001
2025-12-24T11:21:58.529 [DEBUG] [Thread-301194] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:21:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:21:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:21:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:21:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:21:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:21:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:21:39', tmtdew=16.29, humidity=34.28, cloud=0.0, wind=16.07, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:21:36.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:21:58.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:21:58.632 [DEBUG] [Thread-301197] [transport.py] [_log()] starting thread (client mode): 0xf57abf70
2025-12-24T11:21:58.632 [DEBUG] [Thread-301197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:21:58.647 [DEBUG] [Thread-301197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:21:58.647 [INFO] [Thread-301197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] client lang: <none>
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] server lang: <none>
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] kex follows: False
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] Compression: none
2025-12-24T11:21:58.655 [DEBUG] [Thread-301197] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:21:58.718 [DEBUG] [Thread-301197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:21:58.718 [DEBUG] [Thread-301197] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:21:58.719 [DEBUG] [Thread-301197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:21:58.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:21:58.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:21:58.774 [DEBUG] [Thread-301197] [transport.py] [_log()] userauth is OK
2025-12-24T11:21:58.774 [DEBUG] [Thread-301197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:21:58.775 [DEBUG] [Thread-301197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:21:58.775 [DEBUG] [Thread-301197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:21:58.775 [DEBUG] [Thread-301197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:21:58.798 [INFO] [Thread-301197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:21:58.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:21:58.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:21:59.630 [DEBUG] [Thread-301197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:21:59.630 [DEBUG] [Thread-301197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:21:59.669 [DEBUG] [Thread-301197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:21:59.669 [DEBUG] [Thread-301197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:21:59.677 [DEBUG] [Thread-301197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:21:59.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:21:59.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:21:59.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:21:59.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:21:59.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:21:59.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:21:59.710 [DEBUG] [Thread-301197] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:22:02.548 [DEBUG] [Thread-301199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:22:17.635 [DEBUG] [Thread-301200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:22:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:22:29.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:22:29.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
2025-12-24T11:22:30.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 22, 12), 16.26, 34.33, 0.0, 11.96, 20.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:22:30.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:22:12
2025-12-24T11:22:30.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:22:31.002 [DEBUG] [Thread-301201] [transport.py] [_log()] starting thread (client mode): 0xf57ab820
2025-12-24T11:22:31.004 [DEBUG] [Thread-301201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:22:31.004 [DEBUG] [Thread-301201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:22:31.005 [INFO] [Thread-301201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:22:31.011 [DEBUG] [Thread-301201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:22:31.011 [DEBUG] [Thread-301201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:22:31.011 [DEBUG] [Thread-301201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:22:31.011 [DEBUG] [Thread-301201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:22:31.011 [DEBUG] [Thread-301201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:22:31.011 [DEBUG] [Thread-301201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:22:31.011 [DEBUG] [Thread-301201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:22:31.012 [DEBUG] [Thread-301201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:22:31.012 [DEBUG] [Thread-301201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:22:31.012 [DEBUG] [Thread-301201] [transport.py] [_log()] client lang: <none>
2025-12-24T11:22:31.012 [DEBUG] [Thread-301201] [transport.py] [_log()] server lang: <none>
2025-12-24T11:22:31.012 [DEBUG] [Thread-301201] [transport.py] [_log()] kex follows: False
2025-12-24T11:22:31.012 [DEBUG] [Thread-301201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:22:31.013 [DEBUG] [Thread-301201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:22:31.013 [DEBUG] [Thread-301201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:22:31.014 [DEBUG] [Thread-301201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:22:31.014 [DEBUG] [Thread-301201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:22:31.014 [DEBUG] [Thread-301201] [transport.py] [_log()] Compression: none
2025-12-24T11:22:31.014 [DEBUG] [Thread-301201] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:22:31.040 [DEBUG] [Thread-301201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:22:31.044 [DEBUG] [Thread-301201] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:22:31.046 [DEBUG] [Thread-301201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:22:31.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:22:31.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:22:31.052 [DEBUG] [Thread-301201] [transport.py] [_log()] userauth is OK
2025-12-24T11:22:31.053 [DEBUG] [Thread-301201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:22:31.053 [DEBUG] [Thread-301201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:22:31.053 [DEBUG] [Thread-301201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:22:31.053 [DEBUG] [Thread-301201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:22:31.082 [INFO] [Thread-301201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:22:31.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:22:31.659 [DEBUG] [Thread-301201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:22:31.659 [DEBUG] [Thread-301201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:22:31.661 [DEBUG] [Thread-301201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:22:31.700 [DEBUG] [Thread-301201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:22:31.700 [DEBUG] [Thread-301201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:22:31.704 [DEBUG] [Thread-301201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:22:31.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:22:31.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:22:31.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:22:31.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:22:31.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:22:31.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:22:31.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:22:31.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:22:31.730 [DEBUG] [Thread-301201] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:22:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:22:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.390348 -999.00  +21.00   7.38     37   +6.10 1 1 1 1 1   888    0 14.41 -13.57 ----- 7.4 7.4 111.0 11.9 30.2 -25.4 30.0 -26.0 29.6 -23.5 29.9 -24.7
2025-12-24T11:22:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:22:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:22:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.390348
2025-12-24T11:22:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:22:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:22:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:22:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:22:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:22:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:22:12', tmtdew=16.26, humidity=34.33, cloud=0.0, wind=11.96, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:22:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:22:31.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:22:31.854 [DEBUG] [Thread-301204] [transport.py] [_log()] starting thread (client mode): 0xf57be050
2025-12-24T11:22:31.854 [DEBUG] [Thread-301204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:22:31.868 [DEBUG] [Thread-301204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:22:31.869 [INFO] [Thread-301204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:22:31.876 [DEBUG] [Thread-301204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:22:31.876 [DEBUG] [Thread-301204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:22:31.877 [DEBUG] [Thread-301204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:22:31.877 [DEBUG] [Thread-301204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:22:31.877 [DEBUG] [Thread-301204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:22:31.877 [DEBUG] [Thread-301204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:22:31.877 [DEBUG] [Thread-301204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:22:31.877 [DEBUG] [Thread-301204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:22:31.877 [DEBUG] [Thread-301204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:22:31.877 [DEBUG] [Thread-301204] [transport.py] [_log()] client lang: <none>
2025-12-24T11:22:31.878 [DEBUG] [Thread-301204] [transport.py] [_log()] server lang: <none>
2025-12-24T11:22:31.878 [DEBUG] [Thread-301204] [transport.py] [_log()] kex follows: False
2025-12-24T11:22:31.878 [DEBUG] [Thread-301204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:22:31.878 [DEBUG] [Thread-301204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:22:31.878 [DEBUG] [Thread-301204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:22:31.879 [DEBUG] [Thread-301204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:22:31.879 [DEBUG] [Thread-301204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:22:31.879 [DEBUG] [Thread-301204] [transport.py] [_log()] Compression: none
2025-12-24T11:22:31.879 [DEBUG] [Thread-301204] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:22:31.933 [DEBUG] [Thread-301204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:22:31.934 [DEBUG] [Thread-301204] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:22:31.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:22:31.935 [DEBUG] [Thread-301204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:22:31.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:22:31.990 [DEBUG] [Thread-301204] [transport.py] [_log()] userauth is OK
2025-12-24T11:22:31.991 [DEBUG] [Thread-301204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:22:31.991 [DEBUG] [Thread-301204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:22:31.991 [DEBUG] [Thread-301204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:22:31.991 [DEBUG] [Thread-301204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:22:32.010 [INFO] [Thread-301204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:22:32.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:22:32.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:22:32.737 [DEBUG] [Thread-301206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:22:32.852 [DEBUG] [Thread-301204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:22:32.853 [DEBUG] [Thread-301204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:22:32.900 [DEBUG] [Thread-301204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:22:32.900 [DEBUG] [Thread-301204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:22:32.908 [DEBUG] [Thread-301204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:22:32.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:22:32.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:22:32.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
2025-12-24T11:22:32.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:22:32.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:22:32.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:22:32.944 [DEBUG] [Thread-301204] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:22:47.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:22:47.391 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:22:47.966 [DEBUG] [Thread-301207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:22:48.338 [DEBUG] [Thread-301208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:23:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:23:02.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:23:02.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
2025-12-24T11:23:03.005 [DEBUG] [Thread-301209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:23:04.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 22, 45), 16.18, 34.39, 0.0, 6.71, 20.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:23:04.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:22:45
2025-12-24T11:23:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:23:04.777 [DEBUG] [Thread-301210] [transport.py] [_log()] starting thread (client mode): 0xf572c730
2025-12-24T11:23:04.777 [DEBUG] [Thread-301210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:23:04.786 [DEBUG] [Thread-301210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:23:04.786 [INFO] [Thread-301210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:23:04.791 [DEBUG] [Thread-301210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:23:04.791 [DEBUG] [Thread-301210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:23:04.791 [DEBUG] [Thread-301210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:23:04.791 [DEBUG] [Thread-301210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] client lang: <none>
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] server lang: <none>
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] kex follows: False
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:23:04.792 [DEBUG] [Thread-301210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:23:04.793 [DEBUG] [Thread-301210] [transport.py] [_log()] Compression: none
2025-12-24T11:23:04.793 [DEBUG] [Thread-301210] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:23:04.820 [DEBUG] [Thread-301210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:23:04.823 [DEBUG] [Thread-301210] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:23:04.824 [DEBUG] [Thread-301210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:23:04.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:23:04.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:23:04.828 [DEBUG] [Thread-301210] [transport.py] [_log()] userauth is OK
2025-12-24T11:23:04.828 [DEBUG] [Thread-301210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:23:04.828 [DEBUG] [Thread-301210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:23:04.828 [DEBUG] [Thread-301210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:23:04.828 [DEBUG] [Thread-301210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:23:04.850 [INFO] [Thread-301210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:23:04.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:23:05.416 [DEBUG] [Thread-301210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:23:05.416 [DEBUG] [Thread-301210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:23:05.417 [DEBUG] [Thread-301210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:23:05.458 [DEBUG] [Thread-301210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:23:05.458 [DEBUG] [Thread-301210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:23:05.460 [DEBUG] [Thread-301210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:23:05.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:23:05.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:23:05.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:23:05.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:23:05.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:23:05.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:23:05.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:23:05.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:23:05.484 [DEBUG] [Thread-301210] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:23:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:23:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.390695 -999.00  +21.10   8.25     38   +6.20 1 1 1 1 1   888    0 14.35 -15.79 ----- 8.2 8.2 130.4 16.6 30.4 -26.1 30.1 -25.7 29.5 -23.8 30.0 -24.7
2025-12-24T11:23:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:23:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:23:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.390695
2025-12-24T11:23:05.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:23:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:23:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:23:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:23:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:23:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:22:45', tmtdew=16.18, humidity=34.39, cloud=0.0, wind=6.71, temperature=20.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:22:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:23:05.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:23:05.590 [DEBUG] [Thread-301213] [transport.py] [_log()] starting thread (client mode): 0xf572f9d0
2025-12-24T11:23:05.590 [DEBUG] [Thread-301213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:23:05.605 [DEBUG] [Thread-301213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:23:05.605 [INFO] [Thread-301213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:23:05.612 [DEBUG] [Thread-301213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:23:05.612 [DEBUG] [Thread-301213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:23:05.612 [DEBUG] [Thread-301213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:23:05.612 [DEBUG] [Thread-301213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] client lang: <none>
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] server lang: <none>
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] kex follows: False
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] Compression: none
2025-12-24T11:23:05.613 [DEBUG] [Thread-301213] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:23:05.668 [DEBUG] [Thread-301213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:23:05.669 [DEBUG] [Thread-301213] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:23:05.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:23:05.669 [DEBUG] [Thread-301213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:23:05.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:23:05.726 [DEBUG] [Thread-301213] [transport.py] [_log()] userauth is OK
2025-12-24T11:23:05.726 [DEBUG] [Thread-301213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:23:05.726 [DEBUG] [Thread-301213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:23:05.726 [DEBUG] [Thread-301213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:23:05.726 [DEBUG] [Thread-301213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:23:05.742 [INFO] [Thread-301213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:23:05.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:23:05.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:23:06.597 [DEBUG] [Thread-301213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:23:06.597 [DEBUG] [Thread-301213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:23:06.645 [DEBUG] [Thread-301213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:23:06.645 [DEBUG] [Thread-301213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:23:06.654 [DEBUG] [Thread-301213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:23:06.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:23: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')
2025-12-24T11:23:06.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:23:06.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:23:06.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:23:06.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:23:06.687 [DEBUG] [Thread-301213] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:23:18.094 [DEBUG] [Thread-301215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:23:33.292 [DEBUG] [Thread-301216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:23:36.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:23:36.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:23:36.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:23:37.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 23, 18), 16.16, 34.49, 0.0, 8.72, 20.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:23:37.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:23:18
2025-12-24T11:23:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:23:38.198 [DEBUG] [Thread-301217] [transport.py] [_log()] starting thread (client mode): 0xf57a84f0
2025-12-24T11:23:38.199 [DEBUG] [Thread-301217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:23:38.205 [DEBUG] [Thread-301217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:23:38.205 [INFO] [Thread-301217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] client lang: <none>
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] server lang: <none>
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] kex follows: False
2025-12-24T11:23:38.210 [DEBUG] [Thread-301217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:23:38.211 [DEBUG] [Thread-301217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:23:38.211 [DEBUG] [Thread-301217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:23:38.211 [DEBUG] [Thread-301217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:23:38.211 [DEBUG] [Thread-301217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:23:38.211 [DEBUG] [Thread-301217] [transport.py] [_log()] Compression: none
2025-12-24T11:23:38.212 [DEBUG] [Thread-301217] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:23:38.240 [DEBUG] [Thread-301217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:23:38.245 [DEBUG] [Thread-301217] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:23:38.247 [DEBUG] [Thread-301217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:23:38.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:23:38.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:23:38.254 [DEBUG] [Thread-301217] [transport.py] [_log()] userauth is OK
2025-12-24T11:23:38.254 [DEBUG] [Thread-301217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:23:38.255 [DEBUG] [Thread-301217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:23:38.255 [DEBUG] [Thread-301217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:23:38.255 [DEBUG] [Thread-301217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:23:38.285 [INFO] [Thread-301217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:23:38.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:23:38.873 [DEBUG] [Thread-301217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:23:38.874 [DEBUG] [Thread-301217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:23:38.884 [DEBUG] [Thread-301217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:23:38.914 [DEBUG] [Thread-301217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:23:38.914 [DEBUG] [Thread-301217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:23:38.918 [DEBUG] [Thread-301217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:23:38.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:23:38.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:23:38.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:23:38.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:23:38.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:23:38.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:23:38.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:23:38.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:23:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:23:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.391042 -999.00  +21.20   7.01     38   +6.30 1 1 1 1 1   888    0 14.25 -15.65 ----- 7.0 7.0 107.0 10.6 30.4 -25.2 30.1 -25.4 29.6 -24.3 30.0 -24.5
2025-12-24T11:23:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:23:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:23:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.391042
2025-12-24T11:23:38.944 [DEBUG] [Thread-301217] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:23:38.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:23:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:23:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:23:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:23:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:23:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:23:18', tmtdew=16.16, humidity=34.49, cloud=0.0, wind=8.72, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:23:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:23:39.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:23:39.042 [DEBUG] [Thread-301220] [transport.py] [_log()] starting thread (client mode): 0xf57a8ca0
2025-12-24T11:23:39.042 [DEBUG] [Thread-301220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:23:39.057 [DEBUG] [Thread-301220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:23:39.057 [INFO] [Thread-301220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:23:39.064 [DEBUG] [Thread-301220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] client lang: <none>
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] server lang: <none>
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] kex follows: False
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] Compression: none
2025-12-24T11:23:39.065 [DEBUG] [Thread-301220] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:23:39.123 [DEBUG] [Thread-301220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:23:39.124 [DEBUG] [Thread-301220] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:23:39.124 [DEBUG] [Thread-301220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:23:39.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:23:39.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:23:39.186 [DEBUG] [Thread-301220] [transport.py] [_log()] userauth is OK
2025-12-24T11:23:39.186 [DEBUG] [Thread-301220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:23:39.186 [DEBUG] [Thread-301220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:23:39.186 [DEBUG] [Thread-301220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:23:39.186 [DEBUG] [Thread-301220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:23:39.202 [INFO] [Thread-301220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:23:39.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:23:39.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:23:40.076 [DEBUG] [Thread-301220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:23:40.076 [DEBUG] [Thread-301220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:23:40.115 [DEBUG] [Thread-301220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:23:40.115 [DEBUG] [Thread-301220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:23:40.124 [DEBUG] [Thread-301220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:23:40.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11: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')
2025-12-24T11:23:40.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:23:40.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:23:40.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:23:40.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:23:40.157 [DEBUG] [Thread-301220] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:23:47.530 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:23:47.531 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:23:48.356 [DEBUG] [Thread-301222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:23:48.600 [DEBUG] [Thread-301223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:24:03.451 [DEBUG] [Thread-301224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:24:10.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:24:10.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:24:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:24:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 23, 51), 16.5, 33.88, 0.0, 9.69, 20.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:24:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:23:51
2025-12-24T11:24:11.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:24:11.743 [DEBUG] [Thread-301225] [transport.py] [_log()] starting thread (client mode): 0xf57bde10
2025-12-24T11:24:11.744 [DEBUG] [Thread-301225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:24:11.758 [DEBUG] [Thread-301225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:24:11.758 [INFO] [Thread-301225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:24:11.764 [DEBUG] [Thread-301225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:24:11.764 [DEBUG] [Thread-301225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:24:11.764 [DEBUG] [Thread-301225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:24:11.764 [DEBUG] [Thread-301225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:24:11.764 [DEBUG] [Thread-301225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:24:11.764 [DEBUG] [Thread-301225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:24:11.764 [DEBUG] [Thread-301225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:24:11.765 [DEBUG] [Thread-301225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:24:11.765 [DEBUG] [Thread-301225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:24:11.765 [DEBUG] [Thread-301225] [transport.py] [_log()] client lang: <none>
2025-12-24T11:24:11.765 [DEBUG] [Thread-301225] [transport.py] [_log()] server lang: <none>
2025-12-24T11:24:11.765 [DEBUG] [Thread-301225] [transport.py] [_log()] kex follows: False
2025-12-24T11:24:11.765 [DEBUG] [Thread-301225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:24:11.766 [DEBUG] [Thread-301225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:24:11.766 [DEBUG] [Thread-301225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:24:11.766 [DEBUG] [Thread-301225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:24:11.767 [DEBUG] [Thread-301225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:24:11.767 [DEBUG] [Thread-301225] [transport.py] [_log()] Compression: none
2025-12-24T11:24:11.767 [DEBUG] [Thread-301225] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:24:11.808 [DEBUG] [Thread-301225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:24:11.812 [DEBUG] [Thread-301225] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:24:11.814 [DEBUG] [Thread-301225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:24:11.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:24:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:24:11.820 [DEBUG] [Thread-301225] [transport.py] [_log()] userauth is OK
2025-12-24T11:24:11.820 [DEBUG] [Thread-301225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:24:11.821 [DEBUG] [Thread-301225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:24:11.821 [DEBUG] [Thread-301225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:24:11.821 [DEBUG] [Thread-301225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:24:11.858 [INFO] [Thread-301225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:24:11.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:24:12.455 [DEBUG] [Thread-301225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:24:12.455 [DEBUG] [Thread-301225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:24:12.456 [DEBUG] [Thread-301225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:24:12.496 [DEBUG] [Thread-301225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:24:12.496 [DEBUG] [Thread-301225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:24:12.498 [DEBUG] [Thread-301225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:24:12.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:24:12.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:24:12.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:24:12.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:24:12.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:24:12.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:24:12.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:24:12.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:24:12.519 [DEBUG] [Thread-301225] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:24:12.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:24:12.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.391042 -999.00  +21.20   7.01     38   +6.30 1 1 1 1 1   888    0 14.25 -15.65 ----- 7.0 7.0 107.0 10.6 30.4 -25.2 30.1 -25.4 29.6 -24.3 30.0 -24.5
2025-12-24T11:24:12.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:24:12.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:24:12.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.391042
2025-12-24T11:24:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:24:12.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:24:12.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:24:12.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:24:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:24:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:23:51', tmtdew=16.5, humidity=33.88, cloud=0.0, wind=9.69, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:23:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:24:12.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:24:12.643 [DEBUG] [Thread-301228] [transport.py] [_log()] starting thread (client mode): 0xf57bca30
2025-12-24T11:24:12.643 [DEBUG] [Thread-301228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:24:12.660 [DEBUG] [Thread-301228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:24:12.660 [INFO] [Thread-301228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:24:12.668 [DEBUG] [Thread-301228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:24:12.668 [DEBUG] [Thread-301228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:24:12.668 [DEBUG] [Thread-301228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:24:12.668 [DEBUG] [Thread-301228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:24:12.668 [DEBUG] [Thread-301228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:24:12.668 [DEBUG] [Thread-301228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] client lang: <none>
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] server lang: <none>
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] kex follows: False
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:24:12.669 [DEBUG] [Thread-301228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:24:12.670 [DEBUG] [Thread-301228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:24:12.670 [DEBUG] [Thread-301228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:24:12.670 [DEBUG] [Thread-301228] [transport.py] [_log()] Compression: none
2025-12-24T11:24:12.670 [DEBUG] [Thread-301228] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:24:12.726 [DEBUG] [Thread-301228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:24:12.726 [DEBUG] [Thread-301228] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:24:12.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:24:12.726 [DEBUG] [Thread-301228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:24:12.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:24:12.785 [DEBUG] [Thread-301228] [transport.py] [_log()] userauth is OK
2025-12-24T11:24:12.785 [DEBUG] [Thread-301228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:24:12.786 [DEBUG] [Thread-301228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:24:12.786 [DEBUG] [Thread-301228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:24:12.786 [DEBUG] [Thread-301228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:24:12.811 [INFO] [Thread-301228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:24:12.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:24:12.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:24:13.639 [DEBUG] [Thread-301228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:24:13.639 [DEBUG] [Thread-301228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:24:13.687 [DEBUG] [Thread-301228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:24:13.687 [DEBUG] [Thread-301228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:24:13.695 [DEBUG] [Thread-301228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:24:13.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:24:13.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')
2025-12-24T11:24:13.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
2025-12-24T11:24:13.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:24:13.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:24:13.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:24:13.731 [DEBUG] [Thread-301228] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:24:18.521 [DEBUG] [Thread-301230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:24:33.684 [DEBUG] [Thread-301231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:24:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:24:43.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:24:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:24:44.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 24, 24), 16.44, 34.0, 0.0, 7.11, 20.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:24:44.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:24:24
2025-12-24T11:24:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:24:45.004 [DEBUG] [Thread-301232] [transport.py] [_log()] starting thread (client mode): 0xf57aad70
2025-12-24T11:24:45.005 [DEBUG] [Thread-301232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:24:45.013 [DEBUG] [Thread-301232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:24:45.014 [INFO] [Thread-301232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:24:45.018 [DEBUG] [Thread-301232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:24:45.018 [DEBUG] [Thread-301232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:24:45.018 [DEBUG] [Thread-301232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] client lang: <none>
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] server lang: <none>
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] kex follows: False
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:24:45.019 [DEBUG] [Thread-301232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:24:45.020 [DEBUG] [Thread-301232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:24:45.020 [DEBUG] [Thread-301232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:24:45.020 [DEBUG] [Thread-301232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:24:45.020 [DEBUG] [Thread-301232] [transport.py] [_log()] Compression: none
2025-12-24T11:24:45.020 [DEBUG] [Thread-301232] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:24:45.049 [DEBUG] [Thread-301232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:24:45.053 [DEBUG] [Thread-301232] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:24:45.054 [DEBUG] [Thread-301232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:24:45.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:24:45.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:24:45.059 [DEBUG] [Thread-301232] [transport.py] [_log()] userauth is OK
2025-12-24T11:24:45.060 [DEBUG] [Thread-301232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:24:45.060 [DEBUG] [Thread-301232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:24:45.060 [DEBUG] [Thread-301232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:24:45.060 [DEBUG] [Thread-301232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:24:45.087 [INFO] [Thread-301232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:24:45.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:24:45.628 [DEBUG] [Thread-301232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:24:45.637 [DEBUG] [Thread-301232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:24:45.638 [DEBUG] [Thread-301232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:24:45.669 [DEBUG] [Thread-301232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:24:45.669 [DEBUG] [Thread-301232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:24:45.673 [DEBUG] [Thread-301232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:24:45.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:24:45.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:24:45.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:24:45.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:24:45.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:24:45.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:24:45.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:24:45.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:24:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:24:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.391737 -999.00  +21.20  16.35     37   +6.30 1 1 1 1 1   888    0 14.42 -17.05 ----- 16.4 16.4 109.4 17.7 30.8 -24.9 30.3 -24.9 29.6 -25.7 30.3 -24.1
2025-12-24T11:24:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:24:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:24:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.391737
2025-12-24T11:24:45.712 [DEBUG] [Thread-301232] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:24:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:24:45.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:24:45.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:24:45.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:24:45.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:24:45.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:24:24', tmtdew=16.44, humidity=34.0, cloud=0.0, wind=7.11, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:24:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:24:45.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:24:45.822 [DEBUG] [Thread-301235] [transport.py] [_log()] starting thread (client mode): 0xf572fb50
2025-12-24T11:24:45.822 [DEBUG] [Thread-301235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:24:45.839 [DEBUG] [Thread-301235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:24:45.839 [INFO] [Thread-301235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:24:45.847 [DEBUG] [Thread-301235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] client lang: <none>
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] server lang: <none>
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] kex follows: False
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] Compression: none
2025-12-24T11:24:45.848 [DEBUG] [Thread-301235] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:24:45.915 [DEBUG] [Thread-301235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:24:45.916 [DEBUG] [Thread-301235] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:24:45.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:24:45.917 [DEBUG] [Thread-301235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:24:45.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:24:45.970 [DEBUG] [Thread-301235] [transport.py] [_log()] userauth is OK
2025-12-24T11:24:45.970 [DEBUG] [Thread-301235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:24:45.970 [DEBUG] [Thread-301235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:24:45.970 [DEBUG] [Thread-301235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:24:45.970 [DEBUG] [Thread-301235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:24:45.990 [INFO] [Thread-301235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:24:45.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:24:45.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:24:46.866 [DEBUG] [Thread-301235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:24:46.866 [DEBUG] [Thread-301235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:24:46.913 [DEBUG] [Thread-301235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:24:46.913 [DEBUG] [Thread-301235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:24:46.921 [DEBUG] [Thread-301235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:24:46.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:24:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:24:46.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:24:46.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:24:46.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:24:46.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:24:46.954 [DEBUG] [Thread-301235] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:24:47.679 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:24:47.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:24:48.747 [DEBUG] [Thread-301237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:24:48.853 [DEBUG] [Thread-301238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:25:03.869 [DEBUG] [Thread-301239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:25:16.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:25:16.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:25:17.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:25:17.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 24, 57), 16.39, 33.84, 0.0, 7.22, 20.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:25:17.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:24:57
2025-12-24T11:25:18.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:25:18.208 [DEBUG] [Thread-301240] [transport.py] [_log()] starting thread (client mode): 0xfabc6230
2025-12-24T11:25:18.209 [DEBUG] [Thread-301240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:25:18.211 [DEBUG] [Thread-301240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:25:18.211 [INFO] [Thread-301240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:25:18.215 [DEBUG] [Thread-301240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] client lang: <none>
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] server lang: <none>
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] kex follows: False
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:25:18.216 [DEBUG] [Thread-301240] [transport.py] [_log()] Compression: none
2025-12-24T11:25:18.217 [DEBUG] [Thread-301240] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:25:18.254 [DEBUG] [Thread-301240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:25:18.258 [DEBUG] [Thread-301240] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:25:18.260 [DEBUG] [Thread-301240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:25:18.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:25:18.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:25:18.265 [DEBUG] [Thread-301240] [transport.py] [_log()] userauth is OK
2025-12-24T11:25:18.266 [DEBUG] [Thread-301240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:25:18.266 [DEBUG] [Thread-301240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:25:18.266 [DEBUG] [Thread-301240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:25:18.266 [DEBUG] [Thread-301240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:25:18.294 [INFO] [Thread-301240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:25:18.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:25:18.952 [DEBUG] [Thread-301242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:25:18.954 [DEBUG] [Thread-301240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:25:18.955 [DEBUG] [Thread-301240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:25:18.956 [DEBUG] [Thread-301240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:25:18.985 [DEBUG] [Thread-301240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:25:18.985 [DEBUG] [Thread-301240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:25:18.988 [DEBUG] [Thread-301240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:25:18.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:25:19.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:25:19.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:25:19.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:25:19.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:25:19.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:25:19.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:25:19.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:25:19.013 [DEBUG] [Thread-301240] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:25:19.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:25:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.392084 -999.00  +20.70   5.34     38   +6.10 1 1 1 1 1   888    0 14.34 -20.91 ----- 5.3 5.3 99.4 13.1 30.2 -26.0 30.2 -25.7 29.7 -24.2 30.1 -25.9
2025-12-24T11:25:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:25:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:25:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.392084
2025-12-24T11:25:19.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:25:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:25:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:25:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:25:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:25:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:24:57', tmtdew=16.39, humidity=33.84, cloud=0.0, wind=7.22, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:24:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:25:19.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:25:19.132 [DEBUG] [Thread-301244] [transport.py] [_log()] starting thread (client mode): 0xf574e590
2025-12-24T11:25:19.132 [DEBUG] [Thread-301244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:25:19.151 [DEBUG] [Thread-301244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:25:19.151 [INFO] [Thread-301244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] client lang: <none>
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] server lang: <none>
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] kex follows: False
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] Compression: none
2025-12-24T11:25:19.159 [DEBUG] [Thread-301244] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:25:19.217 [DEBUG] [Thread-301244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:25:19.217 [DEBUG] [Thread-301244] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:25:19.218 [DEBUG] [Thread-301244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:25:19.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:25:19.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:25:19.274 [DEBUG] [Thread-301244] [transport.py] [_log()] userauth is OK
2025-12-24T11:25:19.274 [DEBUG] [Thread-301244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:25:19.274 [DEBUG] [Thread-301244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:25:19.274 [DEBUG] [Thread-301244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:25:19.274 [DEBUG] [Thread-301244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:25:19.289 [INFO] [Thread-301244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:25:19.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:25:19.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:25:20.110 [DEBUG] [Thread-301244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:25:20.110 [DEBUG] [Thread-301244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:25:20.157 [DEBUG] [Thread-301244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:25:20.157 [DEBUG] [Thread-301244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:25:20.166 [DEBUG] [Thread-301244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:25:20.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:25:20.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')
2025-12-24T11:25:20.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:25:20.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:25:20.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:25:20.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:25:20.199 [DEBUG] [Thread-301244] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:25:34.050 [DEBUG] [Thread-301246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:25:47.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:25:47.824 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:25:49.144 [DEBUG] [Thread-301247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:25:49.173 [DEBUG] [Thread-301248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:25:50.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:25:50.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:25:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:25:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 25, 31), 16.55, 33.5, 0.0, 10.87, 20.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:25:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:25:31
2025-12-24T11:25:51.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:25:51.557 [DEBUG] [Thread-301249] [transport.py] [_log()] starting thread (client mode): 0xf57a9630
2025-12-24T11:25:51.557 [DEBUG] [Thread-301249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:25:51.566 [DEBUG] [Thread-301249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:25:51.566 [INFO] [Thread-301249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:25:51.569 [DEBUG] [Thread-301249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:25:51.569 [DEBUG] [Thread-301249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:25:51.569 [DEBUG] [Thread-301249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:25:51.569 [DEBUG] [Thread-301249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:25:51.569 [DEBUG] [Thread-301249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] client lang: <none>
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] server lang: <none>
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] kex follows: False
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] Compression: none
2025-12-24T11:25:51.570 [DEBUG] [Thread-301249] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:25:51.607 [DEBUG] [Thread-301249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:25:51.611 [DEBUG] [Thread-301249] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:25:51.613 [DEBUG] [Thread-301249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:25:51.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:25:51.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:25:51.619 [DEBUG] [Thread-301249] [transport.py] [_log()] userauth is OK
2025-12-24T11:25:51.619 [DEBUG] [Thread-301249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:25:51.619 [DEBUG] [Thread-301249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:25:51.619 [DEBUG] [Thread-301249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:25:51.619 [DEBUG] [Thread-301249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:25:51.648 [INFO] [Thread-301249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:25:51.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:25:52.283 [DEBUG] [Thread-301249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:25:52.283 [DEBUG] [Thread-301249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:25:52.283 [DEBUG] [Thread-301249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:25:52.324 [DEBUG] [Thread-301249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:25:52.324 [DEBUG] [Thread-301249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:25:52.326 [DEBUG] [Thread-301249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:25:52.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:25:52.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:25:52.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:25:52.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:25:52.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:25:52.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:25:52.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:25:52.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:25:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:25:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.392431 -999.00  +20.70   1.68     38   +6.10 1 1 1 1 1   888    0 14.47 -21.53 ----- 1.7 1.7 145.8 5.3 30.7 -26.2 30.4 -25.2 29.9 -23.3 30.3 -25.1
2025-12-24T11:25:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:25:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:25:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.392431
2025-12-24T11:25:52.354 [DEBUG] [Thread-301249] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:25:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:25:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:25:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:25:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:25:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:25:52.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:25:31', tmtdew=16.55, humidity=33.5, cloud=0.0, wind=10.87, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:25:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:25:52.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:25:52.455 [DEBUG] [Thread-301252] [transport.py] [_log()] starting thread (client mode): 0xf57a9810
2025-12-24T11:25:52.455 [DEBUG] [Thread-301252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:25:52.470 [DEBUG] [Thread-301252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:25:52.470 [INFO] [Thread-301252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] client lang: <none>
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] server lang: <none>
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] kex follows: False
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] Compression: none
2025-12-24T11:25:52.478 [DEBUG] [Thread-301252] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:25:52.537 [DEBUG] [Thread-301252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:25:52.538 [DEBUG] [Thread-301252] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:25:52.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:25:52.538 [DEBUG] [Thread-301252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:25:52.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:25:52.598 [DEBUG] [Thread-301252] [transport.py] [_log()] userauth is OK
2025-12-24T11:25:52.598 [DEBUG] [Thread-301252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:25:52.598 [DEBUG] [Thread-301252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:25:52.598 [DEBUG] [Thread-301252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:25:52.598 [DEBUG] [Thread-301252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:25:52.612 [INFO] [Thread-301252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:25:52.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:25:52.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:25:53.470 [DEBUG] [Thread-301252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:25:53.470 [DEBUG] [Thread-301252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:25:53.517 [DEBUG] [Thread-301252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:25:53.517 [DEBUG] [Thread-301252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:25:53.525 [DEBUG] [Thread-301252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:25:53.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:25:53.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:25:53.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:25:53.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:25:53.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:25:53.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:25:53.558 [DEBUG] [Thread-301252] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:26:04.258 [DEBUG] [Thread-301254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:26:19.407 [DEBUG] [Thread-301255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:26:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:26:23.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:26:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:26:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 26, 4), 16.53, 33.56, 0.0, 10.08, 20.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:26:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:26:04
2025-12-24T11:26:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:26:25.278 [DEBUG] [Thread-301256] [transport.py] [_log()] starting thread (client mode): 0xfabc7670
2025-12-24T11:26:25.278 [DEBUG] [Thread-301256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:26:25.292 [DEBUG] [Thread-301256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:26:25.292 [INFO] [Thread-301256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:26:25.298 [DEBUG] [Thread-301256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:26:25.299 [DEBUG] [Thread-301256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:26:25.299 [DEBUG] [Thread-301256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:26:25.299 [DEBUG] [Thread-301256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:26:25.299 [DEBUG] [Thread-301256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:26:25.299 [DEBUG] [Thread-301256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:26:25.299 [DEBUG] [Thread-301256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:26:25.299 [DEBUG] [Thread-301256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:26:25.299 [DEBUG] [Thread-301256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:26:25.300 [DEBUG] [Thread-301256] [transport.py] [_log()] client lang: <none>
2025-12-24T11:26:25.300 [DEBUG] [Thread-301256] [transport.py] [_log()] server lang: <none>
2025-12-24T11:26:25.300 [DEBUG] [Thread-301256] [transport.py] [_log()] kex follows: False
2025-12-24T11:26:25.300 [DEBUG] [Thread-301256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:26:25.301 [DEBUG] [Thread-301256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:26:25.301 [DEBUG] [Thread-301256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:26:25.301 [DEBUG] [Thread-301256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:26:25.301 [DEBUG] [Thread-301256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:26:25.301 [DEBUG] [Thread-301256] [transport.py] [_log()] Compression: none
2025-12-24T11:26:25.302 [DEBUG] [Thread-301256] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:26:25.341 [DEBUG] [Thread-301256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:26:25.346 [DEBUG] [Thread-301256] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:26:25.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:26:25.349 [DEBUG] [Thread-301256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:26:25.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:26:25.353 [DEBUG] [Thread-301256] [transport.py] [_log()] userauth is OK
2025-12-24T11:26:25.353 [DEBUG] [Thread-301256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:26:25.354 [DEBUG] [Thread-301256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:26:25.354 [DEBUG] [Thread-301256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:26:25.354 [DEBUG] [Thread-301256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:26:25.376 [INFO] [Thread-301256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:26:25.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:26:25.998 [DEBUG] [Thread-301256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:26:25.998 [DEBUG] [Thread-301256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:26:25.999 [DEBUG] [Thread-301256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:26:26.040 [DEBUG] [Thread-301256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:26:26.040 [DEBUG] [Thread-301256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:26:26.043 [DEBUG] [Thread-301256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:26:26.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:26:26.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:26:26.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:26:26.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:26:26.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:26:26.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:26:26.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:26:26.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:26:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:26:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.392779 -999.00  +21.20  10.71     38   +6.40 1 1 1 1 1   888    0 14.11 -22.15 ----- 10.7 10.7 175.2 15.2 30.9 -25.8 30.1 -26.4 29.8 -24.1 30.4 -25.7
2025-12-24T11:26:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:26:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:26:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.392779
2025-12-24T11:26:26.074 [DEBUG] [Thread-301256] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:26:26.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:26:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:26:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:26:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:26:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:26:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:26:04', tmtdew=16.53, humidity=33.56, cloud=0.0, wind=10.08, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:25:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:26:26.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:26:26.171 [DEBUG] [Thread-301259] [transport.py] [_log()] starting thread (client mode): 0xf57bccd0
2025-12-24T11:26:26.171 [DEBUG] [Thread-301259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:26:26.186 [DEBUG] [Thread-301259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:26:26.186 [INFO] [Thread-301259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:26:26.193 [DEBUG] [Thread-301259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:26:26.194 [DEBUG] [Thread-301259] [transport.py] [_log()] client lang: <none>
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] server lang: <none>
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] kex follows: False
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] Compression: none
2025-12-24T11:26:26.195 [DEBUG] [Thread-301259] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:26:26.252 [DEBUG] [Thread-301259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:26:26.253 [DEBUG] [Thread-301259] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:26:26.253 [DEBUG] [Thread-301259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:26:26.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:26:26.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:26:26.310 [DEBUG] [Thread-301259] [transport.py] [_log()] userauth is OK
2025-12-24T11:26:26.310 [DEBUG] [Thread-301259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:26:26.310 [DEBUG] [Thread-301259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:26:26.310 [DEBUG] [Thread-301259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:26:26.310 [DEBUG] [Thread-301259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:26:26.330 [INFO] [Thread-301259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:26:26.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:26:26.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:26:27.227 [DEBUG] [Thread-301259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:26:27.228 [DEBUG] [Thread-301259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:26:27.275 [DEBUG] [Thread-301259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:26:27.275 [DEBUG] [Thread-301259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:26:27.284 [DEBUG] [Thread-301259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:26:27.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:26:27.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')
2025-12-24T11:26:27.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
2025-12-24T11:26:27.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:26:27.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:26:27.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:26:27.316 [DEBUG] [Thread-301259] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:26:34.474 [DEBUG] [Thread-301261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:26:47.974 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:26:47.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:26:49.459 [DEBUG] [Thread-301262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:26:49.578 [DEBUG] [Thread-301263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:26:57.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:26:57.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:26:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:26:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 26, 37), 16.78, 33.06, 0.0, 14.28, 20.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:26:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:26:37
2025-12-24T11:26:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:26:59.084 [DEBUG] [Thread-301264] [transport.py] [_log()] starting thread (client mode): 0xf57ab370
2025-12-24T11:26:59.085 [DEBUG] [Thread-301264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:26:59.100 [DEBUG] [Thread-301264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:26:59.101 [INFO] [Thread-301264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:26:59.107 [DEBUG] [Thread-301264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:26:59.108 [DEBUG] [Thread-301264] [transport.py] [_log()] client lang: <none>
2025-12-24T11:26:59.108 [DEBUG] [Thread-301264] [transport.py] [_log()] server lang: <none>
2025-12-24T11:26:59.108 [DEBUG] [Thread-301264] [transport.py] [_log()] kex follows: False
2025-12-24T11:26:59.108 [DEBUG] [Thread-301264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:26:59.109 [DEBUG] [Thread-301264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:26:59.109 [DEBUG] [Thread-301264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:26:59.109 [DEBUG] [Thread-301264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:26:59.109 [DEBUG] [Thread-301264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:26:59.109 [DEBUG] [Thread-301264] [transport.py] [_log()] Compression: none
2025-12-24T11:26:59.110 [DEBUG] [Thread-301264] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:26:59.150 [DEBUG] [Thread-301264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:26:59.154 [DEBUG] [Thread-301264] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:26:59.156 [DEBUG] [Thread-301264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:26:59.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:26:59.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:26:59.161 [DEBUG] [Thread-301264] [transport.py] [_log()] userauth is OK
2025-12-24T11:26:59.162 [DEBUG] [Thread-301264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:26:59.162 [DEBUG] [Thread-301264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:26:59.162 [DEBUG] [Thread-301264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:26:59.162 [DEBUG] [Thread-301264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:26:59.199 [INFO] [Thread-301264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:26:59.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:26:59.866 [DEBUG] [Thread-301264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:26:59.866 [DEBUG] [Thread-301264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:26:59.876 [DEBUG] [Thread-301264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:26:59.908 [DEBUG] [Thread-301264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:26:59.908 [DEBUG] [Thread-301264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:26:59.913 [DEBUG] [Thread-301264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:26:59.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:26:59.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:26:59.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:26:59.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:26:59.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:26:59.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:26:59.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:26:59.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:26:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:26:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.393126 -999.00  +21.40  12.43     37   +6.30 1 1 1 1 1   888    0 14.05 -23.37 ----- 12.4 12.4 163.1 20.6 30.9 -26.2 30.2 -25.5 29.7 -26.2 30.4 -24.5
2025-12-24T11:26:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:26:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:26:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.393126
2025-12-24T11:26:59.953 [DEBUG] [Thread-301264] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:26:59.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:26:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:26:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:26:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:26:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:26:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:26:37', tmtdew=16.78, humidity=33.06, cloud=0.0, wind=14.28, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:26:06.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:27:00.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:27:00.091 [DEBUG] [Thread-301267] [transport.py] [_log()] starting thread (client mode): 0xf57a8f10
2025-12-24T11:27:00.091 [DEBUG] [Thread-301267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:27:00.106 [DEBUG] [Thread-301267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:27:00.106 [INFO] [Thread-301267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] client lang: <none>
2025-12-24T11:27:00.113 [DEBUG] [Thread-301267] [transport.py] [_log()] server lang: <none>
2025-12-24T11:27:00.114 [DEBUG] [Thread-301267] [transport.py] [_log()] kex follows: False
2025-12-24T11:27:00.114 [DEBUG] [Thread-301267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:27:00.114 [DEBUG] [Thread-301267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:27:00.114 [DEBUG] [Thread-301267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:27:00.114 [DEBUG] [Thread-301267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:27:00.114 [DEBUG] [Thread-301267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:27:00.114 [DEBUG] [Thread-301267] [transport.py] [_log()] Compression: none
2025-12-24T11:27:00.114 [DEBUG] [Thread-301267] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:27:00.170 [DEBUG] [Thread-301267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:27:00.171 [DEBUG] [Thread-301267] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:27:00.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:27:00.172 [DEBUG] [Thread-301267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:27:00.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:27:00.227 [DEBUG] [Thread-301267] [transport.py] [_log()] userauth is OK
2025-12-24T11:27:00.228 [DEBUG] [Thread-301267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:27:00.228 [DEBUG] [Thread-301267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:27:00.228 [DEBUG] [Thread-301267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:27:00.228 [DEBUG] [Thread-301267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:27:00.250 [INFO] [Thread-301267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:27:00.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:27:00.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:27:01.083 [DEBUG] [Thread-301267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:27:01.083 [DEBUG] [Thread-301267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:27:01.123 [DEBUG] [Thread-301267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:27:01.123 [DEBUG] [Thread-301267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:27:01.131 [DEBUG] [Thread-301267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:27:01.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:27:01.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:27:01.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
2025-12-24T11:27:01.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:27:01.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:27:01.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:27:01.164 [DEBUG] [Thread-301267] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:27:04.661 [DEBUG] [Thread-301269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:27:19.809 [DEBUG] [Thread-301270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:27:31.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:27:31.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:27:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:27:32.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 27, 10), 16.9, 32.85, 0.0, 14.14, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:27:32.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:27:10
2025-12-24T11:27:32.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:27:32.931 [DEBUG] [Thread-301271] [transport.py] [_log()] starting thread (client mode): 0xf57be4d0
2025-12-24T11:27:32.932 [DEBUG] [Thread-301271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:27:32.944 [DEBUG] [Thread-301271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:27:32.944 [INFO] [Thread-301271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:27:32.950 [DEBUG] [Thread-301271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] client lang: <none>
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] server lang: <none>
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] kex follows: False
2025-12-24T11:27:32.951 [DEBUG] [Thread-301271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:27:32.952 [DEBUG] [Thread-301271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:27:32.952 [DEBUG] [Thread-301271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:27:32.952 [DEBUG] [Thread-301271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:27:32.952 [DEBUG] [Thread-301271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:27:32.952 [DEBUG] [Thread-301271] [transport.py] [_log()] Compression: none
2025-12-24T11:27:32.952 [DEBUG] [Thread-301271] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:27:32.989 [DEBUG] [Thread-301271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:27:32.995 [DEBUG] [Thread-301271] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:27:32.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:27:33.001 [DEBUG] [Thread-301271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:27:33.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:27:33.005 [DEBUG] [Thread-301271] [transport.py] [_log()] userauth is OK
2025-12-24T11:27:33.005 [DEBUG] [Thread-301271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:27:33.006 [DEBUG] [Thread-301271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:27:33.006 [DEBUG] [Thread-301271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:27:33.006 [DEBUG] [Thread-301271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:27:33.048 [INFO] [Thread-301271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:27:33.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:27:33.717 [DEBUG] [Thread-301271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:27:33.717 [DEBUG] [Thread-301271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:27:33.719 [DEBUG] [Thread-301271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:27:33.758 [DEBUG] [Thread-301271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:27:33.758 [DEBUG] [Thread-301271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:27:33.761 [DEBUG] [Thread-301271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:27:33.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:27:33.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:27:33.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:27:33.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:27:33.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:27:33.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:27:33.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:27:33.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:27:33.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:27:33.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.393473 -999.00  +21.30  17.20     37   +6.30 1 1 1 1 1   888    0 14.00 -26.91 ----- 17.2 17.2 141.6 21.2 30.9 -26.6 30.1 -26.7 29.6 -26.3 30.3 -25.6
2025-12-24T11:27:33.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:27:33.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:27:33.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.393473
2025-12-24T11:27:33.797 [DEBUG] [Thread-301271] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:27:33.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:27:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:27:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:27:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:27:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:27:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:27:10', tmtdew=16.9, humidity=32.85, cloud=0.0, wind=14.14, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:26:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:27:33.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:27:33.904 [DEBUG] [Thread-301274] [transport.py] [_log()] starting thread (client mode): 0xf5771f30
2025-12-24T11:27:33.904 [DEBUG] [Thread-301274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:27:33.918 [DEBUG] [Thread-301274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:27:33.918 [INFO] [Thread-301274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:27:33.925 [DEBUG] [Thread-301274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] client lang: <none>
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] server lang: <none>
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] kex follows: False
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:27:33.926 [DEBUG] [Thread-301274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:27:33.927 [DEBUG] [Thread-301274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:27:33.927 [DEBUG] [Thread-301274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:27:33.927 [DEBUG] [Thread-301274] [transport.py] [_log()] Compression: none
2025-12-24T11:27:33.927 [DEBUG] [Thread-301274] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:27:33.991 [DEBUG] [Thread-301274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:27:33.992 [DEBUG] [Thread-301274] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:27:33.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:27:33.993 [DEBUG] [Thread-301274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:27:33.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:27:34.051 [DEBUG] [Thread-301274] [transport.py] [_log()] userauth is OK
2025-12-24T11:27:34.051 [DEBUG] [Thread-301274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:27:34.051 [DEBUG] [Thread-301274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:27:34.052 [DEBUG] [Thread-301274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:27:34.052 [DEBUG] [Thread-301274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:27:34.071 [INFO] [Thread-301274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:27:34.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:27:34.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:27:34.866 [DEBUG] [Thread-301274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:27:34.866 [DEBUG] [Thread-301274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:27:34.880 [DEBUG] [Thread-301276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:27:34.913 [DEBUG] [Thread-301274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:27:34.913 [DEBUG] [Thread-301274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:27:34.922 [DEBUG] [Thread-301274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:27:34.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:27:34.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')
2025-12-24T11:27:34.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:27:34.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:27:34.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:27:34.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:27:34.958 [DEBUG] [Thread-301274] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:27:48.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:27:48.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:27:49.701 [DEBUG] [Thread-301277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:27:50.017 [DEBUG] [Thread-301278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:28:04.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:28:04.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:28:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:28:05.047 [DEBUG] [Thread-301279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:28:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 27, 43), 17.02, 32.76, 0.0, 12.44, 20.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:28:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:27:43
2025-12-24T11:28:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:28:06.270 [DEBUG] [Thread-301280] [transport.py] [_log()] starting thread (client mode): 0xf57719c0
2025-12-24T11:28:06.271 [DEBUG] [Thread-301280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:28:06.279 [DEBUG] [Thread-301280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:28:06.279 [INFO] [Thread-301280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:28:06.286 [DEBUG] [Thread-301280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] client lang: <none>
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] server lang: <none>
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] kex follows: False
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:28:06.287 [DEBUG] [Thread-301280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:28:06.288 [DEBUG] [Thread-301280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:28:06.288 [DEBUG] [Thread-301280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:28:06.288 [DEBUG] [Thread-301280] [transport.py] [_log()] Compression: none
2025-12-24T11:28:06.288 [DEBUG] [Thread-301280] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:28:06.317 [DEBUG] [Thread-301280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:28:06.319 [DEBUG] [Thread-301280] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:28:06.320 [DEBUG] [Thread-301280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:28:06.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:28:06.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:28:06.323 [DEBUG] [Thread-301280] [transport.py] [_log()] userauth is OK
2025-12-24T11:28:06.323 [DEBUG] [Thread-301280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:28:06.323 [DEBUG] [Thread-301280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:28:06.323 [DEBUG] [Thread-301280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:28:06.323 [DEBUG] [Thread-301280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:28:06.354 [INFO] [Thread-301280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:28:06.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:28:06.989 [DEBUG] [Thread-301280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:28:06.990 [DEBUG] [Thread-301280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:28:06.990 [DEBUG] [Thread-301280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:28:07.031 [DEBUG] [Thread-301280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:28:07.031 [DEBUG] [Thread-301280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:28:07.033 [DEBUG] [Thread-301280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:28:07.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:28:07.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:28:07.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:28:07.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:28:07.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:28:07.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:28:07.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:28:07.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:28:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:28:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.393820 -999.00  +21.20  14.65     37   +6.20 1 1 1 1 1   888    0 13.94 -25.92 ----- 14.7 14.7 171.4 18.4 30.8 -26.6 30.0 -25.7 29.5 -24.2 30.2 -24.9
2025-12-24T11:28:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:28:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:28:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.393820
2025-12-24T11:28:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:28:07.058 [DEBUG] [Thread-301280] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:28:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:28:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:28:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:28:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:28:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:27:43', tmtdew=17.02, humidity=32.76, cloud=0.0, wind=12.44, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:27:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:28:07.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:28:07.147 [DEBUG] [Thread-301283] [transport.py] [_log()] starting thread (client mode): 0xf57be050
2025-12-24T11:28:07.147 [DEBUG] [Thread-301283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:28:07.161 [DEBUG] [Thread-301283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:28:07.161 [INFO] [Thread-301283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] client lang: <none>
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] server lang: <none>
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] kex follows: False
2025-12-24T11:28:07.168 [DEBUG] [Thread-301283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:28:07.169 [DEBUG] [Thread-301283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:28:07.169 [DEBUG] [Thread-301283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:28:07.169 [DEBUG] [Thread-301283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:28:07.169 [DEBUG] [Thread-301283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:28:07.169 [DEBUG] [Thread-301283] [transport.py] [_log()] Compression: none
2025-12-24T11:28:07.169 [DEBUG] [Thread-301283] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:28:07.230 [DEBUG] [Thread-301283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:28:07.231 [DEBUG] [Thread-301283] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:28:07.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:28:07.232 [DEBUG] [Thread-301283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:28:07.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:28:07.291 [DEBUG] [Thread-301283] [transport.py] [_log()] userauth is OK
2025-12-24T11:28:07.291 [DEBUG] [Thread-301283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:28:07.292 [DEBUG] [Thread-301283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:28:07.292 [DEBUG] [Thread-301283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:28:07.292 [DEBUG] [Thread-301283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:28:07.310 [INFO] [Thread-301283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:28:07.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:28:07.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:28:08.189 [DEBUG] [Thread-301283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:28:08.189 [DEBUG] [Thread-301283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:28:08.237 [DEBUG] [Thread-301283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:28:08.237 [DEBUG] [Thread-301283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:28:08.245 [DEBUG] [Thread-301283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:28:08.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:28:08.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:28: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') -> 00000000
2025-12-24T11:28:08.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:28:08.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:28:08.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:28:08.278 [DEBUG] [Thread-301283] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:28:20.146 [DEBUG] [Thread-301285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:28:35.251 [DEBUG] [Thread-301286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:28:38.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:28:38.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:28:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:28:39.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 28, 17), 17.06, 32.68, 0.0, 11.52, 20.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:28:39.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:28:17
2025-12-24T11:28:39.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:28:39.964 [DEBUG] [Thread-301287] [transport.py] [_log()] starting thread (client mode): 0xf5772c50
2025-12-24T11:28:39.965 [DEBUG] [Thread-301287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:28:39.978 [DEBUG] [Thread-301287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:28:39.978 [INFO] [Thread-301287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:28:39.983 [DEBUG] [Thread-301287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:28:39.983 [DEBUG] [Thread-301287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:28:39.983 [DEBUG] [Thread-301287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:28:39.983 [DEBUG] [Thread-301287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:28:39.983 [DEBUG] [Thread-301287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:28:39.983 [DEBUG] [Thread-301287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:28:39.983 [DEBUG] [Thread-301287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:28:39.984 [DEBUG] [Thread-301287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:28:39.984 [DEBUG] [Thread-301287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:28:39.984 [DEBUG] [Thread-301287] [transport.py] [_log()] client lang: <none>
2025-12-24T11:28:39.984 [DEBUG] [Thread-301287] [transport.py] [_log()] server lang: <none>
2025-12-24T11:28:39.984 [DEBUG] [Thread-301287] [transport.py] [_log()] kex follows: False
2025-12-24T11:28:39.984 [DEBUG] [Thread-301287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:28:39.984 [DEBUG] [Thread-301287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:28:39.984 [DEBUG] [Thread-301287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:28:39.985 [DEBUG] [Thread-301287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:28:39.985 [DEBUG] [Thread-301287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:28:39.985 [DEBUG] [Thread-301287] [transport.py] [_log()] Compression: none
2025-12-24T11:28:39.985 [DEBUG] [Thread-301287] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:28:40.020 [DEBUG] [Thread-301287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:28:40.024 [DEBUG] [Thread-301287] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:28:40.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:28:40.027 [DEBUG] [Thread-301287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:28:40.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:28:40.032 [DEBUG] [Thread-301287] [transport.py] [_log()] userauth is OK
2025-12-24T11:28:40.032 [DEBUG] [Thread-301287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:28:40.033 [DEBUG] [Thread-301287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:28:40.033 [DEBUG] [Thread-301287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:28:40.033 [DEBUG] [Thread-301287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:28:40.077 [INFO] [Thread-301287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:28:40.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:28:40.711 [DEBUG] [Thread-301287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:28:40.712 [DEBUG] [Thread-301287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:28:40.721 [DEBUG] [Thread-301287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:28:40.752 [DEBUG] [Thread-301287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:28:40.752 [DEBUG] [Thread-301287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:28:40.754 [DEBUG] [Thread-301287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:28:40.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:28:40.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:28:40.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:28:40.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:28:40.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:28:40.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:28:40.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:28:40.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:28:40.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:28:40.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.394515 -999.00  +21.50   9.45     37   +6.30 1 1 1 1 1   888    0 14.09 -26.50 ----- 9.4 9.4 192.8 14.5 30.8 -25.8 29.8 -28.3 29.6 -24.3 30.2 -25.1
2025-12-24T11:28:40.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:28:40.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:28:40.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.394515
2025-12-24T11:28:40.783 [DEBUG] [Thread-301287] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:28:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:28:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:28:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:28:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:28:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:28:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:28:17', tmtdew=17.06, humidity=32.68, cloud=0.0, wind=11.52, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:28:06.096', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:28:40.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:28:40.880 [DEBUG] [Thread-301290] [transport.py] [_log()] starting thread (client mode): 0xf574cfd0
2025-12-24T11:28:40.880 [DEBUG] [Thread-301290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:28:40.895 [DEBUG] [Thread-301290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:28:40.895 [INFO] [Thread-301290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:28:40.902 [DEBUG] [Thread-301290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:28:40.902 [DEBUG] [Thread-301290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:28:40.902 [DEBUG] [Thread-301290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:28:40.902 [DEBUG] [Thread-301290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:28:40.902 [DEBUG] [Thread-301290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] client lang: <none>
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] server lang: <none>
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] kex follows: False
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] Compression: none
2025-12-24T11:28:40.903 [DEBUG] [Thread-301290] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:28:40.961 [DEBUG] [Thread-301290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:28:40.961 [DEBUG] [Thread-301290] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:28:40.962 [DEBUG] [Thread-301290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:28:40.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:28:40.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:28:41.018 [DEBUG] [Thread-301290] [transport.py] [_log()] userauth is OK
2025-12-24T11:28:41.018 [DEBUG] [Thread-301290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:28:41.018 [DEBUG] [Thread-301290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:28:41.018 [DEBUG] [Thread-301290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:28:41.018 [DEBUG] [Thread-301290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:28:41.033 [INFO] [Thread-301290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:28:41.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:28:41.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:28:41.847 [DEBUG] [Thread-301290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:28:41.847 [DEBUG] [Thread-301290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:28:41.895 [DEBUG] [Thread-301290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:28:41.895 [DEBUG] [Thread-301290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:28:41.904 [DEBUG] [Thread-301290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:28:41.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:28:41.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:28:41.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:28:41.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:28:41.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:28:41.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:28:41.937 [DEBUG] [Thread-301290] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:28:48.270 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:28:48.279 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:28:49.993 [DEBUG] [Thread-301292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:28:50.301 [DEBUG] [Thread-301293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:29:05.422 [DEBUG] [Thread-301294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:29:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:29:11.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:29:11.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:29:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 28, 50), 16.97, 32.88, 0.0, 11.47, 21.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:29:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:28:50
2025-12-24T11:29:13.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:29:13.469 [DEBUG] [Thread-301295] [transport.py] [_log()] starting thread (client mode): 0xf5743760
2025-12-24T11:29:13.470 [DEBUG] [Thread-301295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:29:13.482 [DEBUG] [Thread-301295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:29:13.482 [INFO] [Thread-301295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:29:13.487 [DEBUG] [Thread-301295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:29:13.487 [DEBUG] [Thread-301295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:29:13.487 [DEBUG] [Thread-301295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:29:13.487 [DEBUG] [Thread-301295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:29:13.487 [DEBUG] [Thread-301295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:29:13.487 [DEBUG] [Thread-301295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:29:13.487 [DEBUG] [Thread-301295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:29:13.487 [DEBUG] [Thread-301295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:29:13.488 [DEBUG] [Thread-301295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:29:13.488 [DEBUG] [Thread-301295] [transport.py] [_log()] client lang: <none>
2025-12-24T11:29:13.488 [DEBUG] [Thread-301295] [transport.py] [_log()] server lang: <none>
2025-12-24T11:29:13.488 [DEBUG] [Thread-301295] [transport.py] [_log()] kex follows: False
2025-12-24T11:29:13.488 [DEBUG] [Thread-301295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:29:13.489 [DEBUG] [Thread-301295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:29:13.489 [DEBUG] [Thread-301295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:29:13.489 [DEBUG] [Thread-301295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:29:13.489 [DEBUG] [Thread-301295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:29:13.489 [DEBUG] [Thread-301295] [transport.py] [_log()] Compression: none
2025-12-24T11:29:13.489 [DEBUG] [Thread-301295] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:29:13.529 [DEBUG] [Thread-301295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:29:13.534 [DEBUG] [Thread-301295] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:29:13.536 [DEBUG] [Thread-301295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:29:13.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:29:13.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:29:13.542 [DEBUG] [Thread-301295] [transport.py] [_log()] userauth is OK
2025-12-24T11:29:13.543 [DEBUG] [Thread-301295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:29:13.543 [DEBUG] [Thread-301295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:29:13.543 [DEBUG] [Thread-301295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:29:13.543 [DEBUG] [Thread-301295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:29:13.584 [INFO] [Thread-301295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:29:13.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:29:14.250 [DEBUG] [Thread-301295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:29:14.250 [DEBUG] [Thread-301295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:29:14.251 [DEBUG] [Thread-301295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:29:14.291 [DEBUG] [Thread-301295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:29:14.291 [DEBUG] [Thread-301295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:29:14.294 [DEBUG] [Thread-301295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:29:14.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:29:14.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:29:14.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:29:14.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:29:14.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:29:14.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:29:14.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:29:14.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:29:14.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:29:14.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.394862 -999.00  +21.60  11.79     37   +6.40 1 1 1 1 1   888    0 14.21 -21.77 ----- 11.8 11.8 164.4 14.4 30.7 -26.2 29.6 -29.7 29.5 -23.9 30.1 -26.0
2025-12-24T11:29:14.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:29:14.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:29:14.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.394862
2025-12-24T11:29:14.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:29:14.327 [DEBUG] [Thread-301295] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:29:14.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:29:14.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:29:14.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:29:14.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:29:14.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:28:50', tmtdew=16.97, humidity=32.88, cloud=0.0, wind=11.47, temperature=21.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:28:36.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:29:14.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:29:14.419 [DEBUG] [Thread-301298] [transport.py] [_log()] starting thread (client mode): 0xf57aae60
2025-12-24T11:29:14.419 [DEBUG] [Thread-301298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:29:14.433 [DEBUG] [Thread-301298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:29:14.433 [INFO] [Thread-301298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] client lang: <none>
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] server lang: <none>
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] kex follows: False
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] Compression: none
2025-12-24T11:29:14.441 [DEBUG] [Thread-301298] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:29:14.501 [DEBUG] [Thread-301298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:29:14.501 [DEBUG] [Thread-301298] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:29:14.502 [DEBUG] [Thread-301298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:29:14.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:29:14.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:29:14.563 [DEBUG] [Thread-301298] [transport.py] [_log()] userauth is OK
2025-12-24T11:29:14.563 [DEBUG] [Thread-301298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:29:14.563 [DEBUG] [Thread-301298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:29:14.563 [DEBUG] [Thread-301298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:29:14.563 [DEBUG] [Thread-301298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:29:14.578 [INFO] [Thread-301298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:29:14.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:29:14.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:29:15.389 [DEBUG] [Thread-301298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:29:15.390 [DEBUG] [Thread-301298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:29:15.428 [DEBUG] [Thread-301298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:29:15.428 [DEBUG] [Thread-301298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:29:15.437 [DEBUG] [Thread-301298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:29:15.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:29:15.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:29:15.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:29:15.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:29:15.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:29:15.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:29:15.476 [DEBUG] [Thread-301298] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:29:20.457 [DEBUG] [Thread-301300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:29:35.570 [DEBUG] [Thread-301301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:29:45.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:29:45.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:29:45.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:29:46.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 29, 23), 17.05, 32.77, 0.0, 12.83, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:29:46.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:29:23
2025-12-24T11:29:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:29:47.287 [DEBUG] [Thread-301302] [transport.py] [_log()] starting thread (client mode): 0xf5741420
2025-12-24T11:29:47.287 [DEBUG] [Thread-301302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:29:47.301 [DEBUG] [Thread-301302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:29:47.301 [INFO] [Thread-301302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] client lang: <none>
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] server lang: <none>
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] kex follows: False
2025-12-24T11:29:47.306 [DEBUG] [Thread-301302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:29:47.307 [DEBUG] [Thread-301302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:29:47.307 [DEBUG] [Thread-301302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:29:47.307 [DEBUG] [Thread-301302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:29:47.307 [DEBUG] [Thread-301302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:29:47.307 [DEBUG] [Thread-301302] [transport.py] [_log()] Compression: none
2025-12-24T11:29:47.307 [DEBUG] [Thread-301302] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:29:47.340 [DEBUG] [Thread-301302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:29:47.344 [DEBUG] [Thread-301302] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:29:47.346 [DEBUG] [Thread-301302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:29:47.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:29:47.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:29:47.351 [DEBUG] [Thread-301302] [transport.py] [_log()] userauth is OK
2025-12-24T11:29:47.351 [DEBUG] [Thread-301302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:29:47.352 [DEBUG] [Thread-301302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:29:47.352 [DEBUG] [Thread-301302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:29:47.352 [DEBUG] [Thread-301302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:29:47.389 [INFO] [Thread-301302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:29:47.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:29:48.159 [DEBUG] [Thread-301302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:29:48.159 [DEBUG] [Thread-301302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:29:48.159 [DEBUG] [Thread-301302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:29:48.200 [DEBUG] [Thread-301302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:29:48.200 [DEBUG] [Thread-301302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:29:48.202 [DEBUG] [Thread-301302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:29:48.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:29:48.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:29:48.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:29:48.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:29:48.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:29:48.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:29:48.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:29:48.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:29:48.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:29:48.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.395209 -999.00  +21.70  17.98     37   +6.60 1 1 1 1 1   888    0 14.37 -18.61 ----- 18.0 18.0 137.6 23.4 30.8 -25.6 29.8 -25.0 29.4 -24.9 30.2 -25.1
2025-12-24T11:29:48.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:29:48.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:29:48.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.395209
2025-12-24T11:29:48.229 [DEBUG] [Thread-301302] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:29:48.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:29:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:29:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:29:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:29:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:29:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:29:23', tmtdew=17.05, humidity=32.77, cloud=0.0, wind=12.83, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:29:06.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:29:48.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:29:48.327 [DEBUG] [Thread-301305] [transport.py] [_log()] starting thread (client mode): 0xf572c7f0
2025-12-24T11:29:48.327 [DEBUG] [Thread-301305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:29:48.341 [DEBUG] [Thread-301305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:29:48.341 [INFO] [Thread-301305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:29:48.348 [DEBUG] [Thread-301305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:29:48.348 [DEBUG] [Thread-301305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:29:48.348 [DEBUG] [Thread-301305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:29:48.348 [DEBUG] [Thread-301305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:29:48.348 [DEBUG] [Thread-301305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:29:48.348 [DEBUG] [Thread-301305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] client lang: <none>
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] server lang: <none>
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] kex follows: False
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] Compression: none
2025-12-24T11:29:48.349 [DEBUG] [Thread-301305] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:29:48.409 [DEBUG] [Thread-301305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:29:48.410 [DEBUG] [Thread-301305] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:29:48.411 [DEBUG] [Thread-301305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:29:48.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:29:48.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:29:48.422 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:29:48.423 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:29:48.467 [DEBUG] [Thread-301305] [transport.py] [_log()] userauth is OK
2025-12-24T11:29:48.467 [DEBUG] [Thread-301305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:29:48.467 [DEBUG] [Thread-301305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:29:48.467 [DEBUG] [Thread-301305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:29:48.467 [DEBUG] [Thread-301305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:29:48.485 [INFO] [Thread-301305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:29:48.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:29:48.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:29:49.300 [DEBUG] [Thread-301305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:29:49.300 [DEBUG] [Thread-301305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:29:49.347 [DEBUG] [Thread-301305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:29:49.347 [DEBUG] [Thread-301305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:29:49.356 [DEBUG] [Thread-301305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:29:49.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:29:49.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:29:49.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:29:49.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:29:49.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:29:49.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:29:49.394 [DEBUG] [Thread-301305] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:29:50.312 [DEBUG] [Thread-301307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:29:50.646 [DEBUG] [Thread-301308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:30:05.796 [DEBUG] [Thread-301309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:30:19.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:30:19.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:30:19.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:30:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 29, 56), 17.29, 32.3, 0.0, 14.03, 21.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:30:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:29:56
2025-12-24T11:30:20.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:30:20.806 [DEBUG] [Thread-301310] [transport.py] [_log()] starting thread (client mode): 0xf5743a30
2025-12-24T11:30:20.807 [DEBUG] [Thread-301310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:30:20.816 [DEBUG] [Thread-301310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:30:20.817 [INFO] [Thread-301310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:30:20.823 [DEBUG] [Thread-301310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:30:20.824 [DEBUG] [Thread-301310] [transport.py] [_log()] client lang: <none>
2025-12-24T11:30:20.824 [DEBUG] [Thread-301310] [transport.py] [_log()] server lang: <none>
2025-12-24T11:30:20.824 [DEBUG] [Thread-301310] [transport.py] [_log()] kex follows: False
2025-12-24T11:30:20.824 [DEBUG] [Thread-301310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:30:20.824 [DEBUG] [Thread-301310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:30:20.825 [DEBUG] [Thread-301310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:30:20.825 [DEBUG] [Thread-301310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:30:20.825 [DEBUG] [Thread-301310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:30:20.825 [DEBUG] [Thread-301310] [transport.py] [_log()] Compression: none
2025-12-24T11:30:20.825 [DEBUG] [Thread-301310] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:30:20.868 [DEBUG] [Thread-301310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:30:20.873 [DEBUG] [Thread-301310] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:30:20.874 [DEBUG] [Thread-301310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:30:20.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:30:20.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:30:20.881 [DEBUG] [Thread-301310] [transport.py] [_log()] userauth is OK
2025-12-24T11:30:20.881 [DEBUG] [Thread-301310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:30:20.881 [DEBUG] [Thread-301310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:30:20.881 [DEBUG] [Thread-301310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:30:20.881 [DEBUG] [Thread-301310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:30:20.907 [DEBUG] [Thread-301312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:30:20.909 [INFO] [Thread-301310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:30:20.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:30:21.608 [DEBUG] [Thread-301310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:30:21.608 [DEBUG] [Thread-301310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:30:21.617 [DEBUG] [Thread-301310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:30:21.649 [DEBUG] [Thread-301310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:30:21.649 [DEBUG] [Thread-301310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:30:21.653 [DEBUG] [Thread-301310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:30:21.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:30:21.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:30:21.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:30:21.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:30:21.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:30:21.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:30:21.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:30:21.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:30:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:30:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.395556 -999.00  +21.50  13.60     37   +6.40 1 1 1 1 1   888    0 14.34 -14.08 ----- 13.6 13.6 138.8 15.6 30.7 -26.3 29.8 -25.6 29.5 -24.3 30.1 -26.3
2025-12-24T11:30:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:30:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:30:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.395556
2025-12-24T11:30:21.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:30:21.695 [DEBUG] [Thread-301310] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:30:21.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:30:21.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:30:21.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:30:21.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:30:21.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:29:56', tmtdew=17.29, humidity=32.3, cloud=0.0, wind=14.03, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:29:36.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:30:21.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:30:21.793 [DEBUG] [Thread-301314] [transport.py] [_log()] starting thread (client mode): 0xf57724a0
2025-12-24T11:30:21.793 [DEBUG] [Thread-301314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:30:21.807 [DEBUG] [Thread-301314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:30:21.808 [INFO] [Thread-301314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:30:21.816 [DEBUG] [Thread-301314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:30:21.816 [DEBUG] [Thread-301314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:30:21.816 [DEBUG] [Thread-301314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:30:21.816 [DEBUG] [Thread-301314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:30:21.816 [DEBUG] [Thread-301314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:30:21.817 [DEBUG] [Thread-301314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:30:21.817 [DEBUG] [Thread-301314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:30:21.817 [DEBUG] [Thread-301314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:30:21.817 [DEBUG] [Thread-301314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:30:21.817 [DEBUG] [Thread-301314] [transport.py] [_log()] client lang: <none>
2025-12-24T11:30:21.817 [DEBUG] [Thread-301314] [transport.py] [_log()] server lang: <none>
2025-12-24T11:30:21.817 [DEBUG] [Thread-301314] [transport.py] [_log()] kex follows: False
2025-12-24T11:30:21.818 [DEBUG] [Thread-301314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:30:21.818 [DEBUG] [Thread-301314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:30:21.818 [DEBUG] [Thread-301314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:30:21.818 [DEBUG] [Thread-301314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:30:21.818 [DEBUG] [Thread-301314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:30:21.818 [DEBUG] [Thread-301314] [transport.py] [_log()] Compression: none
2025-12-24T11:30:21.818 [DEBUG] [Thread-301314] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:30:21.875 [DEBUG] [Thread-301314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:30:21.876 [DEBUG] [Thread-301314] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:30:21.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:30:21.877 [DEBUG] [Thread-301314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:30:21.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:30:21.931 [DEBUG] [Thread-301314] [transport.py] [_log()] userauth is OK
2025-12-24T11:30:21.931 [DEBUG] [Thread-301314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:30:21.932 [DEBUG] [Thread-301314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:30:21.932 [DEBUG] [Thread-301314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:30:21.932 [DEBUG] [Thread-301314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:30:21.956 [INFO] [Thread-301314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:30:21.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:30:21.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:30:22.795 [DEBUG] [Thread-301314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:30:22.796 [DEBUG] [Thread-301314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:30:22.843 [DEBUG] [Thread-301314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:30:22.843 [DEBUG] [Thread-301314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:30:22.852 [DEBUG] [Thread-301314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:30:22.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:30:22.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:30:22.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:30:22.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:30:22.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:30:22.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:30:22.888 [DEBUG] [Thread-301314] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:30:36.028 [DEBUG] [Thread-301316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:30:48.569 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:30:48.572 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:30:50.547 [DEBUG] [Thread-301317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:30:51.184 [DEBUG] [Thread-301318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:30:52.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:30:52.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:30:52.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:30:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 30, 29), 17.27, 32.34, 0.0, 12.41, 21.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:30:53.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:30:29
2025-12-24T11:30:54.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:30:54.289 [DEBUG] [Thread-301319] [transport.py] [_log()] starting thread (client mode): 0xf81e7700
2025-12-24T11:30:54.290 [DEBUG] [Thread-301319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:30:54.291 [DEBUG] [Thread-301319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:30:54.291 [INFO] [Thread-301319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] client lang: <none>
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] server lang: <none>
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] kex follows: False
2025-12-24T11:30:54.295 [DEBUG] [Thread-301319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:30:54.296 [DEBUG] [Thread-301319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:30:54.296 [DEBUG] [Thread-301319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:30:54.296 [DEBUG] [Thread-301319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:30:54.296 [DEBUG] [Thread-301319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:30:54.296 [DEBUG] [Thread-301319] [transport.py] [_log()] Compression: none
2025-12-24T11:30:54.296 [DEBUG] [Thread-301319] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:30:54.318 [DEBUG] [Thread-301319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:30:54.320 [DEBUG] [Thread-301319] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:30:54.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:30:54.322 [DEBUG] [Thread-301319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:30:54.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:30:54.325 [DEBUG] [Thread-301319] [transport.py] [_log()] userauth is OK
2025-12-24T11:30:54.325 [DEBUG] [Thread-301319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:30:54.325 [DEBUG] [Thread-301319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:30:54.325 [DEBUG] [Thread-301319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:30:54.325 [DEBUG] [Thread-301319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:30:54.337 [INFO] [Thread-301319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:30:54.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:30:55.148 [DEBUG] [Thread-301319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:30:55.148 [DEBUG] [Thread-301319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:30:55.149 [DEBUG] [Thread-301319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:30:55.189 [DEBUG] [Thread-301319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:30:55.189 [DEBUG] [Thread-301319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:30:55.192 [DEBUG] [Thread-301319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:30:55.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:30:55.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:30:55.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:30:55.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:30:55.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:30:55.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:30:55.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:30:55.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:30:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:30:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.395903 -999.00  +21.40  11.94     37   +6.30 1 1 1 1 1   888    0 14.49 -8.29 ----- 11.9 11.9 136.6 13.9 30.8 -25.6 29.8 -25.4 29.4 -24.9 30.1 -25.7
2025-12-24T11:30:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:30:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:30:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.395903
2025-12-24T11:30:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:30:55.230 [DEBUG] [Thread-301319] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:30:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:30:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:30:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:30:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:30:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:30:29', tmtdew=17.27, humidity=32.34, cloud=0.0, wind=12.41, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:30:06.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:30:55.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:30:55.319 [DEBUG] [Thread-301322] [transport.py] [_log()] starting thread (client mode): 0xf81e4340
2025-12-24T11:30:55.319 [DEBUG] [Thread-301322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:30:55.334 [DEBUG] [Thread-301322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:30:55.334 [INFO] [Thread-301322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] client lang: <none>
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] server lang: <none>
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] kex follows: False
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:30:55.341 [DEBUG] [Thread-301322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:30:55.342 [DEBUG] [Thread-301322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:30:55.342 [DEBUG] [Thread-301322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:30:55.342 [DEBUG] [Thread-301322] [transport.py] [_log()] Compression: none
2025-12-24T11:30:55.342 [DEBUG] [Thread-301322] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:30:55.397 [DEBUG] [Thread-301322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:30:55.397 [DEBUG] [Thread-301322] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:30:55.397 [DEBUG] [Thread-301322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:30:55.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:30:55.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:30:55.455 [DEBUG] [Thread-301322] [transport.py] [_log()] userauth is OK
2025-12-24T11:30:55.455 [DEBUG] [Thread-301322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:30:55.455 [DEBUG] [Thread-301322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:30:55.455 [DEBUG] [Thread-301322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:30:55.455 [DEBUG] [Thread-301322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:30:55.470 [INFO] [Thread-301322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:30:55.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:30:55.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:30:56.285 [DEBUG] [Thread-301322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:30:56.285 [DEBUG] [Thread-301322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:30:56.332 [DEBUG] [Thread-301322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:30:56.333 [DEBUG] [Thread-301322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:30:56.341 [DEBUG] [Thread-301322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:30:56.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:30:56.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:30:56.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:30:56.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:30:56.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:30:56.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:30:56.374 [DEBUG] [Thread-301322] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:31:06.304 [DEBUG] [Thread-301324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:31:21.489 [DEBUG] [Thread-301325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:31:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:31:26.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:31:26.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:31:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 31, 2), 17.27, 32.35, 0.0, 15.23, 21.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:31:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:31:02
2025-12-24T11:31:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:31:27.989 [DEBUG] [Thread-301326] [transport.py] [_log()] starting thread (client mode): 0xf5771150
2025-12-24T11:31:27.989 [DEBUG] [Thread-301326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:31:28.003 [DEBUG] [Thread-301326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:31:28.003 [INFO] [Thread-301326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:31:28.008 [DEBUG] [Thread-301326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] client lang: <none>
2025-12-24T11:31:28.009 [DEBUG] [Thread-301326] [transport.py] [_log()] server lang: <none>
2025-12-24T11:31:28.010 [DEBUG] [Thread-301326] [transport.py] [_log()] kex follows: False
2025-12-24T11:31:28.010 [DEBUG] [Thread-301326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:31:28.010 [DEBUG] [Thread-301326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:31:28.010 [DEBUG] [Thread-301326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:31:28.011 [DEBUG] [Thread-301326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:31:28.011 [DEBUG] [Thread-301326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:31:28.011 [DEBUG] [Thread-301326] [transport.py] [_log()] Compression: none
2025-12-24T11:31:28.011 [DEBUG] [Thread-301326] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:31:28.050 [DEBUG] [Thread-301326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:31:28.056 [DEBUG] [Thread-301326] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:31:28.058 [DEBUG] [Thread-301326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:31:28.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:31:28.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:31:28.063 [DEBUG] [Thread-301326] [transport.py] [_log()] userauth is OK
2025-12-24T11:31:28.064 [DEBUG] [Thread-301326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:31:28.064 [DEBUG] [Thread-301326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:31:28.064 [DEBUG] [Thread-301326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:31:28.064 [DEBUG] [Thread-301326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:31:28.102 [INFO] [Thread-301326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:31:28.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:31:28.751 [DEBUG] [Thread-301326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:31:28.759 [DEBUG] [Thread-301326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:31:28.760 [DEBUG] [Thread-301326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:31:28.792 [DEBUG] [Thread-301326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:31:28.792 [DEBUG] [Thread-301326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:31:28.794 [DEBUG] [Thread-301326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:31:28.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:31:28.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:31:28.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:31:28.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:31:28.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:31:28.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:31:28.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:31:28.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:31:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:31:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.396251 -999.00  +21.50  14.08     38   +6.60 1 1 1 1 1   888    0 14.96 -4.13 ----- 14.1 14.1 116.8 15.8 30.6 -25.9 29.9 -25.4 29.6 -23.2 30.1 -26.0
2025-12-24T11:31:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:31:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:31:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.396251
2025-12-24T11:31:28.824 [DEBUG] [Thread-301326] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:31:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:31:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:31:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:31:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:31:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:31:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:31:02', tmtdew=17.27, humidity=32.35, cloud=0.0, wind=15.23, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:30:36.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:31:28.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:31:28.920 [DEBUG] [Thread-301329] [transport.py] [_log()] starting thread (client mode): 0xf5770130
2025-12-24T11:31:28.920 [DEBUG] [Thread-301329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:31:28.934 [DEBUG] [Thread-301329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:31:28.934 [INFO] [Thread-301329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] client lang: <none>
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] server lang: <none>
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] kex follows: False
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:31:28.942 [DEBUG] [Thread-301329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:31:28.943 [DEBUG] [Thread-301329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:31:28.943 [DEBUG] [Thread-301329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:31:28.943 [DEBUG] [Thread-301329] [transport.py] [_log()] Compression: none
2025-12-24T11:31:28.943 [DEBUG] [Thread-301329] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:31:28.999 [DEBUG] [Thread-301329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:31:29.000 [DEBUG] [Thread-301329] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:31:29.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:31:29.002 [DEBUG] [Thread-301329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:31:29.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:31:29.055 [DEBUG] [Thread-301329] [transport.py] [_log()] userauth is OK
2025-12-24T11:31:29.055 [DEBUG] [Thread-301329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:31:29.055 [DEBUG] [Thread-301329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:31:29.055 [DEBUG] [Thread-301329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:31:29.055 [DEBUG] [Thread-301329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:31:29.076 [INFO] [Thread-301329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:31:29.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:31:29.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:31:29.945 [DEBUG] [Thread-301329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:31:29.945 [DEBUG] [Thread-301329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:31:29.992 [DEBUG] [Thread-301329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:31:29.992 [DEBUG] [Thread-301329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:31:30.000 [DEBUG] [Thread-301329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:31:30.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:31:30.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:31:30.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:31:30.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:31:30.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:31:30.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:31:30.033 [DEBUG] [Thread-301329] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:31:36.553 [DEBUG] [Thread-301331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:31:48.715 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:31:48.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:31:50.896 [DEBUG] [Thread-301332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:31:51.653 [DEBUG] [Thread-301333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:32:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:32:00.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:32:00.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
2025-12-24T11:32:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 31, 36), 17.16, 32.18, 0.0, 15.7, 21.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:32:01.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:31:36
2025-12-24T11:32:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:32:01.808 [DEBUG] [Thread-301334] [transport.py] [_log()] starting thread (client mode): 0xf81e5bd0
2025-12-24T11:32:01.809 [DEBUG] [Thread-301334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:32:01.821 [DEBUG] [Thread-301334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:32:01.821 [INFO] [Thread-301334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] client lang: <none>
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] server lang: <none>
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] kex follows: False
2025-12-24T11:32:01.826 [DEBUG] [Thread-301334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:32:01.827 [DEBUG] [Thread-301334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:32:01.827 [DEBUG] [Thread-301334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:32:01.827 [DEBUG] [Thread-301334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:32:01.827 [DEBUG] [Thread-301334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:32:01.827 [DEBUG] [Thread-301334] [transport.py] [_log()] Compression: none
2025-12-24T11:32:01.827 [DEBUG] [Thread-301334] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:32:01.860 [DEBUG] [Thread-301334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:32:01.863 [DEBUG] [Thread-301334] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:32:01.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:32:01.866 [DEBUG] [Thread-301334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:32:01.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:32:01.871 [DEBUG] [Thread-301334] [transport.py] [_log()] userauth is OK
2025-12-24T11:32:01.871 [DEBUG] [Thread-301334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:32:01.872 [DEBUG] [Thread-301334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:32:01.872 [DEBUG] [Thread-301334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:32:01.872 [DEBUG] [Thread-301334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:32:01.900 [INFO] [Thread-301334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:32:01.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:32:02.706 [DEBUG] [Thread-301334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:32:02.706 [DEBUG] [Thread-301334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:32:02.708 [DEBUG] [Thread-301334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:32:02.747 [DEBUG] [Thread-301334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:32:02.747 [DEBUG] [Thread-301334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:32:02.751 [DEBUG] [Thread-301334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:32:02.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:32:02.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:32:02.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:32:02.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:32:02.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:32:02.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:32:02.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:32:02.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:32:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:32:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.396598 -999.00  +21.70  21.35     37   +6.50 1 1 1 1 1   888    0 14.65 0.09 ----- 21.4 21.4 118.8 26.7 30.7 -25.5 30.0 -24.6 29.5 -25.0 30.3 -24.4
2025-12-24T11:32:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:32:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:32:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.396598
2025-12-24T11:32:02.784 [DEBUG] [Thread-301334] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:32:02.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:32:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:32:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:32:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:32:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:32:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:31:36', tmtdew=17.16, humidity=32.18, cloud=0.0, wind=15.7, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:31:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:32:02.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:32:02.914 [DEBUG] [Thread-301337] [transport.py] [_log()] starting thread (client mode): 0xf81e58d0
2025-12-24T11:32:02.915 [DEBUG] [Thread-301337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:32:02.929 [DEBUG] [Thread-301337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:32:02.929 [INFO] [Thread-301337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] client lang: <none>
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] server lang: <none>
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] kex follows: False
2025-12-24T11:32:02.937 [DEBUG] [Thread-301337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:32:02.938 [DEBUG] [Thread-301337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:32:02.938 [DEBUG] [Thread-301337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:32:02.938 [DEBUG] [Thread-301337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:32:02.938 [DEBUG] [Thread-301337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:32:02.938 [DEBUG] [Thread-301337] [transport.py] [_log()] Compression: none
2025-12-24T11:32:02.938 [DEBUG] [Thread-301337] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:32:02.994 [DEBUG] [Thread-301337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:32:02.995 [DEBUG] [Thread-301337] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:32:02.995 [DEBUG] [Thread-301337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:32:02.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:32:02.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:32:03.058 [DEBUG] [Thread-301337] [transport.py] [_log()] userauth is OK
2025-12-24T11:32:03.058 [DEBUG] [Thread-301337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:32:03.058 [DEBUG] [Thread-301337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:32:03.058 [DEBUG] [Thread-301337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:32:03.058 [DEBUG] [Thread-301337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:32:03.076 [INFO] [Thread-301337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:32:03.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:32:03.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:32:03.960 [DEBUG] [Thread-301337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:32:03.960 [DEBUG] [Thread-301337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:32:04.008 [DEBUG] [Thread-301337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:32:04.008 [DEBUG] [Thread-301337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:32:04.017 [DEBUG] [Thread-301337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:32:04.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:32:04.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:32:04.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:32:04.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:32:04.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:32:04.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:32:04.056 [DEBUG] [Thread-301337] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:32:06.701 [DEBUG] [Thread-301339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:32:21.850 [DEBUG] [Thread-301340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:32:34.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:32:34.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:32:34.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:32:35.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 32, 8), 16.66, 33.11, 0.0, 13.87, 20.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:32:35.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:32:08
2025-12-24T11:32:35.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:32:35.796 [DEBUG] [Thread-301341] [transport.py] [_log()] starting thread (client mode): 0xf81e7700
2025-12-24T11:32:35.797 [DEBUG] [Thread-301341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:32:35.811 [DEBUG] [Thread-301341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:32:35.811 [INFO] [Thread-301341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:32:35.818 [DEBUG] [Thread-301341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:32:35.819 [DEBUG] [Thread-301341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:32:35.819 [DEBUG] [Thread-301341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:32:35.819 [DEBUG] [Thread-301341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:32:35.819 [DEBUG] [Thread-301341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:32:35.819 [DEBUG] [Thread-301341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:32:35.819 [DEBUG] [Thread-301341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:32:35.819 [DEBUG] [Thread-301341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:32:35.819 [DEBUG] [Thread-301341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:32:35.820 [DEBUG] [Thread-301341] [transport.py] [_log()] client lang: <none>
2025-12-24T11:32:35.820 [DEBUG] [Thread-301341] [transport.py] [_log()] server lang: <none>
2025-12-24T11:32:35.820 [DEBUG] [Thread-301341] [transport.py] [_log()] kex follows: False
2025-12-24T11:32:35.820 [DEBUG] [Thread-301341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:32:35.821 [DEBUG] [Thread-301341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:32:35.821 [DEBUG] [Thread-301341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:32:35.821 [DEBUG] [Thread-301341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:32:35.821 [DEBUG] [Thread-301341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:32:35.822 [DEBUG] [Thread-301341] [transport.py] [_log()] Compression: none
2025-12-24T11:32:35.822 [DEBUG] [Thread-301341] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:32:35.855 [DEBUG] [Thread-301341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:32:35.859 [DEBUG] [Thread-301341] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:32:35.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:32:35.863 [DEBUG] [Thread-301341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:32:35.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:32:35.867 [DEBUG] [Thread-301341] [transport.py] [_log()] userauth is OK
2025-12-24T11:32:35.867 [DEBUG] [Thread-301341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:32:35.868 [DEBUG] [Thread-301341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:32:35.868 [DEBUG] [Thread-301341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:32:35.868 [DEBUG] [Thread-301341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:32:35.906 [INFO] [Thread-301341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:32:35.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:32:36.561 [DEBUG] [Thread-301341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:32:36.562 [DEBUG] [Thread-301341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:32:36.563 [DEBUG] [Thread-301341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:32:36.603 [DEBUG] [Thread-301341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:32:36.603 [DEBUG] [Thread-301341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:32:36.607 [DEBUG] [Thread-301341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:32:36.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:32:36.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:32:36.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:32:36.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:32:36.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:32:36.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:32:36.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:32:36.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:32:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:32:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.396945 -999.00  +21.80  12.51     37   +6.50 1 1 1 1 1   888    0 15.31 3.93 ----- 12.5 12.5 103.3 19.7 30.6 -29.1 30.0 -25.5 29.5 -25.3 30.3 -25.0
2025-12-24T11:32:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:32:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:32:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.396945
2025-12-24T11:32:36.651 [DEBUG] [Thread-301341] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:32:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:32:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:32:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:32:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:32:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:32:36.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:32:08', tmtdew=16.66, humidity=33.11, cloud=0.0, wind=13.87, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:31:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:32:36.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:32:36.760 [DEBUG] [Thread-301344] [transport.py] [_log()] starting thread (client mode): 0xf5740dc0
2025-12-24T11:32:36.760 [DEBUG] [Thread-301344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:32:36.776 [DEBUG] [Thread-301344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:32:36.776 [INFO] [Thread-301344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:32:36.783 [DEBUG] [Thread-301344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:32:36.783 [DEBUG] [Thread-301344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:32:36.783 [DEBUG] [Thread-301344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:32:36.783 [DEBUG] [Thread-301344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] client lang: <none>
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] server lang: <none>
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] kex follows: False
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:32:36.784 [DEBUG] [Thread-301344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:32:36.785 [DEBUG] [Thread-301344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:32:36.785 [DEBUG] [Thread-301344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:32:36.785 [DEBUG] [Thread-301344] [transport.py] [_log()] Compression: none
2025-12-24T11:32:36.785 [DEBUG] [Thread-301344] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:32:36.842 [DEBUG] [Thread-301344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:32:36.843 [DEBUG] [Thread-301344] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:32:36.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:32:36.844 [DEBUG] [Thread-301344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:32:36.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:32:36.899 [DEBUG] [Thread-301344] [transport.py] [_log()] userauth is OK
2025-12-24T11:32:36.900 [DEBUG] [Thread-301344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:32:36.900 [DEBUG] [Thread-301344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:32:36.900 [DEBUG] [Thread-301344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:32:36.900 [DEBUG] [Thread-301344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:32:36.920 [INFO] [Thread-301344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:32:36.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:32:36.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:32:36.947 [DEBUG] [Thread-301346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:32:37.745 [DEBUG] [Thread-301344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:32:37.745 [DEBUG] [Thread-301344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:32:37.792 [DEBUG] [Thread-301344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:32:37.792 [DEBUG] [Thread-301344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:32:37.801 [DEBUG] [Thread-301344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:32:37.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:32:37.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:32:37.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:32:37.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:32:37.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:32:37.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:32:37.839 [DEBUG] [Thread-301344] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:32:48.872 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:32:48.888 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:32:51.177 [DEBUG] [Thread-301347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:32:52.125 [DEBUG] [Thread-301348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:33:07.204 [DEBUG] [Thread-301349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:33:07.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:33:07.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:33:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:33:08.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 32, 41), 16.51, 33.56, 0.0, 11.96, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:33:08.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:32:41
2025-12-24T11:33:08.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:33:09.163 [DEBUG] [Thread-301350] [transport.py] [_log()] starting thread (client mode): 0xf81e5450
2025-12-24T11:33:09.164 [DEBUG] [Thread-301350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:33:09.176 [DEBUG] [Thread-301350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:33:09.177 [INFO] [Thread-301350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:33:09.182 [DEBUG] [Thread-301350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:33:09.183 [DEBUG] [Thread-301350] [transport.py] [_log()] client lang: <none>
2025-12-24T11:33:09.183 [DEBUG] [Thread-301350] [transport.py] [_log()] server lang: <none>
2025-12-24T11:33:09.183 [DEBUG] [Thread-301350] [transport.py] [_log()] kex follows: False
2025-12-24T11:33:09.183 [DEBUG] [Thread-301350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:33:09.183 [DEBUG] [Thread-301350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:33:09.183 [DEBUG] [Thread-301350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:33:09.183 [DEBUG] [Thread-301350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:33:09.184 [DEBUG] [Thread-301350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:33:09.184 [DEBUG] [Thread-301350] [transport.py] [_log()] Compression: none
2025-12-24T11:33:09.184 [DEBUG] [Thread-301350] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:33:09.223 [DEBUG] [Thread-301350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:33:09.228 [DEBUG] [Thread-301350] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:33:09.230 [DEBUG] [Thread-301350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:33:09.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:33:09.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:33:09.236 [DEBUG] [Thread-301350] [transport.py] [_log()] userauth is OK
2025-12-24T11:33:09.236 [DEBUG] [Thread-301350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:33:09.237 [DEBUG] [Thread-301350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:33:09.237 [DEBUG] [Thread-301350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:33:09.237 [DEBUG] [Thread-301350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:33:09.263 [INFO] [Thread-301350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:33:09.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:33:09.925 [DEBUG] [Thread-301350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:33:09.925 [DEBUG] [Thread-301350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:33:09.926 [DEBUG] [Thread-301350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:33:09.966 [DEBUG] [Thread-301350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:33:09.967 [DEBUG] [Thread-301350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:33:09.970 [DEBUG] [Thread-301350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:33:09.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:33:09.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:33:09.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:33:09.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:33:09.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:33:09.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:33:09.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:33:09.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:33:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:33:09.994 [DEBUG] [Thread-301350] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:33:09.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.397639 -999.00  +21.40   7.59     38   +6.50 1 1 1 1 1   888    0 15.16 16.10 ----- 7.6 7.6 133.4 13.2 30.5 -25.7 30.0 -25.5 29.6 -23.7 30.1 -25.6
2025-12-24T11:33:09.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:33:09.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:33:09.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.397639
2025-12-24T11:33:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:33:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:33:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:33:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:33:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:33:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:32:41', tmtdew=16.51, humidity=33.56, cloud=0.0, wind=11.96, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:32:36.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:33:10.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:33:10.116 [DEBUG] [Thread-301353] [transport.py] [_log()] starting thread (client mode): 0xf81e44c0
2025-12-24T11:33:10.116 [DEBUG] [Thread-301353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:33:10.130 [DEBUG] [Thread-301353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:33:10.130 [INFO] [Thread-301353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:33:10.138 [DEBUG] [Thread-301353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:33:10.139 [DEBUG] [Thread-301353] [transport.py] [_log()] client lang: <none>
2025-12-24T11:33:10.140 [DEBUG] [Thread-301353] [transport.py] [_log()] server lang: <none>
2025-12-24T11:33:10.140 [DEBUG] [Thread-301353] [transport.py] [_log()] kex follows: False
2025-12-24T11:33:10.140 [DEBUG] [Thread-301353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:33:10.140 [DEBUG] [Thread-301353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:33:10.140 [DEBUG] [Thread-301353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:33:10.140 [DEBUG] [Thread-301353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:33:10.140 [DEBUG] [Thread-301353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:33:10.141 [DEBUG] [Thread-301353] [transport.py] [_log()] Compression: none
2025-12-24T11:33:10.141 [DEBUG] [Thread-301353] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:33:10.194 [DEBUG] [Thread-301353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:33:10.194 [DEBUG] [Thread-301353] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:33:10.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:33:10.195 [DEBUG] [Thread-301353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:33:10.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:33:10.251 [DEBUG] [Thread-301353] [transport.py] [_log()] userauth is OK
2025-12-24T11:33:10.251 [DEBUG] [Thread-301353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:33:10.252 [DEBUG] [Thread-301353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:33:10.252 [DEBUG] [Thread-301353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:33:10.252 [DEBUG] [Thread-301353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:33:10.274 [INFO] [Thread-301353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:33:10.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:33:10.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:33:11.104 [DEBUG] [Thread-301353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:33:11.105 [DEBUG] [Thread-301353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:33:11.152 [DEBUG] [Thread-301353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:33:11.152 [DEBUG] [Thread-301353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:33:11.160 [DEBUG] [Thread-301353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:33:11.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:33:11.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')
2025-12-24T11:33:11.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
2025-12-24T11:33:11.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:33:11.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:33:11.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:33:11.196 [DEBUG] [Thread-301353] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:33:22.311 [DEBUG] [Thread-301355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:33:37.423 [DEBUG] [Thread-301356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:33:41.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:33:41.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:33:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:33:42.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 33, 14), 16.55, 33.56, 0.0, 14.66, 20.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:33:42.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:33:14
2025-12-24T11:33:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:33:42.658 [DEBUG] [Thread-301357] [transport.py] [_log()] starting thread (client mode): 0xf81e68c0
2025-12-24T11:33:42.659 [DEBUG] [Thread-301357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:33:42.661 [DEBUG] [Thread-301357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:33:42.661 [INFO] [Thread-301357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] client lang: <none>
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] server lang: <none>
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] kex follows: False
2025-12-24T11:33:42.665 [DEBUG] [Thread-301357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:33:42.666 [DEBUG] [Thread-301357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:33:42.666 [DEBUG] [Thread-301357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:33:42.666 [DEBUG] [Thread-301357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:33:42.666 [DEBUG] [Thread-301357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:33:42.666 [DEBUG] [Thread-301357] [transport.py] [_log()] Compression: none
2025-12-24T11:33:42.666 [DEBUG] [Thread-301357] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:33:42.697 [DEBUG] [Thread-301357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:33:42.700 [DEBUG] [Thread-301357] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:33:42.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:33:42.703 [DEBUG] [Thread-301357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:33:42.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:33:42.705 [DEBUG] [Thread-301357] [transport.py] [_log()] userauth is OK
2025-12-24T11:33:42.706 [DEBUG] [Thread-301357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:33:42.706 [DEBUG] [Thread-301357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:33:42.706 [DEBUG] [Thread-301357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:33:42.706 [DEBUG] [Thread-301357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:33:42.736 [INFO] [Thread-301357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:33:42.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:33:43.400 [DEBUG] [Thread-301357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:33:43.400 [DEBUG] [Thread-301357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:33:43.401 [DEBUG] [Thread-301357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:33:43.441 [DEBUG] [Thread-301357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:33:43.441 [DEBUG] [Thread-301357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:33:43.444 [DEBUG] [Thread-301357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:33:43.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:33:43.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:33:43.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:33:43.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:33:43.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:33:43.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:33:43.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:33:43.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:33:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:33:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.397987 -999.00  +21.70  15.09     37   +6.60 1 1 1 1 1   888    0 14.99 20.78 ----- 15.1 15.1 111.2 19.3 30.6 -25.3 29.9 -25.4 29.5 -24.5 30.2 -24.3
2025-12-24T11:33:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:33:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:33:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.397987
2025-12-24T11:33:43.476 [DEBUG] [Thread-301357] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:33:43.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:33:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:33:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:33:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:33:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:33:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:33:14', tmtdew=16.55, humidity=33.56, cloud=0.0, wind=14.66, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:33:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:33:43.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:33:43.570 [DEBUG] [Thread-301360] [transport.py] [_log()] starting thread (client mode): 0xf81e43d0
2025-12-24T11:33:43.570 [DEBUG] [Thread-301360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:33:43.585 [DEBUG] [Thread-301360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:33:43.585 [INFO] [Thread-301360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:33:43.592 [DEBUG] [Thread-301360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:33:43.592 [DEBUG] [Thread-301360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:33:43.592 [DEBUG] [Thread-301360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:33:43.592 [DEBUG] [Thread-301360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:33:43.592 [DEBUG] [Thread-301360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:33:43.592 [DEBUG] [Thread-301360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:33:43.592 [DEBUG] [Thread-301360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] client lang: <none>
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] server lang: <none>
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] kex follows: False
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] Compression: none
2025-12-24T11:33:43.593 [DEBUG] [Thread-301360] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:33:43.650 [DEBUG] [Thread-301360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:33:43.650 [DEBUG] [Thread-301360] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:33:43.650 [DEBUG] [Thread-301360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:33:43.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:33:43.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:33:43.707 [DEBUG] [Thread-301360] [transport.py] [_log()] userauth is OK
2025-12-24T11:33:43.707 [DEBUG] [Thread-301360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:33:43.707 [DEBUG] [Thread-301360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:33:43.707 [DEBUG] [Thread-301360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:33:43.707 [DEBUG] [Thread-301360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:33:43.722 [INFO] [Thread-301360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:33:43.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:33:43.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:33:44.553 [DEBUG] [Thread-301360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:33:44.553 [DEBUG] [Thread-301360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:33:44.601 [DEBUG] [Thread-301360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:33:44.601 [DEBUG] [Thread-301360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:33:44.609 [DEBUG] [Thread-301360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:33:44.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:33:44.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:33:44.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:33:44.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:33:44.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:33:44.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:33:44.642 [DEBUG] [Thread-301360] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:33:49.040 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:33:49.042 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:33:51.454 [DEBUG] [Thread-301362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:33:52.496 [DEBUG] [Thread-301363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:34:07.680 [DEBUG] [Thread-301364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:34:14.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:34:14.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:34:14.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:34:15.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 33, 47), 16.56, 33.98, 0.0, 15.63, 20.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:34:15.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:33:47
2025-12-24T11:34:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:34:16.269 [DEBUG] [Thread-301365] [transport.py] [_log()] starting thread (client mode): 0xf81e6740
2025-12-24T11:34:16.269 [DEBUG] [Thread-301365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:34:16.282 [DEBUG] [Thread-301365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:34:16.282 [INFO] [Thread-301365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:34:16.286 [DEBUG] [Thread-301365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:34:16.286 [DEBUG] [Thread-301365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] client lang: <none>
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] server lang: <none>
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] kex follows: False
2025-12-24T11:34:16.287 [DEBUG] [Thread-301365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:34:16.288 [DEBUG] [Thread-301365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:34:16.288 [DEBUG] [Thread-301365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:34:16.288 [DEBUG] [Thread-301365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:34:16.288 [DEBUG] [Thread-301365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:34:16.288 [DEBUG] [Thread-301365] [transport.py] [_log()] Compression: none
2025-12-24T11:34:16.288 [DEBUG] [Thread-301365] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:34:16.326 [DEBUG] [Thread-301365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:34:16.330 [DEBUG] [Thread-301365] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:34:16.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:34:16.334 [DEBUG] [Thread-301365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:34:16.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:34:16.338 [DEBUG] [Thread-301365] [transport.py] [_log()] userauth is OK
2025-12-24T11:34:16.338 [DEBUG] [Thread-301365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:34:16.339 [DEBUG] [Thread-301365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:34:16.339 [DEBUG] [Thread-301365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:34:16.339 [DEBUG] [Thread-301365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:34:16.376 [INFO] [Thread-301365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:34:16.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:34:17.014 [DEBUG] [Thread-301365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:34:17.014 [DEBUG] [Thread-301365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:34:17.014 [DEBUG] [Thread-301365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:34:17.047 [DEBUG] [Thread-301365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:34:17.047 [DEBUG] [Thread-301365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:34:17.050 [DEBUG] [Thread-301365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:34:17.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:34:17.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:34:17.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:34:17.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:34:17.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:34:17.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:34:17.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:34:17.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:34:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:34:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.398334 -999.00  +21.60  16.39     37   +6.40 1 1 1 1 1   888    0 15.70 26.85 ----- 16.4 16.4 129.4 18.3 30.6 -25.6 30.0 -26.2 29.6 -24.4 30.2 -26.0
2025-12-24T11:34:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:34:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:34:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.398334
2025-12-24T11:34:17.083 [DEBUG] [Thread-301365] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:34:17.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:34:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:34:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:34:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:34:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:34:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:33:47', tmtdew=16.56, humidity=33.98, cloud=0.0, wind=15.63, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:33:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:34:17.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:34:17.175 [DEBUG] [Thread-301368] [transport.py] [_log()] starting thread (client mode): 0xf5740e50
2025-12-24T11:34:17.175 [DEBUG] [Thread-301368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:34:17.190 [DEBUG] [Thread-301368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:34:17.190 [INFO] [Thread-301368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] client lang: <none>
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] server lang: <none>
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] kex follows: False
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] Compression: none
2025-12-24T11:34:17.198 [DEBUG] [Thread-301368] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:34:17.261 [DEBUG] [Thread-301368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:34:17.262 [DEBUG] [Thread-301368] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:34:17.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:34:17.263 [DEBUG] [Thread-301368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:34:17.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:34:17.320 [DEBUG] [Thread-301368] [transport.py] [_log()] userauth is OK
2025-12-24T11:34:17.320 [DEBUG] [Thread-301368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:34:17.320 [DEBUG] [Thread-301368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:34:17.320 [DEBUG] [Thread-301368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:34:17.320 [DEBUG] [Thread-301368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:34:17.342 [INFO] [Thread-301368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:34:17.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:34:17.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:34:18.183 [DEBUG] [Thread-301368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:34:18.183 [DEBUG] [Thread-301368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:34:18.231 [DEBUG] [Thread-301368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:34:18.231 [DEBUG] [Thread-301368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:34:18.240 [DEBUG] [Thread-301368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:34:18.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:34:18.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:34:18.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:34:18.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:34:18.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:34:18.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:34:18.272 [DEBUG] [Thread-301368] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:34:22.764 [DEBUG] [Thread-301370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:34:37.944 [DEBUG] [Thread-301371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:34:48.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:34:48.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:34:48.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:34:49.182 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:34:49.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:34:49.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 34, 20), 16.48, 34.14, 0.0, 15.63, 20.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:34:49.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:34:20
2025-12-24T11:34:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:34:49.776 [DEBUG] [Thread-301372] [transport.py] [_log()] starting thread (client mode): 0xf5741090
2025-12-24T11:34:49.777 [DEBUG] [Thread-301372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:34:49.789 [DEBUG] [Thread-301372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:34:49.789 [INFO] [Thread-301372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:34:49.795 [DEBUG] [Thread-301372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:34:49.795 [DEBUG] [Thread-301372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:34:49.795 [DEBUG] [Thread-301372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:34:49.795 [DEBUG] [Thread-301372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] client lang: <none>
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] server lang: <none>
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] kex follows: False
2025-12-24T11:34:49.796 [DEBUG] [Thread-301372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:34:49.797 [DEBUG] [Thread-301372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:34:49.797 [DEBUG] [Thread-301372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:34:49.797 [DEBUG] [Thread-301372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:34:49.797 [DEBUG] [Thread-301372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:34:49.798 [DEBUG] [Thread-301372] [transport.py] [_log()] Compression: none
2025-12-24T11:34:49.798 [DEBUG] [Thread-301372] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:34:49.832 [DEBUG] [Thread-301372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:34:49.837 [DEBUG] [Thread-301372] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:34:49.839 [DEBUG] [Thread-301372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:34:49.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:34:49.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:34:49.844 [DEBUG] [Thread-301372] [transport.py] [_log()] userauth is OK
2025-12-24T11:34:49.844 [DEBUG] [Thread-301372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:34:49.844 [DEBUG] [Thread-301372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:34:49.844 [DEBUG] [Thread-301372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:34:49.844 [DEBUG] [Thread-301372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:34:49.871 [INFO] [Thread-301372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:34:49.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:34:50.529 [DEBUG] [Thread-301372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:34:50.529 [DEBUG] [Thread-301372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:34:50.530 [DEBUG] [Thread-301372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:34:50.570 [DEBUG] [Thread-301372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:34:50.570 [DEBUG] [Thread-301372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:34:50.573 [DEBUG] [Thread-301372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:34:50.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:34:50.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:34:50.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:34:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:34:50.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:34:50.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:34:50.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:34:50.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:34:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:34:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.398681 -999.00  +21.70   8.27     37   +6.60 1 1 1 1 1   888    0 15.35 28.23 ----- 8.3 8.3 126.6 17.2 30.4 -27.0 30.0 -25.3 29.8 -23.9 30.1 -24.4
2025-12-24T11:34:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:34:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:34:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.398681
2025-12-24T11:34:50.608 [DEBUG] [Thread-301372] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:34:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:34:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:34:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:34:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:34:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:34:50.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:34:20', tmtdew=16.48, humidity=34.14, cloud=0.0, wind=15.63, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:34:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:34:50.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:34:50.710 [DEBUG] [Thread-301375] [transport.py] [_log()] starting thread (client mode): 0xf5743c70
2025-12-24T11:34:50.711 [DEBUG] [Thread-301375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:34:50.727 [DEBUG] [Thread-301375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:34:50.727 [INFO] [Thread-301375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:34:50.734 [DEBUG] [Thread-301375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] client lang: <none>
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] server lang: <none>
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] kex follows: False
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:34:50.735 [DEBUG] [Thread-301375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:34:50.736 [DEBUG] [Thread-301375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:34:50.736 [DEBUG] [Thread-301375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:34:50.736 [DEBUG] [Thread-301375] [transport.py] [_log()] Compression: none
2025-12-24T11:34:50.736 [DEBUG] [Thread-301375] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:34:50.792 [DEBUG] [Thread-301375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:34:50.793 [DEBUG] [Thread-301375] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:34:50.794 [DEBUG] [Thread-301375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:34:50.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:34:50.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:34:50.856 [DEBUG] [Thread-301375] [transport.py] [_log()] userauth is OK
2025-12-24T11:34:50.857 [DEBUG] [Thread-301375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:34:50.857 [DEBUG] [Thread-301375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:34:50.857 [DEBUG] [Thread-301375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:34:50.857 [DEBUG] [Thread-301375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:34:50.878 [INFO] [Thread-301375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:34:50.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:34:50.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:34:51.681 [DEBUG] [Thread-301377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:34:51.725 [DEBUG] [Thread-301375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:34:51.725 [DEBUG] [Thread-301375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:34:51.772 [DEBUG] [Thread-301375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:34:51.773 [DEBUG] [Thread-301375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:34:51.781 [DEBUG] [Thread-301375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:34:51.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:34:51.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:34:51.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
2025-12-24T11:34:51.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:34:51.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:34:51.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:34:51.815 [DEBUG] [Thread-301375] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:34:53.000 [DEBUG] [Thread-301378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:35:08.157 [DEBUG] [Thread-301379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:35:21.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:35:21.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:35:21.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:35:23.229 [DEBUG] [Thread-301380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:35:23.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 34, 53), 16.54, 33.53, 0.0, 16.52, 20.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:35:23.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:34:53
2025-12-24T11:35:23.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:35:23.732 [DEBUG] [Thread-301381] [transport.py] [_log()] starting thread (client mode): 0xf5742aa0
2025-12-24T11:35:23.733 [DEBUG] [Thread-301381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:35:23.748 [DEBUG] [Thread-301381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:35:23.748 [INFO] [Thread-301381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:35:23.752 [DEBUG] [Thread-301381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:35:23.752 [DEBUG] [Thread-301381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:35:23.752 [DEBUG] [Thread-301381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:35:23.752 [DEBUG] [Thread-301381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:35:23.752 [DEBUG] [Thread-301381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:35:23.752 [DEBUG] [Thread-301381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:35:23.752 [DEBUG] [Thread-301381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] client lang: <none>
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] server lang: <none>
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] kex follows: False
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] Compression: none
2025-12-24T11:35:23.753 [DEBUG] [Thread-301381] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:35:23.790 [DEBUG] [Thread-301381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:35:23.794 [DEBUG] [Thread-301381] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:35:23.796 [DEBUG] [Thread-301381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:35:23.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:35:23.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:35:23.801 [DEBUG] [Thread-301381] [transport.py] [_log()] userauth is OK
2025-12-24T11:35:23.801 [DEBUG] [Thread-301381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:35:23.802 [DEBUG] [Thread-301381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:35:23.802 [DEBUG] [Thread-301381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:35:23.802 [DEBUG] [Thread-301381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:35:23.842 [INFO] [Thread-301381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:35:23.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:35:24.484 [DEBUG] [Thread-301381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:35:24.485 [DEBUG] [Thread-301381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:35:24.486 [DEBUG] [Thread-301381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:35:24.525 [DEBUG] [Thread-301381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:35:24.525 [DEBUG] [Thread-301381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:35:24.529 [DEBUG] [Thread-301381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:35:24.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:35:24.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:35:24.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:35:24.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:35:24.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:35:24.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:35:24.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:35:24.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:35:24.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:35:24.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.399028 -999.00  +21.80  15.86     37   +6.50 1 1 1 1 1   888    0 15.89 31.56 ----- 15.9 15.9 107.4 20.1 30.5 -26.2 30.1 -25.7 29.6 -25.3 30.2 -25.2
2025-12-24T11:35:24.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:35:24.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:35:24.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.399028
2025-12-24T11:35:24.562 [DEBUG] [Thread-301381] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:35:24.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:35:24.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:35:24.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:35:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:35:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:35:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:34:53', tmtdew=16.54, humidity=33.53, cloud=0.0, wind=16.52, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:34:36.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:35:24.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:35:24.678 [DEBUG] [Thread-301384] [transport.py] [_log()] starting thread (client mode): 0xf5741ff0
2025-12-24T11:35:24.678 [DEBUG] [Thread-301384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:35:24.693 [DEBUG] [Thread-301384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:35:24.693 [INFO] [Thread-301384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:35:24.701 [DEBUG] [Thread-301384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:35:24.701 [DEBUG] [Thread-301384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:35:24.701 [DEBUG] [Thread-301384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:35:24.701 [DEBUG] [Thread-301384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] client lang: <none>
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] server lang: <none>
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] kex follows: False
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:35:24.702 [DEBUG] [Thread-301384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:35:24.703 [DEBUG] [Thread-301384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:35:24.703 [DEBUG] [Thread-301384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:35:24.703 [DEBUG] [Thread-301384] [transport.py] [_log()] Compression: none
2025-12-24T11:35:24.703 [DEBUG] [Thread-301384] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:35:24.759 [DEBUG] [Thread-301384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:35:24.760 [DEBUG] [Thread-301384] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:35:24.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:35:24.760 [DEBUG] [Thread-301384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:35:24.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:35:24.816 [DEBUG] [Thread-301384] [transport.py] [_log()] userauth is OK
2025-12-24T11:35:24.816 [DEBUG] [Thread-301384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:35:24.816 [DEBUG] [Thread-301384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:35:24.816 [DEBUG] [Thread-301384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:35:24.816 [DEBUG] [Thread-301384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:35:24.835 [INFO] [Thread-301384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:35:24.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:35:24.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:35:25.700 [DEBUG] [Thread-301384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:35:25.700 [DEBUG] [Thread-301384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:35:25.751 [DEBUG] [Thread-301384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:35:25.751 [DEBUG] [Thread-301384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:35:25.760 [DEBUG] [Thread-301384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:35:25.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:35:25.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:35:25.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:35:25.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:35:25.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:35:25.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:35:25.794 [DEBUG] [Thread-301384] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:35:38.258 [DEBUG] [Thread-301386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:35:49.323 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:35:49.324 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:35:51.922 [DEBUG] [Thread-301387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:35:53.389 [DEBUG] [Thread-301388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:35:55.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:35:55.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:35:55.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:35:56.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 35, 26), 16.37, 33.84, 0.0, 13.61, 20.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:35:56.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:35:26
2025-12-24T11:35:56.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:35:57.043 [DEBUG] [Thread-301389] [transport.py] [_log()] starting thread (client mode): 0xf5771960
2025-12-24T11:35:57.044 [DEBUG] [Thread-301389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:35:57.055 [DEBUG] [Thread-301389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:35:57.055 [INFO] [Thread-301389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:35:57.062 [DEBUG] [Thread-301389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:35:57.062 [DEBUG] [Thread-301389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:35:57.062 [DEBUG] [Thread-301389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:35:57.062 [DEBUG] [Thread-301389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:35:57.062 [DEBUG] [Thread-301389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:35:57.063 [DEBUG] [Thread-301389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:35:57.063 [DEBUG] [Thread-301389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:35:57.063 [DEBUG] [Thread-301389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:35:57.063 [DEBUG] [Thread-301389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:35:57.063 [DEBUG] [Thread-301389] [transport.py] [_log()] client lang: <none>
2025-12-24T11:35:57.063 [DEBUG] [Thread-301389] [transport.py] [_log()] server lang: <none>
2025-12-24T11:35:57.063 [DEBUG] [Thread-301389] [transport.py] [_log()] kex follows: False
2025-12-24T11:35:57.063 [DEBUG] [Thread-301389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:35:57.064 [DEBUG] [Thread-301389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:35:57.064 [DEBUG] [Thread-301389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:35:57.065 [DEBUG] [Thread-301389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:35:57.065 [DEBUG] [Thread-301389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:35:57.065 [DEBUG] [Thread-301389] [transport.py] [_log()] Compression: none
2025-12-24T11:35:57.065 [DEBUG] [Thread-301389] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:35:57.102 [DEBUG] [Thread-301389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:35:57.107 [DEBUG] [Thread-301389] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:35:57.110 [DEBUG] [Thread-301389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:35:57.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:35:57.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:35:57.115 [DEBUG] [Thread-301389] [transport.py] [_log()] userauth is OK
2025-12-24T11:35:57.115 [DEBUG] [Thread-301389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:35:57.115 [DEBUG] [Thread-301389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:35:57.115 [DEBUG] [Thread-301389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:35:57.115 [DEBUG] [Thread-301389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:35:57.143 [INFO] [Thread-301389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:35:57.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:35:57.790 [DEBUG] [Thread-301389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:35:57.791 [DEBUG] [Thread-301389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:35:57.792 [DEBUG] [Thread-301389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:35:57.832 [DEBUG] [Thread-301389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:35:57.832 [DEBUG] [Thread-301389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:35:57.835 [DEBUG] [Thread-301389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:35:57.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:35:57.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:35:57.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:35:57.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:35:57.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:35:57.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:35:57.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:35:57.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:35:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:35:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.399375 -999.00  +21.50   8.30     36   +6.10 1 1 1 1 1   888    0 16.03 34.53 ----- 8.3 8.3 80.4 14.1 30.0 -29.6 30.0 -25.7 29.5 -24.5 30.0 -25.0
2025-12-24T11:35:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:35:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:35:57.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.399375
2025-12-24T11:35:57.866 [DEBUG] [Thread-301389] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:35:57.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:35:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:35:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:35:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:35:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:35:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:35:26', tmtdew=16.37, humidity=33.84, cloud=0.0, wind=13.61, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:35:06.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:35:57.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:35:57.967 [DEBUG] [Thread-301392] [transport.py] [_log()] starting thread (client mode): 0xf5773f70
2025-12-24T11:35:57.967 [DEBUG] [Thread-301392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:35:57.981 [DEBUG] [Thread-301392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:35:57.981 [INFO] [Thread-301392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:35:57.989 [DEBUG] [Thread-301392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:35:57.989 [DEBUG] [Thread-301392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:35:57.989 [DEBUG] [Thread-301392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:35:57.989 [DEBUG] [Thread-301392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] client lang: <none>
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] server lang: <none>
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] kex follows: False
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:35:57.990 [DEBUG] [Thread-301392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:35:57.991 [DEBUG] [Thread-301392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:35:57.991 [DEBUG] [Thread-301392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:35:57.991 [DEBUG] [Thread-301392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:35:57.991 [DEBUG] [Thread-301392] [transport.py] [_log()] Compression: none
2025-12-24T11:35:57.991 [DEBUG] [Thread-301392] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:35:58.052 [DEBUG] [Thread-301392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:35:58.053 [DEBUG] [Thread-301392] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:35:58.054 [DEBUG] [Thread-301392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:35:58.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:35:58.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:35:58.107 [DEBUG] [Thread-301392] [transport.py] [_log()] userauth is OK
2025-12-24T11:35:58.107 [DEBUG] [Thread-301392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:35:58.107 [DEBUG] [Thread-301392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:35:58.107 [DEBUG] [Thread-301392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:35:58.107 [DEBUG] [Thread-301392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:35:58.125 [INFO] [Thread-301392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:35:58.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:35:58.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:35:58.961 [DEBUG] [Thread-301392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:35:58.961 [DEBUG] [Thread-301392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:35:59.010 [DEBUG] [Thread-301392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:35:59.010 [DEBUG] [Thread-301392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:35:59.020 [DEBUG] [Thread-301392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:35:59.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:35:59.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:35:59.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:35:59.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:35:59.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:35:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:35:59.061 [DEBUG] [Thread-301392] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:36:08.483 [DEBUG] [Thread-301394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:36:23.681 [DEBUG] [Thread-301395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:36:29.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:36:29.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:36:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:36:30.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 35, 59), 16.4, 33.72, 0.0, 9.72, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:36:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:35:59
2025-12-24T11:36:30.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:36:30.783 [DEBUG] [Thread-301396] [transport.py] [_log()] starting thread (client mode): 0xf5771ff0
2025-12-24T11:36:30.784 [DEBUG] [Thread-301396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:36:30.786 [DEBUG] [Thread-301396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:36:30.786 [INFO] [Thread-301396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] client lang: <none>
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] server lang: <none>
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] kex follows: False
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] Compression: none
2025-12-24T11:36:30.790 [DEBUG] [Thread-301396] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:36:30.821 [DEBUG] [Thread-301396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:36:30.824 [DEBUG] [Thread-301396] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:36:30.825 [DEBUG] [Thread-301396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:36:30.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:36:30.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:36:30.829 [DEBUG] [Thread-301396] [transport.py] [_log()] userauth is OK
2025-12-24T11:36:30.829 [DEBUG] [Thread-301396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:36:30.829 [DEBUG] [Thread-301396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:36:30.829 [DEBUG] [Thread-301396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:36:30.829 [DEBUG] [Thread-301396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:36:30.862 [INFO] [Thread-301396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:36:30.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:36:31.496 [DEBUG] [Thread-301396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:36:31.496 [DEBUG] [Thread-301396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:36:31.497 [DEBUG] [Thread-301396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:36:31.537 [DEBUG] [Thread-301396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:36:31.537 [DEBUG] [Thread-301396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:36:31.539 [DEBUG] [Thread-301396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:36:31.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:36:31.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:36:31.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:36:31.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:36:31.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:36:31.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:36:31.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:36:31.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:36:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:36:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.399723 -999.00  +21.50   7.98     37   +6.50 1 1 1 1 1   888    0 15.63 31.56 ----- 8.0 8.0 82.7 11.1 30.4 -24.7 30.0 -26.6 29.6 -23.4 30.2 -24.4
2025-12-24T11:36:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:36:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:36:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.399723
2025-12-24T11:36:31.568 [DEBUG] [Thread-301396] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:36:31.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:36:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:36:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:36:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:36:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:36:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:35:59', tmtdew=16.4, humidity=33.72, cloud=0.0, wind=9.72, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:35:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:36:31.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:36:31.672 [DEBUG] [Thread-301399] [transport.py] [_log()] starting thread (client mode): 0xf57a8550
2025-12-24T11:36:31.673 [DEBUG] [Thread-301399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:36:31.687 [DEBUG] [Thread-301399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:36:31.687 [INFO] [Thread-301399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] client lang: <none>
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] server lang: <none>
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] kex follows: False
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] Compression: none
2025-12-24T11:36:31.695 [DEBUG] [Thread-301399] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:36:31.751 [DEBUG] [Thread-301399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:36:31.751 [DEBUG] [Thread-301399] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:36:31.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:36:31.751 [DEBUG] [Thread-301399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:36:31.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:36:31.807 [DEBUG] [Thread-301399] [transport.py] [_log()] userauth is OK
2025-12-24T11:36:31.807 [DEBUG] [Thread-301399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:36:31.807 [DEBUG] [Thread-301399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:36:31.807 [DEBUG] [Thread-301399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:36:31.807 [DEBUG] [Thread-301399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:36:31.822 [INFO] [Thread-301399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:36:31.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:36:31.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:36:32.663 [DEBUG] [Thread-301399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:36:32.663 [DEBUG] [Thread-301399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:36:32.711 [DEBUG] [Thread-301399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:36:32.711 [DEBUG] [Thread-301399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:36:32.719 [DEBUG] [Thread-301399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:36:32.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:36:32.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:36:32.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:36:32.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:36:32.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:36:32.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:36:32.753 [DEBUG] [Thread-301399] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:36:38.736 [DEBUG] [Thread-301401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:36:49.475 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:36:49.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:36:52.170 [DEBUG] [Thread-301402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:36:53.832 [DEBUG] [Thread-301403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:37:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:37:02.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:37:02.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:37:04.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 36, 32), 16.49, 33.52, 0.0, 8.74, 20.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:37:04.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:36:32
2025-12-24T11:37:04.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:37:04.796 [DEBUG] [Thread-301404] [transport.py] [_log()] starting thread (client mode): 0xf5772f20
2025-12-24T11:37:04.796 [DEBUG] [Thread-301404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:37:04.813 [DEBUG] [Thread-301404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:37:04.813 [INFO] [Thread-301404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] client lang: <none>
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] server lang: <none>
2025-12-24T11:37:04.818 [DEBUG] [Thread-301404] [transport.py] [_log()] kex follows: False
2025-12-24T11:37:04.819 [DEBUG] [Thread-301404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:37:04.819 [DEBUG] [Thread-301404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:37:04.819 [DEBUG] [Thread-301404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:37:04.819 [DEBUG] [Thread-301404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:37:04.819 [DEBUG] [Thread-301404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:37:04.819 [DEBUG] [Thread-301404] [transport.py] [_log()] Compression: none
2025-12-24T11:37:04.819 [DEBUG] [Thread-301404] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:37:04.848 [DEBUG] [Thread-301404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:37:04.852 [DEBUG] [Thread-301404] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:37:04.854 [DEBUG] [Thread-301404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:37:04.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:37:04.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:37:04.858 [DEBUG] [Thread-301404] [transport.py] [_log()] userauth is OK
2025-12-24T11:37:04.858 [DEBUG] [Thread-301404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:37:04.858 [DEBUG] [Thread-301404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:37:04.858 [DEBUG] [Thread-301404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:37:04.858 [DEBUG] [Thread-301404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:37:04.892 [INFO] [Thread-301404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:37:04.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:37:05.559 [DEBUG] [Thread-301404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:37:05.559 [DEBUG] [Thread-301404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:37:05.560 [DEBUG] [Thread-301404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:37:05.601 [DEBUG] [Thread-301404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:37:05.601 [DEBUG] [Thread-301404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:37:05.604 [DEBUG] [Thread-301404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:37:05.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:37:05.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:37:05.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:37:05.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:37:05.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:37:05.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:37:05.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:37:05.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:37:05.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:37:05.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.400070 -999.00  +21.80  13.30     37   +6.60 1 1 1 1 1   888    0 16.12 33.58 ----- 13.3 13.3 127.8 17.0 30.5 -24.3 30.1 -25.3 29.6 -24.4 30.2 -23.8
2025-12-24T11:37:05.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:37:05.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:37:05.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.400070
2025-12-24T11:37:05.641 [DEBUG] [Thread-301404] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:37:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:37:05.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:37:05.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:37:05.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:37:05.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:37:05.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:36:32', tmtdew=16.49, humidity=33.52, cloud=0.0, wind=8.74, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:36:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:37:05.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:37:05.737 [DEBUG] [Thread-301407] [transport.py] [_log()] starting thread (client mode): 0xf5772bc0
2025-12-24T11:37:05.737 [DEBUG] [Thread-301407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:37:05.752 [DEBUG] [Thread-301407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:37:05.752 [INFO] [Thread-301407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] client lang: <none>
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] server lang: <none>
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] kex follows: False
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:37:05.759 [DEBUG] [Thread-301407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:37:05.760 [DEBUG] [Thread-301407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:37:05.760 [DEBUG] [Thread-301407] [transport.py] [_log()] Compression: none
2025-12-24T11:37:05.760 [DEBUG] [Thread-301407] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:37:05.817 [DEBUG] [Thread-301407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:37:05.817 [DEBUG] [Thread-301407] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:37:05.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:37:05.818 [DEBUG] [Thread-301407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:37:05.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:37:05.880 [DEBUG] [Thread-301407] [transport.py] [_log()] userauth is OK
2025-12-24T11:37:05.880 [DEBUG] [Thread-301407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:37:05.880 [DEBUG] [Thread-301407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:37:05.880 [DEBUG] [Thread-301407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:37:05.880 [DEBUG] [Thread-301407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:37:05.894 [INFO] [Thread-301407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:37:05.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:37:05.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:37:06.729 [DEBUG] [Thread-301407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:37:06.729 [DEBUG] [Thread-301407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:37:06.776 [DEBUG] [Thread-301407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:37:06.776 [DEBUG] [Thread-301407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:37:06.784 [DEBUG] [Thread-301407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:37:06.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:37:06.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:37:06.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:37:06.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:37:06.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:37:06.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:37:06.823 [DEBUG] [Thread-301407] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:37:08.896 [DEBUG] [Thread-301409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:37:24.053 [DEBUG] [Thread-301410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:37:36.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:37:36.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:37:36.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:37:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 37, 5), 16.49, 33.52, 0.0, 8.74, 20.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:37:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:37:05
2025-12-24T11:37:38.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:37:38.612 [DEBUG] [Thread-301411] [transport.py] [_log()] starting thread (client mode): 0xf5771030
2025-12-24T11:37:38.613 [DEBUG] [Thread-301411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:37:38.626 [DEBUG] [Thread-301411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:37:38.626 [INFO] [Thread-301411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:37:38.630 [DEBUG] [Thread-301411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:37:38.630 [DEBUG] [Thread-301411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:37:38.630 [DEBUG] [Thread-301411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:37:38.630 [DEBUG] [Thread-301411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:37:38.630 [DEBUG] [Thread-301411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] client lang: <none>
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] server lang: <none>
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] kex follows: False
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:37:38.631 [DEBUG] [Thread-301411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:37:38.632 [DEBUG] [Thread-301411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:37:38.632 [DEBUG] [Thread-301411] [transport.py] [_log()] Compression: none
2025-12-24T11:37:38.632 [DEBUG] [Thread-301411] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:37:38.660 [DEBUG] [Thread-301411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:37:38.663 [DEBUG] [Thread-301411] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:37:38.664 [DEBUG] [Thread-301411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:37:38.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:37:38.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:37:38.669 [DEBUG] [Thread-301411] [transport.py] [_log()] userauth is OK
2025-12-24T11:37:38.669 [DEBUG] [Thread-301411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:37:38.669 [DEBUG] [Thread-301411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:37:38.669 [DEBUG] [Thread-301411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:37:38.669 [DEBUG] [Thread-301411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:37:38.687 [INFO] [Thread-301411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:37:38.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:37:39.115 [DEBUG] [Thread-301413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:37:39.354 [DEBUG] [Thread-301411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:37:39.354 [DEBUG] [Thread-301411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:37:39.355 [DEBUG] [Thread-301411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:37:39.395 [DEBUG] [Thread-301411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:37:39.395 [DEBUG] [Thread-301411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:37:39.398 [DEBUG] [Thread-301411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:37:39.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:37:39.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:37:39.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:37:39.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:37:39.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:37:39.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:37:39.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:37:39.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:37:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:37:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.400764 -999.00  +21.60   9.35     36   +6.20 1 1 1 1 1   888    0 16.22 44.06 ----- 9.3 9.3 108.7 17.0 30.3 -27.4 30.0 -25.8 29.6 -23.9 30.1 -24.6
2025-12-24T11:37:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:37:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:37:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.400764
2025-12-24T11:37:39.425 [DEBUG] [Thread-301411] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:37:39.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:37:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:37:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:37:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:37:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:37:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:37:05', tmtdew=16.49, humidity=33.52, cloud=0.0, wind=8.74, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:37:06.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:37:39.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:37:39.523 [DEBUG] [Thread-301415] [transport.py] [_log()] starting thread (client mode): 0xf5770d90
2025-12-24T11:37:39.523 [DEBUG] [Thread-301415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:37:39.539 [DEBUG] [Thread-301415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:37:39.539 [INFO] [Thread-301415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] client lang: <none>
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] server lang: <none>
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] kex follows: False
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] Compression: none
2025-12-24T11:37:39.547 [DEBUG] [Thread-301415] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:37:39.602 [DEBUG] [Thread-301415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:37:39.602 [DEBUG] [Thread-301415] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:37:39.602 [DEBUG] [Thread-301415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:37:39.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:37:39.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:37:39.663 [DEBUG] [Thread-301415] [transport.py] [_log()] userauth is OK
2025-12-24T11:37:39.663 [DEBUG] [Thread-301415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:37:39.663 [DEBUG] [Thread-301415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:37:39.663 [DEBUG] [Thread-301415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:37:39.663 [DEBUG] [Thread-301415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:37:39.676 [INFO] [Thread-301415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:37:39.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:37:39.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:37:40.518 [DEBUG] [Thread-301415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:37:40.518 [DEBUG] [Thread-301415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:37:40.566 [DEBUG] [Thread-301415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:37:40.566 [DEBUG] [Thread-301415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:37:40.574 [DEBUG] [Thread-301415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:37:40.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:37: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')
2025-12-24T11:37:40.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:37:40.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:37:40.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:37:40.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:37:40.607 [DEBUG] [Thread-301415] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:37:49.624 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:37:49.625 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:37:52.507 [DEBUG] [Thread-301417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:37:54.150 [DEBUG] [Thread-301418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:38:09.309 [DEBUG] [Thread-301419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:38:10.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:38:10.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:38:10.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
2025-12-24T11:38:11.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 37, 37), 16.74, 33.02, 0.0, 10.54, 20.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:38:11.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:37:37
2025-12-24T11:38:12.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:38:12.229 [DEBUG] [Thread-301420] [transport.py] [_log()] starting thread (client mode): 0xf5741210
2025-12-24T11:38:12.229 [DEBUG] [Thread-301420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:38:12.242 [DEBUG] [Thread-301420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:38:12.242 [INFO] [Thread-301420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] client lang: <none>
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] server lang: <none>
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] kex follows: False
2025-12-24T11:38:12.246 [DEBUG] [Thread-301420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:38:12.247 [DEBUG] [Thread-301420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:38:12.247 [DEBUG] [Thread-301420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:38:12.247 [DEBUG] [Thread-301420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:38:12.247 [DEBUG] [Thread-301420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:38:12.247 [DEBUG] [Thread-301420] [transport.py] [_log()] Compression: none
2025-12-24T11:38:12.247 [DEBUG] [Thread-301420] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:38:12.276 [DEBUG] [Thread-301420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:38:12.280 [DEBUG] [Thread-301420] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:38:12.281 [DEBUG] [Thread-301420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:38:12.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:38:12.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:38:12.284 [DEBUG] [Thread-301420] [transport.py] [_log()] userauth is OK
2025-12-24T11:38:12.284 [DEBUG] [Thread-301420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:38:12.284 [DEBUG] [Thread-301420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:38:12.284 [DEBUG] [Thread-301420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:38:12.284 [DEBUG] [Thread-301420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:38:12.303 [INFO] [Thread-301420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:38:12.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:38:13.119 [DEBUG] [Thread-301420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:38:13.119 [DEBUG] [Thread-301420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:38:13.119 [DEBUG] [Thread-301420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:38:13.159 [DEBUG] [Thread-301420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:38:13.159 [DEBUG] [Thread-301420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:38:13.161 [DEBUG] [Thread-301420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:38:13.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:38:13.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:38:13.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:38:13.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:38:13.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:38:13.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:38:13.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:38:13.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:38:13.185 [DEBUG] [Thread-301420] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:38:13.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:38:13.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.401112 -999.00  +21.40   6.35     36   +6.00 1 1 1 1 1   888    0 15.78 41.62 ----- 6.3 6.3 154.6 11.0 30.5 -25.2 30.1 -25.0 29.6 -23.9 30.2 -24.5
2025-12-24T11:38:13.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:38:13.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:38:13.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.401112
2025-12-24T11:38:13.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:38:13.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:38:13.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:38:13.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:38:13.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:38:13.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:37:37', tmtdew=16.74, humidity=33.02, cloud=0.0, wind=10.54, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:37:36.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:38:13.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:38:13.300 [DEBUG] [Thread-301423] [transport.py] [_log()] starting thread (client mode): 0xf574d4b0
2025-12-24T11:38:13.301 [DEBUG] [Thread-301423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:38:13.315 [DEBUG] [Thread-301423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:38:13.315 [INFO] [Thread-301423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] client lang: <none>
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] server lang: <none>
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] kex follows: False
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] Compression: none
2025-12-24T11:38:13.323 [DEBUG] [Thread-301423] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:38:13.377 [DEBUG] [Thread-301423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:38:13.378 [DEBUG] [Thread-301423] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:38:13.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:38:13.378 [DEBUG] [Thread-301423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:38:13.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:38:13.435 [DEBUG] [Thread-301423] [transport.py] [_log()] userauth is OK
2025-12-24T11:38:13.435 [DEBUG] [Thread-301423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:38:13.435 [DEBUG] [Thread-301423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:38:13.435 [DEBUG] [Thread-301423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:38:13.435 [DEBUG] [Thread-301423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:38:13.449 [INFO] [Thread-301423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:38:13.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:38:13.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:38:14.285 [DEBUG] [Thread-301423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:38:14.285 [DEBUG] [Thread-301423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:38:14.328 [DEBUG] [Thread-301423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:38:14.328 [DEBUG] [Thread-301423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:38:14.337 [DEBUG] [Thread-301423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:38:14.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:38:14.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:38:14.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:38:14.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:38:14.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:38:14.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:38:14.370 [DEBUG] [Thread-301423] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:38:24.410 [DEBUG] [Thread-301425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:38:39.529 [DEBUG] [Thread-301426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:38:44.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:38:44.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:38:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:38:45.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 38, 10), 16.85, 32.78, 0.0, 10.36, 20.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:38:45.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:38:10
2025-12-24T11:38:45.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:38:45.561 [DEBUG] [Thread-301427] [transport.py] [_log()] starting thread (client mode): 0xf5773490
2025-12-24T11:38:45.562 [DEBUG] [Thread-301427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:38:45.572 [DEBUG] [Thread-301427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:38:45.572 [INFO] [Thread-301427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] client lang: <none>
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] server lang: <none>
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] kex follows: False
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:38:45.577 [DEBUG] [Thread-301427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:38:45.578 [DEBUG] [Thread-301427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:38:45.578 [DEBUG] [Thread-301427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:38:45.578 [DEBUG] [Thread-301427] [transport.py] [_log()] Compression: none
2025-12-24T11:38:45.578 [DEBUG] [Thread-301427] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:38:45.610 [DEBUG] [Thread-301427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:38:45.614 [DEBUG] [Thread-301427] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:38:45.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:38:45.617 [DEBUG] [Thread-301427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:38:45.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:38:45.619 [DEBUG] [Thread-301427] [transport.py] [_log()] userauth is OK
2025-12-24T11:38:45.619 [DEBUG] [Thread-301427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:38:45.619 [DEBUG] [Thread-301427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:38:45.619 [DEBUG] [Thread-301427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:38:45.620 [DEBUG] [Thread-301427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:38:45.638 [INFO] [Thread-301427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:38:45.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:38:46.277 [DEBUG] [Thread-301427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:38:46.277 [DEBUG] [Thread-301427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:38:46.277 [DEBUG] [Thread-301427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:38:46.318 [DEBUG] [Thread-301427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:38:46.318 [DEBUG] [Thread-301427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:38:46.321 [DEBUG] [Thread-301427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:38:46.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:38:46.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:38:46.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:38:46.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:38:46.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:38:46.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:38:46.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:38:46.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:38:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:38:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.401459 -999.00  +21.50   9.81     36   +6.10 1 1 1 1 1   888    0 16.09 42.30 ----- 9.8 9.8 130.2 13.8 30.6 -25.3 30.1 -25.5 29.7 -23.7 30.2 -24.3
2025-12-24T11:38:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:38:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:38:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.401459
2025-12-24T11:38:46.358 [DEBUG] [Thread-301427] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:38:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:38:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:38:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:38:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:38:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:38:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:38:10', tmtdew=16.85, humidity=32.78, cloud=0.0, wind=10.36, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:38:06.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:38:46.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:38:46.454 [DEBUG] [Thread-301430] [transport.py] [_log()] starting thread (client mode): 0xf5770910
2025-12-24T11:38:46.454 [DEBUG] [Thread-301430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:38:46.469 [DEBUG] [Thread-301430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:38:46.469 [INFO] [Thread-301430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] client lang: <none>
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] server lang: <none>
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] kex follows: False
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] Compression: none
2025-12-24T11:38:46.477 [DEBUG] [Thread-301430] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:38:46.538 [DEBUG] [Thread-301430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:38:46.539 [DEBUG] [Thread-301430] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:38:46.539 [DEBUG] [Thread-301430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:38:46.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:38:46.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:38:46.595 [DEBUG] [Thread-301430] [transport.py] [_log()] userauth is OK
2025-12-24T11:38:46.595 [DEBUG] [Thread-301430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:38:46.595 [DEBUG] [Thread-301430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:38:46.595 [DEBUG] [Thread-301430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:38:46.595 [DEBUG] [Thread-301430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:38:46.609 [INFO] [Thread-301430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:38:46.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:38:46.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:38:47.441 [DEBUG] [Thread-301430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:38:47.441 [DEBUG] [Thread-301430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:38:47.488 [DEBUG] [Thread-301430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:38:47.489 [DEBUG] [Thread-301430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:38:47.497 [DEBUG] [Thread-301430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:38:47.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:38:47.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')
2025-12-24T11:38:47.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:38:47.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:38:47.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:38:47.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:38:47.531 [DEBUG] [Thread-301430] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:38:49.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:38:49.768 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:38:52.854 [DEBUG] [Thread-301432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:38:54.604 [DEBUG] [Thread-301433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:39:09.739 [DEBUG] [Thread-301434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:39:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:39:17.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:39:17.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
2025-12-24T11:39:18.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 38, 43), 16.65, 33.31, 0.0, 8.84, 20.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:39:18.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:38:43
2025-12-24T11:39:18.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:39:18.961 [DEBUG] [Thread-301435] [transport.py] [_log()] starting thread (client mode): 0xf5773790
2025-12-24T11:39:18.961 [DEBUG] [Thread-301435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:39:18.962 [DEBUG] [Thread-301435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:39:18.962 [INFO] [Thread-301435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] client lang: <none>
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] server lang: <none>
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] kex follows: False
2025-12-24T11:39:18.967 [DEBUG] [Thread-301435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:39:18.968 [DEBUG] [Thread-301435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:39:18.968 [DEBUG] [Thread-301435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:39:18.968 [DEBUG] [Thread-301435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:39:18.968 [DEBUG] [Thread-301435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:39:18.968 [DEBUG] [Thread-301435] [transport.py] [_log()] Compression: none
2025-12-24T11:39:18.968 [DEBUG] [Thread-301435] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:39:18.999 [DEBUG] [Thread-301435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:39:19.003 [DEBUG] [Thread-301435] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:39:19.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:39:19.006 [DEBUG] [Thread-301435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:39:19.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:39:19.008 [DEBUG] [Thread-301435] [transport.py] [_log()] userauth is OK
2025-12-24T11:39:19.008 [DEBUG] [Thread-301435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:39:19.008 [DEBUG] [Thread-301435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:39:19.008 [DEBUG] [Thread-301435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:39:19.008 [DEBUG] [Thread-301435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:39:19.038 [INFO] [Thread-301435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:39:19.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:39:19.881 [DEBUG] [Thread-301435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:39:19.881 [DEBUG] [Thread-301435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:39:19.882 [DEBUG] [Thread-301435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:39:19.923 [DEBUG] [Thread-301435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:39:19.923 [DEBUG] [Thread-301435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:39:19.925 [DEBUG] [Thread-301435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:39:19.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:39:19.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:39:19.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:39:19.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:39:19.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:39:19.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:39:19.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:39:19.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:39:19.956 [DEBUG] [Thread-301435] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:39:19.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:39:19.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.401806 -999.00  +21.70   6.58     36   +6.10 1 1 1 1 1   888    0 16.40 41.20 ----- 6.6 6.6 65.4 11.9 30.7 -25.1 30.2 -24.7 29.7 -23.4 30.4 -24.5
2025-12-24T11:39:19.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:39:19.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:39:19.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.401806
2025-12-24T11:39:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:39:19.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:39:19.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:39:19.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:39:19.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:39:19.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:38:43', tmtdew=16.65, humidity=33.31, cloud=0.0, wind=8.84, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:38:36.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:39:20.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:39:20.081 [DEBUG] [Thread-301438] [transport.py] [_log()] starting thread (client mode): 0xf5770e50
2025-12-24T11:39:20.081 [DEBUG] [Thread-301438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:39:20.100 [DEBUG] [Thread-301438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:39:20.100 [INFO] [Thread-301438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:39:20.110 [DEBUG] [Thread-301438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:39:20.110 [DEBUG] [Thread-301438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:39:20.110 [DEBUG] [Thread-301438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] client lang: <none>
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] server lang: <none>
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] kex follows: False
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] Compression: none
2025-12-24T11:39:20.111 [DEBUG] [Thread-301438] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:39:20.168 [DEBUG] [Thread-301438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:39:20.168 [DEBUG] [Thread-301438] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:39:20.168 [DEBUG] [Thread-301438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:39:20.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:39:20.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:39:20.223 [DEBUG] [Thread-301438] [transport.py] [_log()] userauth is OK
2025-12-24T11:39:20.223 [DEBUG] [Thread-301438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:39:20.223 [DEBUG] [Thread-301438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:39:20.223 [DEBUG] [Thread-301438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:39:20.223 [DEBUG] [Thread-301438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:39:20.237 [INFO] [Thread-301438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:39:20.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:39:20.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:39:21.085 [DEBUG] [Thread-301438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:39:21.085 [DEBUG] [Thread-301438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:39:21.124 [DEBUG] [Thread-301438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:39:21.124 [DEBUG] [Thread-301438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:39:21.133 [DEBUG] [Thread-301438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:39:21.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:39:21.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:39:21.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:39:21.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:39:21.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:39:21.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:39:21.172 [DEBUG] [Thread-301438] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:39:24.837 [DEBUG] [Thread-301440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:39:39.995 [DEBUG] [Thread-301441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:39:49.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:39:49.912 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:39:51.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:39:51.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:39:51.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
2025-12-24T11:39:52.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 39, 16), 16.79, 33.04, 0.0, 8.03, 20.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:39:52.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:39:16
2025-12-24T11:39:52.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:39:52.504 [DEBUG] [Thread-301442] [transport.py] [_log()] starting thread (client mode): 0xf57a95a0
2025-12-24T11:39:52.504 [DEBUG] [Thread-301442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:39:52.517 [DEBUG] [Thread-301442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:39:52.517 [INFO] [Thread-301442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] client lang: <none>
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] server lang: <none>
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] kex follows: False
2025-12-24T11:39:52.522 [DEBUG] [Thread-301442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:39:52.523 [DEBUG] [Thread-301442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:39:52.523 [DEBUG] [Thread-301442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:39:52.523 [DEBUG] [Thread-301442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:39:52.523 [DEBUG] [Thread-301442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:39:52.523 [DEBUG] [Thread-301442] [transport.py] [_log()] Compression: none
2025-12-24T11:39:52.523 [DEBUG] [Thread-301442] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:39:52.555 [DEBUG] [Thread-301442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:39:52.559 [DEBUG] [Thread-301442] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:39:52.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:39:52.561 [DEBUG] [Thread-301442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:39:52.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:39:52.564 [DEBUG] [Thread-301442] [transport.py] [_log()] userauth is OK
2025-12-24T11:39:52.564 [DEBUG] [Thread-301442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:39:52.564 [DEBUG] [Thread-301442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:39:52.564 [DEBUG] [Thread-301442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:39:52.564 [DEBUG] [Thread-301442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:39:52.595 [INFO] [Thread-301442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:39:52.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:39:53.148 [DEBUG] [Thread-301444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:39:53.269 [DEBUG] [Thread-301442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:39:53.269 [DEBUG] [Thread-301442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:39:53.269 [DEBUG] [Thread-301442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:39:53.310 [DEBUG] [Thread-301442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:39:53.310 [DEBUG] [Thread-301442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:39:53.312 [DEBUG] [Thread-301442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:39:53.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:39:53.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:39:53.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:39:53.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:39:53.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:39:53.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:39:53.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:39:53.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:39:53.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:39:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.402153 -999.00  +21.80   4.68     36   +6.20 1 1 1 1 1   888    0 16.23 35.22 ----- 4.7 4.7 145.9 7.6 30.9 -25.0 30.4 -24.4 29.9 -22.6 30.6 -24.2
2025-12-24T11:39:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:39:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:39:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.402153
2025-12-24T11:39:53.346 [DEBUG] [Thread-301442] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:39:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:39:53.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:39:53.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:39:53.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:39:53.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:39:53.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:39:16', tmtdew=16.79, humidity=33.04, cloud=0.0, wind=8.03, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:39:06.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:39:53.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:39:53.447 [DEBUG] [Thread-301446] [transport.py] [_log()] starting thread (client mode): 0xf5740070
2025-12-24T11:39:53.447 [DEBUG] [Thread-301446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:39:53.462 [DEBUG] [Thread-301446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:39:53.463 [INFO] [Thread-301446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] client lang: <none>
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] server lang: <none>
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] kex follows: False
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:39:53.470 [DEBUG] [Thread-301446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:39:53.471 [DEBUG] [Thread-301446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:39:53.471 [DEBUG] [Thread-301446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:39:53.471 [DEBUG] [Thread-301446] [transport.py] [_log()] Compression: none
2025-12-24T11:39:53.471 [DEBUG] [Thread-301446] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:39:53.526 [DEBUG] [Thread-301446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:39:53.527 [DEBUG] [Thread-301446] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:39:53.527 [DEBUG] [Thread-301446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:39:53.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:39:53.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:39:53.583 [DEBUG] [Thread-301446] [transport.py] [_log()] userauth is OK
2025-12-24T11:39:53.583 [DEBUG] [Thread-301446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:39:53.583 [DEBUG] [Thread-301446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:39:53.583 [DEBUG] [Thread-301446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:39:53.584 [DEBUG] [Thread-301446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:39:53.605 [INFO] [Thread-301446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:39:53.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:39:53.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:39:54.423 [DEBUG] [Thread-301446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:39:54.423 [DEBUG] [Thread-301446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:39:54.471 [DEBUG] [Thread-301446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:39:54.471 [DEBUG] [Thread-301446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:39:54.480 [DEBUG] [Thread-301446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:39:54.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:39:54.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:39:54.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:39:54.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:39:54.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:39:54.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:39:54.517 [DEBUG] [Thread-301446] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:39:55.063 [DEBUG] [Thread-301448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:40:10.199 [DEBUG] [Thread-301449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:40:24.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:40:24.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:40:24.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
2025-12-24T11:40:25.291 [DEBUG] [Thread-301450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:40:25.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 39, 49), 17.25, 32.4, 0.0, 8.95, 21.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:40:25.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:39:49
2025-12-24T11:40:25.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:40:25.835 [DEBUG] [Thread-301451] [transport.py] [_log()] starting thread (client mode): 0xf5743fa0
2025-12-24T11:40:25.836 [DEBUG] [Thread-301451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:40:25.848 [DEBUG] [Thread-301451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:40:25.848 [INFO] [Thread-301451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] client lang: <none>
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] server lang: <none>
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] kex follows: False
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:40:25.853 [DEBUG] [Thread-301451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:40:25.854 [DEBUG] [Thread-301451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:40:25.854 [DEBUG] [Thread-301451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:40:25.854 [DEBUG] [Thread-301451] [transport.py] [_log()] Compression: none
2025-12-24T11:40:25.854 [DEBUG] [Thread-301451] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:40:25.886 [DEBUG] [Thread-301451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:40:25.889 [DEBUG] [Thread-301451] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:40:25.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:40:25.891 [DEBUG] [Thread-301451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:40:25.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:40:25.894 [DEBUG] [Thread-301451] [transport.py] [_log()] userauth is OK
2025-12-24T11:40:25.894 [DEBUG] [Thread-301451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:40:25.894 [DEBUG] [Thread-301451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:40:25.894 [DEBUG] [Thread-301451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:40:25.894 [DEBUG] [Thread-301451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:40:25.912 [INFO] [Thread-301451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:40:25.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:40:26.700 [DEBUG] [Thread-301451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:40:26.700 [DEBUG] [Thread-301451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:40:26.701 [DEBUG] [Thread-301451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:40:26.742 [DEBUG] [Thread-301451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:40:26.742 [DEBUG] [Thread-301451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:40:26.745 [DEBUG] [Thread-301451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:40:26.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:40:26.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:40:26.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:40:26.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:40:26.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:40:26.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:40:26.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:40:26.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:40:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:40:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.402500 -999.00  +22.00   3.23     36   +6.20 1 1 1 1 1   888    0 16.07 35.52 ----- 3.2 3.2 13.2 5.2 31.1 -25.8 30.4 -26.4 30.0 -23.5 30.6 -24.3
2025-12-24T11:40:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:40:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:40:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.402500
2025-12-24T11:40:26.783 [DEBUG] [Thread-301451] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:40:26.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:40:26.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:40:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:40:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:40:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:40:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:39:49', tmtdew=17.25, humidity=32.4, cloud=0.0, wind=8.95, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:39:36.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:40:26.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:40:26.894 [DEBUG] [Thread-301454] [transport.py] [_log()] starting thread (client mode): 0xf57a8370
2025-12-24T11:40:26.894 [DEBUG] [Thread-301454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:40:26.908 [DEBUG] [Thread-301454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:40:26.908 [INFO] [Thread-301454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:40:26.916 [DEBUG] [Thread-301454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:40:26.916 [DEBUG] [Thread-301454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:40:26.916 [DEBUG] [Thread-301454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] client lang: <none>
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] server lang: <none>
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] kex follows: False
2025-12-24T11:40:26.917 [DEBUG] [Thread-301454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:40:26.918 [DEBUG] [Thread-301454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:40:26.918 [DEBUG] [Thread-301454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:40:26.918 [DEBUG] [Thread-301454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:40:26.918 [DEBUG] [Thread-301454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:40:26.918 [DEBUG] [Thread-301454] [transport.py] [_log()] Compression: none
2025-12-24T11:40:26.918 [DEBUG] [Thread-301454] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:40:26.980 [DEBUG] [Thread-301454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:40:26.980 [DEBUG] [Thread-301454] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:40:26.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:40:26.983 [DEBUG] [Thread-301454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:40:26.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:40:27.040 [DEBUG] [Thread-301454] [transport.py] [_log()] userauth is OK
2025-12-24T11:40:27.040 [DEBUG] [Thread-301454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:40:27.041 [DEBUG] [Thread-301454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:40:27.041 [DEBUG] [Thread-301454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:40:27.041 [DEBUG] [Thread-301454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:40:27.061 [INFO] [Thread-301454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:40:27.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:40:27.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:40:27.910 [DEBUG] [Thread-301454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:40:27.911 [DEBUG] [Thread-301454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:40:27.958 [DEBUG] [Thread-301454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:40:27.958 [DEBUG] [Thread-301454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:40:27.967 [DEBUG] [Thread-301454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:40:27.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:40:27.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')
2025-12-24T11:40:27.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:40:27.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:40:27.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:40:27.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:40:28.006 [DEBUG] [Thread-301454] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:40:40.343 [DEBUG] [Thread-301456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:40:50.055 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:40:50.056 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:40:53.478 [DEBUG] [Thread-301457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:40:55.445 [DEBUG] [Thread-301458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:40:58.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:40:58.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:40: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
2025-12-24T11:40:58.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 40, 23), 17.37, 32.18, 0.0, 8.77, 21.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:40:58.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:40:23
2025-12-24T11:40:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:40:59.315 [DEBUG] [Thread-301459] [transport.py] [_log()] starting thread (client mode): 0xf574d240
2025-12-24T11:40:59.316 [DEBUG] [Thread-301459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:40:59.329 [DEBUG] [Thread-301459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:40:59.329 [INFO] [Thread-301459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] client lang: <none>
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] server lang: <none>
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] kex follows: False
2025-12-24T11:40:59.333 [DEBUG] [Thread-301459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:40:59.334 [DEBUG] [Thread-301459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:40:59.334 [DEBUG] [Thread-301459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:40:59.334 [DEBUG] [Thread-301459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:40:59.334 [DEBUG] [Thread-301459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:40:59.334 [DEBUG] [Thread-301459] [transport.py] [_log()] Compression: none
2025-12-24T11:40:59.334 [DEBUG] [Thread-301459] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:40:59.364 [DEBUG] [Thread-301459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:40:59.367 [DEBUG] [Thread-301459] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:40:59.368 [DEBUG] [Thread-301459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:40:59.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:40:59.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:40:59.372 [DEBUG] [Thread-301459] [transport.py] [_log()] userauth is OK
2025-12-24T11:40:59.372 [DEBUG] [Thread-301459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:40:59.372 [DEBUG] [Thread-301459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:40:59.372 [DEBUG] [Thread-301459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:40:59.372 [DEBUG] [Thread-301459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:40:59.390 [INFO] [Thread-301459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:40:59.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:41:00.016 [DEBUG] [Thread-301459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:41:00.016 [DEBUG] [Thread-301459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:41:00.017 [DEBUG] [Thread-301459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:41:00.057 [DEBUG] [Thread-301459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:41:00.057 [DEBUG] [Thread-301459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:41:00.060 [DEBUG] [Thread-301459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:41:00.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:41:00.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:41:00.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:41:00.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:41:00.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:41:00.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:41:00.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:41:00.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:41:00.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:41:00.089 [DEBUG] [Thread-301459] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:41:00.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.402847 -999.00  +22.10   5.86     35   +6.30 1 1 1 1 1   888    0 15.99 36.12 ----- 5.9 5.9 80.0 7.5 31.4 -24.5 30.6 -25.0 30.1 -22.7 30.8 -23.5
2025-12-24T11:41:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:41:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:41:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.402847
2025-12-24T11:41:00.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:41:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:41:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:41:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:41:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:41:00.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:40:23', tmtdew=17.37, humidity=32.18, cloud=0.0, wind=8.77, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:40:05.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:41:00.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:41:00.202 [DEBUG] [Thread-301462] [transport.py] [_log()] starting thread (client mode): 0xf574e6b0
2025-12-24T11:41:00.202 [DEBUG] [Thread-301462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:41:00.220 [DEBUG] [Thread-301462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:41:00.220 [INFO] [Thread-301462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:41:00.227 [DEBUG] [Thread-301462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:41:00.228 [DEBUG] [Thread-301462] [transport.py] [_log()] client lang: <none>
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] server lang: <none>
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] kex follows: False
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] Compression: none
2025-12-24T11:41:00.229 [DEBUG] [Thread-301462] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:41:00.288 [DEBUG] [Thread-301462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:41:00.289 [DEBUG] [Thread-301462] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:41:00.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:41:00.290 [DEBUG] [Thread-301462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:41:00.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:41:00.343 [DEBUG] [Thread-301462] [transport.py] [_log()] userauth is OK
2025-12-24T11:41:00.344 [DEBUG] [Thread-301462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:41:00.344 [DEBUG] [Thread-301462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:41:00.344 [DEBUG] [Thread-301462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:41:00.344 [DEBUG] [Thread-301462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:41:00.367 [INFO] [Thread-301462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:41:00.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:41:00.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:41:01.220 [DEBUG] [Thread-301462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:41:01.220 [DEBUG] [Thread-301462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:41:01.258 [DEBUG] [Thread-301462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:41:01.258 [DEBUG] [Thread-301462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:41:01.266 [DEBUG] [Thread-301462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:41:01.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:41:01.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')
2025-12-24T11:41:01.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:41:01.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:41:01.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:41:01.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:41:01.299 [DEBUG] [Thread-301462] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:41:10.515 [DEBUG] [Thread-301464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:41:25.639 [DEBUG] [Thread-301465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:41:31.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:41:31.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:41:31.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:41:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 40, 56), 17.33, 31.95, 0.0, 7.32, 21.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:41:32.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:40:56
2025-12-24T11:41:32.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:41:32.658 [DEBUG] [Thread-301466] [transport.py] [_log()] starting thread (client mode): 0xf57a8760
2025-12-24T11:41:32.659 [DEBUG] [Thread-301466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:41:32.666 [DEBUG] [Thread-301466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:41:32.666 [INFO] [Thread-301466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:41:32.671 [DEBUG] [Thread-301466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:41:32.671 [DEBUG] [Thread-301466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] client lang: <none>
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] server lang: <none>
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] kex follows: False
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:41:32.672 [DEBUG] [Thread-301466] [transport.py] [_log()] Compression: none
2025-12-24T11:41:32.673 [DEBUG] [Thread-301466] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:41:32.698 [DEBUG] [Thread-301466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:41:32.702 [DEBUG] [Thread-301466] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:41:32.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:41:32.705 [DEBUG] [Thread-301466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:41:32.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:41:32.707 [DEBUG] [Thread-301466] [transport.py] [_log()] userauth is OK
2025-12-24T11:41:32.708 [DEBUG] [Thread-301466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:41:32.708 [DEBUG] [Thread-301466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:41:32.708 [DEBUG] [Thread-301466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:41:32.708 [DEBUG] [Thread-301466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:41:32.726 [INFO] [Thread-301466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:41:32.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:41:33.419 [DEBUG] [Thread-301466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:41:33.419 [DEBUG] [Thread-301466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:41:33.420 [DEBUG] [Thread-301466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:41:33.461 [DEBUG] [Thread-301466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:41:33.461 [DEBUG] [Thread-301466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:41:33.463 [DEBUG] [Thread-301466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:41:33.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:41:33.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:41:33.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:41:33.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:41:33.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:41:33.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:41:33.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:41:33.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:41:33.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:41:33.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.403542 -999.00  +21.70   5.29     36   +6.10 1 1 1 1 1   888    0 16.46 39.67 ----- 5.3 5.3 62.4 8.1 31.4 -25.6 30.7 -25.7 30.2 -24.5 30.9 -24.6
2025-12-24T11:41:33.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:41:33.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:41:33.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.403542
2025-12-24T11:41:33.499 [DEBUG] [Thread-301466] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:41:33.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:41:33.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:41:33.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:41:33.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:41:33.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:41:33.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:40:56', tmtdew=17.33, humidity=31.95, cloud=0.0, wind=7.32, temperature=21.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:41:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:41:33.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:41:33.602 [DEBUG] [Thread-301469] [transport.py] [_log()] starting thread (client mode): 0xf57a86a0
2025-12-24T11:41:33.602 [DEBUG] [Thread-301469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:41:33.617 [DEBUG] [Thread-301469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:41:33.617 [INFO] [Thread-301469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:41:33.624 [DEBUG] [Thread-301469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:41:33.624 [DEBUG] [Thread-301469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:41:33.624 [DEBUG] [Thread-301469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:41:33.624 [DEBUG] [Thread-301469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:41:33.624 [DEBUG] [Thread-301469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:41:33.624 [DEBUG] [Thread-301469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] client lang: <none>
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] server lang: <none>
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] kex follows: False
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] Compression: none
2025-12-24T11:41:33.625 [DEBUG] [Thread-301469] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:41:33.682 [DEBUG] [Thread-301469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:41:33.682 [DEBUG] [Thread-301469] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:41:33.682 [DEBUG] [Thread-301469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:41:33.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:41:33.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:41:33.743 [DEBUG] [Thread-301469] [transport.py] [_log()] userauth is OK
2025-12-24T11:41:33.743 [DEBUG] [Thread-301469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:41:33.743 [DEBUG] [Thread-301469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:41:33.743 [DEBUG] [Thread-301469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:41:33.743 [DEBUG] [Thread-301469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:41:33.757 [INFO] [Thread-301469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:41:33.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:41:33.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:41:34.577 [DEBUG] [Thread-301469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:41:34.577 [DEBUG] [Thread-301469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:41:34.624 [DEBUG] [Thread-301469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:41:34.624 [DEBUG] [Thread-301469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:41:34.633 [DEBUG] [Thread-301469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:41:34.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:41:34.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:41:34.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:41:34.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:41:34.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:41:34.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:41:34.666 [DEBUG] [Thread-301469] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:41:40.725 [DEBUG] [Thread-301471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:41:50.206 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:41:50.207 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:41:53.769 [DEBUG] [Thread-301472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:41:55.861 [DEBUG] [Thread-301473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:42:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:42:04.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:42:04.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:42:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 41, 29), 17.4, 31.84, 0.0, 8.28, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:42:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:41:29
2025-12-24T11:42:05.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:42:06.055 [DEBUG] [Thread-301474] [transport.py] [_log()] starting thread (client mode): 0xf574e830
2025-12-24T11:42:06.056 [DEBUG] [Thread-301474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:42:06.057 [DEBUG] [Thread-301474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:42:06.057 [INFO] [Thread-301474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:42:06.061 [DEBUG] [Thread-301474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:42:06.062 [DEBUG] [Thread-301474] [transport.py] [_log()] client lang: <none>
2025-12-24T11:42:06.062 [DEBUG] [Thread-301474] [transport.py] [_log()] server lang: <none>
2025-12-24T11:42:06.062 [DEBUG] [Thread-301474] [transport.py] [_log()] kex follows: False
2025-12-24T11:42:06.062 [DEBUG] [Thread-301474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:42:06.062 [DEBUG] [Thread-301474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:42:06.063 [DEBUG] [Thread-301474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:42:06.063 [DEBUG] [Thread-301474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:42:06.063 [DEBUG] [Thread-301474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:42:06.063 [DEBUG] [Thread-301474] [transport.py] [_log()] Compression: none
2025-12-24T11:42:06.063 [DEBUG] [Thread-301474] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:42:06.102 [DEBUG] [Thread-301474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:42:06.105 [DEBUG] [Thread-301474] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:42:06.107 [DEBUG] [Thread-301474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:42:06.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:42:06.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:42:06.112 [DEBUG] [Thread-301474] [transport.py] [_log()] userauth is OK
2025-12-24T11:42:06.112 [DEBUG] [Thread-301474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:42:06.112 [DEBUG] [Thread-301474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:42:06.112 [DEBUG] [Thread-301474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:42:06.112 [DEBUG] [Thread-301474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:42:06.139 [INFO] [Thread-301474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:42:06.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:42:06.801 [DEBUG] [Thread-301474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:42:06.801 [DEBUG] [Thread-301474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:42:06.802 [DEBUG] [Thread-301474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:42:06.843 [DEBUG] [Thread-301474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:42:06.843 [DEBUG] [Thread-301474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:42:06.846 [DEBUG] [Thread-301474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:42:06.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:42:06.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:42:06.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:42:06.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:42:06.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:42:06.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:42:06.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:42:06.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:42:06.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:42:06.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.403889 -999.00  +21.90   7.06     36   +6.10 1 1 1 1 1   888    0 16.37 42.13 ----- 7.1 7.1 165.4 7.4 31.5 -25.4 30.8 -25.5 30.2 -23.0 30.9 -24.8
2025-12-24T11:42:06.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:42:06.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:42:06.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.403889
2025-12-24T11:42:06.878 [DEBUG] [Thread-301474] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:42:06.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:42:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:42:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:42:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:42:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:42:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:41:29', tmtdew=17.4, humidity=31.84, cloud=0.0, wind=8.28, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:41:36.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:42:06.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:42:06.990 [DEBUG] [Thread-301477] [transport.py] [_log()] starting thread (client mode): 0xf572ef20
2025-12-24T11:42:06.991 [DEBUG] [Thread-301477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:42:07.006 [DEBUG] [Thread-301477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:42:07.006 [INFO] [Thread-301477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] client lang: <none>
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] server lang: <none>
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] kex follows: False
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] Compression: none
2025-12-24T11:42:07.013 [DEBUG] [Thread-301477] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:42:07.069 [DEBUG] [Thread-301477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:42:07.069 [DEBUG] [Thread-301477] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:42:07.069 [DEBUG] [Thread-301477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:42:07.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:42:07.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:42:07.127 [DEBUG] [Thread-301477] [transport.py] [_log()] userauth is OK
2025-12-24T11:42:07.127 [DEBUG] [Thread-301477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:42:07.127 [DEBUG] [Thread-301477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:42:07.127 [DEBUG] [Thread-301477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:42:07.127 [DEBUG] [Thread-301477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:42:07.144 [INFO] [Thread-301477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:42:07.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:42:07.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:42:07.988 [DEBUG] [Thread-301477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:42:07.988 [DEBUG] [Thread-301477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:42:08.039 [DEBUG] [Thread-301477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:42:08.039 [DEBUG] [Thread-301477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:42:08.047 [DEBUG] [Thread-301477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:42:08.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:42:08.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:42:08.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:42:08.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:42:08.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:42:08.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:42:08.079 [DEBUG] [Thread-301477] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:42:10.929 [DEBUG] [Thread-301479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:42:26.085 [DEBUG] [Thread-301480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:42:38.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:42:38.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:42:38.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:42:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 42, 2), 17.4, 31.85, 0.0, 10.23, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:42:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:42:02
2025-12-24T11:42:39.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:42:39.442 [DEBUG] [Thread-301481] [transport.py] [_log()] starting thread (client mode): 0xf572c5e0
2025-12-24T11:42:39.443 [DEBUG] [Thread-301481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:42:39.456 [DEBUG] [Thread-301481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:42:39.456 [INFO] [Thread-301481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:42:39.461 [DEBUG] [Thread-301481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:42:39.461 [DEBUG] [Thread-301481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:42:39.461 [DEBUG] [Thread-301481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:42:39.461 [DEBUG] [Thread-301481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:42:39.461 [DEBUG] [Thread-301481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:42:39.462 [DEBUG] [Thread-301481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:42:39.462 [DEBUG] [Thread-301481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:42:39.462 [DEBUG] [Thread-301481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:42:39.462 [DEBUG] [Thread-301481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:42:39.462 [DEBUG] [Thread-301481] [transport.py] [_log()] client lang: <none>
2025-12-24T11:42:39.462 [DEBUG] [Thread-301481] [transport.py] [_log()] server lang: <none>
2025-12-24T11:42:39.462 [DEBUG] [Thread-301481] [transport.py] [_log()] kex follows: False
2025-12-24T11:42:39.462 [DEBUG] [Thread-301481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:42:39.463 [DEBUG] [Thread-301481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:42:39.463 [DEBUG] [Thread-301481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:42:39.463 [DEBUG] [Thread-301481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:42:39.463 [DEBUG] [Thread-301481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:42:39.463 [DEBUG] [Thread-301481] [transport.py] [_log()] Compression: none
2025-12-24T11:42:39.464 [DEBUG] [Thread-301481] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:42:39.504 [DEBUG] [Thread-301481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:42:39.509 [DEBUG] [Thread-301481] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:42:39.511 [DEBUG] [Thread-301481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:42:39.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:42:39.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:42:39.517 [DEBUG] [Thread-301481] [transport.py] [_log()] userauth is OK
2025-12-24T11:42:39.518 [DEBUG] [Thread-301481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:42:39.518 [DEBUG] [Thread-301481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:42:39.518 [DEBUG] [Thread-301481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:42:39.518 [DEBUG] [Thread-301481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:42:39.557 [INFO] [Thread-301481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:42:39.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:42:40.203 [DEBUG] [Thread-301481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:42:40.203 [DEBUG] [Thread-301481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:42:40.205 [DEBUG] [Thread-301481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:42:40.244 [DEBUG] [Thread-301481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:42:40.244 [DEBUG] [Thread-301481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:42:40.247 [DEBUG] [Thread-301481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:42:40.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:42:40.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:42:40.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:42:40.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:42:40.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:42:40.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:42:40.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:42:40.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:42:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:42:40.278 [DEBUG] [Thread-301481] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:42:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.404237 -999.00  +22.00   6.35     35   +6.10 1 1 1 1 1   888    0 16.46 43.39 ----- 6.3 6.3 181.2 7.3 31.6 -26.2 30.9 -25.3 30.4 -23.9 31.0 -24.9
2025-12-24T11:42:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:42:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:42:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.404237
2025-12-24T11:42:40.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:42:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:42:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:42:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:42:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:42:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:42:02', tmtdew=17.4, humidity=31.85, cloud=0.0, wind=10.23, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:42:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:42:40.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:42:40.400 [DEBUG] [Thread-301484] [transport.py] [_log()] starting thread (client mode): 0xf57a8370
2025-12-24T11:42:40.400 [DEBUG] [Thread-301484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:42:40.416 [DEBUG] [Thread-301484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:42:40.416 [INFO] [Thread-301484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:42:40.424 [DEBUG] [Thread-301484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:42:40.424 [DEBUG] [Thread-301484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:42:40.424 [DEBUG] [Thread-301484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:42:40.424 [DEBUG] [Thread-301484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:42:40.424 [DEBUG] [Thread-301484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] client lang: <none>
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] server lang: <none>
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] kex follows: False
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:42:40.425 [DEBUG] [Thread-301484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:42:40.426 [DEBUG] [Thread-301484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:42:40.426 [DEBUG] [Thread-301484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:42:40.426 [DEBUG] [Thread-301484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:42:40.426 [DEBUG] [Thread-301484] [transport.py] [_log()] Compression: none
2025-12-24T11:42:40.426 [DEBUG] [Thread-301484] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:42:40.485 [DEBUG] [Thread-301484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:42:40.486 [DEBUG] [Thread-301484] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:42:40.487 [DEBUG] [Thread-301484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:42:40.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:42:40.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:42:40.543 [DEBUG] [Thread-301484] [transport.py] [_log()] userauth is OK
2025-12-24T11:42:40.543 [DEBUG] [Thread-301484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:42:40.544 [DEBUG] [Thread-301484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:42:40.544 [DEBUG] [Thread-301484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:42:40.544 [DEBUG] [Thread-301484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:42:40.571 [INFO] [Thread-301484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:42:40.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:42:40.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:42:41.146 [DEBUG] [Thread-301486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:42:41.393 [DEBUG] [Thread-301484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:42:41.393 [DEBUG] [Thread-301484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:42:41.439 [DEBUG] [Thread-301484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:42:41.439 [DEBUG] [Thread-301484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:42:41.448 [DEBUG] [Thread-301484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:42:41.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:42:41.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:42:41.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:42:41.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:42:41.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:42:41.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:42:41.486 [DEBUG] [Thread-301484] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:42:50.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:42:50.350 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:42:54.015 [DEBUG] [Thread-301487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:42:56.311 [DEBUG] [Thread-301488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:43:11.373 [DEBUG] [Thread-301489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:43:11.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:43:11.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:43:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:43:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 42, 35), 17.6, 31.52, 0.0, 9.05, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:43:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:42:35
2025-12-24T11:43:12.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:43:12.798 [DEBUG] [Thread-301490] [transport.py] [_log()] starting thread (client mode): 0xf572e290
2025-12-24T11:43:12.799 [DEBUG] [Thread-301490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:43:12.811 [DEBUG] [Thread-301490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:43:12.811 [INFO] [Thread-301490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] client lang: <none>
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] server lang: <none>
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] kex follows: False
2025-12-24T11:43:12.816 [DEBUG] [Thread-301490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:43:12.817 [DEBUG] [Thread-301490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:43:12.817 [DEBUG] [Thread-301490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:43:12.817 [DEBUG] [Thread-301490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:43:12.817 [DEBUG] [Thread-301490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:43:12.817 [DEBUG] [Thread-301490] [transport.py] [_log()] Compression: none
2025-12-24T11:43:12.817 [DEBUG] [Thread-301490] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:43:12.852 [DEBUG] [Thread-301490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:43:12.858 [DEBUG] [Thread-301490] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:43:12.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:43:12.861 [DEBUG] [Thread-301490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:43:12.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:43:12.865 [DEBUG] [Thread-301490] [transport.py] [_log()] userauth is OK
2025-12-24T11:43:12.866 [DEBUG] [Thread-301490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:43:12.866 [DEBUG] [Thread-301490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:43:12.866 [DEBUG] [Thread-301490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:43:12.866 [DEBUG] [Thread-301490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:43:12.896 [INFO] [Thread-301490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:43:12.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:43:13.544 [DEBUG] [Thread-301490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:43:13.544 [DEBUG] [Thread-301490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:43:13.545 [DEBUG] [Thread-301490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:43:13.587 [DEBUG] [Thread-301490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:43:13.587 [DEBUG] [Thread-301490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:43:13.590 [DEBUG] [Thread-301490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:43:13.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:43:13.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:43:13.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:43:13.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:43:13.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:43:13.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:43:13.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:43:13.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:43:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:43:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.404584 -999.00  +21.90   6.49     35   +6.10 1 1 1 1 1   888    0 16.44 46.85 ----- 6.5 6.5 208.8 8.7 31.6 -26.2 30.5 -30.9 30.4 -24.5 30.9 -25.7
2025-12-24T11:43:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:43:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:43:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.404584
2025-12-24T11:43:13.624 [DEBUG] [Thread-301490] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:43:13.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:43:13.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:43:13.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:43:13.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:43:13.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:43:13.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:42:35', tmtdew=17.6, humidity=31.52, cloud=0.0, wind=9.05, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:42:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:43:13.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:43:13.743 [DEBUG] [Thread-301493] [transport.py] [_log()] starting thread (client mode): 0xf572dcf0
2025-12-24T11:43:13.743 [DEBUG] [Thread-301493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:43:13.758 [DEBUG] [Thread-301493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:43:13.758 [INFO] [Thread-301493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:43:13.765 [DEBUG] [Thread-301493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:43:13.765 [DEBUG] [Thread-301493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:43:13.765 [DEBUG] [Thread-301493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] client lang: <none>
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] server lang: <none>
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] kex follows: False
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] Compression: none
2025-12-24T11:43:13.766 [DEBUG] [Thread-301493] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:43:13.822 [DEBUG] [Thread-301493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:43:13.822 [DEBUG] [Thread-301493] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:43:13.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:43:13.823 [DEBUG] [Thread-301493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:43:13.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:43:13.879 [DEBUG] [Thread-301493] [transport.py] [_log()] userauth is OK
2025-12-24T11:43:13.879 [DEBUG] [Thread-301493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:43:13.879 [DEBUG] [Thread-301493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:43:13.880 [DEBUG] [Thread-301493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:43:13.880 [DEBUG] [Thread-301493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:43:13.897 [INFO] [Thread-301493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:43:13.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:43:13.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:43:14.766 [DEBUG] [Thread-301493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:43:14.766 [DEBUG] [Thread-301493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:43:14.814 [DEBUG] [Thread-301493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:43:14.814 [DEBUG] [Thread-301493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:43:14.823 [DEBUG] [Thread-301493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:43:14.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:43:14.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:43:14.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:43:14.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:43:14.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:43:14.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:43:14.856 [DEBUG] [Thread-301493] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:43:26.429 [DEBUG] [Thread-301495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:43:41.544 [DEBUG] [Thread-301496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:43:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:43:44.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:43:44.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:43:45.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 43, 8), 17.59, 31.52, 0.0, 9.53, 21.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:43:45.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:43:08
2025-12-24T11:43:45.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:43:46.126 [DEBUG] [Thread-301497] [transport.py] [_log()] starting thread (client mode): 0xf572de10
2025-12-24T11:43:46.126 [DEBUG] [Thread-301497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:43:46.139 [DEBUG] [Thread-301497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:43:46.139 [INFO] [Thread-301497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:43:46.142 [DEBUG] [Thread-301497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] client lang: <none>
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] server lang: <none>
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] kex follows: False
2025-12-24T11:43:46.143 [DEBUG] [Thread-301497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:43:46.144 [DEBUG] [Thread-301497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:43:46.144 [DEBUG] [Thread-301497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:43:46.144 [DEBUG] [Thread-301497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:43:46.144 [DEBUG] [Thread-301497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:43:46.144 [DEBUG] [Thread-301497] [transport.py] [_log()] Compression: none
2025-12-24T11:43:46.144 [DEBUG] [Thread-301497] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:43:46.177 [DEBUG] [Thread-301497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:43:46.180 [DEBUG] [Thread-301497] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:43:46.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:43:46.183 [DEBUG] [Thread-301497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:43:46.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:43:46.187 [DEBUG] [Thread-301497] [transport.py] [_log()] userauth is OK
2025-12-24T11:43:46.187 [DEBUG] [Thread-301497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:43:46.187 [DEBUG] [Thread-301497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:43:46.187 [DEBUG] [Thread-301497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:43:46.187 [DEBUG] [Thread-301497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:43:46.222 [INFO] [Thread-301497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:43:46.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:43:46.903 [DEBUG] [Thread-301497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:43:46.904 [DEBUG] [Thread-301497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:43:46.904 [DEBUG] [Thread-301497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:43:46.945 [DEBUG] [Thread-301497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:43:46.945 [DEBUG] [Thread-301497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:43:46.947 [DEBUG] [Thread-301497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:43:46.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:43:46.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:43:46.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:43:46.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:43:46.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:43:46.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:43:46.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:43:46.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:43:46.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:43:46.969 [DEBUG] [Thread-301497] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:43:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.404931 -999.00  +21.90   4.97     35   +6.10 1 1 1 1 1   888    0 16.86 51.72 ----- 5.0 5.0 267.0 12.2 31.6 -26.4 30.5 -30.8 30.4 -23.8 31.0 -26.5
2025-12-24T11:43:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:43:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:43:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.404931
2025-12-24T11:43:46.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:43:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:43:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:43:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:43:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:43:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:43:08', tmtdew=17.59, humidity=31.52, cloud=0.0, wind=9.53, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:43:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:43:47.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:43:47.073 [DEBUG] [Thread-301500] [transport.py] [_log()] starting thread (client mode): 0xf572e560
2025-12-24T11:43:47.073 [DEBUG] [Thread-301500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:43:47.088 [DEBUG] [Thread-301500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:43:47.088 [INFO] [Thread-301500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] client lang: <none>
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] server lang: <none>
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] kex follows: False
2025-12-24T11:43:47.095 [DEBUG] [Thread-301500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:43:47.096 [DEBUG] [Thread-301500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:43:47.096 [DEBUG] [Thread-301500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:43:47.096 [DEBUG] [Thread-301500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:43:47.096 [DEBUG] [Thread-301500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:43:47.096 [DEBUG] [Thread-301500] [transport.py] [_log()] Compression: none
2025-12-24T11:43:47.096 [DEBUG] [Thread-301500] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:43:47.150 [DEBUG] [Thread-301500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:43:47.150 [DEBUG] [Thread-301500] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:43:47.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:43:47.151 [DEBUG] [Thread-301500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:43:47.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:43:47.207 [DEBUG] [Thread-301500] [transport.py] [_log()] userauth is OK
2025-12-24T11:43:47.207 [DEBUG] [Thread-301500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:43:47.207 [DEBUG] [Thread-301500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:43:47.207 [DEBUG] [Thread-301500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:43:47.207 [DEBUG] [Thread-301500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:43:47.221 [INFO] [Thread-301500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:43:47.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:43:47.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:43:48.106 [DEBUG] [Thread-301500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:43:48.106 [DEBUG] [Thread-301500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:43:48.153 [DEBUG] [Thread-301500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:43:48.153 [DEBUG] [Thread-301500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:43:48.161 [DEBUG] [Thread-301500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:43:48.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:43:48.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:43:48.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
2025-12-24T11:43:48.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:43:48.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:43:48.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:43:48.198 [DEBUG] [Thread-301500] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:43:50.500 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:43:50.501 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:43:54.350 [DEBUG] [Thread-301502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:43:56.621 [DEBUG] [Thread-301503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:44:11.724 [DEBUG] [Thread-301504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:44:18.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:44:18.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:44:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:44:19.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 43, 42), 17.41, 32.07, 0.0, 3.18, 21.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:44:19.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:43:42
2025-12-24T11:44:19.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:44:19.458 [DEBUG] [Thread-301505] [transport.py] [_log()] starting thread (client mode): 0xf572e590
2025-12-24T11:44:19.459 [DEBUG] [Thread-301505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:44:19.472 [DEBUG] [Thread-301505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:44:19.472 [INFO] [Thread-301505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] client lang: <none>
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] server lang: <none>
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] kex follows: False
2025-12-24T11:44:19.477 [DEBUG] [Thread-301505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:44:19.478 [DEBUG] [Thread-301505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:44:19.478 [DEBUG] [Thread-301505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:44:19.478 [DEBUG] [Thread-301505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:44:19.478 [DEBUG] [Thread-301505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:44:19.478 [DEBUG] [Thread-301505] [transport.py] [_log()] Compression: none
2025-12-24T11:44:19.478 [DEBUG] [Thread-301505] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:44:19.510 [DEBUG] [Thread-301505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:44:19.513 [DEBUG] [Thread-301505] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:44:19.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:44:19.516 [DEBUG] [Thread-301505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:44:19.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:44:19.518 [DEBUG] [Thread-301505] [transport.py] [_log()] userauth is OK
2025-12-24T11:44:19.519 [DEBUG] [Thread-301505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:44:19.519 [DEBUG] [Thread-301505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:44:19.519 [DEBUG] [Thread-301505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:44:19.519 [DEBUG] [Thread-301505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:44:19.538 [INFO] [Thread-301505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:44:19.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:44:20.192 [DEBUG] [Thread-301505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:44:20.192 [DEBUG] [Thread-301505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:44:20.192 [DEBUG] [Thread-301505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:44:20.233 [DEBUG] [Thread-301505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:44:20.233 [DEBUG] [Thread-301505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:44:20.235 [DEBUG] [Thread-301505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:44:20.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:44:20.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:44:20.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:44:20.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:44:20.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:44:20.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:44:20.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:44:20.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:44:20.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:44:20.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.405278 -999.00  +21.60   9.75     36   +6.10 1 1 1 1 1   888    0 16.71 54.66 ----- 9.8 9.8 269.2 13.8 31.4 -27.7 30.6 -25.8 30.2 -23.7 30.9 -26.4
2025-12-24T11:44:20.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:44:20.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:44:20.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.405278
2025-12-24T11:44:20.258 [DEBUG] [Thread-301505] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:44:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:44:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:44:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:44:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:44:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:44:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:43:42', tmtdew=17.41, humidity=32.07, cloud=0.0, wind=3.18, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:43:36.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:44:20.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:44:20.358 [DEBUG] [Thread-301508] [transport.py] [_log()] starting thread (client mode): 0xf572d1b0
2025-12-24T11:44:20.358 [DEBUG] [Thread-301508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:44:20.373 [DEBUG] [Thread-301508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:44:20.373 [INFO] [Thread-301508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] client lang: <none>
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] server lang: <none>
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] kex follows: False
2025-12-24T11:44:20.380 [DEBUG] [Thread-301508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:44:20.381 [DEBUG] [Thread-301508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:44:20.381 [DEBUG] [Thread-301508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:44:20.381 [DEBUG] [Thread-301508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:44:20.381 [DEBUG] [Thread-301508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:44:20.381 [DEBUG] [Thread-301508] [transport.py] [_log()] Compression: none
2025-12-24T11:44:20.381 [DEBUG] [Thread-301508] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:44:20.438 [DEBUG] [Thread-301508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:44:20.438 [DEBUG] [Thread-301508] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:44:20.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:44:20.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:44:20.439 [DEBUG] [Thread-301508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:44:20.495 [DEBUG] [Thread-301508] [transport.py] [_log()] userauth is OK
2025-12-24T11:44:20.495 [DEBUG] [Thread-301508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:44:20.495 [DEBUG] [Thread-301508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:44:20.495 [DEBUG] [Thread-301508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:44:20.495 [DEBUG] [Thread-301508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:44:20.509 [INFO] [Thread-301508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:44:20.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:44:20.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:44:21.321 [DEBUG] [Thread-301508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:44:21.322 [DEBUG] [Thread-301508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:44:21.369 [DEBUG] [Thread-301508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:44:21.369 [DEBUG] [Thread-301508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:44:21.377 [DEBUG] [Thread-301508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:44:21.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:44:21.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:44:21.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:44:21.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:44:21.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:44:21.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:44:21.410 [DEBUG] [Thread-301508] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:44:26.808 [DEBUG] [Thread-301510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:44:41.934 [DEBUG] [Thread-301511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:44:50.642 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:44:50.643 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:44:51.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:44:51.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:44:51.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:44:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 44, 15), 17.27, 32.3, 0.0, 1.62, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:44:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:44:15
2025-12-24T11:44:52.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:44:52.683 [DEBUG] [Thread-301512] [transport.py] [_log()] starting thread (client mode): 0xf572cbb0
2025-12-24T11:44:52.684 [DEBUG] [Thread-301512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:44:52.684 [DEBUG] [Thread-301512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:44:52.684 [INFO] [Thread-301512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:44:52.689 [DEBUG] [Thread-301512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:44:52.689 [DEBUG] [Thread-301512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:44:52.689 [DEBUG] [Thread-301512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:44:52.689 [DEBUG] [Thread-301512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:44:52.689 [DEBUG] [Thread-301512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:44:52.689 [DEBUG] [Thread-301512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:44:52.689 [DEBUG] [Thread-301512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:44:52.689 [DEBUG] [Thread-301512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:44:52.690 [DEBUG] [Thread-301512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:44:52.690 [DEBUG] [Thread-301512] [transport.py] [_log()] client lang: <none>
2025-12-24T11:44:52.690 [DEBUG] [Thread-301512] [transport.py] [_log()] server lang: <none>
2025-12-24T11:44:52.690 [DEBUG] [Thread-301512] [transport.py] [_log()] kex follows: False
2025-12-24T11:44:52.690 [DEBUG] [Thread-301512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:44:52.691 [DEBUG] [Thread-301512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:44:52.691 [DEBUG] [Thread-301512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:44:52.692 [DEBUG] [Thread-301512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:44:52.692 [DEBUG] [Thread-301512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:44:52.692 [DEBUG] [Thread-301512] [transport.py] [_log()] Compression: none
2025-12-24T11:44:52.692 [DEBUG] [Thread-301512] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:44:52.730 [DEBUG] [Thread-301512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:44:52.735 [DEBUG] [Thread-301512] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:44:52.737 [DEBUG] [Thread-301512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:44:52.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:44:52.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:44:52.742 [DEBUG] [Thread-301512] [transport.py] [_log()] userauth is OK
2025-12-24T11:44:52.742 [DEBUG] [Thread-301512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:44:52.743 [DEBUG] [Thread-301512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:44:52.743 [DEBUG] [Thread-301512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:44:52.743 [DEBUG] [Thread-301512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:44:52.780 [INFO] [Thread-301512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:44:52.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:44:53.440 [DEBUG] [Thread-301512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:44:53.440 [DEBUG] [Thread-301512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:44:53.441 [DEBUG] [Thread-301512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:44:53.481 [DEBUG] [Thread-301512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:44:53.481 [DEBUG] [Thread-301512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:44:53.484 [DEBUG] [Thread-301512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:44:53.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:44:53.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:44:53.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:44:53.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:44:53.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:44:53.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:44:53.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:44:53.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:44:53.511 [DEBUG] [Thread-301512] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:44:53.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:44:53.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.405625 -999.00  +21.70   2.55     36   +6.20 1 1 1 1 1   888    0 16.64 51.52 ----- 2.5 2.5 152.8 5.0 31.6 -25.3 30.7 -25.3 30.0 -23.8 30.9 -24.3
2025-12-24T11:44:53.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:44:53.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:44:53.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.405625
2025-12-24T11:44:53.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:44:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:44:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:44:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:44:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:44:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:44:15', tmtdew=17.27, humidity=32.3, cloud=0.0, wind=1.62, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:44:06.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:44:53.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:44:53.622 [DEBUG] [Thread-301515] [transport.py] [_log()] starting thread (client mode): 0xf574da20
2025-12-24T11:44:53.622 [DEBUG] [Thread-301515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:44:53.637 [DEBUG] [Thread-301515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:44:53.637 [INFO] [Thread-301515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:44:53.644 [DEBUG] [Thread-301515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:44:53.644 [DEBUG] [Thread-301515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:44:53.644 [DEBUG] [Thread-301515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] client lang: <none>
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] server lang: <none>
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] kex follows: False
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] Compression: none
2025-12-24T11:44:53.645 [DEBUG] [Thread-301515] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:44:53.702 [DEBUG] [Thread-301515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:44:53.702 [DEBUG] [Thread-301515] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:44:53.702 [DEBUG] [Thread-301515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:44:53.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:44:53.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:44:53.763 [DEBUG] [Thread-301515] [transport.py] [_log()] userauth is OK
2025-12-24T11:44:53.763 [DEBUG] [Thread-301515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:44:53.763 [DEBUG] [Thread-301515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:44:53.763 [DEBUG] [Thread-301515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:44:53.763 [DEBUG] [Thread-301515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:44:53.782 [INFO] [Thread-301515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:44:53.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:44:53.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:44:54.605 [DEBUG] [Thread-301515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:44:54.605 [DEBUG] [Thread-301515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:44:54.651 [DEBUG] [Thread-301517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:44:54.653 [DEBUG] [Thread-301515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:44:54.653 [DEBUG] [Thread-301515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:44:54.662 [DEBUG] [Thread-301515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:44:54.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:44:54.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:44:54.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:44:54.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:44:54.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:44:54.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:44:54.696 [DEBUG] [Thread-301515] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:44:56.998 [DEBUG] [Thread-301518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:45:12.149 [DEBUG] [Thread-301519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:45:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:45:24.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:45:24.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:45:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 44, 48), 17.11, 32.63, 0.0, 8.47, 20.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:45:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:44:48
2025-12-24T11:45:25.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:45:26.045 [DEBUG] [Thread-301520] [transport.py] [_log()] starting thread (client mode): 0xf572c6a0
2025-12-24T11:45:26.046 [DEBUG] [Thread-301520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:45:26.055 [DEBUG] [Thread-301520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:45:26.055 [INFO] [Thread-301520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] client lang: <none>
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] server lang: <none>
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] kex follows: False
2025-12-24T11:45:26.060 [DEBUG] [Thread-301520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:45:26.061 [DEBUG] [Thread-301520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:45:26.061 [DEBUG] [Thread-301520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:45:26.061 [DEBUG] [Thread-301520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:45:26.061 [DEBUG] [Thread-301520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:45:26.061 [DEBUG] [Thread-301520] [transport.py] [_log()] Compression: none
2025-12-24T11:45:26.061 [DEBUG] [Thread-301520] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:45:26.093 [DEBUG] [Thread-301520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:45:26.096 [DEBUG] [Thread-301520] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:45:26.097 [DEBUG] [Thread-301520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:45:26.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:45:26.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:45:26.100 [DEBUG] [Thread-301520] [transport.py] [_log()] userauth is OK
2025-12-24T11:45:26.100 [DEBUG] [Thread-301520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:45:26.101 [DEBUG] [Thread-301520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:45:26.101 [DEBUG] [Thread-301520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:45:26.101 [DEBUG] [Thread-301520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:45:26.130 [INFO] [Thread-301520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:45:26.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:45:26.746 [DEBUG] [Thread-301520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:45:26.747 [DEBUG] [Thread-301520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:45:26.748 [DEBUG] [Thread-301520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:45:26.788 [DEBUG] [Thread-301520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:45:26.788 [DEBUG] [Thread-301520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:45:26.791 [DEBUG] [Thread-301520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:45:26.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:45:26.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:45:26.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:45:26.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:45:26.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:45:26.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:45:26.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:45:26.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:45:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:45:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.405972 -999.00  +22.20   8.18     35   +6.40 1 1 1 1 1   888    0 16.65 51.33 ----- 8.2 8.2 94.9 12.3 31.9 -24.7 30.9 -25.4 30.2 -22.4 31.1 -23.5
2025-12-24T11:45:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:45:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:45:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.405972
2025-12-24T11:45:26.825 [DEBUG] [Thread-301520] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:45:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:45:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:45:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:45:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:45:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:45:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:44:48', tmtdew=17.11, humidity=32.63, cloud=0.0, wind=8.47, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:44:35.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:45:26.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:45:26.927 [DEBUG] [Thread-301523] [transport.py] [_log()] starting thread (client mode): 0xf572c490
2025-12-24T11:45:26.928 [DEBUG] [Thread-301523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:45:26.943 [DEBUG] [Thread-301523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:45:26.944 [INFO] [Thread-301523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:45:26.953 [DEBUG] [Thread-301523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:45:26.953 [DEBUG] [Thread-301523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:45:26.953 [DEBUG] [Thread-301523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:45:26.954 [DEBUG] [Thread-301523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:45:26.954 [DEBUG] [Thread-301523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:45:26.954 [DEBUG] [Thread-301523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:45:26.954 [DEBUG] [Thread-301523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:45:26.954 [DEBUG] [Thread-301523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:45:26.954 [DEBUG] [Thread-301523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:45:26.954 [DEBUG] [Thread-301523] [transport.py] [_log()] client lang: <none>
2025-12-24T11:45:26.954 [DEBUG] [Thread-301523] [transport.py] [_log()] server lang: <none>
2025-12-24T11:45:26.955 [DEBUG] [Thread-301523] [transport.py] [_log()] kex follows: False
2025-12-24T11:45:26.955 [DEBUG] [Thread-301523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:45:26.955 [DEBUG] [Thread-301523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:45:26.955 [DEBUG] [Thread-301523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:45:26.955 [DEBUG] [Thread-301523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:45:26.956 [DEBUG] [Thread-301523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:45:26.956 [DEBUG] [Thread-301523] [transport.py] [_log()] Compression: none
2025-12-24T11:45:26.956 [DEBUG] [Thread-301523] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:45:27.013 [DEBUG] [Thread-301523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:45:27.013 [DEBUG] [Thread-301523] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:45:27.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:45:27.015 [DEBUG] [Thread-301523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:45:27.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:45:27.072 [DEBUG] [Thread-301523] [transport.py] [_log()] userauth is OK
2025-12-24T11:45:27.072 [DEBUG] [Thread-301523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:45:27.072 [DEBUG] [Thread-301523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:45:27.072 [DEBUG] [Thread-301523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:45:27.072 [DEBUG] [Thread-301523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:45:27.091 [INFO] [Thread-301523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:45:27.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:45:27.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:45:27.235 [DEBUG] [Thread-301525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:45:27.942 [DEBUG] [Thread-301523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:45:27.942 [DEBUG] [Thread-301523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:45:27.990 [DEBUG] [Thread-301523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:45:27.990 [DEBUG] [Thread-301523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:45:28.004 [DEBUG] [Thread-301523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:45:28.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:45:28.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:45:28.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:45:28.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:45:28.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:45:28.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:45:28.042 [DEBUG] [Thread-301523] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:45:42.339 [DEBUG] [Thread-301526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:45:50.793 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:45:50.795 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:45:54.905 [DEBUG] [Thread-301527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:45:57.387 [DEBUG] [Thread-301528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:45:58.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:45:58.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:45:58.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
2025-12-24T11:45:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 45, 21), 17.1, 32.68, 0.0, 9.33, 21.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:45:58.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:45:21
2025-12-24T11:45:59.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:45:59.331 [DEBUG] [Thread-301529] [transport.py] [_log()] starting thread (client mode): 0xf572c280
2025-12-24T11:45:59.332 [DEBUG] [Thread-301529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:45:59.343 [DEBUG] [Thread-301529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:45:59.343 [INFO] [Thread-301529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:45:59.348 [DEBUG] [Thread-301529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] client lang: <none>
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] server lang: <none>
2025-12-24T11:45:59.349 [DEBUG] [Thread-301529] [transport.py] [_log()] kex follows: False
2025-12-24T11:45:59.350 [DEBUG] [Thread-301529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:45:59.350 [DEBUG] [Thread-301529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:45:59.350 [DEBUG] [Thread-301529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:45:59.351 [DEBUG] [Thread-301529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:45:59.351 [DEBUG] [Thread-301529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:45:59.351 [DEBUG] [Thread-301529] [transport.py] [_log()] Compression: none
2025-12-24T11:45:59.351 [DEBUG] [Thread-301529] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:45:59.392 [DEBUG] [Thread-301529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:45:59.396 [DEBUG] [Thread-301529] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:45:59.399 [DEBUG] [Thread-301529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:45:59.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:45:59.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:45:59.404 [DEBUG] [Thread-301529] [transport.py] [_log()] userauth is OK
2025-12-24T11:45:59.404 [DEBUG] [Thread-301529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:45:59.405 [DEBUG] [Thread-301529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:45:59.405 [DEBUG] [Thread-301529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:45:59.405 [DEBUG] [Thread-301529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:45:59.434 [INFO] [Thread-301529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:45:59.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:46:00.089 [DEBUG] [Thread-301529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:46:00.089 [DEBUG] [Thread-301529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:46:00.090 [DEBUG] [Thread-301529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:46:00.131 [DEBUG] [Thread-301529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:46:00.131 [DEBUG] [Thread-301529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:46:00.133 [DEBUG] [Thread-301529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:46:00.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:46:00.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:46:00.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:46:00.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:46:00.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:46:00.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:46:00.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:46:00.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:46:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:46:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.406667 -999.00  +22.40   9.50     35   +6.20 1 1 1 1 1   888    0 16.71 54.42 ----- 9.5 9.5 157.8 11.8 32.0 -25.8 31.1 -25.3 30.4 -23.8 31.2 -23.8
2025-12-24T11:46:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:46:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:46:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.406667
2025-12-24T11:46:00.164 [DEBUG] [Thread-301529] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:46:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:46:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:46:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:46:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:46:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:46:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:45:21', tmtdew=17.1, humidity=32.68, cloud=0.0, wind=9.33, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:45:36.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:46:00.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:46:00.282 [DEBUG] [Thread-301532] [transport.py] [_log()] starting thread (client mode): 0xf572dab0
2025-12-24T11:46:00.282 [DEBUG] [Thread-301532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:46:00.296 [DEBUG] [Thread-301532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:46:00.296 [INFO] [Thread-301532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] client lang: <none>
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] server lang: <none>
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] kex follows: False
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] Compression: none
2025-12-24T11:46:00.304 [DEBUG] [Thread-301532] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:46:00.366 [DEBUG] [Thread-301532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:46:00.366 [DEBUG] [Thread-301532] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:46:00.367 [DEBUG] [Thread-301532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:46:00.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:46:00.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:46:00.428 [DEBUG] [Thread-301532] [transport.py] [_log()] userauth is OK
2025-12-24T11:46:00.429 [DEBUG] [Thread-301532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:46:00.429 [DEBUG] [Thread-301532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:46:00.429 [DEBUG] [Thread-301532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:46:00.429 [DEBUG] [Thread-301532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:46:00.447 [INFO] [Thread-301532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:46:00.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:46:00.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:46:01.285 [DEBUG] [Thread-301532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:46:01.285 [DEBUG] [Thread-301532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:46:01.323 [DEBUG] [Thread-301532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:46:01.324 [DEBUG] [Thread-301532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:46:01.332 [DEBUG] [Thread-301532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:46:01.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:46:01.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:46:01.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
2025-12-24T11:46:01.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:46:01.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:46:01.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:46:01.369 [DEBUG] [Thread-301532] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:46:12.460 [DEBUG] [Thread-301534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:46:27.612 [DEBUG] [Thread-301535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:46:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:46:31.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:46:31.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:46:32.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 46, 28), 17.76, 31.45, 0.0, 14.49, 21.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:46:32.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:46:28
2025-12-24T11:46:32.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:46:32.479 [DEBUG] [Thread-301536] [transport.py] [_log()] starting thread (client mode): 0xf572c4c0
2025-12-24T11:46:32.479 [DEBUG] [Thread-301536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:46:32.492 [DEBUG] [Thread-301536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:46:32.492 [INFO] [Thread-301536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] client lang: <none>
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] server lang: <none>
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] kex follows: False
2025-12-24T11:46:32.497 [DEBUG] [Thread-301536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:46:32.498 [DEBUG] [Thread-301536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:46:32.498 [DEBUG] [Thread-301536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:46:32.498 [DEBUG] [Thread-301536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:46:32.498 [DEBUG] [Thread-301536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:46:32.498 [DEBUG] [Thread-301536] [transport.py] [_log()] Compression: none
2025-12-24T11:46:32.498 [DEBUG] [Thread-301536] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:46:32.530 [DEBUG] [Thread-301536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:46:32.533 [DEBUG] [Thread-301536] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:46:32.534 [DEBUG] [Thread-301536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:46:32.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:46:32.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:46:32.537 [DEBUG] [Thread-301536] [transport.py] [_log()] userauth is OK
2025-12-24T11:46:32.538 [DEBUG] [Thread-301536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:46:32.538 [DEBUG] [Thread-301536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:46:32.538 [DEBUG] [Thread-301536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:46:32.538 [DEBUG] [Thread-301536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:46:32.567 [INFO] [Thread-301536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:46:32.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:46:33.217 [DEBUG] [Thread-301536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:46:33.217 [DEBUG] [Thread-301536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:46:33.219 [DEBUG] [Thread-301536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:46:33.259 [DEBUG] [Thread-301536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:46:33.259 [DEBUG] [Thread-301536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:46:33.262 [DEBUG] [Thread-301536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:46:33.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:46:33.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:46:33.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:46:33.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:46:33.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:46:33.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:46:33.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:46:33.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:46:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:46:33.291 [DEBUG] [Thread-301536] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:46:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.407014 -999.00  +22.40   9.49     34   +6.20 1 1 1 1 1   888    0 16.91 57.70 ----- 9.5 9.5 115.8 12.3 31.9 -26.3 31.1 -25.5 30.5 -24.3 31.3 -25.3
2025-12-24T11:46:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:46:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:46:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.407014
2025-12-24T11:46:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:46:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:46:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:46:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:46:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:46:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:46:28', tmtdew=17.76, humidity=31.45, cloud=0.0, wind=14.49, temperature=21.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:46:06.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:46:33.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:46:33.419 [DEBUG] [Thread-301539] [transport.py] [_log()] starting thread (client mode): 0xf5742c20
2025-12-24T11:46:33.419 [DEBUG] [Thread-301539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:46:33.435 [DEBUG] [Thread-301539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:46:33.435 [INFO] [Thread-301539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] client lang: <none>
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] server lang: <none>
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] kex follows: False
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] Compression: none
2025-12-24T11:46:33.442 [DEBUG] [Thread-301539] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:46:33.498 [DEBUG] [Thread-301539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:46:33.499 [DEBUG] [Thread-301539] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:46:33.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:46:33.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:46:33.500 [DEBUG] [Thread-301539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:46:33.555 [DEBUG] [Thread-301539] [transport.py] [_log()] userauth is OK
2025-12-24T11:46:33.556 [DEBUG] [Thread-301539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:46:33.556 [DEBUG] [Thread-301539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:46:33.556 [DEBUG] [Thread-301539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:46:33.556 [DEBUG] [Thread-301539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:46:33.581 [INFO] [Thread-301539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:46:33.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:46:33.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:46:34.450 [DEBUG] [Thread-301539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:46:34.450 [DEBUG] [Thread-301539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:46:34.498 [DEBUG] [Thread-301539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:46:34.498 [DEBUG] [Thread-301539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:46:34.507 [DEBUG] [Thread-301539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:46:34.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:46:34.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')
2025-12-24T11:46:34.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:46:34.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:46:34.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:46:34.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:46:34.544 [DEBUG] [Thread-301539] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:46:42.689 [DEBUG] [Thread-301541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:46:50.934 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:46:50.936 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:46:55.207 [DEBUG] [Thread-301542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:46:57.795 [DEBUG] [Thread-301543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:47:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:47:04.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:47:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:47:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 46, 28), 17.76, 31.45, 0.0, 14.49, 21.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:47:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:46:28
2025-12-24T11:47:05.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:47:05.850 [DEBUG] [Thread-301544] [transport.py] [_log()] starting thread (client mode): 0xf57a8670
2025-12-24T11:47:05.850 [DEBUG] [Thread-301544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:47:05.866 [DEBUG] [Thread-301544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:47:05.866 [INFO] [Thread-301544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] client lang: <none>
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] server lang: <none>
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] kex follows: False
2025-12-24T11:47:05.870 [DEBUG] [Thread-301544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:47:05.871 [DEBUG] [Thread-301544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:47:05.872 [DEBUG] [Thread-301544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:47:05.872 [DEBUG] [Thread-301544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:47:05.872 [DEBUG] [Thread-301544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:47:05.872 [DEBUG] [Thread-301544] [transport.py] [_log()] Compression: none
2025-12-24T11:47:05.872 [DEBUG] [Thread-301544] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:47:05.898 [DEBUG] [Thread-301544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:47:05.901 [DEBUG] [Thread-301544] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:47:05.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:47:05.904 [DEBUG] [Thread-301544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:47:05.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:47:05.908 [DEBUG] [Thread-301544] [transport.py] [_log()] userauth is OK
2025-12-24T11:47:05.909 [DEBUG] [Thread-301544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:47:05.909 [DEBUG] [Thread-301544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:47:05.909 [DEBUG] [Thread-301544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:47:05.909 [DEBUG] [Thread-301544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:47:05.935 [INFO] [Thread-301544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:47:05.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:47:06.533 [DEBUG] [Thread-301544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:47:06.542 [DEBUG] [Thread-301544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:47:06.543 [DEBUG] [Thread-301544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:47:06.575 [DEBUG] [Thread-301544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:47:06.575 [DEBUG] [Thread-301544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:47:06.577 [DEBUG] [Thread-301544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:47:06.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:47:06.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:47:06.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:47:06.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:47:06.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:47:06.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:47:06.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:47:06.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:47:06.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:47:06.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.407361 -999.00  +22.40   6.65     34   +6.10 1 1 1 1 1   888    0 17.18 60.34 ----- 6.7 6.7 178.4 13.3 31.9 -26.0 31.1 -25.5 30.5 -24.7 31.2 -26.5
2025-12-24T11:47:06.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:47:06.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:47:06.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.407361
2025-12-24T11:47:06.605 [DEBUG] [Thread-301544] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:47:06.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:47:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:47:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:47:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:47:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:47:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:46:28', tmtdew=17.76, humidity=31.45, cloud=0.0, wind=14.49, temperature=21.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:46:35.990', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:47:06.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:47:06.697 [DEBUG] [Thread-301547] [transport.py] [_log()] starting thread (client mode): 0xf57ab370
2025-12-24T11:47:06.697 [DEBUG] [Thread-301547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:47:06.712 [DEBUG] [Thread-301547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:47:06.712 [INFO] [Thread-301547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] client lang: <none>
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] server lang: <none>
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] kex follows: False
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] Compression: none
2025-12-24T11:47:06.720 [DEBUG] [Thread-301547] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:47:06.778 [DEBUG] [Thread-301547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:47:06.778 [DEBUG] [Thread-301547] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:47:06.779 [DEBUG] [Thread-301547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:47:06.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:47:06.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:47:06.839 [DEBUG] [Thread-301547] [transport.py] [_log()] userauth is OK
2025-12-24T11:47:06.839 [DEBUG] [Thread-301547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:47:06.839 [DEBUG] [Thread-301547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:47:06.839 [DEBUG] [Thread-301547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:47:06.839 [DEBUG] [Thread-301547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:47:06.854 [INFO] [Thread-301547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:47:06.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:47:06.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:47:07.723 [DEBUG] [Thread-301547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:47:07.723 [DEBUG] [Thread-301547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:47:07.772 [DEBUG] [Thread-301547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:47:07.772 [DEBUG] [Thread-301547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:47:07.780 [DEBUG] [Thread-301547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:47:07.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:47:07.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')
2025-12-24T11:47:07.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:47:07.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:47:07.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:47:07.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:47:07.813 [DEBUG] [Thread-301547] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:47:12.854 [DEBUG] [Thread-301549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:47:28.053 [DEBUG] [Thread-301550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:47:37.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:47:37.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:47:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:47:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 47, 1), 18.28, 30.04, 0.0, 12.6, 21.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:47:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:47:01
2025-12-24T11:47:38.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:47:39.068 [DEBUG] [Thread-301551] [transport.py] [_log()] starting thread (client mode): 0xf572ee30
2025-12-24T11:47:39.069 [DEBUG] [Thread-301551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:47:39.073 [DEBUG] [Thread-301551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:47:39.073 [INFO] [Thread-301551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] client lang: <none>
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] server lang: <none>
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] kex follows: False
2025-12-24T11:47:39.077 [DEBUG] [Thread-301551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:47:39.078 [DEBUG] [Thread-301551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:47:39.078 [DEBUG] [Thread-301551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:47:39.078 [DEBUG] [Thread-301551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:47:39.078 [DEBUG] [Thread-301551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:47:39.078 [DEBUG] [Thread-301551] [transport.py] [_log()] Compression: none
2025-12-24T11:47:39.078 [DEBUG] [Thread-301551] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:47:39.111 [DEBUG] [Thread-301551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:47:39.115 [DEBUG] [Thread-301551] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:47:39.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:47:39.118 [DEBUG] [Thread-301551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:47:39.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:47:39.122 [DEBUG] [Thread-301551] [transport.py] [_log()] userauth is OK
2025-12-24T11:47:39.122 [DEBUG] [Thread-301551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:47:39.122 [DEBUG] [Thread-301551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:47:39.122 [DEBUG] [Thread-301551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:47:39.122 [DEBUG] [Thread-301551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:47:39.161 [INFO] [Thread-301551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:47:39.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:47:39.831 [DEBUG] [Thread-301551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:47:39.831 [DEBUG] [Thread-301551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:47:39.832 [DEBUG] [Thread-301551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:47:39.872 [DEBUG] [Thread-301551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:47:39.872 [DEBUG] [Thread-301551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:47:39.875 [DEBUG] [Thread-301551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:47:39.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:47:39.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:47:39.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:47:39.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:47:39.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:47:39.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:47:39.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:47:39.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:47:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:47:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.407709 -999.00  +22.50   7.73     34   +6.10 1 1 1 1 1   888    0 17.20 66.28 ----- 7.7 7.7 169.7 8.6 32.0 -24.8 31.0 -25.4 30.5 -23.0 31.4 -24.4
2025-12-24T11:47:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:47:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:47:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.407709
2025-12-24T11:47:39.910 [DEBUG] [Thread-301551] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:47:39.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:47:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:47:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:47:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:47:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:47:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:47:01', tmtdew=18.28, humidity=30.04, cloud=0.0, wind=12.6, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:47:06.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:47:40.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:47:40.025 [DEBUG] [Thread-301554] [transport.py] [_log()] starting thread (client mode): 0xf572e500
2025-12-24T11:47:40.025 [DEBUG] [Thread-301554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:47:40.040 [DEBUG] [Thread-301554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:47:40.040 [INFO] [Thread-301554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:47:40.047 [DEBUG] [Thread-301554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] client lang: <none>
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] server lang: <none>
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] kex follows: False
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] Compression: none
2025-12-24T11:47:40.048 [DEBUG] [Thread-301554] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:47:40.107 [DEBUG] [Thread-301554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:47:40.107 [DEBUG] [Thread-301554] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:47:40.108 [DEBUG] [Thread-301554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:47:40.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:47:40.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:47:40.163 [DEBUG] [Thread-301554] [transport.py] [_log()] userauth is OK
2025-12-24T11:47:40.163 [DEBUG] [Thread-301554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:47:40.164 [DEBUG] [Thread-301554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:47:40.164 [DEBUG] [Thread-301554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:47:40.164 [DEBUG] [Thread-301554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:47:40.185 [INFO] [Thread-301554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:47:40.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:47:40.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:47:41.031 [DEBUG] [Thread-301554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:47:41.032 [DEBUG] [Thread-301554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:47:41.079 [DEBUG] [Thread-301554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:47:41.079 [DEBUG] [Thread-301554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:47:41.087 [DEBUG] [Thread-301554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:47:41.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:47:41.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:47:41.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:47:41.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:47:41.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:47:41.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:47:41.120 [DEBUG] [Thread-301554] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:47:43.177 [DEBUG] [Thread-301556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:47:51.083 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:47:51.089 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:47:55.526 [DEBUG] [Thread-301557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:47:58.347 [DEBUG] [Thread-301558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:48:11.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:48:11.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:48:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:48:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 47, 34), 17.9, 30.7, 0.0, 10.32, 21.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:48:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:47:34
2025-12-24T11:48:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:48:12.318 [DEBUG] [Thread-301559] [transport.py] [_log()] starting thread (client mode): 0xf57a9690
2025-12-24T11:48:12.319 [DEBUG] [Thread-301559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:48:12.328 [DEBUG] [Thread-301559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:48:12.329 [INFO] [Thread-301559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:48:12.333 [DEBUG] [Thread-301559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:48:12.333 [DEBUG] [Thread-301559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:48:12.333 [DEBUG] [Thread-301559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:48:12.333 [DEBUG] [Thread-301559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] client lang: <none>
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] server lang: <none>
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] kex follows: False
2025-12-24T11:48:12.334 [DEBUG] [Thread-301559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:48:12.335 [DEBUG] [Thread-301559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:48:12.335 [DEBUG] [Thread-301559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:48:12.335 [DEBUG] [Thread-301559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:48:12.335 [DEBUG] [Thread-301559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:48:12.335 [DEBUG] [Thread-301559] [transport.py] [_log()] Compression: none
2025-12-24T11:48:12.335 [DEBUG] [Thread-301559] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:48:12.376 [DEBUG] [Thread-301559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:48:12.381 [DEBUG] [Thread-301559] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:48:12.383 [DEBUG] [Thread-301559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:48:12.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:48:12.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:48:12.389 [DEBUG] [Thread-301559] [transport.py] [_log()] userauth is OK
2025-12-24T11:48:12.389 [DEBUG] [Thread-301559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:48:12.389 [DEBUG] [Thread-301559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:48:12.389 [DEBUG] [Thread-301559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:48:12.389 [DEBUG] [Thread-301559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:48:12.430 [INFO] [Thread-301559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:48:12.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:48:13.062 [DEBUG] [Thread-301559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:48:13.062 [DEBUG] [Thread-301559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:48:13.064 [DEBUG] [Thread-301559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:48:13.104 [DEBUG] [Thread-301559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:48:13.104 [DEBUG] [Thread-301559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:48:13.107 [DEBUG] [Thread-301559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:48:13.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:48:13.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:48:13.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:48:13.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:48:13.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:48:13.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:48:13.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:48:13.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:48:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:48:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.408056 -999.00  +22.70   7.66     34   +6.20 1 1 1 1 1   888    0 17.54 65.65 ----- 7.7 7.7 173.0 11.7 32.0 -27.5 31.0 -30.2 30.6 -23.6 31.4 -26.7
2025-12-24T11:48:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:48:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:48:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.408056
2025-12-24T11:48:13.141 [DEBUG] [Thread-301559] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:48:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:48:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:48:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:48:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:48:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:48:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:47:34', tmtdew=17.9, humidity=30.7, cloud=0.0, wind=10.32, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:47:36.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:48:13.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:48:13.255 [DEBUG] [Thread-301562] [transport.py] [_log()] starting thread (client mode): 0xf5740f10
2025-12-24T11:48:13.255 [DEBUG] [Thread-301562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:48:13.271 [DEBUG] [Thread-301562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:48:13.271 [INFO] [Thread-301562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] client lang: <none>
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] server lang: <none>
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] kex follows: False
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] Compression: none
2025-12-24T11:48:13.279 [DEBUG] [Thread-301562] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:48:13.335 [DEBUG] [Thread-301562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:48:13.336 [DEBUG] [Thread-301562] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:48:13.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:48:13.337 [DEBUG] [Thread-301562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:48:13.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:48:13.391 [DEBUG] [Thread-301562] [transport.py] [_log()] userauth is OK
2025-12-24T11:48:13.392 [DEBUG] [Thread-301562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:48:13.392 [DEBUG] [Thread-301562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:48:13.392 [DEBUG] [Thread-301562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:48:13.392 [DEBUG] [Thread-301562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:48:13.410 [INFO] [Thread-301562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:48:13.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:48:13.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:48:13.417 [DEBUG] [Thread-301564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:48:14.261 [DEBUG] [Thread-301562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:48:14.261 [DEBUG] [Thread-301562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:48:14.301 [DEBUG] [Thread-301562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:48:14.301 [DEBUG] [Thread-301562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:48:14.309 [DEBUG] [Thread-301562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:48:14.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:48:14.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:48:14.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:48:14.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:48:14.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:48:14.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:48:14.344 [DEBUG] [Thread-301562] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:48:28.513 [DEBUG] [Thread-301565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:48:43.622 [DEBUG] [Thread-301566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:48:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:48:44.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:48:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:48:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 48, 41), 17.39, 31.78, 0.0, 9.48, 21.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:48:45.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:48:41
2025-12-24T11:48:45.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:48:45.560 [DEBUG] [Thread-301567] [transport.py] [_log()] starting thread (client mode): 0xf5741ea0
2025-12-24T11:48:45.561 [DEBUG] [Thread-301567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:48:45.574 [DEBUG] [Thread-301567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:48:45.574 [INFO] [Thread-301567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:48:45.580 [DEBUG] [Thread-301567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:48:45.581 [DEBUG] [Thread-301567] [transport.py] [_log()] client lang: <none>
2025-12-24T11:48:45.581 [DEBUG] [Thread-301567] [transport.py] [_log()] server lang: <none>
2025-12-24T11:48:45.581 [DEBUG] [Thread-301567] [transport.py] [_log()] kex follows: False
2025-12-24T11:48:45.581 [DEBUG] [Thread-301567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:48:45.581 [DEBUG] [Thread-301567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:48:45.582 [DEBUG] [Thread-301567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:48:45.582 [DEBUG] [Thread-301567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:48:45.582 [DEBUG] [Thread-301567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:48:45.582 [DEBUG] [Thread-301567] [transport.py] [_log()] Compression: none
2025-12-24T11:48:45.582 [DEBUG] [Thread-301567] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:48:45.622 [DEBUG] [Thread-301567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:48:45.626 [DEBUG] [Thread-301567] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:48:45.628 [DEBUG] [Thread-301567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:48:45.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:48:45.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:48:45.633 [DEBUG] [Thread-301567] [transport.py] [_log()] userauth is OK
2025-12-24T11:48:45.633 [DEBUG] [Thread-301567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:48:45.634 [DEBUG] [Thread-301567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:48:45.634 [DEBUG] [Thread-301567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:48:45.634 [DEBUG] [Thread-301567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:48:45.661 [INFO] [Thread-301567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:48:45.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:48:46.288 [DEBUG] [Thread-301567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:48:46.288 [DEBUG] [Thread-301567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:48:46.289 [DEBUG] [Thread-301567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:48:46.329 [DEBUG] [Thread-301567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:48:46.329 [DEBUG] [Thread-301567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:48:46.332 [DEBUG] [Thread-301567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:48:46.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:48:46.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:48:46.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:48:46.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:48:46.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:48:46.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:48:46.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:48:46.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:48:46.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:48:46.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.408403 -999.00  +23.00   4.36     34   +6.40 1 1 1 1 1   888    0 17.40 76.79 ----- 4.4 4.4 229.1 12.9 31.8 -27.0 30.6 -27.9 30.5 -23.3 31.3 -25.8
2025-12-24T11:48:46.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:48:46.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:48:46.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.408403
2025-12-24T11:48:46.367 [DEBUG] [Thread-301567] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:48:46.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:48:46.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:48:46.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:48:46.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:48:46.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:48:46.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:48:41', tmtdew=17.39, humidity=31.78, cloud=0.0, wind=9.48, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:48:06.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:48:46.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:48:46.483 [DEBUG] [Thread-301570] [transport.py] [_log()] starting thread (client mode): 0xf57abee0
2025-12-24T11:48:46.483 [DEBUG] [Thread-301570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:48:46.497 [DEBUG] [Thread-301570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:48:46.497 [INFO] [Thread-301570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:48:46.505 [DEBUG] [Thread-301570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:48:46.505 [DEBUG] [Thread-301570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] client lang: <none>
2025-12-24T11:48:46.506 [DEBUG] [Thread-301570] [transport.py] [_log()] server lang: <none>
2025-12-24T11:48:46.507 [DEBUG] [Thread-301570] [transport.py] [_log()] kex follows: False
2025-12-24T11:48:46.507 [DEBUG] [Thread-301570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:48:46.507 [DEBUG] [Thread-301570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:48:46.507 [DEBUG] [Thread-301570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:48:46.508 [DEBUG] [Thread-301570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:48:46.508 [DEBUG] [Thread-301570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:48:46.508 [DEBUG] [Thread-301570] [transport.py] [_log()] Compression: none
2025-12-24T11:48:46.508 [DEBUG] [Thread-301570] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:48:46.564 [DEBUG] [Thread-301570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:48:46.565 [DEBUG] [Thread-301570] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:48:46.565 [DEBUG] [Thread-301570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:48:46.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:48:46.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:48:46.620 [DEBUG] [Thread-301570] [transport.py] [_log()] userauth is OK
2025-12-24T11:48:46.620 [DEBUG] [Thread-301570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:48:46.620 [DEBUG] [Thread-301570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:48:46.621 [DEBUG] [Thread-301570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:48:46.621 [DEBUG] [Thread-301570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:48:46.644 [INFO] [Thread-301570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:48:46.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:48:46.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:48:47.497 [DEBUG] [Thread-301570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:48:47.498 [DEBUG] [Thread-301570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:48:47.544 [DEBUG] [Thread-301570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:48:47.544 [DEBUG] [Thread-301570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:48:47.553 [DEBUG] [Thread-301570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:48:47.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:48:47.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')
2025-12-24T11:48:47.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
2025-12-24T11:48:47.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:48:47.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:48:47.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:48:47.589 [DEBUG] [Thread-301570] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:48:51.252 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:48:51.253 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:48:55.810 [DEBUG] [Thread-301572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:48:58.675 [DEBUG] [Thread-301573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:49:13.778 [DEBUG] [Thread-301574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:49:17.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:49:17.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:49:17.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:49:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 49, 14), 17.45, 31.67, 0.0, 7.85, 21.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:49:18.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:49:14
2025-12-24T11:49:18.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:49:18.724 [DEBUG] [Thread-301575] [transport.py] [_log()] starting thread (client mode): 0xf572e350
2025-12-24T11:49:18.724 [DEBUG] [Thread-301575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:49:18.736 [DEBUG] [Thread-301575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:49:18.736 [INFO] [Thread-301575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] client lang: <none>
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] server lang: <none>
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] kex follows: False
2025-12-24T11:49:18.741 [DEBUG] [Thread-301575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:49:18.742 [DEBUG] [Thread-301575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:49:18.742 [DEBUG] [Thread-301575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:49:18.742 [DEBUG] [Thread-301575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:49:18.742 [DEBUG] [Thread-301575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:49:18.742 [DEBUG] [Thread-301575] [transport.py] [_log()] Compression: none
2025-12-24T11:49:18.742 [DEBUG] [Thread-301575] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:49:18.775 [DEBUG] [Thread-301575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:49:18.778 [DEBUG] [Thread-301575] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:49:18.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:49:18.781 [DEBUG] [Thread-301575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:49:18.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:49:18.783 [DEBUG] [Thread-301575] [transport.py] [_log()] userauth is OK
2025-12-24T11:49:18.783 [DEBUG] [Thread-301575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:49:18.784 [DEBUG] [Thread-301575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:49:18.784 [DEBUG] [Thread-301575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:49:18.784 [DEBUG] [Thread-301575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:49:18.808 [INFO] [Thread-301575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:49:18.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:49:19.469 [DEBUG] [Thread-301575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:49:19.469 [DEBUG] [Thread-301575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:49:19.470 [DEBUG] [Thread-301575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:49:19.510 [DEBUG] [Thread-301575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:49:19.510 [DEBUG] [Thread-301575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:49:19.513 [DEBUG] [Thread-301575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:49:19.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:49:19.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:49:19.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:49:19.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:49:19.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:49:19.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:49:19.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:49:19.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:49:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:49:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.408750 -999.00  +23.30   7.82     33   +6.40 1 1 1 1 1   888    0 17.66 77.97 ----- 7.8 7.8 209.0 12.1 31.8 -27.0 30.8 -26.2 30.5 -23.8 31.3 -25.8
2025-12-24T11:49:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:49:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:49:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.408750
2025-12-24T11:49:19.542 [DEBUG] [Thread-301575] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:49:19.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:49:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:49:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:49:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:49:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:49:19.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:49:14', tmtdew=17.45, humidity=31.67, cloud=0.0, wind=7.85, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:48:36.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:49:19.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:49:19.637 [DEBUG] [Thread-301578] [transport.py] [_log()] starting thread (client mode): 0xf57bd5d0
2025-12-24T11:49:19.637 [DEBUG] [Thread-301578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:49:19.651 [DEBUG] [Thread-301578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:49:19.651 [INFO] [Thread-301578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] client lang: <none>
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] server lang: <none>
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] kex follows: False
2025-12-24T11:49:19.659 [DEBUG] [Thread-301578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:49:19.660 [DEBUG] [Thread-301578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:49:19.660 [DEBUG] [Thread-301578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:49:19.660 [DEBUG] [Thread-301578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:49:19.660 [DEBUG] [Thread-301578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:49:19.660 [DEBUG] [Thread-301578] [transport.py] [_log()] Compression: none
2025-12-24T11:49:19.660 [DEBUG] [Thread-301578] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:49:19.714 [DEBUG] [Thread-301578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:49:19.714 [DEBUG] [Thread-301578] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:49:19.714 [DEBUG] [Thread-301578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:49:19.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:49:19.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:49:19.771 [DEBUG] [Thread-301578] [transport.py] [_log()] userauth is OK
2025-12-24T11:49:19.771 [DEBUG] [Thread-301578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:49:19.771 [DEBUG] [Thread-301578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:49:19.771 [DEBUG] [Thread-301578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:49:19.771 [DEBUG] [Thread-301578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:49:19.785 [INFO] [Thread-301578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:49:19.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:49:19.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:49:20.630 [DEBUG] [Thread-301578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:49:20.630 [DEBUG] [Thread-301578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:49:20.676 [DEBUG] [Thread-301578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:49:20.677 [DEBUG] [Thread-301578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:49:20.685 [DEBUG] [Thread-301578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:49:20.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:49:20.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')
2025-12-24T11:49:20.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
2025-12-24T11:49:20.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:49:20.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:49:20.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:49:20.721 [DEBUG] [Thread-301578] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:49:28.836 [DEBUG] [Thread-301580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:49:43.972 [DEBUG] [Thread-301581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:49:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:49:50.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:49:50.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:49:51.395 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:49:51.396 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:49:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 49, 46), 17.23, 32.0, 0.0, 5.7, 20.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:49:51.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:49:46
2025-12-24T11:49:51.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:49:51.960 [DEBUG] [Thread-301582] [transport.py] [_log()] starting thread (client mode): 0xf574ff10
2025-12-24T11:49:51.960 [DEBUG] [Thread-301582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:49:51.974 [DEBUG] [Thread-301582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:49:51.974 [INFO] [Thread-301582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:49:51.980 [DEBUG] [Thread-301582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:49:51.980 [DEBUG] [Thread-301582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:49:51.980 [DEBUG] [Thread-301582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:49:51.980 [DEBUG] [Thread-301582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] client lang: <none>
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] server lang: <none>
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] kex follows: False
2025-12-24T11:49:51.981 [DEBUG] [Thread-301582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:49:51.982 [DEBUG] [Thread-301582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:49:51.982 [DEBUG] [Thread-301582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:49:51.983 [DEBUG] [Thread-301582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:49:51.983 [DEBUG] [Thread-301582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:49:51.983 [DEBUG] [Thread-301582] [transport.py] [_log()] Compression: none
2025-12-24T11:49:51.983 [DEBUG] [Thread-301582] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:49:52.017 [DEBUG] [Thread-301582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:49:52.022 [DEBUG] [Thread-301582] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:49:52.024 [DEBUG] [Thread-301582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:49:52.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:49:52.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:49:52.030 [DEBUG] [Thread-301582] [transport.py] [_log()] userauth is OK
2025-12-24T11:49:52.030 [DEBUG] [Thread-301582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:49:52.031 [DEBUG] [Thread-301582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:49:52.031 [DEBUG] [Thread-301582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:49:52.031 [DEBUG] [Thread-301582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:49:52.067 [INFO] [Thread-301582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:49:52.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:49:52.879 [DEBUG] [Thread-301582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:49:52.880 [DEBUG] [Thread-301582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:49:52.881 [DEBUG] [Thread-301582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:49:52.922 [DEBUG] [Thread-301582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:49:52.922 [DEBUG] [Thread-301582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:49:52.925 [DEBUG] [Thread-301582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:49:52.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:49:52.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:49:52.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:49:52.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:49:52.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:49:52.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:49:52.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:49:52.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:49:52.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:49:52.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.409098 -999.00  +23.60   7.20     33   +6.50 1 1 1 1 1   888    0 18.38 94.28 ----- 7.2 7.2 214.1 9.7 31.9 -26.0 30.8 -25.0 30.4 -23.8 31.4 -24.7
2025-12-24T11:49:52.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:49:52.955 [DEBUG] [Thread-301582] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:49:52.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:49:52.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.409098
2025-12-24T11:49:52.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:49:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:49:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:49:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:49:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:49:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:49:46', tmtdew=17.23, humidity=32.0, cloud=0.0, wind=5.7, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:49:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:49:53.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:49:53.080 [DEBUG] [Thread-301585] [transport.py] [_log()] starting thread (client mode): 0xf574e260
2025-12-24T11:49:53.081 [DEBUG] [Thread-301585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:49:53.094 [DEBUG] [Thread-301585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:49:53.094 [INFO] [Thread-301585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:49:53.102 [DEBUG] [Thread-301585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] client lang: <none>
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] server lang: <none>
2025-12-24T11:49:53.103 [DEBUG] [Thread-301585] [transport.py] [_log()] kex follows: False
2025-12-24T11:49:53.104 [DEBUG] [Thread-301585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:49:53.104 [DEBUG] [Thread-301585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:49:53.104 [DEBUG] [Thread-301585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:49:53.104 [DEBUG] [Thread-301585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:49:53.104 [DEBUG] [Thread-301585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:49:53.104 [DEBUG] [Thread-301585] [transport.py] [_log()] Compression: none
2025-12-24T11:49:53.104 [DEBUG] [Thread-301585] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:49:53.158 [DEBUG] [Thread-301585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:49:53.158 [DEBUG] [Thread-301585] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:49:53.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:49:53.158 [DEBUG] [Thread-301585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:49:53.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:49:53.219 [DEBUG] [Thread-301585] [transport.py] [_log()] userauth is OK
2025-12-24T11:49:53.219 [DEBUG] [Thread-301585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:49:53.219 [DEBUG] [Thread-301585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:49:53.219 [DEBUG] [Thread-301585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:49:53.219 [DEBUG] [Thread-301585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:49:53.233 [INFO] [Thread-301585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:49:53.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:49:53.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:49:54.068 [DEBUG] [Thread-301585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:49:54.069 [DEBUG] [Thread-301585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:49:54.115 [DEBUG] [Thread-301585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:49:54.115 [DEBUG] [Thread-301585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:49:54.124 [DEBUG] [Thread-301585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:49:54.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:49:54.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:49:54.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:49:54.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:49:54.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:49:54.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:49:54.171 [DEBUG] [Thread-301585] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:49:56.081 [DEBUG] [Thread-301587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:49:59.016 [DEBUG] [Thread-301588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:50:14.167 [DEBUG] [Thread-301589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:50:24.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:50:24.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:50:24.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:50:25.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 50, 19), 17.2, 32.08, 0.0, 6.28, 20.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:50:25.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:50:19
2025-12-24T11:50:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:50:25.602 [DEBUG] [Thread-301590] [transport.py] [_log()] starting thread (client mode): 0xf81e5d20
2025-12-24T11:50:25.603 [DEBUG] [Thread-301590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:50:25.608 [DEBUG] [Thread-301590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:50:25.608 [INFO] [Thread-301590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] client lang: <none>
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] server lang: <none>
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] kex follows: False
2025-12-24T11:50:25.612 [DEBUG] [Thread-301590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:50:25.613 [DEBUG] [Thread-301590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:50:25.613 [DEBUG] [Thread-301590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:50:25.613 [DEBUG] [Thread-301590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:50:25.613 [DEBUG] [Thread-301590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:50:25.613 [DEBUG] [Thread-301590] [transport.py] [_log()] Compression: none
2025-12-24T11:50:25.613 [DEBUG] [Thread-301590] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:50:25.646 [DEBUG] [Thread-301590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:50:25.649 [DEBUG] [Thread-301590] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:50:25.651 [DEBUG] [Thread-301590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:50:25.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:50:25.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:50:25.656 [DEBUG] [Thread-301590] [transport.py] [_log()] userauth is OK
2025-12-24T11:50:25.656 [DEBUG] [Thread-301590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:50:25.656 [DEBUG] [Thread-301590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:50:25.656 [DEBUG] [Thread-301590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:50:25.656 [DEBUG] [Thread-301590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:50:25.683 [INFO] [Thread-301590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:50:25.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:50:26.344 [DEBUG] [Thread-301590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:50:26.344 [DEBUG] [Thread-301590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:50:26.353 [DEBUG] [Thread-301590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:50:26.385 [DEBUG] [Thread-301590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:50:26.385 [DEBUG] [Thread-301590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:50:26.387 [DEBUG] [Thread-301590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:50:26.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:50:26.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:50:26.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:50:26.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:50:26.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:50:26.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:50:26.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:50:26.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:50:26.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:50:26.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.409792 -999.00  +23.20   2.09     33   +6.40 1 1 1 1 1   888    0 18.77 97.40 ----- 2.1 2.1 309.1 5.5 31.7 -26.6 30.9 -25.2 30.5 -23.2 31.2 -25.9
2025-12-24T11:50:26.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:50:26.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:50:26.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.409792
2025-12-24T11:50:26.416 [DEBUG] [Thread-301590] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:50:26.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:50:26.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:50:26.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:50:26.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:50:26.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:50:26.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:50:19', tmtdew=17.2, humidity=32.08, cloud=0.0, wind=6.28, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:50:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:50:26.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:50:26.515 [DEBUG] [Thread-301593] [transport.py] [_log()] starting thread (client mode): 0xf572fc10
2025-12-24T11:50:26.515 [DEBUG] [Thread-301593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:50:26.529 [DEBUG] [Thread-301593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:50:26.529 [INFO] [Thread-301593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] client lang: <none>
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] server lang: <none>
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] kex follows: False
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:50:26.537 [DEBUG] [Thread-301593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:50:26.538 [DEBUG] [Thread-301593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:50:26.538 [DEBUG] [Thread-301593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:50:26.538 [DEBUG] [Thread-301593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:50:26.538 [DEBUG] [Thread-301593] [transport.py] [_log()] Compression: none
2025-12-24T11:50:26.538 [DEBUG] [Thread-301593] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:50:26.597 [DEBUG] [Thread-301593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:50:26.597 [DEBUG] [Thread-301593] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:50:26.597 [DEBUG] [Thread-301593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:50:26.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:50:26.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:50:26.658 [DEBUG] [Thread-301593] [transport.py] [_log()] userauth is OK
2025-12-24T11:50:26.659 [DEBUG] [Thread-301593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:50:26.659 [DEBUG] [Thread-301593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:50:26.659 [DEBUG] [Thread-301593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:50:26.659 [DEBUG] [Thread-301593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:50:26.675 [INFO] [Thread-301593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:50:26.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:50:26.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:50:27.489 [DEBUG] [Thread-301593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:50:27.489 [DEBUG] [Thread-301593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:50:27.527 [DEBUG] [Thread-301593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:50:27.527 [DEBUG] [Thread-301593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:50:27.536 [DEBUG] [Thread-301593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:50:27.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:50:27.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:50:27.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:50:27.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:50:27.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:50:27.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:50:27.575 [DEBUG] [Thread-301593] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:50:29.246 [DEBUG] [Thread-301595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:50:44.408 [DEBUG] [Thread-301596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:50:51.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:50:51.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:50:56.349 [DEBUG] [Thread-301597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:50:57.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:50:57.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:50:57.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:50:58.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 50, 53), 17.54, 31.8, 0.0, 6.23, 21.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:50:58.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:50:53
2025-12-24T11:50:58.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:50:58.958 [DEBUG] [Thread-301598] [transport.py] [_log()] starting thread (client mode): 0xf81e45e0
2025-12-24T11:50:58.958 [DEBUG] [Thread-301598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:50:58.971 [DEBUG] [Thread-301598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:50:58.971 [INFO] [Thread-301598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:50:58.976 [DEBUG] [Thread-301598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] client lang: <none>
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] server lang: <none>
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] kex follows: False
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:50:58.977 [DEBUG] [Thread-301598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:50:58.978 [DEBUG] [Thread-301598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:50:58.978 [DEBUG] [Thread-301598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:50:58.978 [DEBUG] [Thread-301598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:50:58.978 [DEBUG] [Thread-301598] [transport.py] [_log()] Compression: none
2025-12-24T11:50:58.978 [DEBUG] [Thread-301598] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:50:59.016 [DEBUG] [Thread-301598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:50:59.021 [DEBUG] [Thread-301598] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:50:59.023 [DEBUG] [Thread-301598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:50:59.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:50:59.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:50:59.028 [DEBUG] [Thread-301598] [transport.py] [_log()] userauth is OK
2025-12-24T11:50:59.029 [DEBUG] [Thread-301598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:50:59.029 [DEBUG] [Thread-301598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:50:59.029 [DEBUG] [Thread-301598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:50:59.029 [DEBUG] [Thread-301598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:50:59.057 [INFO] [Thread-301598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:50:59.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:50:59.505 [DEBUG] [Thread-301600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:50:59.643 [DEBUG] [Thread-301598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:50:59.645 [DEBUG] [Thread-301598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:50:59.646 [DEBUG] [Thread-301598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:50:59.685 [DEBUG] [Thread-301598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:50:59.685 [DEBUG] [Thread-301598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:50:59.687 [DEBUG] [Thread-301598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:50:59.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:50:59.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:50:59.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:50:59.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:50:59.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:50:59.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:50:59.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:50:59.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:50:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:50:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.410139 -999.00  +23.50   3.66     33   +6.40 1 1 1 1 1   888    0 18.57 94.54 ----- 3.7 3.7 172.6 6.4 32.0 -25.9 30.9 -24.4 30.6 -23.0 31.4 -24.7
2025-12-24T11:50:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:50:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:50:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.410139
2025-12-24T11:50:59.713 [DEBUG] [Thread-301598] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:50:59.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:50:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:50:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:50:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:50:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:50:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:50:53', tmtdew=17.54, humidity=31.8, cloud=0.0, wind=6.23, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:50:36.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:50:59.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:50:59.810 [DEBUG] [Thread-301602] [transport.py] [_log()] starting thread (client mode): 0xf81e4190
2025-12-24T11:50:59.810 [DEBUG] [Thread-301602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:50:59.825 [DEBUG] [Thread-301602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:50:59.825 [INFO] [Thread-301602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] client lang: <none>
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] server lang: <none>
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] kex follows: False
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] Compression: none
2025-12-24T11:50:59.833 [DEBUG] [Thread-301602] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:50:59.890 [DEBUG] [Thread-301602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:50:59.890 [DEBUG] [Thread-301602] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:50:59.890 [DEBUG] [Thread-301602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:50:59.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:50:59.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:50:59.947 [DEBUG] [Thread-301602] [transport.py] [_log()] userauth is OK
2025-12-24T11:50:59.947 [DEBUG] [Thread-301602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:50:59.947 [DEBUG] [Thread-301602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:50:59.947 [DEBUG] [Thread-301602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:50:59.947 [DEBUG] [Thread-301602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:50:59.961 [INFO] [Thread-301602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:50:59.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:50:59.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:51:00.847 [DEBUG] [Thread-301602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:51:00.848 [DEBUG] [Thread-301602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:51:00.895 [DEBUG] [Thread-301602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:51:00.895 [DEBUG] [Thread-301602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:51:00.905 [DEBUG] [Thread-301602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:51:00.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:51:00.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:51:00.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:51:00.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:51:00.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:51:00.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:51:00.942 [DEBUG] [Thread-301602] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:51:14.585 [DEBUG] [Thread-301604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:51:29.745 [DEBUG] [Thread-301605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:51:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:51:30.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:51:30.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:51:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 51, 26), 17.7, 31.5, 0.0, 8.77, 21.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:51:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:51:26
2025-12-24T11:51:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:51:32.021 [DEBUG] [Thread-301606] [transport.py] [_log()] starting thread (client mode): 0xf81e5b70
2025-12-24T11:51:32.022 [DEBUG] [Thread-301606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:51:32.034 [DEBUG] [Thread-301606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:51:32.034 [INFO] [Thread-301606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] client lang: <none>
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] server lang: <none>
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] kex follows: False
2025-12-24T11:51:32.039 [DEBUG] [Thread-301606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:51:32.040 [DEBUG] [Thread-301606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:51:32.040 [DEBUG] [Thread-301606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:51:32.040 [DEBUG] [Thread-301606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:51:32.040 [DEBUG] [Thread-301606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:51:32.040 [DEBUG] [Thread-301606] [transport.py] [_log()] Compression: none
2025-12-24T11:51:32.040 [DEBUG] [Thread-301606] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:51:32.072 [DEBUG] [Thread-301606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:51:32.074 [DEBUG] [Thread-301606] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:51:32.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:51:32.077 [DEBUG] [Thread-301606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:51:32.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:51:32.078 [DEBUG] [Thread-301606] [transport.py] [_log()] userauth is OK
2025-12-24T11:51:32.079 [DEBUG] [Thread-301606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:51:32.079 [DEBUG] [Thread-301606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:51:32.079 [DEBUG] [Thread-301606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:51:32.079 [DEBUG] [Thread-301606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:51:32.097 [INFO] [Thread-301606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:51:32.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:51:32.712 [DEBUG] [Thread-301606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:51:32.712 [DEBUG] [Thread-301606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:51:32.713 [DEBUG] [Thread-301606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:51:32.753 [DEBUG] [Thread-301606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:51:32.753 [DEBUG] [Thread-301606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:51:32.757 [DEBUG] [Thread-301606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:51:32.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:51:32.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:51:32.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:51:32.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:51:32.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:51:32.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:51:32.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:51:32.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.410487 -999.00  +23.70   4.10     33   +6.50 1 1 1 1 1   888    0 18.73 104.80 ----- 4.1 4.1 150.2 6.1 32.0 -25.1 31.0 -24.9 30.5 -24.1 31.4 -24.1
2025-12-24T11:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.410487
2025-12-24T11:51:32.793 [DEBUG] [Thread-301606] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:51:32.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:51:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:51:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:51:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:51:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:51:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:51:26', tmtdew=17.7, humidity=31.5, cloud=0.0, wind=8.77, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:51:06.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:51:32.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:51:32.916 [DEBUG] [Thread-301609] [transport.py] [_log()] starting thread (client mode): 0xf81e4250
2025-12-24T11:51:32.916 [DEBUG] [Thread-301609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:51:32.930 [DEBUG] [Thread-301609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:51:32.930 [INFO] [Thread-301609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:51:32.938 [DEBUG] [Thread-301609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:51:32.939 [DEBUG] [Thread-301609] [transport.py] [_log()] client lang: <none>
2025-12-24T11:51:32.940 [DEBUG] [Thread-301609] [transport.py] [_log()] server lang: <none>
2025-12-24T11:51:32.940 [DEBUG] [Thread-301609] [transport.py] [_log()] kex follows: False
2025-12-24T11:51:32.940 [DEBUG] [Thread-301609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:51:32.940 [DEBUG] [Thread-301609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:51:32.940 [DEBUG] [Thread-301609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:51:32.940 [DEBUG] [Thread-301609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:51:32.940 [DEBUG] [Thread-301609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:51:32.940 [DEBUG] [Thread-301609] [transport.py] [_log()] Compression: none
2025-12-24T11:51:32.941 [DEBUG] [Thread-301609] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:51:32.995 [DEBUG] [Thread-301609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:51:32.996 [DEBUG] [Thread-301609] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:51:32.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:51:32.997 [DEBUG] [Thread-301609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:51:32.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:51:33.055 [DEBUG] [Thread-301609] [transport.py] [_log()] userauth is OK
2025-12-24T11:51:33.055 [DEBUG] [Thread-301609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:51:33.055 [DEBUG] [Thread-301609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:51:33.055 [DEBUG] [Thread-301609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:51:33.055 [DEBUG] [Thread-301609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:51:33.071 [INFO] [Thread-301609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:51:33.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:51:33.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:51:33.862 [DEBUG] [Thread-301609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:51:33.862 [DEBUG] [Thread-301609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:51:33.908 [DEBUG] [Thread-301609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:51:33.909 [DEBUG] [Thread-301609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:51:33.917 [DEBUG] [Thread-301609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:51:33.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:51:33.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:51:33.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:51:33.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:51:33.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:51:33.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:51:33.955 [DEBUG] [Thread-301609] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:51:44.816 [DEBUG] [Thread-301611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:51:51.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:51:51.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:51:56.593 [DEBUG] [Thread-301612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:51:59.899 [DEBUG] [Thread-301613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:52:03.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:52:03.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:52:04.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:52:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 51, 58), 17.95, 31.02, 0.0, 10.69, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:52:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:51:58
2025-12-24T11:52:05.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:52:05.684 [DEBUG] [Thread-301614] [transport.py] [_log()] starting thread (client mode): 0xf57bf160
2025-12-24T11:52:05.684 [DEBUG] [Thread-301614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:52:05.701 [DEBUG] [Thread-301614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:52:05.702 [INFO] [Thread-301614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] client lang: <none>
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] server lang: <none>
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] kex follows: False
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:52:05.705 [DEBUG] [Thread-301614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:52:05.706 [DEBUG] [Thread-301614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:52:05.706 [DEBUG] [Thread-301614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:52:05.706 [DEBUG] [Thread-301614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:52:05.706 [DEBUG] [Thread-301614] [transport.py] [_log()] Compression: none
2025-12-24T11:52:05.706 [DEBUG] [Thread-301614] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:52:05.734 [DEBUG] [Thread-301614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:52:05.737 [DEBUG] [Thread-301614] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:52:05.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:52:05.738 [DEBUG] [Thread-301614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:52:05.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:52:05.741 [DEBUG] [Thread-301614] [transport.py] [_log()] userauth is OK
2025-12-24T11:52:05.741 [DEBUG] [Thread-301614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:52:05.741 [DEBUG] [Thread-301614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:52:05.741 [DEBUG] [Thread-301614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:52:05.741 [DEBUG] [Thread-301614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:52:05.763 [INFO] [Thread-301614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:52:05.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:52:06.400 [DEBUG] [Thread-301614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:52:06.400 [DEBUG] [Thread-301614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:52:06.400 [DEBUG] [Thread-301614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:52:06.441 [DEBUG] [Thread-301614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:52:06.441 [DEBUG] [Thread-301614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:52:06.444 [DEBUG] [Thread-301614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:52:06.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:52:06.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:52:06.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:52:06.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:52:06.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:52:06.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:52:06.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:52:06.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:52:06.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:52:06.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.410834 -999.00  +23.90   4.18     32   +6.60 1 1 1 1 1   888    0 19.36 110.60 ----- 4.2 4.2 182.2 11.5 32.2 -24.6 31.2 -24.7 30.7 -23.8 31.6 -23.6
2025-12-24T11:52:06.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:52:06.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:52:06.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.410834
2025-12-24T11:52:06.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:52:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:52:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:52:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:52:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:52:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:51:58', tmtdew=17.95, humidity=31.02, cloud=0.0, wind=10.69, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:51:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:52:06.475 [DEBUG] [Thread-301614] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:52:06.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:52:06.568 [DEBUG] [Thread-301617] [transport.py] [_log()] starting thread (client mode): 0xfabc59c0
2025-12-24T11:52:06.568 [DEBUG] [Thread-301617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:52:06.583 [DEBUG] [Thread-301617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:52:06.583 [INFO] [Thread-301617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] client lang: <none>
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] server lang: <none>
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] kex follows: False
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] Compression: none
2025-12-24T11:52:06.591 [DEBUG] [Thread-301617] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:52:06.651 [DEBUG] [Thread-301617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:52:06.651 [DEBUG] [Thread-301617] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:52:06.651 [DEBUG] [Thread-301617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:52:06.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:52:06.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:52:06.707 [DEBUG] [Thread-301617] [transport.py] [_log()] userauth is OK
2025-12-24T11:52:06.707 [DEBUG] [Thread-301617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:52:06.708 [DEBUG] [Thread-301617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:52:06.708 [DEBUG] [Thread-301617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:52:06.708 [DEBUG] [Thread-301617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:52:06.721 [INFO] [Thread-301617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:52:06.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:52:06.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:52:07.557 [DEBUG] [Thread-301617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:52:07.558 [DEBUG] [Thread-301617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:52:07.606 [DEBUG] [Thread-301617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:52:07.606 [DEBUG] [Thread-301617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:52:07.618 [DEBUG] [Thread-301617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:52:07.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:52:07.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:52:07.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:52:07.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:52:07.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:52:07.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:52:07.660 [DEBUG] [Thread-301617] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:52:14.962 [DEBUG] [Thread-301619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:52:30.088 [DEBUG] [Thread-301620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:52:37.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:52:37.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:52:37.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
2025-12-24T11:52:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 52, 32), 18.02, 30.87, 0.0, 6.97, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:52:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:52:32
2025-12-24T11:52:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:52:39.051 [DEBUG] [Thread-301621] [transport.py] [_log()] starting thread (client mode): 0xf81e6920
2025-12-24T11:52:39.052 [DEBUG] [Thread-301621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:52:39.059 [DEBUG] [Thread-301621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:52:39.059 [INFO] [Thread-301621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] client lang: <none>
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] server lang: <none>
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] kex follows: False
2025-12-24T11:52:39.065 [DEBUG] [Thread-301621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:52:39.066 [DEBUG] [Thread-301621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:52:39.066 [DEBUG] [Thread-301621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:52:39.066 [DEBUG] [Thread-301621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:52:39.066 [DEBUG] [Thread-301621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:52:39.066 [DEBUG] [Thread-301621] [transport.py] [_log()] Compression: none
2025-12-24T11:52:39.066 [DEBUG] [Thread-301621] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:52:39.105 [DEBUG] [Thread-301621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:52:39.110 [DEBUG] [Thread-301621] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:52:39.112 [DEBUG] [Thread-301621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:52:39.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:52:39.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:52:39.117 [DEBUG] [Thread-301621] [transport.py] [_log()] userauth is OK
2025-12-24T11:52:39.117 [DEBUG] [Thread-301621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:52:39.117 [DEBUG] [Thread-301621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:52:39.117 [DEBUG] [Thread-301621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:52:39.117 [DEBUG] [Thread-301621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:52:39.144 [INFO] [Thread-301621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:52:39.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:52:39.736 [DEBUG] [Thread-301621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:52:39.736 [DEBUG] [Thread-301621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:52:39.737 [DEBUG] [Thread-301621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:52:39.777 [DEBUG] [Thread-301621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:52:39.777 [DEBUG] [Thread-301621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:52:39.781 [DEBUG] [Thread-301621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:52:39.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:52:39.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:52:39.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:52:39.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:52:39.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:52:39.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:52:39.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:52:39.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:52:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:52:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.411181 -999.00  +24.10  10.61     32   +6.40 1 1 1 1 1   888    0 18.87 117.27 ----- 10.6 10.6 187.6 12.0 32.3 -26.4 31.3 -27.2 30.8 -23.6 31.6 -25.9
2025-12-24T11:52:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:52:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:52:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.411181
2025-12-24T11:52:39.813 [DEBUG] [Thread-301621] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:52:39.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:52:39.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:52:39.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:52:39.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:52:39.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:52:39.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:52:32', tmtdew=18.02, humidity=30.87, cloud=0.0, wind=6.97, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:52:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:52:39.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:52:39.926 [DEBUG] [Thread-301624] [transport.py] [_log()] starting thread (client mode): 0xf81e4160
2025-12-24T11:52:39.926 [DEBUG] [Thread-301624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:52:39.941 [DEBUG] [Thread-301624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:52:39.941 [INFO] [Thread-301624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:52:39.948 [DEBUG] [Thread-301624] [transport.py] [_log()] client lang: <none>
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] server lang: <none>
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] kex follows: False
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] Compression: none
2025-12-24T11:52:39.949 [DEBUG] [Thread-301624] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:52:40.013 [DEBUG] [Thread-301624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:52:40.014 [DEBUG] [Thread-301624] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:52:40.015 [DEBUG] [Thread-301624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:52:40.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:52:40.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:52:40.075 [DEBUG] [Thread-301624] [transport.py] [_log()] userauth is OK
2025-12-24T11:52:40.076 [DEBUG] [Thread-301624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:52:40.076 [DEBUG] [Thread-301624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:52:40.076 [DEBUG] [Thread-301624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:52:40.076 [DEBUG] [Thread-301624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:52:40.094 [INFO] [Thread-301624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:52:40.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:52:40.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:52:40.922 [DEBUG] [Thread-301624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:52:40.923 [DEBUG] [Thread-301624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:52:40.971 [DEBUG] [Thread-301624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:52:40.971 [DEBUG] [Thread-301624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:52:40.980 [DEBUG] [Thread-301624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:52:40.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:52:40.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')
2025-12-24T11:52: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') -> 00000000
2025-12-24T11:52:41.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:52:41.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:52:41.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:52:41.021 [DEBUG] [Thread-301624] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:52:45.125 [DEBUG] [Thread-301626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:52:51.824 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:52:51.825 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:52:56.895 [DEBUG] [Thread-301627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:53:00.230 [DEBUG] [Thread-301628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:53:11.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:53:11.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:53:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:53:12.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 53, 5), 17.94, 31.03, 0.0, 8.86, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:53:12.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:53:05
2025-12-24T11:53:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:53:12.360 [DEBUG] [Thread-301629] [transport.py] [_log()] starting thread (client mode): 0xf5772bc0
2025-12-24T11:53:12.361 [DEBUG] [Thread-301629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:53:12.361 [DEBUG] [Thread-301629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:53:12.361 [INFO] [Thread-301629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] client lang: <none>
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] server lang: <none>
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] kex follows: False
2025-12-24T11:53:12.365 [DEBUG] [Thread-301629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:53:12.366 [DEBUG] [Thread-301629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:53:12.366 [DEBUG] [Thread-301629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:53:12.366 [DEBUG] [Thread-301629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:53:12.366 [DEBUG] [Thread-301629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:53:12.366 [DEBUG] [Thread-301629] [transport.py] [_log()] Compression: none
2025-12-24T11:53:12.366 [DEBUG] [Thread-301629] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:53:12.403 [DEBUG] [Thread-301629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:53:12.406 [DEBUG] [Thread-301629] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:53:12.407 [DEBUG] [Thread-301629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:53:12.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:53:12.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:53:12.410 [DEBUG] [Thread-301629] [transport.py] [_log()] userauth is OK
2025-12-24T11:53:12.410 [DEBUG] [Thread-301629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:53:12.410 [DEBUG] [Thread-301629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:53:12.410 [DEBUG] [Thread-301629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:53:12.410 [DEBUG] [Thread-301629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:53:12.439 [INFO] [Thread-301629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:53:12.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:53:13.002 [DEBUG] [Thread-301629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:53:13.003 [DEBUG] [Thread-301629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:53:13.004 [DEBUG] [Thread-301629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:53:13.044 [DEBUG] [Thread-301629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:53:13.044 [DEBUG] [Thread-301629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:53:13.047 [DEBUG] [Thread-301629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:53:13.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:53:13.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:53:13.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:53:13.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:53:13.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:53:13.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:53:13.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:53:13.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:53:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:53:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.411529 -999.00  +23.80   4.44     32   +6.40 1 1 1 1 1   888    0 19.67 125.75 ----- 4.4 4.4 236.3 12.4 32.1 -26.5 30.9 -28.6 30.7 -24.3 31.6 -25.4
2025-12-24T11:53:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:53:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:53:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.411529
2025-12-24T11:53:13.080 [DEBUG] [Thread-301629] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:53:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:53:13.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:53:13.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:53:13.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:53:13.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:53:13.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:53:05', tmtdew=17.94, humidity=31.03, cloud=0.0, wind=8.86, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:52:36.106', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:53:13.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:53:13.204 [DEBUG] [Thread-301632] [transport.py] [_log()] starting thread (client mode): 0xf57726e0
2025-12-24T11:53:13.205 [DEBUG] [Thread-301632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:53:13.220 [DEBUG] [Thread-301632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:53:13.220 [INFO] [Thread-301632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:53:13.227 [DEBUG] [Thread-301632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:53:13.227 [DEBUG] [Thread-301632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:53:13.227 [DEBUG] [Thread-301632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:53:13.227 [DEBUG] [Thread-301632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:53:13.227 [DEBUG] [Thread-301632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:53:13.227 [DEBUG] [Thread-301632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] client lang: <none>
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] server lang: <none>
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] kex follows: False
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:53:13.228 [DEBUG] [Thread-301632] [transport.py] [_log()] Compression: none
2025-12-24T11:53:13.229 [DEBUG] [Thread-301632] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:53:13.285 [DEBUG] [Thread-301632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:53:13.285 [DEBUG] [Thread-301632] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:53:13.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:53:13.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:53:13.287 [DEBUG] [Thread-301632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:53:13.341 [DEBUG] [Thread-301632] [transport.py] [_log()] userauth is OK
2025-12-24T11:53:13.341 [DEBUG] [Thread-301632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:53:13.341 [DEBUG] [Thread-301632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:53:13.341 [DEBUG] [Thread-301632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:53:13.341 [DEBUG] [Thread-301632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:53:13.363 [INFO] [Thread-301632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:53:13.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:53:13.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:53:14.249 [DEBUG] [Thread-301632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:53:14.249 [DEBUG] [Thread-301632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:53:14.288 [DEBUG] [Thread-301632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:53:14.288 [DEBUG] [Thread-301632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:53:14.297 [DEBUG] [Thread-301632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:53:14.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:53:14.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:53:14.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:53:14.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:53:14.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:53:14.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:53:14.330 [DEBUG] [Thread-301632] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:53:15.314 [DEBUG] [Thread-301634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:53:30.453 [DEBUG] [Thread-301635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:53:44.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:53:44.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:53:44.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:53:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 53, 38), 18.06, 30.69, 0.0, 11.15, 21.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:53:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:53:38
2025-12-24T11:53:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:53:45.512 [DEBUG] [Thread-301636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:53:45.571 [DEBUG] [Thread-301637] [transport.py] [_log()] starting thread (client mode): 0xf57bd5d0
2025-12-24T11:53:45.571 [DEBUG] [Thread-301637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:53:45.584 [DEBUG] [Thread-301637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:53:45.584 [INFO] [Thread-301637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] client lang: <none>
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] server lang: <none>
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] kex follows: False
2025-12-24T11:53:45.590 [DEBUG] [Thread-301637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:53:45.591 [DEBUG] [Thread-301637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:53:45.591 [DEBUG] [Thread-301637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:53:45.591 [DEBUG] [Thread-301637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:53:45.591 [DEBUG] [Thread-301637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:53:45.591 [DEBUG] [Thread-301637] [transport.py] [_log()] Compression: none
2025-12-24T11:53:45.592 [DEBUG] [Thread-301637] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:53:45.628 [DEBUG] [Thread-301637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:53:45.632 [DEBUG] [Thread-301637] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:53:45.634 [DEBUG] [Thread-301637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:53:45.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:53:45.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:53:45.640 [DEBUG] [Thread-301637] [transport.py] [_log()] userauth is OK
2025-12-24T11:53:45.640 [DEBUG] [Thread-301637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:53:45.641 [DEBUG] [Thread-301637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:53:45.641 [DEBUG] [Thread-301637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:53:45.641 [DEBUG] [Thread-301637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:53:45.679 [INFO] [Thread-301637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:53:45.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:53:46.319 [DEBUG] [Thread-301637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:53:46.319 [DEBUG] [Thread-301637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:53:46.321 [DEBUG] [Thread-301637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:53:46.361 [DEBUG] [Thread-301637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:53:46.361 [DEBUG] [Thread-301637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:53:46.365 [DEBUG] [Thread-301637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:53:46.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:53:46.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:53:46.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:53:46.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:53:46.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:53:46.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:53:46.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:53:46.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:53:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:53:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.411875 -999.00  +23.90   1.89     32   +6.50 1 1 1 1 1   888    0 20.41 139.48 ----- 1.9 1.9 227.3 4.8 32.3 -25.2 31.2 -25.1 30.7 -23.0 31.7 -24.4
2025-12-24T11:53:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:53:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:53:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.411875
2025-12-24T11:53:46.401 [DEBUG] [Thread-301637] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:53:46.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:53:46.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:53:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:53:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:53:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:53:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:53:38', tmtdew=18.06, humidity=30.69, cloud=0.0, wind=11.15, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:53:06.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:53:46.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:53:46.523 [DEBUG] [Thread-301640] [transport.py] [_log()] starting thread (client mode): 0xf81e7190
2025-12-24T11:53:46.523 [DEBUG] [Thread-301640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:53:46.537 [DEBUG] [Thread-301640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:53:46.537 [INFO] [Thread-301640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:53:46.544 [DEBUG] [Thread-301640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:53:46.545 [DEBUG] [Thread-301640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:53:46.545 [DEBUG] [Thread-301640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:53:46.545 [DEBUG] [Thread-301640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:53:46.545 [DEBUG] [Thread-301640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:53:46.545 [DEBUG] [Thread-301640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:53:46.545 [DEBUG] [Thread-301640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:53:46.545 [DEBUG] [Thread-301640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] client lang: <none>
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] server lang: <none>
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] kex follows: False
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] Compression: none
2025-12-24T11:53:46.546 [DEBUG] [Thread-301640] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:53:46.606 [DEBUG] [Thread-301640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:53:46.607 [DEBUG] [Thread-301640] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:53:46.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:53:46.608 [DEBUG] [Thread-301640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:53:46.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:53:46.875 [DEBUG] [Thread-301640] [transport.py] [_log()] userauth is OK
2025-12-24T11:53:46.875 [DEBUG] [Thread-301640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:53:46.875 [DEBUG] [Thread-301640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:53:46.875 [DEBUG] [Thread-301640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:53:46.875 [DEBUG] [Thread-301640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:53:46.892 [INFO] [Thread-301640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:53:46.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:53:46.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:53:47.752 [DEBUG] [Thread-301640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:53:47.753 [DEBUG] [Thread-301640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:53:47.791 [DEBUG] [Thread-301640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:53:47.791 [DEBUG] [Thread-301640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:53:47.801 [DEBUG] [Thread-301640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:53:47.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:53:47.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:53:47.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:53:47.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:53:47.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:53:47.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:53:47.838 [DEBUG] [Thread-301640] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:53:51.974 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:53:51.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:53:57.166 [DEBUG] [Thread-301642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:54:00.595 [DEBUG] [Thread-301643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:54:15.700 [DEBUG] [Thread-301644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:54:17.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:54:17.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:54:17.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:54:18.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 54, 11), 18.08, 30.67, 0.0, 9.11, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:54:18.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:54:11
2025-12-24T11:54:18.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:54:18.913 [DEBUG] [Thread-301645] [transport.py] [_log()] starting thread (client mode): 0xf57706a0
2025-12-24T11:54:18.913 [DEBUG] [Thread-301645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:54:18.928 [DEBUG] [Thread-301645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:54:18.928 [INFO] [Thread-301645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] client lang: <none>
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] server lang: <none>
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] kex follows: False
2025-12-24T11:54:18.933 [DEBUG] [Thread-301645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:54:18.934 [DEBUG] [Thread-301645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:54:18.934 [DEBUG] [Thread-301645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:54:18.934 [DEBUG] [Thread-301645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:54:18.934 [DEBUG] [Thread-301645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:54:18.934 [DEBUG] [Thread-301645] [transport.py] [_log()] Compression: none
2025-12-24T11:54:18.934 [DEBUG] [Thread-301645] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:54:18.956 [DEBUG] [Thread-301645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:54:18.959 [DEBUG] [Thread-301645] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:54:18.961 [DEBUG] [Thread-301645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:54:18.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:54:18.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:54:18.965 [DEBUG] [Thread-301645] [transport.py] [_log()] userauth is OK
2025-12-24T11:54:18.965 [DEBUG] [Thread-301645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:54:18.965 [DEBUG] [Thread-301645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:54:18.965 [DEBUG] [Thread-301645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:54:18.965 [DEBUG] [Thread-301645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:54:18.984 [INFO] [Thread-301645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:54:18.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:54:19.552 [DEBUG] [Thread-301645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:54:19.552 [DEBUG] [Thread-301645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:54:19.553 [DEBUG] [Thread-301645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:54:19.593 [DEBUG] [Thread-301645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:54:19.593 [DEBUG] [Thread-301645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:54:19.596 [DEBUG] [Thread-301645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:54:19.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:54:19.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:54:19.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:54:19.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:54:19.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:54:19.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:54:19.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:54:19.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:54:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:54:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.412570 -999.00  +23.70   9.38     32   +6.50 1 1 1 1 1   888    0 19.82 133.31 ----- 9.4 9.4 120.4 13.8 32.2 -25.7 31.2 -24.8 30.8 -23.1 31.7 -24.8
2025-12-24T11:54:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:54:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:54:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.412570
2025-12-24T11:54:19.625 [DEBUG] [Thread-301645] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:54:19.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:54:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:54:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:54:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:54:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:54:19.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:54:11', tmtdew=18.08, humidity=30.67, cloud=0.0, wind=9.11, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:54:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:54:19.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:54:19.746 [DEBUG] [Thread-301648] [transport.py] [_log()] starting thread (client mode): 0xf5771ea0
2025-12-24T11:54:19.746 [DEBUG] [Thread-301648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:54:19.762 [DEBUG] [Thread-301648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:54:19.762 [INFO] [Thread-301648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] client lang: <none>
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] server lang: <none>
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] kex follows: False
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] Compression: none
2025-12-24T11:54:19.770 [DEBUG] [Thread-301648] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:54:19.835 [DEBUG] [Thread-301648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:54:19.835 [DEBUG] [Thread-301648] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:54:19.836 [DEBUG] [Thread-301648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:54:19.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:54:19.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:54:19.899 [DEBUG] [Thread-301648] [transport.py] [_log()] userauth is OK
2025-12-24T11:54:19.899 [DEBUG] [Thread-301648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:54:19.899 [DEBUG] [Thread-301648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:54:19.899 [DEBUG] [Thread-301648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:54:19.899 [DEBUG] [Thread-301648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:54:19.916 [INFO] [Thread-301648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:54:19.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:54:19.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:54:20.748 [DEBUG] [Thread-301648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:54:20.748 [DEBUG] [Thread-301648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:54:20.796 [DEBUG] [Thread-301648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:54:20.796 [DEBUG] [Thread-301648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:54:20.805 [DEBUG] [Thread-301648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:54:20.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:54:20.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:54:20.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:54:20.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:54:20.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:54:20.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:54:20.842 [DEBUG] [Thread-301648] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:54:30.770 [DEBUG] [Thread-301650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:54:45.896 [DEBUG] [Thread-301651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:54:50.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:54:50.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:54:50.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
2025-12-24T11:54:51.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 54, 44), 18.12, 30.23, 0.0, 6.35, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:54:51.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:54:44
2025-12-24T11:54:51.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:54:52.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:54:52.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:54:52.129 [DEBUG] [Thread-301652] [transport.py] [_log()] starting thread (client mode): 0xf5773700
2025-12-24T11:54:52.130 [DEBUG] [Thread-301652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:54:52.146 [DEBUG] [Thread-301652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:54:52.146 [INFO] [Thread-301652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:54:52.151 [DEBUG] [Thread-301652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:54:52.151 [DEBUG] [Thread-301652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:54:52.151 [DEBUG] [Thread-301652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] client lang: <none>
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] server lang: <none>
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] kex follows: False
2025-12-24T11:54:52.152 [DEBUG] [Thread-301652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:54:52.153 [DEBUG] [Thread-301652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:54:52.153 [DEBUG] [Thread-301652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:54:52.153 [DEBUG] [Thread-301652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:54:52.153 [DEBUG] [Thread-301652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:54:52.153 [DEBUG] [Thread-301652] [transport.py] [_log()] Compression: none
2025-12-24T11:54:52.153 [DEBUG] [Thread-301652] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:54:52.186 [DEBUG] [Thread-301652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:54:52.191 [DEBUG] [Thread-301652] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:54:52.193 [DEBUG] [Thread-301652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:54:52.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:54:52.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:54:52.198 [DEBUG] [Thread-301652] [transport.py] [_log()] userauth is OK
2025-12-24T11:54:52.199 [DEBUG] [Thread-301652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:54:52.199 [DEBUG] [Thread-301652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:54:52.199 [DEBUG] [Thread-301652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:54:52.199 [DEBUG] [Thread-301652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:54:52.227 [INFO] [Thread-301652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:54:52.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:54:52.884 [DEBUG] [Thread-301652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:54:52.885 [DEBUG] [Thread-301652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:54:52.885 [DEBUG] [Thread-301652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:54:52.926 [DEBUG] [Thread-301652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:54:52.926 [DEBUG] [Thread-301652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:54:52.928 [DEBUG] [Thread-301652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:54:52.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:54:52.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:54:52.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:54:52.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:54:52.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:54:52.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:54:52.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:54:52.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:54:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:54:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.412917 -999.00  +23.50  11.74     33   +6.40 1 1 1 1 1   888    0 20.13 136.45 ----- 11.7 11.7 69.8 13.2 32.0 -26.4 31.3 -25.6 30.9 -23.6 31.7 -24.9
2025-12-24T11:54:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:54:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:54:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.412917
2025-12-24T11:54:52.963 [DEBUG] [Thread-301652] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:54:52.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:54:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:54:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:54:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:54:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:54:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:54:44', tmtdew=18.12, humidity=30.23, cloud=0.0, wind=6.35, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:54:36.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:54:53.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:54:53.079 [DEBUG] [Thread-301655] [transport.py] [_log()] starting thread (client mode): 0xf57bc0a0
2025-12-24T11:54:53.080 [DEBUG] [Thread-301655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:54:53.094 [DEBUG] [Thread-301655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:54:53.094 [INFO] [Thread-301655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] client lang: <none>
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] server lang: <none>
2025-12-24T11:54:53.102 [DEBUG] [Thread-301655] [transport.py] [_log()] kex follows: False
2025-12-24T11:54:53.103 [DEBUG] [Thread-301655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:54:53.103 [DEBUG] [Thread-301655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:54:53.103 [DEBUG] [Thread-301655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:54:53.103 [DEBUG] [Thread-301655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:54:53.103 [DEBUG] [Thread-301655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:54:53.103 [DEBUG] [Thread-301655] [transport.py] [_log()] Compression: none
2025-12-24T11:54:53.103 [DEBUG] [Thread-301655] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:54:53.163 [DEBUG] [Thread-301655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:54:53.163 [DEBUG] [Thread-301655] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:54:53.164 [DEBUG] [Thread-301655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:54:53.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:54:53.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:54:53.222 [DEBUG] [Thread-301655] [transport.py] [_log()] userauth is OK
2025-12-24T11:54:53.223 [DEBUG] [Thread-301655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:54:53.223 [DEBUG] [Thread-301655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:54:53.223 [DEBUG] [Thread-301655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:54:53.223 [DEBUG] [Thread-301655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:54:53.246 [INFO] [Thread-301655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:54:53.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:54:53.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:54:54.081 [DEBUG] [Thread-301655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:54:54.081 [DEBUG] [Thread-301655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:54:54.128 [DEBUG] [Thread-301655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:54:54.128 [DEBUG] [Thread-301655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:54:54.139 [DEBUG] [Thread-301655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:54:54.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:54:54.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:54:54.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:54:54.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:54:54.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:54:54.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:54:54.180 [DEBUG] [Thread-301655] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:54:57.437 [DEBUG] [Thread-301657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:55:00.959 [DEBUG] [Thread-301658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:55:16.083 [DEBUG] [Thread-301659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:55:24.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:55:24.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:55:24.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:55:25.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 55, 17), 17.85, 30.75, 0.0, 7.54, 21.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:55:25.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:55:17
2025-12-24T11:55:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:55:25.611 [DEBUG] [Thread-301660] [transport.py] [_log()] starting thread (client mode): 0xf5772200
2025-12-24T11:55:25.612 [DEBUG] [Thread-301660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:55:25.621 [DEBUG] [Thread-301660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:55:25.622 [INFO] [Thread-301660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:55:25.627 [DEBUG] [Thread-301660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:55:25.627 [DEBUG] [Thread-301660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] client lang: <none>
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] server lang: <none>
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] kex follows: False
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:55:25.628 [DEBUG] [Thread-301660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:55:25.629 [DEBUG] [Thread-301660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:55:25.629 [DEBUG] [Thread-301660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:55:25.629 [DEBUG] [Thread-301660] [transport.py] [_log()] Compression: none
2025-12-24T11:55:25.629 [DEBUG] [Thread-301660] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:55:25.652 [DEBUG] [Thread-301660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:55:25.655 [DEBUG] [Thread-301660] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:55:25.657 [DEBUG] [Thread-301660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:55:25.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:55:25.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:55:25.663 [DEBUG] [Thread-301660] [transport.py] [_log()] userauth is OK
2025-12-24T11:55:25.664 [DEBUG] [Thread-301660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:55:25.664 [DEBUG] [Thread-301660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:55:25.664 [DEBUG] [Thread-301660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:55:25.664 [DEBUG] [Thread-301660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:55:25.692 [INFO] [Thread-301660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:55:25.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:55:26.319 [DEBUG] [Thread-301660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:55:26.319 [DEBUG] [Thread-301660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:55:26.322 [DEBUG] [Thread-301660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:55:26.360 [DEBUG] [Thread-301660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:55:26.360 [DEBUG] [Thread-301660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:55:26.364 [DEBUG] [Thread-301660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:55:26.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:55:26.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:55:26.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:55:26.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:55:26.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:55:26.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:55:26.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:55:26.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:55:26.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:55:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.413264 -999.00  +23.10  15.08     33   +6.20 1 1 1 1 1   888    0 19.72 130.39 ----- 15.1 15.1 88.2 17.0 31.9 -26.7 31.1 -26.3 30.7 -25.7 31.6 -24.6
2025-12-24T11:55:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:55:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:55:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.413264
2025-12-24T11:55:26.400 [DEBUG] [Thread-301660] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:55:26.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:55:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:55:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:55:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:55:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:55:26.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:55:17', tmtdew=17.85, humidity=30.75, cloud=0.0, wind=7.54, temperature=21.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:55:06.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:55:26.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:55:26.520 [DEBUG] [Thread-301663] [transport.py] [_log()] starting thread (client mode): 0xf5770400
2025-12-24T11:55:26.520 [DEBUG] [Thread-301663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:55:26.538 [DEBUG] [Thread-301663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:55:26.538 [INFO] [Thread-301663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] client lang: <none>
2025-12-24T11:55:26.548 [DEBUG] [Thread-301663] [transport.py] [_log()] server lang: <none>
2025-12-24T11:55:26.549 [DEBUG] [Thread-301663] [transport.py] [_log()] kex follows: False
2025-12-24T11:55:26.549 [DEBUG] [Thread-301663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:55:26.549 [DEBUG] [Thread-301663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:55:26.549 [DEBUG] [Thread-301663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:55:26.549 [DEBUG] [Thread-301663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:55:26.549 [DEBUG] [Thread-301663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:55:26.549 [DEBUG] [Thread-301663] [transport.py] [_log()] Compression: none
2025-12-24T11:55:26.549 [DEBUG] [Thread-301663] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:55:26.615 [DEBUG] [Thread-301663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:55:26.616 [DEBUG] [Thread-301663] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:55:26.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:55:26.617 [DEBUG] [Thread-301663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:55:26.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:55:26.679 [DEBUG] [Thread-301663] [transport.py] [_log()] userauth is OK
2025-12-24T11:55:26.679 [DEBUG] [Thread-301663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:55:26.679 [DEBUG] [Thread-301663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:55:26.679 [DEBUG] [Thread-301663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:55:26.679 [DEBUG] [Thread-301663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:55:26.699 [INFO] [Thread-301663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:55:26.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:55:26.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:55:27.545 [DEBUG] [Thread-301663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:55:27.545 [DEBUG] [Thread-301663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:55:27.595 [DEBUG] [Thread-301663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:55:27.596 [DEBUG] [Thread-301663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:55:27.604 [DEBUG] [Thread-301663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:55:27.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:55:27.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:55:27.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:55:27.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:55:27.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:55:27.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:55:27.647 [DEBUG] [Thread-301663] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:55:31.144 [DEBUG] [Thread-301665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:55:46.326 [DEBUG] [Thread-301666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:55:52.255 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:55:52.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:55:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:55:57.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:55:57.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:55:57.755 [DEBUG] [Thread-301667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:55:58.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 55, 50), 18.09, 30.38, 0.0, 10.96, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:55:58.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:55:50
2025-12-24T11:55:58.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:55:58.999 [DEBUG] [Thread-301668] [transport.py] [_log()] starting thread (client mode): 0xf5770100
2025-12-24T11:55:58.999 [DEBUG] [Thread-301668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:55:59.005 [DEBUG] [Thread-301668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:55:59.005 [INFO] [Thread-301668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] client lang: <none>
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] server lang: <none>
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] kex follows: False
2025-12-24T11:55:59.010 [DEBUG] [Thread-301668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:55:59.011 [DEBUG] [Thread-301668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:55:59.011 [DEBUG] [Thread-301668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:55:59.011 [DEBUG] [Thread-301668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:55:59.011 [DEBUG] [Thread-301668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:55:59.011 [DEBUG] [Thread-301668] [transport.py] [_log()] Compression: none
2025-12-24T11:55:59.011 [DEBUG] [Thread-301668] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:55:59.043 [DEBUG] [Thread-301668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:55:59.046 [DEBUG] [Thread-301668] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:55:59.048 [DEBUG] [Thread-301668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:55:59.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:55:59.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:55:59.053 [DEBUG] [Thread-301668] [transport.py] [_log()] userauth is OK
2025-12-24T11:55:59.054 [DEBUG] [Thread-301668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:55:59.054 [DEBUG] [Thread-301668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:55:59.054 [DEBUG] [Thread-301668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:55:59.054 [DEBUG] [Thread-301668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:55:59.082 [INFO] [Thread-301668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:55:59.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:55:59.681 [DEBUG] [Thread-301668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:55:59.682 [DEBUG] [Thread-301668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:55:59.683 [DEBUG] [Thread-301668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:55:59.722 [DEBUG] [Thread-301668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:55:59.723 [DEBUG] [Thread-301668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:55:59.726 [DEBUG] [Thread-301668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:55:59.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:55:59.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:55:59.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:55:59.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:55:59.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:55:59.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:55:59.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:55:59.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:55:59.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:55:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.413612 -999.00  +22.80  10.34     34   +6.30 1 1 1 1 1   888    0 20.14 126.16 ----- 10.3 10.3 123.4 13.3 31.6 -31.2 31.1 -25.6 30.5 -24.2 31.5 -24.7
2025-12-24T11:55:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:55:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:55:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.413612
2025-12-24T11:55:59.760 [DEBUG] [Thread-301668] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:55:59.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:55:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:55:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:55:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:55:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:55:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:55:50', tmtdew=18.09, humidity=30.38, cloud=0.0, wind=10.96, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:55:36.077', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:55:59.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:56:01.414 [DEBUG] [Thread-301671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:56:16.509 [DEBUG] [Thread-301672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:56:31.625 [DEBUG] [Thread-301673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:56:46.715 [DEBUG] [Thread-301674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:56:52.412 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:56:52.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:56:58.023 [DEBUG] [Thread-301675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:57:01.768 [DEBUG] [Thread-301676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:57:16.813 [DEBUG] [Thread-301677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:57:31.914 [DEBUG] [Thread-301678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:57:46.985 [DEBUG] [Thread-301679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:57:52.555 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:57:52.556 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:57:58.247 [DEBUG] [Thread-301680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:58:02.013 [DEBUG] [Thread-301681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:58:15.043 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T11:58:17.094 [DEBUG] [Thread-301682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:58:32.222 [DEBUG] [Thread-301683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:58:45.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:58:45.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:58:45.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:58:45.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 58, 36), 18.11, 30.62, 0.0, 12.65, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:58:45.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:58:36
2025-12-24T11:58:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:58:46.324 [DEBUG] [Thread-301684] [transport.py] [_log()] starting thread (client mode): 0xf5770190
2025-12-24T11:58:46.326 [DEBUG] [Thread-301684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:58:46.333 [DEBUG] [Thread-301684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:58:46.333 [INFO] [Thread-301684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:58:46.341 [DEBUG] [Thread-301684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:58:46.341 [DEBUG] [Thread-301684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:58:46.341 [DEBUG] [Thread-301684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:58:46.341 [DEBUG] [Thread-301684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:58:46.341 [DEBUG] [Thread-301684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:58:46.341 [DEBUG] [Thread-301684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:58:46.341 [DEBUG] [Thread-301684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:58:46.342 [DEBUG] [Thread-301684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:58:46.342 [DEBUG] [Thread-301684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:58:46.342 [DEBUG] [Thread-301684] [transport.py] [_log()] client lang: <none>
2025-12-24T11:58:46.342 [DEBUG] [Thread-301684] [transport.py] [_log()] server lang: <none>
2025-12-24T11:58:46.342 [DEBUG] [Thread-301684] [transport.py] [_log()] kex follows: False
2025-12-24T11:58:46.342 [DEBUG] [Thread-301684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:58:46.342 [DEBUG] [Thread-301684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:58:46.342 [DEBUG] [Thread-301684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:58:46.343 [DEBUG] [Thread-301684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:58:46.343 [DEBUG] [Thread-301684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:58:46.343 [DEBUG] [Thread-301684] [transport.py] [_log()] Compression: none
2025-12-24T11:58:46.343 [DEBUG] [Thread-301684] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:58:46.381 [DEBUG] [Thread-301684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:58:46.386 [DEBUG] [Thread-301684] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:58:46.388 [DEBUG] [Thread-301684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:58:46.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:58:46.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:58:46.393 [DEBUG] [Thread-301684] [transport.py] [_log()] userauth is OK
2025-12-24T11:58:46.393 [DEBUG] [Thread-301684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:58:46.394 [DEBUG] [Thread-301684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:58:46.394 [DEBUG] [Thread-301684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:58:46.394 [DEBUG] [Thread-301684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:58:46.432 [INFO] [Thread-301684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:58:46.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:58:47.092 [DEBUG] [Thread-301684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:58:47.092 [DEBUG] [Thread-301684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:58:47.092 [DEBUG] [Thread-301684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:58:47.132 [DEBUG] [Thread-301684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:58:47.132 [DEBUG] [Thread-301684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:58:47.135 [DEBUG] [Thread-301684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:58:47.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:58:47.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:58:47.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:58:47.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:58:47.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:58:47.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:58:47.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:58:47.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:58:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:58:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.415695 -999.00  +22.80  11.74     34   +6.20 1 1 1 1 1   888    0 18.95 94.81 ----- 11.7 11.7 158.4 13.8 31.4 -25.8 30.4 -26.1 30.4 -23.5 31.2 -24.6
2025-12-24T11:58:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:58:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:58:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.415695
2025-12-24T11:58:47.163 [DEBUG] [Thread-301684] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:58:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:58:47.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:58:47.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:58:47.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:58:47.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:58:47.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:58:36', tmtdew=18.11, humidity=30.62, cloud=0.0, wind=12.65, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:58:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:58:47.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:58:47.265 [DEBUG] [Thread-301687] [transport.py] [_log()] starting thread (client mode): 0xf5773040
2025-12-24T11:58:47.265 [DEBUG] [Thread-301687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:58:47.279 [DEBUG] [Thread-301687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:58:47.280 [INFO] [Thread-301687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] client lang: <none>
2025-12-24T11:58:47.287 [DEBUG] [Thread-301687] [transport.py] [_log()] server lang: <none>
2025-12-24T11:58:47.288 [DEBUG] [Thread-301687] [transport.py] [_log()] kex follows: False
2025-12-24T11:58:47.288 [DEBUG] [Thread-301687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:58:47.288 [DEBUG] [Thread-301687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:58:47.288 [DEBUG] [Thread-301687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:58:47.288 [DEBUG] [Thread-301687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:58:47.288 [DEBUG] [Thread-301687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:58:47.288 [DEBUG] [Thread-301687] [transport.py] [_log()] Compression: none
2025-12-24T11:58:47.288 [DEBUG] [Thread-301687] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:58:47.297 [DEBUG] [Thread-301689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:58:47.343 [DEBUG] [Thread-301687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:58:47.343 [DEBUG] [Thread-301687] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:58:47.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:58:47.343 [DEBUG] [Thread-301687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:58:47.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:58:47.400 [DEBUG] [Thread-301687] [transport.py] [_log()] userauth is OK
2025-12-24T11:58:47.400 [DEBUG] [Thread-301687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:58:47.400 [DEBUG] [Thread-301687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:58:47.400 [DEBUG] [Thread-301687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:58:47.400 [DEBUG] [Thread-301687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:58:47.414 [INFO] [Thread-301687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:58:47.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:58:47.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:58:48.351 [DEBUG] [Thread-301687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:58:48.351 [DEBUG] [Thread-301687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:58:48.399 [DEBUG] [Thread-301687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:58:48.400 [DEBUG] [Thread-301687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:58:48.409 [DEBUG] [Thread-301687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:58:48.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:58:48.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:58:48.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:58:48.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:58:48.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:58:48.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:58:48.446 [DEBUG] [Thread-301687] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:58:52.697 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:58:52.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:58:58.523 [DEBUG] [Thread-301690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:59:02.383 [DEBUG] [Thread-301691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:59:17.453 [DEBUG] [Thread-301692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:59:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:59:18.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:59:18.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T11:59:19.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 59, 9), 18.33, 30.22, 0.0, 11.05, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:59:19.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:59:09
2025-12-24T11:59:19.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:59:19.795 [DEBUG] [Thread-301693] [transport.py] [_log()] starting thread (client mode): 0xf57bcc10
2025-12-24T11:59:19.795 [DEBUG] [Thread-301693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:59:19.807 [DEBUG] [Thread-301693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:59:19.807 [INFO] [Thread-301693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:59:19.824 [DEBUG] [Thread-301693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:59:19.824 [DEBUG] [Thread-301693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:59:19.824 [DEBUG] [Thread-301693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:59:19.824 [DEBUG] [Thread-301693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:59:19.824 [DEBUG] [Thread-301693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:59:19.825 [DEBUG] [Thread-301693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:59:19.825 [DEBUG] [Thread-301693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:59:19.825 [DEBUG] [Thread-301693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:59:19.825 [DEBUG] [Thread-301693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:59:19.825 [DEBUG] [Thread-301693] [transport.py] [_log()] client lang: <none>
2025-12-24T11:59:19.825 [DEBUG] [Thread-301693] [transport.py] [_log()] server lang: <none>
2025-12-24T11:59:19.825 [DEBUG] [Thread-301693] [transport.py] [_log()] kex follows: False
2025-12-24T11:59:19.825 [DEBUG] [Thread-301693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:59:19.826 [DEBUG] [Thread-301693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:59:19.826 [DEBUG] [Thread-301693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:59:19.827 [DEBUG] [Thread-301693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:59:19.827 [DEBUG] [Thread-301693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:59:19.827 [DEBUG] [Thread-301693] [transport.py] [_log()] Compression: none
2025-12-24T11:59:19.827 [DEBUG] [Thread-301693] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:59:19.866 [DEBUG] [Thread-301693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:59:19.870 [DEBUG] [Thread-301693] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:59:19.872 [DEBUG] [Thread-301693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:59:19.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:59:19.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:59:19.876 [DEBUG] [Thread-301693] [transport.py] [_log()] userauth is OK
2025-12-24T11:59:19.877 [DEBUG] [Thread-301693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:59:19.877 [DEBUG] [Thread-301693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:59:19.877 [DEBUG] [Thread-301693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:59:19.877 [DEBUG] [Thread-301693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:59:19.903 [INFO] [Thread-301693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:59:19.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:59:20.555 [DEBUG] [Thread-301693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:59:20.555 [DEBUG] [Thread-301693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:59:20.555 [DEBUG] [Thread-301693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:59:20.596 [DEBUG] [Thread-301693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:59:20.596 [DEBUG] [Thread-301693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:59:20.599 [DEBUG] [Thread-301693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:59:20.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:59:20.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:59:20.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:59:20.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:59:20.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:59:20.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:59:20.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:59:20.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:59:20.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:59:20.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.416042 -999.00  +22.70   6.47     34   +6.10 1 1 1 1 1   888    0 18.87 96.04 ----- 6.5 6.5 150.7 10.6 31.4 -25.7 30.5 -24.9 30.4 -23.5 31.2 -25.1
2025-12-24T11:59:20.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:59:20.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:59:20.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.416042
2025-12-24T11:59:20.633 [DEBUG] [Thread-301693] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:59:20.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:59:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:59:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:59:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:59:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T11:59:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:59:09', tmtdew=18.33, humidity=30.22, cloud=0.0, wind=11.05, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:59:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:59:20.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:59:20.751 [DEBUG] [Thread-301696] [transport.py] [_log()] starting thread (client mode): 0xf5742dd0
2025-12-24T11:59:20.751 [DEBUG] [Thread-301696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:59:20.771 [DEBUG] [Thread-301696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:59:20.771 [INFO] [Thread-301696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:59:20.778 [DEBUG] [Thread-301696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:59:20.778 [DEBUG] [Thread-301696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:59:20.778 [DEBUG] [Thread-301696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:59:20.778 [DEBUG] [Thread-301696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] client lang: <none>
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] server lang: <none>
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] kex follows: False
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] Compression: none
2025-12-24T11:59:20.779 [DEBUG] [Thread-301696] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:59:20.837 [DEBUG] [Thread-301696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:59:20.838 [DEBUG] [Thread-301696] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:59:20.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:59:20.838 [DEBUG] [Thread-301696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:59:20.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:59:20.893 [DEBUG] [Thread-301696] [transport.py] [_log()] userauth is OK
2025-12-24T11:59:20.893 [DEBUG] [Thread-301696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:59:20.894 [DEBUG] [Thread-301696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:59:20.894 [DEBUG] [Thread-301696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:59:20.894 [DEBUG] [Thread-301696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:59:20.913 [INFO] [Thread-301696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:59:20.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:59:20.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:59:21.767 [DEBUG] [Thread-301696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:59:21.768 [DEBUG] [Thread-301696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:59:21.806 [DEBUG] [Thread-301696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:59:21.806 [DEBUG] [Thread-301696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:59:21.815 [DEBUG] [Thread-301696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:59:21.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:59: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')
2025-12-24T11:59: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
2025-12-24T11:59:21.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:59:21.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:59:21.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:59:21.853 [DEBUG] [Thread-301696] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:59:32.528 [DEBUG] [Thread-301698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:59:47.668 [DEBUG] [Thread-301699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:59:51.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T11:59:51.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T11:59:51.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
2025-12-24T11:59:52.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 11, 59, 42), 18.51, 29.57, 0.0, 8.37, 22.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T11:59:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 11:59:42
2025-12-24T11:59:52.839 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:59:52.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T11:59:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T11:59:53.215 [DEBUG] [Thread-301700] [transport.py] [_log()] starting thread (client mode): 0xf5740e50
2025-12-24T11:59:53.216 [DEBUG] [Thread-301700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:59:53.226 [DEBUG] [Thread-301700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T11:59:53.226 [INFO] [Thread-301700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T11:59:53.231 [DEBUG] [Thread-301700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:59:53.231 [DEBUG] [Thread-301700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] client lang: <none>
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] server lang: <none>
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] kex follows: False
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] Compression: none
2025-12-24T11:59:53.232 [DEBUG] [Thread-301700] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:59:53.271 [DEBUG] [Thread-301700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:59:53.274 [DEBUG] [Thread-301700] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:59:53.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T11:59:53.277 [DEBUG] [Thread-301700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T11:59:53.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:59:53.280 [DEBUG] [Thread-301700] [transport.py] [_log()] userauth is OK
2025-12-24T11:59:53.281 [DEBUG] [Thread-301700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:59:53.281 [DEBUG] [Thread-301700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:59:53.281 [DEBUG] [Thread-301700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T11:59:53.281 [DEBUG] [Thread-301700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:59:53.300 [INFO] [Thread-301700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:59:53.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:59:53.970 [DEBUG] [Thread-301700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:59:53.970 [DEBUG] [Thread-301700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:59:53.971 [DEBUG] [Thread-301700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T11:59:54.012 [DEBUG] [Thread-301700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:59:54.012 [DEBUG] [Thread-301700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:59:54.015 [DEBUG] [Thread-301700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:59:54.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:59:54.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T11:59:54.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T11:59:54.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T11:59:54.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:59:54.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T11:59:54.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:59:54.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:59:54.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T11:59:54.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.416389 -999.00  +22.80   7.46     34   +6.20 1 2 1 1 1   888    0 19.03 94.11 ----- 7.5 7.5 194.8 15.7 31.5 -26.2 -999.0 -999.0 30.4 -23.0 31.3 -24.8
2025-12-24T11:59:54.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T11:59:54.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T11:59:54.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.416389
2025-12-24T11:59:54.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T11:59:54.055 [DEBUG] [Thread-301700] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:59:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T11:59:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T11:59:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T11:59:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T11:59:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T11:59:42', tmtdew=18.51, humidity=29.57, cloud=0.0, wind=8.37, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:59:36.010', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T11:59:54.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T11:59:54.146 [DEBUG] [Thread-301703] [transport.py] [_log()] starting thread (client mode): 0xf57705b0
2025-12-24T11:59:54.146 [DEBUG] [Thread-301703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T11:59:54.160 [DEBUG] [Thread-301703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T11:59:54.161 [INFO] [Thread-301703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] client lang: <none>
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] server lang: <none>
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] kex follows: False
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] Compression: none
2025-12-24T11:59:54.168 [DEBUG] [Thread-301703] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T11:59:54.226 [DEBUG] [Thread-301703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T11:59:54.226 [DEBUG] [Thread-301703] [transport.py] [_log()] Switch to new keys ...
2025-12-24T11:59:54.226 [DEBUG] [Thread-301703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T11:59:54.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T11:59:54.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T11:59:54.282 [DEBUG] [Thread-301703] [transport.py] [_log()] userauth is OK
2025-12-24T11:59:54.282 [DEBUG] [Thread-301703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T11:59:54.282 [DEBUG] [Thread-301703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T11:59:54.282 [DEBUG] [Thread-301703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T11:59:54.282 [DEBUG] [Thread-301703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T11:59:54.297 [INFO] [Thread-301703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T11:59:54.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T11:59:54.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T11:59:55.157 [DEBUG] [Thread-301703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T11:59:55.157 [DEBUG] [Thread-301703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T11:59:55.205 [DEBUG] [Thread-301703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T11:59:55.205 [DEBUG] [Thread-301703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T11:59:55.213 [DEBUG] [Thread-301703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T11:59:55.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T11:59:55.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T11:59:55.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T11:59:55.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T11:59:55.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T11:59:55.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T11:59:55.246 [DEBUG] [Thread-301703] [transport.py] [_log()] EOF in transport thread
2025-12-24T11:59:58.759 [DEBUG] [Thread-301705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:00:02.727 [DEBUG] [Thread-301706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:00:17.987 [DEBUG] [Thread-301707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:00:25.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:00:25.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:00:25.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:00:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 0, 15), 18.24, 30.02, 0.0, 10.29, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:00:26.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:00:15
2025-12-24T12:00:26.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:00:26.831 [DEBUG] [Thread-301708] [transport.py] [_log()] starting thread (client mode): 0xf5773550
2025-12-24T12:00:26.831 [DEBUG] [Thread-301708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:00:26.832 [DEBUG] [Thread-301708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:00:26.832 [INFO] [Thread-301708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] client lang: <none>
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] server lang: <none>
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] kex follows: False
2025-12-24T12:00:26.836 [DEBUG] [Thread-301708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:00:26.837 [DEBUG] [Thread-301708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:00:26.837 [DEBUG] [Thread-301708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:00:26.837 [DEBUG] [Thread-301708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:00:26.837 [DEBUG] [Thread-301708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:00:26.837 [DEBUG] [Thread-301708] [transport.py] [_log()] Compression: none
2025-12-24T12:00:26.837 [DEBUG] [Thread-301708] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:00:26.863 [DEBUG] [Thread-301708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:00:26.867 [DEBUG] [Thread-301708] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:00:26.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:00:26.870 [DEBUG] [Thread-301708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:00:26.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:00:26.873 [DEBUG] [Thread-301708] [transport.py] [_log()] userauth is OK
2025-12-24T12:00:26.873 [DEBUG] [Thread-301708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:00:26.874 [DEBUG] [Thread-301708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:00:26.874 [DEBUG] [Thread-301708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:00:26.874 [DEBUG] [Thread-301708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:00:26.901 [INFO] [Thread-301708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:00:26.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:00:27.845 [DEBUG] [Thread-301708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:00:27.846 [DEBUG] [Thread-301708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:00:27.847 [DEBUG] [Thread-301708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:00:27.887 [DEBUG] [Thread-301708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:00:27.887 [DEBUG] [Thread-301708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:00:27.889 [DEBUG] [Thread-301708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:00:27.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:00:27.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:00:27.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:00:27.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:00:27.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:00:27.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:00:27.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:00:27.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:00:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:00:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.416389 -999.00  +22.80   7.46     34   +6.20 1 2 1 1 1   888    0 19.03 94.11 ----- 7.5 7.5 194.8 15.7 31.5 -26.2 -999.0 -999.0 30.4 -23.0 31.3 -24.8
2025-12-24T12:00:27.915 [DEBUG] [Thread-301708] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:00:27.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:00:27.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:00:27.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.416389
2025-12-24T12:00:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:00:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:00:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:00:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:00:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:00:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:00:15', tmtdew=18.24, humidity=30.02, cloud=0.0, wind=10.29, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T09:59:36.010', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:00:28.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:00:28.037 [DEBUG] [Thread-301711] [transport.py] [_log()] starting thread (client mode): 0xf5771720
2025-12-24T12:00:28.037 [DEBUG] [Thread-301711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:00:28.052 [DEBUG] [Thread-301711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:00:28.052 [INFO] [Thread-301711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:00:28.060 [DEBUG] [Thread-301711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:00:28.060 [DEBUG] [Thread-301711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:00:28.060 [DEBUG] [Thread-301711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:00:28.060 [DEBUG] [Thread-301711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:00:28.060 [DEBUG] [Thread-301711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:00:28.060 [DEBUG] [Thread-301711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] client lang: <none>
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] server lang: <none>
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] kex follows: False
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:00:28.061 [DEBUG] [Thread-301711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:00:28.062 [DEBUG] [Thread-301711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:00:28.062 [DEBUG] [Thread-301711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:00:28.062 [DEBUG] [Thread-301711] [transport.py] [_log()] Compression: none
2025-12-24T12:00:28.062 [DEBUG] [Thread-301711] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:00:28.119 [DEBUG] [Thread-301711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:00:28.120 [DEBUG] [Thread-301711] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:00:28.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:00:28.121 [DEBUG] [Thread-301711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:00:28.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:00:28.175 [DEBUG] [Thread-301711] [transport.py] [_log()] userauth is OK
2025-12-24T12:00:28.176 [DEBUG] [Thread-301711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:00:28.176 [DEBUG] [Thread-301711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:00:28.176 [DEBUG] [Thread-301711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:00:28.176 [DEBUG] [Thread-301711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:00:28.198 [INFO] [Thread-301711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:00:28.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:00:28.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:00:29.059 [DEBUG] [Thread-301711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:00:29.059 [DEBUG] [Thread-301711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:00:29.107 [DEBUG] [Thread-301711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:00:29.107 [DEBUG] [Thread-301711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:00:29.115 [DEBUG] [Thread-301711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:00:29.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:00:29.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:00:29.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:00:29.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:00:29.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:00:29.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:00:29.148 [DEBUG] [Thread-301711] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:00:33.062 [DEBUG] [Thread-301713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:00:48.219 [DEBUG] [Thread-301714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:00:52.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:00:52.986 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:00:59.077 [DEBUG] [Thread-301715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:00:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:00:59.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:00:59.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
2025-12-24T12:01:00.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 0, 48), 18.39, 29.64, 0.0, 8.51, 22.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:01:00.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:00:48
2025-12-24T12:01:00.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:01:00.440 [DEBUG] [Thread-301716] [transport.py] [_log()] starting thread (client mode): 0xf5770e80
2025-12-24T12:01:00.441 [DEBUG] [Thread-301716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:01:00.453 [DEBUG] [Thread-301716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:01:00.453 [INFO] [Thread-301716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:01:00.458 [DEBUG] [Thread-301716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:01:00.458 [DEBUG] [Thread-301716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] client lang: <none>
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] server lang: <none>
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] kex follows: False
2025-12-24T12:01:00.459 [DEBUG] [Thread-301716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:01:00.460 [DEBUG] [Thread-301716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:01:00.460 [DEBUG] [Thread-301716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:01:00.460 [DEBUG] [Thread-301716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:01:00.460 [DEBUG] [Thread-301716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:01:00.461 [DEBUG] [Thread-301716] [transport.py] [_log()] Compression: none
2025-12-24T12:01:00.461 [DEBUG] [Thread-301716] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:01:00.497 [DEBUG] [Thread-301716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:01:00.503 [DEBUG] [Thread-301716] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:01:00.504 [DEBUG] [Thread-301716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:01:00.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:01:00.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:01:00.510 [DEBUG] [Thread-301716] [transport.py] [_log()] userauth is OK
2025-12-24T12:01:00.510 [DEBUG] [Thread-301716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:01:00.510 [DEBUG] [Thread-301716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:01:00.510 [DEBUG] [Thread-301716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:01:00.510 [DEBUG] [Thread-301716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:01:00.536 [INFO] [Thread-301716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:01:00.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:01:01.203 [DEBUG] [Thread-301716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:01:01.205 [DEBUG] [Thread-301716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:01:01.206 [DEBUG] [Thread-301716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:01:01.244 [DEBUG] [Thread-301716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:01:01.245 [DEBUG] [Thread-301716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:01:01.248 [DEBUG] [Thread-301716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:01:01.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:01:01.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:01:01.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:01:01.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:01:01.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:01:01.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:01:01.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:01:01.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:01:01.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:01:01.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.416736 -999.00  +23.10   7.71     33   +6.30 1 1 1 1 1   888    0 18.93 87.51 ----- 7.7 7.7 214.4 14.5 31.4 -26.0 30.4 -25.6 30.5 -24.0 31.2 -25.0
2025-12-24T12:01:01.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:01:01.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:01:01.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.416736
2025-12-24T12:01:01.283 [DEBUG] [Thread-301716] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:01:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:01:01.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:01:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:01:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:01:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:01:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:00:48', tmtdew=18.39, humidity=29.64, cloud=0.0, wind=8.51, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:00:05.990', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:01:01.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:01:01.406 [DEBUG] [Thread-301719] [transport.py] [_log()] starting thread (client mode): 0xf5741d80
2025-12-24T12:01:01.406 [DEBUG] [Thread-301719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:01:01.421 [DEBUG] [Thread-301719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:01:01.421 [INFO] [Thread-301719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] client lang: <none>
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] server lang: <none>
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] kex follows: False
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] Compression: none
2025-12-24T12:01:01.429 [DEBUG] [Thread-301719] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:01:01.494 [DEBUG] [Thread-301719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:01:01.495 [DEBUG] [Thread-301719] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:01:01.495 [DEBUG] [Thread-301719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:01:01.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:01:01.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:01:01.552 [DEBUG] [Thread-301719] [transport.py] [_log()] userauth is OK
2025-12-24T12:01:01.552 [DEBUG] [Thread-301719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:01:01.552 [DEBUG] [Thread-301719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:01:01.553 [DEBUG] [Thread-301719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:01:01.553 [DEBUG] [Thread-301719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:01:01.571 [INFO] [Thread-301719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:01:01.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:01:01.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:01:02.475 [DEBUG] [Thread-301719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:01:02.475 [DEBUG] [Thread-301719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:01:02.513 [DEBUG] [Thread-301719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:01:02.513 [DEBUG] [Thread-301719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:01:02.522 [DEBUG] [Thread-301719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:01:02.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:01:02.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:01:02.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
2025-12-24T12:01:02.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:01:02.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:01:02.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:01:02.555 [DEBUG] [Thread-301719] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:01:03.320 [DEBUG] [Thread-301721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:01:18.429 [DEBUG] [Thread-301722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:01:32.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:01:32.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:01:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:01:33.474 [DEBUG] [Thread-301723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:01:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 1, 21), 18.59, 29.29, 0.0, 14.08, 22.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:01:33.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:01:21
2025-12-24T12:01:33.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:01:34.077 [DEBUG] [Thread-301724] [transport.py] [_log()] starting thread (client mode): 0xf81e5c60
2025-12-24T12:01:34.078 [DEBUG] [Thread-301724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:01:34.091 [DEBUG] [Thread-301724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:01:34.091 [INFO] [Thread-301724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] client lang: <none>
2025-12-24T12:01:34.095 [DEBUG] [Thread-301724] [transport.py] [_log()] server lang: <none>
2025-12-24T12:01:34.096 [DEBUG] [Thread-301724] [transport.py] [_log()] kex follows: False
2025-12-24T12:01:34.096 [DEBUG] [Thread-301724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:01:34.096 [DEBUG] [Thread-301724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:01:34.096 [DEBUG] [Thread-301724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:01:34.097 [DEBUG] [Thread-301724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:01:34.097 [DEBUG] [Thread-301724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:01:34.097 [DEBUG] [Thread-301724] [transport.py] [_log()] Compression: none
2025-12-24T12:01:34.097 [DEBUG] [Thread-301724] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:01:34.133 [DEBUG] [Thread-301724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:01:34.137 [DEBUG] [Thread-301724] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:01:34.139 [DEBUG] [Thread-301724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:01:34.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:01:34.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:01:34.144 [DEBUG] [Thread-301724] [transport.py] [_log()] userauth is OK
2025-12-24T12:01:34.144 [DEBUG] [Thread-301724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:01:34.144 [DEBUG] [Thread-301724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:01:34.144 [DEBUG] [Thread-301724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:01:34.144 [DEBUG] [Thread-301724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:01:34.172 [INFO] [Thread-301724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:01:34.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:01:34.820 [DEBUG] [Thread-301724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:01:34.820 [DEBUG] [Thread-301724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:01:34.830 [DEBUG] [Thread-301724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:01:34.861 [DEBUG] [Thread-301724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:01:34.861 [DEBUG] [Thread-301724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:01:34.865 [DEBUG] [Thread-301724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:01:34.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:01:34.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:01:34.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:01:34.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:01:34.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:01:34.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:01:34.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:01:34.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:01:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:01:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.417084 -999.00  +23.20   7.19     33   +6.30 1 1 1 1 1   888    0 19.22 91.70 ----- 7.2 7.2 214.9 14.6 31.2 -26.2 30.4 -25.7 30.4 -25.1 31.1 -24.7
2025-12-24T12:01:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:01:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:01:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.417084
2025-12-24T12:01:34.901 [DEBUG] [Thread-301724] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:01:34.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:01:34.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:01:34.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:01:34.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:01:34.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:01:34.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:01:21', tmtdew=18.59, humidity=29.29, cloud=0.0, wind=14.08, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:00:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:01:35.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:01:35.024 [DEBUG] [Thread-301727] [transport.py] [_log()] starting thread (client mode): 0xf81e6020
2025-12-24T12:01:35.024 [DEBUG] [Thread-301727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:01:35.038 [DEBUG] [Thread-301727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:01:35.038 [INFO] [Thread-301727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:01:35.045 [DEBUG] [Thread-301727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:01:35.045 [DEBUG] [Thread-301727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:01:35.045 [DEBUG] [Thread-301727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] client lang: <none>
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] server lang: <none>
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] kex follows: False
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] Compression: none
2025-12-24T12:01:35.046 [DEBUG] [Thread-301727] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:01:35.104 [DEBUG] [Thread-301727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:01:35.104 [DEBUG] [Thread-301727] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:01:35.104 [DEBUG] [Thread-301727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:01:35.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:01:35.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:01:35.164 [DEBUG] [Thread-301727] [transport.py] [_log()] userauth is OK
2025-12-24T12:01:35.164 [DEBUG] [Thread-301727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:01:35.164 [DEBUG] [Thread-301727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:01:35.164 [DEBUG] [Thread-301727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:01:35.164 [DEBUG] [Thread-301727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:01:35.179 [INFO] [Thread-301727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:01:35.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:01:35.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:01:36.001 [DEBUG] [Thread-301727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:01:36.001 [DEBUG] [Thread-301727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:01:36.040 [DEBUG] [Thread-301727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:01:36.040 [DEBUG] [Thread-301727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:01:36.049 [DEBUG] [Thread-301727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:01:36.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:01:36.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:01:36.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:01:36.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:01:36.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:01:36.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:01:36.087 [DEBUG] [Thread-301727] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:01:48.533 [DEBUG] [Thread-301729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:01:53.129 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:01:53.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:01:59.379 [DEBUG] [Thread-301730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:02:03.611 [DEBUG] [Thread-301731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:02:06.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:02:06.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:02:06.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:02:06.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 1, 54), 18.69, 29.44, 0.0, 13.76, 22.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:02:06.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:01:54
2025-12-24T12:02:07.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:02:07.316 [DEBUG] [Thread-301732] [transport.py] [_log()] starting thread (client mode): 0xf572e380
2025-12-24T12:02:07.316 [DEBUG] [Thread-301732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:02:07.329 [DEBUG] [Thread-301732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:02:07.329 [INFO] [Thread-301732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:02:07.333 [DEBUG] [Thread-301732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:02:07.333 [DEBUG] [Thread-301732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:02:07.333 [DEBUG] [Thread-301732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:02:07.333 [DEBUG] [Thread-301732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:02:07.333 [DEBUG] [Thread-301732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] client lang: <none>
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] server lang: <none>
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] kex follows: False
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:02:07.334 [DEBUG] [Thread-301732] [transport.py] [_log()] Compression: none
2025-12-24T12:02:07.335 [DEBUG] [Thread-301732] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:02:07.366 [DEBUG] [Thread-301732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:02:07.370 [DEBUG] [Thread-301732] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:02:07.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:02:07.372 [DEBUG] [Thread-301732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:02:07.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:02:07.375 [DEBUG] [Thread-301732] [transport.py] [_log()] userauth is OK
2025-12-24T12:02:07.375 [DEBUG] [Thread-301732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:02:07.375 [DEBUG] [Thread-301732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:02:07.375 [DEBUG] [Thread-301732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:02:07.375 [DEBUG] [Thread-301732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:02:07.393 [INFO] [Thread-301732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:02:07.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:02:08.009 [DEBUG] [Thread-301732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:02:08.010 [DEBUG] [Thread-301732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:02:08.011 [DEBUG] [Thread-301732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:02:08.051 [DEBUG] [Thread-301732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:02:08.051 [DEBUG] [Thread-301732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:02:08.054 [DEBUG] [Thread-301732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:02:08.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:02:08.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:02:08.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:02:08.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:02:08.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:02:08.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:02:08.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:02:08.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:02:08.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:02:08.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.417431 -999.00  +23.60   7.65     33   +6.50 1 1 1 1 1   888    0 18.81 83.57 ----- 7.7 7.7 192.0 10.7 31.4 -25.9 30.4 -24.7 30.4 -22.7 31.3 -24.3
2025-12-24T12:02:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:02:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:02:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.417431
2025-12-24T12:02:08.087 [DEBUG] [Thread-301732] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:02:08.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:02:08.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:02:08.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:02:08.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:02:08.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:02:08.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:01:54', tmtdew=18.69, humidity=29.44, cloud=0.0, wind=13.76, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:01:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:02:08.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:02:08.202 [DEBUG] [Thread-301735] [transport.py] [_log()] starting thread (client mode): 0xf5770040
2025-12-24T12:02:08.202 [DEBUG] [Thread-301735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:02:08.217 [DEBUG] [Thread-301735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:02:08.217 [INFO] [Thread-301735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:02:08.225 [DEBUG] [Thread-301735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:02:08.225 [DEBUG] [Thread-301735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:02:08.230 [DEBUG] [Thread-301735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:02:08.230 [DEBUG] [Thread-301735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:02:08.230 [DEBUG] [Thread-301735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:02:08.230 [DEBUG] [Thread-301735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:02:08.230 [DEBUG] [Thread-301735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:02:08.230 [DEBUG] [Thread-301735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:02:08.230 [DEBUG] [Thread-301735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:02:08.230 [DEBUG] [Thread-301735] [transport.py] [_log()] client lang: <none>
2025-12-24T12:02:08.231 [DEBUG] [Thread-301735] [transport.py] [_log()] server lang: <none>
2025-12-24T12:02:08.231 [DEBUG] [Thread-301735] [transport.py] [_log()] kex follows: False
2025-12-24T12:02:08.231 [DEBUG] [Thread-301735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:02:08.231 [DEBUG] [Thread-301735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:02:08.231 [DEBUG] [Thread-301735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:02:08.231 [DEBUG] [Thread-301735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:02:08.231 [DEBUG] [Thread-301735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:02:08.231 [DEBUG] [Thread-301735] [transport.py] [_log()] Compression: none
2025-12-24T12:02:08.232 [DEBUG] [Thread-301735] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:02:08.282 [DEBUG] [Thread-301735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:02:08.283 [DEBUG] [Thread-301735] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:02:08.283 [DEBUG] [Thread-301735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:02:08.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:02:08.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:02:08.338 [DEBUG] [Thread-301735] [transport.py] [_log()] userauth is OK
2025-12-24T12:02:08.339 [DEBUG] [Thread-301735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:02:08.339 [DEBUG] [Thread-301735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:02:08.339 [DEBUG] [Thread-301735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:02:08.339 [DEBUG] [Thread-301735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:02:08.357 [INFO] [Thread-301735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:02:08.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:02:08.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:02:09.234 [DEBUG] [Thread-301735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:02:09.234 [DEBUG] [Thread-301735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:02:09.281 [DEBUG] [Thread-301735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:02:09.281 [DEBUG] [Thread-301735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:02:09.290 [DEBUG] [Thread-301735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:02:09.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:02:09.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:02:09.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:02:09.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:02:09.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:02:09.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:02:09.322 [DEBUG] [Thread-301735] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:02:18.653 [DEBUG] [Thread-301737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:02:33.767 [DEBUG] [Thread-301738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:02:39.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:02:39.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:02:39.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:02:40.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 2, 28), 18.65, 29.47, 0.0, 12.74, 22.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:02:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:02:28
2025-12-24T12:02:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:02:40.626 [DEBUG] [Thread-301739] [transport.py] [_log()] starting thread (client mode): 0xf57736a0
2025-12-24T12:02:40.627 [DEBUG] [Thread-301739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:02:40.642 [DEBUG] [Thread-301739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:02:40.642 [INFO] [Thread-301739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:02:40.648 [DEBUG] [Thread-301739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:02:40.648 [DEBUG] [Thread-301739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:02:40.648 [DEBUG] [Thread-301739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] client lang: <none>
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] server lang: <none>
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] kex follows: False
2025-12-24T12:02:40.649 [DEBUG] [Thread-301739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:02:40.650 [DEBUG] [Thread-301739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:02:40.650 [DEBUG] [Thread-301739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:02:40.651 [DEBUG] [Thread-301739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:02:40.651 [DEBUG] [Thread-301739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:02:40.651 [DEBUG] [Thread-301739] [transport.py] [_log()] Compression: none
2025-12-24T12:02:40.651 [DEBUG] [Thread-301739] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:02:40.677 [DEBUG] [Thread-301739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:02:40.682 [DEBUG] [Thread-301739] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:02:40.684 [DEBUG] [Thread-301739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:02:40.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:02:40.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:02:40.689 [DEBUG] [Thread-301739] [transport.py] [_log()] userauth is OK
2025-12-24T12:02:40.689 [DEBUG] [Thread-301739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:02:40.689 [DEBUG] [Thread-301739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:02:40.689 [DEBUG] [Thread-301739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:02:40.690 [DEBUG] [Thread-301739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:02:40.726 [INFO] [Thread-301739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:02:40.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:02:41.372 [DEBUG] [Thread-301739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:02:41.373 [DEBUG] [Thread-301739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:02:41.374 [DEBUG] [Thread-301739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:02:41.412 [DEBUG] [Thread-301739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:02:41.412 [DEBUG] [Thread-301739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:02:41.415 [DEBUG] [Thread-301739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:02:41.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:02:41.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:02:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:02:41.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:02:41.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:02:41.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:02:41.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:02:41.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:02:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:02:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.418125 -999.00  +23.70  16.80     32   +6.20 1 1 1 1 1   888    0 19.08 92.92 ----- 16.8 16.8 208.0 19.0 31.6 -25.5 30.6 -25.6 30.5 -22.7 31.4 -23.7
2025-12-24T12:02:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:02:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:02:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.418125
2025-12-24T12:02:41.449 [DEBUG] [Thread-301739] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:02:41.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:02:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:02:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:02:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:02:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:02:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:02:28', tmtdew=18.65, humidity=29.47, cloud=0.0, wind=12.74, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:02:06.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:02:41.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:02:41.550 [DEBUG] [Thread-301742] [transport.py] [_log()] starting thread (client mode): 0xf5740610
2025-12-24T12:02:41.550 [DEBUG] [Thread-301742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:02:41.565 [DEBUG] [Thread-301742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:02:41.565 [INFO] [Thread-301742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] client lang: <none>
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] server lang: <none>
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] kex follows: False
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:02:41.572 [DEBUG] [Thread-301742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:02:41.573 [DEBUG] [Thread-301742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:02:41.573 [DEBUG] [Thread-301742] [transport.py] [_log()] Compression: none
2025-12-24T12:02:41.573 [DEBUG] [Thread-301742] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:02:41.630 [DEBUG] [Thread-301742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:02:41.630 [DEBUG] [Thread-301742] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:02:41.630 [DEBUG] [Thread-301742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:02:41.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:02:41.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:02:41.687 [DEBUG] [Thread-301742] [transport.py] [_log()] userauth is OK
2025-12-24T12:02:41.687 [DEBUG] [Thread-301742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:02:41.687 [DEBUG] [Thread-301742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:02:41.687 [DEBUG] [Thread-301742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:02:41.687 [DEBUG] [Thread-301742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:02:41.700 [INFO] [Thread-301742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:02:41.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:02:41.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:02:42.542 [DEBUG] [Thread-301742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:02:42.542 [DEBUG] [Thread-301742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:02:42.590 [DEBUG] [Thread-301742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:02:42.590 [DEBUG] [Thread-301742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:02:42.599 [DEBUG] [Thread-301742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:02:42.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:02:42.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:02:42.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:02:42.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:02:42.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:02:42.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:02:42.631 [DEBUG] [Thread-301742] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:02:48.840 [DEBUG] [Thread-301744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:02:53.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:02:53.274 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:02:59.705 [DEBUG] [Thread-301745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:03:03.947 [DEBUG] [Thread-301746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:03:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:03:12.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:03:12.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:03:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 3, 1), 18.9, 28.99, 0.0, 17.98, 22.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:03:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:03:01
2025-12-24T12:03:13.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:03:14.134 [DEBUG] [Thread-301747] [transport.py] [_log()] starting thread (client mode): 0xf81e70a0
2025-12-24T12:03:14.134 [DEBUG] [Thread-301747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:03:14.149 [DEBUG] [Thread-301747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:03:14.149 [INFO] [Thread-301747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:03:14.154 [DEBUG] [Thread-301747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:03:14.154 [DEBUG] [Thread-301747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] client lang: <none>
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] server lang: <none>
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] kex follows: False
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:03:14.155 [DEBUG] [Thread-301747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:03:14.156 [DEBUG] [Thread-301747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:03:14.156 [DEBUG] [Thread-301747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:03:14.156 [DEBUG] [Thread-301747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:03:14.156 [DEBUG] [Thread-301747] [transport.py] [_log()] Compression: none
2025-12-24T12:03:14.156 [DEBUG] [Thread-301747] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:03:14.192 [DEBUG] [Thread-301747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:03:14.196 [DEBUG] [Thread-301747] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:03:14.198 [DEBUG] [Thread-301747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:03:14.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:03:14.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:03:14.208 [DEBUG] [Thread-301747] [transport.py] [_log()] userauth is OK
2025-12-24T12:03:14.208 [DEBUG] [Thread-301747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:03:14.208 [DEBUG] [Thread-301747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:03:14.208 [DEBUG] [Thread-301747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:03:14.208 [DEBUG] [Thread-301747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:03:14.248 [INFO] [Thread-301747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:03:14.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:03:14.899 [DEBUG] [Thread-301747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:03:14.900 [DEBUG] [Thread-301747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:03:14.910 [DEBUG] [Thread-301747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:03:14.941 [DEBUG] [Thread-301747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:03:14.941 [DEBUG] [Thread-301747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:03:14.945 [DEBUG] [Thread-301747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:03:14.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:03:14.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:03:14.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:03:14.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:03:14.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:03:14.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:03:14.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:03:14.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:03:14.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:03:14.976 [DEBUG] [Thread-301747] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:03:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.418473 -999.00  +23.80  11.91     32   +6.50 1 1 1 1 1   888    0 18.88 89.00 ----- 11.9 11.9 187.6 19.4 31.4 -24.6 30.2 -28.2 30.4 -23.8 31.2 -23.9
2025-12-24T12:03:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:03:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:03:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.418473
2025-12-24T12:03:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:03:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:03:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:03:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:03:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:03:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:03:01', tmtdew=18.9, humidity=28.99, cloud=0.0, wind=17.98, temperature=22.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:02:36.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:03:15.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:03:15.096 [DEBUG] [Thread-301750] [transport.py] [_log()] starting thread (client mode): 0xf57712a0
2025-12-24T12:03:15.096 [DEBUG] [Thread-301750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:03:15.113 [DEBUG] [Thread-301750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:03:15.113 [INFO] [Thread-301750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:03:15.120 [DEBUG] [Thread-301750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:03:15.120 [DEBUG] [Thread-301750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] client lang: <none>
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] server lang: <none>
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] kex follows: False
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] Compression: none
2025-12-24T12:03:15.121 [DEBUG] [Thread-301750] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:03:15.180 [DEBUG] [Thread-301750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:03:15.181 [DEBUG] [Thread-301750] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:03:15.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:03:15.182 [DEBUG] [Thread-301750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:03:15.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:03:15.236 [DEBUG] [Thread-301750] [transport.py] [_log()] userauth is OK
2025-12-24T12:03:15.237 [DEBUG] [Thread-301750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:03:15.237 [DEBUG] [Thread-301750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:03:15.237 [DEBUG] [Thread-301750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:03:15.237 [DEBUG] [Thread-301750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:03:15.265 [INFO] [Thread-301750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:03:15.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:03:15.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:03:16.124 [DEBUG] [Thread-301750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:03:16.124 [DEBUG] [Thread-301750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:03:16.171 [DEBUG] [Thread-301750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:03:16.172 [DEBUG] [Thread-301750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:03:16.180 [DEBUG] [Thread-301750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:03:16.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:03:16.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:03:16.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:03:16.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:03:16.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:03:16.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:03:16.214 [DEBUG] [Thread-301750] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:03:18.984 [DEBUG] [Thread-301752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:03:34.132 [DEBUG] [Thread-301753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:03:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:03:46.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:03:46.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:03:47.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 3, 34), 18.43, 29.66, 0.0, 14.98, 21.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:03:47.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:03:34
2025-12-24T12:03:47.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:03:47.651 [DEBUG] [Thread-301754] [transport.py] [_log()] starting thread (client mode): 0xf5743310
2025-12-24T12:03:47.652 [DEBUG] [Thread-301754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:03:47.667 [DEBUG] [Thread-301754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:03:47.667 [INFO] [Thread-301754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:03:47.672 [DEBUG] [Thread-301754] [transport.py] [_log()] client lang: <none>
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] server lang: <none>
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] kex follows: False
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] Compression: none
2025-12-24T12:03:47.673 [DEBUG] [Thread-301754] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:03:47.710 [DEBUG] [Thread-301754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:03:47.714 [DEBUG] [Thread-301754] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:03:47.715 [DEBUG] [Thread-301754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:03:47.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:03:47.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:03:47.721 [DEBUG] [Thread-301754] [transport.py] [_log()] userauth is OK
2025-12-24T12:03:47.721 [DEBUG] [Thread-301754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:03:47.721 [DEBUG] [Thread-301754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:03:47.721 [DEBUG] [Thread-301754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:03:47.721 [DEBUG] [Thread-301754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:03:47.760 [INFO] [Thread-301754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:03:47.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:03:48.396 [DEBUG] [Thread-301754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:03:48.397 [DEBUG] [Thread-301754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:03:48.398 [DEBUG] [Thread-301754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:03:48.437 [DEBUG] [Thread-301754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:03:48.437 [DEBUG] [Thread-301754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:03:48.440 [DEBUG] [Thread-301754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:03:48.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:03:48.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:03:48.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:03:48.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:03:48.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:03:48.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:03:48.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:03:48.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:03:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:03:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.418820 -999.00  +23.50  12.68     32   +6.20 1 1 1 1 1   888    0 18.91 89.18 ----- 12.7 12.7 217.7 23.4 31.1 -26.0 29.8 -27.4 30.2 -23.8 31.0 -26.7
2025-12-24T12:03:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:03:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:03:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.418820
2025-12-24T12:03:48.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:03:48.482 [DEBUG] [Thread-301754] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:03:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:03:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:03:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:03:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:03:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:03:34', tmtdew=18.43, humidity=29.66, cloud=0.0, wind=14.98, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:03:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:03:48.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:03:48.578 [DEBUG] [Thread-301757] [transport.py] [_log()] starting thread (client mode): 0xfabc5780
2025-12-24T12:03:48.578 [DEBUG] [Thread-301757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:03:48.592 [DEBUG] [Thread-301757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:03:48.592 [INFO] [Thread-301757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:03:48.600 [DEBUG] [Thread-301757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:03:48.600 [DEBUG] [Thread-301757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] client lang: <none>
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] server lang: <none>
2025-12-24T12:03:48.601 [DEBUG] [Thread-301757] [transport.py] [_log()] kex follows: False
2025-12-24T12:03:48.602 [DEBUG] [Thread-301757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:03:48.602 [DEBUG] [Thread-301757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:03:48.602 [DEBUG] [Thread-301757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:03:48.602 [DEBUG] [Thread-301757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:03:48.602 [DEBUG] [Thread-301757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:03:48.602 [DEBUG] [Thread-301757] [transport.py] [_log()] Compression: none
2025-12-24T12:03:48.602 [DEBUG] [Thread-301757] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:03:48.658 [DEBUG] [Thread-301757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:03:48.659 [DEBUG] [Thread-301757] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:03:48.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:03:48.660 [DEBUG] [Thread-301757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:03:48.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:03:48.716 [DEBUG] [Thread-301757] [transport.py] [_log()] userauth is OK
2025-12-24T12:03:48.716 [DEBUG] [Thread-301757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:03:48.717 [DEBUG] [Thread-301757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:03:48.717 [DEBUG] [Thread-301757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:03:48.717 [DEBUG] [Thread-301757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:03:48.730 [INFO] [Thread-301757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:03:48.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:03:48.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:03:49.232 [DEBUG] [Thread-301759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:03:49.577 [DEBUG] [Thread-301757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:03:49.577 [DEBUG] [Thread-301757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:03:49.615 [DEBUG] [Thread-301757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:03:49.615 [DEBUG] [Thread-301757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:03:49.624 [DEBUG] [Thread-301757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:03:49.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:03:49.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')
2025-12-24T12:03:49.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:03:49.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:03:49.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:03:49.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:03:49.662 [DEBUG] [Thread-301757] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:03:53.417 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:03:53.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:04:00.045 [DEBUG] [Thread-301760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:04:04.366 [DEBUG] [Thread-301761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:04:19.463 [DEBUG] [Thread-301762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:04:19.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:04:19.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:04:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:04:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 4, 7), 18.29, 29.92, 0.0, 16.5, 21.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:04:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:04:07
2025-12-24T12:04:20.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:04:21.161 [DEBUG] [Thread-301763] [transport.py] [_log()] starting thread (client mode): 0xf5741bd0
2025-12-24T12:04:21.161 [DEBUG] [Thread-301763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:04:21.164 [DEBUG] [Thread-301763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:04:21.164 [INFO] [Thread-301763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:04:21.167 [DEBUG] [Thread-301763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:04:21.167 [DEBUG] [Thread-301763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:04:21.167 [DEBUG] [Thread-301763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:04:21.167 [DEBUG] [Thread-301763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:04:21.167 [DEBUG] [Thread-301763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:04:21.167 [DEBUG] [Thread-301763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:04:21.167 [DEBUG] [Thread-301763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] client lang: <none>
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] server lang: <none>
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] kex follows: False
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] Compression: none
2025-12-24T12:04:21.168 [DEBUG] [Thread-301763] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:04:21.199 [DEBUG] [Thread-301763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:04:21.202 [DEBUG] [Thread-301763] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:04:21.204 [DEBUG] [Thread-301763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:04:21.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:04:21.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:04:21.209 [DEBUG] [Thread-301763] [transport.py] [_log()] userauth is OK
2025-12-24T12:04:21.210 [DEBUG] [Thread-301763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:04:21.210 [DEBUG] [Thread-301763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:04:21.210 [DEBUG] [Thread-301763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:04:21.210 [DEBUG] [Thread-301763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:04:21.228 [INFO] [Thread-301763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:04:21.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:04:21.854 [DEBUG] [Thread-301763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:04:21.854 [DEBUG] [Thread-301763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:04:21.855 [DEBUG] [Thread-301763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:04:21.895 [DEBUG] [Thread-301763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:04:21.896 [DEBUG] [Thread-301763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:04:21.900 [DEBUG] [Thread-301763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:04:21.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:04:21.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:04:21.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:04:21.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:04:21.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:04:21.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:04:21.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:04:21.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:04:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:04:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.419167 -999.00  +23.40  10.07     32   +6.20 1 1 1 1 1   888    0 19.03 87.22 ----- 10.1 10.1 219.6 20.3 31.0 -26.8 30.0 -26.2 30.1 -24.4 30.9 -27.1
2025-12-24T12:04:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:04:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:04:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.419167
2025-12-24T12:04:21.929 [DEBUG] [Thread-301763] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:04:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:04:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:04:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:04:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:04:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:04:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:04:07', tmtdew=18.29, humidity=29.92, cloud=0.0, wind=16.5, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:03:36.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:04:22.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:04:22.043 [DEBUG] [Thread-301766] [transport.py] [_log()] starting thread (client mode): 0xf572f010
2025-12-24T12:04:22.043 [DEBUG] [Thread-301766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:04:22.057 [DEBUG] [Thread-301766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:04:22.058 [INFO] [Thread-301766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] client lang: <none>
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] server lang: <none>
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] kex follows: False
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:04:22.065 [DEBUG] [Thread-301766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:04:22.066 [DEBUG] [Thread-301766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:04:22.066 [DEBUG] [Thread-301766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:04:22.066 [DEBUG] [Thread-301766] [transport.py] [_log()] Compression: none
2025-12-24T12:04:22.066 [DEBUG] [Thread-301766] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:04:22.126 [DEBUG] [Thread-301766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:04:22.127 [DEBUG] [Thread-301766] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:04:22.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:04:22.128 [DEBUG] [Thread-301766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:04:22.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:04:22.182 [DEBUG] [Thread-301766] [transport.py] [_log()] userauth is OK
2025-12-24T12:04:22.182 [DEBUG] [Thread-301766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:04:22.182 [DEBUG] [Thread-301766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:04:22.182 [DEBUG] [Thread-301766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:04:22.182 [DEBUG] [Thread-301766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:04:22.201 [INFO] [Thread-301766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:04:22.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:04:22.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:04:23.032 [DEBUG] [Thread-301766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:04:23.033 [DEBUG] [Thread-301766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:04:23.080 [DEBUG] [Thread-301766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:04:23.080 [DEBUG] [Thread-301766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:04:23.089 [DEBUG] [Thread-301766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:04:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:04:23.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:04:23.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:04:23.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:04:23.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:04:23.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:04:23.127 [DEBUG] [Thread-301766] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:04:34.565 [DEBUG] [Thread-301768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:04:49.714 [DEBUG] [Thread-301769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:04:53.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:04:53.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:04:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:04:53.559 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:04:53.560 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:04:54.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 4, 40), 17.94, 30.95, 0.0, 11.52, 21.47, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:04:54.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:04:40
2025-12-24T12:04:54.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:04:54.618 [DEBUG] [Thread-301770] [transport.py] [_log()] starting thread (client mode): 0xf572c6a0
2025-12-24T12:04:54.619 [DEBUG] [Thread-301770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:04:54.631 [DEBUG] [Thread-301770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:04:54.631 [INFO] [Thread-301770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:04:54.636 [DEBUG] [Thread-301770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] client lang: <none>
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] server lang: <none>
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] kex follows: False
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] Compression: none
2025-12-24T12:04:54.637 [DEBUG] [Thread-301770] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:04:54.670 [DEBUG] [Thread-301770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:04:54.674 [DEBUG] [Thread-301770] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:04:54.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:04:54.677 [DEBUG] [Thread-301770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:04:54.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:04:54.679 [DEBUG] [Thread-301770] [transport.py] [_log()] userauth is OK
2025-12-24T12:04:54.679 [DEBUG] [Thread-301770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:04:54.679 [DEBUG] [Thread-301770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:04:54.679 [DEBUG] [Thread-301770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:04:54.679 [DEBUG] [Thread-301770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:04:54.712 [INFO] [Thread-301770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:04:54.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:04:55.358 [DEBUG] [Thread-301770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:04:55.358 [DEBUG] [Thread-301770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:04:55.359 [DEBUG] [Thread-301770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:04:55.400 [DEBUG] [Thread-301770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:04:55.400 [DEBUG] [Thread-301770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:04:55.402 [DEBUG] [Thread-301770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:04:55.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:04:55.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:04:55.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:04:55.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:04:55.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:04:55.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:04:55.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:04:55.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.419514 -999.00  +23.40   3.30     33   +6.30 1 1 1 1 1   888    0 18.93 81.16 ----- 3.3 3.3 205.7 15.5 31.0 -24.8 29.9 -24.6 30.0 -23.9 30.9 -24.5
2025-12-24T12:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:04:55.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.419514
2025-12-24T12:04:55.431 [DEBUG] [Thread-301770] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:04:55.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:04:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:04:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:04:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:04:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:04:55.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:04:40', tmtdew=17.94, humidity=30.95, cloud=0.0, wind=11.52, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:04:06.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:04:55.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:04:55.528 [DEBUG] [Thread-301773] [transport.py] [_log()] starting thread (client mode): 0xf5741d80
2025-12-24T12:04:55.529 [DEBUG] [Thread-301773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:04:55.543 [DEBUG] [Thread-301773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:04:55.543 [INFO] [Thread-301773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] client lang: <none>
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] server lang: <none>
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] kex follows: False
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] Compression: none
2025-12-24T12:04:55.551 [DEBUG] [Thread-301773] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:04:55.609 [DEBUG] [Thread-301773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:04:55.610 [DEBUG] [Thread-301773] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:04:55.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:04:55.610 [DEBUG] [Thread-301773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:04:55.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:04:55.670 [DEBUG] [Thread-301773] [transport.py] [_log()] userauth is OK
2025-12-24T12:04:55.670 [DEBUG] [Thread-301773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:04:55.670 [DEBUG] [Thread-301773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:04:55.670 [DEBUG] [Thread-301773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:04:55.670 [DEBUG] [Thread-301773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:04:55.684 [INFO] [Thread-301773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:04:55.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:04:55.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:04:56.519 [DEBUG] [Thread-301773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:04:56.519 [DEBUG] [Thread-301773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:04:56.566 [DEBUG] [Thread-301773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:04:56.567 [DEBUG] [Thread-301773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:04:56.575 [DEBUG] [Thread-301773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:04:56.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:04:56.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:04: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') -> 00000000
2025-12-24T12:04:56.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:04:56.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:04:56.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:04:56.608 [DEBUG] [Thread-301773] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:05:00.277 [DEBUG] [Thread-301775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:05:04.810 [DEBUG] [Thread-301776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:05:20.025 [DEBUG] [Thread-301777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:05:26.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:05:26.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:05:26.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:05:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 5, 13), 18.17, 30.54, 0.0, 12.19, 21.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:05:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:05:13
2025-12-24T12:05:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:05:27.996 [DEBUG] [Thread-301778] [transport.py] [_log()] starting thread (client mode): 0xf5740070
2025-12-24T12:05:27.996 [DEBUG] [Thread-301778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:05:28.009 [DEBUG] [Thread-301778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:05:28.009 [INFO] [Thread-301778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:05:28.015 [DEBUG] [Thread-301778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:05:28.015 [DEBUG] [Thread-301778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] client lang: <none>
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] server lang: <none>
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] kex follows: False
2025-12-24T12:05:28.016 [DEBUG] [Thread-301778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:05:28.017 [DEBUG] [Thread-301778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:05:28.017 [DEBUG] [Thread-301778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:05:28.018 [DEBUG] [Thread-301778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:05:28.018 [DEBUG] [Thread-301778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:05:28.018 [DEBUG] [Thread-301778] [transport.py] [_log()] Compression: none
2025-12-24T12:05:28.018 [DEBUG] [Thread-301778] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:05:28.057 [DEBUG] [Thread-301778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:05:28.062 [DEBUG] [Thread-301778] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:05:28.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:05:28.067 [DEBUG] [Thread-301778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:05:28.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:05:28.071 [DEBUG] [Thread-301778] [transport.py] [_log()] userauth is OK
2025-12-24T12:05:28.071 [DEBUG] [Thread-301778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:05:28.072 [DEBUG] [Thread-301778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:05:28.072 [DEBUG] [Thread-301778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:05:28.072 [DEBUG] [Thread-301778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:05:28.100 [INFO] [Thread-301778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:05:28.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:05:28.752 [DEBUG] [Thread-301778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:05:28.753 [DEBUG] [Thread-301778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:05:28.754 [DEBUG] [Thread-301778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:05:28.794 [DEBUG] [Thread-301778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:05:28.794 [DEBUG] [Thread-301778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:05:28.797 [DEBUG] [Thread-301778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:05:28.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:05:28.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:05:28.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:05:28.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:05:28.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:05:28.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:05:28.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:05:28.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:05:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:05:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.419861 -999.00  +23.70  10.63     32   +6.30 1 1 1 1 1   888    0 19.02 80.47 ----- 10.6 10.6 211.8 12.8 31.0 -25.1 30.0 -24.5 30.1 -23.0 30.9 -24.4
2025-12-24T12:05:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:05:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:05:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.419861
2025-12-24T12:05:28.834 [DEBUG] [Thread-301778] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:05:28.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:05:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:05:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:05:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:05:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:05:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:05:13', tmtdew=18.17, humidity=30.54, cloud=0.0, wind=12.19, temperature=21.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:04:35.990', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:05:28.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:05:28.945 [DEBUG] [Thread-301781] [transport.py] [_log()] starting thread (client mode): 0xf5771900
2025-12-24T12:05:28.945 [DEBUG] [Thread-301781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:05:28.960 [DEBUG] [Thread-301781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:05:28.960 [INFO] [Thread-301781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] client lang: <none>
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] server lang: <none>
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] kex follows: False
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] Compression: none
2025-12-24T12:05:28.967 [DEBUG] [Thread-301781] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:05:29.025 [DEBUG] [Thread-301781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:05:29.025 [DEBUG] [Thread-301781] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:05:29.025 [DEBUG] [Thread-301781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:05:29.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:05:29.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:05:29.083 [DEBUG] [Thread-301781] [transport.py] [_log()] userauth is OK
2025-12-24T12:05:29.083 [DEBUG] [Thread-301781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:05:29.083 [DEBUG] [Thread-301781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:05:29.083 [DEBUG] [Thread-301781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:05:29.083 [DEBUG] [Thread-301781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:05:29.097 [INFO] [Thread-301781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:05:29.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:05:29.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:05:30.014 [DEBUG] [Thread-301781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:05:30.014 [DEBUG] [Thread-301781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:05:30.052 [DEBUG] [Thread-301781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:05:30.052 [DEBUG] [Thread-301781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:05:30.062 [DEBUG] [Thread-301781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:05:30.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:05:30.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')
2025-12-24T12:05:30.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:05:30.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:05:30.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:05:30.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:05:30.099 [DEBUG] [Thread-301781] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:05:35.122 [DEBUG] [Thread-301783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:05:50.236 [DEBUG] [Thread-301784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:05:53.703 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:05:53.706 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:06:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:06:00.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:06:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:06:00.485 [DEBUG] [Thread-301785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:06:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 5, 46), 18.33, 29.99, 0.0, 15.51, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:06:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:05:46
2025-12-24T12:06:01.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:06:01.872 [DEBUG] [Thread-301786] [transport.py] [_log()] starting thread (client mode): 0xf57ab730
2025-12-24T12:06:01.873 [DEBUG] [Thread-301786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:06:01.885 [DEBUG] [Thread-301786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:06:01.885 [INFO] [Thread-301786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:06:01.892 [DEBUG] [Thread-301786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:06:01.892 [DEBUG] [Thread-301786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:06:01.892 [DEBUG] [Thread-301786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:06:01.892 [DEBUG] [Thread-301786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:06:01.892 [DEBUG] [Thread-301786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:06:01.892 [DEBUG] [Thread-301786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:06:01.892 [DEBUG] [Thread-301786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:06:01.893 [DEBUG] [Thread-301786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:06:01.893 [DEBUG] [Thread-301786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:06:01.893 [DEBUG] [Thread-301786] [transport.py] [_log()] client lang: <none>
2025-12-24T12:06:01.893 [DEBUG] [Thread-301786] [transport.py] [_log()] server lang: <none>
2025-12-24T12:06:01.893 [DEBUG] [Thread-301786] [transport.py] [_log()] kex follows: False
2025-12-24T12:06:01.893 [DEBUG] [Thread-301786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:06:01.894 [DEBUG] [Thread-301786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:06:01.894 [DEBUG] [Thread-301786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:06:01.894 [DEBUG] [Thread-301786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:06:01.894 [DEBUG] [Thread-301786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:06:01.894 [DEBUG] [Thread-301786] [transport.py] [_log()] Compression: none
2025-12-24T12:06:01.895 [DEBUG] [Thread-301786] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:06:01.936 [DEBUG] [Thread-301786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:06:01.941 [DEBUG] [Thread-301786] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:06:01.943 [DEBUG] [Thread-301786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:06:01.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:06:01.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:06:01.948 [DEBUG] [Thread-301786] [transport.py] [_log()] userauth is OK
2025-12-24T12:06:01.948 [DEBUG] [Thread-301786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:06:01.949 [DEBUG] [Thread-301786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:06:01.949 [DEBUG] [Thread-301786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:06:01.949 [DEBUG] [Thread-301786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:06:01.987 [INFO] [Thread-301786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:06:01.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:06:02.686 [DEBUG] [Thread-301786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:06:02.686 [DEBUG] [Thread-301786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:06:02.687 [DEBUG] [Thread-301786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:06:02.727 [DEBUG] [Thread-301786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:06:02.727 [DEBUG] [Thread-301786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:06:02.730 [DEBUG] [Thread-301786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:06:02.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:06:02.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:06:02.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:06:02.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:06:02.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:06:02.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:06:02.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:06:02.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:06:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:06:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.420208 -999.00  +24.10  11.78     32   +6.40 1 1 1 1 1   888    0 19.28 87.67 ----- 11.8 11.8 179.9 14.6 31.3 -25.3 30.1 -23.8 30.0 -22.4 31.1 -22.8
2025-12-24T12:06:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:06:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:06:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.420208
2025-12-24T12:06:02.766 [DEBUG] [Thread-301786] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:06:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:06:02.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:06:02.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:06:02.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:06:02.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:06:02.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:05:46', tmtdew=18.33, humidity=29.99, cloud=0.0, wind=15.51, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:05:05.971', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:06:02.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:06:02.886 [DEBUG] [Thread-301789] [transport.py] [_log()] starting thread (client mode): 0xf81e4040
2025-12-24T12:06:02.886 [DEBUG] [Thread-301789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:06:02.902 [DEBUG] [Thread-301789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:06:02.902 [INFO] [Thread-301789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:06:02.909 [DEBUG] [Thread-301789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:06:02.910 [DEBUG] [Thread-301789] [transport.py] [_log()] client lang: <none>
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] server lang: <none>
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] kex follows: False
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] Compression: none
2025-12-24T12:06:02.911 [DEBUG] [Thread-301789] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:06:02.971 [DEBUG] [Thread-301789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:06:02.971 [DEBUG] [Thread-301789] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:06:02.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:06:02.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:06:02.973 [DEBUG] [Thread-301789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:06:03.027 [DEBUG] [Thread-301789] [transport.py] [_log()] userauth is OK
2025-12-24T12:06:03.027 [DEBUG] [Thread-301789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:06:03.028 [DEBUG] [Thread-301789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:06:03.028 [DEBUG] [Thread-301789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:06:03.028 [DEBUG] [Thread-301789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:06:03.051 [INFO] [Thread-301789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:06:03.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:06:03.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:06:03.913 [DEBUG] [Thread-301789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:06:03.914 [DEBUG] [Thread-301789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:06:03.952 [DEBUG] [Thread-301789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:06:03.952 [DEBUG] [Thread-301789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:06:03.962 [DEBUG] [Thread-301789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:06:03.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:06:03.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:06:03.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:06:03.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:06:03.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:06:03.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:06:03.999 [DEBUG] [Thread-301789] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:06:05.301 [DEBUG] [Thread-301791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:06:20.463 [DEBUG] [Thread-301792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:06:33.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:06:33.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:06: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
2025-12-24T12:06:35.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 6, 19), 18.19, 30.24, 0.0, 15.42, 21.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:06:35.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:06:19
2025-12-24T12:06:35.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:06:35.552 [DEBUG] [Thread-301793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:06:35.703 [DEBUG] [Thread-301794] [transport.py] [_log()] starting thread (client mode): 0xf574f670
2025-12-24T12:06:35.703 [DEBUG] [Thread-301794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:06:35.716 [DEBUG] [Thread-301794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:06:35.716 [INFO] [Thread-301794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] client lang: <none>
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] server lang: <none>
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] kex follows: False
2025-12-24T12:06:35.720 [DEBUG] [Thread-301794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:06:35.721 [DEBUG] [Thread-301794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:06:35.721 [DEBUG] [Thread-301794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:06:35.721 [DEBUG] [Thread-301794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:06:35.721 [DEBUG] [Thread-301794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:06:35.721 [DEBUG] [Thread-301794] [transport.py] [_log()] Compression: none
2025-12-24T12:06:35.721 [DEBUG] [Thread-301794] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:06:35.752 [DEBUG] [Thread-301794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:06:35.755 [DEBUG] [Thread-301794] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:06:35.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:06:35.757 [DEBUG] [Thread-301794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:06:35.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:06:35.760 [DEBUG] [Thread-301794] [transport.py] [_log()] userauth is OK
2025-12-24T12:06:35.760 [DEBUG] [Thread-301794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:06:35.760 [DEBUG] [Thread-301794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:06:35.760 [DEBUG] [Thread-301794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:06:35.760 [DEBUG] [Thread-301794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:06:35.777 [INFO] [Thread-301794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:06:35.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:06:36.397 [DEBUG] [Thread-301794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:06:36.398 [DEBUG] [Thread-301794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:06:36.399 [DEBUG] [Thread-301794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:06:36.438 [DEBUG] [Thread-301794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:06:36.438 [DEBUG] [Thread-301794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:06:36.442 [DEBUG] [Thread-301794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:06:36.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:06:36.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:06:36.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:06:36.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:06:36.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:06:36.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:06:36.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:06:36.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:06:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:06:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.420903 -999.00  +24.10   7.91     31   +6.10 1 1 1 1 1   888    0 19.34 83.16 ----- 7.9 7.9 162.5 13.5 31.4 -25.0 30.4 -24.1 30.3 -22.9 31.2 -23.1
2025-12-24T12:06:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:06:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:06:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.420903
2025-12-24T12:06:36.479 [DEBUG] [Thread-301794] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:06:36.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:06:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:06:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:06:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:06:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:06:36.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:06:19', tmtdew=18.19, humidity=30.24, cloud=0.0, wind=15.42, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:06:06.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:06:36.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:06:36.599 [DEBUG] [Thread-301797] [transport.py] [_log()] starting thread (client mode): 0xf574c820
2025-12-24T12:06:36.599 [DEBUG] [Thread-301797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:06:36.614 [DEBUG] [Thread-301797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:06:36.614 [INFO] [Thread-301797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:06:36.622 [DEBUG] [Thread-301797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] client lang: <none>
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] server lang: <none>
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] kex follows: False
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:06:36.623 [DEBUG] [Thread-301797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:06:36.624 [DEBUG] [Thread-301797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:06:36.624 [DEBUG] [Thread-301797] [transport.py] [_log()] Compression: none
2025-12-24T12:06:36.624 [DEBUG] [Thread-301797] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:06:36.683 [DEBUG] [Thread-301797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:06:36.684 [DEBUG] [Thread-301797] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:06:36.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:06:36.685 [DEBUG] [Thread-301797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:06:36.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:06:36.741 [DEBUG] [Thread-301797] [transport.py] [_log()] userauth is OK
2025-12-24T12:06:36.741 [DEBUG] [Thread-301797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:06:36.741 [DEBUG] [Thread-301797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:06:36.741 [DEBUG] [Thread-301797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:06:36.741 [DEBUG] [Thread-301797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:06:36.761 [INFO] [Thread-301797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:06:36.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:06:36.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:06:37.615 [DEBUG] [Thread-301797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:06:37.615 [DEBUG] [Thread-301797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:06:37.654 [DEBUG] [Thread-301797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:06:37.654 [DEBUG] [Thread-301797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:06:37.663 [DEBUG] [Thread-301797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:06:37.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:06:37.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:06:37.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:06:37.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:06:37.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:06:37.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:06:37.702 [DEBUG] [Thread-301797] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:06:50.593 [DEBUG] [Thread-301799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:06:53.849 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:06:53.850 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:07:00.723 [DEBUG] [Thread-301800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:07:05.680 [DEBUG] [Thread-301801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:07:07.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:07:07.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:07: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
2025-12-24T12:07:09.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 6, 52), 18.31, 30.09, 0.0, 16.8, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:07:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:06:52
2025-12-24T12:07:09.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:07:09.455 [DEBUG] [Thread-301802] [transport.py] [_log()] starting thread (client mode): 0xf574fc70
2025-12-24T12:07:09.456 [DEBUG] [Thread-301802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:07:09.462 [DEBUG] [Thread-301802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:07:09.462 [INFO] [Thread-301802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:07:09.466 [DEBUG] [Thread-301802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:07:09.466 [DEBUG] [Thread-301802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:07:09.466 [DEBUG] [Thread-301802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:07:09.466 [DEBUG] [Thread-301802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:07:09.466 [DEBUG] [Thread-301802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:07:09.466 [DEBUG] [Thread-301802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:07:09.467 [DEBUG] [Thread-301802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:07:09.467 [DEBUG] [Thread-301802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:07:09.467 [DEBUG] [Thread-301802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:07:09.467 [DEBUG] [Thread-301802] [transport.py] [_log()] client lang: <none>
2025-12-24T12:07:09.467 [DEBUG] [Thread-301802] [transport.py] [_log()] server lang: <none>
2025-12-24T12:07:09.467 [DEBUG] [Thread-301802] [transport.py] [_log()] kex follows: False
2025-12-24T12:07:09.467 [DEBUG] [Thread-301802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:07:09.467 [DEBUG] [Thread-301802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:07:09.468 [DEBUG] [Thread-301802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:07:09.468 [DEBUG] [Thread-301802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:07:09.468 [DEBUG] [Thread-301802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:07:09.468 [DEBUG] [Thread-301802] [transport.py] [_log()] Compression: none
2025-12-24T12:07:09.468 [DEBUG] [Thread-301802] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:07:09.503 [DEBUG] [Thread-301802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:07:09.507 [DEBUG] [Thread-301802] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:07:09.509 [DEBUG] [Thread-301802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:07:09.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:07:09.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:07:09.514 [DEBUG] [Thread-301802] [transport.py] [_log()] userauth is OK
2025-12-24T12:07:09.515 [DEBUG] [Thread-301802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:07:09.515 [DEBUG] [Thread-301802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:07:09.515 [DEBUG] [Thread-301802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:07:09.515 [DEBUG] [Thread-301802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:07:09.542 [INFO] [Thread-301802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:07:09.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:07:10.361 [DEBUG] [Thread-301802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:07:10.361 [DEBUG] [Thread-301802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:07:10.362 [DEBUG] [Thread-301802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:07:10.401 [DEBUG] [Thread-301802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:07:10.402 [DEBUG] [Thread-301802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:07:10.404 [DEBUG] [Thread-301802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:07:10.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:07:10.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:07:10.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:07:10.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:07:10.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:07:10.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:07:10.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:07:10.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:07:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:07:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.421251 -999.00  +23.90  11.12     31   +6.10 1 1 1 1 1   888    0 19.40 90.19 ----- 11.1 11.1 149.2 16.5 31.5 -25.4 30.5 -24.5 30.4 -22.4 31.3 -24.4
2025-12-24T12:07:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:07:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:07:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.421251
2025-12-24T12:07:10.432 [DEBUG] [Thread-301802] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:07:10.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:07:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:07:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:07:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:07:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:07:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:06:52', tmtdew=18.31, humidity=30.09, cloud=0.0, wind=16.8, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:06:36.086', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:07:10.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:07:10.531 [DEBUG] [Thread-301805] [transport.py] [_log()] starting thread (client mode): 0xf572cdf0
2025-12-24T12:07:10.531 [DEBUG] [Thread-301805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:07:10.546 [DEBUG] [Thread-301805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:07:10.546 [INFO] [Thread-301805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] client lang: <none>
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] server lang: <none>
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] kex follows: False
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:07:10.554 [DEBUG] [Thread-301805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:07:10.555 [DEBUG] [Thread-301805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:07:10.555 [DEBUG] [Thread-301805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:07:10.555 [DEBUG] [Thread-301805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:07:10.555 [DEBUG] [Thread-301805] [transport.py] [_log()] Compression: none
2025-12-24T12:07:10.555 [DEBUG] [Thread-301805] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:07:10.611 [DEBUG] [Thread-301805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:07:10.612 [DEBUG] [Thread-301805] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:07:10.612 [DEBUG] [Thread-301805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:07:10.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:07:10.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:07:10.669 [DEBUG] [Thread-301805] [transport.py] [_log()] userauth is OK
2025-12-24T12:07:10.669 [DEBUG] [Thread-301805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:07:10.669 [DEBUG] [Thread-301805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:07:10.669 [DEBUG] [Thread-301805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:07:10.669 [DEBUG] [Thread-301805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:07:10.689 [INFO] [Thread-301805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:07:10.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:07:10.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:07:11.539 [DEBUG] [Thread-301805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:07:11.539 [DEBUG] [Thread-301805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:07:11.578 [DEBUG] [Thread-301805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:07:11.578 [DEBUG] [Thread-301805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:07:11.587 [DEBUG] [Thread-301805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:07:11.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:07: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')
2025-12-24T12:07:11.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:07:11.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:07:11.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:07:11.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:07:11.619 [DEBUG] [Thread-301805] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:07:20.748 [DEBUG] [Thread-301807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:07:35.935 [DEBUG] [Thread-301808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:07:41.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:07:41.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:07:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:07:42.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 7, 25), 18.53, 29.69, 0.0, 15.12, 22.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:07:42.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:07:25
2025-12-24T12:07:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:07:42.902 [DEBUG] [Thread-301809] [transport.py] [_log()] starting thread (client mode): 0xf574edd0
2025-12-24T12:07:42.903 [DEBUG] [Thread-301809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:07:42.917 [DEBUG] [Thread-301809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:07:42.917 [INFO] [Thread-301809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] client lang: <none>
2025-12-24T12:07:42.923 [DEBUG] [Thread-301809] [transport.py] [_log()] server lang: <none>
2025-12-24T12:07:42.924 [DEBUG] [Thread-301809] [transport.py] [_log()] kex follows: False
2025-12-24T12:07:42.924 [DEBUG] [Thread-301809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:07:42.924 [DEBUG] [Thread-301809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:07:42.924 [DEBUG] [Thread-301809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:07:42.924 [DEBUG] [Thread-301809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:07:42.924 [DEBUG] [Thread-301809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:07:42.924 [DEBUG] [Thread-301809] [transport.py] [_log()] Compression: none
2025-12-24T12:07:42.924 [DEBUG] [Thread-301809] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:07:42.954 [DEBUG] [Thread-301809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:07:42.957 [DEBUG] [Thread-301809] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:07:42.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:07:42.960 [DEBUG] [Thread-301809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:07:42.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:07:42.962 [DEBUG] [Thread-301809] [transport.py] [_log()] userauth is OK
2025-12-24T12:07:42.963 [DEBUG] [Thread-301809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:07:42.963 [DEBUG] [Thread-301809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:07:42.963 [DEBUG] [Thread-301809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:07:42.963 [DEBUG] [Thread-301809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:07:42.981 [INFO] [Thread-301809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:07:42.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:07:43.585 [DEBUG] [Thread-301809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:07:43.585 [DEBUG] [Thread-301809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:07:43.586 [DEBUG] [Thread-301809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:07:43.627 [DEBUG] [Thread-301809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:07:43.627 [DEBUG] [Thread-301809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:07:43.629 [DEBUG] [Thread-301809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:07:43.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:07:43.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:07:43.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:07:43.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:07:43.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:07:43.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:07:43.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:07:43.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:07:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:07:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.421598 -999.00  +23.30  12.10     32   +5.90 1 1 1 1 1   888    0 19.10 81.99 ----- 12.1 12.1 157.8 21.0 31.2 -26.4 29.8 -34.1 30.1 -26.2 31.0 -25.5
2025-12-24T12:07:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:07:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:07:43.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.421598
2025-12-24T12:07:43.657 [DEBUG] [Thread-301809] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:07:43.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:07:43.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:07:43.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:07:43.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:07:43.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:07:43.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:07:25', tmtdew=18.53, humidity=29.69, cloud=0.0, wind=15.12, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:07:06.067', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:07:43.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:07:43.755 [DEBUG] [Thread-301812] [transport.py] [_log()] starting thread (client mode): 0xf57411b0
2025-12-24T12:07:43.755 [DEBUG] [Thread-301812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:07:43.770 [DEBUG] [Thread-301812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:07:43.770 [INFO] [Thread-301812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] client lang: <none>
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] server lang: <none>
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] kex follows: False
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] Compression: none
2025-12-24T12:07:43.778 [DEBUG] [Thread-301812] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:07:43.836 [DEBUG] [Thread-301812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:07:43.836 [DEBUG] [Thread-301812] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:07:43.837 [DEBUG] [Thread-301812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:07:43.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:07:43.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:07:43.894 [DEBUG] [Thread-301812] [transport.py] [_log()] userauth is OK
2025-12-24T12:07:43.894 [DEBUG] [Thread-301812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:07:43.894 [DEBUG] [Thread-301812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:07:43.894 [DEBUG] [Thread-301812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:07:43.894 [DEBUG] [Thread-301812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:07:43.908 [INFO] [Thread-301812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:07:43.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:07:43.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:07:44.729 [DEBUG] [Thread-301812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:07:44.730 [DEBUG] [Thread-301812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:07:44.777 [DEBUG] [Thread-301812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:07:44.778 [DEBUG] [Thread-301812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:07:44.786 [DEBUG] [Thread-301812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:07:44.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:07:44.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:07:44.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:07:44.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:07:44.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:07:44.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:07:44.819 [DEBUG] [Thread-301812] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:07:51.046 [DEBUG] [Thread-301814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:07:53.998 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:07:54.000 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:08:00.955 [DEBUG] [Thread-301815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:08:06.254 [DEBUG] [Thread-301816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:08:14.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:08:14.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:08:14.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:08:15.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 7, 58), 18.82, 29.27, 0.0, 10.57, 22.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:08:15.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:07:58
2025-12-24T12:08:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:08:16.167 [DEBUG] [Thread-301817] [transport.py] [_log()] starting thread (client mode): 0xf574c340
2025-12-24T12:08:16.168 [DEBUG] [Thread-301817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:08:16.182 [DEBUG] [Thread-301817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:08:16.182 [INFO] [Thread-301817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:08:16.188 [DEBUG] [Thread-301817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:08:16.188 [DEBUG] [Thread-301817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] client lang: <none>
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] server lang: <none>
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] kex follows: False
2025-12-24T12:08:16.189 [DEBUG] [Thread-301817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:08:16.190 [DEBUG] [Thread-301817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:08:16.190 [DEBUG] [Thread-301817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:08:16.191 [DEBUG] [Thread-301817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:08:16.191 [DEBUG] [Thread-301817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:08:16.191 [DEBUG] [Thread-301817] [transport.py] [_log()] Compression: none
2025-12-24T12:08:16.191 [DEBUG] [Thread-301817] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:08:16.225 [DEBUG] [Thread-301817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:08:16.228 [DEBUG] [Thread-301817] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:08:16.230 [DEBUG] [Thread-301817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:08:16.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:08:16.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:08:16.234 [DEBUG] [Thread-301817] [transport.py] [_log()] userauth is OK
2025-12-24T12:08:16.235 [DEBUG] [Thread-301817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:08:16.235 [DEBUG] [Thread-301817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:08:16.235 [DEBUG] [Thread-301817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:08:16.235 [DEBUG] [Thread-301817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:08:16.266 [INFO] [Thread-301817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:08:16.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:08:17.019 [DEBUG] [Thread-301817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:08:17.020 [DEBUG] [Thread-301817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:08:17.020 [DEBUG] [Thread-301817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:08:17.061 [DEBUG] [Thread-301817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:08:17.061 [DEBUG] [Thread-301817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:08:17.065 [DEBUG] [Thread-301817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:08:17.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:08:17.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:08:17.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:08:17.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:08:17.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:08:17.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:08:17.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:08:17.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:08:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:08:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.421945 -999.00  +23.50  19.26     32   +6.10 1 1 1 1 1   888    0 19.17 79.96 ----- 19.3 19.3 174.4 23.8 31.1 -26.2 30.0 -25.3 30.2 -23.5 31.0 -25.7
2025-12-24T12:08:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:08:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:08:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.421945
2025-12-24T12:08:17.099 [DEBUG] [Thread-301817] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:08:17.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:08:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:08:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:08:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:08:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:08:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:07:58', tmtdew=18.82, humidity=29.27, cloud=0.0, wind=10.57, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:07:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:08:17.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:08:17.202 [DEBUG] [Thread-301820] [transport.py] [_log()] starting thread (client mode): 0xf574e6b0
2025-12-24T12:08:17.202 [DEBUG] [Thread-301820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:08:17.217 [DEBUG] [Thread-301820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:08:17.218 [INFO] [Thread-301820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:08:17.225 [DEBUG] [Thread-301820] [transport.py] [_log()] client lang: <none>
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] server lang: <none>
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] kex follows: False
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] Compression: none
2025-12-24T12:08:17.226 [DEBUG] [Thread-301820] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:08:17.285 [DEBUG] [Thread-301820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:08:17.285 [DEBUG] [Thread-301820] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:08:17.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:08:17.286 [DEBUG] [Thread-301820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:08:17.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:08:17.341 [DEBUG] [Thread-301820] [transport.py] [_log()] userauth is OK
2025-12-24T12:08:17.341 [DEBUG] [Thread-301820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:08:17.341 [DEBUG] [Thread-301820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:08:17.341 [DEBUG] [Thread-301820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:08:17.341 [DEBUG] [Thread-301820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:08:17.355 [INFO] [Thread-301820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:08:17.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:08:17.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:08:18.242 [DEBUG] [Thread-301820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:08:18.242 [DEBUG] [Thread-301820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:08:18.289 [DEBUG] [Thread-301820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:08:18.289 [DEBUG] [Thread-301820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:08:18.298 [DEBUG] [Thread-301820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:08:18.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:08:18.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')
2025-12-24T12:08:18.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
2025-12-24T12:08:18.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:08:18.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:08:18.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:08:18.333 [DEBUG] [Thread-301820] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:08:21.308 [DEBUG] [Thread-301822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:08:36.391 [DEBUG] [Thread-301823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:08:48.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:08:48.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:08:48.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
2025-12-24T12:08:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 8, 32), 18.79, 29.3, 0.0, 13.45, 22.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:08:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:08:32
2025-12-24T12:08:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:08:49.675 [DEBUG] [Thread-301824] [transport.py] [_log()] starting thread (client mode): 0xf574fac0
2025-12-24T12:08:49.675 [DEBUG] [Thread-301824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:08:49.690 [DEBUG] [Thread-301824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:08:49.690 [INFO] [Thread-301824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:08:49.696 [DEBUG] [Thread-301824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:08:49.697 [DEBUG] [Thread-301824] [transport.py] [_log()] client lang: <none>
2025-12-24T12:08:49.697 [DEBUG] [Thread-301824] [transport.py] [_log()] server lang: <none>
2025-12-24T12:08:49.697 [DEBUG] [Thread-301824] [transport.py] [_log()] kex follows: False
2025-12-24T12:08:49.697 [DEBUG] [Thread-301824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:08:49.698 [DEBUG] [Thread-301824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:08:49.698 [DEBUG] [Thread-301824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:08:49.698 [DEBUG] [Thread-301824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:08:49.698 [DEBUG] [Thread-301824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:08:49.698 [DEBUG] [Thread-301824] [transport.py] [_log()] Compression: none
2025-12-24T12:08:49.699 [DEBUG] [Thread-301824] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:08:49.732 [DEBUG] [Thread-301824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:08:49.737 [DEBUG] [Thread-301824] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:08:49.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:08:49.740 [DEBUG] [Thread-301824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:08:49.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:08:49.744 [DEBUG] [Thread-301824] [transport.py] [_log()] userauth is OK
2025-12-24T12:08:49.745 [DEBUG] [Thread-301824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:08:49.745 [DEBUG] [Thread-301824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:08:49.746 [DEBUG] [Thread-301824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:08:49.746 [DEBUG] [Thread-301824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:08:49.791 [INFO] [Thread-301824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:08:49.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:08:50.459 [DEBUG] [Thread-301824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:08:50.468 [DEBUG] [Thread-301824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:08:50.469 [DEBUG] [Thread-301824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:08:50.501 [DEBUG] [Thread-301824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:08:50.501 [DEBUG] [Thread-301824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:08:50.503 [DEBUG] [Thread-301824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:08:50.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:08:50.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:08:50.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:08:50.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:08:50.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:08:50.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:08:50.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:08:50.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:08:50.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:08:50.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.422292 -999.00  +23.80  15.18     32   +6.20 1 1 1 1 1   888    0 19.13 80.61 ----- 15.2 15.2 187.0 21.7 31.1 -25.2 29.8 -27.4 30.0 -24.9 30.9 -24.6
2025-12-24T12:08:50.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:08:50.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:08:50.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.422292
2025-12-24T12:08:50.532 [DEBUG] [Thread-301824] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:08:50.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:08:50.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:08:50.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:08:50.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:08:50.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:08:50.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:08:32', tmtdew=18.79, humidity=29.3, cloud=0.0, wind=13.45, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:08:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:08:50.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:08:50.630 [DEBUG] [Thread-301827] [transport.py] [_log()] starting thread (client mode): 0xf57ab460
2025-12-24T12:08:50.630 [DEBUG] [Thread-301827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:08:50.645 [DEBUG] [Thread-301827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:08:50.645 [INFO] [Thread-301827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:08:50.652 [DEBUG] [Thread-301827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:08:50.652 [DEBUG] [Thread-301827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] client lang: <none>
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] server lang: <none>
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] kex follows: False
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] Compression: none
2025-12-24T12:08:50.653 [DEBUG] [Thread-301827] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:08:50.711 [DEBUG] [Thread-301827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:08:50.712 [DEBUG] [Thread-301827] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:08:50.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:08:50.713 [DEBUG] [Thread-301827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:08:50.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:08:50.767 [DEBUG] [Thread-301827] [transport.py] [_log()] userauth is OK
2025-12-24T12:08:50.767 [DEBUG] [Thread-301827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:08:50.768 [DEBUG] [Thread-301827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:08:50.768 [DEBUG] [Thread-301827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:08:50.768 [DEBUG] [Thread-301827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:08:50.786 [INFO] [Thread-301827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:08:50.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:08:50.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:08:51.437 [DEBUG] [Thread-301829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:08:51.640 [DEBUG] [Thread-301827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:08:51.640 [DEBUG] [Thread-301827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:08:51.687 [DEBUG] [Thread-301827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:08:51.687 [DEBUG] [Thread-301827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:08:51.696 [DEBUG] [Thread-301827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:08:51.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:08:51.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:08:51.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:08:51.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:08:51.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:08:51.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:08:51.734 [DEBUG] [Thread-301827] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:08:54.141 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:08:54.143 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:09:01.250 [DEBUG] [Thread-301830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:09:06.506 [DEBUG] [Thread-301831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:09:21.593 [DEBUG] [Thread-301832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:09:21.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:09:21.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:09:21.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:09:23.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 9, 5), 18.73, 29.47, 0.0, 13.29, 22.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:09:23.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:09:05
2025-12-24T12:09:23.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:09:23.698 [DEBUG] [Thread-301833] [transport.py] [_log()] starting thread (client mode): 0xf57a86d0
2025-12-24T12:09:23.699 [DEBUG] [Thread-301833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:09:23.712 [DEBUG] [Thread-301833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:09:23.712 [INFO] [Thread-301833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:09:23.718 [DEBUG] [Thread-301833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:09:23.719 [DEBUG] [Thread-301833] [transport.py] [_log()] client lang: <none>
2025-12-24T12:09:23.720 [DEBUG] [Thread-301833] [transport.py] [_log()] server lang: <none>
2025-12-24T12:09:23.720 [DEBUG] [Thread-301833] [transport.py] [_log()] kex follows: False
2025-12-24T12:09:23.720 [DEBUG] [Thread-301833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:09:23.721 [DEBUG] [Thread-301833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:09:23.721 [DEBUG] [Thread-301833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:09:23.721 [DEBUG] [Thread-301833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:09:23.721 [DEBUG] [Thread-301833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:09:23.722 [DEBUG] [Thread-301833] [transport.py] [_log()] Compression: none
2025-12-24T12:09:23.722 [DEBUG] [Thread-301833] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:09:23.759 [DEBUG] [Thread-301833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:09:23.762 [DEBUG] [Thread-301833] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:09:23.763 [DEBUG] [Thread-301833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:09:23.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:09:23.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:09:23.769 [DEBUG] [Thread-301833] [transport.py] [_log()] userauth is OK
2025-12-24T12:09:23.769 [DEBUG] [Thread-301833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:09:23.769 [DEBUG] [Thread-301833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:09:23.769 [DEBUG] [Thread-301833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:09:23.769 [DEBUG] [Thread-301833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:09:23.798 [INFO] [Thread-301833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:09:23.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:09:24.444 [DEBUG] [Thread-301833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:09:24.444 [DEBUG] [Thread-301833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:09:24.445 [DEBUG] [Thread-301833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:09:24.486 [DEBUG] [Thread-301833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:09:24.486 [DEBUG] [Thread-301833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:09:24.488 [DEBUG] [Thread-301833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:09:24.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:09:24.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:09:24.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:09:24.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:09:24.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:09:24.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:09:24.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:09:24.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:09:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:09:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.422639 -999.00  +23.50  19.04     32   +5.90 1 1 1 1 1   888    0 19.17 83.57 ----- 19.0 19.0 179.8 25.3 31.1 -26.0 29.8 -24.1 30.0 -23.3 31.0 -24.2
2025-12-24T12:09:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:09:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:09:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.422639
2025-12-24T12:09:24.516 [DEBUG] [Thread-301833] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:09:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:09:24.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:09:24.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:09:24.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:09:24.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:09:24.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:09:05', tmtdew=18.73, humidity=29.47, cloud=0.0, wind=13.29, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:08:36.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:09:24.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:09:24.612 [DEBUG] [Thread-301836] [transport.py] [_log()] starting thread (client mode): 0xf574c190
2025-12-24T12:09:24.612 [DEBUG] [Thread-301836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:09:24.629 [DEBUG] [Thread-301836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:09:24.629 [INFO] [Thread-301836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:09:24.636 [DEBUG] [Thread-301836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:09:24.636 [DEBUG] [Thread-301836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:09:24.636 [DEBUG] [Thread-301836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] client lang: <none>
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] server lang: <none>
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] kex follows: False
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] Compression: none
2025-12-24T12:09:24.637 [DEBUG] [Thread-301836] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:09:24.698 [DEBUG] [Thread-301836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:09:24.698 [DEBUG] [Thread-301836] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:09:24.698 [DEBUG] [Thread-301836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:09:24.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:09:24.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:09:24.754 [DEBUG] [Thread-301836] [transport.py] [_log()] userauth is OK
2025-12-24T12:09:24.755 [DEBUG] [Thread-301836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:09:24.755 [DEBUG] [Thread-301836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:09:24.755 [DEBUG] [Thread-301836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:09:24.755 [DEBUG] [Thread-301836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:09:24.769 [INFO] [Thread-301836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:09:24.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:09:24.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:09:25.661 [DEBUG] [Thread-301836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:09:25.662 [DEBUG] [Thread-301836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:09:25.709 [DEBUG] [Thread-301836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:09:25.709 [DEBUG] [Thread-301836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:09:25.718 [DEBUG] [Thread-301836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:09:25.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:09:25.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:09:25.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:09:25.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:09:25.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:09:25.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:09:25.752 [DEBUG] [Thread-301836] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:09:36.674 [DEBUG] [Thread-301838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:09:51.783 [DEBUG] [Thread-301839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:09:54.283 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:09:54.284 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:09:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:09:55.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:09:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:09:56.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 9, 37), 19.26, 28.53, 0.0, 17.29, 22.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:09:56.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:09:37
2025-12-24T12:09:56.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:09:57.108 [DEBUG] [Thread-301840] [transport.py] [_log()] starting thread (client mode): 0xf574fc40
2025-12-24T12:09:57.108 [DEBUG] [Thread-301840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:09:57.112 [DEBUG] [Thread-301840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:09:57.112 [INFO] [Thread-301840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] client lang: <none>
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] server lang: <none>
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] kex follows: False
2025-12-24T12:09:57.116 [DEBUG] [Thread-301840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:09:57.117 [DEBUG] [Thread-301840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:09:57.117 [DEBUG] [Thread-301840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:09:57.117 [DEBUG] [Thread-301840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:09:57.117 [DEBUG] [Thread-301840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:09:57.117 [DEBUG] [Thread-301840] [transport.py] [_log()] Compression: none
2025-12-24T12:09:57.117 [DEBUG] [Thread-301840] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:09:57.145 [DEBUG] [Thread-301840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:09:57.149 [DEBUG] [Thread-301840] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:09:57.151 [DEBUG] [Thread-301840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:09:57.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:09:57.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:09:57.157 [DEBUG] [Thread-301840] [transport.py] [_log()] userauth is OK
2025-12-24T12:09:57.157 [DEBUG] [Thread-301840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:09:57.158 [DEBUG] [Thread-301840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:09:57.158 [DEBUG] [Thread-301840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:09:57.158 [DEBUG] [Thread-301840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:09:57.179 [INFO] [Thread-301840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:09:57.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:09:57.772 [DEBUG] [Thread-301840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:09:57.772 [DEBUG] [Thread-301840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:09:57.775 [DEBUG] [Thread-301840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:09:57.813 [DEBUG] [Thread-301840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:09:57.813 [DEBUG] [Thread-301840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:09:57.818 [DEBUG] [Thread-301840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:09:57.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:09:57.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:09:57.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:09:57.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:09:57.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:09:57.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:09:57.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:09:57.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:09:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:09:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.422986 -999.00  +23.20  16.59     32   +5.90 1 1 1 1 1   888    0 19.21 79.33 ----- 16.6 16.6 164.0 22.6 30.9 -26.0 29.7 -24.0 29.9 -23.4 30.9 -25.1
2025-12-24T12:09:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:09:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:09:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.422986
2025-12-24T12:09:57.867 [DEBUG] [Thread-301840] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:09:57.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:09:57.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:09:57.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:09:57.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:09:57.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:09:57.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:09:37', tmtdew=19.26, humidity=28.53, cloud=0.0, wind=17.29, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:09:05.990', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:09:57.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:09:57.966 [DEBUG] [Thread-301843] [transport.py] [_log()] starting thread (client mode): 0xf57712d0
2025-12-24T12:09:57.966 [DEBUG] [Thread-301843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:09:57.981 [DEBUG] [Thread-301843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:09:57.981 [INFO] [Thread-301843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:09:57.988 [DEBUG] [Thread-301843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] client lang: <none>
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] server lang: <none>
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] kex follows: False
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:09:57.989 [DEBUG] [Thread-301843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:09:57.990 [DEBUG] [Thread-301843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:09:57.990 [DEBUG] [Thread-301843] [transport.py] [_log()] Compression: none
2025-12-24T12:09:57.990 [DEBUG] [Thread-301843] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:09:58.048 [DEBUG] [Thread-301843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:09:58.048 [DEBUG] [Thread-301843] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:09:58.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:09:58.049 [DEBUG] [Thread-301843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:09:58.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:09:58.104 [DEBUG] [Thread-301843] [transport.py] [_log()] userauth is OK
2025-12-24T12:09:58.104 [DEBUG] [Thread-301843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:09:58.104 [DEBUG] [Thread-301843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:09:58.104 [DEBUG] [Thread-301843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:09:58.105 [DEBUG] [Thread-301843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:09:58.128 [INFO] [Thread-301843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:09:58.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:09:58.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:09:58.952 [DEBUG] [Thread-301843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:09:58.953 [DEBUG] [Thread-301843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:09:58.991 [DEBUG] [Thread-301843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:09:58.991 [DEBUG] [Thread-301843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:09:59.000 [DEBUG] [Thread-301843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:09:59.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:09:59.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:09:59.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') -> 00000000
2025-12-24T12:09:59.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:09:59.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:09:59.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:09:59.032 [DEBUG] [Thread-301843] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:10:01.568 [DEBUG] [Thread-301845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:10:06.868 [DEBUG] [Thread-301846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:10:22.034 [DEBUG] [Thread-301847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:10:29.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:10:29.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:10:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:10:30.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 10, 10), 19.27, 28.49, 0.0, 17.54, 22.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:10:30.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:10:10
2025-12-24T12:10:30.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:10:30.410 [DEBUG] [Thread-301848] [transport.py] [_log()] starting thread (client mode): 0xf574d7e0
2025-12-24T12:10:30.411 [DEBUG] [Thread-301848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:10:30.421 [DEBUG] [Thread-301848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:10:30.421 [INFO] [Thread-301848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] client lang: <none>
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] server lang: <none>
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] kex follows: False
2025-12-24T12:10:30.427 [DEBUG] [Thread-301848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:10:30.428 [DEBUG] [Thread-301848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:10:30.428 [DEBUG] [Thread-301848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:10:30.428 [DEBUG] [Thread-301848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:10:30.428 [DEBUG] [Thread-301848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:10:30.428 [DEBUG] [Thread-301848] [transport.py] [_log()] Compression: none
2025-12-24T12:10:30.428 [DEBUG] [Thread-301848] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:10:30.462 [DEBUG] [Thread-301848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:10:30.466 [DEBUG] [Thread-301848] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:10:30.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:10:30.469 [DEBUG] [Thread-301848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:10:30.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:10:30.471 [DEBUG] [Thread-301848] [transport.py] [_log()] userauth is OK
2025-12-24T12:10:30.471 [DEBUG] [Thread-301848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:10:30.471 [DEBUG] [Thread-301848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:10:30.471 [DEBUG] [Thread-301848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:10:30.471 [DEBUG] [Thread-301848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:10:30.493 [INFO] [Thread-301848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:10:30.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:10:31.274 [DEBUG] [Thread-301848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:10:31.274 [DEBUG] [Thread-301848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:10:31.275 [DEBUG] [Thread-301848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:10:31.315 [DEBUG] [Thread-301848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:10:31.315 [DEBUG] [Thread-301848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:10:31.317 [DEBUG] [Thread-301848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:10:31.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:10:31.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:10:31.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:10:31.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:10:31.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:10:31.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:10:31.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:10:31.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:10:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:10:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.423334 -999.00  +23.00  17.20     33   +5.90 1 1 1 1 1   888    0 19.30 75.61 ----- 17.2 17.2 154.6 22.6 30.9 -26.5 29.9 -24.4 29.9 -24.5 30.9 -25.5
2025-12-24T12:10:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:10:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:10:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.423334
2025-12-24T12:10:31.343 [DEBUG] [Thread-301848] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:10:31.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:10:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:10:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:10:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:10:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:10:31.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:10:10', tmtdew=19.27, humidity=28.49, cloud=0.0, wind=17.54, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:09:36.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:10:31.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:10:31.448 [DEBUG] [Thread-301851] [transport.py] [_log()] starting thread (client mode): 0xf574f850
2025-12-24T12:10:31.448 [DEBUG] [Thread-301851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:10:31.464 [DEBUG] [Thread-301851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:10:31.464 [INFO] [Thread-301851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] client lang: <none>
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] server lang: <none>
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] kex follows: False
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] Compression: none
2025-12-24T12:10:31.472 [DEBUG] [Thread-301851] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:10:31.531 [DEBUG] [Thread-301851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:10:31.531 [DEBUG] [Thread-301851] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:10:31.531 [DEBUG] [Thread-301851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:10:31.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:10:31.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:10:31.587 [DEBUG] [Thread-301851] [transport.py] [_log()] userauth is OK
2025-12-24T12:10:31.587 [DEBUG] [Thread-301851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:10:31.587 [DEBUG] [Thread-301851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:10:31.587 [DEBUG] [Thread-301851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:10:31.587 [DEBUG] [Thread-301851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:10:31.602 [INFO] [Thread-301851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:10:31.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:10:31.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:10:32.468 [DEBUG] [Thread-301851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:10:32.468 [DEBUG] [Thread-301851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:10:32.516 [DEBUG] [Thread-301851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:10:32.516 [DEBUG] [Thread-301851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:10:32.524 [DEBUG] [Thread-301851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:10:32.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:10:32.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:10:32.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:10:32.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:10:32.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:10:32.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:10:32.557 [DEBUG] [Thread-301851] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:10:37.109 [DEBUG] [Thread-301853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:10:52.300 [DEBUG] [Thread-301854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:10:54.430 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:10:54.431 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:11:01.828 [DEBUG] [Thread-301855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:11:02.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:11:02.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:11:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:11:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 10, 43), 19.18, 28.58, 0.0, 17.77, 22.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:11:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:10:43
2025-12-24T12:11:04.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:11:04.339 [DEBUG] [Thread-301856] [transport.py] [_log()] starting thread (client mode): 0xf57a8c10
2025-12-24T12:11:04.340 [DEBUG] [Thread-301856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:11:04.351 [DEBUG] [Thread-301856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:11:04.352 [INFO] [Thread-301856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:11:04.355 [DEBUG] [Thread-301856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] client lang: <none>
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] server lang: <none>
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] kex follows: False
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] Compression: none
2025-12-24T12:11:04.356 [DEBUG] [Thread-301856] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:11:04.387 [DEBUG] [Thread-301856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:11:04.390 [DEBUG] [Thread-301856] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:11:04.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:11:04.392 [DEBUG] [Thread-301856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:11:04.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:11:04.395 [DEBUG] [Thread-301856] [transport.py] [_log()] userauth is OK
2025-12-24T12:11:04.395 [DEBUG] [Thread-301856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:11:04.395 [DEBUG] [Thread-301856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:11:04.396 [DEBUG] [Thread-301856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:11:04.396 [DEBUG] [Thread-301856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:11:04.414 [INFO] [Thread-301856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:11:04.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:11:05.022 [DEBUG] [Thread-301856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:11:05.022 [DEBUG] [Thread-301856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:11:05.024 [DEBUG] [Thread-301856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:11:05.063 [DEBUG] [Thread-301856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:11:05.063 [DEBUG] [Thread-301856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:11:05.067 [DEBUG] [Thread-301856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:11:05.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:11:05.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:11:05.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:11:05.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:11:05.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:11:05.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:11:05.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:11:05.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:11:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:11:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.424028 -999.00  +22.90   9.80     33   +6.00 1 1 1 1 1   888    0 18.70 63.34 ----- 9.8 9.8 177.4 23.9 30.8 -25.1 29.3 -28.1 29.8 -24.8 30.7 -24.0
2025-12-24T12:11:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:11:05.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:11:05.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.424028
2025-12-24T12:11:05.100 [DEBUG] [Thread-301856] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:11:05.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:11:05.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:11:05.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:11:05.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:11:05.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:11:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:10:43', tmtdew=19.18, humidity=28.58, cloud=0.0, wind=17.77, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:10:36.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:11:05.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:11:05.215 [DEBUG] [Thread-301859] [transport.py] [_log()] starting thread (client mode): 0xf57ab670
2025-12-24T12:11:05.215 [DEBUG] [Thread-301859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:11:05.230 [DEBUG] [Thread-301859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:11:05.230 [INFO] [Thread-301859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:11:05.237 [DEBUG] [Thread-301859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:11:05.237 [DEBUG] [Thread-301859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] client lang: <none>
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] server lang: <none>
2025-12-24T12:11:05.238 [DEBUG] [Thread-301859] [transport.py] [_log()] kex follows: False
2025-12-24T12:11:05.239 [DEBUG] [Thread-301859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:11:05.239 [DEBUG] [Thread-301859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:11:05.239 [DEBUG] [Thread-301859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:11:05.239 [DEBUG] [Thread-301859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:11:05.239 [DEBUG] [Thread-301859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:11:05.239 [DEBUG] [Thread-301859] [transport.py] [_log()] Compression: none
2025-12-24T12:11:05.239 [DEBUG] [Thread-301859] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:11:05.304 [DEBUG] [Thread-301859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:11:05.305 [DEBUG] [Thread-301859] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:11:05.306 [DEBUG] [Thread-301859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:11:05.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:11:05.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:11:05.364 [DEBUG] [Thread-301859] [transport.py] [_log()] userauth is OK
2025-12-24T12:11:05.365 [DEBUG] [Thread-301859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:11:05.365 [DEBUG] [Thread-301859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:11:05.365 [DEBUG] [Thread-301859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:11:05.365 [DEBUG] [Thread-301859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:11:05.387 [INFO] [Thread-301859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:11:05.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:11:05.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:11:06.255 [DEBUG] [Thread-301859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:11:06.255 [DEBUG] [Thread-301859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:11:06.303 [DEBUG] [Thread-301859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:11:06.303 [DEBUG] [Thread-301859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:11:06.312 [DEBUG] [Thread-301859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:11:06.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:11:06.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:11:06.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
2025-12-24T12:11:06.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:11:06.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:11:06.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:11:06.348 [DEBUG] [Thread-301859] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:11:07.395 [DEBUG] [Thread-301861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:11:22.616 [DEBUG] [Thread-301862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:11:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:11:36.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:11:36.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:11:37.679 [DEBUG] [Thread-301863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:11:37.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 11, 16), 19.02, 28.86, 0.0, 19.78, 22.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:11:37.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:11:16
2025-12-24T12:11:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:11:38.152 [DEBUG] [Thread-301864] [transport.py] [_log()] starting thread (client mode): 0xf57be680
2025-12-24T12:11:38.152 [DEBUG] [Thread-301864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:11:38.166 [DEBUG] [Thread-301864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:11:38.166 [INFO] [Thread-301864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:11:38.170 [DEBUG] [Thread-301864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] client lang: <none>
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] server lang: <none>
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] kex follows: False
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:11:38.171 [DEBUG] [Thread-301864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:11:38.172 [DEBUG] [Thread-301864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:11:38.172 [DEBUG] [Thread-301864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:11:38.172 [DEBUG] [Thread-301864] [transport.py] [_log()] Compression: none
2025-12-24T12:11:38.172 [DEBUG] [Thread-301864] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:11:38.211 [DEBUG] [Thread-301864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:11:38.215 [DEBUG] [Thread-301864] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:11:38.218 [DEBUG] [Thread-301864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:11:38.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:11:38.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:11:38.223 [DEBUG] [Thread-301864] [transport.py] [_log()] userauth is OK
2025-12-24T12:11:38.223 [DEBUG] [Thread-301864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:11:38.223 [DEBUG] [Thread-301864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:11:38.223 [DEBUG] [Thread-301864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:11:38.224 [DEBUG] [Thread-301864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:11:38.260 [INFO] [Thread-301864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:11:38.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:11:38.915 [DEBUG] [Thread-301864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:11:38.915 [DEBUG] [Thread-301864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:11:38.925 [DEBUG] [Thread-301864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:11:38.956 [DEBUG] [Thread-301864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:11:38.956 [DEBUG] [Thread-301864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:11:38.959 [DEBUG] [Thread-301864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:11:38.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:11:38.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:11:38.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:11:38.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:11:38.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:11:38.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:11:38.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:11:38.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:11:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:11:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.424375 -999.00  +22.90  18.09     33   +5.90 1 1 1 1 1   888    0 18.68 59.71 ----- 18.1 18.1 176.2 21.2 30.7 -25.6 29.6 -24.6 29.9 -23.5 30.8 -24.8
2025-12-24T12:11:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:11:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:11:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.424375
2025-12-24T12:11:38.986 [DEBUG] [Thread-301864] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:11:38.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:11:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:11:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:11:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:11:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:11:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:11:16', tmtdew=19.02, humidity=28.86, cloud=0.0, wind=19.78, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:11:06.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:11:39.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:11:39.080 [DEBUG] [Thread-301867] [transport.py] [_log()] starting thread (client mode): 0xf57bd990
2025-12-24T12:11:39.080 [DEBUG] [Thread-301867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:11:39.095 [DEBUG] [Thread-301867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:11:39.095 [INFO] [Thread-301867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:11:39.102 [DEBUG] [Thread-301867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:11:39.102 [DEBUG] [Thread-301867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:11:39.102 [DEBUG] [Thread-301867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:11:39.102 [DEBUG] [Thread-301867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:11:39.102 [DEBUG] [Thread-301867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] client lang: <none>
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] server lang: <none>
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] kex follows: False
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] Compression: none
2025-12-24T12:11:39.103 [DEBUG] [Thread-301867] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:11:39.165 [DEBUG] [Thread-301867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:11:39.165 [DEBUG] [Thread-301867] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:11:39.166 [DEBUG] [Thread-301867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:11:39.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:11:39.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:11:39.221 [DEBUG] [Thread-301867] [transport.py] [_log()] userauth is OK
2025-12-24T12:11:39.221 [DEBUG] [Thread-301867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:11:39.221 [DEBUG] [Thread-301867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:11:39.221 [DEBUG] [Thread-301867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:11:39.222 [DEBUG] [Thread-301867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:11:39.240 [INFO] [Thread-301867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:11:39.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:11:39.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:11:40.069 [DEBUG] [Thread-301867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:11:40.069 [DEBUG] [Thread-301867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:11:40.118 [DEBUG] [Thread-301867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:11:40.118 [DEBUG] [Thread-301867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:11:40.126 [DEBUG] [Thread-301867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:11:40.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:11:40.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')
2025-12-24T12:11:40.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:11:40.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:11:40.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:11:40.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:11:40.158 [DEBUG] [Thread-301867] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:11:52.740 [DEBUG] [Thread-301869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:11:54.584 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:11:54.585 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:12:02.090 [DEBUG] [Thread-301870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:12:07.862 [DEBUG] [Thread-301871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:12:10.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:12:10.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:12:10.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:12:11.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 11, 49), 18.69, 29.15, 0.0, 18.69, 21.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:12:11.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:11:49
2025-12-24T12:12:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:12:11.874 [DEBUG] [Thread-301872] [transport.py] [_log()] starting thread (client mode): 0xf57aaf80
2025-12-24T12:12:11.874 [DEBUG] [Thread-301872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:12:11.887 [DEBUG] [Thread-301872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:12:11.887 [INFO] [Thread-301872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] client lang: <none>
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] server lang: <none>
2025-12-24T12:12:11.892 [DEBUG] [Thread-301872] [transport.py] [_log()] kex follows: False
2025-12-24T12:12:11.893 [DEBUG] [Thread-301872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:12:11.894 [DEBUG] [Thread-301872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:12:11.894 [DEBUG] [Thread-301872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:12:11.894 [DEBUG] [Thread-301872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:12:11.894 [DEBUG] [Thread-301872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:12:11.894 [DEBUG] [Thread-301872] [transport.py] [_log()] Compression: none
2025-12-24T12:12:11.894 [DEBUG] [Thread-301872] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:12:11.930 [DEBUG] [Thread-301872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:12:11.935 [DEBUG] [Thread-301872] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:12:11.937 [DEBUG] [Thread-301872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:12:11.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:12:11.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:12:11.942 [DEBUG] [Thread-301872] [transport.py] [_log()] userauth is OK
2025-12-24T12:12:11.943 [DEBUG] [Thread-301872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:12:11.943 [DEBUG] [Thread-301872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:12:11.943 [DEBUG] [Thread-301872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:12:11.943 [DEBUG] [Thread-301872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:12:11.970 [INFO] [Thread-301872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:12:11.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:12:12.649 [DEBUG] [Thread-301872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:12:12.649 [DEBUG] [Thread-301872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:12:12.650 [DEBUG] [Thread-301872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:12:12.688 [DEBUG] [Thread-301872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:12:12.688 [DEBUG] [Thread-301872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:12:12.691 [DEBUG] [Thread-301872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:12:12.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:12:12.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:12:12.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:12:12.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:12:12.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:12:12.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:12:12.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:12:12.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:12:12.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:12:12.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.424722 -999.00  +22.90   7.84     33   +5.90 1 1 1 1 1   888    0 18.58 60.55 ----- 7.8 7.8 176.8 19.5 30.8 -25.9 29.5 -24.4 29.8 -23.4 30.8 -25.7
2025-12-24T12:12:12.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:12:12.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:12:12.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.424722
2025-12-24T12:12:12.728 [DEBUG] [Thread-301872] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:12:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:12:12.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:12:12.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:12:12.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:12:12.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:12:12.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:11:49', tmtdew=18.69, humidity=29.15, cloud=0.0, wind=18.69, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:11:35.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:12:12.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:12:12.827 [DEBUG] [Thread-301875] [transport.py] [_log()] starting thread (client mode): 0xf57708b0
2025-12-24T12:12:12.828 [DEBUG] [Thread-301875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:12:12.842 [DEBUG] [Thread-301875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:12:12.842 [INFO] [Thread-301875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:12:12.849 [DEBUG] [Thread-301875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] client lang: <none>
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] server lang: <none>
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] kex follows: False
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] Compression: none
2025-12-24T12:12:12.850 [DEBUG] [Thread-301875] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:12:12.908 [DEBUG] [Thread-301875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:12:12.908 [DEBUG] [Thread-301875] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:12:12.908 [DEBUG] [Thread-301875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:12:12.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:12:12.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:12:12.969 [DEBUG] [Thread-301875] [transport.py] [_log()] userauth is OK
2025-12-24T12:12:12.969 [DEBUG] [Thread-301875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:12:12.969 [DEBUG] [Thread-301875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:12:12.969 [DEBUG] [Thread-301875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:12:12.969 [DEBUG] [Thread-301875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:12:12.986 [INFO] [Thread-301875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:12:12.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:12:12.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:12:13.805 [DEBUG] [Thread-301875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:12:13.805 [DEBUG] [Thread-301875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:12:13.852 [DEBUG] [Thread-301875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:12:13.853 [DEBUG] [Thread-301875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:12:13.861 [DEBUG] [Thread-301875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:12:13.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:12:13.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:12:13.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:12:13.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:12:13.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:12:13.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:12:13.898 [DEBUG] [Thread-301875] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:12:22.905 [DEBUG] [Thread-301877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:12:38.038 [DEBUG] [Thread-301878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:12:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:12:43.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:12:43.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:12:44.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 12, 22), 18.73, 29.09, 0.0, 19.22, 21.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:12:44.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:12:22
2025-12-24T12:12:44.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:12:45.127 [DEBUG] [Thread-301879] [transport.py] [_log()] starting thread (client mode): 0xf5772470
2025-12-24T12:12:45.127 [DEBUG] [Thread-301879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:12:45.133 [DEBUG] [Thread-301879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:12:45.133 [INFO] [Thread-301879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:12:45.137 [DEBUG] [Thread-301879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] client lang: <none>
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] server lang: <none>
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] kex follows: False
2025-12-24T12:12:45.138 [DEBUG] [Thread-301879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:12:45.139 [DEBUG] [Thread-301879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:12:45.139 [DEBUG] [Thread-301879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:12:45.139 [DEBUG] [Thread-301879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:12:45.139 [DEBUG] [Thread-301879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:12:45.140 [DEBUG] [Thread-301879] [transport.py] [_log()] Compression: none
2025-12-24T12:12:45.140 [DEBUG] [Thread-301879] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:12:45.172 [DEBUG] [Thread-301879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:12:45.176 [DEBUG] [Thread-301879] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:12:45.177 [DEBUG] [Thread-301879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:12:45.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:12:45.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:12:45.183 [DEBUG] [Thread-301879] [transport.py] [_log()] userauth is OK
2025-12-24T12:12:45.183 [DEBUG] [Thread-301879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:12:45.183 [DEBUG] [Thread-301879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:12:45.183 [DEBUG] [Thread-301879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:12:45.183 [DEBUG] [Thread-301879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:12:45.209 [INFO] [Thread-301879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:12:45.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:12:45.828 [DEBUG] [Thread-301879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:12:45.828 [DEBUG] [Thread-301879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:12:45.837 [DEBUG] [Thread-301879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:12:45.869 [DEBUG] [Thread-301879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:12:45.869 [DEBUG] [Thread-301879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:12:45.871 [DEBUG] [Thread-301879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:12:45.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:12:45.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:12:45.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:12:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:12:45.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:12:45.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:12:45.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:12:45.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:12:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:12:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.425070 -999.00  +23.20  15.20     33   +6.00 1 1 1 1 1   888    0 18.55 55.56 ----- 15.2 15.2 165.8 18.1 30.9 -25.2 29.8 -24.7 29.9 -22.3 30.9 -25.0
2025-12-24T12:12:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:12:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:12:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.425070
2025-12-24T12:12:45.901 [DEBUG] [Thread-301879] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:12:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:12:45.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:12:45.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:12:45.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:12:45.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:12:45.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:12:22', tmtdew=18.73, humidity=29.09, cloud=0.0, wind=19.22, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:12:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:12:45.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:12:46.004 [DEBUG] [Thread-301882] [transport.py] [_log()] starting thread (client mode): 0xf5770f40
2025-12-24T12:12:46.004 [DEBUG] [Thread-301882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:12:46.018 [DEBUG] [Thread-301882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:12:46.018 [INFO] [Thread-301882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:12:46.025 [DEBUG] [Thread-301882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:12:46.026 [DEBUG] [Thread-301882] [transport.py] [_log()] client lang: <none>
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] server lang: <none>
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] kex follows: False
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] Compression: none
2025-12-24T12:12:46.027 [DEBUG] [Thread-301882] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:12:46.087 [DEBUG] [Thread-301882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:12:46.088 [DEBUG] [Thread-301882] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:12:46.089 [DEBUG] [Thread-301882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:12:46.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:12:46.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:12:46.146 [DEBUG] [Thread-301882] [transport.py] [_log()] userauth is OK
2025-12-24T12:12:46.147 [DEBUG] [Thread-301882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:12:46.147 [DEBUG] [Thread-301882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:12:46.147 [DEBUG] [Thread-301882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:12:46.147 [DEBUG] [Thread-301882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:12:46.169 [INFO] [Thread-301882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:12:46.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:12:46.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:12:47.032 [DEBUG] [Thread-301882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:12:47.032 [DEBUG] [Thread-301882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:12:47.080 [DEBUG] [Thread-301882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:12:47.080 [DEBUG] [Thread-301882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:12:47.088 [DEBUG] [Thread-301882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:12:47.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:12:47.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:12:47.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:12:47.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:12:47.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:12:47.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:12:47.122 [DEBUG] [Thread-301882] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:12:53.105 [DEBUG] [Thread-301884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:12:54.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:12:54.736 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:13:02.286 [DEBUG] [Thread-301885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:13:08.216 [DEBUG] [Thread-301886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:13:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:13:17.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:13:17.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
2025-12-24T12:13:18.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 12, 55), 18.44, 29.99, 0.0, 16.02, 21.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:13:18.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:12:55
2025-12-24T12:13:18.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:13:18.809 [DEBUG] [Thread-301887] [transport.py] [_log()] starting thread (client mode): 0xf572f3d0
2025-12-24T12:13:18.809 [DEBUG] [Thread-301887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:13:18.819 [DEBUG] [Thread-301887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:13:18.820 [INFO] [Thread-301887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:13:18.824 [DEBUG] [Thread-301887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:13:18.824 [DEBUG] [Thread-301887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:13:18.824 [DEBUG] [Thread-301887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] client lang: <none>
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] server lang: <none>
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] kex follows: False
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] Compression: none
2025-12-24T12:13:18.825 [DEBUG] [Thread-301887] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:13:18.856 [DEBUG] [Thread-301887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:13:18.860 [DEBUG] [Thread-301887] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:13:18.861 [DEBUG] [Thread-301887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:13:18.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:13:18.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:13:18.865 [DEBUG] [Thread-301887] [transport.py] [_log()] userauth is OK
2025-12-24T12:13:18.865 [DEBUG] [Thread-301887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:13:18.865 [DEBUG] [Thread-301887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:13:18.865 [DEBUG] [Thread-301887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:13:18.865 [DEBUG] [Thread-301887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:13:18.884 [INFO] [Thread-301887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:13:18.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:13:19.456 [DEBUG] [Thread-301887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:13:19.456 [DEBUG] [Thread-301887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:13:19.458 [DEBUG] [Thread-301887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:13:19.498 [DEBUG] [Thread-301887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:13:19.498 [DEBUG] [Thread-301887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:13:19.501 [DEBUG] [Thread-301887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:13:19.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:13:19.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:13:19.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:13:19.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:13:19.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:13:19.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:13:19.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:13:19.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:13:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:13:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.425417 -999.00  +22.80  10.97     33   +5.90 1 1 1 1 1   888    0 18.50 50.89 ----- 11.0 11.0 189.6 15.6 30.8 -25.6 29.8 -24.3 29.8 -23.5 30.8 -25.6
2025-12-24T12:13:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:13:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:13:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.425417
2025-12-24T12:13:19.532 [DEBUG] [Thread-301887] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:13:19.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:13:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:13:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:13:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:13:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:13:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:12:55', tmtdew=18.44, humidity=29.99, cloud=0.0, wind=16.02, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:12:36.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:13:19.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:13:19.639 [DEBUG] [Thread-301890] [transport.py] [_log()] starting thread (client mode): 0xf574eb30
2025-12-24T12:13:19.639 [DEBUG] [Thread-301890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:13:19.657 [DEBUG] [Thread-301890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:13:19.657 [INFO] [Thread-301890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] client lang: <none>
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] server lang: <none>
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] kex follows: False
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:13:19.665 [DEBUG] [Thread-301890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:13:19.666 [DEBUG] [Thread-301890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:13:19.666 [DEBUG] [Thread-301890] [transport.py] [_log()] Compression: none
2025-12-24T12:13:19.666 [DEBUG] [Thread-301890] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:13:19.721 [DEBUG] [Thread-301890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:13:19.721 [DEBUG] [Thread-301890] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:13:19.721 [DEBUG] [Thread-301890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:13:19.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:13:19.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:13:19.778 [DEBUG] [Thread-301890] [transport.py] [_log()] userauth is OK
2025-12-24T12:13:19.778 [DEBUG] [Thread-301890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:13:19.778 [DEBUG] [Thread-301890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:13:19.778 [DEBUG] [Thread-301890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:13:19.778 [DEBUG] [Thread-301890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:13:19.792 [INFO] [Thread-301890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:13:19.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:13:19.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:13:20.606 [DEBUG] [Thread-301890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:13:20.607 [DEBUG] [Thread-301890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:13:20.653 [DEBUG] [Thread-301890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:13:20.654 [DEBUG] [Thread-301890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:13:20.662 [DEBUG] [Thread-301890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:13:20.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:13:20.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:13:20.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:13:20.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:13:20.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:13:20.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:13:20.695 [DEBUG] [Thread-301890] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:13:23.289 [DEBUG] [Thread-301892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:13:38.460 [DEBUG] [Thread-301893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:13:50.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:13:50.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:13:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:13:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 13, 28), 18.73, 29.49, 0.0, 14.66, 22.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:13:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:13:28
2025-12-24T12:13:52.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:13:52.242 [DEBUG] [Thread-301894] [transport.py] [_log()] starting thread (client mode): 0xf57ab4c0
2025-12-24T12:13:52.243 [DEBUG] [Thread-301894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:13:52.254 [DEBUG] [Thread-301894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:13:52.254 [INFO] [Thread-301894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] client lang: <none>
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] server lang: <none>
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] kex follows: False
2025-12-24T12:13:52.259 [DEBUG] [Thread-301894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:13:52.260 [DEBUG] [Thread-301894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:13:52.260 [DEBUG] [Thread-301894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:13:52.260 [DEBUG] [Thread-301894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:13:52.260 [DEBUG] [Thread-301894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:13:52.260 [DEBUG] [Thread-301894] [transport.py] [_log()] Compression: none
2025-12-24T12:13:52.260 [DEBUG] [Thread-301894] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:13:52.297 [DEBUG] [Thread-301894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:13:52.301 [DEBUG] [Thread-301894] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:13:52.303 [DEBUG] [Thread-301894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:13:52.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:13:52.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:13:52.309 [DEBUG] [Thread-301894] [transport.py] [_log()] userauth is OK
2025-12-24T12:13:52.309 [DEBUG] [Thread-301894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:13:52.309 [DEBUG] [Thread-301894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:13:52.309 [DEBUG] [Thread-301894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:13:52.309 [DEBUG] [Thread-301894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:13:52.348 [INFO] [Thread-301894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:13:52.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:13:52.990 [DEBUG] [Thread-301894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:13:52.990 [DEBUG] [Thread-301894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:13:52.991 [DEBUG] [Thread-301894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:13:53.032 [DEBUG] [Thread-301894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:13:53.032 [DEBUG] [Thread-301894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:13:53.035 [DEBUG] [Thread-301894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:13:53.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:13:53.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:13:53.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:13:53.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:13:53.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:13:53.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:13:53.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:13:53.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:13:53.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:13:53.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.425764 -999.00  +23.20  16.88     33   +6.10 1 1 1 1 1   888    0 18.15 44.51 ----- 16.9 16.9 185.9 22.3 30.9 -26.3 29.7 -25.3 29.9 -22.5 30.7 -26.1
2025-12-24T12:13:53.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:13:53.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:13:53.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.425764
2025-12-24T12:13:53.068 [DEBUG] [Thread-301894] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:13:53.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:13:53.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:13:53.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:13:53.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:13:53.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:13:53.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:13:28', tmtdew=18.73, humidity=29.49, cloud=0.0, wind=14.66, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:13:06.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:13:53.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:13:53.185 [DEBUG] [Thread-301897] [transport.py] [_log()] starting thread (client mode): 0xf57a9330
2025-12-24T12:13:53.185 [DEBUG] [Thread-301897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:13:53.200 [DEBUG] [Thread-301897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:13:53.200 [INFO] [Thread-301897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:13:53.208 [DEBUG] [Thread-301897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] client lang: <none>
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] server lang: <none>
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] kex follows: False
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] Compression: none
2025-12-24T12:13:53.209 [DEBUG] [Thread-301897] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:13:53.267 [DEBUG] [Thread-301897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:13:53.267 [DEBUG] [Thread-301897] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:13:53.268 [DEBUG] [Thread-301897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:13:53.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:13:53.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:13:53.322 [DEBUG] [Thread-301897] [transport.py] [_log()] userauth is OK
2025-12-24T12:13:53.322 [DEBUG] [Thread-301897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:13:53.322 [DEBUG] [Thread-301897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:13:53.323 [DEBUG] [Thread-301897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:13:53.323 [DEBUG] [Thread-301897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:13:53.337 [INFO] [Thread-301897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:13:53.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:13:53.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:13:53.537 [DEBUG] [Thread-301899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:13:54.168 [DEBUG] [Thread-301897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:13:54.168 [DEBUG] [Thread-301897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:13:54.215 [DEBUG] [Thread-301897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:13:54.215 [DEBUG] [Thread-301897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:13:54.224 [DEBUG] [Thread-301897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:13:54.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:13:54.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:13:54.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:13:54.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:13:54.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:13:54.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:13:54.261 [DEBUG] [Thread-301897] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:13:54.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:13:54.877 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:14:02.534 [DEBUG] [Thread-301900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:14:08.631 [DEBUG] [Thread-301901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:14:23.720 [DEBUG] [Thread-301902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:14:24.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:14:24.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:14:24.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:14:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 14, 1), 18.7, 29.53, 0.0, 14.73, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:14:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:14:01
2025-12-24T12:14:25.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:14:26.047 [DEBUG] [Thread-301903] [transport.py] [_log()] starting thread (client mode): 0xf57bfca0
2025-12-24T12:14:26.048 [DEBUG] [Thread-301903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:14:26.061 [DEBUG] [Thread-301903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:14:26.062 [INFO] [Thread-301903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:14:26.067 [DEBUG] [Thread-301903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:14:26.068 [DEBUG] [Thread-301903] [transport.py] [_log()] client lang: <none>
2025-12-24T12:14:26.069 [DEBUG] [Thread-301903] [transport.py] [_log()] server lang: <none>
2025-12-24T12:14:26.069 [DEBUG] [Thread-301903] [transport.py] [_log()] kex follows: False
2025-12-24T12:14:26.069 [DEBUG] [Thread-301903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:14:26.070 [DEBUG] [Thread-301903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:14:26.070 [DEBUG] [Thread-301903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:14:26.070 [DEBUG] [Thread-301903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:14:26.070 [DEBUG] [Thread-301903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:14:26.071 [DEBUG] [Thread-301903] [transport.py] [_log()] Compression: none
2025-12-24T12:14:26.071 [DEBUG] [Thread-301903] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:14:26.110 [DEBUG] [Thread-301903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:14:26.115 [DEBUG] [Thread-301903] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:14:26.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:14:26.119 [DEBUG] [Thread-301903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:14:26.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:14:26.123 [DEBUG] [Thread-301903] [transport.py] [_log()] userauth is OK
2025-12-24T12:14:26.124 [DEBUG] [Thread-301903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:14:26.124 [DEBUG] [Thread-301903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:14:26.124 [DEBUG] [Thread-301903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:14:26.124 [DEBUG] [Thread-301903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:14:26.163 [INFO] [Thread-301903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:14:26.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:14:26.809 [DEBUG] [Thread-301903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:14:26.810 [DEBUG] [Thread-301903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:14:26.819 [DEBUG] [Thread-301903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:14:26.850 [DEBUG] [Thread-301903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:14:26.850 [DEBUG] [Thread-301903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:14:26.852 [DEBUG] [Thread-301903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:14:26.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:14:26.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:14:26.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:14:26.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:14:26.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:14:26.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:14:26.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:14:26.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:14:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:14:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.426111 -999.00  +23.50  19.99     32   +6.00 1 1 1 1 1   888    0 18.20 41.47 ----- 20.0 20.0 194.9 22.1 30.6 -26.1 29.6 -25.7 29.9 -22.2 30.6 -26.0
2025-12-24T12:14:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:14:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:14:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.426111
2025-12-24T12:14:26.878 [DEBUG] [Thread-301903] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:14:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:14:26.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:14:26.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:14:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:14:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:14:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:14:01', tmtdew=18.7, humidity=29.53, cloud=0.0, wind=14.73, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:13:35.990', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:14:26.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:14:26.996 [DEBUG] [Thread-301906] [transport.py] [_log()] starting thread (client mode): 0xf5743ca0
2025-12-24T12:14:26.996 [DEBUG] [Thread-301906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:14:27.010 [DEBUG] [Thread-301906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:14:27.010 [INFO] [Thread-301906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] client lang: <none>
2025-12-24T12:14:27.018 [DEBUG] [Thread-301906] [transport.py] [_log()] server lang: <none>
2025-12-24T12:14:27.019 [DEBUG] [Thread-301906] [transport.py] [_log()] kex follows: False
2025-12-24T12:14:27.019 [DEBUG] [Thread-301906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:14:27.019 [DEBUG] [Thread-301906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:14:27.019 [DEBUG] [Thread-301906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:14:27.019 [DEBUG] [Thread-301906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:14:27.019 [DEBUG] [Thread-301906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:14:27.019 [DEBUG] [Thread-301906] [transport.py] [_log()] Compression: none
2025-12-24T12:14:27.019 [DEBUG] [Thread-301906] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:14:27.078 [DEBUG] [Thread-301906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:14:27.079 [DEBUG] [Thread-301906] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:14:27.079 [DEBUG] [Thread-301906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:14:27.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:14:27.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:14:27.135 [DEBUG] [Thread-301906] [transport.py] [_log()] userauth is OK
2025-12-24T12:14:27.136 [DEBUG] [Thread-301906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:14:27.136 [DEBUG] [Thread-301906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:14:27.136 [DEBUG] [Thread-301906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:14:27.136 [DEBUG] [Thread-301906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:14:27.154 [INFO] [Thread-301906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:14:27.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:14:27.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:14:28.051 [DEBUG] [Thread-301906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:14:28.052 [DEBUG] [Thread-301906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:14:28.090 [DEBUG] [Thread-301906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:14:28.090 [DEBUG] [Thread-301906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:14:28.099 [DEBUG] [Thread-301906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:14:28.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:14:28.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:14:28.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
2025-12-24T12:14:28.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:14:28.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:14:28.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:14:28.134 [DEBUG] [Thread-301906] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:14:38.805 [DEBUG] [Thread-301908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:14:53.944 [DEBUG] [Thread-301909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:14:55.019 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:14:55.020 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:14:58.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:14:58.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:14:58.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
2025-12-24T12:14:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 14, 34), 18.97, 28.73, 0.0, 17.17, 22.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:14:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:14:34
2025-12-24T12:14:59.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:14:59.893 [DEBUG] [Thread-301910] [transport.py] [_log()] starting thread (client mode): 0xf57aa530
2025-12-24T12:14:59.894 [DEBUG] [Thread-301910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:14:59.906 [DEBUG] [Thread-301910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:14:59.906 [INFO] [Thread-301910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:14:59.911 [DEBUG] [Thread-301910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:14:59.911 [DEBUG] [Thread-301910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:14:59.911 [DEBUG] [Thread-301910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] client lang: <none>
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] server lang: <none>
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] kex follows: False
2025-12-24T12:14:59.912 [DEBUG] [Thread-301910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:14:59.913 [DEBUG] [Thread-301910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:14:59.913 [DEBUG] [Thread-301910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:14:59.913 [DEBUG] [Thread-301910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:14:59.913 [DEBUG] [Thread-301910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:14:59.913 [DEBUG] [Thread-301910] [transport.py] [_log()] Compression: none
2025-12-24T12:14:59.913 [DEBUG] [Thread-301910] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:14:59.950 [DEBUG] [Thread-301910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:14:59.955 [DEBUG] [Thread-301910] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:14:59.958 [DEBUG] [Thread-301910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:14:59.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:14:59.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:14:59.964 [DEBUG] [Thread-301910] [transport.py] [_log()] userauth is OK
2025-12-24T12:14:59.964 [DEBUG] [Thread-301910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:14:59.965 [DEBUG] [Thread-301910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:14:59.965 [DEBUG] [Thread-301910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:14:59.965 [DEBUG] [Thread-301910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:14:59.992 [INFO] [Thread-301910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:14:59.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:15:00.660 [DEBUG] [Thread-301910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:15:00.660 [DEBUG] [Thread-301910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:15:00.661 [DEBUG] [Thread-301910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:15:00.702 [DEBUG] [Thread-301910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:15:00.702 [DEBUG] [Thread-301910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:15:00.706 [DEBUG] [Thread-301910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:15:00.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:15:00.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:15:00.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:15:00.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:15:00.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:15:00.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:15:00.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:15:00.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:15:00.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:15:00.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.426806 -999.00  +23.20   9.71     32   +5.80 1 1 1 1 1   888    0 17.94 33.63 ----- 9.7 9.7 232.6 13.5 30.5 -25.9 29.7 -24.7 29.8 -23.5 30.5 -25.6
2025-12-24T12:15:00.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:15:00.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:15:00.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.426806
2025-12-24T12:15:00.736 [DEBUG] [Thread-301910] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:15:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:15:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:15:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:15:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:15:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:15:00.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:14:34', tmtdew=18.97, humidity=28.73, cloud=0.0, wind=17.17, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:14:36.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:15:00.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:15:00.862 [DEBUG] [Thread-301913] [transport.py] [_log()] starting thread (client mode): 0xf57aa290
2025-12-24T12:15:00.863 [DEBUG] [Thread-301913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:15:00.877 [DEBUG] [Thread-301913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:15:00.877 [INFO] [Thread-301913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:15:00.885 [DEBUG] [Thread-301913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:15:00.885 [DEBUG] [Thread-301913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:15:00.885 [DEBUG] [Thread-301913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:15:00.885 [DEBUG] [Thread-301913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] client lang: <none>
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] server lang: <none>
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] kex follows: False
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] Compression: none
2025-12-24T12:15:00.886 [DEBUG] [Thread-301913] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:15:00.948 [DEBUG] [Thread-301913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:15:00.948 [DEBUG] [Thread-301913] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:15:00.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:15:00.950 [DEBUG] [Thread-301913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:15:00.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:15:01.008 [DEBUG] [Thread-301913] [transport.py] [_log()] userauth is OK
2025-12-24T12:15:01.009 [DEBUG] [Thread-301913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:15:01.009 [DEBUG] [Thread-301913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:15:01.009 [DEBUG] [Thread-301913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:15:01.009 [DEBUG] [Thread-301913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:15:01.029 [INFO] [Thread-301913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:15:01.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:15:01.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:15:01.889 [DEBUG] [Thread-301913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:15:01.889 [DEBUG] [Thread-301913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:15:01.937 [DEBUG] [Thread-301913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:15:01.937 [DEBUG] [Thread-301913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:15:01.945 [DEBUG] [Thread-301913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:15:01.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:15: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')
2025-12-24T12:15:01.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:15:01.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:15:01.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:15:01.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:15:01.979 [DEBUG] [Thread-301913] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:15:02.906 [DEBUG] [Thread-301915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:15:09.017 [DEBUG] [Thread-301916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:15:24.175 [DEBUG] [Thread-301917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:15:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:15:32.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:15:32.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:15:32.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 15, 7), 18.77, 29.06, 0.0, 13.91, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:15:32.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:15:07
2025-12-24T12:15:32.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:15:33.148 [DEBUG] [Thread-301918] [transport.py] [_log()] starting thread (client mode): 0xf81e5cc0
2025-12-24T12:15:33.149 [DEBUG] [Thread-301918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:15:33.149 [DEBUG] [Thread-301918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:15:33.149 [INFO] [Thread-301918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:15:33.154 [DEBUG] [Thread-301918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:15:33.154 [DEBUG] [Thread-301918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:15:33.154 [DEBUG] [Thread-301918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] client lang: <none>
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] server lang: <none>
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] kex follows: False
2025-12-24T12:15:33.155 [DEBUG] [Thread-301918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:15:33.156 [DEBUG] [Thread-301918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:15:33.156 [DEBUG] [Thread-301918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:15:33.156 [DEBUG] [Thread-301918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:15:33.156 [DEBUG] [Thread-301918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:15:33.156 [DEBUG] [Thread-301918] [transport.py] [_log()] Compression: none
2025-12-24T12:15:33.156 [DEBUG] [Thread-301918] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:15:33.190 [DEBUG] [Thread-301918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:15:33.194 [DEBUG] [Thread-301918] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:15:33.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:15:33.196 [DEBUG] [Thread-301918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:15:33.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:15:33.198 [DEBUG] [Thread-301918] [transport.py] [_log()] userauth is OK
2025-12-24T12:15:33.198 [DEBUG] [Thread-301918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:15:33.199 [DEBUG] [Thread-301918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:15:33.199 [DEBUG] [Thread-301918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:15:33.199 [DEBUG] [Thread-301918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:15:33.228 [INFO] [Thread-301918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:15:33.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:15:33.853 [DEBUG] [Thread-301918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:15:33.853 [DEBUG] [Thread-301918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:15:33.853 [DEBUG] [Thread-301918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:15:33.894 [DEBUG] [Thread-301918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:15:33.894 [DEBUG] [Thread-301918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:15:33.896 [DEBUG] [Thread-301918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:15:33.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:15:33.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:15:33.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:15:33.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:15:33.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:15:33.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:15:33.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:15:33.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:15:33.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:15:33.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.427153 -999.00  +22.90  12.94     33   +5.80 1 1 1 1 1   888    0 17.98 32.35 ----- 12.9 12.9 228.3 16.7 30.4 -25.8 29.6 -25.4 29.7 -23.4 30.5 -25.7
2025-12-24T12:15:33.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:15:33.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:15:33.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.427153
2025-12-24T12:15:33.924 [DEBUG] [Thread-301918] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:15:33.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:15:33.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:15:33.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:15:33.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:15:33.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:15:33.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:15:07', tmtdew=18.77, humidity=29.06, cloud=0.0, wind=13.91, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:15:06.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:15:34.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:15:34.022 [DEBUG] [Thread-301921] [transport.py] [_log()] starting thread (client mode): 0xf57a81c0
2025-12-24T12:15:34.022 [DEBUG] [Thread-301921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:15:34.036 [DEBUG] [Thread-301921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:15:34.036 [INFO] [Thread-301921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] client lang: <none>
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] server lang: <none>
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] kex follows: False
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] Compression: none
2025-12-24T12:15:34.044 [DEBUG] [Thread-301921] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:15:34.102 [DEBUG] [Thread-301921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:15:34.102 [DEBUG] [Thread-301921] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:15:34.102 [DEBUG] [Thread-301921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:15:34.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:15:34.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:15:34.159 [DEBUG] [Thread-301921] [transport.py] [_log()] userauth is OK
2025-12-24T12:15:34.159 [DEBUG] [Thread-301921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:15:34.160 [DEBUG] [Thread-301921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:15:34.160 [DEBUG] [Thread-301921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:15:34.160 [DEBUG] [Thread-301921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:15:34.173 [INFO] [Thread-301921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:15:34.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:15:34.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:15:34.986 [DEBUG] [Thread-301921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:15:34.986 [DEBUG] [Thread-301921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:15:35.035 [DEBUG] [Thread-301921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:15:35.035 [DEBUG] [Thread-301921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:15:35.044 [DEBUG] [Thread-301921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:15:35.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:15:35.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:15:35.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:15:35.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:15:35.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:15:35.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:15:35.079 [DEBUG] [Thread-301921] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:15:39.260 [DEBUG] [Thread-301923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:15:54.395 [DEBUG] [Thread-301924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:15:55.170 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:15:55.172 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:16:03.272 [DEBUG] [Thread-301925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:16:05.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:16:05.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:16:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:16:06.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 15, 40), 18.81, 28.82, 0.0, 10.87, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:16:06.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:15:40
2025-12-24T12:16:06.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:16:06.799 [DEBUG] [Thread-301926] [transport.py] [_log()] starting thread (client mode): 0xf572c490
2025-12-24T12:16:06.800 [DEBUG] [Thread-301926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:16:06.812 [DEBUG] [Thread-301926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:16:06.812 [INFO] [Thread-301926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:16:06.816 [DEBUG] [Thread-301926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:16:06.816 [DEBUG] [Thread-301926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:16:06.816 [DEBUG] [Thread-301926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] client lang: <none>
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] server lang: <none>
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] kex follows: False
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:16:06.817 [DEBUG] [Thread-301926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:16:06.818 [DEBUG] [Thread-301926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:16:06.818 [DEBUG] [Thread-301926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:16:06.818 [DEBUG] [Thread-301926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:16:06.818 [DEBUG] [Thread-301926] [transport.py] [_log()] Compression: none
2025-12-24T12:16:06.818 [DEBUG] [Thread-301926] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:16:06.855 [DEBUG] [Thread-301926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:16:06.860 [DEBUG] [Thread-301926] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:16:06.863 [DEBUG] [Thread-301926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:16:06.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:16:06.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:16:06.869 [DEBUG] [Thread-301926] [transport.py] [_log()] userauth is OK
2025-12-24T12:16:06.870 [DEBUG] [Thread-301926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:16:06.870 [DEBUG] [Thread-301926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:16:06.870 [DEBUG] [Thread-301926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:16:06.870 [DEBUG] [Thread-301926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:16:06.898 [INFO] [Thread-301926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:16:06.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:16:07.511 [DEBUG] [Thread-301926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:16:07.511 [DEBUG] [Thread-301926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:16:07.513 [DEBUG] [Thread-301926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:16:07.552 [DEBUG] [Thread-301926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:16:07.552 [DEBUG] [Thread-301926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:16:07.555 [DEBUG] [Thread-301926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:16:07.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:16:07.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:16:07.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:16:07.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:16:07.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:16:07.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:16:07.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:16:07.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:16:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:16:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.427500 -999.00  +22.60  12.78     33   +5.60 1 1 1 1 1   888    0 17.92 27.97 ----- 12.8 12.8 245.6 18.0 30.4 -26.8 29.6 -24.7 29.7 -23.2 30.4 -26.8
2025-12-24T12:16:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:16:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:16:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.427500
2025-12-24T12:16:07.588 [DEBUG] [Thread-301926] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:16:07.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:16:07.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:16:07.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:16:07.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:16:07.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:16:07.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:15:40', tmtdew=18.81, humidity=28.82, cloud=0.0, wind=10.87, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:15:36.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:16:07.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:16:07.696 [DEBUG] [Thread-301929] [transport.py] [_log()] starting thread (client mode): 0xf5770f40
2025-12-24T12:16:07.696 [DEBUG] [Thread-301929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:16:07.712 [DEBUG] [Thread-301929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:16:07.712 [INFO] [Thread-301929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:16:07.719 [DEBUG] [Thread-301929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:16:07.719 [DEBUG] [Thread-301929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:16:07.719 [DEBUG] [Thread-301929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:16:07.719 [DEBUG] [Thread-301929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] client lang: <none>
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] server lang: <none>
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] kex follows: False
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] Compression: none
2025-12-24T12:16:07.720 [DEBUG] [Thread-301929] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:16:07.777 [DEBUG] [Thread-301929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:16:07.777 [DEBUG] [Thread-301929] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:16:07.778 [DEBUG] [Thread-301929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:16:07.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:16:07.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:16:07.836 [DEBUG] [Thread-301929] [transport.py] [_log()] userauth is OK
2025-12-24T12:16:07.837 [DEBUG] [Thread-301929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:16:07.837 [DEBUG] [Thread-301929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:16:07.837 [DEBUG] [Thread-301929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:16:07.837 [DEBUG] [Thread-301929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:16:07.856 [INFO] [Thread-301929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:16:07.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:16:07.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:16:08.739 [DEBUG] [Thread-301929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:16:08.740 [DEBUG] [Thread-301929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:16:08.787 [DEBUG] [Thread-301929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:16:08.787 [DEBUG] [Thread-301929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:16:08.796 [DEBUG] [Thread-301929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:16:08.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:16:08.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')
2025-12-24T12:16:08.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:16:08.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:16:08.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:16:08.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:16:08.835 [DEBUG] [Thread-301929] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:16:09.467 [DEBUG] [Thread-301931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:16:24.632 [DEBUG] [Thread-301932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:16:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:16:38.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:16:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:16:39.701 [DEBUG] [Thread-301933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:16:40.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 16, 13), 18.62, 29.14, 0.0, 9.69, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:16:40.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:16:13
2025-12-24T12:16:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:16:40.615 [DEBUG] [Thread-301934] [transport.py] [_log()] starting thread (client mode): 0xf5770b80
2025-12-24T12:16:40.615 [DEBUG] [Thread-301934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:16:40.629 [DEBUG] [Thread-301934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:16:40.629 [INFO] [Thread-301934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:16:40.633 [DEBUG] [Thread-301934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] client lang: <none>
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] server lang: <none>
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] kex follows: False
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:16:40.634 [DEBUG] [Thread-301934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:16:40.635 [DEBUG] [Thread-301934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:16:40.635 [DEBUG] [Thread-301934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:16:40.635 [DEBUG] [Thread-301934] [transport.py] [_log()] Compression: none
2025-12-24T12:16:40.635 [DEBUG] [Thread-301934] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:16:40.669 [DEBUG] [Thread-301934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:16:40.672 [DEBUG] [Thread-301934] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:16:40.673 [DEBUG] [Thread-301934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:16:40.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:16:40.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:16:40.678 [DEBUG] [Thread-301934] [transport.py] [_log()] userauth is OK
2025-12-24T12:16:40.678 [DEBUG] [Thread-301934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:16:40.678 [DEBUG] [Thread-301934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:16:40.679 [DEBUG] [Thread-301934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:16:40.679 [DEBUG] [Thread-301934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:16:40.705 [INFO] [Thread-301934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:16:40.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:16:41.509 [DEBUG] [Thread-301934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:16:41.510 [DEBUG] [Thread-301934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:16:41.512 [DEBUG] [Thread-301934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:16:41.551 [DEBUG] [Thread-301934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:16:41.551 [DEBUG] [Thread-301934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:16:41.554 [DEBUG] [Thread-301934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:16:41.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:16:41.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:16:41.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:16:41.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:16:41.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:16:41.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:16:41.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:16:41.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:16:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:16:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.427848 -999.00  +22.60  10.44     33   +5.70 1 2 1 1 1   888    0 17.77 21.94 ----- 10.4 10.4 249.6 14.5 30.5 -25.5 29.7 -23.7 29.7 -21.9 30.4 -24.9
2025-12-24T12:16:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:16:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:16:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.427848
2025-12-24T12:16:41.589 [DEBUG] [Thread-301934] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:16:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:16:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:16:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:16:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:16:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:16:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:16:13', tmtdew=18.62, humidity=29.14, cloud=0.0, wind=9.69, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:16:06.067', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:16:41.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:16:41.699 [DEBUG] [Thread-301937] [transport.py] [_log()] starting thread (client mode): 0xf5742020
2025-12-24T12:16:41.700 [DEBUG] [Thread-301937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:16:41.714 [DEBUG] [Thread-301937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:16:41.715 [INFO] [Thread-301937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:16:41.722 [DEBUG] [Thread-301937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] client lang: <none>
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] server lang: <none>
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] kex follows: False
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] Compression: none
2025-12-24T12:16:41.723 [DEBUG] [Thread-301937] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:16:41.781 [DEBUG] [Thread-301937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:16:41.781 [DEBUG] [Thread-301937] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:16:41.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:16:41.783 [DEBUG] [Thread-301937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:16:41.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:16:41.837 [DEBUG] [Thread-301937] [transport.py] [_log()] userauth is OK
2025-12-24T12:16:41.837 [DEBUG] [Thread-301937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:16:41.837 [DEBUG] [Thread-301937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:16:41.837 [DEBUG] [Thread-301937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:16:41.837 [DEBUG] [Thread-301937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:16:41.856 [INFO] [Thread-301937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:16:41.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:16:41.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:16:42.702 [DEBUG] [Thread-301937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:16:42.702 [DEBUG] [Thread-301937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:16:42.749 [DEBUG] [Thread-301937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:16:42.749 [DEBUG] [Thread-301937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:16:42.758 [DEBUG] [Thread-301937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:16:42.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:16:42.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:16:42.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:16:42.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:16:42.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:16:42.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:16:42.799 [DEBUG] [Thread-301937] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:16:54.793 [DEBUG] [Thread-301939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:16:55.315 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:16:55.316 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:17:03.575 [DEBUG] [Thread-301940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:17:09.929 [DEBUG] [Thread-301941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:17:12.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:17:12.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:17:12.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:17:14.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 16, 46), 18.26, 29.94, 0.0, 5.81, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:17:14.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:16:46
2025-12-24T12:17:14.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:17:14.596 [DEBUG] [Thread-301942] [transport.py] [_log()] starting thread (client mode): 0xf572d6c0
2025-12-24T12:17:14.596 [DEBUG] [Thread-301942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:17:14.611 [DEBUG] [Thread-301942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:17:14.611 [INFO] [Thread-301942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:17:14.618 [DEBUG] [Thread-301942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:17:14.618 [DEBUG] [Thread-301942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:17:14.618 [DEBUG] [Thread-301942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:17:14.618 [DEBUG] [Thread-301942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:17:14.618 [DEBUG] [Thread-301942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:17:14.618 [DEBUG] [Thread-301942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:17:14.619 [DEBUG] [Thread-301942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:17:14.619 [DEBUG] [Thread-301942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:17:14.619 [DEBUG] [Thread-301942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:17:14.619 [DEBUG] [Thread-301942] [transport.py] [_log()] client lang: <none>
2025-12-24T12:17:14.619 [DEBUG] [Thread-301942] [transport.py] [_log()] server lang: <none>
2025-12-24T12:17:14.619 [DEBUG] [Thread-301942] [transport.py] [_log()] kex follows: False
2025-12-24T12:17:14.619 [DEBUG] [Thread-301942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:17:14.620 [DEBUG] [Thread-301942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:17:14.620 [DEBUG] [Thread-301942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:17:14.620 [DEBUG] [Thread-301942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:17:14.621 [DEBUG] [Thread-301942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:17:14.621 [DEBUG] [Thread-301942] [transport.py] [_log()] Compression: none
2025-12-24T12:17:14.621 [DEBUG] [Thread-301942] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:17:14.659 [DEBUG] [Thread-301942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:17:14.663 [DEBUG] [Thread-301942] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:17:14.665 [DEBUG] [Thread-301942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:17:14.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:17:14.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:17:14.671 [DEBUG] [Thread-301942] [transport.py] [_log()] userauth is OK
2025-12-24T12:17:14.672 [DEBUG] [Thread-301942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:17:14.672 [DEBUG] [Thread-301942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:17:14.672 [DEBUG] [Thread-301942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:17:14.672 [DEBUG] [Thread-301942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:17:14.712 [INFO] [Thread-301942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:17:14.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:17:15.338 [DEBUG] [Thread-301942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:17:15.338 [DEBUG] [Thread-301942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:17:15.339 [DEBUG] [Thread-301942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:17:15.379 [DEBUG] [Thread-301942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:17:15.380 [DEBUG] [Thread-301942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:17:15.383 [DEBUG] [Thread-301942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:17:15.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:17:15.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:17:15.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:17:15.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:17:15.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:17:15.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:17:15.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:17:15.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:17:15.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:17:15.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.428195 -999.00  +22.30   6.68     34   +5.70 1 1 1 1 1   888    0 17.46 18.35 ----- 6.7 6.7 217.2 16.4 30.4 -25.9 29.7 -24.7 29.6 -22.8 30.2 -24.5
2025-12-24T12:17:15.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:17:15.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:17:15.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.428195
2025-12-24T12:17:15.416 [DEBUG] [Thread-301942] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:17:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:17:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:17:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:17:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:17:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:17:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:16:46', tmtdew=18.26, humidity=29.94, cloud=0.0, wind=5.81, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:16:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:17:15.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:17:15.538 [DEBUG] [Thread-301945] [transport.py] [_log()] starting thread (client mode): 0xf81e7ee0
2025-12-24T12:17:15.538 [DEBUG] [Thread-301945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:17:15.553 [DEBUG] [Thread-301945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:17:15.553 [INFO] [Thread-301945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] client lang: <none>
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] server lang: <none>
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] kex follows: False
2025-12-24T12:17:15.561 [DEBUG] [Thread-301945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:17:15.562 [DEBUG] [Thread-301945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:17:15.562 [DEBUG] [Thread-301945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:17:15.562 [DEBUG] [Thread-301945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:17:15.562 [DEBUG] [Thread-301945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:17:15.562 [DEBUG] [Thread-301945] [transport.py] [_log()] Compression: none
2025-12-24T12:17:15.562 [DEBUG] [Thread-301945] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:17:15.625 [DEBUG] [Thread-301945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:17:15.626 [DEBUG] [Thread-301945] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:17:15.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:17:15.627 [DEBUG] [Thread-301945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:17:15.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:17:15.686 [DEBUG] [Thread-301945] [transport.py] [_log()] userauth is OK
2025-12-24T12:17:15.686 [DEBUG] [Thread-301945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:17:15.686 [DEBUG] [Thread-301945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:17:15.687 [DEBUG] [Thread-301945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:17:15.687 [DEBUG] [Thread-301945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:17:15.711 [INFO] [Thread-301945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:17:15.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:17:15.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:17:16.557 [DEBUG] [Thread-301945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:17:16.558 [DEBUG] [Thread-301945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:17:16.596 [DEBUG] [Thread-301945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:17:16.596 [DEBUG] [Thread-301945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:17:16.606 [DEBUG] [Thread-301945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:17:16.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:17:16.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:17:16.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:17:16.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:17:16.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:17:16.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:17:16.645 [DEBUG] [Thread-301945] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:17:24.993 [DEBUG] [Thread-301947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:17:40.204 [DEBUG] [Thread-301948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:17:46.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:17:46.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:17:46.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:17:47.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 17, 19), 18.27, 29.94, 0.0, 8.06, 21.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:17:47.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:17:19
2025-12-24T12:17:47.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:17:48.113 [DEBUG] [Thread-301949] [transport.py] [_log()] starting thread (client mode): 0xf57abe50
2025-12-24T12:17:48.114 [DEBUG] [Thread-301949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:17:48.127 [DEBUG] [Thread-301949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:17:48.127 [INFO] [Thread-301949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] client lang: <none>
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] server lang: <none>
2025-12-24T12:17:48.132 [DEBUG] [Thread-301949] [transport.py] [_log()] kex follows: False
2025-12-24T12:17:48.133 [DEBUG] [Thread-301949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:17:48.133 [DEBUG] [Thread-301949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:17:48.133 [DEBUG] [Thread-301949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:17:48.133 [DEBUG] [Thread-301949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:17:48.133 [DEBUG] [Thread-301949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:17:48.133 [DEBUG] [Thread-301949] [transport.py] [_log()] Compression: none
2025-12-24T12:17:48.133 [DEBUG] [Thread-301949] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:17:48.166 [DEBUG] [Thread-301949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:17:48.169 [DEBUG] [Thread-301949] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:17:48.170 [DEBUG] [Thread-301949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:17:48.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:17:48.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:17:48.174 [DEBUG] [Thread-301949] [transport.py] [_log()] userauth is OK
2025-12-24T12:17:48.174 [DEBUG] [Thread-301949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:17:48.174 [DEBUG] [Thread-301949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:17:48.174 [DEBUG] [Thread-301949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:17:48.174 [DEBUG] [Thread-301949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:17:48.186 [INFO] [Thread-301949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:17:48.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:17:48.836 [DEBUG] [Thread-301949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:17:48.836 [DEBUG] [Thread-301949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:17:48.837 [DEBUG] [Thread-301949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:17:48.877 [DEBUG] [Thread-301949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:17:48.877 [DEBUG] [Thread-301949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:17:48.880 [DEBUG] [Thread-301949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:17:48.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:17:48.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:17:48.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:17:48.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:17:48.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:17:48.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:17:48.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:17:48.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:17:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:17:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.428542 -999.00  +22.70  10.10     33   +5.90 1 2 1 1 1   888    0 17.54 12.97 ----- 10.1 10.1 241.4 13.7 30.5 -25.5 29.8 -23.7 29.7 -21.9 30.3 -24.3
2025-12-24T12:17:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:17:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:17:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.428542
2025-12-24T12:17:48.914 [DEBUG] [Thread-301949] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:17:48.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:17:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:17:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:17:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:17:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:17:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:17:19', tmtdew=18.27, humidity=29.94, cloud=0.0, wind=8.06, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:17:06.029', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:17:49.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:17:49.028 [DEBUG] [Thread-301952] [transport.py] [_log()] starting thread (client mode): 0xf572ea70
2025-12-24T12:17:49.028 [DEBUG] [Thread-301952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:17:49.043 [DEBUG] [Thread-301952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:17:49.043 [INFO] [Thread-301952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:17:49.050 [DEBUG] [Thread-301952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:17:49.050 [DEBUG] [Thread-301952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] client lang: <none>
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] server lang: <none>
2025-12-24T12:17:49.051 [DEBUG] [Thread-301952] [transport.py] [_log()] kex follows: False
2025-12-24T12:17:49.052 [DEBUG] [Thread-301952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:17:49.052 [DEBUG] [Thread-301952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:17:49.052 [DEBUG] [Thread-301952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:17:49.052 [DEBUG] [Thread-301952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:17:49.052 [DEBUG] [Thread-301952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:17:49.052 [DEBUG] [Thread-301952] [transport.py] [_log()] Compression: none
2025-12-24T12:17:49.052 [DEBUG] [Thread-301952] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:17:49.112 [DEBUG] [Thread-301952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:17:49.112 [DEBUG] [Thread-301952] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:17:49.113 [DEBUG] [Thread-301952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:17:49.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:17:49.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:17:49.173 [DEBUG] [Thread-301952] [transport.py] [_log()] userauth is OK
2025-12-24T12:17:49.174 [DEBUG] [Thread-301952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:17:49.174 [DEBUG] [Thread-301952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:17:49.174 [DEBUG] [Thread-301952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:17:49.174 [DEBUG] [Thread-301952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:17:49.193 [INFO] [Thread-301952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:17:49.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:17:49.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:17:50.035 [DEBUG] [Thread-301952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:17:50.035 [DEBUG] [Thread-301952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:17:50.083 [DEBUG] [Thread-301952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:17:50.083 [DEBUG] [Thread-301952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:17:50.092 [DEBUG] [Thread-301952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:17:50.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:17:50.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')
2025-12-24T12:17:50.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:17:50.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:17:50.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:17:50.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:17:50.128 [DEBUG] [Thread-301952] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:17:55.320 [DEBUG] [Thread-301954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:17:55.456 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:17:55.457 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:18:03.868 [DEBUG] [Thread-301955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:18:10.467 [DEBUG] [Thread-301956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:18:20.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:18:20.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:18:20.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:18:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 17, 51), 18.8, 29.1, 0.0, 9.48, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:18:21.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:17:51
2025-12-24T12:18:21.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:18:21.441 [DEBUG] [Thread-301957] [transport.py] [_log()] starting thread (client mode): 0xf81f3460
2025-12-24T12:18:21.442 [DEBUG] [Thread-301957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:18:21.445 [DEBUG] [Thread-301957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:18:21.445 [INFO] [Thread-301957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] client lang: <none>
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] server lang: <none>
2025-12-24T12:18:21.449 [DEBUG] [Thread-301957] [transport.py] [_log()] kex follows: False
2025-12-24T12:18:21.450 [DEBUG] [Thread-301957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:18:21.450 [DEBUG] [Thread-301957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:18:21.450 [DEBUG] [Thread-301957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:18:21.450 [DEBUG] [Thread-301957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:18:21.450 [DEBUG] [Thread-301957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:18:21.450 [DEBUG] [Thread-301957] [transport.py] [_log()] Compression: none
2025-12-24T12:18:21.450 [DEBUG] [Thread-301957] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:18:21.478 [DEBUG] [Thread-301957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:18:21.481 [DEBUG] [Thread-301957] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:18:21.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:18:21.483 [DEBUG] [Thread-301957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:18:21.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:18:21.485 [DEBUG] [Thread-301957] [transport.py] [_log()] userauth is OK
2025-12-24T12:18:21.485 [DEBUG] [Thread-301957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:18:21.485 [DEBUG] [Thread-301957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:18:21.485 [DEBUG] [Thread-301957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:18:21.485 [DEBUG] [Thread-301957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:18:21.519 [INFO] [Thread-301957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:18:21.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:18:22.176 [DEBUG] [Thread-301957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:18:22.176 [DEBUG] [Thread-301957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:18:22.177 [DEBUG] [Thread-301957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:18:22.217 [DEBUG] [Thread-301957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:18:22.217 [DEBUG] [Thread-301957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:18:22.219 [DEBUG] [Thread-301957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:18:22.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:18:22.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:18:22.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:18:22.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:18:22.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:18:22.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:18:22.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:18:22.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:18:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:18:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.428889 -999.00  +22.80  12.56     33   +5.90 1 1 1 1 1   888    0 17.61 9.83 ----- 12.6 12.6 252.6 14.2 30.5 -26.0 29.8 -24.0 29.6 -22.4 30.3 -24.6
2025-12-24T12:18:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:18:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:18:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.428889
2025-12-24T12:18:22.250 [DEBUG] [Thread-301957] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:18:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:18:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:18:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:18:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:18:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:18:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:17:51', tmtdew=18.8, humidity=29.1, cloud=0.0, wind=9.48, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:17:36.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:18:22.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:18:22.344 [DEBUG] [Thread-301960] [transport.py] [_log()] starting thread (client mode): 0xf572e0b0
2025-12-24T12:18:22.344 [DEBUG] [Thread-301960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:18:22.358 [DEBUG] [Thread-301960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:18:22.358 [INFO] [Thread-301960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] client lang: <none>
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] server lang: <none>
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] kex follows: False
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] Compression: none
2025-12-24T12:18:22.365 [DEBUG] [Thread-301960] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:18:22.428 [DEBUG] [Thread-301960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:18:22.428 [DEBUG] [Thread-301960] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:18:22.428 [DEBUG] [Thread-301960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:18:22.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:18:22.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:18:22.485 [DEBUG] [Thread-301960] [transport.py] [_log()] userauth is OK
2025-12-24T12:18:22.485 [DEBUG] [Thread-301960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:18:22.485 [DEBUG] [Thread-301960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:18:22.485 [DEBUG] [Thread-301960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:18:22.485 [DEBUG] [Thread-301960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:18:22.503 [INFO] [Thread-301960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:18:22.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:18:22.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:18:23.402 [DEBUG] [Thread-301960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:18:23.402 [DEBUG] [Thread-301960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:18:23.452 [DEBUG] [Thread-301960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:18:23.452 [DEBUG] [Thread-301960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:18:23.462 [DEBUG] [Thread-301960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:18:23.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:18:23.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:18:23.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
2025-12-24T12:18:23.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:18:23.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:18:23.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:18:23.500 [DEBUG] [Thread-301960] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:18:25.530 [DEBUG] [Thread-301962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:18:40.668 [DEBUG] [Thread-301963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:18:53.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:18:53.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:18:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:18:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 18, 24), 18.74, 29.24, 0.0, 9.19, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:18:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:18:24
2025-12-24T12:18:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:18:55.205 [DEBUG] [Thread-301964] [transport.py] [_log()] starting thread (client mode): 0xf81f2830
2025-12-24T12:18:55.206 [DEBUG] [Thread-301964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:18:55.219 [DEBUG] [Thread-301964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:18:55.219 [INFO] [Thread-301964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:18:55.223 [DEBUG] [Thread-301964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] client lang: <none>
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] server lang: <none>
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] kex follows: False
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:18:55.224 [DEBUG] [Thread-301964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:18:55.225 [DEBUG] [Thread-301964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:18:55.225 [DEBUG] [Thread-301964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:18:55.225 [DEBUG] [Thread-301964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:18:55.225 [DEBUG] [Thread-301964] [transport.py] [_log()] Compression: none
2025-12-24T12:18:55.225 [DEBUG] [Thread-301964] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:18:55.258 [DEBUG] [Thread-301964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:18:55.261 [DEBUG] [Thread-301964] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:18:55.262 [DEBUG] [Thread-301964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:18:55.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:18:55.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:18:55.267 [DEBUG] [Thread-301964] [transport.py] [_log()] userauth is OK
2025-12-24T12:18:55.267 [DEBUG] [Thread-301964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:18:55.267 [DEBUG] [Thread-301964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:18:55.267 [DEBUG] [Thread-301964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:18:55.267 [DEBUG] [Thread-301964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:18:55.289 [INFO] [Thread-301964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:18:55.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:18:55.599 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:18:55.601 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:18:55.717 [DEBUG] [Thread-301966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:18:55.943 [DEBUG] [Thread-301964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:18:55.943 [DEBUG] [Thread-301964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:18:55.944 [DEBUG] [Thread-301964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:18:55.985 [DEBUG] [Thread-301964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:18:55.985 [DEBUG] [Thread-301964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:18:55.988 [DEBUG] [Thread-301964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:18:56.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:18:56.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:18:56.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:18:56.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:18:56.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:18:56.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:18:56.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:18:56.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:18:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:18:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.429584 -999.00  +22.20   7.68     34   +5.80 1 2 1 1 1   888    0 17.29 2.12 ----- 7.7 7.7 234.6 12.4 30.6 -24.6 29.7 -24.0 29.5 -21.9 30.3 -22.9
2025-12-24T12:18:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:18:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:18:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.429584
2025-12-24T12:18:56.018 [DEBUG] [Thread-301964] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:18:56.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:18:56.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:18:56.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:18:56.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:18:56.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:18:56.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:18:24', tmtdew=18.74, humidity=29.24, cloud=0.0, wind=9.19, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:18:36.058', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:18:56.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:18:56.127 [DEBUG] [Thread-301968] [transport.py] [_log()] starting thread (client mode): 0xf5741cc0
2025-12-24T12:18:56.127 [DEBUG] [Thread-301968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:18:56.144 [DEBUG] [Thread-301968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:18:56.144 [INFO] [Thread-301968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:18:56.152 [DEBUG] [Thread-301968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:18:56.152 [DEBUG] [Thread-301968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:18:56.152 [DEBUG] [Thread-301968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:18:56.152 [DEBUG] [Thread-301968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:18:56.153 [DEBUG] [Thread-301968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:18:56.153 [DEBUG] [Thread-301968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:18:56.153 [DEBUG] [Thread-301968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:18:56.153 [DEBUG] [Thread-301968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:18:56.153 [DEBUG] [Thread-301968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:18:56.153 [DEBUG] [Thread-301968] [transport.py] [_log()] client lang: <none>
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] server lang: <none>
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] kex follows: False
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] Compression: none
2025-12-24T12:18:56.154 [DEBUG] [Thread-301968] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:18:56.215 [DEBUG] [Thread-301968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:18:56.215 [DEBUG] [Thread-301968] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:18:56.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:18:56.216 [DEBUG] [Thread-301968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:18:56.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:18:56.274 [DEBUG] [Thread-301968] [transport.py] [_log()] userauth is OK
2025-12-24T12:18:56.275 [DEBUG] [Thread-301968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:18:56.275 [DEBUG] [Thread-301968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:18:56.275 [DEBUG] [Thread-301968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:18:56.275 [DEBUG] [Thread-301968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:18:56.293 [INFO] [Thread-301968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:18:56.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:18:56.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:18:57.176 [DEBUG] [Thread-301968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:18:57.176 [DEBUG] [Thread-301968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:18:57.215 [DEBUG] [Thread-301968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:18:57.216 [DEBUG] [Thread-301968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:18:57.225 [DEBUG] [Thread-301968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:18:57.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:18:57.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:18:57.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:18:57.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:18:57.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:18:57.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:18:57.264 [DEBUG] [Thread-301968] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:19:04.115 [DEBUG] [Thread-301970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:19:10.784 [DEBUG] [Thread-301971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:19:25.926 [DEBUG] [Thread-301972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:19:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:19:27.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:19:27.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:19:28.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 18, 57), 18.93, 28.89, 0.0, 17.89, 22.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:19:28.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:18:57
2025-12-24T12:19:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:19:29.047 [DEBUG] [Thread-301973] [transport.py] [_log()] starting thread (client mode): 0xf81f32b0
2025-12-24T12:19:29.048 [DEBUG] [Thread-301973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:19:29.060 [DEBUG] [Thread-301973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:19:29.061 [INFO] [Thread-301973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:19:29.065 [DEBUG] [Thread-301973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:19:29.065 [DEBUG] [Thread-301973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:19:29.065 [DEBUG] [Thread-301973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:19:29.065 [DEBUG] [Thread-301973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] client lang: <none>
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] server lang: <none>
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] kex follows: False
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] Compression: none
2025-12-24T12:19:29.066 [DEBUG] [Thread-301973] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:19:29.100 [DEBUG] [Thread-301973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:19:29.104 [DEBUG] [Thread-301973] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:19:29.105 [DEBUG] [Thread-301973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:19:29.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:19:29.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:19:29.110 [DEBUG] [Thread-301973] [transport.py] [_log()] userauth is OK
2025-12-24T12:19:29.110 [DEBUG] [Thread-301973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:19:29.110 [DEBUG] [Thread-301973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:19:29.110 [DEBUG] [Thread-301973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:19:29.110 [DEBUG] [Thread-301973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:19:29.130 [INFO] [Thread-301973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:19:29.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:19:29.764 [DEBUG] [Thread-301973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:19:29.764 [DEBUG] [Thread-301973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:19:29.774 [DEBUG] [Thread-301973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:19:29.806 [DEBUG] [Thread-301973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:19:29.806 [DEBUG] [Thread-301973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:19:29.808 [DEBUG] [Thread-301973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:19:29.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:19:29.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:19:29.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:19:29.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:19:29.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:19:29.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:19:29.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:19:29.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:19:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:19:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.429931 -999.00  +22.50   6.51     34   +5.90 1 1 1 1 1   888    0 17.12 -0.74 ----- 6.5 6.5 218.0 11.2 30.7 -24.1 29.8 -26.6 29.5 -21.7 30.4 -23.3
2025-12-24T12:19:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:19:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:19:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.429931
2025-12-24T12:19:29.838 [DEBUG] [Thread-301973] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:19:29.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:19:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:19:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:19:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:19:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:19:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:18:57', tmtdew=18.93, humidity=28.89, cloud=0.0, wind=17.89, temperature=22.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:19:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:19:29.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:19:29.938 [DEBUG] [Thread-301976] [transport.py] [_log()] starting thread (client mode): 0xf81f0490
2025-12-24T12:19:29.939 [DEBUG] [Thread-301976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:19:29.953 [DEBUG] [Thread-301976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:19:29.953 [INFO] [Thread-301976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] client lang: <none>
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] server lang: <none>
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] kex follows: False
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] Compression: none
2025-12-24T12:19:29.961 [DEBUG] [Thread-301976] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:19:30.021 [DEBUG] [Thread-301976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:19:30.021 [DEBUG] [Thread-301976] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:19:30.021 [DEBUG] [Thread-301976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:19:30.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:19:30.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:19:30.078 [DEBUG] [Thread-301976] [transport.py] [_log()] userauth is OK
2025-12-24T12:19:30.078 [DEBUG] [Thread-301976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:19:30.078 [DEBUG] [Thread-301976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:19:30.078 [DEBUG] [Thread-301976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:19:30.078 [DEBUG] [Thread-301976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:19:30.092 [INFO] [Thread-301976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:19:30.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:19:30.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:19:30.936 [DEBUG] [Thread-301976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:19:30.936 [DEBUG] [Thread-301976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:19:30.975 [DEBUG] [Thread-301976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:19:30.975 [DEBUG] [Thread-301976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:19:30.985 [DEBUG] [Thread-301976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:19:30.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:19:30.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:19:31.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:19:31.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:19:31.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:19:31.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:19:31.023 [DEBUG] [Thread-301976] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:19:41.002 [DEBUG] [Thread-301978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:19:55.757 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:19:55.769 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:19:56.148 [DEBUG] [Thread-301979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:20:01.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:20:01.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:20:01.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:20:02.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 19, 30), 19.04, 28.71, 0.0, 15.67, 22.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:20:02.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:19:30
2025-12-24T12:20:02.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:20:02.791 [DEBUG] [Thread-301980] [transport.py] [_log()] starting thread (client mode): 0xf81f12a0
2025-12-24T12:20:02.792 [DEBUG] [Thread-301980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:20:02.802 [DEBUG] [Thread-301980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:20:02.802 [INFO] [Thread-301980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] client lang: <none>
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] server lang: <none>
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] kex follows: False
2025-12-24T12:20:02.808 [DEBUG] [Thread-301980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:20:02.809 [DEBUG] [Thread-301980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:20:02.809 [DEBUG] [Thread-301980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:20:02.810 [DEBUG] [Thread-301980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:20:02.810 [DEBUG] [Thread-301980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:20:02.810 [DEBUG] [Thread-301980] [transport.py] [_log()] Compression: none
2025-12-24T12:20:02.810 [DEBUG] [Thread-301980] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:20:02.852 [DEBUG] [Thread-301980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:20:02.855 [DEBUG] [Thread-301980] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:20:02.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:20:02.858 [DEBUG] [Thread-301980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:20:02.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:20:02.861 [DEBUG] [Thread-301980] [transport.py] [_log()] userauth is OK
2025-12-24T12:20:02.861 [DEBUG] [Thread-301980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:20:02.862 [DEBUG] [Thread-301980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:20:02.862 [DEBUG] [Thread-301980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:20:02.862 [DEBUG] [Thread-301980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:20:02.884 [INFO] [Thread-301980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:20:02.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:20:03.488 [DEBUG] [Thread-301980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:20:03.488 [DEBUG] [Thread-301980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:20:03.489 [DEBUG] [Thread-301980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:20:03.528 [DEBUG] [Thread-301980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:20:03.529 [DEBUG] [Thread-301980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:20:03.531 [DEBUG] [Thread-301980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:20:03.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:20:03.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:20:03.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:20:03.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:20:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:20:03.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:20:03.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:20:03.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:20:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:20:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.430278 -999.00  +23.00  16.79     33   +5.90 1 1 1 1 1   888    0 17.41 -1.59 ----- 16.8 16.8 178.7 19.9 30.6 -25.2 29.6 -27.2 29.6 -23.2 30.4 -24.4
2025-12-24T12:20:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:20:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:20:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.430278
2025-12-24T12:20:03.587 [DEBUG] [Thread-301980] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:20:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:20:03.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:20:03.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:20:03.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:20:03.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:20:03.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:19:30', tmtdew=19.04, humidity=28.71, cloud=0.0, wind=15.67, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:19:36.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:20:03.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:20:03.700 [DEBUG] [Thread-301983] [transport.py] [_log()] starting thread (client mode): 0xf81e4400
2025-12-24T12:20:03.700 [DEBUG] [Thread-301983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:20:03.717 [DEBUG] [Thread-301983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:20:03.717 [INFO] [Thread-301983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:20:03.725 [DEBUG] [Thread-301983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:20:03.726 [DEBUG] [Thread-301983] [transport.py] [_log()] client lang: <none>
2025-12-24T12:20:03.726 [DEBUG] [Thread-301983] [transport.py] [_log()] server lang: <none>
2025-12-24T12:20:03.726 [DEBUG] [Thread-301983] [transport.py] [_log()] kex follows: False
2025-12-24T12:20:03.726 [DEBUG] [Thread-301983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:20:03.726 [DEBUG] [Thread-301983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:20:03.726 [DEBUG] [Thread-301983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:20:03.726 [DEBUG] [Thread-301983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:20:03.726 [DEBUG] [Thread-301983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:20:03.727 [DEBUG] [Thread-301983] [transport.py] [_log()] Compression: none
2025-12-24T12:20:03.727 [DEBUG] [Thread-301983] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:20:03.782 [DEBUG] [Thread-301983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:20:03.782 [DEBUG] [Thread-301983] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:20:03.783 [DEBUG] [Thread-301983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:20:03.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:20:03.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:20:03.839 [DEBUG] [Thread-301983] [transport.py] [_log()] userauth is OK
2025-12-24T12:20:03.839 [DEBUG] [Thread-301983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:20:03.839 [DEBUG] [Thread-301983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:20:03.839 [DEBUG] [Thread-301983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:20:03.839 [DEBUG] [Thread-301983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:20:03.854 [INFO] [Thread-301983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:20:03.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:20:03.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:20:04.383 [DEBUG] [Thread-301985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:20:04.749 [DEBUG] [Thread-301983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:20:04.749 [DEBUG] [Thread-301983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:20:04.800 [DEBUG] [Thread-301983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:20:04.800 [DEBUG] [Thread-301983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:20:04.812 [DEBUG] [Thread-301983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:20:04.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:20:04.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:20:04.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:20:04.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:20:04.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:20:04.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:20:04.858 [DEBUG] [Thread-301983] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:20:11.203 [DEBUG] [Thread-301986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:20:26.343 [DEBUG] [Thread-301987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:20:34.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:20:34.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:20:34.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:20:36.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 20, 3), 19.26, 28.34, 0.0, 16.99, 22.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:20:36.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:20:03
2025-12-24T12:20:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:20:36.477 [DEBUG] [Thread-301988] [transport.py] [_log()] starting thread (client mode): 0xf81e7c70
2025-12-24T12:20:36.478 [DEBUG] [Thread-301988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:20:36.487 [DEBUG] [Thread-301988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:20:36.487 [INFO] [Thread-301988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:20:36.494 [DEBUG] [Thread-301988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:20:36.494 [DEBUG] [Thread-301988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:20:36.494 [DEBUG] [Thread-301988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:20:36.494 [DEBUG] [Thread-301988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:20:36.494 [DEBUG] [Thread-301988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:20:36.494 [DEBUG] [Thread-301988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:20:36.494 [DEBUG] [Thread-301988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:20:36.495 [DEBUG] [Thread-301988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:20:36.495 [DEBUG] [Thread-301988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:20:36.495 [DEBUG] [Thread-301988] [transport.py] [_log()] client lang: <none>
2025-12-24T12:20:36.495 [DEBUG] [Thread-301988] [transport.py] [_log()] server lang: <none>
2025-12-24T12:20:36.495 [DEBUG] [Thread-301988] [transport.py] [_log()] kex follows: False
2025-12-24T12:20:36.495 [DEBUG] [Thread-301988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:20:36.496 [DEBUG] [Thread-301988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:20:36.496 [DEBUG] [Thread-301988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:20:36.497 [DEBUG] [Thread-301988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:20:36.497 [DEBUG] [Thread-301988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:20:36.497 [DEBUG] [Thread-301988] [transport.py] [_log()] Compression: none
2025-12-24T12:20:36.497 [DEBUG] [Thread-301988] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:20:36.538 [DEBUG] [Thread-301988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:20:36.543 [DEBUG] [Thread-301988] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:20:36.546 [DEBUG] [Thread-301988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:20:36.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:20:36.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:20:36.551 [DEBUG] [Thread-301988] [transport.py] [_log()] userauth is OK
2025-12-24T12:20:36.551 [DEBUG] [Thread-301988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:20:36.552 [DEBUG] [Thread-301988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:20:36.552 [DEBUG] [Thread-301988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:20:36.552 [DEBUG] [Thread-301988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:20:36.581 [INFO] [Thread-301988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:20:36.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:20:37.233 [DEBUG] [Thread-301988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:20:37.233 [DEBUG] [Thread-301988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:20:37.233 [DEBUG] [Thread-301988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:20:37.274 [DEBUG] [Thread-301988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:20:37.274 [DEBUG] [Thread-301988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:20:37.276 [DEBUG] [Thread-301988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:20:37.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:20:37.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:20:37.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:20:37.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:20:37.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:20:37.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:20:37.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:20:37.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:20:37.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:20:37.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.430625 -999.00  +23.00  17.02     33   +5.80 1 1 1 1 1   888    0 16.90 -1.54 ----- 17.0 17.0 191.8 24.7 30.4 -25.9 29.3 -26.4 29.5 -23.7 30.2 -24.9
2025-12-24T12:20:37.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:20:37.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:20:37.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.430625
2025-12-24T12:20:37.305 [DEBUG] [Thread-301988] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:20:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:20:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:20:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:20:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:20:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:20:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:20:03', tmtdew=19.26, humidity=28.34, cloud=0.0, wind=16.99, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:20:06.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:20:37.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:20:37.404 [DEBUG] [Thread-301991] [transport.py] [_log()] starting thread (client mode): 0xf81f19f0
2025-12-24T12:20:37.404 [DEBUG] [Thread-301991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:20:37.419 [DEBUG] [Thread-301991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:20:37.419 [INFO] [Thread-301991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] client lang: <none>
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] server lang: <none>
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] kex follows: False
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:20:37.427 [DEBUG] [Thread-301991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:20:37.428 [DEBUG] [Thread-301991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:20:37.428 [DEBUG] [Thread-301991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:20:37.428 [DEBUG] [Thread-301991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:20:37.428 [DEBUG] [Thread-301991] [transport.py] [_log()] Compression: none
2025-12-24T12:20:37.428 [DEBUG] [Thread-301991] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:20:37.489 [DEBUG] [Thread-301991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:20:37.489 [DEBUG] [Thread-301991] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:20:37.490 [DEBUG] [Thread-301991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:20:37.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:20:37.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:20:37.547 [DEBUG] [Thread-301991] [transport.py] [_log()] userauth is OK
2025-12-24T12:20:37.547 [DEBUG] [Thread-301991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:20:37.547 [DEBUG] [Thread-301991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:20:37.547 [DEBUG] [Thread-301991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:20:37.547 [DEBUG] [Thread-301991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:20:37.561 [INFO] [Thread-301991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:20:37.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:20:37.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:20:38.410 [DEBUG] [Thread-301991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:20:38.410 [DEBUG] [Thread-301991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:20:38.458 [DEBUG] [Thread-301991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:20:38.458 [DEBUG] [Thread-301991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:20:38.466 [DEBUG] [Thread-301991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:20:38.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:20:38.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')
2025-12-24T12:20:38.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:20:38.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:20:38.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:20:38.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:20:38.499 [DEBUG] [Thread-301991] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:20:41.426 [DEBUG] [Thread-301993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:20:55.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:20:55.911 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:20:56.542 [DEBUG] [Thread-301994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:21:04.662 [DEBUG] [Thread-301995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:21:08.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:21:08.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:21:08.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:21:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 20, 36), 19.38, 27.85, 0.0, 17.63, 22.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:21:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:20:36
2025-12-24T12:21:09.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:21:09.689 [DEBUG] [Thread-301996] [transport.py] [_log()] starting thread (client mode): 0xf5740550
2025-12-24T12:21:09.690 [DEBUG] [Thread-301996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:21:09.690 [DEBUG] [Thread-301996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:21:09.691 [INFO] [Thread-301996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] client lang: <none>
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] server lang: <none>
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] kex follows: False
2025-12-24T12:21:09.696 [DEBUG] [Thread-301996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:21:09.697 [DEBUG] [Thread-301996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:21:09.697 [DEBUG] [Thread-301996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:21:09.697 [DEBUG] [Thread-301996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:21:09.697 [DEBUG] [Thread-301996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:21:09.697 [DEBUG] [Thread-301996] [transport.py] [_log()] Compression: none
2025-12-24T12:21:09.697 [DEBUG] [Thread-301996] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:21:09.724 [DEBUG] [Thread-301996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:21:09.726 [DEBUG] [Thread-301996] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:21:09.727 [DEBUG] [Thread-301996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:21:09.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:21:09.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:21:09.730 [DEBUG] [Thread-301996] [transport.py] [_log()] userauth is OK
2025-12-24T12:21:09.730 [DEBUG] [Thread-301996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:21:09.730 [DEBUG] [Thread-301996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:21:09.730 [DEBUG] [Thread-301996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:21:09.730 [DEBUG] [Thread-301996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:21:09.760 [INFO] [Thread-301996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:21:09.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:21:10.411 [DEBUG] [Thread-301996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:21:10.411 [DEBUG] [Thread-301996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:21:10.412 [DEBUG] [Thread-301996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:21:10.453 [DEBUG] [Thread-301996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:21:10.453 [DEBUG] [Thread-301996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:21:10.456 [DEBUG] [Thread-301996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:21:10.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:21:10.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:21:10.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:21:10.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:21:10.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:21:10.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:21:10.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:21:10.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:21:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:21:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.430972 -999.00  +22.70  13.41     33   +5.80 1 1 1 1 1   888    0 16.95 -3.48 ----- 13.4 13.4 211.7 20.9 30.4 -26.0 29.2 -27.4 29.4 -23.7 30.2 -25.0
2025-12-24T12:21:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:21:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:21:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.430972
2025-12-24T12:21:10.489 [DEBUG] [Thread-301996] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:21:10.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:21:10.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:21:10.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:21:10.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:21:10.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:21:10.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:20:36', tmtdew=19.38, humidity=27.85, cloud=0.0, wind=17.63, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:20:35.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:21:10.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:21:10.592 [DEBUG] [Thread-301999] [transport.py] [_log()] starting thread (client mode): 0xf5741d80
2025-12-24T12:21:10.592 [DEBUG] [Thread-301999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:21:10.607 [DEBUG] [Thread-301999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:21:10.607 [INFO] [Thread-301999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:21:10.614 [DEBUG] [Thread-301999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] client lang: <none>
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] server lang: <none>
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] kex follows: False
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] Compression: none
2025-12-24T12:21:10.615 [DEBUG] [Thread-301999] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:21:10.669 [DEBUG] [Thread-301999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:21:10.669 [DEBUG] [Thread-301999] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:21:10.669 [DEBUG] [Thread-301999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:21:10.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:21:10.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:21:10.727 [DEBUG] [Thread-301999] [transport.py] [_log()] userauth is OK
2025-12-24T12:21:10.727 [DEBUG] [Thread-301999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:21:10.727 [DEBUG] [Thread-301999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:21:10.727 [DEBUG] [Thread-301999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:21:10.727 [DEBUG] [Thread-301999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:21:10.741 [INFO] [Thread-301999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:21:10.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:21:10.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:21:11.566 [DEBUG] [Thread-301999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:21:11.566 [DEBUG] [Thread-301999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:21:11.604 [DEBUG] [Thread-302001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:21:11.613 [DEBUG] [Thread-301999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:21:11.613 [DEBUG] [Thread-301999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:21:11.621 [DEBUG] [Thread-301999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:21:11.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:21:11.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:21:11.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:21:11.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:21:11.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:21:11.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:21:11.655 [DEBUG] [Thread-301999] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:21:26.769 [DEBUG] [Thread-302002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:21:41.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:21:41.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:21:41.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:21:41.835 [DEBUG] [Thread-302003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:21:43.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 21, 9), 19.14, 28.23, 0.0, 16.25, 22.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:21:43.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:21:09
2025-12-24T12:21:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:21:43.565 [DEBUG] [Thread-302004] [transport.py] [_log()] starting thread (client mode): 0xf5742f50
2025-12-24T12:21:43.566 [DEBUG] [Thread-302004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:21:43.579 [DEBUG] [Thread-302004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:21:43.579 [INFO] [Thread-302004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] client lang: <none>
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] server lang: <none>
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] kex follows: False
2025-12-24T12:21:43.586 [DEBUG] [Thread-302004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:21:43.587 [DEBUG] [Thread-302004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:21:43.587 [DEBUG] [Thread-302004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:21:43.587 [DEBUG] [Thread-302004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:21:43.588 [DEBUG] [Thread-302004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:21:43.588 [DEBUG] [Thread-302004] [transport.py] [_log()] Compression: none
2025-12-24T12:21:43.588 [DEBUG] [Thread-302004] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:21:43.624 [DEBUG] [Thread-302004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:21:43.627 [DEBUG] [Thread-302004] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:21:43.629 [DEBUG] [Thread-302004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:21:43.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:21:43.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:21:43.633 [DEBUG] [Thread-302004] [transport.py] [_log()] userauth is OK
2025-12-24T12:21:43.633 [DEBUG] [Thread-302004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:21:43.633 [DEBUG] [Thread-302004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:21:43.633 [DEBUG] [Thread-302004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:21:43.633 [DEBUG] [Thread-302004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:21:43.653 [INFO] [Thread-302004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:21:43.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:21:44.294 [DEBUG] [Thread-302004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:21:44.294 [DEBUG] [Thread-302004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:21:44.295 [DEBUG] [Thread-302004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:21:44.336 [DEBUG] [Thread-302004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:21:44.336 [DEBUG] [Thread-302004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:21:44.338 [DEBUG] [Thread-302004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:21:44.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:21:44.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:21:44.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:21:44.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:21:44.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:21:44.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:21:44.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:21:44.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:21:44.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:21:44.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.431320 -999.00  +22.70   9.13     33   +5.90 1 1 1 1 1   888    0 17.06 -4.76 ----- 9.1 9.1 248.9 15.4 30.4 -26.1 29.4 -24.2 29.5 -22.0 30.2 -25.0
2025-12-24T12:21:44.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:21:44.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:21:44.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.431320
2025-12-24T12:21:44.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:21:44.372 [DEBUG] [Thread-302004] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:21:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:21:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:21:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:21:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:21:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:21:09', tmtdew=19.14, humidity=28.23, cloud=0.0, wind=16.25, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:21:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:21:44.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:21:44.468 [DEBUG] [Thread-302007] [transport.py] [_log()] starting thread (client mode): 0xf81f2f50
2025-12-24T12:21:44.468 [DEBUG] [Thread-302007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:21:44.483 [DEBUG] [Thread-302007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:21:44.483 [INFO] [Thread-302007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] client lang: <none>
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] server lang: <none>
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] kex follows: False
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:21:44.490 [DEBUG] [Thread-302007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:21:44.491 [DEBUG] [Thread-302007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:21:44.491 [DEBUG] [Thread-302007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:21:44.491 [DEBUG] [Thread-302007] [transport.py] [_log()] Compression: none
2025-12-24T12:21:44.491 [DEBUG] [Thread-302007] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:21:44.546 [DEBUG] [Thread-302007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:21:44.546 [DEBUG] [Thread-302007] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:21:44.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:21:44.546 [DEBUG] [Thread-302007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:21:44.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:21:44.603 [DEBUG] [Thread-302007] [transport.py] [_log()] userauth is OK
2025-12-24T12:21:44.603 [DEBUG] [Thread-302007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:21:44.603 [DEBUG] [Thread-302007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:21:44.603 [DEBUG] [Thread-302007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:21:44.603 [DEBUG] [Thread-302007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:21:44.619 [INFO] [Thread-302007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:21:44.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:21:44.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:21:45.426 [DEBUG] [Thread-302007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:21:45.427 [DEBUG] [Thread-302007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:21:45.474 [DEBUG] [Thread-302007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:21:45.475 [DEBUG] [Thread-302007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:21:45.483 [DEBUG] [Thread-302007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:21:45.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:21:45.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:21:45.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:21:45.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:21:45.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:21:45.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:21:45.519 [DEBUG] [Thread-302007] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:21:56.065 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:21:56.076 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:21:56.916 [DEBUG] [Thread-302009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:22:04.974 [DEBUG] [Thread-302010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:22:12.076 [DEBUG] [Thread-302011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:22:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:22:15.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:22: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
2025-12-24T12:22:16.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 21, 42), 18.86, 28.83, 0.0, 11.22, 21.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:22:16.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:21:42
2025-12-24T12:22:16.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:22:17.135 [DEBUG] [Thread-302012] [transport.py] [_log()] starting thread (client mode): 0xf81e5c60
2025-12-24T12:22:17.136 [DEBUG] [Thread-302012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:22:17.148 [DEBUG] [Thread-302012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:22:17.148 [INFO] [Thread-302012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] client lang: <none>
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] server lang: <none>
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] kex follows: False
2025-12-24T12:22:17.153 [DEBUG] [Thread-302012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:22:17.154 [DEBUG] [Thread-302012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:22:17.154 [DEBUG] [Thread-302012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:22:17.154 [DEBUG] [Thread-302012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:22:17.154 [DEBUG] [Thread-302012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:22:17.154 [DEBUG] [Thread-302012] [transport.py] [_log()] Compression: none
2025-12-24T12:22:17.154 [DEBUG] [Thread-302012] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:22:17.186 [DEBUG] [Thread-302012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:22:17.189 [DEBUG] [Thread-302012] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:22:17.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:22:17.191 [DEBUG] [Thread-302012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:22:17.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:22:17.195 [DEBUG] [Thread-302012] [transport.py] [_log()] userauth is OK
2025-12-24T12:22:17.195 [DEBUG] [Thread-302012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:22:17.195 [DEBUG] [Thread-302012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:22:17.195 [DEBUG] [Thread-302012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:22:17.195 [DEBUG] [Thread-302012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:22:17.217 [INFO] [Thread-302012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:22:17.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:22:17.895 [DEBUG] [Thread-302012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:22:17.895 [DEBUG] [Thread-302012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:22:17.896 [DEBUG] [Thread-302012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:22:17.937 [DEBUG] [Thread-302012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:22:17.937 [DEBUG] [Thread-302012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:22:17.939 [DEBUG] [Thread-302012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:22:17.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:22:17.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:22:17.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:22:17.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:22:17.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:22:17.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:22:17.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:22:17.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:22:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:22:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.431667 -999.00  +22.40  11.14     33   +5.60 1 1 1 1 1   888    0 17.15 -4.65 ----- 11.1 11.1 259.6 15.4 30.4 -25.2 29.5 -24.7 29.5 -22.5 30.1 -25.1
2025-12-24T12:22:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:22:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:22:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.431667
2025-12-24T12:22:17.976 [DEBUG] [Thread-302012] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:22:17.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:22:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:22:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:22:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:22:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:22:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:21:42', tmtdew=18.86, humidity=28.83, cloud=0.0, wind=11.22, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:21:36.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:22:18.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:22:18.075 [DEBUG] [Thread-302015] [transport.py] [_log()] starting thread (client mode): 0xf81f2980
2025-12-24T12:22:18.075 [DEBUG] [Thread-302015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:22:18.090 [DEBUG] [Thread-302015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:22:18.090 [INFO] [Thread-302015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] client lang: <none>
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] server lang: <none>
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] kex follows: False
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:22:18.097 [DEBUG] [Thread-302015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:22:18.098 [DEBUG] [Thread-302015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:22:18.098 [DEBUG] [Thread-302015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:22:18.098 [DEBUG] [Thread-302015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:22:18.098 [DEBUG] [Thread-302015] [transport.py] [_log()] Compression: none
2025-12-24T12:22:18.098 [DEBUG] [Thread-302015] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:22:18.155 [DEBUG] [Thread-302015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:22:18.155 [DEBUG] [Thread-302015] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:22:18.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:22:18.155 [DEBUG] [Thread-302015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:22:18.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:22:18.215 [DEBUG] [Thread-302015] [transport.py] [_log()] userauth is OK
2025-12-24T12:22:18.215 [DEBUG] [Thread-302015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:22:18.216 [DEBUG] [Thread-302015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:22:18.216 [DEBUG] [Thread-302015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:22:18.216 [DEBUG] [Thread-302015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:22:18.230 [INFO] [Thread-302015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:22:18.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:22:18.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:22:19.078 [DEBUG] [Thread-302015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:22:19.078 [DEBUG] [Thread-302015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:22:19.126 [DEBUG] [Thread-302015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:22:19.126 [DEBUG] [Thread-302015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:22:19.134 [DEBUG] [Thread-302015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:22:19.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:22: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')
2025-12-24T12:22:19.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:22:19.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:22:19.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:22:19.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:22:19.168 [DEBUG] [Thread-302015] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:22:27.170 [DEBUG] [Thread-302017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:22:42.311 [DEBUG] [Thread-302018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:22:49.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:22:49.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:22:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:22:50.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 22, 15), 18.63, 29.22, 0.0, 13.09, 21.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:22:50.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:22:15
2025-12-24T12:22:50.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:22:50.640 [DEBUG] [Thread-302019] [transport.py] [_log()] starting thread (client mode): 0xf81e5930
2025-12-24T12:22:50.640 [DEBUG] [Thread-302019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:22:50.652 [DEBUG] [Thread-302019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:22:50.652 [INFO] [Thread-302019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] client lang: <none>
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] server lang: <none>
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] kex follows: False
2025-12-24T12:22:50.657 [DEBUG] [Thread-302019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:22:50.658 [DEBUG] [Thread-302019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:22:50.658 [DEBUG] [Thread-302019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:22:50.658 [DEBUG] [Thread-302019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:22:50.658 [DEBUG] [Thread-302019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:22:50.658 [DEBUG] [Thread-302019] [transport.py] [_log()] Compression: none
2025-12-24T12:22:50.658 [DEBUG] [Thread-302019] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:22:50.682 [DEBUG] [Thread-302019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:22:50.685 [DEBUG] [Thread-302019] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:22:50.686 [DEBUG] [Thread-302019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:22:50.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:22:50.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:22:50.690 [DEBUG] [Thread-302019] [transport.py] [_log()] userauth is OK
2025-12-24T12:22:50.690 [DEBUG] [Thread-302019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:22:50.691 [DEBUG] [Thread-302019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:22:50.691 [DEBUG] [Thread-302019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:22:50.691 [DEBUG] [Thread-302019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:22:50.703 [INFO] [Thread-302019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:22:50.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:22:51.329 [DEBUG] [Thread-302019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:22:51.329 [DEBUG] [Thread-302019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:22:51.330 [DEBUG] [Thread-302019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:22:51.371 [DEBUG] [Thread-302019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:22:51.371 [DEBUG] [Thread-302019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:22:51.373 [DEBUG] [Thread-302019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:22:51.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:22:51.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:22:51.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:22:51.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:22:51.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:22:51.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:22:51.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:22:51.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:22:51.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:22:51.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.432014 -999.00  +22.20   9.29     34   +5.70 1 1 1 1 1   888    0 16.89 -4.92 ----- 9.3 9.3 232.6 11.7 30.5 -25.6 29.6 -24.2 29.5 -22.2 30.2 -24.0
2025-12-24T12:22:51.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:22:51.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:22:51.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.432014
2025-12-24T12:22:51.401 [DEBUG] [Thread-302019] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:22:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:22:51.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:22:51.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:22:51.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:22:51.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:22:51.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:22:15', tmtdew=18.63, humidity=29.22, cloud=0.0, wind=13.09, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:22:06.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:22:51.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:22:51.500 [DEBUG] [Thread-302022] [transport.py] [_log()] starting thread (client mode): 0xf572ca90
2025-12-24T12:22:51.500 [DEBUG] [Thread-302022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:22:51.515 [DEBUG] [Thread-302022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:22:51.515 [INFO] [Thread-302022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] client lang: <none>
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] server lang: <none>
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] kex follows: False
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] Compression: none
2025-12-24T12:22:51.522 [DEBUG] [Thread-302022] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:22:51.582 [DEBUG] [Thread-302022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:22:51.582 [DEBUG] [Thread-302022] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:22:51.582 [DEBUG] [Thread-302022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:22:51.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:22:51.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:22:51.640 [DEBUG] [Thread-302022] [transport.py] [_log()] userauth is OK
2025-12-24T12:22:51.640 [DEBUG] [Thread-302022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:22:51.640 [DEBUG] [Thread-302022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:22:51.640 [DEBUG] [Thread-302022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:22:51.640 [DEBUG] [Thread-302022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:22:51.654 [INFO] [Thread-302022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:22:51.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:22:51.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:22:52.475 [DEBUG] [Thread-302022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:22:52.476 [DEBUG] [Thread-302022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:22:52.515 [DEBUG] [Thread-302022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:22:52.515 [DEBUG] [Thread-302022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:22:52.524 [DEBUG] [Thread-302022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:22:52.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:22:52.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')
2025-12-24T12:22:52.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:22:52.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:22:52.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:22:52.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:22:52.562 [DEBUG] [Thread-302022] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:22:56.219 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:22:56.221 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:22:57.382 [DEBUG] [Thread-302024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:23:05.205 [DEBUG] [Thread-302025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:23:12.497 [DEBUG] [Thread-302026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:23:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:23:22.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:23:22.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:23:23.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 22, 48), 18.5, 29.44, 0.0, 9.49, 21.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:23:23.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:22:48
2025-12-24T12:23:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:23:24.196 [DEBUG] [Thread-302027] [transport.py] [_log()] starting thread (client mode): 0xf81e7b20
2025-12-24T12:23:24.197 [DEBUG] [Thread-302027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:23:24.205 [DEBUG] [Thread-302027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:23:24.205 [INFO] [Thread-302027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] client lang: <none>
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] server lang: <none>
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] kex follows: False
2025-12-24T12:23:24.210 [DEBUG] [Thread-302027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:23:24.211 [DEBUG] [Thread-302027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:23:24.211 [DEBUG] [Thread-302027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:23:24.211 [DEBUG] [Thread-302027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:23:24.211 [DEBUG] [Thread-302027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:23:24.211 [DEBUG] [Thread-302027] [transport.py] [_log()] Compression: none
2025-12-24T12:23:24.211 [DEBUG] [Thread-302027] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:23:24.245 [DEBUG] [Thread-302027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:23:24.249 [DEBUG] [Thread-302027] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:23:24.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:23:24.252 [DEBUG] [Thread-302027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:23:24.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:23:24.254 [DEBUG] [Thread-302027] [transport.py] [_log()] userauth is OK
2025-12-24T12:23:24.254 [DEBUG] [Thread-302027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:23:24.254 [DEBUG] [Thread-302027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:23:24.254 [DEBUG] [Thread-302027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:23:24.254 [DEBUG] [Thread-302027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:23:24.284 [INFO] [Thread-302027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:23:24.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:23:24.905 [DEBUG] [Thread-302027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:23:24.905 [DEBUG] [Thread-302027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:23:24.907 [DEBUG] [Thread-302027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:23:24.946 [DEBUG] [Thread-302027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:23:24.946 [DEBUG] [Thread-302027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:23:24.950 [DEBUG] [Thread-302027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:23:24.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:23:24.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:23:24.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:23:24.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:23:24.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:23:24.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:23:24.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:23:24.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:23:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:23:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.432709 -999.00  +23.40  10.03     32   +6.10 1 1 1 1 1   888    0 16.97 -3.04 ----- 10.0 10.0 186.9 16.1 30.6 -24.4 29.6 -23.9 29.5 -22.6 30.3 -23.0
2025-12-24T12:23:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:23:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:23:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.432709
2025-12-24T12:23:24.988 [DEBUG] [Thread-302027] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:23:25.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:23:25.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:23:25.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:23:25.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:23:25.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:23:25.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:22:48', tmtdew=18.5, humidity=29.44, cloud=0.0, wind=9.49, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:23:06.058', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:23:25.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:23:25.106 [DEBUG] [Thread-302030] [transport.py] [_log()] starting thread (client mode): 0xf5741f60
2025-12-24T12:23:25.106 [DEBUG] [Thread-302030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:23:25.120 [DEBUG] [Thread-302030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:23:25.120 [INFO] [Thread-302030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:23:25.128 [DEBUG] [Thread-302030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:23:25.128 [DEBUG] [Thread-302030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:23:25.128 [DEBUG] [Thread-302030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:23:25.128 [DEBUG] [Thread-302030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:23:25.128 [DEBUG] [Thread-302030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:23:25.128 [DEBUG] [Thread-302030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:23:25.128 [DEBUG] [Thread-302030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] client lang: <none>
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] server lang: <none>
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] kex follows: False
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:23:25.129 [DEBUG] [Thread-302030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:23:25.130 [DEBUG] [Thread-302030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:23:25.130 [DEBUG] [Thread-302030] [transport.py] [_log()] Compression: none
2025-12-24T12:23:25.130 [DEBUG] [Thread-302030] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:23:25.185 [DEBUG] [Thread-302030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:23:25.186 [DEBUG] [Thread-302030] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:23:25.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:23:25.186 [DEBUG] [Thread-302030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:23:25.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:23:25.245 [DEBUG] [Thread-302030] [transport.py] [_log()] userauth is OK
2025-12-24T12:23:25.245 [DEBUG] [Thread-302030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:23:25.245 [DEBUG] [Thread-302030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:23:25.245 [DEBUG] [Thread-302030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:23:25.245 [DEBUG] [Thread-302030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:23:25.264 [INFO] [Thread-302030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:23:25.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:23:25.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:23:26.090 [DEBUG] [Thread-302030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:23:26.091 [DEBUG] [Thread-302030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:23:26.138 [DEBUG] [Thread-302030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:23:26.139 [DEBUG] [Thread-302030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:23:26.148 [DEBUG] [Thread-302030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:23:26.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:23:26.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:23: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
2025-12-24T12:23:26.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:23:26.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:23:26.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:23:26.186 [DEBUG] [Thread-302030] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:23:27.570 [DEBUG] [Thread-302032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:23:42.712 [DEBUG] [Thread-302033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:23:56.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:23:56.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:23:56.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
2025-12-24T12:23:56.365 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:23:56.366 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:23:57.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 23, 21), 18.55, 29.34, 0.0, 7.62, 21.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:23:57.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:23:21
2025-12-24T12:23:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:23:57.621 [DEBUG] [Thread-302034] [transport.py] [_log()] starting thread (client mode): 0xf5743b50
2025-12-24T12:23:57.621 [DEBUG] [Thread-302034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:23:57.623 [DEBUG] [Thread-302034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:23:57.623 [INFO] [Thread-302034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] client lang: <none>
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] server lang: <none>
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] kex follows: False
2025-12-24T12:23:57.627 [DEBUG] [Thread-302034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:23:57.628 [DEBUG] [Thread-302034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:23:57.628 [DEBUG] [Thread-302034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:23:57.628 [DEBUG] [Thread-302034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:23:57.628 [DEBUG] [Thread-302034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:23:57.628 [DEBUG] [Thread-302034] [transport.py] [_log()] Compression: none
2025-12-24T12:23:57.628 [DEBUG] [Thread-302034] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:23:57.658 [DEBUG] [Thread-302034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:23:57.661 [DEBUG] [Thread-302034] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:23:57.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:23:57.663 [DEBUG] [Thread-302034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:23:57.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:23:57.701 [DEBUG] [Thread-302034] [transport.py] [_log()] userauth is OK
2025-12-24T12:23:57.701 [DEBUG] [Thread-302034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:23:57.701 [DEBUG] [Thread-302034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:23:57.701 [DEBUG] [Thread-302034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:23:57.701 [DEBUG] [Thread-302034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:23:57.730 [INFO] [Thread-302034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:23:57.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:23:57.766 [DEBUG] [Thread-302036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:23:58.302 [DEBUG] [Thread-302034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:23:58.302 [DEBUG] [Thread-302034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:23:58.303 [DEBUG] [Thread-302034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:23:58.343 [DEBUG] [Thread-302034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:23:58.344 [DEBUG] [Thread-302034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:23:58.345 [DEBUG] [Thread-302034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:23:58.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:23:58.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:23:58.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:23:58.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:23:58.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:23:58.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:23:58.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:23:58.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:23:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:23:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.433056 -999.00  +23.60   5.39     32   +6.00 1 1 1 1 1   888    0 16.95 1.08 ----- 5.4 5.4 206.1 14.5 30.6 -24.1 29.3 -29.4 29.5 -22.9 30.4 -22.9
2025-12-24T12:23:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:23:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:23:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.433056
2025-12-24T12:23:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:23:58.367 [DEBUG] [Thread-302034] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:23:58.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:23:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:23:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:23:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:23:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:23:21', tmtdew=18.55, humidity=29.34, cloud=0.0, wind=7.62, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:23:36.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:23:58.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:23:58.459 [DEBUG] [Thread-302038] [transport.py] [_log()] starting thread (client mode): 0xf81e41f0
2025-12-24T12:23:58.459 [DEBUG] [Thread-302038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:23:58.474 [DEBUG] [Thread-302038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:23:58.474 [INFO] [Thread-302038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] client lang: <none>
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] server lang: <none>
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] kex follows: False
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:23:58.481 [DEBUG] [Thread-302038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:23:58.482 [DEBUG] [Thread-302038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:23:58.482 [DEBUG] [Thread-302038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:23:58.482 [DEBUG] [Thread-302038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:23:58.482 [DEBUG] [Thread-302038] [transport.py] [_log()] Compression: none
2025-12-24T12:23:58.482 [DEBUG] [Thread-302038] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:23:58.543 [DEBUG] [Thread-302038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:23:58.544 [DEBUG] [Thread-302038] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:23:58.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:23:58.544 [DEBUG] [Thread-302038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:23:58.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:23:58.600 [DEBUG] [Thread-302038] [transport.py] [_log()] userauth is OK
2025-12-24T12:23:58.600 [DEBUG] [Thread-302038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:23:58.600 [DEBUG] [Thread-302038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:23:58.600 [DEBUG] [Thread-302038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:23:58.600 [DEBUG] [Thread-302038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:23:58.615 [INFO] [Thread-302038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:23:58.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:23:58.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:23:59.426 [DEBUG] [Thread-302038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:23:59.426 [DEBUG] [Thread-302038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:23:59.474 [DEBUG] [Thread-302038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:23:59.474 [DEBUG] [Thread-302038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:23:59.482 [DEBUG] [Thread-302038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:23:59.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:23:59.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:23:59.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:23:59.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:23:59.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:23:59.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:23:59.515 [DEBUG] [Thread-302038] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:24:05.547 [DEBUG] [Thread-302040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:24:12.820 [DEBUG] [Thread-302041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:24:27.950 [DEBUG] [Thread-302042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:24:29.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:24:29.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:24:29.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:24:30.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 23, 54), 19.21, 28.32, 0.0, 13.41, 22.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:24:30.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:23:54
2025-12-24T12:24:30.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:24:30.869 [DEBUG] [Thread-302043] [transport.py] [_log()] starting thread (client mode): 0xf81f35b0
2025-12-24T12:24:30.870 [DEBUG] [Thread-302043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:24:30.883 [DEBUG] [Thread-302043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:24:30.884 [INFO] [Thread-302043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:24:30.889 [DEBUG] [Thread-302043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:24:30.889 [DEBUG] [Thread-302043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:24:30.889 [DEBUG] [Thread-302043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:24:30.889 [DEBUG] [Thread-302043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:24:30.889 [DEBUG] [Thread-302043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:24:30.890 [DEBUG] [Thread-302043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:24:30.890 [DEBUG] [Thread-302043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:24:30.890 [DEBUG] [Thread-302043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:24:30.890 [DEBUG] [Thread-302043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:24:30.890 [DEBUG] [Thread-302043] [transport.py] [_log()] client lang: <none>
2025-12-24T12:24:30.890 [DEBUG] [Thread-302043] [transport.py] [_log()] server lang: <none>
2025-12-24T12:24:30.890 [DEBUG] [Thread-302043] [transport.py] [_log()] kex follows: False
2025-12-24T12:24:30.890 [DEBUG] [Thread-302043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:24:30.891 [DEBUG] [Thread-302043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:24:30.891 [DEBUG] [Thread-302043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:24:30.891 [DEBUG] [Thread-302043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:24:30.891 [DEBUG] [Thread-302043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:24:30.892 [DEBUG] [Thread-302043] [transport.py] [_log()] Compression: none
2025-12-24T12:24:30.892 [DEBUG] [Thread-302043] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:24:30.922 [DEBUG] [Thread-302043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:24:30.926 [DEBUG] [Thread-302043] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:24:30.928 [DEBUG] [Thread-302043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:24:30.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:24:30.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:24:30.934 [DEBUG] [Thread-302043] [transport.py] [_log()] userauth is OK
2025-12-24T12:24:30.934 [DEBUG] [Thread-302043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:24:30.934 [DEBUG] [Thread-302043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:24:30.934 [DEBUG] [Thread-302043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:24:30.934 [DEBUG] [Thread-302043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:24:30.963 [INFO] [Thread-302043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:24:30.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:24:31.607 [DEBUG] [Thread-302043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:24:31.607 [DEBUG] [Thread-302043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:24:31.607 [DEBUG] [Thread-302043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:24:31.648 [DEBUG] [Thread-302043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:24:31.648 [DEBUG] [Thread-302043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:24:31.650 [DEBUG] [Thread-302043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:24:31.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:24:31.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:24:31.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:24:31.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:24:31.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:24:31.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:24:31.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:24:31.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:24:31.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:24:31.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.433403 -999.00  +23.90  12.95     31   +5.90 1 2 1 1 1   888    0 17.24 6.10 ----- 12.9 12.9 209.6 16.6 30.5 -26.2 29.7 -23.7 29.7 -21.9 30.4 -24.6
2025-12-24T12:24:31.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:24:31.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:24:31.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.433403
2025-12-24T12:24:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:24:31.684 [DEBUG] [Thread-302043] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:24:31.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:24:31.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:24:31.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:24:31.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:24:31.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:23:54', tmtdew=19.21, humidity=28.32, cloud=0.0, wind=13.41, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:24:06.019', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:24:31.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:24:31.777 [DEBUG] [Thread-302046] [transport.py] [_log()] starting thread (client mode): 0xf572fa90
2025-12-24T12:24:31.778 [DEBUG] [Thread-302046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:24:31.792 [DEBUG] [Thread-302046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:24:31.792 [INFO] [Thread-302046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] client lang: <none>
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] server lang: <none>
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] kex follows: False
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:24:31.800 [DEBUG] [Thread-302046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:24:31.801 [DEBUG] [Thread-302046] [transport.py] [_log()] Compression: none
2025-12-24T12:24:31.801 [DEBUG] [Thread-302046] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:24:31.858 [DEBUG] [Thread-302046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:24:31.858 [DEBUG] [Thread-302046] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:24:31.859 [DEBUG] [Thread-302046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:24:31.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:24:31.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:24:31.913 [DEBUG] [Thread-302046] [transport.py] [_log()] userauth is OK
2025-12-24T12:24:31.914 [DEBUG] [Thread-302046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:24:31.914 [DEBUG] [Thread-302046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:24:31.914 [DEBUG] [Thread-302046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:24:31.914 [DEBUG] [Thread-302046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:24:31.947 [INFO] [Thread-302046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:24:31.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:24:31.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:24:32.789 [DEBUG] [Thread-302046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:24:32.789 [DEBUG] [Thread-302046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:24:32.837 [DEBUG] [Thread-302046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:24:32.838 [DEBUG] [Thread-302046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:24:32.846 [DEBUG] [Thread-302046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:24:32.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:24:32.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:24:32.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:24:32.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:24:32.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:24:32.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:24:32.882 [DEBUG] [Thread-302046] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:24:43.054 [DEBUG] [Thread-302048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:24:56.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:24:56.559 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:24:58.241 [DEBUG] [Thread-302049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:25:02.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:25:02.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:25:02.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:25:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 24, 27), 19.17, 28.42, 0.0, 12.53, 22.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:25:03.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:24:27
2025-12-24T12:25:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:25:04.289 [DEBUG] [Thread-302050] [transport.py] [_log()] starting thread (client mode): 0xf57a8c40
2025-12-24T12:25:04.290 [DEBUG] [Thread-302050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:25:04.300 [DEBUG] [Thread-302050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:25:04.300 [INFO] [Thread-302050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:25:04.305 [DEBUG] [Thread-302050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] client lang: <none>
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] server lang: <none>
2025-12-24T12:25:04.306 [DEBUG] [Thread-302050] [transport.py] [_log()] kex follows: False
2025-12-24T12:25:04.307 [DEBUG] [Thread-302050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:25:04.307 [DEBUG] [Thread-302050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:25:04.307 [DEBUG] [Thread-302050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:25:04.308 [DEBUG] [Thread-302050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:25:04.308 [DEBUG] [Thread-302050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:25:04.308 [DEBUG] [Thread-302050] [transport.py] [_log()] Compression: none
2025-12-24T12:25:04.308 [DEBUG] [Thread-302050] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:25:04.337 [DEBUG] [Thread-302050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:25:04.342 [DEBUG] [Thread-302050] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:25:04.344 [DEBUG] [Thread-302050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:25:04.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:25:04.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:25:04.348 [DEBUG] [Thread-302050] [transport.py] [_log()] userauth is OK
2025-12-24T12:25:04.349 [DEBUG] [Thread-302050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:25:04.349 [DEBUG] [Thread-302050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:25:04.349 [DEBUG] [Thread-302050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:25:04.349 [DEBUG] [Thread-302050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:25:04.374 [INFO] [Thread-302050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:25:04.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:25:05.034 [DEBUG] [Thread-302050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:25:05.034 [DEBUG] [Thread-302050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:25:05.044 [DEBUG] [Thread-302050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:25:05.075 [DEBUG] [Thread-302050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:25:05.075 [DEBUG] [Thread-302050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:25:05.079 [DEBUG] [Thread-302050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:25:05.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:25:05.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:25:05.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:25:05.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:25:05.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:25:05.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:25:05.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:25:05.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:25:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:25:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.433750 -999.00  +23.60   7.83     31   +5.80 1 1 1 1 1   888    0 17.38 10.69 ----- 7.8 7.8 207.2 16.6 30.6 -24.8 29.6 -24.8 29.6 -23.2 30.4 -22.6
2025-12-24T12:25:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:25:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:25:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.433750
2025-12-24T12:25:05.114 [DEBUG] [Thread-302050] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:25:05.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:25:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:25:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:25:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:25:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:25:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:24:27', tmtdew=19.17, humidity=28.42, cloud=0.0, wind=12.53, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:24:36.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:25:05.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:25:05.227 [DEBUG] [Thread-302053] [transport.py] [_log()] starting thread (client mode): 0xf572f610
2025-12-24T12:25:05.227 [DEBUG] [Thread-302053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:25:05.241 [DEBUG] [Thread-302053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:25:05.241 [INFO] [Thread-302053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:25:05.249 [DEBUG] [Thread-302053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:25:05.249 [DEBUG] [Thread-302053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] client lang: <none>
2025-12-24T12:25:05.250 [DEBUG] [Thread-302053] [transport.py] [_log()] server lang: <none>
2025-12-24T12:25:05.251 [DEBUG] [Thread-302053] [transport.py] [_log()] kex follows: False
2025-12-24T12:25:05.251 [DEBUG] [Thread-302053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:25:05.251 [DEBUG] [Thread-302053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:25:05.251 [DEBUG] [Thread-302053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:25:05.251 [DEBUG] [Thread-302053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:25:05.251 [DEBUG] [Thread-302053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:25:05.251 [DEBUG] [Thread-302053] [transport.py] [_log()] Compression: none
2025-12-24T12:25:05.252 [DEBUG] [Thread-302053] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:25:05.314 [DEBUG] [Thread-302053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:25:05.315 [DEBUG] [Thread-302053] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:25:05.315 [DEBUG] [Thread-302053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:25:05.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:25:05.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:25:05.374 [DEBUG] [Thread-302053] [transport.py] [_log()] userauth is OK
2025-12-24T12:25:05.374 [DEBUG] [Thread-302053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:25:05.375 [DEBUG] [Thread-302053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:25:05.375 [DEBUG] [Thread-302053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:25:05.375 [DEBUG] [Thread-302053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:25:05.397 [INFO] [Thread-302053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:25:05.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:25:05.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:25:05.866 [DEBUG] [Thread-302055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:25:06.242 [DEBUG] [Thread-302053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:25:06.242 [DEBUG] [Thread-302053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:25:06.280 [DEBUG] [Thread-302053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:25:06.280 [DEBUG] [Thread-302053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:25:06.288 [DEBUG] [Thread-302053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:25:06.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:25:06.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:25:06.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:25:06.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:25:06.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:25:06.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:25:06.323 [DEBUG] [Thread-302053] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:25:13.342 [DEBUG] [Thread-302056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:25:28.517 [DEBUG] [Thread-302057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:25:36.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:25:36.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:25:36.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
2025-12-24T12:25:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 25), 19.48, 27.96, 0.0, 13.82, 22.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:25:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:25:00
2025-12-24T12:25:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:25:37.614 [DEBUG] [Thread-302058] [transport.py] [_log()] starting thread (client mode): 0xf5742c20
2025-12-24T12:25:37.614 [DEBUG] [Thread-302058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:25:37.629 [DEBUG] [Thread-302058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:25:37.629 [INFO] [Thread-302058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:25:37.634 [DEBUG] [Thread-302058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:25:37.634 [DEBUG] [Thread-302058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:25:37.634 [DEBUG] [Thread-302058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:25:37.634 [DEBUG] [Thread-302058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:25:37.634 [DEBUG] [Thread-302058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:25:37.634 [DEBUG] [Thread-302058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:25:37.634 [DEBUG] [Thread-302058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] client lang: <none>
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] server lang: <none>
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] kex follows: False
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] Compression: none
2025-12-24T12:25:37.635 [DEBUG] [Thread-302058] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:25:37.668 [DEBUG] [Thread-302058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:25:37.672 [DEBUG] [Thread-302058] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:25:37.674 [DEBUG] [Thread-302058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:25:37.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:25:37.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:25:37.679 [DEBUG] [Thread-302058] [transport.py] [_log()] userauth is OK
2025-12-24T12:25:37.679 [DEBUG] [Thread-302058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:25:37.679 [DEBUG] [Thread-302058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:25:37.680 [DEBUG] [Thread-302058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:25:37.680 [DEBUG] [Thread-302058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:25:37.716 [INFO] [Thread-302058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:25:37.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:25:38.366 [DEBUG] [Thread-302058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:25:38.374 [DEBUG] [Thread-302058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:25:38.375 [DEBUG] [Thread-302058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:25:38.407 [DEBUG] [Thread-302058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:25:38.407 [DEBUG] [Thread-302058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:25:38.409 [DEBUG] [Thread-302058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:25:38.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:25:38.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:25:38.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:25:38.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:25:38.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:25:38.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:25:38.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:25:38.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:25:38.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:25:38.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.434097 -999.00  +23.90   4.40     31   +6.00 1 1 1 1 1   888    0 17.33 13.88 ----- 4.4 4.4 224.7 13.6 30.7 -24.1 29.6 -25.0 29.6 -21.9 30.5 -22.2
2025-12-24T12:25:38.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:25:38.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:25:38.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.434097
2025-12-24T12:25:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:25:38.437 [DEBUG] [Thread-302058] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:25:38.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:25:38.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:25:38.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:25:38.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:25:38.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:25:00', tmtdew=19.48, humidity=27.96, cloud=0.0, wind=13.82, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:25:05.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:25:38.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:25:38.526 [DEBUG] [Thread-302061] [transport.py] [_log()] starting thread (client mode): 0xf81e6770
2025-12-24T12:25:38.526 [DEBUG] [Thread-302061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:25:38.542 [DEBUG] [Thread-302061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:25:38.542 [INFO] [Thread-302061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:25:38.549 [DEBUG] [Thread-302061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:25:38.549 [DEBUG] [Thread-302061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:25:38.549 [DEBUG] [Thread-302061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:25:38.549 [DEBUG] [Thread-302061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:25:38.549 [DEBUG] [Thread-302061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:25:38.549 [DEBUG] [Thread-302061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:25:38.549 [DEBUG] [Thread-302061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] client lang: <none>
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] server lang: <none>
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] kex follows: False
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] Compression: none
2025-12-24T12:25:38.550 [DEBUG] [Thread-302061] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:25:38.610 [DEBUG] [Thread-302061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:25:38.610 [DEBUG] [Thread-302061] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:25:38.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:25:38.612 [DEBUG] [Thread-302061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:25:38.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:25:38.666 [DEBUG] [Thread-302061] [transport.py] [_log()] userauth is OK
2025-12-24T12:25:38.666 [DEBUG] [Thread-302061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:25:38.666 [DEBUG] [Thread-302061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:25:38.666 [DEBUG] [Thread-302061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:25:38.667 [DEBUG] [Thread-302061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:25:38.687 [INFO] [Thread-302061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:25:38.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:25:38.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:25:39.548 [DEBUG] [Thread-302061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:25:39.548 [DEBUG] [Thread-302061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:25:39.595 [DEBUG] [Thread-302061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:25:39.595 [DEBUG] [Thread-302061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:25:39.603 [DEBUG] [Thread-302061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:25:39.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:25:39.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:25:39.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:25:39.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:25:39.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:25:39.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:25:39.638 [DEBUG] [Thread-302061] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:25:43.578 [DEBUG] [Thread-302063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:25:56.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:25:56.699 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:25:58.675 [DEBUG] [Thread-302064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:26:06.107 [DEBUG] [Thread-302065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:26:09.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:26:09.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:26:09.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
2025-12-24T12:26:10.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 25, 34), 19.46, 28.06, 0.0, 12.9, 22.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:26:10.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:25:34
2025-12-24T12:26:10.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:26:10.886 [DEBUG] [Thread-302066] [transport.py] [_log()] starting thread (client mode): 0xf81e5720
2025-12-24T12:26:10.887 [DEBUG] [Thread-302066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:26:10.897 [DEBUG] [Thread-302066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:26:10.897 [INFO] [Thread-302066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] client lang: <none>
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] server lang: <none>
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] kex follows: False
2025-12-24T12:26:10.902 [DEBUG] [Thread-302066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:26:10.903 [DEBUG] [Thread-302066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:26:10.903 [DEBUG] [Thread-302066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:26:10.903 [DEBUG] [Thread-302066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:26:10.903 [DEBUG] [Thread-302066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:26:10.903 [DEBUG] [Thread-302066] [transport.py] [_log()] Compression: none
2025-12-24T12:26:10.903 [DEBUG] [Thread-302066] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:26:10.929 [DEBUG] [Thread-302066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:26:10.932 [DEBUG] [Thread-302066] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:26:10.933 [DEBUG] [Thread-302066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:26:10.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:26:10.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:26:10.937 [DEBUG] [Thread-302066] [transport.py] [_log()] userauth is OK
2025-12-24T12:26:10.937 [DEBUG] [Thread-302066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:26:10.937 [DEBUG] [Thread-302066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:26:10.937 [DEBUG] [Thread-302066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:26:10.937 [DEBUG] [Thread-302066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:26:10.955 [INFO] [Thread-302066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:26:10.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:26:11.571 [DEBUG] [Thread-302066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:26:11.571 [DEBUG] [Thread-302066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:26:11.572 [DEBUG] [Thread-302066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:26:11.612 [DEBUG] [Thread-302066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:26:11.612 [DEBUG] [Thread-302066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:26:11.616 [DEBUG] [Thread-302066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:26:11.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:26:11.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:26:11.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:26:11.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:26:11.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:26:11.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:26:11.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:26:11.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:26:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:26:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.434445 -999.00  +24.10  10.31     30   +5.80 1 1 1 1 1   888    0 17.54 14.80 ----- 10.3 10.3 241.5 15.8 30.5 -25.3 29.7 -24.6 29.7 -23.4 30.5 -24.3
2025-12-24T12:26:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:26:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:26:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.434445
2025-12-24T12:26:11.651 [DEBUG] [Thread-302066] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:26:11.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:26:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:26:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:26:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:26:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:26:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:25:34', tmtdew=19.46, humidity=28.06, cloud=0.0, wind=12.9, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:25:36.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:26:11.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:26:11.767 [DEBUG] [Thread-302069] [transport.py] [_log()] starting thread (client mode): 0xf57aaf80
2025-12-24T12:26:11.767 [DEBUG] [Thread-302069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:26:11.782 [DEBUG] [Thread-302069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:26:11.782 [INFO] [Thread-302069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:26:11.789 [DEBUG] [Thread-302069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:26:11.789 [DEBUG] [Thread-302069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:26:11.789 [DEBUG] [Thread-302069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:26:11.789 [DEBUG] [Thread-302069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:26:11.789 [DEBUG] [Thread-302069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:26:11.789 [DEBUG] [Thread-302069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:26:11.789 [DEBUG] [Thread-302069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] client lang: <none>
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] server lang: <none>
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] kex follows: False
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] Compression: none
2025-12-24T12:26:11.790 [DEBUG] [Thread-302069] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:26:11.848 [DEBUG] [Thread-302069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:26:11.848 [DEBUG] [Thread-302069] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:26:11.849 [DEBUG] [Thread-302069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:26:11.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:26:11.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:26:11.906 [DEBUG] [Thread-302069] [transport.py] [_log()] userauth is OK
2025-12-24T12:26:11.906 [DEBUG] [Thread-302069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:26:11.906 [DEBUG] [Thread-302069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:26:11.906 [DEBUG] [Thread-302069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:26:11.906 [DEBUG] [Thread-302069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:26:11.919 [INFO] [Thread-302069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:26:11.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:26:11.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:26:12.720 [DEBUG] [Thread-302069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:26:12.720 [DEBUG] [Thread-302069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:26:12.767 [DEBUG] [Thread-302069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:26:12.767 [DEBUG] [Thread-302069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:26:12.775 [DEBUG] [Thread-302069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:26:12.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:26:12.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:26:12.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:26:12.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:26:12.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:26:12.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:26:12.809 [DEBUG] [Thread-302069] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:26:13.739 [DEBUG] [Thread-302071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:26:28.892 [DEBUG] [Thread-302072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:26:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:26:42.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:26:42.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:26:43.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 26, 7), 19.37, 28.22, 0.0, 13.43, 22.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:26:43.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:26:07
2025-12-24T12:26:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:26:43.961 [DEBUG] [Thread-302073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:26:44.102 [DEBUG] [Thread-302074] [transport.py] [_log()] starting thread (client mode): 0xf57be4d0
2025-12-24T12:26:44.102 [DEBUG] [Thread-302074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:26:44.118 [DEBUG] [Thread-302074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:26:44.118 [INFO] [Thread-302074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] client lang: <none>
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] server lang: <none>
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] kex follows: False
2025-12-24T12:26:44.129 [DEBUG] [Thread-302074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:26:44.130 [DEBUG] [Thread-302074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:26:44.130 [DEBUG] [Thread-302074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:26:44.130 [DEBUG] [Thread-302074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:26:44.130 [DEBUG] [Thread-302074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:26:44.130 [DEBUG] [Thread-302074] [transport.py] [_log()] Compression: none
2025-12-24T12:26:44.130 [DEBUG] [Thread-302074] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:26:44.162 [DEBUG] [Thread-302074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:26:44.165 [DEBUG] [Thread-302074] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:26:44.167 [DEBUG] [Thread-302074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:26:44.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:26:44.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:26:44.206 [DEBUG] [Thread-302074] [transport.py] [_log()] userauth is OK
2025-12-24T12:26:44.207 [DEBUG] [Thread-302074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:26:44.207 [DEBUG] [Thread-302074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:26:44.207 [DEBUG] [Thread-302074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:26:44.207 [DEBUG] [Thread-302074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:26:44.239 [INFO] [Thread-302074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:26:44.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:26:44.924 [DEBUG] [Thread-302074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:26:44.924 [DEBUG] [Thread-302074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:26:44.925 [DEBUG] [Thread-302074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:26:44.967 [DEBUG] [Thread-302074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:26:44.967 [DEBUG] [Thread-302074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:26:44.971 [DEBUG] [Thread-302074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:26:44.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:26:44.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:26:44.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:26:44.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:26:44.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:26:45.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:26:45.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:26:45.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.434792 -999.00  +23.40  16.44     31   +5.60 1 1 1 1 1   888    0 17.31 16.98 ----- 16.4 16.4 238.0 18.9 30.4 -27.1 29.7 -24.3 29.6 -22.5 30.3 -25.8
2025-12-24T12:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:26:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.434792
2025-12-24T12:26:45.008 [DEBUG] [Thread-302074] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:26:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:26:45.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:26:45.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:26:45.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:26:45.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:26:45.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:26:07', tmtdew=19.37, humidity=28.22, cloud=0.0, wind=13.43, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:26:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:26:45.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:26:45.139 [DEBUG] [Thread-302077] [transport.py] [_log()] starting thread (client mode): 0xf57bcc10
2025-12-24T12:26:45.139 [DEBUG] [Thread-302077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:26:45.154 [DEBUG] [Thread-302077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:26:45.154 [INFO] [Thread-302077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] client lang: <none>
2025-12-24T12:26:45.162 [DEBUG] [Thread-302077] [transport.py] [_log()] server lang: <none>
2025-12-24T12:26:45.163 [DEBUG] [Thread-302077] [transport.py] [_log()] kex follows: False
2025-12-24T12:26:45.163 [DEBUG] [Thread-302077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:26:45.163 [DEBUG] [Thread-302077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:26:45.163 [DEBUG] [Thread-302077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:26:45.163 [DEBUG] [Thread-302077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:26:45.163 [DEBUG] [Thread-302077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:26:45.163 [DEBUG] [Thread-302077] [transport.py] [_log()] Compression: none
2025-12-24T12:26:45.163 [DEBUG] [Thread-302077] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:26:45.230 [DEBUG] [Thread-302077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:26:45.231 [DEBUG] [Thread-302077] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:26:45.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:26:45.232 [DEBUG] [Thread-302077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:26:45.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:26:45.286 [DEBUG] [Thread-302077] [transport.py] [_log()] userauth is OK
2025-12-24T12:26:45.287 [DEBUG] [Thread-302077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:26:45.287 [DEBUG] [Thread-302077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:26:45.287 [DEBUG] [Thread-302077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:26:45.287 [DEBUG] [Thread-302077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:26:45.306 [INFO] [Thread-302077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:26:45.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:26:45.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:26:46.169 [DEBUG] [Thread-302077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:26:46.169 [DEBUG] [Thread-302077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:26:46.216 [DEBUG] [Thread-302077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:26:46.216 [DEBUG] [Thread-302077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:26:46.225 [DEBUG] [Thread-302077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:26:46.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:26:46.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:26:46.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:26:46.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:26:46.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:26:46.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:26:46.257 [DEBUG] [Thread-302077] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:26:56.854 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:26:56.856 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:26:59.025 [DEBUG] [Thread-302079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:27:06.374 [DEBUG] [Thread-302080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:27:14.150 [DEBUG] [Thread-302081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:27:16.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:27:16.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:27:16.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:27:17.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 26, 39), 19.14, 28.19, 0.0, 11.96, 21.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:27:17.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:26:39
2025-12-24T12:27:17.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:27:17.480 [DEBUG] [Thread-302082] [transport.py] [_log()] starting thread (client mode): 0xf57ab460
2025-12-24T12:27:17.480 [DEBUG] [Thread-302082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:27:17.492 [DEBUG] [Thread-302082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:27:17.492 [INFO] [Thread-302082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:27:17.496 [DEBUG] [Thread-302082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] client lang: <none>
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] server lang: <none>
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] kex follows: False
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:27:17.497 [DEBUG] [Thread-302082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:27:17.498 [DEBUG] [Thread-302082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:27:17.498 [DEBUG] [Thread-302082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:27:17.498 [DEBUG] [Thread-302082] [transport.py] [_log()] Compression: none
2025-12-24T12:27:17.498 [DEBUG] [Thread-302082] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:27:17.533 [DEBUG] [Thread-302082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:27:17.538 [DEBUG] [Thread-302082] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:27:17.540 [DEBUG] [Thread-302082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:27:17.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:27:17.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:27:17.545 [DEBUG] [Thread-302082] [transport.py] [_log()] userauth is OK
2025-12-24T12:27:17.545 [DEBUG] [Thread-302082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:27:17.545 [DEBUG] [Thread-302082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:27:17.545 [DEBUG] [Thread-302082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:27:17.545 [DEBUG] [Thread-302082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:27:17.582 [INFO] [Thread-302082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:27:17.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:27:18.237 [DEBUG] [Thread-302082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:27:18.237 [DEBUG] [Thread-302082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:27:18.238 [DEBUG] [Thread-302082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:27:18.278 [DEBUG] [Thread-302082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:27:18.278 [DEBUG] [Thread-302082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:27:18.282 [DEBUG] [Thread-302082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:27:18.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:27:18.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:27:18.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:27:18.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:27:18.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:27:18.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:27:18.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:27:18.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:27:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:27:18.314 [DEBUG] [Thread-302082] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:27:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.435486 -999.00  +22.10  18.06     33   +5.40 1 1 1 1 1   888    0 17.55 10.40 ----- 18.1 18.1 271.2 22.8 30.2 -26.5 29.6 -24.2 29.1 -23.4 29.9 -24.2
2025-12-24T12:27:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:27:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:27:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.435486
2025-12-24T12:27:18.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:27:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:27:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:27:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:27:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:27:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:26:39', tmtdew=19.14, humidity=28.19, cloud=0.0, wind=11.96, temperature=21.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:27:05.990', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:27:18.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:27:18.434 [DEBUG] [Thread-302085] [transport.py] [_log()] starting thread (client mode): 0xf574c820
2025-12-24T12:27:18.434 [DEBUG] [Thread-302085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:27:18.449 [DEBUG] [Thread-302085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:27:18.449 [INFO] [Thread-302085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] client lang: <none>
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] server lang: <none>
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] kex follows: False
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:27:18.457 [DEBUG] [Thread-302085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:27:18.458 [DEBUG] [Thread-302085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:27:18.458 [DEBUG] [Thread-302085] [transport.py] [_log()] Compression: none
2025-12-24T12:27:18.458 [DEBUG] [Thread-302085] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:27:18.518 [DEBUG] [Thread-302085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:27:18.519 [DEBUG] [Thread-302085] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:27:18.520 [DEBUG] [Thread-302085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:27:18.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:27:18.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:27:18.574 [DEBUG] [Thread-302085] [transport.py] [_log()] userauth is OK
2025-12-24T12:27:18.574 [DEBUG] [Thread-302085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:27:18.574 [DEBUG] [Thread-302085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:27:18.575 [DEBUG] [Thread-302085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:27:18.575 [DEBUG] [Thread-302085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:27:18.596 [INFO] [Thread-302085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:27:18.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:27:18.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:27:19.427 [DEBUG] [Thread-302085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:27:19.428 [DEBUG] [Thread-302085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:27:19.475 [DEBUG] [Thread-302085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:27:19.475 [DEBUG] [Thread-302085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:27:19.483 [DEBUG] [Thread-302085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:27:19.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:27:19.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:27:19.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:27:19.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:27:19.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:27:19.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:27:19.519 [DEBUG] [Thread-302085] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:27:29.231 [DEBUG] [Thread-302087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:27:44.380 [DEBUG] [Thread-302088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:27:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:27:49.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:27:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:27:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 27, 46), 18.95, 29.11, 0.0, 13.55, 22.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:27:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:27:46
2025-12-24T12:27:50.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:27:50.782 [DEBUG] [Thread-302089] [transport.py] [_log()] starting thread (client mode): 0xf81e41f0
2025-12-24T12:27:50.783 [DEBUG] [Thread-302089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:27:50.795 [DEBUG] [Thread-302089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:27:50.796 [INFO] [Thread-302089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:27:50.801 [DEBUG] [Thread-302089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:27:50.801 [DEBUG] [Thread-302089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:27:50.801 [DEBUG] [Thread-302089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:27:50.801 [DEBUG] [Thread-302089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:27:50.801 [DEBUG] [Thread-302089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:27:50.801 [DEBUG] [Thread-302089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:27:50.802 [DEBUG] [Thread-302089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:27:50.802 [DEBUG] [Thread-302089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:27:50.802 [DEBUG] [Thread-302089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:27:50.802 [DEBUG] [Thread-302089] [transport.py] [_log()] client lang: <none>
2025-12-24T12:27:50.802 [DEBUG] [Thread-302089] [transport.py] [_log()] server lang: <none>
2025-12-24T12:27:50.802 [DEBUG] [Thread-302089] [transport.py] [_log()] kex follows: False
2025-12-24T12:27:50.802 [DEBUG] [Thread-302089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:27:50.803 [DEBUG] [Thread-302089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:27:50.803 [DEBUG] [Thread-302089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:27:50.803 [DEBUG] [Thread-302089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:27:50.803 [DEBUG] [Thread-302089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:27:50.803 [DEBUG] [Thread-302089] [transport.py] [_log()] Compression: none
2025-12-24T12:27:50.804 [DEBUG] [Thread-302089] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:27:50.837 [DEBUG] [Thread-302089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:27:50.841 [DEBUG] [Thread-302089] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:27:50.843 [DEBUG] [Thread-302089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:27:50.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:27:50.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:27:50.849 [DEBUG] [Thread-302089] [transport.py] [_log()] userauth is OK
2025-12-24T12:27:50.849 [DEBUG] [Thread-302089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:27:50.850 [DEBUG] [Thread-302089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:27:50.850 [DEBUG] [Thread-302089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:27:50.850 [DEBUG] [Thread-302089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:27:50.877 [INFO] [Thread-302089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:27:50.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:27:51.566 [DEBUG] [Thread-302089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:27:51.566 [DEBUG] [Thread-302089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:27:51.575 [DEBUG] [Thread-302089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:27:51.608 [DEBUG] [Thread-302089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:27:51.608 [DEBUG] [Thread-302089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:27:51.610 [DEBUG] [Thread-302089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:27:51.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:27:51.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:27:51.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:27:51.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:27:51.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:27:51.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:27:51.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:27:51.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:27:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:27:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.435833 -999.00  +22.20  10.79     34   +5.70 1 2 1 1 1   888    0 17.27 5.17 ----- 10.8 10.8 250.0 16.6 30.4 -24.6 29.6 -23.4 28.9 -20.8 29.9 -23.7
2025-12-24T12:27:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:27:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:27:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.435833
2025-12-24T12:27:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:27:51.645 [DEBUG] [Thread-302089] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:27:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:27:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:27:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:27:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:27:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:27:46', tmtdew=18.95, humidity=29.11, cloud=0.0, wind=13.55, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:27:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:27:51.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:27:51.739 [DEBUG] [Thread-302092] [transport.py] [_log()] starting thread (client mode): 0xf57aa140
2025-12-24T12:27:51.739 [DEBUG] [Thread-302092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:27:51.754 [DEBUG] [Thread-302092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:27:51.754 [INFO] [Thread-302092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] client lang: <none>
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] server lang: <none>
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] kex follows: False
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] Compression: none
2025-12-24T12:27:51.762 [DEBUG] [Thread-302092] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:27:51.818 [DEBUG] [Thread-302092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:27:51.819 [DEBUG] [Thread-302092] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:27:51.819 [DEBUG] [Thread-302092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:27:51.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:27:51.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:27:51.875 [DEBUG] [Thread-302092] [transport.py] [_log()] userauth is OK
2025-12-24T12:27:51.875 [DEBUG] [Thread-302092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:27:51.875 [DEBUG] [Thread-302092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:27:51.876 [DEBUG] [Thread-302092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:27:51.876 [DEBUG] [Thread-302092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:27:51.895 [INFO] [Thread-302092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:27:51.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:27:51.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:27:52.729 [DEBUG] [Thread-302092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:27:52.730 [DEBUG] [Thread-302092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:27:52.778 [DEBUG] [Thread-302092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:27:52.778 [DEBUG] [Thread-302092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:27:52.786 [DEBUG] [Thread-302092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:27:52.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:27:52.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:27:52.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:27:52.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:27:52.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:27:52.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:27:52.824 [DEBUG] [Thread-302092] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:27:57.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:27:57.008 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:27:59.478 [DEBUG] [Thread-302094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:28:06.640 [DEBUG] [Thread-302095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:28:14.622 [DEBUG] [Thread-302096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:28:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:28:22.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:28:22.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
2025-12-24T12:28:23.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 28, 19), 19.08, 28.86, 0.0, 14.06, 22.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:28:23.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:28:19
2025-12-24T12:28:24.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:28:24.410 [DEBUG] [Thread-302097] [transport.py] [_log()] starting thread (client mode): 0xf81e7c70
2025-12-24T12:28:24.411 [DEBUG] [Thread-302097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:28:24.422 [DEBUG] [Thread-302097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:28:24.423 [INFO] [Thread-302097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:28:24.427 [DEBUG] [Thread-302097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] client lang: <none>
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] server lang: <none>
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] kex follows: False
2025-12-24T12:28:24.428 [DEBUG] [Thread-302097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:28:24.429 [DEBUG] [Thread-302097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:28:24.429 [DEBUG] [Thread-302097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:28:24.429 [DEBUG] [Thread-302097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:28:24.429 [DEBUG] [Thread-302097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:28:24.429 [DEBUG] [Thread-302097] [transport.py] [_log()] Compression: none
2025-12-24T12:28:24.429 [DEBUG] [Thread-302097] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:28:24.471 [DEBUG] [Thread-302097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:28:24.476 [DEBUG] [Thread-302097] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:28:24.479 [DEBUG] [Thread-302097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:28:24.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:28:24.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:28:24.496 [DEBUG] [Thread-302097] [transport.py] [_log()] userauth is OK
2025-12-24T12:28:24.496 [DEBUG] [Thread-302097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:28:24.496 [DEBUG] [Thread-302097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:28:24.496 [DEBUG] [Thread-302097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:28:24.496 [DEBUG] [Thread-302097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:28:24.526 [INFO] [Thread-302097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:28:24.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:28:25.164 [DEBUG] [Thread-302097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:28:25.165 [DEBUG] [Thread-302097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:28:25.166 [DEBUG] [Thread-302097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:28:25.205 [DEBUG] [Thread-302097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:28:25.205 [DEBUG] [Thread-302097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:28:25.209 [DEBUG] [Thread-302097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:28:25.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:28:25.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:28:25.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:28:25.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:28:25.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:28:25.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:28:25.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:28:25.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:28:25.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:28:25.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.436181 -999.00  +22.70   5.64     33   +6.00 1 2 1 1 1   888    0 17.15 -0.23 ----- 5.6 5.6 191.4 16.7 30.6 -24.9 29.7 -23.1 29.2 -20.8 30.0 -21.7
2025-12-24T12:28:25.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:28:25.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:28:25.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.436181
2025-12-24T12:28:25.245 [DEBUG] [Thread-302097] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:28:25.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:28:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:28:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:28:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:28:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:28:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:28:19', tmtdew=19.08, humidity=28.86, cloud=0.0, wind=14.06, temperature=22.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:28:06.038', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:28:25.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:28:25.360 [DEBUG] [Thread-302100] [transport.py] [_log()] starting thread (client mode): 0xf81e5960
2025-12-24T12:28:25.360 [DEBUG] [Thread-302100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:28:25.374 [DEBUG] [Thread-302100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:28:25.374 [INFO] [Thread-302100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:28:25.382 [DEBUG] [Thread-302100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:28:25.382 [DEBUG] [Thread-302100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:28:25.382 [DEBUG] [Thread-302100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:28:25.382 [DEBUG] [Thread-302100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:28:25.382 [DEBUG] [Thread-302100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:28:25.383 [DEBUG] [Thread-302100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:28:25.383 [DEBUG] [Thread-302100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:28:25.383 [DEBUG] [Thread-302100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:28:25.383 [DEBUG] [Thread-302100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:28:25.383 [DEBUG] [Thread-302100] [transport.py] [_log()] client lang: <none>
2025-12-24T12:28:25.383 [DEBUG] [Thread-302100] [transport.py] [_log()] server lang: <none>
2025-12-24T12:28:25.384 [DEBUG] [Thread-302100] [transport.py] [_log()] kex follows: False
2025-12-24T12:28:25.384 [DEBUG] [Thread-302100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:28:25.384 [DEBUG] [Thread-302100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:28:25.384 [DEBUG] [Thread-302100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:28:25.384 [DEBUG] [Thread-302100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:28:25.384 [DEBUG] [Thread-302100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:28:25.384 [DEBUG] [Thread-302100] [transport.py] [_log()] Compression: none
2025-12-24T12:28:25.384 [DEBUG] [Thread-302100] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:28:25.443 [DEBUG] [Thread-302100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:28:25.444 [DEBUG] [Thread-302100] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:28:25.445 [DEBUG] [Thread-302100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:28:25.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:28:25.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:28:25.500 [DEBUG] [Thread-302100] [transport.py] [_log()] userauth is OK
2025-12-24T12:28:25.500 [DEBUG] [Thread-302100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:28:25.500 [DEBUG] [Thread-302100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:28:25.500 [DEBUG] [Thread-302100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:28:25.500 [DEBUG] [Thread-302100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:28:25.522 [INFO] [Thread-302100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:28:25.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:28:25.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:28:26.390 [DEBUG] [Thread-302100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:28:26.390 [DEBUG] [Thread-302100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:28:26.437 [DEBUG] [Thread-302100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:28:26.437 [DEBUG] [Thread-302100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:28:26.447 [DEBUG] [Thread-302100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:28:26.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:28:26.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:28:26.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:28:26.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:28:26.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:28:26.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:28:26.486 [DEBUG] [Thread-302100] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:28:29.673 [DEBUG] [Thread-302102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:28:44.755 [DEBUG] [Thread-302103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:28:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:28:56.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:28:56.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:28:57.162 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:28:57.163 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:28:57.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 28, 52), 19.2, 28.52, 0.0, 14.29, 22.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:28:57.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:28:52
2025-12-24T12:28:57.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:28:57.787 [DEBUG] [Thread-302104] [transport.py] [_log()] starting thread (client mode): 0xf572f9a0
2025-12-24T12:28:57.788 [DEBUG] [Thread-302104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:28:57.800 [DEBUG] [Thread-302104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:28:57.800 [INFO] [Thread-302104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] client lang: <none>
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] server lang: <none>
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] kex follows: False
2025-12-24T12:28:57.805 [DEBUG] [Thread-302104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:28:57.806 [DEBUG] [Thread-302104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:28:57.806 [DEBUG] [Thread-302104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:28:57.806 [DEBUG] [Thread-302104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:28:57.806 [DEBUG] [Thread-302104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:28:57.806 [DEBUG] [Thread-302104] [transport.py] [_log()] Compression: none
2025-12-24T12:28:57.806 [DEBUG] [Thread-302104] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:28:57.837 [DEBUG] [Thread-302104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:28:57.839 [DEBUG] [Thread-302104] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:28:57.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:28:57.841 [DEBUG] [Thread-302104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:28:57.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:28:57.843 [DEBUG] [Thread-302104] [transport.py] [_log()] userauth is OK
2025-12-24T12:28:57.843 [DEBUG] [Thread-302104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:28:57.843 [DEBUG] [Thread-302104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:28:57.843 [DEBUG] [Thread-302104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:28:57.843 [DEBUG] [Thread-302104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:28:57.861 [INFO] [Thread-302104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:28:57.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:28:58.509 [DEBUG] [Thread-302104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:28:58.509 [DEBUG] [Thread-302104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:28:58.509 [DEBUG] [Thread-302104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:28:58.550 [DEBUG] [Thread-302104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:28:58.550 [DEBUG] [Thread-302104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:28:58.553 [DEBUG] [Thread-302104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:28:58.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:28:58.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:28:58.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:28:58.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:28:58.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:28:58.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:28:58.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:28:58.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:28:58.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:28:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.436528 -999.00  +23.40   9.49     32   +6.00 1 1 1 1 1   888    0 16.78 -3.18 ----- 9.5 9.5 218.2 22.1 30.4 -26.3 29.7 -24.0 29.3 -22.6 29.9 -23.8
2025-12-24T12:28:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:28:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:28:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.436528
2025-12-24T12:28:58.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:28:58.580 [DEBUG] [Thread-302104] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:28:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:28:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:28:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:28:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:28:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:28:52', tmtdew=19.2, humidity=28.52, cloud=0.0, wind=14.29, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:28:36.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:28:58.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:28:58.672 [DEBUG] [Thread-302107] [transport.py] [_log()] starting thread (client mode): 0xf57a84c0
2025-12-24T12:28:58.672 [DEBUG] [Thread-302107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:28:58.687 [DEBUG] [Thread-302107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:28:58.687 [INFO] [Thread-302107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] client lang: <none>
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] server lang: <none>
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] kex follows: False
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] Compression: none
2025-12-24T12:28:58.695 [DEBUG] [Thread-302107] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:28:58.750 [DEBUG] [Thread-302107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:28:58.750 [DEBUG] [Thread-302107] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:28:58.750 [DEBUG] [Thread-302107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:28:58.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:28:58.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:28:58.807 [DEBUG] [Thread-302107] [transport.py] [_log()] userauth is OK
2025-12-24T12:28:58.807 [DEBUG] [Thread-302107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:28:58.807 [DEBUG] [Thread-302107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:28:58.807 [DEBUG] [Thread-302107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:28:58.807 [DEBUG] [Thread-302107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:28:58.820 [INFO] [Thread-302107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:28:58.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:28:58.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:28:59.661 [DEBUG] [Thread-302107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:28:59.661 [DEBUG] [Thread-302107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:28:59.708 [DEBUG] [Thread-302107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:28:59.708 [DEBUG] [Thread-302107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:28:59.716 [DEBUG] [Thread-302107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:28:59.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:28:59.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:28:59.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:28:59.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:28:59.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:28:59.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:28:59.748 [DEBUG] [Thread-302107] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:28:59.805 [DEBUG] [Thread-302109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:29:06.930 [DEBUG] [Thread-302110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:29:14.908 [DEBUG] [Thread-302111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:29:29.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:29:29.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:29:29.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:29:29.972 [DEBUG] [Thread-302112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:29:30.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 29, 25), 19.35, 28.26, 0.0, 20.1, 22.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:29:30.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:29:25
2025-12-24T12:29:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:29:31.008 [DEBUG] [Thread-302113] [transport.py] [_log()] starting thread (client mode): 0xf81f27d0
2025-12-24T12:29:31.008 [DEBUG] [Thread-302113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:29:31.016 [DEBUG] [Thread-302113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:29:31.017 [INFO] [Thread-302113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] client lang: <none>
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] server lang: <none>
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] kex follows: False
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] Compression: none
2025-12-24T12:29:31.020 [DEBUG] [Thread-302113] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:29:31.045 [DEBUG] [Thread-302113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:29:31.048 [DEBUG] [Thread-302113] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:29:31.049 [DEBUG] [Thread-302113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:29:31.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:29:31.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:29:31.052 [DEBUG] [Thread-302113] [transport.py] [_log()] userauth is OK
2025-12-24T12:29:31.052 [DEBUG] [Thread-302113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:29:31.052 [DEBUG] [Thread-302113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:29:31.052 [DEBUG] [Thread-302113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:29:31.052 [DEBUG] [Thread-302113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:29:31.070 [INFO] [Thread-302113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:29:31.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:29:31.728 [DEBUG] [Thread-302113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:29:31.728 [DEBUG] [Thread-302113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:29:31.739 [DEBUG] [Thread-302113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:29:31.769 [DEBUG] [Thread-302113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:29:31.769 [DEBUG] [Thread-302113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:29:31.773 [DEBUG] [Thread-302113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:29:31.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:29:31.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:29:31.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:29:31.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:29:31.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:29:31.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:29:31.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:29:31.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:29:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:29:31.802 [DEBUG] [Thread-302113] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:29:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.436875 -999.00  +23.40  11.54     32   +5.80 1 1 1 1 1   888    0 17.02 -3.52 ----- 11.5 11.5 195.0 16.9 30.4 -23.7 29.5 -24.7 29.2 -21.8 29.9 -22.5
2025-12-24T12:29:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:29:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:29:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.436875
2025-12-24T12:29:31.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:29:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:29:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:29:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:29:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:29:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:29:25', tmtdew=19.35, humidity=28.26, cloud=0.0, wind=20.1, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:29:06.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:29:31.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:29:31.913 [DEBUG] [Thread-302116] [transport.py] [_log()] starting thread (client mode): 0xf57a95a0
2025-12-24T12:29:31.913 [DEBUG] [Thread-302116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:29:31.928 [DEBUG] [Thread-302116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:29:31.928 [INFO] [Thread-302116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] client lang: <none>
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] server lang: <none>
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] kex follows: False
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] Compression: none
2025-12-24T12:29:31.935 [DEBUG] [Thread-302116] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:29:31.994 [DEBUG] [Thread-302116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:29:31.994 [DEBUG] [Thread-302116] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:29:31.994 [DEBUG] [Thread-302116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:29:31.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:29:31.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:29:32.052 [DEBUG] [Thread-302116] [transport.py] [_log()] userauth is OK
2025-12-24T12:29:32.052 [DEBUG] [Thread-302116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:29:32.052 [DEBUG] [Thread-302116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:29:32.052 [DEBUG] [Thread-302116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:29:32.052 [DEBUG] [Thread-302116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:29:32.069 [INFO] [Thread-302116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:29:32.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:29:32.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:29:32.923 [DEBUG] [Thread-302116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:29:32.923 [DEBUG] [Thread-302116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:29:32.970 [DEBUG] [Thread-302116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:29:32.970 [DEBUG] [Thread-302116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:29:32.978 [DEBUG] [Thread-302116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:29:32.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:29:32.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:29:32.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:29:33.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:29:33.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:29:33.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:29:33.013 [DEBUG] [Thread-302116] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:29:45.102 [DEBUG] [Thread-302118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:29:57.304 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:29:57.307 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:30:00.199 [DEBUG] [Thread-302119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:30:03.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:30:03.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:30:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:30:04.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 29, 25), 19.35, 28.26, 0.0, 20.1, 22.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:30:04.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:29:25
2025-12-24T12:30:04.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:30:04.504 [DEBUG] [Thread-302120] [transport.py] [_log()] starting thread (client mode): 0xf57726e0
2025-12-24T12:30:04.505 [DEBUG] [Thread-302120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:30:04.520 [DEBUG] [Thread-302120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:30:04.520 [INFO] [Thread-302120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:30:04.526 [DEBUG] [Thread-302120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:30:04.527 [DEBUG] [Thread-302120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:30:04.527 [DEBUG] [Thread-302120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:30:04.527 [DEBUG] [Thread-302120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:30:04.527 [DEBUG] [Thread-302120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:30:04.527 [DEBUG] [Thread-302120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:30:04.527 [DEBUG] [Thread-302120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:30:04.527 [DEBUG] [Thread-302120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:30:04.527 [DEBUG] [Thread-302120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:30:04.528 [DEBUG] [Thread-302120] [transport.py] [_log()] client lang: <none>
2025-12-24T12:30:04.528 [DEBUG] [Thread-302120] [transport.py] [_log()] server lang: <none>
2025-12-24T12:30:04.528 [DEBUG] [Thread-302120] [transport.py] [_log()] kex follows: False
2025-12-24T12:30:04.528 [DEBUG] [Thread-302120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:30:04.529 [DEBUG] [Thread-302120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:30:04.529 [DEBUG] [Thread-302120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:30:04.529 [DEBUG] [Thread-302120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:30:04.529 [DEBUG] [Thread-302120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:30:04.529 [DEBUG] [Thread-302120] [transport.py] [_log()] Compression: none
2025-12-24T12:30:04.529 [DEBUG] [Thread-302120] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:30:04.565 [DEBUG] [Thread-302120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:30:04.569 [DEBUG] [Thread-302120] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:30:04.571 [DEBUG] [Thread-302120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:30:04.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:30:04.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:30:04.576 [DEBUG] [Thread-302120] [transport.py] [_log()] userauth is OK
2025-12-24T12:30:04.577 [DEBUG] [Thread-302120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:30:04.577 [DEBUG] [Thread-302120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:30:04.577 [DEBUG] [Thread-302120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:30:04.577 [DEBUG] [Thread-302120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:30:04.616 [INFO] [Thread-302120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:30:04.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:30:05.351 [DEBUG] [Thread-302120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:30:05.352 [DEBUG] [Thread-302120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:30:05.352 [DEBUG] [Thread-302120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:30:05.393 [DEBUG] [Thread-302120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:30:05.393 [DEBUG] [Thread-302120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:30:05.396 [DEBUG] [Thread-302120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:30:05.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:30:05.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:30:05.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:30:05.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:30:05.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:30:05.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:30:05.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:30:05.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:30:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:30:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.437222 -999.00  +23.60  14.80     31   +5.70 1 1 1 1 1   888    0 16.87 -3.80 ----- 14.8 14.8 218.4 22.9 30.5 -24.3 29.4 -25.6 29.3 -21.5 30.1 -22.3
2025-12-24T12:30:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:30:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:30:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.437222
2025-12-24T12:30:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:30:05.438 [DEBUG] [Thread-302120] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:30:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:30:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:30:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:30:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:30:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:29:25', tmtdew=19.35, humidity=28.26, cloud=0.0, wind=20.1, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:29:35.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:30:05.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:30:05.527 [DEBUG] [Thread-302123] [transport.py] [_log()] starting thread (client mode): 0xf81f1300
2025-12-24T12:30:05.527 [DEBUG] [Thread-302123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:30:05.545 [DEBUG] [Thread-302123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:30:05.545 [INFO] [Thread-302123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] client lang: <none>
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] server lang: <none>
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] kex follows: False
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] Compression: none
2025-12-24T12:30:05.553 [DEBUG] [Thread-302123] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:30:05.612 [DEBUG] [Thread-302123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:30:05.613 [DEBUG] [Thread-302123] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:30:05.614 [DEBUG] [Thread-302123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:30:05.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:30:05.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:30:05.672 [DEBUG] [Thread-302123] [transport.py] [_log()] userauth is OK
2025-12-24T12:30:05.672 [DEBUG] [Thread-302123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:30:05.672 [DEBUG] [Thread-302123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:30:05.672 [DEBUG] [Thread-302123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:30:05.672 [DEBUG] [Thread-302123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:30:05.692 [INFO] [Thread-302123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:30:05.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:30:05.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:30:06.569 [DEBUG] [Thread-302123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:30:06.570 [DEBUG] [Thread-302123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:30:06.616 [DEBUG] [Thread-302123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:30:06.616 [DEBUG] [Thread-302123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:30:06.624 [DEBUG] [Thread-302123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:30:06.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:30:06.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:30:06.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:30:06.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:30:06.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:30:06.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:30:06.657 [DEBUG] [Thread-302123] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:30:07.271 [DEBUG] [Thread-302125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:30:15.273 [DEBUG] [Thread-302126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:30:30.478 [DEBUG] [Thread-302127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:30:36.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:30:36.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:30:36.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:30:37.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 30, 33), 19.54, 27.65, 0.0, 15.37, 22.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:30:37.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:30:33
2025-12-24T12:30:37.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:30:37.973 [DEBUG] [Thread-302128] [transport.py] [_log()] starting thread (client mode): 0xf5771e70
2025-12-24T12:30:37.975 [DEBUG] [Thread-302128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:30:37.985 [DEBUG] [Thread-302128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:30:37.985 [INFO] [Thread-302128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:30:37.990 [DEBUG] [Thread-302128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] client lang: <none>
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] server lang: <none>
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] kex follows: False
2025-12-24T12:30:37.991 [DEBUG] [Thread-302128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:30:37.992 [DEBUG] [Thread-302128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:30:37.992 [DEBUG] [Thread-302128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:30:37.992 [DEBUG] [Thread-302128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:30:37.992 [DEBUG] [Thread-302128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:30:37.992 [DEBUG] [Thread-302128] [transport.py] [_log()] Compression: none
2025-12-24T12:30:37.992 [DEBUG] [Thread-302128] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:30:38.030 [DEBUG] [Thread-302128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:30:38.035 [DEBUG] [Thread-302128] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:30:38.037 [DEBUG] [Thread-302128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:30:38.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:30:38.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:30:38.043 [DEBUG] [Thread-302128] [transport.py] [_log()] userauth is OK
2025-12-24T12:30:38.043 [DEBUG] [Thread-302128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:30:38.044 [DEBUG] [Thread-302128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:30:38.044 [DEBUG] [Thread-302128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:30:38.044 [DEBUG] [Thread-302128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:30:38.069 [INFO] [Thread-302128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:30:38.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:30:38.685 [DEBUG] [Thread-302128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:30:38.685 [DEBUG] [Thread-302128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:30:38.686 [DEBUG] [Thread-302128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:30:38.726 [DEBUG] [Thread-302128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:30:38.726 [DEBUG] [Thread-302128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:30:38.729 [DEBUG] [Thread-302128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:30:38.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:30:38.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:30:38.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:30:38.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:30:38.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:30:38.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:30:38.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:30:38.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:30:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:30:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.437570 -999.00  +23.70   9.66     31   +5.70 1 1 1 1 1   888    0 17.19 -3.96 ----- 9.7 9.7 203.2 13.5 30.5 -23.5 29.5 -26.2 29.4 -22.0 30.2 -22.4
2025-12-24T12:30:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:30:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:30:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.437570
2025-12-24T12:30:38.764 [DEBUG] [Thread-302128] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:30:38.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:30:38.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:30:38.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:30:38.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:30:38.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:30:38.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:30:33', tmtdew=19.54, humidity=27.65, cloud=0.0, wind=15.37, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:30:06.048', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:30:38.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:30:38.877 [DEBUG] [Thread-302131] [transport.py] [_log()] starting thread (client mode): 0xf5770520
2025-12-24T12:30:38.877 [DEBUG] [Thread-302131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:30:38.893 [DEBUG] [Thread-302131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:30:38.893 [INFO] [Thread-302131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:30:38.900 [DEBUG] [Thread-302131] [transport.py] [_log()] client lang: <none>
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] server lang: <none>
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] kex follows: False
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] Compression: none
2025-12-24T12:30:38.901 [DEBUG] [Thread-302131] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:30:38.961 [DEBUG] [Thread-302131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:30:38.961 [DEBUG] [Thread-302131] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:30:38.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:30:38.962 [DEBUG] [Thread-302131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:30:38.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:30:39.020 [DEBUG] [Thread-302131] [transport.py] [_log()] userauth is OK
2025-12-24T12:30:39.021 [DEBUG] [Thread-302131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:30:39.021 [DEBUG] [Thread-302131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:30:39.021 [DEBUG] [Thread-302131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:30:39.021 [DEBUG] [Thread-302131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:30:39.039 [INFO] [Thread-302131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:30:39.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:30:39.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:30:39.911 [DEBUG] [Thread-302131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:30:39.911 [DEBUG] [Thread-302131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:30:39.951 [DEBUG] [Thread-302131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:30:39.951 [DEBUG] [Thread-302131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:30:39.960 [DEBUG] [Thread-302131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:30:39.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:30:39.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:30:39.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:30:39.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:30:39.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:30:39.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:30:39.999 [DEBUG] [Thread-302131] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:30:45.566 [DEBUG] [Thread-302133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:30:57.457 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:30:57.458 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:31:00.752 [DEBUG] [Thread-302134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:31:07.541 [DEBUG] [Thread-302135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:31:10.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:31:10.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:31:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:31:10.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 31, 6), 19.72, 27.35, 0.0, 15.12, 22.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:31:10.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:31:06
2025-12-24T12:31:11.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:31:11.260 [DEBUG] [Thread-302136] [transport.py] [_log()] starting thread (client mode): 0xf5770910
2025-12-24T12:31:11.260 [DEBUG] [Thread-302136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:31:11.276 [DEBUG] [Thread-302136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:31:11.277 [INFO] [Thread-302136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:31:11.280 [DEBUG] [Thread-302136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:31:11.280 [DEBUG] [Thread-302136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] client lang: <none>
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] server lang: <none>
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] kex follows: False
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] Compression: none
2025-12-24T12:31:11.281 [DEBUG] [Thread-302136] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:31:11.301 [DEBUG] [Thread-302136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:31:11.301 [DEBUG] [Thread-302136] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:31:11.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:31:11.302 [DEBUG] [Thread-302136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:31:11.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:31:11.304 [DEBUG] [Thread-302136] [transport.py] [_log()] userauth is OK
2025-12-24T12:31:11.304 [DEBUG] [Thread-302136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:31:11.304 [DEBUG] [Thread-302136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:31:11.304 [DEBUG] [Thread-302136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:31:11.304 [DEBUG] [Thread-302136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:31:11.314 [INFO] [Thread-302136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:31:11.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:31:11.917 [DEBUG] [Thread-302136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:31:11.917 [DEBUG] [Thread-302136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:31:11.918 [DEBUG] [Thread-302136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:31:11.958 [DEBUG] [Thread-302136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:31:11.958 [DEBUG] [Thread-302136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:31:11.962 [DEBUG] [Thread-302136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:31:11.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:31:11.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:31:11.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:31:11.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:31:11.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:31:11.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:31:11.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:31:11.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:31:11.985 [DEBUG] [Thread-302136] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:31:11.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:31:11.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.437917 -999.00  +23.90   3.47     31   +6.10 1 2 1 1 1   888    0 16.89 -2.33 ----- 3.5 3.5 123.4 6.9 30.7 -23.2 29.6 -22.5 29.6 -20.4 30.4 -22.0
2025-12-24T12:31:11.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:31:11.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:31:11.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.437917
2025-12-24T12:31:11.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:31:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:31:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:31:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:31:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:31:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:31:06', tmtdew=19.72, humidity=27.35, cloud=0.0, wind=15.12, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:30:36.029', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:31:12.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:31:12.086 [DEBUG] [Thread-302139] [transport.py] [_log()] starting thread (client mode): 0xf5740940
2025-12-24T12:31:12.086 [DEBUG] [Thread-302139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:31:12.104 [DEBUG] [Thread-302139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:31:12.104 [INFO] [Thread-302139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] client lang: <none>
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] server lang: <none>
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] kex follows: False
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] Compression: none
2025-12-24T12:31:12.116 [DEBUG] [Thread-302139] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:31:12.172 [DEBUG] [Thread-302139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:31:12.172 [DEBUG] [Thread-302139] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:31:12.172 [DEBUG] [Thread-302139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:31:12.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:31:12.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:31:12.228 [DEBUG] [Thread-302139] [transport.py] [_log()] userauth is OK
2025-12-24T12:31:12.228 [DEBUG] [Thread-302139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:31:12.229 [DEBUG] [Thread-302139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:31:12.229 [DEBUG] [Thread-302139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:31:12.229 [DEBUG] [Thread-302139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:31:12.252 [INFO] [Thread-302139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:31:12.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:31:12.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:31:13.110 [DEBUG] [Thread-302139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:31:13.110 [DEBUG] [Thread-302139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:31:13.158 [DEBUG] [Thread-302139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:31:13.159 [DEBUG] [Thread-302139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:31:13.167 [DEBUG] [Thread-302139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:31:13.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:31:13.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:31:13.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:31:13.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:31:13.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:31:13.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:31:13.201 [DEBUG] [Thread-302139] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:31:15.812 [DEBUG] [Thread-302141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:31:30.960 [DEBUG] [Thread-302142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:31:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:31:43.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:31:43.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:31:44.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 31, 38), 19.96, 27.28, 0.0, 15.93, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:31:44.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:31:38
2025-12-24T12:31:44.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:31:44.589 [DEBUG] [Thread-302143] [transport.py] [_log()] starting thread (client mode): 0xf5740dc0
2025-12-24T12:31:44.590 [DEBUG] [Thread-302143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:31:44.599 [DEBUG] [Thread-302143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:31:44.599 [INFO] [Thread-302143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:31:44.604 [DEBUG] [Thread-302143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:31:44.604 [DEBUG] [Thread-302143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:31:44.604 [DEBUG] [Thread-302143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] client lang: <none>
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] server lang: <none>
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] kex follows: False
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:31:44.605 [DEBUG] [Thread-302143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:31:44.606 [DEBUG] [Thread-302143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:31:44.606 [DEBUG] [Thread-302143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:31:44.606 [DEBUG] [Thread-302143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:31:44.606 [DEBUG] [Thread-302143] [transport.py] [_log()] Compression: none
2025-12-24T12:31:44.606 [DEBUG] [Thread-302143] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:31:44.645 [DEBUG] [Thread-302143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:31:44.649 [DEBUG] [Thread-302143] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:31:44.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:31:44.653 [DEBUG] [Thread-302143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:31:44.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:31:44.657 [DEBUG] [Thread-302143] [transport.py] [_log()] userauth is OK
2025-12-24T12:31:44.657 [DEBUG] [Thread-302143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:31:44.658 [DEBUG] [Thread-302143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:31:44.658 [DEBUG] [Thread-302143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:31:44.658 [DEBUG] [Thread-302143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:31:44.685 [INFO] [Thread-302143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:31:44.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:31:45.312 [DEBUG] [Thread-302143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:31:45.312 [DEBUG] [Thread-302143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:31:45.313 [DEBUG] [Thread-302143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:31:45.352 [DEBUG] [Thread-302143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:31:45.352 [DEBUG] [Thread-302143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:31:45.354 [DEBUG] [Thread-302143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:31:45.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:31:45.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:31:45.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:31:45.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:31:45.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:31:45.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:31:45.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:31:45.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:31:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:31:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.438611 -999.00  +23.80   6.06     31   +5.70 1 2 1 1 1   888    0 17.24 5.13 ----- 6.1 6.1 210.0 14.1 30.4 -26.7 29.6 -24.0 29.6 -21.2 30.4 -24.6
2025-12-24T12:31:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:31:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:31:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.438611
2025-12-24T12:31:45.381 [DEBUG] [Thread-302143] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:31:45.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:31:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:31:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:31:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:31:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:31:45.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:31:38', tmtdew=19.96, humidity=27.28, cloud=0.0, wind=15.93, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:31:35.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:31:45.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:31:45.486 [DEBUG] [Thread-302146] [transport.py] [_log()] starting thread (client mode): 0xf57729b0
2025-12-24T12:31:45.486 [DEBUG] [Thread-302146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:31:45.503 [DEBUG] [Thread-302146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:31:45.503 [INFO] [Thread-302146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] client lang: <none>
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] server lang: <none>
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] kex follows: False
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] Compression: none
2025-12-24T12:31:45.511 [DEBUG] [Thread-302146] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:31:45.567 [DEBUG] [Thread-302146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:31:45.567 [DEBUG] [Thread-302146] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:31:45.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:31:45.567 [DEBUG] [Thread-302146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:31:45.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:31:45.624 [DEBUG] [Thread-302146] [transport.py] [_log()] userauth is OK
2025-12-24T12:31:45.624 [DEBUG] [Thread-302146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:31:45.624 [DEBUG] [Thread-302146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:31:45.624 [DEBUG] [Thread-302146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:31:45.624 [DEBUG] [Thread-302146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:31:45.640 [INFO] [Thread-302146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:31:45.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:31:45.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:31:46.058 [DEBUG] [Thread-302148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:31:46.493 [DEBUG] [Thread-302146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:31:46.493 [DEBUG] [Thread-302146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:31:46.540 [DEBUG] [Thread-302146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:31:46.540 [DEBUG] [Thread-302146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:31:46.549 [DEBUG] [Thread-302146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:31:46.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:31:46.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:31:46.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:31:46.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:31:46.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:31:46.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:31:46.582 [DEBUG] [Thread-302146] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:31:57.606 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:31:57.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:32:01.201 [DEBUG] [Thread-302149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:32:07.861 [DEBUG] [Thread-302150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:32:16.285 [DEBUG] [Thread-302151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:32:16.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:32:16.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:32:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:32:17.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 32, 12), 19.65, 27.73, 0.0, 16.71, 22.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:32:17.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:32:12
2025-12-24T12:32:17.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:32:17.953 [DEBUG] [Thread-302152] [transport.py] [_log()] starting thread (client mode): 0xf574fc10
2025-12-24T12:32:17.954 [DEBUG] [Thread-302152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:32:17.954 [DEBUG] [Thread-302152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:32:17.954 [INFO] [Thread-302152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] client lang: <none>
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] server lang: <none>
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] kex follows: False
2025-12-24T12:32:17.959 [DEBUG] [Thread-302152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:32:17.960 [DEBUG] [Thread-302152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:32:17.960 [DEBUG] [Thread-302152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:32:17.960 [DEBUG] [Thread-302152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:32:17.960 [DEBUG] [Thread-302152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:32:17.960 [DEBUG] [Thread-302152] [transport.py] [_log()] Compression: none
2025-12-24T12:32:17.960 [DEBUG] [Thread-302152] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:32:17.986 [DEBUG] [Thread-302152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:32:17.990 [DEBUG] [Thread-302152] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:32:17.992 [DEBUG] [Thread-302152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:32:17.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:32:17.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:32:17.997 [DEBUG] [Thread-302152] [transport.py] [_log()] userauth is OK
2025-12-24T12:32:17.997 [DEBUG] [Thread-302152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:32:17.997 [DEBUG] [Thread-302152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:32:17.997 [DEBUG] [Thread-302152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:32:17.997 [DEBUG] [Thread-302152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:32:18.023 [INFO] [Thread-302152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:32:18.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:32:18.607 [DEBUG] [Thread-302152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:32:18.608 [DEBUG] [Thread-302152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:32:18.609 [DEBUG] [Thread-302152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:32:18.649 [DEBUG] [Thread-302152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:32:18.649 [DEBUG] [Thread-302152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:32:18.652 [DEBUG] [Thread-302152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:32:18.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:32:18.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:32:18.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:32:18.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:32:18.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:32:18.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:32:18.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:32:18.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:32:18.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:32:18.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.438958 -999.00  +24.10  11.38     30   +5.80 1 1 1 1 1   888    0 17.70 8.92 ----- 11.4 11.4 215.9 18.3 30.1 -28.6 29.4 -24.1 29.4 -22.7 30.1 -28.1
2025-12-24T12:32:18.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:32:18.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:32:18.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.438958
2025-12-24T12:32:18.689 [DEBUG] [Thread-302152] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:32:18.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:32:18.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:32:18.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:32:18.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:32:18.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:32:18.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:32:12', tmtdew=19.65, humidity=27.73, cloud=0.0, wind=16.71, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:32:05.971', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:32:18.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:32:18.814 [DEBUG] [Thread-302155] [transport.py] [_log()] starting thread (client mode): 0xf574dd20
2025-12-24T12:32:18.814 [DEBUG] [Thread-302155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:32:18.831 [DEBUG] [Thread-302155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:32:18.832 [INFO] [Thread-302155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:32:18.844 [DEBUG] [Thread-302155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:32:18.845 [DEBUG] [Thread-302155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:32:18.845 [DEBUG] [Thread-302155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:32:18.845 [DEBUG] [Thread-302155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:32:18.845 [DEBUG] [Thread-302155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:32:18.845 [DEBUG] [Thread-302155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:32:18.845 [DEBUG] [Thread-302155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:32:18.845 [DEBUG] [Thread-302155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:32:18.845 [DEBUG] [Thread-302155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] client lang: <none>
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] server lang: <none>
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] kex follows: False
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] Compression: none
2025-12-24T12:32:18.846 [DEBUG] [Thread-302155] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:32:18.905 [DEBUG] [Thread-302155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:32:18.906 [DEBUG] [Thread-302155] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:32:18.907 [DEBUG] [Thread-302155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:32:18.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:32:18.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:32:18.962 [DEBUG] [Thread-302155] [transport.py] [_log()] userauth is OK
2025-12-24T12:32:18.962 [DEBUG] [Thread-302155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:32:18.962 [DEBUG] [Thread-302155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:32:18.962 [DEBUG] [Thread-302155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:32:18.962 [DEBUG] [Thread-302155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:32:18.983 [INFO] [Thread-302155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:32:18.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:32:18.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:32:19.875 [DEBUG] [Thread-302155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:32:19.875 [DEBUG] [Thread-302155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:32:19.922 [DEBUG] [Thread-302155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:32:19.922 [DEBUG] [Thread-302155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:32:19.932 [DEBUG] [Thread-302155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:32:19.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:32:19.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:32:19.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:32:19.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:32:19.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:32:19.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:32:19.967 [DEBUG] [Thread-302155] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:32:31.381 [DEBUG] [Thread-302157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:32:46.501 [DEBUG] [Thread-302158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:32:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:32:49.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:32:50.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:32:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 32, 45), 19.76, 27.21, 0.0, 11.7, 22.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:32:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:32:45
2025-12-24T12:32:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:32:51.311 [DEBUG] [Thread-302159] [transport.py] [_log()] starting thread (client mode): 0xf5773190
2025-12-24T12:32:51.312 [DEBUG] [Thread-302159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:32:51.324 [DEBUG] [Thread-302159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:32:51.324 [INFO] [Thread-302159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:32:51.328 [DEBUG] [Thread-302159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] client lang: <none>
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] server lang: <none>
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] kex follows: False
2025-12-24T12:32:51.329 [DEBUG] [Thread-302159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:32:51.330 [DEBUG] [Thread-302159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:32:51.330 [DEBUG] [Thread-302159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:32:51.330 [DEBUG] [Thread-302159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:32:51.330 [DEBUG] [Thread-302159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:32:51.330 [DEBUG] [Thread-302159] [transport.py] [_log()] Compression: none
2025-12-24T12:32:51.330 [DEBUG] [Thread-302159] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:32:51.365 [DEBUG] [Thread-302159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:32:51.370 [DEBUG] [Thread-302159] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:32:51.371 [DEBUG] [Thread-302159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:32:51.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:32:51.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:32:51.377 [DEBUG] [Thread-302159] [transport.py] [_log()] userauth is OK
2025-12-24T12:32:51.377 [DEBUG] [Thread-302159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:32:51.377 [DEBUG] [Thread-302159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:32:51.377 [DEBUG] [Thread-302159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:32:51.377 [DEBUG] [Thread-302159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:32:51.415 [INFO] [Thread-302159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:32:51.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:32:52.057 [DEBUG] [Thread-302159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:32:52.058 [DEBUG] [Thread-302159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:32:52.068 [DEBUG] [Thread-302159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:32:52.098 [DEBUG] [Thread-302159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:32:52.099 [DEBUG] [Thread-302159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:32:52.102 [DEBUG] [Thread-302159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:32:52.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:32:52.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:32:52.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:32:52.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:32:52.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:32:52.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:32:52.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:32:52.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:32:52.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:32:52.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.439306 -999.00  +24.00  14.29     30   +5.50 1 1 1 1 1   888    0 17.54 13.56 ----- 14.3 14.3 208.8 24.5 29.6 -30.0 28.9 -30.8 29.0 -28.3 29.6 -29.9
2025-12-24T12:32:52.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:32:52.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:32:52.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.439306
2025-12-24T12:32:52.137 [DEBUG] [Thread-302159] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:32:52.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:32:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:32:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:32:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:32:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:32:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:32:45', tmtdew=19.76, humidity=27.21, cloud=0.0, wind=11.7, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:32:36.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:32:52.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:32:52.239 [DEBUG] [Thread-302162] [transport.py] [_log()] starting thread (client mode): 0xf57be680
2025-12-24T12:32:52.239 [DEBUG] [Thread-302162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:32:52.254 [DEBUG] [Thread-302162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:32:52.254 [INFO] [Thread-302162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:32:52.261 [DEBUG] [Thread-302162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] client lang: <none>
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] server lang: <none>
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] kex follows: False
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] Compression: none
2025-12-24T12:32:52.262 [DEBUG] [Thread-302162] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:32:52.326 [DEBUG] [Thread-302162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:32:52.327 [DEBUG] [Thread-302162] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:32:52.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:32:52.328 [DEBUG] [Thread-302162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:32:52.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:32:52.385 [DEBUG] [Thread-302162] [transport.py] [_log()] userauth is OK
2025-12-24T12:32:52.385 [DEBUG] [Thread-302162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:32:52.386 [DEBUG] [Thread-302162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:32:52.386 [DEBUG] [Thread-302162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:32:52.386 [DEBUG] [Thread-302162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:32:52.404 [INFO] [Thread-302162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:32:52.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:32:52.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:32:53.251 [DEBUG] [Thread-302162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:32:53.251 [DEBUG] [Thread-302162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:32:53.299 [DEBUG] [Thread-302162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:32:53.299 [DEBUG] [Thread-302162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:32:53.312 [DEBUG] [Thread-302162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:32:53.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:32:53.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:32:53.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
2025-12-24T12:32:53.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:32:53.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:32:53.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:32:53.348 [DEBUG] [Thread-302162] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:32:57.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:32:57.753 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:33:01.551 [DEBUG] [Thread-302164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:33:08.102 [DEBUG] [Thread-302165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:33:16.709 [DEBUG] [Thread-302166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:33:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:33:23.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:33:23.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:33:24.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 33, 18), 19.8, 27.13, 0.0, 17.13, 22.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:33:24.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:33:18
2025-12-24T12:33:25.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:33:25.341 [DEBUG] [Thread-302167] [transport.py] [_log()] starting thread (client mode): 0xf57400a0
2025-12-24T12:33:25.342 [DEBUG] [Thread-302167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:33:25.347 [DEBUG] [Thread-302167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:33:25.347 [INFO] [Thread-302167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:33:25.352 [DEBUG] [Thread-302167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:33:25.352 [DEBUG] [Thread-302167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] client lang: <none>
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] server lang: <none>
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] kex follows: False
2025-12-24T12:33:25.353 [DEBUG] [Thread-302167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:33:25.354 [DEBUG] [Thread-302167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:33:25.354 [DEBUG] [Thread-302167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:33:25.354 [DEBUG] [Thread-302167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:33:25.354 [DEBUG] [Thread-302167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:33:25.354 [DEBUG] [Thread-302167] [transport.py] [_log()] Compression: none
2025-12-24T12:33:25.354 [DEBUG] [Thread-302167] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:33:25.382 [DEBUG] [Thread-302167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:33:25.386 [DEBUG] [Thread-302167] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:33:25.388 [DEBUG] [Thread-302167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:33:25.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:33:25.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:33:25.394 [DEBUG] [Thread-302167] [transport.py] [_log()] userauth is OK
2025-12-24T12:33:25.394 [DEBUG] [Thread-302167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:33:25.394 [DEBUG] [Thread-302167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:33:25.394 [DEBUG] [Thread-302167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:33:25.394 [DEBUG] [Thread-302167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:33:25.420 [INFO] [Thread-302167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:33:25.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:33:26.069 [DEBUG] [Thread-302167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:33:26.070 [DEBUG] [Thread-302167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:33:26.070 [DEBUG] [Thread-302167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:33:26.111 [DEBUG] [Thread-302167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:33:26.111 [DEBUG] [Thread-302167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:33:26.115 [DEBUG] [Thread-302167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:33:26.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:33:26.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:33:26.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:33:26.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:33:26.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:33:26.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:33:26.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:33:26.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:33:26.140 [DEBUG] [Thread-302167] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:33:26.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:33:26.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.439653 -999.00  +23.50  10.97     31   +5.50 1 1 1 1 1   888    0 17.81 18.04 ----- 11.0 11.0 155.0 18.9 29.4 -28.7 28.6 -28.4 28.6 -27.1 29.4 -27.7
2025-12-24T12:33:26.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:33:26.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:33:26.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.439653
2025-12-24T12:33:26.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:33:26.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:33:26.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:33:26.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:33:26.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:33:26.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:33:18', tmtdew=19.8, humidity=27.13, cloud=0.0, wind=17.13, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:33:06.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:33:26.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:33:26.264 [DEBUG] [Thread-302170] [transport.py] [_log()] starting thread (client mode): 0xf57bf610
2025-12-24T12:33:26.264 [DEBUG] [Thread-302170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:33:26.279 [DEBUG] [Thread-302170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:33:26.279 [INFO] [Thread-302170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:33:26.286 [DEBUG] [Thread-302170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:33:26.286 [DEBUG] [Thread-302170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] client lang: <none>
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] server lang: <none>
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] kex follows: False
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] Compression: none
2025-12-24T12:33:26.287 [DEBUG] [Thread-302170] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:33:26.345 [DEBUG] [Thread-302170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:33:26.345 [DEBUG] [Thread-302170] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:33:26.346 [DEBUG] [Thread-302170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:33:26.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:33:26.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:33:26.402 [DEBUG] [Thread-302170] [transport.py] [_log()] userauth is OK
2025-12-24T12:33:26.402 [DEBUG] [Thread-302170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:33:26.402 [DEBUG] [Thread-302170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:33:26.402 [DEBUG] [Thread-302170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:33:26.402 [DEBUG] [Thread-302170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:33:26.420 [INFO] [Thread-302170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:33:26.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:33:26.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:33:27.252 [DEBUG] [Thread-302170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:33:27.252 [DEBUG] [Thread-302170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:33:27.300 [DEBUG] [Thread-302170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:33:27.300 [DEBUG] [Thread-302170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:33:27.309 [DEBUG] [Thread-302170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:33:27.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:33:27.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:33:27.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:33:27.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:33:27.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:33:27.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:33:27.348 [DEBUG] [Thread-302170] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:33:31.813 [DEBUG] [Thread-302172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:33:46.925 [DEBUG] [Thread-302173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:33:57.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:33:57.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:33:57.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:33:57.893 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:33:57.894 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:33:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 33, 51), 19.33, 28.06, 0.0, 10.45, 21.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:33:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:33:51
2025-12-24T12:33:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:33:58.455 [DEBUG] [Thread-302174] [transport.py] [_log()] starting thread (client mode): 0xf5772bc0
2025-12-24T12:33:58.456 [DEBUG] [Thread-302174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:33:58.462 [DEBUG] [Thread-302174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:33:58.462 [INFO] [Thread-302174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] client lang: <none>
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] server lang: <none>
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] kex follows: False
2025-12-24T12:33:58.465 [DEBUG] [Thread-302174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:33:58.466 [DEBUG] [Thread-302174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:33:58.466 [DEBUG] [Thread-302174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:33:58.466 [DEBUG] [Thread-302174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:33:58.466 [DEBUG] [Thread-302174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:33:58.466 [DEBUG] [Thread-302174] [transport.py] [_log()] Compression: none
2025-12-24T12:33:58.466 [DEBUG] [Thread-302174] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:33:58.496 [DEBUG] [Thread-302174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:33:58.499 [DEBUG] [Thread-302174] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:33:58.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:33:58.501 [DEBUG] [Thread-302174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:33:58.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:33:58.504 [DEBUG] [Thread-302174] [transport.py] [_log()] userauth is OK
2025-12-24T12:33:58.504 [DEBUG] [Thread-302174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:33:58.504 [DEBUG] [Thread-302174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:33:58.504 [DEBUG] [Thread-302174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:33:58.504 [DEBUG] [Thread-302174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:33:58.536 [INFO] [Thread-302174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:33:58.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:33:59.105 [DEBUG] [Thread-302174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:33:59.105 [DEBUG] [Thread-302174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:33:59.105 [DEBUG] [Thread-302174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:33:59.146 [DEBUG] [Thread-302174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:33:59.146 [DEBUG] [Thread-302174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:33:59.148 [DEBUG] [Thread-302174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:33:59.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:33:59.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:33:59.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:33:59.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:33:59.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:33:59.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:33:59.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:33:59.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:33:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:33:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.440000 -999.00  +23.00  13.06     31   +5.30 1 1 1 1 1   888    0 17.77 20.61 ----- 13.1 13.1 157.8 19.0 29.0 -30.6 28.4 -28.6 28.4 -27.3 29.1 -28.6
2025-12-24T12:33:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:33:59.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:33:59.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.440000
2025-12-24T12:33:59.175 [DEBUG] [Thread-302174] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:33:59.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:33:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:33:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:33:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:33:59.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:33:59.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:33:51', tmtdew=19.33, humidity=28.06, cloud=0.0, wind=10.45, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:33:36.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:33:59.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:33:59.268 [DEBUG] [Thread-302177] [transport.py] [_log()] starting thread (client mode): 0xf57a95a0
2025-12-24T12:33:59.268 [DEBUG] [Thread-302177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:33:59.283 [DEBUG] [Thread-302177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:33:59.283 [INFO] [Thread-302177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:33:59.290 [DEBUG] [Thread-302177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:33:59.290 [DEBUG] [Thread-302177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:33:59.290 [DEBUG] [Thread-302177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] client lang: <none>
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] server lang: <none>
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] kex follows: False
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] Compression: none
2025-12-24T12:33:59.291 [DEBUG] [Thread-302177] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:33:59.352 [DEBUG] [Thread-302177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:33:59.352 [DEBUG] [Thread-302177] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:33:59.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:33:59.353 [DEBUG] [Thread-302177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:33:59.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:33:59.409 [DEBUG] [Thread-302177] [transport.py] [_log()] userauth is OK
2025-12-24T12:33:59.409 [DEBUG] [Thread-302177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:33:59.409 [DEBUG] [Thread-302177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:33:59.409 [DEBUG] [Thread-302177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:33:59.409 [DEBUG] [Thread-302177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:33:59.429 [INFO] [Thread-302177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:33:59.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:33:59.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:34:00.272 [DEBUG] [Thread-302177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:34:00.272 [DEBUG] [Thread-302177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:34:00.319 [DEBUG] [Thread-302177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:34:00.319 [DEBUG] [Thread-302177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:34:00.328 [DEBUG] [Thread-302177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:34:00.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:34:00.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:34:00.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:34:00.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:34:00.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:34:00.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:34:00.360 [DEBUG] [Thread-302177] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:34:01.984 [DEBUG] [Thread-302179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:34:08.438 [DEBUG] [Thread-302180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:34:17.092 [DEBUG] [Thread-302181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:34:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:34:30.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:34:30.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:34:31.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 34, 24), 19.14, 28.36, 0.0, 9.72, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:34:31.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:34:24
2025-12-24T12:34:31.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:34:31.668 [DEBUG] [Thread-302182] [transport.py] [_log()] starting thread (client mode): 0xf57bd660
2025-12-24T12:34:31.669 [DEBUG] [Thread-302182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:34:31.669 [DEBUG] [Thread-302182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:34:31.670 [INFO] [Thread-302182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:34:31.674 [DEBUG] [Thread-302182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:34:31.674 [DEBUG] [Thread-302182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:34:31.674 [DEBUG] [Thread-302182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] client lang: <none>
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] server lang: <none>
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] kex follows: False
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:34:31.675 [DEBUG] [Thread-302182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:34:31.676 [DEBUG] [Thread-302182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:34:31.676 [DEBUG] [Thread-302182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:34:31.676 [DEBUG] [Thread-302182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:34:31.676 [DEBUG] [Thread-302182] [transport.py] [_log()] Compression: none
2025-12-24T12:34:31.676 [DEBUG] [Thread-302182] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:34:31.702 [DEBUG] [Thread-302182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:34:31.706 [DEBUG] [Thread-302182] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:34:31.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:34:31.708 [DEBUG] [Thread-302182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:34:31.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:34:31.710 [DEBUG] [Thread-302182] [transport.py] [_log()] userauth is OK
2025-12-24T12:34:31.710 [DEBUG] [Thread-302182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:34:31.711 [DEBUG] [Thread-302182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:34:31.711 [DEBUG] [Thread-302182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:34:31.711 [DEBUG] [Thread-302182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:34:31.730 [INFO] [Thread-302182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:34:31.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:34:32.155 [DEBUG] [Thread-302184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:34:32.306 [DEBUG] [Thread-302182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:34:32.306 [DEBUG] [Thread-302182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:34:32.307 [DEBUG] [Thread-302182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:34:32.347 [DEBUG] [Thread-302182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:34:32.347 [DEBUG] [Thread-302182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:34:32.349 [DEBUG] [Thread-302182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:34:32.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:34:32.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:34:32.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:34:32.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:34:32.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:34:32.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:34:32.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:34:32.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:34:32.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:34:32.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.440347 -999.00  +22.80  11.99     32   +5.30 1 1 1 1 1   888    0 17.93 22.47 ----- 12.0 12.0 174.0 18.6 28.7 -29.3 28.1 -28.3 28.2 -26.6 28.9 -27.7
2025-12-24T12:34:32.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:34:32.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:34:32.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.440347
2025-12-24T12:34:32.372 [DEBUG] [Thread-302182] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:34:32.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:34:32.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:34:32.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:34:32.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:34:32.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:34:32.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:34:24', tmtdew=19.14, humidity=28.36, cloud=0.0, wind=9.72, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:34:05.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:34:32.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:34:32.475 [DEBUG] [Thread-302186] [transport.py] [_log()] starting thread (client mode): 0xf574de10
2025-12-24T12:34:32.475 [DEBUG] [Thread-302186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:34:32.489 [DEBUG] [Thread-302186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:34:32.489 [INFO] [Thread-302186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] client lang: <none>
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] server lang: <none>
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] kex follows: False
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] Compression: none
2025-12-24T12:34:32.496 [DEBUG] [Thread-302186] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:34:32.553 [DEBUG] [Thread-302186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:34:32.553 [DEBUG] [Thread-302186] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:34:32.554 [DEBUG] [Thread-302186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:34:32.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:34:32.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:34:32.610 [DEBUG] [Thread-302186] [transport.py] [_log()] userauth is OK
2025-12-24T12:34:32.610 [DEBUG] [Thread-302186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:34:32.610 [DEBUG] [Thread-302186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:34:32.610 [DEBUG] [Thread-302186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:34:32.610 [DEBUG] [Thread-302186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:34:32.627 [INFO] [Thread-302186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:34:32.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:34:32.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:34:33.487 [DEBUG] [Thread-302186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:34:33.487 [DEBUG] [Thread-302186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:34:33.534 [DEBUG] [Thread-302186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:34:33.535 [DEBUG] [Thread-302186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:34:33.543 [DEBUG] [Thread-302186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:34:33.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:34:33.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:34:33.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:34:33.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:34:33.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:34:33.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:34:33.578 [DEBUG] [Thread-302186] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:34:47.276 [DEBUG] [Thread-302188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:34:58.034 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:34:58.036 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:35:02.440 [DEBUG] [Thread-302189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:35:03.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:35:03.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:35:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:35:04.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 34, 57), 19.02, 28.41, 0.0, 6.99, 21.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:35:04.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:34:57
2025-12-24T12:35:04.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:35:04.985 [DEBUG] [Thread-302190] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-24T12:35:04.986 [DEBUG] [Thread-302190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:35:04.991 [DEBUG] [Thread-302190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:35:04.991 [INFO] [Thread-302190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:35:04.994 [DEBUG] [Thread-302190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] client lang: <none>
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] server lang: <none>
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] kex follows: False
2025-12-24T12:35:04.995 [DEBUG] [Thread-302190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:35:04.996 [DEBUG] [Thread-302190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:35:04.996 [DEBUG] [Thread-302190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:35:04.996 [DEBUG] [Thread-302190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:35:04.996 [DEBUG] [Thread-302190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:35:04.996 [DEBUG] [Thread-302190] [transport.py] [_log()] Compression: none
2025-12-24T12:35:04.996 [DEBUG] [Thread-302190] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:35:05.033 [DEBUG] [Thread-302190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:35:05.036 [DEBUG] [Thread-302190] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:35:05.038 [DEBUG] [Thread-302190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:35:05.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:35:05.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:35:05.043 [DEBUG] [Thread-302190] [transport.py] [_log()] userauth is OK
2025-12-24T12:35:05.044 [DEBUG] [Thread-302190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:35:05.044 [DEBUG] [Thread-302190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:35:05.044 [DEBUG] [Thread-302190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:35:05.044 [DEBUG] [Thread-302190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:35:05.084 [INFO] [Thread-302190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:35:05.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:35:05.797 [DEBUG] [Thread-302190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:35:05.797 [DEBUG] [Thread-302190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:35:05.798 [DEBUG] [Thread-302190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:35:05.838 [DEBUG] [Thread-302190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:35:05.838 [DEBUG] [Thread-302190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:35:05.841 [DEBUG] [Thread-302190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:35:05.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:35:05.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:35:05.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:35:05.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:35:05.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:35:05.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:35:05.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:35:05.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:35:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:35:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.440347 -999.00  +22.80  11.99     32   +5.30 1 1 1 1 1   888    0 17.93 22.47 ----- 12.0 12.0 174.0 18.6 28.7 -29.3 28.1 -28.3 28.2 -26.6 28.9 -27.7
2025-12-24T12:35:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:35:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:35:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.440347
2025-12-24T12:35:05.872 [DEBUG] [Thread-302190] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:35:05.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:35:05.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:35:05.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:35:05.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:35:05.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:35:05.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:34:57', tmtdew=19.02, humidity=28.41, cloud=0.0, wind=6.99, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:34:05.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:35:05.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:35:05.985 [DEBUG] [Thread-302193] [transport.py] [_log()] starting thread (client mode): 0xf57400a0
2025-12-24T12:35:05.985 [DEBUG] [Thread-302193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:35:05.999 [DEBUG] [Thread-302193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:35:05.999 [INFO] [Thread-302193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:35:06.007 [DEBUG] [Thread-302193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:35:06.007 [DEBUG] [Thread-302193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:35:06.007 [DEBUG] [Thread-302193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:35:06.007 [DEBUG] [Thread-302193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:35:06.007 [DEBUG] [Thread-302193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:35:06.007 [DEBUG] [Thread-302193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:35:06.007 [DEBUG] [Thread-302193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] client lang: <none>
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] server lang: <none>
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] kex follows: False
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:35:06.008 [DEBUG] [Thread-302193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:35:06.009 [DEBUG] [Thread-302193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:35:06.009 [DEBUG] [Thread-302193] [transport.py] [_log()] Compression: none
2025-12-24T12:35:06.009 [DEBUG] [Thread-302193] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:35:06.067 [DEBUG] [Thread-302193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:35:06.068 [DEBUG] [Thread-302193] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:35:06.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:35:06.069 [DEBUG] [Thread-302193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:35:06.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:35:06.126 [DEBUG] [Thread-302193] [transport.py] [_log()] userauth is OK
2025-12-24T12:35:06.126 [DEBUG] [Thread-302193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:35:06.126 [DEBUG] [Thread-302193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:35:06.126 [DEBUG] [Thread-302193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:35:06.126 [DEBUG] [Thread-302193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:35:06.145 [INFO] [Thread-302193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:35:06.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:35:06.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:35:06.987 [DEBUG] [Thread-302193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:35:06.987 [DEBUG] [Thread-302193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:35:07.035 [DEBUG] [Thread-302193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:35:07.035 [DEBUG] [Thread-302193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:35:07.044 [DEBUG] [Thread-302193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:35:07.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:35:07.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:35:07.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:35:07.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:35:07.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:35:07.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:35:07.077 [DEBUG] [Thread-302193] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:35:08.745 [DEBUG] [Thread-302195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:35:17.498 [DEBUG] [Thread-302196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:35:32.661 [DEBUG] [Thread-302197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:35:37.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:35:37.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:35:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:35:38.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 35, 30), 18.93, 28.57, 0.0, 6.72, 21.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:35:38.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:35:30
2025-12-24T12:35:38.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:35:38.487 [DEBUG] [Thread-302198] [transport.py] [_log()] starting thread (client mode): 0xf5773dc0
2025-12-24T12:35:38.488 [DEBUG] [Thread-302198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:35:38.502 [DEBUG] [Thread-302198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:35:38.502 [INFO] [Thread-302198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:35:38.508 [DEBUG] [Thread-302198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] client lang: <none>
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] server lang: <none>
2025-12-24T12:35:38.509 [DEBUG] [Thread-302198] [transport.py] [_log()] kex follows: False
2025-12-24T12:35:38.510 [DEBUG] [Thread-302198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:35:38.510 [DEBUG] [Thread-302198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:35:38.510 [DEBUG] [Thread-302198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:35:38.511 [DEBUG] [Thread-302198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:35:38.511 [DEBUG] [Thread-302198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:35:38.511 [DEBUG] [Thread-302198] [transport.py] [_log()] Compression: none
2025-12-24T12:35:38.511 [DEBUG] [Thread-302198] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:35:38.552 [DEBUG] [Thread-302198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:35:38.556 [DEBUG] [Thread-302198] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:35:38.558 [DEBUG] [Thread-302198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:35:38.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:35:38.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:35:38.563 [DEBUG] [Thread-302198] [transport.py] [_log()] userauth is OK
2025-12-24T12:35:38.563 [DEBUG] [Thread-302198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:35:38.563 [DEBUG] [Thread-302198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:35:38.564 [DEBUG] [Thread-302198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:35:38.564 [DEBUG] [Thread-302198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:35:38.592 [INFO] [Thread-302198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:35:38.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:35:39.210 [DEBUG] [Thread-302198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:35:39.211 [DEBUG] [Thread-302198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:35:39.212 [DEBUG] [Thread-302198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:35:39.251 [DEBUG] [Thread-302198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:35:39.252 [DEBUG] [Thread-302198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:35:39.254 [DEBUG] [Thread-302198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:35:39.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:35:39.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:35:39.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:35:39.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:35:39.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:35:39.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:35:39.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:35:39.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:35:39.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:35:39.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.440694 -999.00  +22.40   3.69     32   +5.30 1 1 1 1 1   888    0 17.93 21.78 ----- 3.7 3.7 224.3 11.1 28.6 -28.0 27.7 -31.9 28.0 -26.8 28.8 -26.8
2025-12-24T12:35:39.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:35:39.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:35:39.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.440694
2025-12-24T12:35:39.285 [DEBUG] [Thread-302198] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:35:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:35:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:35:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:35:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:35:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:35:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:35:30', tmtdew=18.93, humidity=28.57, cloud=0.0, wind=6.72, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:34:35.962', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:35:39.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:35:39.399 [DEBUG] [Thread-302201] [transport.py] [_log()] starting thread (client mode): 0xf57728c0
2025-12-24T12:35:39.399 [DEBUG] [Thread-302201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:35:39.414 [DEBUG] [Thread-302201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:35:39.414 [INFO] [Thread-302201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:35:39.422 [DEBUG] [Thread-302201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:35:39.422 [DEBUG] [Thread-302201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:35:39.422 [DEBUG] [Thread-302201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:35:39.422 [DEBUG] [Thread-302201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:35:39.422 [DEBUG] [Thread-302201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:35:39.422 [DEBUG] [Thread-302201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:35:39.423 [DEBUG] [Thread-302201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:35:39.423 [DEBUG] [Thread-302201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:35:39.423 [DEBUG] [Thread-302201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:35:39.423 [DEBUG] [Thread-302201] [transport.py] [_log()] client lang: <none>
2025-12-24T12:35:39.423 [DEBUG] [Thread-302201] [transport.py] [_log()] server lang: <none>
2025-12-24T12:35:39.423 [DEBUG] [Thread-302201] [transport.py] [_log()] kex follows: False
2025-12-24T12:35:39.423 [DEBUG] [Thread-302201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:35:39.423 [DEBUG] [Thread-302201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:35:39.424 [DEBUG] [Thread-302201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:35:39.424 [DEBUG] [Thread-302201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:35:39.424 [DEBUG] [Thread-302201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:35:39.424 [DEBUG] [Thread-302201] [transport.py] [_log()] Compression: none
2025-12-24T12:35:39.424 [DEBUG] [Thread-302201] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:35:39.483 [DEBUG] [Thread-302201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:35:39.483 [DEBUG] [Thread-302201] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:35:39.484 [DEBUG] [Thread-302201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:35:39.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:35:39.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:35:39.538 [DEBUG] [Thread-302201] [transport.py] [_log()] userauth is OK
2025-12-24T12:35:39.539 [DEBUG] [Thread-302201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:35:39.539 [DEBUG] [Thread-302201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:35:39.539 [DEBUG] [Thread-302201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:35:39.540 [DEBUG] [Thread-302201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:35:39.559 [INFO] [Thread-302201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:35:39.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:35:39.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:35:40.381 [DEBUG] [Thread-302201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:35:40.381 [DEBUG] [Thread-302201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:35:40.429 [DEBUG] [Thread-302201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:35:40.429 [DEBUG] [Thread-302201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:35:40.438 [DEBUG] [Thread-302201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:35:40.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:35: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')
2025-12-24T12:35:40.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:35:40.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:35:40.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:35:40.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:35:40.477 [DEBUG] [Thread-302201] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:35:47.756 [DEBUG] [Thread-302203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:35:58.177 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:35:58.179 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:36:02.889 [DEBUG] [Thread-302204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:36:08.970 [DEBUG] [Thread-302205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:36:10.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:36:10.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:36:10.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:36:11.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 36, 3), 18.89, 28.64, 0.0, 7.98, 21.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:36:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:36:03
2025-12-24T12:36:11.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:36:11.722 [DEBUG] [Thread-302206] [transport.py] [_log()] starting thread (client mode): 0xf57a88b0
2025-12-24T12:36:11.722 [DEBUG] [Thread-302206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:36:11.735 [DEBUG] [Thread-302206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:36:11.735 [INFO] [Thread-302206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:36:11.739 [DEBUG] [Thread-302206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] client lang: <none>
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] server lang: <none>
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] kex follows: False
2025-12-24T12:36:11.740 [DEBUG] [Thread-302206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:36:11.741 [DEBUG] [Thread-302206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:36:11.741 [DEBUG] [Thread-302206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:36:11.741 [DEBUG] [Thread-302206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:36:11.741 [DEBUG] [Thread-302206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:36:11.741 [DEBUG] [Thread-302206] [transport.py] [_log()] Compression: none
2025-12-24T12:36:11.741 [DEBUG] [Thread-302206] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:36:11.773 [DEBUG] [Thread-302206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:36:11.777 [DEBUG] [Thread-302206] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:36:11.779 [DEBUG] [Thread-302206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:36:11.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:36:11.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:36:11.784 [DEBUG] [Thread-302206] [transport.py] [_log()] userauth is OK
2025-12-24T12:36:11.784 [DEBUG] [Thread-302206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:36:11.784 [DEBUG] [Thread-302206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:36:11.784 [DEBUG] [Thread-302206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:36:11.785 [DEBUG] [Thread-302206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:36:11.810 [INFO] [Thread-302206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:36:11.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:36:12.457 [DEBUG] [Thread-302206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:36:12.457 [DEBUG] [Thread-302206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:36:12.458 [DEBUG] [Thread-302206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:36:12.499 [DEBUG] [Thread-302206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:36:12.499 [DEBUG] [Thread-302206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:36:12.501 [DEBUG] [Thread-302206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:36:12.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:36:12.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:36:12.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:36:12.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:36:12.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:36:12.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:36:12.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:36:12.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:36:12.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:36:12.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.441389 -999.00  +22.40  16.93     33   +5.40 1 1 1 1 1   888    0 17.67 20.92 ----- 16.9 16.9 165.0 19.9 28.2 -28.1 27.7 -26.6 27.9 -25.4 28.5 -27.1
2025-12-24T12:36:12.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:36:12.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:36:12.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.441389
2025-12-24T12:36:12.528 [DEBUG] [Thread-302206] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:36:12.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:36:12.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:36:12.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:36:12.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:36:12.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:36:12.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:36:03', tmtdew=18.89, humidity=28.64, cloud=0.0, wind=7.98, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:35:36.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:36:12.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:36:12.626 [DEBUG] [Thread-302209] [transport.py] [_log()] starting thread (client mode): 0xf5773190
2025-12-24T12:36:12.626 [DEBUG] [Thread-302209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:36:12.641 [DEBUG] [Thread-302209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:36:12.641 [INFO] [Thread-302209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] client lang: <none>
2025-12-24T12:36:12.648 [DEBUG] [Thread-302209] [transport.py] [_log()] server lang: <none>
2025-12-24T12:36:12.649 [DEBUG] [Thread-302209] [transport.py] [_log()] kex follows: False
2025-12-24T12:36:12.649 [DEBUG] [Thread-302209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:36:12.649 [DEBUG] [Thread-302209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:36:12.649 [DEBUG] [Thread-302209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:36:12.649 [DEBUG] [Thread-302209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:36:12.649 [DEBUG] [Thread-302209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:36:12.649 [DEBUG] [Thread-302209] [transport.py] [_log()] Compression: none
2025-12-24T12:36:12.649 [DEBUG] [Thread-302209] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:36:12.711 [DEBUG] [Thread-302209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:36:12.711 [DEBUG] [Thread-302209] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:36:12.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:36:12.713 [DEBUG] [Thread-302209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:36:12.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:36:12.766 [DEBUG] [Thread-302209] [transport.py] [_log()] userauth is OK
2025-12-24T12:36:12.767 [DEBUG] [Thread-302209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:36:12.767 [DEBUG] [Thread-302209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:36:12.767 [DEBUG] [Thread-302209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:36:12.767 [DEBUG] [Thread-302209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:36:12.791 [INFO] [Thread-302209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:36:12.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:36:12.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:36:13.690 [DEBUG] [Thread-302209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:36:13.690 [DEBUG] [Thread-302209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:36:13.738 [DEBUG] [Thread-302209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:36:13.738 [DEBUG] [Thread-302209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:36:13.747 [DEBUG] [Thread-302209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:36:13.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:36:13.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:36:13.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
2025-12-24T12:36:13.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:36:13.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:36:13.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:36:13.785 [DEBUG] [Thread-302209] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:36:17.970 [DEBUG] [Thread-302211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:36:33.113 [DEBUG] [Thread-302212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:36:43.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:36:43.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:36:43.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
2025-12-24T12:36:44.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 36, 36), 18.79, 28.7, 0.0, 11.4, 21.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:36:44.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:36:36
2025-12-24T12:36:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:36:45.230 [DEBUG] [Thread-302213] [transport.py] [_log()] starting thread (client mode): 0xf57bf610
2025-12-24T12:36:45.231 [DEBUG] [Thread-302213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:36:45.238 [DEBUG] [Thread-302213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:36:45.238 [INFO] [Thread-302213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] client lang: <none>
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] server lang: <none>
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] kex follows: False
2025-12-24T12:36:45.243 [DEBUG] [Thread-302213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:36:45.244 [DEBUG] [Thread-302213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:36:45.244 [DEBUG] [Thread-302213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:36:45.244 [DEBUG] [Thread-302213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:36:45.244 [DEBUG] [Thread-302213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:36:45.244 [DEBUG] [Thread-302213] [transport.py] [_log()] Compression: none
2025-12-24T12:36:45.244 [DEBUG] [Thread-302213] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:36:45.279 [DEBUG] [Thread-302213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:36:45.283 [DEBUG] [Thread-302213] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:36:45.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:36:45.285 [DEBUG] [Thread-302213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:36:45.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:36:45.288 [DEBUG] [Thread-302213] [transport.py] [_log()] userauth is OK
2025-12-24T12:36:45.288 [DEBUG] [Thread-302213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:36:45.288 [DEBUG] [Thread-302213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:36:45.289 [DEBUG] [Thread-302213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:36:45.289 [DEBUG] [Thread-302213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:36:45.320 [INFO] [Thread-302213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:36:45.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:36:46.171 [DEBUG] [Thread-302213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:36:46.171 [DEBUG] [Thread-302213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:36:46.172 [DEBUG] [Thread-302213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:36:46.212 [DEBUG] [Thread-302213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:36:46.212 [DEBUG] [Thread-302213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:36:46.214 [DEBUG] [Thread-302213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:36:46.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:36:46.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:36:46.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:36:46.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:36:46.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:36:46.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:36:46.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:36:46.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:36:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:36:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.441736 -999.00  +22.30  13.64     33   +5.40 1 1 1 1 1   888    0 17.82 21.56 ----- 13.6 13.6 160.0 20.4 28.0 -27.5 27.6 -27.4 27.7 -25.9 28.3 -26.9
2025-12-24T12:36:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:36:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:36:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.441736
2025-12-24T12:36:46.244 [DEBUG] [Thread-302213] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:36:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:36:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:36:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:36:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:36:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:36:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:36:36', tmtdew=18.79, humidity=28.7, cloud=0.0, wind=11.4, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:36:05.990', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:36:46.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:36:46.349 [DEBUG] [Thread-302216] [transport.py] [_log()] starting thread (client mode): 0xf574e410
2025-12-24T12:36:46.349 [DEBUG] [Thread-302216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:36:46.363 [DEBUG] [Thread-302216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:36:46.363 [INFO] [Thread-302216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:36:46.370 [DEBUG] [Thread-302216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] client lang: <none>
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] server lang: <none>
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] kex follows: False
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] Compression: none
2025-12-24T12:36:46.371 [DEBUG] [Thread-302216] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:36:46.435 [DEBUG] [Thread-302216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:36:46.435 [DEBUG] [Thread-302216] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:36:46.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:36:46.435 [DEBUG] [Thread-302216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:36:46.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:36:46.499 [DEBUG] [Thread-302216] [transport.py] [_log()] userauth is OK
2025-12-24T12:36:46.499 [DEBUG] [Thread-302216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:36:46.499 [DEBUG] [Thread-302216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:36:46.499 [DEBUG] [Thread-302216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:36:46.499 [DEBUG] [Thread-302216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:36:46.516 [INFO] [Thread-302216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:36:46.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:36:46.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:36:47.357 [DEBUG] [Thread-302216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:36:47.357 [DEBUG] [Thread-302216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:36:47.405 [DEBUG] [Thread-302216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:36:47.405 [DEBUG] [Thread-302216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:36:47.413 [DEBUG] [Thread-302216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:36:47.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:36:47.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:36:47.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:36:47.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:36:47.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:36:47.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:36:47.446 [DEBUG] [Thread-302216] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:36:48.189 [DEBUG] [Thread-302218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:36:58.332 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:36:58.340 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:37:03.300 [DEBUG] [Thread-302219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:37:09.212 [DEBUG] [Thread-302220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:37:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:37:17.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:37:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:37:18.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 37, 9), 18.69, 28.93, 0.0, 12.55, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:37:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:37:09
2025-12-24T12:37:18.338 [DEBUG] [Thread-302221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:37:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:37:18.689 [DEBUG] [Thread-302222] [transport.py] [_log()] starting thread (client mode): 0xf57bf160
2025-12-24T12:37:18.689 [DEBUG] [Thread-302222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:37:18.702 [DEBUG] [Thread-302222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:37:18.702 [INFO] [Thread-302222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:37:18.707 [DEBUG] [Thread-302222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:37:18.707 [DEBUG] [Thread-302222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] client lang: <none>
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] server lang: <none>
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] kex follows: False
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:37:18.708 [DEBUG] [Thread-302222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:37:18.709 [DEBUG] [Thread-302222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:37:18.709 [DEBUG] [Thread-302222] [transport.py] [_log()] Compression: none
2025-12-24T12:37:18.709 [DEBUG] [Thread-302222] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:37:18.748 [DEBUG] [Thread-302222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:37:18.752 [DEBUG] [Thread-302222] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:37:18.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:37:18.757 [DEBUG] [Thread-302222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:37:18.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:37:18.759 [DEBUG] [Thread-302222] [transport.py] [_log()] userauth is OK
2025-12-24T12:37:18.760 [DEBUG] [Thread-302222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:37:18.760 [DEBUG] [Thread-302222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:37:18.760 [DEBUG] [Thread-302222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:37:18.760 [DEBUG] [Thread-302222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:37:18.788 [INFO] [Thread-302222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:37:18.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:37:19.408 [DEBUG] [Thread-302222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:37:19.409 [DEBUG] [Thread-302222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:37:19.409 [DEBUG] [Thread-302222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:37:19.449 [DEBUG] [Thread-302222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:37:19.449 [DEBUG] [Thread-302222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:37:19.452 [DEBUG] [Thread-302222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:37:19.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:37:19.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:37:19.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:37:19.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:37:19.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:37:19.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:37:19.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:37:19.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:37:19.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:37:19.475 [DEBUG] [Thread-302222] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:37:19.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.442083 -999.00  +22.10  10.41     33   +5.30 1 1 1 1 1   888    0 18.14 22.95 ----- 10.4 10.4 174.8 15.8 27.9 -27.2 27.4 -27.1 27.6 -25.2 28.2 -26.3
2025-12-24T12:37:19.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:37:19.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:37:19.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.442083
2025-12-24T12:37:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:37:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:37:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:37:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:37:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:37:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:37:09', tmtdew=18.69, humidity=28.93, cloud=0.0, wind=12.55, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:36:35.971', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:37:19.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:37:19.591 [DEBUG] [Thread-302225] [transport.py] [_log()] starting thread (client mode): 0xf57ab8b0
2025-12-24T12:37:19.591 [DEBUG] [Thread-302225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:37:19.607 [DEBUG] [Thread-302225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:37:19.607 [INFO] [Thread-302225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:37:19.614 [DEBUG] [Thread-302225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:37:19.615 [DEBUG] [Thread-302225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:37:19.615 [DEBUG] [Thread-302225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:37:19.615 [DEBUG] [Thread-302225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:37:19.615 [DEBUG] [Thread-302225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:37:19.615 [DEBUG] [Thread-302225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:37:19.615 [DEBUG] [Thread-302225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:37:19.615 [DEBUG] [Thread-302225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:37:19.615 [DEBUG] [Thread-302225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:37:19.616 [DEBUG] [Thread-302225] [transport.py] [_log()] client lang: <none>
2025-12-24T12:37:19.616 [DEBUG] [Thread-302225] [transport.py] [_log()] server lang: <none>
2025-12-24T12:37:19.616 [DEBUG] [Thread-302225] [transport.py] [_log()] kex follows: False
2025-12-24T12:37:19.616 [DEBUG] [Thread-302225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:37:19.616 [DEBUG] [Thread-302225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:37:19.616 [DEBUG] [Thread-302225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:37:19.616 [DEBUG] [Thread-302225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:37:19.617 [DEBUG] [Thread-302225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:37:19.617 [DEBUG] [Thread-302225] [transport.py] [_log()] Compression: none
2025-12-24T12:37:19.617 [DEBUG] [Thread-302225] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:37:19.675 [DEBUG] [Thread-302225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:37:19.676 [DEBUG] [Thread-302225] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:37:19.677 [DEBUG] [Thread-302225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:37:19.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:37:19.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:37:19.732 [DEBUG] [Thread-302225] [transport.py] [_log()] userauth is OK
2025-12-24T12:37:19.732 [DEBUG] [Thread-302225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:37:19.732 [DEBUG] [Thread-302225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:37:19.733 [DEBUG] [Thread-302225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:37:19.733 [DEBUG] [Thread-302225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:37:19.756 [INFO] [Thread-302225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:37:19.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:37:19.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:37:20.589 [DEBUG] [Thread-302225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:37:20.589 [DEBUG] [Thread-302225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:37:20.637 [DEBUG] [Thread-302225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:37:20.637 [DEBUG] [Thread-302225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:37:20.645 [DEBUG] [Thread-302225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:37:20.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:37: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')
2025-12-24T12:37:20.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:37:20.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:37:20.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:37:20.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:37:20.678 [DEBUG] [Thread-302225] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:37:33.446 [DEBUG] [Thread-302227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:37:48.592 [DEBUG] [Thread-302228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:37:50.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:37:50.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:37:50.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
2025-12-24T12:37:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 37, 42), 18.36, 29.52, 0.0, 10.38, 21.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:37:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:37:42
2025-12-24T12:37:51.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:37:51.941 [DEBUG] [Thread-302229] [transport.py] [_log()] starting thread (client mode): 0xf57bf460
2025-12-24T12:37:51.942 [DEBUG] [Thread-302229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:37:51.950 [DEBUG] [Thread-302229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:37:51.950 [INFO] [Thread-302229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:37:51.954 [DEBUG] [Thread-302229] [transport.py] [_log()] client lang: <none>
2025-12-24T12:37:51.955 [DEBUG] [Thread-302229] [transport.py] [_log()] server lang: <none>
2025-12-24T12:37:51.955 [DEBUG] [Thread-302229] [transport.py] [_log()] kex follows: False
2025-12-24T12:37:51.955 [DEBUG] [Thread-302229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:37:51.955 [DEBUG] [Thread-302229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:37:51.955 [DEBUG] [Thread-302229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:37:51.955 [DEBUG] [Thread-302229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:37:51.955 [DEBUG] [Thread-302229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:37:51.956 [DEBUG] [Thread-302229] [transport.py] [_log()] Compression: none
2025-12-24T12:37:51.956 [DEBUG] [Thread-302229] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:37:51.984 [DEBUG] [Thread-302229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:37:51.988 [DEBUG] [Thread-302229] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:37:51.989 [DEBUG] [Thread-302229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:37:51.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:37:51.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:37:51.994 [DEBUG] [Thread-302229] [transport.py] [_log()] userauth is OK
2025-12-24T12:37:51.994 [DEBUG] [Thread-302229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:37:51.995 [DEBUG] [Thread-302229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:37:51.995 [DEBUG] [Thread-302229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:37:51.995 [DEBUG] [Thread-302229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:37:52.021 [INFO] [Thread-302229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:37:52.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:37:52.826 [DEBUG] [Thread-302229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:37:52.826 [DEBUG] [Thread-302229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:37:52.827 [DEBUG] [Thread-302229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:37:52.867 [DEBUG] [Thread-302229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:37:52.867 [DEBUG] [Thread-302229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:37:52.870 [DEBUG] [Thread-302229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:37:52.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:37:52.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:37:52.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:37:52.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:37:52.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:37:52.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:37:52.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:37:52.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:37:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:37:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.442431 -999.00  +22.10   9.09     33   +5.40 1 1 1 1 1   888    0 17.96 20.38 ----- 9.1 9.1 170.2 14.0 27.9 -26.3 27.2 -26.4 27.5 -24.1 28.1 -25.3
2025-12-24T12:37:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:37:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:37:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.442431
2025-12-24T12:37:52.906 [DEBUG] [Thread-302229] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:37:52.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:37:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:37:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:37:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:37:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:37:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:37:42', tmtdew=18.36, humidity=29.52, cloud=0.0, wind=10.38, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:37:06.038', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:37:53.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:37:53.031 [DEBUG] [Thread-302232] [transport.py] [_log()] starting thread (client mode): 0xf57a95a0
2025-12-24T12:37:53.032 [DEBUG] [Thread-302232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:37:53.048 [DEBUG] [Thread-302232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:37:53.048 [INFO] [Thread-302232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] client lang: <none>
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] server lang: <none>
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] kex follows: False
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] Compression: none
2025-12-24T12:37:53.056 [DEBUG] [Thread-302232] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:37:53.114 [DEBUG] [Thread-302232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:37:53.114 [DEBUG] [Thread-302232] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:37:53.114 [DEBUG] [Thread-302232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:37:53.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:37:53.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:37:53.171 [DEBUG] [Thread-302232] [transport.py] [_log()] userauth is OK
2025-12-24T12:37:53.171 [DEBUG] [Thread-302232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:37:53.171 [DEBUG] [Thread-302232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:37:53.171 [DEBUG] [Thread-302232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:37:53.171 [DEBUG] [Thread-302232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:37:53.185 [INFO] [Thread-302232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:37:53.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:37:53.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:37:54.050 [DEBUG] [Thread-302232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:37:54.051 [DEBUG] [Thread-302232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:37:54.098 [DEBUG] [Thread-302232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:37:54.098 [DEBUG] [Thread-302232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:37:54.108 [DEBUG] [Thread-302232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:37:54.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:37:54.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:37: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
2025-12-24T12:37:54.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:37:54.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:37:54.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:37:54.146 [DEBUG] [Thread-302232] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:37:58.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:37:58.491 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:38:03.630 [DEBUG] [Thread-302234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:38:09.449 [DEBUG] [Thread-302235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:38:18.769 [DEBUG] [Thread-302236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:38:24.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:38:24.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:38:24.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:38:25.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 38, 16), 18.59, 29.1, 0.0, 9.67, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:38:25.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:38:16
2025-12-24T12:38:25.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:38:25.879 [DEBUG] [Thread-302237] [transport.py] [_log()] starting thread (client mode): 0xf81f2d40
2025-12-24T12:38:25.879 [DEBUG] [Thread-302237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:38:25.889 [DEBUG] [Thread-302237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:38:25.889 [INFO] [Thread-302237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] client lang: <none>
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] server lang: <none>
2025-12-24T12:38:25.895 [DEBUG] [Thread-302237] [transport.py] [_log()] kex follows: False
2025-12-24T12:38:25.896 [DEBUG] [Thread-302237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:38:25.896 [DEBUG] [Thread-302237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:38:25.896 [DEBUG] [Thread-302237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:38:25.897 [DEBUG] [Thread-302237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:38:25.897 [DEBUG] [Thread-302237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:38:25.897 [DEBUG] [Thread-302237] [transport.py] [_log()] Compression: none
2025-12-24T12:38:25.897 [DEBUG] [Thread-302237] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:38:25.936 [DEBUG] [Thread-302237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:38:25.942 [DEBUG] [Thread-302237] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:38:25.944 [DEBUG] [Thread-302237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:38:25.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:38:25.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:38:25.949 [DEBUG] [Thread-302237] [transport.py] [_log()] userauth is OK
2025-12-24T12:38:25.949 [DEBUG] [Thread-302237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:38:25.949 [DEBUG] [Thread-302237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:38:25.949 [DEBUG] [Thread-302237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:38:25.949 [DEBUG] [Thread-302237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:38:25.977 [INFO] [Thread-302237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:38:25.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:38:26.625 [DEBUG] [Thread-302237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:38:26.626 [DEBUG] [Thread-302237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:38:26.627 [DEBUG] [Thread-302237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:38:26.666 [DEBUG] [Thread-302237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:38:26.666 [DEBUG] [Thread-302237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:38:26.669 [DEBUG] [Thread-302237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:38:26.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:38:26.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:38:26.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:38:26.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:38:26.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:38:26.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:38:26.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:38:26.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:38:26.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:38:26.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.442778 -999.00  +22.20  12.12     33   +5.30 1 1 1 1 1   888    0 17.82 17.88 ----- 12.1 12.1 196.0 13.6 27.9 -22.2 27.2 -25.1 27.6 -23.1 28.2 -22.4
2025-12-24T12:38:26.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:38:26.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:38:26.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.442778
2025-12-24T12:38:26.705 [DEBUG] [Thread-302237] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:38:26.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:38:26.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:38:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:38:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:38:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:38:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:38:16', tmtdew=18.59, humidity=29.1, cloud=0.0, wind=9.67, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:37:36.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:38:26.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:38:26.826 [DEBUG] [Thread-302240] [transport.py] [_log()] starting thread (client mode): 0xf57a89d0
2025-12-24T12:38:26.826 [DEBUG] [Thread-302240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:38:26.840 [DEBUG] [Thread-302240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:38:26.840 [INFO] [Thread-302240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:38:26.848 [DEBUG] [Thread-302240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:38:26.849 [DEBUG] [Thread-302240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:38:26.849 [DEBUG] [Thread-302240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:38:26.849 [DEBUG] [Thread-302240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:38:26.849 [DEBUG] [Thread-302240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:38:26.849 [DEBUG] [Thread-302240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:38:26.849 [DEBUG] [Thread-302240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:38:26.849 [DEBUG] [Thread-302240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:38:26.849 [DEBUG] [Thread-302240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:38:26.850 [DEBUG] [Thread-302240] [transport.py] [_log()] client lang: <none>
2025-12-24T12:38:26.850 [DEBUG] [Thread-302240] [transport.py] [_log()] server lang: <none>
2025-12-24T12:38:26.850 [DEBUG] [Thread-302240] [transport.py] [_log()] kex follows: False
2025-12-24T12:38:26.850 [DEBUG] [Thread-302240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:38:26.850 [DEBUG] [Thread-302240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:38:26.850 [DEBUG] [Thread-302240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:38:26.850 [DEBUG] [Thread-302240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:38:26.851 [DEBUG] [Thread-302240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:38:26.851 [DEBUG] [Thread-302240] [transport.py] [_log()] Compression: none
2025-12-24T12:38:26.851 [DEBUG] [Thread-302240] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:38:26.913 [DEBUG] [Thread-302240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:38:26.913 [DEBUG] [Thread-302240] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:38:26.914 [DEBUG] [Thread-302240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:38:26.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:38:26.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:38:26.972 [DEBUG] [Thread-302240] [transport.py] [_log()] userauth is OK
2025-12-24T12:38:26.972 [DEBUG] [Thread-302240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:38:26.972 [DEBUG] [Thread-302240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:38:26.972 [DEBUG] [Thread-302240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:38:26.973 [DEBUG] [Thread-302240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:38:26.991 [INFO] [Thread-302240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:38:26.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:38:26.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:38:27.833 [DEBUG] [Thread-302240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:38:27.833 [DEBUG] [Thread-302240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:38:27.880 [DEBUG] [Thread-302240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:38:27.880 [DEBUG] [Thread-302240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:38:27.889 [DEBUG] [Thread-302240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:38:27.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:38:27.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:38:27.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
2025-12-24T12:38:27.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:38:27.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:38:27.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:38:27.925 [DEBUG] [Thread-302240] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:38:33.883 [DEBUG] [Thread-302242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:38:49.017 [DEBUG] [Thread-302243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:38:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:38:57.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:38:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:38:58.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:38:58.640 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:38:58.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 38, 48), 18.96, 28.49, 0.0, 7.5, 21.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:38:58.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:38:48
2025-12-24T12:38:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:38:59.275 [DEBUG] [Thread-302244] [transport.py] [_log()] starting thread (client mode): 0xf572ff40
2025-12-24T12:38:59.276 [DEBUG] [Thread-302244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:38:59.276 [DEBUG] [Thread-302244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:38:59.277 [INFO] [Thread-302244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:38:59.280 [DEBUG] [Thread-302244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:38:59.280 [DEBUG] [Thread-302244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:38:59.280 [DEBUG] [Thread-302244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:38:59.280 [DEBUG] [Thread-302244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:38:59.280 [DEBUG] [Thread-302244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:38:59.280 [DEBUG] [Thread-302244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:38:59.280 [DEBUG] [Thread-302244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] client lang: <none>
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] server lang: <none>
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] kex follows: False
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:38:59.281 [DEBUG] [Thread-302244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:38:59.282 [DEBUG] [Thread-302244] [transport.py] [_log()] Compression: none
2025-12-24T12:38:59.282 [DEBUG] [Thread-302244] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:38:59.317 [DEBUG] [Thread-302244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:38:59.322 [DEBUG] [Thread-302244] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:38:59.324 [DEBUG] [Thread-302244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:38:59.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:38:59.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:38:59.330 [DEBUG] [Thread-302244] [transport.py] [_log()] userauth is OK
2025-12-24T12:38:59.330 [DEBUG] [Thread-302244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:38:59.330 [DEBUG] [Thread-302244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:38:59.330 [DEBUG] [Thread-302244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:38:59.330 [DEBUG] [Thread-302244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:38:59.369 [INFO] [Thread-302244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:38:59.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:38:59.928 [DEBUG] [Thread-302244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:38:59.928 [DEBUG] [Thread-302244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:38:59.937 [DEBUG] [Thread-302244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:38:59.969 [DEBUG] [Thread-302244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:38:59.969 [DEBUG] [Thread-302244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:38:59.972 [DEBUG] [Thread-302244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:38:59.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:38:59.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:38:59.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:38:59.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:38:59.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:38:59.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:38:59.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:38:59.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:38:59.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:38:59.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.443125 -999.00  +22.30  14.42     33   +5.40 1 2 1 1 1   888    0 17.70 17.94 ----- 14.4 14.4 186.6 16.3 28.1 -23.2 27.5 -21.7 27.9 -20.1 28.4 -23.0
2025-12-24T12:38:59.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:38:59.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:38:59.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.443125
2025-12-24T12:39:00.001 [DEBUG] [Thread-302244] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:39:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:39:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:39:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:39:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:39:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:39:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:38:48', tmtdew=18.96, humidity=28.49, cloud=0.0, wind=7.5, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:38:06.000', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:39:00.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:39:00.104 [DEBUG] [Thread-302247] [transport.py] [_log()] starting thread (client mode): 0xf81f0700
2025-12-24T12:39:00.104 [DEBUG] [Thread-302247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:39:00.118 [DEBUG] [Thread-302247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:39:00.118 [INFO] [Thread-302247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:39:00.126 [DEBUG] [Thread-302247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:39:00.127 [DEBUG] [Thread-302247] [transport.py] [_log()] client lang: <none>
2025-12-24T12:39:00.127 [DEBUG] [Thread-302247] [transport.py] [_log()] server lang: <none>
2025-12-24T12:39:00.127 [DEBUG] [Thread-302247] [transport.py] [_log()] kex follows: False
2025-12-24T12:39:00.127 [DEBUG] [Thread-302247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:39:00.127 [DEBUG] [Thread-302247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:39:00.127 [DEBUG] [Thread-302247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:39:00.127 [DEBUG] [Thread-302247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:39:00.127 [DEBUG] [Thread-302247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:39:00.128 [DEBUG] [Thread-302247] [transport.py] [_log()] Compression: none
2025-12-24T12:39:00.128 [DEBUG] [Thread-302247] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:39:00.184 [DEBUG] [Thread-302247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:39:00.184 [DEBUG] [Thread-302247] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:39:00.185 [DEBUG] [Thread-302247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:39:00.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:39:00.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:39:00.240 [DEBUG] [Thread-302247] [transport.py] [_log()] userauth is OK
2025-12-24T12:39:00.240 [DEBUG] [Thread-302247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:39:00.240 [DEBUG] [Thread-302247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:39:00.240 [DEBUG] [Thread-302247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:39:00.240 [DEBUG] [Thread-302247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:39:00.259 [INFO] [Thread-302247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:39:00.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:39:00.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:39:01.074 [DEBUG] [Thread-302247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:39:01.075 [DEBUG] [Thread-302247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:39:01.113 [DEBUG] [Thread-302247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:39:01.113 [DEBUG] [Thread-302247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:39:01.123 [DEBUG] [Thread-302247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:39:01.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:39:01.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:39:01.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:39:01.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:39:01.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:39:01.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:39:01.161 [DEBUG] [Thread-302247] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:39:04.082 [DEBUG] [Thread-302249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:39:09.731 [DEBUG] [Thread-302250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:39:19.215 [DEBUG] [Thread-302251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:39:31.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:39:31.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:39:31.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:39:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 39, 22), 18.91, 28.57, 0.0, 4.8, 21.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:39:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:39:22
2025-12-24T12:39:32.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:39:32.510 [DEBUG] [Thread-302252] [transport.py] [_log()] starting thread (client mode): 0xf572cee0
2025-12-24T12:39:32.511 [DEBUG] [Thread-302252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:39:32.513 [DEBUG] [Thread-302252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:39:32.513 [INFO] [Thread-302252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] client lang: <none>
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] server lang: <none>
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] kex follows: False
2025-12-24T12:39:32.517 [DEBUG] [Thread-302252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:39:32.518 [DEBUG] [Thread-302252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:39:32.518 [DEBUG] [Thread-302252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:39:32.518 [DEBUG] [Thread-302252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:39:32.518 [DEBUG] [Thread-302252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:39:32.518 [DEBUG] [Thread-302252] [transport.py] [_log()] Compression: none
2025-12-24T12:39:32.518 [DEBUG] [Thread-302252] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:39:32.549 [DEBUG] [Thread-302252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:39:32.553 [DEBUG] [Thread-302252] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:39:32.554 [DEBUG] [Thread-302252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:39:32.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:39:32.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:39:32.558 [DEBUG] [Thread-302252] [transport.py] [_log()] userauth is OK
2025-12-24T12:39:32.559 [DEBUG] [Thread-302252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:39:32.559 [DEBUG] [Thread-302252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:39:32.559 [DEBUG] [Thread-302252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:39:32.559 [DEBUG] [Thread-302252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:39:32.581 [INFO] [Thread-302252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:39:32.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:39:33.184 [DEBUG] [Thread-302252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:39:33.184 [DEBUG] [Thread-302252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:39:33.186 [DEBUG] [Thread-302252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:39:33.226 [DEBUG] [Thread-302252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:39:33.226 [DEBUG] [Thread-302252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:39:33.229 [DEBUG] [Thread-302252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:39:33.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:39:33.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:39:33.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:39:33.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:39:33.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:39:33.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:39:33.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:39:33.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:39:33.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:39:33.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.443472 -999.00  +22.20   7.17     33   +5.40 1 2 1 1 1   888    0 17.83 17.65 ----- 7.2 7.2 188.5 15.7 28.4 -20.7 27.5 -23.3 28.1 -19.5 28.7 -19.8
2025-12-24T12:39:33.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:39:33.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:39:33.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.443472
2025-12-24T12:39:33.263 [DEBUG] [Thread-302252] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:39:33.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:39:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:39:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:39:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:39:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:39:33.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:39:22', tmtdew=18.91, humidity=28.57, cloud=0.0, wind=4.8, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:38:35.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:39:33.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:39:33.374 [DEBUG] [Thread-302255] [transport.py] [_log()] starting thread (client mode): 0xf57aa470
2025-12-24T12:39:33.374 [DEBUG] [Thread-302255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:39:33.389 [DEBUG] [Thread-302255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:39:33.389 [INFO] [Thread-302255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:39:33.396 [DEBUG] [Thread-302255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:39:33.396 [DEBUG] [Thread-302255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:39:33.396 [DEBUG] [Thread-302255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:39:33.396 [DEBUG] [Thread-302255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] client lang: <none>
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] server lang: <none>
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] kex follows: False
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] Compression: none
2025-12-24T12:39:33.397 [DEBUG] [Thread-302255] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:39:33.454 [DEBUG] [Thread-302255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:39:33.455 [DEBUG] [Thread-302255] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:39:33.455 [DEBUG] [Thread-302255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:39:33.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:39:33.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:39:33.512 [DEBUG] [Thread-302255] [transport.py] [_log()] userauth is OK
2025-12-24T12:39:33.512 [DEBUG] [Thread-302255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:39:33.512 [DEBUG] [Thread-302255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:39:33.512 [DEBUG] [Thread-302255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:39:33.512 [DEBUG] [Thread-302255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:39:33.526 [INFO] [Thread-302255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:39:33.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:39:33.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:39:34.276 [DEBUG] [Thread-302257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:39:34.346 [DEBUG] [Thread-302255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:39:34.346 [DEBUG] [Thread-302255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:39:34.393 [DEBUG] [Thread-302255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:39:34.393 [DEBUG] [Thread-302255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:39:34.402 [DEBUG] [Thread-302255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:39:34.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:39:34.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:39:34.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:39:34.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:39:34.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:39:34.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:39:34.436 [DEBUG] [Thread-302255] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:39:49.392 [DEBUG] [Thread-302258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:39:58.783 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:39:58.785 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:40:04.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:40:04.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:40:04.480 [DEBUG] [Thread-302259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:40:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:40:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 39, 55), 18.76, 28.84, 0.0, 3.28, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:40:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:39:55
2025-12-24T12:40:05.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:40:05.833 [DEBUG] [Thread-302260] [transport.py] [_log()] starting thread (client mode): 0xf57bec50
2025-12-24T12:40:05.834 [DEBUG] [Thread-302260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:40:05.847 [DEBUG] [Thread-302260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:40:05.847 [INFO] [Thread-302260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] client lang: <none>
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] server lang: <none>
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] kex follows: False
2025-12-24T12:40:05.851 [DEBUG] [Thread-302260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:40:05.852 [DEBUG] [Thread-302260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:40:05.852 [DEBUG] [Thread-302260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:40:05.852 [DEBUG] [Thread-302260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:40:05.852 [DEBUG] [Thread-302260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:40:05.852 [DEBUG] [Thread-302260] [transport.py] [_log()] Compression: none
2025-12-24T12:40:05.852 [DEBUG] [Thread-302260] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:40:05.881 [DEBUG] [Thread-302260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:40:05.885 [DEBUG] [Thread-302260] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:40:05.886 [DEBUG] [Thread-302260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:40:05.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:40:05.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:40:05.890 [DEBUG] [Thread-302260] [transport.py] [_log()] userauth is OK
2025-12-24T12:40:05.890 [DEBUG] [Thread-302260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:40:05.890 [DEBUG] [Thread-302260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:40:05.890 [DEBUG] [Thread-302260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:40:05.890 [DEBUG] [Thread-302260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:40:05.908 [INFO] [Thread-302260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:40:05.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:40:06.476 [DEBUG] [Thread-302260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:40:06.477 [DEBUG] [Thread-302260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:40:06.478 [DEBUG] [Thread-302260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:40:06.517 [DEBUG] [Thread-302260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:40:06.517 [DEBUG] [Thread-302260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:40:06.520 [DEBUG] [Thread-302260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:40:06.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:40:06.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:40:06.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:40:06.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:40:06.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:40:06.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:40:06.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:40:06.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:40:06.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:40:06.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.443819 -999.00  +22.50   8.53     33   +5.40 1 2 1 1 1   888    0 17.52 17.14 ----- 8.5 8.5 201.2 11.3 28.7 -21.5 27.9 -20.3 28.3 -19.0 29.0 -19.7
2025-12-24T12:40:06.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:40:06.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:40:06.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.443819
2025-12-24T12:40:06.556 [DEBUG] [Thread-302260] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:40:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:40:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:40:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:40:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:40:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:40:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:39:55', tmtdew=18.76, humidity=28.84, cloud=0.0, wind=3.28, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:39:05.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:40:06.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:40:06.671 [DEBUG] [Thread-302263] [transport.py] [_log()] starting thread (client mode): 0xf81f2cb0
2025-12-24T12:40:06.671 [DEBUG] [Thread-302263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:40:06.687 [DEBUG] [Thread-302263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:40:06.688 [INFO] [Thread-302263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:40:06.695 [DEBUG] [Thread-302263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:40:06.695 [DEBUG] [Thread-302263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] client lang: <none>
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] server lang: <none>
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] kex follows: False
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:40:06.696 [DEBUG] [Thread-302263] [transport.py] [_log()] Compression: none
2025-12-24T12:40:06.697 [DEBUG] [Thread-302263] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:40:06.763 [DEBUG] [Thread-302263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:40:06.764 [DEBUG] [Thread-302263] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:40:06.765 [DEBUG] [Thread-302263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:40:06.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:40:06.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:40:06.823 [DEBUG] [Thread-302263] [transport.py] [_log()] userauth is OK
2025-12-24T12:40:06.824 [DEBUG] [Thread-302263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:40:06.824 [DEBUG] [Thread-302263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:40:06.824 [DEBUG] [Thread-302263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:40:06.824 [DEBUG] [Thread-302263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:40:06.845 [INFO] [Thread-302263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:40:06.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:40:06.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:40:07.690 [DEBUG] [Thread-302263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:40:07.691 [DEBUG] [Thread-302263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:40:07.729 [DEBUG] [Thread-302263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:40:07.729 [DEBUG] [Thread-302263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:40:07.738 [DEBUG] [Thread-302263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:40:07.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:40:07.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:40:07.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:40:07.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:40:07.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:40:07.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:40:07.775 [DEBUG] [Thread-302263] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:40:09.975 [DEBUG] [Thread-302265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:40:19.576 [DEBUG] [Thread-302266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:40:34.723 [DEBUG] [Thread-302267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:40:37.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:40:37.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:40:37.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
2025-12-24T12:40:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 40, 28), 18.84, 28.72, 0.0, 4.02, 21.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:40:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:40:28
2025-12-24T12:40:38.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:40:39.075 [DEBUG] [Thread-302268] [transport.py] [_log()] starting thread (client mode): 0xf57a9a80
2025-12-24T12:40:39.075 [DEBUG] [Thread-302268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:40:39.079 [DEBUG] [Thread-302268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:40:39.079 [INFO] [Thread-302268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] client lang: <none>
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] server lang: <none>
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] kex follows: False
2025-12-24T12:40:39.083 [DEBUG] [Thread-302268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:40:39.084 [DEBUG] [Thread-302268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:40:39.084 [DEBUG] [Thread-302268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:40:39.084 [DEBUG] [Thread-302268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:40:39.084 [DEBUG] [Thread-302268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:40:39.084 [DEBUG] [Thread-302268] [transport.py] [_log()] Compression: none
2025-12-24T12:40:39.084 [DEBUG] [Thread-302268] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:40:39.118 [DEBUG] [Thread-302268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:40:39.122 [DEBUG] [Thread-302268] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:40:39.123 [DEBUG] [Thread-302268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:40:39.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:40:39.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:40:39.127 [DEBUG] [Thread-302268] [transport.py] [_log()] userauth is OK
2025-12-24T12:40:39.128 [DEBUG] [Thread-302268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:40:39.128 [DEBUG] [Thread-302268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:40:39.128 [DEBUG] [Thread-302268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:40:39.128 [DEBUG] [Thread-302268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:40:39.160 [INFO] [Thread-302268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:40:39.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:40:39.823 [DEBUG] [Thread-302268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:40:39.824 [DEBUG] [Thread-302268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:40:39.825 [DEBUG] [Thread-302268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:40:39.864 [DEBUG] [Thread-302268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:40:39.865 [DEBUG] [Thread-302268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:40:39.868 [DEBUG] [Thread-302268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:40:39.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:40:39.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:40:39.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:40:39.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:40:39.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:40:39.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:40:39.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:40:39.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:40:39.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:40:39.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.444514 -999.00  +22.70   2.71     32   +5.50 1 2 1 1 1   888    0 17.81 16.69 ----- 2.7 2.7 249.4 9.7 29.3 -20.9 28.4 -21.5 28.7 -19.3 29.4 -19.5
2025-12-24T12:40:39.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:40:39.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:40:39.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.444514
2025-12-24T12:40:39.903 [DEBUG] [Thread-302268] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:40:39.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:40:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:40:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:40:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:40:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:40:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:40:28', tmtdew=18.84, humidity=28.72, cloud=0.0, wind=4.02, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:40:06.010', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:40:40.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:40:40.016 [DEBUG] [Thread-302271] [transport.py] [_log()] starting thread (client mode): 0xf81e5e10
2025-12-24T12:40:40.016 [DEBUG] [Thread-302271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:40:40.031 [DEBUG] [Thread-302271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:40:40.031 [INFO] [Thread-302271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:40:40.038 [DEBUG] [Thread-302271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:40:40.038 [DEBUG] [Thread-302271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:40:40.038 [DEBUG] [Thread-302271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:40:40.038 [DEBUG] [Thread-302271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:40:40.038 [DEBUG] [Thread-302271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] client lang: <none>
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] server lang: <none>
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] kex follows: False
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] Compression: none
2025-12-24T12:40:40.039 [DEBUG] [Thread-302271] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:40:40.104 [DEBUG] [Thread-302271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:40:40.105 [DEBUG] [Thread-302271] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:40:40.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:40:40.106 [DEBUG] [Thread-302271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:40:40.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:40:40.169 [DEBUG] [Thread-302271] [transport.py] [_log()] userauth is OK
2025-12-24T12:40:40.169 [DEBUG] [Thread-302271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:40:40.170 [DEBUG] [Thread-302271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:40:40.170 [DEBUG] [Thread-302271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:40:40.170 [DEBUG] [Thread-302271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:40:40.188 [INFO] [Thread-302271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:40:40.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:40:40.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:40:41.011 [DEBUG] [Thread-302271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:40:41.011 [DEBUG] [Thread-302271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:40:41.051 [DEBUG] [Thread-302271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:40:41.051 [DEBUG] [Thread-302271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:40:41.059 [DEBUG] [Thread-302271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:40:41.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:40: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')
2025-12-24T12:40:41.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:40:41.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:40:41.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:40:41.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:40:41.097 [DEBUG] [Thread-302271] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:40:49.798 [DEBUG] [Thread-302273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:40:58.932 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:40:58.940 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:41:04.924 [DEBUG] [Thread-302274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:41:10.304 [DEBUG] [Thread-302275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:41:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:41:11.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:41:11.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:41:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 41, 2), 18.92, 28.57, 0.0, 5.01, 21.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:41:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:41:02
2025-12-24T12:41:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:41:12.305 [DEBUG] [Thread-302276] [transport.py] [_log()] starting thread (client mode): 0xf81f32b0
2025-12-24T12:41:12.305 [DEBUG] [Thread-302276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:41:12.318 [DEBUG] [Thread-302276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:41:12.318 [INFO] [Thread-302276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] client lang: <none>
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] server lang: <none>
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] kex follows: False
2025-12-24T12:41:12.324 [DEBUG] [Thread-302276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:41:12.325 [DEBUG] [Thread-302276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:41:12.325 [DEBUG] [Thread-302276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:41:12.325 [DEBUG] [Thread-302276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:41:12.325 [DEBUG] [Thread-302276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:41:12.325 [DEBUG] [Thread-302276] [transport.py] [_log()] Compression: none
2025-12-24T12:41:12.325 [DEBUG] [Thread-302276] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:41:12.352 [DEBUG] [Thread-302276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:41:12.356 [DEBUG] [Thread-302276] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:41:12.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:41:12.359 [DEBUG] [Thread-302276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:41:12.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:41:12.362 [DEBUG] [Thread-302276] [transport.py] [_log()] userauth is OK
2025-12-24T12:41:12.362 [DEBUG] [Thread-302276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:41:12.362 [DEBUG] [Thread-302276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:41:12.362 [DEBUG] [Thread-302276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:41:12.362 [DEBUG] [Thread-302276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:41:12.387 [INFO] [Thread-302276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:41:12.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:41:13.072 [DEBUG] [Thread-302276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:41:13.072 [DEBUG] [Thread-302276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:41:13.073 [DEBUG] [Thread-302276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:41:13.112 [DEBUG] [Thread-302276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:41:13.113 [DEBUG] [Thread-302276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:41:13.115 [DEBUG] [Thread-302276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:41:13.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:41:13.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:41:13.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:41:13.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:41:13.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:41:13.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:41:13.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:41:13.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:41:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:41:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.444861 -999.00  +22.60   5.41     32   +5.50 1 2 1 1 1   888    0 17.88 15.52 ----- 5.4 5.4 260.3 6.7 29.6 -20.1 28.7 -20.7 28.9 -18.9 29.8 -18.9
2025-12-24T12:41:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:41:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:41:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.444861
2025-12-24T12:41:13.144 [DEBUG] [Thread-302276] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:41:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:41:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:41:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:41:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:41:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:41:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:41:02', tmtdew=18.92, humidity=28.57, cloud=0.0, wind=5.01, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:40:35.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:41:13.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:41:13.251 [DEBUG] [Thread-302279] [transport.py] [_log()] starting thread (client mode): 0xf81f3ee0
2025-12-24T12:41:13.251 [DEBUG] [Thread-302279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:41:13.267 [DEBUG] [Thread-302279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:41:13.267 [INFO] [Thread-302279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:41:13.274 [DEBUG] [Thread-302279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:41:13.274 [DEBUG] [Thread-302279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:41:13.274 [DEBUG] [Thread-302279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:41:13.274 [DEBUG] [Thread-302279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:41:13.274 [DEBUG] [Thread-302279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:41:13.274 [DEBUG] [Thread-302279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:41:13.274 [DEBUG] [Thread-302279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] client lang: <none>
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] server lang: <none>
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] kex follows: False
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] Compression: none
2025-12-24T12:41:13.275 [DEBUG] [Thread-302279] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:41:13.332 [DEBUG] [Thread-302279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:41:13.332 [DEBUG] [Thread-302279] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:41:13.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:41:13.333 [DEBUG] [Thread-302279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:41:13.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:41:13.389 [DEBUG] [Thread-302279] [transport.py] [_log()] userauth is OK
2025-12-24T12:41:13.389 [DEBUG] [Thread-302279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:41:13.389 [DEBUG] [Thread-302279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:41:13.389 [DEBUG] [Thread-302279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:41:13.389 [DEBUG] [Thread-302279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:41:13.402 [INFO] [Thread-302279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:41:13.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:41:13.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:41:14.223 [DEBUG] [Thread-302279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:41:14.223 [DEBUG] [Thread-302279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:41:14.261 [DEBUG] [Thread-302279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:41:14.262 [DEBUG] [Thread-302279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:41:14.270 [DEBUG] [Thread-302279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:41:14.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:41:14.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:41:14.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:41:14.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:41:14.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:41:14.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:41:14.303 [DEBUG] [Thread-302279] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:41:19.989 [DEBUG] [Thread-302281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:41:35.103 [DEBUG] [Thread-302282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:41:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:41:44.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:41:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:41:45.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 41, 35), 19.25, 28.36, 0.0, 7.78, 22.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:41:45.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:41:35
2025-12-24T12:41:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:41:45.656 [DEBUG] [Thread-302283] [transport.py] [_log()] starting thread (client mode): 0xf57409a0
2025-12-24T12:41:45.657 [DEBUG] [Thread-302283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:41:45.665 [DEBUG] [Thread-302283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:41:45.665 [INFO] [Thread-302283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] client lang: <none>
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] server lang: <none>
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] kex follows: False
2025-12-24T12:41:45.670 [DEBUG] [Thread-302283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:41:45.671 [DEBUG] [Thread-302283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:41:45.671 [DEBUG] [Thread-302283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:41:45.672 [DEBUG] [Thread-302283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:41:45.672 [DEBUG] [Thread-302283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:41:45.672 [DEBUG] [Thread-302283] [transport.py] [_log()] Compression: none
2025-12-24T12:41:45.672 [DEBUG] [Thread-302283] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:41:45.704 [DEBUG] [Thread-302283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:41:45.707 [DEBUG] [Thread-302283] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:41:45.709 [DEBUG] [Thread-302283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:41:45.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:41:45.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:41:45.712 [DEBUG] [Thread-302283] [transport.py] [_log()] userauth is OK
2025-12-24T12:41:45.712 [DEBUG] [Thread-302283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:41:45.712 [DEBUG] [Thread-302283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:41:45.712 [DEBUG] [Thread-302283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:41:45.712 [DEBUG] [Thread-302283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:41:45.732 [INFO] [Thread-302283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:41:45.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:41:46.358 [DEBUG] [Thread-302283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:41:46.358 [DEBUG] [Thread-302283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:41:46.359 [DEBUG] [Thread-302283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:41:46.399 [DEBUG] [Thread-302283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:41:46.400 [DEBUG] [Thread-302283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:41:46.402 [DEBUG] [Thread-302283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:41:46.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:41:46.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:41:46.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:41:46.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:41:46.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:41:46.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:41:46.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:41:46.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:41:46.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:41:46.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.445208 -999.00  +22.70  12.52     32   +5.50 1 2 1 1 1   888    0 17.90 14.87 ----- 12.5 12.5 201.4 15.7 29.8 -20.6 28.9 -23.1 28.9 -19.6 29.8 -20.9
2025-12-24T12:41:46.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:41:46.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:41:46.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.445208
2025-12-24T12:41:46.431 [DEBUG] [Thread-302283] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:41:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:41:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:41:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:41:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:41:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:41:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:41:35', tmtdew=19.25, humidity=28.36, cloud=0.0, wind=7.78, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:41:05.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:41:46.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:41:46.535 [DEBUG] [Thread-302286] [transport.py] [_log()] starting thread (client mode): 0xf5742c20
2025-12-24T12:41:46.535 [DEBUG] [Thread-302286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:41:46.553 [DEBUG] [Thread-302286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:41:46.553 [INFO] [Thread-302286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:41:46.560 [DEBUG] [Thread-302286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:41:46.560 [DEBUG] [Thread-302286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] client lang: <none>
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] server lang: <none>
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] kex follows: False
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] Compression: none
2025-12-24T12:41:46.561 [DEBUG] [Thread-302286] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:41:46.619 [DEBUG] [Thread-302286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:41:46.619 [DEBUG] [Thread-302286] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:41:46.619 [DEBUG] [Thread-302286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:41:46.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:41:46.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:41:46.680 [DEBUG] [Thread-302286] [transport.py] [_log()] userauth is OK
2025-12-24T12:41:46.680 [DEBUG] [Thread-302286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:41:46.680 [DEBUG] [Thread-302286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:41:46.680 [DEBUG] [Thread-302286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:41:46.681 [DEBUG] [Thread-302286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:41:46.695 [INFO] [Thread-302286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:41:46.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:41:46.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:41:47.577 [DEBUG] [Thread-302286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:41:47.577 [DEBUG] [Thread-302286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:41:47.624 [DEBUG] [Thread-302286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:41:47.624 [DEBUG] [Thread-302286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:41:47.633 [DEBUG] [Thread-302286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:41:47.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:41:47.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:41:47.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:41:47.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:41:47.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:41:47.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:41:47.666 [DEBUG] [Thread-302286] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:41:50.188 [DEBUG] [Thread-302288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:41:59.084 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:41:59.087 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:42:05.350 [DEBUG] [Thread-302289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:42:10.551 [DEBUG] [Thread-302290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:42:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:42:17.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:42:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:42:18.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 42, 8), 19.23, 28.38, 0.0, 9.57, 22.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:42:18.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:42:08
2025-12-24T12:42:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:42:18.960 [DEBUG] [Thread-302291] [transport.py] [_log()] starting thread (client mode): 0xf81e6ce0
2025-12-24T12:42:18.961 [DEBUG] [Thread-302291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:42:18.972 [DEBUG] [Thread-302291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:42:18.973 [INFO] [Thread-302291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:42:18.979 [DEBUG] [Thread-302291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:42:18.979 [DEBUG] [Thread-302291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:42:18.979 [DEBUG] [Thread-302291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:42:18.979 [DEBUG] [Thread-302291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:42:18.979 [DEBUG] [Thread-302291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:42:18.979 [DEBUG] [Thread-302291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:42:18.979 [DEBUG] [Thread-302291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:42:18.979 [DEBUG] [Thread-302291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:42:18.980 [DEBUG] [Thread-302291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:42:18.980 [DEBUG] [Thread-302291] [transport.py] [_log()] client lang: <none>
2025-12-24T12:42:18.980 [DEBUG] [Thread-302291] [transport.py] [_log()] server lang: <none>
2025-12-24T12:42:18.980 [DEBUG] [Thread-302291] [transport.py] [_log()] kex follows: False
2025-12-24T12:42:18.980 [DEBUG] [Thread-302291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:42:18.981 [DEBUG] [Thread-302291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:42:18.981 [DEBUG] [Thread-302291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:42:18.981 [DEBUG] [Thread-302291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:42:18.981 [DEBUG] [Thread-302291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:42:18.981 [DEBUG] [Thread-302291] [transport.py] [_log()] Compression: none
2025-12-24T12:42:18.982 [DEBUG] [Thread-302291] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:42:19.029 [DEBUG] [Thread-302291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:42:19.035 [DEBUG] [Thread-302291] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:42:19.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:42:19.040 [DEBUG] [Thread-302291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:42:19.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:42:19.046 [DEBUG] [Thread-302291] [transport.py] [_log()] userauth is OK
2025-12-24T12:42:19.046 [DEBUG] [Thread-302291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:42:19.046 [DEBUG] [Thread-302291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:42:19.046 [DEBUG] [Thread-302291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:42:19.047 [DEBUG] [Thread-302291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:42:19.076 [INFO] [Thread-302291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:42:19.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:42:19.682 [DEBUG] [Thread-302291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:42:19.682 [DEBUG] [Thread-302291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:42:19.683 [DEBUG] [Thread-302291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:42:19.722 [DEBUG] [Thread-302291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:42:19.722 [DEBUG] [Thread-302291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:42:19.724 [DEBUG] [Thread-302291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:42:19.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:42:19.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:42:19.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:42:19.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:42:19.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:42:19.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:42:19.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:42:19.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:42:19.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:42:19.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.445555 -999.00  +22.90  11.25     33   +5.70 1 2 1 1 1   888    0 17.58 13.39 ----- 11.2 11.2 216.7 16.5 29.8 -21.1 28.9 -21.0 29.1 -19.6 29.9 -21.4
2025-12-24T12:42:19.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:42:19.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:42:19.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.445555
2025-12-24T12:42:19.754 [DEBUG] [Thread-302291] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:42:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:42:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:42:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:42:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:42:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:42:19.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:42:08', tmtdew=19.23, humidity=28.38, cloud=0.0, wind=9.57, temperature=22.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:41:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:42:19.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:42:19.860 [DEBUG] [Thread-302294] [transport.py] [_log()] starting thread (client mode): 0xf572ea70
2025-12-24T12:42:19.860 [DEBUG] [Thread-302294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:42:19.874 [DEBUG] [Thread-302294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:42:19.875 [INFO] [Thread-302294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] client lang: <none>
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] server lang: <none>
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] kex follows: False
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] Compression: none
2025-12-24T12:42:19.882 [DEBUG] [Thread-302294] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:42:19.940 [DEBUG] [Thread-302294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:42:19.940 [DEBUG] [Thread-302294] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:42:19.940 [DEBUG] [Thread-302294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:42:19.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:42:19.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:42:19.998 [DEBUG] [Thread-302294] [transport.py] [_log()] userauth is OK
2025-12-24T12:42:19.998 [DEBUG] [Thread-302294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:42:19.998 [DEBUG] [Thread-302294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:42:19.998 [DEBUG] [Thread-302294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:42:19.998 [DEBUG] [Thread-302294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:42:20.017 [INFO] [Thread-302294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:42:20.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:42:20.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:42:20.420 [DEBUG] [Thread-302296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:42:20.901 [DEBUG] [Thread-302294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:42:20.901 [DEBUG] [Thread-302294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:42:20.949 [DEBUG] [Thread-302294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:42:20.949 [DEBUG] [Thread-302294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:42:20.958 [DEBUG] [Thread-302294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:42:20.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:42:20.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:42:20.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:42:20.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:42:20.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:42:20.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:42:20.991 [DEBUG] [Thread-302294] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:42:35.616 [DEBUG] [Thread-302297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:42:50.702 [DEBUG] [Thread-302298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:42:51.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:42:51.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:42:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:42:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 42, 41), 19.36, 28.23, 0.0, 12.4, 22.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:42:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:42:41
2025-12-24T12:42:52.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:42:52.423 [DEBUG] [Thread-302299] [transport.py] [_log()] starting thread (client mode): 0xf5741d80
2025-12-24T12:42:52.424 [DEBUG] [Thread-302299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:42:52.430 [DEBUG] [Thread-302299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:42:52.430 [INFO] [Thread-302299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] client lang: <none>
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] server lang: <none>
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] kex follows: False
2025-12-24T12:42:52.433 [DEBUG] [Thread-302299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:42:52.434 [DEBUG] [Thread-302299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:42:52.434 [DEBUG] [Thread-302299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:42:52.434 [DEBUG] [Thread-302299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:42:52.434 [DEBUG] [Thread-302299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:42:52.434 [DEBUG] [Thread-302299] [transport.py] [_log()] Compression: none
2025-12-24T12:42:52.434 [DEBUG] [Thread-302299] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:42:52.457 [DEBUG] [Thread-302299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:42:52.462 [DEBUG] [Thread-302299] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:42:52.464 [DEBUG] [Thread-302299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:42:52.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:42:52.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:42:52.468 [DEBUG] [Thread-302299] [transport.py] [_log()] userauth is OK
2025-12-24T12:42:52.469 [DEBUG] [Thread-302299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:42:52.469 [DEBUG] [Thread-302299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:42:52.469 [DEBUG] [Thread-302299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:42:52.469 [DEBUG] [Thread-302299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:42:52.505 [INFO] [Thread-302299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:42:52.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:42:53.180 [DEBUG] [Thread-302299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:42:53.180 [DEBUG] [Thread-302299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:42:53.181 [DEBUG] [Thread-302299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:42:53.221 [DEBUG] [Thread-302299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:42:53.221 [DEBUG] [Thread-302299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:42:53.224 [DEBUG] [Thread-302299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:42:53.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:42:53.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:42:53.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:42:53.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:42:53.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:42:53.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:42:53.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:42:53.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:42:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:42:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.445903 -999.00  +23.20   2.97     32   +5.70 1 2 1 1 1   888    0 17.80 14.02 ----- 3.0 3.0 202.6 12.8 30.1 -19.6 29.0 -20.8 29.1 -18.5 30.1 -19.9
2025-12-24T12:42:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:42:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:42:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.445903
2025-12-24T12:42:53.260 [DEBUG] [Thread-302299] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:42:53.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:42:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:42:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:42:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:42:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:42:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:42:41', tmtdew=19.36, humidity=28.23, cloud=0.0, wind=12.4, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:42:06.019', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:42:53.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:42:53.367 [DEBUG] [Thread-302302] [transport.py] [_log()] starting thread (client mode): 0xf5743fa0
2025-12-24T12:42:53.367 [DEBUG] [Thread-302302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:42:53.383 [DEBUG] [Thread-302302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:42:53.383 [INFO] [Thread-302302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:42:53.391 [DEBUG] [Thread-302302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:42:53.391 [DEBUG] [Thread-302302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:42:53.391 [DEBUG] [Thread-302302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:42:53.391 [DEBUG] [Thread-302302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:42:53.391 [DEBUG] [Thread-302302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:42:53.391 [DEBUG] [Thread-302302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] client lang: <none>
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] server lang: <none>
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] kex follows: False
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:42:53.392 [DEBUG] [Thread-302302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:42:53.393 [DEBUG] [Thread-302302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:42:53.393 [DEBUG] [Thread-302302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:42:53.393 [DEBUG] [Thread-302302] [transport.py] [_log()] Compression: none
2025-12-24T12:42:53.393 [DEBUG] [Thread-302302] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:42:53.453 [DEBUG] [Thread-302302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:42:53.454 [DEBUG] [Thread-302302] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:42:53.455 [DEBUG] [Thread-302302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:42:53.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:42:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:42:53.510 [DEBUG] [Thread-302302] [transport.py] [_log()] userauth is OK
2025-12-24T12:42:53.510 [DEBUG] [Thread-302302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:42:53.510 [DEBUG] [Thread-302302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:42:53.510 [DEBUG] [Thread-302302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:42:53.510 [DEBUG] [Thread-302302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:42:53.534 [INFO] [Thread-302302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:42:53.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:42:53.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:42:54.370 [DEBUG] [Thread-302302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:42:54.370 [DEBUG] [Thread-302302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:42:54.418 [DEBUG] [Thread-302302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:42:54.418 [DEBUG] [Thread-302302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:42:54.427 [DEBUG] [Thread-302302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:42:54.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:42:54.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:42:54.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:42:54.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:42:54.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:42:54.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:42:54.465 [DEBUG] [Thread-302302] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:42:59.229 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:42:59.231 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:43:05.732 [DEBUG] [Thread-302304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:43:10.811 [DEBUG] [Thread-302305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:43:20.904 [DEBUG] [Thread-302306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:43:24.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:43:24.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:43:24.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
2025-12-24T12:43:25.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 43, 14), 19.55, 27.93, 0.0, 11.96, 22.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:43:25.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:43:14
2025-12-24T12:43:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:43:26.226 [DEBUG] [Thread-302307] [transport.py] [_log()] starting thread (client mode): 0xf81e4af0
2025-12-24T12:43:26.227 [DEBUG] [Thread-302307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:43:26.232 [DEBUG] [Thread-302307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:43:26.232 [INFO] [Thread-302307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:43:26.235 [DEBUG] [Thread-302307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:43:26.235 [DEBUG] [Thread-302307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] client lang: <none>
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] server lang: <none>
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] kex follows: False
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:43:26.236 [DEBUG] [Thread-302307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:43:26.237 [DEBUG] [Thread-302307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:43:26.237 [DEBUG] [Thread-302307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:43:26.237 [DEBUG] [Thread-302307] [transport.py] [_log()] Compression: none
2025-12-24T12:43:26.237 [DEBUG] [Thread-302307] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:43:26.272 [DEBUG] [Thread-302307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:43:26.275 [DEBUG] [Thread-302307] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:43:26.278 [DEBUG] [Thread-302307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:43:26.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:43:26.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:43:26.282 [DEBUG] [Thread-302307] [transport.py] [_log()] userauth is OK
2025-12-24T12:43:26.283 [DEBUG] [Thread-302307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:43:26.284 [DEBUG] [Thread-302307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:43:26.284 [DEBUG] [Thread-302307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:43:26.284 [DEBUG] [Thread-302307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:43:26.325 [INFO] [Thread-302307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:43:26.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:43:26.982 [DEBUG] [Thread-302307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:43:26.983 [DEBUG] [Thread-302307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:43:26.984 [DEBUG] [Thread-302307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:43:27.024 [DEBUG] [Thread-302307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:43:27.024 [DEBUG] [Thread-302307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:43:27.028 [DEBUG] [Thread-302307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:43:27.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:43:27.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:43:27.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:43:27.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:43:27.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:43:27.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:43:27.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:43:27.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:43:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:43:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.446250 -999.00  +23.50   5.41     31   +5.60 1 2 1 1 1   888    0 17.69 16.56 ----- 5.4 5.4 219.8 8.9 30.2 -19.8 29.3 -21.0 29.4 -19.0 30.2 -20.3
2025-12-24T12:43:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:43:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:43:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.446250
2025-12-24T12:43:27.065 [DEBUG] [Thread-302307] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:43:27.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:43:27.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:43:27.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:43:27.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:43:27.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:43:27.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:43:14', tmtdew=19.55, humidity=27.93, cloud=0.0, wind=11.96, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:42:36.000', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:43:27.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:43:27.178 [DEBUG] [Thread-302310] [transport.py] [_log()] starting thread (client mode): 0xf81e5720
2025-12-24T12:43:27.178 [DEBUG] [Thread-302310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:43:27.194 [DEBUG] [Thread-302310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:43:27.194 [INFO] [Thread-302310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:43:27.202 [DEBUG] [Thread-302310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:43:27.202 [DEBUG] [Thread-302310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:43:27.202 [DEBUG] [Thread-302310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] client lang: <none>
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] server lang: <none>
2025-12-24T12:43:27.203 [DEBUG] [Thread-302310] [transport.py] [_log()] kex follows: False
2025-12-24T12:43:27.204 [DEBUG] [Thread-302310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:43:27.204 [DEBUG] [Thread-302310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:43:27.204 [DEBUG] [Thread-302310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:43:27.204 [DEBUG] [Thread-302310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:43:27.204 [DEBUG] [Thread-302310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:43:27.204 [DEBUG] [Thread-302310] [transport.py] [_log()] Compression: none
2025-12-24T12:43:27.204 [DEBUG] [Thread-302310] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:43:27.265 [DEBUG] [Thread-302310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:43:27.265 [DEBUG] [Thread-302310] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:43:27.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:43:27.266 [DEBUG] [Thread-302310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:43:27.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:43:27.322 [DEBUG] [Thread-302310] [transport.py] [_log()] userauth is OK
2025-12-24T12:43:27.322 [DEBUG] [Thread-302310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:43:27.322 [DEBUG] [Thread-302310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:43:27.323 [DEBUG] [Thread-302310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:43:27.323 [DEBUG] [Thread-302310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:43:27.341 [INFO] [Thread-302310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:43:27.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:43:27.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:43:28.240 [DEBUG] [Thread-302310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:43:28.240 [DEBUG] [Thread-302310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:43:28.288 [DEBUG] [Thread-302310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:43:28.288 [DEBUG] [Thread-302310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:43:28.297 [DEBUG] [Thread-302310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:43:28.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:43:28.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:43:28.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:43:28.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:43:28.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:43:28.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:43:28.330 [DEBUG] [Thread-302310] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:43:36.043 [DEBUG] [Thread-302312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:43:51.226 [DEBUG] [Thread-302313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:43:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:43:58.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:43:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:43:59.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 43, 47), 19.66, 27.76, 0.0, 10.59, 22.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:43:59.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:43:47
2025-12-24T12:43:59.372 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:43:59.373 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:43:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:43:59.583 [DEBUG] [Thread-302314] [transport.py] [_log()] starting thread (client mode): 0xf81e4d30
2025-12-24T12:43:59.583 [DEBUG] [Thread-302314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:43:59.596 [DEBUG] [Thread-302314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:43:59.596 [INFO] [Thread-302314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:43:59.601 [DEBUG] [Thread-302314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] client lang: <none>
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] server lang: <none>
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] kex follows: False
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:43:59.602 [DEBUG] [Thread-302314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:43:59.603 [DEBUG] [Thread-302314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:43:59.603 [DEBUG] [Thread-302314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:43:59.603 [DEBUG] [Thread-302314] [transport.py] [_log()] Compression: none
2025-12-24T12:43:59.603 [DEBUG] [Thread-302314] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:43:59.640 [DEBUG] [Thread-302314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:43:59.644 [DEBUG] [Thread-302314] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:43:59.646 [DEBUG] [Thread-302314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:43:59.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:43:59.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:43:59.651 [DEBUG] [Thread-302314] [transport.py] [_log()] userauth is OK
2025-12-24T12:43:59.651 [DEBUG] [Thread-302314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:43:59.652 [DEBUG] [Thread-302314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:43:59.652 [DEBUG] [Thread-302314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:43:59.652 [DEBUG] [Thread-302314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:43:59.679 [INFO] [Thread-302314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:43:59.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:44:00.328 [DEBUG] [Thread-302314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:44:00.329 [DEBUG] [Thread-302314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:44:00.329 [DEBUG] [Thread-302314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:44:00.370 [DEBUG] [Thread-302314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:44:00.370 [DEBUG] [Thread-302314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:44:00.372 [DEBUG] [Thread-302314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:44:00.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:44:00.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:44:00.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:44:00.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:44:00.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:44:00.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:44:00.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:44:00.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:44:00.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:44:00.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.446597 -999.00  +23.70   4.77     31   +5.90 1 2 1 1 1   888    0 17.51 16.94 ----- 4.8 4.8 175.1 7.0 30.5 -19.1 29.4 -21.5 29.6 -18.7 30.5 -19.0
2025-12-24T12:44:00.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:44:00.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:44:00.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.446597
2025-12-24T12:44:00.402 [DEBUG] [Thread-302314] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:44:00.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:44:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:44:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:44:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:44:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:44:00.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:43:47', tmtdew=19.66, humidity=27.76, cloud=0.0, wind=10.59, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:43:05.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:44:00.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:44:00.507 [DEBUG] [Thread-302317] [transport.py] [_log()] starting thread (client mode): 0xf572d7b0
2025-12-24T12:44:00.507 [DEBUG] [Thread-302317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:44:00.522 [DEBUG] [Thread-302317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:44:00.522 [INFO] [Thread-302317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:44:00.529 [DEBUG] [Thread-302317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:44:00.529 [DEBUG] [Thread-302317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:44:00.529 [DEBUG] [Thread-302317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:44:00.529 [DEBUG] [Thread-302317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:44:00.529 [DEBUG] [Thread-302317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:44:00.529 [DEBUG] [Thread-302317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:44:00.529 [DEBUG] [Thread-302317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] client lang: <none>
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] server lang: <none>
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] kex follows: False
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] Compression: none
2025-12-24T12:44:00.530 [DEBUG] [Thread-302317] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:44:00.584 [DEBUG] [Thread-302317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:44:00.584 [DEBUG] [Thread-302317] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:44:00.584 [DEBUG] [Thread-302317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:44:00.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:44:00.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:44:00.642 [DEBUG] [Thread-302317] [transport.py] [_log()] userauth is OK
2025-12-24T12:44:00.642 [DEBUG] [Thread-302317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:44:00.643 [DEBUG] [Thread-302317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:44:00.643 [DEBUG] [Thread-302317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:44:00.643 [DEBUG] [Thread-302317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:44:00.663 [INFO] [Thread-302317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:44:00.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:44:00.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:44:01.530 [DEBUG] [Thread-302317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:44:01.530 [DEBUG] [Thread-302317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:44:01.577 [DEBUG] [Thread-302317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:44:01.577 [DEBUG] [Thread-302317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:44:01.586 [DEBUG] [Thread-302317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:44:01.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:44:01.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:44:01.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:44:01.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:44:01.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:44:01.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:44:01.627 [DEBUG] [Thread-302317] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:44:06.334 [DEBUG] [Thread-302319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:44:11.149 [DEBUG] [Thread-302320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:44:21.481 [DEBUG] [Thread-302321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:44:31.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:44:31.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:44:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:44:32.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 44, 20), 19.7, 27.68, 0.0, 10.8, 22.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:44:32.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:44:20
2025-12-24T12:44:33.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:44:33.205 [DEBUG] [Thread-302322] [transport.py] [_log()] starting thread (client mode): 0xf572fa00
2025-12-24T12:44:33.206 [DEBUG] [Thread-302322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:44:33.217 [DEBUG] [Thread-302322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:44:33.217 [INFO] [Thread-302322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:44:33.222 [DEBUG] [Thread-302322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] client lang: <none>
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] server lang: <none>
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] kex follows: False
2025-12-24T12:44:33.223 [DEBUG] [Thread-302322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:44:33.224 [DEBUG] [Thread-302322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:44:33.224 [DEBUG] [Thread-302322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:44:33.224 [DEBUG] [Thread-302322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:44:33.224 [DEBUG] [Thread-302322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:44:33.224 [DEBUG] [Thread-302322] [transport.py] [_log()] Compression: none
2025-12-24T12:44:33.224 [DEBUG] [Thread-302322] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:44:33.258 [DEBUG] [Thread-302322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:44:33.262 [DEBUG] [Thread-302322] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:44:33.264 [DEBUG] [Thread-302322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:44:33.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:44:33.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:44:33.267 [DEBUG] [Thread-302322] [transport.py] [_log()] userauth is OK
2025-12-24T12:44:33.267 [DEBUG] [Thread-302322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:44:33.267 [DEBUG] [Thread-302322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:44:33.267 [DEBUG] [Thread-302322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:44:33.267 [DEBUG] [Thread-302322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:44:33.297 [INFO] [Thread-302322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:44:33.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:44:33.934 [DEBUG] [Thread-302322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:44:33.934 [DEBUG] [Thread-302322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:44:33.935 [DEBUG] [Thread-302322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:44:33.975 [DEBUG] [Thread-302322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:44:33.976 [DEBUG] [Thread-302322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:44:33.978 [DEBUG] [Thread-302322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:44:33.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:44:33.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:44:33.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:44:33.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:44:33.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:44:33.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:44:33.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:44:33.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:44:34.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:44:34.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.446944 -999.00  +23.70  11.87     31   +5.70 1 2 1 1 1   888    0 18.02 20.90 ----- 11.9 11.9 265.8 12.6 30.6 -20.8 29.6 -21.0 29.7 -18.9 30.5 -21.1
2025-12-24T12:44:34.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:44:34.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:44:34.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.446944
2025-12-24T12:44:34.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:44:34.019 [DEBUG] [Thread-302322] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:44:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:44:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:44:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:44:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:44:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:44:20', tmtdew=19.7, humidity=27.68, cloud=0.0, wind=10.8, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:43:35.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:44:34.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:44:34.108 [DEBUG] [Thread-302325] [transport.py] [_log()] starting thread (client mode): 0xf81e42b0
2025-12-24T12:44:34.108 [DEBUG] [Thread-302325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:44:34.122 [DEBUG] [Thread-302325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:44:34.122 [INFO] [Thread-302325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:44:34.129 [DEBUG] [Thread-302325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] client lang: <none>
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] server lang: <none>
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] kex follows: False
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] Compression: none
2025-12-24T12:44:34.130 [DEBUG] [Thread-302325] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:44:34.189 [DEBUG] [Thread-302325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:44:34.189 [DEBUG] [Thread-302325] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:44:34.190 [DEBUG] [Thread-302325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:44:34.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:44:34.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:44:34.246 [DEBUG] [Thread-302325] [transport.py] [_log()] userauth is OK
2025-12-24T12:44:34.246 [DEBUG] [Thread-302325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:44:34.246 [DEBUG] [Thread-302325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:44:34.246 [DEBUG] [Thread-302325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:44:34.246 [DEBUG] [Thread-302325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:44:34.264 [INFO] [Thread-302325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:44:34.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:44:34.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:44:35.069 [DEBUG] [Thread-302325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:44:35.069 [DEBUG] [Thread-302325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:44:35.116 [DEBUG] [Thread-302325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:44:35.116 [DEBUG] [Thread-302325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:44:35.125 [DEBUG] [Thread-302325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:44:35.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:44:35.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:44:35.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:44:35.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:44:35.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:44:35.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:44:35.158 [DEBUG] [Thread-302325] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:44:36.539 [DEBUG] [Thread-302327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:44:51.672 [DEBUG] [Thread-302328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:44:59.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:44:59.522 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:45:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:45:05.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:45:05.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:45:06.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 44, 54), 19.67, 27.41, 0.0, 14.27, 22.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:45:06.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:44:54
2025-12-24T12:45:06.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:45:06.666 [DEBUG] [Thread-302329] [transport.py] [_log()] starting thread (client mode): 0xf572ecb0
2025-12-24T12:45:06.666 [DEBUG] [Thread-302329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:45:06.679 [DEBUG] [Thread-302329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:45:06.679 [INFO] [Thread-302329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:45:06.683 [DEBUG] [Thread-302329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] client lang: <none>
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] server lang: <none>
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] kex follows: False
2025-12-24T12:45:06.684 [DEBUG] [Thread-302329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:45:06.685 [DEBUG] [Thread-302329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:45:06.685 [DEBUG] [Thread-302329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:45:06.685 [DEBUG] [Thread-302329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:45:06.685 [DEBUG] [Thread-302329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:45:06.685 [DEBUG] [Thread-302329] [transport.py] [_log()] Compression: none
2025-12-24T12:45:06.685 [DEBUG] [Thread-302329] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:45:06.716 [DEBUG] [Thread-302329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:45:06.719 [DEBUG] [Thread-302329] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:45:06.721 [DEBUG] [Thread-302329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:45:06.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:45:06.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:45:06.726 [DEBUG] [Thread-302329] [transport.py] [_log()] userauth is OK
2025-12-24T12:45:06.726 [DEBUG] [Thread-302329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:45:06.726 [DEBUG] [Thread-302329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:45:06.726 [DEBUG] [Thread-302329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:45:06.726 [DEBUG] [Thread-302329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:45:06.745 [DEBUG] [Thread-302331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:45:06.761 [INFO] [Thread-302329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:45:06.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:45:07.622 [DEBUG] [Thread-302329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:45:07.622 [DEBUG] [Thread-302329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:45:07.623 [DEBUG] [Thread-302329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:45:07.664 [DEBUG] [Thread-302329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:45:07.664 [DEBUG] [Thread-302329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:45:07.666 [DEBUG] [Thread-302329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:45:07.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:45:07.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:45:07.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:45:07.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:45:07.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:45:07.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:45:07.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:45:07.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:45:07.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:45:07.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.447639 -999.00  +23.00  13.70     32   +5.50 1 2 1 1 1   888    0 18.45 27.25 ----- 13.7 13.7 272.4 15.6 30.7 -22.9 29.9 -21.3 29.7 -19.1 30.5 -20.9
2025-12-24T12:45:07.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:45:07.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:45:07.695 [DEBUG] [Thread-302329] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:45:07.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.447639
2025-12-24T12:45:07.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:45:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:45:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:45:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:45:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:45:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:44:54', tmtdew=19.67, humidity=27.41, cloud=0.0, wind=14.27, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:44:36.010', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:45:07.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:45:07.817 [DEBUG] [Thread-302333] [transport.py] [_log()] starting thread (client mode): 0xf57bf9d0
2025-12-24T12:45:07.817 [DEBUG] [Thread-302333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:45:07.833 [DEBUG] [Thread-302333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:45:07.833 [INFO] [Thread-302333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] client lang: <none>
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] server lang: <none>
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] kex follows: False
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:45:07.840 [DEBUG] [Thread-302333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:45:07.841 [DEBUG] [Thread-302333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:45:07.841 [DEBUG] [Thread-302333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:45:07.841 [DEBUG] [Thread-302333] [transport.py] [_log()] Compression: none
2025-12-24T12:45:07.841 [DEBUG] [Thread-302333] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:45:07.899 [DEBUG] [Thread-302333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:45:07.899 [DEBUG] [Thread-302333] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:45:07.900 [DEBUG] [Thread-302333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:45:07.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:45:07.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:45:07.958 [DEBUG] [Thread-302333] [transport.py] [_log()] userauth is OK
2025-12-24T12:45:07.959 [DEBUG] [Thread-302333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:45:07.959 [DEBUG] [Thread-302333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:45:07.959 [DEBUG] [Thread-302333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:45:07.959 [DEBUG] [Thread-302333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:45:07.987 [INFO] [Thread-302333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:45:07.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:45:07.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:45:08.859 [DEBUG] [Thread-302333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:45:08.860 [DEBUG] [Thread-302333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:45:08.902 [DEBUG] [Thread-302333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:45:08.902 [DEBUG] [Thread-302333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:45:08.915 [DEBUG] [Thread-302333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:45:08.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:45:08.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:45:08.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:45:08.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:45:08.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:45:08.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:45:08.951 [DEBUG] [Thread-302333] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:45:11.364 [DEBUG] [Thread-302335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:45:21.875 [DEBUG] [Thread-302336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:45:37.048 [DEBUG] [Thread-302337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:45:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:45:38.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:45:39.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:45:39.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 45, 27), 19.63, 27.46, 0.0, 13.27, 22.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:45:39.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:45:27
2025-12-24T12:45:40.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:45:40.237 [DEBUG] [Thread-302338] [transport.py] [_log()] starting thread (client mode): 0xf81f02e0
2025-12-24T12:45:40.238 [DEBUG] [Thread-302338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:45:40.250 [DEBUG] [Thread-302338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:45:40.251 [INFO] [Thread-302338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:45:40.255 [DEBUG] [Thread-302338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] client lang: <none>
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] server lang: <none>
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] kex follows: False
2025-12-24T12:45:40.256 [DEBUG] [Thread-302338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:45:40.257 [DEBUG] [Thread-302338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:45:40.257 [DEBUG] [Thread-302338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:45:40.257 [DEBUG] [Thread-302338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:45:40.257 [DEBUG] [Thread-302338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:45:40.257 [DEBUG] [Thread-302338] [transport.py] [_log()] Compression: none
2025-12-24T12:45:40.257 [DEBUG] [Thread-302338] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:45:40.293 [DEBUG] [Thread-302338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:45:40.298 [DEBUG] [Thread-302338] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:45:40.299 [DEBUG] [Thread-302338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:45:40.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:45:40.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:45:40.307 [DEBUG] [Thread-302338] [transport.py] [_log()] userauth is OK
2025-12-24T12:45:40.307 [DEBUG] [Thread-302338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:45:40.307 [DEBUG] [Thread-302338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:45:40.307 [DEBUG] [Thread-302338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:45:40.307 [DEBUG] [Thread-302338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:45:40.335 [INFO] [Thread-302338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:45:40.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:45:40.984 [DEBUG] [Thread-302338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:45:40.984 [DEBUG] [Thread-302338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:45:40.985 [DEBUG] [Thread-302338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:45:41.025 [DEBUG] [Thread-302338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:45:41.026 [DEBUG] [Thread-302338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:45:41.029 [DEBUG] [Thread-302338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:45:41.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:45:41.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:45:41.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:45:41.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:45:41.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:45:41.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:45:41.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:45:41.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:45:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:45:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.447986 -999.00  +22.70   6.21     32   +5.50 1 2 1 1 1   888    0 18.22 26.59 ----- 6.2 6.2 236.5 11.0 30.8 -21.4 30.0 -21.4 29.6 -19.0 30.6 -20.7
2025-12-24T12:45:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:45:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:45:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.447986
2025-12-24T12:45:41.058 [DEBUG] [Thread-302338] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:45:41.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:45:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:45:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:45:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:45:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:45:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:45:27', tmtdew=19.63, humidity=27.46, cloud=0.0, wind=13.27, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:45:05.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:45:41.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:45:41.157 [DEBUG] [Thread-302341] [transport.py] [_log()] starting thread (client mode): 0xf81f2a10
2025-12-24T12:45:41.157 [DEBUG] [Thread-302341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:45:41.175 [DEBUG] [Thread-302341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:45:41.175 [INFO] [Thread-302341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:45:41.182 [DEBUG] [Thread-302341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] client lang: <none>
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] server lang: <none>
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] kex follows: False
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:45:41.183 [DEBUG] [Thread-302341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:45:41.184 [DEBUG] [Thread-302341] [transport.py] [_log()] Compression: none
2025-12-24T12:45:41.184 [DEBUG] [Thread-302341] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:45:41.244 [DEBUG] [Thread-302341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:45:41.244 [DEBUG] [Thread-302341] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:45:41.245 [DEBUG] [Thread-302341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:45:41.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:45:41.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:45:41.303 [DEBUG] [Thread-302341] [transport.py] [_log()] userauth is OK
2025-12-24T12:45:41.303 [DEBUG] [Thread-302341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:45:41.303 [DEBUG] [Thread-302341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:45:41.303 [DEBUG] [Thread-302341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:45:41.304 [DEBUG] [Thread-302341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:45:41.322 [INFO] [Thread-302341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:45:41.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:45:41.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:45:42.177 [DEBUG] [Thread-302341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:45:42.177 [DEBUG] [Thread-302341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:45:42.216 [DEBUG] [Thread-302341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:45:42.216 [DEBUG] [Thread-302341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:45:42.225 [DEBUG] [Thread-302341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:45:42.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:45:42.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:45:42.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:45:42.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:45:42.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:45:42.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:45:42.258 [DEBUG] [Thread-302341] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:45:52.120 [DEBUG] [Thread-302343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:45:59.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:45:59.666 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:46:07.267 [DEBUG] [Thread-302344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:46:11.649 [DEBUG] [Thread-302345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:46:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:46:12.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:46:12.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:46:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 45, 27), 19.68, 27.46, 0.0, 11.47, 22.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:46:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:45:27
2025-12-24T12:46:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:46:13.897 [DEBUG] [Thread-302346] [transport.py] [_log()] starting thread (client mode): 0xf81f19f0
2025-12-24T12:46:13.898 [DEBUG] [Thread-302346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:46:13.904 [DEBUG] [Thread-302346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:46:13.904 [INFO] [Thread-302346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:46:13.908 [DEBUG] [Thread-302346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] client lang: <none>
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] server lang: <none>
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] kex follows: False
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:46:13.909 [DEBUG] [Thread-302346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:46:13.910 [DEBUG] [Thread-302346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:46:13.910 [DEBUG] [Thread-302346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:46:13.910 [DEBUG] [Thread-302346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:46:13.910 [DEBUG] [Thread-302346] [transport.py] [_log()] Compression: none
2025-12-24T12:46:13.910 [DEBUG] [Thread-302346] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:46:13.938 [DEBUG] [Thread-302346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:46:13.941 [DEBUG] [Thread-302346] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:46:13.942 [DEBUG] [Thread-302346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:46:13.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:46:13.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:46:13.945 [DEBUG] [Thread-302346] [transport.py] [_log()] userauth is OK
2025-12-24T12:46:13.945 [DEBUG] [Thread-302346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:46:13.945 [DEBUG] [Thread-302346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:46:13.945 [DEBUG] [Thread-302346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:46:13.945 [DEBUG] [Thread-302346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:46:13.981 [INFO] [Thread-302346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:46:13.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:46:14.800 [DEBUG] [Thread-302346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:46:14.800 [DEBUG] [Thread-302346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:46:14.811 [DEBUG] [Thread-302346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:46:14.842 [DEBUG] [Thread-302346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:46:14.843 [DEBUG] [Thread-302346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:46:14.847 [DEBUG] [Thread-302346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:46:14.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:46:14.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:46:14.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:46:14.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:46:14.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:46:14.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:46:14.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:46:14.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:46:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:46:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.448333 -999.00  +23.10  13.16     32   +5.60 1 2 1 1 1   888    0 17.96 26.86 ----- 13.2 13.2 224.8 14.6 30.7 -22.2 29.9 -22.8 29.8 -19.7 30.6 -21.8
2025-12-24T12:46:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:46:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:46:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.448333
2025-12-24T12:46:14.882 [DEBUG] [Thread-302346] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:46:14.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:46:14.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:46:14.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:46:14.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:46:14.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:46:14.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:45:27', tmtdew=19.68, humidity=27.46, cloud=0.0, wind=11.47, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:45:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:46:14.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:46:14.984 [DEBUG] [Thread-302349] [transport.py] [_log()] starting thread (client mode): 0xf81e7550
2025-12-24T12:46:14.984 [DEBUG] [Thread-302349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:46:14.999 [DEBUG] [Thread-302349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:46:14.999 [INFO] [Thread-302349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:46:15.006 [DEBUG] [Thread-302349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:46:15.006 [DEBUG] [Thread-302349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:46:15.006 [DEBUG] [Thread-302349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:46:15.006 [DEBUG] [Thread-302349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:46:15.006 [DEBUG] [Thread-302349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] client lang: <none>
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] server lang: <none>
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] kex follows: False
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] Compression: none
2025-12-24T12:46:15.007 [DEBUG] [Thread-302349] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:46:15.067 [DEBUG] [Thread-302349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:46:15.068 [DEBUG] [Thread-302349] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:46:15.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:46:15.069 [DEBUG] [Thread-302349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:46:15.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:46:15.124 [DEBUG] [Thread-302349] [transport.py] [_log()] userauth is OK
2025-12-24T12:46:15.124 [DEBUG] [Thread-302349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:46:15.124 [DEBUG] [Thread-302349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:46:15.124 [DEBUG] [Thread-302349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:46:15.124 [DEBUG] [Thread-302349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:46:15.142 [INFO] [Thread-302349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:46:15.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:46:15.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:46:15.994 [DEBUG] [Thread-302349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:46:15.994 [DEBUG] [Thread-302349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:46:16.041 [DEBUG] [Thread-302349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:46:16.041 [DEBUG] [Thread-302349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:46:16.049 [DEBUG] [Thread-302349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:46:16.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:46:16.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:46:16.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:46:16.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:46:16.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:46:16.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:46:16.080 [DEBUG] [Thread-302349] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:46:22.354 [DEBUG] [Thread-302351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:46:37.510 [DEBUG] [Thread-302352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:46:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:46:46.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:46:46.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:46:46.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 46, 33), 19.45, 27.84, 0.0, 9.65, 22.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:46:46.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:46:33
2025-12-24T12:46:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:46:47.317 [DEBUG] [Thread-302353] [transport.py] [_log()] starting thread (client mode): 0xf81f22f0
2025-12-24T12:46:47.318 [DEBUG] [Thread-302353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:46:47.328 [DEBUG] [Thread-302353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:46:47.328 [INFO] [Thread-302353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] client lang: <none>
2025-12-24T12:46:47.336 [DEBUG] [Thread-302353] [transport.py] [_log()] server lang: <none>
2025-12-24T12:46:47.337 [DEBUG] [Thread-302353] [transport.py] [_log()] kex follows: False
2025-12-24T12:46:47.337 [DEBUG] [Thread-302353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:46:47.338 [DEBUG] [Thread-302353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:46:47.338 [DEBUG] [Thread-302353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:46:47.338 [DEBUG] [Thread-302353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:46:47.338 [DEBUG] [Thread-302353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:46:47.338 [DEBUG] [Thread-302353] [transport.py] [_log()] Compression: none
2025-12-24T12:46:47.338 [DEBUG] [Thread-302353] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:46:47.375 [DEBUG] [Thread-302353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:46:47.378 [DEBUG] [Thread-302353] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:46:47.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:46:47.380 [DEBUG] [Thread-302353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:46:47.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:46:47.384 [DEBUG] [Thread-302353] [transport.py] [_log()] userauth is OK
2025-12-24T12:46:47.384 [DEBUG] [Thread-302353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:46:47.384 [DEBUG] [Thread-302353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:46:47.384 [DEBUG] [Thread-302353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:46:47.384 [DEBUG] [Thread-302353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:46:47.414 [INFO] [Thread-302353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:46:47.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:46:48.039 [DEBUG] [Thread-302353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:46:48.039 [DEBUG] [Thread-302353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:46:48.041 [DEBUG] [Thread-302353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:46:48.080 [DEBUG] [Thread-302353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:46:48.080 [DEBUG] [Thread-302353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:46:48.084 [DEBUG] [Thread-302353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:46:48.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:46:48.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:46:48.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:46:48.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:46:48.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:46:48.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:46:48.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:46:48.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:46:48.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:46:48.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.448681 -999.00  +22.80   7.20     32   +5.60 1 2 1 1 1   888    0 18.02 24.76 ----- 7.2 7.2 203.3 12.5 30.8 -20.7 29.9 -22.1 29.8 -19.9 30.7 -20.6
2025-12-24T12:46:48.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:46:48.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:46:48.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.448681
2025-12-24T12:46:48.122 [DEBUG] [Thread-302353] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:46:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:46:48.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:46:48.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:46:48.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:46:48.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:46:48.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:46:33', tmtdew=19.45, humidity=27.84, cloud=0.0, wind=9.65, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:46:06.038', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:46:48.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:46:48.235 [DEBUG] [Thread-302356] [transport.py] [_log()] starting thread (client mode): 0xf57bec50
2025-12-24T12:46:48.235 [DEBUG] [Thread-302356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:46:48.249 [DEBUG] [Thread-302356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:46:48.249 [INFO] [Thread-302356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] client lang: <none>
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] server lang: <none>
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] kex follows: False
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] Compression: none
2025-12-24T12:46:48.257 [DEBUG] [Thread-302356] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:46:48.315 [DEBUG] [Thread-302356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:46:48.315 [DEBUG] [Thread-302356] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:46:48.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:46:48.316 [DEBUG] [Thread-302356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:46:48.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:46:48.371 [DEBUG] [Thread-302356] [transport.py] [_log()] userauth is OK
2025-12-24T12:46:48.371 [DEBUG] [Thread-302356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:46:48.371 [DEBUG] [Thread-302356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:46:48.371 [DEBUG] [Thread-302356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:46:48.371 [DEBUG] [Thread-302356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:46:48.384 [INFO] [Thread-302356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:46:48.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:46:48.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:46:49.276 [DEBUG] [Thread-302356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:46:49.276 [DEBUG] [Thread-302356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:46:49.323 [DEBUG] [Thread-302356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:46:49.323 [DEBUG] [Thread-302356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:46:49.331 [DEBUG] [Thread-302356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:46:49.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:46:49.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:46:49.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:46:49.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:46:49.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:46:49.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:46:49.365 [DEBUG] [Thread-302356] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:46:52.600 [DEBUG] [Thread-302358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:46:59.816 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:46:59.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:47:07.720 [DEBUG] [Thread-302359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:47:11.934 [DEBUG] [Thread-302360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:47:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:47:19.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:47:19.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
2025-12-24T12:47:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 47, 6), 19.21, 28.24, 0.0, 7.71, 22.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:47:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:47:06
2025-12-24T12:47:21.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:47:21.247 [DEBUG] [Thread-302361] [transport.py] [_log()] starting thread (client mode): 0xf81e7640
2025-12-24T12:47:21.247 [DEBUG] [Thread-302361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:47:21.259 [DEBUG] [Thread-302361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:47:21.259 [INFO] [Thread-302361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] client lang: <none>
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] server lang: <none>
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] kex follows: False
2025-12-24T12:47:21.264 [DEBUG] [Thread-302361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:47:21.265 [DEBUG] [Thread-302361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:47:21.265 [DEBUG] [Thread-302361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:47:21.265 [DEBUG] [Thread-302361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:47:21.265 [DEBUG] [Thread-302361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:47:21.265 [DEBUG] [Thread-302361] [transport.py] [_log()] Compression: none
2025-12-24T12:47:21.265 [DEBUG] [Thread-302361] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:47:21.299 [DEBUG] [Thread-302361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:47:21.302 [DEBUG] [Thread-302361] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:47:21.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:47:21.304 [DEBUG] [Thread-302361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:47:21.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:47:21.307 [DEBUG] [Thread-302361] [transport.py] [_log()] userauth is OK
2025-12-24T12:47:21.307 [DEBUG] [Thread-302361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:47:21.307 [DEBUG] [Thread-302361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:47:21.307 [DEBUG] [Thread-302361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:47:21.307 [DEBUG] [Thread-302361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:47:21.326 [INFO] [Thread-302361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:47:21.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:47:22.090 [DEBUG] [Thread-302361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:47:22.090 [DEBUG] [Thread-302361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:47:22.091 [DEBUG] [Thread-302361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:47:22.131 [DEBUG] [Thread-302361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:47:22.131 [DEBUG] [Thread-302361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:47:22.133 [DEBUG] [Thread-302361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:47:22.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:47:22.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:47:22.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:47:22.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:47:22.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:47:22.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:47:22.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:47:22.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:47:22.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:47:22.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.449028 -999.00  +23.30   9.00     32   +5.70 1 2 1 1 1   888    0 18.13 23.27 ----- 9.0 9.0 207.6 12.1 30.9 -21.6 29.8 -23.6 29.9 -20.2 30.9 -21.0
2025-12-24T12:47:22.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:47:22.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:47:22.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.449028
2025-12-24T12:47:22.164 [DEBUG] [Thread-302361] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:47:22.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:47:22.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:47:22.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:47:22.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:47:22.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:47:22.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:47:06', tmtdew=19.21, humidity=28.24, cloud=0.0, wind=7.71, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:46:36.019', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:47:22.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:47:22.267 [DEBUG] [Thread-302364] [transport.py] [_log()] starting thread (client mode): 0xf81f2f80
2025-12-24T12:47:22.267 [DEBUG] [Thread-302364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:47:22.282 [DEBUG] [Thread-302364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:47:22.282 [INFO] [Thread-302364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] client lang: <none>
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] server lang: <none>
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] kex follows: False
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] Compression: none
2025-12-24T12:47:22.290 [DEBUG] [Thread-302364] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:47:22.350 [DEBUG] [Thread-302364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:47:22.350 [DEBUG] [Thread-302364] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:47:22.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:47:22.350 [DEBUG] [Thread-302364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:47:22.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:47:22.407 [DEBUG] [Thread-302364] [transport.py] [_log()] userauth is OK
2025-12-24T12:47:22.407 [DEBUG] [Thread-302364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:47:22.407 [DEBUG] [Thread-302364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:47:22.407 [DEBUG] [Thread-302364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:47:22.407 [DEBUG] [Thread-302364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:47:22.421 [INFO] [Thread-302364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:47:22.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:47:22.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:47:22.792 [DEBUG] [Thread-302366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:47:23.283 [DEBUG] [Thread-302364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:47:23.283 [DEBUG] [Thread-302364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:47:23.330 [DEBUG] [Thread-302364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:47:23.330 [DEBUG] [Thread-302364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:47:23.338 [DEBUG] [Thread-302364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:47:23.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:47:23.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:47:23.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:47:23.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:47:23.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:47:23.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:47:23.380 [DEBUG] [Thread-302364] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:47:37.954 [DEBUG] [Thread-302367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:47:53.097 [DEBUG] [Thread-302368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:47:53.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:47:53.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:47:53.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:47:54.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 47, 39), 19.65, 27.85, 0.0, 7.25, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:47:54.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:47:39
2025-12-24T12:47:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:47:54.697 [DEBUG] [Thread-302369] [transport.py] [_log()] starting thread (client mode): 0xf5770490
2025-12-24T12:47:54.698 [DEBUG] [Thread-302369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:47:54.712 [DEBUG] [Thread-302369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:47:54.712 [INFO] [Thread-302369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:47:54.717 [DEBUG] [Thread-302369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] client lang: <none>
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] server lang: <none>
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] kex follows: False
2025-12-24T12:47:54.718 [DEBUG] [Thread-302369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:47:54.719 [DEBUG] [Thread-302369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:47:54.719 [DEBUG] [Thread-302369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:47:54.719 [DEBUG] [Thread-302369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:47:54.719 [DEBUG] [Thread-302369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:47:54.719 [DEBUG] [Thread-302369] [transport.py] [_log()] Compression: none
2025-12-24T12:47:54.719 [DEBUG] [Thread-302369] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:47:54.756 [DEBUG] [Thread-302369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:47:54.761 [DEBUG] [Thread-302369] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:47:54.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:47:54.765 [DEBUG] [Thread-302369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:47:54.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:47:54.768 [DEBUG] [Thread-302369] [transport.py] [_log()] userauth is OK
2025-12-24T12:47:54.768 [DEBUG] [Thread-302369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:47:54.769 [DEBUG] [Thread-302369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:47:54.769 [DEBUG] [Thread-302369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:47:54.769 [DEBUG] [Thread-302369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:47:54.808 [INFO] [Thread-302369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:47:54.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:47:55.430 [DEBUG] [Thread-302369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:47:55.439 [DEBUG] [Thread-302369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:47:55.441 [DEBUG] [Thread-302369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:47:55.471 [DEBUG] [Thread-302369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:47:55.471 [DEBUG] [Thread-302369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:47:55.475 [DEBUG] [Thread-302369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:47:55.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:47:55.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:47:55.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:47:55.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:47:55.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:47:55.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:47:55.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:47:55.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:47:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:47:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.449375 -999.00  +23.50   7.62     32   +5.80 1 2 1 1 1   888    0 17.90 20.74 ----- 7.6 7.6 180.5 10.1 31.1 -20.6 29.9 -26.1 30.1 -19.7 31.1 -20.2
2025-12-24T12:47:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:47:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:47:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.449375
2025-12-24T12:47:55.509 [DEBUG] [Thread-302369] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:47:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:47:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:47:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:47:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:47:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:47:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:47:39', tmtdew=19.65, humidity=27.85, cloud=0.0, wind=7.25, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:47:06.000', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:47:55.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:47:55.621 [DEBUG] [Thread-302372] [transport.py] [_log()] starting thread (client mode): 0xf57ab070
2025-12-24T12:47:55.621 [DEBUG] [Thread-302372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:47:55.636 [DEBUG] [Thread-302372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:47:55.636 [INFO] [Thread-302372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:47:55.643 [DEBUG] [Thread-302372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:47:55.644 [DEBUG] [Thread-302372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:47:55.644 [DEBUG] [Thread-302372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:47:55.644 [DEBUG] [Thread-302372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:47:55.644 [DEBUG] [Thread-302372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:47:55.644 [DEBUG] [Thread-302372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:47:55.644 [DEBUG] [Thread-302372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:47:55.644 [DEBUG] [Thread-302372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:47:55.645 [DEBUG] [Thread-302372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:47:55.645 [DEBUG] [Thread-302372] [transport.py] [_log()] client lang: <none>
2025-12-24T12:47:55.645 [DEBUG] [Thread-302372] [transport.py] [_log()] server lang: <none>
2025-12-24T12:47:55.645 [DEBUG] [Thread-302372] [transport.py] [_log()] kex follows: False
2025-12-24T12:47:55.645 [DEBUG] [Thread-302372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:47:55.645 [DEBUG] [Thread-302372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:47:55.645 [DEBUG] [Thread-302372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:47:55.645 [DEBUG] [Thread-302372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:47:55.646 [DEBUG] [Thread-302372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:47:55.646 [DEBUG] [Thread-302372] [transport.py] [_log()] Compression: none
2025-12-24T12:47:55.646 [DEBUG] [Thread-302372] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:47:55.705 [DEBUG] [Thread-302372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:47:55.705 [DEBUG] [Thread-302372] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:47:55.706 [DEBUG] [Thread-302372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:47:55.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:47:55.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:47:55.763 [DEBUG] [Thread-302372] [transport.py] [_log()] userauth is OK
2025-12-24T12:47:55.763 [DEBUG] [Thread-302372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:47:55.763 [DEBUG] [Thread-302372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:47:55.763 [DEBUG] [Thread-302372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:47:55.763 [DEBUG] [Thread-302372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:47:55.777 [INFO] [Thread-302372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:47:55.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:47:55.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:47:56.620 [DEBUG] [Thread-302372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:47:56.620 [DEBUG] [Thread-302372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:47:56.668 [DEBUG] [Thread-302372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:47:56.668 [DEBUG] [Thread-302372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:47:56.679 [DEBUG] [Thread-302372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:47:56.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:47:56.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:47:56.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:47:56.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:47:56.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:47:56.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:47:56.719 [DEBUG] [Thread-302372] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:47:59.959 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:47:59.960 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:48:08.190 [DEBUG] [Thread-302374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:48:12.197 [DEBUG] [Thread-302375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:48:23.350 [DEBUG] [Thread-302376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:48:26.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:48:26.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:48:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:48:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 48, 12), 19.67, 27.81, 0.0, 4.41, 22.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:48:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:48:12
2025-12-24T12:48:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:48:28.437 [DEBUG] [Thread-302377] [transport.py] [_log()] starting thread (client mode): 0xf81f2350
2025-12-24T12:48:28.437 [DEBUG] [Thread-302377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:48:28.449 [DEBUG] [Thread-302377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:48:28.449 [INFO] [Thread-302377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:48:28.453 [DEBUG] [Thread-302377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:48:28.454 [DEBUG] [Thread-302377] [transport.py] [_log()] client lang: <none>
2025-12-24T12:48:28.454 [DEBUG] [Thread-302377] [transport.py] [_log()] server lang: <none>
2025-12-24T12:48:28.454 [DEBUG] [Thread-302377] [transport.py] [_log()] kex follows: False
2025-12-24T12:48:28.454 [DEBUG] [Thread-302377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:48:28.454 [DEBUG] [Thread-302377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:48:28.455 [DEBUG] [Thread-302377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:48:28.455 [DEBUG] [Thread-302377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:48:28.455 [DEBUG] [Thread-302377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:48:28.455 [DEBUG] [Thread-302377] [transport.py] [_log()] Compression: none
2025-12-24T12:48:28.455 [DEBUG] [Thread-302377] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:48:28.486 [DEBUG] [Thread-302377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:48:28.490 [DEBUG] [Thread-302377] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:48:28.492 [DEBUG] [Thread-302377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:48:28.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:48:28.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:48:28.498 [DEBUG] [Thread-302377] [transport.py] [_log()] userauth is OK
2025-12-24T12:48:28.498 [DEBUG] [Thread-302377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:48:28.498 [DEBUG] [Thread-302377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:48:28.499 [DEBUG] [Thread-302377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:48:28.499 [DEBUG] [Thread-302377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:48:28.528 [INFO] [Thread-302377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:48:28.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:48:29.192 [DEBUG] [Thread-302377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:48:29.192 [DEBUG] [Thread-302377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:48:29.193 [DEBUG] [Thread-302377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:48:29.232 [DEBUG] [Thread-302377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:48:29.232 [DEBUG] [Thread-302377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:48:29.236 [DEBUG] [Thread-302377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:48:29.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:48:29.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:48:29.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:48:29.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:48:29.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:48:29.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:48:29.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:48:29.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:48:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:48:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.449722 -999.00  +24.10   4.11     31   +5.90 1 2 1 1 1   888    0 17.68 19.90 ----- 4.1 4.1 146.6 12.5 31.1 -20.6 30.2 -22.0 30.3 -19.7 31.3 -20.4
2025-12-24T12:48:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:48:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:48:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.449722
2025-12-24T12:48:29.271 [DEBUG] [Thread-302377] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:48:29.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:48:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:48:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:48:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:48:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:48:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:48:12', tmtdew=19.67, humidity=27.81, cloud=0.0, wind=4.41, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:47:35.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:48:29.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:48:29.383 [DEBUG] [Thread-302380] [transport.py] [_log()] starting thread (client mode): 0xf81f31c0
2025-12-24T12:48:29.383 [DEBUG] [Thread-302380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:48:29.398 [DEBUG] [Thread-302380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:48:29.398 [INFO] [Thread-302380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:48:29.405 [DEBUG] [Thread-302380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:48:29.406 [DEBUG] [Thread-302380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:48:29.406 [DEBUG] [Thread-302380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:48:29.406 [DEBUG] [Thread-302380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:48:29.406 [DEBUG] [Thread-302380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:48:29.406 [DEBUG] [Thread-302380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:48:29.406 [DEBUG] [Thread-302380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:48:29.406 [DEBUG] [Thread-302380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:48:29.406 [DEBUG] [Thread-302380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:48:29.407 [DEBUG] [Thread-302380] [transport.py] [_log()] client lang: <none>
2025-12-24T12:48:29.407 [DEBUG] [Thread-302380] [transport.py] [_log()] server lang: <none>
2025-12-24T12:48:29.407 [DEBUG] [Thread-302380] [transport.py] [_log()] kex follows: False
2025-12-24T12:48:29.407 [DEBUG] [Thread-302380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:48:29.407 [DEBUG] [Thread-302380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:48:29.407 [DEBUG] [Thread-302380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:48:29.407 [DEBUG] [Thread-302380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:48:29.407 [DEBUG] [Thread-302380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:48:29.408 [DEBUG] [Thread-302380] [transport.py] [_log()] Compression: none
2025-12-24T12:48:29.408 [DEBUG] [Thread-302380] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:48:29.464 [DEBUG] [Thread-302380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:48:29.465 [DEBUG] [Thread-302380] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:48:29.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:48:29.467 [DEBUG] [Thread-302380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:48:29.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:48:29.524 [DEBUG] [Thread-302380] [transport.py] [_log()] userauth is OK
2025-12-24T12:48:29.524 [DEBUG] [Thread-302380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:48:29.524 [DEBUG] [Thread-302380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:48:29.524 [DEBUG] [Thread-302380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:48:29.524 [DEBUG] [Thread-302380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:48:29.542 [INFO] [Thread-302380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:48:29.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:48:29.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:48:30.387 [DEBUG] [Thread-302380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:48:30.387 [DEBUG] [Thread-302380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:48:30.426 [DEBUG] [Thread-302380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:48:30.427 [DEBUG] [Thread-302380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:48:30.437 [DEBUG] [Thread-302380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:48:30.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:48:30.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:48:30.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:48:30.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:48:30.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:48:30.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:48:30.471 [DEBUG] [Thread-302380] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:48:38.413 [DEBUG] [Thread-302382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:48:53.521 [DEBUG] [Thread-302383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:49:00.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:49:00.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:49:00.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:49:00.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:49:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:49:01.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 48, 46), 20.04, 26.96, 0.0, 7.15, 23.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:49:01.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:48:46
2025-12-24T12:49:02.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:49:02.306 [DEBUG] [Thread-302384] [transport.py] [_log()] starting thread (client mode): 0xf57713f0
2025-12-24T12:49:02.307 [DEBUG] [Thread-302384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:49:02.311 [DEBUG] [Thread-302384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:49:02.311 [INFO] [Thread-302384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:49:02.315 [DEBUG] [Thread-302384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:49:02.316 [DEBUG] [Thread-302384] [transport.py] [_log()] client lang: <none>
2025-12-24T12:49:02.316 [DEBUG] [Thread-302384] [transport.py] [_log()] server lang: <none>
2025-12-24T12:49:02.316 [DEBUG] [Thread-302384] [transport.py] [_log()] kex follows: False
2025-12-24T12:49:02.316 [DEBUG] [Thread-302384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:49:02.316 [DEBUG] [Thread-302384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:49:02.317 [DEBUG] [Thread-302384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:49:02.317 [DEBUG] [Thread-302384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:49:02.317 [DEBUG] [Thread-302384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:49:02.317 [DEBUG] [Thread-302384] [transport.py] [_log()] Compression: none
2025-12-24T12:49:02.317 [DEBUG] [Thread-302384] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:49:02.354 [DEBUG] [Thread-302384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:49:02.357 [DEBUG] [Thread-302384] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:49:02.359 [DEBUG] [Thread-302384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:49:02.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:49:02.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:49:02.364 [DEBUG] [Thread-302384] [transport.py] [_log()] userauth is OK
2025-12-24T12:49:02.364 [DEBUG] [Thread-302384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:49:02.365 [DEBUG] [Thread-302384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:49:02.365 [DEBUG] [Thread-302384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:49:02.365 [DEBUG] [Thread-302384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:49:02.392 [INFO] [Thread-302384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:49:02.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:49:03.035 [DEBUG] [Thread-302384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:49:03.035 [DEBUG] [Thread-302384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:49:03.035 [DEBUG] [Thread-302384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:49:03.075 [DEBUG] [Thread-302384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:49:03.075 [DEBUG] [Thread-302384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:49:03.078 [DEBUG] [Thread-302384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:49:03.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:49:03.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:49:03.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:49:03.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:49:03.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:49:03.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:49:03.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:49:03.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:49:03.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:49:03.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.450416 -999.00  +24.10  13.04     30   +5.50 1 2 1 1 1   888    0 18.34 23.78 ----- 13.0 13.0 165.2 15.4 31.4 -22.1 30.4 -23.2 30.5 -20.5 31.5 -21.2
2025-12-24T12:49:03.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:49:03.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:49:03.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.450416
2025-12-24T12:49:03.106 [DEBUG] [Thread-302384] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:49:03.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:49:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:49:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:49:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:49:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:49:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:48:46', tmtdew=20.04, humidity=26.96, cloud=0.0, wind=7.15, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:48:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:49:03.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:49:03.208 [DEBUG] [Thread-302387] [transport.py] [_log()] starting thread (client mode): 0xf574e920
2025-12-24T12:49:03.209 [DEBUG] [Thread-302387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:49:03.223 [DEBUG] [Thread-302387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:49:03.223 [INFO] [Thread-302387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] client lang: <none>
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] server lang: <none>
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] kex follows: False
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:49:03.231 [DEBUG] [Thread-302387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:49:03.232 [DEBUG] [Thread-302387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:49:03.232 [DEBUG] [Thread-302387] [transport.py] [_log()] Compression: none
2025-12-24T12:49:03.232 [DEBUG] [Thread-302387] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:49:03.288 [DEBUG] [Thread-302387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:49:03.288 [DEBUG] [Thread-302387] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:49:03.289 [DEBUG] [Thread-302387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:49:03.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:49:03.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:49:03.344 [DEBUG] [Thread-302387] [transport.py] [_log()] userauth is OK
2025-12-24T12:49:03.344 [DEBUG] [Thread-302387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:49:03.344 [DEBUG] [Thread-302387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:49:03.344 [DEBUG] [Thread-302387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:49:03.344 [DEBUG] [Thread-302387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:49:03.363 [INFO] [Thread-302387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:49:03.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:49:03.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:49:04.277 [DEBUG] [Thread-302387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:49:04.278 [DEBUG] [Thread-302387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:49:04.323 [DEBUG] [Thread-302387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:49:04.324 [DEBUG] [Thread-302387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:49:04.333 [DEBUG] [Thread-302387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:49:04.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:49:04.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:49:04.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:49:04.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:49:04.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:49:04.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:49:04.372 [DEBUG] [Thread-302387] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:49:08.597 [DEBUG] [Thread-302389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:49:12.532 [DEBUG] [Thread-302390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:49:23.717 [DEBUG] [Thread-302391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:49:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:49:34.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:49:34.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:49:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 49, 18), 20.18, 26.71, 0.0, 8.84, 23.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:49:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:49:18
2025-12-24T12:49:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:49:35.522 [DEBUG] [Thread-302392] [transport.py] [_log()] starting thread (client mode): 0xf5773040
2025-12-24T12:49:35.523 [DEBUG] [Thread-302392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:49:35.534 [DEBUG] [Thread-302392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:49:35.534 [INFO] [Thread-302392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] client lang: <none>
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] server lang: <none>
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] kex follows: False
2025-12-24T12:49:35.539 [DEBUG] [Thread-302392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:49:35.540 [DEBUG] [Thread-302392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:49:35.540 [DEBUG] [Thread-302392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:49:35.540 [DEBUG] [Thread-302392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:49:35.540 [DEBUG] [Thread-302392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:49:35.540 [DEBUG] [Thread-302392] [transport.py] [_log()] Compression: none
2025-12-24T12:49:35.540 [DEBUG] [Thread-302392] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:49:35.572 [DEBUG] [Thread-302392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:49:35.575 [DEBUG] [Thread-302392] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:49:35.576 [DEBUG] [Thread-302392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:49:35.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:49:35.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:49:35.579 [DEBUG] [Thread-302392] [transport.py] [_log()] userauth is OK
2025-12-24T12:49:35.579 [DEBUG] [Thread-302392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:49:35.579 [DEBUG] [Thread-302392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:49:35.579 [DEBUG] [Thread-302392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:49:35.579 [DEBUG] [Thread-302392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:49:35.609 [INFO] [Thread-302392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:49:35.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:49:36.256 [DEBUG] [Thread-302392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:49:36.256 [DEBUG] [Thread-302392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:49:36.257 [DEBUG] [Thread-302392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:49:36.297 [DEBUG] [Thread-302392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:49:36.297 [DEBUG] [Thread-302392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:49:36.301 [DEBUG] [Thread-302392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:49:36.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:49:36.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:49:36.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:49:36.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:49:36.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:49:36.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:49:36.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:49:36.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:49:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:49:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.450764 -999.00  +24.00   7.44     29   +5.30 1 2 1 1 1   888    0 18.16 27.89 ----- 7.4 7.4 180.6 10.8 31.5 -21.7 30.4 -23.2 30.6 -21.0 31.6 -21.8
2025-12-24T12:49:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:49:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:49:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.450764
2025-12-24T12:49:36.341 [DEBUG] [Thread-302392] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:49:36.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:49:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:49:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:49:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:49:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:49:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:49:18', tmtdew=20.18, humidity=26.71, cloud=0.0, wind=8.84, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:49:06.010', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:49:36.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:49:36.444 [DEBUG] [Thread-302395] [transport.py] [_log()] starting thread (client mode): 0xf5771840
2025-12-24T12:49:36.444 [DEBUG] [Thread-302395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:49:36.459 [DEBUG] [Thread-302395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:49:36.459 [INFO] [Thread-302395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] client lang: <none>
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] server lang: <none>
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] kex follows: False
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:49:36.467 [DEBUG] [Thread-302395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:49:36.468 [DEBUG] [Thread-302395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:49:36.468 [DEBUG] [Thread-302395] [transport.py] [_log()] Compression: none
2025-12-24T12:49:36.468 [DEBUG] [Thread-302395] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:49:36.524 [DEBUG] [Thread-302395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:49:36.524 [DEBUG] [Thread-302395] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:49:36.525 [DEBUG] [Thread-302395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:49:36.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:49:36.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:49:36.580 [DEBUG] [Thread-302395] [transport.py] [_log()] userauth is OK
2025-12-24T12:49:36.580 [DEBUG] [Thread-302395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:49:36.580 [DEBUG] [Thread-302395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:49:36.580 [DEBUG] [Thread-302395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:49:36.580 [DEBUG] [Thread-302395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:49:36.597 [INFO] [Thread-302395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:49:36.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:49:36.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:49:37.444 [DEBUG] [Thread-302395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:49:37.444 [DEBUG] [Thread-302395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:49:37.492 [DEBUG] [Thread-302395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:49:37.492 [DEBUG] [Thread-302395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:49:37.501 [DEBUG] [Thread-302395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:49:37.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:49:37.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')
2025-12-24T12:49: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') -> 00000000
2025-12-24T12:49:37.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:49:37.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:49:37.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:49:37.540 [DEBUG] [Thread-302395] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:49:38.805 [DEBUG] [Thread-302397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:49:53.947 [DEBUG] [Thread-302398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:50:00.247 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:50:00.248 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:50:07.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:50:07.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:50:07.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:50:08.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 49, 51), 20.63, 25.91, 0.0, 14.13, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:50:08.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:49:51
2025-12-24T12:50:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:50:09.019 [DEBUG] [Thread-302399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:50:09.064 [DEBUG] [Thread-302400] [transport.py] [_log()] starting thread (client mode): 0xf81f39d0
2025-12-24T12:50:09.065 [DEBUG] [Thread-302400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:50:09.080 [DEBUG] [Thread-302400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:50:09.080 [INFO] [Thread-302400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:50:09.087 [DEBUG] [Thread-302400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:50:09.087 [DEBUG] [Thread-302400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:50:09.087 [DEBUG] [Thread-302400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:50:09.087 [DEBUG] [Thread-302400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] client lang: <none>
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] server lang: <none>
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] kex follows: False
2025-12-24T12:50:09.088 [DEBUG] [Thread-302400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:50:09.089 [DEBUG] [Thread-302400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:50:09.089 [DEBUG] [Thread-302400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:50:09.090 [DEBUG] [Thread-302400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:50:09.090 [DEBUG] [Thread-302400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:50:09.090 [DEBUG] [Thread-302400] [transport.py] [_log()] Compression: none
2025-12-24T12:50:09.090 [DEBUG] [Thread-302400] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:50:09.127 [DEBUG] [Thread-302400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:50:09.132 [DEBUG] [Thread-302400] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:50:09.134 [DEBUG] [Thread-302400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:50:09.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:50:09.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:50:09.139 [DEBUG] [Thread-302400] [transport.py] [_log()] userauth is OK
2025-12-24T12:50:09.139 [DEBUG] [Thread-302400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:50:09.140 [DEBUG] [Thread-302400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:50:09.140 [DEBUG] [Thread-302400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:50:09.140 [DEBUG] [Thread-302400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:50:09.168 [INFO] [Thread-302400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:50:09.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:50:10.194 [DEBUG] [Thread-302400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:50:10.194 [DEBUG] [Thread-302400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:50:10.195 [DEBUG] [Thread-302400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:50:10.235 [DEBUG] [Thread-302400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:50:10.236 [DEBUG] [Thread-302400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:50:10.240 [DEBUG] [Thread-302400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:50:10.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:50:10.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:50:10.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:50:10.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:50:10.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:50:10.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:50:10.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:50:10.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:50:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:50:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.451111 -999.00  +24.00   7.30     30   +5.40 1 2 1 1 1   888    0 18.32 29.24 ----- 7.3 7.3 122.6 16.9 31.6 -21.7 30.6 -23.5 30.7 -21.1 31.8 -20.0
2025-12-24T12:50:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:50:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:50:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.451111
2025-12-24T12:50:10.284 [DEBUG] [Thread-302400] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:50:10.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:50:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:50:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:50:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:50:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:50:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:49:51', tmtdew=20.63, humidity=25.91, cloud=0.0, wind=14.13, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:49:35.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:50:10.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:50:10.409 [DEBUG] [Thread-302403] [transport.py] [_log()] starting thread (client mode): 0xf81f27d0
2025-12-24T12:50:10.409 [DEBUG] [Thread-302403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:50:10.423 [DEBUG] [Thread-302403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:50:10.424 [INFO] [Thread-302403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:50:10.431 [DEBUG] [Thread-302403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:50:10.431 [DEBUG] [Thread-302403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:50:10.431 [DEBUG] [Thread-302403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] client lang: <none>
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] server lang: <none>
2025-12-24T12:50:10.432 [DEBUG] [Thread-302403] [transport.py] [_log()] kex follows: False
2025-12-24T12:50:10.433 [DEBUG] [Thread-302403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:50:10.433 [DEBUG] [Thread-302403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:50:10.433 [DEBUG] [Thread-302403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:50:10.433 [DEBUG] [Thread-302403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:50:10.433 [DEBUG] [Thread-302403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:50:10.433 [DEBUG] [Thread-302403] [transport.py] [_log()] Compression: none
2025-12-24T12:50:10.433 [DEBUG] [Thread-302403] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:50:10.489 [DEBUG] [Thread-302403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:50:10.490 [DEBUG] [Thread-302403] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:50:10.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:50:10.491 [DEBUG] [Thread-302403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:50:10.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:50:10.544 [DEBUG] [Thread-302403] [transport.py] [_log()] userauth is OK
2025-12-24T12:50:10.545 [DEBUG] [Thread-302403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:50:10.545 [DEBUG] [Thread-302403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:50:10.545 [DEBUG] [Thread-302403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:50:10.545 [DEBUG] [Thread-302403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:50:10.566 [INFO] [Thread-302403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:50:10.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:50:10.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:50:11.407 [DEBUG] [Thread-302403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:50:11.407 [DEBUG] [Thread-302403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:50:11.455 [DEBUG] [Thread-302403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:50:11.455 [DEBUG] [Thread-302403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:50:11.463 [DEBUG] [Thread-302403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:50:11.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:50:11.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')
2025-12-24T12:50:11.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') -> 00000000
2025-12-24T12:50:11.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:50:11.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:50:11.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:50:11.496 [DEBUG] [Thread-302403] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:50:12.815 [DEBUG] [Thread-302405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:50:24.064 [DEBUG] [Thread-302406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:50:39.216 [DEBUG] [Thread-302407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:50:41.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:50:41.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:50:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:50:42.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 50, 25), 20.73, 25.76, 0.0, 12.1, 23.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:50:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:50:25
2025-12-24T12:50:42.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:50:42.845 [DEBUG] [Thread-302408] [transport.py] [_log()] starting thread (client mode): 0xf574f850
2025-12-24T12:50:42.846 [DEBUG] [Thread-302408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:50:42.858 [DEBUG] [Thread-302408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:50:42.859 [INFO] [Thread-302408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] client lang: <none>
2025-12-24T12:50:42.866 [DEBUG] [Thread-302408] [transport.py] [_log()] server lang: <none>
2025-12-24T12:50:42.867 [DEBUG] [Thread-302408] [transport.py] [_log()] kex follows: False
2025-12-24T12:50:42.867 [DEBUG] [Thread-302408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:50:42.867 [DEBUG] [Thread-302408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:50:42.867 [DEBUG] [Thread-302408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:50:42.868 [DEBUG] [Thread-302408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:50:42.868 [DEBUG] [Thread-302408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:50:42.868 [DEBUG] [Thread-302408] [transport.py] [_log()] Compression: none
2025-12-24T12:50:42.868 [DEBUG] [Thread-302408] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:50:42.902 [DEBUG] [Thread-302408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:50:42.907 [DEBUG] [Thread-302408] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:50:42.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:50:42.910 [DEBUG] [Thread-302408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:50:42.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:50:42.915 [DEBUG] [Thread-302408] [transport.py] [_log()] userauth is OK
2025-12-24T12:50:42.915 [DEBUG] [Thread-302408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:50:42.915 [DEBUG] [Thread-302408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:50:42.916 [DEBUG] [Thread-302408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:50:42.916 [DEBUG] [Thread-302408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:50:42.954 [INFO] [Thread-302408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:50:42.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:50:43.595 [DEBUG] [Thread-302408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:50:43.595 [DEBUG] [Thread-302408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:50:43.598 [DEBUG] [Thread-302408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:50:43.637 [DEBUG] [Thread-302408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:50:43.637 [DEBUG] [Thread-302408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:50:43.641 [DEBUG] [Thread-302408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:50:43.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:50:43.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:50:43.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:50:43.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:50:43.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:50:43.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:50:43.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:50:43.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:50:43.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:50:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.451458 -999.00  +24.40  13.02     30   +5.80 1 2 1 1 1   888    0 18.49 33.38 ----- 13.0 13.0 148.4 22.6 31.6 -20.8 30.8 -22.4 30.9 -20.2 32.0 -21.1
2025-12-24T12:50:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:50:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:50:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.451458
2025-12-24T12:50:43.674 [DEBUG] [Thread-302408] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:50:43.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:50:43.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:50:43.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:50:43.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:50:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:50:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:50:25', tmtdew=20.73, humidity=25.76, cloud=0.0, wind=12.1, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:50:05.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:50:43.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:50:43.784 [DEBUG] [Thread-302411] [transport.py] [_log()] starting thread (client mode): 0xf57aa650
2025-12-24T12:50:43.784 [DEBUG] [Thread-302411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:50:43.799 [DEBUG] [Thread-302411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:50:43.799 [INFO] [Thread-302411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:50:43.807 [DEBUG] [Thread-302411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:50:43.807 [DEBUG] [Thread-302411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] client lang: <none>
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] server lang: <none>
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] kex follows: False
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] Compression: none
2025-12-24T12:50:43.808 [DEBUG] [Thread-302411] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:50:43.865 [DEBUG] [Thread-302411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:50:43.866 [DEBUG] [Thread-302411] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:50:43.867 [DEBUG] [Thread-302411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:50:43.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:50:43.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:50:43.921 [DEBUG] [Thread-302411] [transport.py] [_log()] userauth is OK
2025-12-24T12:50:43.921 [DEBUG] [Thread-302411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:50:43.922 [DEBUG] [Thread-302411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:50:43.922 [DEBUG] [Thread-302411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:50:43.922 [DEBUG] [Thread-302411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:50:43.940 [INFO] [Thread-302411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:50:43.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:50:43.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:50:44.779 [DEBUG] [Thread-302411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:50:44.779 [DEBUG] [Thread-302411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:50:44.817 [DEBUG] [Thread-302411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:50:44.817 [DEBUG] [Thread-302411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:50:44.826 [DEBUG] [Thread-302411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:50:44.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:50:44.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:50:44.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:50:44.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:50:44.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:50:44.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:50:44.862 [DEBUG] [Thread-302411] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:50:54.270 [DEBUG] [Thread-302413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:51:00.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:51:00.418 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:51:09.401 [DEBUG] [Thread-302414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:51:13.152 [DEBUG] [Thread-302415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:51:14.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:51:14.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:51:14.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
2025-12-24T12:51:16.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 50, 58), 20.79, 25.88, 0.0, 19.22, 23.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:51:16.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:50:58
2025-12-24T12:51:16.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:51:16.615 [DEBUG] [Thread-302416] [transport.py] [_log()] starting thread (client mode): 0xf81f0dc0
2025-12-24T12:51:16.616 [DEBUG] [Thread-302416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:51:16.627 [DEBUG] [Thread-302416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:51:16.628 [INFO] [Thread-302416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:51:16.634 [DEBUG] [Thread-302416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:51:16.634 [DEBUG] [Thread-302416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:51:16.634 [DEBUG] [Thread-302416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:51:16.634 [DEBUG] [Thread-302416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:51:16.634 [DEBUG] [Thread-302416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:51:16.634 [DEBUG] [Thread-302416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:51:16.634 [DEBUG] [Thread-302416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:51:16.634 [DEBUG] [Thread-302416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:51:16.635 [DEBUG] [Thread-302416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:51:16.635 [DEBUG] [Thread-302416] [transport.py] [_log()] client lang: <none>
2025-12-24T12:51:16.635 [DEBUG] [Thread-302416] [transport.py] [_log()] server lang: <none>
2025-12-24T12:51:16.635 [DEBUG] [Thread-302416] [transport.py] [_log()] kex follows: False
2025-12-24T12:51:16.635 [DEBUG] [Thread-302416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:51:16.636 [DEBUG] [Thread-302416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:51:16.636 [DEBUG] [Thread-302416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:51:16.636 [DEBUG] [Thread-302416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:51:16.636 [DEBUG] [Thread-302416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:51:16.637 [DEBUG] [Thread-302416] [transport.py] [_log()] Compression: none
2025-12-24T12:51:16.637 [DEBUG] [Thread-302416] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:51:16.678 [DEBUG] [Thread-302416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:51:16.682 [DEBUG] [Thread-302416] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:51:16.685 [DEBUG] [Thread-302416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:51:16.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:51:16.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:51:16.692 [DEBUG] [Thread-302416] [transport.py] [_log()] userauth is OK
2025-12-24T12:51:16.692 [DEBUG] [Thread-302416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:51:16.692 [DEBUG] [Thread-302416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:51:16.693 [DEBUG] [Thread-302416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:51:16.693 [DEBUG] [Thread-302416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:51:16.721 [INFO] [Thread-302416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:51:16.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:51:17.370 [DEBUG] [Thread-302416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:51:17.371 [DEBUG] [Thread-302416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:51:17.372 [DEBUG] [Thread-302416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:51:17.411 [DEBUG] [Thread-302416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:51:17.411 [DEBUG] [Thread-302416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:51:17.414 [DEBUG] [Thread-302416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:51:17.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:51:17.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:51:17.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:51:17.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:51:17.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:51:17.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:51:17.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:51:17.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:51:17.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:51:17.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.451805 -999.00  +24.40  21.59     29   +5.50 1 1 1 1 1   888    0 18.54 36.54 ----- 21.6 21.6 168.4 24.8 31.8 -21.9 30.7 -24.5 31.0 -21.6 32.0 -22.2
2025-12-24T12:51:17.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:51:17.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:51:17.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.451805
2025-12-24T12:51:17.450 [DEBUG] [Thread-302416] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:51:17.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:51:17.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:51:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:51:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:51:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:51:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:50:58', tmtdew=20.79, humidity=25.88, cloud=0.0, wind=19.22, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:50:35.952', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:51:17.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:51:17.573 [DEBUG] [Thread-302419] [transport.py] [_log()] starting thread (client mode): 0xf574f760
2025-12-24T12:51:17.573 [DEBUG] [Thread-302419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:51:17.587 [DEBUG] [Thread-302419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:51:17.587 [INFO] [Thread-302419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:51:17.594 [DEBUG] [Thread-302419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] client lang: <none>
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] server lang: <none>
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] kex follows: False
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] Compression: none
2025-12-24T12:51:17.595 [DEBUG] [Thread-302419] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:51:17.658 [DEBUG] [Thread-302419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:51:17.658 [DEBUG] [Thread-302419] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:51:17.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:51:17.659 [DEBUG] [Thread-302419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:51:17.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:51:17.718 [DEBUG] [Thread-302419] [transport.py] [_log()] userauth is OK
2025-12-24T12:51:17.719 [DEBUG] [Thread-302419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:51:17.719 [DEBUG] [Thread-302419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:51:17.719 [DEBUG] [Thread-302419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:51:17.719 [DEBUG] [Thread-302419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:51:17.738 [INFO] [Thread-302419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:51:17.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:51:17.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:51:18.612 [DEBUG] [Thread-302419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:51:18.612 [DEBUG] [Thread-302419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:51:18.651 [DEBUG] [Thread-302419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:51:18.651 [DEBUG] [Thread-302419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:51:18.659 [DEBUG] [Thread-302419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:51:18.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:51:18.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:51:18.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:51:18.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:51:18.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:51:18.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:51:18.692 [DEBUG] [Thread-302419] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:51:24.458 [DEBUG] [Thread-302421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:51:39.722 [DEBUG] [Thread-302422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:51:48.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:51:48.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:51:48.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
2025-12-24T12:51:49.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 51, 31), 20.74, 25.94, 0.0, 18.93, 23.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:51:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:51:31
2025-12-24T12:51:50.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:51:50.343 [DEBUG] [Thread-302423] [transport.py] [_log()] starting thread (client mode): 0xf574d960
2025-12-24T12:51:50.344 [DEBUG] [Thread-302423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:51:50.345 [DEBUG] [Thread-302423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:51:50.345 [INFO] [Thread-302423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] client lang: <none>
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] server lang: <none>
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] kex follows: False
2025-12-24T12:51:50.349 [DEBUG] [Thread-302423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:51:50.350 [DEBUG] [Thread-302423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:51:50.350 [DEBUG] [Thread-302423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:51:50.350 [DEBUG] [Thread-302423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:51:50.350 [DEBUG] [Thread-302423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:51:50.350 [DEBUG] [Thread-302423] [transport.py] [_log()] Compression: none
2025-12-24T12:51:50.350 [DEBUG] [Thread-302423] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:51:50.374 [DEBUG] [Thread-302423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:51:50.378 [DEBUG] [Thread-302423] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:51:50.380 [DEBUG] [Thread-302423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:51:50.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:51:50.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:51:50.417 [DEBUG] [Thread-302423] [transport.py] [_log()] userauth is OK
2025-12-24T12:51:50.417 [DEBUG] [Thread-302423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:51:50.418 [DEBUG] [Thread-302423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:51:50.418 [DEBUG] [Thread-302423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:51:50.418 [DEBUG] [Thread-302423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:51:50.456 [INFO] [Thread-302423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:51:50.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:51:51.051 [DEBUG] [Thread-302423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:51:51.052 [DEBUG] [Thread-302423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:51:51.054 [DEBUG] [Thread-302423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:51:51.093 [DEBUG] [Thread-302423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:51:51.093 [DEBUG] [Thread-302423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:51:51.096 [DEBUG] [Thread-302423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:51:51.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:51:51.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:51:51.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:51:51.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:51:51.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:51:51.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:51:51.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:51:51.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:51:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:51:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.452153 -999.00  +24.00  11.04     30   +5.50 1 1 1 1 1   888    0 18.63 38.77 ----- 11.0 11.0 176.8 20.2 31.8 -22.4 30.5 -27.5 31.0 -21.7 32.0 -21.0
2025-12-24T12:51:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:51:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:51:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.452153
2025-12-24T12:51:51.132 [DEBUG] [Thread-302423] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:51:51.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:51:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:51:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:51:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:51:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:51:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:51:31', tmtdew=20.74, humidity=25.94, cloud=0.0, wind=18.93, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:51:06.019', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:51:51.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:51:51.249 [DEBUG] [Thread-302426] [transport.py] [_log()] starting thread (client mode): 0xf574da80
2025-12-24T12:51:51.250 [DEBUG] [Thread-302426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:51:51.263 [DEBUG] [Thread-302426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:51:51.263 [INFO] [Thread-302426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:51:51.271 [DEBUG] [Thread-302426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:51:51.271 [DEBUG] [Thread-302426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:51:51.271 [DEBUG] [Thread-302426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:51:51.271 [DEBUG] [Thread-302426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:51:51.271 [DEBUG] [Thread-302426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] client lang: <none>
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] server lang: <none>
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] kex follows: False
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] Compression: none
2025-12-24T12:51:51.272 [DEBUG] [Thread-302426] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:51:51.334 [DEBUG] [Thread-302426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:51:51.334 [DEBUG] [Thread-302426] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:51:51.335 [DEBUG] [Thread-302426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:51:51.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:51:51.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:51:51.390 [DEBUG] [Thread-302426] [transport.py] [_log()] userauth is OK
2025-12-24T12:51:51.391 [DEBUG] [Thread-302426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:51:51.391 [DEBUG] [Thread-302426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:51:51.391 [DEBUG] [Thread-302426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:51:51.391 [DEBUG] [Thread-302426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:51:51.410 [INFO] [Thread-302426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:51:51.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:51:51.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:51:52.250 [DEBUG] [Thread-302426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:51:52.251 [DEBUG] [Thread-302426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:51:52.290 [DEBUG] [Thread-302426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:51:52.290 [DEBUG] [Thread-302426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:51:52.298 [DEBUG] [Thread-302426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:51:52.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:51:52.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:51:52.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:51:52.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:51:52.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:51:52.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:51:52.331 [DEBUG] [Thread-302426] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:51:54.849 [DEBUG] [Thread-302428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:52:00.560 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:52:00.562 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:52:10.035 [DEBUG] [Thread-302429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:52:13.497 [DEBUG] [Thread-302430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:52:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:52:22.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:52:22.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
2025-12-24T12:52:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 52, 4), 20.59, 26.16, 0.0, 15.34, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:52:23.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:52:04
2025-12-24T12:52:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:52:23.618 [DEBUG] [Thread-302431] [transport.py] [_log()] starting thread (client mode): 0xf81c0730
2025-12-24T12:52:23.619 [DEBUG] [Thread-302431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:52:23.624 [DEBUG] [Thread-302431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:52:23.624 [INFO] [Thread-302431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:52:23.629 [DEBUG] [Thread-302431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] client lang: <none>
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] server lang: <none>
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] kex follows: False
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:52:23.630 [DEBUG] [Thread-302431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:52:23.631 [DEBUG] [Thread-302431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:52:23.631 [DEBUG] [Thread-302431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:52:23.631 [DEBUG] [Thread-302431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:52:23.631 [DEBUG] [Thread-302431] [transport.py] [_log()] Compression: none
2025-12-24T12:52:23.631 [DEBUG] [Thread-302431] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:52:23.667 [DEBUG] [Thread-302431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:52:23.672 [DEBUG] [Thread-302431] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:52:23.674 [DEBUG] [Thread-302431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:52:23.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:52:23.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:52:23.679 [DEBUG] [Thread-302431] [transport.py] [_log()] userauth is OK
2025-12-24T12:52:23.679 [DEBUG] [Thread-302431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:52:23.679 [DEBUG] [Thread-302431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:52:23.679 [DEBUG] [Thread-302431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:52:23.679 [DEBUG] [Thread-302431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:52:23.709 [INFO] [Thread-302431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:52:23.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:52:24.471 [DEBUG] [Thread-302431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:52:24.471 [DEBUG] [Thread-302431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:52:24.472 [DEBUG] [Thread-302431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:52:24.513 [DEBUG] [Thread-302431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:52:24.513 [DEBUG] [Thread-302431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:52:24.515 [DEBUG] [Thread-302431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:52:24.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:52:24.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:52:24.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:52:24.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:52:24.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:52:24.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:52:24.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:52:24.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:52:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:52:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.452500 -999.00  +24.00   4.57     30   +5.60 1 2 1 1 1   888    0 18.60 39.20 ----- 4.6 4.6 144.1 16.5 31.8 -21.4 30.7 -22.4 31.1 -21.2 32.3 -19.6
2025-12-24T12:52:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:52:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:52:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.452500
2025-12-24T12:52:24.548 [DEBUG] [Thread-302431] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:52:24.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:52:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:52:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:52:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:52:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:52:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:52:04', tmtdew=20.59, humidity=26.16, cloud=0.0, wind=15.34, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:51:36.000', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:52:24.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:52:24.658 [DEBUG] [Thread-302434] [transport.py] [_log()] starting thread (client mode): 0xf5773ca0
2025-12-24T12:52:24.659 [DEBUG] [Thread-302434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:52:24.673 [DEBUG] [Thread-302434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:52:24.673 [INFO] [Thread-302434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] client lang: <none>
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] server lang: <none>
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] kex follows: False
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] Compression: none
2025-12-24T12:52:24.681 [DEBUG] [Thread-302434] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:52:24.740 [DEBUG] [Thread-302434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:52:24.740 [DEBUG] [Thread-302434] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:52:24.740 [DEBUG] [Thread-302434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:52:24.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:52:24.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:52:24.802 [DEBUG] [Thread-302434] [transport.py] [_log()] userauth is OK
2025-12-24T12:52:24.802 [DEBUG] [Thread-302434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:52:24.802 [DEBUG] [Thread-302434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:52:24.802 [DEBUG] [Thread-302434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:52:24.802 [DEBUG] [Thread-302434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:52:24.816 [INFO] [Thread-302434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:52:24.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:52:24.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:52:25.106 [DEBUG] [Thread-302436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:52:25.667 [DEBUG] [Thread-302434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:52:25.667 [DEBUG] [Thread-302434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:52:25.715 [DEBUG] [Thread-302434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:52:25.716 [DEBUG] [Thread-302434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:52:25.724 [DEBUG] [Thread-302434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:52:25.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:52:25.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:52:25.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:52:25.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:52:25.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:52:25.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:52:25.756 [DEBUG] [Thread-302434] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:52:40.305 [DEBUG] [Thread-302437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:52:55.371 [DEBUG] [Thread-302438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:52:55.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:52:55.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:52:55.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
2025-12-24T12:52:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 52, 37), 19.92, 27.11, 0.0, 13.27, 22.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:52:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:52:37
2025-12-24T12:52:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:52:57.372 [DEBUG] [Thread-302439] [transport.py] [_log()] starting thread (client mode): 0xf5740bb0
2025-12-24T12:52:57.373 [DEBUG] [Thread-302439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:52:57.388 [DEBUG] [Thread-302439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:52:57.388 [INFO] [Thread-302439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:52:57.392 [DEBUG] [Thread-302439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:52:57.392 [DEBUG] [Thread-302439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:52:57.392 [DEBUG] [Thread-302439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:52:57.392 [DEBUG] [Thread-302439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:52:57.392 [DEBUG] [Thread-302439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:52:57.392 [DEBUG] [Thread-302439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] client lang: <none>
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] server lang: <none>
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] kex follows: False
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:52:57.393 [DEBUG] [Thread-302439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:52:57.394 [DEBUG] [Thread-302439] [transport.py] [_log()] Compression: none
2025-12-24T12:52:57.394 [DEBUG] [Thread-302439] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:52:57.429 [DEBUG] [Thread-302439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:52:57.434 [DEBUG] [Thread-302439] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:52:57.436 [DEBUG] [Thread-302439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:52:57.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:52:57.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:52:57.442 [DEBUG] [Thread-302439] [transport.py] [_log()] userauth is OK
2025-12-24T12:52:57.442 [DEBUG] [Thread-302439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:52:57.443 [DEBUG] [Thread-302439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:52:57.443 [DEBUG] [Thread-302439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:52:57.443 [DEBUG] [Thread-302439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:52:57.480 [INFO] [Thread-302439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:52:57.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:52:58.100 [DEBUG] [Thread-302439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:52:58.100 [DEBUG] [Thread-302439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:52:58.101 [DEBUG] [Thread-302439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:52:58.142 [DEBUG] [Thread-302439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:52:58.142 [DEBUG] [Thread-302439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:52:58.144 [DEBUG] [Thread-302439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:52:58.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:52:58.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:52:58.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:52:58.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:52:58.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:52:58.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:52:58.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:52:58.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:52:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:52:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.452847 -999.00  +24.20   5.26     30   +5.80 1 2 1 1 1   888    0 18.69 39.33 ----- 5.3 5.3 145.2 8.0 32.0 -21.4 30.9 -23.8 31.4 -20.1 32.4 -20.0
2025-12-24T12:52:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:52:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:52:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.452847
2025-12-24T12:52:58.177 [DEBUG] [Thread-302439] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:52:58.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:52:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:52:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:52:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:52:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:52:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:52:37', tmtdew=19.92, humidity=27.11, cloud=0.0, wind=13.27, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:52:05.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:52:58.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:52:58.273 [DEBUG] [Thread-302442] [transport.py] [_log()] starting thread (client mode): 0xf5743fa0
2025-12-24T12:52:58.273 [DEBUG] [Thread-302442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:52:58.287 [DEBUG] [Thread-302442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:52:58.287 [INFO] [Thread-302442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:52:58.295 [DEBUG] [Thread-302442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:52:58.295 [DEBUG] [Thread-302442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:52:58.295 [DEBUG] [Thread-302442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:52:58.295 [DEBUG] [Thread-302442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:52:58.295 [DEBUG] [Thread-302442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] client lang: <none>
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] server lang: <none>
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] kex follows: False
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:52:58.296 [DEBUG] [Thread-302442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:52:58.297 [DEBUG] [Thread-302442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:52:58.297 [DEBUG] [Thread-302442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:52:58.297 [DEBUG] [Thread-302442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:52:58.297 [DEBUG] [Thread-302442] [transport.py] [_log()] Compression: none
2025-12-24T12:52:58.297 [DEBUG] [Thread-302442] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:52:58.357 [DEBUG] [Thread-302442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:52:58.357 [DEBUG] [Thread-302442] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:52:58.358 [DEBUG] [Thread-302442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:52:58.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:52:58.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:52:58.413 [DEBUG] [Thread-302442] [transport.py] [_log()] userauth is OK
2025-12-24T12:52:58.414 [DEBUG] [Thread-302442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:52:58.414 [DEBUG] [Thread-302442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:52:58.414 [DEBUG] [Thread-302442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:52:58.414 [DEBUG] [Thread-302442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:52:58.432 [INFO] [Thread-302442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:52:58.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:52:58.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:52:59.270 [DEBUG] [Thread-302442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:52:59.270 [DEBUG] [Thread-302442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:52:59.317 [DEBUG] [Thread-302442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:52:59.317 [DEBUG] [Thread-302442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:52:59.325 [DEBUG] [Thread-302442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:52:59.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:52:59.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:52:59.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:52:59.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:52:59.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:52:59.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:52:59.358 [DEBUG] [Thread-302442] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:53:00.701 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:53:00.702 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:53:10.429 [DEBUG] [Thread-302444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:53:13.785 [DEBUG] [Thread-302445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:53:25.575 [DEBUG] [Thread-302446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:53:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:53:29.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:53:29.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:53:30.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 53, 10), 19.77, 27.42, 0.0, 12.55, 22.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:53:30.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:53:10
2025-12-24T12:53:30.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:53:31.017 [DEBUG] [Thread-302447] [transport.py] [_log()] starting thread (client mode): 0xf81c2680
2025-12-24T12:53:31.018 [DEBUG] [Thread-302447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:53:31.033 [DEBUG] [Thread-302447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:53:31.033 [INFO] [Thread-302447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:53:31.038 [DEBUG] [Thread-302447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:53:31.038 [DEBUG] [Thread-302447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:53:31.038 [DEBUG] [Thread-302447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:53:31.038 [DEBUG] [Thread-302447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:53:31.038 [DEBUG] [Thread-302447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:53:31.038 [DEBUG] [Thread-302447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:53:31.039 [DEBUG] [Thread-302447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:53:31.039 [DEBUG] [Thread-302447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:53:31.039 [DEBUG] [Thread-302447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:53:31.039 [DEBUG] [Thread-302447] [transport.py] [_log()] client lang: <none>
2025-12-24T12:53:31.039 [DEBUG] [Thread-302447] [transport.py] [_log()] server lang: <none>
2025-12-24T12:53:31.039 [DEBUG] [Thread-302447] [transport.py] [_log()] kex follows: False
2025-12-24T12:53:31.039 [DEBUG] [Thread-302447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:53:31.040 [DEBUG] [Thread-302447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:53:31.040 [DEBUG] [Thread-302447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:53:31.040 [DEBUG] [Thread-302447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:53:31.040 [DEBUG] [Thread-302447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:53:31.040 [DEBUG] [Thread-302447] [transport.py] [_log()] Compression: none
2025-12-24T12:53:31.040 [DEBUG] [Thread-302447] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:53:31.078 [DEBUG] [Thread-302447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:53:31.083 [DEBUG] [Thread-302447] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:53:31.085 [DEBUG] [Thread-302447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:53:31.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:53:31.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:53:31.094 [DEBUG] [Thread-302447] [transport.py] [_log()] userauth is OK
2025-12-24T12:53:31.094 [DEBUG] [Thread-302447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:53:31.094 [DEBUG] [Thread-302447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:53:31.094 [DEBUG] [Thread-302447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:53:31.094 [DEBUG] [Thread-302447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:53:31.125 [INFO] [Thread-302447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:53:31.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:53:31.866 [DEBUG] [Thread-302447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:53:31.866 [DEBUG] [Thread-302447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:53:31.867 [DEBUG] [Thread-302447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:53:31.898 [DEBUG] [Thread-302447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:53:31.898 [DEBUG] [Thread-302447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:53:31.901 [DEBUG] [Thread-302447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:53:31.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:53:31.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:53:31.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:53:31.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:53:31.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:53:31.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:53:31.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:53:31.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:53:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:53:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.453542 -999.00  +24.10  18.92     30   +5.60 1 1 1 1 1   888    0 19.08 43.74 ----- 18.9 18.9 134.2 21.3 32.1 -22.7 31.1 -25.5 31.5 -21.5 32.5 -22.7
2025-12-24T12:53:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:53:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:53:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.453542
2025-12-24T12:53:31.932 [DEBUG] [Thread-302447] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:53:31.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:53:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:53:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:53:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:53:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T12:53:31.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:53:10', tmtdew=19.77, humidity=27.42, cloud=0.0, wind=12.55, temperature=22.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:53:06.029', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:53:32.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:53:32.028 [DEBUG] [Thread-302450] [transport.py] [_log()] starting thread (client mode): 0xf5740220
2025-12-24T12:53:32.028 [DEBUG] [Thread-302450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:53:32.043 [DEBUG] [Thread-302450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:53:32.043 [INFO] [Thread-302450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] client lang: <none>
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] server lang: <none>
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] kex follows: False
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:53:32.050 [DEBUG] [Thread-302450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:53:32.051 [DEBUG] [Thread-302450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:53:32.051 [DEBUG] [Thread-302450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:53:32.051 [DEBUG] [Thread-302450] [transport.py] [_log()] Compression: none
2025-12-24T12:53:32.051 [DEBUG] [Thread-302450] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:53:32.112 [DEBUG] [Thread-302450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:53:32.112 [DEBUG] [Thread-302450] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:53:32.112 [DEBUG] [Thread-302450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:53:32.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:53:32.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:53:32.174 [DEBUG] [Thread-302450] [transport.py] [_log()] userauth is OK
2025-12-24T12:53:32.174 [DEBUG] [Thread-302450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:53:32.174 [DEBUG] [Thread-302450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:53:32.174 [DEBUG] [Thread-302450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:53:32.174 [DEBUG] [Thread-302450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:53:32.188 [INFO] [Thread-302450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:53:32.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:53:32.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:53:33.046 [DEBUG] [Thread-302450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:53:33.046 [DEBUG] [Thread-302450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:53:33.094 [DEBUG] [Thread-302450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:53:33.094 [DEBUG] [Thread-302450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:53:33.103 [DEBUG] [Thread-302450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:53:33.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:53: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')
2025-12-24T12:53: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
2025-12-24T12:53:33.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:53:33.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:53:33.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:53:33.139 [DEBUG] [Thread-302450] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:53:40.660 [DEBUG] [Thread-302452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:53:55.822 [DEBUG] [Thread-302453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:54:00.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:54:00.844 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:54:03.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:54:03.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:54:03.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
2025-12-24T12:54:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 53, 43), 19.73, 27.57, 0.0, 14.95, 22.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:54:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:53:43
2025-12-24T12:54:04.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:54:04.875 [DEBUG] [Thread-302454] [transport.py] [_log()] starting thread (client mode): 0xf5742770
2025-12-24T12:54:04.875 [DEBUG] [Thread-302454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:54:04.889 [DEBUG] [Thread-302454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:54:04.889 [INFO] [Thread-302454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:54:04.895 [DEBUG] [Thread-302454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:54:04.896 [DEBUG] [Thread-302454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:54:04.896 [DEBUG] [Thread-302454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:54:04.896 [DEBUG] [Thread-302454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:54:04.896 [DEBUG] [Thread-302454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:54:04.896 [DEBUG] [Thread-302454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:54:04.896 [DEBUG] [Thread-302454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:54:04.897 [DEBUG] [Thread-302454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:54:04.897 [DEBUG] [Thread-302454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:54:04.897 [DEBUG] [Thread-302454] [transport.py] [_log()] client lang: <none>
2025-12-24T12:54:04.897 [DEBUG] [Thread-302454] [transport.py] [_log()] server lang: <none>
2025-12-24T12:54:04.897 [DEBUG] [Thread-302454] [transport.py] [_log()] kex follows: False
2025-12-24T12:54:04.897 [DEBUG] [Thread-302454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:54:04.898 [DEBUG] [Thread-302454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:54:04.898 [DEBUG] [Thread-302454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:54:04.899 [DEBUG] [Thread-302454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:54:04.899 [DEBUG] [Thread-302454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:54:04.899 [DEBUG] [Thread-302454] [transport.py] [_log()] Compression: none
2025-12-24T12:54:04.899 [DEBUG] [Thread-302454] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:54:04.936 [DEBUG] [Thread-302454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:54:04.941 [DEBUG] [Thread-302454] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:54:04.942 [DEBUG] [Thread-302454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:54:04.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:54:04.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:54:04.947 [DEBUG] [Thread-302454] [transport.py] [_log()] userauth is OK
2025-12-24T12:54:04.948 [DEBUG] [Thread-302454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:54:04.948 [DEBUG] [Thread-302454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:54:04.948 [DEBUG] [Thread-302454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:54:04.948 [DEBUG] [Thread-302454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:54:04.974 [INFO] [Thread-302454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:54:04.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:54:05.619 [DEBUG] [Thread-302454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:54:05.619 [DEBUG] [Thread-302454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:54:05.630 [DEBUG] [Thread-302454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:54:05.661 [DEBUG] [Thread-302454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:54:05.661 [DEBUG] [Thread-302454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:54:05.664 [DEBUG] [Thread-302454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:54:05.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:54:05.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:54:05.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:54:05.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:54:05.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:54:05.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:54:05.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:54:05.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:54:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:54:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.453889 -999.00  +23.90   8.34     30   +5.60 1 2 1 1 1   888    0 18.76 41.88 ----- 8.3 8.3 146.8 19.9 32.2 -23.0 31.2 -24.2 31.6 -21.3 32.6 -20.6
2025-12-24T12:54:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:54:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:54:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.453889
2025-12-24T12:54:05.700 [DEBUG] [Thread-302454] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:54:05.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:54:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:54:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:54:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:54:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:54:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:53:43', tmtdew=19.73, humidity=27.57, cloud=0.0, wind=14.95, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:53:36.010', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:54:05.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:54:05.801 [DEBUG] [Thread-302457] [transport.py] [_log()] starting thread (client mode): 0xf81c2140
2025-12-24T12:54:05.801 [DEBUG] [Thread-302457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:54:05.815 [DEBUG] [Thread-302457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:54:05.815 [INFO] [Thread-302457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:54:05.826 [DEBUG] [Thread-302457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:54:05.827 [DEBUG] [Thread-302457] [transport.py] [_log()] client lang: <none>
2025-12-24T12:54:05.828 [DEBUG] [Thread-302457] [transport.py] [_log()] server lang: <none>
2025-12-24T12:54:05.828 [DEBUG] [Thread-302457] [transport.py] [_log()] kex follows: False
2025-12-24T12:54:05.828 [DEBUG] [Thread-302457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:54:05.828 [DEBUG] [Thread-302457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:54:05.828 [DEBUG] [Thread-302457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:54:05.828 [DEBUG] [Thread-302457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:54:05.828 [DEBUG] [Thread-302457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:54:05.828 [DEBUG] [Thread-302457] [transport.py] [_log()] Compression: none
2025-12-24T12:54:05.829 [DEBUG] [Thread-302457] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:54:05.882 [DEBUG] [Thread-302457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:54:05.883 [DEBUG] [Thread-302457] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:54:05.883 [DEBUG] [Thread-302457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:54:05.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:54:05.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:54:05.938 [DEBUG] [Thread-302457] [transport.py] [_log()] userauth is OK
2025-12-24T12:54:05.938 [DEBUG] [Thread-302457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:54:05.938 [DEBUG] [Thread-302457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:54:05.938 [DEBUG] [Thread-302457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:54:05.938 [DEBUG] [Thread-302457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:54:05.955 [INFO] [Thread-302457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:54:05.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:54:05.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:54:06.838 [DEBUG] [Thread-302457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:54:06.838 [DEBUG] [Thread-302457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:54:06.876 [DEBUG] [Thread-302457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:54:06.876 [DEBUG] [Thread-302457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:54:06.885 [DEBUG] [Thread-302457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:54:06.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:54:06.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')
2025-12-24T12:54:06.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
2025-12-24T12:54:06.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:54:06.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:54:06.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:54:06.918 [DEBUG] [Thread-302457] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:54:10.903 [DEBUG] [Thread-302459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:54:14.023 [DEBUG] [Thread-302460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:54:26.034 [DEBUG] [Thread-302461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:54:36.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:54:36.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:54:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:54:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 54, 17), 20.16, 26.83, 0.0, 16.75, 22.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:54:38.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:54:17
2025-12-24T12:54:38.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:54:38.534 [DEBUG] [Thread-302462] [transport.py] [_log()] starting thread (client mode): 0xf81c05e0
2025-12-24T12:54:38.535 [DEBUG] [Thread-302462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:54:38.537 [DEBUG] [Thread-302462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:54:38.537 [INFO] [Thread-302462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:54:38.540 [DEBUG] [Thread-302462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:54:38.540 [DEBUG] [Thread-302462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] client lang: <none>
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] server lang: <none>
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] kex follows: False
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:54:38.541 [DEBUG] [Thread-302462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:54:38.542 [DEBUG] [Thread-302462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:54:38.542 [DEBUG] [Thread-302462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:54:38.542 [DEBUG] [Thread-302462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:54:38.542 [DEBUG] [Thread-302462] [transport.py] [_log()] Compression: none
2025-12-24T12:54:38.542 [DEBUG] [Thread-302462] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:54:38.573 [DEBUG] [Thread-302462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:54:38.576 [DEBUG] [Thread-302462] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:54:38.578 [DEBUG] [Thread-302462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:54:38.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:54:38.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:54:38.584 [DEBUG] [Thread-302462] [transport.py] [_log()] userauth is OK
2025-12-24T12:54:38.584 [DEBUG] [Thread-302462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:54:38.584 [DEBUG] [Thread-302462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:54:38.584 [DEBUG] [Thread-302462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:54:38.585 [DEBUG] [Thread-302462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:54:38.611 [INFO] [Thread-302462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:54:38.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:54:39.241 [DEBUG] [Thread-302462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:54:39.242 [DEBUG] [Thread-302462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:54:39.252 [DEBUG] [Thread-302462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:54:39.283 [DEBUG] [Thread-302462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:54:39.283 [DEBUG] [Thread-302462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:54:39.287 [DEBUG] [Thread-302462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:54:39.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:54:39.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:54:39.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:54:39.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:54:39.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:54:39.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:54:39.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:54:39.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:54:39.317 [DEBUG] [Thread-302462] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:54:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:54:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454236 -999.00  +23.90  17.42     30   +5.50 1 2 1 1 1   888    0 19.10 48.70 ----- 17.4 17.4 146.0 25.6 32.2 -22.6 31.2 -22.4 31.6 -21.6 32.6 -20.6
2025-12-24T12:54:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:54:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:54:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454236
2025-12-24T12:54:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:54:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:54:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:54:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:54:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:54:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:54:17', tmtdew=20.16, humidity=26.83, cloud=0.0, wind=16.75, temperature=22.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:05.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:54:39.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:54:39.433 [DEBUG] [Thread-302465] [transport.py] [_log()] starting thread (client mode): 0xf57a9450
2025-12-24T12:54:39.433 [DEBUG] [Thread-302465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:54:39.447 [DEBUG] [Thread-302465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:54:39.448 [INFO] [Thread-302465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:54:39.455 [DEBUG] [Thread-302465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:54:39.455 [DEBUG] [Thread-302465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:54:39.455 [DEBUG] [Thread-302465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] client lang: <none>
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] server lang: <none>
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] kex follows: False
2025-12-24T12:54:39.456 [DEBUG] [Thread-302465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:54:39.457 [DEBUG] [Thread-302465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:54:39.457 [DEBUG] [Thread-302465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:54:39.457 [DEBUG] [Thread-302465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:54:39.457 [DEBUG] [Thread-302465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:54:39.457 [DEBUG] [Thread-302465] [transport.py] [_log()] Compression: none
2025-12-24T12:54:39.457 [DEBUG] [Thread-302465] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:54:39.514 [DEBUG] [Thread-302465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:54:39.514 [DEBUG] [Thread-302465] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:54:39.515 [DEBUG] [Thread-302465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:54:39.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:54:39.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:54:39.571 [DEBUG] [Thread-302465] [transport.py] [_log()] userauth is OK
2025-12-24T12:54:39.571 [DEBUG] [Thread-302465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:54:39.572 [DEBUG] [Thread-302465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:54:39.572 [DEBUG] [Thread-302465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:54:39.572 [DEBUG] [Thread-302465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:54:39.590 [INFO] [Thread-302465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:54:39.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:54:39.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:54:40.461 [DEBUG] [Thread-302465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:54:40.461 [DEBUG] [Thread-302465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:54:40.508 [DEBUG] [Thread-302465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:54:40.509 [DEBUG] [Thread-302465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:54:40.517 [DEBUG] [Thread-302465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:54:40.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:54:40.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:54:40.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:54:40.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:54:40.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:54:40.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:54:40.555 [DEBUG] [Thread-302465] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:54:41.105 [DEBUG] [Thread-302467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:54:56.232 [DEBUG] [Thread-302468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:55:00.984 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:55:00.985 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:55:10.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:55:10.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:55:10.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:55:11.303 [DEBUG] [Thread-302469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:55:11.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 54, 49), 20.07, 26.63, 0.0, 23.1, 23.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:55:11.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:54:49
2025-12-24T12:55:11.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:55:11.701 [DEBUG] [Thread-302470] [transport.py] [_log()] starting thread (client mode): 0xf57a8490
2025-12-24T12:55:11.702 [DEBUG] [Thread-302470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:55:11.715 [DEBUG] [Thread-302470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:55:11.716 [INFO] [Thread-302470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] client lang: <none>
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] server lang: <none>
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] kex follows: False
2025-12-24T12:55:11.721 [DEBUG] [Thread-302470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:55:11.722 [DEBUG] [Thread-302470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:55:11.722 [DEBUG] [Thread-302470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:55:11.722 [DEBUG] [Thread-302470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:55:11.722 [DEBUG] [Thread-302470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:55:11.722 [DEBUG] [Thread-302470] [transport.py] [_log()] Compression: none
2025-12-24T12:55:11.722 [DEBUG] [Thread-302470] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:55:11.757 [DEBUG] [Thread-302470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:55:11.760 [DEBUG] [Thread-302470] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:55:11.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:55:11.763 [DEBUG] [Thread-302470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:55:11.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:55:11.766 [DEBUG] [Thread-302470] [transport.py] [_log()] userauth is OK
2025-12-24T12:55:11.766 [DEBUG] [Thread-302470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:55:11.766 [DEBUG] [Thread-302470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:55:11.766 [DEBUG] [Thread-302470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:55:11.766 [DEBUG] [Thread-302470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:55:11.787 [INFO] [Thread-302470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:55:11.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:55:12.686 [DEBUG] [Thread-302470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:55:12.686 [DEBUG] [Thread-302470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:55:12.687 [DEBUG] [Thread-302470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:55:12.727 [DEBUG] [Thread-302470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:55:12.727 [DEBUG] [Thread-302470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:55:12.729 [DEBUG] [Thread-302470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:55:12.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:55:12.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:55:12.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:55:12.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:55:12.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:55:12.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:55:12.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:55:12.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:55:12.761 [DEBUG] [Thread-302470] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:55:12.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:55:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:55:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:55:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:55:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:55:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:54:49', tmtdew=20.07, humidity=26.63, cloud=0.0, wind=23.1, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:55:12.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:55:12.872 [DEBUG] [Thread-302473] [transport.py] [_log()] starting thread (client mode): 0xf81c3610
2025-12-24T12:55:12.872 [DEBUG] [Thread-302473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:55:12.893 [DEBUG] [Thread-302473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:55:12.893 [INFO] [Thread-302473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] client lang: <none>
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] server lang: <none>
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] kex follows: False
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] Compression: none
2025-12-24T12:55:12.901 [DEBUG] [Thread-302473] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:55:12.957 [DEBUG] [Thread-302473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:55:12.957 [DEBUG] [Thread-302473] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:55:12.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:55:12.958 [DEBUG] [Thread-302473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:55:12.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:55:13.014 [DEBUG] [Thread-302473] [transport.py] [_log()] userauth is OK
2025-12-24T12:55:13.015 [DEBUG] [Thread-302473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:55:13.015 [DEBUG] [Thread-302473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:55:13.015 [DEBUG] [Thread-302473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:55:13.015 [DEBUG] [Thread-302473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:55:13.033 [INFO] [Thread-302473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:55:13.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:55:13.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:55:13.870 [DEBUG] [Thread-302473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:55:13.870 [DEBUG] [Thread-302473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:55:13.917 [DEBUG] [Thread-302473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:55:13.917 [DEBUG] [Thread-302473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:55:13.925 [DEBUG] [Thread-302473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:55:13.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:55:13.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:55:13.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:55:13.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:55:13.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:55:13.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:55:13.961 [DEBUG] [Thread-302473] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:55:14.269 [DEBUG] [Thread-302475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:55:26.422 [DEBUG] [Thread-302476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:55:41.688 [DEBUG] [Thread-302477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:55:43.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:55:43.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:55:44.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
2025-12-24T12:55:44.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 55, 22), 20.3, 26.25, 0.0, 21.72, 23.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:55:44.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:55:22
2025-12-24T12:55:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:55:45.295 [DEBUG] [Thread-302478] [transport.py] [_log()] starting thread (client mode): 0xf574d240
2025-12-24T12:55:45.295 [DEBUG] [Thread-302478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:55:45.311 [DEBUG] [Thread-302478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:55:45.311 [INFO] [Thread-302478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:55:45.317 [DEBUG] [Thread-302478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:55:45.317 [DEBUG] [Thread-302478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:55:45.317 [DEBUG] [Thread-302478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:55:45.317 [DEBUG] [Thread-302478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:55:45.317 [DEBUG] [Thread-302478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:55:45.317 [DEBUG] [Thread-302478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:55:45.317 [DEBUG] [Thread-302478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:55:45.318 [DEBUG] [Thread-302478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:55:45.318 [DEBUG] [Thread-302478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:55:45.318 [DEBUG] [Thread-302478] [transport.py] [_log()] client lang: <none>
2025-12-24T12:55:45.318 [DEBUG] [Thread-302478] [transport.py] [_log()] server lang: <none>
2025-12-24T12:55:45.318 [DEBUG] [Thread-302478] [transport.py] [_log()] kex follows: False
2025-12-24T12:55:45.318 [DEBUG] [Thread-302478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:55:45.319 [DEBUG] [Thread-302478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:55:45.319 [DEBUG] [Thread-302478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:55:45.319 [DEBUG] [Thread-302478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:55:45.319 [DEBUG] [Thread-302478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:55:45.319 [DEBUG] [Thread-302478] [transport.py] [_log()] Compression: none
2025-12-24T12:55:45.319 [DEBUG] [Thread-302478] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:55:45.355 [DEBUG] [Thread-302478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:55:45.359 [DEBUG] [Thread-302478] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:55:45.361 [DEBUG] [Thread-302478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:55:45.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:55:45.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:55:45.367 [DEBUG] [Thread-302478] [transport.py] [_log()] userauth is OK
2025-12-24T12:55:45.367 [DEBUG] [Thread-302478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:55:45.367 [DEBUG] [Thread-302478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:55:45.367 [DEBUG] [Thread-302478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:55:45.367 [DEBUG] [Thread-302478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:55:45.406 [INFO] [Thread-302478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:55:45.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:55:46.080 [DEBUG] [Thread-302478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:55:46.080 [DEBUG] [Thread-302478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:55:46.081 [DEBUG] [Thread-302478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:55:46.122 [DEBUG] [Thread-302478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:55:46.122 [DEBUG] [Thread-302478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:55:46.124 [DEBUG] [Thread-302478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:55:46.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:55:46.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:55:46.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:55:46.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:55:46.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:55:46.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:55:46.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:55:46.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:55:46.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:55:46.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:55:46.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:55:46.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:55:46.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:55:46.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:55:46.155 [DEBUG] [Thread-302478] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:55:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:55:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:55:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:55:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:55:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:55:22', tmtdew=20.3, humidity=26.25, cloud=0.0, wind=21.72, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:55:46.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:55:46.249 [DEBUG] [Thread-302481] [transport.py] [_log()] starting thread (client mode): 0xf574ed70
2025-12-24T12:55:46.249 [DEBUG] [Thread-302481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:55:46.264 [DEBUG] [Thread-302481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:55:46.264 [INFO] [Thread-302481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:55:46.271 [DEBUG] [Thread-302481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:55:46.271 [DEBUG] [Thread-302481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:55:46.271 [DEBUG] [Thread-302481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:55:46.271 [DEBUG] [Thread-302481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:55:46.271 [DEBUG] [Thread-302481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:55:46.271 [DEBUG] [Thread-302481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] client lang: <none>
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] server lang: <none>
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] kex follows: False
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] Compression: none
2025-12-24T12:55:46.272 [DEBUG] [Thread-302481] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:55:46.334 [DEBUG] [Thread-302481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:55:46.335 [DEBUG] [Thread-302481] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:55:46.335 [DEBUG] [Thread-302481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:55:46.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:55:46.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:55:46.391 [DEBUG] [Thread-302481] [transport.py] [_log()] userauth is OK
2025-12-24T12:55:46.391 [DEBUG] [Thread-302481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:55:46.391 [DEBUG] [Thread-302481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:55:46.391 [DEBUG] [Thread-302481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:55:46.391 [DEBUG] [Thread-302481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:55:46.404 [INFO] [Thread-302481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:55:46.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:55:46.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:55:47.269 [DEBUG] [Thread-302481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:55:47.269 [DEBUG] [Thread-302481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:55:47.317 [DEBUG] [Thread-302481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:55:47.317 [DEBUG] [Thread-302481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:55:47.325 [DEBUG] [Thread-302481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:55:47.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:55:47.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:55:47.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:55:47.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:55:47.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:55:47.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:55:47.357 [DEBUG] [Thread-302481] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:55:56.739 [DEBUG] [Thread-302483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:56:01.136 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:56:01.138 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:56:11.803 [DEBUG] [Thread-302484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:56:14.599 [DEBUG] [Thread-302485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:56:17.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:56:17.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:56:17.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:56:18.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 55, 56), 19.88, 27.38, 0.0, 15.39, 22.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:56:18.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:55:56
2025-12-24T12:56:18.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:56:19.095 [DEBUG] [Thread-302486] [transport.py] [_log()] starting thread (client mode): 0xf57a8ca0
2025-12-24T12:56:19.095 [DEBUG] [Thread-302486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:56:19.117 [DEBUG] [Thread-302486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:56:19.117 [INFO] [Thread-302486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] client lang: <none>
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] server lang: <none>
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] kex follows: False
2025-12-24T12:56:19.121 [DEBUG] [Thread-302486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:56:19.122 [DEBUG] [Thread-302486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:56:19.122 [DEBUG] [Thread-302486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:56:19.122 [DEBUG] [Thread-302486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:56:19.122 [DEBUG] [Thread-302486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:56:19.122 [DEBUG] [Thread-302486] [transport.py] [_log()] Compression: none
2025-12-24T12:56:19.122 [DEBUG] [Thread-302486] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:56:19.151 [DEBUG] [Thread-302486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:56:19.154 [DEBUG] [Thread-302486] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:56:19.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:56:19.155 [DEBUG] [Thread-302486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:56:19.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:56:19.157 [DEBUG] [Thread-302486] [transport.py] [_log()] userauth is OK
2025-12-24T12:56:19.157 [DEBUG] [Thread-302486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:56:19.157 [DEBUG] [Thread-302486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:56:19.157 [DEBUG] [Thread-302486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:56:19.157 [DEBUG] [Thread-302486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:56:19.179 [INFO] [Thread-302486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:56:19.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:56:19.794 [DEBUG] [Thread-302486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:56:19.794 [DEBUG] [Thread-302486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:56:19.795 [DEBUG] [Thread-302486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:56:19.836 [DEBUG] [Thread-302486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:56:19.836 [DEBUG] [Thread-302486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:56:19.839 [DEBUG] [Thread-302486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:56:19.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:56:19.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:56:19.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:56:19.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:56:19.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:56:19.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:56:19.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:56:19.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:56:19.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:56:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:56:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:56:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:56:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:56:19.870 [DEBUG] [Thread-302486] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:56:19.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:56:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:56:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:56:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:56:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:56:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:55:56', tmtdew=19.88, humidity=27.38, cloud=0.0, wind=15.39, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:56:19.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:56:19.982 [DEBUG] [Thread-302489] [transport.py] [_log()] starting thread (client mode): 0xf5741d80
2025-12-24T12:56:19.982 [DEBUG] [Thread-302489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:56:20.000 [DEBUG] [Thread-302489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:56:20.000 [INFO] [Thread-302489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:56:20.007 [DEBUG] [Thread-302489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:56:20.007 [DEBUG] [Thread-302489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:56:20.007 [DEBUG] [Thread-302489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:56:20.007 [DEBUG] [Thread-302489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:56:20.007 [DEBUG] [Thread-302489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:56:20.007 [DEBUG] [Thread-302489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] client lang: <none>
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] server lang: <none>
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] kex follows: False
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] Compression: none
2025-12-24T12:56:20.008 [DEBUG] [Thread-302489] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:56:20.067 [DEBUG] [Thread-302489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:56:20.068 [DEBUG] [Thread-302489] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:56:20.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:56:20.069 [DEBUG] [Thread-302489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:56:20.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:56:20.123 [DEBUG] [Thread-302489] [transport.py] [_log()] userauth is OK
2025-12-24T12:56:20.124 [DEBUG] [Thread-302489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:56:20.124 [DEBUG] [Thread-302489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:56:20.124 [DEBUG] [Thread-302489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:56:20.124 [DEBUG] [Thread-302489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:56:20.146 [INFO] [Thread-302489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:56:20.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:56:20.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:56:20.968 [DEBUG] [Thread-302489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:56:20.968 [DEBUG] [Thread-302489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:56:21.007 [DEBUG] [Thread-302489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:56:21.007 [DEBUG] [Thread-302489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:56:21.017 [DEBUG] [Thread-302489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:56:21.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:56:21.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:56:21.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:56:21.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:56:21.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:56:21.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:56:21.054 [DEBUG] [Thread-302489] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:56:26.864 [DEBUG] [Thread-302491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:56:42.007 [DEBUG] [Thread-302492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:56:51.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:56:51.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:56:51.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:56:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 56, 29), 19.52, 27.97, 0.0, 17.24, 22.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:56:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:56:29
2025-12-24T12:56:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:56:52.709 [DEBUG] [Thread-302493] [transport.py] [_log()] starting thread (client mode): 0xf574ee90
2025-12-24T12:56:52.710 [DEBUG] [Thread-302493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:56:52.721 [DEBUG] [Thread-302493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:56:52.721 [INFO] [Thread-302493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:56:52.727 [DEBUG] [Thread-302493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:56:52.727 [DEBUG] [Thread-302493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:56:52.727 [DEBUG] [Thread-302493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] client lang: <none>
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] server lang: <none>
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] kex follows: False
2025-12-24T12:56:52.728 [DEBUG] [Thread-302493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:56:52.729 [DEBUG] [Thread-302493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:56:52.729 [DEBUG] [Thread-302493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:56:52.729 [DEBUG] [Thread-302493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:56:52.730 [DEBUG] [Thread-302493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:56:52.730 [DEBUG] [Thread-302493] [transport.py] [_log()] Compression: none
2025-12-24T12:56:52.730 [DEBUG] [Thread-302493] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:56:52.772 [DEBUG] [Thread-302493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:56:52.776 [DEBUG] [Thread-302493] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:56:52.777 [DEBUG] [Thread-302493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:56:52.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:56:52.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:56:52.783 [DEBUG] [Thread-302493] [transport.py] [_log()] userauth is OK
2025-12-24T12:56:52.783 [DEBUG] [Thread-302493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:56:52.783 [DEBUG] [Thread-302493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:56:52.784 [DEBUG] [Thread-302493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:56:52.784 [DEBUG] [Thread-302493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:56:52.825 [INFO] [Thread-302493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:56:52.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:56:53.468 [DEBUG] [Thread-302493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:56:53.468 [DEBUG] [Thread-302493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:56:53.469 [DEBUG] [Thread-302493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:56:53.509 [DEBUG] [Thread-302493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:56:53.509 [DEBUG] [Thread-302493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:56:53.512 [DEBUG] [Thread-302493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:56:53.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:56:53.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:56:53.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:56:53.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:56:53.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:56:53.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:56:53.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:56:53.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:56:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:56:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:56:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:56:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:56:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:56:53.548 [DEBUG] [Thread-302493] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:56:53.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:56:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:56:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:56:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:56:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:56:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:56:29', tmtdew=19.52, humidity=27.97, cloud=0.0, wind=17.24, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:56:53.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:56:53.660 [DEBUG] [Thread-302496] [transport.py] [_log()] starting thread (client mode): 0xf5770cd0
2025-12-24T12:56:53.661 [DEBUG] [Thread-302496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:56:53.675 [DEBUG] [Thread-302496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:56:53.675 [INFO] [Thread-302496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:56:53.682 [DEBUG] [Thread-302496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:56:53.683 [DEBUG] [Thread-302496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:56:53.683 [DEBUG] [Thread-302496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:56:53.683 [DEBUG] [Thread-302496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:56:53.683 [DEBUG] [Thread-302496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:56:53.683 [DEBUG] [Thread-302496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:56:53.683 [DEBUG] [Thread-302496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:56:53.683 [DEBUG] [Thread-302496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:56:53.683 [DEBUG] [Thread-302496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:56:53.684 [DEBUG] [Thread-302496] [transport.py] [_log()] client lang: <none>
2025-12-24T12:56:53.684 [DEBUG] [Thread-302496] [transport.py] [_log()] server lang: <none>
2025-12-24T12:56:53.684 [DEBUG] [Thread-302496] [transport.py] [_log()] kex follows: False
2025-12-24T12:56:53.684 [DEBUG] [Thread-302496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:56:53.684 [DEBUG] [Thread-302496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:56:53.684 [DEBUG] [Thread-302496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:56:53.684 [DEBUG] [Thread-302496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:56:53.685 [DEBUG] [Thread-302496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:56:53.685 [DEBUG] [Thread-302496] [transport.py] [_log()] Compression: none
2025-12-24T12:56:53.685 [DEBUG] [Thread-302496] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:56:53.744 [DEBUG] [Thread-302496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:56:53.745 [DEBUG] [Thread-302496] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:56:53.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:56:53.746 [DEBUG] [Thread-302496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:56:53.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:56:53.799 [DEBUG] [Thread-302496] [transport.py] [_log()] userauth is OK
2025-12-24T12:56:53.800 [DEBUG] [Thread-302496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:56:53.800 [DEBUG] [Thread-302496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:56:53.800 [DEBUG] [Thread-302496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:56:53.800 [DEBUG] [Thread-302496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:56:53.820 [INFO] [Thread-302496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:56:53.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:56:53.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:56:54.665 [DEBUG] [Thread-302496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:56:54.665 [DEBUG] [Thread-302496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:56:54.715 [DEBUG] [Thread-302496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:56:54.715 [DEBUG] [Thread-302496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:56:54.724 [DEBUG] [Thread-302496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:56:54.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:56:54.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:56: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
2025-12-24T12:56:54.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:56:54.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:56:54.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:56:54.761 [DEBUG] [Thread-302496] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:56:57.086 [DEBUG] [Thread-302498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:57:01.279 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:57:01.280 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:57:12.198 [DEBUG] [Thread-302499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:57:14.892 [DEBUG] [Thread-302500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:57:24.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:57:24.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:57:24.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:57:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 57, 2), 19.52, 27.96, 0.0, 15.35, 22.47, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:57:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:57:02
2025-12-24T12:57:26.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:57:26.257 [DEBUG] [Thread-302501] [transport.py] [_log()] starting thread (client mode): 0xf5740e50
2025-12-24T12:57:26.257 [DEBUG] [Thread-302501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:57:26.264 [DEBUG] [Thread-302501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:57:26.264 [INFO] [Thread-302501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] client lang: <none>
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] server lang: <none>
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] kex follows: False
2025-12-24T12:57:26.268 [DEBUG] [Thread-302501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:57:26.269 [DEBUG] [Thread-302501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:57:26.269 [DEBUG] [Thread-302501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:57:26.269 [DEBUG] [Thread-302501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:57:26.269 [DEBUG] [Thread-302501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:57:26.269 [DEBUG] [Thread-302501] [transport.py] [_log()] Compression: none
2025-12-24T12:57:26.269 [DEBUG] [Thread-302501] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:57:26.302 [DEBUG] [Thread-302501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:57:26.306 [DEBUG] [Thread-302501] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:57:26.307 [DEBUG] [Thread-302501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:57:26.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:57:26.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:57:26.312 [DEBUG] [Thread-302501] [transport.py] [_log()] userauth is OK
2025-12-24T12:57:26.313 [DEBUG] [Thread-302501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:57:26.313 [DEBUG] [Thread-302501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:57:26.313 [DEBUG] [Thread-302501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:57:26.313 [DEBUG] [Thread-302501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:57:26.333 [INFO] [Thread-302501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:57:26.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:57:26.993 [DEBUG] [Thread-302501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:57:26.993 [DEBUG] [Thread-302501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:57:26.994 [DEBUG] [Thread-302501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:57:27.034 [DEBUG] [Thread-302501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:57:27.034 [DEBUG] [Thread-302501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:57:27.037 [DEBUG] [Thread-302501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:57:27.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:57:27.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:57:27.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:57:27.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:57:27.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:57:27.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:57:27.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:57:27.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:57:27.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:57:27.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:57:27.066 [DEBUG] [Thread-302501] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:57:27.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:57:27.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:57:27.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:57:27.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:57:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:57:02', tmtdew=19.52, humidity=27.96, cloud=0.0, wind=15.35, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:57:27.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:57:27.199 [DEBUG] [Thread-302504] [transport.py] [_log()] starting thread (client mode): 0xf57be680
2025-12-24T12:57:27.199 [DEBUG] [Thread-302504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:57:27.214 [DEBUG] [Thread-302504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:57:27.214 [INFO] [Thread-302504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:57:27.221 [DEBUG] [Thread-302504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:57:27.222 [DEBUG] [Thread-302504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:57:27.222 [DEBUG] [Thread-302504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:57:27.222 [DEBUG] [Thread-302504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:57:27.222 [DEBUG] [Thread-302504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:57:27.222 [DEBUG] [Thread-302504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:57:27.222 [DEBUG] [Thread-302504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:57:27.222 [DEBUG] [Thread-302504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:57:27.222 [DEBUG] [Thread-302504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:57:27.223 [DEBUG] [Thread-302504] [transport.py] [_log()] client lang: <none>
2025-12-24T12:57:27.223 [DEBUG] [Thread-302504] [transport.py] [_log()] server lang: <none>
2025-12-24T12:57:27.223 [DEBUG] [Thread-302504] [transport.py] [_log()] kex follows: False
2025-12-24T12:57:27.223 [DEBUG] [Thread-302504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:57:27.223 [DEBUG] [Thread-302504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:57:27.223 [DEBUG] [Thread-302504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:57:27.223 [DEBUG] [Thread-302504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:57:27.224 [DEBUG] [Thread-302504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:57:27.224 [DEBUG] [Thread-302504] [transport.py] [_log()] Compression: none
2025-12-24T12:57:27.224 [DEBUG] [Thread-302504] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:57:27.281 [DEBUG] [Thread-302504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:57:27.282 [DEBUG] [Thread-302504] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:57:27.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:57:27.282 [DEBUG] [Thread-302504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:57:27.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:57:27.283 [DEBUG] [Thread-302506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:57:27.340 [DEBUG] [Thread-302504] [transport.py] [_log()] userauth is OK
2025-12-24T12:57:27.340 [DEBUG] [Thread-302504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:57:27.340 [DEBUG] [Thread-302504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:57:27.340 [DEBUG] [Thread-302504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:57:27.340 [DEBUG] [Thread-302504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:57:27.362 [INFO] [Thread-302504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:57:27.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:57:27.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:57:28.245 [DEBUG] [Thread-302504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:57:28.245 [DEBUG] [Thread-302504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:57:28.285 [DEBUG] [Thread-302504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:57:28.285 [DEBUG] [Thread-302504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:57:28.293 [DEBUG] [Thread-302504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:57:28.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:57:28.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:57:28.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:57:28.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:57:28.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:57:28.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:57:28.327 [DEBUG] [Thread-302504] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:57:42.488 [DEBUG] [Thread-302507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:57:57.582 [DEBUG] [Thread-302508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:57:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:57:58.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:57:58.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:57:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 57, 35), 18.88, 29.04, 0.0, 11.49, 21.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:57:59.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:57:35
2025-12-24T12:57:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:58:00.106 [DEBUG] [Thread-302509] [transport.py] [_log()] starting thread (client mode): 0xf81c17b0
2025-12-24T12:58:00.106 [DEBUG] [Thread-302509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:58:00.117 [DEBUG] [Thread-302509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:58:00.117 [INFO] [Thread-302509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:58:00.122 [DEBUG] [Thread-302509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] client lang: <none>
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] server lang: <none>
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] kex follows: False
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:58:00.123 [DEBUG] [Thread-302509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:58:00.124 [DEBUG] [Thread-302509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:58:00.124 [DEBUG] [Thread-302509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:58:00.124 [DEBUG] [Thread-302509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:58:00.124 [DEBUG] [Thread-302509] [transport.py] [_log()] Compression: none
2025-12-24T12:58:00.124 [DEBUG] [Thread-302509] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:58:00.158 [DEBUG] [Thread-302509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:58:00.161 [DEBUG] [Thread-302509] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:58:00.162 [DEBUG] [Thread-302509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:58:00.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:58:00.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:58:00.166 [DEBUG] [Thread-302509] [transport.py] [_log()] userauth is OK
2025-12-24T12:58:00.166 [DEBUG] [Thread-302509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:58:00.166 [DEBUG] [Thread-302509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:58:00.166 [DEBUG] [Thread-302509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:58:00.166 [DEBUG] [Thread-302509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:58:00.191 [INFO] [Thread-302509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:58:00.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:58:00.844 [DEBUG] [Thread-302509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:58:00.844 [DEBUG] [Thread-302509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:58:00.845 [DEBUG] [Thread-302509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:58:00.886 [DEBUG] [Thread-302509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:58:00.886 [DEBUG] [Thread-302509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:58:00.888 [DEBUG] [Thread-302509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:58:00.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:58:00.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:58:00.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:58:00.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:58:00.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:58:00.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:58:00.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:58:00.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:58:00.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:58:00.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:58:00.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:58:00.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:58:00.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:58:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:58:00.931 [DEBUG] [Thread-302509] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:58:00.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:58:00.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:58:00.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:58:00.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:58:00.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:57:35', tmtdew=18.88, humidity=29.04, cloud=0.0, wind=11.49, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:58:01.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:58:01.020 [DEBUG] [Thread-302512] [transport.py] [_log()] starting thread (client mode): 0xf81c3760
2025-12-24T12:58:01.020 [DEBUG] [Thread-302512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:58:01.035 [DEBUG] [Thread-302512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:58:01.035 [INFO] [Thread-302512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] client lang: <none>
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] server lang: <none>
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] kex follows: False
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] Compression: none
2025-12-24T12:58:01.043 [DEBUG] [Thread-302512] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:58:01.098 [DEBUG] [Thread-302512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:58:01.099 [DEBUG] [Thread-302512] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:58:01.099 [DEBUG] [Thread-302512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:58:01.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:58:01.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:58:01.156 [DEBUG] [Thread-302512] [transport.py] [_log()] userauth is OK
2025-12-24T12:58:01.156 [DEBUG] [Thread-302512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:58:01.156 [DEBUG] [Thread-302512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:58:01.156 [DEBUG] [Thread-302512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:58:01.156 [DEBUG] [Thread-302512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:58:01.170 [INFO] [Thread-302512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:58:01.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:58:01.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:58:01.423 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:58:01.424 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:58:02.017 [DEBUG] [Thread-302512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:58:02.017 [DEBUG] [Thread-302512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:58:02.064 [DEBUG] [Thread-302512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:58:02.064 [DEBUG] [Thread-302512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:58:02.073 [DEBUG] [Thread-302512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:58:02.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:58:02.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:58:02.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
2025-12-24T12:58:02.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:58:02.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:58:02.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:58:02.106 [DEBUG] [Thread-302512] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:58:12.718 [DEBUG] [Thread-302514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:58:15.212 [DEBUG] [Thread-302515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:58:27.922 [DEBUG] [Thread-302516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:58:32.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:58:32.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:58:32.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:58:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 58, 8), 18.78, 29.22, 0.0, 9.97, 21.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:58:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:58:08
2025-12-24T12:58:33.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:58:33.961 [DEBUG] [Thread-302517] [transport.py] [_log()] starting thread (client mode): 0xf57724a0
2025-12-24T12:58:33.961 [DEBUG] [Thread-302517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:58:33.975 [DEBUG] [Thread-302517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:58:33.975 [INFO] [Thread-302517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:58:33.979 [DEBUG] [Thread-302517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] client lang: <none>
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] server lang: <none>
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] kex follows: False
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:58:33.980 [DEBUG] [Thread-302517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:58:33.981 [DEBUG] [Thread-302517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:58:33.981 [DEBUG] [Thread-302517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:58:33.981 [DEBUG] [Thread-302517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:58:33.981 [DEBUG] [Thread-302517] [transport.py] [_log()] Compression: none
2025-12-24T12:58:33.981 [DEBUG] [Thread-302517] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:58:34.017 [DEBUG] [Thread-302517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:58:34.023 [DEBUG] [Thread-302517] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:58:34.026 [DEBUG] [Thread-302517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:58:34.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:58:34.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:58:34.032 [DEBUG] [Thread-302517] [transport.py] [_log()] userauth is OK
2025-12-24T12:58:34.032 [DEBUG] [Thread-302517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:58:34.033 [DEBUG] [Thread-302517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:58:34.033 [DEBUG] [Thread-302517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:58:34.033 [DEBUG] [Thread-302517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:58:34.060 [INFO] [Thread-302517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:58:34.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:58:34.863 [DEBUG] [Thread-302517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:58:34.863 [DEBUG] [Thread-302517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:58:34.864 [DEBUG] [Thread-302517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:58:34.905 [DEBUG] [Thread-302517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:58:34.905 [DEBUG] [Thread-302517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:58:34.907 [DEBUG] [Thread-302517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:58:34.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:58:34.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:58:34.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:58:34.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:58:34.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:58:34.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:58:34.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:58:34.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:58:34.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:58:34.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:58:34.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:58:34.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:58:34.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:58:34.940 [DEBUG] [Thread-302517] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:58:34.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:58:34.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:58:34.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:58:34.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:58:34.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:58:34.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:58:08', tmtdew=18.78, humidity=29.22, cloud=0.0, wind=9.97, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:58:35.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:58:35.053 [DEBUG] [Thread-302520] [transport.py] [_log()] starting thread (client mode): 0xf5771990
2025-12-24T12:58:35.053 [DEBUG] [Thread-302520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:58:35.067 [DEBUG] [Thread-302520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:58:35.068 [INFO] [Thread-302520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:58:35.076 [DEBUG] [Thread-302520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:58:35.076 [DEBUG] [Thread-302520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:58:35.076 [DEBUG] [Thread-302520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:58:35.076 [DEBUG] [Thread-302520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:58:35.076 [DEBUG] [Thread-302520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:58:35.076 [DEBUG] [Thread-302520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:58:35.076 [DEBUG] [Thread-302520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] client lang: <none>
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] server lang: <none>
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] kex follows: False
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:58:35.077 [DEBUG] [Thread-302520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:58:35.078 [DEBUG] [Thread-302520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:58:35.078 [DEBUG] [Thread-302520] [transport.py] [_log()] Compression: none
2025-12-24T12:58:35.078 [DEBUG] [Thread-302520] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:58:35.133 [DEBUG] [Thread-302520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:58:35.134 [DEBUG] [Thread-302520] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:58:35.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:58:35.136 [DEBUG] [Thread-302520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:58:35.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:58:35.189 [DEBUG] [Thread-302520] [transport.py] [_log()] userauth is OK
2025-12-24T12:58:35.189 [DEBUG] [Thread-302520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:58:35.190 [DEBUG] [Thread-302520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:58:35.190 [DEBUG] [Thread-302520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:58:35.190 [DEBUG] [Thread-302520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:58:35.209 [INFO] [Thread-302520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:58:35.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:58:35.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:58:36.087 [DEBUG] [Thread-302520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:58:36.087 [DEBUG] [Thread-302520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:58:36.126 [DEBUG] [Thread-302520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:58:36.126 [DEBUG] [Thread-302520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:58:36.135 [DEBUG] [Thread-302520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:58:36.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:58:36.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:58:36.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:58:36.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:58:36.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:58:36.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:58:36.169 [DEBUG] [Thread-302520] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:58:42.991 [DEBUG] [Thread-302522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:58:58.147 [DEBUG] [Thread-302523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:59:01.572 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:59:01.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:59:06.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:59:06.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:59:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T12:59:07.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 58, 41), 18.67, 29.25, 0.0, 6.27, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:59:07.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:58:41
2025-12-24T12:59:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:59:07.924 [DEBUG] [Thread-302524] [transport.py] [_log()] starting thread (client mode): 0xf57a9810
2025-12-24T12:59:07.924 [DEBUG] [Thread-302524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:59:07.937 [DEBUG] [Thread-302524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:59:07.937 [INFO] [Thread-302524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] client lang: <none>
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] server lang: <none>
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] kex follows: False
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:59:07.941 [DEBUG] [Thread-302524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:59:07.942 [DEBUG] [Thread-302524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:59:07.942 [DEBUG] [Thread-302524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:59:07.942 [DEBUG] [Thread-302524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:59:07.942 [DEBUG] [Thread-302524] [transport.py] [_log()] Compression: none
2025-12-24T12:59:07.942 [DEBUG] [Thread-302524] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:59:07.973 [DEBUG] [Thread-302524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:59:07.977 [DEBUG] [Thread-302524] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:59:07.978 [DEBUG] [Thread-302524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:59:07.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:59:07.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:59:07.983 [DEBUG] [Thread-302524] [transport.py] [_log()] userauth is OK
2025-12-24T12:59:07.983 [DEBUG] [Thread-302524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:59:07.983 [DEBUG] [Thread-302524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:59:07.983 [DEBUG] [Thread-302524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:59:07.983 [DEBUG] [Thread-302524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:59:08.000 [INFO] [Thread-302524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:59:08.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:59:08.629 [DEBUG] [Thread-302524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:59:08.630 [DEBUG] [Thread-302524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:59:08.631 [DEBUG] [Thread-302524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:59:08.671 [DEBUG] [Thread-302524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:59:08.671 [DEBUG] [Thread-302524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:59:08.674 [DEBUG] [Thread-302524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:59:08.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:59:08.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:59:08.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:59:08.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:59:08.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:59:08.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:59:08.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:59:08.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:59:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:59:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:59:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:59:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:59:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:59:08.710 [DEBUG] [Thread-302524] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:59:08.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:59:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:59:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:59:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:59:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:59:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:58:41', tmtdew=18.67, humidity=29.25, cloud=0.0, wind=6.27, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:59:08.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:59:08.815 [DEBUG] [Thread-302527] [transport.py] [_log()] starting thread (client mode): 0xf57ab610
2025-12-24T12:59:08.815 [DEBUG] [Thread-302527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:59:08.831 [DEBUG] [Thread-302527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:59:08.831 [INFO] [Thread-302527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:59:08.841 [DEBUG] [Thread-302527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:59:08.841 [DEBUG] [Thread-302527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:59:08.841 [DEBUG] [Thread-302527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:59:08.841 [DEBUG] [Thread-302527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] client lang: <none>
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] server lang: <none>
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] kex follows: False
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:59:08.842 [DEBUG] [Thread-302527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:59:08.843 [DEBUG] [Thread-302527] [transport.py] [_log()] Compression: none
2025-12-24T12:59:08.843 [DEBUG] [Thread-302527] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:59:08.900 [DEBUG] [Thread-302527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:59:08.900 [DEBUG] [Thread-302527] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:59:08.900 [DEBUG] [Thread-302527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:59:08.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:59:08.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:59:08.960 [DEBUG] [Thread-302527] [transport.py] [_log()] userauth is OK
2025-12-24T12:59:08.960 [DEBUG] [Thread-302527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:59:08.960 [DEBUG] [Thread-302527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:59:08.961 [DEBUG] [Thread-302527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:59:08.961 [DEBUG] [Thread-302527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:59:08.988 [INFO] [Thread-302527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:59:08.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:59:08.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:59:09.863 [DEBUG] [Thread-302527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:59:09.863 [DEBUG] [Thread-302527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:59:09.907 [DEBUG] [Thread-302527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:59:09.907 [DEBUG] [Thread-302527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:59:09.914 [DEBUG] [Thread-302527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:59:09.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:59:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:59:09.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T12:59:09.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:59:09.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:59:09.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:59:09.961 [DEBUG] [Thread-302527] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:59:13.256 [DEBUG] [Thread-302529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:59:15.466 [DEBUG] [Thread-302530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:59:28.430 [DEBUG] [Thread-302531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:59:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T12:59:39.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T12:59:40.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
2025-12-24T12:59:41.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 59, 14), 18.82, 28.99, 0.0, 7.82, 21.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T12:59:41.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:59:14
2025-12-24T12:59:41.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T12:59:41.497 [DEBUG] [Thread-302532] [transport.py] [_log()] starting thread (client mode): 0xf5770520
2025-12-24T12:59:41.498 [DEBUG] [Thread-302532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:59:41.513 [DEBUG] [Thread-302532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T12:59:41.513 [INFO] [Thread-302532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T12:59:41.519 [DEBUG] [Thread-302532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:59:41.520 [DEBUG] [Thread-302532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T12:59:41.520 [DEBUG] [Thread-302532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:59:41.520 [DEBUG] [Thread-302532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:59:41.520 [DEBUG] [Thread-302532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:59:41.520 [DEBUG] [Thread-302532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:59:41.520 [DEBUG] [Thread-302532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:59:41.520 [DEBUG] [Thread-302532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:59:41.521 [DEBUG] [Thread-302532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:59:41.521 [DEBUG] [Thread-302532] [transport.py] [_log()] client lang: <none>
2025-12-24T12:59:41.521 [DEBUG] [Thread-302532] [transport.py] [_log()] server lang: <none>
2025-12-24T12:59:41.521 [DEBUG] [Thread-302532] [transport.py] [_log()] kex follows: False
2025-12-24T12:59:41.521 [DEBUG] [Thread-302532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:59:41.522 [DEBUG] [Thread-302532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:59:41.522 [DEBUG] [Thread-302532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:59:41.523 [DEBUG] [Thread-302532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:59:41.523 [DEBUG] [Thread-302532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:59:41.523 [DEBUG] [Thread-302532] [transport.py] [_log()] Compression: none
2025-12-24T12:59:41.523 [DEBUG] [Thread-302532] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:59:41.561 [DEBUG] [Thread-302532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:59:41.566 [DEBUG] [Thread-302532] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:59:41.568 [DEBUG] [Thread-302532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T12:59:41.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T12:59:41.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:59:41.576 [DEBUG] [Thread-302532] [transport.py] [_log()] userauth is OK
2025-12-24T12:59:41.576 [DEBUG] [Thread-302532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:59:41.576 [DEBUG] [Thread-302532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:59:41.576 [DEBUG] [Thread-302532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T12:59:41.576 [DEBUG] [Thread-302532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:59:41.604 [INFO] [Thread-302532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:59:41.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:59:42.366 [DEBUG] [Thread-302532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:59:42.376 [DEBUG] [Thread-302532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:59:42.377 [DEBUG] [Thread-302532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T12:59:42.408 [DEBUG] [Thread-302532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:59:42.409 [DEBUG] [Thread-302532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:59:42.414 [DEBUG] [Thread-302532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:59:42.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:59:42.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T12:59:42.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T12:59:42.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T12:59:42.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:59:42.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T12:59:42.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:59:42.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:59:42.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T12:59:42.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T12:59:42.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T12:59:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T12:59:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T12:59:42.466 [DEBUG] [Thread-302532] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:59:42.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T12:59:42.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T12:59:42.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T12:59:42.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T12:59:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T12:59:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:59:14', tmtdew=18.82, humidity=28.99, cloud=0.0, wind=7.82, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T12:59:42.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T12:59:42.722 [DEBUG] [Thread-302535] [transport.py] [_log()] starting thread (client mode): 0xf57739d0
2025-12-24T12:59:42.722 [DEBUG] [Thread-302535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T12:59:42.736 [DEBUG] [Thread-302535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T12:59:42.736 [INFO] [Thread-302535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T12:59:42.744 [DEBUG] [Thread-302535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T12:59:42.745 [DEBUG] [Thread-302535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T12:59:42.745 [DEBUG] [Thread-302535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T12:59:42.745 [DEBUG] [Thread-302535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:59:42.745 [DEBUG] [Thread-302535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T12:59:42.745 [DEBUG] [Thread-302535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:59:42.745 [DEBUG] [Thread-302535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T12:59:42.745 [DEBUG] [Thread-302535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T12:59:42.746 [DEBUG] [Thread-302535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T12:59:42.746 [DEBUG] [Thread-302535] [transport.py] [_log()] client lang: <none>
2025-12-24T12:59:42.746 [DEBUG] [Thread-302535] [transport.py] [_log()] server lang: <none>
2025-12-24T12:59:42.746 [DEBUG] [Thread-302535] [transport.py] [_log()] kex follows: False
2025-12-24T12:59:42.746 [DEBUG] [Thread-302535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T12:59:42.746 [DEBUG] [Thread-302535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T12:59:42.746 [DEBUG] [Thread-302535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T12:59:42.747 [DEBUG] [Thread-302535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T12:59:42.747 [DEBUG] [Thread-302535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T12:59:42.747 [DEBUG] [Thread-302535] [transport.py] [_log()] Compression: none
2025-12-24T12:59:42.747 [DEBUG] [Thread-302535] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T12:59:42.804 [DEBUG] [Thread-302535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T12:59:42.805 [DEBUG] [Thread-302535] [transport.py] [_log()] Switch to new keys ...
2025-12-24T12:59:42.806 [DEBUG] [Thread-302535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T12:59:42.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T12:59:42.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T12:59:42.860 [DEBUG] [Thread-302535] [transport.py] [_log()] userauth is OK
2025-12-24T12:59:42.861 [DEBUG] [Thread-302535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T12:59:42.861 [DEBUG] [Thread-302535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T12:59:42.861 [DEBUG] [Thread-302535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T12:59:42.861 [DEBUG] [Thread-302535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T12:59:42.884 [INFO] [Thread-302535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T12:59:42.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T12:59:42.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T12:59:43.503 [DEBUG] [Thread-302537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T12:59:43.747 [DEBUG] [Thread-302535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T12:59:43.747 [DEBUG] [Thread-302535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T12:59:43.786 [DEBUG] [Thread-302535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T12:59:43.786 [DEBUG] [Thread-302535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T12:59:43.795 [DEBUG] [Thread-302535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T12:59:43.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T12:59:43.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T12:59:43.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
2025-12-24T12:59:43.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T12:59:43.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T12:59:43.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T12:59:43.840 [DEBUG] [Thread-302535] [transport.py] [_log()] EOF in transport thread
2025-12-24T12:59:58.600 [DEBUG] [Thread-302538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:00:01.714 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:00:01.715 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:00:13.721 [DEBUG] [Thread-302539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:00:13.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:00:13.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:00:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:00:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 12, 59, 47), 18.65, 29.44, 0.0, 7.8, 21.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:00:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 12:59:47
2025-12-24T13:00:14.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:00:15.128 [DEBUG] [Thread-302540] [transport.py] [_log()] starting thread (client mode): 0xf57a9cc0
2025-12-24T13:00:15.129 [DEBUG] [Thread-302540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:00:15.133 [DEBUG] [Thread-302540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:00:15.134 [INFO] [Thread-302540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] client lang: <none>
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] server lang: <none>
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] kex follows: False
2025-12-24T13:00:15.137 [DEBUG] [Thread-302540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:00:15.138 [DEBUG] [Thread-302540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:00:15.138 [DEBUG] [Thread-302540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:00:15.138 [DEBUG] [Thread-302540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:00:15.138 [DEBUG] [Thread-302540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:00:15.138 [DEBUG] [Thread-302540] [transport.py] [_log()] Compression: none
2025-12-24T13:00:15.138 [DEBUG] [Thread-302540] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:00:15.169 [DEBUG] [Thread-302540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:00:15.171 [DEBUG] [Thread-302540] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:00:15.173 [DEBUG] [Thread-302540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:00:15.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:00:15.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:00:15.176 [DEBUG] [Thread-302540] [transport.py] [_log()] userauth is OK
2025-12-24T13:00:15.176 [DEBUG] [Thread-302540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:00:15.176 [DEBUG] [Thread-302540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:00:15.176 [DEBUG] [Thread-302540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:00:15.176 [DEBUG] [Thread-302540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:00:15.193 [INFO] [Thread-302540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:00:15.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:00:15.736 [DEBUG] [Thread-302542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:00:15.836 [DEBUG] [Thread-302540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:00:15.836 [DEBUG] [Thread-302540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:00:15.836 [DEBUG] [Thread-302540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:00:15.876 [DEBUG] [Thread-302540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:00:15.877 [DEBUG] [Thread-302540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:00:15.879 [DEBUG] [Thread-302540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:00:15.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:00:15.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:00:15.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:00:15.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:00:15.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:00:15.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:00:15.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:00:15.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:00:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:00:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.454583 -999.00  +23.50  24.70     31   +5.70 1 2 1 1 1   888    0 19.53 53.45 ----- 24.7 24.7 128.4 29.0 32.1 -21.8 31.2 -23.8 31.6 -20.4 32.5 -21.2
2025-12-24T13:00:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:00:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:00:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.454583
2025-12-24T13:00:15.906 [DEBUG] [Thread-302540] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:00:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:00:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:00:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:00:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:00:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:00:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T12:59:47', tmtdew=18.65, humidity=29.44, cloud=0.0, wind=7.8, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T10:54:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:00:15.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:00:16.005 [DEBUG] [Thread-302544] [transport.py] [_log()] starting thread (client mode): 0xf81f1390
2025-12-24T13:00:16.005 [DEBUG] [Thread-302544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:00:16.020 [DEBUG] [Thread-302544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:00:16.021 [INFO] [Thread-302544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:00:16.028 [DEBUG] [Thread-302544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] client lang: <none>
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] server lang: <none>
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] kex follows: False
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] Compression: none
2025-12-24T13:00:16.029 [DEBUG] [Thread-302544] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:00:16.084 [DEBUG] [Thread-302544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:00:16.085 [DEBUG] [Thread-302544] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:00:16.085 [DEBUG] [Thread-302544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:00:16.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:00:16.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:00:16.141 [DEBUG] [Thread-302544] [transport.py] [_log()] userauth is OK
2025-12-24T13:00:16.141 [DEBUG] [Thread-302544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:00:16.141 [DEBUG] [Thread-302544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:00:16.141 [DEBUG] [Thread-302544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:00:16.141 [DEBUG] [Thread-302544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:00:16.163 [INFO] [Thread-302544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:00:16.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:00:16.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:00:17.028 [DEBUG] [Thread-302544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:00:17.028 [DEBUG] [Thread-302544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:00:17.075 [DEBUG] [Thread-302544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:00:17.075 [DEBUG] [Thread-302544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:00:17.084 [DEBUG] [Thread-302544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:00:17.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:00:17.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:00:17.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:00:17.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:00:17.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:00:17.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:00:17.117 [DEBUG] [Thread-302544] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:00:28.867 [DEBUG] [Thread-302546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:00:43.995 [DEBUG] [Thread-302547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:00:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:00:47.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:00:47.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:00:48.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 0, 19), 18.76, 29.26, 0.0, 8.19, 21.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:00:48.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:00:19
2025-12-24T13:00:48.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:00:48.833 [DEBUG] [Thread-302548] [transport.py] [_log()] starting thread (client mode): 0xf81c1900
2025-12-24T13:00:48.833 [DEBUG] [Thread-302548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:00:48.846 [DEBUG] [Thread-302548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:00:48.847 [INFO] [Thread-302548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:00:48.850 [DEBUG] [Thread-302548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:00:48.850 [DEBUG] [Thread-302548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:00:48.850 [DEBUG] [Thread-302548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:00:48.850 [DEBUG] [Thread-302548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:00:48.850 [DEBUG] [Thread-302548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:00:48.850 [DEBUG] [Thread-302548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] client lang: <none>
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] server lang: <none>
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] kex follows: False
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:00:48.851 [DEBUG] [Thread-302548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:00:48.852 [DEBUG] [Thread-302548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:00:48.852 [DEBUG] [Thread-302548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:00:48.852 [DEBUG] [Thread-302548] [transport.py] [_log()] Compression: none
2025-12-24T13:00:48.852 [DEBUG] [Thread-302548] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:00:48.879 [DEBUG] [Thread-302548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:00:48.882 [DEBUG] [Thread-302548] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:00:48.883 [DEBUG] [Thread-302548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:00:48.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:00:48.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:00:48.921 [DEBUG] [Thread-302548] [transport.py] [_log()] userauth is OK
2025-12-24T13:00:48.921 [DEBUG] [Thread-302548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:00:48.922 [DEBUG] [Thread-302548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:00:48.922 [DEBUG] [Thread-302548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:00:48.922 [DEBUG] [Thread-302548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:00:48.958 [INFO] [Thread-302548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:00:48.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:00:49.706 [DEBUG] [Thread-302548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:00:49.707 [DEBUG] [Thread-302548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:00:49.716 [DEBUG] [Thread-302548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:00:49.747 [DEBUG] [Thread-302548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:00:49.747 [DEBUG] [Thread-302548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:00:49.751 [DEBUG] [Thread-302548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:00:49.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:00:49.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:00:49.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:00:49.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:00:49.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:00:49.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:00:49.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:00:49.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:00:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:00:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.458402 -999.00  +23.00  12.41     32   +5.70 1 1 1 1 1   888    0 17.73 11.14 NA 12.4 12.4 158.2 13.6 30.5 -22.9 30.1 -27.3 30.5 -23.9 31.1 -22.4
2025-12-24T13:00:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:00:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:00:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.458402
2025-12-24T13:00:49.786 [DEBUG] [Thread-302548] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:00:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:00:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:00:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:00:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:00:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:00:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:00:19', tmtdew=18.76, humidity=29.26, cloud=0.0, wind=8.19, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:00:05.933', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:00:49.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:00:49.893 [DEBUG] [Thread-302551] [transport.py] [_log()] starting thread (client mode): 0xf81c3340
2025-12-24T13:00:49.894 [DEBUG] [Thread-302551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:00:49.908 [DEBUG] [Thread-302551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:00:49.908 [INFO] [Thread-302551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:00:49.916 [DEBUG] [Thread-302551] [transport.py] [_log()] client lang: <none>
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] server lang: <none>
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] kex follows: False
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] Compression: none
2025-12-24T13:00:49.917 [DEBUG] [Thread-302551] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:00:49.976 [DEBUG] [Thread-302551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:00:49.976 [DEBUG] [Thread-302551] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:00:49.976 [DEBUG] [Thread-302551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:00:49.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:00:49.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:00:50.037 [DEBUG] [Thread-302551] [transport.py] [_log()] userauth is OK
2025-12-24T13:00:50.037 [DEBUG] [Thread-302551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:00:50.037 [DEBUG] [Thread-302551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:00:50.037 [DEBUG] [Thread-302551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:00:50.037 [DEBUG] [Thread-302551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:00:50.053 [INFO] [Thread-302551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:00:50.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:00:50.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:00:50.924 [DEBUG] [Thread-302551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:00:50.924 [DEBUG] [Thread-302551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:00:50.963 [DEBUG] [Thread-302551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:00:50.963 [DEBUG] [Thread-302551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:00:50.972 [DEBUG] [Thread-302551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:00:50.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:00:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:00:50.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:00:50.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:00:50.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:00:50.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:00:51.004 [DEBUG] [Thread-302551] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:00:59.049 [DEBUG] [Thread-302553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:01:01.868 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:01:01.871 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:01:14.170 [DEBUG] [Thread-302554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:01:16.025 [DEBUG] [Thread-302555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:01:21.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:01:21.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:01:21.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:01:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 0, 53), 19.07, 28.64, 0.0, 13.83, 22.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:01:22.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:00:53
2025-12-24T13:01:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:01:22.838 [DEBUG] [Thread-302556] [transport.py] [_log()] starting thread (client mode): 0xf81c1d80
2025-12-24T13:01:22.839 [DEBUG] [Thread-302556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:01:22.848 [DEBUG] [Thread-302556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:01:22.848 [INFO] [Thread-302556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] client lang: <none>
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] server lang: <none>
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] kex follows: False
2025-12-24T13:01:22.856 [DEBUG] [Thread-302556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:01:22.857 [DEBUG] [Thread-302556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:01:22.857 [DEBUG] [Thread-302556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:01:22.857 [DEBUG] [Thread-302556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:01:22.857 [DEBUG] [Thread-302556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:01:22.857 [DEBUG] [Thread-302556] [transport.py] [_log()] Compression: none
2025-12-24T13:01:22.857 [DEBUG] [Thread-302556] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:01:22.896 [DEBUG] [Thread-302556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:01:22.902 [DEBUG] [Thread-302556] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:01:22.904 [DEBUG] [Thread-302556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:01:22.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:01:22.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:01:22.910 [DEBUG] [Thread-302556] [transport.py] [_log()] userauth is OK
2025-12-24T13:01:22.911 [DEBUG] [Thread-302556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:01:22.911 [DEBUG] [Thread-302556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:01:22.911 [DEBUG] [Thread-302556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:01:22.911 [DEBUG] [Thread-302556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:01:22.949 [INFO] [Thread-302556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:01:22.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:01:23.593 [DEBUG] [Thread-302556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:01:23.593 [DEBUG] [Thread-302556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:01:23.594 [DEBUG] [Thread-302556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:01:23.634 [DEBUG] [Thread-302556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:01:23.634 [DEBUG] [Thread-302556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:01:23.637 [DEBUG] [Thread-302556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:01:23.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:01:23.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:01:23.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:01:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:01:23.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:01:23.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:01:23.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:01:23.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:01:23.659 [DEBUG] [Thread-302556] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:01:23.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:01:23.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.458750 -999.00  +23.00  18.81     32   +5.80 1 1 1 1 1   888    0 17.81 11.47 NA 18.8 18.8 174.2 22.2 30.4 -24.6 29.9 -25.6 30.3 -25.0 31.0 -23.9
2025-12-24T13:01:23.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:01:23.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:01:23.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.458750
2025-12-24T13:01:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:01:23.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:01:23.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:01:23.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:01:23.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:01:23.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:00:53', tmtdew=19.07, humidity=28.64, cloud=0.0, wind=13.83, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:00:36.000', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:01:23.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:01:29.242 [DEBUG] [Thread-302559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:01:44.463 [DEBUG] [Thread-302560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:01:59.570 [DEBUG] [Thread-302561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:02:02.011 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:02:02.012 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:02:14.639 [DEBUG] [Thread-302562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:02:16.329 [DEBUG] [Thread-302563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:02:29.784 [DEBUG] [Thread-302564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:02:44.863 [DEBUG] [Thread-302565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:02:59.900 [DEBUG] [Thread-302566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:03:02.154 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:03:02.156 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:03:15.015 [DEBUG] [Thread-302567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:03:16.576 [DEBUG] [Thread-302568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:03:30.112 [DEBUG] [Thread-302569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:03:38.991 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T13:03:45.203 [DEBUG] [Thread-302570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:04:00.320 [DEBUG] [Thread-302571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:04:02.303 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:04:02.304 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:04:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:04:09.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:04:09.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:04:10.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 3, 38), 19.65, 28.0, 0.0, 11.52, 22.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:04:10.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:03:38
2025-12-24T13:04:10.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:04:10.660 [DEBUG] [Thread-302572] [transport.py] [_log()] starting thread (client mode): 0xf57aa650
2025-12-24T13:04:10.660 [DEBUG] [Thread-302572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:04:10.671 [DEBUG] [Thread-302572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:04:10.671 [INFO] [Thread-302572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] client lang: <none>
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] server lang: <none>
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] kex follows: False
2025-12-24T13:04:10.676 [DEBUG] [Thread-302572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:04:10.677 [DEBUG] [Thread-302572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:04:10.677 [DEBUG] [Thread-302572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:04:10.677 [DEBUG] [Thread-302572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:04:10.677 [DEBUG] [Thread-302572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:04:10.677 [DEBUG] [Thread-302572] [transport.py] [_log()] Compression: none
2025-12-24T13:04:10.677 [DEBUG] [Thread-302572] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:04:10.713 [DEBUG] [Thread-302572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:04:10.718 [DEBUG] [Thread-302572] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:04:10.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:04:10.721 [DEBUG] [Thread-302572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:04:10.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:04:10.725 [DEBUG] [Thread-302572] [transport.py] [_log()] userauth is OK
2025-12-24T13:04:10.725 [DEBUG] [Thread-302572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:04:10.725 [DEBUG] [Thread-302572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:04:10.725 [DEBUG] [Thread-302572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:04:10.725 [DEBUG] [Thread-302572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:04:10.752 [INFO] [Thread-302572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:04:10.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:04:11.403 [DEBUG] [Thread-302572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:04:11.403 [DEBUG] [Thread-302572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:04:11.413 [DEBUG] [Thread-302572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:04:11.445 [DEBUG] [Thread-302572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:04:11.445 [DEBUG] [Thread-302572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:04:11.447 [DEBUG] [Thread-302572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:04:11.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:04:11.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:04:11.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:04:11.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:04:11.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:04:11.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:04:11.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:04:11.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:04:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:04:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.460833 -999.00  +22.30   9.73     34   +5.70 1 2 1 1 1   888    0 17.54 8.01 ----- 9.7 9.7 80.4 11.9 30.6 -17.7 30.4 -19.7 30.9 -16.5 31.4 -16.4
2025-12-24T13:04:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:04:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:04:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.460833
2025-12-24T13:04:11.478 [DEBUG] [Thread-302572] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:04:11.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:04:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:04:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:04:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:04:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:04:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:03:38', tmtdew=19.65, humidity=28.0, cloud=0.0, wind=11.52, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:03:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:04:11.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:04:11.594 [DEBUG] [Thread-302575] [transport.py] [_log()] starting thread (client mode): 0xf81c0c70
2025-12-24T13:04:11.594 [DEBUG] [Thread-302575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:04:11.609 [DEBUG] [Thread-302575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:04:11.610 [INFO] [Thread-302575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:04:11.617 [DEBUG] [Thread-302575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:04:11.617 [DEBUG] [Thread-302575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] client lang: <none>
2025-12-24T13:04:11.618 [DEBUG] [Thread-302575] [transport.py] [_log()] server lang: <none>
2025-12-24T13:04:11.619 [DEBUG] [Thread-302575] [transport.py] [_log()] kex follows: False
2025-12-24T13:04:11.619 [DEBUG] [Thread-302575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:04:11.619 [DEBUG] [Thread-302575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:04:11.619 [DEBUG] [Thread-302575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:04:11.619 [DEBUG] [Thread-302575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:04:11.619 [DEBUG] [Thread-302575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:04:11.620 [DEBUG] [Thread-302575] [transport.py] [_log()] Compression: none
2025-12-24T13:04:11.620 [DEBUG] [Thread-302575] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:04:11.675 [DEBUG] [Thread-302575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:04:11.676 [DEBUG] [Thread-302575] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:04:11.676 [DEBUG] [Thread-302575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:04:11.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:04:11.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:04:11.736 [DEBUG] [Thread-302575] [transport.py] [_log()] userauth is OK
2025-12-24T13:04:11.736 [DEBUG] [Thread-302575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:04:11.737 [DEBUG] [Thread-302575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:04:11.737 [DEBUG] [Thread-302575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:04:11.737 [DEBUG] [Thread-302575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:04:11.753 [INFO] [Thread-302575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:04:11.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:04:11.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:04:12.573 [DEBUG] [Thread-302575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:04:12.573 [DEBUG] [Thread-302575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:04:12.621 [DEBUG] [Thread-302575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:04:12.621 [DEBUG] [Thread-302575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:04:12.629 [DEBUG] [Thread-302575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:04:12.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:04:12.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:04:12.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:04:12.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:04:12.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:04:12.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:04:12.664 [DEBUG] [Thread-302575] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:04:15.395 [DEBUG] [Thread-302577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:04:16.808 [DEBUG] [Thread-302578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:04:30.563 [DEBUG] [Thread-302579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:04:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:04:42.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:04:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:04:43.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 4, 11), 19.47, 28.25, 0.0, 7.68, 22.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:04:43.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:04:11
2025-12-24T13:04:43.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:04:44.146 [DEBUG] [Thread-302580] [transport.py] [_log()] starting thread (client mode): 0xf57bee60
2025-12-24T13:04:44.147 [DEBUG] [Thread-302580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:04:44.152 [DEBUG] [Thread-302580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:04:44.152 [INFO] [Thread-302580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:04:44.156 [DEBUG] [Thread-302580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:04:44.156 [DEBUG] [Thread-302580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:04:44.156 [DEBUG] [Thread-302580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:04:44.156 [DEBUG] [Thread-302580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:04:44.156 [DEBUG] [Thread-302580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:04:44.156 [DEBUG] [Thread-302580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:04:44.156 [DEBUG] [Thread-302580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:04:44.156 [DEBUG] [Thread-302580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:04:44.157 [DEBUG] [Thread-302580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:04:44.157 [DEBUG] [Thread-302580] [transport.py] [_log()] client lang: <none>
2025-12-24T13:04:44.157 [DEBUG] [Thread-302580] [transport.py] [_log()] server lang: <none>
2025-12-24T13:04:44.157 [DEBUG] [Thread-302580] [transport.py] [_log()] kex follows: False
2025-12-24T13:04:44.157 [DEBUG] [Thread-302580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:04:44.157 [DEBUG] [Thread-302580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:04:44.157 [DEBUG] [Thread-302580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:04:44.158 [DEBUG] [Thread-302580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:04:44.158 [DEBUG] [Thread-302580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:04:44.158 [DEBUG] [Thread-302580] [transport.py] [_log()] Compression: none
2025-12-24T13:04:44.158 [DEBUG] [Thread-302580] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:04:44.190 [DEBUG] [Thread-302580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:04:44.193 [DEBUG] [Thread-302580] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:04:44.195 [DEBUG] [Thread-302580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:04:44.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:04:44.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:04:44.199 [DEBUG] [Thread-302580] [transport.py] [_log()] userauth is OK
2025-12-24T13:04:44.199 [DEBUG] [Thread-302580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:04:44.200 [DEBUG] [Thread-302580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:04:44.200 [DEBUG] [Thread-302580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:04:44.200 [DEBUG] [Thread-302580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:04:44.225 [INFO] [Thread-302580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:04:44.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:04:44.869 [DEBUG] [Thread-302580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:04:44.870 [DEBUG] [Thread-302580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:04:44.880 [DEBUG] [Thread-302580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:04:44.911 [DEBUG] [Thread-302580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:04:44.911 [DEBUG] [Thread-302580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:04:44.915 [DEBUG] [Thread-302580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:04:44.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:04:44.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:04:44.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:04:44.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:04:44.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:04:44.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:04:44.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:04:44.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:04:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:04:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.461180 -999.00  +22.50   6.72     33   +5.80 1 2 1 1 1   888    0 17.55 4.08 ----- 6.7 6.7 339.6 8.4 30.7 -20.8 30.6 -20.1 31.1 -17.1 31.6 -16.8
2025-12-24T13:04:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:04:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:04:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.461180
2025-12-24T13:04:44.948 [DEBUG] [Thread-302580] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:04:44.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:04:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:04:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:04:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:04:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:04:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:04:11', tmtdew=19.47, humidity=28.25, cloud=0.0, wind=7.68, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:04:05.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:04:45.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:04:45.073 [DEBUG] [Thread-302583] [transport.py] [_log()] starting thread (client mode): 0xf57aba90
2025-12-24T13:04:45.074 [DEBUG] [Thread-302583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:04:45.091 [DEBUG] [Thread-302583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:04:45.091 [INFO] [Thread-302583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:04:45.099 [DEBUG] [Thread-302583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:04:45.099 [DEBUG] [Thread-302583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:04:45.099 [DEBUG] [Thread-302583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:04:45.099 [DEBUG] [Thread-302583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:04:45.099 [DEBUG] [Thread-302583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:04:45.099 [DEBUG] [Thread-302583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] client lang: <none>
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] server lang: <none>
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] kex follows: False
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:04:45.100 [DEBUG] [Thread-302583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:04:45.101 [DEBUG] [Thread-302583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:04:45.101 [DEBUG] [Thread-302583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:04:45.101 [DEBUG] [Thread-302583] [transport.py] [_log()] Compression: none
2025-12-24T13:04:45.101 [DEBUG] [Thread-302583] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:04:45.162 [DEBUG] [Thread-302583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:04:45.162 [DEBUG] [Thread-302583] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:04:45.162 [DEBUG] [Thread-302583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:04:45.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:04:45.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:04:45.218 [DEBUG] [Thread-302583] [transport.py] [_log()] userauth is OK
2025-12-24T13:04:45.218 [DEBUG] [Thread-302583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:04:45.218 [DEBUG] [Thread-302583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:04:45.218 [DEBUG] [Thread-302583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:04:45.218 [DEBUG] [Thread-302583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:04:45.233 [INFO] [Thread-302583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:04:45.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:04:45.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:04:45.630 [DEBUG] [Thread-302585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:04:46.129 [DEBUG] [Thread-302583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:04:46.129 [DEBUG] [Thread-302583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:04:46.177 [DEBUG] [Thread-302583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:04:46.177 [DEBUG] [Thread-302583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:04:46.185 [DEBUG] [Thread-302583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:04:46.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:04:46.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:04:46.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:04:46.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:04:46.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:04:46.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:04:46.218 [DEBUG] [Thread-302583] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:05:00.727 [DEBUG] [Thread-302586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:05:02.446 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:05:02.448 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:05:15.792 [DEBUG] [Thread-302587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:05:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:05:16.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:05:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:05:17.071 [DEBUG] [Thread-302588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:05:17.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 4, 44), 19.46, 27.81, 0.0, 7.96, 22.35, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:05:17.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:04:44
2025-12-24T13:05:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:05:17.510 [DEBUG] [Thread-302589] [transport.py] [_log()] starting thread (client mode): 0xf574e6b0
2025-12-24T13:05:17.510 [DEBUG] [Thread-302589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:05:17.522 [DEBUG] [Thread-302589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:05:17.522 [INFO] [Thread-302589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] client lang: <none>
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] server lang: <none>
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] kex follows: False
2025-12-24T13:05:17.527 [DEBUG] [Thread-302589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:05:17.528 [DEBUG] [Thread-302589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:05:17.528 [DEBUG] [Thread-302589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:05:17.528 [DEBUG] [Thread-302589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:05:17.528 [DEBUG] [Thread-302589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:05:17.528 [DEBUG] [Thread-302589] [transport.py] [_log()] Compression: none
2025-12-24T13:05:17.528 [DEBUG] [Thread-302589] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:05:17.561 [DEBUG] [Thread-302589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:05:17.564 [DEBUG] [Thread-302589] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:05:17.566 [DEBUG] [Thread-302589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:05:17.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:05:17.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:05:17.570 [DEBUG] [Thread-302589] [transport.py] [_log()] userauth is OK
2025-12-24T13:05:17.570 [DEBUG] [Thread-302589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:05:17.570 [DEBUG] [Thread-302589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:05:17.570 [DEBUG] [Thread-302589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:05:17.571 [DEBUG] [Thread-302589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:05:17.592 [INFO] [Thread-302589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:05:17.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:05:18.237 [DEBUG] [Thread-302589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:05:18.237 [DEBUG] [Thread-302589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:05:18.237 [DEBUG] [Thread-302589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:05:18.278 [DEBUG] [Thread-302589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:05:18.278 [DEBUG] [Thread-302589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:05:18.280 [DEBUG] [Thread-302589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:05:18.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:05:18.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:05:18.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:05:18.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:05:18.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:05:18.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:05:18.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:05:18.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:05:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:05:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.461528 -999.00  +22.50  10.27     33   +5.70 1 2 1 1 1   888    0 17.75 -0.70 ----- 10.3 10.3 167.6 17.6 31.2 -17.2 30.9 -20.3 31.3 -17.5 31.9 -15.5
2025-12-24T13:05:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:05:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:05:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.461528
2025-12-24T13:05:18.308 [DEBUG] [Thread-302589] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:05:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:05:18.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:05:18.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:05:18.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:05:18.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:05:18.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:04:44', tmtdew=19.46, humidity=27.81, cloud=0.0, wind=7.96, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:04:36.019', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:05:18.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:05:18.408 [DEBUG] [Thread-302592] [transport.py] [_log()] starting thread (client mode): 0xf572f700
2025-12-24T13:05:18.409 [DEBUG] [Thread-302592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:05:18.424 [DEBUG] [Thread-302592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:05:18.424 [INFO] [Thread-302592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:05:18.431 [DEBUG] [Thread-302592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:05:18.431 [DEBUG] [Thread-302592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:05:18.431 [DEBUG] [Thread-302592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:05:18.431 [DEBUG] [Thread-302592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:05:18.431 [DEBUG] [Thread-302592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] client lang: <none>
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] server lang: <none>
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] kex follows: False
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] Compression: none
2025-12-24T13:05:18.432 [DEBUG] [Thread-302592] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:05:18.488 [DEBUG] [Thread-302592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:05:18.488 [DEBUG] [Thread-302592] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:05:18.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:05:18.489 [DEBUG] [Thread-302592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:05:18.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:05:18.545 [DEBUG] [Thread-302592] [transport.py] [_log()] userauth is OK
2025-12-24T13:05:18.545 [DEBUG] [Thread-302592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:05:18.545 [DEBUG] [Thread-302592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:05:18.545 [DEBUG] [Thread-302592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:05:18.545 [DEBUG] [Thread-302592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:05:18.560 [INFO] [Thread-302592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:05:18.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:05:18.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:05:19.416 [DEBUG] [Thread-302592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:05:19.416 [DEBUG] [Thread-302592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:05:19.464 [DEBUG] [Thread-302592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:05:19.464 [DEBUG] [Thread-302592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:05:19.472 [DEBUG] [Thread-302592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:05:19.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:05:19.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:05:19.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:05:19.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:05:19.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:05:19.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:05:19.505 [DEBUG] [Thread-302592] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:05:30.875 [DEBUG] [Thread-302594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:05:45.994 [DEBUG] [Thread-302595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:05:49.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:05:49.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:05:49.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:05:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 5, 17), 18.96, 28.64, 0.0, 11.15, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:05:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:05:17
2025-12-24T13:05:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:05:51.237 [DEBUG] [Thread-302596] [transport.py] [_log()] starting thread (client mode): 0xf81e7f40
2025-12-24T13:05:51.238 [DEBUG] [Thread-302596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:05:51.248 [DEBUG] [Thread-302596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:05:51.248 [INFO] [Thread-302596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:05:51.252 [DEBUG] [Thread-302596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] client lang: <none>
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] server lang: <none>
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] kex follows: False
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] Compression: none
2025-12-24T13:05:51.253 [DEBUG] [Thread-302596] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:05:51.286 [DEBUG] [Thread-302596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:05:51.290 [DEBUG] [Thread-302596] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:05:51.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:05:51.292 [DEBUG] [Thread-302596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:05:51.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:05:51.295 [DEBUG] [Thread-302596] [transport.py] [_log()] userauth is OK
2025-12-24T13:05:51.295 [DEBUG] [Thread-302596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:05:51.295 [DEBUG] [Thread-302596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:05:51.295 [DEBUG] [Thread-302596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:05:51.295 [DEBUG] [Thread-302596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:05:51.313 [INFO] [Thread-302596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:05:51.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:05:51.975 [DEBUG] [Thread-302596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:05:51.975 [DEBUG] [Thread-302596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:05:51.976 [DEBUG] [Thread-302596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:05:52.017 [DEBUG] [Thread-302596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:05:52.017 [DEBUG] [Thread-302596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:05:52.019 [DEBUG] [Thread-302596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:05:52.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:05:52.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:05:52.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:05:52.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:05:52.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:05:52.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:05:52.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:05:52.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:05:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:05:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.461874 -999.00  +22.70  12.66     33   +5.80 1 2 1 1 1   888    0 17.73 -5.86 ----- 12.7 12.7 122.2 15.7 31.4 -17.8 31.1 -19.4 31.6 -18.0 32.1 -17.1
2025-12-24T13:05:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:05:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:05:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.461874
2025-12-24T13:05:52.048 [DEBUG] [Thread-302596] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:05:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:05:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:05:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:05:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:05:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:05:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:05:17', tmtdew=18.96, humidity=28.64, cloud=0.0, wind=11.15, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:05:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:05:52.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:05:52.149 [DEBUG] [Thread-302599] [transport.py] [_log()] starting thread (client mode): 0xf81f0610
2025-12-24T13:05:52.149 [DEBUG] [Thread-302599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:05:52.164 [DEBUG] [Thread-302599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:05:52.164 [INFO] [Thread-302599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] client lang: <none>
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] server lang: <none>
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] kex follows: False
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] Compression: none
2025-12-24T13:05:52.172 [DEBUG] [Thread-302599] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:05:52.231 [DEBUG] [Thread-302599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:05:52.231 [DEBUG] [Thread-302599] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:05:52.231 [DEBUG] [Thread-302599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:05:52.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:05:52.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:05:52.288 [DEBUG] [Thread-302599] [transport.py] [_log()] userauth is OK
2025-12-24T13:05:52.288 [DEBUG] [Thread-302599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:05:52.288 [DEBUG] [Thread-302599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:05:52.288 [DEBUG] [Thread-302599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:05:52.288 [DEBUG] [Thread-302599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:05:52.304 [INFO] [Thread-302599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:05:52.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:05:52.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:05:53.149 [DEBUG] [Thread-302599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:05:53.149 [DEBUG] [Thread-302599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:05:53.198 [DEBUG] [Thread-302599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:05:53.198 [DEBUG] [Thread-302599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:05:53.206 [DEBUG] [Thread-302599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:05:53.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:05:53.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:05:53.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:05:53.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:05:53.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:05:53.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:05:53.240 [DEBUG] [Thread-302599] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:06:01.073 [DEBUG] [Thread-302601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:06:02.591 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:06:02.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:06:16.177 [DEBUG] [Thread-302602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:06:17.346 [DEBUG] [Thread-302603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:06:23.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:06:23.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:06:23.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:06:24.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 5, 50), 19.01, 28.69, 0.0, 12.03, 22.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:06:24.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:05:50
2025-12-24T13:06:25.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:06:25.202 [DEBUG] [Thread-302604] [transport.py] [_log()] starting thread (client mode): 0xf81c0100
2025-12-24T13:06:25.203 [DEBUG] [Thread-302604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:06:25.211 [DEBUG] [Thread-302604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:06:25.212 [INFO] [Thread-302604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:06:25.216 [DEBUG] [Thread-302604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:06:25.216 [DEBUG] [Thread-302604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:06:25.216 [DEBUG] [Thread-302604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] client lang: <none>
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] server lang: <none>
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] kex follows: False
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:06:25.217 [DEBUG] [Thread-302604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:06:25.218 [DEBUG] [Thread-302604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:06:25.218 [DEBUG] [Thread-302604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:06:25.218 [DEBUG] [Thread-302604] [transport.py] [_log()] Compression: none
2025-12-24T13:06:25.218 [DEBUG] [Thread-302604] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:06:25.250 [DEBUG] [Thread-302604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:06:25.253 [DEBUG] [Thread-302604] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:06:25.254 [DEBUG] [Thread-302604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:06:25.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:06:25.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:06:25.258 [DEBUG] [Thread-302604] [transport.py] [_log()] userauth is OK
2025-12-24T13:06:25.258 [DEBUG] [Thread-302604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:06:25.259 [DEBUG] [Thread-302604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:06:25.259 [DEBUG] [Thread-302604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:06:25.259 [DEBUG] [Thread-302604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:06:25.278 [INFO] [Thread-302604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:06:25.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:06:25.936 [DEBUG] [Thread-302604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:06:25.936 [DEBUG] [Thread-302604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:06:25.937 [DEBUG] [Thread-302604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:06:25.977 [DEBUG] [Thread-302604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:06:25.977 [DEBUG] [Thread-302604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:06:25.979 [DEBUG] [Thread-302604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:06:25.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:06:25.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:06:25.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:06:25.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:06:25.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:06:25.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:06:25.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:06:25.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:06:26.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:06:26.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.462222 -999.00  +23.10  10.27     32   +5.70 1 2 1 1 1   888    0 16.92 -10.96 ----- 10.3 10.3 115.6 16.5 31.4 -20.0 31.1 -20.8 31.6 -17.1 32.1 -19.4
2025-12-24T13:06:26.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:06:26.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:06:26.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.462222
2025-12-24T13:06:26.006 [DEBUG] [Thread-302604] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:06:26.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:06:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:06:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:06:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:06:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:06:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:05:50', tmtdew=19.01, humidity=28.69, cloud=0.0, wind=12.03, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:05:35.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:06:26.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:06:26.108 [DEBUG] [Thread-302607] [transport.py] [_log()] starting thread (client mode): 0xf57421a0
2025-12-24T13:06:26.108 [DEBUG] [Thread-302607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:06:26.122 [DEBUG] [Thread-302607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:06:26.122 [INFO] [Thread-302607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] client lang: <none>
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] server lang: <none>
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] kex follows: False
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] Compression: none
2025-12-24T13:06:26.130 [DEBUG] [Thread-302607] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:06:26.185 [DEBUG] [Thread-302607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:06:26.186 [DEBUG] [Thread-302607] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:06:26.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:06:26.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:06:26.186 [DEBUG] [Thread-302607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:06:26.246 [DEBUG] [Thread-302607] [transport.py] [_log()] userauth is OK
2025-12-24T13:06:26.247 [DEBUG] [Thread-302607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:06:26.247 [DEBUG] [Thread-302607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:06:26.247 [DEBUG] [Thread-302607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:06:26.247 [DEBUG] [Thread-302607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:06:26.264 [INFO] [Thread-302607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:06:26.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:06:26.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:06:27.147 [DEBUG] [Thread-302607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:06:27.147 [DEBUG] [Thread-302607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:06:27.196 [DEBUG] [Thread-302607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:06:27.197 [DEBUG] [Thread-302607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:06:27.208 [DEBUG] [Thread-302607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:06:27.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:06:27.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:06:27.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:06:27.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:06:27.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:06:27.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:06:27.246 [DEBUG] [Thread-302607] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:06:31.241 [DEBUG] [Thread-302609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:06:46.423 [DEBUG] [Thread-302610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:06:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:06:57.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:06:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:06:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 6, 23), 19.23, 28.31, 0.0, 11.1, 22.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:06:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:06:23
2025-12-24T13:06:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:06:58.788 [DEBUG] [Thread-302611] [transport.py] [_log()] starting thread (client mode): 0xf572de40
2025-12-24T13:06:58.789 [DEBUG] [Thread-302611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:06:58.798 [DEBUG] [Thread-302611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:06:58.799 [INFO] [Thread-302611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:06:58.803 [DEBUG] [Thread-302611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] client lang: <none>
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] server lang: <none>
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] kex follows: False
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:06:58.804 [DEBUG] [Thread-302611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:06:58.805 [DEBUG] [Thread-302611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:06:58.805 [DEBUG] [Thread-302611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:06:58.805 [DEBUG] [Thread-302611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:06:58.805 [DEBUG] [Thread-302611] [transport.py] [_log()] Compression: none
2025-12-24T13:06:58.805 [DEBUG] [Thread-302611] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:06:58.835 [DEBUG] [Thread-302611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:06:58.838 [DEBUG] [Thread-302611] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:06:58.839 [DEBUG] [Thread-302611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:06:58.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:06:58.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:06:58.843 [DEBUG] [Thread-302611] [transport.py] [_log()] userauth is OK
2025-12-24T13:06:58.843 [DEBUG] [Thread-302611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:06:58.843 [DEBUG] [Thread-302611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:06:58.843 [DEBUG] [Thread-302611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:06:58.843 [DEBUG] [Thread-302611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:06:58.873 [INFO] [Thread-302611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:06:58.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:06:59.687 [DEBUG] [Thread-302611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:06:59.688 [DEBUG] [Thread-302611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:06:59.688 [DEBUG] [Thread-302611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:06:59.729 [DEBUG] [Thread-302611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:06:59.729 [DEBUG] [Thread-302611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:06:59.731 [DEBUG] [Thread-302611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:06:59.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:06:59.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:06:59.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:06:59.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:06:59.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:06:59.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:06:59.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:06:59.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:06:59.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:06:59.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.462569 -999.00  +23.10  12.64     32   +5.80 1 2 1 1 1   888    0 16.74 -14.90 ----- 12.6 12.6 126.4 16.0 31.6 -20.1 31.2 -21.3 31.8 -20.1 32.4 -18.1
2025-12-24T13:06:59.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:06:59.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:06:59.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.462569
2025-12-24T13:06:59.765 [DEBUG] [Thread-302611] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:06:59.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:06:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:06:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:06:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:06:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:06:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:06:23', tmtdew=19.23, humidity=28.31, cloud=0.0, wind=11.1, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:06:05.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:06:59.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:06:59.866 [DEBUG] [Thread-302614] [transport.py] [_log()] starting thread (client mode): 0xf572edd0
2025-12-24T13:06:59.866 [DEBUG] [Thread-302614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:06:59.880 [DEBUG] [Thread-302614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:06:59.880 [INFO] [Thread-302614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] client lang: <none>
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] server lang: <none>
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] kex follows: False
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] Compression: none
2025-12-24T13:06:59.888 [DEBUG] [Thread-302614] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:06:59.949 [DEBUG] [Thread-302614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:06:59.950 [DEBUG] [Thread-302614] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:06:59.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:06:59.951 [DEBUG] [Thread-302614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:06:59.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:07:00.006 [DEBUG] [Thread-302614] [transport.py] [_log()] userauth is OK
2025-12-24T13:07:00.006 [DEBUG] [Thread-302614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:07:00.007 [DEBUG] [Thread-302614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:07:00.007 [DEBUG] [Thread-302614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:07:00.007 [DEBUG] [Thread-302614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:07:00.025 [INFO] [Thread-302614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:07:00.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:07:00.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:07:00.869 [DEBUG] [Thread-302614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:07:00.869 [DEBUG] [Thread-302614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:07:00.907 [DEBUG] [Thread-302614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:07:00.907 [DEBUG] [Thread-302614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:07:00.916 [DEBUG] [Thread-302614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:07:00.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:07:00.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:07:00.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:07:00.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:07:00.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:07:00.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:07:00.954 [DEBUG] [Thread-302614] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:07:01.501 [DEBUG] [Thread-302616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:07:02.732 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:07:02.734 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:07:16.616 [DEBUG] [Thread-302617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:07:17.551 [DEBUG] [Thread-302618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:07:30.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:07:30.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:07:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:07:31.688 [DEBUG] [Thread-302619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:07:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 6, 56), 19.17, 28.62, 0.0, 10.45, 22.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:07:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:06:56
2025-12-24T13:07:32.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:07:32.284 [DEBUG] [Thread-302620] [transport.py] [_log()] starting thread (client mode): 0xf572dc60
2025-12-24T13:07:32.285 [DEBUG] [Thread-302620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:07:32.290 [DEBUG] [Thread-302620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:07:32.290 [INFO] [Thread-302620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] client lang: <none>
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] server lang: <none>
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] kex follows: False
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:07:32.294 [DEBUG] [Thread-302620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:07:32.295 [DEBUG] [Thread-302620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:07:32.295 [DEBUG] [Thread-302620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:07:32.295 [DEBUG] [Thread-302620] [transport.py] [_log()] Compression: none
2025-12-24T13:07:32.295 [DEBUG] [Thread-302620] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:07:32.324 [DEBUG] [Thread-302620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:07:32.326 [DEBUG] [Thread-302620] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:07:32.327 [DEBUG] [Thread-302620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:07:32.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:07:32.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:07:32.331 [DEBUG] [Thread-302620] [transport.py] [_log()] userauth is OK
2025-12-24T13:07:32.331 [DEBUG] [Thread-302620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:07:32.331 [DEBUG] [Thread-302620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:07:32.331 [DEBUG] [Thread-302620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:07:32.331 [DEBUG] [Thread-302620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:07:32.360 [INFO] [Thread-302620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:07:32.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:07:32.991 [DEBUG] [Thread-302620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:07:32.991 [DEBUG] [Thread-302620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:07:32.992 [DEBUG] [Thread-302620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:07:33.032 [DEBUG] [Thread-302620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:07:33.032 [DEBUG] [Thread-302620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:07:33.035 [DEBUG] [Thread-302620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:07:33.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:07:33.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:07:33.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:07:33.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:07:33.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:07:33.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:07:33.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:07:33.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:07:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:07:33.065 [DEBUG] [Thread-302620] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:07:33.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.462916 -999.00  +22.90   9.10     32   +5.60 1 2 1 1 1   888    0 16.73 -18.66 ----- 9.1 9.1 154.3 17.1 31.9 -18.1 31.4 -19.6 31.9 -18.9 32.5 -18.3
2025-12-24T13:07:33.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:07:33.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:07:33.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.462916
2025-12-24T13:07:33.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:07:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:07:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:07:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:07:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:07:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:06:56', tmtdew=19.17, humidity=28.62, cloud=0.0, wind=10.45, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:06:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:07:33.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:07:33.188 [DEBUG] [Thread-302623] [transport.py] [_log()] starting thread (client mode): 0xf81f3610
2025-12-24T13:07:33.188 [DEBUG] [Thread-302623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:07:33.201 [DEBUG] [Thread-302623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:07:33.201 [INFO] [Thread-302623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] client lang: <none>
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] server lang: <none>
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] kex follows: False
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] Compression: none
2025-12-24T13:07:33.209 [DEBUG] [Thread-302623] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:07:33.265 [DEBUG] [Thread-302623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:07:33.265 [DEBUG] [Thread-302623] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:07:33.266 [DEBUG] [Thread-302623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:07:33.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:07:33.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:07:33.321 [DEBUG] [Thread-302623] [transport.py] [_log()] userauth is OK
2025-12-24T13:07:33.322 [DEBUG] [Thread-302623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:07:33.322 [DEBUG] [Thread-302623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:07:33.322 [DEBUG] [Thread-302623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:07:33.322 [DEBUG] [Thread-302623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:07:33.340 [INFO] [Thread-302623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:07:33.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:07:33.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:07:34.184 [DEBUG] [Thread-302623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:07:34.185 [DEBUG] [Thread-302623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:07:34.232 [DEBUG] [Thread-302623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:07:34.232 [DEBUG] [Thread-302623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:07:34.241 [DEBUG] [Thread-302623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:07:34.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:07:34.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:07:34.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:07:34.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:07:34.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:07:34.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:07:34.281 [DEBUG] [Thread-302623] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:07:46.765 [DEBUG] [Thread-302625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:08:01.857 [DEBUG] [Thread-302626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:08:02.873 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:08:02.874 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:08:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:08:04.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:08:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:08:05.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 7, 29), 19.27, 28.49, 0.0, 12.19, 22.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:08:05.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:07:29
2025-12-24T13:08:05.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:08:05.733 [DEBUG] [Thread-302627] [transport.py] [_log()] starting thread (client mode): 0xf81f2500
2025-12-24T13:08:05.735 [DEBUG] [Thread-302627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:08:05.747 [DEBUG] [Thread-302627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:08:05.747 [INFO] [Thread-302627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:08:05.750 [DEBUG] [Thread-302627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:08:05.750 [DEBUG] [Thread-302627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] client lang: <none>
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] server lang: <none>
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] kex follows: False
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:08:05.751 [DEBUG] [Thread-302627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:08:05.752 [DEBUG] [Thread-302627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:08:05.752 [DEBUG] [Thread-302627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:08:05.752 [DEBUG] [Thread-302627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:08:05.752 [DEBUG] [Thread-302627] [transport.py] [_log()] Compression: none
2025-12-24T13:08:05.752 [DEBUG] [Thread-302627] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:08:05.785 [DEBUG] [Thread-302627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:08:05.788 [DEBUG] [Thread-302627] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:08:05.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:08:05.792 [DEBUG] [Thread-302627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:08:05.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:08:05.795 [DEBUG] [Thread-302627] [transport.py] [_log()] userauth is OK
2025-12-24T13:08:05.795 [DEBUG] [Thread-302627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:08:05.796 [DEBUG] [Thread-302627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:08:05.796 [DEBUG] [Thread-302627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:08:05.796 [DEBUG] [Thread-302627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:08:05.813 [INFO] [Thread-302627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:08:05.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:08:06.570 [DEBUG] [Thread-302627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:08:06.570 [DEBUG] [Thread-302627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:08:06.571 [DEBUG] [Thread-302627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:08:06.612 [DEBUG] [Thread-302627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:08:06.612 [DEBUG] [Thread-302627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:08:06.614 [DEBUG] [Thread-302627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:08:06.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:08:06.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:08:06.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:08:06.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:08:06.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:08:06.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:08:06.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:08:06.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:08:06.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:08:06.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.463264 -999.00  +23.10  10.04     32   +5.70 1 1 1 1 1   888    0 16.86 -23.64 ----- 10.0 10.0 72.8 21.2 31.7 -23.2 31.1 -24.4 31.3 -25.5 32.5 -22.1
2025-12-24T13:08:06.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:08:06.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:08:06.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.463264
2025-12-24T13:08:06.643 [DEBUG] [Thread-302627] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:08:06.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:08:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:08:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:08:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:08:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:08:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:07:29', tmtdew=19.27, humidity=28.49, cloud=0.0, wind=12.19, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:07:06.010', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:08:06.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:08:06.744 [DEBUG] [Thread-302630] [transport.py] [_log()] starting thread (client mode): 0xf572e5f0
2025-12-24T13:08:06.744 [DEBUG] [Thread-302630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:08:06.760 [DEBUG] [Thread-302630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:08:06.760 [INFO] [Thread-302630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] client lang: <none>
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] server lang: <none>
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] kex follows: False
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:08:06.767 [DEBUG] [Thread-302630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:08:06.768 [DEBUG] [Thread-302630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:08:06.768 [DEBUG] [Thread-302630] [transport.py] [_log()] Compression: none
2025-12-24T13:08:06.768 [DEBUG] [Thread-302630] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:08:06.823 [DEBUG] [Thread-302630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:08:06.823 [DEBUG] [Thread-302630] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:08:06.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:08:06.823 [DEBUG] [Thread-302630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:08:06.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:08:06.880 [DEBUG] [Thread-302630] [transport.py] [_log()] userauth is OK
2025-12-24T13:08:06.880 [DEBUG] [Thread-302630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:08:06.880 [DEBUG] [Thread-302630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:08:06.880 [DEBUG] [Thread-302630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:08:06.880 [DEBUG] [Thread-302630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:08:06.894 [INFO] [Thread-302630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:08:06.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:08:06.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:08:07.749 [DEBUG] [Thread-302630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:08:07.749 [DEBUG] [Thread-302630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:08:07.798 [DEBUG] [Thread-302630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:08:07.798 [DEBUG] [Thread-302630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:08:07.806 [DEBUG] [Thread-302630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:08:07.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:08:07.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:08:07.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:08:07.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:08:07.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:08:07.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:08:07.840 [DEBUG] [Thread-302630] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:08:16.890 [DEBUG] [Thread-302632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:08:17.825 [DEBUG] [Thread-302633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:08:32.044 [DEBUG] [Thread-302634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:08:37.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:08:37.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:08:37.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:08:38.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 8, 2), 19.38, 28.29, 0.0, 11.96, 22.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:08:38.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:08:02
2025-12-24T13:08:39.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:08:39.300 [DEBUG] [Thread-302635] [transport.py] [_log()] starting thread (client mode): 0xf5743fa0
2025-12-24T13:08:39.301 [DEBUG] [Thread-302635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:08:39.315 [DEBUG] [Thread-302635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:08:39.315 [INFO] [Thread-302635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] client lang: <none>
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] server lang: <none>
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] kex follows: False
2025-12-24T13:08:39.320 [DEBUG] [Thread-302635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:08:39.321 [DEBUG] [Thread-302635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:08:39.321 [DEBUG] [Thread-302635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:08:39.321 [DEBUG] [Thread-302635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:08:39.321 [DEBUG] [Thread-302635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:08:39.321 [DEBUG] [Thread-302635] [transport.py] [_log()] Compression: none
2025-12-24T13:08:39.321 [DEBUG] [Thread-302635] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:08:39.351 [DEBUG] [Thread-302635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:08:39.354 [DEBUG] [Thread-302635] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:08:39.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:08:39.357 [DEBUG] [Thread-302635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:08:39.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:08:39.360 [DEBUG] [Thread-302635] [transport.py] [_log()] userauth is OK
2025-12-24T13:08:39.360 [DEBUG] [Thread-302635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:08:39.361 [DEBUG] [Thread-302635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:08:39.361 [DEBUG] [Thread-302635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:08:39.361 [DEBUG] [Thread-302635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:08:39.383 [INFO] [Thread-302635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:08:39.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:08:40.033 [DEBUG] [Thread-302635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:08:40.034 [DEBUG] [Thread-302635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:08:40.045 [DEBUG] [Thread-302635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:08:40.075 [DEBUG] [Thread-302635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:08:40.075 [DEBUG] [Thread-302635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:08:40.079 [DEBUG] [Thread-302635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:08:40.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:08:40.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:08:40.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:08:40.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:08:40.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:08:40.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:08:40.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:08:40.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:08:40.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:08:40.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.463958 -999.00  +22.90   6.90     33   +5.80 1 2 1 1 1   888    0 16.02 -32.57 ----- 6.9 6.9 321.5 9.7 31.7 -18.5 31.3 -19.6 31.9 -16.5 32.4 -17.4
2025-12-24T13:08:40.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:08:40.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:08:40.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.463958
2025-12-24T13:08:40.118 [DEBUG] [Thread-302635] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:08:40.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:08:40.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:08:40.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:08:40.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:08:40.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:08:40.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:08:02', tmtdew=19.38, humidity=28.29, cloud=0.0, wind=11.96, temperature=22.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:08:05.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:08:40.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:08:40.234 [DEBUG] [Thread-302638] [transport.py] [_log()] starting thread (client mode): 0xf572c940
2025-12-24T13:08:40.234 [DEBUG] [Thread-302638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:08:40.250 [DEBUG] [Thread-302638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:08:40.250 [INFO] [Thread-302638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:08:40.257 [DEBUG] [Thread-302638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] client lang: <none>
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] server lang: <none>
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] kex follows: False
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:08:40.258 [DEBUG] [Thread-302638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:08:40.259 [DEBUG] [Thread-302638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:08:40.259 [DEBUG] [Thread-302638] [transport.py] [_log()] Compression: none
2025-12-24T13:08:40.259 [DEBUG] [Thread-302638] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:08:40.315 [DEBUG] [Thread-302638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:08:40.316 [DEBUG] [Thread-302638] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:08:40.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:08:40.317 [DEBUG] [Thread-302638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:08:40.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:08:40.371 [DEBUG] [Thread-302638] [transport.py] [_log()] userauth is OK
2025-12-24T13:08:40.372 [DEBUG] [Thread-302638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:08:40.372 [DEBUG] [Thread-302638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:08:40.372 [DEBUG] [Thread-302638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:08:40.372 [DEBUG] [Thread-302638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:08:40.389 [INFO] [Thread-302638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:08:40.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:08:40.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:08:41.209 [DEBUG] [Thread-302638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:08:41.209 [DEBUG] [Thread-302638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:08:41.256 [DEBUG] [Thread-302638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:08:41.256 [DEBUG] [Thread-302638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:08:41.265 [DEBUG] [Thread-302638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:08:41.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:08:41.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:08:41.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
2025-12-24T13:08:41.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:08:41.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:08:41.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:08:41.304 [DEBUG] [Thread-302638] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:08:47.148 [DEBUG] [Thread-302640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:09:02.240 [DEBUG] [Thread-302641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:09:03.015 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:09:03.017 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:09:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:09:11.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:09:11.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:09:12.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 8, 35), 19.52, 27.88, 0.0, 7.57, 22.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:09:12.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:08:35
2025-12-24T13:09:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:09:12.700 [DEBUG] [Thread-302642] [transport.py] [_log()] starting thread (client mode): 0xf57bc430
2025-12-24T13:09:12.700 [DEBUG] [Thread-302642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:09:12.705 [DEBUG] [Thread-302642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:09:12.705 [INFO] [Thread-302642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] client lang: <none>
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] server lang: <none>
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] kex follows: False
2025-12-24T13:09:12.713 [DEBUG] [Thread-302642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:09:12.714 [DEBUG] [Thread-302642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:09:12.714 [DEBUG] [Thread-302642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:09:12.715 [DEBUG] [Thread-302642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:09:12.715 [DEBUG] [Thread-302642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:09:12.715 [DEBUG] [Thread-302642] [transport.py] [_log()] Compression: none
2025-12-24T13:09:12.715 [DEBUG] [Thread-302642] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:09:12.754 [DEBUG] [Thread-302642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:09:12.760 [DEBUG] [Thread-302642] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:09:12.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:09:12.764 [DEBUG] [Thread-302642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:09:12.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:09:12.767 [DEBUG] [Thread-302642] [transport.py] [_log()] userauth is OK
2025-12-24T13:09:12.768 [DEBUG] [Thread-302642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:09:12.768 [DEBUG] [Thread-302642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:09:12.768 [DEBUG] [Thread-302642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:09:12.768 [DEBUG] [Thread-302642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:09:12.795 [INFO] [Thread-302642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:09:12.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:09:13.610 [DEBUG] [Thread-302642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:09:13.611 [DEBUG] [Thread-302642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:09:13.612 [DEBUG] [Thread-302642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:09:13.651 [DEBUG] [Thread-302642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:09:13.651 [DEBUG] [Thread-302642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:09:13.654 [DEBUG] [Thread-302642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:09:13.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:09:13.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:09:13.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:09:13.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:09:13.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:09:13.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:09:13.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:09:13.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:09:13.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:09:13.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.464305 -999.00  +23.10   8.40     32   +5.70 1 2 1 1 1   888    0 16.26 -33.87 ----- 8.4 8.4 19.6 13.9 32.2 -18.2 31.7 -20.2 32.0 -19.6 32.8 -16.5
2025-12-24T13:09:13.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:09:13.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:09:13.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.464305
2025-12-24T13:09:13.681 [DEBUG] [Thread-302642] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:09:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:09:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:09:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:09:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:09:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:09:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:08:35', tmtdew=19.52, humidity=27.88, cloud=0.0, wind=7.57, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:08:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:09:13.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:09:13.801 [DEBUG] [Thread-302645] [transport.py] [_log()] starting thread (client mode): 0xf57bd390
2025-12-24T13:09:13.801 [DEBUG] [Thread-302645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:09:13.816 [DEBUG] [Thread-302645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:09:13.816 [INFO] [Thread-302645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] client lang: <none>
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] server lang: <none>
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] kex follows: False
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] Compression: none
2025-12-24T13:09:13.823 [DEBUG] [Thread-302645] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:09:13.881 [DEBUG] [Thread-302645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:09:13.881 [DEBUG] [Thread-302645] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:09:13.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:09:13.881 [DEBUG] [Thread-302645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:09:13.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:09:13.938 [DEBUG] [Thread-302645] [transport.py] [_log()] userauth is OK
2025-12-24T13:09:13.938 [DEBUG] [Thread-302645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:09:13.938 [DEBUG] [Thread-302645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:09:13.938 [DEBUG] [Thread-302645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:09:13.938 [DEBUG] [Thread-302645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:09:13.952 [INFO] [Thread-302645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:09:13.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:09:13.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:09:14.765 [DEBUG] [Thread-302645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:09:14.765 [DEBUG] [Thread-302645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:09:14.811 [DEBUG] [Thread-302645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:09:14.811 [DEBUG] [Thread-302645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:09:14.821 [DEBUG] [Thread-302645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:09:14.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:09:14.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:09:14.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:09:14.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:09:14.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:09:14.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:09:14.858 [DEBUG] [Thread-302645] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:09:17.292 [DEBUG] [Thread-302647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:09:18.097 [DEBUG] [Thread-302648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:09:32.421 [DEBUG] [Thread-302649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:09:44.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:09:44.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:09:44.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:09:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 9, 9), 19.5, 27.93, 0.0, 6.44, 22.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:09:45.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:09:09
2025-12-24T13:09:46.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:09:46.280 [DEBUG] [Thread-302650] [transport.py] [_log()] starting thread (client mode): 0xf5743970
2025-12-24T13:09:46.281 [DEBUG] [Thread-302650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:09:46.286 [DEBUG] [Thread-302650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:09:46.286 [INFO] [Thread-302650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:09:46.293 [DEBUG] [Thread-302650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] client lang: <none>
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] server lang: <none>
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] kex follows: False
2025-12-24T13:09:46.294 [DEBUG] [Thread-302650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:09:46.295 [DEBUG] [Thread-302650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:09:46.295 [DEBUG] [Thread-302650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:09:46.295 [DEBUG] [Thread-302650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:09:46.295 [DEBUG] [Thread-302650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:09:46.295 [DEBUG] [Thread-302650] [transport.py] [_log()] Compression: none
2025-12-24T13:09:46.295 [DEBUG] [Thread-302650] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:09:46.333 [DEBUG] [Thread-302650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:09:46.337 [DEBUG] [Thread-302650] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:09:46.340 [DEBUG] [Thread-302650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:09:46.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:09:46.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:09:46.346 [DEBUG] [Thread-302650] [transport.py] [_log()] userauth is OK
2025-12-24T13:09:46.347 [DEBUG] [Thread-302650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:09:46.347 [DEBUG] [Thread-302650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:09:46.347 [DEBUG] [Thread-302650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:09:46.347 [DEBUG] [Thread-302650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:09:46.373 [INFO] [Thread-302650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:09:46.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:09:46.985 [DEBUG] [Thread-302650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:09:46.985 [DEBUG] [Thread-302650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:09:46.986 [DEBUG] [Thread-302650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:09:47.027 [DEBUG] [Thread-302650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:09:47.027 [DEBUG] [Thread-302650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:09:47.029 [DEBUG] [Thread-302650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:09:47.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:09:47.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:09:47.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:09:47.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:09:47.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:09:47.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:09:47.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:09:47.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:09:47.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:09:47.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.464653 -999.00  +23.00   5.35     32   +5.70 1 2 1 1 1   888    0 16.56 -40.23 ----- 5.3 5.3 13.2 10.7 32.4 -18.6 31.7 -20.7 32.2 -17.1 32.9 -16.8
2025-12-24T13:09:47.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:09:47.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:09:47.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.464653
2025-12-24T13:09:47.057 [DEBUG] [Thread-302650] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:09:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:09:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:09:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:09:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:09:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:09:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:09:09', tmtdew=19.5, humidity=27.93, cloud=0.0, wind=6.44, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:09:06.019', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:09:47.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:09:47.160 [DEBUG] [Thread-302653] [transport.py] [_log()] starting thread (client mode): 0xf81f0820
2025-12-24T13:09:47.160 [DEBUG] [Thread-302653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:09:47.173 [DEBUG] [Thread-302653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:09:47.173 [INFO] [Thread-302653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] client lang: <none>
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] server lang: <none>
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] kex follows: False
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:09:47.181 [DEBUG] [Thread-302653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:09:47.182 [DEBUG] [Thread-302653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:09:47.182 [DEBUG] [Thread-302653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:09:47.182 [DEBUG] [Thread-302653] [transport.py] [_log()] Compression: none
2025-12-24T13:09:47.182 [DEBUG] [Thread-302653] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:09:47.236 [DEBUG] [Thread-302653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:09:47.237 [DEBUG] [Thread-302653] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:09:47.237 [DEBUG] [Thread-302653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:09:47.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:09:47.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:09:47.294 [DEBUG] [Thread-302653] [transport.py] [_log()] userauth is OK
2025-12-24T13:09:47.294 [DEBUG] [Thread-302653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:09:47.294 [DEBUG] [Thread-302653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:09:47.294 [DEBUG] [Thread-302653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:09:47.294 [DEBUG] [Thread-302653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:09:47.308 [INFO] [Thread-302653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:09:47.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:09:47.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:09:47.515 [DEBUG] [Thread-302655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:09:48.194 [DEBUG] [Thread-302653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:09:48.195 [DEBUG] [Thread-302653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:09:48.243 [DEBUG] [Thread-302653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:09:48.243 [DEBUG] [Thread-302653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:09:48.257 [DEBUG] [Thread-302653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:09:48.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:09:48.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:09:48.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:09:48.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:09:48.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:09:48.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:09:48.295 [DEBUG] [Thread-302653] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:10:02.690 [DEBUG] [Thread-302656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:10:03.156 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:10:03.157 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:10:17.767 [DEBUG] [Thread-302657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:10:18.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:10:18.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:10:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:10:18.369 [DEBUG] [Thread-302658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:10:19.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 9, 42), 19.64, 27.34, 0.0, 5.17, 22.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:10:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:09:42
2025-12-24T13:10:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:10:19.523 [DEBUG] [Thread-302659] [transport.py] [_log()] starting thread (client mode): 0xf57bc1f0
2025-12-24T13:10:19.523 [DEBUG] [Thread-302659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:10:19.527 [DEBUG] [Thread-302659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:10:19.527 [INFO] [Thread-302659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] client lang: <none>
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] server lang: <none>
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] kex follows: False
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:10:19.531 [DEBUG] [Thread-302659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:10:19.532 [DEBUG] [Thread-302659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:10:19.532 [DEBUG] [Thread-302659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:10:19.532 [DEBUG] [Thread-302659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:10:19.532 [DEBUG] [Thread-302659] [transport.py] [_log()] Compression: none
2025-12-24T13:10:19.532 [DEBUG] [Thread-302659] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:10:19.567 [DEBUG] [Thread-302659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:10:19.570 [DEBUG] [Thread-302659] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:10:19.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:10:19.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:10:19.574 [DEBUG] [Thread-302659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:10:19.576 [DEBUG] [Thread-302659] [transport.py] [_log()] userauth is OK
2025-12-24T13:10:19.576 [DEBUG] [Thread-302659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:10:19.576 [DEBUG] [Thread-302659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:10:19.576 [DEBUG] [Thread-302659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:10:19.576 [DEBUG] [Thread-302659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:10:19.598 [INFO] [Thread-302659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:10:19.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:10:20.462 [DEBUG] [Thread-302659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:10:20.462 [DEBUG] [Thread-302659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:10:20.463 [DEBUG] [Thread-302659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:10:20.504 [DEBUG] [Thread-302659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:10:20.504 [DEBUG] [Thread-302659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:10:20.508 [DEBUG] [Thread-302659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:10:20.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:10:20.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:10:20.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:10:20.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:10:20.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:10:20.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:10:20.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:10:20.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:10:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:10:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.464999 -999.00  +23.20   4.46     32   +5.70 1 2 1 1 1   888    0 15.97 -41.09 ----- 4.5 4.5 70.8 6.7 32.7 -21.2 31.9 -20.7 32.3 -18.7 33.0 -17.9
2025-12-24T13:10:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:10:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:10:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.464999
2025-12-24T13:10:20.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:10:20.548 [DEBUG] [Thread-302659] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:10:20.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:10:20.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:10:20.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:10:20.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:10:20.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:09:42', tmtdew=19.64, humidity=27.34, cloud=0.0, wind=5.17, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:09:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:10:20.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:10:20.636 [DEBUG] [Thread-302662] [transport.py] [_log()] starting thread (client mode): 0xf81e6440
2025-12-24T13:10:20.636 [DEBUG] [Thread-302662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:10:20.650 [DEBUG] [Thread-302662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:10:20.650 [INFO] [Thread-302662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] client lang: <none>
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] server lang: <none>
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] kex follows: False
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] Compression: none
2025-12-24T13:10:20.658 [DEBUG] [Thread-302662] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:10:20.717 [DEBUG] [Thread-302662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:10:20.717 [DEBUG] [Thread-302662] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:10:20.717 [DEBUG] [Thread-302662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:10:20.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:10:20.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:10:20.773 [DEBUG] [Thread-302662] [transport.py] [_log()] userauth is OK
2025-12-24T13:10:20.773 [DEBUG] [Thread-302662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:10:20.773 [DEBUG] [Thread-302662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:10:20.774 [DEBUG] [Thread-302662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:10:20.774 [DEBUG] [Thread-302662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:10:20.794 [INFO] [Thread-302662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:10:20.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:10:20.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:10:21.660 [DEBUG] [Thread-302662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:10:21.660 [DEBUG] [Thread-302662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:10:21.708 [DEBUG] [Thread-302662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:10:21.708 [DEBUG] [Thread-302662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:10:21.718 [DEBUG] [Thread-302662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:10:21.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:10:21.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:10:21.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:10:21.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:10:21.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:10:21.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:10:21.756 [DEBUG] [Thread-302662] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:10:32.869 [DEBUG] [Thread-302664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:10:48.026 [DEBUG] [Thread-302665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:10:51.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:10:51.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:10:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:10:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 10, 15), 19.66, 27.31, 0.0, 5.22, 22.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:10:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:10:15
2025-12-24T13:10:52.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:10:53.104 [DEBUG] [Thread-302666] [transport.py] [_log()] starting thread (client mode): 0xf81e7370
2025-12-24T13:10:53.105 [DEBUG] [Thread-302666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:10:53.111 [DEBUG] [Thread-302666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:10:53.111 [INFO] [Thread-302666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] client lang: <none>
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] server lang: <none>
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] kex follows: False
2025-12-24T13:10:53.118 [DEBUG] [Thread-302666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:10:53.119 [DEBUG] [Thread-302666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:10:53.119 [DEBUG] [Thread-302666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:10:53.119 [DEBUG] [Thread-302666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:10:53.119 [DEBUG] [Thread-302666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:10:53.119 [DEBUG] [Thread-302666] [transport.py] [_log()] Compression: none
2025-12-24T13:10:53.119 [DEBUG] [Thread-302666] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:10:53.146 [DEBUG] [Thread-302666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:10:53.149 [DEBUG] [Thread-302666] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:10:53.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:10:53.152 [DEBUG] [Thread-302666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:10:53.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:10:53.154 [DEBUG] [Thread-302666] [transport.py] [_log()] userauth is OK
2025-12-24T13:10:53.154 [DEBUG] [Thread-302666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:10:53.154 [DEBUG] [Thread-302666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:10:53.154 [DEBUG] [Thread-302666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:10:53.154 [DEBUG] [Thread-302666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:10:53.184 [INFO] [Thread-302666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:10:53.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:10:53.817 [DEBUG] [Thread-302666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:10:53.817 [DEBUG] [Thread-302666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:10:53.818 [DEBUG] [Thread-302666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:10:53.857 [DEBUG] [Thread-302666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:10:53.858 [DEBUG] [Thread-302666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:10:53.860 [DEBUG] [Thread-302666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:10:53.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:10:53.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:10:53.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:10:53.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:10:53.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:10:53.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:10:53.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:10:53.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:10:53.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:10:53.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.465347 -999.00  +23.40   6.31     32   +5.70 1 2 1 1 1   888    0 16.30 -41.68 ----- 6.3 6.3 112.7 12.0 32.9 -18.2 32.2 -20.0 32.6 -17.5 33.1 -17.7
2025-12-24T13:10:53.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:10:53.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:10:53.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.465347
2025-12-24T13:10:53.889 [DEBUG] [Thread-302666] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:10:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:10:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:10:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:10:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:10:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:10:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:10:15', tmtdew=19.66, humidity=27.31, cloud=0.0, wind=5.22, temperature=22.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:10:05.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:10:53.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:10:53.995 [DEBUG] [Thread-302669] [transport.py] [_log()] starting thread (client mode): 0xf81e7b20
2025-12-24T13:10:53.995 [DEBUG] [Thread-302669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:10:54.010 [DEBUG] [Thread-302669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:10:54.010 [INFO] [Thread-302669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:10:54.017 [DEBUG] [Thread-302669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] client lang: <none>
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] server lang: <none>
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] kex follows: False
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] Compression: none
2025-12-24T13:10:54.018 [DEBUG] [Thread-302669] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:10:54.076 [DEBUG] [Thread-302669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:10:54.076 [DEBUG] [Thread-302669] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:10:54.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:10:54.077 [DEBUG] [Thread-302669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:10:54.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:10:54.133 [DEBUG] [Thread-302669] [transport.py] [_log()] userauth is OK
2025-12-24T13:10:54.133 [DEBUG] [Thread-302669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:10:54.133 [DEBUG] [Thread-302669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:10:54.133 [DEBUG] [Thread-302669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:10:54.134 [DEBUG] [Thread-302669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:10:54.153 [INFO] [Thread-302669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:10:54.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:10:54.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:10:54.997 [DEBUG] [Thread-302669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:10:54.997 [DEBUG] [Thread-302669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:10:55.045 [DEBUG] [Thread-302669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:10:55.045 [DEBUG] [Thread-302669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:10:55.054 [DEBUG] [Thread-302669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:10:55.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:10:55.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')
2025-12-24T13:10:55.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:10:55.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:10:55.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:10:55.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:10:55.090 [DEBUG] [Thread-302669] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:11:03.103 [DEBUG] [Thread-302671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:11:03.300 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:11:03.301 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:11:18.256 [DEBUG] [Thread-302672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:11:18.645 [DEBUG] [Thread-302673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:11:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:11:25.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:11:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:11:26.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 10, 48), 19.69, 27.43, 0.0, 3.55, 22.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:11:26.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:10:48
2025-12-24T13:11:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:11:26.403 [DEBUG] [Thread-302674] [transport.py] [_log()] starting thread (client mode): 0xf81f0dc0
2025-12-24T13:11:26.404 [DEBUG] [Thread-302674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:11:26.417 [DEBUG] [Thread-302674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:11:26.417 [INFO] [Thread-302674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:11:26.423 [DEBUG] [Thread-302674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:11:26.423 [DEBUG] [Thread-302674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:11:26.423 [DEBUG] [Thread-302674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] client lang: <none>
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] server lang: <none>
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] kex follows: False
2025-12-24T13:11:26.424 [DEBUG] [Thread-302674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:11:26.425 [DEBUG] [Thread-302674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:11:26.425 [DEBUG] [Thread-302674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:11:26.426 [DEBUG] [Thread-302674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:11:26.426 [DEBUG] [Thread-302674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:11:26.426 [DEBUG] [Thread-302674] [transport.py] [_log()] Compression: none
2025-12-24T13:11:26.426 [DEBUG] [Thread-302674] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:11:26.458 [DEBUG] [Thread-302674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:11:26.463 [DEBUG] [Thread-302674] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:11:26.465 [DEBUG] [Thread-302674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:11:26.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:11:26.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:11:26.471 [DEBUG] [Thread-302674] [transport.py] [_log()] userauth is OK
2025-12-24T13:11:26.471 [DEBUG] [Thread-302674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:11:26.471 [DEBUG] [Thread-302674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:11:26.471 [DEBUG] [Thread-302674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:11:26.471 [DEBUG] [Thread-302674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:11:26.495 [INFO] [Thread-302674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:11:26.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:11:27.177 [DEBUG] [Thread-302674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:11:27.177 [DEBUG] [Thread-302674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:11:27.187 [DEBUG] [Thread-302674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:11:27.218 [DEBUG] [Thread-302674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:11:27.219 [DEBUG] [Thread-302674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:11:27.222 [DEBUG] [Thread-302674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:11:27.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:11:27.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:11:27.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:11:27.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:11:27.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:11:27.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:11:27.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:11:27.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:11:27.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:11:27.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.465694 -999.00  +23.60   7.47     31   +5.70 1 2 1 1 1   888    0 16.40 -44.75 ----- 7.5 7.5 96.1 11.4 33.0 -18.5 32.4 -19.8 32.7 -18.7 33.3 -17.6
2025-12-24T13:11:27.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:11:27.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:11:27.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.465694
2025-12-24T13:11:27.261 [DEBUG] [Thread-302674] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:11:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:11:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:11:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:11:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:11:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:11:27.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:10:48', tmtdew=19.69, humidity=27.43, cloud=0.0, wind=3.55, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:10:35.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:11:27.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:11:27.379 [DEBUG] [Thread-302677] [transport.py] [_log()] starting thread (client mode): 0xf5743ee0
2025-12-24T13:11:27.379 [DEBUG] [Thread-302677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:11:27.393 [DEBUG] [Thread-302677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:11:27.393 [INFO] [Thread-302677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:11:27.401 [DEBUG] [Thread-302677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:11:27.401 [DEBUG] [Thread-302677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:11:27.401 [DEBUG] [Thread-302677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:11:27.401 [DEBUG] [Thread-302677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:11:27.401 [DEBUG] [Thread-302677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:11:27.401 [DEBUG] [Thread-302677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:11:27.401 [DEBUG] [Thread-302677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:11:27.401 [DEBUG] [Thread-302677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] client lang: <none>
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] server lang: <none>
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] kex follows: False
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] Compression: none
2025-12-24T13:11:27.402 [DEBUG] [Thread-302677] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:11:27.460 [DEBUG] [Thread-302677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:11:27.460 [DEBUG] [Thread-302677] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:11:27.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:11:27.462 [DEBUG] [Thread-302677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:11:27.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:11:27.520 [DEBUG] [Thread-302677] [transport.py] [_log()] userauth is OK
2025-12-24T13:11:27.520 [DEBUG] [Thread-302677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:11:27.520 [DEBUG] [Thread-302677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:11:27.520 [DEBUG] [Thread-302677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:11:27.520 [DEBUG] [Thread-302677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:11:27.540 [INFO] [Thread-302677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:11:27.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:11:27.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:11:28.448 [DEBUG] [Thread-302677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:11:28.448 [DEBUG] [Thread-302677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:11:28.486 [DEBUG] [Thread-302677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:11:28.487 [DEBUG] [Thread-302677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:11:28.496 [DEBUG] [Thread-302677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:11:28.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:11:28.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:11:28.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:11:28.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:11:28.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:11:28.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:11:28.534 [DEBUG] [Thread-302677] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:11:33.340 [DEBUG] [Thread-302679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:11:48.460 [DEBUG] [Thread-302680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:11:58.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:11:58.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:11:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:11:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 11, 21), 19.63, 27.51, 0.0, 2.49, 22.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:11:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:11:21
2025-12-24T13:11:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:11:59.786 [DEBUG] [Thread-302681] [transport.py] [_log()] starting thread (client mode): 0xf81e6770
2025-12-24T13:11:59.787 [DEBUG] [Thread-302681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:11:59.802 [DEBUG] [Thread-302681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:11:59.802 [INFO] [Thread-302681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:11:59.808 [DEBUG] [Thread-302681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:11:59.808 [DEBUG] [Thread-302681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:11:59.808 [DEBUG] [Thread-302681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:11:59.808 [DEBUG] [Thread-302681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:11:59.808 [DEBUG] [Thread-302681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:11:59.809 [DEBUG] [Thread-302681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:11:59.809 [DEBUG] [Thread-302681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:11:59.809 [DEBUG] [Thread-302681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:11:59.809 [DEBUG] [Thread-302681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:11:59.809 [DEBUG] [Thread-302681] [transport.py] [_log()] client lang: <none>
2025-12-24T13:11:59.809 [DEBUG] [Thread-302681] [transport.py] [_log()] server lang: <none>
2025-12-24T13:11:59.809 [DEBUG] [Thread-302681] [transport.py] [_log()] kex follows: False
2025-12-24T13:11:59.809 [DEBUG] [Thread-302681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:11:59.810 [DEBUG] [Thread-302681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:11:59.810 [DEBUG] [Thread-302681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:11:59.811 [DEBUG] [Thread-302681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:11:59.811 [DEBUG] [Thread-302681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:11:59.811 [DEBUG] [Thread-302681] [transport.py] [_log()] Compression: none
2025-12-24T13:11:59.811 [DEBUG] [Thread-302681] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:11:59.848 [DEBUG] [Thread-302681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:11:59.853 [DEBUG] [Thread-302681] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:11:59.855 [DEBUG] [Thread-302681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:11:59.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:11:59.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:11:59.861 [DEBUG] [Thread-302681] [transport.py] [_log()] userauth is OK
2025-12-24T13:11:59.861 [DEBUG] [Thread-302681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:11:59.862 [DEBUG] [Thread-302681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:11:59.862 [DEBUG] [Thread-302681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:11:59.862 [DEBUG] [Thread-302681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:11:59.900 [INFO] [Thread-302681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:11:59.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:12:00.529 [DEBUG] [Thread-302681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:12:00.530 [DEBUG] [Thread-302681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:12:00.531 [DEBUG] [Thread-302681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:12:00.571 [DEBUG] [Thread-302681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:12:00.571 [DEBUG] [Thread-302681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:12:00.575 [DEBUG] [Thread-302681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:12:00.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:12:00.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:12:00.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:12:00.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:12:00.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:12:00.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:12:00.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:12:00.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:12:00.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:12:00.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.466041 -999.00  +23.90  13.74     31   +5.80 1 2 1 1 1   888    0 16.13 -45.40 ----- 13.7 13.7 56.0 18.8 33.0 -19.2 32.5 -19.4 32.9 -18.2 33.5 -18.3
2025-12-24T13:12:00.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:12:00.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:12:00.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.466041
2025-12-24T13:12:00.611 [DEBUG] [Thread-302681] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:12:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:12:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:12:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:12:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:12:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:12:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:11:21', tmtdew=19.63, humidity=27.51, cloud=0.0, wind=2.49, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:11:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:12:00.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:12:00.728 [DEBUG] [Thread-302684] [transport.py] [_log()] starting thread (client mode): 0xf81f2080
2025-12-24T13:12:00.728 [DEBUG] [Thread-302684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:12:00.742 [DEBUG] [Thread-302684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:12:00.742 [INFO] [Thread-302684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:12:00.750 [DEBUG] [Thread-302684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:12:00.750 [DEBUG] [Thread-302684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:12:00.750 [DEBUG] [Thread-302684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:12:00.750 [DEBUG] [Thread-302684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:12:00.750 [DEBUG] [Thread-302684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:12:00.750 [DEBUG] [Thread-302684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] client lang: <none>
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] server lang: <none>
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] kex follows: False
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] Compression: none
2025-12-24T13:12:00.751 [DEBUG] [Thread-302684] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:12:00.811 [DEBUG] [Thread-302684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:12:00.812 [DEBUG] [Thread-302684] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:12:00.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:12:00.813 [DEBUG] [Thread-302684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:12:00.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:12:00.867 [DEBUG] [Thread-302684] [transport.py] [_log()] userauth is OK
2025-12-24T13:12:00.868 [DEBUG] [Thread-302684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:12:00.868 [DEBUG] [Thread-302684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:12:00.868 [DEBUG] [Thread-302684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:12:00.868 [DEBUG] [Thread-302684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:12:00.887 [INFO] [Thread-302684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:12:00.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:12:00.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:12:01.736 [DEBUG] [Thread-302684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:12:01.736 [DEBUG] [Thread-302684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:12:01.783 [DEBUG] [Thread-302684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:12:01.783 [DEBUG] [Thread-302684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:12:01.792 [DEBUG] [Thread-302684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:12:01.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:12:01.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:12:01.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:12:01.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:12:01.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:12:01.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:12:01.829 [DEBUG] [Thread-302684] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:12:03.444 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:12:03.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:12:03.536 [DEBUG] [Thread-302686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:12:18.648 [DEBUG] [Thread-302687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:12:18.934 [DEBUG] [Thread-302688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:12:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:12:31.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:12:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:12:32.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 12, 28), 19.87, 27.11, 0.0, 7.78, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:12:32.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:12:28
2025-12-24T13:12:32.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:12:33.129 [DEBUG] [Thread-302689] [transport.py] [_log()] starting thread (client mode): 0xf81f0550
2025-12-24T13:12:33.130 [DEBUG] [Thread-302689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:12:33.137 [DEBUG] [Thread-302689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:12:33.137 [INFO] [Thread-302689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:12:33.144 [DEBUG] [Thread-302689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:12:33.145 [DEBUG] [Thread-302689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:12:33.145 [DEBUG] [Thread-302689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:12:33.145 [DEBUG] [Thread-302689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:12:33.146 [DEBUG] [Thread-302689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:12:33.146 [DEBUG] [Thread-302689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:12:33.146 [DEBUG] [Thread-302689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:12:33.146 [DEBUG] [Thread-302689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:12:33.146 [DEBUG] [Thread-302689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:12:33.146 [DEBUG] [Thread-302689] [transport.py] [_log()] client lang: <none>
2025-12-24T13:12:33.146 [DEBUG] [Thread-302689] [transport.py] [_log()] server lang: <none>
2025-12-24T13:12:33.146 [DEBUG] [Thread-302689] [transport.py] [_log()] kex follows: False
2025-12-24T13:12:33.147 [DEBUG] [Thread-302689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:12:33.148 [DEBUG] [Thread-302689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:12:33.148 [DEBUG] [Thread-302689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:12:33.148 [DEBUG] [Thread-302689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:12:33.148 [DEBUG] [Thread-302689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:12:33.149 [DEBUG] [Thread-302689] [transport.py] [_log()] Compression: none
2025-12-24T13:12:33.149 [DEBUG] [Thread-302689] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:12:33.192 [DEBUG] [Thread-302689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:12:33.197 [DEBUG] [Thread-302689] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:12:33.200 [DEBUG] [Thread-302689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:12:33.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:12:33.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:12:33.206 [DEBUG] [Thread-302689] [transport.py] [_log()] userauth is OK
2025-12-24T13:12:33.206 [DEBUG] [Thread-302689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:12:33.206 [DEBUG] [Thread-302689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:12:33.206 [DEBUG] [Thread-302689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:12:33.206 [DEBUG] [Thread-302689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:12:33.230 [INFO] [Thread-302689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:12:33.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:12:33.867 [DEBUG] [Thread-302689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:12:33.867 [DEBUG] [Thread-302689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:12:33.872 [DEBUG] [Thread-302689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:12:33.891 [DEBUG] [Thread-302691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:12:33.909 [DEBUG] [Thread-302689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:12:33.909 [DEBUG] [Thread-302689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:12:33.912 [DEBUG] [Thread-302689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:12:33.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:12:33.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:12:33.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:12:33.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:12:33.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:12:33.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:12:33.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:12:33.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:12:33.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:12:33.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.466388 -999.00  +23.60  16.50     31   +5.60 1 2 1 1 1   888    0 15.91 -43.66 ----- 16.5 16.5 58.2 18.1 33.2 -19.4 32.5 -21.1 32.8 -18.3 33.7 -18.4
2025-12-24T13:12:33.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:12:33.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:12:33.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.466388
2025-12-24T13:12:33.940 [DEBUG] [Thread-302689] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:12:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:12:33.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:12:33.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:12:33.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:12:33.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:12:33.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:12:28', tmtdew=19.87, humidity=27.11, cloud=0.0, wind=7.78, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:11:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:12:34.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:12:34.038 [DEBUG] [Thread-302693] [transport.py] [_log()] starting thread (client mode): 0xf81e4850
2025-12-24T13:12:34.038 [DEBUG] [Thread-302693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:12:34.054 [DEBUG] [Thread-302693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:12:34.054 [INFO] [Thread-302693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:12:34.061 [DEBUG] [Thread-302693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:12:34.061 [DEBUG] [Thread-302693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:12:34.061 [DEBUG] [Thread-302693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] client lang: <none>
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] server lang: <none>
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] kex follows: False
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] Compression: none
2025-12-24T13:12:34.062 [DEBUG] [Thread-302693] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:12:34.118 [DEBUG] [Thread-302693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:12:34.119 [DEBUG] [Thread-302693] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:12:34.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:12:34.120 [DEBUG] [Thread-302693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:12:34.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:12:34.175 [DEBUG] [Thread-302693] [transport.py] [_log()] userauth is OK
2025-12-24T13:12:34.175 [DEBUG] [Thread-302693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:12:34.175 [DEBUG] [Thread-302693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:12:34.175 [DEBUG] [Thread-302693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:12:34.175 [DEBUG] [Thread-302693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:12:34.195 [INFO] [Thread-302693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:12:34.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:12:34.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:12:35.031 [DEBUG] [Thread-302693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:12:35.031 [DEBUG] [Thread-302693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:12:35.079 [DEBUG] [Thread-302693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:12:35.079 [DEBUG] [Thread-302693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:12:35.088 [DEBUG] [Thread-302693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:12:35.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:12:35.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:12:35.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:12:35.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:12:35.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:12:35.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:12:35.127 [DEBUG] [Thread-302693] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:12:48.949 [DEBUG] [Thread-302695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:13:03.600 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:13:03.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:13:04.136 [DEBUG] [Thread-302696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:13:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:13:05.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:13:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:13:06.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 12, 28), 19.87, 27.11, 0.0, 7.78, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:13:06.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:12:28
2025-12-24T13:13:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:13:06.406 [DEBUG] [Thread-302697] [transport.py] [_log()] starting thread (client mode): 0xf81c2fe0
2025-12-24T13:13:06.406 [DEBUG] [Thread-302697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:13:06.413 [DEBUG] [Thread-302697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:13:06.413 [INFO] [Thread-302697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:13:06.416 [DEBUG] [Thread-302697] [transport.py] [_log()] client lang: <none>
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] server lang: <none>
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] kex follows: False
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] Compression: none
2025-12-24T13:13:06.417 [DEBUG] [Thread-302697] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:13:06.452 [DEBUG] [Thread-302697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:13:06.456 [DEBUG] [Thread-302697] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:13:06.458 [DEBUG] [Thread-302697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:13:06.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:13:06.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:13:06.463 [DEBUG] [Thread-302697] [transport.py] [_log()] userauth is OK
2025-12-24T13:13:06.463 [DEBUG] [Thread-302697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:13:06.463 [DEBUG] [Thread-302697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:13:06.463 [DEBUG] [Thread-302697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:13:06.463 [DEBUG] [Thread-302697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:13:06.503 [INFO] [Thread-302697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:13:06.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:13:07.107 [DEBUG] [Thread-302697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:13:07.107 [DEBUG] [Thread-302697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:13:07.107 [DEBUG] [Thread-302697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:13:07.148 [DEBUG] [Thread-302697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:13:07.148 [DEBUG] [Thread-302697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:13:07.150 [DEBUG] [Thread-302697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:13:07.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:13:07.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:13:07.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:13:07.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:13:07.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:13:07.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:13:07.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:13:07.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:13:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:13:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.466736 -999.00  +23.20  17.04     31   +5.50 1 2 1 1 1   888    0 16.01 -42.44 ----- 17.0 17.0 67.2 21.3 33.1 -19.2 32.3 -22.8 32.6 -20.4 33.6 -20.5
2025-12-24T13:13:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:13:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:13:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.466736
2025-12-24T13:13:07.177 [DEBUG] [Thread-302697] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:13:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:13:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:13:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:13:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:13:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:13:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:12:28', tmtdew=19.87, humidity=27.11, cloud=0.0, wind=7.78, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:12:05.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:13:07.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:13:07.275 [DEBUG] [Thread-302700] [transport.py] [_log()] starting thread (client mode): 0xf81c1810
2025-12-24T13:13:07.275 [DEBUG] [Thread-302700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:13:07.291 [DEBUG] [Thread-302700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:13:07.291 [INFO] [Thread-302700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] client lang: <none>
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] server lang: <none>
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] kex follows: False
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] Compression: none
2025-12-24T13:13:07.299 [DEBUG] [Thread-302700] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:13:07.360 [DEBUG] [Thread-302700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:13:07.360 [DEBUG] [Thread-302700] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:13:07.360 [DEBUG] [Thread-302700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:13:07.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:13:07.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:13:07.417 [DEBUG] [Thread-302700] [transport.py] [_log()] userauth is OK
2025-12-24T13:13:07.417 [DEBUG] [Thread-302700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:13:07.417 [DEBUG] [Thread-302700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:13:07.417 [DEBUG] [Thread-302700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:13:07.417 [DEBUG] [Thread-302700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:13:07.431 [INFO] [Thread-302700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:13:07.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:13:07.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:13:08.303 [DEBUG] [Thread-302700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:13:08.303 [DEBUG] [Thread-302700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:13:08.351 [DEBUG] [Thread-302700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:13:08.351 [DEBUG] [Thread-302700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:13:08.359 [DEBUG] [Thread-302700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:13:08.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:13:08.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:13:08.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:13:08.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:13:08.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:13:08.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:13:08.393 [DEBUG] [Thread-302700] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:13:19.233 [DEBUG] [Thread-302702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:13:19.246 [DEBUG] [Thread-302703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:13:34.369 [DEBUG] [Thread-302704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:13:38.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:13:38.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:13:38.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
2025-12-24T13:13:39.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 13, 1), 19.84, 27.14, 0.0, 6.78, 22.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:13:39.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:13:01
2025-12-24T13:13:39.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:13:39.631 [DEBUG] [Thread-302705] [transport.py] [_log()] starting thread (client mode): 0xf81e6ec0
2025-12-24T13:13:39.631 [DEBUG] [Thread-302705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:13:39.644 [DEBUG] [Thread-302705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:13:39.645 [INFO] [Thread-302705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:13:39.650 [DEBUG] [Thread-302705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:13:39.650 [DEBUG] [Thread-302705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] client lang: <none>
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] server lang: <none>
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] kex follows: False
2025-12-24T13:13:39.651 [DEBUG] [Thread-302705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:13:39.652 [DEBUG] [Thread-302705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:13:39.652 [DEBUG] [Thread-302705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:13:39.652 [DEBUG] [Thread-302705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:13:39.653 [DEBUG] [Thread-302705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:13:39.653 [DEBUG] [Thread-302705] [transport.py] [_log()] Compression: none
2025-12-24T13:13:39.653 [DEBUG] [Thread-302705] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:13:39.683 [DEBUG] [Thread-302705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:13:39.687 [DEBUG] [Thread-302705] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:13:39.689 [DEBUG] [Thread-302705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:13:39.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:13:39.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:13:39.695 [DEBUG] [Thread-302705] [transport.py] [_log()] userauth is OK
2025-12-24T13:13:39.695 [DEBUG] [Thread-302705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:13:39.696 [DEBUG] [Thread-302705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:13:39.696 [DEBUG] [Thread-302705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:13:39.696 [DEBUG] [Thread-302705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:13:39.734 [INFO] [Thread-302705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:13:39.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:13:40.379 [DEBUG] [Thread-302705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:13:40.379 [DEBUG] [Thread-302705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:13:40.380 [DEBUG] [Thread-302705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:13:40.420 [DEBUG] [Thread-302705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:13:40.420 [DEBUG] [Thread-302705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:13:40.422 [DEBUG] [Thread-302705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:13:40.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:13:40.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:13:40.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:13:40.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:13:40.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:13:40.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:13:40.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:13:40.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:13:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:13:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.467430 -999.00  +22.80  12.15     32   +5.40 1 2 1 1 1   888    0 16.14 -42.61 ----- 12.2 12.2 66.6 17.9 33.0 -20.2 32.2 -23.1 32.5 -20.4 33.6 -19.1
2025-12-24T13:13:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:13:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:13:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.467430
2025-12-24T13:13:40.452 [DEBUG] [Thread-302705] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:13:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:13:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:13:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:13:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:13:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:13:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:13:01', tmtdew=19.84, humidity=27.14, cloud=0.0, wind=6.78, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:13:05.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:13:40.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:13:40.542 [DEBUG] [Thread-302708] [transport.py] [_log()] starting thread (client mode): 0xf81e4220
2025-12-24T13:13:40.542 [DEBUG] [Thread-302708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:13:40.557 [DEBUG] [Thread-302708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:13:40.557 [INFO] [Thread-302708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:13:40.564 [DEBUG] [Thread-302708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:13:40.564 [DEBUG] [Thread-302708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:13:40.564 [DEBUG] [Thread-302708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:13:40.564 [DEBUG] [Thread-302708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:13:40.564 [DEBUG] [Thread-302708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:13:40.564 [DEBUG] [Thread-302708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:13:40.564 [DEBUG] [Thread-302708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:13:40.564 [DEBUG] [Thread-302708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] client lang: <none>
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] server lang: <none>
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] kex follows: False
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] Compression: none
2025-12-24T13:13:40.565 [DEBUG] [Thread-302708] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:13:40.626 [DEBUG] [Thread-302708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:13:40.626 [DEBUG] [Thread-302708] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:13:40.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:13:40.626 [DEBUG] [Thread-302708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:13:40.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:13:40.685 [DEBUG] [Thread-302708] [transport.py] [_log()] userauth is OK
2025-12-24T13:13:40.685 [DEBUG] [Thread-302708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:13:40.685 [DEBUG] [Thread-302708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:13:40.685 [DEBUG] [Thread-302708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:13:40.685 [DEBUG] [Thread-302708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:13:40.699 [INFO] [Thread-302708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:13:40.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:13:40.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:13:41.547 [DEBUG] [Thread-302708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:13:41.548 [DEBUG] [Thread-302708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:13:41.595 [DEBUG] [Thread-302708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:13:41.596 [DEBUG] [Thread-302708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:13:41.604 [DEBUG] [Thread-302708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:13:41.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:13:41.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:13:41.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:13:41.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:13:41.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:13:41.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:13:41.637 [DEBUG] [Thread-302708] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:13:49.440 [DEBUG] [Thread-302710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:14:03.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:14:03.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:14:04.616 [DEBUG] [Thread-302711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:14:11.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:14:11.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:14:11.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
2025-12-24T13:14:12.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 13, 35), 19.85, 27.39, 0.0, 8.82, 22.6, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:14:12.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:13:35
2025-12-24T13:14:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:14:12.921 [DEBUG] [Thread-302712] [transport.py] [_log()] starting thread (client mode): 0xf81e71f0
2025-12-24T13:14:12.922 [DEBUG] [Thread-302712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:14:12.932 [DEBUG] [Thread-302712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:14:12.932 [INFO] [Thread-302712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:14:12.938 [DEBUG] [Thread-302712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] client lang: <none>
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] server lang: <none>
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] kex follows: False
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:14:12.939 [DEBUG] [Thread-302712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:14:12.940 [DEBUG] [Thread-302712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:14:12.940 [DEBUG] [Thread-302712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:14:12.940 [DEBUG] [Thread-302712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:14:12.940 [DEBUG] [Thread-302712] [transport.py] [_log()] Compression: none
2025-12-24T13:14:12.940 [DEBUG] [Thread-302712] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:14:12.972 [DEBUG] [Thread-302712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:14:12.978 [DEBUG] [Thread-302712] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:14:12.980 [DEBUG] [Thread-302712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:14:12.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:14:12.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:14:12.986 [DEBUG] [Thread-302712] [transport.py] [_log()] userauth is OK
2025-12-24T13:14:12.986 [DEBUG] [Thread-302712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:14:12.986 [DEBUG] [Thread-302712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:14:12.986 [DEBUG] [Thread-302712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:14:12.986 [DEBUG] [Thread-302712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:14:13.025 [INFO] [Thread-302712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:14:13.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:14:13.681 [DEBUG] [Thread-302712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:14:13.681 [DEBUG] [Thread-302712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:14:13.682 [DEBUG] [Thread-302712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:14:13.723 [DEBUG] [Thread-302712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:14:13.723 [DEBUG] [Thread-302712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:14:13.726 [DEBUG] [Thread-302712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:14:13.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:14:13.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:14:13.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:14:13.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:14:13.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:14:13.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:14:13.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:14:13.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:14:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:14:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.467777 -999.00  +22.80  10.51     32   +5.60 1 2 1 1 1   888    0 16.56 -43.65 ----- 10.5 10.5 96.5 14.1 33.0 -18.9 32.3 -21.7 32.6 -19.9 33.5 -18.8
2025-12-24T13:14:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:14:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:14:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.467777
2025-12-24T13:14:13.758 [DEBUG] [Thread-302712] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:14:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:14:13.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:14:13.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:14:13.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:14:13.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:14:13.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:13:35', tmtdew=19.85, humidity=27.39, cloud=0.0, wind=8.82, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:13:35.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:14:13.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:14:13.860 [DEBUG] [Thread-302715] [transport.py] [_log()] starting thread (client mode): 0xf81f0dc0
2025-12-24T13:14:13.860 [DEBUG] [Thread-302715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:14:13.876 [DEBUG] [Thread-302715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:14:13.876 [INFO] [Thread-302715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] client lang: <none>
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] server lang: <none>
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] kex follows: False
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] Compression: none
2025-12-24T13:14:13.884 [DEBUG] [Thread-302715] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:14:13.944 [DEBUG] [Thread-302715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:14:13.944 [DEBUG] [Thread-302715] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:14:13.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:14:13.944 [DEBUG] [Thread-302715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:14:13.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:14:14.001 [DEBUG] [Thread-302715] [transport.py] [_log()] userauth is OK
2025-12-24T13:14:14.001 [DEBUG] [Thread-302715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:14:14.001 [DEBUG] [Thread-302715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:14:14.001 [DEBUG] [Thread-302715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:14:14.001 [DEBUG] [Thread-302715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:14:14.015 [INFO] [Thread-302715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:14:14.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:14:14.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:14:14.922 [DEBUG] [Thread-302715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:14:14.923 [DEBUG] [Thread-302715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:14:14.961 [DEBUG] [Thread-302715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:14:14.962 [DEBUG] [Thread-302715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:14:14.971 [DEBUG] [Thread-302715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:14:14.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:14:14.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:14:14.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:14:15.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:14:15.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:14:15.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:14:15.009 [DEBUG] [Thread-302715] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:14:19.549 [DEBUG] [Thread-302717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:14:19.685 [DEBUG] [Thread-302718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:14:34.835 [DEBUG] [Thread-302719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:14:45.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:14:45.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:14:45.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:14:45.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 14, 8), 19.85, 27.39, 0.0, 8.74, 22.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:14:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:14:08
2025-12-24T13:14:46.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:14:46.285 [DEBUG] [Thread-302720] [transport.py] [_log()] starting thread (client mode): 0xf57426e0
2025-12-24T13:14:46.286 [DEBUG] [Thread-302720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:14:46.295 [DEBUG] [Thread-302720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:14:46.295 [INFO] [Thread-302720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:14:46.300 [DEBUG] [Thread-302720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] client lang: <none>
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] server lang: <none>
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] kex follows: False
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:14:46.301 [DEBUG] [Thread-302720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:14:46.302 [DEBUG] [Thread-302720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:14:46.302 [DEBUG] [Thread-302720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:14:46.302 [DEBUG] [Thread-302720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:14:46.302 [DEBUG] [Thread-302720] [transport.py] [_log()] Compression: none
2025-12-24T13:14:46.302 [DEBUG] [Thread-302720] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:14:46.339 [DEBUG] [Thread-302720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:14:46.343 [DEBUG] [Thread-302720] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:14:46.345 [DEBUG] [Thread-302720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:14:46.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:14:46.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:14:46.351 [DEBUG] [Thread-302720] [transport.py] [_log()] userauth is OK
2025-12-24T13:14:46.351 [DEBUG] [Thread-302720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:14:46.352 [DEBUG] [Thread-302720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:14:46.352 [DEBUG] [Thread-302720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:14:46.352 [DEBUG] [Thread-302720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:14:46.380 [INFO] [Thread-302720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:14:46.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:14:47.035 [DEBUG] [Thread-302720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:14:47.035 [DEBUG] [Thread-302720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:14:47.036 [DEBUG] [Thread-302720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:14:47.076 [DEBUG] [Thread-302720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:14:47.076 [DEBUG] [Thread-302720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:14:47.078 [DEBUG] [Thread-302720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:14:47.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:14:47.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:14:47.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:14:47.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:14:47.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:14:47.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:14:47.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:14:47.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:14:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:14:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.468125 -999.00  +22.70   9.16     32   +5.50 1 2 1 1 1   888    0 16.21 -42.01 ----- 9.2 9.2 115.2 14.1 32.8 -20.2 32.5 -20.8 32.7 -19.3 33.5 -18.7
2025-12-24T13:14:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:14:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:14:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.468125
2025-12-24T13:14:47.107 [DEBUG] [Thread-302720] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:14:47.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:14:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:14:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:14:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:14:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:14:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:14:08', tmtdew=19.85, humidity=27.39, cloud=0.0, wind=8.74, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:14:06.000', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:14:47.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:14:47.219 [DEBUG] [Thread-302723] [transport.py] [_log()] starting thread (client mode): 0xf5742c20
2025-12-24T13:14:47.219 [DEBUG] [Thread-302723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:14:47.234 [DEBUG] [Thread-302723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:14:47.234 [INFO] [Thread-302723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] client lang: <none>
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] server lang: <none>
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] kex follows: False
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] Compression: none
2025-12-24T13:14:47.241 [DEBUG] [Thread-302723] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:14:47.299 [DEBUG] [Thread-302723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:14:47.299 [DEBUG] [Thread-302723] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:14:47.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:14:47.299 [DEBUG] [Thread-302723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:14:47.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:14:47.357 [DEBUG] [Thread-302723] [transport.py] [_log()] userauth is OK
2025-12-24T13:14:47.357 [DEBUG] [Thread-302723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:14:47.357 [DEBUG] [Thread-302723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:14:47.357 [DEBUG] [Thread-302723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:14:47.357 [DEBUG] [Thread-302723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:14:47.374 [INFO] [Thread-302723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:14:47.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:14:47.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:14:48.293 [DEBUG] [Thread-302723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:14:48.294 [DEBUG] [Thread-302723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:14:48.342 [DEBUG] [Thread-302723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:14:48.342 [DEBUG] [Thread-302723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:14:48.350 [DEBUG] [Thread-302723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:14:48.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:14:48.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:14:48.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:14:48.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:14:48.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:14:48.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:14:48.386 [DEBUG] [Thread-302723] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:14:49.915 [DEBUG] [Thread-302725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:15:03.893 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:15:03.895 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:15:05.064 [DEBUG] [Thread-302726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:15:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:15:18.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:15:18.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
2025-12-24T13:15:19.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 15, 15), 19.91, 27.04, 0.0, 9.97, 22.6, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:15:19.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:15:15
2025-12-24T13:15:19.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:15:19.579 [DEBUG] [Thread-302727] [transport.py] [_log()] starting thread (client mode): 0xf81e7610
2025-12-24T13:15:19.580 [DEBUG] [Thread-302727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:15:19.588 [DEBUG] [Thread-302727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:15:19.588 [INFO] [Thread-302727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:15:19.593 [DEBUG] [Thread-302727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] client lang: <none>
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] server lang: <none>
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] kex follows: False
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] Compression: none
2025-12-24T13:15:19.594 [DEBUG] [Thread-302727] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:15:19.624 [DEBUG] [Thread-302727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:15:19.628 [DEBUG] [Thread-302727] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:15:19.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:15:19.630 [DEBUG] [Thread-302727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:15:19.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:15:19.632 [DEBUG] [Thread-302727] [transport.py] [_log()] userauth is OK
2025-12-24T13:15:19.633 [DEBUG] [Thread-302727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:15:19.633 [DEBUG] [Thread-302727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:15:19.633 [DEBUG] [Thread-302727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:15:19.633 [DEBUG] [Thread-302727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:15:19.651 [INFO] [Thread-302727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:15:19.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:15:19.783 [DEBUG] [Thread-302729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:15:20.138 [DEBUG] [Thread-302730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:15:20.312 [DEBUG] [Thread-302727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:15:20.312 [DEBUG] [Thread-302727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:15:20.313 [DEBUG] [Thread-302727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:15:20.354 [DEBUG] [Thread-302727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:15:20.354 [DEBUG] [Thread-302727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:15:20.356 [DEBUG] [Thread-302727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:15:20.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:15:20.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:15:20.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:15:20.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:15:20.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:15:20.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:15:20.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:15:20.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:15:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:15:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.468472 -999.00  +23.00   7.43     32   +5.60 1 1 1 1 1   888    0 16.25 -42.06 ----- 7.4 7.4 121.8 11.0 32.7 -22.6 32.3 -24.4 32.5 -24.7 33.4 -21.5
2025-12-24T13:15:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:15:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:15:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.468472
2025-12-24T13:15:20.386 [DEBUG] [Thread-302727] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:15:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:15:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:15:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:15:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:15:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:15:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:15:15', tmtdew=19.91, humidity=27.04, cloud=0.0, wind=9.97, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:14:35.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:15:20.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:15:20.484 [DEBUG] [Thread-302732] [transport.py] [_log()] starting thread (client mode): 0xf57a8fa0
2025-12-24T13:15:20.485 [DEBUG] [Thread-302732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:15:20.500 [DEBUG] [Thread-302732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:15:20.500 [INFO] [Thread-302732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:15:20.507 [DEBUG] [Thread-302732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:15:20.507 [DEBUG] [Thread-302732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:15:20.507 [DEBUG] [Thread-302732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] client lang: <none>
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] server lang: <none>
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] kex follows: False
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] Compression: none
2025-12-24T13:15:20.508 [DEBUG] [Thread-302732] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:15:20.562 [DEBUG] [Thread-302732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:15:20.563 [DEBUG] [Thread-302732] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:15:20.563 [DEBUG] [Thread-302732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:15:20.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:15:20.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:15:20.624 [DEBUG] [Thread-302732] [transport.py] [_log()] userauth is OK
2025-12-24T13:15:20.624 [DEBUG] [Thread-302732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:15:20.624 [DEBUG] [Thread-302732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:15:20.624 [DEBUG] [Thread-302732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:15:20.624 [DEBUG] [Thread-302732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:15:20.642 [INFO] [Thread-302732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:15:20.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:15:20.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:15:21.594 [DEBUG] [Thread-302732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:15:21.595 [DEBUG] [Thread-302732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:15:21.641 [DEBUG] [Thread-302732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:15:21.641 [DEBUG] [Thread-302732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:15:21.649 [DEBUG] [Thread-302732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:15:21.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:15:21.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:15:21.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:15:21.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:15:21.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:15:21.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:15:21.683 [DEBUG] [Thread-302732] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:15:35.215 [DEBUG] [Thread-302734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:15:50.361 [DEBUG] [Thread-302735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:15:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:15:51.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:15:51.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:15:52.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 15, 47), 19.65, 27.58, 0.0, 5.56, 22.4, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:15:52.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:15:47
2025-12-24T13:15:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:15:53.003 [DEBUG] [Thread-302736] [transport.py] [_log()] starting thread (client mode): 0xf81c3070
2025-12-24T13:15:53.004 [DEBUG] [Thread-302736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:15:53.004 [DEBUG] [Thread-302736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:15:53.004 [INFO] [Thread-302736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:15:53.009 [DEBUG] [Thread-302736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:15:53.009 [DEBUG] [Thread-302736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:15:53.009 [DEBUG] [Thread-302736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:15:53.009 [DEBUG] [Thread-302736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:15:53.009 [DEBUG] [Thread-302736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:15:53.009 [DEBUG] [Thread-302736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:15:53.009 [DEBUG] [Thread-302736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:15:53.010 [DEBUG] [Thread-302736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:15:53.010 [DEBUG] [Thread-302736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:15:53.010 [DEBUG] [Thread-302736] [transport.py] [_log()] client lang: <none>
2025-12-24T13:15:53.010 [DEBUG] [Thread-302736] [transport.py] [_log()] server lang: <none>
2025-12-24T13:15:53.010 [DEBUG] [Thread-302736] [transport.py] [_log()] kex follows: False
2025-12-24T13:15:53.010 [DEBUG] [Thread-302736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:15:53.011 [DEBUG] [Thread-302736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:15:53.011 [DEBUG] [Thread-302736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:15:53.011 [DEBUG] [Thread-302736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:15:53.012 [DEBUG] [Thread-302736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:15:53.012 [DEBUG] [Thread-302736] [transport.py] [_log()] Compression: none
2025-12-24T13:15:53.012 [DEBUG] [Thread-302736] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:15:53.055 [DEBUG] [Thread-302736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:15:53.059 [DEBUG] [Thread-302736] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:15:53.061 [DEBUG] [Thread-302736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:15:53.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:15:53.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:15:53.067 [DEBUG] [Thread-302736] [transport.py] [_log()] userauth is OK
2025-12-24T13:15:53.067 [DEBUG] [Thread-302736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:15:53.068 [DEBUG] [Thread-302736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:15:53.068 [DEBUG] [Thread-302736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:15:53.068 [DEBUG] [Thread-302736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:15:53.095 [INFO] [Thread-302736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:15:53.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:15:53.763 [DEBUG] [Thread-302736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:15:53.763 [DEBUG] [Thread-302736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:15:53.763 [DEBUG] [Thread-302736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:15:53.804 [DEBUG] [Thread-302736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:15:53.804 [DEBUG] [Thread-302736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:15:53.807 [DEBUG] [Thread-302736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:15:53.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:15:53.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:15:53.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:15:53.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:15:53.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:15:53.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:15:53.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:15:53.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:15:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:15:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.468819 -999.00  +22.80   8.13     32   +5.40 1 2 1 1 1   888    0 16.55 -42.46 ----- 8.1 8.1 116.8 12.9 32.3 -24.8 32.1 -24.1 32.4 -21.1 33.0 -25.7
2025-12-24T13:15:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:15:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:15:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.468819
2025-12-24T13:15:53.882 [DEBUG] [Thread-302736] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:15:53.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:15:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:15:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:15:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:15:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:15:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:15:47', tmtdew=19.65, humidity=27.58, cloud=0.0, wind=5.56, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:15:05.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:15:53.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:15:53.984 [DEBUG] [Thread-302739] [transport.py] [_log()] starting thread (client mode): 0xf81f0a00
2025-12-24T13:15:53.984 [DEBUG] [Thread-302739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:15:53.999 [DEBUG] [Thread-302739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:15:53.999 [INFO] [Thread-302739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:15:54.007 [DEBUG] [Thread-302739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:15:54.007 [DEBUG] [Thread-302739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:15:54.007 [DEBUG] [Thread-302739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:15:54.007 [DEBUG] [Thread-302739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:15:54.007 [DEBUG] [Thread-302739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:15:54.007 [DEBUG] [Thread-302739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:15:54.007 [DEBUG] [Thread-302739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:15:54.007 [DEBUG] [Thread-302739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] client lang: <none>
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] server lang: <none>
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] kex follows: False
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:15:54.008 [DEBUG] [Thread-302739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:15:54.009 [DEBUG] [Thread-302739] [transport.py] [_log()] Compression: none
2025-12-24T13:15:54.009 [DEBUG] [Thread-302739] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:15:54.062 [DEBUG] [Thread-302739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:15:54.063 [DEBUG] [Thread-302739] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:15:54.063 [DEBUG] [Thread-302739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:15:54.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:15:54.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:15:54.122 [DEBUG] [Thread-302739] [transport.py] [_log()] userauth is OK
2025-12-24T13:15:54.122 [DEBUG] [Thread-302739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:15:54.122 [DEBUG] [Thread-302739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:15:54.122 [DEBUG] [Thread-302739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:15:54.123 [DEBUG] [Thread-302739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:15:54.146 [INFO] [Thread-302739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:15:54.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:15:54.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:15:54.968 [DEBUG] [Thread-302739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:15:54.969 [DEBUG] [Thread-302739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:15:55.016 [DEBUG] [Thread-302739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:15:55.016 [DEBUG] [Thread-302739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:15:55.025 [DEBUG] [Thread-302739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:15:55.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:15:55.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:15:55.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:15:55.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:15:55.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:15:55.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:15:55.062 [DEBUG] [Thread-302739] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:16:04.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:16:04.054 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:16:05.451 [DEBUG] [Thread-302741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:16:20.130 [DEBUG] [Thread-302742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:16:20.662 [DEBUG] [Thread-302743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:16:25.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:16:25.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:16:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:16:26.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 16, 21), 19.66, 27.54, 0.0, 4.91, 22.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:16:26.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:16:21
2025-12-24T13:16:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:16:26.414 [DEBUG] [Thread-302744] [transport.py] [_log()] starting thread (client mode): 0xf572f340
2025-12-24T13:16:26.415 [DEBUG] [Thread-302744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:16:26.426 [DEBUG] [Thread-302744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:16:26.427 [INFO] [Thread-302744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:16:26.433 [DEBUG] [Thread-302744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:16:26.434 [DEBUG] [Thread-302744] [transport.py] [_log()] client lang: <none>
2025-12-24T13:16:26.434 [DEBUG] [Thread-302744] [transport.py] [_log()] server lang: <none>
2025-12-24T13:16:26.434 [DEBUG] [Thread-302744] [transport.py] [_log()] kex follows: False
2025-12-24T13:16:26.434 [DEBUG] [Thread-302744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:16:26.434 [DEBUG] [Thread-302744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:16:26.435 [DEBUG] [Thread-302744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:16:26.435 [DEBUG] [Thread-302744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:16:26.435 [DEBUG] [Thread-302744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:16:26.435 [DEBUG] [Thread-302744] [transport.py] [_log()] Compression: none
2025-12-24T13:16:26.435 [DEBUG] [Thread-302744] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:16:26.473 [DEBUG] [Thread-302744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:16:26.477 [DEBUG] [Thread-302744] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:16:26.479 [DEBUG] [Thread-302744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:16:26.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:16:26.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:16:26.485 [DEBUG] [Thread-302744] [transport.py] [_log()] userauth is OK
2025-12-24T13:16:26.485 [DEBUG] [Thread-302744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:16:26.485 [DEBUG] [Thread-302744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:16:26.485 [DEBUG] [Thread-302744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:16:26.485 [DEBUG] [Thread-302744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:16:26.511 [INFO] [Thread-302744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:16:26.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:16:27.155 [DEBUG] [Thread-302744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:16:27.155 [DEBUG] [Thread-302744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:16:27.156 [DEBUG] [Thread-302744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:16:27.196 [DEBUG] [Thread-302744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:16:27.196 [DEBUG] [Thread-302744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:16:27.199 [DEBUG] [Thread-302744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:16:27.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:16:27.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:16:27.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:16:27.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:16:27.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:16:27.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:16:27.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:16:27.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:16:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:16:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.469166 -999.00  +22.70   5.46     32   +5.50 1 2 1 1 1   888    0 16.16 -44.29 ----- 5.5 5.5 76.3 8.9 32.4 -19.0 32.5 -21.1 32.7 -20.0 33.2 -19.3
2025-12-24T13:16:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:16:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:16:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.469166
2025-12-24T13:16:27.238 [DEBUG] [Thread-302744] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:16:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:16:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:16:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:16:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:16:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:16:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:16:21', tmtdew=19.66, humidity=27.54, cloud=0.0, wind=4.91, temperature=22.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:15:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:16:27.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:16:27.355 [DEBUG] [Thread-302747] [transport.py] [_log()] starting thread (client mode): 0xf81c0580
2025-12-24T13:16:27.355 [DEBUG] [Thread-302747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:16:27.371 [DEBUG] [Thread-302747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:16:27.371 [INFO] [Thread-302747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:16:27.379 [DEBUG] [Thread-302747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:16:27.379 [DEBUG] [Thread-302747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:16:27.379 [DEBUG] [Thread-302747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] client lang: <none>
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] server lang: <none>
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] kex follows: False
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:16:27.380 [DEBUG] [Thread-302747] [transport.py] [_log()] Compression: none
2025-12-24T13:16:27.381 [DEBUG] [Thread-302747] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:16:27.440 [DEBUG] [Thread-302747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:16:27.441 [DEBUG] [Thread-302747] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:16:27.441 [DEBUG] [Thread-302747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:16:27.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:16:27.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:16:27.499 [DEBUG] [Thread-302747] [transport.py] [_log()] userauth is OK
2025-12-24T13:16:27.500 [DEBUG] [Thread-302747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:16:27.500 [DEBUG] [Thread-302747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:16:27.500 [DEBUG] [Thread-302747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:16:27.500 [DEBUG] [Thread-302747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:16:27.519 [INFO] [Thread-302747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:16:27.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:16:27.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:16:28.406 [DEBUG] [Thread-302747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:16:28.406 [DEBUG] [Thread-302747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:16:28.454 [DEBUG] [Thread-302747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:16:28.454 [DEBUG] [Thread-302747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:16:28.466 [DEBUG] [Thread-302747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:16:28.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:16:28.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:16:28.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:16:28.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:16:28.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:16:28.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:16:28.505 [DEBUG] [Thread-302747] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:16:35.750 [DEBUG] [Thread-302749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:16:50.901 [DEBUG] [Thread-302750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:16:58.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:16:58.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:16:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:16:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 16, 54), 19.49, 27.69, 0.0, 4.68, 22.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:16:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:16:54
2025-12-24T13:16:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:16:59.793 [DEBUG] [Thread-302751] [transport.py] [_log()] starting thread (client mode): 0xf572d570
2025-12-24T13:16:59.794 [DEBUG] [Thread-302751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:16:59.803 [DEBUG] [Thread-302751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:16:59.803 [INFO] [Thread-302751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:16:59.809 [DEBUG] [Thread-302751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:16:59.809 [DEBUG] [Thread-302751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:16:59.809 [DEBUG] [Thread-302751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:16:59.809 [DEBUG] [Thread-302751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:16:59.809 [DEBUG] [Thread-302751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:16:59.810 [DEBUG] [Thread-302751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:16:59.810 [DEBUG] [Thread-302751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:16:59.810 [DEBUG] [Thread-302751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:16:59.810 [DEBUG] [Thread-302751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:16:59.810 [DEBUG] [Thread-302751] [transport.py] [_log()] client lang: <none>
2025-12-24T13:16:59.810 [DEBUG] [Thread-302751] [transport.py] [_log()] server lang: <none>
2025-12-24T13:16:59.810 [DEBUG] [Thread-302751] [transport.py] [_log()] kex follows: False
2025-12-24T13:16:59.810 [DEBUG] [Thread-302751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:16:59.811 [DEBUG] [Thread-302751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:16:59.811 [DEBUG] [Thread-302751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:16:59.811 [DEBUG] [Thread-302751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:16:59.811 [DEBUG] [Thread-302751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:16:59.812 [DEBUG] [Thread-302751] [transport.py] [_log()] Compression: none
2025-12-24T13:16:59.812 [DEBUG] [Thread-302751] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:16:59.852 [DEBUG] [Thread-302751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:16:59.857 [DEBUG] [Thread-302751] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:16:59.859 [DEBUG] [Thread-302751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:16:59.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:16:59.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:16:59.864 [DEBUG] [Thread-302751] [transport.py] [_log()] userauth is OK
2025-12-24T13:16:59.865 [DEBUG] [Thread-302751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:16:59.865 [DEBUG] [Thread-302751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:16:59.865 [DEBUG] [Thread-302751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:16:59.865 [DEBUG] [Thread-302751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:16:59.904 [INFO] [Thread-302751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:16:59.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:17:00.541 [DEBUG] [Thread-302751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:17:00.541 [DEBUG] [Thread-302751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:17:00.542 [DEBUG] [Thread-302751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:17:00.582 [DEBUG] [Thread-302751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:17:00.583 [DEBUG] [Thread-302751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:17:00.586 [DEBUG] [Thread-302751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:17:00.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:17:00.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:17:00.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:17:00.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:17:00.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:17:00.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:17:00.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:17:00.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:17:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:17:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.469514 -999.00  +23.00  10.32     32   +5.60 1 2 1 1 1   888    0 16.41 -46.53 ----- 10.3 10.3 282.4 13.3 32.7 -19.7 32.4 -21.1 32.9 -22.4 33.5 -19.1
2025-12-24T13:17:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:17:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:17:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.469514
2025-12-24T13:17:00.622 [DEBUG] [Thread-302751] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:17:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:17:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:17:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:17:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:17:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:17:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:16:54', tmtdew=19.49, humidity=27.69, cloud=0.0, wind=4.68, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:16:06.010', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:17:00.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:17:00.737 [DEBUG] [Thread-302754] [transport.py] [_log()] starting thread (client mode): 0xf81c2f20
2025-12-24T13:17:00.738 [DEBUG] [Thread-302754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:17:00.753 [DEBUG] [Thread-302754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:17:00.753 [INFO] [Thread-302754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:17:00.761 [DEBUG] [Thread-302754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:17:00.761 [DEBUG] [Thread-302754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:17:00.761 [DEBUG] [Thread-302754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:17:00.761 [DEBUG] [Thread-302754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:17:00.761 [DEBUG] [Thread-302754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:17:00.762 [DEBUG] [Thread-302754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:17:00.762 [DEBUG] [Thread-302754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:17:00.762 [DEBUG] [Thread-302754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:17:00.762 [DEBUG] [Thread-302754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:17:00.762 [DEBUG] [Thread-302754] [transport.py] [_log()] client lang: <none>
2025-12-24T13:17:00.762 [DEBUG] [Thread-302754] [transport.py] [_log()] server lang: <none>
2025-12-24T13:17:00.762 [DEBUG] [Thread-302754] [transport.py] [_log()] kex follows: False
2025-12-24T13:17:00.763 [DEBUG] [Thread-302754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:17:00.763 [DEBUG] [Thread-302754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:17:00.763 [DEBUG] [Thread-302754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:17:00.763 [DEBUG] [Thread-302754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:17:00.763 [DEBUG] [Thread-302754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:17:00.763 [DEBUG] [Thread-302754] [transport.py] [_log()] Compression: none
2025-12-24T13:17:00.763 [DEBUG] [Thread-302754] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:17:00.823 [DEBUG] [Thread-302754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:17:00.823 [DEBUG] [Thread-302754] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:17:00.824 [DEBUG] [Thread-302754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:17:00.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:17:00.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:17:00.879 [DEBUG] [Thread-302754] [transport.py] [_log()] userauth is OK
2025-12-24T13:17:00.879 [DEBUG] [Thread-302754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:17:00.881 [DEBUG] [Thread-302754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:17:00.882 [DEBUG] [Thread-302754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:17:00.882 [DEBUG] [Thread-302754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:17:00.903 [INFO] [Thread-302754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:17:00.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:17:00.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:17:01.792 [DEBUG] [Thread-302754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:17:01.793 [DEBUG] [Thread-302754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:17:01.840 [DEBUG] [Thread-302754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:17:01.841 [DEBUG] [Thread-302754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:17:01.849 [DEBUG] [Thread-302754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:17:01.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:17:01.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')
2025-12-24T13:17:01.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
2025-12-24T13:17:01.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:17:01.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:17:01.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:17:01.882 [DEBUG] [Thread-302754] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:17:04.205 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:17:04.215 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:17:05.983 [DEBUG] [Thread-302756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:17:20.423 [DEBUG] [Thread-302757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:17:21.203 [DEBUG] [Thread-302758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:17:31.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:17:31.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:17:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:17:32.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 17, 27), 19.61, 27.49, 0.0, 6.46, 22.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:17:32.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:17:27
2025-12-24T13:17:32.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:17:33.114 [DEBUG] [Thread-302759] [transport.py] [_log()] starting thread (client mode): 0xf574c1f0
2025-12-24T13:17:33.114 [DEBUG] [Thread-302759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:17:33.123 [DEBUG] [Thread-302759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:17:33.123 [INFO] [Thread-302759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] client lang: <none>
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] server lang: <none>
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] kex follows: False
2025-12-24T13:17:33.129 [DEBUG] [Thread-302759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:17:33.130 [DEBUG] [Thread-302759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:17:33.130 [DEBUG] [Thread-302759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:17:33.130 [DEBUG] [Thread-302759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:17:33.130 [DEBUG] [Thread-302759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:17:33.130 [DEBUG] [Thread-302759] [transport.py] [_log()] Compression: none
2025-12-24T13:17:33.130 [DEBUG] [Thread-302759] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:17:33.171 [DEBUG] [Thread-302759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:17:33.177 [DEBUG] [Thread-302759] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:17:33.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:17:33.183 [DEBUG] [Thread-302759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:17:33.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:17:33.185 [DEBUG] [Thread-302759] [transport.py] [_log()] userauth is OK
2025-12-24T13:17:33.185 [DEBUG] [Thread-302759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:17:33.185 [DEBUG] [Thread-302759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:17:33.185 [DEBUG] [Thread-302759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:17:33.185 [DEBUG] [Thread-302759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:17:33.212 [INFO] [Thread-302759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:17:33.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:17:33.876 [DEBUG] [Thread-302759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:17:33.876 [DEBUG] [Thread-302759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:17:33.877 [DEBUG] [Thread-302759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:17:33.916 [DEBUG] [Thread-302759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:17:33.916 [DEBUG] [Thread-302759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:17:33.920 [DEBUG] [Thread-302759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:17:33.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:17:33.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:17:33.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:17:33.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:17:33.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:17:33.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:17:33.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:17:33.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:17:33.949 [DEBUG] [Thread-302759] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:17:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:17:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.469861 -999.00  +23.00   7.89     32   +5.50 1 2 1 1 1   888    0 16.06 -49.92 ----- 7.9 7.9 289.8 10.3 32.8 -21.2 32.6 -20.6 32.9 -18.3 33.5 -19.4
2025-12-24T13:17:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:17:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:17:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.469861
2025-12-24T13:17:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:17:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:17:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:17:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:17:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:17:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:17:27', tmtdew=19.61, humidity=27.49, cloud=0.0, wind=6.46, temperature=22.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:16:35.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:17:34.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:17:34.070 [DEBUG] [Thread-302762] [transport.py] [_log()] starting thread (client mode): 0xf5740610
2025-12-24T13:17:34.070 [DEBUG] [Thread-302762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:17:34.085 [DEBUG] [Thread-302762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:17:34.085 [INFO] [Thread-302762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] client lang: <none>
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] server lang: <none>
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] kex follows: False
2025-12-24T13:17:34.093 [DEBUG] [Thread-302762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:17:34.094 [DEBUG] [Thread-302762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:17:34.094 [DEBUG] [Thread-302762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:17:34.094 [DEBUG] [Thread-302762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:17:34.094 [DEBUG] [Thread-302762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:17:34.094 [DEBUG] [Thread-302762] [transport.py] [_log()] Compression: none
2025-12-24T13:17:34.094 [DEBUG] [Thread-302762] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:17:34.150 [DEBUG] [Thread-302762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:17:34.151 [DEBUG] [Thread-302762] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:17:34.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:17:34.152 [DEBUG] [Thread-302762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:17:34.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:17:34.207 [DEBUG] [Thread-302762] [transport.py] [_log()] userauth is OK
2025-12-24T13:17:34.207 [DEBUG] [Thread-302762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:17:34.207 [DEBUG] [Thread-302762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:17:34.207 [DEBUG] [Thread-302762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:17:34.207 [DEBUG] [Thread-302762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:17:34.225 [INFO] [Thread-302762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:17:34.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:17:34.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:17:35.051 [DEBUG] [Thread-302762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:17:35.051 [DEBUG] [Thread-302762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:17:35.090 [DEBUG] [Thread-302762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:17:35.090 [DEBUG] [Thread-302762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:17:35.099 [DEBUG] [Thread-302762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:17:35.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:17:35.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')
2025-12-24T13:17:35.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
2025-12-24T13:17:35.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:17:35.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:17:35.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:17:35.132 [DEBUG] [Thread-302762] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:17:36.272 [DEBUG] [Thread-302764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:17:51.376 [DEBUG] [Thread-302765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:18:04.369 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:18:04.382 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:18:05.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:18:05.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:18:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:18:06.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 18), 19.79, 27.43, 0.0, 8.42, 22.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:18:06.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:18:00
2025-12-24T13:18:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:18:06.423 [DEBUG] [Thread-302766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:18:06.481 [DEBUG] [Thread-302767] [transport.py] [_log()] starting thread (client mode): 0xf5743ee0
2025-12-24T13:18:06.482 [DEBUG] [Thread-302767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:18:06.495 [DEBUG] [Thread-302767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:18:06.495 [INFO] [Thread-302767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:18:06.504 [DEBUG] [Thread-302767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] client lang: <none>
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] server lang: <none>
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] kex follows: False
2025-12-24T13:18:06.505 [DEBUG] [Thread-302767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:18:06.506 [DEBUG] [Thread-302767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:18:06.506 [DEBUG] [Thread-302767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:18:06.507 [DEBUG] [Thread-302767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:18:06.507 [DEBUG] [Thread-302767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:18:06.507 [DEBUG] [Thread-302767] [transport.py] [_log()] Compression: none
2025-12-24T13:18:06.507 [DEBUG] [Thread-302767] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:18:06.544 [DEBUG] [Thread-302767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:18:06.548 [DEBUG] [Thread-302767] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:18:06.551 [DEBUG] [Thread-302767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:18:06.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:18:06.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:18:06.555 [DEBUG] [Thread-302767] [transport.py] [_log()] userauth is OK
2025-12-24T13:18:06.555 [DEBUG] [Thread-302767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:18:06.556 [DEBUG] [Thread-302767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:18:06.556 [DEBUG] [Thread-302767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:18:06.556 [DEBUG] [Thread-302767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:18:06.582 [INFO] [Thread-302767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:18:06.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:18:07.182 [DEBUG] [Thread-302767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:18:07.182 [DEBUG] [Thread-302767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:18:07.183 [DEBUG] [Thread-302767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:18:07.224 [DEBUG] [Thread-302767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:18:07.224 [DEBUG] [Thread-302767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:18:07.226 [DEBUG] [Thread-302767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:18:07.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:18:07.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:18:07.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:18:07.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:18:07.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:18:07.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:18:07.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:18:07.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:18:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:18:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.470208 -999.00  +23.10   6.75     32   +5.70 1 2 1 1 1   888    0 15.95 -52.76 ----- 6.8 6.8 286.8 8.6 33.2 -19.5 32.8 -20.1 33.1 -18.6 33.7 -18.9
2025-12-24T13:18:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:18:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:18:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.470208
2025-12-24T13:18:07.252 [DEBUG] [Thread-302767] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:18:07.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:18:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:18:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:18:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:18:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:18:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:18:00', tmtdew=19.79, humidity=27.43, cloud=0.0, wind=8.42, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:17:05.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:18:07.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:18:07.355 [DEBUG] [Thread-302770] [transport.py] [_log()] starting thread (client mode): 0xf574d750
2025-12-24T13:18:07.355 [DEBUG] [Thread-302770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:18:07.370 [DEBUG] [Thread-302770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:18:07.370 [INFO] [Thread-302770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] client lang: <none>
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] server lang: <none>
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] kex follows: False
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] Compression: none
2025-12-24T13:18:07.377 [DEBUG] [Thread-302770] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:18:07.433 [DEBUG] [Thread-302770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:18:07.434 [DEBUG] [Thread-302770] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:18:07.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:18:07.434 [DEBUG] [Thread-302770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:18:07.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:18:07.494 [DEBUG] [Thread-302770] [transport.py] [_log()] userauth is OK
2025-12-24T13:18:07.494 [DEBUG] [Thread-302770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:18:07.494 [DEBUG] [Thread-302770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:18:07.494 [DEBUG] [Thread-302770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:18:07.494 [DEBUG] [Thread-302770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:18:07.508 [INFO] [Thread-302770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:18:07.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:18:07.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:18:08.400 [DEBUG] [Thread-302770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:18:08.400 [DEBUG] [Thread-302770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:18:08.448 [DEBUG] [Thread-302770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:18:08.448 [DEBUG] [Thread-302770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:18:08.456 [DEBUG] [Thread-302770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:18:08.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:18:08.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:18:08.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:18:08.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:18:08.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:18:08.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:18:08.489 [DEBUG] [Thread-302770] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:18:20.711 [DEBUG] [Thread-302772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:18:21.500 [DEBUG] [Thread-302773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:18:36.700 [DEBUG] [Thread-302774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:18:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:18:38.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:18:38.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:18:39.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 18, 34), 20.35, 26.28, 0.0, 9.56, 23.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:18:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:18:34
2025-12-24T13:18:39.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:18:39.802 [DEBUG] [Thread-302775] [transport.py] [_log()] starting thread (client mode): 0xf5773be0
2025-12-24T13:18:39.802 [DEBUG] [Thread-302775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:18:39.807 [DEBUG] [Thread-302775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:18:39.807 [INFO] [Thread-302775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] client lang: <none>
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] server lang: <none>
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] kex follows: False
2025-12-24T13:18:39.811 [DEBUG] [Thread-302775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:18:39.812 [DEBUG] [Thread-302775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:18:39.812 [DEBUG] [Thread-302775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:18:39.812 [DEBUG] [Thread-302775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:18:39.812 [DEBUG] [Thread-302775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:18:39.812 [DEBUG] [Thread-302775] [transport.py] [_log()] Compression: none
2025-12-24T13:18:39.812 [DEBUG] [Thread-302775] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:18:39.843 [DEBUG] [Thread-302775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:18:39.846 [DEBUG] [Thread-302775] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:18:39.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:18:39.849 [DEBUG] [Thread-302775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:18:39.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:18:39.853 [DEBUG] [Thread-302775] [transport.py] [_log()] userauth is OK
2025-12-24T13:18:39.853 [DEBUG] [Thread-302775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:18:39.854 [DEBUG] [Thread-302775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:18:39.854 [DEBUG] [Thread-302775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:18:39.854 [DEBUG] [Thread-302775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:18:39.896 [INFO] [Thread-302775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:18:39.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:18:40.531 [DEBUG] [Thread-302775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:18:40.531 [DEBUG] [Thread-302775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:18:40.541 [DEBUG] [Thread-302775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:18:40.573 [DEBUG] [Thread-302775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:18:40.573 [DEBUG] [Thread-302775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:18:40.575 [DEBUG] [Thread-302775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:18:40.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:18:40.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:18:40.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:18:40.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:18:40.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:18:40.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:18:40.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:18:40.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:18:40.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:18:40.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.470555 -999.00  +23.30   6.40     32   +5.80 1 2 1 1 1   888    0 15.81 -48.94 ----- 6.4 6.4 30.2 7.3 33.5 -19.8 33.0 -20.4 33.2 -18.5 33.9 -19.2
2025-12-24T13:18:40.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:18:40.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:18:40.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.470555
2025-12-24T13:18:40.602 [DEBUG] [Thread-302775] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:18:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:18:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:18:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:18:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:18:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:18:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:18:34', tmtdew=20.35, humidity=26.28, cloud=0.0, wind=9.56, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:17:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:18:40.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:18:40.697 [DEBUG] [Thread-302778] [transport.py] [_log()] starting thread (client mode): 0xf5771930
2025-12-24T13:18:40.697 [DEBUG] [Thread-302778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:18:40.711 [DEBUG] [Thread-302778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:18:40.711 [INFO] [Thread-302778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] client lang: <none>
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] server lang: <none>
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] kex follows: False
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:18:40.719 [DEBUG] [Thread-302778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:18:40.720 [DEBUG] [Thread-302778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:18:40.720 [DEBUG] [Thread-302778] [transport.py] [_log()] Compression: none
2025-12-24T13:18:40.720 [DEBUG] [Thread-302778] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:18:40.776 [DEBUG] [Thread-302778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:18:40.776 [DEBUG] [Thread-302778] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:18:40.776 [DEBUG] [Thread-302778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:18:40.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:18:40.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:18:40.837 [DEBUG] [Thread-302778] [transport.py] [_log()] userauth is OK
2025-12-24T13:18:40.837 [DEBUG] [Thread-302778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:18:40.837 [DEBUG] [Thread-302778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:18:40.837 [DEBUG] [Thread-302778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:18:40.837 [DEBUG] [Thread-302778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:18:40.856 [INFO] [Thread-302778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:18:40.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:18:40.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:18:41.699 [DEBUG] [Thread-302778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:18:41.700 [DEBUG] [Thread-302778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:18:41.738 [DEBUG] [Thread-302778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:18:41.739 [DEBUG] [Thread-302778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:18:41.748 [DEBUG] [Thread-302778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:18:41.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:18:41.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:18:41.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:18:41.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:18:41.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:18:41.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:18:41.787 [DEBUG] [Thread-302778] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:18:51.817 [DEBUG] [Thread-302780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:19:04.548 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:19:04.553 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:19:06.959 [DEBUG] [Thread-302781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:19:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:19:11.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:19:11.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:19:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 19, 7), 20.41, 26.18, 0.0, 10.23, 23.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:19:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:19:07
2025-12-24T13:19:12.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:19:13.163 [DEBUG] [Thread-302782] [transport.py] [_log()] starting thread (client mode): 0xf5773f70
2025-12-24T13:19:13.164 [DEBUG] [Thread-302782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:19:13.172 [DEBUG] [Thread-302782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:19:13.172 [INFO] [Thread-302782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] client lang: <none>
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] server lang: <none>
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] kex follows: False
2025-12-24T13:19:13.177 [DEBUG] [Thread-302782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:19:13.178 [DEBUG] [Thread-302782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:19:13.178 [DEBUG] [Thread-302782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:19:13.178 [DEBUG] [Thread-302782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:19:13.178 [DEBUG] [Thread-302782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:19:13.178 [DEBUG] [Thread-302782] [transport.py] [_log()] Compression: none
2025-12-24T13:19:13.178 [DEBUG] [Thread-302782] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:19:13.202 [DEBUG] [Thread-302782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:19:13.206 [DEBUG] [Thread-302782] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:19:13.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:19:13.209 [DEBUG] [Thread-302782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:19:13.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:19:13.212 [DEBUG] [Thread-302782] [transport.py] [_log()] userauth is OK
2025-12-24T13:19:13.212 [DEBUG] [Thread-302782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:19:13.212 [DEBUG] [Thread-302782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:19:13.212 [DEBUG] [Thread-302782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:19:13.212 [DEBUG] [Thread-302782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:19:13.230 [INFO] [Thread-302782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:19:13.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:19:13.899 [DEBUG] [Thread-302782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:19:13.899 [DEBUG] [Thread-302782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:19:13.899 [DEBUG] [Thread-302782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:19:13.939 [DEBUG] [Thread-302782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:19:13.939 [DEBUG] [Thread-302782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:19:13.942 [DEBUG] [Thread-302782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:19:13.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:19:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:19:13.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:19:13.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:19:13.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:19:13.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:19:13.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:19:13.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:19:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:19:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.471250 -999.00  +24.00  14.94     31   +5.90 1 2 1 1 1   888    0 16.43 -34.81 ----- 14.9 14.9 50.4 16.8 33.8 -21.5 33.0 -21.6 33.3 -19.5 34.1 -19.9
2025-12-24T13:19:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:19:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:19:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.471250
2025-12-24T13:19:13.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:19:13.973 [DEBUG] [Thread-302782] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:19:13.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:19:13.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:19:13.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:19:13.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:19:13.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:19:07', tmtdew=20.41, humidity=26.18, cloud=0.0, wind=10.23, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:18:36.000', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:19:14.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:19:14.066 [DEBUG] [Thread-302785] [transport.py] [_log()] starting thread (client mode): 0xf57420e0
2025-12-24T13:19:14.066 [DEBUG] [Thread-302785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:19:14.080 [DEBUG] [Thread-302785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:19:14.080 [INFO] [Thread-302785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] client lang: <none>
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] server lang: <none>
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] kex follows: False
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] Compression: none
2025-12-24T13:19:14.088 [DEBUG] [Thread-302785] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:19:14.144 [DEBUG] [Thread-302785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:19:14.144 [DEBUG] [Thread-302785] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:19:14.144 [DEBUG] [Thread-302785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:19:14.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:19:14.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:19:14.206 [DEBUG] [Thread-302785] [transport.py] [_log()] userauth is OK
2025-12-24T13:19:14.206 [DEBUG] [Thread-302785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:19:14.206 [DEBUG] [Thread-302785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:19:14.206 [DEBUG] [Thread-302785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:19:14.207 [DEBUG] [Thread-302785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:19:14.229 [INFO] [Thread-302785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:19:14.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:19:14.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:19:15.076 [DEBUG] [Thread-302785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:19:15.076 [DEBUG] [Thread-302785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:19:15.124 [DEBUG] [Thread-302785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:19:15.124 [DEBUG] [Thread-302785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:19:15.133 [DEBUG] [Thread-302785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:19:15.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:19:15.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:19:15.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:19:15.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:19:15.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:19:15.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:19:15.170 [DEBUG] [Thread-302785] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:19:21.039 [DEBUG] [Thread-302787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:19:22.066 [DEBUG] [Thread-302788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:19:37.226 [DEBUG] [Thread-302789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:19:45.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:19:45.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:19:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:19:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 19, 40), 20.72, 25.93, 0.0, 9.11, 23.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:19:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:19:40
2025-12-24T13:19:46.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:19:46.571 [DEBUG] [Thread-302790] [transport.py] [_log()] starting thread (client mode): 0xf5742f50
2025-12-24T13:19:46.571 [DEBUG] [Thread-302790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:19:46.583 [DEBUG] [Thread-302790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:19:46.583 [INFO] [Thread-302790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:19:46.589 [DEBUG] [Thread-302790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] client lang: <none>
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] server lang: <none>
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] kex follows: False
2025-12-24T13:19:46.590 [DEBUG] [Thread-302790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:19:46.591 [DEBUG] [Thread-302790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:19:46.591 [DEBUG] [Thread-302790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:19:46.591 [DEBUG] [Thread-302790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:19:46.591 [DEBUG] [Thread-302790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:19:46.591 [DEBUG] [Thread-302790] [transport.py] [_log()] Compression: none
2025-12-24T13:19:46.591 [DEBUG] [Thread-302790] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:19:46.629 [DEBUG] [Thread-302790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:19:46.633 [DEBUG] [Thread-302790] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:19:46.635 [DEBUG] [Thread-302790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:19:46.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:19:46.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:19:46.641 [DEBUG] [Thread-302790] [transport.py] [_log()] userauth is OK
2025-12-24T13:19:46.641 [DEBUG] [Thread-302790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:19:46.641 [DEBUG] [Thread-302790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:19:46.641 [DEBUG] [Thread-302790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:19:46.642 [DEBUG] [Thread-302790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:19:46.680 [INFO] [Thread-302790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:19:46.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:19:47.289 [DEBUG] [Thread-302790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:19:47.289 [DEBUG] [Thread-302790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:19:47.289 [DEBUG] [Thread-302790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:19:47.329 [DEBUG] [Thread-302790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:19:47.329 [DEBUG] [Thread-302790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:19:47.332 [DEBUG] [Thread-302790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:19:47.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:19:47.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:19:47.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:19:47.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:19:47.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:19:47.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:19:47.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:19:47.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:19:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:19:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.471597 -999.00  +24.10   8.60     30   +5.70 1 2 1 1 1   888    0 17.01 -25.85 ----- 8.6 8.6 60.6 14.6 33.6 -28.6 33.1 -22.3 33.3 -21.5 34.0 -21.4
2025-12-24T13:19:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:19:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:19:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.471597
2025-12-24T13:19:47.360 [DEBUG] [Thread-302790] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:19:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:19:47.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:19:47.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:19:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:19:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:19:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:19:40', tmtdew=20.72, humidity=25.93, cloud=0.0, wind=9.11, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:19:05.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:19:47.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:19:47.480 [DEBUG] [Thread-302793] [transport.py] [_log()] starting thread (client mode): 0xf574f790
2025-12-24T13:19:47.480 [DEBUG] [Thread-302793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:19:47.503 [DEBUG] [Thread-302793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:19:47.503 [INFO] [Thread-302793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] client lang: <none>
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] server lang: <none>
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] kex follows: False
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] Compression: none
2025-12-24T13:19:47.517 [DEBUG] [Thread-302793] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:19:47.576 [DEBUG] [Thread-302793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:19:47.577 [DEBUG] [Thread-302793] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:19:47.577 [DEBUG] [Thread-302793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:19:47.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:19:47.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:19:47.638 [DEBUG] [Thread-302793] [transport.py] [_log()] userauth is OK
2025-12-24T13:19:47.638 [DEBUG] [Thread-302793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:19:47.639 [DEBUG] [Thread-302793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:19:47.639 [DEBUG] [Thread-302793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:19:47.639 [DEBUG] [Thread-302793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:19:47.657 [INFO] [Thread-302793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:19:47.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:19:47.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:19:48.480 [DEBUG] [Thread-302793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:19:48.480 [DEBUG] [Thread-302793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:19:48.519 [DEBUG] [Thread-302793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:19:48.519 [DEBUG] [Thread-302793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:19:48.527 [DEBUG] [Thread-302793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:19:48.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:19:48.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')
2025-12-24T13:19:48.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:19:48.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:19:48.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:19:48.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:19:48.567 [DEBUG] [Thread-302793] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:19:52.320 [DEBUG] [Thread-302795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:20:04.695 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:20:04.697 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:20:07.487 [DEBUG] [Thread-302796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:20:18.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:20:18.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:20:18.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:20:19.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 13), 20.59, 26.13, 0.0, 10.9, 23.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:20:19.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:13
2025-12-24T13:20:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:20:19.703 [DEBUG] [Thread-302797] [transport.py] [_log()] starting thread (client mode): 0xf574f250
2025-12-24T13:20:19.703 [DEBUG] [Thread-302797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:20:19.713 [DEBUG] [Thread-302797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:20:19.713 [INFO] [Thread-302797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] client lang: <none>
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] server lang: <none>
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] kex follows: False
2025-12-24T13:20:19.719 [DEBUG] [Thread-302797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:20:19.720 [DEBUG] [Thread-302797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:20:19.720 [DEBUG] [Thread-302797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:20:19.720 [DEBUG] [Thread-302797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:20:19.720 [DEBUG] [Thread-302797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:20:19.720 [DEBUG] [Thread-302797] [transport.py] [_log()] Compression: none
2025-12-24T13:20:19.720 [DEBUG] [Thread-302797] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:20:19.752 [DEBUG] [Thread-302797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:20:19.756 [DEBUG] [Thread-302797] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:20:19.757 [DEBUG] [Thread-302797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:20:19.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:20:19.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:20:19.762 [DEBUG] [Thread-302797] [transport.py] [_log()] userauth is OK
2025-12-24T13:20:19.762 [DEBUG] [Thread-302797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:20:19.762 [DEBUG] [Thread-302797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:20:19.762 [DEBUG] [Thread-302797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:20:19.762 [DEBUG] [Thread-302797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:20:19.784 [INFO] [Thread-302797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:20:19.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:20:20.399 [DEBUG] [Thread-302797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:20:20.400 [DEBUG] [Thread-302797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:20:20.401 [DEBUG] [Thread-302797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:20:20.441 [DEBUG] [Thread-302797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:20:20.441 [DEBUG] [Thread-302797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:20:20.443 [DEBUG] [Thread-302797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:20:20.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:20:20.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:20:20.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:20:20.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:20:20.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:20:20.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:20:20.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:20:20.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:20:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:20:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.471944 -999.00  +24.20   8.61     30   +5.80 1 2 1 1 1   888    0 17.04 -17.46 ----- 8.6 8.6 143.4 10.9 33.8 -22.7 33.2 -21.3 33.5 -20.1 34.2 -20.8
2025-12-24T13:20:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:20:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:20:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.471944
2025-12-24T13:20:20.477 [DEBUG] [Thread-302797] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:20:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:20:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:20:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:20:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:20:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:20:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:13', tmtdew=20.59, humidity=26.13, cloud=0.0, wind=10.9, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:19:35.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:20:20.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:20:20.581 [DEBUG] [Thread-302800] [transport.py] [_log()] starting thread (client mode): 0xf57421a0
2025-12-24T13:20:20.582 [DEBUG] [Thread-302800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:20:20.596 [DEBUG] [Thread-302800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:20:20.596 [INFO] [Thread-302800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] client lang: <none>
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] server lang: <none>
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] kex follows: False
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] Compression: none
2025-12-24T13:20:20.604 [DEBUG] [Thread-302800] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:20:20.659 [DEBUG] [Thread-302800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:20:20.660 [DEBUG] [Thread-302800] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:20:20.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:20:20.660 [DEBUG] [Thread-302800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:20:20.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:20:20.716 [DEBUG] [Thread-302800] [transport.py] [_log()] userauth is OK
2025-12-24T13:20:20.716 [DEBUG] [Thread-302800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:20:20.716 [DEBUG] [Thread-302800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:20:20.717 [DEBUG] [Thread-302800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:20:20.717 [DEBUG] [Thread-302800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:20:20.730 [INFO] [Thread-302800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:20:20.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:20:20.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:20:21.236 [DEBUG] [Thread-302802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:20:21.544 [DEBUG] [Thread-302800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:20:21.544 [DEBUG] [Thread-302800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:20:21.592 [DEBUG] [Thread-302800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:20:21.592 [DEBUG] [Thread-302800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:20:21.600 [DEBUG] [Thread-302800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:20:21.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:20:21.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')
2025-12-24T13:20:21.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:20:21.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:20:21.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:20:21.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:20:21.635 [DEBUG] [Thread-302800] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:20:22.564 [DEBUG] [Thread-302803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:20:37.661 [DEBUG] [Thread-302804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:20:51.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:20:51.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:20:51.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:20:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:20:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:20:52.740 [DEBUG] [Thread-302805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:20:52.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:20:52.948 [DEBUG] [Thread-302806] [transport.py] [_log()] starting thread (client mode): 0xf81c1660
2025-12-24T13:20:52.948 [DEBUG] [Thread-302806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:20:52.958 [DEBUG] [Thread-302806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:20:52.958 [INFO] [Thread-302806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:20:52.964 [DEBUG] [Thread-302806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:20:52.964 [DEBUG] [Thread-302806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:20:52.964 [DEBUG] [Thread-302806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:20:52.964 [DEBUG] [Thread-302806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] client lang: <none>
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] server lang: <none>
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] kex follows: False
2025-12-24T13:20:52.965 [DEBUG] [Thread-302806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:20:52.966 [DEBUG] [Thread-302806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:20:52.966 [DEBUG] [Thread-302806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:20:52.966 [DEBUG] [Thread-302806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:20:52.966 [DEBUG] [Thread-302806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:20:52.966 [DEBUG] [Thread-302806] [transport.py] [_log()] Compression: none
2025-12-24T13:20:52.966 [DEBUG] [Thread-302806] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:20:53.006 [DEBUG] [Thread-302806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:20:53.010 [DEBUG] [Thread-302806] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:20:53.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:20:53.012 [DEBUG] [Thread-302806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:20:53.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:20:53.014 [DEBUG] [Thread-302806] [transport.py] [_log()] userauth is OK
2025-12-24T13:20:53.014 [DEBUG] [Thread-302806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:20:53.015 [DEBUG] [Thread-302806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:20:53.015 [DEBUG] [Thread-302806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:20:53.015 [DEBUG] [Thread-302806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:20:53.046 [INFO] [Thread-302806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:20:53.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:20:53.690 [DEBUG] [Thread-302806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:20:53.691 [DEBUG] [Thread-302806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:20:53.691 [DEBUG] [Thread-302806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:20:53.731 [DEBUG] [Thread-302806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:20:53.731 [DEBUG] [Thread-302806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:20:53.734 [DEBUG] [Thread-302806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:20:53.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:20:53.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:20:53.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:20:53.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:20:53.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:20:53.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:20:53.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:20:53.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:20:53.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:20:53.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.472291 -999.00  +24.40   9.57     30   +5.80 1 2 1 1 1   888    0 17.43 -9.14 ----- 9.6 9.6 126.2 19.0 33.9 -22.4 33.4 -21.6 33.6 -20.7 34.3 -21.4
2025-12-24T13:20:53.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:20:53.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:20:53.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.472291
2025-12-24T13:20:53.768 [DEBUG] [Thread-302806] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:20:53.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:20:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:20:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:20:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:20:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:20:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:20:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:20:53.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:20:53.878 [DEBUG] [Thread-302809] [transport.py] [_log()] starting thread (client mode): 0xf574d6c0
2025-12-24T13:20:53.878 [DEBUG] [Thread-302809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:20:53.892 [DEBUG] [Thread-302809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:20:53.892 [INFO] [Thread-302809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] client lang: <none>
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] server lang: <none>
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] kex follows: False
2025-12-24T13:20:53.899 [DEBUG] [Thread-302809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:20:53.900 [DEBUG] [Thread-302809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:20:53.900 [DEBUG] [Thread-302809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:20:53.900 [DEBUG] [Thread-302809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:20:53.900 [DEBUG] [Thread-302809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:20:53.900 [DEBUG] [Thread-302809] [transport.py] [_log()] Compression: none
2025-12-24T13:20:53.900 [DEBUG] [Thread-302809] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:20:53.957 [DEBUG] [Thread-302809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:20:53.957 [DEBUG] [Thread-302809] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:20:53.957 [DEBUG] [Thread-302809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:20:53.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:20:53.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:20:54.012 [DEBUG] [Thread-302809] [transport.py] [_log()] userauth is OK
2025-12-24T13:20:54.012 [DEBUG] [Thread-302809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:20:54.012 [DEBUG] [Thread-302809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:20:54.012 [DEBUG] [Thread-302809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:20:54.013 [DEBUG] [Thread-302809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:20:54.031 [INFO] [Thread-302809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:20:54.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:20:54.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:20:54.843 [DEBUG] [Thread-302809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:20:54.844 [DEBUG] [Thread-302809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:20:54.891 [DEBUG] [Thread-302809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:20:54.891 [DEBUG] [Thread-302809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:20:54.900 [DEBUG] [Thread-302809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:20:54.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:20:54.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:20:54.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:20:54.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:20:54.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:20:54.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:20:54.938 [DEBUG] [Thread-302809] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:21:04.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:21:04.844 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:21:07.855 [DEBUG] [Thread-302811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:21:21.525 [DEBUG] [Thread-302812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:21:23.022 [DEBUG] [Thread-302813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:21:24.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:21:24.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:21: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
2025-12-24T13:21:26.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:21:26.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:21:26.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:21:26.610 [DEBUG] [Thread-302814] [transport.py] [_log()] starting thread (client mode): 0xf574d150
2025-12-24T13:21:26.611 [DEBUG] [Thread-302814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:21:26.614 [DEBUG] [Thread-302814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:21:26.615 [INFO] [Thread-302814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:21:26.618 [DEBUG] [Thread-302814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:21:26.618 [DEBUG] [Thread-302814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] client lang: <none>
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] server lang: <none>
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] kex follows: False
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:21:26.619 [DEBUG] [Thread-302814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:21:26.620 [DEBUG] [Thread-302814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:21:26.620 [DEBUG] [Thread-302814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:21:26.620 [DEBUG] [Thread-302814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:21:26.620 [DEBUG] [Thread-302814] [transport.py] [_log()] Compression: none
2025-12-24T13:21:26.620 [DEBUG] [Thread-302814] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:21:26.654 [DEBUG] [Thread-302814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:21:26.657 [DEBUG] [Thread-302814] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:21:26.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:21:26.660 [DEBUG] [Thread-302814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:21:26.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:21:26.662 [DEBUG] [Thread-302814] [transport.py] [_log()] userauth is OK
2025-12-24T13:21:26.662 [DEBUG] [Thread-302814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:21:26.663 [DEBUG] [Thread-302814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:21:26.663 [DEBUG] [Thread-302814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:21:26.663 [DEBUG] [Thread-302814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:21:26.685 [INFO] [Thread-302814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:21:26.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:21:27.349 [DEBUG] [Thread-302814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:21:27.350 [DEBUG] [Thread-302814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:21:27.351 [DEBUG] [Thread-302814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:21:27.390 [DEBUG] [Thread-302814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:21:27.390 [DEBUG] [Thread-302814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:21:27.394 [DEBUG] [Thread-302814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:21:27.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:21:27.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:21:27.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:21:27.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:21:27.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:21:27.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:21:27.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:21:27.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:21:27.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:21:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.472638 -999.00  +24.40  17.03     30   +5.80 1 2 1 1 1   888    0 17.33 -0.03 ----- 17.0 17.0 116.4 22.6 33.9 -22.5 33.4 -22.9 33.6 -20.4 34.3 -23.2
2025-12-24T13:21:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:21:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:21:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.472638
2025-12-24T13:21:27.434 [DEBUG] [Thread-302814] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:21:27.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:21:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:21:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:21:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:21:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:21:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:20:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:21:27.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:21:27.545 [DEBUG] [Thread-302817] [transport.py] [_log()] starting thread (client mode): 0xf574ee30
2025-12-24T13:21:27.545 [DEBUG] [Thread-302817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:21:27.560 [DEBUG] [Thread-302817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:21:27.560 [INFO] [Thread-302817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] client lang: <none>
2025-12-24T13:21:27.568 [DEBUG] [Thread-302817] [transport.py] [_log()] server lang: <none>
2025-12-24T13:21:27.569 [DEBUG] [Thread-302817] [transport.py] [_log()] kex follows: False
2025-12-24T13:21:27.569 [DEBUG] [Thread-302817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:21:27.569 [DEBUG] [Thread-302817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:21:27.569 [DEBUG] [Thread-302817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:21:27.569 [DEBUG] [Thread-302817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:21:27.569 [DEBUG] [Thread-302817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:21:27.569 [DEBUG] [Thread-302817] [transport.py] [_log()] Compression: none
2025-12-24T13:21:27.569 [DEBUG] [Thread-302817] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:21:27.633 [DEBUG] [Thread-302817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:21:27.635 [DEBUG] [Thread-302817] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:21:27.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:21:27.637 [DEBUG] [Thread-302817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:21:27.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:21:27.693 [DEBUG] [Thread-302817] [transport.py] [_log()] userauth is OK
2025-12-24T13:21:27.693 [DEBUG] [Thread-302817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:21:27.694 [DEBUG] [Thread-302817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:21:27.694 [DEBUG] [Thread-302817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:21:27.694 [DEBUG] [Thread-302817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:21:27.715 [INFO] [Thread-302817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:21:27.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:21:27.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:21:28.547 [DEBUG] [Thread-302817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:21:28.547 [DEBUG] [Thread-302817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:21:28.592 [DEBUG] [Thread-302817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:21:28.593 [DEBUG] [Thread-302817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:21:28.601 [DEBUG] [Thread-302817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:21:28.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:21:28.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')
2025-12-24T13:21:28.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:21:28.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:21:28.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:21:28.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:21:28.638 [DEBUG] [Thread-302817] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:21:38.109 [DEBUG] [Thread-302819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:21:53.264 [DEBUG] [Thread-302820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:21:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:21:58.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:21:58.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
2025-12-24T13:21:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:21:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:21:59.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:21:59.907 [DEBUG] [Thread-302821] [transport.py] [_log()] starting thread (client mode): 0xf57426e0
2025-12-24T13:21:59.908 [DEBUG] [Thread-302821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:21:59.918 [DEBUG] [Thread-302821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:21:59.919 [INFO] [Thread-302821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:21:59.924 [DEBUG] [Thread-302821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:21:59.924 [DEBUG] [Thread-302821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:21:59.924 [DEBUG] [Thread-302821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:21:59.924 [DEBUG] [Thread-302821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] client lang: <none>
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] server lang: <none>
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] kex follows: False
2025-12-24T13:21:59.925 [DEBUG] [Thread-302821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:21:59.926 [DEBUG] [Thread-302821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:21:59.926 [DEBUG] [Thread-302821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:21:59.926 [DEBUG] [Thread-302821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:21:59.926 [DEBUG] [Thread-302821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:21:59.926 [DEBUG] [Thread-302821] [transport.py] [_log()] Compression: none
2025-12-24T13:21:59.926 [DEBUG] [Thread-302821] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:21:59.964 [DEBUG] [Thread-302821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:21:59.968 [DEBUG] [Thread-302821] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:21:59.970 [DEBUG] [Thread-302821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:21:59.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:21:59.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:21:59.976 [DEBUG] [Thread-302821] [transport.py] [_log()] userauth is OK
2025-12-24T13:21:59.976 [DEBUG] [Thread-302821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:21:59.976 [DEBUG] [Thread-302821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:21:59.976 [DEBUG] [Thread-302821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:21:59.976 [DEBUG] [Thread-302821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:22:00.002 [INFO] [Thread-302821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:22:00.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:22:00.654 [DEBUG] [Thread-302821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:22:00.655 [DEBUG] [Thread-302821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:22:00.656 [DEBUG] [Thread-302821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:22:00.695 [DEBUG] [Thread-302821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:22:00.695 [DEBUG] [Thread-302821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:22:00.699 [DEBUG] [Thread-302821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:22:00.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:22:00.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:22:00.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:22:00.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:22:00.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:22:00.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:22:00.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:22:00.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:22:00.728 [DEBUG] [Thread-302821] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:22:00.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:22:00.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.472986 -999.00  +24.40  14.59     29   +5.60 1 2 1 1 1   888    0 18.04 8.82 ----- 14.6 14.6 72.3 19.9 33.6 -26.4 33.2 -23.8 33.6 -21.5 34.4 -22.7
2025-12-24T13:22:00.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:22:00.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:22:00.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.472986
2025-12-24T13:22:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:22:00.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:22:00.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:22:00.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:22:00.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:22:00.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:21:05.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:22:00.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:22:00.844 [DEBUG] [Thread-302824] [transport.py] [_log()] starting thread (client mode): 0xf81c0700
2025-12-24T13:22:00.844 [DEBUG] [Thread-302824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:22:00.858 [DEBUG] [Thread-302824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:22:00.859 [INFO] [Thread-302824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:22:00.866 [DEBUG] [Thread-302824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:22:00.866 [DEBUG] [Thread-302824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] client lang: <none>
2025-12-24T13:22:00.867 [DEBUG] [Thread-302824] [transport.py] [_log()] server lang: <none>
2025-12-24T13:22:00.868 [DEBUG] [Thread-302824] [transport.py] [_log()] kex follows: False
2025-12-24T13:22:00.868 [DEBUG] [Thread-302824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:22:00.868 [DEBUG] [Thread-302824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:22:00.868 [DEBUG] [Thread-302824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:22:00.868 [DEBUG] [Thread-302824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:22:00.868 [DEBUG] [Thread-302824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:22:00.868 [DEBUG] [Thread-302824] [transport.py] [_log()] Compression: none
2025-12-24T13:22:00.869 [DEBUG] [Thread-302824] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:22:00.927 [DEBUG] [Thread-302824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:22:00.928 [DEBUG] [Thread-302824] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:22:00.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:22:00.929 [DEBUG] [Thread-302824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:22:00.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:22:00.992 [DEBUG] [Thread-302824] [transport.py] [_log()] userauth is OK
2025-12-24T13:22:00.993 [DEBUG] [Thread-302824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:22:00.993 [DEBUG] [Thread-302824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:22:00.993 [DEBUG] [Thread-302824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:22:00.993 [DEBUG] [Thread-302824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:22:01.012 [INFO] [Thread-302824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:22:01.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:22:01.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:22:01.854 [DEBUG] [Thread-302824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:22:01.854 [DEBUG] [Thread-302824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:22:01.901 [DEBUG] [Thread-302824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:22:01.901 [DEBUG] [Thread-302824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:22:01.910 [DEBUG] [Thread-302824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:22:01.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:22:01.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:22:01.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
2025-12-24T13:22:01.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:22:01.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:22:01.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:22:01.945 [DEBUG] [Thread-302824] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:22:04.987 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:22:04.989 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:22:08.377 [DEBUG] [Thread-302826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:22:21.839 [DEBUG] [Thread-302827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:22:23.547 [DEBUG] [Thread-302828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:22:31.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:22:31.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:22:32.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:22:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:22:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:22:32.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:22:33.188 [DEBUG] [Thread-302829] [transport.py] [_log()] starting thread (client mode): 0xf81c3c70
2025-12-24T13:22:33.189 [DEBUG] [Thread-302829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:22:33.189 [DEBUG] [Thread-302829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:22:33.190 [INFO] [Thread-302829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:22:33.194 [DEBUG] [Thread-302829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] client lang: <none>
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] server lang: <none>
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] kex follows: False
2025-12-24T13:22:33.195 [DEBUG] [Thread-302829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:22:33.196 [DEBUG] [Thread-302829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:22:33.196 [DEBUG] [Thread-302829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:22:33.196 [DEBUG] [Thread-302829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:22:33.196 [DEBUG] [Thread-302829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:22:33.196 [DEBUG] [Thread-302829] [transport.py] [_log()] Compression: none
2025-12-24T13:22:33.196 [DEBUG] [Thread-302829] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:22:33.231 [DEBUG] [Thread-302829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:22:33.235 [DEBUG] [Thread-302829] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:22:33.237 [DEBUG] [Thread-302829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:22:33.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:22:33.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:22:33.241 [DEBUG] [Thread-302829] [transport.py] [_log()] userauth is OK
2025-12-24T13:22:33.241 [DEBUG] [Thread-302829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:22:33.241 [DEBUG] [Thread-302829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:22:33.241 [DEBUG] [Thread-302829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:22:33.241 [DEBUG] [Thread-302829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:22:33.260 [INFO] [Thread-302829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:22:33.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:22:33.912 [DEBUG] [Thread-302829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:22:33.912 [DEBUG] [Thread-302829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:22:33.913 [DEBUG] [Thread-302829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:22:33.954 [DEBUG] [Thread-302829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:22:33.954 [DEBUG] [Thread-302829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:22:33.956 [DEBUG] [Thread-302829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:22:33.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:22:33.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:22:33.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:22:33.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:22:33.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:22:33.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:22:33.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:22:33.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:22:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:22:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.473333 -999.00  +24.10   4.62     30   +5.50 1 1 1 1 1   888    0 18.04 16.73 ----- 4.6 4.6 65.3 13.3 33.5 -24.4 33.2 -24.2 33.4 -23.0 34.2 -23.6
2025-12-24T13:22:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:22:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:22:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.473333
2025-12-24T13:22:33.982 [DEBUG] [Thread-302829] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:22:33.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:22:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:22:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:22:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:22:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:22:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:21:35.971', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:22:34.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:22:34.085 [DEBUG] [Thread-302832] [transport.py] [_log()] starting thread (client mode): 0xf57421a0
2025-12-24T13:22:34.085 [DEBUG] [Thread-302832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:22:34.100 [DEBUG] [Thread-302832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:22:34.100 [INFO] [Thread-302832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] client lang: <none>
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] server lang: <none>
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] kex follows: False
2025-12-24T13:22:34.108 [DEBUG] [Thread-302832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:22:34.109 [DEBUG] [Thread-302832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:22:34.109 [DEBUG] [Thread-302832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:22:34.109 [DEBUG] [Thread-302832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:22:34.109 [DEBUG] [Thread-302832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:22:34.109 [DEBUG] [Thread-302832] [transport.py] [_log()] Compression: none
2025-12-24T13:22:34.109 [DEBUG] [Thread-302832] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:22:34.166 [DEBUG] [Thread-302832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:22:34.166 [DEBUG] [Thread-302832] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:22:34.166 [DEBUG] [Thread-302832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:22:34.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:22:34.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:22:34.224 [DEBUG] [Thread-302832] [transport.py] [_log()] userauth is OK
2025-12-24T13:22:34.224 [DEBUG] [Thread-302832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:22:34.224 [DEBUG] [Thread-302832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:22:34.224 [DEBUG] [Thread-302832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:22:34.224 [DEBUG] [Thread-302832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:22:34.241 [INFO] [Thread-302832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:22:34.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:22:34.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:22:35.129 [DEBUG] [Thread-302832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:22:35.130 [DEBUG] [Thread-302832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:22:35.177 [DEBUG] [Thread-302832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:22:35.177 [DEBUG] [Thread-302832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:22:35.185 [DEBUG] [Thread-302832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:22:35.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:22:35.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:22:35.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:22:35.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:22:35.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:22:35.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:22:35.218 [DEBUG] [Thread-302832] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:22:38.663 [DEBUG] [Thread-302834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:22:53.806 [DEBUG] [Thread-302835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:23:05.140 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:23:05.145 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:23:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:23:05.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:23:05.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:23:06.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:23:06.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:23:06.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:23:06.988 [DEBUG] [Thread-302836] [transport.py] [_log()] starting thread (client mode): 0xf81c20e0
2025-12-24T13:23:06.989 [DEBUG] [Thread-302836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:23:06.999 [DEBUG] [Thread-302836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:23:06.999 [INFO] [Thread-302836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] client lang: <none>
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] server lang: <none>
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] kex follows: False
2025-12-24T13:23:07.003 [DEBUG] [Thread-302836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:23:07.004 [DEBUG] [Thread-302836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:23:07.004 [DEBUG] [Thread-302836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:23:07.004 [DEBUG] [Thread-302836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:23:07.004 [DEBUG] [Thread-302836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:23:07.004 [DEBUG] [Thread-302836] [transport.py] [_log()] Compression: none
2025-12-24T13:23:07.004 [DEBUG] [Thread-302836] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:23:07.037 [DEBUG] [Thread-302836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:23:07.040 [DEBUG] [Thread-302836] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:23:07.041 [DEBUG] [Thread-302836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:23:07.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:23:07.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:23:07.081 [DEBUG] [Thread-302836] [transport.py] [_log()] userauth is OK
2025-12-24T13:23:07.082 [DEBUG] [Thread-302836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:23:07.082 [DEBUG] [Thread-302836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:23:07.082 [DEBUG] [Thread-302836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:23:07.082 [DEBUG] [Thread-302836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:23:07.126 [INFO] [Thread-302836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:23:07.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:23:07.719 [DEBUG] [Thread-302836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:23:07.728 [DEBUG] [Thread-302836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:23:07.729 [DEBUG] [Thread-302836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:23:07.761 [DEBUG] [Thread-302836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:23:07.761 [DEBUG] [Thread-302836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:23:07.763 [DEBUG] [Thread-302836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:23:07.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:23:07.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:23:07.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:23:07.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:23:07.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:23:07.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:23:07.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:23:07.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:23:07.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:23:07.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.473680 -999.00  +24.00   7.36     30   +5.60 1 2 1 1 1   888    0 18.26 22.39 ----- 7.4 7.4 163.9 11.6 33.5 -22.7 33.2 -23.0 33.6 -21.9 34.2 -22.8
2025-12-24T13:23:07.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:23:07.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:23:07.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.473680
2025-12-24T13:23:07.789 [DEBUG] [Thread-302836] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:23:07.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:23:07.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:23:07.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:23:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:23:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:23:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:22:05.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:23:07.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:23:07.889 [DEBUG] [Thread-302839] [transport.py] [_log()] starting thread (client mode): 0xf57aa380
2025-12-24T13:23:07.889 [DEBUG] [Thread-302839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:23:07.904 [DEBUG] [Thread-302839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:23:07.905 [INFO] [Thread-302839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] client lang: <none>
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] server lang: <none>
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] kex follows: False
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] Compression: none
2025-12-24T13:23:07.912 [DEBUG] [Thread-302839] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:23:07.970 [DEBUG] [Thread-302839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:23:07.970 [DEBUG] [Thread-302839] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:23:07.970 [DEBUG] [Thread-302839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:23:07.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:23:07.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:23:08.028 [DEBUG] [Thread-302839] [transport.py] [_log()] userauth is OK
2025-12-24T13:23:08.028 [DEBUG] [Thread-302839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:23:08.028 [DEBUG] [Thread-302839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:23:08.028 [DEBUG] [Thread-302839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:23:08.028 [DEBUG] [Thread-302839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:23:08.042 [INFO] [Thread-302839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:23:08.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:23:08.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:23:08.883 [DEBUG] [Thread-302841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:23:08.898 [DEBUG] [Thread-302839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:23:08.898 [DEBUG] [Thread-302839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:23:08.946 [DEBUG] [Thread-302839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:23:08.946 [DEBUG] [Thread-302839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:23:08.954 [DEBUG] [Thread-302839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:23:08.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:23:08.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')
2025-12-24T13:23:08.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:23:08.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:23:08.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:23:08.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:23:08.990 [DEBUG] [Thread-302839] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:23:22.082 [DEBUG] [Thread-302842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:23:24.107 [DEBUG] [Thread-302843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:23:39.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:23:39.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:23:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:23:39.179 [DEBUG] [Thread-302844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:23:39.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:23:39.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:23:40.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:23:40.289 [DEBUG] [Thread-302845] [transport.py] [_log()] starting thread (client mode): 0xf81c2530
2025-12-24T13:23:40.289 [DEBUG] [Thread-302845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:23:40.300 [DEBUG] [Thread-302845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:23:40.300 [INFO] [Thread-302845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] client lang: <none>
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] server lang: <none>
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] kex follows: False
2025-12-24T13:23:40.305 [DEBUG] [Thread-302845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:23:40.306 [DEBUG] [Thread-302845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:23:40.306 [DEBUG] [Thread-302845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:23:40.306 [DEBUG] [Thread-302845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:23:40.307 [DEBUG] [Thread-302845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:23:40.307 [DEBUG] [Thread-302845] [transport.py] [_log()] Compression: none
2025-12-24T13:23:40.307 [DEBUG] [Thread-302845] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:23:40.346 [DEBUG] [Thread-302845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:23:40.351 [DEBUG] [Thread-302845] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:23:40.353 [DEBUG] [Thread-302845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:23:40.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:23:40.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:23:40.359 [DEBUG] [Thread-302845] [transport.py] [_log()] userauth is OK
2025-12-24T13:23:40.359 [DEBUG] [Thread-302845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:23:40.360 [DEBUG] [Thread-302845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:23:40.360 [DEBUG] [Thread-302845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:23:40.360 [DEBUG] [Thread-302845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:23:40.398 [INFO] [Thread-302845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:23:40.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:23:40.954 [DEBUG] [Thread-302845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:23:40.954 [DEBUG] [Thread-302845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:23:40.963 [DEBUG] [Thread-302845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:23:40.995 [DEBUG] [Thread-302845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:23:40.995 [DEBUG] [Thread-302845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:23:40.996 [DEBUG] [Thread-302845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:23:41.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:23:41.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:23:41.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:23:41.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:23:41.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:23:41.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:23:41.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:23:41.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:23:41.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:23:41.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.474722 -999.00  +23.70  10.90     31   +5.70 1 2 1 1 1   888    0 18.84 45.60 ----- 10.9 10.9 114.5 13.2 33.8 -22.1 33.4 -22.7 33.9 -21.0 34.5 -22.8
2025-12-24T13:23:41.026 [DEBUG] [Thread-302845] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:23:41.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:23:41.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:23:41.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.474722
2025-12-24T13:23:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:23:41.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:23:41.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:23:41.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:23:41.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:23:41.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:23:35.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:23:41.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:23:41.154 [DEBUG] [Thread-302848] [transport.py] [_log()] starting thread (client mode): 0xf57433d0
2025-12-24T13:23:41.154 [DEBUG] [Thread-302848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:23:41.167 [DEBUG] [Thread-302848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:23:41.167 [INFO] [Thread-302848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:23:41.174 [DEBUG] [Thread-302848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:23:41.174 [DEBUG] [Thread-302848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:23:41.174 [DEBUG] [Thread-302848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:23:41.174 [DEBUG] [Thread-302848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:23:41.174 [DEBUG] [Thread-302848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:23:41.174 [DEBUG] [Thread-302848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:23:41.174 [DEBUG] [Thread-302848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:23:41.174 [DEBUG] [Thread-302848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] client lang: <none>
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] server lang: <none>
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] kex follows: False
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] Compression: none
2025-12-24T13:23:41.175 [DEBUG] [Thread-302848] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:23:41.230 [DEBUG] [Thread-302848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:23:41.230 [DEBUG] [Thread-302848] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:23:41.230 [DEBUG] [Thread-302848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:23:41.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:23:41.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:23:41.293 [DEBUG] [Thread-302848] [transport.py] [_log()] userauth is OK
2025-12-24T13:23:41.294 [DEBUG] [Thread-302848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:23:41.294 [DEBUG] [Thread-302848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:23:41.294 [DEBUG] [Thread-302848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:23:41.294 [DEBUG] [Thread-302848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:23:41.318 [INFO] [Thread-302848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:23:41.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:23:41.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:23:42.184 [DEBUG] [Thread-302848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:23:42.184 [DEBUG] [Thread-302848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:23:42.224 [DEBUG] [Thread-302848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:23:42.224 [DEBUG] [Thread-302848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:23:42.233 [DEBUG] [Thread-302848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:23:42.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:23:42.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:23:42.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:23:42.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:23:42.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:23:42.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:23:42.271 [DEBUG] [Thread-302848] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:23:54.277 [DEBUG] [Thread-302850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:24:05.295 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:24:05.297 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:24:09.443 [DEBUG] [Thread-302851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:24:12.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:24:12.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:24:12.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:24:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:24:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:24:13.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:24:13.649 [DEBUG] [Thread-302852] [transport.py] [_log()] starting thread (client mode): 0xf81c09d0
2025-12-24T13:24:13.649 [DEBUG] [Thread-302852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:24:13.656 [DEBUG] [Thread-302852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:24:13.656 [INFO] [Thread-302852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] client lang: <none>
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] server lang: <none>
2025-12-24T13:24:13.661 [DEBUG] [Thread-302852] [transport.py] [_log()] kex follows: False
2025-12-24T13:24:13.662 [DEBUG] [Thread-302852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:24:13.662 [DEBUG] [Thread-302852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:24:13.662 [DEBUG] [Thread-302852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:24:13.663 [DEBUG] [Thread-302852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:24:13.663 [DEBUG] [Thread-302852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:24:13.663 [DEBUG] [Thread-302852] [transport.py] [_log()] Compression: none
2025-12-24T13:24:13.663 [DEBUG] [Thread-302852] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:24:13.700 [DEBUG] [Thread-302852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:24:13.703 [DEBUG] [Thread-302852] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:24:13.706 [DEBUG] [Thread-302852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:24:13.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:24:13.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:24:13.711 [DEBUG] [Thread-302852] [transport.py] [_log()] userauth is OK
2025-12-24T13:24:13.711 [DEBUG] [Thread-302852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:24:13.711 [DEBUG] [Thread-302852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:24:13.711 [DEBUG] [Thread-302852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:24:13.711 [DEBUG] [Thread-302852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:24:13.738 [INFO] [Thread-302852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:24:13.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:24:14.402 [DEBUG] [Thread-302852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:24:14.402 [DEBUG] [Thread-302852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:24:14.403 [DEBUG] [Thread-302852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:24:14.444 [DEBUG] [Thread-302852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:24:14.444 [DEBUG] [Thread-302852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:24:14.447 [DEBUG] [Thread-302852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:24:14.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:24:14.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:24:14.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:24:14.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:24:14.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:24:14.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:24:14.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:24:14.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:24:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:24:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.475069 -999.00  +23.90   9.82     30   +5.60 1 1 1 1 1   888    0 19.00 54.93 ----- 9.8 9.8 98.3 15.3 33.8 -24.0 33.5 -22.6 33.9 -23.9 34.6 -23.3
2025-12-24T13:24:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:24:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:24:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.475069
2025-12-24T13:24:14.484 [DEBUG] [Thread-302852] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:24:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:24:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:24:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:24:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:24:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:24:14.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:24:05.962', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:24:14.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:24:14.583 [DEBUG] [Thread-302855] [transport.py] [_log()] starting thread (client mode): 0xf5771bd0
2025-12-24T13:24:14.583 [DEBUG] [Thread-302855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:24:14.597 [DEBUG] [Thread-302855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:24:14.598 [INFO] [Thread-302855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] client lang: <none>
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] server lang: <none>
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] kex follows: False
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:24:14.605 [DEBUG] [Thread-302855] [transport.py] [_log()] Compression: none
2025-12-24T13:24:14.606 [DEBUG] [Thread-302855] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:24:14.662 [DEBUG] [Thread-302855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:24:14.662 [DEBUG] [Thread-302855] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:24:14.662 [DEBUG] [Thread-302855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:24:14.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:24:14.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:24:14.719 [DEBUG] [Thread-302855] [transport.py] [_log()] userauth is OK
2025-12-24T13:24:14.720 [DEBUG] [Thread-302855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:24:14.720 [DEBUG] [Thread-302855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:24:14.720 [DEBUG] [Thread-302855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:24:14.720 [DEBUG] [Thread-302855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:24:14.739 [INFO] [Thread-302855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:24:14.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:24:14.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:24:15.569 [DEBUG] [Thread-302855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:24:15.569 [DEBUG] [Thread-302855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:24:15.616 [DEBUG] [Thread-302855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:24:15.616 [DEBUG] [Thread-302855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:24:15.624 [DEBUG] [Thread-302855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:24:15.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:24:15.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:24:15.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:24:15.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:24:15.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:24:15.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:24:15.657 [DEBUG] [Thread-302855] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:24:22.323 [DEBUG] [Thread-302857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:24:24.557 [DEBUG] [Thread-302858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:24:39.746 [DEBUG] [Thread-302859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:24:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:24:45.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:24:45.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:24:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:24:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:24:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:24:47.267 [DEBUG] [Thread-302860] [transport.py] [_log()] starting thread (client mode): 0xf81e54e0
2025-12-24T13:24:47.267 [DEBUG] [Thread-302860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:24:47.280 [DEBUG] [Thread-302860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:24:47.280 [INFO] [Thread-302860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:24:47.285 [DEBUG] [Thread-302860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] client lang: <none>
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] server lang: <none>
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] kex follows: False
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] Compression: none
2025-12-24T13:24:47.286 [DEBUG] [Thread-302860] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:24:47.311 [DEBUG] [Thread-302860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:24:47.314 [DEBUG] [Thread-302860] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:24:47.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:24:47.317 [DEBUG] [Thread-302860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:24:47.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:24:47.319 [DEBUG] [Thread-302860] [transport.py] [_log()] userauth is OK
2025-12-24T13:24:47.319 [DEBUG] [Thread-302860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:24:47.320 [DEBUG] [Thread-302860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:24:47.320 [DEBUG] [Thread-302860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:24:47.320 [DEBUG] [Thread-302860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:24:47.337 [INFO] [Thread-302860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:24:47.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:24:47.923 [DEBUG] [Thread-302860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:24:47.924 [DEBUG] [Thread-302860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:24:47.925 [DEBUG] [Thread-302860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:24:47.964 [DEBUG] [Thread-302860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:24:47.965 [DEBUG] [Thread-302860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:24:47.969 [DEBUG] [Thread-302860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:24:47.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:24:47.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:24:47.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:24:47.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:24:47.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:24:47.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:24:47.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:24:47.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:24:47.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:24:47.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.475416 -999.00  +23.90   9.75     30   +5.60 1 2 1 1 1   888    0 19.77 57.85 ----- 9.8 9.8 12.7 11.8 33.6 -24.4 33.4 -23.4 34.0 -21.6 34.6 -23.4
2025-12-24T13:24:47.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:24:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:24:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.475416
2025-12-24T13:24:48.006 [DEBUG] [Thread-302860] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:24:48.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:24:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:24:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:24:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:24:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:24:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:24:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:24:48.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:24:48.121 [DEBUG] [Thread-302863] [transport.py] [_log()] starting thread (client mode): 0xf81c3040
2025-12-24T13:24:48.122 [DEBUG] [Thread-302863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:24:48.135 [DEBUG] [Thread-302863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:24:48.135 [INFO] [Thread-302863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] client lang: <none>
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] server lang: <none>
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] kex follows: False
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] Compression: none
2025-12-24T13:24:48.143 [DEBUG] [Thread-302863] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:24:48.199 [DEBUG] [Thread-302863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:24:48.199 [DEBUG] [Thread-302863] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:24:48.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:24:48.200 [DEBUG] [Thread-302863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:24:48.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:24:48.259 [DEBUG] [Thread-302863] [transport.py] [_log()] userauth is OK
2025-12-24T13:24:48.259 [DEBUG] [Thread-302863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:24:48.259 [DEBUG] [Thread-302863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:24:48.259 [DEBUG] [Thread-302863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:24:48.259 [DEBUG] [Thread-302863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:24:48.274 [INFO] [Thread-302863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:24:48.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:24:48.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:24:49.132 [DEBUG] [Thread-302863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:24:49.133 [DEBUG] [Thread-302863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:24:49.177 [DEBUG] [Thread-302863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:24:49.178 [DEBUG] [Thread-302863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:24:49.186 [DEBUG] [Thread-302863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:24:49.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:24: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')
2025-12-24T13:24:49.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:24:49.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:24:49.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:24:49.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:24:49.220 [DEBUG] [Thread-302863] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:24:54.836 [DEBUG] [Thread-302865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:25:05.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:25:05.446 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:25:09.961 [DEBUG] [Thread-302866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:25:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:25:19.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:25:19.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:25:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 20, 27), 20.84, 25.53, 0.0, 11.89, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:25:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:20:27
2025-12-24T13:25:20.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:25:20.532 [DEBUG] [Thread-302867] [transport.py] [_log()] starting thread (client mode): 0xf57728c0
2025-12-24T13:25:20.533 [DEBUG] [Thread-302867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:25:20.546 [DEBUG] [Thread-302867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:25:20.546 [INFO] [Thread-302867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:25:20.551 [DEBUG] [Thread-302867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:25:20.551 [DEBUG] [Thread-302867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:25:20.551 [DEBUG] [Thread-302867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:25:20.551 [DEBUG] [Thread-302867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:25:20.551 [DEBUG] [Thread-302867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:25:20.551 [DEBUG] [Thread-302867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:25:20.551 [DEBUG] [Thread-302867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:25:20.551 [DEBUG] [Thread-302867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] client lang: <none>
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] server lang: <none>
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] kex follows: False
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] Compression: none
2025-12-24T13:25:20.552 [DEBUG] [Thread-302867] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:25:20.583 [DEBUG] [Thread-302867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:25:20.587 [DEBUG] [Thread-302867] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:25:20.588 [DEBUG] [Thread-302867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:25:20.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:25:20.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:25:20.592 [DEBUG] [Thread-302867] [transport.py] [_log()] userauth is OK
2025-12-24T13:25:20.592 [DEBUG] [Thread-302867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:25:20.592 [DEBUG] [Thread-302867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:25:20.592 [DEBUG] [Thread-302867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:25:20.592 [DEBUG] [Thread-302867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:25:20.605 [INFO] [Thread-302867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:25:20.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:25:21.158 [DEBUG] [Thread-302867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:25:21.158 [DEBUG] [Thread-302867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:25:21.158 [DEBUG] [Thread-302867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:25:21.199 [DEBUG] [Thread-302867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:25:21.199 [DEBUG] [Thread-302867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:25:21.200 [DEBUG] [Thread-302867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:25:21.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:25:21.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:25:21.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:25:21.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:25:21.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:25:21.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:25:21.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:25:21.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:25:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:25:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.475763 -999.00  +23.50   5.73     31   +5.40 1 1 1 1 1   888    0 19.54 63.41 ----- 5.7 5.7 290.2 17.6 33.8 -23.4 33.5 -23.3 34.0 -22.9 34.7 -22.4
2025-12-24T13:25:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:25:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:25:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.475763
2025-12-24T13:25:21.231 [DEBUG] [Thread-302867] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:25:21.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:25:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:25:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:25:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:25:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:25:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:20:27', tmtdew=20.84, humidity=25.53, cloud=0.0, wind=11.89, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:25:05.923', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:25:21.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:25:21.329 [DEBUG] [Thread-302870] [transport.py] [_log()] starting thread (client mode): 0xf57a8df0
2025-12-24T13:25:21.329 [DEBUG] [Thread-302870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:25:21.343 [DEBUG] [Thread-302870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:25:21.343 [INFO] [Thread-302870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:25:21.351 [DEBUG] [Thread-302870] [transport.py] [_log()] client lang: <none>
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] server lang: <none>
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] kex follows: False
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] Compression: none
2025-12-24T13:25:21.352 [DEBUG] [Thread-302870] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:25:21.410 [DEBUG] [Thread-302870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:25:21.410 [DEBUG] [Thread-302870] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:25:21.410 [DEBUG] [Thread-302870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:25:21.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:25:21.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:25:21.467 [DEBUG] [Thread-302870] [transport.py] [_log()] userauth is OK
2025-12-24T13:25:21.467 [DEBUG] [Thread-302870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:25:21.467 [DEBUG] [Thread-302870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:25:21.467 [DEBUG] [Thread-302870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:25:21.467 [DEBUG] [Thread-302870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:25:21.482 [INFO] [Thread-302870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:25:21.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:25:21.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:25:22.334 [DEBUG] [Thread-302870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:25:22.334 [DEBUG] [Thread-302870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:25:22.381 [DEBUG] [Thread-302870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:25:22.382 [DEBUG] [Thread-302870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:25:22.390 [DEBUG] [Thread-302870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:25:22.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:25:22.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:25:22.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:25:22.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:25:22.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:25:22.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:25:22.423 [DEBUG] [Thread-302870] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:25:22.546 [DEBUG] [Thread-302872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:25:25.026 [DEBUG] [Thread-302873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:25:40.180 [DEBUG] [Thread-302874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:25:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:25:52.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:25:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:25:53.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 25, 44), 20.93, 25.58, 0.0, 4.57, 23.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:25:53.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:25:44
2025-12-24T13:25:53.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:25:53.886 [DEBUG] [Thread-302875] [transport.py] [_log()] starting thread (client mode): 0xf81e6c50
2025-12-24T13:25:53.886 [DEBUG] [Thread-302875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:25:53.892 [DEBUG] [Thread-302875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:25:53.892 [INFO] [Thread-302875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:25:53.897 [DEBUG] [Thread-302875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:25:53.897 [DEBUG] [Thread-302875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:25:53.897 [DEBUG] [Thread-302875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:25:53.897 [DEBUG] [Thread-302875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:25:53.897 [DEBUG] [Thread-302875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:25:53.897 [DEBUG] [Thread-302875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:25:53.897 [DEBUG] [Thread-302875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:25:53.898 [DEBUG] [Thread-302875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:25:53.898 [DEBUG] [Thread-302875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:25:53.898 [DEBUG] [Thread-302875] [transport.py] [_log()] client lang: <none>
2025-12-24T13:25:53.898 [DEBUG] [Thread-302875] [transport.py] [_log()] server lang: <none>
2025-12-24T13:25:53.898 [DEBUG] [Thread-302875] [transport.py] [_log()] kex follows: False
2025-12-24T13:25:53.898 [DEBUG] [Thread-302875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:25:53.898 [DEBUG] [Thread-302875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:25:53.899 [DEBUG] [Thread-302875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:25:53.899 [DEBUG] [Thread-302875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:25:53.899 [DEBUG] [Thread-302875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:25:53.899 [DEBUG] [Thread-302875] [transport.py] [_log()] Compression: none
2025-12-24T13:25:53.899 [DEBUG] [Thread-302875] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:25:53.939 [DEBUG] [Thread-302875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:25:53.944 [DEBUG] [Thread-302875] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:25:53.946 [DEBUG] [Thread-302875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:25:53.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:25:53.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:25:53.951 [DEBUG] [Thread-302875] [transport.py] [_log()] userauth is OK
2025-12-24T13:25:53.951 [DEBUG] [Thread-302875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:25:53.952 [DEBUG] [Thread-302875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:25:53.952 [DEBUG] [Thread-302875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:25:53.952 [DEBUG] [Thread-302875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:25:53.980 [INFO] [Thread-302875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:25:53.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:25:54.592 [DEBUG] [Thread-302875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:25:54.592 [DEBUG] [Thread-302875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:25:54.592 [DEBUG] [Thread-302875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:25:54.633 [DEBUG] [Thread-302875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:25:54.633 [DEBUG] [Thread-302875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:25:54.636 [DEBUG] [Thread-302875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:25:54.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:25:54.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:25:54.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:25:54.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:25:54.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:25:54.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:25:54.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:25:54.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:25:54.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:25:54.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.476111 -999.00  +23.70   3.28     31   +5.60 1 2 1 1 1   888    0 19.27 66.25 ----- 3.3 3.3 329.2 4.6 33.9 -24.0 33.7 -22.9 34.1 -20.6 34.7 -23.1
2025-12-24T13:25:54.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:25:54.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:25:54.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.476111
2025-12-24T13:25:54.673 [DEBUG] [Thread-302875] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:25:54.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:25:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:25:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:25:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:25:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:25:54.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:25:44', tmtdew=20.93, humidity=25.58, cloud=0.0, wind=4.57, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:25:35.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:25:54.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:25:54.782 [DEBUG] [Thread-302878] [transport.py] [_log()] starting thread (client mode): 0xf81c2ef0
2025-12-24T13:25:54.782 [DEBUG] [Thread-302878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:25:54.796 [DEBUG] [Thread-302878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:25:54.797 [INFO] [Thread-302878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] client lang: <none>
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] server lang: <none>
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] kex follows: False
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:25:54.804 [DEBUG] [Thread-302878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:25:54.805 [DEBUG] [Thread-302878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:25:54.805 [DEBUG] [Thread-302878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:25:54.805 [DEBUG] [Thread-302878] [transport.py] [_log()] Compression: none
2025-12-24T13:25:54.805 [DEBUG] [Thread-302878] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:25:54.862 [DEBUG] [Thread-302878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:25:54.862 [DEBUG] [Thread-302878] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:25:54.862 [DEBUG] [Thread-302878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:25:54.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:25:54.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:25:54.918 [DEBUG] [Thread-302878] [transport.py] [_log()] userauth is OK
2025-12-24T13:25:54.919 [DEBUG] [Thread-302878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:25:54.919 [DEBUG] [Thread-302878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:25:54.919 [DEBUG] [Thread-302878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:25:54.919 [DEBUG] [Thread-302878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:25:54.935 [INFO] [Thread-302878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:25:54.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:25:54.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:25:55.241 [DEBUG] [Thread-302880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:25:55.772 [DEBUG] [Thread-302878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:25:55.772 [DEBUG] [Thread-302878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:25:55.820 [DEBUG] [Thread-302878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:25:55.820 [DEBUG] [Thread-302878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:25:55.829 [DEBUG] [Thread-302878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:25:55.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:25:55.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:25:55.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:25:55.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:25:55.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:25:55.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:25:55.863 [DEBUG] [Thread-302878] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:26:05.584 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:26:05.586 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:26:10.410 [DEBUG] [Thread-302881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:26:22.956 [DEBUG] [Thread-302882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:26:25.535 [DEBUG] [Thread-302883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:26:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:26:25.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:26:25.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:26:27.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 26, 17), 20.94, 25.57, 0.0, 10.18, 23.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:26:27.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:26:17
2025-12-24T13:26:27.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:26:27.630 [DEBUG] [Thread-302884] [transport.py] [_log()] starting thread (client mode): 0xf572ff40
2025-12-24T13:26:27.631 [DEBUG] [Thread-302884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:26:27.634 [DEBUG] [Thread-302884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:26:27.634 [INFO] [Thread-302884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:26:27.637 [DEBUG] [Thread-302884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:26:27.637 [DEBUG] [Thread-302884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:26:27.637 [DEBUG] [Thread-302884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:26:27.637 [DEBUG] [Thread-302884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:26:27.637 [DEBUG] [Thread-302884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] client lang: <none>
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] server lang: <none>
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] kex follows: False
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] Compression: none
2025-12-24T13:26:27.638 [DEBUG] [Thread-302884] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:26:27.670 [DEBUG] [Thread-302884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:26:27.673 [DEBUG] [Thread-302884] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:26:27.675 [DEBUG] [Thread-302884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:26:27.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:26:27.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:26:27.679 [DEBUG] [Thread-302884] [transport.py] [_log()] userauth is OK
2025-12-24T13:26:27.679 [DEBUG] [Thread-302884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:26:27.679 [DEBUG] [Thread-302884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:26:27.679 [DEBUG] [Thread-302884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:26:27.679 [DEBUG] [Thread-302884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:26:27.699 [INFO] [Thread-302884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:26:27.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:26:28.268 [DEBUG] [Thread-302884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:26:28.268 [DEBUG] [Thread-302884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:26:28.268 [DEBUG] [Thread-302884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:26:28.309 [DEBUG] [Thread-302884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:26:28.309 [DEBUG] [Thread-302884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:26:28.313 [DEBUG] [Thread-302884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:26:28.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:26:28.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:26:28.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:26:28.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:26:28.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:26:28.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:26:28.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:26:28.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:26:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:26:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.476458 -999.00  +24.00  13.92     31   +5.90 1 2 1 1 1   888    0 19.69 76.38 ----- 13.9 13.9 341.0 15.5 34.3 -23.9 33.8 -23.0 34.2 -22.5 35.0 -22.8
2025-12-24T13:26:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:26:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:26:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.476458
2025-12-24T13:26:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:26:28.347 [DEBUG] [Thread-302884] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:26:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:26:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:26:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:26:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:26:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:26:17', tmtdew=20.94, humidity=25.57, cloud=0.0, wind=10.18, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:26:05.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:26:28.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:26:28.440 [DEBUG] [Thread-302887] [transport.py] [_log()] starting thread (client mode): 0xf572f8e0
2025-12-24T13:26:28.440 [DEBUG] [Thread-302887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:26:28.454 [DEBUG] [Thread-302887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:26:28.455 [INFO] [Thread-302887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] client lang: <none>
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] server lang: <none>
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] kex follows: False
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] Compression: none
2025-12-24T13:26:28.464 [DEBUG] [Thread-302887] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:26:28.524 [DEBUG] [Thread-302887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:26:28.525 [DEBUG] [Thread-302887] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:26:28.526 [DEBUG] [Thread-302887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:26:28.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:26:28.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:26:28.583 [DEBUG] [Thread-302887] [transport.py] [_log()] userauth is OK
2025-12-24T13:26:28.584 [DEBUG] [Thread-302887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:26:28.584 [DEBUG] [Thread-302887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:26:28.584 [DEBUG] [Thread-302887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:26:28.584 [DEBUG] [Thread-302887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:26:28.607 [INFO] [Thread-302887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:26:28.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:26:28.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:26:29.490 [DEBUG] [Thread-302887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:26:29.490 [DEBUG] [Thread-302887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:26:29.536 [DEBUG] [Thread-302887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:26:29.537 [DEBUG] [Thread-302887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:26:29.546 [DEBUG] [Thread-302887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:26:29.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:26:29.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:26:29.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
2025-12-24T13:26:29.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:26:29.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:26:29.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:26:29.583 [DEBUG] [Thread-302887] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:26:40.616 [DEBUG] [Thread-302889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:26:55.780 [DEBUG] [Thread-302890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:26:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:26:59.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:26:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:27:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 26, 51), 21.0, 25.53, 0.0, 13.32, 23.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:27:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:26:51
2025-12-24T13:27:00.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:27:00.939 [DEBUG] [Thread-302891] [transport.py] [_log()] starting thread (client mode): 0xf572e410
2025-12-24T13:27:00.939 [DEBUG] [Thread-302891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:27:00.939 [DEBUG] [Thread-302891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:27:00.940 [INFO] [Thread-302891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:27:00.943 [DEBUG] [Thread-302891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:27:00.944 [DEBUG] [Thread-302891] [transport.py] [_log()] client lang: <none>
2025-12-24T13:27:00.944 [DEBUG] [Thread-302891] [transport.py] [_log()] server lang: <none>
2025-12-24T13:27:00.944 [DEBUG] [Thread-302891] [transport.py] [_log()] kex follows: False
2025-12-24T13:27:00.944 [DEBUG] [Thread-302891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:27:00.944 [DEBUG] [Thread-302891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:27:00.944 [DEBUG] [Thread-302891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:27:00.945 [DEBUG] [Thread-302891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:27:00.945 [DEBUG] [Thread-302891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:27:00.945 [DEBUG] [Thread-302891] [transport.py] [_log()] Compression: none
2025-12-24T13:27:00.945 [DEBUG] [Thread-302891] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:27:00.979 [DEBUG] [Thread-302891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:27:00.982 [DEBUG] [Thread-302891] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:27:00.984 [DEBUG] [Thread-302891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:27:00.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:27:00.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:27:00.988 [DEBUG] [Thread-302891] [transport.py] [_log()] userauth is OK
2025-12-24T13:27:00.988 [DEBUG] [Thread-302891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:27:00.989 [DEBUG] [Thread-302891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:27:00.989 [DEBUG] [Thread-302891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:27:00.989 [DEBUG] [Thread-302891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:27:01.009 [INFO] [Thread-302891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:27:01.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:27:01.605 [DEBUG] [Thread-302891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:27:01.605 [DEBUG] [Thread-302891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:27:01.606 [DEBUG] [Thread-302891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:27:01.647 [DEBUG] [Thread-302891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:27:01.647 [DEBUG] [Thread-302891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:27:01.649 [DEBUG] [Thread-302891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:27:01.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:27:01.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:27:01.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:27:01.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:27:01.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:27:01.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:27:01.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:27:01.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:27:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:27:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.476805 -999.00  +24.30   9.80     30   +5.80 1 2 1 1 1   888    0 20.59 79.81 ----- 9.8 9.8 33.8 15.9 34.0 -30.4 33.7 -24.3 34.1 -21.3 34.8 -23.2
2025-12-24T13:27:01.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:27:01.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:27:01.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.476805
2025-12-24T13:27:01.678 [DEBUG] [Thread-302891] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:27:01.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:27:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:27:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:27:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:27:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:27:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:26:51', tmtdew=21.0, humidity=25.53, cloud=0.0, wind=13.32, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:26:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:27:01.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:27:01.805 [DEBUG] [Thread-302894] [transport.py] [_log()] starting thread (client mode): 0xf81f2fb0
2025-12-24T13:27:01.806 [DEBUG] [Thread-302894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:27:01.821 [DEBUG] [Thread-302894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:27:01.821 [INFO] [Thread-302894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:27:01.830 [DEBUG] [Thread-302894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:27:01.831 [DEBUG] [Thread-302894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:27:01.831 [DEBUG] [Thread-302894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:27:01.831 [DEBUG] [Thread-302894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:27:01.831 [DEBUG] [Thread-302894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] client lang: <none>
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] server lang: <none>
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] kex follows: False
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:27:01.832 [DEBUG] [Thread-302894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:27:01.833 [DEBUG] [Thread-302894] [transport.py] [_log()] Compression: none
2025-12-24T13:27:01.833 [DEBUG] [Thread-302894] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:27:01.891 [DEBUG] [Thread-302894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:27:01.891 [DEBUG] [Thread-302894] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:27:01.892 [DEBUG] [Thread-302894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:27:01.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:27:01.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:27:01.948 [DEBUG] [Thread-302894] [transport.py] [_log()] userauth is OK
2025-12-24T13:27:01.948 [DEBUG] [Thread-302894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:27:01.949 [DEBUG] [Thread-302894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:27:01.949 [DEBUG] [Thread-302894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:27:01.949 [DEBUG] [Thread-302894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:27:01.971 [INFO] [Thread-302894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:27:01.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:27:01.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:27:02.819 [DEBUG] [Thread-302894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:27:02.820 [DEBUG] [Thread-302894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:27:02.868 [DEBUG] [Thread-302894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:27:02.868 [DEBUG] [Thread-302894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:27:02.876 [DEBUG] [Thread-302894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:27:02.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:27:02.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:27:02.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:27:02.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:27:02.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:27:02.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:27:02.914 [DEBUG] [Thread-302894] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:27:05.738 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:27:05.741 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:27:10.870 [DEBUG] [Thread-302896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:27:23.321 [DEBUG] [Thread-302897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:27:25.971 [DEBUG] [Thread-302898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:27:32.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:27:32.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:27:32.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:27:33.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 27, 24), 20.79, 25.81, 0.0, 10.13, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:27:33.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:27:24
2025-12-24T13:27:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:27:34.344 [DEBUG] [Thread-302899] [transport.py] [_log()] starting thread (client mode): 0xf81e42b0
2025-12-24T13:27:34.345 [DEBUG] [Thread-302899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:27:34.348 [DEBUG] [Thread-302899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:27:34.348 [INFO] [Thread-302899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:27:34.352 [DEBUG] [Thread-302899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:27:34.352 [DEBUG] [Thread-302899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:27:34.352 [DEBUG] [Thread-302899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:27:34.352 [DEBUG] [Thread-302899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:27:34.352 [DEBUG] [Thread-302899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] client lang: <none>
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] server lang: <none>
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] kex follows: False
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:27:34.353 [DEBUG] [Thread-302899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:27:34.354 [DEBUG] [Thread-302899] [transport.py] [_log()] Compression: none
2025-12-24T13:27:34.354 [DEBUG] [Thread-302899] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:27:34.390 [DEBUG] [Thread-302899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:27:34.395 [DEBUG] [Thread-302899] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:27:34.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:27:34.399 [DEBUG] [Thread-302899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:27:34.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:27:34.402 [DEBUG] [Thread-302899] [transport.py] [_log()] userauth is OK
2025-12-24T13:27:34.402 [DEBUG] [Thread-302899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:27:34.402 [DEBUG] [Thread-302899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:27:34.402 [DEBUG] [Thread-302899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:27:34.402 [DEBUG] [Thread-302899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:27:34.430 [INFO] [Thread-302899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:27:34.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:27:35.095 [DEBUG] [Thread-302899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:27:35.096 [DEBUG] [Thread-302899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:27:35.097 [DEBUG] [Thread-302899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:27:35.136 [DEBUG] [Thread-302899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:27:35.136 [DEBUG] [Thread-302899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:27:35.139 [DEBUG] [Thread-302899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:27:35.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:27:35.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:27:35.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:27:35.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:27:35.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:27:35.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:27:35.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:27:35.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:27:35.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:27:35.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.477152 -999.00  +24.20  11.52     30   +5.80 1 1 1 1 1   888    0 19.94 87.31 ----- 11.5 11.5 67.2 13.1 34.3 -23.4 33.8 -24.3 34.2 -22.1 34.9 -22.5
2025-12-24T13:27:35.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:27:35.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:27:35.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.477152
2025-12-24T13:27:35.173 [DEBUG] [Thread-302899] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:27:35.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:27:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:27:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:27:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:27:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:27:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:27:24', tmtdew=20.79, humidity=25.81, cloud=0.0, wind=10.13, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:27:05.933', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:27:35.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:27:35.291 [DEBUG] [Thread-302902] [transport.py] [_log()] starting thread (client mode): 0xf81e4400
2025-12-24T13:27:35.291 [DEBUG] [Thread-302902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:27:35.306 [DEBUG] [Thread-302902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:27:35.306 [INFO] [Thread-302902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] client lang: <none>
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] server lang: <none>
2025-12-24T13:27:35.314 [DEBUG] [Thread-302902] [transport.py] [_log()] kex follows: False
2025-12-24T13:27:35.315 [DEBUG] [Thread-302902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:27:35.315 [DEBUG] [Thread-302902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:27:35.315 [DEBUG] [Thread-302902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:27:35.315 [DEBUG] [Thread-302902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:27:35.315 [DEBUG] [Thread-302902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:27:35.315 [DEBUG] [Thread-302902] [transport.py] [_log()] Compression: none
2025-12-24T13:27:35.315 [DEBUG] [Thread-302902] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:27:35.369 [DEBUG] [Thread-302902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:27:35.369 [DEBUG] [Thread-302902] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:27:35.370 [DEBUG] [Thread-302902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:27:35.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:27:35.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:27:35.426 [DEBUG] [Thread-302902] [transport.py] [_log()] userauth is OK
2025-12-24T13:27:35.427 [DEBUG] [Thread-302902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:27:35.427 [DEBUG] [Thread-302902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:27:35.427 [DEBUG] [Thread-302902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:27:35.427 [DEBUG] [Thread-302902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:27:35.447 [INFO] [Thread-302902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:27:35.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:27:35.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:27:36.341 [DEBUG] [Thread-302902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:27:36.341 [DEBUG] [Thread-302902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:27:36.388 [DEBUG] [Thread-302902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:27:36.388 [DEBUG] [Thread-302902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:27:36.398 [DEBUG] [Thread-302902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:27:36.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:27:36.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')
2025-12-24T13:27:36.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:27:36.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:27:36.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:27:36.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:27:36.436 [DEBUG] [Thread-302902] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:27:41.045 [DEBUG] [Thread-302904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:27:56.197 [DEBUG] [Thread-302905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:28:05.888 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:28:05.895 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:28:06.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:28:06.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:28:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:28:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 27, 57), 20.82, 25.66, 0.0, 10.16, 23.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:28:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:27:57
2025-12-24T13:28:08.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:28:08.184 [DEBUG] [Thread-302906] [transport.py] [_log()] starting thread (client mode): 0xf5772dd0
2025-12-24T13:28:08.184 [DEBUG] [Thread-302906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:28:08.197 [DEBUG] [Thread-302906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:28:08.197 [INFO] [Thread-302906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] client lang: <none>
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] server lang: <none>
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] kex follows: False
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:28:08.201 [DEBUG] [Thread-302906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:28:08.202 [DEBUG] [Thread-302906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:28:08.202 [DEBUG] [Thread-302906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:28:08.202 [DEBUG] [Thread-302906] [transport.py] [_log()] Compression: none
2025-12-24T13:28:08.202 [DEBUG] [Thread-302906] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:28:08.229 [DEBUG] [Thread-302906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:28:08.232 [DEBUG] [Thread-302906] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:28:08.234 [DEBUG] [Thread-302906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:28:08.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:28:08.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:28:08.237 [DEBUG] [Thread-302906] [transport.py] [_log()] userauth is OK
2025-12-24T13:28:08.237 [DEBUG] [Thread-302906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:28:08.237 [DEBUG] [Thread-302906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:28:08.237 [DEBUG] [Thread-302906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:28:08.237 [DEBUG] [Thread-302906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:28:08.271 [INFO] [Thread-302906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:28:08.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:28:08.922 [DEBUG] [Thread-302906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:28:08.923 [DEBUG] [Thread-302906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:28:08.923 [DEBUG] [Thread-302906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:28:08.964 [DEBUG] [Thread-302906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:28:08.964 [DEBUG] [Thread-302906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:28:08.966 [DEBUG] [Thread-302906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:28:08.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:28:08.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:28:08.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:28:08.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:28:08.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:28:08.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:28:08.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:28:08.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:28:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:28:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.477500 -999.00  +24.40   7.34     30   +5.90 1 2 1 1 1   888    0 20.57 95.64 ----- 7.3 7.3 40.6 19.4 34.4 -23.6 33.8 -24.3 34.3 -21.6 34.9 -22.1
2025-12-24T13:28:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:28:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:28:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.477500
2025-12-24T13:28:09.001 [DEBUG] [Thread-302906] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:28:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:28:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:28:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:28:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:28:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:28:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:27:57', tmtdew=20.82, humidity=25.66, cloud=0.0, wind=10.16, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:27:36.000', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:28:09.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:28:09.097 [DEBUG] [Thread-302909] [transport.py] [_log()] starting thread (client mode): 0xf574eda0
2025-12-24T13:28:09.097 [DEBUG] [Thread-302909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:28:09.113 [DEBUG] [Thread-302909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:28:09.113 [INFO] [Thread-302909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:28:09.120 [DEBUG] [Thread-302909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] client lang: <none>
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] server lang: <none>
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] kex follows: False
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] Compression: none
2025-12-24T13:28:09.121 [DEBUG] [Thread-302909] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:28:09.177 [DEBUG] [Thread-302909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:28:09.178 [DEBUG] [Thread-302909] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:28:09.178 [DEBUG] [Thread-302909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:28:09.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:28:09.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:28:09.234 [DEBUG] [Thread-302909] [transport.py] [_log()] userauth is OK
2025-12-24T13:28:09.234 [DEBUG] [Thread-302909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:28:09.234 [DEBUG] [Thread-302909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:28:09.234 [DEBUG] [Thread-302909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:28:09.234 [DEBUG] [Thread-302909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:28:09.248 [INFO] [Thread-302909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:28:09.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:28:09.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:28:10.098 [DEBUG] [Thread-302909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:28:10.098 [DEBUG] [Thread-302909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:28:10.145 [DEBUG] [Thread-302909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:28:10.145 [DEBUG] [Thread-302909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:28:10.153 [DEBUG] [Thread-302909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:28:10.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:28:10.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:28:10.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:28:10.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:28:10.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:28:10.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:28:10.188 [DEBUG] [Thread-302909] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:28:11.271 [DEBUG] [Thread-302911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:28:23.743 [DEBUG] [Thread-302912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:28:26.429 [DEBUG] [Thread-302913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:28:40.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:28:40.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:28:40.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:28:41.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 28, 30), 20.85, 25.68, 0.0, 11.05, 24.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:28:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:28:30
2025-12-24T13:28:41.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:28:41.478 [DEBUG] [Thread-302914] [transport.py] [_log()] starting thread (client mode): 0xf81f3a30
2025-12-24T13:28:41.479 [DEBUG] [Thread-302914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:28:41.491 [DEBUG] [Thread-302914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:28:41.494 [DEBUG] [Thread-302915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:28:41.494 [INFO] [Thread-302914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:28:41.501 [DEBUG] [Thread-302914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:28:41.501 [DEBUG] [Thread-302914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:28:41.501 [DEBUG] [Thread-302914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:28:41.501 [DEBUG] [Thread-302914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] client lang: <none>
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] server lang: <none>
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] kex follows: False
2025-12-24T13:28:41.502 [DEBUG] [Thread-302914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:28:41.503 [DEBUG] [Thread-302914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:28:41.504 [DEBUG] [Thread-302914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:28:41.504 [DEBUG] [Thread-302914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:28:41.504 [DEBUG] [Thread-302914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:28:41.504 [DEBUG] [Thread-302914] [transport.py] [_log()] Compression: none
2025-12-24T13:28:41.504 [DEBUG] [Thread-302914] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:28:41.548 [DEBUG] [Thread-302914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:28:41.553 [DEBUG] [Thread-302914] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:28:41.555 [DEBUG] [Thread-302914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:28:41.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:28:41.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:28:41.560 [DEBUG] [Thread-302914] [transport.py] [_log()] userauth is OK
2025-12-24T13:28:41.560 [DEBUG] [Thread-302914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:28:41.560 [DEBUG] [Thread-302914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:28:41.560 [DEBUG] [Thread-302914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:28:41.561 [DEBUG] [Thread-302914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:28:41.590 [INFO] [Thread-302914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:28:41.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:28:42.221 [DEBUG] [Thread-302914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:28:42.230 [DEBUG] [Thread-302914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:28:42.231 [DEBUG] [Thread-302914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:28:42.262 [DEBUG] [Thread-302914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:28:42.263 [DEBUG] [Thread-302914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:28:42.265 [DEBUG] [Thread-302914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:28:42.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:28:42.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:28:42.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:28:42.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:28:42.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:28:42.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:28:42.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:28:42.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:28:42.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:28:42.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.477847 -999.00  +24.40   6.68     30   +5.70 1 2 1 1 1   888    0 21.01 98.44 ----- 6.7 6.7 148.6 10.4 34.4 -23.9 33.9 -23.3 34.2 -21.7 34.9 -22.5
2025-12-24T13:28:42.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:28:42.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:28:42.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.477847
2025-12-24T13:28:42.296 [DEBUG] [Thread-302914] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:28:42.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:28:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:28:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:28:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:28:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:28:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:28:30', tmtdew=20.85, humidity=25.68, cloud=0.0, wind=11.05, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:28:05.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:28:42.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:28:42.404 [DEBUG] [Thread-302918] [transport.py] [_log()] starting thread (client mode): 0xf5743ee0
2025-12-24T13:28:42.404 [DEBUG] [Thread-302918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:28:42.418 [DEBUG] [Thread-302918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:28:42.419 [INFO] [Thread-302918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:28:42.426 [DEBUG] [Thread-302918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:28:42.427 [DEBUG] [Thread-302918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:28:42.427 [DEBUG] [Thread-302918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:28:42.427 [DEBUG] [Thread-302918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:28:42.427 [DEBUG] [Thread-302918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:28:42.427 [DEBUG] [Thread-302918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:28:42.427 [DEBUG] [Thread-302918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:28:42.427 [DEBUG] [Thread-302918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:28:42.427 [DEBUG] [Thread-302918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:28:42.428 [DEBUG] [Thread-302918] [transport.py] [_log()] client lang: <none>
2025-12-24T13:28:42.428 [DEBUG] [Thread-302918] [transport.py] [_log()] server lang: <none>
2025-12-24T13:28:42.428 [DEBUG] [Thread-302918] [transport.py] [_log()] kex follows: False
2025-12-24T13:28:42.428 [DEBUG] [Thread-302918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:28:42.428 [DEBUG] [Thread-302918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:28:42.428 [DEBUG] [Thread-302918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:28:42.428 [DEBUG] [Thread-302918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:28:42.429 [DEBUG] [Thread-302918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:28:42.429 [DEBUG] [Thread-302918] [transport.py] [_log()] Compression: none
2025-12-24T13:28:42.429 [DEBUG] [Thread-302918] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:28:42.487 [DEBUG] [Thread-302918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:28:42.487 [DEBUG] [Thread-302918] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:28:42.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:28:42.489 [DEBUG] [Thread-302918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:28:42.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:28:42.542 [DEBUG] [Thread-302918] [transport.py] [_log()] userauth is OK
2025-12-24T13:28:42.543 [DEBUG] [Thread-302918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:28:42.543 [DEBUG] [Thread-302918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:28:42.543 [DEBUG] [Thread-302918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:28:42.544 [DEBUG] [Thread-302918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:28:42.568 [INFO] [Thread-302918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:28:42.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:28:42.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:28:43.399 [DEBUG] [Thread-302918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:28:43.400 [DEBUG] [Thread-302918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:28:43.438 [DEBUG] [Thread-302918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:28:43.438 [DEBUG] [Thread-302918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:28:43.447 [DEBUG] [Thread-302918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:28:43.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:28:43.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:28:43.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:28:43.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:28:43.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:28:43.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:28:43.480 [DEBUG] [Thread-302918] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:28:56.563 [DEBUG] [Thread-302920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:29:06.052 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:29:06.068 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:29:11.714 [DEBUG] [Thread-302921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:29:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:29:13.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:29: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
2025-12-24T13:29:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 29, 3), 21.04, 25.4, 0.0, 12.32, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:29:14.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:29:03
2025-12-24T13:29:14.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:29:14.789 [DEBUG] [Thread-302922] [transport.py] [_log()] starting thread (client mode): 0xf5742860
2025-12-24T13:29:14.790 [DEBUG] [Thread-302922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:29:14.804 [DEBUG] [Thread-302922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:29:14.804 [INFO] [Thread-302922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:29:14.810 [DEBUG] [Thread-302922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:29:14.810 [DEBUG] [Thread-302922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] client lang: <none>
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] server lang: <none>
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] kex follows: False
2025-12-24T13:29:14.811 [DEBUG] [Thread-302922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:29:14.812 [DEBUG] [Thread-302922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:29:14.812 [DEBUG] [Thread-302922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:29:14.813 [DEBUG] [Thread-302922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:29:14.813 [DEBUG] [Thread-302922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:29:14.813 [DEBUG] [Thread-302922] [transport.py] [_log()] Compression: none
2025-12-24T13:29:14.813 [DEBUG] [Thread-302922] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:29:14.851 [DEBUG] [Thread-302922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:29:14.854 [DEBUG] [Thread-302922] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:29:14.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:29:14.856 [DEBUG] [Thread-302922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:29:14.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:29:14.859 [DEBUG] [Thread-302922] [transport.py] [_log()] userauth is OK
2025-12-24T13:29:14.859 [DEBUG] [Thread-302922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:29:14.859 [DEBUG] [Thread-302922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:29:14.859 [DEBUG] [Thread-302922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:29:14.859 [DEBUG] [Thread-302922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:29:14.877 [INFO] [Thread-302922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:29:14.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:29:15.514 [DEBUG] [Thread-302922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:29:15.514 [DEBUG] [Thread-302922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:29:15.521 [DEBUG] [Thread-302922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:29:15.556 [DEBUG] [Thread-302922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:29:15.556 [DEBUG] [Thread-302922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:29:15.559 [DEBUG] [Thread-302922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:29:15.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:29:15.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:29:15.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:29:15.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:29:15.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:29:15.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:29:15.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:29:15.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:29:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:29:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.478541 -999.00  +24.30  12.11     30   +5.70 1 2 1 1 1   888    0 20.76 97.95 ----- 12.1 12.1 113.0 21.8 33.9 -27.6 33.9 -24.5 34.2 -21.3 34.7 -23.5
2025-12-24T13:29:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:29:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:29:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.478541
2025-12-24T13:29:15.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:29:15.598 [DEBUG] [Thread-302922] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:29:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:29:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:29:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:29:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:29:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:29:03', tmtdew=21.04, humidity=25.4, cloud=0.0, wind=12.32, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:29:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:29:15.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:29:15.684 [DEBUG] [Thread-302925] [transport.py] [_log()] starting thread (client mode): 0xf5751990
2025-12-24T13:29:15.684 [DEBUG] [Thread-302925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:29:15.698 [DEBUG] [Thread-302925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:29:15.698 [INFO] [Thread-302925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] client lang: <none>
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] server lang: <none>
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] kex follows: False
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] Compression: none
2025-12-24T13:29:15.706 [DEBUG] [Thread-302925] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:29:15.765 [DEBUG] [Thread-302925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:29:15.766 [DEBUG] [Thread-302925] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:29:15.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:29:15.768 [DEBUG] [Thread-302925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:29:15.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:29:15.822 [DEBUG] [Thread-302925] [transport.py] [_log()] userauth is OK
2025-12-24T13:29:15.823 [DEBUG] [Thread-302925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:29:15.823 [DEBUG] [Thread-302925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:29:15.823 [DEBUG] [Thread-302925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:29:15.823 [DEBUG] [Thread-302925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:29:15.841 [INFO] [Thread-302925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:29:15.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:29:15.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:29:16.699 [DEBUG] [Thread-302925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:29:16.699 [DEBUG] [Thread-302925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:29:16.747 [DEBUG] [Thread-302925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:29:16.747 [DEBUG] [Thread-302925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:29:16.756 [DEBUG] [Thread-302925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:29:16.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:29:16.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:29:16.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:29:16.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:29:16.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:29:16.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:29:16.792 [DEBUG] [Thread-302925] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:29:24.006 [DEBUG] [Thread-302927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:29:26.811 [DEBUG] [Thread-302928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:29:42.003 [DEBUG] [Thread-302929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:29:46.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:29:46.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:29:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:29:48.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 29, 36), 21.49, 24.38, 0.0, 12.39, 24.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:29:48.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:29:36
2025-12-24T13:29:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:29:48.631 [DEBUG] [Thread-302930] [transport.py] [_log()] starting thread (client mode): 0xf81f1510
2025-12-24T13:29:48.631 [DEBUG] [Thread-302930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:29:48.637 [DEBUG] [Thread-302930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:29:48.637 [INFO] [Thread-302930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] client lang: <none>
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] server lang: <none>
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] kex follows: False
2025-12-24T13:29:48.640 [DEBUG] [Thread-302930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:29:48.641 [DEBUG] [Thread-302930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:29:48.641 [DEBUG] [Thread-302930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:29:48.641 [DEBUG] [Thread-302930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:29:48.641 [DEBUG] [Thread-302930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:29:48.641 [DEBUG] [Thread-302930] [transport.py] [_log()] Compression: none
2025-12-24T13:29:48.641 [DEBUG] [Thread-302930] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:29:48.666 [DEBUG] [Thread-302930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:29:48.668 [DEBUG] [Thread-302930] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:29:48.669 [DEBUG] [Thread-302930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:29:48.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:29:48.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:29:48.672 [DEBUG] [Thread-302930] [transport.py] [_log()] userauth is OK
2025-12-24T13:29:48.672 [DEBUG] [Thread-302930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:29:48.672 [DEBUG] [Thread-302930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:29:48.672 [DEBUG] [Thread-302930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:29:48.672 [DEBUG] [Thread-302930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:29:48.683 [INFO] [Thread-302930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:29:48.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:29:49.322 [DEBUG] [Thread-302930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:29:49.322 [DEBUG] [Thread-302930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:29:49.323 [DEBUG] [Thread-302930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:29:49.363 [DEBUG] [Thread-302930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:29:49.363 [DEBUG] [Thread-302930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:29:49.367 [DEBUG] [Thread-302930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:29:49.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:29:49.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:29:49.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:29:49.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:29:49.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:29:49.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:29:49.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:29:49.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:29:49.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:29:49.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.478888 -999.00  +24.10   7.78     30   +5.60 1 1 1 1 1   888    0 20.78 95.29 ----- 7.8 7.8 100.7 15.9 33.8 -28.4 33.8 -25.2 34.0 -22.4 34.7 -22.4
2025-12-24T13:29:49.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:29:49.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:29:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.478888
2025-12-24T13:29:49.399 [DEBUG] [Thread-302930] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:29:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:29:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:29:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:29:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:29:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:29:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:29:36', tmtdew=21.49, humidity=24.38, cloud=0.0, wind=12.39, temperature=24.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:29:35.923', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:29:49.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:29:49.493 [DEBUG] [Thread-302933] [transport.py] [_log()] starting thread (client mode): 0xf81f32e0
2025-12-24T13:29:49.493 [DEBUG] [Thread-302933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:29:49.507 [DEBUG] [Thread-302933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:29:49.507 [INFO] [Thread-302933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] client lang: <none>
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] server lang: <none>
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] kex follows: False
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:29:49.514 [DEBUG] [Thread-302933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:29:49.515 [DEBUG] [Thread-302933] [transport.py] [_log()] Compression: none
2025-12-24T13:29:49.515 [DEBUG] [Thread-302933] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:29:49.576 [DEBUG] [Thread-302933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:29:49.576 [DEBUG] [Thread-302933] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:29:49.576 [DEBUG] [Thread-302933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:29:49.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:29:49.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:29:49.638 [DEBUG] [Thread-302933] [transport.py] [_log()] userauth is OK
2025-12-24T13:29:49.638 [DEBUG] [Thread-302933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:29:49.638 [DEBUG] [Thread-302933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:29:49.638 [DEBUG] [Thread-302933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:29:49.638 [DEBUG] [Thread-302933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:29:49.658 [INFO] [Thread-302933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:29:49.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:29:49.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:29:50.494 [DEBUG] [Thread-302933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:29:50.494 [DEBUG] [Thread-302933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:29:50.542 [DEBUG] [Thread-302933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:29:50.542 [DEBUG] [Thread-302933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:29:50.550 [DEBUG] [Thread-302933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:29:50.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:29:50.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:29:50.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:29:50.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:29:50.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:29:50.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:29:50.583 [DEBUG] [Thread-302933] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:29:57.086 [DEBUG] [Thread-302935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:30:06.207 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:30:06.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:30:12.176 [DEBUG] [Thread-302936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:30:20.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:30:20.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:30:20.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:30:21.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 30, 9), 21.11, 24.96, 0.0, 11.58, 23.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:30:21.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:30:09
2025-12-24T13:30:21.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:30:21.778 [DEBUG] [Thread-302937] [transport.py] [_log()] starting thread (client mode): 0xf5752dd0
2025-12-24T13:30:21.779 [DEBUG] [Thread-302937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:30:21.789 [DEBUG] [Thread-302937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:30:21.789 [INFO] [Thread-302937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:30:21.794 [DEBUG] [Thread-302937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:30:21.794 [DEBUG] [Thread-302937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:30:21.794 [DEBUG] [Thread-302937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:30:21.794 [DEBUG] [Thread-302937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] client lang: <none>
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] server lang: <none>
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] kex follows: False
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:30:21.795 [DEBUG] [Thread-302937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:30:21.796 [DEBUG] [Thread-302937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:30:21.796 [DEBUG] [Thread-302937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:30:21.796 [DEBUG] [Thread-302937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:30:21.796 [DEBUG] [Thread-302937] [transport.py] [_log()] Compression: none
2025-12-24T13:30:21.796 [DEBUG] [Thread-302937] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:30:21.828 [DEBUG] [Thread-302937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:30:21.831 [DEBUG] [Thread-302937] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:30:21.833 [DEBUG] [Thread-302937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:30:21.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:30:21.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:30:21.836 [DEBUG] [Thread-302937] [transport.py] [_log()] userauth is OK
2025-12-24T13:30:21.836 [DEBUG] [Thread-302937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:30:21.837 [DEBUG] [Thread-302937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:30:21.837 [DEBUG] [Thread-302937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:30:21.837 [DEBUG] [Thread-302937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:30:21.855 [INFO] [Thread-302937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:30:21.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:30:22.525 [DEBUG] [Thread-302937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:30:22.525 [DEBUG] [Thread-302937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:30:22.526 [DEBUG] [Thread-302937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:30:22.567 [DEBUG] [Thread-302937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:30:22.567 [DEBUG] [Thread-302937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:30:22.569 [DEBUG] [Thread-302937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:30:22.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:30:22.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:30:22.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:30:22.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:30:22.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:30:22.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:30:22.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:30:22.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:30:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:30:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.479235 -999.00  +24.10  10.35     30   +5.80 1 2 1 1 1   888    0 21.50 104.57 ----- 10.3 10.3 123.8 12.1 34.0 -22.5 33.9 -22.3 34.4 -21.1 34.8 -21.6
2025-12-24T13:30:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:30:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:30:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.479235
2025-12-24T13:30:22.597 [DEBUG] [Thread-302937] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:30:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:30:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:30:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:30:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:30:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:30:22.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:30:09', tmtdew=21.11, humidity=24.96, cloud=0.0, wind=11.58, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:30:05.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:30:22.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:30:22.701 [DEBUG] [Thread-302940] [transport.py] [_log()] starting thread (client mode): 0xf5752b90
2025-12-24T13:30:22.701 [DEBUG] [Thread-302940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:30:22.716 [DEBUG] [Thread-302940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:30:22.716 [INFO] [Thread-302940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] client lang: <none>
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] server lang: <none>
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] kex follows: False
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:30:22.726 [DEBUG] [Thread-302940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:30:22.727 [DEBUG] [Thread-302940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:30:22.727 [DEBUG] [Thread-302940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:30:22.727 [DEBUG] [Thread-302940] [transport.py] [_log()] Compression: none
2025-12-24T13:30:22.727 [DEBUG] [Thread-302940] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:30:22.781 [DEBUG] [Thread-302940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:30:22.781 [DEBUG] [Thread-302940] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:30:22.781 [DEBUG] [Thread-302940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:30:22.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:30:22.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:30:22.837 [DEBUG] [Thread-302940] [transport.py] [_log()] userauth is OK
2025-12-24T13:30:22.838 [DEBUG] [Thread-302940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:30:22.838 [DEBUG] [Thread-302940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:30:22.838 [DEBUG] [Thread-302940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:30:22.838 [DEBUG] [Thread-302940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:30:22.853 [INFO] [Thread-302940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:30:22.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:30:22.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:30:23.704 [DEBUG] [Thread-302940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:30:23.705 [DEBUG] [Thread-302940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:30:23.751 [DEBUG] [Thread-302940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:30:23.751 [DEBUG] [Thread-302940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:30:23.759 [DEBUG] [Thread-302940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:30:23.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:30:23.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:30:23.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:30:23.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:30:23.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:30:23.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:30:23.794 [DEBUG] [Thread-302940] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:30:24.293 [DEBUG] [Thread-302942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:30:27.266 [DEBUG] [Thread-302943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:30:42.393 [DEBUG] [Thread-302944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:30:53.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:30:53.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:30:53.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
2025-12-24T13:30:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 30, 42), 20.65, 25.81, 0.0, 13.29, 23.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:30:55.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:30:42
2025-12-24T13:30:55.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:30:55.554 [DEBUG] [Thread-302945] [transport.py] [_log()] starting thread (client mode): 0xf57bf5e0
2025-12-24T13:30:55.555 [DEBUG] [Thread-302945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:30:55.565 [DEBUG] [Thread-302945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:30:55.566 [INFO] [Thread-302945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:30:55.570 [DEBUG] [Thread-302945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:30:55.570 [DEBUG] [Thread-302945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] client lang: <none>
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] server lang: <none>
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] kex follows: False
2025-12-24T13:30:55.571 [DEBUG] [Thread-302945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:30:55.572 [DEBUG] [Thread-302945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:30:55.572 [DEBUG] [Thread-302945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:30:55.573 [DEBUG] [Thread-302945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:30:55.573 [DEBUG] [Thread-302945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:30:55.573 [DEBUG] [Thread-302945] [transport.py] [_log()] Compression: none
2025-12-24T13:30:55.573 [DEBUG] [Thread-302945] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:30:55.607 [DEBUG] [Thread-302945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:30:55.612 [DEBUG] [Thread-302945] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:30:55.614 [DEBUG] [Thread-302945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:30:55.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:30:55.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:30:55.619 [DEBUG] [Thread-302945] [transport.py] [_log()] userauth is OK
2025-12-24T13:30:55.620 [DEBUG] [Thread-302945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:30:55.620 [DEBUG] [Thread-302945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:30:55.620 [DEBUG] [Thread-302945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:30:55.620 [DEBUG] [Thread-302945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:30:55.658 [INFO] [Thread-302945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:30:55.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:30:56.240 [DEBUG] [Thread-302945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:30:56.240 [DEBUG] [Thread-302945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:30:56.241 [DEBUG] [Thread-302945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:30:56.281 [DEBUG] [Thread-302945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:30:56.281 [DEBUG] [Thread-302945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:30:56.285 [DEBUG] [Thread-302945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:30:56.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:30:56.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:30:56.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:30:56.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:30:56.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:30:56.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:30:56.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:30:56.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:30:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:30:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.479583 -999.00  +24.30  15.26     30   +5.70 1 1 1 1 1   888    0 21.07 104.30 ----- 15.3 15.3 110.8 23.0 33.9 -24.4 33.9 -23.4 34.3 -22.9 34.9 -23.3
2025-12-24T13:30:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:30:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:30:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.479583
2025-12-24T13:30:56.319 [DEBUG] [Thread-302945] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:30:56.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:30:56.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:30:56.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:30:56.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:30:56.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:30:56.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:30:42', tmtdew=20.65, humidity=25.81, cloud=0.0, wind=13.29, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:30:35.971', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:30:56.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:30:56.445 [DEBUG] [Thread-302948] [transport.py] [_log()] starting thread (client mode): 0xf5750670
2025-12-24T13:30:56.445 [DEBUG] [Thread-302948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:30:56.460 [DEBUG] [Thread-302948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:30:56.460 [INFO] [Thread-302948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] client lang: <none>
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] server lang: <none>
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] kex follows: False
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:30:56.468 [DEBUG] [Thread-302948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:30:56.469 [DEBUG] [Thread-302948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:30:56.469 [DEBUG] [Thread-302948] [transport.py] [_log()] Compression: none
2025-12-24T13:30:56.469 [DEBUG] [Thread-302948] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:30:56.526 [DEBUG] [Thread-302948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:30:56.526 [DEBUG] [Thread-302948] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:30:56.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:30:56.527 [DEBUG] [Thread-302948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:30:56.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:30:56.582 [DEBUG] [Thread-302948] [transport.py] [_log()] userauth is OK
2025-12-24T13:30:56.582 [DEBUG] [Thread-302948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:30:56.582 [DEBUG] [Thread-302948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:30:56.582 [DEBUG] [Thread-302948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:30:56.582 [DEBUG] [Thread-302948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:30:56.605 [INFO] [Thread-302948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:30:56.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:30:56.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:30:57.468 [DEBUG] [Thread-302950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:30:57.517 [DEBUG] [Thread-302948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:30:57.517 [DEBUG] [Thread-302948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:30:57.565 [DEBUG] [Thread-302948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:30:57.565 [DEBUG] [Thread-302948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:30:57.573 [DEBUG] [Thread-302948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:30:57.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:30:57.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:30:57.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:30:57.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:30:57.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:30:57.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:30:57.606 [DEBUG] [Thread-302948] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:31:06.355 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:31:06.359 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:31:12.673 [DEBUG] [Thread-302951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:31:24.571 [DEBUG] [Thread-302952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:31:27.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:31:27.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:31:27.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:31:27.720 [DEBUG] [Thread-302953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:31:28.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 31, 16), 20.45, 26.08, 0.0, 11.91, 23.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:31:28.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:31:16
2025-12-24T13:31:29.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:31:29.300 [DEBUG] [Thread-302954] [transport.py] [_log()] starting thread (client mode): 0xf57422f0
2025-12-24T13:31:29.300 [DEBUG] [Thread-302954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:31:29.313 [DEBUG] [Thread-302954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:31:29.314 [INFO] [Thread-302954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:31:29.319 [DEBUG] [Thread-302954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] client lang: <none>
2025-12-24T13:31:29.320 [DEBUG] [Thread-302954] [transport.py] [_log()] server lang: <none>
2025-12-24T13:31:29.321 [DEBUG] [Thread-302954] [transport.py] [_log()] kex follows: False
2025-12-24T13:31:29.321 [DEBUG] [Thread-302954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:31:29.321 [DEBUG] [Thread-302954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:31:29.322 [DEBUG] [Thread-302954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:31:29.322 [DEBUG] [Thread-302954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:31:29.322 [DEBUG] [Thread-302954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:31:29.322 [DEBUG] [Thread-302954] [transport.py] [_log()] Compression: none
2025-12-24T13:31:29.322 [DEBUG] [Thread-302954] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:31:29.359 [DEBUG] [Thread-302954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:31:29.363 [DEBUG] [Thread-302954] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:31:29.365 [DEBUG] [Thread-302954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:31:29.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:31:29.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:31:29.371 [DEBUG] [Thread-302954] [transport.py] [_log()] userauth is OK
2025-12-24T13:31:29.372 [DEBUG] [Thread-302954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:31:29.372 [DEBUG] [Thread-302954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:31:29.372 [DEBUG] [Thread-302954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:31:29.372 [DEBUG] [Thread-302954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:31:29.410 [INFO] [Thread-302954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:31:29.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:31:30.092 [DEBUG] [Thread-302954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:31:30.093 [DEBUG] [Thread-302954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:31:30.094 [DEBUG] [Thread-302954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:31:30.135 [DEBUG] [Thread-302954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:31:30.135 [DEBUG] [Thread-302954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:31:30.140 [DEBUG] [Thread-302954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:31:30.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:31:30.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:31:30.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:31:30.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:31:30.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:31:30.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:31:30.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:31:30.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:31:30.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:31:30.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.479930 -999.00  +24.00   9.21     30   +5.70 1 2 1 1 1   888    0 20.91 95.65 ----- 9.2 9.2 120.9 11.3 33.9 -24.2 33.9 -23.3 34.6 -21.4 35.0 -22.3
2025-12-24T13:31:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:31:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:31:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.479930
2025-12-24T13:31:30.178 [DEBUG] [Thread-302954] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:31:30.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:31:30.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:31:30.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:31:30.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:31:30.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:31:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:31:16', tmtdew=20.45, humidity=26.08, cloud=0.0, wind=11.91, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:31:05.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:31:30.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:31:30.290 [DEBUG] [Thread-302957] [transport.py] [_log()] starting thread (client mode): 0xf5740e50
2025-12-24T13:31:30.290 [DEBUG] [Thread-302957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:31:30.304 [DEBUG] [Thread-302957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:31:30.304 [INFO] [Thread-302957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:31:30.312 [DEBUG] [Thread-302957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:31:30.312 [DEBUG] [Thread-302957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:31:30.312 [DEBUG] [Thread-302957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:31:30.312 [DEBUG] [Thread-302957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:31:30.312 [DEBUG] [Thread-302957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:31:30.312 [DEBUG] [Thread-302957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:31:30.312 [DEBUG] [Thread-302957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:31:30.312 [DEBUG] [Thread-302957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] client lang: <none>
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] server lang: <none>
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] kex follows: False
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] Compression: none
2025-12-24T13:31:30.313 [DEBUG] [Thread-302957] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:31:30.370 [DEBUG] [Thread-302957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:31:30.370 [DEBUG] [Thread-302957] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:31:30.371 [DEBUG] [Thread-302957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:31:30.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:31:30.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:31:30.430 [DEBUG] [Thread-302957] [transport.py] [_log()] userauth is OK
2025-12-24T13:31:30.430 [DEBUG] [Thread-302957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:31:30.430 [DEBUG] [Thread-302957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:31:30.430 [DEBUG] [Thread-302957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:31:30.430 [DEBUG] [Thread-302957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:31:30.453 [INFO] [Thread-302957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:31:30.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:31:30.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:31:31.287 [DEBUG] [Thread-302957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:31:31.287 [DEBUG] [Thread-302957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:31:31.326 [DEBUG] [Thread-302957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:31:31.326 [DEBUG] [Thread-302957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:31:31.334 [DEBUG] [Thread-302957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:31:31.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:31:31.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:31: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
2025-12-24T13:31:31.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:31:31.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:31:31.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:31:31.367 [DEBUG] [Thread-302957] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:31:42.789 [DEBUG] [Thread-302959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:31:57.957 [DEBUG] [Thread-302960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:32:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:32:01.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:32:01.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:32:02.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 31, 49), 20.09, 26.94, 0.0, 7.85, 22.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:32:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:31:49
2025-12-24T13:32:03.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:32:03.221 [DEBUG] [Thread-302961] [transport.py] [_log()] starting thread (client mode): 0xf5741d50
2025-12-24T13:32:03.222 [DEBUG] [Thread-302961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:32:03.235 [DEBUG] [Thread-302961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:32:03.236 [INFO] [Thread-302961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:32:03.241 [DEBUG] [Thread-302961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] client lang: <none>
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] server lang: <none>
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] kex follows: False
2025-12-24T13:32:03.242 [DEBUG] [Thread-302961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:32:03.243 [DEBUG] [Thread-302961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:32:03.243 [DEBUG] [Thread-302961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:32:03.243 [DEBUG] [Thread-302961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:32:03.243 [DEBUG] [Thread-302961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:32:03.243 [DEBUG] [Thread-302961] [transport.py] [_log()] Compression: none
2025-12-24T13:32:03.243 [DEBUG] [Thread-302961] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:32:03.282 [DEBUG] [Thread-302961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:32:03.288 [DEBUG] [Thread-302961] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:32:03.290 [DEBUG] [Thread-302961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:32:03.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:32:03.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:32:03.297 [DEBUG] [Thread-302961] [transport.py] [_log()] userauth is OK
2025-12-24T13:32:03.297 [DEBUG] [Thread-302961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:32:03.298 [DEBUG] [Thread-302961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:32:03.298 [DEBUG] [Thread-302961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:32:03.298 [DEBUG] [Thread-302961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:32:03.337 [INFO] [Thread-302961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:32:03.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:32:03.971 [DEBUG] [Thread-302961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:32:03.971 [DEBUG] [Thread-302961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:32:03.973 [DEBUG] [Thread-302961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:32:04.012 [DEBUG] [Thread-302961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:32:04.012 [DEBUG] [Thread-302961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:32:04.016 [DEBUG] [Thread-302961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:32:04.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:32:04.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:32:04.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:32:04.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:32:04.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:32:04.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:32:04.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:32:04.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:32:04.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:32:04.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.480277 -999.00  +24.10   7.92     30   +5.60 1 2 1 1 1   888    0 20.36 87.37 ----- 7.9 7.9 104.4 13.4 34.1 -23.2 34.0 -23.2 34.5 -22.2 35.1 -22.6
2025-12-24T13:32:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:32:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:32:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.480277
2025-12-24T13:32:04.049 [DEBUG] [Thread-302961] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:32:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:32:04.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:32:04.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:32:04.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:32:04.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:32:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:31:49', tmtdew=20.09, humidity=26.94, cloud=0.0, wind=7.85, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:31:35.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:32:04.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:32:04.167 [DEBUG] [Thread-302964] [transport.py] [_log()] starting thread (client mode): 0xf572e290
2025-12-24T13:32:04.167 [DEBUG] [Thread-302964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:32:04.181 [DEBUG] [Thread-302964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:32:04.181 [INFO] [Thread-302964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:32:04.189 [DEBUG] [Thread-302964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:32:04.189 [DEBUG] [Thread-302964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:32:04.189 [DEBUG] [Thread-302964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] client lang: <none>
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] server lang: <none>
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] kex follows: False
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] Compression: none
2025-12-24T13:32:04.190 [DEBUG] [Thread-302964] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:32:04.250 [DEBUG] [Thread-302964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:32:04.250 [DEBUG] [Thread-302964] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:32:04.251 [DEBUG] [Thread-302964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:32:04.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:32:04.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:32:04.306 [DEBUG] [Thread-302964] [transport.py] [_log()] userauth is OK
2025-12-24T13:32:04.306 [DEBUG] [Thread-302964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:32:04.307 [DEBUG] [Thread-302964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:32:04.307 [DEBUG] [Thread-302964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:32:04.307 [DEBUG] [Thread-302964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:32:04.326 [INFO] [Thread-302964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:32:04.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:32:04.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:32:05.167 [DEBUG] [Thread-302964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:32:05.167 [DEBUG] [Thread-302964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:32:05.215 [DEBUG] [Thread-302964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:32:05.215 [DEBUG] [Thread-302964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:32:05.224 [DEBUG] [Thread-302964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:32:05.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:32: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')
2025-12-24T13:32:05.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:32:05.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:32:05.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:32:05.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:32:05.264 [DEBUG] [Thread-302964] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:32:06.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:32:06.517 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:32:13.039 [DEBUG] [Thread-302966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:32:24.889 [DEBUG] [Thread-302967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:32:28.162 [DEBUG] [Thread-302968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:32:35.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:32:35.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:32:35.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:32:36.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 32, 21), 20.08, 26.98, 0.0, 9.72, 23.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:32:36.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:32:21
2025-12-24T13:32:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:32:36.726 [DEBUG] [Thread-302969] [transport.py] [_log()] starting thread (client mode): 0xf57aad70
2025-12-24T13:32:36.727 [DEBUG] [Thread-302969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:32:36.733 [DEBUG] [Thread-302969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:32:36.733 [INFO] [Thread-302969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] client lang: <none>
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] server lang: <none>
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] kex follows: False
2025-12-24T13:32:36.737 [DEBUG] [Thread-302969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:32:36.738 [DEBUG] [Thread-302969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:32:36.738 [DEBUG] [Thread-302969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:32:36.738 [DEBUG] [Thread-302969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:32:36.738 [DEBUG] [Thread-302969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:32:36.738 [DEBUG] [Thread-302969] [transport.py] [_log()] Compression: none
2025-12-24T13:32:36.738 [DEBUG] [Thread-302969] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:32:36.772 [DEBUG] [Thread-302969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:32:36.775 [DEBUG] [Thread-302969] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:32:36.777 [DEBUG] [Thread-302969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:32:36.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:32:36.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:32:36.817 [DEBUG] [Thread-302969] [transport.py] [_log()] userauth is OK
2025-12-24T13:32:36.817 [DEBUG] [Thread-302969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:32:36.818 [DEBUG] [Thread-302969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:32:36.818 [DEBUG] [Thread-302969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:32:36.818 [DEBUG] [Thread-302969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:32:36.846 [INFO] [Thread-302969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:32:36.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:32:37.483 [DEBUG] [Thread-302969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:32:37.484 [DEBUG] [Thread-302969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:32:37.484 [DEBUG] [Thread-302969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:32:37.524 [DEBUG] [Thread-302969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:32:37.524 [DEBUG] [Thread-302969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:32:37.527 [DEBUG] [Thread-302969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:32:37.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:32:37.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:32:37.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:32:37.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:32:37.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:32:37.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:32:37.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:32:37.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:32:37.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:32:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.480625 -999.00  +24.00  12.46     30   +5.70 1 2 1 1 1   888    0 20.82 95.15 ----- 12.5 12.5 105.7 15.3 34.1 -22.9 34.1 -22.6 34.7 -23.4 35.2 -22.7
2025-12-24T13:32:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:32:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:32:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.480625
2025-12-24T13:32:37.563 [DEBUG] [Thread-302969] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:32:37.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:32:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:32:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:32:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:32:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:32:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:32:21', tmtdew=20.08, humidity=26.98, cloud=0.0, wind=9.72, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:32:06.000', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:32:37.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:32:37.675 [DEBUG] [Thread-302972] [transport.py] [_log()] starting thread (client mode): 0xf57a8310
2025-12-24T13:32:37.676 [DEBUG] [Thread-302972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:32:37.691 [DEBUG] [Thread-302972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:32:37.691 [INFO] [Thread-302972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:32:37.698 [DEBUG] [Thread-302972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:32:37.698 [DEBUG] [Thread-302972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] client lang: <none>
2025-12-24T13:32:37.699 [DEBUG] [Thread-302972] [transport.py] [_log()] server lang: <none>
2025-12-24T13:32:37.700 [DEBUG] [Thread-302972] [transport.py] [_log()] kex follows: False
2025-12-24T13:32:37.700 [DEBUG] [Thread-302972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:32:37.700 [DEBUG] [Thread-302972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:32:37.700 [DEBUG] [Thread-302972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:32:37.700 [DEBUG] [Thread-302972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:32:37.700 [DEBUG] [Thread-302972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:32:37.700 [DEBUG] [Thread-302972] [transport.py] [_log()] Compression: none
2025-12-24T13:32:37.701 [DEBUG] [Thread-302972] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:32:37.757 [DEBUG] [Thread-302972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:32:37.758 [DEBUG] [Thread-302972] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:32:37.758 [DEBUG] [Thread-302972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:32:37.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:32:37.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:32:37.813 [DEBUG] [Thread-302972] [transport.py] [_log()] userauth is OK
2025-12-24T13:32:37.814 [DEBUG] [Thread-302972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:32:37.814 [DEBUG] [Thread-302972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:32:37.814 [DEBUG] [Thread-302972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:32:37.814 [DEBUG] [Thread-302972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:32:37.836 [INFO] [Thread-302972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:32:37.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:32:37.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:32:38.670 [DEBUG] [Thread-302972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:32:38.670 [DEBUG] [Thread-302972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:32:38.717 [DEBUG] [Thread-302972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:32:38.717 [DEBUG] [Thread-302972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:32:38.730 [DEBUG] [Thread-302972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:32:38.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:32:38.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:32: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') -> 00000000
2025-12-24T13:32:38.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:32:38.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:32:38.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:32:38.772 [DEBUG] [Thread-302972] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:32:43.223 [DEBUG] [Thread-302974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:32:58.372 [DEBUG] [Thread-302975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:33:06.662 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:33:06.667 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:33:08.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:33:08.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:33:08.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
2025-12-24T13:33:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 32, 54), 20.41, 26.53, 0.0, 10.43, 23.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:33:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:32:54
2025-12-24T13:33:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:33:09.893 [DEBUG] [Thread-302976] [transport.py] [_log()] starting thread (client mode): 0xf572ddb0
2025-12-24T13:33:09.894 [DEBUG] [Thread-302976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:33:09.903 [DEBUG] [Thread-302976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:33:09.903 [INFO] [Thread-302976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] client lang: <none>
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] server lang: <none>
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] kex follows: False
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:33:09.907 [DEBUG] [Thread-302976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:33:09.908 [DEBUG] [Thread-302976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:33:09.908 [DEBUG] [Thread-302976] [transport.py] [_log()] Compression: none
2025-12-24T13:33:09.908 [DEBUG] [Thread-302976] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:33:09.936 [DEBUG] [Thread-302976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:33:09.939 [DEBUG] [Thread-302976] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:33:09.941 [DEBUG] [Thread-302976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:33:09.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:33:09.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:33:09.944 [DEBUG] [Thread-302976] [transport.py] [_log()] userauth is OK
2025-12-24T13:33:09.944 [DEBUG] [Thread-302976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:33:09.944 [DEBUG] [Thread-302976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:33:09.944 [DEBUG] [Thread-302976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:33:09.944 [DEBUG] [Thread-302976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:33:09.961 [INFO] [Thread-302976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:33:09.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:33:10.607 [DEBUG] [Thread-302976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:33:10.607 [DEBUG] [Thread-302976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:33:10.607 [DEBUG] [Thread-302976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:33:10.648 [DEBUG] [Thread-302976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:33:10.648 [DEBUG] [Thread-302976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:33:10.652 [DEBUG] [Thread-302976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:33:10.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:33:10.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:33:10.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:33:10.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:33:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:33:10.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:33:10.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:33:10.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:33:10.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:33:10.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.480972 -999.00  +24.00   6.09     30   +5.70 1 2 1 1 1   888    0 20.60 90.96 ----- 6.1 6.1 143.8 13.5 34.1 -23.2 34.1 -22.3 34.9 -21.8 35.3 -22.6
2025-12-24T13:33:10.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:33:10.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:33:10.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.480972
2025-12-24T13:33:10.682 [DEBUG] [Thread-302976] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:33:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:33:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:33:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:33:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:33:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:33:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:32:54', tmtdew=20.41, humidity=26.53, cloud=0.0, wind=10.43, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:32:35.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:33:10.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:33:10.783 [DEBUG] [Thread-302979] [transport.py] [_log()] starting thread (client mode): 0xf5753bb0
2025-12-24T13:33:10.783 [DEBUG] [Thread-302979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:33:10.798 [DEBUG] [Thread-302979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:33:10.798 [INFO] [Thread-302979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] client lang: <none>
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] server lang: <none>
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] kex follows: False
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] Compression: none
2025-12-24T13:33:10.806 [DEBUG] [Thread-302979] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:33:10.868 [DEBUG] [Thread-302979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:33:10.868 [DEBUG] [Thread-302979] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:33:10.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:33:10.868 [DEBUG] [Thread-302979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:33:10.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:33:10.925 [DEBUG] [Thread-302979] [transport.py] [_log()] userauth is OK
2025-12-24T13:33:10.925 [DEBUG] [Thread-302979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:33:10.925 [DEBUG] [Thread-302979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:33:10.925 [DEBUG] [Thread-302979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:33:10.925 [DEBUG] [Thread-302979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:33:10.938 [INFO] [Thread-302979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:33:10.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:33:10.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:33:11.797 [DEBUG] [Thread-302979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:33:11.797 [DEBUG] [Thread-302979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:33:11.837 [DEBUG] [Thread-302979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:33:11.837 [DEBUG] [Thread-302979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:33:11.846 [DEBUG] [Thread-302979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:33:11.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:33:11.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')
2025-12-24T13:33:11.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:33:11.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:33:11.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:33:11.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:33:11.878 [DEBUG] [Thread-302979] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:33:13.465 [DEBUG] [Thread-302981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:33:25.148 [DEBUG] [Thread-302982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:33:28.578 [DEBUG] [Thread-302983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:33:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:33:41.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:33:41.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:33:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 33, 27), 20.52, 26.41, 0.0, 8.95, 23.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:33:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:33:27
2025-12-24T13:33:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:33:43.374 [DEBUG] [Thread-302984] [transport.py] [_log()] starting thread (client mode): 0xf57bfb80
2025-12-24T13:33:43.374 [DEBUG] [Thread-302984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:33:43.382 [DEBUG] [Thread-302984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:33:43.382 [INFO] [Thread-302984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:33:43.386 [DEBUG] [Thread-302984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:33:43.386 [DEBUG] [Thread-302984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:33:43.386 [DEBUG] [Thread-302984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] client lang: <none>
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] server lang: <none>
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] kex follows: False
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:33:43.387 [DEBUG] [Thread-302984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:33:43.388 [DEBUG] [Thread-302984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:33:43.388 [DEBUG] [Thread-302984] [transport.py] [_log()] Compression: none
2025-12-24T13:33:43.388 [DEBUG] [Thread-302984] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:33:43.426 [DEBUG] [Thread-302984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:33:43.431 [DEBUG] [Thread-302984] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:33:43.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:33:43.434 [DEBUG] [Thread-302984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:33:43.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:33:43.438 [DEBUG] [Thread-302984] [transport.py] [_log()] userauth is OK
2025-12-24T13:33:43.439 [DEBUG] [Thread-302984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:33:43.439 [DEBUG] [Thread-302984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:33:43.439 [DEBUG] [Thread-302984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:33:43.439 [DEBUG] [Thread-302984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:33:43.479 [INFO] [Thread-302984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:33:43.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:33:43.622 [DEBUG] [Thread-302986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:33:44.093 [DEBUG] [Thread-302984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:33:44.093 [DEBUG] [Thread-302984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:33:44.102 [DEBUG] [Thread-302984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:33:44.135 [DEBUG] [Thread-302984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:33:44.135 [DEBUG] [Thread-302984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:33:44.139 [DEBUG] [Thread-302984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:33:44.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:33:44.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:33:44.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:33:44.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:33:44.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:33:44.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:33:44.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:33:44.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:33:44.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:33:44.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.481319 -999.00  +24.00  12.84     30   +5.60 1 2 1 1 1   888    0 20.38 82.36 ----- 12.8 12.8 129.2 18.0 34.1 -25.0 34.2 -22.8 35.0 -22.1 35.5 -23.8
2025-12-24T13:33:44.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:33:44.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:33:44.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.481319
2025-12-24T13:33:44.168 [DEBUG] [Thread-302984] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:33:44.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:33:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:33:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:33:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:33:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:33:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:33:27', tmtdew=20.52, humidity=26.41, cloud=0.0, wind=8.95, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:33:05.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:33:44.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:33:44.268 [DEBUG] [Thread-302988] [transport.py] [_log()] starting thread (client mode): 0xf5752dd0
2025-12-24T13:33:44.268 [DEBUG] [Thread-302988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:33:44.282 [DEBUG] [Thread-302988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:33:44.282 [INFO] [Thread-302988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:33:44.289 [DEBUG] [Thread-302988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] client lang: <none>
2025-12-24T13:33:44.290 [DEBUG] [Thread-302988] [transport.py] [_log()] server lang: <none>
2025-12-24T13:33:44.291 [DEBUG] [Thread-302988] [transport.py] [_log()] kex follows: False
2025-12-24T13:33:44.291 [DEBUG] [Thread-302988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:33:44.291 [DEBUG] [Thread-302988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:33:44.291 [DEBUG] [Thread-302988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:33:44.291 [DEBUG] [Thread-302988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:33:44.291 [DEBUG] [Thread-302988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:33:44.291 [DEBUG] [Thread-302988] [transport.py] [_log()] Compression: none
2025-12-24T13:33:44.291 [DEBUG] [Thread-302988] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:33:44.349 [DEBUG] [Thread-302988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:33:44.350 [DEBUG] [Thread-302988] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:33:44.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:33:44.351 [DEBUG] [Thread-302988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:33:44.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:33:44.405 [DEBUG] [Thread-302988] [transport.py] [_log()] userauth is OK
2025-12-24T13:33:44.405 [DEBUG] [Thread-302988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:33:44.405 [DEBUG] [Thread-302988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:33:44.405 [DEBUG] [Thread-302988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:33:44.405 [DEBUG] [Thread-302988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:33:44.418 [INFO] [Thread-302988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:33:44.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:33:44.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:33:45.268 [DEBUG] [Thread-302988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:33:45.268 [DEBUG] [Thread-302988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:33:45.315 [DEBUG] [Thread-302988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:33:45.315 [DEBUG] [Thread-302988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:33:45.323 [DEBUG] [Thread-302988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:33:45.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:33:45.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')
2025-12-24T13:33:45.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:33:45.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:33:45.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:33:45.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:33:45.356 [DEBUG] [Thread-302988] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:33:58.693 [DEBUG] [Thread-302990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:34:06.810 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:34:06.812 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:34:13.850 [DEBUG] [Thread-302991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:34:15.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:34:15.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:34:15.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:34:16.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 34), 20.6, 26.21, 0.0, 10.87, 23.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:34:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:34:00
2025-12-24T13:34:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:34:17.121 [DEBUG] [Thread-302992] [transport.py] [_log()] starting thread (client mode): 0xf5751780
2025-12-24T13:34:17.122 [DEBUG] [Thread-302992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:34:17.136 [DEBUG] [Thread-302992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:34:17.137 [INFO] [Thread-302992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:34:17.140 [DEBUG] [Thread-302992] [transport.py] [_log()] client lang: <none>
2025-12-24T13:34:17.141 [DEBUG] [Thread-302992] [transport.py] [_log()] server lang: <none>
2025-12-24T13:34:17.141 [DEBUG] [Thread-302992] [transport.py] [_log()] kex follows: False
2025-12-24T13:34:17.141 [DEBUG] [Thread-302992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:34:17.141 [DEBUG] [Thread-302992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:34:17.141 [DEBUG] [Thread-302992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:34:17.142 [DEBUG] [Thread-302992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:34:17.142 [DEBUG] [Thread-302992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:34:17.142 [DEBUG] [Thread-302992] [transport.py] [_log()] Compression: none
2025-12-24T13:34:17.142 [DEBUG] [Thread-302992] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:34:17.168 [DEBUG] [Thread-302992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:34:17.172 [DEBUG] [Thread-302992] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:34:17.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:34:17.175 [DEBUG] [Thread-302992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:34:17.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:34:17.178 [DEBUG] [Thread-302992] [transport.py] [_log()] userauth is OK
2025-12-24T13:34:17.178 [DEBUG] [Thread-302992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:34:17.179 [DEBUG] [Thread-302992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:34:17.179 [DEBUG] [Thread-302992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:34:17.179 [DEBUG] [Thread-302992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:34:17.217 [INFO] [Thread-302992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:34:17.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:34:17.855 [DEBUG] [Thread-302992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:34:17.855 [DEBUG] [Thread-302992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:34:17.857 [DEBUG] [Thread-302992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:34:17.896 [DEBUG] [Thread-302992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:34:17.897 [DEBUG] [Thread-302992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:34:17.900 [DEBUG] [Thread-302992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:34:17.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:34:17.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:34:17.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:34:17.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:34:17.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:34:17.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:34:17.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:34:17.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:34:17.929 [DEBUG] [Thread-302992] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:34:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:34:17.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.482013 -999.00  +24.10   8.40     30   +5.80 1 2 1 1 1   888    0 20.35 74.54 ----- 8.4 8.4 120.6 10.0 34.6 -24.1 34.3 -23.4 35.2 -21.0 35.7 -21.8
2025-12-24T13:34:17.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:34:17.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:34:17.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.482013
2025-12-24T13:34:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:34:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:34:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:34:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:34:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:34:17.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:34:00', tmtdew=20.6, humidity=26.21, cloud=0.0, wind=10.87, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:34:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:34:18.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:34:18.040 [DEBUG] [Thread-302995] [transport.py] [_log()] starting thread (client mode): 0xf57bd5d0
2025-12-24T13:34:18.040 [DEBUG] [Thread-302995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:34:18.054 [DEBUG] [Thread-302995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:34:18.054 [INFO] [Thread-302995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:34:18.061 [DEBUG] [Thread-302995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] client lang: <none>
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] server lang: <none>
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] kex follows: False
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] Compression: none
2025-12-24T13:34:18.062 [DEBUG] [Thread-302995] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:34:18.120 [DEBUG] [Thread-302995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:34:18.121 [DEBUG] [Thread-302995] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:34:18.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:34:18.122 [DEBUG] [Thread-302995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:34:18.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:34:18.181 [DEBUG] [Thread-302995] [transport.py] [_log()] userauth is OK
2025-12-24T13:34:18.181 [DEBUG] [Thread-302995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:34:18.181 [DEBUG] [Thread-302995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:34:18.181 [DEBUG] [Thread-302995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:34:18.181 [DEBUG] [Thread-302995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:34:18.205 [INFO] [Thread-302995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:34:18.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:34:18.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:34:19.046 [DEBUG] [Thread-302995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:34:19.046 [DEBUG] [Thread-302995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:34:19.094 [DEBUG] [Thread-302995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:34:19.094 [DEBUG] [Thread-302995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:34:19.103 [DEBUG] [Thread-302995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:34:19.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:34:19.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')
2025-12-24T13:34:19.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:34:19.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:34:19.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:34:19.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:34:19.138 [DEBUG] [Thread-302995] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:34:25.442 [DEBUG] [Thread-302997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:34:28.927 [DEBUG] [Thread-302998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:34:44.105 [DEBUG] [Thread-302999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:34:49.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:34:49.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:34:49.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:34:50.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 34, 34), 20.84, 25.83, 0.0, 7.8, 23.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:34:50.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:34:34
2025-12-24T13:34:50.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:34:50.750 [DEBUG] [Thread-303000] [transport.py] [_log()] starting thread (client mode): 0xf5742770
2025-12-24T13:34:50.751 [DEBUG] [Thread-303000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:34:50.763 [DEBUG] [Thread-303000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:34:50.764 [INFO] [Thread-303000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:34:50.769 [DEBUG] [Thread-303000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] client lang: <none>
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] server lang: <none>
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] kex follows: False
2025-12-24T13:34:50.770 [DEBUG] [Thread-303000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:34:50.771 [DEBUG] [Thread-303000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:34:50.771 [DEBUG] [Thread-303000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:34:50.772 [DEBUG] [Thread-303000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:34:50.772 [DEBUG] [Thread-303000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:34:50.772 [DEBUG] [Thread-303000] [transport.py] [_log()] Compression: none
2025-12-24T13:34:50.772 [DEBUG] [Thread-303000] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:34:50.811 [DEBUG] [Thread-303000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:34:50.815 [DEBUG] [Thread-303000] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:34:50.817 [DEBUG] [Thread-303000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:34:50.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:34:50.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:34:50.824 [DEBUG] [Thread-303000] [transport.py] [_log()] userauth is OK
2025-12-24T13:34:50.824 [DEBUG] [Thread-303000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:34:50.824 [DEBUG] [Thread-303000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:34:50.824 [DEBUG] [Thread-303000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:34:50.825 [DEBUG] [Thread-303000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:34:50.851 [INFO] [Thread-303000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:34:50.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:34:51.469 [DEBUG] [Thread-303000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:34:51.469 [DEBUG] [Thread-303000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:34:51.471 [DEBUG] [Thread-303000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:34:51.511 [DEBUG] [Thread-303000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:34:51.511 [DEBUG] [Thread-303000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:34:51.515 [DEBUG] [Thread-303000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:34:51.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:34:51.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:34:51.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:34:51.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:34:51.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:34:51.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:34:51.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:34:51.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:34:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:34:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.482360 -999.00  +24.30   6.55     30   +5.70 1 2 1 1 1   888    0 20.08 70.41 ----- 6.5 6.5 113.7 14.3 34.7 -23.5 34.5 -23.2 35.1 -22.5 35.9 -22.0
2025-12-24T13:34:51.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:34:51.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:34:51.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.482360
2025-12-24T13:34:51.546 [DEBUG] [Thread-303000] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:34:51.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:34:51.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:34:51.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:34:51.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:34:51.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:34:51.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:34:34', tmtdew=20.84, humidity=25.83, cloud=0.0, wind=7.8, temperature=23.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:34:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:34:51.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:34:51.659 [DEBUG] [Thread-303003] [transport.py] [_log()] starting thread (client mode): 0xf57a8310
2025-12-24T13:34:51.659 [DEBUG] [Thread-303003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:34:51.674 [DEBUG] [Thread-303003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:34:51.675 [INFO] [Thread-303003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:34:51.682 [DEBUG] [Thread-303003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:34:51.682 [DEBUG] [Thread-303003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:34:51.682 [DEBUG] [Thread-303003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] client lang: <none>
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] server lang: <none>
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] kex follows: False
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] Compression: none
2025-12-24T13:34:51.683 [DEBUG] [Thread-303003] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:34:51.742 [DEBUG] [Thread-303003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:34:51.742 [DEBUG] [Thread-303003] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:34:51.743 [DEBUG] [Thread-303003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:34:51.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:34:51.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:34:51.801 [DEBUG] [Thread-303003] [transport.py] [_log()] userauth is OK
2025-12-24T13:34:51.801 [DEBUG] [Thread-303003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:34:51.802 [DEBUG] [Thread-303003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:34:51.802 [DEBUG] [Thread-303003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:34:51.802 [DEBUG] [Thread-303003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:34:51.821 [INFO] [Thread-303003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:34:51.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:34:51.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:34:52.717 [DEBUG] [Thread-303003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:34:52.717 [DEBUG] [Thread-303003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:34:52.764 [DEBUG] [Thread-303003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:34:52.764 [DEBUG] [Thread-303003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:34:52.772 [DEBUG] [Thread-303003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:34:52.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:34: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')
2025-12-24T13:34: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
2025-12-24T13:34:52.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:34:52.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:34:52.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:34:52.805 [DEBUG] [Thread-303003] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:34:59.199 [DEBUG] [Thread-303005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:35:06.962 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:35:06.963 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:35:14.371 [DEBUG] [Thread-303006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:35:22.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:35:22.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:35:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:35:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 35, 7), 20.79, 25.9, 0.0, 6.12, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:35:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:35:07
2025-12-24T13:35:24.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:35:24.496 [DEBUG] [Thread-303007] [transport.py] [_log()] starting thread (client mode): 0xf57a8430
2025-12-24T13:35:24.496 [DEBUG] [Thread-303007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:35:24.502 [DEBUG] [Thread-303007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:35:24.502 [INFO] [Thread-303007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:35:24.506 [DEBUG] [Thread-303007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] client lang: <none>
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] server lang: <none>
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] kex follows: False
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:35:24.507 [DEBUG] [Thread-303007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:35:24.508 [DEBUG] [Thread-303007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:35:24.508 [DEBUG] [Thread-303007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:35:24.508 [DEBUG] [Thread-303007] [transport.py] [_log()] Compression: none
2025-12-24T13:35:24.508 [DEBUG] [Thread-303007] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:35:24.543 [DEBUG] [Thread-303007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:35:24.546 [DEBUG] [Thread-303007] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:35:24.548 [DEBUG] [Thread-303007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:35:24.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:35:24.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:35:24.553 [DEBUG] [Thread-303007] [transport.py] [_log()] userauth is OK
2025-12-24T13:35:24.553 [DEBUG] [Thread-303007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:35:24.554 [DEBUG] [Thread-303007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:35:24.554 [DEBUG] [Thread-303007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:35:24.554 [DEBUG] [Thread-303007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:35:24.580 [INFO] [Thread-303007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:35:24.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:35:25.234 [DEBUG] [Thread-303007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:35:25.234 [DEBUG] [Thread-303007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:35:25.235 [DEBUG] [Thread-303007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:35:25.276 [DEBUG] [Thread-303007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:35:25.276 [DEBUG] [Thread-303007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:35:25.278 [DEBUG] [Thread-303007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:35:25.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:35:25.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:35:25.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:35:25.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:35:25.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:35:25.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:35:25.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:35:25.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:35:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:35:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.482708 -999.00  +24.40   9.29     30   +5.80 1 2 1 1 1   888    0 20.10 71.95 ----- 9.3 9.3 160.2 11.6 34.8 -23.1 34.6 -22.5 35.3 -21.4 36.0 -22.9
2025-12-24T13:35:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:35:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:35:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.482708
2025-12-24T13:35:25.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:35:25.316 [DEBUG] [Thread-303007] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:35:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:35:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:35:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:35:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:35:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:35:07', tmtdew=20.79, humidity=25.9, cloud=0.0, wind=6.12, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:35:05.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:35:25.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:35:25.401 [DEBUG] [Thread-303010] [transport.py] [_log()] starting thread (client mode): 0xf574e260
2025-12-24T13:35:25.401 [DEBUG] [Thread-303010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:35:25.415 [DEBUG] [Thread-303010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:35:25.415 [INFO] [Thread-303010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] client lang: <none>
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] server lang: <none>
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] kex follows: False
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:35:25.423 [DEBUG] [Thread-303010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:35:25.424 [DEBUG] [Thread-303010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:35:25.424 [DEBUG] [Thread-303010] [transport.py] [_log()] Compression: none
2025-12-24T13:35:25.424 [DEBUG] [Thread-303010] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:35:25.487 [DEBUG] [Thread-303010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:35:25.488 [DEBUG] [Thread-303010] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:35:25.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:35:25.489 [DEBUG] [Thread-303010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:35:25.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:35:25.546 [DEBUG] [Thread-303010] [transport.py] [_log()] userauth is OK
2025-12-24T13:35:25.546 [DEBUG] [Thread-303010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:35:25.547 [DEBUG] [Thread-303010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:35:25.547 [DEBUG] [Thread-303010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:35:25.547 [DEBUG] [Thread-303010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:35:25.569 [INFO] [Thread-303010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:35:25.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:35:25.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:35:25.783 [DEBUG] [Thread-303012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:35:26.411 [DEBUG] [Thread-303010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:35:26.411 [DEBUG] [Thread-303010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:35:26.459 [DEBUG] [Thread-303010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:35:26.459 [DEBUG] [Thread-303010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:35:26.467 [DEBUG] [Thread-303010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:35:26.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:35:26.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')
2025-12-24T13:35:26.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
2025-12-24T13:35:26.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:35:26.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:35:26.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:35:26.500 [DEBUG] [Thread-303010] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:35:29.454 [DEBUG] [Thread-303013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:35:44.547 [DEBUG] [Thread-303014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:35:56.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:35:56.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:35:56.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:35:57.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 35, 40), 20.63, 26.15, 0.0, 8.59, 23.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:35:57.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:35:40
2025-12-24T13:35:57.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:35:57.826 [DEBUG] [Thread-303015] [transport.py] [_log()] starting thread (client mode): 0xf572e140
2025-12-24T13:35:57.826 [DEBUG] [Thread-303015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:35:57.836 [DEBUG] [Thread-303015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:35:57.836 [INFO] [Thread-303015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] client lang: <none>
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] server lang: <none>
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] kex follows: False
2025-12-24T13:35:57.841 [DEBUG] [Thread-303015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:35:57.842 [DEBUG] [Thread-303015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:35:57.842 [DEBUG] [Thread-303015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:35:57.842 [DEBUG] [Thread-303015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:35:57.842 [DEBUG] [Thread-303015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:35:57.842 [DEBUG] [Thread-303015] [transport.py] [_log()] Compression: none
2025-12-24T13:35:57.842 [DEBUG] [Thread-303015] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:35:57.882 [DEBUG] [Thread-303015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:35:57.886 [DEBUG] [Thread-303015] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:35:57.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:35:57.889 [DEBUG] [Thread-303015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:35:57.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:35:57.891 [DEBUG] [Thread-303015] [transport.py] [_log()] userauth is OK
2025-12-24T13:35:57.891 [DEBUG] [Thread-303015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:35:57.891 [DEBUG] [Thread-303015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:35:57.891 [DEBUG] [Thread-303015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:35:57.891 [DEBUG] [Thread-303015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:35:57.916 [INFO] [Thread-303015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:35:57.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:35:58.536 [DEBUG] [Thread-303015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:35:58.536 [DEBUG] [Thread-303015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:35:58.537 [DEBUG] [Thread-303015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:35:58.577 [DEBUG] [Thread-303015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:35:58.577 [DEBUG] [Thread-303015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:35:58.579 [DEBUG] [Thread-303015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:35:58.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:35:58.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:35:58.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:35:58.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:35:58.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:35:58.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:35:58.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:35:58.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:35:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:35:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.483055 -999.00  +24.70   9.89     29   +5.80 1 2 1 1 1   888    0 19.70 65.80 ----- 9.9 9.9 123.7 12.1 35.0 -23.1 34.5 -23.1 35.6 -20.7 36.0 -23.5
2025-12-24T13:35:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:35:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:35:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.483055
2025-12-24T13:35:58.609 [DEBUG] [Thread-303015] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:35:58.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:35:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:35:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:35:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:35:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:35:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:35:40', tmtdew=20.63, humidity=26.15, cloud=0.0, wind=8.59, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:35:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:35:58.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:35:58.714 [DEBUG] [Thread-303018] [transport.py] [_log()] starting thread (client mode): 0xf572ca00
2025-12-24T13:35:58.715 [DEBUG] [Thread-303018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:35:58.733 [DEBUG] [Thread-303018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:35:58.733 [INFO] [Thread-303018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] client lang: <none>
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] server lang: <none>
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] kex follows: False
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] Compression: none
2025-12-24T13:35:58.743 [DEBUG] [Thread-303018] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:35:58.801 [DEBUG] [Thread-303018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:35:58.802 [DEBUG] [Thread-303018] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:35:58.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:35:58.802 [DEBUG] [Thread-303018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:35:58.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:35:58.864 [DEBUG] [Thread-303018] [transport.py] [_log()] userauth is OK
2025-12-24T13:35:58.864 [DEBUG] [Thread-303018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:35:58.864 [DEBUG] [Thread-303018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:35:58.864 [DEBUG] [Thread-303018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:35:58.864 [DEBUG] [Thread-303018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:35:58.882 [INFO] [Thread-303018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:35:58.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:35:58.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:35:59.613 [DEBUG] [Thread-303020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:35:59.780 [DEBUG] [Thread-303018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:35:59.780 [DEBUG] [Thread-303018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:35:59.827 [DEBUG] [Thread-303018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:35:59.827 [DEBUG] [Thread-303018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:35:59.835 [DEBUG] [Thread-303018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:35:59.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:35:59.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:35:59.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:35:59.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:35:59.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:35:59.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:35:59.868 [DEBUG] [Thread-303018] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:36:07.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:36:07.126 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:36:14.830 [DEBUG] [Thread-303021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:36:26.134 [DEBUG] [Thread-303022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:36:29.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:36:29.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:36:29.935 [DEBUG] [Thread-303023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:36:29.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
2025-12-24T13:36:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 36, 13), 20.65, 26.15, 0.0, 11.29, 23.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:36:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:36:13
2025-12-24T13:36:31.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:36:31.612 [DEBUG] [Thread-303024] [transport.py] [_log()] starting thread (client mode): 0xf57bf160
2025-12-24T13:36:31.613 [DEBUG] [Thread-303024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:36:31.624 [DEBUG] [Thread-303024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:36:31.625 [INFO] [Thread-303024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:36:31.629 [DEBUG] [Thread-303024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:36:31.629 [DEBUG] [Thread-303024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:36:31.629 [DEBUG] [Thread-303024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:36:31.629 [DEBUG] [Thread-303024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] client lang: <none>
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] server lang: <none>
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] kex follows: False
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:36:31.630 [DEBUG] [Thread-303024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:36:31.631 [DEBUG] [Thread-303024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:36:31.631 [DEBUG] [Thread-303024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:36:31.631 [DEBUG] [Thread-303024] [transport.py] [_log()] Compression: none
2025-12-24T13:36:31.631 [DEBUG] [Thread-303024] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:36:31.660 [DEBUG] [Thread-303024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:36:31.664 [DEBUG] [Thread-303024] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:36:31.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:36:31.667 [DEBUG] [Thread-303024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:36:31.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:36:31.672 [DEBUG] [Thread-303024] [transport.py] [_log()] userauth is OK
2025-12-24T13:36:31.672 [DEBUG] [Thread-303024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:36:31.672 [DEBUG] [Thread-303024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:36:31.672 [DEBUG] [Thread-303024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:36:31.672 [DEBUG] [Thread-303024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:36:31.698 [INFO] [Thread-303024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:36:31.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:36:32.317 [DEBUG] [Thread-303024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:36:32.317 [DEBUG] [Thread-303024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:36:32.319 [DEBUG] [Thread-303024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:36:32.359 [DEBUG] [Thread-303024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:36:32.359 [DEBUG] [Thread-303024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:36:32.364 [DEBUG] [Thread-303024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:36:32.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:36:32.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:36:32.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:36:32.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:36:32.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:36:32.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:36:32.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:36:32.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:36:32.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:36:32.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.483402 -999.00  +24.70   4.73     29   +5.70 1 2 1 1 1   888    0 19.77 66.34 ----- 4.7 4.7 112.0 10.5 35.1 -23.1 34.8 -22.2 35.6 -21.3 36.2 -23.5
2025-12-24T13:36:32.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:36:32.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:36:32.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.483402
2025-12-24T13:36:32.399 [DEBUG] [Thread-303024] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:36:32.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:36:32.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:36:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:36:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:36:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:36:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:36:13', tmtdew=20.65, humidity=26.15, cloud=0.0, wind=11.29, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:36:05.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:36:32.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:36:32.508 [DEBUG] [Thread-303027] [transport.py] [_log()] starting thread (client mode): 0xf81e6ce0
2025-12-24T13:36:32.508 [DEBUG] [Thread-303027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:36:32.523 [DEBUG] [Thread-303027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:36:32.524 [INFO] [Thread-303027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] client lang: <none>
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] server lang: <none>
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] kex follows: False
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] Compression: none
2025-12-24T13:36:32.531 [DEBUG] [Thread-303027] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:36:32.589 [DEBUG] [Thread-303027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:36:32.590 [DEBUG] [Thread-303027] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:36:32.591 [DEBUG] [Thread-303027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:36:32.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:36:32.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:36:32.644 [DEBUG] [Thread-303027] [transport.py] [_log()] userauth is OK
2025-12-24T13:36:32.645 [DEBUG] [Thread-303027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:36:32.645 [DEBUG] [Thread-303027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:36:32.645 [DEBUG] [Thread-303027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:36:32.645 [DEBUG] [Thread-303027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:36:32.664 [INFO] [Thread-303027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:36:32.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:36:32.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:36:33.512 [DEBUG] [Thread-303027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:36:33.512 [DEBUG] [Thread-303027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:36:33.560 [DEBUG] [Thread-303027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:36:33.560 [DEBUG] [Thread-303027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:36:33.569 [DEBUG] [Thread-303027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:36:33.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:36:33.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:36:33.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:36:33.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:36:33.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:36:33.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:36:33.605 [DEBUG] [Thread-303027] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:36:45.059 [DEBUG] [Thread-303029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:37:00.258 [DEBUG] [Thread-303030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:37:03.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:37:03.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:37:03.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:37:04.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 36, 46), 20.97, 25.28, 0.0, 8.89, 23.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:37:04.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:36:46
2025-12-24T13:37:05.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:37:05.271 [DEBUG] [Thread-303031] [transport.py] [_log()] starting thread (client mode): 0xf81e6530
2025-12-24T13:37:05.272 [DEBUG] [Thread-303031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:37:05.286 [DEBUG] [Thread-303031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:37:05.286 [INFO] [Thread-303031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] client lang: <none>
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] server lang: <none>
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] kex follows: False
2025-12-24T13:37:05.290 [DEBUG] [Thread-303031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:37:05.291 [DEBUG] [Thread-303031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:37:05.291 [DEBUG] [Thread-303031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:37:05.291 [DEBUG] [Thread-303031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:37:05.291 [DEBUG] [Thread-303031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:37:05.291 [DEBUG] [Thread-303031] [transport.py] [_log()] Compression: none
2025-12-24T13:37:05.291 [DEBUG] [Thread-303031] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:37:05.324 [DEBUG] [Thread-303031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:37:05.328 [DEBUG] [Thread-303031] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:37:05.330 [DEBUG] [Thread-303031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:37:05.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:37:05.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:37:05.335 [DEBUG] [Thread-303031] [transport.py] [_log()] userauth is OK
2025-12-24T13:37:05.335 [DEBUG] [Thread-303031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:37:05.335 [DEBUG] [Thread-303031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:37:05.335 [DEBUG] [Thread-303031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:37:05.336 [DEBUG] [Thread-303031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:37:05.361 [INFO] [Thread-303031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:37:05.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:37:06.016 [DEBUG] [Thread-303031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:37:06.017 [DEBUG] [Thread-303031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:37:06.018 [DEBUG] [Thread-303031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:37:06.058 [DEBUG] [Thread-303031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:37:06.059 [DEBUG] [Thread-303031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:37:06.062 [DEBUG] [Thread-303031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:37:06.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:37:06.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:37:06.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:37:06.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:37:06.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:37:06.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:37:06.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:37:06.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:37:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:37:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.483749 -999.00  +24.70   7.19     30   +5.90 1 2 1 1 1   888    0 19.81 70.13 ----- 7.2 7.2 94.0 8.4 35.0 -22.9 34.8 -22.3 35.8 -20.6 36.2 -23.5
2025-12-24T13:37:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:37:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:37:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.483749
2025-12-24T13:37:06.094 [DEBUG] [Thread-303031] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:37:06.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:37:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:37:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:37:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:37:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:37:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:36:46', tmtdew=20.97, humidity=25.28, cloud=0.0, wind=8.89, temperature=23.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:36:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:37:06.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:37:06.206 [DEBUG] [Thread-303034] [transport.py] [_log()] starting thread (client mode): 0xf57bdff0
2025-12-24T13:37:06.206 [DEBUG] [Thread-303034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:37:06.221 [DEBUG] [Thread-303034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:37:06.221 [INFO] [Thread-303034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:37:06.229 [DEBUG] [Thread-303034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:37:06.229 [DEBUG] [Thread-303034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:37:06.229 [DEBUG] [Thread-303034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] client lang: <none>
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] server lang: <none>
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] kex follows: False
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] Compression: none
2025-12-24T13:37:06.230 [DEBUG] [Thread-303034] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:37:06.293 [DEBUG] [Thread-303034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:37:06.293 [DEBUG] [Thread-303034] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:37:06.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:37:06.294 [DEBUG] [Thread-303034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:37:06.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:37:06.351 [DEBUG] [Thread-303034] [transport.py] [_log()] userauth is OK
2025-12-24T13:37:06.351 [DEBUG] [Thread-303034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:37:06.352 [DEBUG] [Thread-303034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:37:06.352 [DEBUG] [Thread-303034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:37:06.352 [DEBUG] [Thread-303034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:37:06.370 [INFO] [Thread-303034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:37:06.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:37:06.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:37:07.268 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:37:07.270 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:37:07.289 [DEBUG] [Thread-303034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:37:07.290 [DEBUG] [Thread-303034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:37:07.337 [DEBUG] [Thread-303034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:37:07.337 [DEBUG] [Thread-303034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:37:07.346 [DEBUG] [Thread-303034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:37:07.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:37:07.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:37:07.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:37:07.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:37:07.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:37:07.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:37:07.384 [DEBUG] [Thread-303034] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:37:15.363 [DEBUG] [Thread-303036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:37:26.376 [DEBUG] [Thread-303037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:37:30.492 [DEBUG] [Thread-303038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:37:37.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:37:37.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:37:37.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:37:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 37, 19), 20.83, 25.47, 0.0, 9.03, 23.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:37:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:37:19
2025-12-24T13:37:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:37:39.019 [DEBUG] [Thread-303039] [transport.py] [_log()] starting thread (client mode): 0xf57bd420
2025-12-24T13:37:39.020 [DEBUG] [Thread-303039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:37:39.033 [DEBUG] [Thread-303039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:37:39.033 [INFO] [Thread-303039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:37:39.040 [DEBUG] [Thread-303039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:37:39.040 [DEBUG] [Thread-303039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:37:39.041 [DEBUG] [Thread-303039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:37:39.041 [DEBUG] [Thread-303039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:37:39.041 [DEBUG] [Thread-303039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:37:39.041 [DEBUG] [Thread-303039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:37:39.041 [DEBUG] [Thread-303039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:37:39.041 [DEBUG] [Thread-303039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:37:39.041 [DEBUG] [Thread-303039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:37:39.042 [DEBUG] [Thread-303039] [transport.py] [_log()] client lang: <none>
2025-12-24T13:37:39.042 [DEBUG] [Thread-303039] [transport.py] [_log()] server lang: <none>
2025-12-24T13:37:39.042 [DEBUG] [Thread-303039] [transport.py] [_log()] kex follows: False
2025-12-24T13:37:39.042 [DEBUG] [Thread-303039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:37:39.042 [DEBUG] [Thread-303039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:37:39.043 [DEBUG] [Thread-303039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:37:39.043 [DEBUG] [Thread-303039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:37:39.043 [DEBUG] [Thread-303039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:37:39.043 [DEBUG] [Thread-303039] [transport.py] [_log()] Compression: none
2025-12-24T13:37:39.043 [DEBUG] [Thread-303039] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:37:39.083 [DEBUG] [Thread-303039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:37:39.089 [DEBUG] [Thread-303039] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:37:39.091 [DEBUG] [Thread-303039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:37:39.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:37:39.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:37:39.097 [DEBUG] [Thread-303039] [transport.py] [_log()] userauth is OK
2025-12-24T13:37:39.098 [DEBUG] [Thread-303039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:37:39.098 [DEBUG] [Thread-303039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:37:39.098 [DEBUG] [Thread-303039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:37:39.098 [DEBUG] [Thread-303039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:37:39.119 [INFO] [Thread-303039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:37:39.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:37:39.699 [DEBUG] [Thread-303039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:37:39.699 [DEBUG] [Thread-303039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:37:39.701 [DEBUG] [Thread-303039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:37:39.741 [DEBUG] [Thread-303039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:37:39.741 [DEBUG] [Thread-303039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:37:39.745 [DEBUG] [Thread-303039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:37:39.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:37:39.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:37:39.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:37:39.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:37:39.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:37:39.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:37:39.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:37:39.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:37:39.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:37:39.783 [DEBUG] [Thread-303039] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:37:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.484097 -999.00  +24.80   5.08     29   +5.80 1 2 1 1 1   888    0 19.91 66.04 ----- 5.1 5.1 42.0 10.0 35.1 -22.5 34.9 -22.6 35.8 -19.7 36.4 -23.0
2025-12-24T13:37:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:37:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:37:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.484097
2025-12-24T13:37:39.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:37:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:37:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:37:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:37:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:37:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:37:19', tmtdew=20.83, humidity=25.47, cloud=0.0, wind=9.03, temperature=23.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:37:05.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:37:39.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:37:39.919 [DEBUG] [Thread-303042] [transport.py] [_log()] starting thread (client mode): 0xf81e44f0
2025-12-24T13:37:39.919 [DEBUG] [Thread-303042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:37:39.933 [DEBUG] [Thread-303042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:37:39.933 [INFO] [Thread-303042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:37:39.941 [DEBUG] [Thread-303042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:37:39.941 [DEBUG] [Thread-303042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] client lang: <none>
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] server lang: <none>
2025-12-24T13:37:39.942 [DEBUG] [Thread-303042] [transport.py] [_log()] kex follows: False
2025-12-24T13:37:39.943 [DEBUG] [Thread-303042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:37:39.943 [DEBUG] [Thread-303042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:37:39.943 [DEBUG] [Thread-303042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:37:39.943 [DEBUG] [Thread-303042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:37:39.943 [DEBUG] [Thread-303042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:37:39.943 [DEBUG] [Thread-303042] [transport.py] [_log()] Compression: none
2025-12-24T13:37:39.944 [DEBUG] [Thread-303042] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:37:39.999 [DEBUG] [Thread-303042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:37:39.999 [DEBUG] [Thread-303042] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:37:40.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:37:40.001 [DEBUG] [Thread-303042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:37:40.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:37:40.063 [DEBUG] [Thread-303042] [transport.py] [_log()] userauth is OK
2025-12-24T13:37:40.064 [DEBUG] [Thread-303042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:37:40.064 [DEBUG] [Thread-303042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:37:40.064 [DEBUG] [Thread-303042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:37:40.064 [DEBUG] [Thread-303042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:37:40.083 [INFO] [Thread-303042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:37:40.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:37:40.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:37:40.935 [DEBUG] [Thread-303042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:37:40.935 [DEBUG] [Thread-303042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:37:40.975 [DEBUG] [Thread-303042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:37:40.975 [DEBUG] [Thread-303042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:37:40.986 [DEBUG] [Thread-303042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:37:40.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:37:40.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:37:41.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:37:41.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:37:41.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:37:41.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:37:41.030 [DEBUG] [Thread-303042] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:37:45.570 [DEBUG] [Thread-303044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:38:00.698 [DEBUG] [Thread-303045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:38:07.412 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:38:07.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:38:11.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:38:11.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:38:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:38:11.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 37, 52), 20.58, 26.26, 0.0, 5.56, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:38:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:37:52
2025-12-24T13:38:11.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:38:12.147 [DEBUG] [Thread-303046] [transport.py] [_log()] starting thread (client mode): 0xf81e4940
2025-12-24T13:38:12.148 [DEBUG] [Thread-303046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:38:12.148 [DEBUG] [Thread-303046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:38:12.149 [INFO] [Thread-303046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] client lang: <none>
2025-12-24T13:38:12.152 [DEBUG] [Thread-303046] [transport.py] [_log()] server lang: <none>
2025-12-24T13:38:12.153 [DEBUG] [Thread-303046] [transport.py] [_log()] kex follows: False
2025-12-24T13:38:12.153 [DEBUG] [Thread-303046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:38:12.153 [DEBUG] [Thread-303046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:38:12.153 [DEBUG] [Thread-303046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:38:12.154 [DEBUG] [Thread-303046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:38:12.154 [DEBUG] [Thread-303046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:38:12.154 [DEBUG] [Thread-303046] [transport.py] [_log()] Compression: none
2025-12-24T13:38:12.154 [DEBUG] [Thread-303046] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:38:12.186 [DEBUG] [Thread-303046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:38:12.188 [DEBUG] [Thread-303046] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:38:12.189 [DEBUG] [Thread-303046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:38:12.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:38:12.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:38:12.192 [DEBUG] [Thread-303046] [transport.py] [_log()] userauth is OK
2025-12-24T13:38:12.192 [DEBUG] [Thread-303046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:38:12.192 [DEBUG] [Thread-303046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:38:12.192 [DEBUG] [Thread-303046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:38:12.192 [DEBUG] [Thread-303046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:38:12.213 [INFO] [Thread-303046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:38:12.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:38:12.843 [DEBUG] [Thread-303046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:38:12.843 [DEBUG] [Thread-303046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:38:12.843 [DEBUG] [Thread-303046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:38:12.884 [DEBUG] [Thread-303046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:38:12.884 [DEBUG] [Thread-303046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:38:12.886 [DEBUG] [Thread-303046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:38:12.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:38:12.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:38:12.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:38:12.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:38:12.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:38:12.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:38:12.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:38:12.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:38:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:38:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.484444 -999.00  +24.70   6.18     30   +6.10 1 1 1 1 1   888    0 20.18 60.26 ----- 6.2 6.2 92.7 10.9 35.5 -24.6 35.0 -26.7 35.4 -27.1 36.7 -21.2
2025-12-24T13:38:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:38:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:38:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.484444
2025-12-24T13:38:12.914 [DEBUG] [Thread-303046] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:38:12.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:38:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:38:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:38:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:38:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:38:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:37:52', tmtdew=20.58, humidity=26.26, cloud=0.0, wind=5.56, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:37:35.962', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:38:13.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:38:13.041 [DEBUG] [Thread-303049] [transport.py] [_log()] starting thread (client mode): 0xf81e4490
2025-12-24T13:38:13.042 [DEBUG] [Thread-303049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:38:13.059 [DEBUG] [Thread-303049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:38:13.059 [INFO] [Thread-303049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] client lang: <none>
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] server lang: <none>
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] kex follows: False
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:38:13.066 [DEBUG] [Thread-303049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:38:13.067 [DEBUG] [Thread-303049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:38:13.067 [DEBUG] [Thread-303049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:38:13.067 [DEBUG] [Thread-303049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:38:13.067 [DEBUG] [Thread-303049] [transport.py] [_log()] Compression: none
2025-12-24T13:38:13.067 [DEBUG] [Thread-303049] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:38:13.124 [DEBUG] [Thread-303049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:38:13.124 [DEBUG] [Thread-303049] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:38:13.125 [DEBUG] [Thread-303049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:38:13.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:38:13.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:38:13.180 [DEBUG] [Thread-303049] [transport.py] [_log()] userauth is OK
2025-12-24T13:38:13.180 [DEBUG] [Thread-303049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:38:13.180 [DEBUG] [Thread-303049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:38:13.180 [DEBUG] [Thread-303049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:38:13.180 [DEBUG] [Thread-303049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:38:13.204 [INFO] [Thread-303049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:38:13.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:38:13.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:38:14.100 [DEBUG] [Thread-303049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:38:14.101 [DEBUG] [Thread-303049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:38:14.147 [DEBUG] [Thread-303049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:38:14.147 [DEBUG] [Thread-303049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:38:14.155 [DEBUG] [Thread-303049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:38:14.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:38:14.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:38:14.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:38:14.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:38:14.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:38:14.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:38:14.188 [DEBUG] [Thread-303049] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:38:15.784 [DEBUG] [Thread-303051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:38:26.635 [DEBUG] [Thread-303052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:38:30.953 [DEBUG] [Thread-303053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:38:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:38:44.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:38:44.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
2025-12-24T13:38:45.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 38, 25), 20.65, 26.2, 0.0, 9.56, 23.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:38:45.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:38:25
2025-12-24T13:38:45.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:38:45.698 [DEBUG] [Thread-303054] [transport.py] [_log()] starting thread (client mode): 0xf57719c0
2025-12-24T13:38:45.699 [DEBUG] [Thread-303054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:38:45.710 [DEBUG] [Thread-303054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:38:45.710 [INFO] [Thread-303054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:38:45.714 [DEBUG] [Thread-303054] [transport.py] [_log()] client lang: <none>
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] server lang: <none>
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] kex follows: False
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] Compression: none
2025-12-24T13:38:45.715 [DEBUG] [Thread-303054] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:38:45.741 [DEBUG] [Thread-303054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:38:45.745 [DEBUG] [Thread-303054] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:38:45.746 [DEBUG] [Thread-303054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:38:45.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:38:45.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:38:45.750 [DEBUG] [Thread-303054] [transport.py] [_log()] userauth is OK
2025-12-24T13:38:45.750 [DEBUG] [Thread-303054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:38:45.751 [DEBUG] [Thread-303054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:38:45.751 [DEBUG] [Thread-303054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:38:45.751 [DEBUG] [Thread-303054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:38:45.771 [INFO] [Thread-303054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:38:45.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:38:46.024 [DEBUG] [Thread-303056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:38:46.414 [DEBUG] [Thread-303054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:38:46.414 [DEBUG] [Thread-303054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:38:46.415 [DEBUG] [Thread-303054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:38:46.456 [DEBUG] [Thread-303054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:38:46.456 [DEBUG] [Thread-303054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:38:46.458 [DEBUG] [Thread-303054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:38:46.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:38:46.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:38:46.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:38:46.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:38:46.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:38:46.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:38:46.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:38:46.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:38:46.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:38:46.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.484791 -999.00  +25.10   5.66     29   +5.90 1 2 1 1 1   888    0 19.89 55.50 ----- 5.7 5.7 118.5 14.5 35.2 -22.6 34.9 -22.9 35.7 -20.6 36.2 -22.1
2025-12-24T13:38:46.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:38:46.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:38:46.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.484791
2025-12-24T13:38:46.494 [DEBUG] [Thread-303054] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:38:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:38:46.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:38:46.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:38:46.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:38:46.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:38:46.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:38:25', tmtdew=20.65, humidity=26.2, cloud=0.0, wind=9.56, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:38:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:38:46.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:38:46.592 [DEBUG] [Thread-303058] [transport.py] [_log()] starting thread (client mode): 0xf81e79a0
2025-12-24T13:38:46.592 [DEBUG] [Thread-303058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:38:46.607 [DEBUG] [Thread-303058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:38:46.607 [INFO] [Thread-303058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] client lang: <none>
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] server lang: <none>
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] kex follows: False
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] Compression: none
2025-12-24T13:38:46.615 [DEBUG] [Thread-303058] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:38:46.677 [DEBUG] [Thread-303058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:38:46.678 [DEBUG] [Thread-303058] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:38:46.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:38:46.678 [DEBUG] [Thread-303058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:38:46.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:38:46.734 [DEBUG] [Thread-303058] [transport.py] [_log()] userauth is OK
2025-12-24T13:38:46.734 [DEBUG] [Thread-303058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:38:46.734 [DEBUG] [Thread-303058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:38:46.735 [DEBUG] [Thread-303058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:38:46.735 [DEBUG] [Thread-303058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:38:46.749 [INFO] [Thread-303058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:38:46.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:38:46.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:38:47.671 [DEBUG] [Thread-303058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:38:47.671 [DEBUG] [Thread-303058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:38:47.718 [DEBUG] [Thread-303058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:38:47.718 [DEBUG] [Thread-303058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:38:47.726 [DEBUG] [Thread-303058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:38:47.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:38:47.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:38:47.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:38:47.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:38:47.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:38:47.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:38:47.759 [DEBUG] [Thread-303058] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:39:01.110 [DEBUG] [Thread-303060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:39:07.566 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:39:07.568 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:39:16.261 [DEBUG] [Thread-303061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:39:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:39:17.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:39:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:39:19.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 38, 58), 21.12, 25.52, 0.0, 17.27, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:39:19.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:38:58
2025-12-24T13:39:19.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:39:19.492 [DEBUG] [Thread-303062] [transport.py] [_log()] starting thread (client mode): 0xf574e0b0
2025-12-24T13:39:19.493 [DEBUG] [Thread-303062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:39:19.506 [DEBUG] [Thread-303062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:39:19.506 [INFO] [Thread-303062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:39:19.509 [DEBUG] [Thread-303062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] client lang: <none>
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] server lang: <none>
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] kex follows: False
2025-12-24T13:39:19.510 [DEBUG] [Thread-303062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:39:19.511 [DEBUG] [Thread-303062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:39:19.511 [DEBUG] [Thread-303062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:39:19.511 [DEBUG] [Thread-303062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:39:19.511 [DEBUG] [Thread-303062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:39:19.511 [DEBUG] [Thread-303062] [transport.py] [_log()] Compression: none
2025-12-24T13:39:19.511 [DEBUG] [Thread-303062] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:39:19.547 [DEBUG] [Thread-303062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:39:19.551 [DEBUG] [Thread-303062] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:39:19.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:39:19.555 [DEBUG] [Thread-303062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:39:19.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:39:19.560 [DEBUG] [Thread-303062] [transport.py] [_log()] userauth is OK
2025-12-24T13:39:19.560 [DEBUG] [Thread-303062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:39:19.560 [DEBUG] [Thread-303062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:39:19.560 [DEBUG] [Thread-303062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:39:19.560 [DEBUG] [Thread-303062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:39:19.600 [INFO] [Thread-303062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:39:19.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:39:20.255 [DEBUG] [Thread-303062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:39:20.255 [DEBUG] [Thread-303062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:39:20.256 [DEBUG] [Thread-303062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:39:20.295 [DEBUG] [Thread-303062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:39:20.295 [DEBUG] [Thread-303062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:39:20.298 [DEBUG] [Thread-303062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:39:20.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:39:20.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:39:20.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:39:20.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:39:20.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:39:20.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:39:20.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:39:20.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:39:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:39:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.485138 -999.00  +25.00   5.13     29   +5.70 1 2 1 1 1   888    0 19.77 55.67 ----- 5.1 5.1 134.4 11.9 35.4 -22.9 35.0 -21.8 35.9 -20.3 36.5 -21.2
2025-12-24T13:39:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:39:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:39:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.485138
2025-12-24T13:39:20.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:39:20.337 [DEBUG] [Thread-303062] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:39:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:39:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:39:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:39:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:39:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:38:58', tmtdew=21.12, humidity=25.52, cloud=0.0, wind=17.27, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:38:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:39:20.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:39:20.429 [DEBUG] [Thread-303065] [transport.py] [_log()] starting thread (client mode): 0xf5772f20
2025-12-24T13:39:20.429 [DEBUG] [Thread-303065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:39:20.444 [DEBUG] [Thread-303065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:39:20.444 [INFO] [Thread-303065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] client lang: <none>
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] server lang: <none>
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] kex follows: False
2025-12-24T13:39:20.451 [DEBUG] [Thread-303065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:39:20.452 [DEBUG] [Thread-303065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:39:20.452 [DEBUG] [Thread-303065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:39:20.452 [DEBUG] [Thread-303065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:39:20.452 [DEBUG] [Thread-303065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:39:20.452 [DEBUG] [Thread-303065] [transport.py] [_log()] Compression: none
2025-12-24T13:39:20.452 [DEBUG] [Thread-303065] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:39:20.508 [DEBUG] [Thread-303065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:39:20.508 [DEBUG] [Thread-303065] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:39:20.508 [DEBUG] [Thread-303065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:39:20.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:39:20.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:39:20.565 [DEBUG] [Thread-303065] [transport.py] [_log()] userauth is OK
2025-12-24T13:39:20.565 [DEBUG] [Thread-303065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:39:20.565 [DEBUG] [Thread-303065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:39:20.566 [DEBUG] [Thread-303065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:39:20.566 [DEBUG] [Thread-303065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:39:20.584 [INFO] [Thread-303065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:39:20.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:39:20.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:39:21.433 [DEBUG] [Thread-303065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:39:21.434 [DEBUG] [Thread-303065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:39:21.472 [DEBUG] [Thread-303065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:39:21.472 [DEBUG] [Thread-303065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:39:21.481 [DEBUG] [Thread-303065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:39:21.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:39:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:39:21.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:39:21.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:39:21.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:39:21.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:39:21.519 [DEBUG] [Thread-303065] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:39:26.916 [DEBUG] [Thread-303067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:39:31.349 [DEBUG] [Thread-303068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:39:46.562 [DEBUG] [Thread-303069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:39:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:39:51.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:39:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:39:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 39, 31), 21.3, 25.25, 0.0, 16.16, 24.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:39:52.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:39:31
2025-12-24T13:39:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:39:53.351 [DEBUG] [Thread-303070] [transport.py] [_log()] starting thread (client mode): 0xf81f01f0
2025-12-24T13:39:53.352 [DEBUG] [Thread-303070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:39:53.365 [DEBUG] [Thread-303070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:39:53.365 [INFO] [Thread-303070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:39:53.369 [DEBUG] [Thread-303070] [transport.py] [_log()] client lang: <none>
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] server lang: <none>
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] kex follows: False
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] Compression: none
2025-12-24T13:39:53.370 [DEBUG] [Thread-303070] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:39:53.406 [DEBUG] [Thread-303070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:39:53.411 [DEBUG] [Thread-303070] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:39:53.412 [DEBUG] [Thread-303070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:39:53.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:39:53.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:39:53.417 [DEBUG] [Thread-303070] [transport.py] [_log()] userauth is OK
2025-12-24T13:39:53.418 [DEBUG] [Thread-303070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:39:53.418 [DEBUG] [Thread-303070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:39:53.418 [DEBUG] [Thread-303070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:39:53.418 [DEBUG] [Thread-303070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:39:53.439 [INFO] [Thread-303070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:39:53.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:39:54.065 [DEBUG] [Thread-303070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:39:54.074 [DEBUG] [Thread-303070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:39:54.076 [DEBUG] [Thread-303070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:39:54.106 [DEBUG] [Thread-303070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:39:54.106 [DEBUG] [Thread-303070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:39:54.110 [DEBUG] [Thread-303070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:39:54.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:39:54.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:39:54.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:39:54.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:39:54.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:39:54.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:39:54.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:39:54.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:39:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:39:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.485832 -999.00  +24.50   8.50     30   +5.90 1 2 1 1 1   888    0 20.09 56.58 ----- 8.5 8.5 66.2 9.8 35.4 -22.4 35.1 -23.1 36.1 -20.4 36.6 -21.2
2025-12-24T13:39:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:39:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:39:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.485832
2025-12-24T13:39:54.147 [DEBUG] [Thread-303070] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:39:54.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:39:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:39:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:39:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:39:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:39:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:39:31', tmtdew=21.3, humidity=25.25, cloud=0.0, wind=16.16, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:39:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:39:54.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:39:54.255 [DEBUG] [Thread-303073] [transport.py] [_log()] starting thread (client mode): 0xf57bec50
2025-12-24T13:39:54.255 [DEBUG] [Thread-303073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:39:54.270 [DEBUG] [Thread-303073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:39:54.270 [INFO] [Thread-303073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:39:54.277 [DEBUG] [Thread-303073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] client lang: <none>
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] server lang: <none>
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] kex follows: False
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:39:54.278 [DEBUG] [Thread-303073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:39:54.279 [DEBUG] [Thread-303073] [transport.py] [_log()] Compression: none
2025-12-24T13:39:54.279 [DEBUG] [Thread-303073] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:39:54.337 [DEBUG] [Thread-303073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:39:54.337 [DEBUG] [Thread-303073] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:39:54.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:39:54.339 [DEBUG] [Thread-303073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:39:54.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:39:54.392 [DEBUG] [Thread-303073] [transport.py] [_log()] userauth is OK
2025-12-24T13:39:54.392 [DEBUG] [Thread-303073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:39:54.393 [DEBUG] [Thread-303073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:39:54.393 [DEBUG] [Thread-303073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:39:54.393 [DEBUG] [Thread-303073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:39:54.416 [INFO] [Thread-303073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:39:54.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:39:54.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:39:55.267 [DEBUG] [Thread-303073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:39:55.267 [DEBUG] [Thread-303073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:39:55.314 [DEBUG] [Thread-303073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:39:55.315 [DEBUG] [Thread-303073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:39:55.323 [DEBUG] [Thread-303073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:39:55.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:39:55.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:39:55.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:39:55.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:39:55.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:39:55.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:39:55.355 [DEBUG] [Thread-303073] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:40:01.638 [DEBUG] [Thread-303075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:40:07.718 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:40:07.726 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:40:16.770 [DEBUG] [Thread-303076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:40:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:40:25.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:40:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:40:26.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 40, 4), 21.27, 25.3, 0.0, 17.38, 24.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:40:26.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:40:04
2025-12-24T13:40:26.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:40:27.092 [DEBUG] [Thread-303077] [transport.py] [_log()] starting thread (client mode): 0xf81c1570
2025-12-24T13:40:27.093 [DEBUG] [Thread-303077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:40:27.099 [DEBUG] [Thread-303077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:40:27.099 [INFO] [Thread-303077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:40:27.105 [DEBUG] [Thread-303077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:40:27.105 [DEBUG] [Thread-303077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:40:27.105 [DEBUG] [Thread-303077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] client lang: <none>
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] server lang: <none>
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] kex follows: False
2025-12-24T13:40:27.106 [DEBUG] [Thread-303077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:40:27.107 [DEBUG] [Thread-303077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:40:27.107 [DEBUG] [Thread-303077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:40:27.107 [DEBUG] [Thread-303077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:40:27.107 [DEBUG] [Thread-303077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:40:27.107 [DEBUG] [Thread-303077] [transport.py] [_log()] Compression: none
2025-12-24T13:40:27.107 [DEBUG] [Thread-303077] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:40:27.134 [DEBUG] [Thread-303077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:40:27.138 [DEBUG] [Thread-303077] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:40:27.140 [DEBUG] [Thread-303077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:40:27.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:40:27.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:40:27.144 [DEBUG] [Thread-303077] [transport.py] [_log()] userauth is OK
2025-12-24T13:40:27.144 [DEBUG] [Thread-303077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:40:27.145 [DEBUG] [Thread-303077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:40:27.145 [DEBUG] [Thread-303077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:40:27.145 [DEBUG] [Thread-303077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:40:27.167 [INFO] [Thread-303077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:40:27.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:40:27.173 [DEBUG] [Thread-303079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:40:27.773 [DEBUG] [Thread-303077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:40:27.773 [DEBUG] [Thread-303077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:40:27.773 [DEBUG] [Thread-303077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:40:27.814 [DEBUG] [Thread-303077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:40:27.814 [DEBUG] [Thread-303077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:40:27.817 [DEBUG] [Thread-303077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:40:27.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:40:27.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:40:27.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:40:27.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:40:27.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:40:27.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:40:27.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:40:27.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:40:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:40:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.486180 -999.00  +24.70  20.14     30   +6.20 1 1 1 1 1   888    0 20.14 58.17 ----- 20.1 20.1 57.2 23.4 35.0 -27.5 34.6 -27.1 35.6 -21.6 36.3 -28.0
2025-12-24T13:40:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:40:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:40:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.486180
2025-12-24T13:40:27.847 [DEBUG] [Thread-303077] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:40:27.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:40:27.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:40:27.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:40:27.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:40:27.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:40:27.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:40:04', tmtdew=21.27, humidity=25.3, cloud=0.0, wind=17.38, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:40:05.952', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:40:27.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:40:27.944 [DEBUG] [Thread-303081] [transport.py] [_log()] starting thread (client mode): 0xf81c1f60
2025-12-24T13:40:27.944 [DEBUG] [Thread-303081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:40:27.957 [DEBUG] [Thread-303081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:40:27.958 [INFO] [Thread-303081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] client lang: <none>
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] server lang: <none>
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] kex follows: False
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] Compression: none
2025-12-24T13:40:27.965 [DEBUG] [Thread-303081] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:40:28.025 [DEBUG] [Thread-303081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:40:28.026 [DEBUG] [Thread-303081] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:40:28.026 [DEBUG] [Thread-303081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:40:28.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:40:28.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:40:28.086 [DEBUG] [Thread-303081] [transport.py] [_log()] userauth is OK
2025-12-24T13:40:28.086 [DEBUG] [Thread-303081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:40:28.086 [DEBUG] [Thread-303081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:40:28.086 [DEBUG] [Thread-303081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:40:28.086 [DEBUG] [Thread-303081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:40:28.104 [INFO] [Thread-303081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:40:28.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:40:28.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:40:28.992 [DEBUG] [Thread-303081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:40:28.992 [DEBUG] [Thread-303081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:40:29.039 [DEBUG] [Thread-303081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:40:29.039 [DEBUG] [Thread-303081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:40:29.047 [DEBUG] [Thread-303081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:40:29.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:40:29.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:40: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') -> 00000000
2025-12-24T13:40:29.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:40:29.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:40:29.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:40:29.081 [DEBUG] [Thread-303081] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:40:31.854 [DEBUG] [Thread-303083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:40:46.987 [DEBUG] [Thread-303084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:40:59.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:40:59.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:40:59.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:40:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 40, 37), 21.17, 24.93, 0.0, 10.99, 24.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:40:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:40:37
2025-12-24T13:41:00.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:41:00.240 [DEBUG] [Thread-303085] [transport.py] [_log()] starting thread (client mode): 0xf57bfca0
2025-12-24T13:41:00.241 [DEBUG] [Thread-303085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:41:00.241 [DEBUG] [Thread-303085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:41:00.241 [INFO] [Thread-303085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:41:00.246 [DEBUG] [Thread-303085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:41:00.246 [DEBUG] [Thread-303085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] client lang: <none>
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] server lang: <none>
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] kex follows: False
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:41:00.247 [DEBUG] [Thread-303085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:41:00.248 [DEBUG] [Thread-303085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:41:00.248 [DEBUG] [Thread-303085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:41:00.248 [DEBUG] [Thread-303085] [transport.py] [_log()] Compression: none
2025-12-24T13:41:00.248 [DEBUG] [Thread-303085] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:41:00.288 [DEBUG] [Thread-303085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:41:00.291 [DEBUG] [Thread-303085] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:41:00.292 [DEBUG] [Thread-303085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:41:00.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:41:00.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:41:00.296 [DEBUG] [Thread-303085] [transport.py] [_log()] userauth is OK
2025-12-24T13:41:00.296 [DEBUG] [Thread-303085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:41:00.297 [DEBUG] [Thread-303085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:41:00.297 [DEBUG] [Thread-303085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:41:00.297 [DEBUG] [Thread-303085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:41:00.315 [INFO] [Thread-303085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:41:00.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:41:00.928 [DEBUG] [Thread-303085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:41:00.928 [DEBUG] [Thread-303085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:41:00.929 [DEBUG] [Thread-303085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:41:00.969 [DEBUG] [Thread-303085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:41:00.969 [DEBUG] [Thread-303085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:41:00.972 [DEBUG] [Thread-303085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:41:00.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:41:00.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:41:00.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:41:00.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:41:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:41:00.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:41:00.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:41:00.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:41:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:41:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.486527 -999.00  +25.00  18.37     29   +6.00 1 1 1 1 1   888    0 20.25 60.03 ----- 18.4 18.4 64.6 21.6 34.4 -32.4 34.5 -28.6 34.8 -28.9 35.8 -28.2
2025-12-24T13:41:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:41:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:41:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.486527
2025-12-24T13:41:01.006 [DEBUG] [Thread-303085] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:41:01.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:41:01.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:41:01.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:41:01.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:41:01.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:41:01.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:40:37', tmtdew=21.17, humidity=24.93, cloud=0.0, wind=10.99, temperature=24.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:40:35.933', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:41:01.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:41:01.123 [DEBUG] [Thread-303088] [transport.py] [_log()] starting thread (client mode): 0xf81c1180
2025-12-24T13:41:01.123 [DEBUG] [Thread-303088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:41:01.137 [DEBUG] [Thread-303088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:41:01.137 [INFO] [Thread-303088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:41:01.144 [DEBUG] [Thread-303088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:41:01.144 [DEBUG] [Thread-303088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:41:01.144 [DEBUG] [Thread-303088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:41:01.144 [DEBUG] [Thread-303088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] client lang: <none>
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] server lang: <none>
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] kex follows: False
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] Compression: none
2025-12-24T13:41:01.145 [DEBUG] [Thread-303088] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:41:01.201 [DEBUG] [Thread-303088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:41:01.202 [DEBUG] [Thread-303088] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:41:01.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:41:01.203 [DEBUG] [Thread-303088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:41:01.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:41:01.262 [DEBUG] [Thread-303088] [transport.py] [_log()] userauth is OK
2025-12-24T13:41:01.262 [DEBUG] [Thread-303088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:41:01.263 [DEBUG] [Thread-303088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:41:01.263 [DEBUG] [Thread-303088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:41:01.263 [DEBUG] [Thread-303088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:41:01.282 [INFO] [Thread-303088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:41:01.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:41:01.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:41:02.072 [DEBUG] [Thread-303090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:41:02.190 [DEBUG] [Thread-303088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:41:02.190 [DEBUG] [Thread-303088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:41:02.237 [DEBUG] [Thread-303088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:41:02.237 [DEBUG] [Thread-303088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:41:02.247 [DEBUG] [Thread-303088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:41:02.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:41:02.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')
2025-12-24T13:41:02.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
2025-12-24T13:41:02.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:41:02.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:41:02.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:41:02.284 [DEBUG] [Thread-303088] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:41:07.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:41:07.878 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:41:17.248 [DEBUG] [Thread-303091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:41:27.423 [DEBUG] [Thread-303092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:41:32.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:41:32.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:41:32.311 [DEBUG] [Thread-303093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:41:32.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:41:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 41, 11), 20.78, 25.51, 0.0, 14.31, 23.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:41:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:41:11
2025-12-24T13:41:34.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:41:34.196 [DEBUG] [Thread-303094] [transport.py] [_log()] starting thread (client mode): 0xf81c1930
2025-12-24T13:41:34.196 [DEBUG] [Thread-303094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:41:34.206 [DEBUG] [Thread-303094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:41:34.206 [INFO] [Thread-303094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:41:34.212 [DEBUG] [Thread-303094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:41:34.213 [DEBUG] [Thread-303094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:41:34.213 [DEBUG] [Thread-303094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:41:34.213 [DEBUG] [Thread-303094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:41:34.213 [DEBUG] [Thread-303094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:41:34.213 [DEBUG] [Thread-303094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:41:34.213 [DEBUG] [Thread-303094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:41:34.213 [DEBUG] [Thread-303094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:41:34.213 [DEBUG] [Thread-303094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:41:34.214 [DEBUG] [Thread-303094] [transport.py] [_log()] client lang: <none>
2025-12-24T13:41:34.214 [DEBUG] [Thread-303094] [transport.py] [_log()] server lang: <none>
2025-12-24T13:41:34.214 [DEBUG] [Thread-303094] [transport.py] [_log()] kex follows: False
2025-12-24T13:41:34.214 [DEBUG] [Thread-303094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:41:34.215 [DEBUG] [Thread-303094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:41:34.215 [DEBUG] [Thread-303094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:41:34.215 [DEBUG] [Thread-303094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:41:34.215 [DEBUG] [Thread-303094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:41:34.216 [DEBUG] [Thread-303094] [transport.py] [_log()] Compression: none
2025-12-24T13:41:34.216 [DEBUG] [Thread-303094] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:41:34.254 [DEBUG] [Thread-303094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:41:34.259 [DEBUG] [Thread-303094] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:41:34.261 [DEBUG] [Thread-303094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:41:34.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:41:34.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:41:34.268 [DEBUG] [Thread-303094] [transport.py] [_log()] userauth is OK
2025-12-24T13:41:34.269 [DEBUG] [Thread-303094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:41:34.269 [DEBUG] [Thread-303094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:41:34.269 [DEBUG] [Thread-303094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:41:34.269 [DEBUG] [Thread-303094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:41:34.298 [INFO] [Thread-303094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:41:34.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:41:34.945 [DEBUG] [Thread-303094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:41:34.945 [DEBUG] [Thread-303094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:41:34.946 [DEBUG] [Thread-303094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:41:34.987 [DEBUG] [Thread-303094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:41:34.987 [DEBUG] [Thread-303094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:41:34.991 [DEBUG] [Thread-303094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:41:35.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:41:35.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:41:35.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:41:35.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:41:35.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:41:35.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:41:35.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:41:35.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:41:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:41:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.486874 -999.00  +24.80   8.01     29   +6.00 1 1 1 1 1   888    0 20.22 61.34 ----- 8.0 8.0 93.9 18.0 34.0 -27.9 34.0 -28.0 34.5 -26.0 35.1 -29.0
2025-12-24T13:41:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:41:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:41:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.486874
2025-12-24T13:41:35.031 [DEBUG] [Thread-303094] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:41:35.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:41:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:41:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:41:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:41:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:41:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:41:11', tmtdew=20.78, humidity=25.51, cloud=0.0, wind=14.31, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:41:05.914', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:41:35.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:41:35.135 [DEBUG] [Thread-303097] [transport.py] [_log()] starting thread (client mode): 0xf57bf790
2025-12-24T13:41:35.135 [DEBUG] [Thread-303097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:41:35.153 [DEBUG] [Thread-303097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:41:35.153 [INFO] [Thread-303097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:41:35.160 [DEBUG] [Thread-303097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] client lang: <none>
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] server lang: <none>
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] kex follows: False
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] Compression: none
2025-12-24T13:41:35.161 [DEBUG] [Thread-303097] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:41:35.221 [DEBUG] [Thread-303097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:41:35.222 [DEBUG] [Thread-303097] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:41:35.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:41:35.223 [DEBUG] [Thread-303097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:41:35.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:41:35.277 [DEBUG] [Thread-303097] [transport.py] [_log()] userauth is OK
2025-12-24T13:41:35.277 [DEBUG] [Thread-303097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:41:35.277 [DEBUG] [Thread-303097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:41:35.277 [DEBUG] [Thread-303097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:41:35.277 [DEBUG] [Thread-303097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:41:35.301 [INFO] [Thread-303097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:41:35.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:41:35.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:41:36.165 [DEBUG] [Thread-303097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:41:36.165 [DEBUG] [Thread-303097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:41:36.213 [DEBUG] [Thread-303097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:41:36.213 [DEBUG] [Thread-303097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:41:36.221 [DEBUG] [Thread-303097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:41:36.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:41:36.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:41:36.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:41:36.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:41:36.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:41:36.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:41:36.254 [DEBUG] [Thread-303097] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:41:47.414 [DEBUG] [Thread-303099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:42:02.537 [DEBUG] [Thread-303100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:42:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:42:06.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:42:06.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:42:07.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 41, 44), 20.93, 25.51, 0.0, 14.45, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:42:07.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:41:44
2025-12-24T13:42:07.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:42:07.977 [DEBUG] [Thread-303101] [transport.py] [_log()] starting thread (client mode): 0xf57bee90
2025-12-24T13:42:07.977 [DEBUG] [Thread-303101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:42:07.992 [DEBUG] [Thread-303101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:42:07.992 [INFO] [Thread-303101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] client lang: <none>
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] server lang: <none>
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] kex follows: False
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] Compression: none
2025-12-24T13:42:07.997 [DEBUG] [Thread-303101] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:42:08.019 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:42:08.021 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:42:08.030 [DEBUG] [Thread-303101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:42:08.034 [DEBUG] [Thread-303101] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:42:08.036 [DEBUG] [Thread-303101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:42:08.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:42:08.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:42:08.041 [DEBUG] [Thread-303101] [transport.py] [_log()] userauth is OK
2025-12-24T13:42:08.041 [DEBUG] [Thread-303101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:42:08.042 [DEBUG] [Thread-303101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:42:08.042 [DEBUG] [Thread-303101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:42:08.042 [DEBUG] [Thread-303101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:42:08.067 [INFO] [Thread-303101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:42:08.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:42:08.677 [DEBUG] [Thread-303101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:42:08.678 [DEBUG] [Thread-303101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:42:08.688 [DEBUG] [Thread-303101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:42:08.718 [DEBUG] [Thread-303101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:42:08.718 [DEBUG] [Thread-303101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:42:08.720 [DEBUG] [Thread-303101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:42:08.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:42:08.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:42:08.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:42:08.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:42:08.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:42:08.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:42:08.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:42:08.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:42:08.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:42:08.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.487222 -999.00  +24.50  14.41     29   +5.60 1 1 1 1 1   888    0 19.91 62.07 ----- 14.4 14.4 13.0 23.4 33.7 -29.9 33.7 -30.1 34.2 -26.8 34.8 -27.9
2025-12-24T13:42:08.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:42:08.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:42:08.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.487222
2025-12-24T13:42:08.753 [DEBUG] [Thread-303101] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:42:08.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:42:08.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:42:08.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:42:08.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:42:08.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:42:08.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:41:44', tmtdew=20.93, humidity=25.51, cloud=0.0, wind=14.45, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:41:35.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:42:08.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:42:08.852 [DEBUG] [Thread-303104] [transport.py] [_log()] starting thread (client mode): 0xf81c39a0
2025-12-24T13:42:08.853 [DEBUG] [Thread-303104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:42:08.871 [DEBUG] [Thread-303104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:42:08.871 [INFO] [Thread-303104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:42:08.879 [DEBUG] [Thread-303104] [transport.py] [_log()] client lang: <none>
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] server lang: <none>
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] kex follows: False
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] Compression: none
2025-12-24T13:42:08.880 [DEBUG] [Thread-303104] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:42:08.938 [DEBUG] [Thread-303104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:42:08.938 [DEBUG] [Thread-303104] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:42:08.938 [DEBUG] [Thread-303104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:42:08.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:42:08.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:42:08.996 [DEBUG] [Thread-303104] [transport.py] [_log()] userauth is OK
2025-12-24T13:42:08.996 [DEBUG] [Thread-303104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:42:08.996 [DEBUG] [Thread-303104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:42:08.996 [DEBUG] [Thread-303104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:42:08.996 [DEBUG] [Thread-303104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:42:09.015 [INFO] [Thread-303104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:42:09.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:42:09.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:42:09.841 [DEBUG] [Thread-303104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:42:09.842 [DEBUG] [Thread-303104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:42:09.889 [DEBUG] [Thread-303104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:42:09.889 [DEBUG] [Thread-303104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:42:09.898 [DEBUG] [Thread-303104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:42:09.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:42:09.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')
2025-12-24T13:42:09.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:42:09.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:42:09.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:42:09.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:42:09.936 [DEBUG] [Thread-303104] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:42:17.620 [DEBUG] [Thread-303106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:42:27.725 [DEBUG] [Thread-303107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:42:32.803 [DEBUG] [Thread-303108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:42:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:42:39.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:42:40.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:42:41.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 42, 17), 20.98, 25.45, 0.0, 14.56, 24.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:42:41.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:42:17
2025-12-24T13:42:41.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:42:41.561 [DEBUG] [Thread-303109] [transport.py] [_log()] starting thread (client mode): 0xf57bd9c0
2025-12-24T13:42:41.561 [DEBUG] [Thread-303109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:42:41.575 [DEBUG] [Thread-303109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:42:41.575 [INFO] [Thread-303109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:42:41.581 [DEBUG] [Thread-303109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:42:41.581 [DEBUG] [Thread-303109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] client lang: <none>
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] server lang: <none>
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] kex follows: False
2025-12-24T13:42:41.582 [DEBUG] [Thread-303109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:42:41.583 [DEBUG] [Thread-303109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:42:41.583 [DEBUG] [Thread-303109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:42:41.583 [DEBUG] [Thread-303109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:42:41.584 [DEBUG] [Thread-303109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:42:41.584 [DEBUG] [Thread-303109] [transport.py] [_log()] Compression: none
2025-12-24T13:42:41.584 [DEBUG] [Thread-303109] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:42:41.622 [DEBUG] [Thread-303109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:42:41.626 [DEBUG] [Thread-303109] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:42:41.628 [DEBUG] [Thread-303109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:42:41.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:42:41.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:42:41.633 [DEBUG] [Thread-303109] [transport.py] [_log()] userauth is OK
2025-12-24T13:42:41.633 [DEBUG] [Thread-303109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:42:41.633 [DEBUG] [Thread-303109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:42:41.633 [DEBUG] [Thread-303109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:42:41.634 [DEBUG] [Thread-303109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:42:41.668 [INFO] [Thread-303109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:42:41.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:42:42.317 [DEBUG] [Thread-303109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:42:42.317 [DEBUG] [Thread-303109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:42:42.318 [DEBUG] [Thread-303109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:42:42.358 [DEBUG] [Thread-303109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:42:42.358 [DEBUG] [Thread-303109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:42:42.361 [DEBUG] [Thread-303109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:42:42.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:42:42.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:42:42.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:42:42.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:42:42.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:42:42.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:42:42.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:42:42.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:42:42.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:42:42.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.487569 -999.00  +24.10   4.62     30   +5.70 1 1 1 1 1   888    0 19.99 58.47 ----- 4.6 4.6 14.3 14.4 33.5 -27.7 33.3 -29.3 33.8 -26.1 34.3 -26.3
2025-12-24T13:42:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:42:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:42:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.487569
2025-12-24T13:42:42.395 [DEBUG] [Thread-303109] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:42:42.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:42:42.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:42:42.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:42:42.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:42:42.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:42:42.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:42:17', tmtdew=20.98, humidity=25.45, cloud=0.0, wind=14.56, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:42:05.962', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:42:42.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:42:42.510 [DEBUG] [Thread-303112] [transport.py] [_log()] starting thread (client mode): 0xf574d420
2025-12-24T13:42:42.510 [DEBUG] [Thread-303112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:42:42.525 [DEBUG] [Thread-303112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:42:42.525 [INFO] [Thread-303112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:42:42.532 [DEBUG] [Thread-303112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:42:42.532 [DEBUG] [Thread-303112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:42:42.532 [DEBUG] [Thread-303112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] client lang: <none>
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] server lang: <none>
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] kex follows: False
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] Compression: none
2025-12-24T13:42:42.533 [DEBUG] [Thread-303112] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:42:42.590 [DEBUG] [Thread-303112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:42:42.591 [DEBUG] [Thread-303112] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:42:42.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:42:42.592 [DEBUG] [Thread-303112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:42:42.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:42:42.646 [DEBUG] [Thread-303112] [transport.py] [_log()] userauth is OK
2025-12-24T13:42:42.647 [DEBUG] [Thread-303112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:42:42.647 [DEBUG] [Thread-303112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:42:42.647 [DEBUG] [Thread-303112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:42:42.647 [DEBUG] [Thread-303112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:42:42.669 [INFO] [Thread-303112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:42:42.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:42:42.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:42:43.586 [DEBUG] [Thread-303112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:42:43.587 [DEBUG] [Thread-303112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:42:43.632 [DEBUG] [Thread-303112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:42:43.632 [DEBUG] [Thread-303112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:42:43.641 [DEBUG] [Thread-303112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:42:43.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:42:43.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')
2025-12-24T13:42:43.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
2025-12-24T13:42:43.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:42:43.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:42:43.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:42:43.680 [DEBUG] [Thread-303112] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:42:47.899 [DEBUG] [Thread-303114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:43:03.070 [DEBUG] [Thread-303115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:43:08.163 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:43:08.165 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:43:13.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:43:13.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:43:13.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:43:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 42, 50), 21.13, 25.33, 0.0, 11.36, 24.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:43:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:42:50
2025-12-24T13:43:15.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:43:15.402 [DEBUG] [Thread-303116] [transport.py] [_log()] starting thread (client mode): 0xf57737f0
2025-12-24T13:43:15.403 [DEBUG] [Thread-303116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:43:15.413 [DEBUG] [Thread-303116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:43:15.414 [INFO] [Thread-303116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:43:15.420 [DEBUG] [Thread-303116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:43:15.420 [DEBUG] [Thread-303116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] client lang: <none>
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] server lang: <none>
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] kex follows: False
2025-12-24T13:43:15.421 [DEBUG] [Thread-303116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:43:15.422 [DEBUG] [Thread-303116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:43:15.422 [DEBUG] [Thread-303116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:43:15.422 [DEBUG] [Thread-303116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:43:15.422 [DEBUG] [Thread-303116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:43:15.422 [DEBUG] [Thread-303116] [transport.py] [_log()] Compression: none
2025-12-24T13:43:15.422 [DEBUG] [Thread-303116] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:43:15.461 [DEBUG] [Thread-303116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:43:15.465 [DEBUG] [Thread-303116] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:43:15.467 [DEBUG] [Thread-303116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:43:15.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:43:15.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:43:15.472 [DEBUG] [Thread-303116] [transport.py] [_log()] userauth is OK
2025-12-24T13:43:15.472 [DEBUG] [Thread-303116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:43:15.472 [DEBUG] [Thread-303116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:43:15.472 [DEBUG] [Thread-303116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:43:15.473 [DEBUG] [Thread-303116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:43:15.501 [INFO] [Thread-303116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:43:15.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:43:16.151 [DEBUG] [Thread-303116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:43:16.151 [DEBUG] [Thread-303116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:43:16.161 [DEBUG] [Thread-303116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:43:16.192 [DEBUG] [Thread-303116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:43:16.192 [DEBUG] [Thread-303116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:43:16.196 [DEBUG] [Thread-303116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:43:16.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:43:16.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:43:16.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:43:16.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:43:16.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:43:16.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:43:16.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:43:16.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:43:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:43:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.487916 -999.00  +24.00   8.70     31   +5.80 1 2 1 1 1   888    0 19.77 53.70 ----- 8.7 8.7 96.3 22.4 33.5 -23.3 33.5 -23.1 34.0 -20.6 34.1 -23.3
2025-12-24T13:43:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:43:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:43:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.487916
2025-12-24T13:43:16.233 [DEBUG] [Thread-303116] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:43:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:43:16.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:43:16.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:43:16.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:43:16.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:43:16.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:42:50', tmtdew=21.13, humidity=25.33, cloud=0.0, wind=11.36, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:42:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:43:16.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:43:16.357 [DEBUG] [Thread-303119] [transport.py] [_log()] starting thread (client mode): 0xf5771300
2025-12-24T13:43:16.357 [DEBUG] [Thread-303119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:43:16.371 [DEBUG] [Thread-303119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:43:16.371 [INFO] [Thread-303119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] client lang: <none>
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] server lang: <none>
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] kex follows: False
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] Compression: none
2025-12-24T13:43:16.379 [DEBUG] [Thread-303119] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:43:16.438 [DEBUG] [Thread-303119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:43:16.438 [DEBUG] [Thread-303119] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:43:16.438 [DEBUG] [Thread-303119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:43:16.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:43:16.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:43:16.493 [DEBUG] [Thread-303119] [transport.py] [_log()] userauth is OK
2025-12-24T13:43:16.493 [DEBUG] [Thread-303119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:43:16.493 [DEBUG] [Thread-303119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:43:16.493 [DEBUG] [Thread-303119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:43:16.493 [DEBUG] [Thread-303119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:43:16.507 [INFO] [Thread-303119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:43:16.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:43:16.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:43:17.346 [DEBUG] [Thread-303119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:43:17.346 [DEBUG] [Thread-303119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:43:17.393 [DEBUG] [Thread-303119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:43:17.393 [DEBUG] [Thread-303119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:43:17.402 [DEBUG] [Thread-303119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:43:17.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:43: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')
2025-12-24T13:43:17.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:43:17.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:43:17.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:43:17.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:43:17.435 [DEBUG] [Thread-303119] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:43:18.149 [DEBUG] [Thread-303121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:43:28.014 [DEBUG] [Thread-303122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:43:33.345 [DEBUG] [Thread-303123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:43:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:43:47.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:43:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:43:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 43, 23), 21.28, 25.1, 0.0, 10.53, 24.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:43:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:43:23
2025-12-24T13:43:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:43:48.458 [DEBUG] [Thread-303124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:43:48.620 [DEBUG] [Thread-303125] [transport.py] [_log()] starting thread (client mode): 0xf57bc8b0
2025-12-24T13:43:48.620 [DEBUG] [Thread-303125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:43:48.627 [DEBUG] [Thread-303125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:43:48.627 [INFO] [Thread-303125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] client lang: <none>
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] server lang: <none>
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] kex follows: False
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:43:48.631 [DEBUG] [Thread-303125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:43:48.632 [DEBUG] [Thread-303125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:43:48.632 [DEBUG] [Thread-303125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:43:48.632 [DEBUG] [Thread-303125] [transport.py] [_log()] Compression: none
2025-12-24T13:43:48.632 [DEBUG] [Thread-303125] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:43:48.661 [DEBUG] [Thread-303125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:43:48.663 [DEBUG] [Thread-303125] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:43:48.665 [DEBUG] [Thread-303125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:43:48.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:43:48.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:43:48.705 [DEBUG] [Thread-303125] [transport.py] [_log()] userauth is OK
2025-12-24T13:43:48.705 [DEBUG] [Thread-303125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:43:48.705 [DEBUG] [Thread-303125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:43:48.705 [DEBUG] [Thread-303125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:43:48.705 [DEBUG] [Thread-303125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:43:48.723 [INFO] [Thread-303125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:43:48.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:43:49.369 [DEBUG] [Thread-303125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:43:49.369 [DEBUG] [Thread-303125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:43:49.370 [DEBUG] [Thread-303125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:43:49.411 [DEBUG] [Thread-303125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:43:49.411 [DEBUG] [Thread-303125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:43:49.413 [DEBUG] [Thread-303125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:43:49.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:43:49.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:43:49.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:43:49.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:43:49.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:43:49.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:43:49.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:43:49.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:43:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:43:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.488263 -999.00  +24.20  13.27     30   +5.90 1 2 1 1 1   888    0 19.72 51.40 ----- 13.3 13.3 91.8 22.2 33.7 -22.1 33.7 -21.8 34.1 -21.3 34.4 -20.4
2025-12-24T13:43:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:43:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:43:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.488263
2025-12-24T13:43:49.440 [DEBUG] [Thread-303125] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:43:49.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:43:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:43:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:43:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:43:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:43:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:43:23', tmtdew=21.28, humidity=25.1, cloud=0.0, wind=10.53, temperature=24.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:43:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:43:49.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:43:49.540 [DEBUG] [Thread-303128] [transport.py] [_log()] starting thread (client mode): 0xf81c3310
2025-12-24T13:43:49.540 [DEBUG] [Thread-303128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:43:49.554 [DEBUG] [Thread-303128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:43:49.555 [INFO] [Thread-303128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] client lang: <none>
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] server lang: <none>
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] kex follows: False
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:43:49.562 [DEBUG] [Thread-303128] [transport.py] [_log()] Compression: none
2025-12-24T13:43:49.563 [DEBUG] [Thread-303128] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:43:49.620 [DEBUG] [Thread-303128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:43:49.620 [DEBUG] [Thread-303128] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:43:49.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:43:49.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:43:49.621 [DEBUG] [Thread-303128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:43:49.676 [DEBUG] [Thread-303128] [transport.py] [_log()] userauth is OK
2025-12-24T13:43:49.676 [DEBUG] [Thread-303128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:43:49.676 [DEBUG] [Thread-303128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:43:49.676 [DEBUG] [Thread-303128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:43:49.677 [DEBUG] [Thread-303128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:43:49.690 [INFO] [Thread-303128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:43:49.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:43:49.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:43:50.524 [DEBUG] [Thread-303128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:43:50.524 [DEBUG] [Thread-303128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:43:50.573 [DEBUG] [Thread-303128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:43:50.573 [DEBUG] [Thread-303128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:43:50.581 [DEBUG] [Thread-303128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:43:50.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:43:50.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:43:50.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:43:50.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:43:50.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:43:50.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:43:50.614 [DEBUG] [Thread-303128] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:44:03.605 [DEBUG] [Thread-303130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:44:08.316 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:44:08.318 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:44:18.755 [DEBUG] [Thread-303131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:44:20.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:44:20.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:44:20.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:44:22.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 43, 56), 21.08, 25.37, 0.0, 15.99, 24.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:44:22.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:43:56
2025-12-24T13:44:22.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:44:22.385 [DEBUG] [Thread-303132] [transport.py] [_log()] starting thread (client mode): 0xf5773520
2025-12-24T13:44:22.385 [DEBUG] [Thread-303132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:44:22.398 [DEBUG] [Thread-303132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:44:22.398 [INFO] [Thread-303132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] client lang: <none>
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] server lang: <none>
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] kex follows: False
2025-12-24T13:44:22.404 [DEBUG] [Thread-303132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:44:22.405 [DEBUG] [Thread-303132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:44:22.405 [DEBUG] [Thread-303132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:44:22.405 [DEBUG] [Thread-303132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:44:22.405 [DEBUG] [Thread-303132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:44:22.405 [DEBUG] [Thread-303132] [transport.py] [_log()] Compression: none
2025-12-24T13:44:22.405 [DEBUG] [Thread-303132] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:44:22.437 [DEBUG] [Thread-303132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:44:22.441 [DEBUG] [Thread-303132] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:44:22.442 [DEBUG] [Thread-303132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:44:22.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:44:22.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:44:22.445 [DEBUG] [Thread-303132] [transport.py] [_log()] userauth is OK
2025-12-24T13:44:22.445 [DEBUG] [Thread-303132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:44:22.446 [DEBUG] [Thread-303132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:44:22.446 [DEBUG] [Thread-303132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:44:22.446 [DEBUG] [Thread-303132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:44:22.464 [INFO] [Thread-303132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:44:22.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:44:23.104 [DEBUG] [Thread-303132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:44:23.104 [DEBUG] [Thread-303132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:44:23.105 [DEBUG] [Thread-303132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:44:23.145 [DEBUG] [Thread-303132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:44:23.145 [DEBUG] [Thread-303132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:44:23.148 [DEBUG] [Thread-303132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:44:23.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:44:23.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:44:23.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:44:23.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:44:23.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:44:23.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:44:23.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:44:23.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:44:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:44:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.488611 -999.00  +24.30   8.21     30   +5.80 1 2 1 1 1   888    0 19.77 48.01 ----- 8.2 8.2 58.8 17.1 33.5 -26.3 33.7 -22.2 34.1 -21.3 34.5 -21.0
2025-12-24T13:44:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:44:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:44:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.488611
2025-12-24T13:44:23.185 [DEBUG] [Thread-303132] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:44:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:44:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:44:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:44:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:44:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:44:23.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:43:56', tmtdew=21.08, humidity=25.37, cloud=0.0, wind=15.99, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:43:35.990', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:44:23.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:44:23.310 [DEBUG] [Thread-303135] [transport.py] [_log()] starting thread (client mode): 0xf574c820
2025-12-24T13:44:23.310 [DEBUG] [Thread-303135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:44:23.326 [DEBUG] [Thread-303135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:44:23.326 [INFO] [Thread-303135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:44:23.333 [DEBUG] [Thread-303135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] client lang: <none>
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] server lang: <none>
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] kex follows: False
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] Compression: none
2025-12-24T13:44:23.334 [DEBUG] [Thread-303135] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:44:23.391 [DEBUG] [Thread-303135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:44:23.391 [DEBUG] [Thread-303135] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:44:23.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:44:23.391 [DEBUG] [Thread-303135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:44:23.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:44:23.447 [DEBUG] [Thread-303135] [transport.py] [_log()] userauth is OK
2025-12-24T13:44:23.447 [DEBUG] [Thread-303135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:44:23.447 [DEBUG] [Thread-303135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:44:23.448 [DEBUG] [Thread-303135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:44:23.448 [DEBUG] [Thread-303135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:44:23.462 [INFO] [Thread-303135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:44:23.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:44:23.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:44:24.340 [DEBUG] [Thread-303135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:44:24.340 [DEBUG] [Thread-303135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:44:24.387 [DEBUG] [Thread-303135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:44:24.387 [DEBUG] [Thread-303135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:44:24.396 [DEBUG] [Thread-303135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:44:24.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:44:24.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')
2025-12-24T13:44:24.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:44:24.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:44:24.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:44:24.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:44:24.433 [DEBUG] [Thread-303135] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:44:28.262 [DEBUG] [Thread-303137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:44:33.810 [DEBUG] [Thread-303138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:44:48.953 [DEBUG] [Thread-303139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:44:54.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:44:54.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:44:54.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:44:55.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 44, 30), 21.13, 25.3, 0.0, 13.08, 24.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:44:55.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:44:30
2025-12-24T13:44:56.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:44:56.208 [DEBUG] [Thread-303140] [transport.py] [_log()] starting thread (client mode): 0xf5773430
2025-12-24T13:44:56.209 [DEBUG] [Thread-303140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:44:56.220 [DEBUG] [Thread-303140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:44:56.220 [INFO] [Thread-303140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:44:56.226 [DEBUG] [Thread-303140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] client lang: <none>
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] server lang: <none>
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] kex follows: False
2025-12-24T13:44:56.227 [DEBUG] [Thread-303140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:44:56.228 [DEBUG] [Thread-303140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:44:56.228 [DEBUG] [Thread-303140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:44:56.228 [DEBUG] [Thread-303140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:44:56.228 [DEBUG] [Thread-303140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:44:56.228 [DEBUG] [Thread-303140] [transport.py] [_log()] Compression: none
2025-12-24T13:44:56.228 [DEBUG] [Thread-303140] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:44:56.264 [DEBUG] [Thread-303140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:44:56.268 [DEBUG] [Thread-303140] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:44:56.271 [DEBUG] [Thread-303140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:44:56.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:44:56.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:44:56.276 [DEBUG] [Thread-303140] [transport.py] [_log()] userauth is OK
2025-12-24T13:44:56.277 [DEBUG] [Thread-303140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:44:56.277 [DEBUG] [Thread-303140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:44:56.277 [DEBUG] [Thread-303140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:44:56.277 [DEBUG] [Thread-303140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:44:56.315 [INFO] [Thread-303140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:44:56.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:44:57.153 [DEBUG] [Thread-303140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:44:57.153 [DEBUG] [Thread-303140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:44:57.154 [DEBUG] [Thread-303140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:44:57.194 [DEBUG] [Thread-303140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:44:57.195 [DEBUG] [Thread-303140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:44:57.197 [DEBUG] [Thread-303140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:44:57.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:44:57.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:44:57.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:44:57.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:44:57.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:44:57.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:44:57.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:44:57.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:44:57.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:44:57.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.489304 -999.00  +24.20  10.07     30   +5.80 1 1 1 1 1   888    0 19.27 40.26 ----- 10.1 10.1 112.2 19.8 33.1 -31.1 33.4 -27.2 34.4 -19.2 34.5 -27.0
2025-12-24T13:44:57.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:44:57.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:44:57.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.489304
2025-12-24T13:44:57.227 [DEBUG] [Thread-303140] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:44:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:44:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:44:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:44:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:44:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:44:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:44:30', tmtdew=21.13, humidity=25.3, cloud=0.0, wind=13.08, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:44:35.866', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:44:57.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:44:57.328 [DEBUG] [Thread-303143] [transport.py] [_log()] starting thread (client mode): 0xf5771270
2025-12-24T13:44:57.328 [DEBUG] [Thread-303143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:44:57.342 [DEBUG] [Thread-303143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:44:57.342 [INFO] [Thread-303143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] client lang: <none>
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] server lang: <none>
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] kex follows: False
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] Compression: none
2025-12-24T13:44:57.350 [DEBUG] [Thread-303143] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:44:57.406 [DEBUG] [Thread-303143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:44:57.406 [DEBUG] [Thread-303143] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:44:57.406 [DEBUG] [Thread-303143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:44:57.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:44:57.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:44:57.462 [DEBUG] [Thread-303143] [transport.py] [_log()] userauth is OK
2025-12-24T13:44:57.462 [DEBUG] [Thread-303143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:44:57.462 [DEBUG] [Thread-303143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:44:57.462 [DEBUG] [Thread-303143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:44:57.462 [DEBUG] [Thread-303143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:44:57.476 [INFO] [Thread-303143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:44:57.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:44:57.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:44:58.308 [DEBUG] [Thread-303143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:44:58.308 [DEBUG] [Thread-303143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:44:58.355 [DEBUG] [Thread-303143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:44:58.355 [DEBUG] [Thread-303143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:44:58.364 [DEBUG] [Thread-303143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:44:58.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:44:58.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:44:58.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:44:58.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:44:58.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:44:58.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:44:58.402 [DEBUG] [Thread-303143] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:45:04.044 [DEBUG] [Thread-303145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:45:08.459 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:45:08.460 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:45:19.213 [DEBUG] [Thread-303146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:45:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:45:28.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:45:28.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:45:28.551 [DEBUG] [Thread-303147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:45:29.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 45, 2), 21.14, 25.28, 0.0, 14.49, 24.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:45:29.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:45:02
2025-12-24T13:45:29.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:45:30.118 [DEBUG] [Thread-303148] [transport.py] [_log()] starting thread (client mode): 0xf5771d80
2025-12-24T13:45:30.118 [DEBUG] [Thread-303148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:45:30.131 [DEBUG] [Thread-303148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:45:30.131 [INFO] [Thread-303148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:45:30.135 [DEBUG] [Thread-303148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:45:30.135 [DEBUG] [Thread-303148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:45:30.135 [DEBUG] [Thread-303148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:45:30.135 [DEBUG] [Thread-303148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:45:30.135 [DEBUG] [Thread-303148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:45:30.135 [DEBUG] [Thread-303148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:45:30.135 [DEBUG] [Thread-303148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:45:30.135 [DEBUG] [Thread-303148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] client lang: <none>
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] server lang: <none>
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] kex follows: False
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] Compression: none
2025-12-24T13:45:30.136 [DEBUG] [Thread-303148] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:45:30.170 [DEBUG] [Thread-303148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:45:30.175 [DEBUG] [Thread-303148] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:45:30.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:45:30.179 [DEBUG] [Thread-303148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:45:30.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:45:30.185 [DEBUG] [Thread-303148] [transport.py] [_log()] userauth is OK
2025-12-24T13:45:30.185 [DEBUG] [Thread-303148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:45:30.185 [DEBUG] [Thread-303148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:45:30.185 [DEBUG] [Thread-303148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:45:30.185 [DEBUG] [Thread-303148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:45:30.223 [INFO] [Thread-303148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:45:30.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:45:30.879 [DEBUG] [Thread-303148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:45:30.880 [DEBUG] [Thread-303148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:45:30.881 [DEBUG] [Thread-303148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:45:30.920 [DEBUG] [Thread-303148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:45:30.920 [DEBUG] [Thread-303148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:45:30.924 [DEBUG] [Thread-303148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:45:30.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:45:30.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:45:30.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:45:30.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:45:30.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:45:30.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:45:30.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:45:30.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:45:30.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:45:30.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.489652 -999.00  +24.10  10.89     31   +5.90 1 1 1 1 1   888    0 19.78 37.54 ----- 10.9 10.9 85.1 16.7 32.6 -28.8 33.1 -27.1 33.6 -28.5 34.0 -25.1
2025-12-24T13:45:30.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:45:30.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:45:30.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.489652
2025-12-24T13:45:30.957 [DEBUG] [Thread-303148] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:45:30.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:45:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:45:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:45:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:45:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:45:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:45:02', tmtdew=21.14, humidity=25.28, cloud=0.0, wind=14.49, temperature=24.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:45:05.933', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:45:31.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:45:31.068 [DEBUG] [Thread-303151] [transport.py] [_log()] starting thread (client mode): 0xf81e4fd0
2025-12-24T13:45:31.068 [DEBUG] [Thread-303151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:45:31.083 [DEBUG] [Thread-303151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:45:31.083 [INFO] [Thread-303151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:45:31.091 [DEBUG] [Thread-303151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:45:31.091 [DEBUG] [Thread-303151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:45:31.091 [DEBUG] [Thread-303151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] client lang: <none>
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] server lang: <none>
2025-12-24T13:45:31.092 [DEBUG] [Thread-303151] [transport.py] [_log()] kex follows: False
2025-12-24T13:45:31.093 [DEBUG] [Thread-303151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:45:31.093 [DEBUG] [Thread-303151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:45:31.093 [DEBUG] [Thread-303151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:45:31.093 [DEBUG] [Thread-303151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:45:31.094 [DEBUG] [Thread-303151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:45:31.094 [DEBUG] [Thread-303151] [transport.py] [_log()] Compression: none
2025-12-24T13:45:31.094 [DEBUG] [Thread-303151] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:45:31.155 [DEBUG] [Thread-303151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:45:31.155 [DEBUG] [Thread-303151] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:45:31.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:45:31.156 [DEBUG] [Thread-303151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:45:31.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:45:31.214 [DEBUG] [Thread-303151] [transport.py] [_log()] userauth is OK
2025-12-24T13:45:31.214 [DEBUG] [Thread-303151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:45:31.215 [DEBUG] [Thread-303151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:45:31.215 [DEBUG] [Thread-303151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:45:31.215 [DEBUG] [Thread-303151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:45:31.229 [INFO] [Thread-303151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:45:31.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:45:31.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:45:32.112 [DEBUG] [Thread-303151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:45:32.112 [DEBUG] [Thread-303151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:45:32.150 [DEBUG] [Thread-303151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:45:32.150 [DEBUG] [Thread-303151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:45:32.159 [DEBUG] [Thread-303151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:45:32.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:45: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')
2025-12-24T13:45:32.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:45:32.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:45:32.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:45:32.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:45:32.192 [DEBUG] [Thread-303151] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:45:34.303 [DEBUG] [Thread-303153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:45:49.443 [DEBUG] [Thread-303154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:46:02.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:46:02.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:46:02.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
2025-12-24T13:46:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 45, 36), 21.23, 25.23, 0.0, 6.76, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:46:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:45:36
2025-12-24T13:46:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:46:03.951 [DEBUG] [Thread-303155] [transport.py] [_log()] starting thread (client mode): 0xf5770400
2025-12-24T13:46:03.952 [DEBUG] [Thread-303155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:46:03.960 [DEBUG] [Thread-303155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:46:03.960 [INFO] [Thread-303155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:46:03.965 [DEBUG] [Thread-303155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] client lang: <none>
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] server lang: <none>
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] kex follows: False
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:46:03.966 [DEBUG] [Thread-303155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:46:03.967 [DEBUG] [Thread-303155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:46:03.967 [DEBUG] [Thread-303155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:46:03.967 [DEBUG] [Thread-303155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:46:03.967 [DEBUG] [Thread-303155] [transport.py] [_log()] Compression: none
2025-12-24T13:46:03.967 [DEBUG] [Thread-303155] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:46:03.999 [DEBUG] [Thread-303155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:46:04.002 [DEBUG] [Thread-303155] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:46:04.004 [DEBUG] [Thread-303155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:46:04.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:46:04.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:46:04.007 [DEBUG] [Thread-303155] [transport.py] [_log()] userauth is OK
2025-12-24T13:46:04.007 [DEBUG] [Thread-303155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:46:04.007 [DEBUG] [Thread-303155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:46:04.007 [DEBUG] [Thread-303155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:46:04.007 [DEBUG] [Thread-303155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:46:04.025 [INFO] [Thread-303155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:46:04.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:46:04.542 [DEBUG] [Thread-303157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:46:04.697 [DEBUG] [Thread-303155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:46:04.697 [DEBUG] [Thread-303155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:46:04.699 [DEBUG] [Thread-303155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:46:04.738 [DEBUG] [Thread-303155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:46:04.738 [DEBUG] [Thread-303155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:46:04.742 [DEBUG] [Thread-303155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:46:04.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:46:04.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:46:04.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:46:04.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:46:04.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:46:04.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:46:04.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:46:04.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:46:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:46:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.489999 -999.00  +24.10   9.57     31   +5.90 1 1 1 1 1   888    0 19.78 33.74 ----- 9.6 9.6 110.6 15.5 32.6 -25.9 32.9 -26.3 33.5 -26.5 33.6 -25.6
2025-12-24T13:46:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:46:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:46:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.489999
2025-12-24T13:46:04.776 [DEBUG] [Thread-303155] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:46:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:46:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:46:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:46:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:46:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:46:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:45:36', tmtdew=21.23, humidity=25.23, cloud=0.0, wind=6.76, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:45:35.914', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:46:04.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:46:04.903 [DEBUG] [Thread-303159] [transport.py] [_log()] starting thread (client mode): 0xf81c1840
2025-12-24T13:46:04.903 [DEBUG] [Thread-303159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:46:04.918 [DEBUG] [Thread-303159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:46:04.918 [INFO] [Thread-303159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] client lang: <none>
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] server lang: <none>
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] kex follows: False
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] Compression: none
2025-12-24T13:46:04.926 [DEBUG] [Thread-303159] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:46:04.990 [DEBUG] [Thread-303159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:46:04.991 [DEBUG] [Thread-303159] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:46:04.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:46:04.992 [DEBUG] [Thread-303159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:46:04.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:46:05.049 [DEBUG] [Thread-303159] [transport.py] [_log()] userauth is OK
2025-12-24T13:46:05.050 [DEBUG] [Thread-303159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:46:05.050 [DEBUG] [Thread-303159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:46:05.050 [DEBUG] [Thread-303159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:46:05.050 [DEBUG] [Thread-303159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:46:05.069 [INFO] [Thread-303159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:46:05.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:46:05.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:46:05.951 [DEBUG] [Thread-303159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:46:05.952 [DEBUG] [Thread-303159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:46:05.990 [DEBUG] [Thread-303159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:46:05.990 [DEBUG] [Thread-303159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:46:05.999 [DEBUG] [Thread-303159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:46:06.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:46:06.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')
2025-12-24T13:46:06.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:46:06.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:46:06.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:46:06.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:46:06.038 [DEBUG] [Thread-303159] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:46:08.610 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:46:08.612 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:46:19.680 [DEBUG] [Thread-303161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:46:28.897 [DEBUG] [Thread-303162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:46:34.832 [DEBUG] [Thread-303163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:46:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:46:36.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:46:36.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:46:36.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 46, 8), 21.28, 25.17, 0.0, 8.49, 24.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:46:36.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:46:08
2025-12-24T13:46:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:46:37.305 [DEBUG] [Thread-303164] [transport.py] [_log()] starting thread (client mode): 0xf5740220
2025-12-24T13:46:37.305 [DEBUG] [Thread-303164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:46:37.308 [DEBUG] [Thread-303164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:46:37.308 [INFO] [Thread-303164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:46:37.311 [DEBUG] [Thread-303164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] client lang: <none>
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] server lang: <none>
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] kex follows: False
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:46:37.312 [DEBUG] [Thread-303164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:46:37.313 [DEBUG] [Thread-303164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:46:37.313 [DEBUG] [Thread-303164] [transport.py] [_log()] Compression: none
2025-12-24T13:46:37.313 [DEBUG] [Thread-303164] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:46:37.343 [DEBUG] [Thread-303164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:46:37.346 [DEBUG] [Thread-303164] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:46:37.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:46:37.348 [DEBUG] [Thread-303164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:46:37.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:46:37.350 [DEBUG] [Thread-303164] [transport.py] [_log()] userauth is OK
2025-12-24T13:46:37.350 [DEBUG] [Thread-303164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:46:37.350 [DEBUG] [Thread-303164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:46:37.350 [DEBUG] [Thread-303164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:46:37.350 [DEBUG] [Thread-303164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:46:37.368 [INFO] [Thread-303164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:46:37.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:46:38.022 [DEBUG] [Thread-303164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:46:38.022 [DEBUG] [Thread-303164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:46:38.023 [DEBUG] [Thread-303164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:46:38.063 [DEBUG] [Thread-303164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:46:38.064 [DEBUG] [Thread-303164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:46:38.065 [DEBUG] [Thread-303164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:46:38.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:46:38.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:46:38.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:46:38.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:46:38.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:46:38.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:46:38.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:46:38.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:46:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:46:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.490347 -999.00  +24.10  13.92     30   +5.70 1 1 1 1 1   888    0 19.13 27.24 ----- 13.9 13.9 57.8 14.6 32.4 -26.6 32.6 -27.9 33.3 -26.2 33.5 -26.9
2025-12-24T13:46:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:46:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:46:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.490347
2025-12-24T13:46:38.093 [DEBUG] [Thread-303164] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:46:38.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:46:38.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:46:38.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:46:38.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:46:38.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:46:38.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:46:08', tmtdew=21.28, humidity=25.17, cloud=0.0, wind=8.49, temperature=24.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:46:05.981', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:46:38.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:46:38.191 [DEBUG] [Thread-303167] [transport.py] [_log()] starting thread (client mode): 0xf5742f50
2025-12-24T13:46:38.191 [DEBUG] [Thread-303167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:46:38.205 [DEBUG] [Thread-303167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:46:38.205 [INFO] [Thread-303167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] client lang: <none>
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] server lang: <none>
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] kex follows: False
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] Compression: none
2025-12-24T13:46:38.213 [DEBUG] [Thread-303167] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:46:38.271 [DEBUG] [Thread-303167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:46:38.271 [DEBUG] [Thread-303167] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:46:38.271 [DEBUG] [Thread-303167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:46:38.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:46:38.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:46:38.329 [DEBUG] [Thread-303167] [transport.py] [_log()] userauth is OK
2025-12-24T13:46:38.329 [DEBUG] [Thread-303167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:46:38.329 [DEBUG] [Thread-303167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:46:38.329 [DEBUG] [Thread-303167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:46:38.329 [DEBUG] [Thread-303167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:46:38.342 [INFO] [Thread-303167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:46:38.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:46:38.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:46:39.194 [DEBUG] [Thread-303167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:46:39.194 [DEBUG] [Thread-303167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:46:39.232 [DEBUG] [Thread-303167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:46:39.233 [DEBUG] [Thread-303167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:46:39.241 [DEBUG] [Thread-303167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:46:39.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:46:39.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:46:39.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:46:39.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:46:39.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:46:39.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:46:39.274 [DEBUG] [Thread-303167] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:46:49.961 [DEBUG] [Thread-303169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:47:05.222 [DEBUG] [Thread-303170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:47:08.765 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:47:08.767 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:47:09.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:47:09.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:47: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
2025-12-24T13:47:10.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 46, 41), 21.02, 25.65, 0.0, 9.25, 23.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:47:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:46:41
2025-12-24T13:47:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:47:10.998 [DEBUG] [Thread-303171] [transport.py] [_log()] starting thread (client mode): 0xf81c17b0
2025-12-24T13:47:10.999 [DEBUG] [Thread-303171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:47:11.011 [DEBUG] [Thread-303171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:47:11.012 [INFO] [Thread-303171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] client lang: <none>
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] server lang: <none>
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] kex follows: False
2025-12-24T13:47:11.017 [DEBUG] [Thread-303171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:47:11.018 [DEBUG] [Thread-303171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:47:11.018 [DEBUG] [Thread-303171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:47:11.018 [DEBUG] [Thread-303171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:47:11.018 [DEBUG] [Thread-303171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:47:11.018 [DEBUG] [Thread-303171] [transport.py] [_log()] Compression: none
2025-12-24T13:47:11.018 [DEBUG] [Thread-303171] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:47:11.056 [DEBUG] [Thread-303171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:47:11.061 [DEBUG] [Thread-303171] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:47:11.063 [DEBUG] [Thread-303171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:47:11.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:47:11.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:47:11.068 [DEBUG] [Thread-303171] [transport.py] [_log()] userauth is OK
2025-12-24T13:47:11.068 [DEBUG] [Thread-303171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:47:11.069 [DEBUG] [Thread-303171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:47:11.069 [DEBUG] [Thread-303171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:47:11.069 [DEBUG] [Thread-303171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:47:11.097 [INFO] [Thread-303171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:47:11.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:47:11.945 [DEBUG] [Thread-303171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:47:11.945 [DEBUG] [Thread-303171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:47:11.946 [DEBUG] [Thread-303171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:47:11.986 [DEBUG] [Thread-303171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:47:11.986 [DEBUG] [Thread-303171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:47:11.989 [DEBUG] [Thread-303171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:47:12.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:47:12.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:47:12.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:47:12.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:47:12.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:47:12.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:47:12.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:47:12.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:47:12.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:47:12.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.490694 -999.00  +24.00   7.86     30   +5.70 1 1 1 1 1   888    0 19.34 21.26 ----- 7.9 7.9 84.2 17.1 31.9 -27.4 32.3 -27.7 33.0 -27.4 33.0 -26.7
2025-12-24T13:47:12.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:47:12.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:47:12.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.490694
2025-12-24T13:47:12.022 [DEBUG] [Thread-303171] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:47:12.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:47:12.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:47:12.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:47:12.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:47:12.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:47:12.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:46:41', tmtdew=21.02, humidity=25.65, cloud=0.0, wind=9.25, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:46:35.962', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:47:12.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:47:12.136 [DEBUG] [Thread-303174] [transport.py] [_log()] starting thread (client mode): 0xf57704f0
2025-12-24T13:47:12.136 [DEBUG] [Thread-303174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:47:12.151 [DEBUG] [Thread-303174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:47:12.151 [INFO] [Thread-303174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] client lang: <none>
2025-12-24T13:47:12.159 [DEBUG] [Thread-303174] [transport.py] [_log()] server lang: <none>
2025-12-24T13:47:12.160 [DEBUG] [Thread-303174] [transport.py] [_log()] kex follows: False
2025-12-24T13:47:12.160 [DEBUG] [Thread-303174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:47:12.160 [DEBUG] [Thread-303174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:47:12.160 [DEBUG] [Thread-303174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:47:12.160 [DEBUG] [Thread-303174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:47:12.160 [DEBUG] [Thread-303174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:47:12.160 [DEBUG] [Thread-303174] [transport.py] [_log()] Compression: none
2025-12-24T13:47:12.160 [DEBUG] [Thread-303174] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:47:12.216 [DEBUG] [Thread-303174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:47:12.216 [DEBUG] [Thread-303174] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:47:12.217 [DEBUG] [Thread-303174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:47:12.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:47:12.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:47:12.272 [DEBUG] [Thread-303174] [transport.py] [_log()] userauth is OK
2025-12-24T13:47:12.272 [DEBUG] [Thread-303174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:47:12.272 [DEBUG] [Thread-303174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:47:12.272 [DEBUG] [Thread-303174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:47:12.273 [DEBUG] [Thread-303174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:47:12.292 [INFO] [Thread-303174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:47:12.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:47:12.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:47:13.161 [DEBUG] [Thread-303174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:47:13.161 [DEBUG] [Thread-303174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:47:13.209 [DEBUG] [Thread-303174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:47:13.210 [DEBUG] [Thread-303174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:47:13.218 [DEBUG] [Thread-303174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:47:13.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:47:13.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:47:13.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:47:13.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:47:13.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:47:13.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:47:13.255 [DEBUG] [Thread-303174] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:47:20.333 [DEBUG] [Thread-303176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:47:29.193 [DEBUG] [Thread-303177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:47:35.464 [DEBUG] [Thread-303178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:47:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:47:43.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:47:43.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:47:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 47, 14), 20.9, 25.85, 0.0, 12.9, 23.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:47:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:47:14
2025-12-24T13:47:44.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:47:45.078 [DEBUG] [Thread-303179] [transport.py] [_log()] starting thread (client mode): 0xf81e58d0
2025-12-24T13:47:45.078 [DEBUG] [Thread-303179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:47:45.091 [DEBUG] [Thread-303179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:47:45.092 [INFO] [Thread-303179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:47:45.096 [DEBUG] [Thread-303179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] client lang: <none>
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] server lang: <none>
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] kex follows: False
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] Compression: none
2025-12-24T13:47:45.097 [DEBUG] [Thread-303179] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:47:45.130 [DEBUG] [Thread-303179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:47:45.133 [DEBUG] [Thread-303179] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:47:45.135 [DEBUG] [Thread-303179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:47:45.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:47:45.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:47:45.140 [DEBUG] [Thread-303179] [transport.py] [_log()] userauth is OK
2025-12-24T13:47:45.141 [DEBUG] [Thread-303179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:47:45.141 [DEBUG] [Thread-303179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:47:45.141 [DEBUG] [Thread-303179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:47:45.141 [DEBUG] [Thread-303179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:47:45.167 [INFO] [Thread-303179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:47:45.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:47:45.808 [DEBUG] [Thread-303179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:47:45.808 [DEBUG] [Thread-303179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:47:45.809 [DEBUG] [Thread-303179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:47:45.849 [DEBUG] [Thread-303179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:47:45.849 [DEBUG] [Thread-303179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:47:45.853 [DEBUG] [Thread-303179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:47:45.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:47:45.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:47:45.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:47:45.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:47:45.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:47:45.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:47:45.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:47:45.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:47:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:47:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.491041 -999.00  +23.80   9.24     31   +5.70 1 1 1 1 1   888    0 19.10 16.80 ----- 9.2 9.2 53.8 15.9 32.0 -26.2 32.2 -26.8 32.9 -26.0 33.0 -25.0
2025-12-24T13:47:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:47:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:47:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.491041
2025-12-24T13:47:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:47:45.892 [DEBUG] [Thread-303179] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:47:45.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:47:45.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:47:45.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:47:45.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:47:45.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:47:14', tmtdew=20.9, humidity=25.85, cloud=0.0, wind=12.9, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:47:05.942', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:47:45.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:47:45.981 [DEBUG] [Thread-303182] [transport.py] [_log()] starting thread (client mode): 0xf5772920
2025-12-24T13:47:45.982 [DEBUG] [Thread-303182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:47:45.996 [DEBUG] [Thread-303182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:47:45.996 [INFO] [Thread-303182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] client lang: <none>
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] server lang: <none>
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] kex follows: False
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] Compression: none
2025-12-24T13:47:46.004 [DEBUG] [Thread-303182] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:47:46.063 [DEBUG] [Thread-303182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:47:46.063 [DEBUG] [Thread-303182] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:47:46.064 [DEBUG] [Thread-303182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:47:46.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:47:46.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:47:46.119 [DEBUG] [Thread-303182] [transport.py] [_log()] userauth is OK
2025-12-24T13:47:46.119 [DEBUG] [Thread-303182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:47:46.119 [DEBUG] [Thread-303182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:47:46.119 [DEBUG] [Thread-303182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:47:46.119 [DEBUG] [Thread-303182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:47:46.135 [INFO] [Thread-303182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:47:46.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:47:46.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:47:46.975 [DEBUG] [Thread-303182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:47:46.975 [DEBUG] [Thread-303182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:47:47.023 [DEBUG] [Thread-303182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:47:47.023 [DEBUG] [Thread-303182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:47:47.032 [DEBUG] [Thread-303182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:47:47.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:47:47.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')
2025-12-24T13:47:47.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:47:47.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:47:47.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:47:47.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:47:47.065 [DEBUG] [Thread-303182] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:47:50.527 [DEBUG] [Thread-303184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:48:05.719 [DEBUG] [Thread-303185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:48:08.917 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:48:08.919 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:48:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:48:17.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:48: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
2025-12-24T13:48:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 47, 47), 20.76, 25.68, 0.0, 15.19, 24.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:48:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:47:47
2025-12-24T13:48:18.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:48:18.902 [DEBUG] [Thread-303186] [transport.py] [_log()] starting thread (client mode): 0xf5740e50
2025-12-24T13:48:18.903 [DEBUG] [Thread-303186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:48:18.917 [DEBUG] [Thread-303186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:48:18.917 [INFO] [Thread-303186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:48:18.921 [DEBUG] [Thread-303186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] client lang: <none>
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] server lang: <none>
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] kex follows: False
2025-12-24T13:48:18.922 [DEBUG] [Thread-303186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:48:18.923 [DEBUG] [Thread-303186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:48:18.923 [DEBUG] [Thread-303186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:48:18.923 [DEBUG] [Thread-303186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:48:18.923 [DEBUG] [Thread-303186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:48:18.923 [DEBUG] [Thread-303186] [transport.py] [_log()] Compression: none
2025-12-24T13:48:18.923 [DEBUG] [Thread-303186] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:48:18.961 [DEBUG] [Thread-303186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:48:18.965 [DEBUG] [Thread-303186] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:48:18.967 [DEBUG] [Thread-303186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:48:18.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:48:18.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:48:18.974 [DEBUG] [Thread-303186] [transport.py] [_log()] userauth is OK
2025-12-24T13:48:18.974 [DEBUG] [Thread-303186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:48:18.974 [DEBUG] [Thread-303186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:48:18.974 [DEBUG] [Thread-303186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:48:18.974 [DEBUG] [Thread-303186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:48:19.001 [INFO] [Thread-303186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:48:19.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:48:19.730 [DEBUG] [Thread-303186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:48:19.730 [DEBUG] [Thread-303186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:48:19.730 [DEBUG] [Thread-303186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:48:19.771 [DEBUG] [Thread-303186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:48:19.771 [DEBUG] [Thread-303186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:48:19.774 [DEBUG] [Thread-303186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:48:19.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:48:19.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:48:19.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:48:19.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:48:19.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:48:19.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:48:19.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:48:19.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:48:19.792 [DEBUG] [Thread-303186] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:48:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:48:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.491388 -999.00  +24.10  17.57     32   +6.50 1 1 1 1 1   888    0 18.57 10.13 ----- 17.6 17.6 127.2 19.8 31.9 -27.2 32.2 -26.4 32.5 -25.5 32.9 -23.7
2025-12-24T13:48:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:48:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:48:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.491388
2025-12-24T13:48:19.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:48:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:48:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:48:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:48:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:48:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:47:47', tmtdew=20.76, humidity=25.68, cloud=0.0, wind=15.19, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:47:35.923', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:48:19.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:48:19.902 [DEBUG] [Thread-303189] [transport.py] [_log()] starting thread (client mode): 0xf5750880
2025-12-24T13:48:19.902 [DEBUG] [Thread-303189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:48:19.917 [DEBUG] [Thread-303189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:48:19.917 [INFO] [Thread-303189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] client lang: <none>
2025-12-24T13:48:19.924 [DEBUG] [Thread-303189] [transport.py] [_log()] server lang: <none>
2025-12-24T13:48:19.925 [DEBUG] [Thread-303189] [transport.py] [_log()] kex follows: False
2025-12-24T13:48:19.925 [DEBUG] [Thread-303189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:48:19.925 [DEBUG] [Thread-303189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:48:19.925 [DEBUG] [Thread-303189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:48:19.925 [DEBUG] [Thread-303189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:48:19.925 [DEBUG] [Thread-303189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:48:19.925 [DEBUG] [Thread-303189] [transport.py] [_log()] Compression: none
2025-12-24T13:48:19.925 [DEBUG] [Thread-303189] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:48:19.987 [DEBUG] [Thread-303189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:48:19.987 [DEBUG] [Thread-303189] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:48:19.988 [DEBUG] [Thread-303189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:48:19.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:48:19.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:48:20.043 [DEBUG] [Thread-303189] [transport.py] [_log()] userauth is OK
2025-12-24T13:48:20.043 [DEBUG] [Thread-303189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:48:20.043 [DEBUG] [Thread-303189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:48:20.043 [DEBUG] [Thread-303189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:48:20.043 [DEBUG] [Thread-303189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:48:20.058 [INFO] [Thread-303189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:48:20.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:48:20.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:48:20.828 [DEBUG] [Thread-303191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:48:20.948 [DEBUG] [Thread-303189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:48:20.949 [DEBUG] [Thread-303189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:48:20.996 [DEBUG] [Thread-303189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:48:20.996 [DEBUG] [Thread-303189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:48:21.006 [DEBUG] [Thread-303189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:48:21.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:48:21.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:48:21.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:48:21.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:48:21.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:48:21.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:48:21.039 [DEBUG] [Thread-303189] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:48:29.448 [DEBUG] [Thread-303192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:48:35.975 [DEBUG] [Thread-303193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:48:51.061 [DEBUG] [Thread-303194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:48:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:48:51.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:48:51.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:48:52.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 48, 20), 20.49, 26.09, 0.0, 18.07, 23.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:48:52.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:48:20
2025-12-24T13:48:52.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:48:52.348 [DEBUG] [Thread-303195] [transport.py] [_log()] starting thread (client mode): 0xf81e6860
2025-12-24T13:48:52.349 [DEBUG] [Thread-303195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:48:52.362 [DEBUG] [Thread-303195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:48:52.362 [INFO] [Thread-303195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:48:52.369 [DEBUG] [Thread-303195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:48:52.369 [DEBUG] [Thread-303195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:48:52.369 [DEBUG] [Thread-303195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:48:52.369 [DEBUG] [Thread-303195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:48:52.369 [DEBUG] [Thread-303195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:48:52.369 [DEBUG] [Thread-303195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:48:52.369 [DEBUG] [Thread-303195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:48:52.370 [DEBUG] [Thread-303195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:48:52.370 [DEBUG] [Thread-303195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:48:52.370 [DEBUG] [Thread-303195] [transport.py] [_log()] client lang: <none>
2025-12-24T13:48:52.370 [DEBUG] [Thread-303195] [transport.py] [_log()] server lang: <none>
2025-12-24T13:48:52.370 [DEBUG] [Thread-303195] [transport.py] [_log()] kex follows: False
2025-12-24T13:48:52.370 [DEBUG] [Thread-303195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:48:52.371 [DEBUG] [Thread-303195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:48:52.371 [DEBUG] [Thread-303195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:48:52.371 [DEBUG] [Thread-303195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:48:52.371 [DEBUG] [Thread-303195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:48:52.372 [DEBUG] [Thread-303195] [transport.py] [_log()] Compression: none
2025-12-24T13:48:52.372 [DEBUG] [Thread-303195] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:48:52.408 [DEBUG] [Thread-303195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:48:52.411 [DEBUG] [Thread-303195] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:48:52.412 [DEBUG] [Thread-303195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:48:52.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:48:52.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:48:52.416 [DEBUG] [Thread-303195] [transport.py] [_log()] userauth is OK
2025-12-24T13:48:52.416 [DEBUG] [Thread-303195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:48:52.416 [DEBUG] [Thread-303195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:48:52.416 [DEBUG] [Thread-303195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:48:52.416 [DEBUG] [Thread-303195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:48:52.438 [INFO] [Thread-303195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:48:52.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:48:53.086 [DEBUG] [Thread-303195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:48:53.086 [DEBUG] [Thread-303195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:48:53.087 [DEBUG] [Thread-303195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:48:53.127 [DEBUG] [Thread-303195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:48:53.127 [DEBUG] [Thread-303195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:48:53.130 [DEBUG] [Thread-303195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:48:53.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:48:53.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:48:53.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:48:53.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:48:53.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:48:53.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:48:53.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:48:53.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:48:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:48:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.491736 -999.00  +23.70  25.03     32   +6.30 1 1 1 1 1   888    0 18.69 3.35 ----- 25.0 25.0 106.4 26.9 31.4 -26.3 31.9 -27.0 32.4 -26.1 32.4 -24.7
2025-12-24T13:48:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:48:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:48:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.491736
2025-12-24T13:48:53.160 [DEBUG] [Thread-303195] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:48:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:48:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:48:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:48:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:48:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:48:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:48:20', tmtdew=20.49, humidity=26.09, cloud=0.0, wind=18.07, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:48:05.990', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:48:53.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:48:53.259 [DEBUG] [Thread-303198] [transport.py] [_log()] starting thread (client mode): 0xf5770820
2025-12-24T13:48:53.259 [DEBUG] [Thread-303198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:48:53.275 [DEBUG] [Thread-303198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:48:53.275 [INFO] [Thread-303198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] client lang: <none>
2025-12-24T13:48:53.283 [DEBUG] [Thread-303198] [transport.py] [_log()] server lang: <none>
2025-12-24T13:48:53.284 [DEBUG] [Thread-303198] [transport.py] [_log()] kex follows: False
2025-12-24T13:48:53.284 [DEBUG] [Thread-303198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:48:53.284 [DEBUG] [Thread-303198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:48:53.284 [DEBUG] [Thread-303198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:48:53.284 [DEBUG] [Thread-303198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:48:53.284 [DEBUG] [Thread-303198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:48:53.284 [DEBUG] [Thread-303198] [transport.py] [_log()] Compression: none
2025-12-24T13:48:53.284 [DEBUG] [Thread-303198] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:48:53.341 [DEBUG] [Thread-303198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:48:53.341 [DEBUG] [Thread-303198] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:48:53.341 [DEBUG] [Thread-303198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:48:53.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:48:53.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:48:53.401 [DEBUG] [Thread-303198] [transport.py] [_log()] userauth is OK
2025-12-24T13:48:53.401 [DEBUG] [Thread-303198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:48:53.402 [DEBUG] [Thread-303198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:48:53.402 [DEBUG] [Thread-303198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:48:53.402 [DEBUG] [Thread-303198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:48:53.416 [INFO] [Thread-303198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:48:53.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:48:53.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:48:54.383 [DEBUG] [Thread-303198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:48:54.383 [DEBUG] [Thread-303198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:48:54.434 [DEBUG] [Thread-303198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:48:54.434 [DEBUG] [Thread-303198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:48:54.443 [DEBUG] [Thread-303198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:48:54.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:48:54.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:48:54.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:48:54.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:48:54.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:48:54.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:48:54.478 [DEBUG] [Thread-303198] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:49:06.155 [DEBUG] [Thread-303200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:49:09.063 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:49:09.065 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:49:21.278 [DEBUG] [Thread-303201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:49:24.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:49:24.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:49:24.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:49:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 48, 53), 20.42, 26.61, 0.0, 21.9, 23.78, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:49:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:48:53
2025-12-24T13:49:26.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:49:26.366 [DEBUG] [Thread-303202] [transport.py] [_log()] starting thread (client mode): 0xf81e6fe0
2025-12-24T13:49:26.366 [DEBUG] [Thread-303202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:49:26.368 [DEBUG] [Thread-303202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:49:26.368 [INFO] [Thread-303202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:49:26.372 [DEBUG] [Thread-303202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:49:26.372 [DEBUG] [Thread-303202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:49:26.372 [DEBUG] [Thread-303202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:49:26.372 [DEBUG] [Thread-303202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:49:26.372 [DEBUG] [Thread-303202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:49:26.372 [DEBUG] [Thread-303202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:49:26.372 [DEBUG] [Thread-303202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:49:26.372 [DEBUG] [Thread-303202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:49:26.373 [DEBUG] [Thread-303202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:49:26.373 [DEBUG] [Thread-303202] [transport.py] [_log()] client lang: <none>
2025-12-24T13:49:26.373 [DEBUG] [Thread-303202] [transport.py] [_log()] server lang: <none>
2025-12-24T13:49:26.373 [DEBUG] [Thread-303202] [transport.py] [_log()] kex follows: False
2025-12-24T13:49:26.373 [DEBUG] [Thread-303202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:49:26.373 [DEBUG] [Thread-303202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:49:26.373 [DEBUG] [Thread-303202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:49:26.373 [DEBUG] [Thread-303202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:49:26.374 [DEBUG] [Thread-303202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:49:26.374 [DEBUG] [Thread-303202] [transport.py] [_log()] Compression: none
2025-12-24T13:49:26.374 [DEBUG] [Thread-303202] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:49:26.405 [DEBUG] [Thread-303202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:49:26.409 [DEBUG] [Thread-303202] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:49:26.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:49:26.411 [DEBUG] [Thread-303202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:49:26.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:49:26.414 [DEBUG] [Thread-303202] [transport.py] [_log()] userauth is OK
2025-12-24T13:49:26.414 [DEBUG] [Thread-303202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:49:26.414 [DEBUG] [Thread-303202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:49:26.414 [DEBUG] [Thread-303202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:49:26.414 [DEBUG] [Thread-303202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:49:26.433 [INFO] [Thread-303202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:49:26.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:49:27.088 [DEBUG] [Thread-303202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:49:27.088 [DEBUG] [Thread-303202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:49:27.088 [DEBUG] [Thread-303202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:49:27.129 [DEBUG] [Thread-303202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:49:27.129 [DEBUG] [Thread-303202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:49:27.131 [DEBUG] [Thread-303202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:49:27.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:49:27.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:49:27.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:49:27.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:49:27.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:49:27.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:49:27.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:49:27.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:49:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:49:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.492083 -999.00  +23.80  18.49     32   +6.20 1 2 1 1 1   888    0 18.53 -2.62 ----- 18.5 18.5 143.8 23.6 32.0 -19.1 32.3 -21.4 32.4 -19.4 32.9 -18.9
2025-12-24T13:49:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:49:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:49:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.492083
2025-12-24T13:49:27.162 [DEBUG] [Thread-303202] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:49:27.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:49:27.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:49:27.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:49:27.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:49:27.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:49:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:48:53', tmtdew=20.42, humidity=26.61, cloud=0.0, wind=21.9, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:48:35.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:49:27.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:49:27.266 [DEBUG] [Thread-303205] [transport.py] [_log()] starting thread (client mode): 0xf81f3cd0
2025-12-24T13:49:27.266 [DEBUG] [Thread-303205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:49:27.281 [DEBUG] [Thread-303205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:49:27.281 [INFO] [Thread-303205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:49:27.288 [DEBUG] [Thread-303205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:49:27.288 [DEBUG] [Thread-303205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:49:27.288 [DEBUG] [Thread-303205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] client lang: <none>
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] server lang: <none>
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] kex follows: False
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] Compression: none
2025-12-24T13:49:27.289 [DEBUG] [Thread-303205] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:49:27.344 [DEBUG] [Thread-303205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:49:27.344 [DEBUG] [Thread-303205] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:49:27.344 [DEBUG] [Thread-303205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:49:27.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:49:27.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:49:27.401 [DEBUG] [Thread-303205] [transport.py] [_log()] userauth is OK
2025-12-24T13:49:27.401 [DEBUG] [Thread-303205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:49:27.401 [DEBUG] [Thread-303205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:49:27.401 [DEBUG] [Thread-303205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:49:27.401 [DEBUG] [Thread-303205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:49:27.415 [INFO] [Thread-303205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:49:27.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:49:27.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:49:28.391 [DEBUG] [Thread-303205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:49:28.391 [DEBUG] [Thread-303205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:49:28.440 [DEBUG] [Thread-303205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:49:28.440 [DEBUG] [Thread-303205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:49:28.449 [DEBUG] [Thread-303205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:49:28.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:49:28.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')
2025-12-24T13:49:28.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
2025-12-24T13:49:28.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:49:28.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:49:28.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:49:28.483 [DEBUG] [Thread-303205] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:49:29.668 [DEBUG] [Thread-303207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:49:36.368 [DEBUG] [Thread-303208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:49:51.504 [DEBUG] [Thread-303209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:49:58.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:49:58.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:49:58.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:50:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 49, 26), 20.16, 27.06, 0.0, 22.51, 23.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:50:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:49:26
2025-12-24T13:50:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:50:00.384 [DEBUG] [Thread-303210] [transport.py] [_log()] starting thread (client mode): 0xf57a9240
2025-12-24T13:50:00.385 [DEBUG] [Thread-303210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:50:00.395 [DEBUG] [Thread-303210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:50:00.396 [INFO] [Thread-303210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:50:00.402 [DEBUG] [Thread-303210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:50:00.402 [DEBUG] [Thread-303210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] client lang: <none>
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] server lang: <none>
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] kex follows: False
2025-12-24T13:50:00.403 [DEBUG] [Thread-303210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:50:00.404 [DEBUG] [Thread-303210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:50:00.404 [DEBUG] [Thread-303210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:50:00.404 [DEBUG] [Thread-303210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:50:00.404 [DEBUG] [Thread-303210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:50:00.404 [DEBUG] [Thread-303210] [transport.py] [_log()] Compression: none
2025-12-24T13:50:00.404 [DEBUG] [Thread-303210] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:50:00.442 [DEBUG] [Thread-303210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:50:00.447 [DEBUG] [Thread-303210] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:50:00.448 [DEBUG] [Thread-303210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:50:00.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:50:00.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:50:00.453 [DEBUG] [Thread-303210] [transport.py] [_log()] userauth is OK
2025-12-24T13:50:00.454 [DEBUG] [Thread-303210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:50:00.454 [DEBUG] [Thread-303210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:50:00.454 [DEBUG] [Thread-303210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:50:00.454 [DEBUG] [Thread-303210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:50:00.473 [INFO] [Thread-303210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:50:00.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:50:01.114 [DEBUG] [Thread-303210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:50:01.115 [DEBUG] [Thread-303210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:50:01.115 [DEBUG] [Thread-303210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:50:01.157 [DEBUG] [Thread-303210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:50:01.157 [DEBUG] [Thread-303210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:50:01.159 [DEBUG] [Thread-303210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:50:01.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:50:01.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:50:01.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:50:01.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:50:01.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:50:01.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:50:01.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:50:01.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:50:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:50:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.492777 -999.00  +23.50  24.36     32   +5.90 1 2 1 1 1   888    0 17.70 -10.98 ----- 24.4 24.4 118.4 27.8 31.8 -22.3 32.3 -20.3 33.0 -18.6 33.1 -17.7
2025-12-24T13:50:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:50:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:50:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.492777
2025-12-24T13:50:01.187 [DEBUG] [Thread-303210] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:50:01.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:50:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:50:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:50:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:50:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:50:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:49:26', tmtdew=20.16, humidity=27.06, cloud=0.0, wind=22.51, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:49:35.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:50:01.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:50:01.294 [DEBUG] [Thread-303213] [transport.py] [_log()] starting thread (client mode): 0xf81c2200
2025-12-24T13:50:01.294 [DEBUG] [Thread-303213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:50:01.312 [DEBUG] [Thread-303213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:50:01.312 [INFO] [Thread-303213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] client lang: <none>
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] server lang: <none>
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] kex follows: False
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] Compression: none
2025-12-24T13:50:01.320 [DEBUG] [Thread-303213] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:50:01.378 [DEBUG] [Thread-303213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:50:01.378 [DEBUG] [Thread-303213] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:50:01.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:50:01.379 [DEBUG] [Thread-303213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:50:01.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:50:01.441 [DEBUG] [Thread-303213] [transport.py] [_log()] userauth is OK
2025-12-24T13:50:01.441 [DEBUG] [Thread-303213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:50:01.441 [DEBUG] [Thread-303213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:50:01.441 [DEBUG] [Thread-303213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:50:01.441 [DEBUG] [Thread-303213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:50:01.456 [INFO] [Thread-303213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:50:01.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:50:01.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:50:02.312 [DEBUG] [Thread-303213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:50:02.312 [DEBUG] [Thread-303213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:50:02.360 [DEBUG] [Thread-303213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:50:02.360 [DEBUG] [Thread-303213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:50:02.368 [DEBUG] [Thread-303213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:50:02.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:50: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')
2025-12-24T13:50: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
2025-12-24T13:50:02.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:50:02.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:50:02.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:50:02.402 [DEBUG] [Thread-303213] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:50:06.591 [DEBUG] [Thread-303215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:50:09.204 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:50:09.205 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:50:21.855 [DEBUG] [Thread-303216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:50:29.945 [DEBUG] [Thread-303217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:50:32.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:50:32.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:50:32.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:50:33.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 49, 58), 20.23, 26.95, 0.0, 10.41, 23.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:50:33.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:49:58
2025-12-24T13:50:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:50:34.161 [DEBUG] [Thread-303218] [transport.py] [_log()] starting thread (client mode): 0xf81e4850
2025-12-24T13:50:34.162 [DEBUG] [Thread-303218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:50:34.173 [DEBUG] [Thread-303218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:50:34.173 [INFO] [Thread-303218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] client lang: <none>
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] server lang: <none>
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] kex follows: False
2025-12-24T13:50:34.178 [DEBUG] [Thread-303218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:50:34.179 [DEBUG] [Thread-303218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:50:34.179 [DEBUG] [Thread-303218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:50:34.179 [DEBUG] [Thread-303218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:50:34.179 [DEBUG] [Thread-303218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:50:34.179 [DEBUG] [Thread-303218] [transport.py] [_log()] Compression: none
2025-12-24T13:50:34.179 [DEBUG] [Thread-303218] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:50:34.212 [DEBUG] [Thread-303218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:50:34.215 [DEBUG] [Thread-303218] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:50:34.216 [DEBUG] [Thread-303218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:50:34.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:50:34.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:50:34.220 [DEBUG] [Thread-303218] [transport.py] [_log()] userauth is OK
2025-12-24T13:50:34.220 [DEBUG] [Thread-303218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:50:34.220 [DEBUG] [Thread-303218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:50:34.220 [DEBUG] [Thread-303218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:50:34.220 [DEBUG] [Thread-303218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:50:34.238 [INFO] [Thread-303218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:50:34.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:50:34.909 [DEBUG] [Thread-303218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:50:34.909 [DEBUG] [Thread-303218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:50:34.909 [DEBUG] [Thread-303218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:50:34.950 [DEBUG] [Thread-303218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:50:34.950 [DEBUG] [Thread-303218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:50:34.952 [DEBUG] [Thread-303218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:50:34.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:50:34.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:50:34.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:50:34.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:50:34.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:50:34.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:50:34.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:50:34.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:50:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:50:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.493124 -999.00  +23.70  13.98     31   +5.60 1 2 1 1 1   888    0 17.96 -12.93 ----- 14.0 14.0 127.4 22.4 32.1 -18.9 32.5 -20.6 33.0 -18.4 33.3 -18.6
2025-12-24T13:50:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:50:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:50:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.493124
2025-12-24T13:50:34.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:50:34.985 [DEBUG] [Thread-303218] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:50:34.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:50:34.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:50:34.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:50:34.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:50:34.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:49:58', tmtdew=20.23, humidity=26.95, cloud=0.0, wind=10.41, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:50:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:50:35.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:50:35.083 [DEBUG] [Thread-303221] [transport.py] [_log()] starting thread (client mode): 0xf81e45e0
2025-12-24T13:50:35.083 [DEBUG] [Thread-303221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:50:35.097 [DEBUG] [Thread-303221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:50:35.097 [INFO] [Thread-303221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:50:35.105 [DEBUG] [Thread-303221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:50:35.105 [DEBUG] [Thread-303221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] client lang: <none>
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] server lang: <none>
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] kex follows: False
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] Compression: none
2025-12-24T13:50:35.106 [DEBUG] [Thread-303221] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:50:35.163 [DEBUG] [Thread-303221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:50:35.164 [DEBUG] [Thread-303221] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:50:35.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:50:35.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:50:35.164 [DEBUG] [Thread-303221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:50:35.220 [DEBUG] [Thread-303221] [transport.py] [_log()] userauth is OK
2025-12-24T13:50:35.220 [DEBUG] [Thread-303221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:50:35.220 [DEBUG] [Thread-303221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:50:35.220 [DEBUG] [Thread-303221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:50:35.220 [DEBUG] [Thread-303221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:50:35.234 [INFO] [Thread-303221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:50:35.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:50:35.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:50:36.088 [DEBUG] [Thread-303221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:50:36.088 [DEBUG] [Thread-303221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:50:36.126 [DEBUG] [Thread-303221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:50:36.126 [DEBUG] [Thread-303221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:50:36.135 [DEBUG] [Thread-303221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:50:36.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:50:36.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:50:36.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:50:36.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:50:36.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:50:36.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:50:36.168 [DEBUG] [Thread-303221] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:50:36.940 [DEBUG] [Thread-303223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:50:52.013 [DEBUG] [Thread-303224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:51:06.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:51:06.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:51:06.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:51:07.056 [DEBUG] [Thread-303225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:51:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 50, 31), 20.15, 27.04, 0.0, 9.46, 23.35, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:51:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:50:31
2025-12-24T13:51:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:51:07.610 [DEBUG] [Thread-303226] [transport.py] [_log()] starting thread (client mode): 0xf57533a0
2025-12-24T13:51:07.610 [DEBUG] [Thread-303226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:51:07.624 [DEBUG] [Thread-303226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:51:07.624 [INFO] [Thread-303226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:51:07.628 [DEBUG] [Thread-303226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:51:07.628 [DEBUG] [Thread-303226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:51:07.628 [DEBUG] [Thread-303226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:51:07.628 [DEBUG] [Thread-303226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:51:07.628 [DEBUG] [Thread-303226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:51:07.628 [DEBUG] [Thread-303226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:51:07.628 [DEBUG] [Thread-303226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:51:07.628 [DEBUG] [Thread-303226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:51:07.629 [DEBUG] [Thread-303226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:51:07.629 [DEBUG] [Thread-303226] [transport.py] [_log()] client lang: <none>
2025-12-24T13:51:07.629 [DEBUG] [Thread-303226] [transport.py] [_log()] server lang: <none>
2025-12-24T13:51:07.629 [DEBUG] [Thread-303226] [transport.py] [_log()] kex follows: False
2025-12-24T13:51:07.629 [DEBUG] [Thread-303226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:51:07.629 [DEBUG] [Thread-303226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:51:07.629 [DEBUG] [Thread-303226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:51:07.630 [DEBUG] [Thread-303226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:51:07.630 [DEBUG] [Thread-303226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:51:07.630 [DEBUG] [Thread-303226] [transport.py] [_log()] Compression: none
2025-12-24T13:51:07.630 [DEBUG] [Thread-303226] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:51:07.660 [DEBUG] [Thread-303226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:51:07.663 [DEBUG] [Thread-303226] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:51:07.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:51:07.665 [DEBUG] [Thread-303226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:51:07.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:51:07.667 [DEBUG] [Thread-303226] [transport.py] [_log()] userauth is OK
2025-12-24T13:51:07.667 [DEBUG] [Thread-303226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:51:07.668 [DEBUG] [Thread-303226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:51:07.668 [DEBUG] [Thread-303226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:51:07.668 [DEBUG] [Thread-303226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:51:07.685 [INFO] [Thread-303226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:51:07.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:51:08.323 [DEBUG] [Thread-303226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:51:08.324 [DEBUG] [Thread-303226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:51:08.324 [DEBUG] [Thread-303226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:51:08.364 [DEBUG] [Thread-303226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:51:08.365 [DEBUG] [Thread-303226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:51:08.367 [DEBUG] [Thread-303226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:51:08.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:51:08.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:51:08.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:51:08.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:51:08.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:51:08.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:51:08.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:51:08.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:51:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:51:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.493472 -999.00  +23.70  11.48     31   +5.80 1 2 1 1 1   888    0 18.28 -14.23 ----- 11.5 11.5 109.0 13.7 32.6 -17.7 32.7 -20.1 33.2 -17.8 33.7 -16.6
2025-12-24T13:51:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:51:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:51:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.493472
2025-12-24T13:51:08.393 [DEBUG] [Thread-303226] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:51:08.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:51:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:51:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:51:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:51:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:51:08.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:50:31', tmtdew=20.15, humidity=27.04, cloud=0.0, wind=9.46, temperature=23.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:50:35.981', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:51:08.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:51:08.490 [DEBUG] [Thread-303229] [transport.py] [_log()] starting thread (client mode): 0xf5740610
2025-12-24T13:51:08.490 [DEBUG] [Thread-303229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:51:08.504 [DEBUG] [Thread-303229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:51:08.505 [INFO] [Thread-303229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:51:08.512 [DEBUG] [Thread-303229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:51:08.512 [DEBUG] [Thread-303229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:51:08.512 [DEBUG] [Thread-303229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:51:08.512 [DEBUG] [Thread-303229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:51:08.512 [DEBUG] [Thread-303229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] client lang: <none>
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] server lang: <none>
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] kex follows: False
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:51:08.513 [DEBUG] [Thread-303229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:51:08.514 [DEBUG] [Thread-303229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:51:08.514 [DEBUG] [Thread-303229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:51:08.514 [DEBUG] [Thread-303229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:51:08.514 [DEBUG] [Thread-303229] [transport.py] [_log()] Compression: none
2025-12-24T13:51:08.514 [DEBUG] [Thread-303229] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:51:08.572 [DEBUG] [Thread-303229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:51:08.572 [DEBUG] [Thread-303229] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:51:08.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:51:08.573 [DEBUG] [Thread-303229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:51:08.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:51:08.631 [DEBUG] [Thread-303229] [transport.py] [_log()] userauth is OK
2025-12-24T13:51:08.632 [DEBUG] [Thread-303229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:51:08.632 [DEBUG] [Thread-303229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:51:08.632 [DEBUG] [Thread-303229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:51:08.632 [DEBUG] [Thread-303229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:51:08.652 [INFO] [Thread-303229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:51:08.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:51:08.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:51:09.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:51:09.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:51:09.535 [DEBUG] [Thread-303229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:51:09.535 [DEBUG] [Thread-303229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:51:09.583 [DEBUG] [Thread-303229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:51:09.583 [DEBUG] [Thread-303229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:51:09.592 [DEBUG] [Thread-303229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:51:09.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:51:09.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:51:09.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:51:09.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:51:09.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:51:09.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:51:09.627 [DEBUG] [Thread-303229] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:51:22.108 [DEBUG] [Thread-303231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:51:30.271 [DEBUG] [Thread-303232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:51:37.249 [DEBUG] [Thread-303233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:51:39.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:51:39.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:51:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:51:40.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 51, 4), 20.04, 27.23, 0.0, 10.75, 23.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:51:40.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:51:04
2025-12-24T13:51:40.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:51:40.830 [DEBUG] [Thread-303234] [transport.py] [_log()] starting thread (client mode): 0xf572ddb0
2025-12-24T13:51:40.830 [DEBUG] [Thread-303234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:51:40.843 [DEBUG] [Thread-303234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:51:40.843 [INFO] [Thread-303234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:51:40.848 [DEBUG] [Thread-303234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] client lang: <none>
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] server lang: <none>
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] kex follows: False
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:51:40.849 [DEBUG] [Thread-303234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:51:40.850 [DEBUG] [Thread-303234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:51:40.850 [DEBUG] [Thread-303234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:51:40.850 [DEBUG] [Thread-303234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:51:40.850 [DEBUG] [Thread-303234] [transport.py] [_log()] Compression: none
2025-12-24T13:51:40.850 [DEBUG] [Thread-303234] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:51:40.883 [DEBUG] [Thread-303234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:51:40.886 [DEBUG] [Thread-303234] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:51:40.887 [DEBUG] [Thread-303234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:51:40.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:51:40.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:51:40.890 [DEBUG] [Thread-303234] [transport.py] [_log()] userauth is OK
2025-12-24T13:51:40.890 [DEBUG] [Thread-303234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:51:40.891 [DEBUG] [Thread-303234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:51:40.891 [DEBUG] [Thread-303234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:51:40.891 [DEBUG] [Thread-303234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:51:40.920 [INFO] [Thread-303234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:51:40.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:51:41.581 [DEBUG] [Thread-303234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:51:41.581 [DEBUG] [Thread-303234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:51:41.584 [DEBUG] [Thread-303234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:51:41.622 [DEBUG] [Thread-303234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:51:41.623 [DEBUG] [Thread-303234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:51:41.627 [DEBUG] [Thread-303234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:51:41.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:51:41.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:51:41.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:51:41.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:51:41.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:51:41.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:51:41.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:51:41.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:51:41.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:51:41.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.493819 -999.00  +23.80  14.11     33   +6.60 1 2 1 1 1   888    0 17.87 -16.65 ----- 14.1 14.1 135.6 21.7 32.4 -21.6 32.5 -24.1 33.5 -20.0 33.6 -20.1
2025-12-24T13:51:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:51:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:51:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.493819
2025-12-24T13:51:41.662 [DEBUG] [Thread-303234] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:51:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:51:41.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:51:41.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:51:41.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:51:41.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:51:41.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:51:04', tmtdew=20.04, humidity=27.23, cloud=0.0, wind=10.75, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:51:05.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:51:41.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:51:41.778 [DEBUG] [Thread-303237] [transport.py] [_log()] starting thread (client mode): 0xf572e170
2025-12-24T13:51:41.778 [DEBUG] [Thread-303237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:51:41.792 [DEBUG] [Thread-303237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:51:41.792 [INFO] [Thread-303237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] client lang: <none>
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] server lang: <none>
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] kex follows: False
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] Compression: none
2025-12-24T13:51:41.801 [DEBUG] [Thread-303237] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:51:41.857 [DEBUG] [Thread-303237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:51:41.858 [DEBUG] [Thread-303237] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:51:41.858 [DEBUG] [Thread-303237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:51:41.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:51:41.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:51:41.916 [DEBUG] [Thread-303237] [transport.py] [_log()] userauth is OK
2025-12-24T13:51:41.916 [DEBUG] [Thread-303237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:51:41.916 [DEBUG] [Thread-303237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:51:41.916 [DEBUG] [Thread-303237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:51:41.916 [DEBUG] [Thread-303237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:51:41.929 [INFO] [Thread-303237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:51:41.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:51:41.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:51:42.754 [DEBUG] [Thread-303237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:51:42.754 [DEBUG] [Thread-303237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:51:42.802 [DEBUG] [Thread-303237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:51:42.802 [DEBUG] [Thread-303237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:51:42.811 [DEBUG] [Thread-303237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:51:42.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:51:42.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:51:42.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
2025-12-24T13:51:42.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:51:42.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:51:42.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:51:42.847 [DEBUG] [Thread-303237] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:51:52.357 [DEBUG] [Thread-303239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:52:07.481 [DEBUG] [Thread-303240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:52:09.493 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:52:09.495 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:52:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:52:12.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:52:12.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
2025-12-24T13:52:14.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 51, 37), 19.96, 27.31, 0.0, 23.47, 23.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:52:14.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:51:37
2025-12-24T13:52:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:52:14.428 [DEBUG] [Thread-303241] [transport.py] [_log()] starting thread (client mode): 0xf81f2860
2025-12-24T13:52:14.429 [DEBUG] [Thread-303241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:52:14.435 [DEBUG] [Thread-303241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:52:14.435 [INFO] [Thread-303241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] client lang: <none>
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] server lang: <none>
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] kex follows: False
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:52:14.439 [DEBUG] [Thread-303241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:52:14.440 [DEBUG] [Thread-303241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:52:14.440 [DEBUG] [Thread-303241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:52:14.440 [DEBUG] [Thread-303241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:52:14.440 [DEBUG] [Thread-303241] [transport.py] [_log()] Compression: none
2025-12-24T13:52:14.440 [DEBUG] [Thread-303241] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:52:14.472 [DEBUG] [Thread-303241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:52:14.475 [DEBUG] [Thread-303241] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:52:14.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:52:14.478 [DEBUG] [Thread-303241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:52:14.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:52:14.517 [DEBUG] [Thread-303241] [transport.py] [_log()] userauth is OK
2025-12-24T13:52:14.517 [DEBUG] [Thread-303241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:52:14.517 [DEBUG] [Thread-303241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:52:14.517 [DEBUG] [Thread-303241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:52:14.518 [DEBUG] [Thread-303241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:52:14.556 [INFO] [Thread-303241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:52:14.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:52:15.196 [DEBUG] [Thread-303241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:52:15.196 [DEBUG] [Thread-303241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:52:15.198 [DEBUG] [Thread-303241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:52:15.237 [DEBUG] [Thread-303241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:52:15.237 [DEBUG] [Thread-303241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:52:15.241 [DEBUG] [Thread-303241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:52:15.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:52:15.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:52:15.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:52:15.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:52:15.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:52:15.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:52:15.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:52:15.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:52:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:52:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.494166 -999.00  +24.40  16.35     31   +6.40 1 2 1 1 1   888    0 17.52 -20.09 ----- 16.4 16.4 129.2 28.0 32.4 -19.7 32.5 -21.2 33.1 -24.0 33.5 -19.9
2025-12-24T13:52:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:52:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:52:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.494166
2025-12-24T13:52:15.275 [DEBUG] [Thread-303241] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:52:15.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:52:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:52:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:52:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:52:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:52:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:51:37', tmtdew=19.96, humidity=27.31, cloud=0.0, wind=23.47, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:51:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:52:15.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:52:15.396 [DEBUG] [Thread-303244] [transport.py] [_log()] starting thread (client mode): 0xf57539a0
2025-12-24T13:52:15.396 [DEBUG] [Thread-303244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:52:15.410 [DEBUG] [Thread-303244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:52:15.410 [INFO] [Thread-303244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:52:15.417 [DEBUG] [Thread-303244] [transport.py] [_log()] client lang: <none>
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] server lang: <none>
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] kex follows: False
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] Compression: none
2025-12-24T13:52:15.418 [DEBUG] [Thread-303244] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:52:15.482 [DEBUG] [Thread-303244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:52:15.483 [DEBUG] [Thread-303244] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:52:15.483 [DEBUG] [Thread-303244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:52:15.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:52:15.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:52:15.539 [DEBUG] [Thread-303244] [transport.py] [_log()] userauth is OK
2025-12-24T13:52:15.540 [DEBUG] [Thread-303244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:52:15.540 [DEBUG] [Thread-303244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:52:15.540 [DEBUG] [Thread-303244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:52:15.540 [DEBUG] [Thread-303244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:52:15.558 [INFO] [Thread-303244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:52:15.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:52:15.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:52:16.434 [DEBUG] [Thread-303244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:52:16.434 [DEBUG] [Thread-303244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:52:16.482 [DEBUG] [Thread-303244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:52:16.482 [DEBUG] [Thread-303244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:52:16.491 [DEBUG] [Thread-303244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:52:16.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:52:16.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:52:16.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:52:16.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:52:16.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:52:16.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:52:16.527 [DEBUG] [Thread-303244] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:52:22.515 [DEBUG] [Thread-303246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:52:30.498 [DEBUG] [Thread-303247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:52:37.594 [DEBUG] [Thread-303248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:52:46.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:52:46.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:52:46.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:52:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 52, 10), 20.33, 26.76, 0.0, 22.27, 24.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:52:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:52:10
2025-12-24T13:52:47.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:52:47.902 [DEBUG] [Thread-303249] [transport.py] [_log()] starting thread (client mode): 0xf81f2b60
2025-12-24T13:52:47.902 [DEBUG] [Thread-303249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:52:47.914 [DEBUG] [Thread-303249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:52:47.914 [INFO] [Thread-303249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:52:47.920 [DEBUG] [Thread-303249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:52:47.920 [DEBUG] [Thread-303249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:52:47.920 [DEBUG] [Thread-303249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:52:47.920 [DEBUG] [Thread-303249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] client lang: <none>
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] server lang: <none>
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] kex follows: False
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:52:47.921 [DEBUG] [Thread-303249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:52:47.922 [DEBUG] [Thread-303249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:52:47.922 [DEBUG] [Thread-303249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:52:47.922 [DEBUG] [Thread-303249] [transport.py] [_log()] Compression: none
2025-12-24T13:52:47.922 [DEBUG] [Thread-303249] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:52:47.950 [DEBUG] [Thread-303249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:52:47.955 [DEBUG] [Thread-303249] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:52:47.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:52:47.958 [DEBUG] [Thread-303249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:52:47.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:52:47.961 [DEBUG] [Thread-303249] [transport.py] [_log()] userauth is OK
2025-12-24T13:52:47.961 [DEBUG] [Thread-303249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:52:47.962 [DEBUG] [Thread-303249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:52:47.962 [DEBUG] [Thread-303249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:52:47.962 [DEBUG] [Thread-303249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:52:47.979 [INFO] [Thread-303249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:52:47.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:52:48.592 [DEBUG] [Thread-303249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:52:48.592 [DEBUG] [Thread-303249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:52:48.594 [DEBUG] [Thread-303249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:52:48.632 [DEBUG] [Thread-303249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:52:48.632 [DEBUG] [Thread-303249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:52:48.634 [DEBUG] [Thread-303249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:52:48.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:52:48.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:52:48.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:52:48.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:52:48.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:52:48.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:52:48.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:52:48.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:52:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:52:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.494513 -999.00  +23.90  17.47     32   +6.50 1 2 1 1 1   888    0 17.52 -23.73 ----- 17.5 17.5 113.7 25.6 32.4 -23.9 32.5 -22.6 33.3 -20.8 33.5 -21.4
2025-12-24T13:52:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:52:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:52:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.494513
2025-12-24T13:52:48.663 [DEBUG] [Thread-303249] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:52:48.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:52:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:52:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:52:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:52:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:52:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:52:10', tmtdew=20.33, humidity=26.76, cloud=0.0, wind=22.27, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:52:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:52:48.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:52:48.760 [DEBUG] [Thread-303252] [transport.py] [_log()] starting thread (client mode): 0xf81f3e80
2025-12-24T13:52:48.760 [DEBUG] [Thread-303252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:52:48.777 [DEBUG] [Thread-303252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:52:48.778 [INFO] [Thread-303252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:52:48.785 [DEBUG] [Thread-303252] [transport.py] [_log()] client lang: <none>
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] server lang: <none>
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] kex follows: False
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] Compression: none
2025-12-24T13:52:48.786 [DEBUG] [Thread-303252] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:52:48.843 [DEBUG] [Thread-303252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:52:48.843 [DEBUG] [Thread-303252] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:52:48.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:52:48.844 [DEBUG] [Thread-303252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:52:48.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:52:48.902 [DEBUG] [Thread-303252] [transport.py] [_log()] userauth is OK
2025-12-24T13:52:48.903 [DEBUG] [Thread-303252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:52:48.903 [DEBUG] [Thread-303252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:52:48.903 [DEBUG] [Thread-303252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:52:48.903 [DEBUG] [Thread-303252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:52:48.923 [INFO] [Thread-303252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:52:48.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:52:48.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:52:49.822 [DEBUG] [Thread-303252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:52:49.822 [DEBUG] [Thread-303252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:52:49.861 [DEBUG] [Thread-303252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:52:49.861 [DEBUG] [Thread-303252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:52:49.870 [DEBUG] [Thread-303252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:52:49.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:52:49.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:52:49.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:52:49.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:52:49.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:52:49.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:52:49.903 [DEBUG] [Thread-303252] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:52:52.652 [DEBUG] [Thread-303254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:53:07.766 [DEBUG] [Thread-303255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:53:09.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:53:09.638 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:53:19.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:53:19.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:53:19.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:53:20.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 52, 44), 20.61, 26.18, 0.0, 16.52, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:53:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:52:44
2025-12-24T13:53:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:53:21.269 [DEBUG] [Thread-303256] [transport.py] [_log()] starting thread (client mode): 0xf572cee0
2025-12-24T13:53:21.270 [DEBUG] [Thread-303256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:53:21.275 [DEBUG] [Thread-303256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:53:21.275 [INFO] [Thread-303256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:53:21.278 [DEBUG] [Thread-303256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] client lang: <none>
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] server lang: <none>
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] kex follows: False
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:53:21.279 [DEBUG] [Thread-303256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:53:21.280 [DEBUG] [Thread-303256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:53:21.280 [DEBUG] [Thread-303256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:53:21.280 [DEBUG] [Thread-303256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:53:21.280 [DEBUG] [Thread-303256] [transport.py] [_log()] Compression: none
2025-12-24T13:53:21.280 [DEBUG] [Thread-303256] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:53:21.315 [DEBUG] [Thread-303256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:53:21.319 [DEBUG] [Thread-303256] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:53:21.321 [DEBUG] [Thread-303256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:53:21.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:53:21.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:53:21.327 [DEBUG] [Thread-303256] [transport.py] [_log()] userauth is OK
2025-12-24T13:53:21.327 [DEBUG] [Thread-303256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:53:21.328 [DEBUG] [Thread-303256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:53:21.328 [DEBUG] [Thread-303256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:53:21.328 [DEBUG] [Thread-303256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:53:21.357 [INFO] [Thread-303256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:53:21.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:53:21.980 [DEBUG] [Thread-303256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:53:21.980 [DEBUG] [Thread-303256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:53:21.980 [DEBUG] [Thread-303256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:53:22.021 [DEBUG] [Thread-303256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:53:22.021 [DEBUG] [Thread-303256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:53:22.024 [DEBUG] [Thread-303256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:53:22.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:53:22.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:53:22.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:53:22.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:53:22.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:53:22.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:53:22.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:53:22.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:53:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:53:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.494860 -999.00  +23.60  13.33     33   +6.50 1 1 1 1 1   888    0 17.50 -31.45 ----- 13.3 13.3 104.6 26.4 31.4 -25.0 32.0 -25.7 32.9 -25.0 33.0 -24.3
2025-12-24T13:53:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:53:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:53:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.494860
2025-12-24T13:53:22.055 [DEBUG] [Thread-303256] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:53:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:53:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:53:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:53:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:53:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:53:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:52:44', tmtdew=20.61, humidity=26.18, cloud=0.0, wind=16.52, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:52:35.904', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:53:22.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:53:22.168 [DEBUG] [Thread-303259] [transport.py] [_log()] starting thread (client mode): 0xf572f730
2025-12-24T13:53:22.168 [DEBUG] [Thread-303259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:53:22.182 [DEBUG] [Thread-303259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:53:22.182 [INFO] [Thread-303259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:53:22.190 [DEBUG] [Thread-303259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:53:22.190 [DEBUG] [Thread-303259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] client lang: <none>
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] server lang: <none>
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] kex follows: False
2025-12-24T13:53:22.191 [DEBUG] [Thread-303259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:53:22.192 [DEBUG] [Thread-303259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:53:22.192 [DEBUG] [Thread-303259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:53:22.192 [DEBUG] [Thread-303259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:53:22.192 [DEBUG] [Thread-303259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:53:22.192 [DEBUG] [Thread-303259] [transport.py] [_log()] Compression: none
2025-12-24T13:53:22.192 [DEBUG] [Thread-303259] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:53:22.249 [DEBUG] [Thread-303259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:53:22.249 [DEBUG] [Thread-303259] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:53:22.249 [DEBUG] [Thread-303259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:53:22.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:53:22.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:53:22.306 [DEBUG] [Thread-303259] [transport.py] [_log()] userauth is OK
2025-12-24T13:53:22.306 [DEBUG] [Thread-303259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:53:22.307 [DEBUG] [Thread-303259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:53:22.307 [DEBUG] [Thread-303259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:53:22.307 [DEBUG] [Thread-303259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:53:22.329 [INFO] [Thread-303259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:53:22.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:53:22.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:53:22.876 [DEBUG] [Thread-303261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:53:23.158 [DEBUG] [Thread-303259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:53:23.158 [DEBUG] [Thread-303259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:53:23.204 [DEBUG] [Thread-303259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:53:23.205 [DEBUG] [Thread-303259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:53:23.213 [DEBUG] [Thread-303259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:53:23.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:53:23.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:53:23.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:53:23.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:53:23.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:53:23.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:53:23.292 [DEBUG] [Thread-303259] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:53:30.786 [DEBUG] [Thread-303262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:53:38.063 [DEBUG] [Thread-303263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:53:53.232 [DEBUG] [Thread-303264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:53:53.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:53:53.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:53:53.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:53:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 53, 17), 20.18, 26.84, 0.0, 14.88, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:53:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:53:17
2025-12-24T13:53:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:53:54.659 [DEBUG] [Thread-303265] [transport.py] [_log()] starting thread (client mode): 0xf57aa9e0
2025-12-24T13:53:54.659 [DEBUG] [Thread-303265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:53:54.673 [DEBUG] [Thread-303265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:53:54.673 [INFO] [Thread-303265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:53:54.678 [DEBUG] [Thread-303265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] client lang: <none>
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] server lang: <none>
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] kex follows: False
2025-12-24T13:53:54.679 [DEBUG] [Thread-303265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:53:54.680 [DEBUG] [Thread-303265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:53:54.680 [DEBUG] [Thread-303265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:53:54.680 [DEBUG] [Thread-303265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:53:54.680 [DEBUG] [Thread-303265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:53:54.680 [DEBUG] [Thread-303265] [transport.py] [_log()] Compression: none
2025-12-24T13:53:54.680 [DEBUG] [Thread-303265] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:53:54.715 [DEBUG] [Thread-303265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:53:54.719 [DEBUG] [Thread-303265] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:53:54.721 [DEBUG] [Thread-303265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:53:54.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:53:54.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:53:54.726 [DEBUG] [Thread-303265] [transport.py] [_log()] userauth is OK
2025-12-24T13:53:54.726 [DEBUG] [Thread-303265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:53:54.727 [DEBUG] [Thread-303265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:53:54.727 [DEBUG] [Thread-303265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:53:54.727 [DEBUG] [Thread-303265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:53:54.759 [INFO] [Thread-303265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:53:54.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:53:55.398 [DEBUG] [Thread-303265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:53:55.398 [DEBUG] [Thread-303265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:53:55.402 [DEBUG] [Thread-303265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:53:55.439 [DEBUG] [Thread-303265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:53:55.439 [DEBUG] [Thread-303265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:53:55.443 [DEBUG] [Thread-303265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:53:55.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:53:55.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:53:55.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:53:55.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:53:55.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:53:55.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:53:55.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:53:55.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:53:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:53:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.495208 -999.00  +23.60  12.22     33   +6.60 1 1 1 1 1   888    0 17.01 -40.54 ----- 12.2 12.2 90.5 23.1 31.3 -24.0 31.8 -24.4 32.6 -25.0 32.8 -22.9
2025-12-24T13:53:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:53:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:53:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.495208
2025-12-24T13:53:55.479 [DEBUG] [Thread-303265] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:53:55.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:53:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:53:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:53:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:53:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T13:53:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:53:17', tmtdew=20.18, humidity=26.84, cloud=0.0, wind=14.88, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:53:05.971', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:53:55.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:53:55.579 [DEBUG] [Thread-303268] [transport.py] [_log()] starting thread (client mode): 0xf57a8670
2025-12-24T13:53:55.579 [DEBUG] [Thread-303268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:53:55.594 [DEBUG] [Thread-303268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:53:55.594 [INFO] [Thread-303268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] client lang: <none>
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] server lang: <none>
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] kex follows: False
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] Compression: none
2025-12-24T13:53:55.602 [DEBUG] [Thread-303268] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:53:55.660 [DEBUG] [Thread-303268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:53:55.660 [DEBUG] [Thread-303268] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:53:55.660 [DEBUG] [Thread-303268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:53:55.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:53:55.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:53:55.718 [DEBUG] [Thread-303268] [transport.py] [_log()] userauth is OK
2025-12-24T13:53:55.718 [DEBUG] [Thread-303268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:53:55.718 [DEBUG] [Thread-303268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:53:55.718 [DEBUG] [Thread-303268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:53:55.718 [DEBUG] [Thread-303268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:53:55.738 [INFO] [Thread-303268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:53:55.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:53:55.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:53:56.560 [DEBUG] [Thread-303268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:53:56.561 [DEBUG] [Thread-303268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:53:56.607 [DEBUG] [Thread-303268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:53:56.607 [DEBUG] [Thread-303268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:53:56.616 [DEBUG] [Thread-303268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:53:56.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:53:56.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:53:56.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:53:56.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:53:56.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:53:56.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:53:56.652 [DEBUG] [Thread-303268] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:54:08.328 [DEBUG] [Thread-303270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:54:09.786 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:54:09.787 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:54:23.423 [DEBUG] [Thread-303271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:54:26.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:54:26.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:54:26.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:54:27.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 53, 50), 19.77, 27.88, 0.0, 25.11, 23.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:54:27.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:53:50
2025-12-24T13:54:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:54:27.978 [DEBUG] [Thread-303272] [transport.py] [_log()] starting thread (client mode): 0xf572ccd0
2025-12-24T13:54:27.979 [DEBUG] [Thread-303272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:54:27.986 [DEBUG] [Thread-303272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:54:27.986 [INFO] [Thread-303272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] client lang: <none>
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] server lang: <none>
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] kex follows: False
2025-12-24T13:54:27.992 [DEBUG] [Thread-303272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:54:27.993 [DEBUG] [Thread-303272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:54:27.993 [DEBUG] [Thread-303272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:54:27.993 [DEBUG] [Thread-303272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:54:27.993 [DEBUG] [Thread-303272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:54:27.993 [DEBUG] [Thread-303272] [transport.py] [_log()] Compression: none
2025-12-24T13:54:27.993 [DEBUG] [Thread-303272] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:54:28.027 [DEBUG] [Thread-303272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:54:28.031 [DEBUG] [Thread-303272] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:54:28.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:54:28.034 [DEBUG] [Thread-303272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:54:28.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:54:28.037 [DEBUG] [Thread-303272] [transport.py] [_log()] userauth is OK
2025-12-24T13:54:28.037 [DEBUG] [Thread-303272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:54:28.037 [DEBUG] [Thread-303272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:54:28.037 [DEBUG] [Thread-303272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:54:28.037 [DEBUG] [Thread-303272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:54:28.059 [INFO] [Thread-303272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:54:28.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:54:28.894 [DEBUG] [Thread-303272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:54:28.894 [DEBUG] [Thread-303272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:54:28.895 [DEBUG] [Thread-303272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:54:28.936 [DEBUG] [Thread-303272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:54:28.936 [DEBUG] [Thread-303272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:54:28.942 [DEBUG] [Thread-303272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:54:28.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:54:28.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:54:28.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:54:28.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:54:28.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:54:28.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:54:28.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:54:28.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:54:28.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:54:28.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.495555 -999.00  +23.50  13.87     33   +6.60 1 2 1 1 1   888    0 16.51 -49.22 ----- 13.9 13.9 122.7 22.3 31.6 -17.9 31.9 -20.7 32.4 -24.3 32.8 -17.6
2025-12-24T13:54:28.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:54:28.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:54:28.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.495555
2025-12-24T13:54:28.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:54:28.979 [DEBUG] [Thread-303272] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:54:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:54:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:54:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:54:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:54:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:53:50', tmtdew=19.77, humidity=27.88, cloud=0.0, wind=25.11, temperature=23.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:53:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:54:29.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:54:29.075 [DEBUG] [Thread-303275] [transport.py] [_log()] starting thread (client mode): 0xf572fb50
2025-12-24T13:54:29.075 [DEBUG] [Thread-303275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:54:29.089 [DEBUG] [Thread-303275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:54:29.089 [INFO] [Thread-303275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] client lang: <none>
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] server lang: <none>
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] kex follows: False
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:54:29.097 [DEBUG] [Thread-303275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:54:29.098 [DEBUG] [Thread-303275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:54:29.098 [DEBUG] [Thread-303275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:54:29.098 [DEBUG] [Thread-303275] [transport.py] [_log()] Compression: none
2025-12-24T13:54:29.098 [DEBUG] [Thread-303275] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:54:29.156 [DEBUG] [Thread-303275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:54:29.156 [DEBUG] [Thread-303275] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:54:29.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:54:29.156 [DEBUG] [Thread-303275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:54:29.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:54:29.217 [DEBUG] [Thread-303275] [transport.py] [_log()] userauth is OK
2025-12-24T13:54:29.217 [DEBUG] [Thread-303275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:54:29.217 [DEBUG] [Thread-303275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:54:29.217 [DEBUG] [Thread-303275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:54:29.217 [DEBUG] [Thread-303275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:54:29.233 [INFO] [Thread-303275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:54:29.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:54:29.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:54:30.114 [DEBUG] [Thread-303275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:54:30.114 [DEBUG] [Thread-303275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:54:30.161 [DEBUG] [Thread-303275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:54:30.161 [DEBUG] [Thread-303275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:54:30.170 [DEBUG] [Thread-303275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:54:30.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:54:30.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:54:30.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:54:30.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:54:30.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:54:30.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:54:30.202 [DEBUG] [Thread-303275] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:54:31.037 [DEBUG] [Thread-303277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:54:38.521 [DEBUG] [Thread-303278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:54:53.691 [DEBUG] [Thread-303279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:55:00.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:55:00.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:55:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:55:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 54, 23), 19.93, 27.59, 0.0, 18.84, 23.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:55:01.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:54:23
2025-12-24T13:55:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:55:01.547 [DEBUG] [Thread-303280] [transport.py] [_log()] starting thread (client mode): 0xf5750100
2025-12-24T13:55:01.547 [DEBUG] [Thread-303280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:55:01.548 [DEBUG] [Thread-303280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:55:01.548 [INFO] [Thread-303280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] client lang: <none>
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] server lang: <none>
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] kex follows: False
2025-12-24T13:55:01.553 [DEBUG] [Thread-303280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:55:01.554 [DEBUG] [Thread-303280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:55:01.554 [DEBUG] [Thread-303280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:55:01.554 [DEBUG] [Thread-303280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:55:01.554 [DEBUG] [Thread-303280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:55:01.554 [DEBUG] [Thread-303280] [transport.py] [_log()] Compression: none
2025-12-24T13:55:01.554 [DEBUG] [Thread-303280] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:55:01.586 [DEBUG] [Thread-303280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:55:01.590 [DEBUG] [Thread-303280] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:55:01.592 [DEBUG] [Thread-303280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:55:01.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:55:01.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:55:01.596 [DEBUG] [Thread-303280] [transport.py] [_log()] userauth is OK
2025-12-24T13:55:01.597 [DEBUG] [Thread-303280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:55:01.597 [DEBUG] [Thread-303280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:55:01.597 [DEBUG] [Thread-303280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:55:01.597 [DEBUG] [Thread-303280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:55:01.624 [INFO] [Thread-303280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:55:01.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:55:02.234 [DEBUG] [Thread-303280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:55:02.234 [DEBUG] [Thread-303280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:55:02.234 [DEBUG] [Thread-303280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:55:02.275 [DEBUG] [Thread-303280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:55:02.275 [DEBUG] [Thread-303280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:55:02.276 [DEBUG] [Thread-303280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:55:02.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:55:02.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:55:02.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:55:02.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:55:02.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:55:02.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:55:02.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:55:02.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:55:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:55:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.496249 -999.00  +24.20  20.74     33   +6.90 1 2 1 1 1   888    0 16.44 -63.50 ----- 20.7 20.7 126.8 24.2 31.9 -17.9 32.2 -20.1 32.7 -17.7 33.1 -15.8
2025-12-24T13:55:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:55:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:55:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.496249
2025-12-24T13:55:02.304 [DEBUG] [Thread-303280] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:55:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:55:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:55:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:55:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:55:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:55:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:54:23', tmtdew=19.93, humidity=27.59, cloud=0.0, wind=18.84, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:54:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:55:02.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:55:02.403 [DEBUG] [Thread-303283] [transport.py] [_log()] starting thread (client mode): 0xf81e4c40
2025-12-24T13:55:02.404 [DEBUG] [Thread-303283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:55:02.418 [DEBUG] [Thread-303283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:55:02.418 [INFO] [Thread-303283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] client lang: <none>
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] server lang: <none>
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] kex follows: False
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] Compression: none
2025-12-24T13:55:02.426 [DEBUG] [Thread-303283] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:55:02.485 [DEBUG] [Thread-303283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:55:02.486 [DEBUG] [Thread-303283] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:55:02.487 [DEBUG] [Thread-303283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:55:02.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:55:02.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:55:02.540 [DEBUG] [Thread-303283] [transport.py] [_log()] userauth is OK
2025-12-24T13:55:02.540 [DEBUG] [Thread-303283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:55:02.540 [DEBUG] [Thread-303283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:55:02.540 [DEBUG] [Thread-303283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:55:02.540 [DEBUG] [Thread-303283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:55:02.555 [INFO] [Thread-303283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:55:02.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:55:02.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:55:03.428 [DEBUG] [Thread-303283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:55:03.428 [DEBUG] [Thread-303283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:55:03.475 [DEBUG] [Thread-303283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:55:03.475 [DEBUG] [Thread-303283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:55:03.483 [DEBUG] [Thread-303283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:55:03.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:55:03.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:55:03.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:55:03.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:55:03.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:55:03.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:55:03.519 [DEBUG] [Thread-303283] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:55:08.790 [DEBUG] [Thread-303285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:55:09.928 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:55:09.929 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:55:24.008 [DEBUG] [Thread-303286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:55:31.276 [DEBUG] [Thread-303287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:55:33.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:55:33.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:55:33.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:55:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 54, 56), 19.91, 27.51, 0.0, 18.33, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:55:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:54:56
2025-12-24T13:55:34.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:55:34.811 [DEBUG] [Thread-303288] [transport.py] [_log()] starting thread (client mode): 0xf572d5a0
2025-12-24T13:55:34.811 [DEBUG] [Thread-303288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:55:34.824 [DEBUG] [Thread-303288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:55:34.824 [INFO] [Thread-303288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:55:34.829 [DEBUG] [Thread-303288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:55:34.829 [DEBUG] [Thread-303288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:55:34.829 [DEBUG] [Thread-303288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:55:34.829 [DEBUG] [Thread-303288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:55:34.829 [DEBUG] [Thread-303288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:55:34.829 [DEBUG] [Thread-303288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:55:34.829 [DEBUG] [Thread-303288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:55:34.830 [DEBUG] [Thread-303288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:55:34.830 [DEBUG] [Thread-303288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:55:34.830 [DEBUG] [Thread-303288] [transport.py] [_log()] client lang: <none>
2025-12-24T13:55:34.830 [DEBUG] [Thread-303288] [transport.py] [_log()] server lang: <none>
2025-12-24T13:55:34.830 [DEBUG] [Thread-303288] [transport.py] [_log()] kex follows: False
2025-12-24T13:55:34.830 [DEBUG] [Thread-303288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:55:34.830 [DEBUG] [Thread-303288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:55:34.831 [DEBUG] [Thread-303288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:55:34.831 [DEBUG] [Thread-303288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:55:34.831 [DEBUG] [Thread-303288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:55:34.831 [DEBUG] [Thread-303288] [transport.py] [_log()] Compression: none
2025-12-24T13:55:34.831 [DEBUG] [Thread-303288] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:55:34.868 [DEBUG] [Thread-303288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:55:34.872 [DEBUG] [Thread-303288] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:55:34.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:55:34.874 [DEBUG] [Thread-303288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:55:34.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:55:34.878 [DEBUG] [Thread-303288] [transport.py] [_log()] userauth is OK
2025-12-24T13:55:34.878 [DEBUG] [Thread-303288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:55:34.878 [DEBUG] [Thread-303288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:55:34.878 [DEBUG] [Thread-303288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:55:34.878 [DEBUG] [Thread-303288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:55:34.907 [INFO] [Thread-303288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:55:34.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:55:35.581 [DEBUG] [Thread-303288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:55:35.581 [DEBUG] [Thread-303288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:55:35.591 [DEBUG] [Thread-303288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:55:35.622 [DEBUG] [Thread-303288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:55:35.622 [DEBUG] [Thread-303288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:55:35.626 [DEBUG] [Thread-303288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:55:35.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:55:35.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:55:35.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:55:35.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:55:35.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:55:35.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:55:35.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:55:35.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:55:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:55:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.496596 -999.00  +24.10  18.98     32   +6.80 1 2 1 1 1   888    0 15.87 -69.17 ----- 19.0 19.0 129.0 27.4 31.9 -18.2 32.0 -21.9 32.9 -18.8 33.1 -20.3
2025-12-24T13:55:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:55:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:55:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.496596
2025-12-24T13:55:35.660 [DEBUG] [Thread-303288] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:55:35.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:55:35.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:55:35.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:55:35.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:55:35.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:55:35.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:54:56', tmtdew=19.91, humidity=27.51, cloud=0.0, wind=18.33, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:55:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:55:35.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:55:35.771 [DEBUG] [Thread-303291] [transport.py] [_log()] starting thread (client mode): 0xf57a8880
2025-12-24T13:55:35.771 [DEBUG] [Thread-303291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:55:35.785 [DEBUG] [Thread-303291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:55:35.786 [INFO] [Thread-303291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:55:35.793 [DEBUG] [Thread-303291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] client lang: <none>
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] server lang: <none>
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] kex follows: False
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] Compression: none
2025-12-24T13:55:35.794 [DEBUG] [Thread-303291] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:55:35.853 [DEBUG] [Thread-303291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:55:35.854 [DEBUG] [Thread-303291] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:55:35.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:55:35.855 [DEBUG] [Thread-303291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:55:35.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:55:35.913 [DEBUG] [Thread-303291] [transport.py] [_log()] userauth is OK
2025-12-24T13:55:35.913 [DEBUG] [Thread-303291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:55:35.913 [DEBUG] [Thread-303291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:55:35.913 [DEBUG] [Thread-303291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:55:35.914 [DEBUG] [Thread-303291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:55:35.938 [INFO] [Thread-303291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:55:35.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:55:35.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:55:36.774 [DEBUG] [Thread-303291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:55:36.774 [DEBUG] [Thread-303291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:55:36.813 [DEBUG] [Thread-303291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:55:36.813 [DEBUG] [Thread-303291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:55:36.822 [DEBUG] [Thread-303291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:55:36.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:55:36.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:55:36.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:55:36.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:55:36.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:55:36.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:55:36.855 [DEBUG] [Thread-303291] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:55:39.106 [DEBUG] [Thread-303293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:55:54.198 [DEBUG] [Thread-303294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:56:06.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:56:06.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:56:06.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
2025-12-24T13:56:07.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 55, 30), 19.75, 27.81, 0.0, 19.36, 23.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:56:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:55:30
2025-12-24T13:56:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:56:08.164 [DEBUG] [Thread-303295] [transport.py] [_log()] starting thread (client mode): 0xf81f18d0
2025-12-24T13:56:08.165 [DEBUG] [Thread-303295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:56:08.174 [DEBUG] [Thread-303295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:56:08.174 [INFO] [Thread-303295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] client lang: <none>
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] server lang: <none>
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] kex follows: False
2025-12-24T13:56:08.179 [DEBUG] [Thread-303295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:56:08.180 [DEBUG] [Thread-303295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:56:08.180 [DEBUG] [Thread-303295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:56:08.180 [DEBUG] [Thread-303295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:56:08.180 [DEBUG] [Thread-303295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:56:08.180 [DEBUG] [Thread-303295] [transport.py] [_log()] Compression: none
2025-12-24T13:56:08.180 [DEBUG] [Thread-303295] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:56:08.218 [DEBUG] [Thread-303295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:56:08.223 [DEBUG] [Thread-303295] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:56:08.225 [DEBUG] [Thread-303295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:56:08.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:56:08.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:56:08.231 [DEBUG] [Thread-303295] [transport.py] [_log()] userauth is OK
2025-12-24T13:56:08.231 [DEBUG] [Thread-303295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:56:08.232 [DEBUG] [Thread-303295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:56:08.232 [DEBUG] [Thread-303295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:56:08.232 [DEBUG] [Thread-303295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:56:08.270 [INFO] [Thread-303295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:56:08.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:56:08.882 [DEBUG] [Thread-303295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:56:08.883 [DEBUG] [Thread-303295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:56:08.884 [DEBUG] [Thread-303295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:56:08.924 [DEBUG] [Thread-303295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:56:08.924 [DEBUG] [Thread-303295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:56:08.927 [DEBUG] [Thread-303295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:56:08.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:56:08.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:56:08.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:56:08.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:56:08.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:56:08.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:56:08.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:56:08.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:56:08.953 [DEBUG] [Thread-303295] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:56:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:56:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.496944 -999.00  +24.30  19.97     32   +6.90 1 2 1 1 1   888    0 16.27 -70.38 ----- 20.0 20.0 136.8 23.0 31.9 -18.1 32.1 -20.8 32.6 -21.1 33.1 -17.9
2025-12-24T13:56:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:56:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:56:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.496944
2025-12-24T13:56:08.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:56:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:56:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:56:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:56:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:56:08.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:55:30', tmtdew=19.75, humidity=27.81, cloud=0.0, wind=19.36, temperature=23.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:55:35.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:56:09.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:56:09.071 [DEBUG] [Thread-303298] [transport.py] [_log()] starting thread (client mode): 0xf57a9c30
2025-12-24T13:56:09.071 [DEBUG] [Thread-303298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:56:09.085 [DEBUG] [Thread-303298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:56:09.085 [INFO] [Thread-303298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:56:09.093 [DEBUG] [Thread-303298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:56:09.093 [DEBUG] [Thread-303298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:56:09.093 [DEBUG] [Thread-303298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:56:09.093 [DEBUG] [Thread-303298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:56:09.093 [DEBUG] [Thread-303298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] client lang: <none>
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] server lang: <none>
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] kex follows: False
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:56:09.094 [DEBUG] [Thread-303298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:56:09.095 [DEBUG] [Thread-303298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:56:09.095 [DEBUG] [Thread-303298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:56:09.095 [DEBUG] [Thread-303298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:56:09.095 [DEBUG] [Thread-303298] [transport.py] [_log()] Compression: none
2025-12-24T13:56:09.095 [DEBUG] [Thread-303298] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:56:09.154 [DEBUG] [Thread-303298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:56:09.154 [DEBUG] [Thread-303298] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:56:09.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:56:09.157 [DEBUG] [Thread-303298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:56:09.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:56:09.212 [DEBUG] [Thread-303298] [transport.py] [_log()] userauth is OK
2025-12-24T13:56:09.213 [DEBUG] [Thread-303298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:56:09.213 [DEBUG] [Thread-303298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:56:09.213 [DEBUG] [Thread-303298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:56:09.213 [DEBUG] [Thread-303298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:56:09.234 [INFO] [Thread-303298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:56:09.235 [DEBUG] [Thread-303300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:56:09.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:56:09.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:56:10.069 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:56:10.070 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:56:10.087 [DEBUG] [Thread-303298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:56:10.087 [DEBUG] [Thread-303298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:56:10.134 [DEBUG] [Thread-303298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:56:10.134 [DEBUG] [Thread-303298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:56:10.143 [DEBUG] [Thread-303298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:56:10.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:56:10.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T13:56:10.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T13:56:10.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:56:10.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:56:10.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:56:10.176 [DEBUG] [Thread-303298] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:56:24.376 [DEBUG] [Thread-303301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:56:31.521 [DEBUG] [Thread-303302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:56:39.467 [DEBUG] [Thread-303303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:56:40.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:56:40.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:56:40.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T13:56:40.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 56, 36), 19.52, 27.94, 0.0, 16.59, 23.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:56:40.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:56:36
2025-12-24T13:56:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:56:41.258 [DEBUG] [Thread-303304] [transport.py] [_log()] starting thread (client mode): 0xf572dfc0
2025-12-24T13:56:41.258 [DEBUG] [Thread-303304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:56:41.271 [DEBUG] [Thread-303304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:56:41.271 [INFO] [Thread-303304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] client lang: <none>
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] server lang: <none>
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] kex follows: False
2025-12-24T13:56:41.277 [DEBUG] [Thread-303304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:56:41.278 [DEBUG] [Thread-303304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:56:41.278 [DEBUG] [Thread-303304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:56:41.278 [DEBUG] [Thread-303304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:56:41.278 [DEBUG] [Thread-303304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:56:41.278 [DEBUG] [Thread-303304] [transport.py] [_log()] Compression: none
2025-12-24T13:56:41.278 [DEBUG] [Thread-303304] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:56:41.310 [DEBUG] [Thread-303304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:56:41.313 [DEBUG] [Thread-303304] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:56:41.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:56:41.315 [DEBUG] [Thread-303304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:56:41.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:56:41.318 [DEBUG] [Thread-303304] [transport.py] [_log()] userauth is OK
2025-12-24T13:56:41.318 [DEBUG] [Thread-303304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:56:41.318 [DEBUG] [Thread-303304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:56:41.318 [DEBUG] [Thread-303304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:56:41.318 [DEBUG] [Thread-303304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:56:41.339 [INFO] [Thread-303304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:56:41.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:56:41.954 [DEBUG] [Thread-303304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:56:41.954 [DEBUG] [Thread-303304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:56:41.954 [DEBUG] [Thread-303304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:56:41.995 [DEBUG] [Thread-303304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:56:41.995 [DEBUG] [Thread-303304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:56:41.997 [DEBUG] [Thread-303304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:56:42.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:56:42.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:56:42.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:56:42.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:56:42.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:56:42.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:56:42.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:56:42.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:56:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:56:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.497291 -999.00  +24.10  17.38     32   +6.60 1 2 1 1 1   888    0 16.01 -70.35 ----- 17.4 17.4 133.8 27.2 32.2 -18.2 32.2 -19.5 -999.0 -999.0 33.3 -16.6
2025-12-24T13:56:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:56:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:56:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.497291
2025-12-24T13:56:42.026 [DEBUG] [Thread-303304] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:56:42.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:56:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:56:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:56:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:56:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:56:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:56:36', tmtdew=19.52, humidity=27.94, cloud=0.0, wind=16.59, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:56:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:56:42.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:56:54.553 [DEBUG] [Thread-303307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:57:09.643 [DEBUG] [Thread-303308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:57:10.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:57:10.219 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:57:24.745 [DEBUG] [Thread-303309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:57:31.756 [DEBUG] [Thread-303310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:57:39.823 [DEBUG] [Thread-303311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:57:54.927 [DEBUG] [Thread-303312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:58:10.027 [DEBUG] [Thread-303313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:58:10.361 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:58:10.363 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:58:25.151 [DEBUG] [Thread-303314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:58:32.080 [DEBUG] [Thread-303315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:58:40.252 [DEBUG] [Thread-303316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:58:55.362 [DEBUG] [Thread-303317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:58:56.758 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T13:59:10.436 [DEBUG] [Thread-303318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:59:10.503 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:59:10.505 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:59:25.526 [DEBUG] [Thread-303319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:59:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T13:59:26.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T13:59:26.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
2025-12-24T13:59:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 59, 21), 18.83, 29.27, 0.0, 20.03, 22.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T13:59:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:59:21
2025-12-24T13:59:27.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T13:59:28.050 [DEBUG] [Thread-303320] [transport.py] [_log()] starting thread (client mode): 0xf57bf220
2025-12-24T13:59:28.050 [DEBUG] [Thread-303320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:59:28.061 [DEBUG] [Thread-303320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T13:59:28.061 [INFO] [Thread-303320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] client lang: <none>
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] server lang: <none>
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] kex follows: False
2025-12-24T13:59:28.066 [DEBUG] [Thread-303320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:59:28.067 [DEBUG] [Thread-303320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:59:28.067 [DEBUG] [Thread-303320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:59:28.067 [DEBUG] [Thread-303320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:59:28.067 [DEBUG] [Thread-303320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:59:28.067 [DEBUG] [Thread-303320] [transport.py] [_log()] Compression: none
2025-12-24T13:59:28.067 [DEBUG] [Thread-303320] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:59:28.098 [DEBUG] [Thread-303320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:59:28.102 [DEBUG] [Thread-303320] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:59:28.103 [DEBUG] [Thread-303320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T13:59:28.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T13:59:28.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:59:28.107 [DEBUG] [Thread-303320] [transport.py] [_log()] userauth is OK
2025-12-24T13:59:28.107 [DEBUG] [Thread-303320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:59:28.107 [DEBUG] [Thread-303320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:59:28.107 [DEBUG] [Thread-303320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T13:59:28.107 [DEBUG] [Thread-303320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:59:28.124 [INFO] [Thread-303320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:59:28.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:59:28.724 [DEBUG] [Thread-303320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:59:28.724 [DEBUG] [Thread-303320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:59:28.724 [DEBUG] [Thread-303320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T13:59:28.765 [DEBUG] [Thread-303320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:59:28.765 [DEBUG] [Thread-303320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:59:28.767 [DEBUG] [Thread-303320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:59:28.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:59:28.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T13:59:28.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T13:59:28.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T13:59:28.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:59:28.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T13:59:28.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:59:28.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:59:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T13:59:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.499027 -999.00  +23.30  11.64     34   +6.60 1 2 1 1 1   888    0 15.07 -98.05 ----- 11.6 11.6 122.8 24.8 30.6 -20.7 30.9 -22.7 31.5 -22.6 31.7 -21.3
2025-12-24T13:59:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T13:59:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T13:59:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.499027
2025-12-24T13:59:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T13:59:28.798 [DEBUG] [Thread-303320] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:59:28.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T13:59:28.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T13:59:28.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T13:59:28.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T13:59:28.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:59:21', tmtdew=18.83, humidity=29.27, cloud=0.0, wind=20.03, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:58:35.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T13:59:28.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T13:59:28.893 [DEBUG] [Thread-303323] [transport.py] [_log()] starting thread (client mode): 0xf81f18d0
2025-12-24T13:59:28.894 [DEBUG] [Thread-303323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T13:59:28.908 [DEBUG] [Thread-303323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T13:59:28.908 [INFO] [Thread-303323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T13:59:28.915 [DEBUG] [Thread-303323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T13:59:28.915 [DEBUG] [Thread-303323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] client lang: <none>
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] server lang: <none>
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] kex follows: False
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] Compression: none
2025-12-24T13:59:28.916 [DEBUG] [Thread-303323] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T13:59:28.972 [DEBUG] [Thread-303323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T13:59:28.973 [DEBUG] [Thread-303323] [transport.py] [_log()] Switch to new keys ...
2025-12-24T13:59:28.973 [DEBUG] [Thread-303323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T13:59:28.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T13:59:28.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T13:59:29.029 [DEBUG] [Thread-303323] [transport.py] [_log()] userauth is OK
2025-12-24T13:59:29.029 [DEBUG] [Thread-303323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T13:59:29.029 [DEBUG] [Thread-303323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T13:59:29.029 [DEBUG] [Thread-303323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T13:59:29.029 [DEBUG] [Thread-303323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T13:59:29.043 [INFO] [Thread-303323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T13:59:29.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T13:59:29.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T13:59:29.913 [DEBUG] [Thread-303323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T13:59:29.914 [DEBUG] [Thread-303323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T13:59:29.961 [DEBUG] [Thread-303323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T13:59:29.962 [DEBUG] [Thread-303323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T13:59:29.970 [DEBUG] [Thread-303323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T13:59:29.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T13:59: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')
2025-12-24T13:59: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') -> 00000000
2025-12-24T13:59:29.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T13:59:29.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T13:59:29.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T13:59:30.003 [DEBUG] [Thread-303323] [transport.py] [_log()] EOF in transport thread
2025-12-24T13:59:32.340 [DEBUG] [Thread-303325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:59:40.582 [DEBUG] [Thread-303326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T13:59:55.653 [DEBUG] [Thread-303327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:00:00.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:00:00.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:00:00.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:00:00.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 13, 59, 55), 19.13, 28.92, 0.0, 17.17, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:00:00.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 13:59:55
2025-12-24T14:00:01.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:00:01.248 [DEBUG] [Thread-303328] [transport.py] [_log()] starting thread (client mode): 0xf81e6ec0
2025-12-24T14:00:01.248 [DEBUG] [Thread-303328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:00:01.253 [DEBUG] [Thread-303328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:00:01.253 [INFO] [Thread-303328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:00:01.257 [DEBUG] [Thread-303328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] client lang: <none>
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] server lang: <none>
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] kex follows: False
2025-12-24T14:00:01.258 [DEBUG] [Thread-303328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:00:01.259 [DEBUG] [Thread-303328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:00:01.259 [DEBUG] [Thread-303328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:00:01.259 [DEBUG] [Thread-303328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:00:01.259 [DEBUG] [Thread-303328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:00:01.259 [DEBUG] [Thread-303328] [transport.py] [_log()] Compression: none
2025-12-24T14:00:01.259 [DEBUG] [Thread-303328] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:00:01.299 [DEBUG] [Thread-303328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:00:01.304 [DEBUG] [Thread-303328] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:00:01.306 [DEBUG] [Thread-303328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:00:01.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:00:01.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:00:01.312 [DEBUG] [Thread-303328] [transport.py] [_log()] userauth is OK
2025-12-24T14:00:01.312 [DEBUG] [Thread-303328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:00:01.313 [DEBUG] [Thread-303328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:00:01.313 [DEBUG] [Thread-303328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:00:01.313 [DEBUG] [Thread-303328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:00:01.340 [INFO] [Thread-303328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:00:01.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:00:02.131 [DEBUG] [Thread-303328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:00:02.132 [DEBUG] [Thread-303328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:00:02.132 [DEBUG] [Thread-303328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:00:02.173 [DEBUG] [Thread-303328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:00:02.173 [DEBUG] [Thread-303328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:00:02.175 [DEBUG] [Thread-303328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:00:02.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:00:02.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:00:02.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:00:02.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:00:02.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:00:02.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:00:02.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:00:02.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:00:02.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:00:02.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.499374 -999.00  +23.70  22.36     33   +6.80 1 2 1 1 1   888    0 15.03 -95.89 ----- 22.4 22.4 118.8 26.7 30.5 -20.7 30.7 -21.8 31.4 -20.7 31.6 -20.3
2025-12-24T14:00:02.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:00:02.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:00:02.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.499374
2025-12-24T14:00:02.202 [DEBUG] [Thread-303328] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:00:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:00:02.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:00:02.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:00:02.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:00:02.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:00:02.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T13:59:55', tmtdew=19.13, humidity=28.92, cloud=0.0, wind=17.17, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T11:59:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:00:02.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:00:02.297 [DEBUG] [Thread-303331] [transport.py] [_log()] starting thread (client mode): 0xf5752170
2025-12-24T14:00:02.297 [DEBUG] [Thread-303331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:00:02.313 [DEBUG] [Thread-303331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:00:02.313 [INFO] [Thread-303331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:00:02.320 [DEBUG] [Thread-303331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:00:02.320 [DEBUG] [Thread-303331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:00:02.320 [DEBUG] [Thread-303331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:00:02.320 [DEBUG] [Thread-303331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:00:02.320 [DEBUG] [Thread-303331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:00:02.320 [DEBUG] [Thread-303331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] client lang: <none>
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] server lang: <none>
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] kex follows: False
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] Compression: none
2025-12-24T14:00:02.321 [DEBUG] [Thread-303331] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:00:02.376 [DEBUG] [Thread-303331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:00:02.376 [DEBUG] [Thread-303331] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:00:02.376 [DEBUG] [Thread-303331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:00:02.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:00:02.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:00:02.433 [DEBUG] [Thread-303331] [transport.py] [_log()] userauth is OK
2025-12-24T14:00:02.433 [DEBUG] [Thread-303331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:00:02.433 [DEBUG] [Thread-303331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:00:02.433 [DEBUG] [Thread-303331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:00:02.433 [DEBUG] [Thread-303331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:00:02.451 [INFO] [Thread-303331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:00:02.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:00:02.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:00:03.314 [DEBUG] [Thread-303331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:00:03.314 [DEBUG] [Thread-303331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:00:03.360 [DEBUG] [Thread-303331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:00:03.361 [DEBUG] [Thread-303331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:00:03.369 [DEBUG] [Thread-303331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:00:03.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:00:03.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:00: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') -> 00000000
2025-12-24T14:00:03.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:00:03.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:00:03.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:00:03.410 [DEBUG] [Thread-303331] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:00:10.654 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:00:10.660 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:00:10.722 [DEBUG] [Thread-303333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:00:25.977 [DEBUG] [Thread-303334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:00:32.647 [DEBUG] [Thread-303335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:00:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:00:33.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:00: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
2025-12-24T14:00:34.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 0, 28), 18.96, 29.2, 0.0, 15.23, 22.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:00:34.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:00:28
2025-12-24T14:00:34.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:00:34.811 [DEBUG] [Thread-303336] [transport.py] [_log()] starting thread (client mode): 0xf81f31f0
2025-12-24T14:00:34.811 [DEBUG] [Thread-303336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:00:34.823 [DEBUG] [Thread-303336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:00:34.824 [INFO] [Thread-303336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:00:34.829 [DEBUG] [Thread-303336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:00:34.829 [DEBUG] [Thread-303336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:00:34.829 [DEBUG] [Thread-303336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:00:34.829 [DEBUG] [Thread-303336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:00:34.829 [DEBUG] [Thread-303336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:00:34.829 [DEBUG] [Thread-303336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:00:34.830 [DEBUG] [Thread-303336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:00:34.830 [DEBUG] [Thread-303336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:00:34.830 [DEBUG] [Thread-303336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:00:34.830 [DEBUG] [Thread-303336] [transport.py] [_log()] client lang: <none>
2025-12-24T14:00:34.830 [DEBUG] [Thread-303336] [transport.py] [_log()] server lang: <none>
2025-12-24T14:00:34.830 [DEBUG] [Thread-303336] [transport.py] [_log()] kex follows: False
2025-12-24T14:00:34.830 [DEBUG] [Thread-303336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:00:34.831 [DEBUG] [Thread-303336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:00:34.831 [DEBUG] [Thread-303336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:00:34.831 [DEBUG] [Thread-303336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:00:34.831 [DEBUG] [Thread-303336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:00:34.831 [DEBUG] [Thread-303336] [transport.py] [_log()] Compression: none
2025-12-24T14:00:34.832 [DEBUG] [Thread-303336] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:00:34.868 [DEBUG] [Thread-303336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:00:34.873 [DEBUG] [Thread-303336] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:00:34.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:00:34.876 [DEBUG] [Thread-303336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:00:34.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:00:34.880 [DEBUG] [Thread-303336] [transport.py] [_log()] userauth is OK
2025-12-24T14:00:34.881 [DEBUG] [Thread-303336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:00:34.881 [DEBUG] [Thread-303336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:00:34.881 [DEBUG] [Thread-303336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:00:34.881 [DEBUG] [Thread-303336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:00:34.909 [INFO] [Thread-303336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:00:34.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:00:35.517 [DEBUG] [Thread-303336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:00:35.518 [DEBUG] [Thread-303336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:00:35.521 [DEBUG] [Thread-303336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:00:35.558 [DEBUG] [Thread-303336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:00:35.559 [DEBUG] [Thread-303336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:00:35.562 [DEBUG] [Thread-303336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:00:35.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:00:35.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:00:35.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:00:35.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:00:35.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:00:35.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:00:35.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:00:35.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:00:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:00:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.500068 -999.00  +23.50   7.98     33   +6.60 1 2 1 1 1   888    0 15.05 -101.24 ----- 8.0 8.0 171.8 11.1 30.4 -20.3 30.4 -22.1 31.0 -19.9 31.4 -19.9
2025-12-24T14:00:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:00:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:00:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.500068
2025-12-24T14:00:35.599 [DEBUG] [Thread-303336] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:00:35.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:00:35.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:00:35.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:00:35.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:00:35.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:00:35.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:00:28', tmtdew=18.96, humidity=29.2, cloud=0.0, wind=15.23, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:00:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:00:35.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:00:35.712 [DEBUG] [Thread-303339] [transport.py] [_log()] starting thread (client mode): 0xf572f880
2025-12-24T14:00:35.712 [DEBUG] [Thread-303339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:00:35.727 [DEBUG] [Thread-303339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:00:35.728 [INFO] [Thread-303339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:00:35.735 [DEBUG] [Thread-303339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:00:35.736 [DEBUG] [Thread-303339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:00:35.736 [DEBUG] [Thread-303339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:00:35.736 [DEBUG] [Thread-303339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:00:35.736 [DEBUG] [Thread-303339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:00:35.736 [DEBUG] [Thread-303339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] client lang: <none>
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] server lang: <none>
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] kex follows: False
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] Compression: none
2025-12-24T14:00:35.737 [DEBUG] [Thread-303339] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:00:35.793 [DEBUG] [Thread-303339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:00:35.793 [DEBUG] [Thread-303339] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:00:35.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:00:35.794 [DEBUG] [Thread-303339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:00:35.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:00:35.849 [DEBUG] [Thread-303339] [transport.py] [_log()] userauth is OK
2025-12-24T14:00:35.849 [DEBUG] [Thread-303339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:00:35.849 [DEBUG] [Thread-303339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:00:35.849 [DEBUG] [Thread-303339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:00:35.850 [DEBUG] [Thread-303339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:00:35.867 [INFO] [Thread-303339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:00:35.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:00:35.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:00:36.723 [DEBUG] [Thread-303339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:00:36.723 [DEBUG] [Thread-303339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:00:36.762 [DEBUG] [Thread-303339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:00:36.762 [DEBUG] [Thread-303339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:00:36.771 [DEBUG] [Thread-303339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:00:36.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:00:36.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:00:36.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:00:36.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:00:36.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:00:36.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:00:36.810 [DEBUG] [Thread-303339] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:00:41.050 [DEBUG] [Thread-303341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:00:56.195 [DEBUG] [Thread-303342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:01:06.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:01:06.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:01:06.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
2025-12-24T14:01:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 1, 1), 18.9, 29.32, 0.0, 13.41, 22.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:01:07.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:01:01
2025-12-24T14:01:07.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:01:08.110 [DEBUG] [Thread-303343] [transport.py] [_log()] starting thread (client mode): 0xf57a8fa0
2025-12-24T14:01:08.110 [DEBUG] [Thread-303343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:01:08.111 [DEBUG] [Thread-303343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:01:08.111 [INFO] [Thread-303343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:01:08.114 [DEBUG] [Thread-303343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:01:08.114 [DEBUG] [Thread-303343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] client lang: <none>
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] server lang: <none>
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] kex follows: False
2025-12-24T14:01:08.115 [DEBUG] [Thread-303343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:01:08.116 [DEBUG] [Thread-303343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:01:08.116 [DEBUG] [Thread-303343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:01:08.116 [DEBUG] [Thread-303343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:01:08.116 [DEBUG] [Thread-303343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:01:08.116 [DEBUG] [Thread-303343] [transport.py] [_log()] Compression: none
2025-12-24T14:01:08.116 [DEBUG] [Thread-303343] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:01:08.151 [DEBUG] [Thread-303343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:01:08.156 [DEBUG] [Thread-303343] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:01:08.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:01:08.159 [DEBUG] [Thread-303343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:01:08.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:01:08.163 [DEBUG] [Thread-303343] [transport.py] [_log()] userauth is OK
2025-12-24T14:01:08.164 [DEBUG] [Thread-303343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:01:08.164 [DEBUG] [Thread-303343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:01:08.164 [DEBUG] [Thread-303343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:01:08.164 [DEBUG] [Thread-303343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:01:08.193 [INFO] [Thread-303343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:01:08.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:01:08.965 [DEBUG] [Thread-303343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:01:08.965 [DEBUG] [Thread-303343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:01:08.974 [DEBUG] [Thread-303343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:01:09.007 [DEBUG] [Thread-303343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:01:09.007 [DEBUG] [Thread-303343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:01:09.009 [DEBUG] [Thread-303343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:01:09.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:01:09.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:01:09.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:01:09.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:01:09.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:01:09.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:01:09.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:01:09.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:01:09.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:01:09.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.500416 -999.00  +23.30   3.12     34   +6.60 1 2 1 1 1   888    0 14.52 -108.61 ----- 3.1 3.1 174.5 10.8 30.4 -19.7 30.2 -20.8 31.0 -19.0 31.2 -19.4
2025-12-24T14:01:09.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:01:09.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:01:09.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.500416
2025-12-24T14:01:09.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:01:09.041 [DEBUG] [Thread-303343] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:01:09.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:01:09.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:01:09.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:01:09.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:01:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:01:01', tmtdew=18.9, humidity=29.32, cloud=0.0, wind=13.41, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:00:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:01:09.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:01:09.135 [DEBUG] [Thread-303346] [transport.py] [_log()] starting thread (client mode): 0xf81c3610
2025-12-24T14:01:09.135 [DEBUG] [Thread-303346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:01:09.149 [DEBUG] [Thread-303346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:01:09.150 [INFO] [Thread-303346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:01:09.158 [DEBUG] [Thread-303346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:01:09.158 [DEBUG] [Thread-303346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:01:09.158 [DEBUG] [Thread-303346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:01:09.158 [DEBUG] [Thread-303346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:01:09.158 [DEBUG] [Thread-303346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:01:09.158 [DEBUG] [Thread-303346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:01:09.158 [DEBUG] [Thread-303346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] client lang: <none>
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] server lang: <none>
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] kex follows: False
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] Compression: none
2025-12-24T14:01:09.159 [DEBUG] [Thread-303346] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:01:09.217 [DEBUG] [Thread-303346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:01:09.217 [DEBUG] [Thread-303346] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:01:09.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:01:09.219 [DEBUG] [Thread-303346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:01:09.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:01:09.272 [DEBUG] [Thread-303346] [transport.py] [_log()] userauth is OK
2025-12-24T14:01:09.273 [DEBUG] [Thread-303346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:01:09.273 [DEBUG] [Thread-303346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:01:09.273 [DEBUG] [Thread-303346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:01:09.273 [DEBUG] [Thread-303346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:01:09.297 [INFO] [Thread-303346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:01:09.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:01:09.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:01:10.141 [DEBUG] [Thread-303346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:01:10.141 [DEBUG] [Thread-303346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:01:10.181 [DEBUG] [Thread-303346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:01:10.181 [DEBUG] [Thread-303346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:01:10.190 [DEBUG] [Thread-303346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:01:10.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:01:10.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')
2025-12-24T14:01:10.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:01:10.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:01:10.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:01:10.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:01:10.230 [DEBUG] [Thread-303346] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:01:10.805 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:01:10.808 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:01:11.274 [DEBUG] [Thread-303348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:01:26.389 [DEBUG] [Thread-303349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:01:33.018 [DEBUG] [Thread-303350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:01:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:01:40.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:01:40.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:01:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 1, 35), 18.99, 29.0, 0.0, 14.88, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:01:41.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:01:35
2025-12-24T14:01:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:01:41.358 [DEBUG] [Thread-303351] [transport.py] [_log()] starting thread (client mode): 0xf574d1e0
2025-12-24T14:01:41.359 [DEBUG] [Thread-303351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:01:41.371 [DEBUG] [Thread-303351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:01:41.371 [INFO] [Thread-303351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] client lang: <none>
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] server lang: <none>
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] kex follows: False
2025-12-24T14:01:41.376 [DEBUG] [Thread-303351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:01:41.377 [DEBUG] [Thread-303351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:01:41.377 [DEBUG] [Thread-303351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:01:41.377 [DEBUG] [Thread-303351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:01:41.377 [DEBUG] [Thread-303351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:01:41.377 [DEBUG] [Thread-303351] [transport.py] [_log()] Compression: none
2025-12-24T14:01:41.377 [DEBUG] [Thread-303351] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:01:41.410 [DEBUG] [Thread-303351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:01:41.413 [DEBUG] [Thread-303351] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:01:41.414 [DEBUG] [Thread-303351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:01:41.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:01:41.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:01:41.417 [DEBUG] [Thread-303351] [transport.py] [_log()] userauth is OK
2025-12-24T14:01:41.417 [DEBUG] [Thread-303351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:01:41.417 [DEBUG] [Thread-303351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:01:41.417 [DEBUG] [Thread-303351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:01:41.417 [DEBUG] [Thread-303351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:01:41.446 [DEBUG] [Thread-303353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:01:41.447 [INFO] [Thread-303351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:01:41.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:01:42.069 [DEBUG] [Thread-303351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:01:42.069 [DEBUG] [Thread-303351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:01:42.070 [DEBUG] [Thread-303351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:01:42.111 [DEBUG] [Thread-303351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:01:42.111 [DEBUG] [Thread-303351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:01:42.113 [DEBUG] [Thread-303351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:01:42.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:01:42.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:01:42.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:01:42.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:01:42.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:01:42.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:01:42.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:01:42.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:01:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:01:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.500763 -999.00  +23.40   4.09     34   +6.60 1 2 1 1 1   888    0 14.66 -109.40 ----- 4.1 4.1 166.2 10.1 30.8 -14.7 30.6 -15.6 31.1 -17.1 31.6 -14.2
2025-12-24T14:01:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:01:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:01:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.500763
2025-12-24T14:01:42.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:01:42.150 [DEBUG] [Thread-303351] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:01:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:01:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:01:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:01:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:01:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:01:35', tmtdew=18.99, humidity=29.0, cloud=0.0, wind=14.88, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:01:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:01:42.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:01:42.237 [DEBUG] [Thread-303355] [transport.py] [_log()] starting thread (client mode): 0xf574e890
2025-12-24T14:01:42.238 [DEBUG] [Thread-303355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:01:42.252 [DEBUG] [Thread-303355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:01:42.252 [INFO] [Thread-303355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:01:42.260 [DEBUG] [Thread-303355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:01:42.260 [DEBUG] [Thread-303355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:01:42.260 [DEBUG] [Thread-303355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:01:42.260 [DEBUG] [Thread-303355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:01:42.260 [DEBUG] [Thread-303355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] client lang: <none>
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] server lang: <none>
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] kex follows: False
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:01:42.261 [DEBUG] [Thread-303355] [transport.py] [_log()] Compression: none
2025-12-24T14:01:42.262 [DEBUG] [Thread-303355] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:01:42.318 [DEBUG] [Thread-303355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:01:42.318 [DEBUG] [Thread-303355] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:01:42.319 [DEBUG] [Thread-303355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:01:42.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:01:42.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:01:42.376 [DEBUG] [Thread-303355] [transport.py] [_log()] userauth is OK
2025-12-24T14:01:42.376 [DEBUG] [Thread-303355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:01:42.376 [DEBUG] [Thread-303355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:01:42.376 [DEBUG] [Thread-303355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:01:42.376 [DEBUG] [Thread-303355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:01:42.389 [INFO] [Thread-303355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:01:42.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:01:42.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:01:43.227 [DEBUG] [Thread-303355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:01:43.228 [DEBUG] [Thread-303355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:01:43.275 [DEBUG] [Thread-303355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:01:43.275 [DEBUG] [Thread-303355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:01:43.283 [DEBUG] [Thread-303355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:01:43.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:01:43.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')
2025-12-24T14:01:43.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:01:43.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:01:43.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:01:43.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:01:43.321 [DEBUG] [Thread-303355] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:01:56.549 [DEBUG] [Thread-303357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:02:10.962 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:02:10.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:02:11.700 [DEBUG] [Thread-303358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:02:13.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:02:13.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:02:13.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
2025-12-24T14:02:14.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 2, 8), 19.06, 28.87, 0.0, 17.89, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:02:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:02:08
2025-12-24T14:02:14.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:02:14.623 [DEBUG] [Thread-303359] [transport.py] [_log()] starting thread (client mode): 0xf5752fe0
2025-12-24T14:02:14.623 [DEBUG] [Thread-303359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:02:14.645 [DEBUG] [Thread-303359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:02:14.645 [INFO] [Thread-303359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] client lang: <none>
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] server lang: <none>
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] kex follows: False
2025-12-24T14:02:14.651 [DEBUG] [Thread-303359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:02:14.652 [DEBUG] [Thread-303359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:02:14.652 [DEBUG] [Thread-303359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:02:14.652 [DEBUG] [Thread-303359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:02:14.652 [DEBUG] [Thread-303359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:02:14.652 [DEBUG] [Thread-303359] [transport.py] [_log()] Compression: none
2025-12-24T14:02:14.652 [DEBUG] [Thread-303359] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:02:14.681 [DEBUG] [Thread-303359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:02:14.685 [DEBUG] [Thread-303359] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:02:14.686 [DEBUG] [Thread-303359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:02:14.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:02:14.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:02:14.690 [DEBUG] [Thread-303359] [transport.py] [_log()] userauth is OK
2025-12-24T14:02:14.690 [DEBUG] [Thread-303359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:02:14.691 [DEBUG] [Thread-303359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:02:14.691 [DEBUG] [Thread-303359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:02:14.691 [DEBUG] [Thread-303359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:02:14.713 [INFO] [Thread-303359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:02:14.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:02:15.507 [DEBUG] [Thread-303359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:02:15.507 [DEBUG] [Thread-303359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:02:15.508 [DEBUG] [Thread-303359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:02:15.548 [DEBUG] [Thread-303359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:02:15.549 [DEBUG] [Thread-303359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:02:15.552 [DEBUG] [Thread-303359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:02:15.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:02:15.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:02:15.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:02:15.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:02:15.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:02:15.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:02:15.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:02:15.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:02:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:02:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.501110 -999.00  +23.70  15.08     33   +6.70 1 2 1 1 1   888    0 14.61 -112.95 ----- 15.1 15.1 127.7 18.5 30.9 -19.4 30.9 -19.8 31.7 -12.5 31.9 -19.1
2025-12-24T14:02:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:02:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:02:15.578 [DEBUG] [Thread-303359] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:02:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.501110
2025-12-24T14:02:15.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:02:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:02:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:02:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:02:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:02:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:02:08', tmtdew=19.06, humidity=28.87, cloud=0.0, wind=17.89, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:01:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:02:15.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:02:15.682 [DEBUG] [Thread-303362] [transport.py] [_log()] starting thread (client mode): 0xf5753d30
2025-12-24T14:02:15.682 [DEBUG] [Thread-303362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:02:15.696 [DEBUG] [Thread-303362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:02:15.697 [INFO] [Thread-303362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:02:15.705 [DEBUG] [Thread-303362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] client lang: <none>
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] server lang: <none>
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] kex follows: False
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] Compression: none
2025-12-24T14:02:15.706 [DEBUG] [Thread-303362] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:02:15.767 [DEBUG] [Thread-303362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:02:15.768 [DEBUG] [Thread-303362] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:02:15.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:02:15.770 [DEBUG] [Thread-303362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:02:15.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:02:15.824 [DEBUG] [Thread-303362] [transport.py] [_log()] userauth is OK
2025-12-24T14:02:15.824 [DEBUG] [Thread-303362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:02:15.824 [DEBUG] [Thread-303362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:02:15.825 [DEBUG] [Thread-303362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:02:15.825 [DEBUG] [Thread-303362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:02:15.844 [INFO] [Thread-303362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:02:15.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:02:15.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:02:16.714 [DEBUG] [Thread-303362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:02:16.714 [DEBUG] [Thread-303362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:02:16.762 [DEBUG] [Thread-303362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:02:16.762 [DEBUG] [Thread-303362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:02:16.771 [DEBUG] [Thread-303362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:02:16.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:02:16.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:02:16.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:02:16.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:02:16.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:02:16.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:02:16.810 [DEBUG] [Thread-303362] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:02:26.826 [DEBUG] [Thread-303364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:02:33.317 [DEBUG] [Thread-303365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:02:41.967 [DEBUG] [Thread-303366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:02:46.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:02:46.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:02:46.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:02:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 2, 41), 19.46, 28.45, 0.0, 23.04, 23.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:02:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:02:41
2025-12-24T14:02:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:02:48.110 [DEBUG] [Thread-303367] [transport.py] [_log()] starting thread (client mode): 0xf81c2440
2025-12-24T14:02:48.110 [DEBUG] [Thread-303367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:02:48.124 [DEBUG] [Thread-303367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:02:48.124 [INFO] [Thread-303367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:02:48.128 [DEBUG] [Thread-303367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:02:48.128 [DEBUG] [Thread-303367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:02:48.128 [DEBUG] [Thread-303367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] client lang: <none>
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] server lang: <none>
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] kex follows: False
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] Compression: none
2025-12-24T14:02:48.129 [DEBUG] [Thread-303367] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:02:48.157 [DEBUG] [Thread-303367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:02:48.160 [DEBUG] [Thread-303367] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:02:48.161 [DEBUG] [Thread-303367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:02:48.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:02:48.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:02:48.166 [DEBUG] [Thread-303367] [transport.py] [_log()] userauth is OK
2025-12-24T14:02:48.166 [DEBUG] [Thread-303367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:02:48.166 [DEBUG] [Thread-303367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:02:48.167 [DEBUG] [Thread-303367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:02:48.167 [DEBUG] [Thread-303367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:02:48.194 [INFO] [Thread-303367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:02:48.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:02:48.838 [DEBUG] [Thread-303367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:02:48.838 [DEBUG] [Thread-303367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:02:48.839 [DEBUG] [Thread-303367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:02:48.879 [DEBUG] [Thread-303367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:02:48.879 [DEBUG] [Thread-303367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:02:48.883 [DEBUG] [Thread-303367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:02:48.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:02:48.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:02:48.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:02:48.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:02:48.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:02:48.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:02:48.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:02:48.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:02:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:02:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.501458 -999.00  +24.10  22.98     32   +6.70 1 2 1 1 1   888    0 14.34 -112.78 ----- 23.0 23.0 131.7 31.7 30.6 -20.1 30.7 -19.9 31.4 -18.7 31.6 -19.9
2025-12-24T14:02:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:02:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:02:48.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.501458
2025-12-24T14:02:48.916 [DEBUG] [Thread-303367] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:02:48.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:02:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:02:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:02:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:02:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:02:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:02:41', tmtdew=19.46, humidity=28.45, cloud=0.0, wind=23.04, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:02:05.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:02:49.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:02:49.024 [DEBUG] [Thread-303370] [transport.py] [_log()] starting thread (client mode): 0xf572ec20
2025-12-24T14:02:49.024 [DEBUG] [Thread-303370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:02:49.039 [DEBUG] [Thread-303370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:02:49.039 [INFO] [Thread-303370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:02:49.047 [DEBUG] [Thread-303370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] client lang: <none>
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] server lang: <none>
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] kex follows: False
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] Compression: none
2025-12-24T14:02:49.048 [DEBUG] [Thread-303370] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:02:49.103 [DEBUG] [Thread-303370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:02:49.104 [DEBUG] [Thread-303370] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:02:49.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:02:49.105 [DEBUG] [Thread-303370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:02:49.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:02:49.163 [DEBUG] [Thread-303370] [transport.py] [_log()] userauth is OK
2025-12-24T14:02:49.164 [DEBUG] [Thread-303370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:02:49.164 [DEBUG] [Thread-303370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:02:49.164 [DEBUG] [Thread-303370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:02:49.164 [DEBUG] [Thread-303370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:02:49.185 [INFO] [Thread-303370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:02:49.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:02:49.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:02:50.064 [DEBUG] [Thread-303370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:02:50.064 [DEBUG] [Thread-303370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:02:50.112 [DEBUG] [Thread-303370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:02:50.112 [DEBUG] [Thread-303370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:02:50.122 [DEBUG] [Thread-303370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:02:50.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:02:50.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:02:50.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:02:50.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:02:50.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:02:50.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:02:50.170 [DEBUG] [Thread-303370] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:02:57.004 [DEBUG] [Thread-303372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:03:11.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:03:11.122 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:03:12.062 [DEBUG] [Thread-303373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:03:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:03:20.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:03:20.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:03:21.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 3, 14), 19.55, 28.22, 0.0, 21.35, 23.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:03:21.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:03:14
2025-12-24T14:03:21.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:03:21.526 [DEBUG] [Thread-303374] [transport.py] [_log()] starting thread (client mode): 0xf57530d0
2025-12-24T14:03:21.527 [DEBUG] [Thread-303374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:03:21.533 [DEBUG] [Thread-303374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:03:21.533 [INFO] [Thread-303374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:03:21.537 [DEBUG] [Thread-303374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:03:21.537 [DEBUG] [Thread-303374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:03:21.537 [DEBUG] [Thread-303374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] client lang: <none>
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] server lang: <none>
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] kex follows: False
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:03:21.538 [DEBUG] [Thread-303374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:03:21.539 [DEBUG] [Thread-303374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:03:21.539 [DEBUG] [Thread-303374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:03:21.539 [DEBUG] [Thread-303374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:03:21.539 [DEBUG] [Thread-303374] [transport.py] [_log()] Compression: none
2025-12-24T14:03:21.539 [DEBUG] [Thread-303374] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:03:21.575 [DEBUG] [Thread-303374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:03:21.579 [DEBUG] [Thread-303374] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:03:21.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:03:21.581 [DEBUG] [Thread-303374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:03:21.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:03:21.585 [DEBUG] [Thread-303374] [transport.py] [_log()] userauth is OK
2025-12-24T14:03:21.585 [DEBUG] [Thread-303374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:03:21.585 [DEBUG] [Thread-303374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:03:21.585 [DEBUG] [Thread-303374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:03:21.585 [DEBUG] [Thread-303374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:03:21.613 [INFO] [Thread-303374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:03:21.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:03:22.391 [DEBUG] [Thread-303374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:03:22.391 [DEBUG] [Thread-303374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:03:22.402 [DEBUG] [Thread-303374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:03:22.433 [DEBUG] [Thread-303374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:03:22.433 [DEBUG] [Thread-303374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:03:22.436 [DEBUG] [Thread-303374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:03:22.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:03:22.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:03:22.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:03:22.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:03:22.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:03:22.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:03:22.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:03:22.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:03:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:03:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.501805 -999.00  +23.60  16.72     33   +6.60 1 2 1 1 1   888    0 14.34 -114.41 ----- 16.7 16.7 143.6 25.6 30.4 -19.7 30.4 -20.3 31.1 -20.0 31.3 -21.3
2025-12-24T14:03:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:03:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:03:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.501805
2025-12-24T14:03:22.478 [DEBUG] [Thread-303374] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:03:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:03:22.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:03:22.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:03:22.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:03:22.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:03:22.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:03:14', tmtdew=19.55, humidity=28.22, cloud=0.0, wind=21.35, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:02:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:03:22.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:03:22.583 [DEBUG] [Thread-303377] [transport.py] [_log()] starting thread (client mode): 0xf5753d30
2025-12-24T14:03:22.584 [DEBUG] [Thread-303377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:03:22.597 [DEBUG] [Thread-303377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:03:22.598 [INFO] [Thread-303377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:03:22.605 [DEBUG] [Thread-303377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:03:22.605 [DEBUG] [Thread-303377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] client lang: <none>
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] server lang: <none>
2025-12-24T14:03:22.606 [DEBUG] [Thread-303377] [transport.py] [_log()] kex follows: False
2025-12-24T14:03:22.607 [DEBUG] [Thread-303377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:03:22.607 [DEBUG] [Thread-303377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:03:22.607 [DEBUG] [Thread-303377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:03:22.607 [DEBUG] [Thread-303377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:03:22.607 [DEBUG] [Thread-303377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:03:22.607 [DEBUG] [Thread-303377] [transport.py] [_log()] Compression: none
2025-12-24T14:03:22.608 [DEBUG] [Thread-303377] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:03:22.664 [DEBUG] [Thread-303377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:03:22.665 [DEBUG] [Thread-303377] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:03:22.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:03:22.666 [DEBUG] [Thread-303377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:03:22.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:03:22.719 [DEBUG] [Thread-303377] [transport.py] [_log()] userauth is OK
2025-12-24T14:03:22.719 [DEBUG] [Thread-303377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:03:22.719 [DEBUG] [Thread-303377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:03:22.719 [DEBUG] [Thread-303377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:03:22.719 [DEBUG] [Thread-303377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:03:22.742 [INFO] [Thread-303377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:03:22.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:03:22.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:03:23.688 [DEBUG] [Thread-303377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:03:23.689 [DEBUG] [Thread-303377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:03:23.736 [DEBUG] [Thread-303377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:03:23.736 [DEBUG] [Thread-303377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:03:23.744 [DEBUG] [Thread-303377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:03:23.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:03:23.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')
2025-12-24T14:03:23.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:03:23.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:03:23.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:03:23.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:03:23.777 [DEBUG] [Thread-303377] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:03:27.157 [DEBUG] [Thread-303379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:03:33.674 [DEBUG] [Thread-303380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:03:42.309 [DEBUG] [Thread-303381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:03:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:03:53.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:03:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:03:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 3, 47), 19.03, 28.59, 0.0, 16.46, 23.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:03:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:03:47
2025-12-24T14:03:55.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:03:55.657 [DEBUG] [Thread-303382] [transport.py] [_log()] starting thread (client mode): 0xf5751720
2025-12-24T14:03:55.658 [DEBUG] [Thread-303382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:03:55.658 [DEBUG] [Thread-303382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:03:55.658 [INFO] [Thread-303382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:03:55.662 [DEBUG] [Thread-303382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:03:55.662 [DEBUG] [Thread-303382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:03:55.662 [DEBUG] [Thread-303382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:03:55.662 [DEBUG] [Thread-303382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:03:55.662 [DEBUG] [Thread-303382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:03:55.662 [DEBUG] [Thread-303382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:03:55.662 [DEBUG] [Thread-303382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:03:55.662 [DEBUG] [Thread-303382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:03:55.663 [DEBUG] [Thread-303382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:03:55.663 [DEBUG] [Thread-303382] [transport.py] [_log()] client lang: <none>
2025-12-24T14:03:55.663 [DEBUG] [Thread-303382] [transport.py] [_log()] server lang: <none>
2025-12-24T14:03:55.663 [DEBUG] [Thread-303382] [transport.py] [_log()] kex follows: False
2025-12-24T14:03:55.663 [DEBUG] [Thread-303382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:03:55.663 [DEBUG] [Thread-303382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:03:55.663 [DEBUG] [Thread-303382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:03:55.664 [DEBUG] [Thread-303382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:03:55.664 [DEBUG] [Thread-303382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:03:55.664 [DEBUG] [Thread-303382] [transport.py] [_log()] Compression: none
2025-12-24T14:03:55.664 [DEBUG] [Thread-303382] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:03:55.698 [DEBUG] [Thread-303382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:03:55.701 [DEBUG] [Thread-303382] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:03:55.703 [DEBUG] [Thread-303382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:03:55.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:03:55.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:03:55.708 [DEBUG] [Thread-303382] [transport.py] [_log()] userauth is OK
2025-12-24T14:03:55.709 [DEBUG] [Thread-303382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:03:55.709 [DEBUG] [Thread-303382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:03:55.709 [DEBUG] [Thread-303382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:03:55.709 [DEBUG] [Thread-303382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:03:55.751 [INFO] [Thread-303382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:03:55.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:03:56.427 [DEBUG] [Thread-303382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:03:56.427 [DEBUG] [Thread-303382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:03:56.428 [DEBUG] [Thread-303382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:03:56.469 [DEBUG] [Thread-303382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:03:56.469 [DEBUG] [Thread-303382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:03:56.473 [DEBUG] [Thread-303382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:03:56.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:03:56.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:03:56.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:03:56.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:03:56.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:03:56.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:03:56.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:03:56.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:03:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:03:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.502152 -999.00  +23.60  16.60     33   +6.60 1 2 1 1 1   888    0 14.63 -112.05 ----- 16.6 16.6 142.8 25.2 30.2 -20.6 -999.0 -999.0 30.9 -18.4 31.2 -20.3
2025-12-24T14:03:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:03:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:03:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.502152
2025-12-24T14:03:56.509 [DEBUG] [Thread-303382] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:03:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:03:56.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:03:56.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:03:56.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:03:56.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:03:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:03:47', tmtdew=19.03, humidity=28.59, cloud=0.0, wind=16.46, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:03:05.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:03:56.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:03:56.613 [DEBUG] [Thread-303385] [transport.py] [_log()] starting thread (client mode): 0xf5750670
2025-12-24T14:03:56.613 [DEBUG] [Thread-303385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:03:56.628 [DEBUG] [Thread-303385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:03:56.628 [INFO] [Thread-303385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] client lang: <none>
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] server lang: <none>
2025-12-24T14:03:56.636 [DEBUG] [Thread-303385] [transport.py] [_log()] kex follows: False
2025-12-24T14:03:56.637 [DEBUG] [Thread-303385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:03:56.637 [DEBUG] [Thread-303385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:03:56.637 [DEBUG] [Thread-303385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:03:56.637 [DEBUG] [Thread-303385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:03:56.637 [DEBUG] [Thread-303385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:03:56.637 [DEBUG] [Thread-303385] [transport.py] [_log()] Compression: none
2025-12-24T14:03:56.637 [DEBUG] [Thread-303385] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:03:56.693 [DEBUG] [Thread-303385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:03:56.693 [DEBUG] [Thread-303385] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:03:56.694 [DEBUG] [Thread-303385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:03:56.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:03:56.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:03:56.750 [DEBUG] [Thread-303385] [transport.py] [_log()] userauth is OK
2025-12-24T14:03:56.750 [DEBUG] [Thread-303385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:03:56.750 [DEBUG] [Thread-303385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:03:56.750 [DEBUG] [Thread-303385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:03:56.750 [DEBUG] [Thread-303385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:03:56.765 [INFO] [Thread-303385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:03:56.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:03:56.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:03:57.376 [DEBUG] [Thread-303387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:03:57.609 [DEBUG] [Thread-303385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:03:57.609 [DEBUG] [Thread-303385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:03:57.656 [DEBUG] [Thread-303385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:03:57.656 [DEBUG] [Thread-303385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:03:57.665 [DEBUG] [Thread-303385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:03:57.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:03:57.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:03:57.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:03:57.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:03:57.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:03:57.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:03:57.701 [DEBUG] [Thread-303385] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:04:11.289 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:04:11.302 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:04:12.608 [DEBUG] [Thread-303388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:04:27.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:04:27.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:04:27.748 [DEBUG] [Thread-303389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:04:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:04:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 4, 20), 18.97, 28.69, 0.0, 19.85, 22.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:04:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:04:20
2025-12-24T14:04:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:04:29.275 [DEBUG] [Thread-303390] [transport.py] [_log()] starting thread (client mode): 0xf5752d70
2025-12-24T14:04:29.276 [DEBUG] [Thread-303390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:04:29.289 [DEBUG] [Thread-303390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:04:29.289 [INFO] [Thread-303390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:04:29.293 [DEBUG] [Thread-303390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] client lang: <none>
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] server lang: <none>
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] kex follows: False
2025-12-24T14:04:29.294 [DEBUG] [Thread-303390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:04:29.295 [DEBUG] [Thread-303390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:04:29.295 [DEBUG] [Thread-303390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:04:29.295 [DEBUG] [Thread-303390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:04:29.295 [DEBUG] [Thread-303390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:04:29.295 [DEBUG] [Thread-303390] [transport.py] [_log()] Compression: none
2025-12-24T14:04:29.295 [DEBUG] [Thread-303390] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:04:29.329 [DEBUG] [Thread-303390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:04:29.332 [DEBUG] [Thread-303390] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:04:29.334 [DEBUG] [Thread-303390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:04:29.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:04:29.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:04:29.337 [DEBUG] [Thread-303390] [transport.py] [_log()] userauth is OK
2025-12-24T14:04:29.337 [DEBUG] [Thread-303390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:04:29.337 [DEBUG] [Thread-303390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:04:29.337 [DEBUG] [Thread-303390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:04:29.337 [DEBUG] [Thread-303390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:04:29.355 [INFO] [Thread-303390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:04:29.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:04:30.024 [DEBUG] [Thread-303390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:04:30.024 [DEBUG] [Thread-303390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:04:30.025 [DEBUG] [Thread-303390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:04:30.066 [DEBUG] [Thread-303390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:04:30.066 [DEBUG] [Thread-303390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:04:30.068 [DEBUG] [Thread-303390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:04:30.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:04:30.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:04:30.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:04:30.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:04:30.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:04:30.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:04:30.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:04:30.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:04:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:04:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.502499 -999.00  +23.10  11.71     34   +6.50 1 2 1 1 1   888    0 14.55 -112.29 ----- 11.7 11.7 110.0 23.9 30.0 -19.2 30.1 -19.1 30.6 -19.4 30.9 -19.7
2025-12-24T14:04:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:04:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:04:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.502499
2025-12-24T14:04:30.094 [DEBUG] [Thread-303390] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:04:30.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:04:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:04:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:04:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:04:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:04:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:04:20', tmtdew=18.97, humidity=28.69, cloud=0.0, wind=19.85, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:03:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:04:30.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:04:30.205 [DEBUG] [Thread-303393] [transport.py] [_log()] starting thread (client mode): 0xf57aa020
2025-12-24T14:04:30.205 [DEBUG] [Thread-303393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:04:30.219 [DEBUG] [Thread-303393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:04:30.219 [INFO] [Thread-303393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] client lang: <none>
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] server lang: <none>
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] kex follows: False
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] Compression: none
2025-12-24T14:04:30.227 [DEBUG] [Thread-303393] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:04:30.289 [DEBUG] [Thread-303393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:04:30.289 [DEBUG] [Thread-303393] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:04:30.290 [DEBUG] [Thread-303393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:04:30.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:04:30.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:04:30.353 [DEBUG] [Thread-303393] [transport.py] [_log()] userauth is OK
2025-12-24T14:04:30.354 [DEBUG] [Thread-303393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:04:30.354 [DEBUG] [Thread-303393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:04:30.354 [DEBUG] [Thread-303393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:04:30.354 [DEBUG] [Thread-303393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:04:30.369 [INFO] [Thread-303393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:04:30.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:04:30.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:04:31.222 [DEBUG] [Thread-303393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:04:31.222 [DEBUG] [Thread-303393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:04:31.269 [DEBUG] [Thread-303393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:04:31.269 [DEBUG] [Thread-303393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:04:31.278 [DEBUG] [Thread-303393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:04:31.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:04:31.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:04:31.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:04:31.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:04:31.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:04:31.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:04:31.311 [DEBUG] [Thread-303393] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:04:33.945 [DEBUG] [Thread-303395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:04:42.854 [DEBUG] [Thread-303396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:04:58.036 [DEBUG] [Thread-303397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:05:01.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:05:01.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:05:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:05:02.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 4, 53), 19.38, 28.09, 0.0, 19.06, 23.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:05:02.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:04:53
2025-12-24T14:05:02.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:05:02.659 [DEBUG] [Thread-303398] [transport.py] [_log()] starting thread (client mode): 0xf57525c0
2025-12-24T14:05:02.660 [DEBUG] [Thread-303398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:05:02.668 [DEBUG] [Thread-303398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:05:02.668 [INFO] [Thread-303398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:05:02.674 [DEBUG] [Thread-303398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] client lang: <none>
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] server lang: <none>
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] kex follows: False
2025-12-24T14:05:02.675 [DEBUG] [Thread-303398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:05:02.676 [DEBUG] [Thread-303398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:05:02.676 [DEBUG] [Thread-303398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:05:02.676 [DEBUG] [Thread-303398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:05:02.676 [DEBUG] [Thread-303398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:05:02.677 [DEBUG] [Thread-303398] [transport.py] [_log()] Compression: none
2025-12-24T14:05:02.677 [DEBUG] [Thread-303398] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:05:02.710 [DEBUG] [Thread-303398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:05:02.714 [DEBUG] [Thread-303398] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:05:02.715 [DEBUG] [Thread-303398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:05:02.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:05:02.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:05:02.720 [DEBUG] [Thread-303398] [transport.py] [_log()] userauth is OK
2025-12-24T14:05:02.720 [DEBUG] [Thread-303398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:05:02.720 [DEBUG] [Thread-303398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:05:02.720 [DEBUG] [Thread-303398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:05:02.720 [DEBUG] [Thread-303398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:05:02.738 [INFO] [Thread-303398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:05:02.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:05:03.421 [DEBUG] [Thread-303398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:05:03.421 [DEBUG] [Thread-303398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:05:03.422 [DEBUG] [Thread-303398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:05:03.462 [DEBUG] [Thread-303398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:05:03.462 [DEBUG] [Thread-303398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:05:03.464 [DEBUG] [Thread-303398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:05:03.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:05:03.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:05:03.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:05:03.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:05:03.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:05:03.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:05:03.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:05:03.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:05:03.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:05:03.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.502846 -999.00  +23.30  19.81     34   +6.60 1 2 1 1 1   888    0 14.21 -111.78 ----- 19.8 19.8 134.8 23.4 29.9 -19.2 30.0 -19.4 30.6 -18.4 30.8 -19.3
2025-12-24T14:05:03.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:05:03.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:05:03.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.502846
2025-12-24T14:05:03.497 [DEBUG] [Thread-303398] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:05:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:05:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:05:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:05:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:05:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:05:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:04:53', tmtdew=19.38, humidity=28.09, cloud=0.0, wind=19.06, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:04:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:05:03.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:05:03.614 [DEBUG] [Thread-303401] [transport.py] [_log()] starting thread (client mode): 0xf5750310
2025-12-24T14:05:03.614 [DEBUG] [Thread-303401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:05:03.628 [DEBUG] [Thread-303401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:05:03.628 [INFO] [Thread-303401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] client lang: <none>
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] server lang: <none>
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] kex follows: False
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:05:03.635 [DEBUG] [Thread-303401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:05:03.636 [DEBUG] [Thread-303401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:05:03.636 [DEBUG] [Thread-303401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:05:03.636 [DEBUG] [Thread-303401] [transport.py] [_log()] Compression: none
2025-12-24T14:05:03.636 [DEBUG] [Thread-303401] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:05:03.700 [DEBUG] [Thread-303401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:05:03.700 [DEBUG] [Thread-303401] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:05:03.701 [DEBUG] [Thread-303401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:05:03.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:05:03.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:05:03.766 [DEBUG] [Thread-303401] [transport.py] [_log()] userauth is OK
2025-12-24T14:05:03.766 [DEBUG] [Thread-303401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:05:03.766 [DEBUG] [Thread-303401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:05:03.766 [DEBUG] [Thread-303401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:05:03.766 [DEBUG] [Thread-303401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:05:03.788 [INFO] [Thread-303401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:05:03.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:05:03.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:05:04.647 [DEBUG] [Thread-303401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:05:04.647 [DEBUG] [Thread-303401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:05:04.686 [DEBUG] [Thread-303401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:05:04.686 [DEBUG] [Thread-303401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:05:04.696 [DEBUG] [Thread-303401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:05:04.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:05:04.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')
2025-12-24T14:05:04.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
2025-12-24T14:05:04.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:05:04.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:05:04.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:05:04.729 [DEBUG] [Thread-303401] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:05:11.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:05:11.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:05:13.121 [DEBUG] [Thread-303403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:05:28.448 [DEBUG] [Thread-303404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:05:34.234 [DEBUG] [Thread-303405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:05:34.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:05:34.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:05:34.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:05:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 5, 26), 19.31, 28.2, 0.0, 15.39, 23.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:05:35.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:05:26
2025-12-24T14:05:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:05:36.051 [DEBUG] [Thread-303406] [transport.py] [_log()] starting thread (client mode): 0xf5750d90
2025-12-24T14:05:36.052 [DEBUG] [Thread-303406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:05:36.064 [DEBUG] [Thread-303406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:05:36.064 [INFO] [Thread-303406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:05:36.069 [DEBUG] [Thread-303406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:05:36.069 [DEBUG] [Thread-303406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:05:36.069 [DEBUG] [Thread-303406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:05:36.069 [DEBUG] [Thread-303406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:05:36.069 [DEBUG] [Thread-303406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:05:36.069 [DEBUG] [Thread-303406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:05:36.069 [DEBUG] [Thread-303406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:05:36.069 [DEBUG] [Thread-303406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:05:36.070 [DEBUG] [Thread-303406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:05:36.070 [DEBUG] [Thread-303406] [transport.py] [_log()] client lang: <none>
2025-12-24T14:05:36.070 [DEBUG] [Thread-303406] [transport.py] [_log()] server lang: <none>
2025-12-24T14:05:36.070 [DEBUG] [Thread-303406] [transport.py] [_log()] kex follows: False
2025-12-24T14:05:36.070 [DEBUG] [Thread-303406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:05:36.070 [DEBUG] [Thread-303406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:05:36.070 [DEBUG] [Thread-303406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:05:36.071 [DEBUG] [Thread-303406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:05:36.071 [DEBUG] [Thread-303406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:05:36.071 [DEBUG] [Thread-303406] [transport.py] [_log()] Compression: none
2025-12-24T14:05:36.071 [DEBUG] [Thread-303406] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:05:36.107 [DEBUG] [Thread-303406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:05:36.112 [DEBUG] [Thread-303406] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:05:36.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:05:36.117 [DEBUG] [Thread-303406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:05:36.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:05:36.120 [DEBUG] [Thread-303406] [transport.py] [_log()] userauth is OK
2025-12-24T14:05:36.120 [DEBUG] [Thread-303406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:05:36.120 [DEBUG] [Thread-303406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:05:36.121 [DEBUG] [Thread-303406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:05:36.121 [DEBUG] [Thread-303406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:05:36.157 [INFO] [Thread-303406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:05:36.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:05:36.801 [DEBUG] [Thread-303406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:05:36.801 [DEBUG] [Thread-303406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:05:36.803 [DEBUG] [Thread-303406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:05:36.841 [DEBUG] [Thread-303406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:05:36.841 [DEBUG] [Thread-303406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:05:36.844 [DEBUG] [Thread-303406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:05:36.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:05:36.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:05:36.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:05:36.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:05:36.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:05:36.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:05:36.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:05:36.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:05:36.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:05:36.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.503541 -999.00  +23.50  18.87     33   +6.60 1 2 1 1 1   888    0 13.78 -130.06 ----- 18.9 18.9 193.2 22.6 29.6 -21.5 29.5 -24.3 30.4 -19.8 30.4 -22.0
2025-12-24T14:05:36.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:05:36.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:05:36.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.503541
2025-12-24T14:05:36.878 [DEBUG] [Thread-303406] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:05:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:05:36.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:05:36.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:05:36.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:05:36.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:05:36.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:05:26', tmtdew=19.31, humidity=28.2, cloud=0.0, wind=15.39, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:05:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:05:36.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:05:36.988 [DEBUG] [Thread-303409] [transport.py] [_log()] starting thread (client mode): 0xf5752890
2025-12-24T14:05:36.989 [DEBUG] [Thread-303409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:05:37.003 [DEBUG] [Thread-303409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:05:37.003 [INFO] [Thread-303409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] client lang: <none>
2025-12-24T14:05:37.010 [DEBUG] [Thread-303409] [transport.py] [_log()] server lang: <none>
2025-12-24T14:05:37.011 [DEBUG] [Thread-303409] [transport.py] [_log()] kex follows: False
2025-12-24T14:05:37.011 [DEBUG] [Thread-303409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:05:37.011 [DEBUG] [Thread-303409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:05:37.011 [DEBUG] [Thread-303409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:05:37.011 [DEBUG] [Thread-303409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:05:37.011 [DEBUG] [Thread-303409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:05:37.011 [DEBUG] [Thread-303409] [transport.py] [_log()] Compression: none
2025-12-24T14:05:37.011 [DEBUG] [Thread-303409] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:05:37.068 [DEBUG] [Thread-303409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:05:37.069 [DEBUG] [Thread-303409] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:05:37.069 [DEBUG] [Thread-303409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:05:37.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:05:37.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:05:37.130 [DEBUG] [Thread-303409] [transport.py] [_log()] userauth is OK
2025-12-24T14:05:37.130 [DEBUG] [Thread-303409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:05:37.130 [DEBUG] [Thread-303409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:05:37.131 [DEBUG] [Thread-303409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:05:37.131 [DEBUG] [Thread-303409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:05:37.152 [INFO] [Thread-303409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:05:37.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:05:37.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:05:38.013 [DEBUG] [Thread-303409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:05:38.013 [DEBUG] [Thread-303409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:05:38.052 [DEBUG] [Thread-303409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:05:38.052 [DEBUG] [Thread-303409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:05:38.061 [DEBUG] [Thread-303409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:05:38.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:05:38.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:05:38.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:05:38.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:05:38.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:05:38.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:05:38.099 [DEBUG] [Thread-303409] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:05:43.518 [DEBUG] [Thread-303411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:05:58.636 [DEBUG] [Thread-303412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:06:08.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:06:08.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:06:08.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:06:09.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 5, 59), 19.23, 28.34, 0.0, 16.5, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:06:09.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:05:59
2025-12-24T14:06:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:06:09.464 [DEBUG] [Thread-303413] [transport.py] [_log()] starting thread (client mode): 0xf57426e0
2025-12-24T14:06:09.465 [DEBUG] [Thread-303413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:06:09.472 [DEBUG] [Thread-303413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:06:09.472 [INFO] [Thread-303413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:06:09.479 [DEBUG] [Thread-303413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:06:09.479 [DEBUG] [Thread-303413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:06:09.479 [DEBUG] [Thread-303413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] client lang: <none>
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] server lang: <none>
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] kex follows: False
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:06:09.480 [DEBUG] [Thread-303413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:06:09.481 [DEBUG] [Thread-303413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:06:09.481 [DEBUG] [Thread-303413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:06:09.481 [DEBUG] [Thread-303413] [transport.py] [_log()] Compression: none
2025-12-24T14:06:09.481 [DEBUG] [Thread-303413] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:06:09.517 [DEBUG] [Thread-303413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:06:09.522 [DEBUG] [Thread-303413] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:06:09.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:06:09.525 [DEBUG] [Thread-303413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:06:09.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:06:09.529 [DEBUG] [Thread-303413] [transport.py] [_log()] userauth is OK
2025-12-24T14:06:09.530 [DEBUG] [Thread-303413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:06:09.530 [DEBUG] [Thread-303413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:06:09.530 [DEBUG] [Thread-303413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:06:09.530 [DEBUG] [Thread-303413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:06:09.561 [INFO] [Thread-303413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:06:09.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:06:10.188 [DEBUG] [Thread-303413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:06:10.188 [DEBUG] [Thread-303413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:06:10.189 [DEBUG] [Thread-303413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:06:10.229 [DEBUG] [Thread-303413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:06:10.229 [DEBUG] [Thread-303413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:06:10.232 [DEBUG] [Thread-303413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:06:10.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:06:10.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:06:10.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:06:10.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:06:10.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:06:10.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:06:10.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:06:10.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:06:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:06:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.503888 -999.00  +23.20  11.82     34   +6.50 1 2 1 1 1   888    0 13.38 -136.03 ----- 11.8 11.8 177.6 18.8 29.4 -20.4 29.3 -19.7 30.1 -19.1 30.3 -20.4
2025-12-24T14:06:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:06:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:06:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.503888
2025-12-24T14:06:10.261 [DEBUG] [Thread-303413] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:06:10.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:06:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:06:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:06:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:06:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:06:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:05:59', tmtdew=19.23, humidity=28.34, cloud=0.0, wind=16.5, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:05:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:06:10.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:06:10.369 [DEBUG] [Thread-303416] [transport.py] [_log()] starting thread (client mode): 0xf5742f50
2025-12-24T14:06:10.369 [DEBUG] [Thread-303416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:06:10.383 [DEBUG] [Thread-303416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:06:10.383 [INFO] [Thread-303416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:06:10.390 [DEBUG] [Thread-303416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] client lang: <none>
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] server lang: <none>
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] kex follows: False
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] Compression: none
2025-12-24T14:06:10.391 [DEBUG] [Thread-303416] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:06:10.448 [DEBUG] [Thread-303416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:06:10.449 [DEBUG] [Thread-303416] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:06:10.449 [DEBUG] [Thread-303416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:06:10.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:06:10.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:06:10.505 [DEBUG] [Thread-303416] [transport.py] [_log()] userauth is OK
2025-12-24T14:06:10.505 [DEBUG] [Thread-303416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:06:10.505 [DEBUG] [Thread-303416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:06:10.506 [DEBUG] [Thread-303416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:06:10.506 [DEBUG] [Thread-303416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:06:10.527 [INFO] [Thread-303416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:06:10.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:06:10.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:06:11.347 [DEBUG] [Thread-303416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:06:11.347 [DEBUG] [Thread-303416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:06:11.385 [DEBUG] [Thread-303416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:06:11.385 [DEBUG] [Thread-303416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:06:11.394 [DEBUG] [Thread-303416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:06:11.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:06:11.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:06:11.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:06:11.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:06:11.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:06:11.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:06:11.427 [DEBUG] [Thread-303416] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:06:11.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:06:11.596 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:06:13.710 [DEBUG] [Thread-303418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:06:28.998 [DEBUG] [Thread-303419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:06:34.547 [DEBUG] [Thread-303420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:06:41.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:06:41.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:06:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:06:42.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 6, 34), 18.67, 29.58, 0.0, 20.43, 22.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:06:42.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:06:34
2025-12-24T14:06:42.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:06:42.567 [DEBUG] [Thread-303421] [transport.py] [_log()] starting thread (client mode): 0xf57521a0
2025-12-24T14:06:42.568 [DEBUG] [Thread-303421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:06:42.569 [DEBUG] [Thread-303421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:06:42.569 [INFO] [Thread-303421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] client lang: <none>
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] server lang: <none>
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] kex follows: False
2025-12-24T14:06:42.573 [DEBUG] [Thread-303421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:06:42.574 [DEBUG] [Thread-303421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:06:42.574 [DEBUG] [Thread-303421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:06:42.574 [DEBUG] [Thread-303421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:06:42.574 [DEBUG] [Thread-303421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:06:42.574 [DEBUG] [Thread-303421] [transport.py] [_log()] Compression: none
2025-12-24T14:06:42.574 [DEBUG] [Thread-303421] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:06:42.604 [DEBUG] [Thread-303421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:06:42.606 [DEBUG] [Thread-303421] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:06:42.608 [DEBUG] [Thread-303421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:06:42.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:06:42.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:06:42.611 [DEBUG] [Thread-303421] [transport.py] [_log()] userauth is OK
2025-12-24T14:06:42.611 [DEBUG] [Thread-303421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:06:42.611 [DEBUG] [Thread-303421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:06:42.611 [DEBUG] [Thread-303421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:06:42.611 [DEBUG] [Thread-303421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:06:42.629 [INFO] [Thread-303421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:06:42.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:06:43.283 [DEBUG] [Thread-303421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:06:43.283 [DEBUG] [Thread-303421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:06:43.284 [DEBUG] [Thread-303421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:06:43.325 [DEBUG] [Thread-303421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:06:43.325 [DEBUG] [Thread-303421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:06:43.350 [DEBUG] [Thread-303421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:06:43.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:06:43.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:06:43.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:06:43.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:06:43.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:06:43.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:06:43.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:06:43.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:06:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:06:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.504235 -999.00  +23.10  13.03     34   +6.50 1 2 1 1 1   888    0 13.56 -120.95 ----- 13.0 13.0 134.0 16.3 29.4 -21.5 29.2 -19.5 30.0 -19.0 30.2 -20.2
2025-12-24T14:06:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:06:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:06:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.504235
2025-12-24T14:06:43.379 [DEBUG] [Thread-303421] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:06:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:06:43.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:06:43.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:06:43.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:06:43.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:06:43.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:06:34', tmtdew=18.67, humidity=29.58, cloud=0.0, wind=20.43, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:06:05.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:06:43.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:06:43.481 [DEBUG] [Thread-303424] [transport.py] [_log()] starting thread (client mode): 0xf57be4d0
2025-12-24T14:06:43.481 [DEBUG] [Thread-303424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:06:43.496 [DEBUG] [Thread-303424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:06:43.496 [INFO] [Thread-303424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] client lang: <none>
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] server lang: <none>
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] kex follows: False
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:06:43.503 [DEBUG] [Thread-303424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:06:43.504 [DEBUG] [Thread-303424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:06:43.504 [DEBUG] [Thread-303424] [transport.py] [_log()] Compression: none
2025-12-24T14:06:43.504 [DEBUG] [Thread-303424] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:06:43.559 [DEBUG] [Thread-303424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:06:43.559 [DEBUG] [Thread-303424] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:06:43.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:06:43.560 [DEBUG] [Thread-303424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:06:43.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:06:43.620 [DEBUG] [Thread-303424] [transport.py] [_log()] userauth is OK
2025-12-24T14:06:43.620 [DEBUG] [Thread-303424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:06:43.621 [DEBUG] [Thread-303424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:06:43.621 [DEBUG] [Thread-303424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:06:43.621 [DEBUG] [Thread-303424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:06:43.639 [INFO] [Thread-303424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:06:43.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:06:43.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:06:44.096 [DEBUG] [Thread-303426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:06:44.516 [DEBUG] [Thread-303424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:06:44.516 [DEBUG] [Thread-303424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:06:44.563 [DEBUG] [Thread-303424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:06:44.564 [DEBUG] [Thread-303424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:06:44.572 [DEBUG] [Thread-303424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:06:44.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:06:44.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:06:44.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:06:44.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:06:44.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:06:44.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:06:44.605 [DEBUG] [Thread-303424] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:06:59.264 [DEBUG] [Thread-303427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:07:11.764 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:07:11.784 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:07:14.389 [DEBUG] [Thread-303428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:07:14.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:07:14.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:07:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:07:15.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 7, 7), 18.47, 29.93, 0.0, 16.22, 22.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:07:15.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:07:07
2025-12-24T14:07:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:07:15.899 [DEBUG] [Thread-303429] [transport.py] [_log()] starting thread (client mode): 0xf81c3f10
2025-12-24T14:07:15.899 [DEBUG] [Thread-303429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:07:15.913 [DEBUG] [Thread-303429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:07:15.914 [INFO] [Thread-303429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:07:15.920 [DEBUG] [Thread-303429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:07:15.920 [DEBUG] [Thread-303429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:07:15.920 [DEBUG] [Thread-303429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:07:15.920 [DEBUG] [Thread-303429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:07:15.920 [DEBUG] [Thread-303429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:07:15.921 [DEBUG] [Thread-303429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:07:15.921 [DEBUG] [Thread-303429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:07:15.921 [DEBUG] [Thread-303429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:07:15.921 [DEBUG] [Thread-303429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:07:15.921 [DEBUG] [Thread-303429] [transport.py] [_log()] client lang: <none>
2025-12-24T14:07:15.921 [DEBUG] [Thread-303429] [transport.py] [_log()] server lang: <none>
2025-12-24T14:07:15.921 [DEBUG] [Thread-303429] [transport.py] [_log()] kex follows: False
2025-12-24T14:07:15.921 [DEBUG] [Thread-303429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:07:15.922 [DEBUG] [Thread-303429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:07:15.922 [DEBUG] [Thread-303429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:07:15.922 [DEBUG] [Thread-303429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:07:15.922 [DEBUG] [Thread-303429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:07:15.923 [DEBUG] [Thread-303429] [transport.py] [_log()] Compression: none
2025-12-24T14:07:15.923 [DEBUG] [Thread-303429] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:07:15.961 [DEBUG] [Thread-303429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:07:15.965 [DEBUG] [Thread-303429] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:07:15.967 [DEBUG] [Thread-303429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:07:15.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:07:15.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:07:15.972 [DEBUG] [Thread-303429] [transport.py] [_log()] userauth is OK
2025-12-24T14:07:15.973 [DEBUG] [Thread-303429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:07:15.973 [DEBUG] [Thread-303429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:07:15.973 [DEBUG] [Thread-303429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:07:15.973 [DEBUG] [Thread-303429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:07:15.999 [INFO] [Thread-303429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:07:16.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:07:16.613 [DEBUG] [Thread-303429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:07:16.613 [DEBUG] [Thread-303429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:07:16.614 [DEBUG] [Thread-303429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:07:16.654 [DEBUG] [Thread-303429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:07:16.654 [DEBUG] [Thread-303429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:07:16.657 [DEBUG] [Thread-303429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:07:16.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:07:16.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:07:16.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:07:16.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:07:16.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:07:16.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:07:16.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:07:16.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:07:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:07:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.504582 -999.00  +22.70   7.96     34   +6.30 1 2 1 1 1   888    0 14.13 -117.89 ----- 8.0 8.0 123.0 18.1 29.1 -21.9 29.2 -19.6 29.9 -19.4 30.1 -20.1
2025-12-24T14:07:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:07:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:07:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.504582
2025-12-24T14:07:16.691 [DEBUG] [Thread-303429] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:07:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:07:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:07:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:07:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:07:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:07:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:07:07', tmtdew=18.47, humidity=29.93, cloud=0.0, wind=16.22, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:06:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:07:16.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:07:16.799 [DEBUG] [Thread-303432] [transport.py] [_log()] starting thread (client mode): 0xf5770dc0
2025-12-24T14:07:16.799 [DEBUG] [Thread-303432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:07:16.813 [DEBUG] [Thread-303432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:07:16.814 [INFO] [Thread-303432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:07:16.821 [DEBUG] [Thread-303432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:07:16.821 [DEBUG] [Thread-303432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:07:16.821 [DEBUG] [Thread-303432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] client lang: <none>
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] server lang: <none>
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] kex follows: False
2025-12-24T14:07:16.822 [DEBUG] [Thread-303432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:07:16.823 [DEBUG] [Thread-303432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:07:16.823 [DEBUG] [Thread-303432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:07:16.823 [DEBUG] [Thread-303432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:07:16.823 [DEBUG] [Thread-303432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:07:16.823 [DEBUG] [Thread-303432] [transport.py] [_log()] Compression: none
2025-12-24T14:07:16.824 [DEBUG] [Thread-303432] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:07:16.885 [DEBUG] [Thread-303432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:07:16.885 [DEBUG] [Thread-303432] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:07:16.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:07:16.886 [DEBUG] [Thread-303432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:07:16.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:07:16.940 [DEBUG] [Thread-303432] [transport.py] [_log()] userauth is OK
2025-12-24T14:07:16.940 [DEBUG] [Thread-303432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:07:16.940 [DEBUG] [Thread-303432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:07:16.941 [DEBUG] [Thread-303432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:07:16.941 [DEBUG] [Thread-303432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:07:16.960 [INFO] [Thread-303432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:07:16.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:07:16.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:07:17.800 [DEBUG] [Thread-303432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:07:17.800 [DEBUG] [Thread-303432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:07:17.848 [DEBUG] [Thread-303432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:07:17.848 [DEBUG] [Thread-303432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:07:17.857 [DEBUG] [Thread-303432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:07:17.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:07:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:07:17.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:07:17.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:07:17.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:07:17.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:07:17.894 [DEBUG] [Thread-303432] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:07:29.515 [DEBUG] [Thread-303434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:07:34.883 [DEBUG] [Thread-303435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:07:44.716 [DEBUG] [Thread-303436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:07:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:07:47.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:07:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:07:48.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 7, 40), 18.48, 30.1, 0.0, 10.57, 22.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:07:48.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:07:40
2025-12-24T14:07:49.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:07:49.215 [DEBUG] [Thread-303437] [transport.py] [_log()] starting thread (client mode): 0xf5750280
2025-12-24T14:07:49.216 [DEBUG] [Thread-303437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:07:49.228 [DEBUG] [Thread-303437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:07:49.229 [INFO] [Thread-303437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] client lang: <none>
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] server lang: <none>
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] kex follows: False
2025-12-24T14:07:49.234 [DEBUG] [Thread-303437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:07:49.235 [DEBUG] [Thread-303437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:07:49.235 [DEBUG] [Thread-303437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:07:49.235 [DEBUG] [Thread-303437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:07:49.235 [DEBUG] [Thread-303437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:07:49.235 [DEBUG] [Thread-303437] [transport.py] [_log()] Compression: none
2025-12-24T14:07:49.235 [DEBUG] [Thread-303437] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:07:49.269 [DEBUG] [Thread-303437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:07:49.272 [DEBUG] [Thread-303437] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:07:49.274 [DEBUG] [Thread-303437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:07:49.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:07:49.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:07:49.277 [DEBUG] [Thread-303437] [transport.py] [_log()] userauth is OK
2025-12-24T14:07:49.277 [DEBUG] [Thread-303437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:07:49.277 [DEBUG] [Thread-303437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:07:49.277 [DEBUG] [Thread-303437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:07:49.277 [DEBUG] [Thread-303437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:07:49.299 [INFO] [Thread-303437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:07:49.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:07:49.938 [DEBUG] [Thread-303437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:07:49.938 [DEBUG] [Thread-303437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:07:49.940 [DEBUG] [Thread-303437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:07:49.979 [DEBUG] [Thread-303437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:07:49.980 [DEBUG] [Thread-303437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:07:49.983 [DEBUG] [Thread-303437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:07:49.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:07:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:07:49.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:07:49.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:07:50.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:07:50.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:07:50.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:07:50.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:07:50.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:07:50.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.504930 -999.00  +22.90  10.73     34   +6.50 1 2 1 1 1   888    0 13.52 -121.38 ----- 10.7 10.7 203.3 14.7 29.2 -19.8 29.1 -20.1 29.8 -18.9 30.0 -19.7
2025-12-24T14:07:50.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:07:50.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:07:50.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.504930
2025-12-24T14:07:50.005 [DEBUG] [Thread-303437] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:07:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:07:50.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:07:50.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:07:50.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:07:50.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:07:50.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:07:40', tmtdew=18.48, humidity=30.1, cloud=0.0, wind=10.57, temperature=22.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:07:05.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:07:50.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:07:59.831 [DEBUG] [Thread-303440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:08:11.940 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:08:11.953 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:08:14.997 [DEBUG] [Thread-303441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:08:30.094 [DEBUG] [Thread-303442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:08:35.196 [DEBUG] [Thread-303443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:08:45.137 [DEBUG] [Thread-303444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:09:00.246 [DEBUG] [Thread-303445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:09:12.122 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:09:12.142 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:09:15.361 [DEBUG] [Thread-303446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:09:30.459 [DEBUG] [Thread-303447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:09:35.445 [DEBUG] [Thread-303448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:09:45.553 [DEBUG] [Thread-303449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:10:00.696 [DEBUG] [Thread-303450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:10:04.398 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T14:10:12.296 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:10:12.299 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:10:15.800 [DEBUG] [Thread-303451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:10:30.913 [DEBUG] [Thread-303452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:10:34.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:10:34.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:10:34.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:10:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 10, 27), 18.76, 29.22, 0.0, 13.69, 22.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:10:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:10:27
2025-12-24T14:10:35.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:10:35.631 [DEBUG] [Thread-303453] [transport.py] [_log()] starting thread (client mode): 0xf5753d30
2025-12-24T14:10:35.632 [DEBUG] [Thread-303453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:10:35.642 [DEBUG] [Thread-303453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:10:35.643 [INFO] [Thread-303453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:10:35.647 [DEBUG] [Thread-303453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] client lang: <none>
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] server lang: <none>
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] kex follows: False
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:10:35.648 [DEBUG] [Thread-303453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:10:35.649 [DEBUG] [Thread-303453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:10:35.649 [DEBUG] [Thread-303453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:10:35.649 [DEBUG] [Thread-303453] [transport.py] [_log()] Compression: none
2025-12-24T14:10:35.649 [DEBUG] [Thread-303453] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:10:35.680 [DEBUG] [Thread-303453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:10:35.683 [DEBUG] [Thread-303453] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:10:35.684 [DEBUG] [Thread-303453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:10:35.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:10:35.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:10:35.688 [DEBUG] [Thread-303453] [transport.py] [_log()] userauth is OK
2025-12-24T14:10:35.688 [DEBUG] [Thread-303453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:10:35.689 [DEBUG] [Thread-303453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:10:35.689 [DEBUG] [Thread-303453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:10:35.689 [DEBUG] [Thread-303453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:10:35.695 [DEBUG] [Thread-303455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:10:35.718 [INFO] [Thread-303453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:10:35.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:10:36.366 [DEBUG] [Thread-303453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:10:36.367 [DEBUG] [Thread-303453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:10:36.369 [DEBUG] [Thread-303453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:10:36.399 [DEBUG] [Thread-303453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:10:36.400 [DEBUG] [Thread-303453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:10:36.404 [DEBUG] [Thread-303453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:10:36.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:10:36.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:10:36.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:10:36.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:10:36.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:10:36.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:10:36.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:10:36.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:10:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:10:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.507013 -999.00  +23.30  13.48     34   +6.50 1 2 1 1 1   888    0 14.36 -105.00 ----- 13.5 13.5 137.2 24.1 30.3 -15.1 30.0 -15.1 30.3 -17.9 31.1 -14.8
2025-12-24T14:10:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:10:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:10:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.507013
2025-12-24T14:10:36.439 [DEBUG] [Thread-303453] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:10:36.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:10:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:10:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:10:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:10:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:10:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:10:27', tmtdew=18.76, humidity=29.22, cloud=0.0, wind=13.69, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:10:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:10:36.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:10:36.555 [DEBUG] [Thread-303457] [transport.py] [_log()] starting thread (client mode): 0xf5750670
2025-12-24T14:10:36.555 [DEBUG] [Thread-303457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:10:36.569 [DEBUG] [Thread-303457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:10:36.569 [INFO] [Thread-303457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:10:36.577 [DEBUG] [Thread-303457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:10:36.577 [DEBUG] [Thread-303457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] client lang: <none>
2025-12-24T14:10:36.578 [DEBUG] [Thread-303457] [transport.py] [_log()] server lang: <none>
2025-12-24T14:10:36.579 [DEBUG] [Thread-303457] [transport.py] [_log()] kex follows: False
2025-12-24T14:10:36.579 [DEBUG] [Thread-303457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:10:36.579 [DEBUG] [Thread-303457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:10:36.579 [DEBUG] [Thread-303457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:10:36.579 [DEBUG] [Thread-303457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:10:36.579 [DEBUG] [Thread-303457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:10:36.579 [DEBUG] [Thread-303457] [transport.py] [_log()] Compression: none
2025-12-24T14:10:36.580 [DEBUG] [Thread-303457] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:10:36.636 [DEBUG] [Thread-303457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:10:36.636 [DEBUG] [Thread-303457] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:10:36.636 [DEBUG] [Thread-303457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:10:36.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:10:36.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:10:36.693 [DEBUG] [Thread-303457] [transport.py] [_log()] userauth is OK
2025-12-24T14:10:36.694 [DEBUG] [Thread-303457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:10:36.694 [DEBUG] [Thread-303457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:10:36.694 [DEBUG] [Thread-303457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:10:36.694 [DEBUG] [Thread-303457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:10:36.712 [INFO] [Thread-303457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:10:36.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:10:36.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:10:37.574 [DEBUG] [Thread-303457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:10:37.574 [DEBUG] [Thread-303457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:10:37.614 [DEBUG] [Thread-303457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:10:37.614 [DEBUG] [Thread-303457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:10:37.626 [DEBUG] [Thread-303457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:10:37.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:10:37.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')
2025-12-24T14:10:37.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:10:37.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:10:37.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:10:37.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:10:37.664 [DEBUG] [Thread-303457] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:10:46.017 [DEBUG] [Thread-303459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:11:01.172 [DEBUG] [Thread-303460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:11:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:11:07.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:11:07.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:11:08.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 10, 27), 18.76, 29.22, 0.0, 13.69, 22.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:11:08.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:10:27
2025-12-24T14:11:08.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:11:08.932 [DEBUG] [Thread-303461] [transport.py] [_log()] starting thread (client mode): 0xf574f2e0
2025-12-24T14:11:08.933 [DEBUG] [Thread-303461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:11:08.937 [DEBUG] [Thread-303461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:11:08.937 [INFO] [Thread-303461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:11:08.941 [DEBUG] [Thread-303461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:11:08.942 [DEBUG] [Thread-303461] [transport.py] [_log()] client lang: <none>
2025-12-24T14:11:08.942 [DEBUG] [Thread-303461] [transport.py] [_log()] server lang: <none>
2025-12-24T14:11:08.942 [DEBUG] [Thread-303461] [transport.py] [_log()] kex follows: False
2025-12-24T14:11:08.942 [DEBUG] [Thread-303461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:11:08.942 [DEBUG] [Thread-303461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:11:08.943 [DEBUG] [Thread-303461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:11:08.943 [DEBUG] [Thread-303461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:11:08.943 [DEBUG] [Thread-303461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:11:08.943 [DEBUG] [Thread-303461] [transport.py] [_log()] Compression: none
2025-12-24T14:11:08.943 [DEBUG] [Thread-303461] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:11:08.979 [DEBUG] [Thread-303461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:11:08.982 [DEBUG] [Thread-303461] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:11:08.983 [DEBUG] [Thread-303461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:11:08.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:11:08.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:11:08.988 [DEBUG] [Thread-303461] [transport.py] [_log()] userauth is OK
2025-12-24T14:11:08.988 [DEBUG] [Thread-303461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:11:08.988 [DEBUG] [Thread-303461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:11:08.988 [DEBUG] [Thread-303461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:11:08.988 [DEBUG] [Thread-303461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:11:09.014 [INFO] [Thread-303461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:11:09.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:11:09.679 [DEBUG] [Thread-303461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:11:09.679 [DEBUG] [Thread-303461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:11:09.688 [DEBUG] [Thread-303461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:11:09.720 [DEBUG] [Thread-303461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:11:09.720 [DEBUG] [Thread-303461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:11:09.722 [DEBUG] [Thread-303461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:11:09.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:11:09.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:11:09.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:11:09.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:11:09.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:11:09.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:11:09.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:11:09.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:11:09.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:11:09.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.507360 -999.00  +23.50  10.12     34   +6.70 1 2 1 1 1   888    0 14.13 -105.87 ----- 10.1 10.1 155.8 18.6 30.6 -15.9 30.4 -15.6 30.9 -12.6 31.5 -14.8
2025-12-24T14:11:09.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:11:09.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:11:09.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.507360
2025-12-24T14:11:09.751 [DEBUG] [Thread-303461] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:11:09.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:11:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:11:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:11:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:11:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:11:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:10:27', tmtdew=18.76, humidity=29.22, cloud=0.0, wind=13.69, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:10:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:11:09.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:11:09.848 [DEBUG] [Thread-303464] [transport.py] [_log()] starting thread (client mode): 0xf5753310
2025-12-24T14:11:09.848 [DEBUG] [Thread-303464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:11:09.862 [DEBUG] [Thread-303464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:11:09.862 [INFO] [Thread-303464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:11:09.870 [DEBUG] [Thread-303464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:11:09.870 [DEBUG] [Thread-303464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] client lang: <none>
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] server lang: <none>
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] kex follows: False
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] Compression: none
2025-12-24T14:11:09.871 [DEBUG] [Thread-303464] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:11:09.930 [DEBUG] [Thread-303464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:11:09.930 [DEBUG] [Thread-303464] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:11:09.931 [DEBUG] [Thread-303464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:11:09.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:11:09.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:11:09.986 [DEBUG] [Thread-303464] [transport.py] [_log()] userauth is OK
2025-12-24T14:11:09.986 [DEBUG] [Thread-303464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:11:09.986 [DEBUG] [Thread-303464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:11:09.986 [DEBUG] [Thread-303464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:11:09.986 [DEBUG] [Thread-303464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:11:10.012 [INFO] [Thread-303464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:11:10.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:11:10.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:11:10.845 [DEBUG] [Thread-303464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:11:10.845 [DEBUG] [Thread-303464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:11:10.892 [DEBUG] [Thread-303464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:11:10.892 [DEBUG] [Thread-303464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:11:10.900 [DEBUG] [Thread-303464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:11:10.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:11:10.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')
2025-12-24T14:11:10.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:11:10.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:11:10.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:11:10.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:11:10.935 [DEBUG] [Thread-303464] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:11:12.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:11:12.451 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:11:16.269 [DEBUG] [Thread-303466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:11:31.421 [DEBUG] [Thread-303467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:11:35.960 [DEBUG] [Thread-303468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:11:40.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:11:40.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:11:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:11:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 11, 33), 19.29, 28.39, 0.0, 20.75, 23.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:11:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:11:33
2025-12-24T14:11:41.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:11:42.095 [DEBUG] [Thread-303469] [transport.py] [_log()] starting thread (client mode): 0xf57bc0d0
2025-12-24T14:11:42.096 [DEBUG] [Thread-303469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:11:42.109 [DEBUG] [Thread-303469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:11:42.109 [INFO] [Thread-303469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:11:42.114 [DEBUG] [Thread-303469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:11:42.114 [DEBUG] [Thread-303469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:11:42.114 [DEBUG] [Thread-303469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:11:42.114 [DEBUG] [Thread-303469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] client lang: <none>
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] server lang: <none>
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] kex follows: False
2025-12-24T14:11:42.115 [DEBUG] [Thread-303469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:11:42.116 [DEBUG] [Thread-303469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:11:42.116 [DEBUG] [Thread-303469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:11:42.116 [DEBUG] [Thread-303469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:11:42.116 [DEBUG] [Thread-303469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:11:42.116 [DEBUG] [Thread-303469] [transport.py] [_log()] Compression: none
2025-12-24T14:11:42.116 [DEBUG] [Thread-303469] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:11:42.149 [DEBUG] [Thread-303469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:11:42.153 [DEBUG] [Thread-303469] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:11:42.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:11:42.155 [DEBUG] [Thread-303469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:11:42.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:11:42.158 [DEBUG] [Thread-303469] [transport.py] [_log()] userauth is OK
2025-12-24T14:11:42.158 [DEBUG] [Thread-303469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:11:42.158 [DEBUG] [Thread-303469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:11:42.158 [DEBUG] [Thread-303469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:11:42.158 [DEBUG] [Thread-303469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:11:42.177 [INFO] [Thread-303469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:11:42.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:11:42.804 [DEBUG] [Thread-303469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:11:42.804 [DEBUG] [Thread-303469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:11:42.805 [DEBUG] [Thread-303469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:11:42.845 [DEBUG] [Thread-303469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:11:42.845 [DEBUG] [Thread-303469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:11:42.847 [DEBUG] [Thread-303469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:11:42.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:11:42.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:11:42.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:11:42.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:11:42.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:11:42.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:11:42.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:11:42.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:11:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:11:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.507708 -999.00  +23.60  13.06     33   +6.70 1 2 1 1 1   888    0 14.14 -102.12 ----- 13.1 13.1 171.8 14.7 30.8 -16.4 30.4 -17.4 31.3 -13.6 31.7 -17.1
2025-12-24T14:11:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:11:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:11:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.507708
2025-12-24T14:11:42.882 [DEBUG] [Thread-303469] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:11:42.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:11:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:11:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:11:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:11:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:11:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:11:33', tmtdew=19.29, humidity=28.39, cloud=0.0, wind=20.75, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:11:05.971', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:11:42.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:11:42.985 [DEBUG] [Thread-303472] [transport.py] [_log()] starting thread (client mode): 0xf574c190
2025-12-24T14:11:42.985 [DEBUG] [Thread-303472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:11:43.001 [DEBUG] [Thread-303472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:11:43.002 [INFO] [Thread-303472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] client lang: <none>
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] server lang: <none>
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] kex follows: False
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:11:43.009 [DEBUG] [Thread-303472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:11:43.010 [DEBUG] [Thread-303472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:11:43.010 [DEBUG] [Thread-303472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:11:43.010 [DEBUG] [Thread-303472] [transport.py] [_log()] Compression: none
2025-12-24T14:11:43.010 [DEBUG] [Thread-303472] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:11:43.069 [DEBUG] [Thread-303472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:11:43.069 [DEBUG] [Thread-303472] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:11:43.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:11:43.069 [DEBUG] [Thread-303472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:11:43.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:11:43.126 [DEBUG] [Thread-303472] [transport.py] [_log()] userauth is OK
2025-12-24T14:11:43.126 [DEBUG] [Thread-303472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:11:43.126 [DEBUG] [Thread-303472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:11:43.126 [DEBUG] [Thread-303472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:11:43.126 [DEBUG] [Thread-303472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:11:43.140 [INFO] [Thread-303472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:11:43.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:11:43.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:11:43.984 [DEBUG] [Thread-303472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:11:43.984 [DEBUG] [Thread-303472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:11:44.031 [DEBUG] [Thread-303472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:11:44.031 [DEBUG] [Thread-303472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:11:44.039 [DEBUG] [Thread-303472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:11:44.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:11:44.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:11:44.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:11:44.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:11:44.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:11:44.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:11:44.072 [DEBUG] [Thread-303472] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:11:46.498 [DEBUG] [Thread-303474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:12:01.676 [DEBUG] [Thread-303475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:12:12.596 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:12:12.598 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:12:14.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:12:14.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:12:14.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:12:14.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 12, 6), 19.19, 28.55, 0.0, 20.61, 23.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:12:14.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:12:06
2025-12-24T14:12:15.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:12:15.338 [DEBUG] [Thread-303476] [transport.py] [_log()] starting thread (client mode): 0xf57bf160
2025-12-24T14:12:15.338 [DEBUG] [Thread-303476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:12:15.351 [DEBUG] [Thread-303476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:12:15.351 [INFO] [Thread-303476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:12:15.356 [DEBUG] [Thread-303476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] client lang: <none>
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] server lang: <none>
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] kex follows: False
2025-12-24T14:12:15.357 [DEBUG] [Thread-303476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:12:15.358 [DEBUG] [Thread-303476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:12:15.358 [DEBUG] [Thread-303476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:12:15.358 [DEBUG] [Thread-303476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:12:15.358 [DEBUG] [Thread-303476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:12:15.358 [DEBUG] [Thread-303476] [transport.py] [_log()] Compression: none
2025-12-24T14:12:15.358 [DEBUG] [Thread-303476] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:12:15.392 [DEBUG] [Thread-303476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:12:15.397 [DEBUG] [Thread-303476] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:12:15.399 [DEBUG] [Thread-303476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:12:15.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:12:15.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:12:15.405 [DEBUG] [Thread-303476] [transport.py] [_log()] userauth is OK
2025-12-24T14:12:15.405 [DEBUG] [Thread-303476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:12:15.406 [DEBUG] [Thread-303476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:12:15.406 [DEBUG] [Thread-303476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:12:15.406 [DEBUG] [Thread-303476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:12:15.430 [INFO] [Thread-303476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:12:15.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:12:16.051 [DEBUG] [Thread-303476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:12:16.051 [DEBUG] [Thread-303476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:12:16.052 [DEBUG] [Thread-303476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:12:16.092 [DEBUG] [Thread-303476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:12:16.092 [DEBUG] [Thread-303476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:12:16.094 [DEBUG] [Thread-303476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:12:16.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:12:16.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:12:16.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:12:16.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:12:16.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:12:16.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:12:16.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:12:16.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:12:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:12:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.508055 -999.00  +23.60   9.19     33   +6.80 1 2 1 1 1   888    0 14.07 -96.18 ----- 9.2 9.2 229.1 16.2 31.1 -16.6 30.6 -16.4 31.4 -13.8 32.2 -15.1
2025-12-24T14:12:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:12:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:12:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.508055
2025-12-24T14:12:16.123 [DEBUG] [Thread-303476] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:12:16.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:12:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:12:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:12:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:12:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:12:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:12:06', tmtdew=19.19, humidity=28.55, cloud=0.0, wind=20.61, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:11:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:12:16.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:12:16.220 [DEBUG] [Thread-303479] [transport.py] [_log()] starting thread (client mode): 0xf5770f40
2025-12-24T14:12:16.220 [DEBUG] [Thread-303479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:12:16.234 [DEBUG] [Thread-303479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:12:16.234 [INFO] [Thread-303479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:12:16.242 [DEBUG] [Thread-303479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:12:16.242 [DEBUG] [Thread-303479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:12:16.242 [DEBUG] [Thread-303479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:12:16.242 [DEBUG] [Thread-303479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:12:16.242 [DEBUG] [Thread-303479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:12:16.242 [DEBUG] [Thread-303479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] client lang: <none>
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] server lang: <none>
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] kex follows: False
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] Compression: none
2025-12-24T14:12:16.243 [DEBUG] [Thread-303479] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:12:16.300 [DEBUG] [Thread-303479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:12:16.300 [DEBUG] [Thread-303479] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:12:16.301 [DEBUG] [Thread-303479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:12:16.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:12:16.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:12:16.364 [DEBUG] [Thread-303479] [transport.py] [_log()] userauth is OK
2025-12-24T14:12:16.365 [DEBUG] [Thread-303479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:12:16.365 [DEBUG] [Thread-303479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:12:16.365 [DEBUG] [Thread-303479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:12:16.365 [DEBUG] [Thread-303479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:12:16.390 [INFO] [Thread-303479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:12:16.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:12:16.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:12:16.785 [DEBUG] [Thread-303481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:12:17.227 [DEBUG] [Thread-303479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:12:17.227 [DEBUG] [Thread-303479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:12:17.274 [DEBUG] [Thread-303479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:12:17.274 [DEBUG] [Thread-303479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:12:17.282 [DEBUG] [Thread-303479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:12:17.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:12: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')
2025-12-24T14:12:17.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:12:17.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:12:17.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:12:17.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:12:17.315 [DEBUG] [Thread-303479] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:12:31.934 [DEBUG] [Thread-303482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:12:36.295 [DEBUG] [Thread-303483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:12:46.973 [DEBUG] [Thread-303484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:12:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:12:47.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:12:47.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
2025-12-24T14:12:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 12, 39), 18.94, 29.15, 0.0, 12.93, 22.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:12:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:12:39
2025-12-24T14:12:48.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:12:48.628 [DEBUG] [Thread-303485] [transport.py] [_log()] starting thread (client mode): 0xf81c3970
2025-12-24T14:12:48.628 [DEBUG] [Thread-303485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:12:48.639 [DEBUG] [Thread-303485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:12:48.639 [INFO] [Thread-303485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] client lang: <none>
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] server lang: <none>
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] kex follows: False
2025-12-24T14:12:48.645 [DEBUG] [Thread-303485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:12:48.646 [DEBUG] [Thread-303485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:12:48.646 [DEBUG] [Thread-303485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:12:48.646 [DEBUG] [Thread-303485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:12:48.646 [DEBUG] [Thread-303485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:12:48.647 [DEBUG] [Thread-303485] [transport.py] [_log()] Compression: none
2025-12-24T14:12:48.647 [DEBUG] [Thread-303485] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:12:48.683 [DEBUG] [Thread-303485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:12:48.688 [DEBUG] [Thread-303485] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:12:48.690 [DEBUG] [Thread-303485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:12:48.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:12:48.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:12:48.696 [DEBUG] [Thread-303485] [transport.py] [_log()] userauth is OK
2025-12-24T14:12:48.696 [DEBUG] [Thread-303485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:12:48.697 [DEBUG] [Thread-303485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:12:48.697 [DEBUG] [Thread-303485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:12:48.697 [DEBUG] [Thread-303485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:12:48.734 [INFO] [Thread-303485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:12:48.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:12:49.360 [DEBUG] [Thread-303485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:12:49.360 [DEBUG] [Thread-303485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:12:49.364 [DEBUG] [Thread-303485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:12:49.401 [DEBUG] [Thread-303485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:12:49.401 [DEBUG] [Thread-303485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:12:49.405 [DEBUG] [Thread-303485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:12:49.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:12:49.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:12:49.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:12:49.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:12:49.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:12:49.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:12:49.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:12:49.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:12:49.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:12:49.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.508402 -999.00  +23.90   7.52     33   +6.70 1 2 1 1 1   888    0 14.30 -91.34 ----- 7.5 7.5 173.4 18.9 30.9 -21.8 30.4 -21.3 31.5 -19.9 31.9 -20.3
2025-12-24T14:12:49.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:12:49.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:12:49.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.508402
2025-12-24T14:12:49.435 [DEBUG] [Thread-303485] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:12:49.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:12:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:12:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:12:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:12:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:12:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:12:39', tmtdew=18.94, humidity=29.15, cloud=0.0, wind=12.93, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:12:05.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:12:49.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:12:49.539 [DEBUG] [Thread-303488] [transport.py] [_log()] starting thread (client mode): 0xf57bf400
2025-12-24T14:12:49.540 [DEBUG] [Thread-303488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:12:49.555 [DEBUG] [Thread-303488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:12:49.555 [INFO] [Thread-303488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:12:49.562 [DEBUG] [Thread-303488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:12:49.562 [DEBUG] [Thread-303488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] client lang: <none>
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] server lang: <none>
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] kex follows: False
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:12:49.563 [DEBUG] [Thread-303488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:12:49.564 [DEBUG] [Thread-303488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:12:49.564 [DEBUG] [Thread-303488] [transport.py] [_log()] Compression: none
2025-12-24T14:12:49.564 [DEBUG] [Thread-303488] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:12:49.623 [DEBUG] [Thread-303488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:12:49.624 [DEBUG] [Thread-303488] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:12:49.625 [DEBUG] [Thread-303488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:12:49.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:12:49.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:12:49.684 [DEBUG] [Thread-303488] [transport.py] [_log()] userauth is OK
2025-12-24T14:12:49.684 [DEBUG] [Thread-303488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:12:49.684 [DEBUG] [Thread-303488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:12:49.684 [DEBUG] [Thread-303488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:12:49.684 [DEBUG] [Thread-303488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:12:49.703 [INFO] [Thread-303488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:12:49.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:12:49.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:12:50.573 [DEBUG] [Thread-303488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:12:50.573 [DEBUG] [Thread-303488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:12:50.620 [DEBUG] [Thread-303488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:12:50.620 [DEBUG] [Thread-303488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:12:50.629 [DEBUG] [Thread-303488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:12:50.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:12:50.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:12:50.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:12:50.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:12:50.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:12:50.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:12:50.664 [DEBUG] [Thread-303488] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:13:02.019 [DEBUG] [Thread-303490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:13:12.758 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:13:12.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:13:17.197 [DEBUG] [Thread-303491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:13:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:13:20.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:13:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:13:21.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 13, 13), 18.92, 29.17, 0.0, 10.16, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:13:21.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:13:13
2025-12-24T14:13:21.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:13:21.894 [DEBUG] [Thread-303492] [transport.py] [_log()] starting thread (client mode): 0xf81e6950
2025-12-24T14:13:21.895 [DEBUG] [Thread-303492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:13:21.907 [DEBUG] [Thread-303492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:13:21.907 [INFO] [Thread-303492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:13:21.912 [DEBUG] [Thread-303492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:13:21.912 [DEBUG] [Thread-303492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:13:21.912 [DEBUG] [Thread-303492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:13:21.912 [DEBUG] [Thread-303492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] client lang: <none>
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] server lang: <none>
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] kex follows: False
2025-12-24T14:13:21.913 [DEBUG] [Thread-303492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:13:21.914 [DEBUG] [Thread-303492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:13:21.914 [DEBUG] [Thread-303492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:13:21.914 [DEBUG] [Thread-303492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:13:21.915 [DEBUG] [Thread-303492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:13:21.915 [DEBUG] [Thread-303492] [transport.py] [_log()] Compression: none
2025-12-24T14:13:21.915 [DEBUG] [Thread-303492] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:13:21.949 [DEBUG] [Thread-303492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:13:21.954 [DEBUG] [Thread-303492] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:13:21.956 [DEBUG] [Thread-303492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:13:21.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:13:21.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:13:21.961 [DEBUG] [Thread-303492] [transport.py] [_log()] userauth is OK
2025-12-24T14:13:21.962 [DEBUG] [Thread-303492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:13:21.962 [DEBUG] [Thread-303492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:13:21.962 [DEBUG] [Thread-303492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:13:21.962 [DEBUG] [Thread-303492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:13:21.988 [INFO] [Thread-303492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:13:21.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:13:22.646 [DEBUG] [Thread-303492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:13:22.646 [DEBUG] [Thread-303492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:13:22.647 [DEBUG] [Thread-303492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:13:22.688 [DEBUG] [Thread-303492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:13:22.688 [DEBUG] [Thread-303492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:13:22.691 [DEBUG] [Thread-303492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:13:22.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:13:22.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:13:22.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:13:22.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:13:22.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:13:22.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:13:22.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:13:22.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:13:22.721 [DEBUG] [Thread-303492] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:13:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:13:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.508749 -999.00  +24.00   7.25     33   +6.70 1 2 1 1 1   888    0 14.55 -87.50 ----- 7.2 7.2 135.4 11.4 30.8 -21.3 30.3 -23.9 31.3 -19.5 31.8 -21.2
2025-12-24T14:13:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:13:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:13:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.508749
2025-12-24T14:13:22.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:13:22.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:13:22.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:13:22.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:13:22.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:13:22.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:13:13', tmtdew=18.92, humidity=29.17, cloud=0.0, wind=10.16, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:12:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:13:22.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:13:22.853 [DEBUG] [Thread-303495] [transport.py] [_log()] starting thread (client mode): 0xf57738b0
2025-12-24T14:13:22.853 [DEBUG] [Thread-303495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:13:22.868 [DEBUG] [Thread-303495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:13:22.868 [INFO] [Thread-303495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:13:22.876 [DEBUG] [Thread-303495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:13:22.876 [DEBUG] [Thread-303495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] client lang: <none>
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] server lang: <none>
2025-12-24T14:13:22.877 [DEBUG] [Thread-303495] [transport.py] [_log()] kex follows: False
2025-12-24T14:13:22.878 [DEBUG] [Thread-303495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:13:22.878 [DEBUG] [Thread-303495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:13:22.878 [DEBUG] [Thread-303495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:13:22.878 [DEBUG] [Thread-303495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:13:22.878 [DEBUG] [Thread-303495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:13:22.878 [DEBUG] [Thread-303495] [transport.py] [_log()] Compression: none
2025-12-24T14:13:22.878 [DEBUG] [Thread-303495] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:13:22.936 [DEBUG] [Thread-303495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:13:22.936 [DEBUG] [Thread-303495] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:13:22.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:13:22.938 [DEBUG] [Thread-303495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:13:22.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:13:22.992 [DEBUG] [Thread-303495] [transport.py] [_log()] userauth is OK
2025-12-24T14:13:22.992 [DEBUG] [Thread-303495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:13:22.992 [DEBUG] [Thread-303495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:13:22.992 [DEBUG] [Thread-303495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:13:22.992 [DEBUG] [Thread-303495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:13:23.006 [INFO] [Thread-303495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:13:23.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:13:23.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:13:23.838 [DEBUG] [Thread-303495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:13:23.838 [DEBUG] [Thread-303495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:13:23.886 [DEBUG] [Thread-303495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:13:23.886 [DEBUG] [Thread-303495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:13:23.895 [DEBUG] [Thread-303495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:13:23.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:13:23.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:13:23.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
2025-12-24T14:13:23.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:13:23.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:13:23.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:13:23.935 [DEBUG] [Thread-303495] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:13:32.325 [DEBUG] [Thread-303497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:13:36.604 [DEBUG] [Thread-303498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:13:47.444 [DEBUG] [Thread-303499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:13:53.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:13:53.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:13:53.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:13:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 13, 46), 18.91, 29.37, 0.0, 9.78, 22.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:13:54.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:13:46
2025-12-24T14:13:54.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:13:55.066 [DEBUG] [Thread-303500] [transport.py] [_log()] starting thread (client mode): 0xf57502b0
2025-12-24T14:13:55.066 [DEBUG] [Thread-303500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:13:55.071 [DEBUG] [Thread-303500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:13:55.071 [INFO] [Thread-303500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:13:55.074 [DEBUG] [Thread-303500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:13:55.074 [DEBUG] [Thread-303500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:13:55.074 [DEBUG] [Thread-303500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:13:55.074 [DEBUG] [Thread-303500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:13:55.074 [DEBUG] [Thread-303500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:13:55.074 [DEBUG] [Thread-303500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] client lang: <none>
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] server lang: <none>
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] kex follows: False
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:13:55.075 [DEBUG] [Thread-303500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:13:55.076 [DEBUG] [Thread-303500] [transport.py] [_log()] Compression: none
2025-12-24T14:13:55.076 [DEBUG] [Thread-303500] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:13:55.107 [DEBUG] [Thread-303500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:13:55.110 [DEBUG] [Thread-303500] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:13:55.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:13:55.113 [DEBUG] [Thread-303500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:13:55.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:13:55.116 [DEBUG] [Thread-303500] [transport.py] [_log()] userauth is OK
2025-12-24T14:13:55.116 [DEBUG] [Thread-303500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:13:55.116 [DEBUG] [Thread-303500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:13:55.116 [DEBUG] [Thread-303500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:13:55.116 [DEBUG] [Thread-303500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:13:55.137 [INFO] [Thread-303500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:13:55.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:13:55.746 [DEBUG] [Thread-303500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:13:55.746 [DEBUG] [Thread-303500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:13:55.747 [DEBUG] [Thread-303500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:13:55.788 [DEBUG] [Thread-303500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:13:55.788 [DEBUG] [Thread-303500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:13:55.790 [DEBUG] [Thread-303500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:13:55.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:13:55.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:13:55.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:13:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:13:55.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:13:55.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:13:55.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:13:55.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:13:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:13:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.509096 -999.00  +24.00   5.06     32   +6.70 1 2 1 1 1   888    0 14.88 -79.79 ----- 5.1 5.1 153.1 9.8 30.8 -21.1 30.4 -20.3 31.2 -19.1 31.7 -20.8
2025-12-24T14:13:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:13:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:13:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.509096
2025-12-24T14:13:55.825 [DEBUG] [Thread-303500] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:13:55.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:13:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:13:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:13:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:13:55.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:13:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:13:46', tmtdew=18.91, humidity=29.37, cloud=0.0, wind=9.78, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:13:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:13:55.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:13:55.926 [DEBUG] [Thread-303503] [transport.py] [_log()] starting thread (client mode): 0xf572fa30
2025-12-24T14:13:55.926 [DEBUG] [Thread-303503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:13:55.941 [DEBUG] [Thread-303503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:13:55.941 [INFO] [Thread-303503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] client lang: <none>
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] server lang: <none>
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] kex follows: False
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] Compression: none
2025-12-24T14:13:55.949 [DEBUG] [Thread-303503] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:13:56.007 [DEBUG] [Thread-303503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:13:56.007 [DEBUG] [Thread-303503] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:13:56.007 [DEBUG] [Thread-303503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:13:56.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:13:56.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:13:56.068 [DEBUG] [Thread-303503] [transport.py] [_log()] userauth is OK
2025-12-24T14:13:56.068 [DEBUG] [Thread-303503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:13:56.068 [DEBUG] [Thread-303503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:13:56.068 [DEBUG] [Thread-303503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:13:56.068 [DEBUG] [Thread-303503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:13:56.086 [INFO] [Thread-303503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:13:56.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:13:56.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:13:56.951 [DEBUG] [Thread-303503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:13:56.951 [DEBUG] [Thread-303503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:13:56.998 [DEBUG] [Thread-303503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:13:56.998 [DEBUG] [Thread-303503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:13:57.007 [DEBUG] [Thread-303503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:13:57.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:13:57.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:13:57.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:13:57.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:13:57.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:13:57.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:13:57.043 [DEBUG] [Thread-303503] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:14:02.492 [DEBUG] [Thread-303505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:14:12.918 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:14:12.919 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:14:17.604 [DEBUG] [Thread-303506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:14:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:14:27.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:14:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:14:28.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 14, 19), 19.0, 29.2, 0.0, 6.83, 22.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:14:28.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:14:19
2025-12-24T14:14:28.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:14:28.437 [DEBUG] [Thread-303507] [transport.py] [_log()] starting thread (client mode): 0xf5750e20
2025-12-24T14:14:28.438 [DEBUG] [Thread-303507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:14:28.446 [DEBUG] [Thread-303507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:14:28.446 [INFO] [Thread-303507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] client lang: <none>
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] server lang: <none>
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] kex follows: False
2025-12-24T14:14:28.451 [DEBUG] [Thread-303507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:14:28.452 [DEBUG] [Thread-303507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:14:28.452 [DEBUG] [Thread-303507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:14:28.452 [DEBUG] [Thread-303507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:14:28.452 [DEBUG] [Thread-303507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:14:28.452 [DEBUG] [Thread-303507] [transport.py] [_log()] Compression: none
2025-12-24T14:14:28.452 [DEBUG] [Thread-303507] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:14:28.492 [DEBUG] [Thread-303507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:14:28.497 [DEBUG] [Thread-303507] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:14:28.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:14:28.501 [DEBUG] [Thread-303507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:14:28.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:14:28.504 [DEBUG] [Thread-303507] [transport.py] [_log()] userauth is OK
2025-12-24T14:14:28.504 [DEBUG] [Thread-303507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:14:28.505 [DEBUG] [Thread-303507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:14:28.505 [DEBUG] [Thread-303507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:14:28.505 [DEBUG] [Thread-303507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:14:28.533 [INFO] [Thread-303507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:14:28.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:14:29.186 [DEBUG] [Thread-303507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:14:29.186 [DEBUG] [Thread-303507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:14:29.187 [DEBUG] [Thread-303507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:14:29.227 [DEBUG] [Thread-303507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:14:29.227 [DEBUG] [Thread-303507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:14:29.229 [DEBUG] [Thread-303507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:14:29.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:14:29.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:14:29.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:14:29.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:14:29.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:14:29.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:14:29.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:14:29.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:14:29.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:14:29.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.509444 -999.00  +24.20   7.21     32   +6.80 1 2 1 1 1   888    0 14.64 -75.80 ----- 7.2 7.2 140.2 11.2 30.7 -22.6 30.4 -21.4 31.1 -19.1 31.6 -20.8
2025-12-24T14:14:29.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:14:29.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:14:29.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.509444
2025-12-24T14:14:29.261 [DEBUG] [Thread-303507] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:14:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:14:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:14:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:14:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:14:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:14:29.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:14:19', tmtdew=19.0, humidity=29.2, cloud=0.0, wind=6.83, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:13:35.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:14:29.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:14:29.384 [DEBUG] [Thread-303510] [transport.py] [_log()] starting thread (client mode): 0xf572c160
2025-12-24T14:14:29.384 [DEBUG] [Thread-303510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:14:29.402 [DEBUG] [Thread-303510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:14:29.402 [INFO] [Thread-303510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:14:29.410 [DEBUG] [Thread-303510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] client lang: <none>
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] server lang: <none>
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] kex follows: False
2025-12-24T14:14:29.411 [DEBUG] [Thread-303510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:14:29.412 [DEBUG] [Thread-303510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:14:29.412 [DEBUG] [Thread-303510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:14:29.412 [DEBUG] [Thread-303510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:14:29.412 [DEBUG] [Thread-303510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:14:29.412 [DEBUG] [Thread-303510] [transport.py] [_log()] Compression: none
2025-12-24T14:14:29.412 [DEBUG] [Thread-303510] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:14:29.472 [DEBUG] [Thread-303510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:14:29.472 [DEBUG] [Thread-303510] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:14:29.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:14:29.473 [DEBUG] [Thread-303510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:14:29.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:14:29.528 [DEBUG] [Thread-303510] [transport.py] [_log()] userauth is OK
2025-12-24T14:14:29.528 [DEBUG] [Thread-303510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:14:29.528 [DEBUG] [Thread-303510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:14:29.529 [DEBUG] [Thread-303510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:14:29.529 [DEBUG] [Thread-303510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:14:29.552 [INFO] [Thread-303510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:14:29.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:14:29.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:14:30.448 [DEBUG] [Thread-303510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:14:30.448 [DEBUG] [Thread-303510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:14:30.496 [DEBUG] [Thread-303510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:14:30.496 [DEBUG] [Thread-303510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:14:30.504 [DEBUG] [Thread-303510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:14:30.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:14:30.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:14:30.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:14:30.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:14:30.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:14:30.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:14:30.539 [DEBUG] [Thread-303510] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:14:32.691 [DEBUG] [Thread-303512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:14:36.897 [DEBUG] [Thread-303513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:14:47.864 [DEBUG] [Thread-303514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:15:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:15:00.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:15:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:15:01.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 14, 53), 18.96, 29.18, 0.0, 11.52, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:15:01.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:14:53
2025-12-24T14:15:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:15:01.941 [DEBUG] [Thread-303515] [transport.py] [_log()] starting thread (client mode): 0xf81e6770
2025-12-24T14:15:01.942 [DEBUG] [Thread-303515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:15:01.946 [DEBUG] [Thread-303515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:15:01.946 [INFO] [Thread-303515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:15:01.951 [DEBUG] [Thread-303515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] client lang: <none>
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] server lang: <none>
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] kex follows: False
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] Compression: none
2025-12-24T14:15:01.952 [DEBUG] [Thread-303515] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:15:01.974 [DEBUG] [Thread-303515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:15:01.977 [DEBUG] [Thread-303515] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:15:01.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:15:01.980 [DEBUG] [Thread-303515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:15:01.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:15:01.982 [DEBUG] [Thread-303515] [transport.py] [_log()] userauth is OK
2025-12-24T14:15:01.982 [DEBUG] [Thread-303515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:15:01.982 [DEBUG] [Thread-303515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:15:01.982 [DEBUG] [Thread-303515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:15:01.982 [DEBUG] [Thread-303515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:15:01.999 [INFO] [Thread-303515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:15:02.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:15:02.758 [DEBUG] [Thread-303515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:15:02.759 [DEBUG] [Thread-303515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:15:02.760 [DEBUG] [Thread-303515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:15:02.800 [DEBUG] [Thread-303515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:15:02.800 [DEBUG] [Thread-303515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:15:02.804 [DEBUG] [Thread-303515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:15:02.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:15:02.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:15:02.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:15:02.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:15:02.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:15:02.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:15:02.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:15:02.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:15:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:15:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.509791 -999.00  +24.20  11.69     32   +6.60 1 2 1 1 1   888    0 14.85 -71.11 ----- 11.7 11.7 98.2 25.1 30.2 -23.0 30.3 -21.1 31.0 -19.9 31.4 -21.8
2025-12-24T14:15:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:15:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:15:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.509791
2025-12-24T14:15:02.855 [DEBUG] [Thread-303515] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:15:02.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:15:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:15:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:15:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:15:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:15:02.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:14:53', tmtdew=18.96, humidity=29.18, cloud=0.0, wind=11.52, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:14:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:15:02.959 [DEBUG] [Thread-303518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:15:02.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:15:02.973 [DEBUG] [Thread-303519] [transport.py] [_log()] starting thread (client mode): 0xf5772920
2025-12-24T14:15:02.973 [DEBUG] [Thread-303519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:15:02.987 [DEBUG] [Thread-303519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:15:02.987 [INFO] [Thread-303519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:15:02.994 [DEBUG] [Thread-303519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:15:02.994 [DEBUG] [Thread-303519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:15:02.994 [DEBUG] [Thread-303519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:15:02.994 [DEBUG] [Thread-303519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:15:02.994 [DEBUG] [Thread-303519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:15:02.994 [DEBUG] [Thread-303519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] client lang: <none>
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] server lang: <none>
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] kex follows: False
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] Compression: none
2025-12-24T14:15:02.995 [DEBUG] [Thread-303519] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:15:03.056 [DEBUG] [Thread-303519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:15:03.056 [DEBUG] [Thread-303519] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:15:03.057 [DEBUG] [Thread-303519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:15:03.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:15:03.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:15:03.113 [DEBUG] [Thread-303519] [transport.py] [_log()] userauth is OK
2025-12-24T14:15:03.113 [DEBUG] [Thread-303519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:15:03.113 [DEBUG] [Thread-303519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:15:03.113 [DEBUG] [Thread-303519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:15:03.113 [DEBUG] [Thread-303519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:15:03.134 [INFO] [Thread-303519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:15:03.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:15:03.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:15:03.985 [DEBUG] [Thread-303519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:15:03.985 [DEBUG] [Thread-303519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:15:04.034 [DEBUG] [Thread-303519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:15:04.035 [DEBUG] [Thread-303519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:15:04.044 [DEBUG] [Thread-303519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:15:04.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:15:04.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:15:04.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:15:04.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:15:04.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:15:04.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:15:04.085 [DEBUG] [Thread-303519] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:15:13.062 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:15:13.064 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:15:18.112 [DEBUG] [Thread-303521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:15:33.254 [DEBUG] [Thread-303522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:15:34.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:15:34.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:15:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:15:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 15, 26), 19.01, 29.12, 0.0, 16.71, 22.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:15:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:15:26
2025-12-24T14:15:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:15:35.354 [DEBUG] [Thread-303523] [transport.py] [_log()] starting thread (client mode): 0xf81e5d50
2025-12-24T14:15:35.354 [DEBUG] [Thread-303523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:15:35.368 [DEBUG] [Thread-303523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:15:35.369 [INFO] [Thread-303523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:15:35.375 [DEBUG] [Thread-303523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:15:35.375 [DEBUG] [Thread-303523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] client lang: <none>
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] server lang: <none>
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] kex follows: False
2025-12-24T14:15:35.376 [DEBUG] [Thread-303523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:15:35.377 [DEBUG] [Thread-303523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:15:35.377 [DEBUG] [Thread-303523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:15:35.378 [DEBUG] [Thread-303523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:15:35.378 [DEBUG] [Thread-303523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:15:35.378 [DEBUG] [Thread-303523] [transport.py] [_log()] Compression: none
2025-12-24T14:15:35.378 [DEBUG] [Thread-303523] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:15:35.420 [DEBUG] [Thread-303523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:15:35.425 [DEBUG] [Thread-303523] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:15:35.427 [DEBUG] [Thread-303523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:15:35.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:15:35.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:15:35.432 [DEBUG] [Thread-303523] [transport.py] [_log()] userauth is OK
2025-12-24T14:15:35.432 [DEBUG] [Thread-303523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:15:35.432 [DEBUG] [Thread-303523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:15:35.432 [DEBUG] [Thread-303523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:15:35.432 [DEBUG] [Thread-303523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:15:35.460 [INFO] [Thread-303523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:15:35.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:15:36.137 [DEBUG] [Thread-303523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:15:36.137 [DEBUG] [Thread-303523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:15:36.138 [DEBUG] [Thread-303523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:15:36.178 [DEBUG] [Thread-303523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:15:36.178 [DEBUG] [Thread-303523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:15:36.182 [DEBUG] [Thread-303523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:15:36.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:15:36.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:15:36.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:15:36.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:15:36.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:15:36.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:15:36.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:15:36.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:15:36.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:15:36.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.510138 -999.00  +23.80   9.19     32   +6.50 1 2 1 1 1   888    0 15.34 -65.78 ----- 9.2 9.2 116.8 14.3 30.4 -21.3 30.3 -20.5 30.8 -19.4 31.3 -20.8
2025-12-24T14:15:36.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:15:36.207 [DEBUG] [Thread-303523] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:15:36.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:15:36.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.510138
2025-12-24T14:15:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:15:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:15:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:15:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:15:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:15:36.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:15:26', tmtdew=19.01, humidity=29.12, cloud=0.0, wind=16.71, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:14:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:15:36.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:15:36.327 [DEBUG] [Thread-303526] [transport.py] [_log()] starting thread (client mode): 0xf81c3670
2025-12-24T14:15:36.327 [DEBUG] [Thread-303526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:15:36.341 [DEBUG] [Thread-303526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:15:36.341 [INFO] [Thread-303526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:15:36.349 [DEBUG] [Thread-303526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:15:36.350 [DEBUG] [Thread-303526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:15:36.350 [DEBUG] [Thread-303526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:15:36.350 [DEBUG] [Thread-303526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:15:36.350 [DEBUG] [Thread-303526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:15:36.350 [DEBUG] [Thread-303526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:15:36.350 [DEBUG] [Thread-303526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:15:36.350 [DEBUG] [Thread-303526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:15:36.350 [DEBUG] [Thread-303526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:15:36.351 [DEBUG] [Thread-303526] [transport.py] [_log()] client lang: <none>
2025-12-24T14:15:36.351 [DEBUG] [Thread-303526] [transport.py] [_log()] server lang: <none>
2025-12-24T14:15:36.351 [DEBUG] [Thread-303526] [transport.py] [_log()] kex follows: False
2025-12-24T14:15:36.351 [DEBUG] [Thread-303526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:15:36.351 [DEBUG] [Thread-303526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:15:36.351 [DEBUG] [Thread-303526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:15:36.351 [DEBUG] [Thread-303526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:15:36.351 [DEBUG] [Thread-303526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:15:36.352 [DEBUG] [Thread-303526] [transport.py] [_log()] Compression: none
2025-12-24T14:15:36.352 [DEBUG] [Thread-303526] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:15:36.415 [DEBUG] [Thread-303526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:15:36.416 [DEBUG] [Thread-303526] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:15:36.416 [DEBUG] [Thread-303526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:15:36.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:15:36.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:15:36.477 [DEBUG] [Thread-303526] [transport.py] [_log()] userauth is OK
2025-12-24T14:15:36.478 [DEBUG] [Thread-303526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:15:36.478 [DEBUG] [Thread-303526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:15:36.479 [DEBUG] [Thread-303526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:15:36.479 [DEBUG] [Thread-303526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:15:36.512 [INFO] [Thread-303526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:15:36.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:15:36.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:15:37.137 [DEBUG] [Thread-303528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:15:37.377 [DEBUG] [Thread-303526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:15:37.378 [DEBUG] [Thread-303526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:15:37.425 [DEBUG] [Thread-303526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:15:37.425 [DEBUG] [Thread-303526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:15:37.434 [DEBUG] [Thread-303526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:15:37.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:15:37.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:15:37.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:15:37.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:15:37.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:15:37.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:15:37.480 [DEBUG] [Thread-303526] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:15:48.337 [DEBUG] [Thread-303529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:16:03.496 [DEBUG] [Thread-303530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:16:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:16:07.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:16:07.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:16:08.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 15, 59), 18.86, 29.45, 0.0, 15.33, 22.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:16:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:15:59
2025-12-24T14:16:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:16:08.774 [DEBUG] [Thread-303531] [transport.py] [_log()] starting thread (client mode): 0xf81f2980
2025-12-24T14:16:08.775 [DEBUG] [Thread-303531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:16:08.784 [DEBUG] [Thread-303531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:16:08.784 [INFO] [Thread-303531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:16:08.790 [DEBUG] [Thread-303531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:16:08.790 [DEBUG] [Thread-303531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:16:08.790 [DEBUG] [Thread-303531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:16:08.790 [DEBUG] [Thread-303531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:16:08.790 [DEBUG] [Thread-303531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:16:08.790 [DEBUG] [Thread-303531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:16:08.790 [DEBUG] [Thread-303531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:16:08.791 [DEBUG] [Thread-303531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:16:08.791 [DEBUG] [Thread-303531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:16:08.791 [DEBUG] [Thread-303531] [transport.py] [_log()] client lang: <none>
2025-12-24T14:16:08.791 [DEBUG] [Thread-303531] [transport.py] [_log()] server lang: <none>
2025-12-24T14:16:08.791 [DEBUG] [Thread-303531] [transport.py] [_log()] kex follows: False
2025-12-24T14:16:08.791 [DEBUG] [Thread-303531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:16:08.791 [DEBUG] [Thread-303531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:16:08.792 [DEBUG] [Thread-303531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:16:08.792 [DEBUG] [Thread-303531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:16:08.792 [DEBUG] [Thread-303531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:16:08.792 [DEBUG] [Thread-303531] [transport.py] [_log()] Compression: none
2025-12-24T14:16:08.792 [DEBUG] [Thread-303531] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:16:08.828 [DEBUG] [Thread-303531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:16:08.832 [DEBUG] [Thread-303531] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:16:08.834 [DEBUG] [Thread-303531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:16:08.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:16:08.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:16:08.840 [DEBUG] [Thread-303531] [transport.py] [_log()] userauth is OK
2025-12-24T14:16:08.840 [DEBUG] [Thread-303531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:16:08.841 [DEBUG] [Thread-303531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:16:08.841 [DEBUG] [Thread-303531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:16:08.841 [DEBUG] [Thread-303531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:16:08.878 [INFO] [Thread-303531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:16:08.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:16:09.670 [DEBUG] [Thread-303531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:16:09.670 [DEBUG] [Thread-303531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:16:09.672 [DEBUG] [Thread-303531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:16:09.712 [DEBUG] [Thread-303531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:16:09.712 [DEBUG] [Thread-303531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:16:09.716 [DEBUG] [Thread-303531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:16:09.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:16:09.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:16:09.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:16:09.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:16:09.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:16:09.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:16:09.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:16:09.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:16:09.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:16:09.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.510832 -999.00  +23.40  11.38     33   +6.60 1 2 1 1 1   888    0 15.71 -52.38 ----- 11.4 11.4 141.6 13.0 30.2 -20.8 30.3 -20.0 30.8 -19.3 31.1 -19.8
2025-12-24T14:16:09.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:16:09.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:16:09.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.510832
2025-12-24T14:16:09.749 [DEBUG] [Thread-303531] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:16:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:16:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:16:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:16:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:16:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:16:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:15:59', tmtdew=18.86, humidity=29.45, cloud=0.0, wind=15.33, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:15:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:16:09.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:16:09.863 [DEBUG] [Thread-303534] [transport.py] [_log()] starting thread (client mode): 0xf81f27a0
2025-12-24T14:16:09.863 [DEBUG] [Thread-303534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:16:09.879 [DEBUG] [Thread-303534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:16:09.880 [INFO] [Thread-303534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:16:09.891 [DEBUG] [Thread-303534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:16:09.891 [DEBUG] [Thread-303534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:16:09.891 [DEBUG] [Thread-303534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:16:09.891 [DEBUG] [Thread-303534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:16:09.892 [DEBUG] [Thread-303534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:16:09.892 [DEBUG] [Thread-303534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:16:09.892 [DEBUG] [Thread-303534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:16:09.892 [DEBUG] [Thread-303534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:16:09.892 [DEBUG] [Thread-303534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:16:09.892 [DEBUG] [Thread-303534] [transport.py] [_log()] client lang: <none>
2025-12-24T14:16:09.892 [DEBUG] [Thread-303534] [transport.py] [_log()] server lang: <none>
2025-12-24T14:16:09.892 [DEBUG] [Thread-303534] [transport.py] [_log()] kex follows: False
2025-12-24T14:16:09.893 [DEBUG] [Thread-303534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:16:09.893 [DEBUG] [Thread-303534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:16:09.893 [DEBUG] [Thread-303534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:16:09.893 [DEBUG] [Thread-303534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:16:09.893 [DEBUG] [Thread-303534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:16:09.893 [DEBUG] [Thread-303534] [transport.py] [_log()] Compression: none
2025-12-24T14:16:09.893 [DEBUG] [Thread-303534] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:16:09.951 [DEBUG] [Thread-303534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:16:09.951 [DEBUG] [Thread-303534] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:16:09.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:16:09.953 [DEBUG] [Thread-303534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:16:09.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:16:10.009 [DEBUG] [Thread-303534] [transport.py] [_log()] userauth is OK
2025-12-24T14:16:10.010 [DEBUG] [Thread-303534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:16:10.010 [DEBUG] [Thread-303534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:16:10.010 [DEBUG] [Thread-303534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:16:10.010 [DEBUG] [Thread-303534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:16:10.032 [INFO] [Thread-303534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:16:10.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:16:10.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:16:10.887 [DEBUG] [Thread-303534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:16:10.887 [DEBUG] [Thread-303534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:16:10.926 [DEBUG] [Thread-303534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:16:10.926 [DEBUG] [Thread-303534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:16:10.934 [DEBUG] [Thread-303534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:16:10.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:16:10.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:16:10.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:16:10.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:16:10.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:16:10.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:16:10.967 [DEBUG] [Thread-303534] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:16:13.206 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:16:13.207 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:16:18.586 [DEBUG] [Thread-303536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:16:33.704 [DEBUG] [Thread-303537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:16:37.435 [DEBUG] [Thread-303538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:16:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:16:40.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:16: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
2025-12-24T14:16:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 16, 32), 19.0, 29.2, 0.0, 14.38, 22.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:16:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:16:32
2025-12-24T14:16:42.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:16:42.297 [DEBUG] [Thread-303539] [transport.py] [_log()] starting thread (client mode): 0xf81f2320
2025-12-24T14:16:42.298 [DEBUG] [Thread-303539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:16:42.298 [DEBUG] [Thread-303539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:16:42.298 [INFO] [Thread-303539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:16:42.302 [DEBUG] [Thread-303539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] client lang: <none>
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] server lang: <none>
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] kex follows: False
2025-12-24T14:16:42.303 [DEBUG] [Thread-303539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:16:42.304 [DEBUG] [Thread-303539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:16:42.304 [DEBUG] [Thread-303539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:16:42.304 [DEBUG] [Thread-303539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:16:42.304 [DEBUG] [Thread-303539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:16:42.304 [DEBUG] [Thread-303539] [transport.py] [_log()] Compression: none
2025-12-24T14:16:42.304 [DEBUG] [Thread-303539] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:16:42.333 [DEBUG] [Thread-303539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:16:42.336 [DEBUG] [Thread-303539] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:16:42.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:16:42.339 [DEBUG] [Thread-303539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:16:42.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:16:42.341 [DEBUG] [Thread-303539] [transport.py] [_log()] userauth is OK
2025-12-24T14:16:42.341 [DEBUG] [Thread-303539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:16:42.341 [DEBUG] [Thread-303539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:16:42.341 [DEBUG] [Thread-303539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:16:42.341 [DEBUG] [Thread-303539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:16:42.371 [INFO] [Thread-303539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:16:42.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:16:43.032 [DEBUG] [Thread-303539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:16:43.032 [DEBUG] [Thread-303539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:16:43.033 [DEBUG] [Thread-303539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:16:43.073 [DEBUG] [Thread-303539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:16:43.073 [DEBUG] [Thread-303539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:16:43.075 [DEBUG] [Thread-303539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:16:43.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:16:43.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:16:43.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:16:43.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:16:43.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:16:43.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:16:43.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:16:43.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:16:43.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:16:43.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.511180 -999.00  +23.50  11.87     33   +6.60 1 2 1 1 1   888    0 15.79 -46.60 ----- 11.9 11.9 183.6 16.2 30.1 -21.4 30.0 -20.1 30.7 -19.3 31.0 -20.3
2025-12-24T14:16:43.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:16:43.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:16:43.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.511180
2025-12-24T14:16:43.103 [DEBUG] [Thread-303539] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:16:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:16:43.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:16:43.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:16:43.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:16:43.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:16:43.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:16:32', tmtdew=19.0, humidity=29.2, cloud=0.0, wind=14.38, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:16:05.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:16:43.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:16:43.211 [DEBUG] [Thread-303542] [transport.py] [_log()] starting thread (client mode): 0xf57a9ff0
2025-12-24T14:16:43.211 [DEBUG] [Thread-303542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:16:43.225 [DEBUG] [Thread-303542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:16:43.225 [INFO] [Thread-303542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] client lang: <none>
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] server lang: <none>
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] kex follows: False
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] Compression: none
2025-12-24T14:16:43.233 [DEBUG] [Thread-303542] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:16:43.288 [DEBUG] [Thread-303542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:16:43.288 [DEBUG] [Thread-303542] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:16:43.288 [DEBUG] [Thread-303542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:16:43.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:16:43.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:16:43.345 [DEBUG] [Thread-303542] [transport.py] [_log()] userauth is OK
2025-12-24T14:16:43.345 [DEBUG] [Thread-303542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:16:43.345 [DEBUG] [Thread-303542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:16:43.345 [DEBUG] [Thread-303542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:16:43.345 [DEBUG] [Thread-303542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:16:43.359 [INFO] [Thread-303542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:16:43.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:16:43.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:16:44.199 [DEBUG] [Thread-303542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:16:44.200 [DEBUG] [Thread-303542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:16:44.247 [DEBUG] [Thread-303542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:16:44.247 [DEBUG] [Thread-303542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:16:44.256 [DEBUG] [Thread-303542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:16:44.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:16:44.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:16: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
2025-12-24T14:16:44.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:16:44.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:16:44.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:16:44.291 [DEBUG] [Thread-303542] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:16:48.769 [DEBUG] [Thread-303544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:17:03.876 [DEBUG] [Thread-303545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:17:13.352 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:17:13.354 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:17:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:17:14.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:17:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:17:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 17, 5), 19.01, 29.17, 0.0, 14.08, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:17:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:17:05
2025-12-24T14:17:15.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:17:15.661 [DEBUG] [Thread-303546] [transport.py] [_log()] starting thread (client mode): 0xf81f3520
2025-12-24T14:17:15.661 [DEBUG] [Thread-303546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:17:15.673 [DEBUG] [Thread-303546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:17:15.673 [INFO] [Thread-303546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:17:15.677 [DEBUG] [Thread-303546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:17:15.677 [DEBUG] [Thread-303546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:17:15.677 [DEBUG] [Thread-303546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] client lang: <none>
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] server lang: <none>
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] kex follows: False
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:17:15.678 [DEBUG] [Thread-303546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:17:15.679 [DEBUG] [Thread-303546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:17:15.679 [DEBUG] [Thread-303546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:17:15.679 [DEBUG] [Thread-303546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:17:15.679 [DEBUG] [Thread-303546] [transport.py] [_log()] Compression: none
2025-12-24T14:17:15.679 [DEBUG] [Thread-303546] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:17:15.712 [DEBUG] [Thread-303546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:17:15.717 [DEBUG] [Thread-303546] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:17:15.720 [DEBUG] [Thread-303546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:17:15.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:17:15.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:17:15.726 [DEBUG] [Thread-303546] [transport.py] [_log()] userauth is OK
2025-12-24T14:17:15.726 [DEBUG] [Thread-303546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:17:15.726 [DEBUG] [Thread-303546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:17:15.727 [DEBUG] [Thread-303546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:17:15.727 [DEBUG] [Thread-303546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:17:15.753 [INFO] [Thread-303546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:17:15.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:17:16.571 [DEBUG] [Thread-303546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:17:16.571 [DEBUG] [Thread-303546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:17:16.573 [DEBUG] [Thread-303546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:17:16.612 [DEBUG] [Thread-303546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:17:16.612 [DEBUG] [Thread-303546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:17:16.615 [DEBUG] [Thread-303546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:17:16.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:17:16.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:17:16.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:17:16.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:17:16.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:17:16.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:17:16.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:17:16.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:17:16.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:17:16.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.511527 -999.00  +23.50  19.18     33   +6.50 1 2 1 1 1   888    0 15.81 -40.26 ----- 19.2 19.2 162.2 22.8 29.9 -21.7 29.9 -20.5 30.6 -19.3 30.7 -21.1
2025-12-24T14:17:16.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:17:16.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:17:16.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.511527
2025-12-24T14:17:16.650 [DEBUG] [Thread-303546] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:17:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:17:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:17:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:17:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:17:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:17:16.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:17:05', tmtdew=19.01, humidity=29.17, cloud=0.0, wind=14.08, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:16:35.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:17:16.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:17:16.768 [DEBUG] [Thread-303549] [transport.py] [_log()] starting thread (client mode): 0xf81f2c50
2025-12-24T14:17:16.768 [DEBUG] [Thread-303549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:17:16.786 [DEBUG] [Thread-303549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:17:16.786 [INFO] [Thread-303549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] client lang: <none>
2025-12-24T14:17:16.794 [DEBUG] [Thread-303549] [transport.py] [_log()] server lang: <none>
2025-12-24T14:17:16.795 [DEBUG] [Thread-303549] [transport.py] [_log()] kex follows: False
2025-12-24T14:17:16.795 [DEBUG] [Thread-303549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:17:16.795 [DEBUG] [Thread-303549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:17:16.795 [DEBUG] [Thread-303549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:17:16.795 [DEBUG] [Thread-303549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:17:16.795 [DEBUG] [Thread-303549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:17:16.795 [DEBUG] [Thread-303549] [transport.py] [_log()] Compression: none
2025-12-24T14:17:16.795 [DEBUG] [Thread-303549] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:17:16.852 [DEBUG] [Thread-303549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:17:16.852 [DEBUG] [Thread-303549] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:17:16.853 [DEBUG] [Thread-303549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:17:16.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:17:16.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:17:16.909 [DEBUG] [Thread-303549] [transport.py] [_log()] userauth is OK
2025-12-24T14:17:16.909 [DEBUG] [Thread-303549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:17:16.909 [DEBUG] [Thread-303549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:17:16.909 [DEBUG] [Thread-303549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:17:16.910 [DEBUG] [Thread-303549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:17:16.928 [INFO] [Thread-303549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:17:16.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:17:16.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:17:17.823 [DEBUG] [Thread-303549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:17:17.823 [DEBUG] [Thread-303549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:17:17.867 [DEBUG] [Thread-303549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:17:17.867 [DEBUG] [Thread-303549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:17:17.880 [DEBUG] [Thread-303549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:17:17.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:17:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:17:17.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:17:17.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:17:17.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:17:17.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:17:17.927 [DEBUG] [Thread-303549] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:17:18.945 [DEBUG] [Thread-303551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:17:34.184 [DEBUG] [Thread-303552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:17:37.680 [DEBUG] [Thread-303553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:17:47.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:17:47.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:17:47.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:17:49.278 [DEBUG] [Thread-303554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:17:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 17, 38), 19.02, 28.74, 0.0, 22.11, 22.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:17:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:17:38
2025-12-24T14:17:49.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:17:49.667 [DEBUG] [Thread-303555] [transport.py] [_log()] starting thread (client mode): 0xf57aa530
2025-12-24T14:17:49.668 [DEBUG] [Thread-303555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:17:49.681 [DEBUG] [Thread-303555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:17:49.681 [INFO] [Thread-303555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:17:49.686 [DEBUG] [Thread-303555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] client lang: <none>
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] server lang: <none>
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] kex follows: False
2025-12-24T14:17:49.687 [DEBUG] [Thread-303555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:17:49.688 [DEBUG] [Thread-303555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:17:49.688 [DEBUG] [Thread-303555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:17:49.688 [DEBUG] [Thread-303555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:17:49.688 [DEBUG] [Thread-303555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:17:49.688 [DEBUG] [Thread-303555] [transport.py] [_log()] Compression: none
2025-12-24T14:17:49.688 [DEBUG] [Thread-303555] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:17:49.720 [DEBUG] [Thread-303555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:17:49.724 [DEBUG] [Thread-303555] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:17:49.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:17:49.727 [DEBUG] [Thread-303555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:17:49.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:17:49.729 [DEBUG] [Thread-303555] [transport.py] [_log()] userauth is OK
2025-12-24T14:17:49.729 [DEBUG] [Thread-303555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:17:49.729 [DEBUG] [Thread-303555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:17:49.730 [DEBUG] [Thread-303555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:17:49.730 [DEBUG] [Thread-303555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:17:49.747 [INFO] [Thread-303555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:17:49.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:17:50.396 [DEBUG] [Thread-303555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:17:50.396 [DEBUG] [Thread-303555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:17:50.408 [DEBUG] [Thread-303555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:17:50.438 [DEBUG] [Thread-303555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:17:50.438 [DEBUG] [Thread-303555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:17:50.442 [DEBUG] [Thread-303555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:17:50.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:17:50.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:17:50.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:17:50.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:17:50.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:17:50.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:17:50.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:17:50.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:17:50.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:17:50.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.511874 -999.00  +23.30  14.54     33   +6.50 1 2 1 1 1   888    0 16.19 -39.20 ----- 14.5 14.5 151.4 23.4 29.8 -19.7 29.4 -21.5 30.3 -19.0 30.6 -19.5
2025-12-24T14:17:50.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:17:50.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:17:50.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.511874
2025-12-24T14:17:50.481 [DEBUG] [Thread-303555] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:17:50.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:17:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:17:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:17:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:17:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:17:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:17:38', tmtdew=19.02, humidity=28.74, cloud=0.0, wind=22.11, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:17:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:17:50.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:17:50.599 [DEBUG] [Thread-303558] [transport.py] [_log()] starting thread (client mode): 0xf572e170
2025-12-24T14:17:50.599 [DEBUG] [Thread-303558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:17:50.613 [DEBUG] [Thread-303558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:17:50.613 [INFO] [Thread-303558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:17:50.620 [DEBUG] [Thread-303558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] client lang: <none>
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] server lang: <none>
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] kex follows: False
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:17:50.621 [DEBUG] [Thread-303558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:17:50.622 [DEBUG] [Thread-303558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:17:50.622 [DEBUG] [Thread-303558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:17:50.622 [DEBUG] [Thread-303558] [transport.py] [_log()] Compression: none
2025-12-24T14:17:50.622 [DEBUG] [Thread-303558] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:17:50.686 [DEBUG] [Thread-303558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:17:50.687 [DEBUG] [Thread-303558] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:17:50.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:17:50.688 [DEBUG] [Thread-303558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:17:50.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:17:50.746 [DEBUG] [Thread-303558] [transport.py] [_log()] userauth is OK
2025-12-24T14:17:50.746 [DEBUG] [Thread-303558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:17:50.746 [DEBUG] [Thread-303558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:17:50.746 [DEBUG] [Thread-303558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:17:50.746 [DEBUG] [Thread-303558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:17:50.760 [INFO] [Thread-303558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:17:50.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:17:50.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:17:51.643 [DEBUG] [Thread-303558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:17:51.643 [DEBUG] [Thread-303558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:17:51.690 [DEBUG] [Thread-303558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:17:51.690 [DEBUG] [Thread-303558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:17:51.699 [DEBUG] [Thread-303558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:17:51.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:17:51.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:17:51.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:17:51.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:17:51.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:17:51.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:17:51.734 [DEBUG] [Thread-303558] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:18:04.364 [DEBUG] [Thread-303560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:18:13.512 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:18:13.523 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:18:19.486 [DEBUG] [Thread-303561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:18:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:18:21.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:18:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:18:22.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 18, 12), 18.91, 28.9, 0.0, 17.29, 22.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:18:22.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:18:12
2025-12-24T14:18:22.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:18:22.998 [DEBUG] [Thread-303562] [transport.py] [_log()] starting thread (client mode): 0xf574e6b0
2025-12-24T14:18:22.999 [DEBUG] [Thread-303562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:18:23.011 [DEBUG] [Thread-303562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:18:23.011 [INFO] [Thread-303562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:18:23.014 [DEBUG] [Thread-303562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] client lang: <none>
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] server lang: <none>
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] kex follows: False
2025-12-24T14:18:23.015 [DEBUG] [Thread-303562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:18:23.016 [DEBUG] [Thread-303562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:18:23.016 [DEBUG] [Thread-303562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:18:23.016 [DEBUG] [Thread-303562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:18:23.016 [DEBUG] [Thread-303562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:18:23.016 [DEBUG] [Thread-303562] [transport.py] [_log()] Compression: none
2025-12-24T14:18:23.016 [DEBUG] [Thread-303562] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:18:23.046 [DEBUG] [Thread-303562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:18:23.052 [DEBUG] [Thread-303562] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:18:23.055 [DEBUG] [Thread-303562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:18:23.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:18:23.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:18:23.058 [DEBUG] [Thread-303562] [transport.py] [_log()] userauth is OK
2025-12-24T14:18:23.058 [DEBUG] [Thread-303562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:18:23.058 [DEBUG] [Thread-303562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:18:23.058 [DEBUG] [Thread-303562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:18:23.058 [DEBUG] [Thread-303562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:18:23.076 [INFO] [Thread-303562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:18:23.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:18:23.660 [DEBUG] [Thread-303562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:18:23.660 [DEBUG] [Thread-303562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:18:23.661 [DEBUG] [Thread-303562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:18:23.701 [DEBUG] [Thread-303562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:18:23.701 [DEBUG] [Thread-303562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:18:23.703 [DEBUG] [Thread-303562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:18:23.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:18:23.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:18:23.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:18:23.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:18:23.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:18:23.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:18:23.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:18:23.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:18:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:18:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.512221 -999.00  +23.20  14.31     33   +6.40 1 2 1 1 1   888    0 15.86 -34.50 ----- 14.3 14.3 150.2 24.7 29.7 -19.0 29.5 -18.8 30.2 -19.4 30.4 -19.9
2025-12-24T14:18:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:18:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:18:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.512221
2025-12-24T14:18:23.738 [DEBUG] [Thread-303562] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:18:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:18:23.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:18:23.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:18:23.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:18:23.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:18:23.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:18:12', tmtdew=18.91, humidity=28.9, cloud=0.0, wind=17.29, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:17:35.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:18:23.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:18:23.852 [DEBUG] [Thread-303565] [transport.py] [_log()] starting thread (client mode): 0xf818b430
2025-12-24T14:18:23.852 [DEBUG] [Thread-303565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:18:23.867 [DEBUG] [Thread-303565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:18:23.867 [INFO] [Thread-303565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:18:23.874 [DEBUG] [Thread-303565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:18:23.874 [DEBUG] [Thread-303565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] client lang: <none>
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] server lang: <none>
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] kex follows: False
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:18:23.875 [DEBUG] [Thread-303565] [transport.py] [_log()] Compression: none
2025-12-24T14:18:23.876 [DEBUG] [Thread-303565] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:18:23.935 [DEBUG] [Thread-303565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:18:23.936 [DEBUG] [Thread-303565] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:18:23.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:18:23.937 [DEBUG] [Thread-303565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:18:23.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:18:23.990 [DEBUG] [Thread-303565] [transport.py] [_log()] userauth is OK
2025-12-24T14:18:23.990 [DEBUG] [Thread-303565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:18:23.991 [DEBUG] [Thread-303565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:18:23.991 [DEBUG] [Thread-303565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:18:23.991 [DEBUG] [Thread-303565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:18:24.009 [INFO] [Thread-303565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:18:24.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:18:24.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:18:24.859 [DEBUG] [Thread-303565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:18:24.859 [DEBUG] [Thread-303565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:18:24.910 [DEBUG] [Thread-303565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:18:24.910 [DEBUG] [Thread-303565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:18:24.923 [DEBUG] [Thread-303565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:18:24.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:18:24.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:18:24.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:18:24.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:18:24.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:18:24.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:18:24.974 [DEBUG] [Thread-303565] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:18:34.564 [DEBUG] [Thread-303567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:18:37.967 [DEBUG] [Thread-303568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:18:49.712 [DEBUG] [Thread-303569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:18:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:18:55.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:18:55.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:18:55.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 18, 45), 18.7, 29.37, 0.0, 12.69, 22.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:18:55.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:18:45
2025-12-24T14:18:56.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:18:56.336 [DEBUG] [Thread-303570] [transport.py] [_log()] starting thread (client mode): 0xf8188ee0
2025-12-24T14:18:56.337 [DEBUG] [Thread-303570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:18:56.346 [DEBUG] [Thread-303570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:18:56.346 [INFO] [Thread-303570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] client lang: <none>
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] server lang: <none>
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] kex follows: False
2025-12-24T14:18:56.352 [DEBUG] [Thread-303570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:18:56.353 [DEBUG] [Thread-303570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:18:56.353 [DEBUG] [Thread-303570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:18:56.353 [DEBUG] [Thread-303570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:18:56.353 [DEBUG] [Thread-303570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:18:56.353 [DEBUG] [Thread-303570] [transport.py] [_log()] Compression: none
2025-12-24T14:18:56.353 [DEBUG] [Thread-303570] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:18:56.390 [DEBUG] [Thread-303570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:18:56.393 [DEBUG] [Thread-303570] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:18:56.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:18:56.396 [DEBUG] [Thread-303570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:18:56.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:18:56.399 [DEBUG] [Thread-303570] [transport.py] [_log()] userauth is OK
2025-12-24T14:18:56.400 [DEBUG] [Thread-303570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:18:56.400 [DEBUG] [Thread-303570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:18:56.400 [DEBUG] [Thread-303570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:18:56.400 [DEBUG] [Thread-303570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:18:56.430 [INFO] [Thread-303570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:18:56.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:18:57.091 [DEBUG] [Thread-303570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:18:57.091 [DEBUG] [Thread-303570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:18:57.092 [DEBUG] [Thread-303570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:18:57.133 [DEBUG] [Thread-303570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:18:57.133 [DEBUG] [Thread-303570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:18:57.135 [DEBUG] [Thread-303570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:18:57.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:18:57.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:18:57.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:18:57.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:18:57.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:18:57.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:18:57.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:18:57.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:18:57.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:18:57.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.512569 -999.00  +23.50  15.05     33   +6.60 1 2 1 1 1   888    0 15.90 -36.32 ----- 15.1 15.1 124.8 22.6 29.7 -18.6 29.6 -17.8 30.1 -17.1 30.4 -18.6
2025-12-24T14:18:57.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:18:57.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:18:57.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.512569
2025-12-24T14:18:57.170 [DEBUG] [Thread-303570] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:18:57.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:18:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:18:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:18:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:18:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:18:57.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:18:45', tmtdew=18.7, humidity=29.37, cloud=0.0, wind=12.69, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:18:05.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:18:57.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:18:57.274 [DEBUG] [Thread-303573] [transport.py] [_log()] starting thread (client mode): 0xf81890c0
2025-12-24T14:18:57.274 [DEBUG] [Thread-303573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:18:57.287 [DEBUG] [Thread-303573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:18:57.287 [INFO] [Thread-303573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] client lang: <none>
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] server lang: <none>
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] kex follows: False
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:18:57.295 [DEBUG] [Thread-303573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:18:57.296 [DEBUG] [Thread-303573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:18:57.296 [DEBUG] [Thread-303573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:18:57.296 [DEBUG] [Thread-303573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:18:57.296 [DEBUG] [Thread-303573] [transport.py] [_log()] Compression: none
2025-12-24T14:18:57.296 [DEBUG] [Thread-303573] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:18:57.353 [DEBUG] [Thread-303573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:18:57.353 [DEBUG] [Thread-303573] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:18:57.353 [DEBUG] [Thread-303573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:18:57.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:18:57.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:18:57.410 [DEBUG] [Thread-303573] [transport.py] [_log()] userauth is OK
2025-12-24T14:18:57.410 [DEBUG] [Thread-303573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:18:57.410 [DEBUG] [Thread-303573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:18:57.410 [DEBUG] [Thread-303573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:18:57.410 [DEBUG] [Thread-303573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:18:57.424 [INFO] [Thread-303573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:18:57.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:18:57.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:18:58.319 [DEBUG] [Thread-303573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:18:58.319 [DEBUG] [Thread-303573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:18:58.366 [DEBUG] [Thread-303573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:18:58.366 [DEBUG] [Thread-303573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:18:58.375 [DEBUG] [Thread-303573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:18:58.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:18:58.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:18:58.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:18:58.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:18:58.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:18:58.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:18:58.408 [DEBUG] [Thread-303573] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:19:04.814 [DEBUG] [Thread-303575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:19:13.666 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:19:13.668 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:19:19.968 [DEBUG] [Thread-303576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:19:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:19:28.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:19:28.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:19:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 19, 18), 18.61, 29.51, 0.0, 10.41, 22.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:19:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:19:18
2025-12-24T14:19:29.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:19:30.170 [DEBUG] [Thread-303577] [transport.py] [_log()] starting thread (client mode): 0xf81892d0
2025-12-24T14:19:30.170 [DEBUG] [Thread-303577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:19:30.171 [DEBUG] [Thread-303577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:19:30.171 [INFO] [Thread-303577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] client lang: <none>
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] server lang: <none>
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] kex follows: False
2025-12-24T14:19:30.175 [DEBUG] [Thread-303577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:19:30.176 [DEBUG] [Thread-303577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:19:30.176 [DEBUG] [Thread-303577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:19:30.176 [DEBUG] [Thread-303577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:19:30.176 [DEBUG] [Thread-303577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:19:30.176 [DEBUG] [Thread-303577] [transport.py] [_log()] Compression: none
2025-12-24T14:19:30.176 [DEBUG] [Thread-303577] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:19:30.207 [DEBUG] [Thread-303577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:19:30.211 [DEBUG] [Thread-303577] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:19:30.213 [DEBUG] [Thread-303577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:19:30.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:19:30.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:19:30.219 [DEBUG] [Thread-303577] [transport.py] [_log()] userauth is OK
2025-12-24T14:19:30.219 [DEBUG] [Thread-303577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:19:30.219 [DEBUG] [Thread-303577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:19:30.220 [DEBUG] [Thread-303577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:19:30.220 [DEBUG] [Thread-303577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:19:30.258 [INFO] [Thread-303577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:19:30.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:19:30.915 [DEBUG] [Thread-303577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:19:30.915 [DEBUG] [Thread-303577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:19:30.916 [DEBUG] [Thread-303577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:19:30.960 [DEBUG] [Thread-303577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:19:30.960 [DEBUG] [Thread-303577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:19:30.963 [DEBUG] [Thread-303577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:19:30.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:19:30.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:19:30.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:19:30.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:19:30.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:19:30.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:19:30.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:19:30.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:19:30.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:19:30.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.512916 -999.00  +23.40  10.38     33   +6.40 1 2 1 1 1   888    0 16.33 -32.82 ----- 10.4 10.4 146.4 20.7 29.6 -18.1 29.5 -18.2 30.1 -18.8 30.2 -19.6
2025-12-24T14:19:30.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:19:30.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:19:30.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.512916
2025-12-24T14:19:30.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:19:31.002 [DEBUG] [Thread-303577] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:19:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:19:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:19:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:19:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:19:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:19:18', tmtdew=18.61, humidity=29.51, cloud=0.0, wind=10.41, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:18:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:19:31.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:19:31.091 [DEBUG] [Thread-303580] [transport.py] [_log()] starting thread (client mode): 0xf5752c50
2025-12-24T14:19:31.091 [DEBUG] [Thread-303580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:19:31.105 [DEBUG] [Thread-303580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:19:31.105 [INFO] [Thread-303580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] client lang: <none>
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] server lang: <none>
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] kex follows: False
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:19:31.113 [DEBUG] [Thread-303580] [transport.py] [_log()] Compression: none
2025-12-24T14:19:31.114 [DEBUG] [Thread-303580] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:19:31.173 [DEBUG] [Thread-303580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:19:31.173 [DEBUG] [Thread-303580] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:19:31.173 [DEBUG] [Thread-303580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:19:31.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:19:31.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:19:31.230 [DEBUG] [Thread-303580] [transport.py] [_log()] userauth is OK
2025-12-24T14:19:31.230 [DEBUG] [Thread-303580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:19:31.230 [DEBUG] [Thread-303580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:19:31.230 [DEBUG] [Thread-303580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:19:31.230 [DEBUG] [Thread-303580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:19:31.244 [INFO] [Thread-303580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:19:31.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:19:31.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:19:32.158 [DEBUG] [Thread-303580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:19:32.158 [DEBUG] [Thread-303580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:19:32.206 [DEBUG] [Thread-303580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:19:32.206 [DEBUG] [Thread-303580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:19:32.214 [DEBUG] [Thread-303580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:19:32.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:19:32.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:19:32.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
2025-12-24T14:19:32.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:19:32.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:19:32.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:19:32.255 [DEBUG] [Thread-303580] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:19:35.027 [DEBUG] [Thread-303582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:19:38.228 [DEBUG] [Thread-303583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:19:50.133 [DEBUG] [Thread-303584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:20:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:20:02.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:20: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
2025-12-24T14:20:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 19, 51), 18.34, 29.96, 0.0, 6.46, 22.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:20:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:19:51
2025-12-24T14:20:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:20:03.681 [DEBUG] [Thread-303585] [transport.py] [_log()] starting thread (client mode): 0xf8188430
2025-12-24T14:20:03.682 [DEBUG] [Thread-303585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:20:03.690 [DEBUG] [Thread-303585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:20:03.691 [INFO] [Thread-303585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:20:03.697 [DEBUG] [Thread-303585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:20:03.697 [DEBUG] [Thread-303585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:20:03.697 [DEBUG] [Thread-303585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:20:03.697 [DEBUG] [Thread-303585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:20:03.697 [DEBUG] [Thread-303585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] client lang: <none>
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] server lang: <none>
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] kex follows: False
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:20:03.698 [DEBUG] [Thread-303585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:20:03.699 [DEBUG] [Thread-303585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:20:03.699 [DEBUG] [Thread-303585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:20:03.699 [DEBUG] [Thread-303585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:20:03.699 [DEBUG] [Thread-303585] [transport.py] [_log()] Compression: none
2025-12-24T14:20:03.699 [DEBUG] [Thread-303585] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:20:03.731 [DEBUG] [Thread-303585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:20:03.736 [DEBUG] [Thread-303585] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:20:03.737 [DEBUG] [Thread-303585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:20:03.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:20:03.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:20:03.742 [DEBUG] [Thread-303585] [transport.py] [_log()] userauth is OK
2025-12-24T14:20:03.742 [DEBUG] [Thread-303585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:20:03.743 [DEBUG] [Thread-303585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:20:03.743 [DEBUG] [Thread-303585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:20:03.743 [DEBUG] [Thread-303585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:20:03.769 [INFO] [Thread-303585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:20:03.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:20:04.580 [DEBUG] [Thread-303585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:20:04.580 [DEBUG] [Thread-303585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:20:04.582 [DEBUG] [Thread-303585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:20:04.620 [DEBUG] [Thread-303585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:20:04.621 [DEBUG] [Thread-303585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:20:04.623 [DEBUG] [Thread-303585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:20:04.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:20:04.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:20:04.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:20:04.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:20:04.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:20:04.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:20:04.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:20:04.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:20:04.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:20:04.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.513263 -999.00  +23.20  12.08     33   +6.40 1 2 1 1 1   888    0 15.93 -30.34 ----- 12.1 12.1 172.0 17.4 29.5 -18.0 29.5 -19.4 30.0 -17.3 30.2 -18.1
2025-12-24T14:20:04.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:20:04.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:20:04.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.513263
2025-12-24T14:20:04.658 [DEBUG] [Thread-303585] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:20:04.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:20:04.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:20:04.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:20:04.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:20:04.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:20:04.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:19:51', tmtdew=18.34, humidity=29.96, cloud=0.0, wind=6.46, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:19:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:20:04.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:20:04.786 [DEBUG] [Thread-303588] [transport.py] [_log()] starting thread (client mode): 0xf818afe0
2025-12-24T14:20:04.787 [DEBUG] [Thread-303588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:20:04.803 [DEBUG] [Thread-303588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:20:04.803 [INFO] [Thread-303588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] client lang: <none>
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] server lang: <none>
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] kex follows: False
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] Compression: none
2025-12-24T14:20:04.812 [DEBUG] [Thread-303588] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:20:04.873 [DEBUG] [Thread-303588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:20:04.874 [DEBUG] [Thread-303588] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:20:04.874 [DEBUG] [Thread-303588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:20:04.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:20:04.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:20:04.934 [DEBUG] [Thread-303588] [transport.py] [_log()] userauth is OK
2025-12-24T14:20:04.934 [DEBUG] [Thread-303588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:20:04.934 [DEBUG] [Thread-303588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:20:04.934 [DEBUG] [Thread-303588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:20:04.934 [DEBUG] [Thread-303588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:20:04.952 [INFO] [Thread-303588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:20:04.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:20:04.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:20:05.202 [DEBUG] [Thread-303590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:20:05.841 [DEBUG] [Thread-303588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:20:05.842 [DEBUG] [Thread-303588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:20:05.892 [DEBUG] [Thread-303588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:20:05.892 [DEBUG] [Thread-303588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:20:05.906 [DEBUG] [Thread-303588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:20:05.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:20:05.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:20:05.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:20:05.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:20:05.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:20:05.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:20:05.957 [DEBUG] [Thread-303588] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:20:13.816 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:20:13.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:20:20.366 [DEBUG] [Thread-303591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:20:35.478 [DEBUG] [Thread-303592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:20:35.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:20:35.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:20:36.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:20:37.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 20, 25), 18.32, 30.03, 0.0, 6.69, 22.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:20:37.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:20:25
2025-12-24T14:20:37.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:20:37.638 [DEBUG] [Thread-303593] [transport.py] [_log()] starting thread (client mode): 0xf8188040
2025-12-24T14:20:37.638 [DEBUG] [Thread-303593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:20:37.652 [DEBUG] [Thread-303593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:20:37.652 [INFO] [Thread-303593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:20:37.658 [DEBUG] [Thread-303593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] client lang: <none>
2025-12-24T14:20:37.659 [DEBUG] [Thread-303593] [transport.py] [_log()] server lang: <none>
2025-12-24T14:20:37.660 [DEBUG] [Thread-303593] [transport.py] [_log()] kex follows: False
2025-12-24T14:20:37.660 [DEBUG] [Thread-303593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:20:37.660 [DEBUG] [Thread-303593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:20:37.661 [DEBUG] [Thread-303593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:20:37.661 [DEBUG] [Thread-303593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:20:37.661 [DEBUG] [Thread-303593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:20:37.661 [DEBUG] [Thread-303593] [transport.py] [_log()] Compression: none
2025-12-24T14:20:37.661 [DEBUG] [Thread-303593] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:20:37.705 [DEBUG] [Thread-303593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:20:37.709 [DEBUG] [Thread-303593] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:20:37.711 [DEBUG] [Thread-303593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:20:37.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:20:37.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:20:37.716 [DEBUG] [Thread-303593] [transport.py] [_log()] userauth is OK
2025-12-24T14:20:37.717 [DEBUG] [Thread-303593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:20:37.717 [DEBUG] [Thread-303593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:20:37.717 [DEBUG] [Thread-303593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:20:37.717 [DEBUG] [Thread-303593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:20:37.756 [INFO] [Thread-303593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:20:37.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:20:38.379 [DEBUG] [Thread-303593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:20:38.379 [DEBUG] [Thread-303593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:20:38.380 [DEBUG] [Thread-303593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:20:38.420 [DEBUG] [Thread-303593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:20:38.420 [DEBUG] [Thread-303593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:20:38.424 [DEBUG] [Thread-303593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:20:38.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:20:38.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:20:38.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:20:38.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:20:38.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:20:38.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:20:38.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:20:38.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:20:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:20:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.513610 -999.00  +22.90   7.22     34   +6.30 1 2 1 1 1   888    0 16.01 -30.48 ----- 7.2 7.2 120.0 13.8 29.6 -16.7 29.5 -16.8 29.9 -16.4 30.3 -17.7
2025-12-24T14:20:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:20:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:20:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.513610
2025-12-24T14:20:38.460 [DEBUG] [Thread-303593] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:20:38.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:20:38.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:20:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:20:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:20:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:20:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:20:25', tmtdew=18.32, humidity=30.03, cloud=0.0, wind=6.69, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:19:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:20:38.546 [DEBUG] [Thread-303596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:20:38.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:20:38.573 [DEBUG] [Thread-303597] [transport.py] [_log()] starting thread (client mode): 0xf8188f40
2025-12-24T14:20:38.573 [DEBUG] [Thread-303597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:20:38.588 [DEBUG] [Thread-303597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:20:38.588 [INFO] [Thread-303597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:20:38.595 [DEBUG] [Thread-303597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] client lang: <none>
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] server lang: <none>
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] kex follows: False
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:20:38.596 [DEBUG] [Thread-303597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:20:38.597 [DEBUG] [Thread-303597] [transport.py] [_log()] Compression: none
2025-12-24T14:20:38.597 [DEBUG] [Thread-303597] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:20:38.656 [DEBUG] [Thread-303597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:20:38.656 [DEBUG] [Thread-303597] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:20:38.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:20:38.657 [DEBUG] [Thread-303597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:20:38.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:20:38.715 [DEBUG] [Thread-303597] [transport.py] [_log()] userauth is OK
2025-12-24T14:20:38.715 [DEBUG] [Thread-303597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:20:38.715 [DEBUG] [Thread-303597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:20:38.715 [DEBUG] [Thread-303597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:20:38.715 [DEBUG] [Thread-303597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:20:38.734 [INFO] [Thread-303597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:20:38.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:20:38.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:20:39.586 [DEBUG] [Thread-303597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:20:39.586 [DEBUG] [Thread-303597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:20:39.633 [DEBUG] [Thread-303597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:20:39.633 [DEBUG] [Thread-303597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:20:39.642 [DEBUG] [Thread-303597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:20:39.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:20:39.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:20:39.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:20:39.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:20:39.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:20:39.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:20:39.675 [DEBUG] [Thread-303597] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:20:50.555 [DEBUG] [Thread-303599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:21:05.710 [DEBUG] [Thread-303600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:21:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:21:09.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:21:09.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:21:10.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 20, 58), 18.63, 29.85, 0.0, 4.4, 22.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:21:10.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:20:58
2025-12-24T14:21:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:21:10.794 [DEBUG] [Thread-303601] [transport.py] [_log()] starting thread (client mode): 0xf8189390
2025-12-24T14:21:10.794 [DEBUG] [Thread-303601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:21:10.806 [DEBUG] [Thread-303601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:21:10.806 [INFO] [Thread-303601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:21:10.810 [DEBUG] [Thread-303601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] client lang: <none>
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] server lang: <none>
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] kex follows: False
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:21:10.811 [DEBUG] [Thread-303601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:21:10.812 [DEBUG] [Thread-303601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:21:10.812 [DEBUG] [Thread-303601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:21:10.812 [DEBUG] [Thread-303601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:21:10.812 [DEBUG] [Thread-303601] [transport.py] [_log()] Compression: none
2025-12-24T14:21:10.812 [DEBUG] [Thread-303601] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:21:10.843 [DEBUG] [Thread-303601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:21:10.846 [DEBUG] [Thread-303601] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:21:10.847 [DEBUG] [Thread-303601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:21:10.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:21:10.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:21:10.851 [DEBUG] [Thread-303601] [transport.py] [_log()] userauth is OK
2025-12-24T14:21:10.851 [DEBUG] [Thread-303601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:21:10.851 [DEBUG] [Thread-303601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:21:10.852 [DEBUG] [Thread-303601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:21:10.852 [DEBUG] [Thread-303601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:21:10.872 [INFO] [Thread-303601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:21:10.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:21:11.491 [DEBUG] [Thread-303601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:21:11.491 [DEBUG] [Thread-303601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:21:11.492 [DEBUG] [Thread-303601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:21:11.532 [DEBUG] [Thread-303601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:21:11.532 [DEBUG] [Thread-303601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:21:11.535 [DEBUG] [Thread-303601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:21:11.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:21:11.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:21:11.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:21:11.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:21:11.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:21:11.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:21:11.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:21:11.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:21:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:21:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.514305 -999.00  +23.00   3.27     34   +6.50 1 2 1 1 1   888    0 16.21 -25.21 ----- 3.3 3.3 145.1 8.0 29.8 -16.8 29.6 -16.6 30.1 -17.0 30.5 -17.3
2025-12-24T14:21:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:21:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:21:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.514305
2025-12-24T14:21:11.573 [DEBUG] [Thread-303601] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:21:11.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:21:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:21:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:21:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:21:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:21:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:20:58', tmtdew=18.63, humidity=29.85, cloud=0.0, wind=4.4, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:20:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:21:11.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:21:11.688 [DEBUG] [Thread-303604] [transport.py] [_log()] starting thread (client mode): 0xf81f2980
2025-12-24T14:21:11.688 [DEBUG] [Thread-303604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:21:11.703 [DEBUG] [Thread-303604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:21:11.703 [INFO] [Thread-303604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:21:11.710 [DEBUG] [Thread-303604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] client lang: <none>
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] server lang: <none>
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] kex follows: False
2025-12-24T14:21:11.711 [DEBUG] [Thread-303604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:21:11.712 [DEBUG] [Thread-303604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:21:11.712 [DEBUG] [Thread-303604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:21:11.712 [DEBUG] [Thread-303604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:21:11.712 [DEBUG] [Thread-303604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:21:11.712 [DEBUG] [Thread-303604] [transport.py] [_log()] Compression: none
2025-12-24T14:21:11.712 [DEBUG] [Thread-303604] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:21:11.771 [DEBUG] [Thread-303604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:21:11.772 [DEBUG] [Thread-303604] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:21:11.773 [DEBUG] [Thread-303604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:21:11.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:21:11.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:21:11.827 [DEBUG] [Thread-303604] [transport.py] [_log()] userauth is OK
2025-12-24T14:21:11.828 [DEBUG] [Thread-303604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:21:11.828 [DEBUG] [Thread-303604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:21:11.828 [DEBUG] [Thread-303604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:21:11.828 [DEBUG] [Thread-303604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:21:11.847 [INFO] [Thread-303604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:21:11.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:21:11.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:21:12.703 [DEBUG] [Thread-303604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:21:12.703 [DEBUG] [Thread-303604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:21:12.753 [DEBUG] [Thread-303604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:21:12.753 [DEBUG] [Thread-303604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:21:12.762 [DEBUG] [Thread-303604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:21:12.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:21:12.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')
2025-12-24T14:21:12.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:21:12.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:21:12.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:21:12.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:21:12.795 [DEBUG] [Thread-303604] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:21:13.963 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:21:13.964 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:21:20.796 [DEBUG] [Thread-303606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:21:35.976 [DEBUG] [Thread-303607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:21:38.762 [DEBUG] [Thread-303608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:21:42.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:21:42.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:21:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:21:43.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 21, 31), 18.72, 29.68, 0.0, 5.15, 22.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:21:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:21:31
2025-12-24T14:21:43.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:21:44.157 [DEBUG] [Thread-303609] [transport.py] [_log()] starting thread (client mode): 0xf8189330
2025-12-24T14:21:44.158 [DEBUG] [Thread-303609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:21:44.171 [DEBUG] [Thread-303609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:21:44.172 [INFO] [Thread-303609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:21:44.179 [DEBUG] [Thread-303609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:21:44.179 [DEBUG] [Thread-303609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:21:44.179 [DEBUG] [Thread-303609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] client lang: <none>
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] server lang: <none>
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] kex follows: False
2025-12-24T14:21:44.180 [DEBUG] [Thread-303609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:21:44.181 [DEBUG] [Thread-303609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:21:44.181 [DEBUG] [Thread-303609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:21:44.182 [DEBUG] [Thread-303609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:21:44.182 [DEBUG] [Thread-303609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:21:44.182 [DEBUG] [Thread-303609] [transport.py] [_log()] Compression: none
2025-12-24T14:21:44.182 [DEBUG] [Thread-303609] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:21:44.219 [DEBUG] [Thread-303609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:21:44.224 [DEBUG] [Thread-303609] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:21:44.226 [DEBUG] [Thread-303609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:21:44.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:21:44.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:21:44.231 [DEBUG] [Thread-303609] [transport.py] [_log()] userauth is OK
2025-12-24T14:21:44.231 [DEBUG] [Thread-303609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:21:44.231 [DEBUG] [Thread-303609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:21:44.231 [DEBUG] [Thread-303609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:21:44.232 [DEBUG] [Thread-303609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:21:44.260 [INFO] [Thread-303609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:21:44.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:21:44.891 [DEBUG] [Thread-303609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:21:44.891 [DEBUG] [Thread-303609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:21:44.893 [DEBUG] [Thread-303609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:21:44.933 [DEBUG] [Thread-303609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:21:44.933 [DEBUG] [Thread-303609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:21:44.936 [DEBUG] [Thread-303609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:21:44.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:21:44.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:21:44.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:21:44.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:21:44.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:21:44.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:21:44.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:21:44.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:21:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:21:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.514652 -999.00  +23.30   7.73     33   +6.50 1 2 1 1 1   888    0 16.46 -25.64 ----- 7.7 7.7 134.8 10.7 30.0 -14.1 29.8 -16.2 30.3 -16.9 30.6 -16.3
2025-12-24T14:21:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:21:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:21:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.514652
2025-12-24T14:21:44.967 [DEBUG] [Thread-303609] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:21:44.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:21:44.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:21:44.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:21:44.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:21:44.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:21:44.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:21:31', tmtdew=18.72, humidity=29.68, cloud=0.0, wind=5.15, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:21:05.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:21:45.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:21:45.067 [DEBUG] [Thread-303612] [transport.py] [_log()] starting thread (client mode): 0xf8189ae0
2025-12-24T14:21:45.067 [DEBUG] [Thread-303612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:21:45.081 [DEBUG] [Thread-303612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:21:45.082 [INFO] [Thread-303612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] client lang: <none>
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] server lang: <none>
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] kex follows: False
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:21:45.089 [DEBUG] [Thread-303612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:21:45.090 [DEBUG] [Thread-303612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:21:45.090 [DEBUG] [Thread-303612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:21:45.090 [DEBUG] [Thread-303612] [transport.py] [_log()] Compression: none
2025-12-24T14:21:45.090 [DEBUG] [Thread-303612] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:21:45.145 [DEBUG] [Thread-303612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:21:45.146 [DEBUG] [Thread-303612] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:21:45.146 [DEBUG] [Thread-303612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:21:45.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:21:45.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:21:45.202 [DEBUG] [Thread-303612] [transport.py] [_log()] userauth is OK
2025-12-24T14:21:45.202 [DEBUG] [Thread-303612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:21:45.202 [DEBUG] [Thread-303612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:21:45.203 [DEBUG] [Thread-303612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:21:45.203 [DEBUG] [Thread-303612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:21:45.218 [INFO] [Thread-303612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:21:45.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:21:45.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:21:46.071 [DEBUG] [Thread-303612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:21:46.071 [DEBUG] [Thread-303612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:21:46.118 [DEBUG] [Thread-303612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:21:46.119 [DEBUG] [Thread-303612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:21:46.127 [DEBUG] [Thread-303612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:21:46.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:21:46.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:21:46.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:21:46.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:21:46.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:21:46.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:21:46.160 [DEBUG] [Thread-303612] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:21:51.080 [DEBUG] [Thread-303614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:22:06.243 [DEBUG] [Thread-303615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:22:14.108 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:22:14.110 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:22:16.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:22:16.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:22:16.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:22:17.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 22, 4), 18.74, 29.65, 0.0, 6.04, 22.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:22:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:22:04
2025-12-24T14:22:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:22:17.472 [DEBUG] [Thread-303616] [transport.py] [_log()] starting thread (client mode): 0xf572e230
2025-12-24T14:22:17.473 [DEBUG] [Thread-303616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:22:17.478 [DEBUG] [Thread-303616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:22:17.478 [INFO] [Thread-303616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] client lang: <none>
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] server lang: <none>
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] kex follows: False
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:22:17.482 [DEBUG] [Thread-303616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:22:17.483 [DEBUG] [Thread-303616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:22:17.483 [DEBUG] [Thread-303616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:22:17.483 [DEBUG] [Thread-303616] [transport.py] [_log()] Compression: none
2025-12-24T14:22:17.483 [DEBUG] [Thread-303616] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:22:17.518 [DEBUG] [Thread-303616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:22:17.520 [DEBUG] [Thread-303616] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:22:17.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:22:17.524 [DEBUG] [Thread-303616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:22:17.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:22:17.561 [DEBUG] [Thread-303616] [transport.py] [_log()] userauth is OK
2025-12-24T14:22:17.561 [DEBUG] [Thread-303616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:22:17.561 [DEBUG] [Thread-303616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:22:17.561 [DEBUG] [Thread-303616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:22:17.561 [DEBUG] [Thread-303616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:22:17.591 [INFO] [Thread-303616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:22:17.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:22:18.239 [DEBUG] [Thread-303616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:22:18.239 [DEBUG] [Thread-303616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:22:18.249 [DEBUG] [Thread-303616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:22:18.280 [DEBUG] [Thread-303616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:22:18.280 [DEBUG] [Thread-303616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:22:18.284 [DEBUG] [Thread-303616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:22:18.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:22:18.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:22:18.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:22:18.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:22:18.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:22:18.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:22:18.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:22:18.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:22:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:22:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.514999 -999.00  +23.30   3.82     33   +6.50 1 2 1 1 1   888    0 16.49 -22.24 ----- 3.8 3.8 86.2 7.5 30.3 -12.2 30.1 -16.5 30.6 -16.1 31.0 -13.9
2025-12-24T14:22:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:22:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:22:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.514999
2025-12-24T14:22:18.317 [DEBUG] [Thread-303616] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:22:18.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:22:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:22:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:22:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:22:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:22:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:22:04', tmtdew=18.74, humidity=29.65, cloud=0.0, wind=6.04, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:21:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:22:18.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:22:18.440 [DEBUG] [Thread-303619] [transport.py] [_log()] starting thread (client mode): 0xf57bee90
2025-12-24T14:22:18.440 [DEBUG] [Thread-303619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:22:18.454 [DEBUG] [Thread-303619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:22:18.454 [INFO] [Thread-303619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:22:18.462 [DEBUG] [Thread-303619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:22:18.462 [DEBUG] [Thread-303619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:22:18.462 [DEBUG] [Thread-303619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:22:18.462 [DEBUG] [Thread-303619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:22:18.462 [DEBUG] [Thread-303619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:22:18.462 [DEBUG] [Thread-303619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:22:18.462 [DEBUG] [Thread-303619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] client lang: <none>
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] server lang: <none>
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] kex follows: False
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:22:18.463 [DEBUG] [Thread-303619] [transport.py] [_log()] Compression: none
2025-12-24T14:22:18.464 [DEBUG] [Thread-303619] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:22:18.518 [DEBUG] [Thread-303619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:22:18.519 [DEBUG] [Thread-303619] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:22:18.519 [DEBUG] [Thread-303619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:22:18.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:22:18.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:22:18.575 [DEBUG] [Thread-303619] [transport.py] [_log()] userauth is OK
2025-12-24T14:22:18.575 [DEBUG] [Thread-303619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:22:18.575 [DEBUG] [Thread-303619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:22:18.575 [DEBUG] [Thread-303619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:22:18.575 [DEBUG] [Thread-303619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:22:18.589 [INFO] [Thread-303619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:22:18.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:22:18.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:22:19.409 [DEBUG] [Thread-303619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:22:19.409 [DEBUG] [Thread-303619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:22:19.457 [DEBUG] [Thread-303619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:22:19.457 [DEBUG] [Thread-303619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:22:19.465 [DEBUG] [Thread-303619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:22:19.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:22:19.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')
2025-12-24T14:22:19.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:22:19.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:22:19.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:22:19.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:22:19.499 [DEBUG] [Thread-303619] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:22:21.316 [DEBUG] [Thread-303621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:22:36.508 [DEBUG] [Thread-303622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:22:38.998 [DEBUG] [Thread-303623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:22:49.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:22:49.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:22:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:22:50.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 22, 37), 19.0, 28.89, 0.0, 7.7, 22.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:22:50.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:22:37
2025-12-24T14:22:50.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:22:50.978 [DEBUG] [Thread-303624] [transport.py] [_log()] starting thread (client mode): 0xf57a8820
2025-12-24T14:22:50.979 [DEBUG] [Thread-303624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:22:50.992 [DEBUG] [Thread-303624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:22:50.992 [INFO] [Thread-303624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:22:50.999 [DEBUG] [Thread-303624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:22:51.000 [DEBUG] [Thread-303624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:22:51.000 [DEBUG] [Thread-303624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:22:51.000 [DEBUG] [Thread-303624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:22:51.000 [DEBUG] [Thread-303624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:22:51.000 [DEBUG] [Thread-303624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:22:51.001 [DEBUG] [Thread-303624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:22:51.001 [DEBUG] [Thread-303624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:22:51.001 [DEBUG] [Thread-303624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:22:51.001 [DEBUG] [Thread-303624] [transport.py] [_log()] client lang: <none>
2025-12-24T14:22:51.001 [DEBUG] [Thread-303624] [transport.py] [_log()] server lang: <none>
2025-12-24T14:22:51.001 [DEBUG] [Thread-303624] [transport.py] [_log()] kex follows: False
2025-12-24T14:22:51.001 [DEBUG] [Thread-303624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:22:51.002 [DEBUG] [Thread-303624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:22:51.002 [DEBUG] [Thread-303624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:22:51.003 [DEBUG] [Thread-303624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:22:51.003 [DEBUG] [Thread-303624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:22:51.003 [DEBUG] [Thread-303624] [transport.py] [_log()] Compression: none
2025-12-24T14:22:51.003 [DEBUG] [Thread-303624] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:22:51.041 [DEBUG] [Thread-303624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:22:51.045 [DEBUG] [Thread-303624] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:22:51.048 [DEBUG] [Thread-303624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:22:51.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:22:51.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:22:51.052 [DEBUG] [Thread-303624] [transport.py] [_log()] userauth is OK
2025-12-24T14:22:51.053 [DEBUG] [Thread-303624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:22:51.053 [DEBUG] [Thread-303624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:22:51.053 [DEBUG] [Thread-303624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:22:51.053 [DEBUG] [Thread-303624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:22:51.080 [INFO] [Thread-303624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:22:51.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:22:51.610 [DEBUG] [Thread-303626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:22:51.729 [DEBUG] [Thread-303624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:22:51.729 [DEBUG] [Thread-303624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:22:51.730 [DEBUG] [Thread-303624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:22:51.770 [DEBUG] [Thread-303624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:22:51.770 [DEBUG] [Thread-303624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:22:51.774 [DEBUG] [Thread-303624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:22:51.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:22:51.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:22:51.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:22:51.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:22:51.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:22:51.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:22:51.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:22:51.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:22:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:22:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.515346 -999.00  +23.50   3.54     33   +6.70 1 2 1 1 1   888    0 16.30 -17.82 ----- 3.5 3.5 67.3 5.3 30.5 -15.6 30.4 -15.8 30.9 -17.5 31.3 -15.1
2025-12-24T14:22:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:22:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:22:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.515346
2025-12-24T14:22:51.808 [DEBUG] [Thread-303624] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:22:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:22:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:22:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:22:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:22:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:22:51.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:22:37', tmtdew=19.0, humidity=28.89, cloud=0.0, wind=7.7, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:22:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:22:51.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:22:51.923 [DEBUG] [Thread-303628] [transport.py] [_log()] starting thread (client mode): 0xf5752e90
2025-12-24T14:22:51.923 [DEBUG] [Thread-303628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:22:51.938 [DEBUG] [Thread-303628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:22:51.938 [INFO] [Thread-303628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:22:51.945 [DEBUG] [Thread-303628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] client lang: <none>
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] server lang: <none>
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] kex follows: False
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:22:51.946 [DEBUG] [Thread-303628] [transport.py] [_log()] Compression: none
2025-12-24T14:22:51.947 [DEBUG] [Thread-303628] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:22:52.003 [DEBUG] [Thread-303628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:22:52.004 [DEBUG] [Thread-303628] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:22:52.005 [DEBUG] [Thread-303628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:22:52.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:22:52.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:22:52.063 [DEBUG] [Thread-303628] [transport.py] [_log()] userauth is OK
2025-12-24T14:22:52.064 [DEBUG] [Thread-303628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:22:52.064 [DEBUG] [Thread-303628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:22:52.064 [DEBUG] [Thread-303628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:22:52.064 [DEBUG] [Thread-303628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:22:52.083 [INFO] [Thread-303628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:22:52.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:22:52.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:22:52.938 [DEBUG] [Thread-303628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:22:52.938 [DEBUG] [Thread-303628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:22:52.986 [DEBUG] [Thread-303628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:22:52.986 [DEBUG] [Thread-303628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:22:52.994 [DEBUG] [Thread-303628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:22:53.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:22:53.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:22:53.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:22:53.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:22:53.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:22:53.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:22:53.030 [DEBUG] [Thread-303628] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:23:06.724 [DEBUG] [Thread-303630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:23:14.268 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:23:14.285 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:23:21.903 [DEBUG] [Thread-303631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:23:23.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:23:23.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:23:23.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:23:24.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 23, 10), 19.17, 28.6, 0.0, 8.89, 23.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:23:24.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:23:10
2025-12-24T14:23:24.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:23:25.146 [DEBUG] [Thread-303632] [transport.py] [_log()] starting thread (client mode): 0xf57aa260
2025-12-24T14:23:25.147 [DEBUG] [Thread-303632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:23:25.158 [DEBUG] [Thread-303632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:23:25.158 [INFO] [Thread-303632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:23:25.165 [DEBUG] [Thread-303632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:23:25.165 [DEBUG] [Thread-303632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:23:25.165 [DEBUG] [Thread-303632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:23:25.165 [DEBUG] [Thread-303632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:23:25.165 [DEBUG] [Thread-303632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:23:25.166 [DEBUG] [Thread-303632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:23:25.166 [DEBUG] [Thread-303632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:23:25.166 [DEBUG] [Thread-303632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:23:25.166 [DEBUG] [Thread-303632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:23:25.166 [DEBUG] [Thread-303632] [transport.py] [_log()] client lang: <none>
2025-12-24T14:23:25.166 [DEBUG] [Thread-303632] [transport.py] [_log()] server lang: <none>
2025-12-24T14:23:25.166 [DEBUG] [Thread-303632] [transport.py] [_log()] kex follows: False
2025-12-24T14:23:25.166 [DEBUG] [Thread-303632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:23:25.167 [DEBUG] [Thread-303632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:23:25.167 [DEBUG] [Thread-303632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:23:25.167 [DEBUG] [Thread-303632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:23:25.168 [DEBUG] [Thread-303632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:23:25.168 [DEBUG] [Thread-303632] [transport.py] [_log()] Compression: none
2025-12-24T14:23:25.168 [DEBUG] [Thread-303632] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:23:25.201 [DEBUG] [Thread-303632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:23:25.204 [DEBUG] [Thread-303632] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:23:25.205 [DEBUG] [Thread-303632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:23:25.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:23:25.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:23:25.209 [DEBUG] [Thread-303632] [transport.py] [_log()] userauth is OK
2025-12-24T14:23:25.209 [DEBUG] [Thread-303632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:23:25.209 [DEBUG] [Thread-303632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:23:25.209 [DEBUG] [Thread-303632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:23:25.209 [DEBUG] [Thread-303632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:23:25.229 [INFO] [Thread-303632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:23:25.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:23:25.820 [DEBUG] [Thread-303632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:23:25.820 [DEBUG] [Thread-303632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:23:25.822 [DEBUG] [Thread-303632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:23:25.862 [DEBUG] [Thread-303632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:23:25.863 [DEBUG] [Thread-303632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:23:25.867 [DEBUG] [Thread-303632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:23:25.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:23:25.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:23:25.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:23:25.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:23:25.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:23:25.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:23:25.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:23:25.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:23:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:23:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.516041 -999.00  +23.80  10.26     33   +6.60 1 2 1 1 1   888    0 16.30 -13.51 ----- 10.3 10.3 170.2 13.0 30.4 -17.9 30.2 -19.5 30.7 -19.1 31.0 -19.8
2025-12-24T14:23:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:23:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:23:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.516041
2025-12-24T14:23:25.900 [DEBUG] [Thread-303632] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:23:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:23:25.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:23:25.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:23:25.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:23:25.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:23:25.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:23:10', tmtdew=19.17, humidity=28.6, cloud=0.0, wind=8.89, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:23:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:23:25.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:23:25.998 [DEBUG] [Thread-303635] [transport.py] [_log()] starting thread (client mode): 0xf572cd60
2025-12-24T14:23:25.998 [DEBUG] [Thread-303635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:23:26.012 [DEBUG] [Thread-303635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:23:26.012 [INFO] [Thread-303635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:23:26.020 [DEBUG] [Thread-303635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:23:26.020 [DEBUG] [Thread-303635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:23:26.020 [DEBUG] [Thread-303635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] client lang: <none>
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] server lang: <none>
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] kex follows: False
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] Compression: none
2025-12-24T14:23:26.021 [DEBUG] [Thread-303635] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:23:26.083 [DEBUG] [Thread-303635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:23:26.083 [DEBUG] [Thread-303635] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:23:26.084 [DEBUG] [Thread-303635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:23:26.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:23:26.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:23:26.139 [DEBUG] [Thread-303635] [transport.py] [_log()] userauth is OK
2025-12-24T14:23:26.140 [DEBUG] [Thread-303635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:23:26.140 [DEBUG] [Thread-303635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:23:26.140 [DEBUG] [Thread-303635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:23:26.140 [DEBUG] [Thread-303635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:23:26.161 [INFO] [Thread-303635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:23:26.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:23:26.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:23:27.048 [DEBUG] [Thread-303635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:23:27.049 [DEBUG] [Thread-303635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:23:27.096 [DEBUG] [Thread-303635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:23:27.096 [DEBUG] [Thread-303635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:23:27.105 [DEBUG] [Thread-303635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:23:27.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:23:27.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:23:27.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:23:27.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:23:27.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:23:27.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:23:27.143 [DEBUG] [Thread-303635] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:23:36.985 [DEBUG] [Thread-303637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:23:39.228 [DEBUG] [Thread-303638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:23:52.063 [DEBUG] [Thread-303639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:23:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:23:57.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:23:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:23:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 23, 43), 19.19, 28.49, 0.0, 10.96, 23.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:23:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:23:43
2025-12-24T14:23:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:23:58.371 [DEBUG] [Thread-303640] [transport.py] [_log()] starting thread (client mode): 0xf81f1f60
2025-12-24T14:23:58.371 [DEBUG] [Thread-303640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:23:58.387 [DEBUG] [Thread-303640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:23:58.387 [INFO] [Thread-303640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] client lang: <none>
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] server lang: <none>
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] kex follows: False
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] Compression: none
2025-12-24T14:23:58.389 [DEBUG] [Thread-303640] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:23:58.401 [DEBUG] [Thread-303640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:23:58.402 [DEBUG] [Thread-303640] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:23:58.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:23:58.403 [DEBUG] [Thread-303640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:23:58.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:23:58.404 [DEBUG] [Thread-303640] [transport.py] [_log()] userauth is OK
2025-12-24T14:23:58.404 [DEBUG] [Thread-303640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:23:58.404 [DEBUG] [Thread-303640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:23:58.404 [DEBUG] [Thread-303640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:23:58.405 [DEBUG] [Thread-303640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:23:58.435 [INFO] [Thread-303640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:23:58.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:23:59.002 [DEBUG] [Thread-303640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:23:59.002 [DEBUG] [Thread-303640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:23:59.003 [DEBUG] [Thread-303640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:23:59.043 [DEBUG] [Thread-303640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:23:59.043 [DEBUG] [Thread-303640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:23:59.045 [DEBUG] [Thread-303640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:23:59.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:23:59.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:23:59.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:23:59.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:23:59.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:23:59.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:23:59.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:23:59.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:23:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:23:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.516388 -999.00  +23.70   7.97     33   +6.60 1 2 1 1 1   888    0 16.54 -11.52 ----- 8.0 8.0 181.2 14.5 30.4 -17.7 30.1 -20.5 30.6 -17.9 31.1 -18.3
2025-12-24T14:23:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:23:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:23:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.516388
2025-12-24T14:23:59.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:23:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:23:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:23:59.071 [DEBUG] [Thread-303640] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:23:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:23:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:23:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:23:43', tmtdew=19.19, humidity=28.49, cloud=0.0, wind=10.96, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:23:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:23:59.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:23:59.158 [DEBUG] [Thread-303643] [transport.py] [_log()] starting thread (client mode): 0xf81e7c10
2025-12-24T14:23:59.158 [DEBUG] [Thread-303643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:23:59.173 [DEBUG] [Thread-303643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:23:59.173 [INFO] [Thread-303643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:23:59.180 [DEBUG] [Thread-303643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] client lang: <none>
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] server lang: <none>
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] kex follows: False
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] Compression: none
2025-12-24T14:23:59.181 [DEBUG] [Thread-303643] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:23:59.238 [DEBUG] [Thread-303643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:23:59.238 [DEBUG] [Thread-303643] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:23:59.238 [DEBUG] [Thread-303643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:23:59.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:23:59.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:23:59.295 [DEBUG] [Thread-303643] [transport.py] [_log()] userauth is OK
2025-12-24T14:23:59.295 [DEBUG] [Thread-303643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:23:59.295 [DEBUG] [Thread-303643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:23:59.295 [DEBUG] [Thread-303643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:23:59.295 [DEBUG] [Thread-303643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:23:59.311 [INFO] [Thread-303643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:23:59.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:23:59.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:24:00.146 [DEBUG] [Thread-303643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:24:00.146 [DEBUG] [Thread-303643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:24:00.194 [DEBUG] [Thread-303643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:24:00.194 [DEBUG] [Thread-303643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:24:00.203 [DEBUG] [Thread-303643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:24:00.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:24:00.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:24:00.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
2025-12-24T14:24:00.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:24:00.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:24:00.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:24:00.237 [DEBUG] [Thread-303643] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:24:07.134 [DEBUG] [Thread-303645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:24:14.430 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:24:14.432 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:24:22.291 [DEBUG] [Thread-303646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:24:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:24:30.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:24:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:24:31.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 24, 16), 19.18, 28.49, 0.0, 12.49, 22.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:24:31.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:24:16
2025-12-24T14:24:31.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:24:32.036 [DEBUG] [Thread-303647] [transport.py] [_log()] starting thread (client mode): 0xf57bf220
2025-12-24T14:24:32.037 [DEBUG] [Thread-303647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:24:32.050 [DEBUG] [Thread-303647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:24:32.050 [INFO] [Thread-303647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] client lang: <none>
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] server lang: <none>
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] kex follows: False
2025-12-24T14:24:32.059 [DEBUG] [Thread-303647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:24:32.060 [DEBUG] [Thread-303647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:24:32.060 [DEBUG] [Thread-303647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:24:32.060 [DEBUG] [Thread-303647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:24:32.060 [DEBUG] [Thread-303647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:24:32.060 [DEBUG] [Thread-303647] [transport.py] [_log()] Compression: none
2025-12-24T14:24:32.060 [DEBUG] [Thread-303647] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:24:32.089 [DEBUG] [Thread-303647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:24:32.092 [DEBUG] [Thread-303647] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:24:32.094 [DEBUG] [Thread-303647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:24:32.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:24:32.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:24:32.137 [DEBUG] [Thread-303647] [transport.py] [_log()] userauth is OK
2025-12-24T14:24:32.138 [DEBUG] [Thread-303647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:24:32.138 [DEBUG] [Thread-303647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:24:32.138 [DEBUG] [Thread-303647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:24:32.138 [DEBUG] [Thread-303647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:24:32.165 [INFO] [Thread-303647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:24:32.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:24:32.805 [DEBUG] [Thread-303647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:24:32.805 [DEBUG] [Thread-303647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:24:32.806 [DEBUG] [Thread-303647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:24:32.846 [DEBUG] [Thread-303647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:24:32.846 [DEBUG] [Thread-303647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:24:32.848 [DEBUG] [Thread-303647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:24:32.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:24:32.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:24:32.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:24:32.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:24:32.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:24:32.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:24:32.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:24:32.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:24:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:24:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.516735 -999.00  +23.60   9.80     33   +6.50 1 2 1 1 1   888    0 16.84 -12.40 ----- 9.8 9.8 160.0 10.7 30.4 -18.0 30.0 -18.8 30.7 -18.7 31.0 -19.8
2025-12-24T14:24:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:24:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:24:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.516735
2025-12-24T14:24:32.878 [DEBUG] [Thread-303647] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:24:32.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:24:32.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:24:32.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:24:32.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:24:32.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:24:32.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:24:16', tmtdew=19.18, humidity=28.49, cloud=0.0, wind=12.49, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:24:05.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:24:32.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:24:32.986 [DEBUG] [Thread-303650] [transport.py] [_log()] starting thread (client mode): 0xf57bc490
2025-12-24T14:24:32.986 [DEBUG] [Thread-303650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:24:33.000 [DEBUG] [Thread-303650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:24:33.000 [INFO] [Thread-303650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:24:33.007 [DEBUG] [Thread-303650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] client lang: <none>
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] server lang: <none>
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] kex follows: False
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] Compression: none
2025-12-24T14:24:33.008 [DEBUG] [Thread-303650] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:24:33.071 [DEBUG] [Thread-303650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:24:33.071 [DEBUG] [Thread-303650] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:24:33.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:24:33.071 [DEBUG] [Thread-303650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:24:33.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:24:33.131 [DEBUG] [Thread-303650] [transport.py] [_log()] userauth is OK
2025-12-24T14:24:33.131 [DEBUG] [Thread-303650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:24:33.131 [DEBUG] [Thread-303650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:24:33.131 [DEBUG] [Thread-303650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:24:33.131 [DEBUG] [Thread-303650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:24:33.151 [INFO] [Thread-303650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:24:33.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:24:33.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:24:34.006 [DEBUG] [Thread-303650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:24:34.006 [DEBUG] [Thread-303650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:24:34.054 [DEBUG] [Thread-303650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:24:34.054 [DEBUG] [Thread-303650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:24:34.063 [DEBUG] [Thread-303650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:24:34.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:24:34.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:24:34.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') -> 00000000
2025-12-24T14:24:34.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:24:34.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:24:34.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:24:34.102 [DEBUG] [Thread-303650] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:24:37.377 [DEBUG] [Thread-303652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:24:39.481 [DEBUG] [Thread-303653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:24:52.529 [DEBUG] [Thread-303654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:25:04.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:25:04.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:25:04.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:25:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 24, 49), 19.11, 28.94, 0.0, 10.67, 22.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:25:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:24:49
2025-12-24T14:25:05.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:25:05.878 [DEBUG] [Thread-303655] [transport.py] [_log()] starting thread (client mode): 0xf5773490
2025-12-24T14:25:05.878 [DEBUG] [Thread-303655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:25:05.884 [DEBUG] [Thread-303655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:25:05.884 [INFO] [Thread-303655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:25:05.888 [DEBUG] [Thread-303655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] client lang: <none>
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] server lang: <none>
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] kex follows: False
2025-12-24T14:25:05.889 [DEBUG] [Thread-303655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:25:05.890 [DEBUG] [Thread-303655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:25:05.890 [DEBUG] [Thread-303655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:25:05.890 [DEBUG] [Thread-303655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:25:05.890 [DEBUG] [Thread-303655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:25:05.890 [DEBUG] [Thread-303655] [transport.py] [_log()] Compression: none
2025-12-24T14:25:05.890 [DEBUG] [Thread-303655] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:25:05.915 [DEBUG] [Thread-303655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:25:05.919 [DEBUG] [Thread-303655] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:25:05.921 [DEBUG] [Thread-303655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:25:05.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:25:05.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:25:05.927 [DEBUG] [Thread-303655] [transport.py] [_log()] userauth is OK
2025-12-24T14:25:05.928 [DEBUG] [Thread-303655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:25:05.928 [DEBUG] [Thread-303655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:25:05.928 [DEBUG] [Thread-303655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:25:05.928 [DEBUG] [Thread-303655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:25:05.955 [INFO] [Thread-303655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:25:05.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:25:06.608 [DEBUG] [Thread-303655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:25:06.608 [DEBUG] [Thread-303655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:25:06.609 [DEBUG] [Thread-303655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:25:06.649 [DEBUG] [Thread-303655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:25:06.650 [DEBUG] [Thread-303655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:25:06.651 [DEBUG] [Thread-303655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:25:06.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:25:06.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:25:06.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:25:06.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:25:06.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:25:06.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:25:06.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:25:06.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:25:06.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:25:06.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.517082 -999.00  +23.60   3.22     33   +6.50 1 2 1 1 1   888    0 16.68 -10.22 ----- 3.2 3.2 245.3 5.7 30.4 -16.7 30.2 -18.5 30.5 -19.8 31.0 -17.3
2025-12-24T14:25:06.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:25:06.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:25:06.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.517082
2025-12-24T14:25:06.675 [DEBUG] [Thread-303655] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:25:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:25:06.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:25:06.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:25:06.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:25:06.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:25:06.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:24:49', tmtdew=19.11, humidity=28.94, cloud=0.0, wind=10.67, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:24:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:25:06.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:25:06.774 [DEBUG] [Thread-303658] [transport.py] [_log()] starting thread (client mode): 0xf572d7b0
2025-12-24T14:25:06.774 [DEBUG] [Thread-303658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:25:06.792 [DEBUG] [Thread-303658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:25:06.792 [INFO] [Thread-303658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:25:06.800 [DEBUG] [Thread-303658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:25:06.800 [DEBUG] [Thread-303658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:25:06.800 [DEBUG] [Thread-303658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:25:06.800 [DEBUG] [Thread-303658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:25:06.800 [DEBUG] [Thread-303658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:25:06.800 [DEBUG] [Thread-303658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] client lang: <none>
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] server lang: <none>
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] kex follows: False
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] Compression: none
2025-12-24T14:25:06.801 [DEBUG] [Thread-303658] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:25:06.858 [DEBUG] [Thread-303658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:25:06.859 [DEBUG] [Thread-303658] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:25:06.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:25:06.860 [DEBUG] [Thread-303658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:25:06.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:25:06.917 [DEBUG] [Thread-303658] [transport.py] [_log()] userauth is OK
2025-12-24T14:25:06.917 [DEBUG] [Thread-303658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:25:06.917 [DEBUG] [Thread-303658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:25:06.917 [DEBUG] [Thread-303658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:25:06.917 [DEBUG] [Thread-303658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:25:06.937 [INFO] [Thread-303658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:25:06.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:25:06.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:25:07.618 [DEBUG] [Thread-303660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:25:07.828 [DEBUG] [Thread-303658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:25:07.828 [DEBUG] [Thread-303658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:25:07.877 [DEBUG] [Thread-303658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:25:07.877 [DEBUG] [Thread-303658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:25:07.886 [DEBUG] [Thread-303658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:25:07.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:25:07.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:25: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
2025-12-24T14:25:07.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:25:07.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:25:07.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:25:07.922 [DEBUG] [Thread-303658] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:25:14.592 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:25:14.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:25:22.811 [DEBUG] [Thread-303661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:25:37.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:25:37.987 [DEBUG] [Thread-303662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:25:37.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:25:38.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
2025-12-24T14:25:39.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 25, 22), 19.0, 29.12, 0.0, 11.35, 22.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:25:39.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:25:22
2025-12-24T14:25:39.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:25:39.738 [DEBUG] [Thread-303663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:25:39.747 [DEBUG] [Thread-303664] [transport.py] [_log()] starting thread (client mode): 0xf57530d0
2025-12-24T14:25:39.747 [DEBUG] [Thread-303664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:25:39.754 [DEBUG] [Thread-303664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:25:39.755 [INFO] [Thread-303664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:25:39.759 [DEBUG] [Thread-303664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:25:39.759 [DEBUG] [Thread-303664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:25:39.759 [DEBUG] [Thread-303664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:25:39.759 [DEBUG] [Thread-303664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:25:39.759 [DEBUG] [Thread-303664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:25:39.759 [DEBUG] [Thread-303664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:25:39.759 [DEBUG] [Thread-303664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:25:39.760 [DEBUG] [Thread-303664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:25:39.760 [DEBUG] [Thread-303664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:25:39.760 [DEBUG] [Thread-303664] [transport.py] [_log()] client lang: <none>
2025-12-24T14:25:39.760 [DEBUG] [Thread-303664] [transport.py] [_log()] server lang: <none>
2025-12-24T14:25:39.760 [DEBUG] [Thread-303664] [transport.py] [_log()] kex follows: False
2025-12-24T14:25:39.760 [DEBUG] [Thread-303664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:25:39.761 [DEBUG] [Thread-303664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:25:39.761 [DEBUG] [Thread-303664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:25:39.761 [DEBUG] [Thread-303664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:25:39.761 [DEBUG] [Thread-303664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:25:39.761 [DEBUG] [Thread-303664] [transport.py] [_log()] Compression: none
2025-12-24T14:25:39.761 [DEBUG] [Thread-303664] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:25:39.795 [DEBUG] [Thread-303664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:25:39.800 [DEBUG] [Thread-303664] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:25:39.802 [DEBUG] [Thread-303664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:25:39.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:25:39.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:25:39.808 [DEBUG] [Thread-303664] [transport.py] [_log()] userauth is OK
2025-12-24T14:25:39.809 [DEBUG] [Thread-303664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:25:39.809 [DEBUG] [Thread-303664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:25:39.809 [DEBUG] [Thread-303664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:25:39.809 [DEBUG] [Thread-303664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:25:39.838 [INFO] [Thread-303664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:25:39.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:25:40.453 [DEBUG] [Thread-303664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:25:40.453 [DEBUG] [Thread-303664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:25:40.462 [DEBUG] [Thread-303664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:25:40.494 [DEBUG] [Thread-303664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:25:40.494 [DEBUG] [Thread-303664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:25:40.495 [DEBUG] [Thread-303664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:25:40.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:25:40.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:25:40.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:25:40.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:25:40.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:25:40.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:25:40.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:25:40.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:25:40.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:25:40.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.517429 -999.00  +23.60  16.11     33   +6.50 1 2 1 1 1   888    0 16.65 -5.52 ----- 16.1 16.1 180.9 20.8 30.2 -18.7 29.7 -23.5 30.6 -19.4 30.7 -20.3
2025-12-24T14:25:40.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:25:40.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:25:40.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.517429
2025-12-24T14:25:40.517 [DEBUG] [Thread-303664] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:25:40.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:25:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:25:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:25:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:25:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:25:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:25:22', tmtdew=19.0, humidity=29.12, cloud=0.0, wind=11.35, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:25:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:25:40.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:25:40.612 [DEBUG] [Thread-303667] [transport.py] [_log()] starting thread (client mode): 0xf57714b0
2025-12-24T14:25:40.612 [DEBUG] [Thread-303667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:25:40.631 [DEBUG] [Thread-303667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:25:40.631 [INFO] [Thread-303667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] client lang: <none>
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] server lang: <none>
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] kex follows: False
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] Compression: none
2025-12-24T14:25:40.639 [DEBUG] [Thread-303667] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:25:40.708 [DEBUG] [Thread-303667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:25:40.708 [DEBUG] [Thread-303667] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:25:40.709 [DEBUG] [Thread-303667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:25:40.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:25:40.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:25:40.767 [DEBUG] [Thread-303667] [transport.py] [_log()] userauth is OK
2025-12-24T14:25:40.767 [DEBUG] [Thread-303667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:25:40.767 [DEBUG] [Thread-303667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:25:40.767 [DEBUG] [Thread-303667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:25:40.767 [DEBUG] [Thread-303667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:25:40.786 [INFO] [Thread-303667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:25:40.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:25:40.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:25:41.651 [DEBUG] [Thread-303667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:25:41.652 [DEBUG] [Thread-303667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:25:41.690 [DEBUG] [Thread-303667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:25:41.690 [DEBUG] [Thread-303667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:25:41.700 [DEBUG] [Thread-303667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:25:41.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:25:41.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:25:41.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
2025-12-24T14:25:41.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:25:41.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:25:41.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:25:41.739 [DEBUG] [Thread-303667] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:25:53.062 [DEBUG] [Thread-303669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:26:08.189 [DEBUG] [Thread-303670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:26:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:26:11.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:26:11.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:26:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 25, 56), 19.2, 28.39, 0.0, 11.79, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:26:12.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:25:56
2025-12-24T14:26:12.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:26:12.943 [DEBUG] [Thread-303671] [transport.py] [_log()] starting thread (client mode): 0xf57ab610
2025-12-24T14:26:12.944 [DEBUG] [Thread-303671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:26:12.948 [DEBUG] [Thread-303671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:26:12.948 [INFO] [Thread-303671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] client lang: <none>
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] server lang: <none>
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] kex follows: False
2025-12-24T14:26:12.954 [DEBUG] [Thread-303671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:26:12.955 [DEBUG] [Thread-303671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:26:12.955 [DEBUG] [Thread-303671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:26:12.956 [DEBUG] [Thread-303671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:26:12.956 [DEBUG] [Thread-303671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:26:12.956 [DEBUG] [Thread-303671] [transport.py] [_log()] Compression: none
2025-12-24T14:26:12.956 [DEBUG] [Thread-303671] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:26:12.991 [DEBUG] [Thread-303671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:26:12.996 [DEBUG] [Thread-303671] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:26:12.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:26:13.001 [DEBUG] [Thread-303671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:26:13.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:26:13.006 [DEBUG] [Thread-303671] [transport.py] [_log()] userauth is OK
2025-12-24T14:26:13.006 [DEBUG] [Thread-303671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:26:13.006 [DEBUG] [Thread-303671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:26:13.006 [DEBUG] [Thread-303671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:26:13.006 [DEBUG] [Thread-303671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:26:13.041 [INFO] [Thread-303671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:26:13.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:26:13.626 [DEBUG] [Thread-303671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:26:13.627 [DEBUG] [Thread-303671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:26:13.627 [DEBUG] [Thread-303671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:26:13.667 [DEBUG] [Thread-303671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:26:13.668 [DEBUG] [Thread-303671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:26:13.670 [DEBUG] [Thread-303671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:26:13.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:26:13.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:26:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:26:13.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:26:13.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:26:13.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:26:13.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:26:13.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:26:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:26:13.691 [DEBUG] [Thread-303671] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:26:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.518124 -999.00  +23.50   6.34     33   +6.50 1 2 1 1 1   888    0 17.15 2.27 ----- 6.3 6.3 236.8 7.9 30.2 -17.3 30.0 -17.9 30.4 -18.3 30.9 -18.3
2025-12-24T14:26:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:26:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:26:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.518124
2025-12-24T14:26:13.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:26:13.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:26:13.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:26:13.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:26:13.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:26:13.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:25:56', tmtdew=19.2, humidity=28.39, cloud=0.0, wind=11.79, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:26:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:26:13.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:26:13.810 [DEBUG] [Thread-303674] [transport.py] [_log()] starting thread (client mode): 0xf57524a0
2025-12-24T14:26:13.810 [DEBUG] [Thread-303674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:26:13.824 [DEBUG] [Thread-303674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:26:13.824 [INFO] [Thread-303674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:26:13.832 [DEBUG] [Thread-303674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:26:13.832 [DEBUG] [Thread-303674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:26:13.832 [DEBUG] [Thread-303674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:26:13.832 [DEBUG] [Thread-303674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:26:13.832 [DEBUG] [Thread-303674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:26:13.832 [DEBUG] [Thread-303674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:26:13.832 [DEBUG] [Thread-303674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:26:13.832 [DEBUG] [Thread-303674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] client lang: <none>
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] server lang: <none>
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] kex follows: False
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] Compression: none
2025-12-24T14:26:13.833 [DEBUG] [Thread-303674] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:26:13.891 [DEBUG] [Thread-303674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:26:13.891 [DEBUG] [Thread-303674] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:26:13.892 [DEBUG] [Thread-303674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:26:13.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:26:13.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:26:13.947 [DEBUG] [Thread-303674] [transport.py] [_log()] userauth is OK
2025-12-24T14:26:13.947 [DEBUG] [Thread-303674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:26:13.947 [DEBUG] [Thread-303674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:26:13.947 [DEBUG] [Thread-303674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:26:13.947 [DEBUG] [Thread-303674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:26:13.966 [INFO] [Thread-303674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:26:13.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:26:13.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:26:14.734 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:26:14.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:26:14.811 [DEBUG] [Thread-303674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:26:14.812 [DEBUG] [Thread-303674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:26:14.859 [DEBUG] [Thread-303674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:26:14.859 [DEBUG] [Thread-303674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:26:14.868 [DEBUG] [Thread-303674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:26:14.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:26:14.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:26:14.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:26:14.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:26:14.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:26:14.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:26:14.906 [DEBUG] [Thread-303674] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:26:23.333 [DEBUG] [Thread-303676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:26:38.779 [DEBUG] [Thread-303677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:26:39.928 [DEBUG] [Thread-303678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:26:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:26:44.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:26:44.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
2025-12-24T14:26:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 26, 29), 19.38, 28.09, 0.0, 10.82, 23.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:26:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:26:29
2025-12-24T14:26:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:26:46.631 [DEBUG] [Thread-303679] [transport.py] [_log()] starting thread (client mode): 0xf81f3730
2025-12-24T14:26:46.631 [DEBUG] [Thread-303679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:26:46.635 [DEBUG] [Thread-303679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:26:46.635 [INFO] [Thread-303679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] client lang: <none>
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] server lang: <none>
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] kex follows: False
2025-12-24T14:26:46.640 [DEBUG] [Thread-303679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:26:46.641 [DEBUG] [Thread-303679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:26:46.641 [DEBUG] [Thread-303679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:26:46.641 [DEBUG] [Thread-303679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:26:46.641 [DEBUG] [Thread-303679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:26:46.641 [DEBUG] [Thread-303679] [transport.py] [_log()] Compression: none
2025-12-24T14:26:46.641 [DEBUG] [Thread-303679] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:26:46.672 [DEBUG] [Thread-303679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:26:46.675 [DEBUG] [Thread-303679] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:26:46.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:26:46.678 [DEBUG] [Thread-303679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:26:46.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:26:46.680 [DEBUG] [Thread-303679] [transport.py] [_log()] userauth is OK
2025-12-24T14:26:46.680 [DEBUG] [Thread-303679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:26:46.680 [DEBUG] [Thread-303679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:26:46.680 [DEBUG] [Thread-303679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:26:46.680 [DEBUG] [Thread-303679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:26:46.698 [INFO] [Thread-303679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:26:46.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:26:47.273 [DEBUG] [Thread-303679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:26:47.273 [DEBUG] [Thread-303679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:26:47.273 [DEBUG] [Thread-303679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:26:47.314 [DEBUG] [Thread-303679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:26:47.314 [DEBUG] [Thread-303679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:26:47.316 [DEBUG] [Thread-303679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:26:47.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:26:47.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:26:47.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:26:47.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:26:47.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:26:47.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:26:47.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:26:47.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:26:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:26:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.518471 -999.00  +23.70   8.49     33   +6.60 1 2 1 1 1   888    0 17.32 5.94 ----- 8.5 8.5 188.2 13.8 30.3 -17.4 30.1 -19.5 30.4 -18.1 30.9 -18.1
2025-12-24T14:26:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:26:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:26:47.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.518471
2025-12-24T14:26:47.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:26:47.351 [DEBUG] [Thread-303679] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:26:47.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:26:47.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:26:47.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:26:47.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:26:47.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:26:29', tmtdew=19.38, humidity=28.09, cloud=0.0, wind=10.82, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:26:35.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:26:47.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:26:47.463 [DEBUG] [Thread-303682] [transport.py] [_log()] starting thread (client mode): 0xf57a8670
2025-12-24T14:26:47.463 [DEBUG] [Thread-303682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:26:47.479 [DEBUG] [Thread-303682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:26:47.479 [INFO] [Thread-303682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:26:47.486 [DEBUG] [Thread-303682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:26:47.486 [DEBUG] [Thread-303682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:26:47.486 [DEBUG] [Thread-303682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:26:47.486 [DEBUG] [Thread-303682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:26:47.486 [DEBUG] [Thread-303682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:26:47.486 [DEBUG] [Thread-303682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] client lang: <none>
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] server lang: <none>
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] kex follows: False
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] Compression: none
2025-12-24T14:26:47.487 [DEBUG] [Thread-303682] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:26:47.545 [DEBUG] [Thread-303682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:26:47.545 [DEBUG] [Thread-303682] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:26:47.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:26:47.545 [DEBUG] [Thread-303682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:26:47.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:26:47.607 [DEBUG] [Thread-303682] [transport.py] [_log()] userauth is OK
2025-12-24T14:26:47.607 [DEBUG] [Thread-303682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:26:47.607 [DEBUG] [Thread-303682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:26:47.607 [DEBUG] [Thread-303682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:26:47.607 [DEBUG] [Thread-303682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:26:47.621 [INFO] [Thread-303682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:26:47.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:26:47.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:26:48.521 [DEBUG] [Thread-303682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:26:48.522 [DEBUG] [Thread-303682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:26:48.569 [DEBUG] [Thread-303682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:26:48.569 [DEBUG] [Thread-303682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:26:48.578 [DEBUG] [Thread-303682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:26:48.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14: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')
2025-12-24T14:26:48.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
2025-12-24T14:26:48.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:26:48.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:26:48.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:26:48.610 [DEBUG] [Thread-303682] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:26:53.840 [DEBUG] [Thread-303684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:27:08.970 [DEBUG] [Thread-303685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:27:14.875 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:27:14.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:27:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:27:18.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:27:18.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
2025-12-24T14:27:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 27, 2), 19.49, 27.93, 0.0, 14.06, 23.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:27:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:27:02
2025-12-24T14:27:19.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:27:20.130 [DEBUG] [Thread-303686] [transport.py] [_log()] starting thread (client mode): 0xf572de10
2025-12-24T14:27:20.131 [DEBUG] [Thread-303686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:27:20.137 [DEBUG] [Thread-303686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:27:20.137 [INFO] [Thread-303686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] client lang: <none>
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] server lang: <none>
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] kex follows: False
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:27:20.141 [DEBUG] [Thread-303686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:27:20.142 [DEBUG] [Thread-303686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:27:20.142 [DEBUG] [Thread-303686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:27:20.142 [DEBUG] [Thread-303686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:27:20.142 [DEBUG] [Thread-303686] [transport.py] [_log()] Compression: none
2025-12-24T14:27:20.142 [DEBUG] [Thread-303686] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:27:20.165 [DEBUG] [Thread-303686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:27:20.169 [DEBUG] [Thread-303686] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:27:20.171 [DEBUG] [Thread-303686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:27:20.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:27:20.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:27:20.177 [DEBUG] [Thread-303686] [transport.py] [_log()] userauth is OK
2025-12-24T14:27:20.178 [DEBUG] [Thread-303686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:27:20.178 [DEBUG] [Thread-303686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:27:20.178 [DEBUG] [Thread-303686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:27:20.178 [DEBUG] [Thread-303686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:27:20.205 [INFO] [Thread-303686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:27:20.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:27:20.871 [DEBUG] [Thread-303686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:27:20.871 [DEBUG] [Thread-303686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:27:20.872 [DEBUG] [Thread-303686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:27:20.904 [DEBUG] [Thread-303686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:27:20.904 [DEBUG] [Thread-303686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:27:20.907 [DEBUG] [Thread-303686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:27:20.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:27:20.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:27:20.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:27:20.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:27:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:27:20.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:27:20.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:27:20.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:27:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:27:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.518819 -999.00  +24.00  11.57     32   +6.70 1 2 1 1 1   888    0 17.39 9.76 ----- 11.6 11.6 149.8 17.9 30.2 -17.8 29.9 -18.4 30.4 -18.6 30.8 -18.7
2025-12-24T14:27:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:27:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:27:20.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.518819
2025-12-24T14:27:20.941 [DEBUG] [Thread-303686] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:27:20.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:27:20.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:27:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:27:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:27:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:27:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:27:02', tmtdew=19.49, humidity=27.93, cloud=0.0, wind=14.06, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:27:05.962', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:27:21.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:27:21.056 [DEBUG] [Thread-303689] [transport.py] [_log()] starting thread (client mode): 0xf574dc60
2025-12-24T14:27:21.056 [DEBUG] [Thread-303689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:27:21.070 [DEBUG] [Thread-303689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:27:21.071 [INFO] [Thread-303689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:27:21.078 [DEBUG] [Thread-303689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:27:21.078 [DEBUG] [Thread-303689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:27:21.078 [DEBUG] [Thread-303689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:27:21.078 [DEBUG] [Thread-303689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] client lang: <none>
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] server lang: <none>
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] kex follows: False
2025-12-24T14:27:21.079 [DEBUG] [Thread-303689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:27:21.080 [DEBUG] [Thread-303689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:27:21.080 [DEBUG] [Thread-303689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:27:21.080 [DEBUG] [Thread-303689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:27:21.080 [DEBUG] [Thread-303689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:27:21.080 [DEBUG] [Thread-303689] [transport.py] [_log()] Compression: none
2025-12-24T14:27:21.080 [DEBUG] [Thread-303689] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:27:21.139 [DEBUG] [Thread-303689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:27:21.140 [DEBUG] [Thread-303689] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:27:21.141 [DEBUG] [Thread-303689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:27:21.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:27:21.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:27:21.199 [DEBUG] [Thread-303689] [transport.py] [_log()] userauth is OK
2025-12-24T14:27:21.200 [DEBUG] [Thread-303689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:27:21.200 [DEBUG] [Thread-303689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:27:21.200 [DEBUG] [Thread-303689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:27:21.200 [DEBUG] [Thread-303689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:27:21.222 [INFO] [Thread-303689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:27:21.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:27:21.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:27:22.098 [DEBUG] [Thread-303689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:27:22.098 [DEBUG] [Thread-303689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:27:22.140 [DEBUG] [Thread-303689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:27:22.140 [DEBUG] [Thread-303689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:27:22.154 [DEBUG] [Thread-303689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:27:22.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:27:22.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:27:22.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:27:22.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:27:22.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:27:22.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:27:22.196 [DEBUG] [Thread-303689] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:27:24.052 [DEBUG] [Thread-303691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:27:39.168 [DEBUG] [Thread-303692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:27:40.174 [DEBUG] [Thread-303693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:27:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:27:52.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:27:52.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:27:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 27, 35), 20.05, 27.16, 0.0, 19.37, 23.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:27:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:27:35
2025-12-24T14:27:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:27:54.221 [DEBUG] [Thread-303695] [transport.py] [_log()] starting thread (client mode): 0xf81f05e0
2025-12-24T14:27:54.222 [DEBUG] [Thread-303695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:27:54.223 [DEBUG] [Thread-303695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:27:54.223 [INFO] [Thread-303695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:27:54.234 [DEBUG] [Thread-303694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:27:54.234 [DEBUG] [Thread-303695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] client lang: <none>
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] server lang: <none>
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] kex follows: False
2025-12-24T14:27:54.236 [DEBUG] [Thread-303695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:27:54.237 [DEBUG] [Thread-303695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:27:54.237 [DEBUG] [Thread-303695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:27:54.237 [DEBUG] [Thread-303695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:27:54.237 [DEBUG] [Thread-303695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:27:54.237 [DEBUG] [Thread-303695] [transport.py] [_log()] Compression: none
2025-12-24T14:27:54.237 [DEBUG] [Thread-303695] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:27:54.271 [DEBUG] [Thread-303695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:27:54.274 [DEBUG] [Thread-303695] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:27:54.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:27:54.279 [DEBUG] [Thread-303695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:27:54.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:27:54.281 [DEBUG] [Thread-303695] [transport.py] [_log()] userauth is OK
2025-12-24T14:27:54.281 [DEBUG] [Thread-303695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:27:54.282 [DEBUG] [Thread-303695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:27:54.282 [DEBUG] [Thread-303695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:27:54.282 [DEBUG] [Thread-303695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:27:54.316 [INFO] [Thread-303695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:27:54.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:27:54.948 [DEBUG] [Thread-303695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:27:54.949 [DEBUG] [Thread-303695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:27:54.958 [DEBUG] [Thread-303695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:27:54.990 [DEBUG] [Thread-303695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:27:54.990 [DEBUG] [Thread-303695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:27:54.992 [DEBUG] [Thread-303695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:27:55.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:27:55.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:27:55.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:27:55.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:27:55.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:27:55.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:27:55.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:27:55.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:27:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:27:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.519166 -999.00  +24.00  21.46     32   +6.50 1 2 1 1 1   888    0 17.66 13.37 ----- 21.5 21.5 179.8 25.0 29.9 -19.6 29.5 -24.4 30.3 -18.2 30.4 -20.8
2025-12-24T14:27:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:27:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:27:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.519166
2025-12-24T14:27:55.021 [DEBUG] [Thread-303695] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:27:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:27:55.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:27:55.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:27:55.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:27:55.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:27:55.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:27:35', tmtdew=20.05, humidity=27.16, cloud=0.0, wind=19.37, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:27:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:27:55.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:27:55.118 [DEBUG] [Thread-303698] [transport.py] [_log()] starting thread (client mode): 0xf81e6950
2025-12-24T14:27:55.119 [DEBUG] [Thread-303698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:27:55.133 [DEBUG] [Thread-303698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:27:55.133 [INFO] [Thread-303698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:27:55.141 [DEBUG] [Thread-303698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:27:55.141 [DEBUG] [Thread-303698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:27:55.141 [DEBUG] [Thread-303698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:27:55.141 [DEBUG] [Thread-303698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:27:55.141 [DEBUG] [Thread-303698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] client lang: <none>
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] server lang: <none>
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] kex follows: False
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:27:55.142 [DEBUG] [Thread-303698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:27:55.143 [DEBUG] [Thread-303698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:27:55.143 [DEBUG] [Thread-303698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:27:55.143 [DEBUG] [Thread-303698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:27:55.143 [DEBUG] [Thread-303698] [transport.py] [_log()] Compression: none
2025-12-24T14:27:55.143 [DEBUG] [Thread-303698] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:27:55.203 [DEBUG] [Thread-303698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:27:55.204 [DEBUG] [Thread-303698] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:27:55.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:27:55.205 [DEBUG] [Thread-303698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:27:55.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:27:55.259 [DEBUG] [Thread-303698] [transport.py] [_log()] userauth is OK
2025-12-24T14:27:55.259 [DEBUG] [Thread-303698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:27:55.260 [DEBUG] [Thread-303698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:27:55.260 [DEBUG] [Thread-303698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:27:55.260 [DEBUG] [Thread-303698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:27:55.278 [INFO] [Thread-303698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:27:55.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:27:55.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:27:56.105 [DEBUG] [Thread-303698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:27:56.105 [DEBUG] [Thread-303698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:27:56.152 [DEBUG] [Thread-303698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:27:56.153 [DEBUG] [Thread-303698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:27:56.161 [DEBUG] [Thread-303698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:27:56.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:27:56.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')
2025-12-24T14:27:56.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
2025-12-24T14:27:56.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:27:56.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:27:56.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:27:56.194 [DEBUG] [Thread-303698] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:28:09.302 [DEBUG] [Thread-303700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:28:15.023 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:28:15.028 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:28:24.478 [DEBUG] [Thread-303701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:28:26.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:28:26.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:28:26.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:28:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 28, 8), 20.08, 27.1, 0.0, 17.91, 23.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:28:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:28:08
2025-12-24T14:28:27.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:28:28.000 [DEBUG] [Thread-303702] [transport.py] [_log()] starting thread (client mode): 0xf57720b0
2025-12-24T14:28:28.000 [DEBUG] [Thread-303702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:28:28.013 [DEBUG] [Thread-303702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:28:28.013 [INFO] [Thread-303702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:28:28.019 [DEBUG] [Thread-303702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:28:28.019 [DEBUG] [Thread-303702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:28:28.019 [DEBUG] [Thread-303702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:28:28.019 [DEBUG] [Thread-303702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] client lang: <none>
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] server lang: <none>
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] kex follows: False
2025-12-24T14:28:28.020 [DEBUG] [Thread-303702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:28:28.021 [DEBUG] [Thread-303702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:28:28.021 [DEBUG] [Thread-303702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:28:28.021 [DEBUG] [Thread-303702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:28:28.021 [DEBUG] [Thread-303702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:28:28.022 [DEBUG] [Thread-303702] [transport.py] [_log()] Compression: none
2025-12-24T14:28:28.022 [DEBUG] [Thread-303702] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:28:28.056 [DEBUG] [Thread-303702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:28:28.060 [DEBUG] [Thread-303702] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:28:28.061 [DEBUG] [Thread-303702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:28:28.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:28:28.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:28:28.065 [DEBUG] [Thread-303702] [transport.py] [_log()] userauth is OK
2025-12-24T14:28:28.065 [DEBUG] [Thread-303702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:28:28.065 [DEBUG] [Thread-303702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:28:28.065 [DEBUG] [Thread-303702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:28:28.065 [DEBUG] [Thread-303702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:28:28.097 [INFO] [Thread-303702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:28:28.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:28:28.742 [DEBUG] [Thread-303702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:28:28.742 [DEBUG] [Thread-303702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:28:28.753 [DEBUG] [Thread-303702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:28:28.784 [DEBUG] [Thread-303702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:28:28.784 [DEBUG] [Thread-303702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:28:28.788 [DEBUG] [Thread-303702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:28:28.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:28:28.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:28:28.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:28:28.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:28:28.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:28:28.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:28:28.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:28:28.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:28:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:28:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.519513 -999.00  +23.70  21.87     33   +6.50 1 2 1 1 1   888    0 17.42 14.85 ----- 21.9 21.9 164.0 26.4 29.7 -18.0 29.1 -23.4 29.9 -20.5 30.1 -18.7
2025-12-24T14:28:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:28:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:28:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.519513
2025-12-24T14:28:28.826 [DEBUG] [Thread-303702] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:28:28.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:28:28.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:28:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:28:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:28:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:28:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:28:08', tmtdew=20.08, humidity=27.1, cloud=0.0, wind=17.91, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:28:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:28:28.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:28:28.943 [DEBUG] [Thread-303705] [transport.py] [_log()] starting thread (client mode): 0xf5771180
2025-12-24T14:28:28.943 [DEBUG] [Thread-303705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:28:28.958 [DEBUG] [Thread-303705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:28:28.958 [INFO] [Thread-303705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:28:28.966 [DEBUG] [Thread-303705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:28:28.966 [DEBUG] [Thread-303705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:28:28.967 [DEBUG] [Thread-303705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:28:28.967 [DEBUG] [Thread-303705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:28:28.967 [DEBUG] [Thread-303705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:28:28.967 [DEBUG] [Thread-303705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:28:28.967 [DEBUG] [Thread-303705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] client lang: <none>
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] server lang: <none>
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] kex follows: False
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] Compression: none
2025-12-24T14:28:28.968 [DEBUG] [Thread-303705] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:28:29.027 [DEBUG] [Thread-303705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:28:29.028 [DEBUG] [Thread-303705] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:28:29.029 [DEBUG] [Thread-303705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:28:29.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:28:29.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:28:29.083 [DEBUG] [Thread-303705] [transport.py] [_log()] userauth is OK
2025-12-24T14:28:29.083 [DEBUG] [Thread-303705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:28:29.083 [DEBUG] [Thread-303705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:28:29.083 [DEBUG] [Thread-303705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:28:29.083 [DEBUG] [Thread-303705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:28:29.102 [INFO] [Thread-303705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:28:29.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:28:29.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:28:29.955 [DEBUG] [Thread-303705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:28:29.955 [DEBUG] [Thread-303705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:28:29.993 [DEBUG] [Thread-303705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:28:29.994 [DEBUG] [Thread-303705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:28:30.002 [DEBUG] [Thread-303705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:28:30.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:28:30.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')
2025-12-24T14:28:30.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:28:30.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:28:30.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:28:30.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:28:30.037 [DEBUG] [Thread-303705] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:28:39.558 [DEBUG] [Thread-303707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:28:40.447 [DEBUG] [Thread-303708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:28:54.728 [DEBUG] [Thread-303709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:29:00.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:29:00.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:29:00.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
2025-12-24T14:29:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 28, 41), 19.76, 27.43, 0.0, 19.21, 23.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:29:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:28:41
2025-12-24T14:29:01.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:29:01.324 [DEBUG] [Thread-303710] [transport.py] [_log()] starting thread (client mode): 0xf5772aa0
2025-12-24T14:29:01.324 [DEBUG] [Thread-303710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:29:01.328 [DEBUG] [Thread-303710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:29:01.328 [INFO] [Thread-303710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] client lang: <none>
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] server lang: <none>
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] kex follows: False
2025-12-24T14:29:01.331 [DEBUG] [Thread-303710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:29:01.332 [DEBUG] [Thread-303710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:29:01.332 [DEBUG] [Thread-303710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:29:01.332 [DEBUG] [Thread-303710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:29:01.332 [DEBUG] [Thread-303710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:29:01.332 [DEBUG] [Thread-303710] [transport.py] [_log()] Compression: none
2025-12-24T14:29:01.332 [DEBUG] [Thread-303710] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:29:01.362 [DEBUG] [Thread-303710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:29:01.366 [DEBUG] [Thread-303710] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:29:01.368 [DEBUG] [Thread-303710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:29:01.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:29:01.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:29:01.372 [DEBUG] [Thread-303710] [transport.py] [_log()] userauth is OK
2025-12-24T14:29:01.373 [DEBUG] [Thread-303710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:29:01.373 [DEBUG] [Thread-303710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:29:01.373 [DEBUG] [Thread-303710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:29:01.373 [DEBUG] [Thread-303710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:29:01.398 [INFO] [Thread-303710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:29:01.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:29:02.012 [DEBUG] [Thread-303710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:29:02.012 [DEBUG] [Thread-303710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:29:02.014 [DEBUG] [Thread-303710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:29:02.053 [DEBUG] [Thread-303710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:29:02.053 [DEBUG] [Thread-303710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:29:02.057 [DEBUG] [Thread-303710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:29:02.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:29:02.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:29:02.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:29:02.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:29:02.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:29:02.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:29:02.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:29:02.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:29:02.085 [DEBUG] [Thread-303710] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:29:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:29:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.519860 -999.00  +23.50  12.15     33   +6.50 1 2 1 1 1   888    0 17.27 14.14 ----- 12.2 12.2 179.4 16.8 29.7 -17.4 29.3 -18.3 29.8 -18.1 30.2 -18.0
2025-12-24T14:29:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:29:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:29:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.519860
2025-12-24T14:29:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:29:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:29:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:29:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:29:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:29:02.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:28:41', tmtdew=19.76, humidity=27.43, cloud=0.0, wind=19.21, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:28:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:29:02.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:29:02.208 [DEBUG] [Thread-303713] [transport.py] [_log()] starting thread (client mode): 0xf5772bc0
2025-12-24T14:29:02.208 [DEBUG] [Thread-303713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:29:02.222 [DEBUG] [Thread-303713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:29:02.223 [INFO] [Thread-303713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:29:02.230 [DEBUG] [Thread-303713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:29:02.230 [DEBUG] [Thread-303713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:29:02.231 [DEBUG] [Thread-303713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:29:02.231 [DEBUG] [Thread-303713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:29:02.231 [DEBUG] [Thread-303713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:29:02.231 [DEBUG] [Thread-303713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:29:02.231 [DEBUG] [Thread-303713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:29:02.231 [DEBUG] [Thread-303713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:29:02.231 [DEBUG] [Thread-303713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] client lang: <none>
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] server lang: <none>
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] kex follows: False
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] Compression: none
2025-12-24T14:29:02.232 [DEBUG] [Thread-303713] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:29:02.292 [DEBUG] [Thread-303713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:29:02.292 [DEBUG] [Thread-303713] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:29:02.293 [DEBUG] [Thread-303713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:29:02.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:29:02.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:29:02.351 [DEBUG] [Thread-303713] [transport.py] [_log()] userauth is OK
2025-12-24T14:29:02.351 [DEBUG] [Thread-303713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:29:02.351 [DEBUG] [Thread-303713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:29:02.351 [DEBUG] [Thread-303713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:29:02.351 [DEBUG] [Thread-303713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:29:02.370 [INFO] [Thread-303713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:29:02.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:29:02.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:29:03.179 [DEBUG] [Thread-303713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:29:03.179 [DEBUG] [Thread-303713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:29:03.226 [DEBUG] [Thread-303713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:29:03.226 [DEBUG] [Thread-303713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:29:03.235 [DEBUG] [Thread-303713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:29:03.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:29:03.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:29:03.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
2025-12-24T14:29:03.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:29:03.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:29:03.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:29:03.267 [DEBUG] [Thread-303713] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:29:09.828 [DEBUG] [Thread-303715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:29:15.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:29:15.182 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:29:25.005 [DEBUG] [Thread-303716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:29:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:29:33.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:29:33.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:29:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 29, 14), 19.6, 27.69, 0.0, 19.81, 23.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:29:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:29:14
2025-12-24T14:29:34.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:29:35.093 [DEBUG] [Thread-303717] [transport.py] [_log()] starting thread (client mode): 0xf81c39a0
2025-12-24T14:29:35.094 [DEBUG] [Thread-303717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:29:35.109 [DEBUG] [Thread-303717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:29:35.109 [INFO] [Thread-303717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] client lang: <none>
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] server lang: <none>
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] kex follows: False
2025-12-24T14:29:35.114 [DEBUG] [Thread-303717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:29:35.115 [DEBUG] [Thread-303717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:29:35.115 [DEBUG] [Thread-303717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:29:35.115 [DEBUG] [Thread-303717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:29:35.115 [DEBUG] [Thread-303717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:29:35.115 [DEBUG] [Thread-303717] [transport.py] [_log()] Compression: none
2025-12-24T14:29:35.115 [DEBUG] [Thread-303717] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:29:35.147 [DEBUG] [Thread-303717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:29:35.151 [DEBUG] [Thread-303717] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:29:35.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:29:35.154 [DEBUG] [Thread-303717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:29:35.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:29:35.156 [DEBUG] [Thread-303717] [transport.py] [_log()] userauth is OK
2025-12-24T14:29:35.156 [DEBUG] [Thread-303717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:29:35.156 [DEBUG] [Thread-303717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:29:35.156 [DEBUG] [Thread-303717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:29:35.156 [DEBUG] [Thread-303717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:29:35.186 [INFO] [Thread-303717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:29:35.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:29:35.844 [DEBUG] [Thread-303717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:29:35.844 [DEBUG] [Thread-303717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:29:35.855 [DEBUG] [Thread-303717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:29:35.885 [DEBUG] [Thread-303717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:29:35.885 [DEBUG] [Thread-303717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:29:35.889 [DEBUG] [Thread-303717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:29:35.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:29:35.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:29:35.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:29:35.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:29:35.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:29:35.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:29:35.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:29:35.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:29:35.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:29:35.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.520207 -999.00  +23.60  20.15     33   +6.50 1 2 1 1 1   888    0 17.22 13.91 ----- 20.1 20.1 151.8 25.4 29.7 -17.4 29.3 -17.5 29.8 -17.6 30.1 -19.2
2025-12-24T14:29:35.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:29:35.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:29:35.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.520207
2025-12-24T14:29:35.924 [DEBUG] [Thread-303717] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:29:35.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:29:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:29:14', tmtdew=19.6, humidity=27.69, cloud=0.0, wind=19.81, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:29:05.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:29:36.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:29:36.039 [DEBUG] [Thread-303720] [transport.py] [_log()] starting thread (client mode): 0xf574d960
2025-12-24T14:29:36.039 [DEBUG] [Thread-303720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:29:36.053 [DEBUG] [Thread-303720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:29:36.053 [INFO] [Thread-303720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:29:36.061 [DEBUG] [Thread-303720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:29:36.061 [DEBUG] [Thread-303720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] client lang: <none>
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] server lang: <none>
2025-12-24T14:29:36.062 [DEBUG] [Thread-303720] [transport.py] [_log()] kex follows: False
2025-12-24T14:29:36.063 [DEBUG] [Thread-303720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:29:36.063 [DEBUG] [Thread-303720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:29:36.063 [DEBUG] [Thread-303720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:29:36.063 [DEBUG] [Thread-303720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:29:36.063 [DEBUG] [Thread-303720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:29:36.063 [DEBUG] [Thread-303720] [transport.py] [_log()] Compression: none
2025-12-24T14:29:36.064 [DEBUG] [Thread-303720] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:29:36.119 [DEBUG] [Thread-303720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:29:36.120 [DEBUG] [Thread-303720] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:29:36.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:29:36.121 [DEBUG] [Thread-303720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:29:36.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:29:36.175 [DEBUG] [Thread-303720] [transport.py] [_log()] userauth is OK
2025-12-24T14:29:36.175 [DEBUG] [Thread-303720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:29:36.176 [DEBUG] [Thread-303720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:29:36.176 [DEBUG] [Thread-303720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:29:36.176 [DEBUG] [Thread-303720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:29:36.195 [INFO] [Thread-303720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:29:36.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:29:36.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:29:37.036 [DEBUG] [Thread-303720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:29:37.036 [DEBUG] [Thread-303720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:29:37.083 [DEBUG] [Thread-303720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:29:37.084 [DEBUG] [Thread-303720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:29:37.092 [DEBUG] [Thread-303720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:29:37.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:29:37.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:29:37.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:29:37.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:29:37.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:29:37.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:29:37.125 [DEBUG] [Thread-303720] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:29:40.096 [DEBUG] [Thread-303722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:29:40.699 [DEBUG] [Thread-303723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:29:55.242 [DEBUG] [Thread-303724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:30:07.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:30:07.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:30:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:30:08.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 29, 48), 19.73, 27.72, 0.0, 20.68, 23.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:30:08.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:29:48
2025-12-24T14:30:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:30:08.866 [DEBUG] [Thread-303725] [transport.py] [_log()] starting thread (client mode): 0xf5742860
2025-12-24T14:30:08.867 [DEBUG] [Thread-303725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:30:08.880 [DEBUG] [Thread-303725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:30:08.881 [INFO] [Thread-303725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:30:08.892 [DEBUG] [Thread-303725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:30:08.892 [DEBUG] [Thread-303725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:30:08.892 [DEBUG] [Thread-303725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:30:08.892 [DEBUG] [Thread-303725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:30:08.892 [DEBUG] [Thread-303725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:30:08.892 [DEBUG] [Thread-303725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:30:08.893 [DEBUG] [Thread-303725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:30:08.893 [DEBUG] [Thread-303725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:30:08.893 [DEBUG] [Thread-303725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:30:08.893 [DEBUG] [Thread-303725] [transport.py] [_log()] client lang: <none>
2025-12-24T14:30:08.893 [DEBUG] [Thread-303725] [transport.py] [_log()] server lang: <none>
2025-12-24T14:30:08.893 [DEBUG] [Thread-303725] [transport.py] [_log()] kex follows: False
2025-12-24T14:30:08.893 [DEBUG] [Thread-303725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:30:08.893 [DEBUG] [Thread-303725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:30:08.894 [DEBUG] [Thread-303725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:30:08.894 [DEBUG] [Thread-303725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:30:08.894 [DEBUG] [Thread-303725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:30:08.894 [DEBUG] [Thread-303725] [transport.py] [_log()] Compression: none
2025-12-24T14:30:08.894 [DEBUG] [Thread-303725] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:30:08.933 [DEBUG] [Thread-303725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:30:08.938 [DEBUG] [Thread-303725] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:30:08.940 [DEBUG] [Thread-303725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:30:08.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:30:08.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:30:08.946 [DEBUG] [Thread-303725] [transport.py] [_log()] userauth is OK
2025-12-24T14:30:08.946 [DEBUG] [Thread-303725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:30:08.947 [DEBUG] [Thread-303725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:30:08.947 [DEBUG] [Thread-303725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:30:08.947 [DEBUG] [Thread-303725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:30:08.973 [INFO] [Thread-303725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:30:08.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:30:09.884 [DEBUG] [Thread-303725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:30:09.884 [DEBUG] [Thread-303725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:30:09.893 [DEBUG] [Thread-303725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:30:09.925 [DEBUG] [Thread-303725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:30:09.925 [DEBUG] [Thread-303725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:30:09.927 [DEBUG] [Thread-303725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:30:09.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:30:09.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:30:09.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:30:09.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:30:09.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:30:09.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:30:09.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:30:09.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:30:09.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:30:09.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.520555 -999.00  +23.50  13.91     33   +6.50 1 2 1 1 1   888    0 17.70 16.18 ----- 13.9 13.9 192.4 22.1 29.6 -18.1 29.0 -20.3 29.6 -19.1 29.9 -18.1
2025-12-24T14:30:09.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:30:09.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:30:09.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.520555
2025-12-24T14:30:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:30:09.961 [DEBUG] [Thread-303725] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:30:09.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:30:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:30:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:30:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:30:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:29:48', tmtdew=19.73, humidity=27.72, cloud=0.0, wind=20.68, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:29:35.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:30:10.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:30:10.057 [DEBUG] [Thread-303728] [transport.py] [_log()] starting thread (client mode): 0xf57bf5b0
2025-12-24T14:30:10.057 [DEBUG] [Thread-303728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:30:10.071 [DEBUG] [Thread-303728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:30:10.071 [INFO] [Thread-303728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] client lang: <none>
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] server lang: <none>
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] kex follows: False
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] Compression: none
2025-12-24T14:30:10.079 [DEBUG] [Thread-303728] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:30:10.137 [DEBUG] [Thread-303728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:30:10.137 [DEBUG] [Thread-303728] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:30:10.138 [DEBUG] [Thread-303728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:30:10.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:30:10.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:30:10.194 [DEBUG] [Thread-303728] [transport.py] [_log()] userauth is OK
2025-12-24T14:30:10.194 [DEBUG] [Thread-303728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:30:10.194 [DEBUG] [Thread-303728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:30:10.194 [DEBUG] [Thread-303728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:30:10.194 [DEBUG] [Thread-303728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:30:10.208 [INFO] [Thread-303728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:30:10.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:30:10.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:30:10.335 [DEBUG] [Thread-303730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:30:11.050 [DEBUG] [Thread-303728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:30:11.050 [DEBUG] [Thread-303728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:30:11.097 [DEBUG] [Thread-303728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:30:11.098 [DEBUG] [Thread-303728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:30:11.107 [DEBUG] [Thread-303728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:30:11.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:30:11.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:30:11.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:30:11.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:30:11.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:30:11.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:30:11.146 [DEBUG] [Thread-303728] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:30:15.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:30:15.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:30:25.512 [DEBUG] [Thread-303731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:30:40.594 [DEBUG] [Thread-303732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:30:40.988 [DEBUG] [Thread-303733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:30:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:30:41.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:30:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:30:42.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 30, 21), 19.72, 27.74, 0.0, 25.58, 23.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:30:42.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:30:21
2025-12-24T14:30:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:30:42.974 [DEBUG] [Thread-303734] [transport.py] [_log()] starting thread (client mode): 0xf57bcc10
2025-12-24T14:30:42.975 [DEBUG] [Thread-303734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:30:42.985 [DEBUG] [Thread-303734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:30:42.986 [INFO] [Thread-303734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:30:42.993 [DEBUG] [Thread-303734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:30:42.993 [DEBUG] [Thread-303734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:30:42.993 [DEBUG] [Thread-303734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:30:42.993 [DEBUG] [Thread-303734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:30:42.993 [DEBUG] [Thread-303734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:30:42.993 [DEBUG] [Thread-303734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:30:42.993 [DEBUG] [Thread-303734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:30:42.994 [DEBUG] [Thread-303734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:30:42.994 [DEBUG] [Thread-303734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:30:42.994 [DEBUG] [Thread-303734] [transport.py] [_log()] client lang: <none>
2025-12-24T14:30:42.994 [DEBUG] [Thread-303734] [transport.py] [_log()] server lang: <none>
2025-12-24T14:30:42.994 [DEBUG] [Thread-303734] [transport.py] [_log()] kex follows: False
2025-12-24T14:30:42.994 [DEBUG] [Thread-303734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:30:42.995 [DEBUG] [Thread-303734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:30:42.995 [DEBUG] [Thread-303734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:30:42.995 [DEBUG] [Thread-303734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:30:42.995 [DEBUG] [Thread-303734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:30:42.995 [DEBUG] [Thread-303734] [transport.py] [_log()] Compression: none
2025-12-24T14:30:42.995 [DEBUG] [Thread-303734] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:30:43.026 [DEBUG] [Thread-303734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:30:43.031 [DEBUG] [Thread-303734] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:30:43.033 [DEBUG] [Thread-303734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:30:43.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:30:43.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:30:43.036 [DEBUG] [Thread-303734] [transport.py] [_log()] userauth is OK
2025-12-24T14:30:43.036 [DEBUG] [Thread-303734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:30:43.036 [DEBUG] [Thread-303734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:30:43.036 [DEBUG] [Thread-303734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:30:43.036 [DEBUG] [Thread-303734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:30:43.055 [INFO] [Thread-303734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:30:43.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:30:43.683 [DEBUG] [Thread-303734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:30:43.693 [DEBUG] [Thread-303734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:30:43.694 [DEBUG] [Thread-303734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:30:43.724 [DEBUG] [Thread-303734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:30:43.724 [DEBUG] [Thread-303734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:30:43.728 [DEBUG] [Thread-303734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:30:43.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:30:43.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:30:43.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:30:43.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:30:43.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:30:43.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:30:43.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:30:43.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:30:43.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:30:43.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.520902 -999.00  +23.30  11.37     33   +6.50 1 2 1 1 1   888    0 17.48 16.34 ----- 11.4 11.4 183.0 19.2 29.4 -17.8 28.9 -19.1 29.5 -18.7 29.8 -16.8
2025-12-24T14:30:43.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:30:43.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:30:43.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.520902
2025-12-24T14:30:43.765 [DEBUG] [Thread-303734] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:30:43.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:30:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:30:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:30:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:30:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:30:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:30:21', tmtdew=19.72, humidity=27.74, cloud=0.0, wind=25.58, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:30:05.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:30:43.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:30:43.878 [DEBUG] [Thread-303737] [transport.py] [_log()] starting thread (client mode): 0xf574fc40
2025-12-24T14:30:43.878 [DEBUG] [Thread-303737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:30:43.893 [DEBUG] [Thread-303737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:30:43.893 [INFO] [Thread-303737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] client lang: <none>
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] server lang: <none>
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] kex follows: False
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] Compression: none
2025-12-24T14:30:43.901 [DEBUG] [Thread-303737] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:30:43.957 [DEBUG] [Thread-303737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:30:43.957 [DEBUG] [Thread-303737] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:30:43.957 [DEBUG] [Thread-303737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:30:43.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:30:43.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:30:44.014 [DEBUG] [Thread-303737] [transport.py] [_log()] userauth is OK
2025-12-24T14:30:44.014 [DEBUG] [Thread-303737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:30:44.015 [DEBUG] [Thread-303737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:30:44.015 [DEBUG] [Thread-303737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:30:44.015 [DEBUG] [Thread-303737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:30:44.037 [INFO] [Thread-303737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:30:44.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:30:44.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:30:44.856 [DEBUG] [Thread-303737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:30:44.856 [DEBUG] [Thread-303737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:30:44.895 [DEBUG] [Thread-303737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:30:44.895 [DEBUG] [Thread-303737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:30:44.904 [DEBUG] [Thread-303737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:30:44.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:30:44.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:30:44.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:30:44.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:30:44.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:30:44.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:30:44.937 [DEBUG] [Thread-303737] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:30:55.663 [DEBUG] [Thread-303739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:31:10.821 [DEBUG] [Thread-303740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:31:14.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:31:14.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:31:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:31:15.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:31:15.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:31:16.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 30, 54), 19.55, 28.12, 0.0, 24.28, 23.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:31:16.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:30:54
2025-12-24T14:31:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:31:16.665 [DEBUG] [Thread-303741] [transport.py] [_log()] starting thread (client mode): 0xf57bd510
2025-12-24T14:31:16.666 [DEBUG] [Thread-303741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:31:16.679 [DEBUG] [Thread-303741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:31:16.679 [INFO] [Thread-303741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] client lang: <none>
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] server lang: <none>
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] kex follows: False
2025-12-24T14:31:16.685 [DEBUG] [Thread-303741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:31:16.686 [DEBUG] [Thread-303741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:31:16.686 [DEBUG] [Thread-303741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:31:16.686 [DEBUG] [Thread-303741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:31:16.686 [DEBUG] [Thread-303741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:31:16.686 [DEBUG] [Thread-303741] [transport.py] [_log()] Compression: none
2025-12-24T14:31:16.686 [DEBUG] [Thread-303741] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:31:16.718 [DEBUG] [Thread-303741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:31:16.722 [DEBUG] [Thread-303741] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:31:16.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:31:16.726 [DEBUG] [Thread-303741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:31:16.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:31:16.730 [DEBUG] [Thread-303741] [transport.py] [_log()] userauth is OK
2025-12-24T14:31:16.731 [DEBUG] [Thread-303741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:31:16.731 [DEBUG] [Thread-303741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:31:16.731 [DEBUG] [Thread-303741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:31:16.731 [DEBUG] [Thread-303741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:31:16.769 [INFO] [Thread-303741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:31:16.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:31:17.403 [DEBUG] [Thread-303741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:31:17.403 [DEBUG] [Thread-303741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:31:17.405 [DEBUG] [Thread-303741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:31:17.445 [DEBUG] [Thread-303741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:31:17.445 [DEBUG] [Thread-303741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:31:17.449 [DEBUG] [Thread-303741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:31:17.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:31:17.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:31:17.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:31:17.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:31:17.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:31:17.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:31:17.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:31:17.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:31:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:31:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.521596 -999.00  +23.60  16.77     33   +6.50 1 2 1 1 1   888    0 17.55 14.15 ----- 16.8 16.8 143.2 23.4 29.2 -17.1 28.7 -16.8 29.3 -17.7 29.6 -16.7
2025-12-24T14:31:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:31:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:31:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.521596
2025-12-24T14:31:17.486 [DEBUG] [Thread-303741] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:31:17.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:31:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:31:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:31:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:31:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:31:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:30:54', tmtdew=19.55, humidity=28.12, cloud=0.0, wind=24.28, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:31:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:31:17.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:31:17.602 [DEBUG] [Thread-303744] [transport.py] [_log()] starting thread (client mode): 0xf57bf220
2025-12-24T14:31:17.602 [DEBUG] [Thread-303744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:31:17.624 [DEBUG] [Thread-303744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:31:17.624 [INFO] [Thread-303744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:31:17.632 [DEBUG] [Thread-303744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:31:17.632 [DEBUG] [Thread-303744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:31:17.632 [DEBUG] [Thread-303744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:31:17.632 [DEBUG] [Thread-303744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:31:17.632 [DEBUG] [Thread-303744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:31:17.632 [DEBUG] [Thread-303744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] client lang: <none>
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] server lang: <none>
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] kex follows: False
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] Compression: none
2025-12-24T14:31:17.633 [DEBUG] [Thread-303744] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:31:17.693 [DEBUG] [Thread-303744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:31:17.694 [DEBUG] [Thread-303744] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:31:17.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:31:17.695 [DEBUG] [Thread-303744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:31:17.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:31:17.751 [DEBUG] [Thread-303744] [transport.py] [_log()] userauth is OK
2025-12-24T14:31:17.751 [DEBUG] [Thread-303744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:31:17.751 [DEBUG] [Thread-303744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:31:17.751 [DEBUG] [Thread-303744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:31:17.751 [DEBUG] [Thread-303744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:31:17.776 [INFO] [Thread-303744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:31:17.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:31:17.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:31:18.683 [DEBUG] [Thread-303744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:31:18.683 [DEBUG] [Thread-303744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:31:18.721 [DEBUG] [Thread-303744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:31:18.721 [DEBUG] [Thread-303744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:31:18.730 [DEBUG] [Thread-303744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:31:18.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:31:18.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:31:18.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:31:18.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:31:18.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:31:18.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:31:18.763 [DEBUG] [Thread-303744] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:31:25.936 [DEBUG] [Thread-303746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:31:41.130 [DEBUG] [Thread-303747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:31:41.241 [DEBUG] [Thread-303748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:31:48.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:31:48.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:31:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:31:49.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 31, 27), 19.53, 28.14, 0.0, 21.65, 23.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:31:49.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:31:27
2025-12-24T14:31:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:31:49.897 [DEBUG] [Thread-303749] [transport.py] [_log()] starting thread (client mode): 0xf81c1b70
2025-12-24T14:31:49.898 [DEBUG] [Thread-303749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:31:49.898 [DEBUG] [Thread-303749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:31:49.898 [INFO] [Thread-303749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:31:49.901 [DEBUG] [Thread-303749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] client lang: <none>
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] server lang: <none>
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] kex follows: False
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] Compression: none
2025-12-24T14:31:49.902 [DEBUG] [Thread-303749] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:31:49.928 [DEBUG] [Thread-303749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:31:49.931 [DEBUG] [Thread-303749] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:31:49.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:31:49.933 [DEBUG] [Thread-303749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:31:49.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:31:49.935 [DEBUG] [Thread-303749] [transport.py] [_log()] userauth is OK
2025-12-24T14:31:49.935 [DEBUG] [Thread-303749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:31:49.935 [DEBUG] [Thread-303749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:31:49.935 [DEBUG] [Thread-303749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:31:49.935 [DEBUG] [Thread-303749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:31:49.957 [INFO] [Thread-303749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:31:49.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:31:50.578 [DEBUG] [Thread-303749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:31:50.579 [DEBUG] [Thread-303749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:31:50.579 [DEBUG] [Thread-303749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:31:50.620 [DEBUG] [Thread-303749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:31:50.620 [DEBUG] [Thread-303749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:31:50.622 [DEBUG] [Thread-303749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:31:50.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:31:50.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:31:50.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:31:50.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:31:50.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:31:50.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:31:50.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:31:50.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:31:50.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:31:50.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.521943 -999.00  +23.80  12.23     32   +6.50 1 2 1 1 1   888    0 17.16 15.08 ----- 12.2 12.2 145.0 21.6 29.1 -16.0 28.9 -17.0 29.3 -17.3 29.6 -16.8
2025-12-24T14:31:50.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:31:50.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:31:50.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.521943
2025-12-24T14:31:50.652 [DEBUG] [Thread-303749] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:31:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:31:50.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:31:50.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:31:50.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:31:50.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:31:50.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:31:27', tmtdew=19.53, humidity=28.14, cloud=0.0, wind=21.65, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:31:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:31:50.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:31:50.754 [DEBUG] [Thread-303752] [transport.py] [_log()] starting thread (client mode): 0xf5770e80
2025-12-24T14:31:50.754 [DEBUG] [Thread-303752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:31:50.769 [DEBUG] [Thread-303752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:31:50.769 [INFO] [Thread-303752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] client lang: <none>
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] server lang: <none>
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] kex follows: False
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] Compression: none
2025-12-24T14:31:50.776 [DEBUG] [Thread-303752] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:31:50.834 [DEBUG] [Thread-303752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:31:50.834 [DEBUG] [Thread-303752] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:31:50.834 [DEBUG] [Thread-303752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:31:50.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:31:50.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:31:50.894 [DEBUG] [Thread-303752] [transport.py] [_log()] userauth is OK
2025-12-24T14:31:50.894 [DEBUG] [Thread-303752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:31:50.899 [DEBUG] [Thread-303752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:31:50.899 [DEBUG] [Thread-303752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:31:50.899 [DEBUG] [Thread-303752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:31:50.912 [INFO] [Thread-303752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:31:50.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:31:50.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:31:51.811 [DEBUG] [Thread-303752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:31:51.811 [DEBUG] [Thread-303752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:31:51.850 [DEBUG] [Thread-303752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:31:51.850 [DEBUG] [Thread-303752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:31:51.859 [DEBUG] [Thread-303752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:31:51.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:31:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:31:51.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:31:51.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:31:51.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:31:51.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:31:51.892 [DEBUG] [Thread-303752] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:31:56.236 [DEBUG] [Thread-303754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:32:11.472 [DEBUG] [Thread-303755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:32:15.623 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:32:15.625 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:32:21.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:32:21.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:32:21.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:32:23.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 32), 19.68, 27.58, 0.0, 18.54, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:32:23.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:32:00
2025-12-24T14:32:23.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:32:23.495 [DEBUG] [Thread-303756] [transport.py] [_log()] starting thread (client mode): 0xf81c2bc0
2025-12-24T14:32:23.495 [DEBUG] [Thread-303756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:32:23.509 [DEBUG] [Thread-303756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:32:23.509 [INFO] [Thread-303756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] client lang: <none>
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] server lang: <none>
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] kex follows: False
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] Compression: none
2025-12-24T14:32:23.514 [DEBUG] [Thread-303756] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:32:23.550 [DEBUG] [Thread-303756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:32:23.553 [DEBUG] [Thread-303756] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:32:23.554 [DEBUG] [Thread-303756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:32:23.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:32:23.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:32:23.557 [DEBUG] [Thread-303756] [transport.py] [_log()] userauth is OK
2025-12-24T14:32:23.557 [DEBUG] [Thread-303756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:32:23.557 [DEBUG] [Thread-303756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:32:23.557 [DEBUG] [Thread-303756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:32:23.557 [DEBUG] [Thread-303756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:32:23.574 [INFO] [Thread-303756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:32:23.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:32:24.225 [DEBUG] [Thread-303756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:32:24.225 [DEBUG] [Thread-303756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:32:24.234 [DEBUG] [Thread-303756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:32:24.266 [DEBUG] [Thread-303756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:32:24.267 [DEBUG] [Thread-303756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:32:24.270 [DEBUG] [Thread-303756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:32:24.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:32:24.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:32:24.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:32:24.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:32:24.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:32:24.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:32:24.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:32:24.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:32:24.300 [DEBUG] [Thread-303756] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:32:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:32:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.522291 -999.00  +23.90  18.53     32   +6.50 1 2 1 1 1   888    0 17.60 18.80 ----- 18.5 18.5 116.4 20.7 29.1 -15.9 28.9 -17.7 29.3 -17.1 29.6 -17.1
2025-12-24T14:32:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:32:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:32:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.522291
2025-12-24T14:32:24.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:32:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:32:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:32:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:32:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:32:24.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:32:00', tmtdew=19.68, humidity=27.58, cloud=0.0, wind=18.54, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:32:05.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:32:24.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:32:24.435 [DEBUG] [Thread-303759] [transport.py] [_log()] starting thread (client mode): 0xf81c3fa0
2025-12-24T14:32:24.435 [DEBUG] [Thread-303759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:32:24.450 [DEBUG] [Thread-303759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:32:24.450 [INFO] [Thread-303759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:32:24.457 [DEBUG] [Thread-303759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] client lang: <none>
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] server lang: <none>
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] kex follows: False
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] Compression: none
2025-12-24T14:32:24.458 [DEBUG] [Thread-303759] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:32:24.523 [DEBUG] [Thread-303759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:32:24.523 [DEBUG] [Thread-303759] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:32:24.524 [DEBUG] [Thread-303759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:32:24.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:32:24.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:32:24.582 [DEBUG] [Thread-303759] [transport.py] [_log()] userauth is OK
2025-12-24T14:32:24.582 [DEBUG] [Thread-303759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:32:24.583 [DEBUG] [Thread-303759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:32:24.583 [DEBUG] [Thread-303759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:32:24.583 [DEBUG] [Thread-303759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:32:24.606 [INFO] [Thread-303759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:32:24.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:32:24.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:32:25.459 [DEBUG] [Thread-303759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:32:25.459 [DEBUG] [Thread-303759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:32:25.507 [DEBUG] [Thread-303759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:32:25.507 [DEBUG] [Thread-303759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:32:25.515 [DEBUG] [Thread-303759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:32:25.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:32:25.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:32:25.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:32:25.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:32:25.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:32:25.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:32:25.548 [DEBUG] [Thread-303759] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:32:26.540 [DEBUG] [Thread-303761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:32:41.564 [DEBUG] [Thread-303762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:32:41.638 [DEBUG] [Thread-303763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:32:55.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:32:55.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:32:55.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:32:56.727 [DEBUG] [Thread-303764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:32:56.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 32, 34), 19.99, 27.04, 0.0, 19.66, 23.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:32:56.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:32:34
2025-12-24T14:32:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:32:57.217 [DEBUG] [Thread-303765] [transport.py] [_log()] starting thread (client mode): 0xf57bd5d0
2025-12-24T14:32:57.217 [DEBUG] [Thread-303765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:32:57.231 [DEBUG] [Thread-303765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:32:57.231 [INFO] [Thread-303765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:32:57.238 [DEBUG] [Thread-303765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:32:57.239 [DEBUG] [Thread-303765] [transport.py] [_log()] client lang: <none>
2025-12-24T14:32:57.240 [DEBUG] [Thread-303765] [transport.py] [_log()] server lang: <none>
2025-12-24T14:32:57.240 [DEBUG] [Thread-303765] [transport.py] [_log()] kex follows: False
2025-12-24T14:32:57.240 [DEBUG] [Thread-303765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:32:57.241 [DEBUG] [Thread-303765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:32:57.241 [DEBUG] [Thread-303765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:32:57.241 [DEBUG] [Thread-303765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:32:57.241 [DEBUG] [Thread-303765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:32:57.241 [DEBUG] [Thread-303765] [transport.py] [_log()] Compression: none
2025-12-24T14:32:57.242 [DEBUG] [Thread-303765] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:32:57.282 [DEBUG] [Thread-303765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:32:57.287 [DEBUG] [Thread-303765] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:32:57.289 [DEBUG] [Thread-303765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:32:57.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:32:57.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:32:57.295 [DEBUG] [Thread-303765] [transport.py] [_log()] userauth is OK
2025-12-24T14:32:57.295 [DEBUG] [Thread-303765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:32:57.296 [DEBUG] [Thread-303765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:32:57.296 [DEBUG] [Thread-303765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:32:57.296 [DEBUG] [Thread-303765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:32:57.323 [INFO] [Thread-303765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:32:57.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:32:57.987 [DEBUG] [Thread-303765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:32:57.987 [DEBUG] [Thread-303765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:32:57.996 [DEBUG] [Thread-303765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:32:58.028 [DEBUG] [Thread-303765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:32:58.028 [DEBUG] [Thread-303765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:32:58.030 [DEBUG] [Thread-303765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:32:58.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:32:58.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:32:58.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:32:58.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:32:58.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:32:58.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:32:58.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:32:58.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:32:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:32:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.522638 -999.00  +23.60  10.48     33   +6.40 1 2 1 1 1   888    0 17.53 22.63 ----- 10.5 10.5 98.2 21.1 29.0 -16.5 29.0 -17.3 29.1 -17.4 29.5 -16.3
2025-12-24T14:32:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:32:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:32:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.522638
2025-12-24T14:32:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:32:58.073 [DEBUG] [Thread-303765] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:32:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:32:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:32:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:32:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:32:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:32:34', tmtdew=19.99, humidity=27.04, cloud=0.0, wind=19.66, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:32:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:32:58.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:32:58.161 [DEBUG] [Thread-303768] [transport.py] [_log()] starting thread (client mode): 0xf574c130
2025-12-24T14:32:58.162 [DEBUG] [Thread-303768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:32:58.175 [DEBUG] [Thread-303768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:32:58.175 [INFO] [Thread-303768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:32:58.183 [DEBUG] [Thread-303768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:32:58.183 [DEBUG] [Thread-303768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:32:58.183 [DEBUG] [Thread-303768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:32:58.183 [DEBUG] [Thread-303768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:32:58.183 [DEBUG] [Thread-303768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] client lang: <none>
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] server lang: <none>
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] kex follows: False
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:32:58.184 [DEBUG] [Thread-303768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:32:58.185 [DEBUG] [Thread-303768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:32:58.185 [DEBUG] [Thread-303768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:32:58.185 [DEBUG] [Thread-303768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:32:58.185 [DEBUG] [Thread-303768] [transport.py] [_log()] Compression: none
2025-12-24T14:32:58.185 [DEBUG] [Thread-303768] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:32:58.251 [DEBUG] [Thread-303768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:32:58.252 [DEBUG] [Thread-303768] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:32:58.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:32:58.253 [DEBUG] [Thread-303768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:32:58.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:32:58.310 [DEBUG] [Thread-303768] [transport.py] [_log()] userauth is OK
2025-12-24T14:32:58.311 [DEBUG] [Thread-303768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:32:58.311 [DEBUG] [Thread-303768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:32:58.311 [DEBUG] [Thread-303768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:32:58.311 [DEBUG] [Thread-303768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:32:58.330 [INFO] [Thread-303768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:32:58.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:32:58.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:32:59.204 [DEBUG] [Thread-303768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:32:59.204 [DEBUG] [Thread-303768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:32:59.243 [DEBUG] [Thread-303768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:32:59.244 [DEBUG] [Thread-303768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:32:59.256 [DEBUG] [Thread-303768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:32:59.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:32:59.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:32:59.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
2025-12-24T14:32:59.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:32:59.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:32:59.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:32:59.302 [DEBUG] [Thread-303768] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:33:11.831 [DEBUG] [Thread-303770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:33:15.765 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:33:15.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:33:27.022 [DEBUG] [Thread-303771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:33:29.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:33:29.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:33:29.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
2025-12-24T14:33:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 33, 7), 19.79, 27.37, 0.0, 17.75, 23.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:33:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:33:07
2025-12-24T14:33:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:33:31.050 [DEBUG] [Thread-303772] [transport.py] [_log()] starting thread (client mode): 0xf574e5f0
2025-12-24T14:33:31.050 [DEBUG] [Thread-303772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:33:31.065 [DEBUG] [Thread-303772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:33:31.065 [INFO] [Thread-303772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:33:31.069 [DEBUG] [Thread-303772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] client lang: <none>
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] server lang: <none>
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] kex follows: False
2025-12-24T14:33:31.070 [DEBUG] [Thread-303772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:33:31.071 [DEBUG] [Thread-303772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:33:31.071 [DEBUG] [Thread-303772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:33:31.071 [DEBUG] [Thread-303772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:33:31.071 [DEBUG] [Thread-303772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:33:31.071 [DEBUG] [Thread-303772] [transport.py] [_log()] Compression: none
2025-12-24T14:33:31.071 [DEBUG] [Thread-303772] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:33:31.103 [DEBUG] [Thread-303772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:33:31.106 [DEBUG] [Thread-303772] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:33:31.107 [DEBUG] [Thread-303772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:33:31.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:33:31.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:33:31.110 [DEBUG] [Thread-303772] [transport.py] [_log()] userauth is OK
2025-12-24T14:33:31.111 [DEBUG] [Thread-303772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:33:31.111 [DEBUG] [Thread-303772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:33:31.111 [DEBUG] [Thread-303772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:33:31.111 [DEBUG] [Thread-303772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:33:31.132 [INFO] [Thread-303772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:33:31.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:33:31.772 [DEBUG] [Thread-303772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:33:31.773 [DEBUG] [Thread-303772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:33:31.774 [DEBUG] [Thread-303772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:33:31.813 [DEBUG] [Thread-303772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:33:31.814 [DEBUG] [Thread-303772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:33:31.817 [DEBUG] [Thread-303772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:33:31.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:33:31.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:33:31.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:33:31.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:33:31.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:33:31.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:33:31.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:33:31.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:33:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:33:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.522985 -999.00  +23.60  14.21     33   +6.40 1 2 1 1 1   888    0 17.59 24.41 ----- 14.2 14.2 125.4 18.2 28.8 -16.2 28.9 -17.7 29.1 -16.9 29.4 -16.4
2025-12-24T14:33:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:33:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:33:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.522985
2025-12-24T14:33:31.852 [DEBUG] [Thread-303772] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:33:31.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:33:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:33:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:33:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:33:31.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:33:31.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:33:07', tmtdew=19.79, humidity=27.37, cloud=0.0, wind=17.75, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:33:05.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:33:31.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:33:31.965 [DEBUG] [Thread-303775] [transport.py] [_log()] starting thread (client mode): 0xf5752980
2025-12-24T14:33:31.965 [DEBUG] [Thread-303775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:33:31.980 [DEBUG] [Thread-303775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:33:31.980 [INFO] [Thread-303775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:33:31.988 [DEBUG] [Thread-303775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:33:31.988 [DEBUG] [Thread-303775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:33:31.988 [DEBUG] [Thread-303775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:33:31.988 [DEBUG] [Thread-303775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:33:31.988 [DEBUG] [Thread-303775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] client lang: <none>
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] server lang: <none>
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] kex follows: False
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:33:31.989 [DEBUG] [Thread-303775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:33:31.990 [DEBUG] [Thread-303775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:33:31.990 [DEBUG] [Thread-303775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:33:31.990 [DEBUG] [Thread-303775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:33:31.990 [DEBUG] [Thread-303775] [transport.py] [_log()] Compression: none
2025-12-24T14:33:31.990 [DEBUG] [Thread-303775] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:33:32.050 [DEBUG] [Thread-303775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:33:32.051 [DEBUG] [Thread-303775] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:33:32.051 [DEBUG] [Thread-303775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:33:32.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:33:32.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:33:32.107 [DEBUG] [Thread-303775] [transport.py] [_log()] userauth is OK
2025-12-24T14:33:32.107 [DEBUG] [Thread-303775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:33:32.107 [DEBUG] [Thread-303775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:33:32.107 [DEBUG] [Thread-303775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:33:32.108 [DEBUG] [Thread-303775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:33:32.132 [INFO] [Thread-303775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:33:32.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:33:32.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:33:33.022 [DEBUG] [Thread-303775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:33:33.023 [DEBUG] [Thread-303775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:33:33.069 [DEBUG] [Thread-303775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:33:33.070 [DEBUG] [Thread-303775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:33:33.078 [DEBUG] [Thread-303775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:33:33.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:33:33.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:33:33.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:33:33.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:33:33.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:33:33.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:33:33.113 [DEBUG] [Thread-303775] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:33:41.817 [DEBUG] [Thread-303777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:33:42.100 [DEBUG] [Thread-303778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:33:57.252 [DEBUG] [Thread-303779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:34:03.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:34:03.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:34:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:34:04.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 33, 40), 19.71, 27.42, 0.0, 20.19, 23.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:34:04.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:33:40
2025-12-24T14:34:04.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:34:04.910 [DEBUG] [Thread-303780] [transport.py] [_log()] starting thread (client mode): 0xf574f910
2025-12-24T14:34:04.910 [DEBUG] [Thread-303780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:34:04.923 [DEBUG] [Thread-303780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:34:04.923 [INFO] [Thread-303780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] client lang: <none>
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] server lang: <none>
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] kex follows: False
2025-12-24T14:34:04.928 [DEBUG] [Thread-303780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:34:04.929 [DEBUG] [Thread-303780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:34:04.929 [DEBUG] [Thread-303780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:34:04.929 [DEBUG] [Thread-303780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:34:04.929 [DEBUG] [Thread-303780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:34:04.929 [DEBUG] [Thread-303780] [transport.py] [_log()] Compression: none
2025-12-24T14:34:04.929 [DEBUG] [Thread-303780] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:34:04.958 [DEBUG] [Thread-303780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:34:04.963 [DEBUG] [Thread-303780] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:34:04.965 [DEBUG] [Thread-303780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:34:04.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:34:04.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:34:04.971 [DEBUG] [Thread-303780] [transport.py] [_log()] userauth is OK
2025-12-24T14:34:04.971 [DEBUG] [Thread-303780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:34:04.971 [DEBUG] [Thread-303780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:34:04.971 [DEBUG] [Thread-303780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:34:04.972 [DEBUG] [Thread-303780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:34:05.010 [INFO] [Thread-303780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:34:05.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:34:05.667 [DEBUG] [Thread-303780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:34:05.668 [DEBUG] [Thread-303780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:34:05.670 [DEBUG] [Thread-303780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:34:05.708 [DEBUG] [Thread-303780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:34:05.708 [DEBUG] [Thread-303780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:34:05.711 [DEBUG] [Thread-303780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:34:05.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:34:05.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:34:05.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:34:05.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:34:05.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:34:05.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:34:05.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:34:05.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:34:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:34:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.523332 -999.00  +23.60  22.99     33   +6.40 1 2 1 1 1   888    0 17.71 26.26 ----- 23.0 23.0 130.6 24.5 28.9 -16.5 28.8 -17.8 29.1 -17.7 29.2 -16.4
2025-12-24T14:34:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:34:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:34:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.523332
2025-12-24T14:34:05.748 [DEBUG] [Thread-303780] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:34:05.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:34:05.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:34:05.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:34:05.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:34:05.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:34:05.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:33:40', tmtdew=19.71, humidity=27.42, cloud=0.0, wind=20.19, temperature=23.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:33:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:34:05.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:34:05.862 [DEBUG] [Thread-303783] [transport.py] [_log()] starting thread (client mode): 0xf5771150
2025-12-24T14:34:05.862 [DEBUG] [Thread-303783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:34:05.876 [DEBUG] [Thread-303783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:34:05.877 [INFO] [Thread-303783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:34:05.884 [DEBUG] [Thread-303783] [transport.py] [_log()] client lang: <none>
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] server lang: <none>
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] kex follows: False
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] Compression: none
2025-12-24T14:34:05.885 [DEBUG] [Thread-303783] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:34:05.940 [DEBUG] [Thread-303783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:34:05.940 [DEBUG] [Thread-303783] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:34:05.941 [DEBUG] [Thread-303783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:34:05.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:34:05.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:34:06.002 [DEBUG] [Thread-303783] [transport.py] [_log()] userauth is OK
2025-12-24T14:34:06.002 [DEBUG] [Thread-303783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:34:06.003 [DEBUG] [Thread-303783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:34:06.003 [DEBUG] [Thread-303783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:34:06.003 [DEBUG] [Thread-303783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:34:06.021 [INFO] [Thread-303783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:34:06.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:34:06.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:34:06.853 [DEBUG] [Thread-303783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:34:06.853 [DEBUG] [Thread-303783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:34:06.899 [DEBUG] [Thread-303783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:34:06.899 [DEBUG] [Thread-303783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:34:06.907 [DEBUG] [Thread-303783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:34:06.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:34:06.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:34:06.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:34:06.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:34:06.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:34:06.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:34:06.940 [DEBUG] [Thread-303783] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:34:12.323 [DEBUG] [Thread-303785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:34:15.907 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:34:15.908 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:34:27.407 [DEBUG] [Thread-303786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:34:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:34:36.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:34:37.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:34:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 34, 13), 19.92, 27.09, 0.0, 21.97, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:34:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:34:13
2025-12-24T14:34:38.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:34:38.867 [DEBUG] [Thread-303787] [transport.py] [_log()] starting thread (client mode): 0xf5772800
2025-12-24T14:34:38.868 [DEBUG] [Thread-303787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:34:38.868 [DEBUG] [Thread-303787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:34:38.868 [INFO] [Thread-303787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] client lang: <none>
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] server lang: <none>
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] kex follows: False
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:34:38.873 [DEBUG] [Thread-303787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:34:38.874 [DEBUG] [Thread-303787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:34:38.874 [DEBUG] [Thread-303787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:34:38.874 [DEBUG] [Thread-303787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:34:38.874 [DEBUG] [Thread-303787] [transport.py] [_log()] Compression: none
2025-12-24T14:34:38.874 [DEBUG] [Thread-303787] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:34:38.903 [DEBUG] [Thread-303787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:34:38.905 [DEBUG] [Thread-303787] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:34:38.906 [DEBUG] [Thread-303787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:34:38.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:34:38.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:34:38.910 [DEBUG] [Thread-303787] [transport.py] [_log()] userauth is OK
2025-12-24T14:34:38.910 [DEBUG] [Thread-303787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:34:38.910 [DEBUG] [Thread-303787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:34:38.910 [DEBUG] [Thread-303787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:34:38.910 [DEBUG] [Thread-303787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:34:38.928 [INFO] [Thread-303787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:34:38.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:34:39.583 [DEBUG] [Thread-303787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:34:39.583 [DEBUG] [Thread-303787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:34:39.584 [DEBUG] [Thread-303787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:34:39.624 [DEBUG] [Thread-303787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:34:39.624 [DEBUG] [Thread-303787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:34:39.626 [DEBUG] [Thread-303787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:34:39.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:34:39.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:34:39.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:34:39.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:34:39.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:34:39.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:34:39.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:34:39.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:34:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:34:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.523680 -999.00  +23.40  17.83     33   +6.40 1 2 1 1 1   888    0 17.90 25.66 ----- 17.8 17.8 135.8 25.2 28.8 -16.4 28.8 -17.8 28.9 -16.9 29.1 -16.4
2025-12-24T14:34:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:34:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:34:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.523680
2025-12-24T14:34:39.656 [DEBUG] [Thread-303787] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:34:39.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:34:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:34:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:34:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:34:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:34:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:34:13', tmtdew=19.92, humidity=27.09, cloud=0.0, wind=21.97, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:34:05.952', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:34:39.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:34:39.759 [DEBUG] [Thread-303790] [transport.py] [_log()] starting thread (client mode): 0xf57a8430
2025-12-24T14:34:39.759 [DEBUG] [Thread-303790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:34:39.773 [DEBUG] [Thread-303790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:34:39.773 [INFO] [Thread-303790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] client lang: <none>
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] server lang: <none>
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] kex follows: False
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] Compression: none
2025-12-24T14:34:39.781 [DEBUG] [Thread-303790] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:34:39.837 [DEBUG] [Thread-303790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:34:39.837 [DEBUG] [Thread-303790] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:34:39.837 [DEBUG] [Thread-303790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:34:39.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:34:39.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:34:39.898 [DEBUG] [Thread-303790] [transport.py] [_log()] userauth is OK
2025-12-24T14:34:39.898 [DEBUG] [Thread-303790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:34:39.898 [DEBUG] [Thread-303790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:34:39.898 [DEBUG] [Thread-303790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:34:39.898 [DEBUG] [Thread-303790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:34:39.912 [INFO] [Thread-303790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:34:39.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:34:39.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:34:40.754 [DEBUG] [Thread-303790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:34:40.754 [DEBUG] [Thread-303790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:34:40.801 [DEBUG] [Thread-303790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:34:40.801 [DEBUG] [Thread-303790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:34:40.810 [DEBUG] [Thread-303790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:34:40.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:34:40.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:34:40.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:34:40.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:34:40.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:34:40.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:34:40.843 [DEBUG] [Thread-303790] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:34:42.041 [DEBUG] [Thread-303792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:34:42.460 [DEBUG] [Thread-303793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:34:57.717 [DEBUG] [Thread-303794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:35:10.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:35:10.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:35:10.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:35:12.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 34, 46), 19.81, 27.26, 0.0, 19.36, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:35:12.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:34:46
2025-12-24T14:35:12.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:35:12.618 [DEBUG] [Thread-303795] [transport.py] [_log()] starting thread (client mode): 0xf5752dd0
2025-12-24T14:35:12.618 [DEBUG] [Thread-303795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:35:12.627 [DEBUG] [Thread-303795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:35:12.627 [INFO] [Thread-303795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:35:12.633 [DEBUG] [Thread-303795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] client lang: <none>
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] server lang: <none>
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] kex follows: False
2025-12-24T14:35:12.634 [DEBUG] [Thread-303795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:35:12.635 [DEBUG] [Thread-303795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:35:12.635 [DEBUG] [Thread-303795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:35:12.635 [DEBUG] [Thread-303795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:35:12.635 [DEBUG] [Thread-303795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:35:12.636 [DEBUG] [Thread-303795] [transport.py] [_log()] Compression: none
2025-12-24T14:35:12.636 [DEBUG] [Thread-303795] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:35:12.665 [DEBUG] [Thread-303795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:35:12.669 [DEBUG] [Thread-303795] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:35:12.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:35:12.671 [DEBUG] [Thread-303795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:35:12.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:35:12.675 [DEBUG] [Thread-303795] [transport.py] [_log()] userauth is OK
2025-12-24T14:35:12.675 [DEBUG] [Thread-303795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:35:12.675 [DEBUG] [Thread-303795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:35:12.675 [DEBUG] [Thread-303795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:35:12.675 [DEBUG] [Thread-303795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:35:12.697 [INFO] [Thread-303795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:35:12.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:35:12.838 [DEBUG] [Thread-303797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:35:13.345 [DEBUG] [Thread-303795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:35:13.345 [DEBUG] [Thread-303795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:35:13.347 [DEBUG] [Thread-303795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:35:13.386 [DEBUG] [Thread-303795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:35:13.386 [DEBUG] [Thread-303795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:35:13.389 [DEBUG] [Thread-303795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:35:13.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:35:13.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:35:13.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:35:13.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:35:13.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:35:13.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:35:13.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:35:13.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:35:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:35:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.524027 -999.00  +23.50  18.83     33   +6.50 1 2 1 1 1   888    0 17.48 23.16 ----- 18.8 18.8 118.6 22.3 28.6 -17.2 28.6 -17.3 28.9 -16.9 29.0 -16.1
2025-12-24T14:35:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:35:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:35:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.524027
2025-12-24T14:35:13.417 [DEBUG] [Thread-303795] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:35:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:35:13.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:35:13.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:35:13.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:35:13.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:35:13.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:34:46', tmtdew=19.81, humidity=27.26, cloud=0.0, wind=19.36, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:34:35.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:35:13.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:35:13.518 [DEBUG] [Thread-303799] [transport.py] [_log()] starting thread (client mode): 0xf5771e40
2025-12-24T14:35:13.518 [DEBUG] [Thread-303799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:35:13.533 [DEBUG] [Thread-303799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:35:13.533 [INFO] [Thread-303799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:35:13.540 [DEBUG] [Thread-303799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:35:13.540 [DEBUG] [Thread-303799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:35:13.540 [DEBUG] [Thread-303799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:35:13.540 [DEBUG] [Thread-303799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:35:13.540 [DEBUG] [Thread-303799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:35:13.540 [DEBUG] [Thread-303799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:35:13.540 [DEBUG] [Thread-303799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] client lang: <none>
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] server lang: <none>
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] kex follows: False
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] Compression: none
2025-12-24T14:35:13.541 [DEBUG] [Thread-303799] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:35:13.597 [DEBUG] [Thread-303799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:35:13.598 [DEBUG] [Thread-303799] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:35:13.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:35:13.598 [DEBUG] [Thread-303799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:35:13.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:35:13.654 [DEBUG] [Thread-303799] [transport.py] [_log()] userauth is OK
2025-12-24T14:35:13.654 [DEBUG] [Thread-303799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:35:13.654 [DEBUG] [Thread-303799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:35:13.655 [DEBUG] [Thread-303799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:35:13.655 [DEBUG] [Thread-303799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:35:13.675 [INFO] [Thread-303799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:35:13.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:35:13.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:35:14.605 [DEBUG] [Thread-303799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:35:14.605 [DEBUG] [Thread-303799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:35:14.653 [DEBUG] [Thread-303799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:35:14.653 [DEBUG] [Thread-303799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:35:14.662 [DEBUG] [Thread-303799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:35:14.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:35:14.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:35:14.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:35:14.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:35:14.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:35:14.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:35:14.699 [DEBUG] [Thread-303799] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:35:16.049 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:35:16.050 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:35:27.918 [DEBUG] [Thread-303801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:35:42.289 [DEBUG] [Thread-303802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:35:43.013 [DEBUG] [Thread-303803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:35:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:35:44.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:35:44.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:35:46.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 35, 19), 19.79, 27.27, 0.0, 18.3, 23.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:35:46.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:35:19
2025-12-24T14:35:46.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:35:46.409 [DEBUG] [Thread-303804] [transport.py] [_log()] starting thread (client mode): 0xf81c22c0
2025-12-24T14:35:46.410 [DEBUG] [Thread-303804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:35:46.423 [DEBUG] [Thread-303804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:35:46.423 [INFO] [Thread-303804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] client lang: <none>
2025-12-24T14:35:46.429 [DEBUG] [Thread-303804] [transport.py] [_log()] server lang: <none>
2025-12-24T14:35:46.430 [DEBUG] [Thread-303804] [transport.py] [_log()] kex follows: False
2025-12-24T14:35:46.430 [DEBUG] [Thread-303804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:35:46.430 [DEBUG] [Thread-303804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:35:46.430 [DEBUG] [Thread-303804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:35:46.431 [DEBUG] [Thread-303804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:35:46.431 [DEBUG] [Thread-303804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:35:46.431 [DEBUG] [Thread-303804] [transport.py] [_log()] Compression: none
2025-12-24T14:35:46.431 [DEBUG] [Thread-303804] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:35:46.470 [DEBUG] [Thread-303804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:35:46.474 [DEBUG] [Thread-303804] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:35:46.476 [DEBUG] [Thread-303804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:35:46.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:35:46.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:35:46.482 [DEBUG] [Thread-303804] [transport.py] [_log()] userauth is OK
2025-12-24T14:35:46.483 [DEBUG] [Thread-303804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:35:46.483 [DEBUG] [Thread-303804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:35:46.483 [DEBUG] [Thread-303804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:35:46.483 [DEBUG] [Thread-303804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:35:46.520 [INFO] [Thread-303804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:35:46.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:35:47.160 [DEBUG] [Thread-303804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:35:47.160 [DEBUG] [Thread-303804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:35:47.161 [DEBUG] [Thread-303804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:35:47.202 [DEBUG] [Thread-303804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:35:47.202 [DEBUG] [Thread-303804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:35:47.206 [DEBUG] [Thread-303804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:35:47.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:35:47.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:35:47.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:35:47.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:35:47.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:35:47.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:35:47.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:35:47.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:35:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:35:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.524374 -999.00  +23.40  14.88     33   +6.40 1 2 1 1 1   888    0 17.54 22.28 ----- 14.9 14.9 126.8 18.8 28.6 -16.1 28.6 -17.4 28.9 -16.3 29.0 -16.7
2025-12-24T14:35:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:35:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:35:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.524374
2025-12-24T14:35:47.236 [DEBUG] [Thread-303804] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:35:47.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:35:47.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:35:47.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:35:47.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:35:47.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:35:47.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:35:19', tmtdew=19.79, humidity=27.27, cloud=0.0, wind=18.3, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:35:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:35:47.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:35:47.344 [DEBUG] [Thread-303807] [transport.py] [_log()] starting thread (client mode): 0xf572db10
2025-12-24T14:35:47.344 [DEBUG] [Thread-303807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:35:47.358 [DEBUG] [Thread-303807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:35:47.358 [INFO] [Thread-303807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] client lang: <none>
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] server lang: <none>
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] kex follows: False
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] Compression: none
2025-12-24T14:35:47.366 [DEBUG] [Thread-303807] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:35:47.428 [DEBUG] [Thread-303807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:35:47.429 [DEBUG] [Thread-303807] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:35:47.429 [DEBUG] [Thread-303807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:35:47.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:35:47.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:35:47.485 [DEBUG] [Thread-303807] [transport.py] [_log()] userauth is OK
2025-12-24T14:35:47.485 [DEBUG] [Thread-303807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:35:47.485 [DEBUG] [Thread-303807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:35:47.485 [DEBUG] [Thread-303807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:35:47.485 [DEBUG] [Thread-303807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:35:47.499 [INFO] [Thread-303807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:35:47.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:35:47.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:35:48.377 [DEBUG] [Thread-303807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:35:48.377 [DEBUG] [Thread-303807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:35:48.416 [DEBUG] [Thread-303807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:35:48.417 [DEBUG] [Thread-303807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:35:48.425 [DEBUG] [Thread-303807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:35:48.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:35:48.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:35:48.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:35:48.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:35:48.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:35:48.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:35:48.460 [DEBUG] [Thread-303807] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:35:58.100 [DEBUG] [Thread-303809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:36:13.375 [DEBUG] [Thread-303810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:36:16.201 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:36:16.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:36:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:36:18.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:36:18.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:36:19.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 35, 52), 19.35, 28.25, 0.0, 21.88, 22.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:36:19.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:35:52
2025-12-24T14:36:20.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:36:20.241 [DEBUG] [Thread-303811] [transport.py] [_log()] starting thread (client mode): 0xf81c3e80
2025-12-24T14:36:20.241 [DEBUG] [Thread-303811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:36:20.255 [DEBUG] [Thread-303811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:36:20.255 [INFO] [Thread-303811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] client lang: <none>
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] server lang: <none>
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] kex follows: False
2025-12-24T14:36:20.261 [DEBUG] [Thread-303811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:36:20.262 [DEBUG] [Thread-303811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:36:20.262 [DEBUG] [Thread-303811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:36:20.262 [DEBUG] [Thread-303811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:36:20.262 [DEBUG] [Thread-303811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:36:20.262 [DEBUG] [Thread-303811] [transport.py] [_log()] Compression: none
2025-12-24T14:36:20.262 [DEBUG] [Thread-303811] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:36:20.295 [DEBUG] [Thread-303811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:36:20.298 [DEBUG] [Thread-303811] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:36:20.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:36:20.300 [DEBUG] [Thread-303811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:36:20.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:36:20.302 [DEBUG] [Thread-303811] [transport.py] [_log()] userauth is OK
2025-12-24T14:36:20.302 [DEBUG] [Thread-303811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:36:20.302 [DEBUG] [Thread-303811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:36:20.302 [DEBUG] [Thread-303811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:36:20.302 [DEBUG] [Thread-303811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:36:20.321 [INFO] [Thread-303811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:36:20.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:36:20.963 [DEBUG] [Thread-303811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:36:20.964 [DEBUG] [Thread-303811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:36:20.965 [DEBUG] [Thread-303811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:36:21.004 [DEBUG] [Thread-303811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:36:21.004 [DEBUG] [Thread-303811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:36:21.007 [DEBUG] [Thread-303811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:36:21.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:36:21.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:36:21.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:36:21.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:36:21.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:36:21.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:36:21.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:36:21.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:36:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:36:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.525068 -999.00  +23.00  17.47     34   +6.30 1 2 1 1 1   888    0 17.31 15.93 ----- 17.5 17.5 115.6 20.2 28.3 -16.2 28.5 -16.9 28.6 -16.5 28.8 -15.6
2025-12-24T14:36:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:36:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:36:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.525068
2025-12-24T14:36:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:36:21.049 [DEBUG] [Thread-303811] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:36:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:36:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:36:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:36:21.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:36:21.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:35:52', tmtdew=19.35, humidity=28.25, cloud=0.0, wind=21.88, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:36:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:36:21.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:36:21.154 [DEBUG] [Thread-303814] [transport.py] [_log()] starting thread (client mode): 0xf81f2cb0
2025-12-24T14:36:21.154 [DEBUG] [Thread-303814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:36:21.171 [DEBUG] [Thread-303814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:36:21.171 [INFO] [Thread-303814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:36:21.182 [DEBUG] [Thread-303814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:36:21.182 [DEBUG] [Thread-303814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:36:21.182 [DEBUG] [Thread-303814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:36:21.182 [DEBUG] [Thread-303814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] client lang: <none>
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] server lang: <none>
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] kex follows: False
2025-12-24T14:36:21.183 [DEBUG] [Thread-303814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:36:21.184 [DEBUG] [Thread-303814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:36:21.184 [DEBUG] [Thread-303814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:36:21.184 [DEBUG] [Thread-303814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:36:21.184 [DEBUG] [Thread-303814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:36:21.184 [DEBUG] [Thread-303814] [transport.py] [_log()] Compression: none
2025-12-24T14:36:21.184 [DEBUG] [Thread-303814] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:36:21.246 [DEBUG] [Thread-303814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:36:21.247 [DEBUG] [Thread-303814] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:36:21.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:36:21.248 [DEBUG] [Thread-303814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:36:21.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:36:21.301 [DEBUG] [Thread-303814] [transport.py] [_log()] userauth is OK
2025-12-24T14:36:21.302 [DEBUG] [Thread-303814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:36:21.302 [DEBUG] [Thread-303814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:36:21.302 [DEBUG] [Thread-303814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:36:21.302 [DEBUG] [Thread-303814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:36:21.322 [INFO] [Thread-303814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:36:21.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:36:21.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:36:22.175 [DEBUG] [Thread-303814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:36:22.175 [DEBUG] [Thread-303814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:36:22.223 [DEBUG] [Thread-303814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:36:22.223 [DEBUG] [Thread-303814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:36:22.233 [DEBUG] [Thread-303814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:36:22.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:36:22.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')
2025-12-24T14:36:22.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
2025-12-24T14:36:22.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:36:22.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:36:22.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:36:22.277 [DEBUG] [Thread-303814] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:36:28.490 [DEBUG] [Thread-303816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:36:42.641 [DEBUG] [Thread-303817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:36:43.597 [DEBUG] [Thread-303818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:36:52.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:36:52.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:36:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:36:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 36, 26), 19.31, 28.3, 0.0, 20.79, 22.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:36:53.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:36:26
2025-12-24T14:36:53.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:36:53.455 [DEBUG] [Thread-303819] [transport.py] [_log()] starting thread (client mode): 0xf81c2860
2025-12-24T14:36:53.455 [DEBUG] [Thread-303819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:36:53.470 [DEBUG] [Thread-303819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:36:53.470 [INFO] [Thread-303819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:36:53.476 [DEBUG] [Thread-303819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] client lang: <none>
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] server lang: <none>
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] kex follows: False
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:36:53.477 [DEBUG] [Thread-303819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:36:53.478 [DEBUG] [Thread-303819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:36:53.478 [DEBUG] [Thread-303819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:36:53.478 [DEBUG] [Thread-303819] [transport.py] [_log()] Compression: none
2025-12-24T14:36:53.478 [DEBUG] [Thread-303819] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:36:53.517 [DEBUG] [Thread-303819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:36:53.522 [DEBUG] [Thread-303819] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:36:53.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:36:53.525 [DEBUG] [Thread-303819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:36:53.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:36:53.529 [DEBUG] [Thread-303819] [transport.py] [_log()] userauth is OK
2025-12-24T14:36:53.530 [DEBUG] [Thread-303819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:36:53.530 [DEBUG] [Thread-303819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:36:53.530 [DEBUG] [Thread-303819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:36:53.530 [DEBUG] [Thread-303819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:36:53.561 [INFO] [Thread-303819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:36:53.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:36:54.210 [DEBUG] [Thread-303819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:36:54.210 [DEBUG] [Thread-303819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:36:54.211 [DEBUG] [Thread-303819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:36:54.250 [DEBUG] [Thread-303819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:36:54.250 [DEBUG] [Thread-303819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:36:54.253 [DEBUG] [Thread-303819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:36:54.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:36:54.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:36:54.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:36:54.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:36:54.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:36:54.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:36:54.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:36:54.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:36:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:36:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.525416 -999.00  +23.10  19.61     33   +6.30 1 2 1 1 1   888    0 17.07 12.51 ----- 19.6 19.6 103.6 23.0 28.1 -18.3 28.4 -16.5 28.6 -15.4 28.8 -15.0
2025-12-24T14:36:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:36:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:36:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.525416
2025-12-24T14:36:54.281 [DEBUG] [Thread-303819] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:36:54.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:36:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:36:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:36:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:36:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:36:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:36:26', tmtdew=19.31, humidity=28.3, cloud=0.0, wind=20.79, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:36:35.942', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:36:54.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:36:54.386 [DEBUG] [Thread-303822] [transport.py] [_log()] starting thread (client mode): 0xf572f880
2025-12-24T14:36:54.386 [DEBUG] [Thread-303822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:36:54.401 [DEBUG] [Thread-303822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:36:54.401 [INFO] [Thread-303822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] client lang: <none>
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] server lang: <none>
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] kex follows: False
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] Compression: none
2025-12-24T14:36:54.409 [DEBUG] [Thread-303822] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:36:54.468 [DEBUG] [Thread-303822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:36:54.468 [DEBUG] [Thread-303822] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:36:54.468 [DEBUG] [Thread-303822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:36:54.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:36:54.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:36:54.525 [DEBUG] [Thread-303822] [transport.py] [_log()] userauth is OK
2025-12-24T14:36:54.525 [DEBUG] [Thread-303822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:36:54.525 [DEBUG] [Thread-303822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:36:54.525 [DEBUG] [Thread-303822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:36:54.526 [DEBUG] [Thread-303822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:36:54.544 [INFO] [Thread-303822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:36:54.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:36:54.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:36:55.345 [DEBUG] [Thread-303822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:36:55.345 [DEBUG] [Thread-303822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:36:55.392 [DEBUG] [Thread-303822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:36:55.393 [DEBUG] [Thread-303822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:36:55.401 [DEBUG] [Thread-303822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:36:55.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:36:55.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:36:55.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:36:55.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:36:55.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:36:55.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:36:55.434 [DEBUG] [Thread-303822] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:36:58.676 [DEBUG] [Thread-303824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:37:13.848 [DEBUG] [Thread-303825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:37:16.353 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:37:16.354 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:37:25.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:37:25.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:37:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:37:26.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 36, 59), 19.16, 28.82, 0.0, 16.5, 22.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:37:26.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:36:59
2025-12-24T14:37:26.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:37:27.137 [DEBUG] [Thread-303826] [transport.py] [_log()] starting thread (client mode): 0xf572e230
2025-12-24T14:37:27.137 [DEBUG] [Thread-303826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:37:27.138 [DEBUG] [Thread-303826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:37:27.138 [INFO] [Thread-303826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] client lang: <none>
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] server lang: <none>
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] kex follows: False
2025-12-24T14:37:27.142 [DEBUG] [Thread-303826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:37:27.143 [DEBUG] [Thread-303826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:37:27.143 [DEBUG] [Thread-303826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:37:27.143 [DEBUG] [Thread-303826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:37:27.143 [DEBUG] [Thread-303826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:37:27.144 [DEBUG] [Thread-303826] [transport.py] [_log()] Compression: none
2025-12-24T14:37:27.144 [DEBUG] [Thread-303826] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:37:27.180 [DEBUG] [Thread-303826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:37:27.184 [DEBUG] [Thread-303826] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:37:27.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:37:27.188 [DEBUG] [Thread-303826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:37:27.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:37:27.191 [DEBUG] [Thread-303826] [transport.py] [_log()] userauth is OK
2025-12-24T14:37:27.191 [DEBUG] [Thread-303826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:37:27.192 [DEBUG] [Thread-303826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:37:27.192 [DEBUG] [Thread-303826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:37:27.192 [DEBUG] [Thread-303826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:37:27.231 [INFO] [Thread-303826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:37:27.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:37:27.850 [DEBUG] [Thread-303826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:37:27.850 [DEBUG] [Thread-303826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:37:27.852 [DEBUG] [Thread-303826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:37:27.891 [DEBUG] [Thread-303826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:37:27.891 [DEBUG] [Thread-303826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:37:27.896 [DEBUG] [Thread-303826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:37:27.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:37:27.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:37:27.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:37:27.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:37:27.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:37:27.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:37:27.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:37:27.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.525763 -999.00  +23.10  16.71     33   +6.30 1 2 1 1 1   888    0 17.37 10.21 ----- 16.7 16.7 132.8 21.7 28.1 -14.8 28.4 -16.4 28.6 -15.7 28.8 -15.0
2025-12-24T14:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.525763
2025-12-24T14:37:27.930 [DEBUG] [Thread-303826] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:37:27.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:37:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:37:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:37:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:37:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:37:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:36:59', tmtdew=19.16, humidity=28.82, cloud=0.0, wind=16.5, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:37:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:37:28.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:37:28.044 [DEBUG] [Thread-303829] [transport.py] [_log()] starting thread (client mode): 0xf572f2b0
2025-12-24T14:37:28.044 [DEBUG] [Thread-303829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:37:28.059 [DEBUG] [Thread-303829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:37:28.060 [INFO] [Thread-303829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:37:28.067 [DEBUG] [Thread-303829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:37:28.067 [DEBUG] [Thread-303829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:37:28.067 [DEBUG] [Thread-303829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:37:28.067 [DEBUG] [Thread-303829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:37:28.067 [DEBUG] [Thread-303829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] client lang: <none>
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] server lang: <none>
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] kex follows: False
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:37:28.068 [DEBUG] [Thread-303829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:37:28.069 [DEBUG] [Thread-303829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:37:28.069 [DEBUG] [Thread-303829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:37:28.069 [DEBUG] [Thread-303829] [transport.py] [_log()] Compression: none
2025-12-24T14:37:28.069 [DEBUG] [Thread-303829] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:37:28.125 [DEBUG] [Thread-303829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:37:28.125 [DEBUG] [Thread-303829] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:37:28.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:37:28.126 [DEBUG] [Thread-303829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:37:28.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:37:28.181 [DEBUG] [Thread-303829] [transport.py] [_log()] userauth is OK
2025-12-24T14:37:28.181 [DEBUG] [Thread-303829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:37:28.181 [DEBUG] [Thread-303829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:37:28.181 [DEBUG] [Thread-303829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:37:28.181 [DEBUG] [Thread-303829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:37:28.196 [INFO] [Thread-303829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:37:28.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:37:28.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:37:28.949 [DEBUG] [Thread-303831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:37:29.055 [DEBUG] [Thread-303829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:37:29.055 [DEBUG] [Thread-303829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:37:29.103 [DEBUG] [Thread-303829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:37:29.103 [DEBUG] [Thread-303829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:37:29.112 [DEBUG] [Thread-303829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:37:29.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:37:29.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:37:29.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:37:29.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:37:29.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:37:29.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:37:29.149 [DEBUG] [Thread-303829] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:37:42.967 [DEBUG] [Thread-303832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:37:44.099 [DEBUG] [Thread-303833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:37:59.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:37:59.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:37:59.201 [DEBUG] [Thread-303834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:37:59.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:38:00.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 37, 32), 19.13, 28.87, 0.0, 16.66, 22.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:38:00.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:37:32
2025-12-24T14:38:00.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:38:01.026 [DEBUG] [Thread-303835] [transport.py] [_log()] starting thread (client mode): 0xf574ca60
2025-12-24T14:38:01.026 [DEBUG] [Thread-303835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:38:01.037 [DEBUG] [Thread-303835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:38:01.038 [INFO] [Thread-303835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] client lang: <none>
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] server lang: <none>
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] kex follows: False
2025-12-24T14:38:01.043 [DEBUG] [Thread-303835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:38:01.044 [DEBUG] [Thread-303835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:38:01.044 [DEBUG] [Thread-303835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:38:01.044 [DEBUG] [Thread-303835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:38:01.044 [DEBUG] [Thread-303835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:38:01.044 [DEBUG] [Thread-303835] [transport.py] [_log()] Compression: none
2025-12-24T14:38:01.044 [DEBUG] [Thread-303835] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:38:01.082 [DEBUG] [Thread-303835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:38:01.087 [DEBUG] [Thread-303835] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:38:01.089 [DEBUG] [Thread-303835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:38:01.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:38:01.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:38:01.096 [DEBUG] [Thread-303835] [transport.py] [_log()] userauth is OK
2025-12-24T14:38:01.096 [DEBUG] [Thread-303835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:38:01.097 [DEBUG] [Thread-303835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:38:01.097 [DEBUG] [Thread-303835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:38:01.097 [DEBUG] [Thread-303835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:38:01.135 [INFO] [Thread-303835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:38:01.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:38:01.803 [DEBUG] [Thread-303835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:38:01.803 [DEBUG] [Thread-303835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:38:01.803 [DEBUG] [Thread-303835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:38:01.844 [DEBUG] [Thread-303835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:38:01.844 [DEBUG] [Thread-303835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:38:01.847 [DEBUG] [Thread-303835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:38:01.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:38:01.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:38:01.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:38:01.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:38:01.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:38:01.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:38:01.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:38:01.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:38:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:38:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.526110 -999.00  +23.50  13.59     33   +6.40 1 2 1 1 1   888    0 17.17 8.03 ----- 13.6 13.6 136.0 19.3 28.1 -14.9 28.4 -16.1 28.6 -14.7 28.6 -15.2
2025-12-24T14:38:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:38:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:38:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.526110
2025-12-24T14:38:01.881 [DEBUG] [Thread-303835] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:38:01.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:38:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:38:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:38:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:38:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:38:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:37:32', tmtdew=19.13, humidity=28.87, cloud=0.0, wind=16.66, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:37:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:38:01.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:38:01.997 [DEBUG] [Thread-303838] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-24T14:38:01.997 [DEBUG] [Thread-303838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:38:02.012 [DEBUG] [Thread-303838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:38:02.012 [INFO] [Thread-303838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:38:02.020 [DEBUG] [Thread-303838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:38:02.020 [DEBUG] [Thread-303838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:38:02.020 [DEBUG] [Thread-303838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:38:02.020 [DEBUG] [Thread-303838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:38:02.020 [DEBUG] [Thread-303838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:38:02.020 [DEBUG] [Thread-303838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] client lang: <none>
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] server lang: <none>
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] kex follows: False
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] Compression: none
2025-12-24T14:38:02.021 [DEBUG] [Thread-303838] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:38:02.077 [DEBUG] [Thread-303838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:38:02.077 [DEBUG] [Thread-303838] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:38:02.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:38:02.078 [DEBUG] [Thread-303838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:38:02.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:38:02.133 [DEBUG] [Thread-303838] [transport.py] [_log()] userauth is OK
2025-12-24T14:38:02.134 [DEBUG] [Thread-303838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:38:02.134 [DEBUG] [Thread-303838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:38:02.134 [DEBUG] [Thread-303838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:38:02.134 [DEBUG] [Thread-303838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:38:02.158 [INFO] [Thread-303838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:38:02.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:38:02.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:38:03.042 [DEBUG] [Thread-303838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:38:03.042 [DEBUG] [Thread-303838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:38:03.089 [DEBUG] [Thread-303838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:38:03.089 [DEBUG] [Thread-303838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:38:03.097 [DEBUG] [Thread-303838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:38:03.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:38:03.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:38:03.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
2025-12-24T14:38:03.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:38:03.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:38:03.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:38:03.131 [DEBUG] [Thread-303838] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:38:14.307 [DEBUG] [Thread-303840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:38:16.496 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:38:16.497 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:38:29.471 [DEBUG] [Thread-303841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:38:33.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:38:33.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:38:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:38:34.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 38, 5), 19.22, 28.7, 0.0, 12.39, 22.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:38:34.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:38:05
2025-12-24T14:38:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:38:34.945 [DEBUG] [Thread-303842] [transport.py] [_log()] starting thread (client mode): 0xf81f29e0
2025-12-24T14:38:34.945 [DEBUG] [Thread-303842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:38:34.958 [DEBUG] [Thread-303842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:38:34.958 [INFO] [Thread-303842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:38:34.963 [DEBUG] [Thread-303842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] client lang: <none>
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] server lang: <none>
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] kex follows: False
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:38:34.964 [DEBUG] [Thread-303842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:38:34.965 [DEBUG] [Thread-303842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:38:34.965 [DEBUG] [Thread-303842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:38:34.965 [DEBUG] [Thread-303842] [transport.py] [_log()] Compression: none
2025-12-24T14:38:34.965 [DEBUG] [Thread-303842] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:38:34.998 [DEBUG] [Thread-303842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:38:35.001 [DEBUG] [Thread-303842] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:38:35.002 [DEBUG] [Thread-303842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:38:35.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:38:35.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:38:35.006 [DEBUG] [Thread-303842] [transport.py] [_log()] userauth is OK
2025-12-24T14:38:35.006 [DEBUG] [Thread-303842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:38:35.007 [DEBUG] [Thread-303842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:38:35.007 [DEBUG] [Thread-303842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:38:35.007 [DEBUG] [Thread-303842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:38:35.040 [INFO] [Thread-303842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:38:35.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:38:35.689 [DEBUG] [Thread-303842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:38:35.690 [DEBUG] [Thread-303842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:38:35.690 [DEBUG] [Thread-303842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:38:35.731 [DEBUG] [Thread-303842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:38:35.731 [DEBUG] [Thread-303842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:38:35.734 [DEBUG] [Thread-303842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:38:35.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:38:35.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:38:35.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:38:35.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:38:35.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:38:35.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:38:35.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:38:35.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:38:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:38:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.526457 -999.00  +23.20  16.68     33   +6.20 1 2 1 1 1   888    0 17.13 6.50 ----- 16.7 16.7 163.0 28.4 28.1 -15.9 28.1 -17.0 28.4 -15.8 28.5 -14.6
2025-12-24T14:38:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:38:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:38:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.526457
2025-12-24T14:38:35.768 [DEBUG] [Thread-303842] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:38:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:38:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:38:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:38:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:38:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:38:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:38:05', tmtdew=19.22, humidity=28.7, cloud=0.0, wind=12.39, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:38:05.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:38:35.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:38:35.866 [DEBUG] [Thread-303845] [transport.py] [_log()] starting thread (client mode): 0xf574c340
2025-12-24T14:38:35.866 [DEBUG] [Thread-303845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:38:35.880 [DEBUG] [Thread-303845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:38:35.880 [INFO] [Thread-303845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:38:35.888 [DEBUG] [Thread-303845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:38:35.888 [DEBUG] [Thread-303845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:38:35.888 [DEBUG] [Thread-303845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:38:35.888 [DEBUG] [Thread-303845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:38:35.888 [DEBUG] [Thread-303845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:38:35.889 [DEBUG] [Thread-303845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:38:35.889 [DEBUG] [Thread-303845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:38:35.889 [DEBUG] [Thread-303845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:38:35.889 [DEBUG] [Thread-303845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:38:35.889 [DEBUG] [Thread-303845] [transport.py] [_log()] client lang: <none>
2025-12-24T14:38:35.889 [DEBUG] [Thread-303845] [transport.py] [_log()] server lang: <none>
2025-12-24T14:38:35.889 [DEBUG] [Thread-303845] [transport.py] [_log()] kex follows: False
2025-12-24T14:38:35.889 [DEBUG] [Thread-303845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:38:35.890 [DEBUG] [Thread-303845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:38:35.890 [DEBUG] [Thread-303845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:38:35.890 [DEBUG] [Thread-303845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:38:35.890 [DEBUG] [Thread-303845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:38:35.890 [DEBUG] [Thread-303845] [transport.py] [_log()] Compression: none
2025-12-24T14:38:35.890 [DEBUG] [Thread-303845] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:38:35.950 [DEBUG] [Thread-303845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:38:35.951 [DEBUG] [Thread-303845] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:38:35.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:38:35.952 [DEBUG] [Thread-303845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:38:35.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:38:36.009 [DEBUG] [Thread-303845] [transport.py] [_log()] userauth is OK
2025-12-24T14:38:36.010 [DEBUG] [Thread-303845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:38:36.010 [DEBUG] [Thread-303845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:38:36.010 [DEBUG] [Thread-303845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:38:36.010 [DEBUG] [Thread-303845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:38:36.028 [INFO] [Thread-303845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:38:36.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:38:36.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:38:36.913 [DEBUG] [Thread-303845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:38:36.914 [DEBUG] [Thread-303845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:38:36.961 [DEBUG] [Thread-303845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:38:36.961 [DEBUG] [Thread-303845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:38:36.971 [DEBUG] [Thread-303845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:38:36.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:38:36.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:38: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
2025-12-24T14:38:37.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:38:37.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:38:37.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:38:37.009 [DEBUG] [Thread-303845] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:38:43.337 [DEBUG] [Thread-303847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:38:44.530 [DEBUG] [Thread-303848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:38:59.650 [DEBUG] [Thread-303849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:39:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:39:07.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:39:07.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:39:08.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 38, 38), 19.12, 28.8, 0.0, 20.87, 22.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:39:08.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:38:38
2025-12-24T14:39:08.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:39:08.682 [DEBUG] [Thread-303850] [transport.py] [_log()] starting thread (client mode): 0xf8189db0
2025-12-24T14:39:08.683 [DEBUG] [Thread-303850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:39:08.687 [DEBUG] [Thread-303850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:39:08.687 [INFO] [Thread-303850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:39:08.692 [DEBUG] [Thread-303850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] client lang: <none>
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] server lang: <none>
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] kex follows: False
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] Compression: none
2025-12-24T14:39:08.693 [DEBUG] [Thread-303850] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:39:08.721 [DEBUG] [Thread-303850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:39:08.725 [DEBUG] [Thread-303850] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:39:08.727 [DEBUG] [Thread-303850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:39:08.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:39:08.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:39:08.733 [DEBUG] [Thread-303850] [transport.py] [_log()] userauth is OK
2025-12-24T14:39:08.733 [DEBUG] [Thread-303850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:39:08.734 [DEBUG] [Thread-303850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:39:08.734 [DEBUG] [Thread-303850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:39:08.734 [DEBUG] [Thread-303850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:39:08.777 [INFO] [Thread-303850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:39:08.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:39:09.387 [DEBUG] [Thread-303850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:39:09.387 [DEBUG] [Thread-303850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:39:09.396 [DEBUG] [Thread-303850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:39:09.429 [DEBUG] [Thread-303850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:39:09.429 [DEBUG] [Thread-303850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:39:09.431 [DEBUG] [Thread-303850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:39:09.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:39:09.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:39:09.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:39:09.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:39:09.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:39:09.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:39:09.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:39:09.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:39:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:39:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.526804 -999.00  +23.10  19.75     33   +6.30 1 2 1 1 1   888    0 17.15 4.41 ----- 19.8 19.8 152.1 29.4 28.0 -14.7 28.0 -15.5 28.3 -15.5 28.5 -15.2
2025-12-24T14:39:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:39:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:39:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.526804
2025-12-24T14:39:09.463 [DEBUG] [Thread-303850] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:39:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:39:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:39:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:39:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:39:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:39:09.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:38:38', tmtdew=19.12, humidity=28.8, cloud=0.0, wind=20.87, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:38:35.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:39:09.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:39:09.560 [DEBUG] [Thread-303853] [transport.py] [_log()] starting thread (client mode): 0xf81e7100
2025-12-24T14:39:09.560 [DEBUG] [Thread-303853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:39:09.575 [DEBUG] [Thread-303853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:39:09.575 [INFO] [Thread-303853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:39:09.582 [DEBUG] [Thread-303853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:39:09.582 [DEBUG] [Thread-303853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:39:09.582 [DEBUG] [Thread-303853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] client lang: <none>
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] server lang: <none>
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] kex follows: False
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] Compression: none
2025-12-24T14:39:09.583 [DEBUG] [Thread-303853] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:39:09.641 [DEBUG] [Thread-303853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:39:09.642 [DEBUG] [Thread-303853] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:39:09.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:39:09.643 [DEBUG] [Thread-303853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:39:09.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:39:09.702 [DEBUG] [Thread-303853] [transport.py] [_log()] userauth is OK
2025-12-24T14:39:09.703 [DEBUG] [Thread-303853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:39:09.703 [DEBUG] [Thread-303853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:39:09.703 [DEBUG] [Thread-303853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:39:09.703 [DEBUG] [Thread-303853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:39:09.722 [INFO] [Thread-303853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:39:09.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:39:09.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:39:10.551 [DEBUG] [Thread-303853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:39:10.551 [DEBUG] [Thread-303853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:39:10.599 [DEBUG] [Thread-303853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:39:10.599 [DEBUG] [Thread-303853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:39:10.608 [DEBUG] [Thread-303853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:39:10.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:39:10.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:39:10.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:39:10.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:39:10.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:39:10.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:39:10.643 [DEBUG] [Thread-303853] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:39:14.720 [DEBUG] [Thread-303855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:39:16.637 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:39:16.638 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:39:29.887 [DEBUG] [Thread-303856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:39:40.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:39:40.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:39:40.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:39:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 39, 11), 19.27, 28.56, 0.0, 24.79, 22.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:39:41.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:39:11
2025-12-24T14:39:41.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:39:41.770 [DEBUG] [Thread-303857] [transport.py] [_log()] starting thread (client mode): 0xf81f2320
2025-12-24T14:39:41.771 [DEBUG] [Thread-303857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:39:41.783 [DEBUG] [Thread-303857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:39:41.783 [INFO] [Thread-303857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:39:41.788 [DEBUG] [Thread-303857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:39:41.788 [DEBUG] [Thread-303857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:39:41.788 [DEBUG] [Thread-303857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:39:41.788 [DEBUG] [Thread-303857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:39:41.788 [DEBUG] [Thread-303857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] client lang: <none>
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] server lang: <none>
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] kex follows: False
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:39:41.789 [DEBUG] [Thread-303857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:39:41.790 [DEBUG] [Thread-303857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:39:41.790 [DEBUG] [Thread-303857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:39:41.790 [DEBUG] [Thread-303857] [transport.py] [_log()] Compression: none
2025-12-24T14:39:41.790 [DEBUG] [Thread-303857] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:39:41.820 [DEBUG] [Thread-303857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:39:41.824 [DEBUG] [Thread-303857] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:39:41.825 [DEBUG] [Thread-303857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:39:41.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:39:41.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:39:41.829 [DEBUG] [Thread-303857] [transport.py] [_log()] userauth is OK
2025-12-24T14:39:41.829 [DEBUG] [Thread-303857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:39:41.829 [DEBUG] [Thread-303857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:39:41.829 [DEBUG] [Thread-303857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:39:41.829 [DEBUG] [Thread-303857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:39:41.852 [INFO] [Thread-303857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:39:41.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:39:42.499 [DEBUG] [Thread-303857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:39:42.499 [DEBUG] [Thread-303857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:39:42.500 [DEBUG] [Thread-303857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:39:42.541 [DEBUG] [Thread-303857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:39:42.541 [DEBUG] [Thread-303857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:39:42.543 [DEBUG] [Thread-303857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:39:42.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:39:42.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:39:42.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:39:42.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:39:42.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:39:42.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:39:42.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:39:42.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:39:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:39:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.527152 -999.00  +23.10  18.58     33   +6.20 1 2 1 1 1   888    0 17.26 2.23 ----- 18.6 18.6 129.2 28.1 28.0 -14.6 28.0 -15.9 28.2 -15.3 28.4 -14.5
2025-12-24T14:39:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:39:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:39:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.527152
2025-12-24T14:39:42.573 [DEBUG] [Thread-303857] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:39:42.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:39:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:39:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:39:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:39:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:39:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:39:11', tmtdew=19.27, humidity=28.56, cloud=0.0, wind=24.79, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:39:05.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:39:42.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:39:42.672 [DEBUG] [Thread-303860] [transport.py] [_log()] starting thread (client mode): 0xf81e5c60
2025-12-24T14:39:42.672 [DEBUG] [Thread-303860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:39:42.686 [DEBUG] [Thread-303860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:39:42.686 [INFO] [Thread-303860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] client lang: <none>
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] server lang: <none>
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] kex follows: False
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] Compression: none
2025-12-24T14:39:42.694 [DEBUG] [Thread-303860] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:39:42.751 [DEBUG] [Thread-303860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:39:42.751 [DEBUG] [Thread-303860] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:39:42.751 [DEBUG] [Thread-303860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:39:42.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:39:42.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:39:42.809 [DEBUG] [Thread-303860] [transport.py] [_log()] userauth is OK
2025-12-24T14:39:42.809 [DEBUG] [Thread-303860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:39:42.809 [DEBUG] [Thread-303860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:39:42.809 [DEBUG] [Thread-303860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:39:42.809 [DEBUG] [Thread-303860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:39:42.826 [INFO] [Thread-303860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:39:42.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:39:42.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:39:43.640 [DEBUG] [Thread-303860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:39:43.640 [DEBUG] [Thread-303860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:39:43.687 [DEBUG] [Thread-303860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:39:43.687 [DEBUG] [Thread-303860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:39:43.695 [DEBUG] [Thread-303860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:39:43.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:39:43.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')
2025-12-24T14:39:43.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
2025-12-24T14:39:43.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:39:43.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:39:43.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:39:43.728 [DEBUG] [Thread-303860] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:39:43.747 [DEBUG] [Thread-303862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:39:44.921 [DEBUG] [Thread-303863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:40:00.022 [DEBUG] [Thread-303864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:40:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:40:13.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:40:13.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:40:15.129 [DEBUG] [Thread-303865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:40:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 39, 44), 19.25, 28.49, 0.0, 24.17, 22.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:40:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:39:44
2025-12-24T14:40:15.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:40:15.578 [DEBUG] [Thread-303866] [transport.py] [_log()] starting thread (client mode): 0xf81c1810
2025-12-24T14:40:15.579 [DEBUG] [Thread-303866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:40:15.582 [DEBUG] [Thread-303866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:40:15.582 [INFO] [Thread-303866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] client lang: <none>
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] server lang: <none>
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] kex follows: False
2025-12-24T14:40:15.586 [DEBUG] [Thread-303866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:40:15.587 [DEBUG] [Thread-303866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:40:15.587 [DEBUG] [Thread-303866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:40:15.587 [DEBUG] [Thread-303866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:40:15.587 [DEBUG] [Thread-303866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:40:15.587 [DEBUG] [Thread-303866] [transport.py] [_log()] Compression: none
2025-12-24T14:40:15.587 [DEBUG] [Thread-303866] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:40:15.608 [DEBUG] [Thread-303866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:40:15.611 [DEBUG] [Thread-303866] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:40:15.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:40:15.614 [DEBUG] [Thread-303866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:40:15.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:40:15.617 [DEBUG] [Thread-303866] [transport.py] [_log()] userauth is OK
2025-12-24T14:40:15.617 [DEBUG] [Thread-303866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:40:15.617 [DEBUG] [Thread-303866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:40:15.617 [DEBUG] [Thread-303866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:40:15.617 [DEBUG] [Thread-303866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:40:15.643 [INFO] [Thread-303866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:40:15.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:40:16.225 [DEBUG] [Thread-303866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:40:16.225 [DEBUG] [Thread-303866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:40:16.235 [DEBUG] [Thread-303866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:40:16.267 [DEBUG] [Thread-303866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:40:16.268 [DEBUG] [Thread-303866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:40:16.272 [DEBUG] [Thread-303866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:40:16.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:40:16.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:40:16.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:40:16.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:40:16.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:40:16.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:40:16.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:40:16.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:40:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:40:16.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.527499 -999.00  +22.90  21.19     33   +6.20 1 2 1 1 1   888    0 16.97 0.18 ----- 21.2 21.2 126.0 29.3 27.9 -14.5 27.9 -15.6 28.2 -15.2 28.4 -15.1
2025-12-24T14:40:16.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:40:16.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:40:16.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.527499
2025-12-24T14:40:16.311 [DEBUG] [Thread-303866] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:40:16.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:40:16.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:40:16.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:40:16.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:40:16.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:40:16.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:39:44', tmtdew=19.25, humidity=28.49, cloud=0.0, wind=24.17, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:39:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:40:16.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:40:16.411 [DEBUG] [Thread-303869] [transport.py] [_log()] starting thread (client mode): 0xf57aa380
2025-12-24T14:40:16.411 [DEBUG] [Thread-303869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:40:16.426 [DEBUG] [Thread-303869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:40:16.426 [INFO] [Thread-303869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:40:16.433 [DEBUG] [Thread-303869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:40:16.433 [DEBUG] [Thread-303869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:40:16.433 [DEBUG] [Thread-303869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:40:16.433 [DEBUG] [Thread-303869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] client lang: <none>
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] server lang: <none>
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] kex follows: False
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] Compression: none
2025-12-24T14:40:16.434 [DEBUG] [Thread-303869] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:40:16.493 [DEBUG] [Thread-303869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:40:16.493 [DEBUG] [Thread-303869] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:40:16.494 [DEBUG] [Thread-303869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:40:16.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:40:16.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:40:16.552 [DEBUG] [Thread-303869] [transport.py] [_log()] userauth is OK
2025-12-24T14:40:16.552 [DEBUG] [Thread-303869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:40:16.552 [DEBUG] [Thread-303869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:40:16.552 [DEBUG] [Thread-303869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:40:16.552 [DEBUG] [Thread-303869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:40:16.566 [INFO] [Thread-303869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:40:16.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:40:16.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:40:16.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:40:16.782 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:40:17.399 [DEBUG] [Thread-303869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:40:17.400 [DEBUG] [Thread-303869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:40:17.447 [DEBUG] [Thread-303869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:40:17.447 [DEBUG] [Thread-303869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:40:17.456 [DEBUG] [Thread-303869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:40:17.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:40:17.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:40:17.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:40:17.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:40:17.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:40:17.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:40:17.491 [DEBUG] [Thread-303869] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:40:30.245 [DEBUG] [Thread-303871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:40:44.053 [DEBUG] [Thread-303872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:40:45.372 [DEBUG] [Thread-303873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:40:47.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:40:47.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:40:47.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:40:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 40, 16), 19.17, 28.62, 0.0, 20.94, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:40:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:40:16
2025-12-24T14:40:49.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:40:49.275 [DEBUG] [Thread-303874] [transport.py] [_log()] starting thread (client mode): 0xf572cbb0
2025-12-24T14:40:49.276 [DEBUG] [Thread-303874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:40:49.289 [DEBUG] [Thread-303874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:40:49.289 [INFO] [Thread-303874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:40:49.294 [DEBUG] [Thread-303874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:40:49.294 [DEBUG] [Thread-303874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] client lang: <none>
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] server lang: <none>
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] kex follows: False
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:40:49.295 [DEBUG] [Thread-303874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:40:49.296 [DEBUG] [Thread-303874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:40:49.296 [DEBUG] [Thread-303874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:40:49.296 [DEBUG] [Thread-303874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:40:49.296 [DEBUG] [Thread-303874] [transport.py] [_log()] Compression: none
2025-12-24T14:40:49.296 [DEBUG] [Thread-303874] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:40:49.328 [DEBUG] [Thread-303874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:40:49.332 [DEBUG] [Thread-303874] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:40:49.334 [DEBUG] [Thread-303874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:40:49.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:40:49.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:40:49.339 [DEBUG] [Thread-303874] [transport.py] [_log()] userauth is OK
2025-12-24T14:40:49.339 [DEBUG] [Thread-303874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:40:49.339 [DEBUG] [Thread-303874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:40:49.339 [DEBUG] [Thread-303874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:40:49.339 [DEBUG] [Thread-303874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:40:49.378 [INFO] [Thread-303874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:40:49.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:40:50.002 [DEBUG] [Thread-303874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:40:50.003 [DEBUG] [Thread-303874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:40:50.004 [DEBUG] [Thread-303874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:40:50.043 [DEBUG] [Thread-303874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:40:50.044 [DEBUG] [Thread-303874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:40:50.047 [DEBUG] [Thread-303874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:40:50.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:40:50.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:40:50.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:40:50.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:40:50.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:40:50.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:40:50.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:40:50.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:40:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:40:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.527846 -999.00  +22.80  17.32     34   +6.20 1 2 1 1 1   888    0 16.95 -1.88 ----- 17.3 17.3 123.4 27.2 27.9 -14.3 27.9 -15.6 28.1 -14.7 28.3 -14.4
2025-12-24T14:40:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:40:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:40:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.527846
2025-12-24T14:40:50.075 [DEBUG] [Thread-303874] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:40:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:40:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:40:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:40:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:40:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:40:50.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:40:16', tmtdew=19.17, humidity=28.62, cloud=0.0, wind=20.94, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:40:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:40:50.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:40:50.191 [DEBUG] [Thread-303877] [transport.py] [_log()] starting thread (client mode): 0xf8188250
2025-12-24T14:40:50.191 [DEBUG] [Thread-303877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:40:50.205 [DEBUG] [Thread-303877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:40:50.206 [INFO] [Thread-303877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:40:50.213 [DEBUG] [Thread-303877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:40:50.213 [DEBUG] [Thread-303877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:40:50.213 [DEBUG] [Thread-303877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] client lang: <none>
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] server lang: <none>
2025-12-24T14:40:50.214 [DEBUG] [Thread-303877] [transport.py] [_log()] kex follows: False
2025-12-24T14:40:50.215 [DEBUG] [Thread-303877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:40:50.215 [DEBUG] [Thread-303877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:40:50.215 [DEBUG] [Thread-303877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:40:50.215 [DEBUG] [Thread-303877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:40:50.215 [DEBUG] [Thread-303877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:40:50.215 [DEBUG] [Thread-303877] [transport.py] [_log()] Compression: none
2025-12-24T14:40:50.215 [DEBUG] [Thread-303877] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:40:50.279 [DEBUG] [Thread-303877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:40:50.279 [DEBUG] [Thread-303877] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:40:50.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:40:50.281 [DEBUG] [Thread-303877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:40:50.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:40:50.341 [DEBUG] [Thread-303877] [transport.py] [_log()] userauth is OK
2025-12-24T14:40:50.341 [DEBUG] [Thread-303877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:40:50.341 [DEBUG] [Thread-303877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:40:50.341 [DEBUG] [Thread-303877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:40:50.341 [DEBUG] [Thread-303877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:40:50.360 [INFO] [Thread-303877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:40:50.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:40:50.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:40:51.221 [DEBUG] [Thread-303877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:40:51.222 [DEBUG] [Thread-303877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:40:51.269 [DEBUG] [Thread-303877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:40:51.269 [DEBUG] [Thread-303877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:40:51.277 [DEBUG] [Thread-303877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:40:51.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:40:51.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:40:51.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:40:51.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:40:51.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:40:51.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:40:51.310 [DEBUG] [Thread-303877] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:41:00.438 [DEBUG] [Thread-303879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:41:15.604 [DEBUG] [Thread-303880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:41:16.923 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:41:16.925 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:41:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:41:21.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:41:21.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
2025-12-24T14:41:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 40, 50), 19.17, 28.45, 0.0, 21.91, 22.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:41:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:40:50
2025-12-24T14:41:22.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:41:23.237 [DEBUG] [Thread-303881] [transport.py] [_log()] starting thread (client mode): 0xf81e62f0
2025-12-24T14:41:23.238 [DEBUG] [Thread-303881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:41:23.250 [DEBUG] [Thread-303881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:41:23.250 [INFO] [Thread-303881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:41:23.256 [DEBUG] [Thread-303881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] client lang: <none>
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] server lang: <none>
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] kex follows: False
2025-12-24T14:41:23.257 [DEBUG] [Thread-303881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:41:23.258 [DEBUG] [Thread-303881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:41:23.258 [DEBUG] [Thread-303881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:41:23.258 [DEBUG] [Thread-303881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:41:23.258 [DEBUG] [Thread-303881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:41:23.258 [DEBUG] [Thread-303881] [transport.py] [_log()] Compression: none
2025-12-24T14:41:23.258 [DEBUG] [Thread-303881] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:41:23.293 [DEBUG] [Thread-303881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:41:23.297 [DEBUG] [Thread-303881] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:41:23.298 [DEBUG] [Thread-303881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:41:23.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:41:23.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:41:23.302 [DEBUG] [Thread-303881] [transport.py] [_log()] userauth is OK
2025-12-24T14:41:23.302 [DEBUG] [Thread-303881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:41:23.302 [DEBUG] [Thread-303881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:41:23.302 [DEBUG] [Thread-303881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:41:23.302 [DEBUG] [Thread-303881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:41:23.322 [INFO] [Thread-303881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:41:23.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:41:23.984 [DEBUG] [Thread-303881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:41:23.984 [DEBUG] [Thread-303881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:41:23.985 [DEBUG] [Thread-303881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:41:24.025 [DEBUG] [Thread-303881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:41:24.025 [DEBUG] [Thread-303881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:41:24.029 [DEBUG] [Thread-303881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:41:24.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:41:24.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:41:24.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:41:24.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:41:24.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:41:24.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:41:24.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:41:24.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:41:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:41:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.528193 -999.00  +22.80  19.46     34   +6.20 1 2 1 1 1   888    0 16.94 -4.57 ----- 19.5 19.5 138.6 24.9 27.7 -14.4 27.9 -15.6 28.1 -15.4 28.1 -14.2
2025-12-24T14:41:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:41:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:41:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.528193
2025-12-24T14:41:24.068 [DEBUG] [Thread-303881] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:41:24.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:41:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:41:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:41:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:41:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:41:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:40:50', tmtdew=19.17, humidity=28.45, cloud=0.0, wind=21.91, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:40:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:41:24.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:41:24.176 [DEBUG] [Thread-303884] [transport.py] [_log()] starting thread (client mode): 0xf81e6f50
2025-12-24T14:41:24.176 [DEBUG] [Thread-303884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:41:24.191 [DEBUG] [Thread-303884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:41:24.191 [INFO] [Thread-303884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] client lang: <none>
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] server lang: <none>
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] kex follows: False
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:41:24.199 [DEBUG] [Thread-303884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:41:24.200 [DEBUG] [Thread-303884] [transport.py] [_log()] Compression: none
2025-12-24T14:41:24.200 [DEBUG] [Thread-303884] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:41:24.255 [DEBUG] [Thread-303884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:41:24.255 [DEBUG] [Thread-303884] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:41:24.255 [DEBUG] [Thread-303884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:41:24.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:41:24.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:41:24.314 [DEBUG] [Thread-303884] [transport.py] [_log()] userauth is OK
2025-12-24T14:41:24.314 [DEBUG] [Thread-303884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:41:24.314 [DEBUG] [Thread-303884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:41:24.314 [DEBUG] [Thread-303884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:41:24.314 [DEBUG] [Thread-303884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:41:24.329 [INFO] [Thread-303884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:41:24.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:41:24.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:41:25.177 [DEBUG] [Thread-303884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:41:25.177 [DEBUG] [Thread-303884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:41:25.224 [DEBUG] [Thread-303884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:41:25.224 [DEBUG] [Thread-303884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:41:25.232 [DEBUG] [Thread-303884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:41:25.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:41:25.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:41:25.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:41:25.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:41:25.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:41:25.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:41:25.266 [DEBUG] [Thread-303884] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:41:30.706 [DEBUG] [Thread-303886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:41:44.313 [DEBUG] [Thread-303887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:41:45.837 [DEBUG] [Thread-303888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:41:55.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:41:55.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:41:55.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
2025-12-24T14:41:56.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 41, 22), 19.16, 28.49, 0.0, 20.08, 22.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:41:56.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:41:22
2025-12-24T14:41:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:41:56.418 [DEBUG] [Thread-303889] [transport.py] [_log()] starting thread (client mode): 0xf818b610
2025-12-24T14:41:56.419 [DEBUG] [Thread-303889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:41:56.429 [DEBUG] [Thread-303889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:41:56.429 [INFO] [Thread-303889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] client lang: <none>
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] server lang: <none>
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] kex follows: False
2025-12-24T14:41:56.435 [DEBUG] [Thread-303889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:41:56.436 [DEBUG] [Thread-303889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:41:56.436 [DEBUG] [Thread-303889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:41:56.436 [DEBUG] [Thread-303889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:41:56.436 [DEBUG] [Thread-303889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:41:56.436 [DEBUG] [Thread-303889] [transport.py] [_log()] Compression: none
2025-12-24T14:41:56.436 [DEBUG] [Thread-303889] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:41:56.471 [DEBUG] [Thread-303889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:41:56.475 [DEBUG] [Thread-303889] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:41:56.476 [DEBUG] [Thread-303889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:41:56.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:41:56.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:41:56.480 [DEBUG] [Thread-303889] [transport.py] [_log()] userauth is OK
2025-12-24T14:41:56.480 [DEBUG] [Thread-303889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:41:56.480 [DEBUG] [Thread-303889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:41:56.480 [DEBUG] [Thread-303889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:41:56.480 [DEBUG] [Thread-303889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:41:56.512 [INFO] [Thread-303889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:41:56.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:41:57.119 [DEBUG] [Thread-303889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:41:57.119 [DEBUG] [Thread-303889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:41:57.120 [DEBUG] [Thread-303889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:41:57.160 [DEBUG] [Thread-303889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:41:57.160 [DEBUG] [Thread-303889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:41:57.162 [DEBUG] [Thread-303889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:41:57.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:41:57.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:41:57.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:41:57.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:41:57.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:41:57.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:41:57.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:41:57.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:41:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:41:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.528888 -999.00  +22.80  12.30     34   +6.20 1 2 1 1 1   888    0 16.82 -9.78 ----- 12.3 12.3 150.6 17.9 27.7 -14.6 27.8 -15.6 28.1 -14.6 28.2 -14.8
2025-12-24T14:41:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:41:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:41:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.528888
2025-12-24T14:41:57.191 [DEBUG] [Thread-303889] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:41:57.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:41:57.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:41:57.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:41:57.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:41:57.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:41:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:41:22', tmtdew=19.16, humidity=28.49, cloud=0.0, wind=20.08, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:41:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:41:57.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:41:57.296 [DEBUG] [Thread-303892] [transport.py] [_log()] starting thread (client mode): 0xf57a9f60
2025-12-24T14:41:57.297 [DEBUG] [Thread-303892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:41:57.311 [DEBUG] [Thread-303892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:41:57.311 [INFO] [Thread-303892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:41:57.318 [DEBUG] [Thread-303892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:41:57.318 [DEBUG] [Thread-303892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:41:57.318 [DEBUG] [Thread-303892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] client lang: <none>
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] server lang: <none>
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] kex follows: False
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] Compression: none
2025-12-24T14:41:57.319 [DEBUG] [Thread-303892] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:41:57.374 [DEBUG] [Thread-303892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:41:57.374 [DEBUG] [Thread-303892] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:41:57.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:41:57.375 [DEBUG] [Thread-303892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:41:57.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:41:57.432 [DEBUG] [Thread-303892] [transport.py] [_log()] userauth is OK
2025-12-24T14:41:57.432 [DEBUG] [Thread-303892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:41:57.432 [DEBUG] [Thread-303892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:41:57.432 [DEBUG] [Thread-303892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:41:57.432 [DEBUG] [Thread-303892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:41:57.446 [INFO] [Thread-303892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:41:57.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:41:57.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:41:58.306 [DEBUG] [Thread-303892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:41:58.306 [DEBUG] [Thread-303892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:41:58.356 [DEBUG] [Thread-303892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:41:58.356 [DEBUG] [Thread-303892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:41:58.366 [DEBUG] [Thread-303892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:41:58.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:41:58.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:41:58.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:41:58.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:41:58.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:41:58.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:41:58.401 [DEBUG] [Thread-303892] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:42:00.899 [DEBUG] [Thread-303894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:42:16.157 [DEBUG] [Thread-303895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:42:17.074 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:42:17.075 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:42:28.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:42:28.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:42: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
2025-12-24T14:42:29.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 41, 56), 19.1, 28.42, 0.0, 19.27, 22.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:42:29.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:41:56
2025-12-24T14:42:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:42:30.116 [DEBUG] [Thread-303896] [transport.py] [_log()] starting thread (client mode): 0xf57aa530
2025-12-24T14:42:30.118 [DEBUG] [Thread-303896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:42:30.124 [DEBUG] [Thread-303896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:42:30.124 [INFO] [Thread-303896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] client lang: <none>
2025-12-24T14:42:30.130 [DEBUG] [Thread-303896] [transport.py] [_log()] server lang: <none>
2025-12-24T14:42:30.131 [DEBUG] [Thread-303896] [transport.py] [_log()] kex follows: False
2025-12-24T14:42:30.131 [DEBUG] [Thread-303896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:42:30.131 [DEBUG] [Thread-303896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:42:30.131 [DEBUG] [Thread-303896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:42:30.132 [DEBUG] [Thread-303896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:42:30.132 [DEBUG] [Thread-303896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:42:30.132 [DEBUG] [Thread-303896] [transport.py] [_log()] Compression: none
2025-12-24T14:42:30.132 [DEBUG] [Thread-303896] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:42:30.166 [DEBUG] [Thread-303896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:42:30.170 [DEBUG] [Thread-303896] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:42:30.171 [DEBUG] [Thread-303896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:42:30.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:42:30.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:42:30.175 [DEBUG] [Thread-303896] [transport.py] [_log()] userauth is OK
2025-12-24T14:42:30.175 [DEBUG] [Thread-303896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:42:30.175 [DEBUG] [Thread-303896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:42:30.175 [DEBUG] [Thread-303896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:42:30.175 [DEBUG] [Thread-303896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:42:30.194 [INFO] [Thread-303896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:42:30.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:42:30.842 [DEBUG] [Thread-303896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:42:30.842 [DEBUG] [Thread-303896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:42:30.843 [DEBUG] [Thread-303896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:42:30.884 [DEBUG] [Thread-303896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:42:30.884 [DEBUG] [Thread-303896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:42:30.887 [DEBUG] [Thread-303896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:42:30.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:42:30.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:42:30.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:42:30.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:42:30.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:42:30.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:42:30.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:42:30.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:42:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:42:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.529235 -999.00  +23.10  10.04     33   +6.30 1 2 1 1 1   888    0 16.48 -10.34 ----- 10.0 10.0 134.3 20.5 27.7 -15.6 27.9 -15.5 28.1 -14.7 28.3 -14.5
2025-12-24T14:42:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:42:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:42:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.529235
2025-12-24T14:42:30.919 [DEBUG] [Thread-303896] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:42:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:42:30.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:42:30.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:42:30.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:42:30.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:42:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:41:56', tmtdew=19.1, humidity=28.42, cloud=0.0, wind=19.27, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:42:05.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:42:31.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:42:31.025 [DEBUG] [Thread-303899] [transport.py] [_log()] starting thread (client mode): 0xf81e76a0
2025-12-24T14:42:31.025 [DEBUG] [Thread-303899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:42:31.040 [DEBUG] [Thread-303899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:42:31.040 [INFO] [Thread-303899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] client lang: <none>
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] server lang: <none>
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] kex follows: False
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] Compression: none
2025-12-24T14:42:31.048 [DEBUG] [Thread-303899] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:42:31.107 [DEBUG] [Thread-303899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:42:31.107 [DEBUG] [Thread-303899] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:42:31.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:42:31.108 [DEBUG] [Thread-303899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:42:31.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:42:31.164 [DEBUG] [Thread-303899] [transport.py] [_log()] userauth is OK
2025-12-24T14:42:31.164 [DEBUG] [Thread-303899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:42:31.164 [DEBUG] [Thread-303899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:42:31.164 [DEBUG] [Thread-303899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:42:31.164 [DEBUG] [Thread-303899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:42:31.178 [INFO] [Thread-303899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:42:31.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:42:31.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:42:31.236 [DEBUG] [Thread-303901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:42:32.023 [DEBUG] [Thread-303899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:42:32.023 [DEBUG] [Thread-303899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:42:32.073 [DEBUG] [Thread-303899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:42:32.073 [DEBUG] [Thread-303899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:42:32.085 [DEBUG] [Thread-303899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:42:32.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:42:32.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:42:32.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:42:32.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:42:32.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:42:32.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:42:32.127 [DEBUG] [Thread-303899] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:42:44.671 [DEBUG] [Thread-303902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:42:46.459 [DEBUG] [Thread-303903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:43:01.585 [DEBUG] [Thread-303904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:43:02.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:43:02.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:43:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:43:03.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 42, 29), 19.06, 28.47, 0.0, 17.36, 22.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:43:03.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:42:29
2025-12-24T14:43:03.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:43:04.053 [DEBUG] [Thread-303905] [transport.py] [_log()] starting thread (client mode): 0xf81e7a00
2025-12-24T14:43:04.054 [DEBUG] [Thread-303905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:43:04.055 [DEBUG] [Thread-303905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:43:04.055 [INFO] [Thread-303905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] client lang: <none>
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] server lang: <none>
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] kex follows: False
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:43:04.060 [DEBUG] [Thread-303905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:43:04.061 [DEBUG] [Thread-303905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:43:04.061 [DEBUG] [Thread-303905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:43:04.061 [DEBUG] [Thread-303905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:43:04.061 [DEBUG] [Thread-303905] [transport.py] [_log()] Compression: none
2025-12-24T14:43:04.061 [DEBUG] [Thread-303905] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:43:04.084 [DEBUG] [Thread-303905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:43:04.087 [DEBUG] [Thread-303905] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:43:04.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:43:04.088 [DEBUG] [Thread-303905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:43:04.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:43:04.091 [DEBUG] [Thread-303905] [transport.py] [_log()] userauth is OK
2025-12-24T14:43:04.091 [DEBUG] [Thread-303905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:43:04.091 [DEBUG] [Thread-303905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:43:04.091 [DEBUG] [Thread-303905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:43:04.091 [DEBUG] [Thread-303905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:43:04.109 [INFO] [Thread-303905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:43:04.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:43:04.793 [DEBUG] [Thread-303905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:43:04.793 [DEBUG] [Thread-303905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:43:04.793 [DEBUG] [Thread-303905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:43:04.834 [DEBUG] [Thread-303905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:43:04.834 [DEBUG] [Thread-303905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:43:04.837 [DEBUG] [Thread-303905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:43:04.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:43:04.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:43:04.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:43:04.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:43:04.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:43:04.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:43:04.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:43:04.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:43:04.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:43:04.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.529582 -999.00  +23.30  14.82     33   +6.30 1 2 1 1 1   888    0 16.84 -9.91 ----- 14.8 14.8 155.4 21.7 27.9 -15.7 27.8 -16.2 28.1 -15.4 28.3 -14.5
2025-12-24T14:43:04.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:43:04.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:43:04.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.529582
2025-12-24T14:43:04.864 [DEBUG] [Thread-303905] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:43:04.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:43:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:43:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:43:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:43:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:43:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:42:29', tmtdew=19.06, humidity=28.47, cloud=0.0, wind=17.36, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:42:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:43:04.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:43:04.964 [DEBUG] [Thread-303908] [transport.py] [_log()] starting thread (client mode): 0xf81f02e0
2025-12-24T14:43:04.964 [DEBUG] [Thread-303908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:43:04.980 [DEBUG] [Thread-303908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:43:04.980 [INFO] [Thread-303908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] client lang: <none>
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] server lang: <none>
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] kex follows: False
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:43:04.987 [DEBUG] [Thread-303908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:43:04.988 [DEBUG] [Thread-303908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:43:04.988 [DEBUG] [Thread-303908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:43:04.988 [DEBUG] [Thread-303908] [transport.py] [_log()] Compression: none
2025-12-24T14:43:04.988 [DEBUG] [Thread-303908] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:43:05.041 [DEBUG] [Thread-303908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:43:05.042 [DEBUG] [Thread-303908] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:43:05.042 [DEBUG] [Thread-303908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:43:05.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:43:05.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:43:05.099 [DEBUG] [Thread-303908] [transport.py] [_log()] userauth is OK
2025-12-24T14:43:05.100 [DEBUG] [Thread-303908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:43:05.100 [DEBUG] [Thread-303908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:43:05.100 [DEBUG] [Thread-303908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:43:05.100 [DEBUG] [Thread-303908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:43:05.113 [INFO] [Thread-303908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:43:05.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:43:05.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:43:06.015 [DEBUG] [Thread-303908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:43:06.015 [DEBUG] [Thread-303908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:43:06.054 [DEBUG] [Thread-303908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:43:06.054 [DEBUG] [Thread-303908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:43:06.063 [DEBUG] [Thread-303908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:43:06.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:43:06.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')
2025-12-24T14:43:06.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:43:06.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:43:06.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:43:06.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:43:06.097 [DEBUG] [Thread-303908] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:43:16.710 [DEBUG] [Thread-303910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:43:17.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:43:17.219 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:43:31.893 [DEBUG] [Thread-303911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:43:36.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:43:36.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:43:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:43:37.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 43, 1), 18.93, 28.7, 0.0, 16.15, 22.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:43:37.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:43:01
2025-12-24T14:43:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:43:37.718 [DEBUG] [Thread-303912] [transport.py] [_log()] starting thread (client mode): 0xf81f27d0
2025-12-24T14:43:37.719 [DEBUG] [Thread-303912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:43:37.732 [DEBUG] [Thread-303912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:43:37.732 [INFO] [Thread-303912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:43:37.737 [DEBUG] [Thread-303912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:43:37.737 [DEBUG] [Thread-303912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:43:37.737 [DEBUG] [Thread-303912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:43:37.737 [DEBUG] [Thread-303912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] client lang: <none>
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] server lang: <none>
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] kex follows: False
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:43:37.738 [DEBUG] [Thread-303912] [transport.py] [_log()] Compression: none
2025-12-24T14:43:37.739 [DEBUG] [Thread-303912] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:43:37.774 [DEBUG] [Thread-303912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:43:37.777 [DEBUG] [Thread-303912] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:43:37.779 [DEBUG] [Thread-303912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:43:37.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:43:37.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:43:37.782 [DEBUG] [Thread-303912] [transport.py] [_log()] userauth is OK
2025-12-24T14:43:37.782 [DEBUG] [Thread-303912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:43:37.783 [DEBUG] [Thread-303912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:43:37.783 [DEBUG] [Thread-303912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:43:37.783 [DEBUG] [Thread-303912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:43:37.816 [INFO] [Thread-303912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:43:37.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:43:38.471 [DEBUG] [Thread-303912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:43:38.471 [DEBUG] [Thread-303912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:43:38.471 [DEBUG] [Thread-303912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:43:38.512 [DEBUG] [Thread-303912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:43:38.512 [DEBUG] [Thread-303912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:43:38.514 [DEBUG] [Thread-303912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:43:38.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:43:38.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:43:38.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:43:38.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:43:38.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:43:38.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:43:38.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:43:38.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:43:38.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:43:38.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.529929 -999.00  +23.00   8.63     33   +6.20 1 2 1 1 1   888    0 16.89 -8.71 ----- 8.6 8.6 165.4 17.5 27.8 -17.1 27.7 -16.6 27.9 -15.8 28.2 -15.4
2025-12-24T14:43:38.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:43:38.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:43:38.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.529929
2025-12-24T14:43:38.547 [DEBUG] [Thread-303912] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:43:38.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:43:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:43:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:43:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:43:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:43:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:43:01', tmtdew=18.93, humidity=28.7, cloud=0.0, wind=16.15, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:43:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:43:38.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:43:38.641 [DEBUG] [Thread-303915] [transport.py] [_log()] starting thread (client mode): 0xf8188e50
2025-12-24T14:43:38.641 [DEBUG] [Thread-303915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:43:38.661 [DEBUG] [Thread-303915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:43:38.661 [INFO] [Thread-303915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:43:38.668 [DEBUG] [Thread-303915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:43:38.668 [DEBUG] [Thread-303915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:43:38.668 [DEBUG] [Thread-303915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:43:38.668 [DEBUG] [Thread-303915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:43:38.668 [DEBUG] [Thread-303915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:43:38.668 [DEBUG] [Thread-303915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:43:38.668 [DEBUG] [Thread-303915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] client lang: <none>
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] server lang: <none>
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] kex follows: False
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] Compression: none
2025-12-24T14:43:38.669 [DEBUG] [Thread-303915] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:43:38.730 [DEBUG] [Thread-303915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:43:38.730 [DEBUG] [Thread-303915] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:43:38.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:43:38.731 [DEBUG] [Thread-303915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:43:38.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:43:38.788 [DEBUG] [Thread-303915] [transport.py] [_log()] userauth is OK
2025-12-24T14:43:38.788 [DEBUG] [Thread-303915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:43:38.788 [DEBUG] [Thread-303915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:43:38.788 [DEBUG] [Thread-303915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:43:38.788 [DEBUG] [Thread-303915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:43:38.810 [INFO] [Thread-303915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:43:38.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:43:38.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:43:39.699 [DEBUG] [Thread-303915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:43:39.699 [DEBUG] [Thread-303915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:43:39.737 [DEBUG] [Thread-303915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:43:39.737 [DEBUG] [Thread-303915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:43:39.745 [DEBUG] [Thread-303915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:43:39.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:43:39.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:43:39.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
2025-12-24T14:43:39.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:43:39.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:43:39.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:43:39.779 [DEBUG] [Thread-303915] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:43:44.993 [DEBUG] [Thread-303917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:43:46.967 [DEBUG] [Thread-303918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:44:02.152 [DEBUG] [Thread-303919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:44:09.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:44:09.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:44:09.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:44:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 43, 35), 18.97, 29.09, 0.0, 18.14, 22.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:44:10.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:43:35
2025-12-24T14:44:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:44:11.117 [DEBUG] [Thread-303920] [transport.py] [_log()] starting thread (client mode): 0xf57a9930
2025-12-24T14:44:11.118 [DEBUG] [Thread-303920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:44:11.125 [DEBUG] [Thread-303920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:44:11.125 [INFO] [Thread-303920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:44:11.130 [DEBUG] [Thread-303920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] client lang: <none>
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] server lang: <none>
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] kex follows: False
2025-12-24T14:44:11.131 [DEBUG] [Thread-303920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:44:11.132 [DEBUG] [Thread-303920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:44:11.132 [DEBUG] [Thread-303920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:44:11.132 [DEBUG] [Thread-303920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:44:11.132 [DEBUG] [Thread-303920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:44:11.132 [DEBUG] [Thread-303920] [transport.py] [_log()] Compression: none
2025-12-24T14:44:11.132 [DEBUG] [Thread-303920] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:44:11.154 [DEBUG] [Thread-303920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:44:11.157 [DEBUG] [Thread-303920] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:44:11.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:44:11.160 [DEBUG] [Thread-303920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:44:11.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:44:11.162 [DEBUG] [Thread-303920] [transport.py] [_log()] userauth is OK
2025-12-24T14:44:11.162 [DEBUG] [Thread-303920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:44:11.162 [DEBUG] [Thread-303920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:44:11.162 [DEBUG] [Thread-303920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:44:11.162 [DEBUG] [Thread-303920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:44:11.181 [INFO] [Thread-303920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:44:11.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:44:11.989 [DEBUG] [Thread-303920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:44:11.989 [DEBUG] [Thread-303920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:44:11.992 [DEBUG] [Thread-303920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:44:12.030 [DEBUG] [Thread-303920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:44:12.030 [DEBUG] [Thread-303920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:44:12.034 [DEBUG] [Thread-303920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:44:12.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:44:12.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:44:12.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:44:12.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:44:12.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:44:12.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:44:12.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:44:12.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:44:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:44:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.530277 -999.00  +22.90   9.97     34   +6.20 1 2 1 1 1   888    0 16.63 -7.55 ----- 10.0 10.0 139.4 12.5 27.8 -16.1 27.6 -16.6 27.9 -15.4 28.2 -14.9
2025-12-24T14:44:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:44:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:44:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.530277
2025-12-24T14:44:12.071 [DEBUG] [Thread-303920] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:44:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:44:12.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:44:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:44:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:44:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:44:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:43:35', tmtdew=18.97, humidity=29.09, cloud=0.0, wind=18.14, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:43:35.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:44:12.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:44:12.182 [DEBUG] [Thread-303923] [transport.py] [_log()] starting thread (client mode): 0xf57a8ca0
2025-12-24T14:44:12.182 [DEBUG] [Thread-303923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:44:12.196 [DEBUG] [Thread-303923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:44:12.196 [INFO] [Thread-303923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] client lang: <none>
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] server lang: <none>
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] kex follows: False
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:44:12.204 [DEBUG] [Thread-303923] [transport.py] [_log()] Compression: none
2025-12-24T14:44:12.205 [DEBUG] [Thread-303923] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:44:12.259 [DEBUG] [Thread-303923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:44:12.260 [DEBUG] [Thread-303923] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:44:12.260 [DEBUG] [Thread-303923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:44:12.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:44:12.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:44:12.316 [DEBUG] [Thread-303923] [transport.py] [_log()] userauth is OK
2025-12-24T14:44:12.316 [DEBUG] [Thread-303923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:44:12.316 [DEBUG] [Thread-303923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:44:12.316 [DEBUG] [Thread-303923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:44:12.316 [DEBUG] [Thread-303923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:44:12.330 [INFO] [Thread-303923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:44:12.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:44:12.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:44:13.163 [DEBUG] [Thread-303923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:44:13.163 [DEBUG] [Thread-303923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:44:13.210 [DEBUG] [Thread-303923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:44:13.211 [DEBUG] [Thread-303923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:44:13.219 [DEBUG] [Thread-303923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:44:13.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:44:13.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:44:13.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
2025-12-24T14:44:13.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:44:13.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:44:13.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:44:13.256 [DEBUG] [Thread-303923] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:44:17.248 [DEBUG] [Thread-303925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:44:17.360 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:44:17.361 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:44:32.406 [DEBUG] [Thread-303926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:44:43.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:44:43.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:44:43.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:44:44.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 44, 8), 19.1, 28.84, 0.0, 17.03, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:44:44.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:44:08
2025-12-24T14:44:44.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:44:44.731 [DEBUG] [Thread-303927] [transport.py] [_log()] starting thread (client mode): 0xf5750e20
2025-12-24T14:44:44.732 [DEBUG] [Thread-303927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:44:44.739 [DEBUG] [Thread-303927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:44:44.740 [INFO] [Thread-303927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] client lang: <none>
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] server lang: <none>
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] kex follows: False
2025-12-24T14:44:44.745 [DEBUG] [Thread-303927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:44:44.746 [DEBUG] [Thread-303927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:44:44.746 [DEBUG] [Thread-303927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:44:44.746 [DEBUG] [Thread-303927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:44:44.746 [DEBUG] [Thread-303927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:44:44.746 [DEBUG] [Thread-303927] [transport.py] [_log()] Compression: none
2025-12-24T14:44:44.746 [DEBUG] [Thread-303927] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:44:44.775 [DEBUG] [Thread-303927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:44:44.778 [DEBUG] [Thread-303927] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:44:44.780 [DEBUG] [Thread-303927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:44:44.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:44:44.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:44:44.783 [DEBUG] [Thread-303927] [transport.py] [_log()] userauth is OK
2025-12-24T14:44:44.783 [DEBUG] [Thread-303927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:44:44.783 [DEBUG] [Thread-303927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:44:44.783 [DEBUG] [Thread-303927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:44:44.783 [DEBUG] [Thread-303927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:44:44.795 [INFO] [Thread-303927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:44:44.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:44:45.251 [DEBUG] [Thread-303929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:44:45.412 [DEBUG] [Thread-303927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:44:45.412 [DEBUG] [Thread-303927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:44:45.413 [DEBUG] [Thread-303927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:44:45.453 [DEBUG] [Thread-303927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:44:45.453 [DEBUG] [Thread-303927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:44:45.457 [DEBUG] [Thread-303927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:44:45.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:44:45.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:44:45.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:44:45.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:44:45.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:44:45.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:44:45.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:44:45.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:44:45.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:44:45.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.530624 -999.00  +22.90  18.68     33   +6.20 1 2 1 1 1   888    0 16.80 -6.09 ----- 18.7 18.7 176.4 25.9 27.7 -17.0 27.4 -20.4 27.9 -16.2 28.2 -15.5
2025-12-24T14:44:45.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:44:45.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:44:45.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.530624
2025-12-24T14:44:45.492 [DEBUG] [Thread-303927] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:44:45.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:44:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:44:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:44:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:44:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:44:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:44:08', tmtdew=19.1, humidity=28.84, cloud=0.0, wind=17.03, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:44:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:44:45.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:44:45.588 [DEBUG] [Thread-303931] [transport.py] [_log()] starting thread (client mode): 0xf57522c0
2025-12-24T14:44:45.588 [DEBUG] [Thread-303931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:44:45.603 [DEBUG] [Thread-303931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:44:45.603 [INFO] [Thread-303931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] client lang: <none>
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] server lang: <none>
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] kex follows: False
2025-12-24T14:44:45.610 [DEBUG] [Thread-303931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:44:45.611 [DEBUG] [Thread-303931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:44:45.611 [DEBUG] [Thread-303931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:44:45.611 [DEBUG] [Thread-303931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:44:45.611 [DEBUG] [Thread-303931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:44:45.611 [DEBUG] [Thread-303931] [transport.py] [_log()] Compression: none
2025-12-24T14:44:45.611 [DEBUG] [Thread-303931] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:44:45.668 [DEBUG] [Thread-303931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:44:45.668 [DEBUG] [Thread-303931] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:44:45.668 [DEBUG] [Thread-303931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:44:45.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:44:45.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:44:45.729 [DEBUG] [Thread-303931] [transport.py] [_log()] userauth is OK
2025-12-24T14:44:45.729 [DEBUG] [Thread-303931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:44:45.729 [DEBUG] [Thread-303931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:44:45.729 [DEBUG] [Thread-303931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:44:45.729 [DEBUG] [Thread-303931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:44:45.743 [INFO] [Thread-303931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:44:45.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:44:45.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:44:46.543 [DEBUG] [Thread-303931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:44:46.543 [DEBUG] [Thread-303931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:44:46.591 [DEBUG] [Thread-303931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:44:46.591 [DEBUG] [Thread-303931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:44:46.600 [DEBUG] [Thread-303931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:44:46.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:44:46.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:44:46.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:44:46.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:44:46.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:44:46.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:44:46.636 [DEBUG] [Thread-303931] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:44:47.490 [DEBUG] [Thread-303933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:45:02.631 [DEBUG] [Thread-303934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:45:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:45:16.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:45:16.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
2025-12-24T14:45:17.501 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:45:17.503 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:45:17.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 44, 41), 19.05, 28.92, 0.0, 15.76, 22.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:45:17.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:44:41
2025-12-24T14:45:17.710 [DEBUG] [Thread-303935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:45:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:45:18.053 [DEBUG] [Thread-303936] [transport.py] [_log()] starting thread (client mode): 0xf81e61a0
2025-12-24T14:45:18.054 [DEBUG] [Thread-303936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:45:18.069 [DEBUG] [Thread-303936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:45:18.069 [INFO] [Thread-303936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] client lang: <none>
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] server lang: <none>
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] kex follows: False
2025-12-24T14:45:18.074 [DEBUG] [Thread-303936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:45:18.075 [DEBUG] [Thread-303936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:45:18.075 [DEBUG] [Thread-303936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:45:18.075 [DEBUG] [Thread-303936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:45:18.075 [DEBUG] [Thread-303936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:45:18.075 [DEBUG] [Thread-303936] [transport.py] [_log()] Compression: none
2025-12-24T14:45:18.075 [DEBUG] [Thread-303936] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:45:18.108 [DEBUG] [Thread-303936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:45:18.111 [DEBUG] [Thread-303936] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:45:18.113 [DEBUG] [Thread-303936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:45:18.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:45:18.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:45:18.117 [DEBUG] [Thread-303936] [transport.py] [_log()] userauth is OK
2025-12-24T14:45:18.117 [DEBUG] [Thread-303936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:45:18.117 [DEBUG] [Thread-303936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:45:18.117 [DEBUG] [Thread-303936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:45:18.117 [DEBUG] [Thread-303936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:45:18.135 [INFO] [Thread-303936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:45:18.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:45:19.097 [DEBUG] [Thread-303936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:45:19.098 [DEBUG] [Thread-303936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:45:19.099 [DEBUG] [Thread-303936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:45:19.138 [DEBUG] [Thread-303936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:45:19.138 [DEBUG] [Thread-303936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:45:19.142 [DEBUG] [Thread-303936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:45:19.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:45:19.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:45:19.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:45:19.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:45:19.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:45:19.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:45:19.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:45:19.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:45:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:45:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.530971 -999.00  +22.70  12.98     34   +6.10 1 2 1 1 1   888    0 16.74 -5.14 ----- 13.0 13.0 157.6 20.5 27.6 -17.2 27.5 -16.4 27.7 -15.6 28.1 -15.2
2025-12-24T14:45:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:45:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:45:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.530971
2025-12-24T14:45:19.180 [DEBUG] [Thread-303936] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:45:19.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:45:19.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:45:19.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:45:19.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:45:19.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:45:19.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:44:41', tmtdew=19.05, humidity=28.92, cloud=0.0, wind=15.76, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:44:35.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:45:19.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:45:19.279 [DEBUG] [Thread-303939] [transport.py] [_log()] starting thread (client mode): 0xf57a8ca0
2025-12-24T14:45:19.279 [DEBUG] [Thread-303939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:45:19.294 [DEBUG] [Thread-303939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:45:19.294 [INFO] [Thread-303939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] client lang: <none>
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] server lang: <none>
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] kex follows: False
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:45:19.301 [DEBUG] [Thread-303939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:45:19.302 [DEBUG] [Thread-303939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:45:19.302 [DEBUG] [Thread-303939] [transport.py] [_log()] Compression: none
2025-12-24T14:45:19.302 [DEBUG] [Thread-303939] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:45:19.356 [DEBUG] [Thread-303939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:45:19.357 [DEBUG] [Thread-303939] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:45:19.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:45:19.357 [DEBUG] [Thread-303939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:45:19.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:45:19.418 [DEBUG] [Thread-303939] [transport.py] [_log()] userauth is OK
2025-12-24T14:45:19.418 [DEBUG] [Thread-303939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:45:19.418 [DEBUG] [Thread-303939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:45:19.418 [DEBUG] [Thread-303939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:45:19.418 [DEBUG] [Thread-303939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:45:19.432 [INFO] [Thread-303939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:45:19.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:45:19.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:45:20.276 [DEBUG] [Thread-303939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:45:20.276 [DEBUG] [Thread-303939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:45:20.323 [DEBUG] [Thread-303939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:45:20.323 [DEBUG] [Thread-303939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:45:20.332 [DEBUG] [Thread-303939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:45:20.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:45:20.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:45:20.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:45:20.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:45:20.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:45:20.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:45:20.365 [DEBUG] [Thread-303939] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:45:32.822 [DEBUG] [Thread-303941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:45:45.562 [DEBUG] [Thread-303942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:45:48.055 [DEBUG] [Thread-303943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:45:50.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:45:50.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:45:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:45:51.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 45, 14), 19.21, 28.66, 0.0, 21.31, 22.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:45:51.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:45:14
2025-12-24T14:45:51.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:45:51.765 [DEBUG] [Thread-303944] [transport.py] [_log()] starting thread (client mode): 0xf57a8a90
2025-12-24T14:45:51.766 [DEBUG] [Thread-303944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:45:51.771 [DEBUG] [Thread-303944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:45:51.772 [INFO] [Thread-303944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] client lang: <none>
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] server lang: <none>
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] kex follows: False
2025-12-24T14:45:51.775 [DEBUG] [Thread-303944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:45:51.776 [DEBUG] [Thread-303944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:45:51.776 [DEBUG] [Thread-303944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:45:51.776 [DEBUG] [Thread-303944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:45:51.776 [DEBUG] [Thread-303944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:45:51.776 [DEBUG] [Thread-303944] [transport.py] [_log()] Compression: none
2025-12-24T14:45:51.776 [DEBUG] [Thread-303944] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:45:51.805 [DEBUG] [Thread-303944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:45:51.807 [DEBUG] [Thread-303944] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:45:51.808 [DEBUG] [Thread-303944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:45:51.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:45:51.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:45:51.849 [DEBUG] [Thread-303944] [transport.py] [_log()] userauth is OK
2025-12-24T14:45:51.849 [DEBUG] [Thread-303944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:45:51.849 [DEBUG] [Thread-303944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:45:51.849 [DEBUG] [Thread-303944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:45:51.849 [DEBUG] [Thread-303944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:45:51.882 [INFO] [Thread-303944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:45:51.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:45:52.514 [DEBUG] [Thread-303944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:45:52.515 [DEBUG] [Thread-303944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:45:52.525 [DEBUG] [Thread-303944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:45:52.555 [DEBUG] [Thread-303944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:45:52.555 [DEBUG] [Thread-303944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:45:52.559 [DEBUG] [Thread-303944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:45:52.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:45:52.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:45:52.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:45:52.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:45:52.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:45:52.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:45:52.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:45:52.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:45:52.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:45:52.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.531318 -999.00  +22.70  15.04     34   +6.10 1 2 1 1 1   888    0 16.75 -5.84 ----- 15.0 15.0 176.6 21.7 27.6 -17.1 27.4 -16.8 27.7 -15.5 28.1 -14.8
2025-12-24T14:45:52.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:45:52.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:45:52.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.531318
2025-12-24T14:45:52.595 [DEBUG] [Thread-303944] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:45:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:45:14', tmtdew=19.21, humidity=28.66, cloud=0.0, wind=21.31, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:45:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:45:52.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:45:52.710 [DEBUG] [Thread-303947] [transport.py] [_log()] starting thread (client mode): 0xf57bd5d0
2025-12-24T14:45:52.710 [DEBUG] [Thread-303947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:45:52.725 [DEBUG] [Thread-303947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:45:52.725 [INFO] [Thread-303947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:45:52.732 [DEBUG] [Thread-303947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:45:52.732 [DEBUG] [Thread-303947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] client lang: <none>
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] server lang: <none>
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] kex follows: False
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] Compression: none
2025-12-24T14:45:52.733 [DEBUG] [Thread-303947] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:45:52.794 [DEBUG] [Thread-303947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:45:52.794 [DEBUG] [Thread-303947] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:45:52.795 [DEBUG] [Thread-303947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:45:52.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:45:52.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:45:52.850 [DEBUG] [Thread-303947] [transport.py] [_log()] userauth is OK
2025-12-24T14:45:52.850 [DEBUG] [Thread-303947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:45:52.851 [DEBUG] [Thread-303947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:45:52.851 [DEBUG] [Thread-303947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:45:52.851 [DEBUG] [Thread-303947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:45:52.869 [INFO] [Thread-303947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:45:52.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:45:52.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:45:53.689 [DEBUG] [Thread-303947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:45:53.689 [DEBUG] [Thread-303947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:45:53.736 [DEBUG] [Thread-303947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:45:53.737 [DEBUG] [Thread-303947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:45:53.745 [DEBUG] [Thread-303947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:45:53.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:45:53.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:45:53.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:45:53.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:45:53.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:45:53.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:45:53.780 [DEBUG] [Thread-303947] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:46:03.135 [DEBUG] [Thread-303949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:46:17.660 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:46:17.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:46:18.295 [DEBUG] [Thread-303950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:46:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:46:23.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:46:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:46:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 45, 48), 19.26, 28.47, 0.0, 19.11, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:46:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:45:48
2025-12-24T14:46:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:46:25.488 [DEBUG] [Thread-303951] [transport.py] [_log()] starting thread (client mode): 0xf57bdff0
2025-12-24T14:46:25.489 [DEBUG] [Thread-303951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:46:25.501 [DEBUG] [Thread-303951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:46:25.501 [INFO] [Thread-303951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:46:25.506 [DEBUG] [Thread-303951] [transport.py] [_log()] client lang: <none>
2025-12-24T14:46:25.507 [DEBUG] [Thread-303951] [transport.py] [_log()] server lang: <none>
2025-12-24T14:46:25.507 [DEBUG] [Thread-303951] [transport.py] [_log()] kex follows: False
2025-12-24T14:46:25.507 [DEBUG] [Thread-303951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:46:25.507 [DEBUG] [Thread-303951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:46:25.507 [DEBUG] [Thread-303951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:46:25.508 [DEBUG] [Thread-303951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:46:25.508 [DEBUG] [Thread-303951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:46:25.508 [DEBUG] [Thread-303951] [transport.py] [_log()] Compression: none
2025-12-24T14:46:25.508 [DEBUG] [Thread-303951] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:46:25.532 [DEBUG] [Thread-303951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:46:25.535 [DEBUG] [Thread-303951] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:46:25.536 [DEBUG] [Thread-303951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:46:25.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:46:25.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:46:25.539 [DEBUG] [Thread-303951] [transport.py] [_log()] userauth is OK
2025-12-24T14:46:25.539 [DEBUG] [Thread-303951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:46:25.539 [DEBUG] [Thread-303951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:46:25.539 [DEBUG] [Thread-303951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:46:25.539 [DEBUG] [Thread-303951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:46:25.551 [INFO] [Thread-303951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:46:25.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:46:26.169 [DEBUG] [Thread-303951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:46:26.169 [DEBUG] [Thread-303951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:46:26.170 [DEBUG] [Thread-303951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:46:26.210 [DEBUG] [Thread-303951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:46:26.210 [DEBUG] [Thread-303951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:46:26.213 [DEBUG] [Thread-303951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:46:26.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:46:26.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:46:26.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:46:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:46:26.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:46:26.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:46:26.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:46:26.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:46:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:46:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.531665 -999.00  +22.50  17.60     34   +6.10 1 2 1 1 1   888    0 16.62 -7.42 ----- 17.6 17.6 144.4 24.6 27.5 -16.3 27.3 -16.6 27.5 -15.4 27.9 -15.0
2025-12-24T14:46:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:46:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:46:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.531665
2025-12-24T14:46:26.250 [DEBUG] [Thread-303951] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:46:26.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:46:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:46:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:46:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:46:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:46:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:45:48', tmtdew=19.26, humidity=28.47, cloud=0.0, wind=19.11, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:45:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:46:26.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:46:26.364 [DEBUG] [Thread-303954] [transport.py] [_log()] starting thread (client mode): 0xf81f0790
2025-12-24T14:46:26.364 [DEBUG] [Thread-303954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:46:26.380 [DEBUG] [Thread-303954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:46:26.380 [INFO] [Thread-303954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:46:26.387 [DEBUG] [Thread-303954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:46:26.387 [DEBUG] [Thread-303954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] client lang: <none>
2025-12-24T14:46:26.388 [DEBUG] [Thread-303954] [transport.py] [_log()] server lang: <none>
2025-12-24T14:46:26.389 [DEBUG] [Thread-303954] [transport.py] [_log()] kex follows: False
2025-12-24T14:46:26.389 [DEBUG] [Thread-303954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:46:26.389 [DEBUG] [Thread-303954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:46:26.389 [DEBUG] [Thread-303954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:46:26.389 [DEBUG] [Thread-303954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:46:26.389 [DEBUG] [Thread-303954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:46:26.389 [DEBUG] [Thread-303954] [transport.py] [_log()] Compression: none
2025-12-24T14:46:26.389 [DEBUG] [Thread-303954] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:46:26.451 [DEBUG] [Thread-303954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:46:26.452 [DEBUG] [Thread-303954] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:46:26.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:46:26.453 [DEBUG] [Thread-303954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:46:26.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:46:26.507 [DEBUG] [Thread-303954] [transport.py] [_log()] userauth is OK
2025-12-24T14:46:26.507 [DEBUG] [Thread-303954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:46:26.507 [DEBUG] [Thread-303954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:46:26.507 [DEBUG] [Thread-303954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:46:26.507 [DEBUG] [Thread-303954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:46:26.526 [INFO] [Thread-303954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:46:26.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:46:26.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:46:27.381 [DEBUG] [Thread-303954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:46:27.381 [DEBUG] [Thread-303954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:46:27.428 [DEBUG] [Thread-303954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:46:27.429 [DEBUG] [Thread-303954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:46:27.438 [DEBUG] [Thread-303954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:46:27.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:46:27.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:46:27.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:46:27.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:46:27.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:46:27.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:46:27.473 [DEBUG] [Thread-303954] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:46:33.418 [DEBUG] [Thread-303956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:46:45.868 [DEBUG] [Thread-303957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:46:48.525 [DEBUG] [Thread-303958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:46:57.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:46:57.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:46:57.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:46:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 46, 21), 19.26, 28.47, 0.0, 17.75, 22.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:46:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:46:21
2025-12-24T14:46:58.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:46:58.807 [DEBUG] [Thread-303959] [transport.py] [_log()] starting thread (client mode): 0xf81c25c0
2025-12-24T14:46:58.807 [DEBUG] [Thread-303959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:46:58.819 [DEBUG] [Thread-303959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:46:58.819 [INFO] [Thread-303959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:46:58.824 [DEBUG] [Thread-303959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] client lang: <none>
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] server lang: <none>
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] kex follows: False
2025-12-24T14:46:58.825 [DEBUG] [Thread-303959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:46:58.826 [DEBUG] [Thread-303959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:46:58.826 [DEBUG] [Thread-303959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:46:58.826 [DEBUG] [Thread-303959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:46:58.826 [DEBUG] [Thread-303959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:46:58.826 [DEBUG] [Thread-303959] [transport.py] [_log()] Compression: none
2025-12-24T14:46:58.826 [DEBUG] [Thread-303959] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:46:58.859 [DEBUG] [Thread-303959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:46:58.862 [DEBUG] [Thread-303959] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:46:58.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:46:58.865 [DEBUG] [Thread-303959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:46:58.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:46:58.867 [DEBUG] [Thread-303959] [transport.py] [_log()] userauth is OK
2025-12-24T14:46:58.867 [DEBUG] [Thread-303959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:46:58.868 [DEBUG] [Thread-303959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:46:58.868 [DEBUG] [Thread-303959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:46:58.868 [DEBUG] [Thread-303959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:46:58.886 [INFO] [Thread-303959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:46:58.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:46:59.569 [DEBUG] [Thread-303959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:46:59.569 [DEBUG] [Thread-303959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:46:59.570 [DEBUG] [Thread-303959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:46:59.610 [DEBUG] [Thread-303959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:46:59.610 [DEBUG] [Thread-303959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:46:59.613 [DEBUG] [Thread-303959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:46:59.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:46:59.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:46:59.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:46:59.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:46:59.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:46:59.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:46:59.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:46:59.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:46:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:46:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.532360 -999.00  +22.80  11.96     34   +6.30 1 2 1 1 1   888    0 16.37 -11.50 ----- 12.0 12.0 109.8 20.2 27.4 -15.4 27.3 -15.5 27.6 -13.7 27.9 -14.2
2025-12-24T14:46:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:46:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:46:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.532360
2025-12-24T14:46:59.647 [DEBUG] [Thread-303959] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:46:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:46:59.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:46:59.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:46:59.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:46:59.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:46:59.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:46:21', tmtdew=19.26, humidity=28.47, cloud=0.0, wind=17.75, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:46:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:46:59.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:46:59.765 [DEBUG] [Thread-303962] [transport.py] [_log()] starting thread (client mode): 0xf5752440
2025-12-24T14:46:59.766 [DEBUG] [Thread-303962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:46:59.780 [DEBUG] [Thread-303962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:46:59.780 [INFO] [Thread-303962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:46:59.787 [DEBUG] [Thread-303962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:46:59.787 [DEBUG] [Thread-303962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] client lang: <none>
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] server lang: <none>
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] kex follows: False
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] Compression: none
2025-12-24T14:46:59.788 [DEBUG] [Thread-303962] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:46:59.847 [DEBUG] [Thread-303962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:46:59.848 [DEBUG] [Thread-303962] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:46:59.848 [DEBUG] [Thread-303962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:46:59.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:46:59.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:46:59.903 [DEBUG] [Thread-303962] [transport.py] [_log()] userauth is OK
2025-12-24T14:46:59.903 [DEBUG] [Thread-303962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:46:59.903 [DEBUG] [Thread-303962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:46:59.903 [DEBUG] [Thread-303962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:46:59.903 [DEBUG] [Thread-303962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:46:59.918 [INFO] [Thread-303962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:46:59.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:46:59.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:47:00.708 [DEBUG] [Thread-303962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:47:00.708 [DEBUG] [Thread-303962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:47:00.755 [DEBUG] [Thread-303962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:47:00.755 [DEBUG] [Thread-303962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:47:00.764 [DEBUG] [Thread-303962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:47:00.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:47:00.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:47:00.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:47:00.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:47:00.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:47:00.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:47:00.797 [DEBUG] [Thread-303962] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:47:03.595 [DEBUG] [Thread-303964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:47:17.816 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:47:17.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:47:18.802 [DEBUG] [Thread-303965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:47:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:47:30.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:47:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:47:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 46, 55), 19.5, 28.06, 0.0, 20.24, 22.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:47:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:46:55
2025-12-24T14:47:31.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:47:32.171 [DEBUG] [Thread-303966] [transport.py] [_log()] starting thread (client mode): 0xf57bcb20
2025-12-24T14:47:32.172 [DEBUG] [Thread-303966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:47:32.181 [DEBUG] [Thread-303966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:47:32.181 [INFO] [Thread-303966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:47:32.185 [DEBUG] [Thread-303966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] client lang: <none>
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] server lang: <none>
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] kex follows: False
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:47:32.186 [DEBUG] [Thread-303966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:47:32.187 [DEBUG] [Thread-303966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:47:32.187 [DEBUG] [Thread-303966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:47:32.187 [DEBUG] [Thread-303966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:47:32.187 [DEBUG] [Thread-303966] [transport.py] [_log()] Compression: none
2025-12-24T14:47:32.187 [DEBUG] [Thread-303966] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:47:32.222 [DEBUG] [Thread-303966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:47:32.227 [DEBUG] [Thread-303966] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:47:32.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:47:32.232 [DEBUG] [Thread-303966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:47:32.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:47:32.236 [DEBUG] [Thread-303966] [transport.py] [_log()] userauth is OK
2025-12-24T14:47:32.236 [DEBUG] [Thread-303966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:47:32.237 [DEBUG] [Thread-303966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:47:32.237 [DEBUG] [Thread-303966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:47:32.237 [DEBUG] [Thread-303966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:47:32.265 [INFO] [Thread-303966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:47:32.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:47:32.897 [DEBUG] [Thread-303966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:47:32.898 [DEBUG] [Thread-303966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:47:32.899 [DEBUG] [Thread-303966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:47:32.938 [DEBUG] [Thread-303966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:47:32.938 [DEBUG] [Thread-303966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:47:32.941 [DEBUG] [Thread-303966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:47:32.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:47:32.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:47:32.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:47:32.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:47:32.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:47:32.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:47:32.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:47:32.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:47:32.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:47:32.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.532707 -999.00  +23.30  21.61     33   +6.40 1 2 1 1 1   888    0 16.25 -13.22 ----- 21.6 21.6 112.2 27.0 27.6 -15.0 27.4 -15.5 27.6 -13.5 27.9 -13.4
2025-12-24T14:47:32.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:47:32.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:47:32.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.532707
2025-12-24T14:47:32.978 [DEBUG] [Thread-303966] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:47:32.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:47:33.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:47:33.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:47:33.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:47:33.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:47:33.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:46:55', tmtdew=19.5, humidity=28.06, cloud=0.0, wind=20.24, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:47:05.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:47:33.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:47:33.092 [DEBUG] [Thread-303969] [transport.py] [_log()] starting thread (client mode): 0xf572eb60
2025-12-24T14:47:33.092 [DEBUG] [Thread-303969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:47:33.107 [DEBUG] [Thread-303969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:47:33.107 [INFO] [Thread-303969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] client lang: <none>
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] server lang: <none>
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] kex follows: False
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] Compression: none
2025-12-24T14:47:33.117 [DEBUG] [Thread-303969] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:47:33.174 [DEBUG] [Thread-303969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:47:33.174 [DEBUG] [Thread-303969] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:47:33.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:47:33.175 [DEBUG] [Thread-303969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:47:33.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:47:33.231 [DEBUG] [Thread-303969] [transport.py] [_log()] userauth is OK
2025-12-24T14:47:33.231 [DEBUG] [Thread-303969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:47:33.231 [DEBUG] [Thread-303969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:47:33.231 [DEBUG] [Thread-303969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:47:33.232 [DEBUG] [Thread-303969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:47:33.249 [INFO] [Thread-303969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:47:33.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:47:33.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:47:33.977 [DEBUG] [Thread-303971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:47:34.134 [DEBUG] [Thread-303969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:47:34.134 [DEBUG] [Thread-303969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:47:34.180 [DEBUG] [Thread-303969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:47:34.181 [DEBUG] [Thread-303969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:47:34.190 [DEBUG] [Thread-303969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:47:34.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:47:34.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:47: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
2025-12-24T14:47:34.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:47:34.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:47:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:47:34.233 [DEBUG] [Thread-303969] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:47:46.166 [DEBUG] [Thread-303972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:47:49.111 [DEBUG] [Thread-303973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:48:04.186 [DEBUG] [Thread-303974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:48:04.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:48:04.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:48:04.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:48:05.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 47, 28), 19.56, 27.97, 0.0, 17.72, 23.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:48:05.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:47:28
2025-12-24T14:48:05.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:48:05.622 [DEBUG] [Thread-303975] [transport.py] [_log()] starting thread (client mode): 0xf81c0370
2025-12-24T14:48:05.623 [DEBUG] [Thread-303975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:48:05.634 [DEBUG] [Thread-303975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:48:05.634 [INFO] [Thread-303975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:48:05.640 [DEBUG] [Thread-303975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] client lang: <none>
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] server lang: <none>
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] kex follows: False
2025-12-24T14:48:05.641 [DEBUG] [Thread-303975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:48:05.642 [DEBUG] [Thread-303975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:48:05.642 [DEBUG] [Thread-303975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:48:05.642 [DEBUG] [Thread-303975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:48:05.642 [DEBUG] [Thread-303975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:48:05.643 [DEBUG] [Thread-303975] [transport.py] [_log()] Compression: none
2025-12-24T14:48:05.643 [DEBUG] [Thread-303975] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:48:05.674 [DEBUG] [Thread-303975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:48:05.678 [DEBUG] [Thread-303975] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:48:05.679 [DEBUG] [Thread-303975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:48:05.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:48:05.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:48:05.683 [DEBUG] [Thread-303975] [transport.py] [_log()] userauth is OK
2025-12-24T14:48:05.683 [DEBUG] [Thread-303975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:48:05.683 [DEBUG] [Thread-303975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:48:05.683 [DEBUG] [Thread-303975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:48:05.683 [DEBUG] [Thread-303975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:48:05.701 [INFO] [Thread-303975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:48:05.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:48:06.376 [DEBUG] [Thread-303975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:48:06.376 [DEBUG] [Thread-303975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:48:06.376 [DEBUG] [Thread-303975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:48:06.417 [DEBUG] [Thread-303975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:48:06.417 [DEBUG] [Thread-303975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:48:06.420 [DEBUG] [Thread-303975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:48:06.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:48:06.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:48:06.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:48:06.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:48:06.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:48:06.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:48:06.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:48:06.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:48:06.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:48:06.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.533054 -999.00  +23.50  15.54     33   +6.30 1 2 1 1 1   888    0 16.35 -13.27 ----- 15.5 15.5 116.4 26.9 27.4 -18.1 27.6 -15.8 27.6 -14.2 28.0 -14.1
2025-12-24T14:48:06.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:48:06.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:48:06.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.533054
2025-12-24T14:48:06.457 [DEBUG] [Thread-303975] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:48:06.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:48:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:48:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:48:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:48:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:48:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:47:28', tmtdew=19.56, humidity=27.97, cloud=0.0, wind=17.72, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:47:35.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:48:06.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:48:06.568 [DEBUG] [Thread-303978] [transport.py] [_log()] starting thread (client mode): 0xf81c3280
2025-12-24T14:48:06.568 [DEBUG] [Thread-303978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:48:06.582 [DEBUG] [Thread-303978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:48:06.582 [INFO] [Thread-303978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:48:06.590 [DEBUG] [Thread-303978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:48:06.590 [DEBUG] [Thread-303978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:48:06.590 [DEBUG] [Thread-303978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:48:06.590 [DEBUG] [Thread-303978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:48:06.590 [DEBUG] [Thread-303978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:48:06.590 [DEBUG] [Thread-303978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:48:06.590 [DEBUG] [Thread-303978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] client lang: <none>
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] server lang: <none>
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] kex follows: False
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:48:06.591 [DEBUG] [Thread-303978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:48:06.592 [DEBUG] [Thread-303978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:48:06.592 [DEBUG] [Thread-303978] [transport.py] [_log()] Compression: none
2025-12-24T14:48:06.592 [DEBUG] [Thread-303978] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:48:06.648 [DEBUG] [Thread-303978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:48:06.649 [DEBUG] [Thread-303978] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:48:06.650 [DEBUG] [Thread-303978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:48:06.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:48:06.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:48:06.704 [DEBUG] [Thread-303978] [transport.py] [_log()] userauth is OK
2025-12-24T14:48:06.705 [DEBUG] [Thread-303978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:48:06.705 [DEBUG] [Thread-303978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:48:06.705 [DEBUG] [Thread-303978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:48:06.705 [DEBUG] [Thread-303978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:48:06.724 [INFO] [Thread-303978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:48:06.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:48:06.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:48:07.579 [DEBUG] [Thread-303978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:48:07.579 [DEBUG] [Thread-303978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:48:07.626 [DEBUG] [Thread-303978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:48:07.627 [DEBUG] [Thread-303978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:48:07.635 [DEBUG] [Thread-303978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:48:07.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:48:07.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:48:07.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:48:07.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:48:07.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:48:07.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:48:07.671 [DEBUG] [Thread-303978] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:48:17.964 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:48:17.970 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:48:19.257 [DEBUG] [Thread-303980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:48:34.413 [DEBUG] [Thread-303981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:48:37.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:48:37.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:48:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:48:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 48, 1), 19.51, 28.06, 0.0, 20.1, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:48:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:48:01
2025-12-24T14:48:38.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:48:38.996 [DEBUG] [Thread-303982] [transport.py] [_log()] starting thread (client mode): 0xf5752530
2025-12-24T14:48:38.997 [DEBUG] [Thread-303982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:48:38.999 [DEBUG] [Thread-303982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:48:38.999 [INFO] [Thread-303982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] client lang: <none>
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] server lang: <none>
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] kex follows: False
2025-12-24T14:48:39.002 [DEBUG] [Thread-303982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:48:39.003 [DEBUG] [Thread-303982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:48:39.003 [DEBUG] [Thread-303982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:48:39.003 [DEBUG] [Thread-303982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:48:39.003 [DEBUG] [Thread-303982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:48:39.003 [DEBUG] [Thread-303982] [transport.py] [_log()] Compression: none
2025-12-24T14:48:39.003 [DEBUG] [Thread-303982] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:48:39.031 [DEBUG] [Thread-303982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:48:39.033 [DEBUG] [Thread-303982] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:48:39.034 [DEBUG] [Thread-303982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:48:39.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:48:39.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:48:39.072 [DEBUG] [Thread-303982] [transport.py] [_log()] userauth is OK
2025-12-24T14:48:39.072 [DEBUG] [Thread-303982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:48:39.073 [DEBUG] [Thread-303982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:48:39.073 [DEBUG] [Thread-303982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:48:39.073 [DEBUG] [Thread-303982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:48:39.090 [INFO] [Thread-303982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:48:39.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:48:39.743 [DEBUG] [Thread-303982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:48:39.743 [DEBUG] [Thread-303982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:48:39.744 [DEBUG] [Thread-303982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:48:39.785 [DEBUG] [Thread-303982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:48:39.785 [DEBUG] [Thread-303982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:48:39.788 [DEBUG] [Thread-303982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:48:39.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:48:39.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:48:39.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:48:39.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:48:39.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:48:39.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:48:39.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:48:39.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:48:39.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:48:39.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.533402 -999.00  +23.50  25.33     32   +6.20 1 2 1 1 1   888    0 16.33 -12.83 ----- 25.3 25.3 111.8 28.0 27.5 -17.4 27.5 -16.5 27.7 -14.8 27.9 -13.4
2025-12-24T14:48:39.817 [DEBUG] [Thread-303982] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:48:39.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:48:39.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:48:39.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.533402
2025-12-24T14:48:39.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:48:39.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:48:39.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:48:39.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:48:39.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:48:39.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:48:01', tmtdew=19.51, humidity=28.06, cloud=0.0, wind=20.1, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:48:05.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:48:39.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:48:39.945 [DEBUG] [Thread-303985] [transport.py] [_log()] starting thread (client mode): 0xf5772c80
2025-12-24T14:48:39.945 [DEBUG] [Thread-303985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:48:39.960 [DEBUG] [Thread-303985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:48:39.961 [INFO] [Thread-303985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:48:39.968 [DEBUG] [Thread-303985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:48:39.969 [DEBUG] [Thread-303985] [transport.py] [_log()] client lang: <none>
2025-12-24T14:48:39.970 [DEBUG] [Thread-303985] [transport.py] [_log()] server lang: <none>
2025-12-24T14:48:39.970 [DEBUG] [Thread-303985] [transport.py] [_log()] kex follows: False
2025-12-24T14:48:39.970 [DEBUG] [Thread-303985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:48:39.970 [DEBUG] [Thread-303985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:48:39.970 [DEBUG] [Thread-303985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:48:39.970 [DEBUG] [Thread-303985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:48:39.971 [DEBUG] [Thread-303985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:48:39.971 [DEBUG] [Thread-303985] [transport.py] [_log()] Compression: none
2025-12-24T14:48:39.971 [DEBUG] [Thread-303985] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:48:40.034 [DEBUG] [Thread-303985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:48:40.034 [DEBUG] [Thread-303985] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:48:40.035 [DEBUG] [Thread-303985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:48:40.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:48:40.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:48:40.093 [DEBUG] [Thread-303985] [transport.py] [_log()] userauth is OK
2025-12-24T14:48:40.094 [DEBUG] [Thread-303985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:48:40.094 [DEBUG] [Thread-303985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:48:40.094 [DEBUG] [Thread-303985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:48:40.094 [DEBUG] [Thread-303985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:48:40.113 [INFO] [Thread-303985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:48:40.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:48:40.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:48:40.981 [DEBUG] [Thread-303985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:48:40.981 [DEBUG] [Thread-303985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:48:41.029 [DEBUG] [Thread-303985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:48:41.029 [DEBUG] [Thread-303985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:48:41.038 [DEBUG] [Thread-303985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:48:41.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:48: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')
2025-12-24T14:48: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
2025-12-24T14:48:41.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:48:41.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:48:41.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:48:41.077 [DEBUG] [Thread-303985] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:48:46.459 [DEBUG] [Thread-303987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:48:49.488 [DEBUG] [Thread-303988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:49:04.611 [DEBUG] [Thread-303989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:49:11.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:49:11.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:49:11.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:49:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 48, 35), 19.53, 27.57, 0.0, 18.4, 22.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:49:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:48:35
2025-12-24T14:49:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:49:12.408 [DEBUG] [Thread-303990] [transport.py] [_log()] starting thread (client mode): 0xf81f2920
2025-12-24T14:49:12.409 [DEBUG] [Thread-303990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:49:12.424 [DEBUG] [Thread-303990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:49:12.424 [INFO] [Thread-303990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] client lang: <none>
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] server lang: <none>
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] kex follows: False
2025-12-24T14:49:12.428 [DEBUG] [Thread-303990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:49:12.429 [DEBUG] [Thread-303990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:49:12.429 [DEBUG] [Thread-303990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:49:12.429 [DEBUG] [Thread-303990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:49:12.429 [DEBUG] [Thread-303990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:49:12.429 [DEBUG] [Thread-303990] [transport.py] [_log()] Compression: none
2025-12-24T14:49:12.429 [DEBUG] [Thread-303990] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:49:12.451 [DEBUG] [Thread-303990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:49:12.454 [DEBUG] [Thread-303990] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:49:12.455 [DEBUG] [Thread-303990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:49:12.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:49:12.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:49:12.459 [DEBUG] [Thread-303990] [transport.py] [_log()] userauth is OK
2025-12-24T14:49:12.459 [DEBUG] [Thread-303990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:49:12.459 [DEBUG] [Thread-303990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:49:12.459 [DEBUG] [Thread-303990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:49:12.459 [DEBUG] [Thread-303990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:49:12.477 [INFO] [Thread-303990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:49:12.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:49:13.107 [DEBUG] [Thread-303990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:49:13.108 [DEBUG] [Thread-303990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:49:13.108 [DEBUG] [Thread-303990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:49:13.150 [DEBUG] [Thread-303990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:49:13.150 [DEBUG] [Thread-303990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:49:13.154 [DEBUG] [Thread-303990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:49:13.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:49:13.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:49:13.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:49:13.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:49:13.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:49:13.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:49:13.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:49:13.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:49:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:49:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.533749 -999.00  +23.20  13.93     33   +6.20 1 2 1 1 1   888    0 16.68 -12.66 ----- 13.9 13.9 86.0 21.0 27.3 -16.0 27.5 -16.7 27.6 -15.0 27.9 -14.0
2025-12-24T14:49:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:49:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:49:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.533749
2025-12-24T14:49:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:49:13.190 [DEBUG] [Thread-303990] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:49:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:49:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:49:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:49:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:49:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:48:35', tmtdew=19.53, humidity=27.57, cloud=0.0, wind=18.4, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:48:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:49:13.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:49:13.289 [DEBUG] [Thread-303993] [transport.py] [_log()] starting thread (client mode): 0xf81c1cf0
2025-12-24T14:49:13.290 [DEBUG] [Thread-303993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:49:13.303 [DEBUG] [Thread-303993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:49:13.304 [INFO] [Thread-303993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] client lang: <none>
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] server lang: <none>
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] kex follows: False
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] Compression: none
2025-12-24T14:49:13.311 [DEBUG] [Thread-303993] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:49:13.368 [DEBUG] [Thread-303993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:49:13.368 [DEBUG] [Thread-303993] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:49:13.368 [DEBUG] [Thread-303993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:49:13.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:49:13.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:49:13.425 [DEBUG] [Thread-303993] [transport.py] [_log()] userauth is OK
2025-12-24T14:49:13.425 [DEBUG] [Thread-303993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:49:13.425 [DEBUG] [Thread-303993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:49:13.425 [DEBUG] [Thread-303993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:49:13.425 [DEBUG] [Thread-303993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:49:13.439 [INFO] [Thread-303993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:49:13.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:49:13.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:49:14.309 [DEBUG] [Thread-303993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:49:14.310 [DEBUG] [Thread-303993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:49:14.356 [DEBUG] [Thread-303993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:49:14.356 [DEBUG] [Thread-303993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:49:14.365 [DEBUG] [Thread-303993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:49:14.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:49:14.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:49:14.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:49:14.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:49:14.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:49:14.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:49:14.404 [DEBUG] [Thread-303993] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:49:18.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:49:18.121 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:49:19.648 [DEBUG] [Thread-303995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:49:34.801 [DEBUG] [Thread-303996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:49:44.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:49:44.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:49:44.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:49:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 49, 9), 19.47, 27.72, 29.3, 13.89, 23.03, 0, 0, 0, 0, 0, 0),)
2025-12-24T14:49:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:49:09
2025-12-24T14:49:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:49:45.746 [DEBUG] [Thread-303997] [transport.py] [_log()] starting thread (client mode): 0xf57522c0
2025-12-24T14:49:45.747 [DEBUG] [Thread-303997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:49:45.755 [DEBUG] [Thread-303997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:49:45.755 [INFO] [Thread-303997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] client lang: <none>
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] server lang: <none>
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] kex follows: False
2025-12-24T14:49:45.761 [DEBUG] [Thread-303997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:49:45.762 [DEBUG] [Thread-303997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:49:45.762 [DEBUG] [Thread-303997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:49:45.763 [DEBUG] [Thread-303997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:49:45.763 [DEBUG] [Thread-303997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:49:45.763 [DEBUG] [Thread-303997] [transport.py] [_log()] Compression: none
2025-12-24T14:49:45.763 [DEBUG] [Thread-303997] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:49:45.794 [DEBUG] [Thread-303997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:49:45.798 [DEBUG] [Thread-303997] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:49:45.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:49:45.800 [DEBUG] [Thread-303997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:49:45.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:49:45.803 [DEBUG] [Thread-303997] [transport.py] [_log()] userauth is OK
2025-12-24T14:49:45.803 [DEBUG] [Thread-303997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:49:45.803 [DEBUG] [Thread-303997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:49:45.803 [DEBUG] [Thread-303997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:49:45.803 [DEBUG] [Thread-303997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:49:45.823 [INFO] [Thread-303997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:49:45.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:49:46.497 [DEBUG] [Thread-303997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:49:46.497 [DEBUG] [Thread-303997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:49:46.498 [DEBUG] [Thread-303997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:49:46.538 [DEBUG] [Thread-303997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:49:46.538 [DEBUG] [Thread-303997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:49:46.541 [DEBUG] [Thread-303997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:49:46.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:49:46.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:49:46.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:49:46.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:49:46.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:49:46.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:49:46.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:49:46.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:49:46.567 [DEBUG] [Thread-303997] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:49:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:49:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.534096 -999.00  +22.90  15.53     33   +6.20 1 2 1 1 1   888    0 16.30 -13.83 ----- 15.5 15.5 119.0 18.1 27.2 -16.1 27.5 -16.2 27.6 -14.1 27.9 -14.6
2025-12-24T14:49:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:49:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:49:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.534096
2025-12-24T14:49:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:49:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:49:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:49:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:49:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:49:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:49:09', tmtdew=19.47, humidity=27.72, cloud=29.3, wind=13.89, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:49:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:49:46.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:49:46.693 [DEBUG] [Thread-304000] [transport.py] [_log()] starting thread (client mode): 0xf5752b60
2025-12-24T14:49:46.693 [DEBUG] [Thread-304000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:49:46.707 [DEBUG] [Thread-304000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:49:46.707 [INFO] [Thread-304000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] client lang: <none>
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] server lang: <none>
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] kex follows: False
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] Compression: none
2025-12-24T14:49:46.715 [DEBUG] [Thread-304000] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:49:46.748 [DEBUG] [Thread-304002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:49:46.772 [DEBUG] [Thread-304000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:49:46.772 [DEBUG] [Thread-304000] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:49:46.772 [DEBUG] [Thread-304000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:49:46.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:49:46.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:49:46.829 [DEBUG] [Thread-304000] [transport.py] [_log()] userauth is OK
2025-12-24T14:49:46.829 [DEBUG] [Thread-304000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:49:46.829 [DEBUG] [Thread-304000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:49:46.829 [DEBUG] [Thread-304000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:49:46.829 [DEBUG] [Thread-304000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:49:46.843 [INFO] [Thread-304000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:49:46.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:49:46.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:49:47.741 [DEBUG] [Thread-304000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:49:47.742 [DEBUG] [Thread-304000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:49:47.789 [DEBUG] [Thread-304000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:49:47.789 [DEBUG] [Thread-304000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:49:47.797 [DEBUG] [Thread-304000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:49:47.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:49:47.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:49:47.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:49:47.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:49:47.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:49:47.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:49:47.830 [DEBUG] [Thread-304000] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:49:49.828 [DEBUG] [Thread-304003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:50:04.970 [DEBUG] [Thread-304004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:50:17.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:50:17.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:50:17.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:50:18.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:50:18.262 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:50:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 49, 42), 19.62, 27.89, 29.3, 12.86, 23.23, 0, 0, 0, 0, 0, 0),)
2025-12-24T14:50:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:49:42
2025-12-24T14:50:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:50:19.214 [DEBUG] [Thread-304005] [transport.py] [_log()] starting thread (client mode): 0xf572f5b0
2025-12-24T14:50:19.214 [DEBUG] [Thread-304005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:50:19.226 [DEBUG] [Thread-304005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:50:19.226 [INFO] [Thread-304005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:50:19.231 [DEBUG] [Thread-304005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] client lang: <none>
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] server lang: <none>
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] kex follows: False
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:50:19.232 [DEBUG] [Thread-304005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:50:19.233 [DEBUG] [Thread-304005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:50:19.233 [DEBUG] [Thread-304005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:50:19.233 [DEBUG] [Thread-304005] [transport.py] [_log()] Compression: none
2025-12-24T14:50:19.233 [DEBUG] [Thread-304005] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:50:19.264 [DEBUG] [Thread-304005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:50:19.268 [DEBUG] [Thread-304005] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:50:19.269 [DEBUG] [Thread-304005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:50:19.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:50:19.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:50:19.273 [DEBUG] [Thread-304005] [transport.py] [_log()] userauth is OK
2025-12-24T14:50:19.273 [DEBUG] [Thread-304005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:50:19.273 [DEBUG] [Thread-304005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:50:19.273 [DEBUG] [Thread-304005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:50:19.273 [DEBUG] [Thread-304005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:50:19.292 [INFO] [Thread-304005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:50:19.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:50:19.925 [DEBUG] [Thread-304005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:50:19.925 [DEBUG] [Thread-304005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:50:19.927 [DEBUG] [Thread-304005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:50:19.966 [DEBUG] [Thread-304005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:50:19.966 [DEBUG] [Thread-304005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:50:19.969 [DEBUG] [Thread-304005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:50:19.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:50:19.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:50:19.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:50:19.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:50:19.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:50:20.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:50:20.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:50:20.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:50:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:50:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.534443 -999.00  +23.10  16.96     33   +6.30 1 2 1 1 1   888    0 16.41 -15.23 ----- 17.0 17.0 126.2 20.7 27.2 -15.6 27.6 -16.6 27.7 -14.1 27.9 -14.3
2025-12-24T14:50:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:50:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:50:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.534443
2025-12-24T14:50:20.009 [DEBUG] [Thread-304005] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:50:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:50:20.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:50:20.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:50:20.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:50:20.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:50:20.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:49:42', tmtdew=19.62, humidity=27.89, cloud=29.3, wind=12.86, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:49:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:50:20.048 [DEBUG] [Thread-304008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:50:20.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:50:35.188 [DEBUG] [Thread-304009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:50:47.028 [DEBUG] [Thread-304010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:50:50.258 [DEBUG] [Thread-304011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:51:05.317 [DEBUG] [Thread-304012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:51:18.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:51:18.434 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:51:20.388 [DEBUG] [Thread-304013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:51:35.524 [DEBUG] [Thread-304014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:51:47.263 [DEBUG] [Thread-304015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:51:50.588 [DEBUG] [Thread-304016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:52:05.700 [DEBUG] [Thread-304017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:52:18.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:52:18.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:52:20.776 [DEBUG] [Thread-304018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:52:32.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
2025-12-24T14:52:35.856 [DEBUG] [Thread-304019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:52:47.546 [DEBUG] [Thread-304020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:52:50.958 [DEBUG] [Thread-304021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:53:02.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:53:02.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:53:02.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:53:03.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 52, 29), 19.47, 28.02, 29.3, 16.66, 23.0, 0, 0, 0, 0, 0, 0),)
2025-12-24T14:53:03.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:52:29
2025-12-24T14:53:04.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:53:04.270 [DEBUG] [Thread-304022] [transport.py] [_log()] starting thread (client mode): 0xf81e6950
2025-12-24T14:53:04.271 [DEBUG] [Thread-304022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:53:04.280 [DEBUG] [Thread-304022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:53:04.280 [INFO] [Thread-304022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:53:04.285 [DEBUG] [Thread-304022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:53:04.285 [DEBUG] [Thread-304022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:53:04.285 [DEBUG] [Thread-304022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] client lang: <none>
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] server lang: <none>
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] kex follows: False
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:53:04.286 [DEBUG] [Thread-304022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:53:04.287 [DEBUG] [Thread-304022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:53:04.287 [DEBUG] [Thread-304022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:53:04.287 [DEBUG] [Thread-304022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:53:04.287 [DEBUG] [Thread-304022] [transport.py] [_log()] Compression: none
2025-12-24T14:53:04.287 [DEBUG] [Thread-304022] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:53:04.318 [DEBUG] [Thread-304022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:53:04.322 [DEBUG] [Thread-304022] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:53:04.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:53:04.324 [DEBUG] [Thread-304022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:53:04.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:53:04.327 [DEBUG] [Thread-304022] [transport.py] [_log()] userauth is OK
2025-12-24T14:53:04.327 [DEBUG] [Thread-304022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:53:04.327 [DEBUG] [Thread-304022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:53:04.327 [DEBUG] [Thread-304022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:53:04.327 [DEBUG] [Thread-304022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:53:04.346 [INFO] [Thread-304022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:53:04.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:53:05.002 [DEBUG] [Thread-304022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:53:05.002 [DEBUG] [Thread-304022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:53:05.003 [DEBUG] [Thread-304022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:53:05.044 [DEBUG] [Thread-304022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:53:05.044 [DEBUG] [Thread-304022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:53:05.046 [DEBUG] [Thread-304022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:53:05.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:53:05.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:53:05.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:53:05.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:53:05.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:53:05.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:53:05.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:53:05.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:53:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:53:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.536527 -999.00  +23.20  11.87     33   +6.20 1 2 1 1 1   888    0 16.38 -20.20 ----- 11.9 11.9 105.6 19.6 27.1 -16.4 27.6 -16.6 27.6 -14.6 27.6 -14.8
2025-12-24T14:53:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:53:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:53:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.536527
2025-12-24T14:53:05.080 [DEBUG] [Thread-304022] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:53:05.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:53:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:53:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:53:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:53:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:53:05.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:52:29', tmtdew=19.47, humidity=28.02, cloud=29.3, wind=16.66, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:52:35.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:53:05.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:53:05.182 [DEBUG] [Thread-304025] [transport.py] [_log()] starting thread (client mode): 0xf57a9ff0
2025-12-24T14:53:05.183 [DEBUG] [Thread-304025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:53:05.195 [DEBUG] [Thread-304025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:53:05.195 [INFO] [Thread-304025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:53:05.202 [DEBUG] [Thread-304025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] client lang: <none>
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] server lang: <none>
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] kex follows: False
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] Compression: none
2025-12-24T14:53:05.203 [DEBUG] [Thread-304025] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:53:05.262 [DEBUG] [Thread-304025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:53:05.262 [DEBUG] [Thread-304025] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:53:05.262 [DEBUG] [Thread-304025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:53:05.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:53:05.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:53:05.319 [DEBUG] [Thread-304025] [transport.py] [_log()] userauth is OK
2025-12-24T14:53:05.319 [DEBUG] [Thread-304025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:53:05.319 [DEBUG] [Thread-304025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:53:05.319 [DEBUG] [Thread-304025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:53:05.319 [DEBUG] [Thread-304025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:53:05.333 [INFO] [Thread-304025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:53:05.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:53:05.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:53:06.024 [DEBUG] [Thread-304027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:53:06.207 [DEBUG] [Thread-304025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:53:06.207 [DEBUG] [Thread-304025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:53:06.254 [DEBUG] [Thread-304025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:53:06.255 [DEBUG] [Thread-304025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:53:06.263 [DEBUG] [Thread-304025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:53:06.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:53: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')
2025-12-24T14:53: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
2025-12-24T14:53:06.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:53:06.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:53:06.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:53:06.298 [DEBUG] [Thread-304025] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:53:18.747 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:53:18.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:53:21.122 [DEBUG] [Thread-304028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:53:36.206 [DEBUG] [Thread-304029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:53:36.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:53:36.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:53:36.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
2025-12-24T14:53:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 53, 2), 19.46, 28.04, 29.3, 16.99, 22.96, 0, 0, 0, 0, 0, 0),)
2025-12-24T14:53:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:53:02
2025-12-24T14:53:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:53:37.977 [DEBUG] [Thread-304030] [transport.py] [_log()] starting thread (client mode): 0xf57520e0
2025-12-24T14:53:37.978 [DEBUG] [Thread-304030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:53:37.989 [DEBUG] [Thread-304030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:53:37.989 [INFO] [Thread-304030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] client lang: <none>
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] server lang: <none>
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] kex follows: False
2025-12-24T14:53:37.993 [DEBUG] [Thread-304030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:53:37.994 [DEBUG] [Thread-304030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:53:37.994 [DEBUG] [Thread-304030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:53:37.994 [DEBUG] [Thread-304030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:53:37.994 [DEBUG] [Thread-304030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:53:37.994 [DEBUG] [Thread-304030] [transport.py] [_log()] Compression: none
2025-12-24T14:53:37.994 [DEBUG] [Thread-304030] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:53:38.026 [DEBUG] [Thread-304030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:53:38.029 [DEBUG] [Thread-304030] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:53:38.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:53:38.031 [DEBUG] [Thread-304030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:53:38.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:53:38.034 [DEBUG] [Thread-304030] [transport.py] [_log()] userauth is OK
2025-12-24T14:53:38.034 [DEBUG] [Thread-304030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:53:38.034 [DEBUG] [Thread-304030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:53:38.034 [DEBUG] [Thread-304030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:53:38.034 [DEBUG] [Thread-304030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:53:38.064 [INFO] [Thread-304030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:53:38.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:53:38.676 [DEBUG] [Thread-304030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:53:38.676 [DEBUG] [Thread-304030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:53:38.677 [DEBUG] [Thread-304030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:53:38.717 [DEBUG] [Thread-304030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:53:38.717 [DEBUG] [Thread-304030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:53:38.719 [DEBUG] [Thread-304030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:53:38.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:53:38.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:53:38.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:53:38.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:53:38.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:53:38.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:53:38.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:53:38.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:53:38.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:53:38.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.536874 -999.00  +23.10  12.61     33   +6.10 1 2 1 1 1   888    0 16.35 -18.10 ----- 12.6 12.6 109.2 16.8 27.2 -16.7 27.6 -16.4 27.6 -14.9 27.8 -14.2
2025-12-24T14:53:38.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:53:38.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:53:38.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.536874
2025-12-24T14:53:38.748 [DEBUG] [Thread-304030] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:53:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:53:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:53:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:53:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:53:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:53:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:53:02', tmtdew=19.46, humidity=28.04, cloud=29.3, wind=16.99, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:53:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:53:38.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:53:38.846 [DEBUG] [Thread-304033] [transport.py] [_log()] starting thread (client mode): 0xf5771090
2025-12-24T14:53:38.847 [DEBUG] [Thread-304033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:53:38.861 [DEBUG] [Thread-304033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:53:38.861 [INFO] [Thread-304033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] client lang: <none>
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] server lang: <none>
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] kex follows: False
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] Compression: none
2025-12-24T14:53:38.869 [DEBUG] [Thread-304033] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:53:38.926 [DEBUG] [Thread-304033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:53:38.926 [DEBUG] [Thread-304033] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:53:38.926 [DEBUG] [Thread-304033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:53:38.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:53:38.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:53:38.987 [DEBUG] [Thread-304033] [transport.py] [_log()] userauth is OK
2025-12-24T14:53:38.987 [DEBUG] [Thread-304033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:53:38.987 [DEBUG] [Thread-304033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:53:38.987 [DEBUG] [Thread-304033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:53:38.987 [DEBUG] [Thread-304033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:53:39.001 [INFO] [Thread-304033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:53:39.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:53:39.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:53:39.822 [DEBUG] [Thread-304033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:53:39.822 [DEBUG] [Thread-304033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:53:39.869 [DEBUG] [Thread-304033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:53:39.869 [DEBUG] [Thread-304033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:53:39.877 [DEBUG] [Thread-304033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:53:39.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:53:39.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:53:39.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:53:39.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:53:39.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:53:39.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:53:39.910 [DEBUG] [Thread-304033] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:53:47.813 [DEBUG] [Thread-304035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:53:51.328 [DEBUG] [Thread-304036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:54:06.485 [DEBUG] [Thread-304037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:54:09.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:54:09.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:54:09.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:54:10.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 53, 35), 19.65, 27.84, 29.3, 16.39, 23.14, 0, 0, 0, 0, 0, 0),)
2025-12-24T14:54:10.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:53:35
2025-12-24T14:54:11.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:54:11.236 [DEBUG] [Thread-304038] [transport.py] [_log()] starting thread (client mode): 0xf574e0b0
2025-12-24T14:54:11.236 [DEBUG] [Thread-304038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:54:11.247 [DEBUG] [Thread-304038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:54:11.247 [INFO] [Thread-304038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] client lang: <none>
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] server lang: <none>
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] kex follows: False
2025-12-24T14:54:11.253 [DEBUG] [Thread-304038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:54:11.254 [DEBUG] [Thread-304038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:54:11.254 [DEBUG] [Thread-304038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:54:11.254 [DEBUG] [Thread-304038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:54:11.254 [DEBUG] [Thread-304038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:54:11.254 [DEBUG] [Thread-304038] [transport.py] [_log()] Compression: none
2025-12-24T14:54:11.254 [DEBUG] [Thread-304038] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:54:11.292 [DEBUG] [Thread-304038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:54:11.296 [DEBUG] [Thread-304038] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:54:11.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:54:11.298 [DEBUG] [Thread-304038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:54:11.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:54:11.301 [DEBUG] [Thread-304038] [transport.py] [_log()] userauth is OK
2025-12-24T14:54:11.301 [DEBUG] [Thread-304038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:54:11.301 [DEBUG] [Thread-304038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:54:11.301 [DEBUG] [Thread-304038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:54:11.301 [DEBUG] [Thread-304038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:54:11.321 [INFO] [Thread-304038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:54:11.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:54:11.991 [DEBUG] [Thread-304038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:54:11.992 [DEBUG] [Thread-304038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:54:11.992 [DEBUG] [Thread-304038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:54:12.033 [DEBUG] [Thread-304038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:54:12.033 [DEBUG] [Thread-304038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:54:12.036 [DEBUG] [Thread-304038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:54:12.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:54:12.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:54:12.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:54:12.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:54:12.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:54:12.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:54:12.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:54:12.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:54:12.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:54:12.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.537221 -999.00  +23.30   9.78     33   +6.20 1 2 1 1 1   888    0 16.33 -17.28 ----- 9.8 9.8 115.1 18.9 27.2 -14.7 27.6 -16.0 27.7 -14.8 27.8 -14.2
2025-12-24T14:54:12.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:54:12.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:54:12.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.537221
2025-12-24T14:54:12.070 [DEBUG] [Thread-304038] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:54:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:54:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:54:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:54:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:54:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:54:12.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:53:35', tmtdew=19.65, humidity=27.84, cloud=29.3, wind=16.39, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:53:35.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:54:12.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:54:12.198 [DEBUG] [Thread-304041] [transport.py] [_log()] starting thread (client mode): 0xf574c2b0
2025-12-24T14:54:12.198 [DEBUG] [Thread-304041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:54:12.214 [DEBUG] [Thread-304041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:54:12.214 [INFO] [Thread-304041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] client lang: <none>
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] server lang: <none>
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] kex follows: False
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] Compression: none
2025-12-24T14:54:12.222 [DEBUG] [Thread-304041] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:54:12.278 [DEBUG] [Thread-304041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:54:12.278 [DEBUG] [Thread-304041] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:54:12.278 [DEBUG] [Thread-304041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:54:12.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:54:12.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:54:12.335 [DEBUG] [Thread-304041] [transport.py] [_log()] userauth is OK
2025-12-24T14:54:12.335 [DEBUG] [Thread-304041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:54:12.335 [DEBUG] [Thread-304041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:54:12.335 [DEBUG] [Thread-304041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:54:12.335 [DEBUG] [Thread-304041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:54:12.350 [INFO] [Thread-304041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:54:12.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:54:12.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:54:13.212 [DEBUG] [Thread-304041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:54:13.213 [DEBUG] [Thread-304041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:54:13.260 [DEBUG] [Thread-304041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:54:13.260 [DEBUG] [Thread-304041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:54:13.268 [DEBUG] [Thread-304041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:54:13.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:54:13.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:54:13.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:54:13.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:54:13.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:54:13.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:54:13.301 [DEBUG] [Thread-304041] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:54:18.903 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:54:18.905 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:54:21.559 [DEBUG] [Thread-304043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:54:36.711 [DEBUG] [Thread-304044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:54:43.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:54:43.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:54:43.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:54:44.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 54, 8), 19.8, 27.58, 0.0, 15.55, 23.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:54:44.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:54:08
2025-12-24T14:54:44.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:54:44.943 [DEBUG] [Thread-304045] [transport.py] [_log()] starting thread (client mode): 0xf578b880
2025-12-24T14:54:44.944 [DEBUG] [Thread-304045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:54:44.944 [DEBUG] [Thread-304045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:54:44.944 [INFO] [Thread-304045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:54:44.947 [DEBUG] [Thread-304045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:54:44.947 [DEBUG] [Thread-304045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] client lang: <none>
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] server lang: <none>
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] kex follows: False
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:54:44.948 [DEBUG] [Thread-304045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:54:44.949 [DEBUG] [Thread-304045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:54:44.949 [DEBUG] [Thread-304045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:54:44.949 [DEBUG] [Thread-304045] [transport.py] [_log()] Compression: none
2025-12-24T14:54:44.949 [DEBUG] [Thread-304045] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:54:44.981 [DEBUG] [Thread-304045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:54:44.983 [DEBUG] [Thread-304045] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:54:44.984 [DEBUG] [Thread-304045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:54:44.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:54:44.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:54:44.987 [DEBUG] [Thread-304045] [transport.py] [_log()] userauth is OK
2025-12-24T14:54:44.987 [DEBUG] [Thread-304045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:54:44.987 [DEBUG] [Thread-304045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:54:44.987 [DEBUG] [Thread-304045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:54:44.987 [DEBUG] [Thread-304045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:54:45.016 [INFO] [Thread-304045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:54:45.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:54:45.646 [DEBUG] [Thread-304045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:54:45.646 [DEBUG] [Thread-304045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:54:45.647 [DEBUG] [Thread-304045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:54:45.687 [DEBUG] [Thread-304045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:54:45.687 [DEBUG] [Thread-304045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:54:45.690 [DEBUG] [Thread-304045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:54:45.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:54:45.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:54:45.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:54:45.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:54:45.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:54:45.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:54:45.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:54:45.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:54:45.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:54:45.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.537568 -999.00  +23.20  11.19     33   +6.10 1 2 1 1 1   888    0 16.33 -15.05 ----- 11.2 11.2 105.0 17.9 27.2 -16.3 27.6 -16.0 27.6 -14.8 27.8 -14.2
2025-12-24T14:54:45.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:54:45.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:54:45.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.537568
2025-12-24T14:54:45.718 [DEBUG] [Thread-304045] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:54:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:54:45.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:54:45.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:54:45.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:54:45.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:54:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:54:08', tmtdew=19.8, humidity=27.58, cloud=0.0, wind=15.55, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:54:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:54:45.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:54:45.837 [DEBUG] [Thread-304048] [transport.py] [_log()] starting thread (client mode): 0xf57886d0
2025-12-24T14:54:45.837 [DEBUG] [Thread-304048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:54:45.853 [DEBUG] [Thread-304048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:54:45.853 [INFO] [Thread-304048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:54:45.860 [DEBUG] [Thread-304048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:54:45.860 [DEBUG] [Thread-304048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] client lang: <none>
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] server lang: <none>
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] kex follows: False
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:54:45.861 [DEBUG] [Thread-304048] [transport.py] [_log()] Compression: none
2025-12-24T14:54:45.862 [DEBUG] [Thread-304048] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:54:45.920 [DEBUG] [Thread-304048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:54:45.921 [DEBUG] [Thread-304048] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:54:45.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:54:45.922 [DEBUG] [Thread-304048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:54:45.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:54:45.981 [DEBUG] [Thread-304048] [transport.py] [_log()] userauth is OK
2025-12-24T14:54:45.981 [DEBUG] [Thread-304048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:54:45.981 [DEBUG] [Thread-304048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:54:45.982 [DEBUG] [Thread-304048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:54:45.982 [DEBUG] [Thread-304048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:54:46.001 [INFO] [Thread-304048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:54:46.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:54:46.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:54:46.849 [DEBUG] [Thread-304048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:54:46.849 [DEBUG] [Thread-304048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:54:46.896 [DEBUG] [Thread-304048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:54:46.896 [DEBUG] [Thread-304048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:54:46.904 [DEBUG] [Thread-304048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:54:46.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:54:46.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:54:46.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:54:46.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:54:46.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:54:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:54:46.937 [DEBUG] [Thread-304048] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:54:48.067 [DEBUG] [Thread-304050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:54:51.789 [DEBUG] [Thread-304051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:55:06.932 [DEBUG] [Thread-304052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:55:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:55:16.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:55:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:55:17.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 54, 41), 19.6, 27.73, 0.0, 12.86, 22.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:55:17.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:54:41
2025-12-24T14:55:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:55:18.339 [DEBUG] [Thread-304053] [transport.py] [_log()] starting thread (client mode): 0xf57889a0
2025-12-24T14:55:18.339 [DEBUG] [Thread-304053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:55:18.347 [DEBUG] [Thread-304053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:55:18.347 [INFO] [Thread-304053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] client lang: <none>
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] server lang: <none>
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] kex follows: False
2025-12-24T14:55:18.353 [DEBUG] [Thread-304053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:55:18.354 [DEBUG] [Thread-304053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:55:18.354 [DEBUG] [Thread-304053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:55:18.354 [DEBUG] [Thread-304053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:55:18.354 [DEBUG] [Thread-304053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:55:18.354 [DEBUG] [Thread-304053] [transport.py] [_log()] Compression: none
2025-12-24T14:55:18.354 [DEBUG] [Thread-304053] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:55:18.387 [DEBUG] [Thread-304053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:55:18.390 [DEBUG] [Thread-304053] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:55:18.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:55:18.393 [DEBUG] [Thread-304053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:55:18.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:55:18.395 [DEBUG] [Thread-304053] [transport.py] [_log()] userauth is OK
2025-12-24T14:55:18.395 [DEBUG] [Thread-304053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:55:18.395 [DEBUG] [Thread-304053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:55:18.395 [DEBUG] [Thread-304053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:55:18.395 [DEBUG] [Thread-304053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:55:18.427 [INFO] [Thread-304053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:55:18.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:55:19.051 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:55:19.053 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:55:19.079 [DEBUG] [Thread-304053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:55:19.079 [DEBUG] [Thread-304053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:55:19.080 [DEBUG] [Thread-304053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:55:19.121 [DEBUG] [Thread-304053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:55:19.121 [DEBUG] [Thread-304053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:55:19.124 [DEBUG] [Thread-304053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:55:19.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:55:19.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:55:19.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:55:19.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:55:19.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:55:19.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:55:19.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:55:19.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:55:19.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:55:19.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.537915 -999.00  +22.90   9.54     33   +6.10 1 2 1 1 1   888    0 16.48 -14.21 ----- 9.5 9.5 96.0 21.7 27.3 -16.3 27.6 -15.6 27.7 -14.2 27.8 -14.1
2025-12-24T14:55:19.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:55:19.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:55:19.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.537915
2025-12-24T14:55:19.155 [DEBUG] [Thread-304053] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:55:19.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:55:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:55:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:55:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:55:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:55:19.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:54:41', tmtdew=19.6, humidity=27.73, cloud=0.0, wind=12.86, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:54:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:55:19.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:55:19.255 [DEBUG] [Thread-304056] [transport.py] [_log()] starting thread (client mode): 0xf578bc10
2025-12-24T14:55:19.255 [DEBUG] [Thread-304056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:55:19.271 [DEBUG] [Thread-304056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:55:19.271 [INFO] [Thread-304056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:55:19.279 [DEBUG] [Thread-304056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] client lang: <none>
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] server lang: <none>
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] kex follows: False
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] Compression: none
2025-12-24T14:55:19.280 [DEBUG] [Thread-304056] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:55:19.339 [DEBUG] [Thread-304056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:55:19.339 [DEBUG] [Thread-304056] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:55:19.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:55:19.340 [DEBUG] [Thread-304056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:55:19.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:55:19.396 [DEBUG] [Thread-304056] [transport.py] [_log()] userauth is OK
2025-12-24T14:55:19.396 [DEBUG] [Thread-304056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:55:19.396 [DEBUG] [Thread-304056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:55:19.396 [DEBUG] [Thread-304056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:55:19.396 [DEBUG] [Thread-304056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:55:19.411 [INFO] [Thread-304056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:55:19.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:55:19.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:55:20.243 [DEBUG] [Thread-304056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:55:20.243 [DEBUG] [Thread-304056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:55:20.291 [DEBUG] [Thread-304056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:55:20.292 [DEBUG] [Thread-304056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:55:20.301 [DEBUG] [Thread-304056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:55:20.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:55:20.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:55:20.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:55:20.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:55:20.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:55:20.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:55:20.338 [DEBUG] [Thread-304056] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:55:22.019 [DEBUG] [Thread-304058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:55:37.153 [DEBUG] [Thread-304059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:55:48.360 [DEBUG] [Thread-304060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:55:50.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:55:50.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:55:50.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:55:51.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 55, 15), 19.49, 27.89, 0.0, 15.05, 22.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:55:51.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:55:15
2025-12-24T14:55:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:55:51.764 [DEBUG] [Thread-304061] [transport.py] [_log()] starting thread (client mode): 0xf574e290
2025-12-24T14:55:51.765 [DEBUG] [Thread-304061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:55:51.777 [DEBUG] [Thread-304061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:55:51.777 [INFO] [Thread-304061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] client lang: <none>
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] server lang: <none>
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] kex follows: False
2025-12-24T14:55:51.782 [DEBUG] [Thread-304061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:55:51.783 [DEBUG] [Thread-304061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:55:51.783 [DEBUG] [Thread-304061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:55:51.783 [DEBUG] [Thread-304061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:55:51.783 [DEBUG] [Thread-304061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:55:51.783 [DEBUG] [Thread-304061] [transport.py] [_log()] Compression: none
2025-12-24T14:55:51.783 [DEBUG] [Thread-304061] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:55:51.814 [DEBUG] [Thread-304061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:55:51.817 [DEBUG] [Thread-304061] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:55:51.818 [DEBUG] [Thread-304061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:55:51.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:55:51.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:55:51.822 [DEBUG] [Thread-304061] [transport.py] [_log()] userauth is OK
2025-12-24T14:55:51.822 [DEBUG] [Thread-304061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:55:51.822 [DEBUG] [Thread-304061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:55:51.822 [DEBUG] [Thread-304061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:55:51.822 [DEBUG] [Thread-304061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:55:51.842 [INFO] [Thread-304061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:55:51.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:55:52.248 [DEBUG] [Thread-304063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:55:52.471 [DEBUG] [Thread-304061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:55:52.471 [DEBUG] [Thread-304061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:55:52.472 [DEBUG] [Thread-304061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:55:52.513 [DEBUG] [Thread-304061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:55:52.513 [DEBUG] [Thread-304061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:55:52.518 [DEBUG] [Thread-304061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:55:52.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:55:52.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:55:52.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:55:52.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:55:52.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:55:52.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:55:52.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:55:52.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:55:52.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:55:52.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.538262 -999.00  +23.00  13.58     33   +6.20 1 2 1 1 1   888    0 16.25 -14.66 ----- 13.6 13.6 119.0 16.9 27.3 -14.6 27.6 -15.5 27.7 -13.9 27.8 -13.4
2025-12-24T14:55:52.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:55:52.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:55:52.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.538262
2025-12-24T14:55:52.554 [DEBUG] [Thread-304061] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:55:52.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:55:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:55:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:55:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:55:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:55:52.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:55:15', tmtdew=19.49, humidity=27.89, cloud=0.0, wind=15.05, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:55:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:55:52.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:55:52.675 [DEBUG] [Thread-304065] [transport.py] [_log()] starting thread (client mode): 0xf574da20
2025-12-24T14:55:52.675 [DEBUG] [Thread-304065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:55:52.690 [DEBUG] [Thread-304065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:55:52.690 [INFO] [Thread-304065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] client lang: <none>
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] server lang: <none>
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] kex follows: False
2025-12-24T14:55:52.699 [DEBUG] [Thread-304065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:55:52.700 [DEBUG] [Thread-304065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:55:52.700 [DEBUG] [Thread-304065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:55:52.700 [DEBUG] [Thread-304065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:55:52.700 [DEBUG] [Thread-304065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:55:52.700 [DEBUG] [Thread-304065] [transport.py] [_log()] Compression: none
2025-12-24T14:55:52.700 [DEBUG] [Thread-304065] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:55:52.757 [DEBUG] [Thread-304065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:55:52.758 [DEBUG] [Thread-304065] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:55:52.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:55:52.760 [DEBUG] [Thread-304065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:55:52.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:55:52.812 [DEBUG] [Thread-304065] [transport.py] [_log()] userauth is OK
2025-12-24T14:55:52.813 [DEBUG] [Thread-304065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:55:52.813 [DEBUG] [Thread-304065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:55:52.813 [DEBUG] [Thread-304065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:55:52.813 [DEBUG] [Thread-304065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:55:52.832 [INFO] [Thread-304065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:55:52.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:55:52.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:55:53.655 [DEBUG] [Thread-304065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:55:53.655 [DEBUG] [Thread-304065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:55:53.703 [DEBUG] [Thread-304065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:55:53.703 [DEBUG] [Thread-304065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:55:53.712 [DEBUG] [Thread-304065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:55:53.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:55:53.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:55:53.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:55:53.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:55:53.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:55:53.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:55:53.749 [DEBUG] [Thread-304065] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:56:07.333 [DEBUG] [Thread-304067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:56:19.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:56:19.225 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:56:22.473 [DEBUG] [Thread-304068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:56:23.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:56:23.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:56:23.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
2025-12-24T14:56:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 55, 48), 19.38, 28.16, 0.0, 14.86, 22.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:56:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:55:48
2025-12-24T14:56:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:56:25.365 [DEBUG] [Thread-304069] [transport.py] [_log()] starting thread (client mode): 0xf578a7a0
2025-12-24T14:56:25.365 [DEBUG] [Thread-304069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:56:25.378 [DEBUG] [Thread-304069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:56:25.378 [INFO] [Thread-304069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:56:25.383 [DEBUG] [Thread-304069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:56:25.384 [DEBUG] [Thread-304069] [transport.py] [_log()] client lang: <none>
2025-12-24T14:56:25.384 [DEBUG] [Thread-304069] [transport.py] [_log()] server lang: <none>
2025-12-24T14:56:25.384 [DEBUG] [Thread-304069] [transport.py] [_log()] kex follows: False
2025-12-24T14:56:25.384 [DEBUG] [Thread-304069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:56:25.384 [DEBUG] [Thread-304069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:56:25.384 [DEBUG] [Thread-304069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:56:25.384 [DEBUG] [Thread-304069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:56:25.384 [DEBUG] [Thread-304069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:56:25.385 [DEBUG] [Thread-304069] [transport.py] [_log()] Compression: none
2025-12-24T14:56:25.385 [DEBUG] [Thread-304069] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:56:25.418 [DEBUG] [Thread-304069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:56:25.421 [DEBUG] [Thread-304069] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:56:25.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:56:25.424 [DEBUG] [Thread-304069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:56:25.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:56:25.426 [DEBUG] [Thread-304069] [transport.py] [_log()] userauth is OK
2025-12-24T14:56:25.426 [DEBUG] [Thread-304069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:56:25.426 [DEBUG] [Thread-304069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:56:25.426 [DEBUG] [Thread-304069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:56:25.427 [DEBUG] [Thread-304069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:56:25.445 [INFO] [Thread-304069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:56:25.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:56:26.051 [DEBUG] [Thread-304069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:56:26.051 [DEBUG] [Thread-304069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:56:26.052 [DEBUG] [Thread-304069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:56:26.092 [DEBUG] [Thread-304069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:56:26.092 [DEBUG] [Thread-304069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:56:26.096 [DEBUG] [Thread-304069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:56:26.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:56:26.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:56:26.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:56:26.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:56:26.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:56:26.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:56:26.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:56:26.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:56:26.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:56:26.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.538610 -999.00  +22.90  15.75     33   +6.10 1 2 1 1 1   888    0 16.71 -15.30 ----- 15.8 15.8 79.4 20.6 27.3 -14.6 27.6 -15.1 27.7 -14.0 27.7 -13.5
2025-12-24T14:56:26.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:56:26.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:56:26.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.538610
2025-12-24T14:56:26.133 [DEBUG] [Thread-304069] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:56:26.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:56:26.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:56:26.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:56:26.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:56:26.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:56:26.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:55:48', tmtdew=19.38, humidity=28.16, cloud=0.0, wind=14.86, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:55:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:56:26.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:56:26.243 [DEBUG] [Thread-304072] [transport.py] [_log()] starting thread (client mode): 0xf5772560
2025-12-24T14:56:26.243 [DEBUG] [Thread-304072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:56:26.258 [DEBUG] [Thread-304072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:56:26.259 [INFO] [Thread-304072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:56:26.266 [DEBUG] [Thread-304072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:56:26.266 [DEBUG] [Thread-304072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:56:26.266 [DEBUG] [Thread-304072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] client lang: <none>
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] server lang: <none>
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] kex follows: False
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:56:26.267 [DEBUG] [Thread-304072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:56:26.268 [DEBUG] [Thread-304072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:56:26.268 [DEBUG] [Thread-304072] [transport.py] [_log()] Compression: none
2025-12-24T14:56:26.268 [DEBUG] [Thread-304072] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:56:26.325 [DEBUG] [Thread-304072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:56:26.326 [DEBUG] [Thread-304072] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:56:26.327 [DEBUG] [Thread-304072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:56:26.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:56:26.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:56:26.381 [DEBUG] [Thread-304072] [transport.py] [_log()] userauth is OK
2025-12-24T14:56:26.381 [DEBUG] [Thread-304072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:56:26.382 [DEBUG] [Thread-304072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:56:26.382 [DEBUG] [Thread-304072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:56:26.382 [DEBUG] [Thread-304072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:56:26.406 [INFO] [Thread-304072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:56:26.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:56:26.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:56:27.261 [DEBUG] [Thread-304072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:56:27.262 [DEBUG] [Thread-304072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:56:27.300 [DEBUG] [Thread-304072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:56:27.300 [DEBUG] [Thread-304072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:56:27.311 [DEBUG] [Thread-304072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:56:27.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:56:27.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:56:27.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:56:27.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:56:27.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:56:27.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:56:27.349 [DEBUG] [Thread-304072] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:56:37.563 [DEBUG] [Thread-304074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:56:48.677 [DEBUG] [Thread-304075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:56:52.652 [DEBUG] [Thread-304076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:56:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:56:57.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:56:57.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:56:58.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 56, 21), 19.41, 28.12, 0.0, 16.64, 22.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:56:58.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:56:21
2025-12-24T14:56:58.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:56:58.728 [DEBUG] [Thread-304077] [transport.py] [_log()] starting thread (client mode): 0xf574dd20
2025-12-24T14:56:58.729 [DEBUG] [Thread-304077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:56:58.740 [DEBUG] [Thread-304077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:56:58.740 [INFO] [Thread-304077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:56:58.746 [DEBUG] [Thread-304077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:56:58.746 [DEBUG] [Thread-304077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:56:58.746 [DEBUG] [Thread-304077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:56:58.746 [DEBUG] [Thread-304077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:56:58.746 [DEBUG] [Thread-304077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:56:58.746 [DEBUG] [Thread-304077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:56:58.746 [DEBUG] [Thread-304077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] client lang: <none>
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] server lang: <none>
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] kex follows: False
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:56:58.747 [DEBUG] [Thread-304077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:56:58.748 [DEBUG] [Thread-304077] [transport.py] [_log()] Compression: none
2025-12-24T14:56:58.748 [DEBUG] [Thread-304077] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:56:58.780 [DEBUG] [Thread-304077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:56:58.784 [DEBUG] [Thread-304077] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:56:58.785 [DEBUG] [Thread-304077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:56:58.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:56:58.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:56:58.789 [DEBUG] [Thread-304077] [transport.py] [_log()] userauth is OK
2025-12-24T14:56:58.789 [DEBUG] [Thread-304077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:56:58.789 [DEBUG] [Thread-304077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:56:58.789 [DEBUG] [Thread-304077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:56:58.789 [DEBUG] [Thread-304077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:56:58.808 [INFO] [Thread-304077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:56:58.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:56:59.428 [DEBUG] [Thread-304077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:56:59.428 [DEBUG] [Thread-304077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:56:59.429 [DEBUG] [Thread-304077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:56:59.470 [DEBUG] [Thread-304077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:56:59.470 [DEBUG] [Thread-304077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:56:59.472 [DEBUG] [Thread-304077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:56:59.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:56:59.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:56:59.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:56:59.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:56:59.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:56:59.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:56:59.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:56:59.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:56:59.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:56:59.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.538957 -999.00  +22.80  15.23     33   +6.10 1 2 1 1 1   888    0 16.57 -14.48 ----- 15.2 15.2 115.4 17.7 27.2 -14.4 27.7 -14.4 27.6 -13.6 27.8 -13.5
2025-12-24T14:56:59.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:56:59.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:56:59.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.538957
2025-12-24T14:56:59.501 [DEBUG] [Thread-304077] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:56:59.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:56:59.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:56:59.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:56:59.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:56:59.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:56:59.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:56:21', tmtdew=19.41, humidity=28.12, cloud=0.0, wind=16.64, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:56:05.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:56:59.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:56:59.602 [DEBUG] [Thread-304080] [transport.py] [_log()] starting thread (client mode): 0xf574c880
2025-12-24T14:56:59.602 [DEBUG] [Thread-304080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:56:59.617 [DEBUG] [Thread-304080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:56:59.617 [INFO] [Thread-304080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] client lang: <none>
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] server lang: <none>
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] kex follows: False
2025-12-24T14:56:59.624 [DEBUG] [Thread-304080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:56:59.625 [DEBUG] [Thread-304080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:56:59.625 [DEBUG] [Thread-304080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:56:59.625 [DEBUG] [Thread-304080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:56:59.625 [DEBUG] [Thread-304080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:56:59.625 [DEBUG] [Thread-304080] [transport.py] [_log()] Compression: none
2025-12-24T14:56:59.625 [DEBUG] [Thread-304080] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:56:59.684 [DEBUG] [Thread-304080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:56:59.684 [DEBUG] [Thread-304080] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:56:59.685 [DEBUG] [Thread-304080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:56:59.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:56:59.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:56:59.740 [DEBUG] [Thread-304080] [transport.py] [_log()] userauth is OK
2025-12-24T14:56:59.740 [DEBUG] [Thread-304080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:56:59.740 [DEBUG] [Thread-304080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:56:59.740 [DEBUG] [Thread-304080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:56:59.740 [DEBUG] [Thread-304080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:56:59.755 [INFO] [Thread-304080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:56:59.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:56:59.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:57:00.597 [DEBUG] [Thread-304080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:57:00.597 [DEBUG] [Thread-304080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:57:00.644 [DEBUG] [Thread-304080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:57:00.645 [DEBUG] [Thread-304080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:57:00.653 [DEBUG] [Thread-304080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:57:00.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:57:00.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:57:00.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:57:00.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:57:00.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:57:00.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:57:00.686 [DEBUG] [Thread-304080] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:57:07.761 [DEBUG] [Thread-304082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:57:19.368 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:57:19.373 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:57:22.928 [DEBUG] [Thread-304083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:57:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:57:30.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:57:30.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:57:31.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 56, 55), 19.22, 28.27, 0.0, 15.99, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:57:31.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:56:55
2025-12-24T14:57:31.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:57:32.086 [DEBUG] [Thread-304084] [transport.py] [_log()] starting thread (client mode): 0xf57892a0
2025-12-24T14:57:32.087 [DEBUG] [Thread-304084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:57:32.087 [DEBUG] [Thread-304084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:57:32.087 [INFO] [Thread-304084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] client lang: <none>
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] server lang: <none>
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] kex follows: False
2025-12-24T14:57:32.091 [DEBUG] [Thread-304084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:57:32.092 [DEBUG] [Thread-304084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:57:32.092 [DEBUG] [Thread-304084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:57:32.092 [DEBUG] [Thread-304084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:57:32.092 [DEBUG] [Thread-304084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:57:32.092 [DEBUG] [Thread-304084] [transport.py] [_log()] Compression: none
2025-12-24T14:57:32.092 [DEBUG] [Thread-304084] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:57:32.123 [DEBUG] [Thread-304084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:57:32.125 [DEBUG] [Thread-304084] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:57:32.126 [DEBUG] [Thread-304084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:57:32.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:57:32.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:57:32.130 [DEBUG] [Thread-304084] [transport.py] [_log()] userauth is OK
2025-12-24T14:57:32.130 [DEBUG] [Thread-304084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:57:32.130 [DEBUG] [Thread-304084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:57:32.130 [DEBUG] [Thread-304084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:57:32.130 [DEBUG] [Thread-304084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:57:32.148 [INFO] [Thread-304084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:57:32.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:57:32.757 [DEBUG] [Thread-304084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:57:32.757 [DEBUG] [Thread-304084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:57:32.758 [DEBUG] [Thread-304084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:57:32.798 [DEBUG] [Thread-304084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:57:32.798 [DEBUG] [Thread-304084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:57:32.802 [DEBUG] [Thread-304084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:57:32.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:57:32.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:57:32.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:57:32.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:57:32.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:57:32.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:57:32.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:57:32.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:57:32.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:57:32.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.539652 -999.00  +23.20   9.63     33   +6.20 1 2 1 1 1   888    0 16.53 -12.26 ----- 9.6 9.6 149.2 17.8 27.5 -13.7 27.7 -13.6 27.7 -13.2 27.9 -13.2
2025-12-24T14:57:32.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:57:32.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:57:32.832 [DEBUG] [Thread-304084] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:57:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.539652
2025-12-24T14:57:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:57:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:57:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:57:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:57:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:57:32.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:56:55', tmtdew=19.22, humidity=28.27, cloud=0.0, wind=15.99, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:57:05.933', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:57:32.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:57:32.961 [DEBUG] [Thread-304087] [transport.py] [_log()] starting thread (client mode): 0xf57bfb80
2025-12-24T14:57:32.962 [DEBUG] [Thread-304087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:57:32.975 [DEBUG] [Thread-304087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:57:32.976 [INFO] [Thread-304087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:57:32.983 [DEBUG] [Thread-304087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:57:32.983 [DEBUG] [Thread-304087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:57:32.983 [DEBUG] [Thread-304087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:57:32.983 [DEBUG] [Thread-304087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] client lang: <none>
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] server lang: <none>
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] kex follows: False
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:57:32.984 [DEBUG] [Thread-304087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:57:32.985 [DEBUG] [Thread-304087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:57:32.985 [DEBUG] [Thread-304087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:57:32.985 [DEBUG] [Thread-304087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:57:32.985 [DEBUG] [Thread-304087] [transport.py] [_log()] Compression: none
2025-12-24T14:57:32.985 [DEBUG] [Thread-304087] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:57:33.039 [DEBUG] [Thread-304087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:57:33.039 [DEBUG] [Thread-304087] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:57:33.040 [DEBUG] [Thread-304087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:57:33.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:57:33.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:57:33.097 [DEBUG] [Thread-304087] [transport.py] [_log()] userauth is OK
2025-12-24T14:57:33.097 [DEBUG] [Thread-304087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:57:33.097 [DEBUG] [Thread-304087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:57:33.097 [DEBUG] [Thread-304087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:57:33.097 [DEBUG] [Thread-304087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:57:33.120 [INFO] [Thread-304087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:57:33.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:57:33.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:57:33.947 [DEBUG] [Thread-304087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:57:33.947 [DEBUG] [Thread-304087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:57:33.999 [DEBUG] [Thread-304087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:57:33.999 [DEBUG] [Thread-304087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:57:34.010 [DEBUG] [Thread-304087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:57:34.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:57:34.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:57:34.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:57:34.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:57:34.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:57:34.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:57:34.056 [DEBUG] [Thread-304087] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:57:37.997 [DEBUG] [Thread-304089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:57:48.887 [DEBUG] [Thread-304090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:57:53.143 [DEBUG] [Thread-304091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:58:04.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:58:04.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:58:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:58:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 57, 28), 19.12, 28.42, 0.0, 11.96, 22.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:58:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:57:28
2025-12-24T14:58:05.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:58:05.483 [DEBUG] [Thread-304092] [transport.py] [_log()] starting thread (client mode): 0xf5789bd0
2025-12-24T14:58:05.484 [DEBUG] [Thread-304092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:58:05.492 [DEBUG] [Thread-304092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:58:05.492 [INFO] [Thread-304092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:58:05.497 [DEBUG] [Thread-304092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] client lang: <none>
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] server lang: <none>
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] kex follows: False
2025-12-24T14:58:05.498 [DEBUG] [Thread-304092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:58:05.499 [DEBUG] [Thread-304092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:58:05.499 [DEBUG] [Thread-304092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:58:05.499 [DEBUG] [Thread-304092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:58:05.499 [DEBUG] [Thread-304092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:58:05.499 [DEBUG] [Thread-304092] [transport.py] [_log()] Compression: none
2025-12-24T14:58:05.499 [DEBUG] [Thread-304092] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:58:05.532 [DEBUG] [Thread-304092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:58:05.535 [DEBUG] [Thread-304092] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:58:05.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:58:05.537 [DEBUG] [Thread-304092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:58:05.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:58:05.541 [DEBUG] [Thread-304092] [transport.py] [_log()] userauth is OK
2025-12-24T14:58:05.541 [DEBUG] [Thread-304092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:58:05.541 [DEBUG] [Thread-304092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:58:05.541 [DEBUG] [Thread-304092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:58:05.541 [DEBUG] [Thread-304092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:58:05.560 [INFO] [Thread-304092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:58:05.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:58:06.318 [DEBUG] [Thread-304092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:58:06.318 [DEBUG] [Thread-304092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:58:06.320 [DEBUG] [Thread-304092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:58:06.359 [DEBUG] [Thread-304092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:58:06.360 [DEBUG] [Thread-304092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:58:06.363 [DEBUG] [Thread-304092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:58:06.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:58:06.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:58:06.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:58:06.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:58:06.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:58:06.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:58:06.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:58:06.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:58:06.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:58:06.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.539999 -999.00  +23.10  12.05     33   +6.10 1 2 1 1 1   888    0 16.80 -9.90 ----- 12.1 12.1 166.2 18.4 27.6 -13.7 27.7 -13.6 27.8 -13.0 27.9 -13.8
2025-12-24T14:58:06.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:58:06.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:58:06.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.539999
2025-12-24T14:58:06.405 [DEBUG] [Thread-304092] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:58:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:58:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:58:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:58:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:58:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:58:06.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:57:28', tmtdew=19.12, humidity=28.42, cloud=0.0, wind=11.96, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:57:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:58:06.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:58:06.521 [DEBUG] [Thread-304095] [transport.py] [_log()] starting thread (client mode): 0xf574db70
2025-12-24T14:58:06.521 [DEBUG] [Thread-304095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:58:06.537 [DEBUG] [Thread-304095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:58:06.537 [INFO] [Thread-304095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:58:06.545 [DEBUG] [Thread-304095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:58:06.545 [DEBUG] [Thread-304095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:58:06.546 [DEBUG] [Thread-304095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:58:06.546 [DEBUG] [Thread-304095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:58:06.546 [DEBUG] [Thread-304095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:58:06.546 [DEBUG] [Thread-304095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:58:06.546 [DEBUG] [Thread-304095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:58:06.546 [DEBUG] [Thread-304095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:58:06.546 [DEBUG] [Thread-304095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:58:06.546 [DEBUG] [Thread-304095] [transport.py] [_log()] client lang: <none>
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] server lang: <none>
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] kex follows: False
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] Compression: none
2025-12-24T14:58:06.547 [DEBUG] [Thread-304095] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:58:06.610 [DEBUG] [Thread-304095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:58:06.611 [DEBUG] [Thread-304095] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:58:06.611 [DEBUG] [Thread-304095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:58:06.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:58:06.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:58:06.669 [DEBUG] [Thread-304095] [transport.py] [_log()] userauth is OK
2025-12-24T14:58:06.670 [DEBUG] [Thread-304095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:58:06.670 [DEBUG] [Thread-304095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:58:06.670 [DEBUG] [Thread-304095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:58:06.670 [DEBUG] [Thread-304095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:58:06.689 [INFO] [Thread-304095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:58:06.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:58:06.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:58:07.548 [DEBUG] [Thread-304095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:58:07.548 [DEBUG] [Thread-304095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:58:07.587 [DEBUG] [Thread-304095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:58:07.587 [DEBUG] [Thread-304095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:58:07.596 [DEBUG] [Thread-304095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:58:07.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:58:07.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:58:07.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:58:07.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:58:07.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:58:07.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:58:07.633 [DEBUG] [Thread-304095] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:58:08.232 [DEBUG] [Thread-304097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:58:19.518 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:58:19.520 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:58:23.389 [DEBUG] [Thread-304098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:58:37.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:58:37.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:58:37.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:58:38.460 [DEBUG] [Thread-304099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:58:38.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 58, 2), 19.09, 28.49, 0.0, 11.59, 22.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:58:38.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:58:02
2025-12-24T14:58:38.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:58:39.000 [DEBUG] [Thread-304100] [transport.py] [_log()] starting thread (client mode): 0xf572f310
2025-12-24T14:58:39.000 [DEBUG] [Thread-304100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:58:39.012 [DEBUG] [Thread-304100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:58:39.012 [INFO] [Thread-304100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:58:39.016 [DEBUG] [Thread-304100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] client lang: <none>
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] server lang: <none>
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] kex follows: False
2025-12-24T14:58:39.017 [DEBUG] [Thread-304100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:58:39.018 [DEBUG] [Thread-304100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:58:39.018 [DEBUG] [Thread-304100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:58:39.018 [DEBUG] [Thread-304100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:58:39.018 [DEBUG] [Thread-304100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:58:39.018 [DEBUG] [Thread-304100] [transport.py] [_log()] Compression: none
2025-12-24T14:58:39.018 [DEBUG] [Thread-304100] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:58:39.049 [DEBUG] [Thread-304100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:58:39.053 [DEBUG] [Thread-304100] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:58:39.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:58:39.055 [DEBUG] [Thread-304100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:58:39.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:58:39.058 [DEBUG] [Thread-304100] [transport.py] [_log()] userauth is OK
2025-12-24T14:58:39.058 [DEBUG] [Thread-304100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:58:39.058 [DEBUG] [Thread-304100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:58:39.058 [DEBUG] [Thread-304100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:58:39.058 [DEBUG] [Thread-304100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:58:39.080 [INFO] [Thread-304100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:58:39.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:58:39.732 [DEBUG] [Thread-304100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:58:39.732 [DEBUG] [Thread-304100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:58:39.733 [DEBUG] [Thread-304100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:58:39.774 [DEBUG] [Thread-304100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:58:39.774 [DEBUG] [Thread-304100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:58:39.778 [DEBUG] [Thread-304100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:58:39.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:58:39.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:58:39.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:58:39.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:58:39.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:58:39.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:58:39.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:58:39.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:58:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:58:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.540346 -999.00  +23.00   8.02     33   +6.20 1 2 1 1 1   888    0 16.72 -7.60 ----- 8.0 8.0 154.4 12.6 27.6 -13.7 27.7 -13.4 27.8 -12.7 28.0 -13.1
2025-12-24T14:58:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:58:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:58:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.540346
2025-12-24T14:58:39.813 [DEBUG] [Thread-304100] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:58:39.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:58:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:58:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:58:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:58:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:58:39.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:58:02', tmtdew=19.09, humidity=28.49, cloud=0.0, wind=11.59, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:58:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:58:39.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:58:39.924 [DEBUG] [Thread-304103] [transport.py] [_log()] starting thread (client mode): 0xf5770850
2025-12-24T14:58:39.925 [DEBUG] [Thread-304103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:58:39.941 [DEBUG] [Thread-304103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:58:39.942 [INFO] [Thread-304103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:58:39.949 [DEBUG] [Thread-304103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:58:39.949 [DEBUG] [Thread-304103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:58:39.950 [DEBUG] [Thread-304103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:58:39.950 [DEBUG] [Thread-304103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:58:39.950 [DEBUG] [Thread-304103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:58:39.950 [DEBUG] [Thread-304103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:58:39.950 [DEBUG] [Thread-304103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:58:39.950 [DEBUG] [Thread-304103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] client lang: <none>
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] server lang: <none>
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] kex follows: False
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] Compression: none
2025-12-24T14:58:39.951 [DEBUG] [Thread-304103] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:58:40.010 [DEBUG] [Thread-304103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:58:40.011 [DEBUG] [Thread-304103] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:58:40.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:58:40.011 [DEBUG] [Thread-304103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:58:40.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:58:40.070 [DEBUG] [Thread-304103] [transport.py] [_log()] userauth is OK
2025-12-24T14:58:40.070 [DEBUG] [Thread-304103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:58:40.070 [DEBUG] [Thread-304103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:58:40.071 [DEBUG] [Thread-304103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:58:40.071 [DEBUG] [Thread-304103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:58:40.089 [INFO] [Thread-304103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:58:40.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:58:40.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:58:40.981 [DEBUG] [Thread-304103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:58:40.981 [DEBUG] [Thread-304103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:58:41.028 [DEBUG] [Thread-304103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:58:41.028 [DEBUG] [Thread-304103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:58:41.038 [DEBUG] [Thread-304103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:58:41.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:58:41.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:58:41.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:58:41.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:58:41.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:58:41.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:58:41.076 [DEBUG] [Thread-304103] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:58:49.199 [DEBUG] [Thread-304105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:58:53.528 [DEBUG] [Thread-304106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:59:08.615 [DEBUG] [Thread-304107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:59:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:59:11.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:59:11.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:59:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 58, 35), 19.12, 28.42, 0.0, 5.86, 22.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:59:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:58:35
2025-12-24T14:59:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:59:12.350 [DEBUG] [Thread-304108] [transport.py] [_log()] starting thread (client mode): 0xf57bc0a0
2025-12-24T14:59:12.351 [DEBUG] [Thread-304108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:59:12.362 [DEBUG] [Thread-304108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:59:12.362 [INFO] [Thread-304108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:59:12.367 [DEBUG] [Thread-304108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:59:12.367 [DEBUG] [Thread-304108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:59:12.367 [DEBUG] [Thread-304108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:59:12.367 [DEBUG] [Thread-304108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:59:12.367 [DEBUG] [Thread-304108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:59:12.367 [DEBUG] [Thread-304108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:59:12.367 [DEBUG] [Thread-304108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] client lang: <none>
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] server lang: <none>
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] kex follows: False
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:59:12.368 [DEBUG] [Thread-304108] [transport.py] [_log()] Compression: none
2025-12-24T14:59:12.369 [DEBUG] [Thread-304108] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:59:12.399 [DEBUG] [Thread-304108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:59:12.403 [DEBUG] [Thread-304108] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:59:12.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:59:12.405 [DEBUG] [Thread-304108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:59:12.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:59:12.408 [DEBUG] [Thread-304108] [transport.py] [_log()] userauth is OK
2025-12-24T14:59:12.408 [DEBUG] [Thread-304108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:59:12.408 [DEBUG] [Thread-304108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:59:12.408 [DEBUG] [Thread-304108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:59:12.408 [DEBUG] [Thread-304108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:59:12.426 [INFO] [Thread-304108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:59:12.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:59:13.260 [DEBUG] [Thread-304108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:59:13.260 [DEBUG] [Thread-304108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:59:13.261 [DEBUG] [Thread-304108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:59:13.300 [DEBUG] [Thread-304108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:59:13.300 [DEBUG] [Thread-304108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:59:13.304 [DEBUG] [Thread-304108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:59:13.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:59:13.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:59:13.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:59:13.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:59:13.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:59:13.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:59:13.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:59:13.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:59:13.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:59:13.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.540693 -999.00  +22.90   9.14     33   +6.10 1 2 1 1 1   888    0 16.96 -6.65 ----- 9.1 9.1 116.2 13.1 27.7 -13.2 27.8 -13.1 27.9 -13.0 28.1 -13.5
2025-12-24T14:59:13.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:59:13.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:59:13.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.540693
2025-12-24T14:59:13.338 [DEBUG] [Thread-304108] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:59:13.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:59:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:59:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:59:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:59:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:59:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:58:35', tmtdew=19.12, humidity=28.42, cloud=0.0, wind=5.86, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:58:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:59:13.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:59:13.436 [DEBUG] [Thread-304111] [transport.py] [_log()] starting thread (client mode): 0xf81c17b0
2025-12-24T14:59:13.436 [DEBUG] [Thread-304111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:59:13.454 [DEBUG] [Thread-304111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:59:13.454 [INFO] [Thread-304111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] client lang: <none>
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] server lang: <none>
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] kex follows: False
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:59:13.462 [DEBUG] [Thread-304111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:59:13.463 [DEBUG] [Thread-304111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:59:13.463 [DEBUG] [Thread-304111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:59:13.463 [DEBUG] [Thread-304111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:59:13.463 [DEBUG] [Thread-304111] [transport.py] [_log()] Compression: none
2025-12-24T14:59:13.463 [DEBUG] [Thread-304111] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:59:13.520 [DEBUG] [Thread-304111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:59:13.520 [DEBUG] [Thread-304111] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:59:13.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:59:13.521 [DEBUG] [Thread-304111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:59:13.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:59:13.578 [DEBUG] [Thread-304111] [transport.py] [_log()] userauth is OK
2025-12-24T14:59:13.578 [DEBUG] [Thread-304111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:59:13.578 [DEBUG] [Thread-304111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:59:13.578 [DEBUG] [Thread-304111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:59:13.578 [DEBUG] [Thread-304111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:59:13.592 [INFO] [Thread-304111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:59:13.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:59:13.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:59:14.462 [DEBUG] [Thread-304111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:59:14.462 [DEBUG] [Thread-304111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:59:14.509 [DEBUG] [Thread-304111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:59:14.509 [DEBUG] [Thread-304111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:59:14.518 [DEBUG] [Thread-304111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:59:14.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:59:14.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')
2025-12-24T14:59:14.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') -> 00000000
2025-12-24T14:59:14.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:59:14.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:59:14.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:59:14.550 [DEBUG] [Thread-304111] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:59:19.668 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:59:19.670 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:59:23.687 [DEBUG] [Thread-304113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:59:38.812 [DEBUG] [Thread-304114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:59:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T14:59:44.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T14:59:44.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T14:59:45.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 59, 8), 19.17, 28.35, 0.0, 5.52, 22.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T14:59:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:59:08
2025-12-24T14:59:45.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T14:59:45.861 [DEBUG] [Thread-304115] [transport.py] [_log()] starting thread (client mode): 0xf572ddb0
2025-12-24T14:59:45.862 [DEBUG] [Thread-304115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:59:45.873 [DEBUG] [Thread-304115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T14:59:45.873 [INFO] [Thread-304115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T14:59:45.879 [DEBUG] [Thread-304115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:59:45.879 [DEBUG] [Thread-304115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T14:59:45.879 [DEBUG] [Thread-304115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:59:45.879 [DEBUG] [Thread-304115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:59:45.879 [DEBUG] [Thread-304115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] client lang: <none>
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] server lang: <none>
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] kex follows: False
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:59:45.880 [DEBUG] [Thread-304115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:59:45.881 [DEBUG] [Thread-304115] [transport.py] [_log()] Compression: none
2025-12-24T14:59:45.881 [DEBUG] [Thread-304115] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:59:45.920 [DEBUG] [Thread-304115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:59:45.926 [DEBUG] [Thread-304115] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:59:45.928 [DEBUG] [Thread-304115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T14:59:45.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T14:59:45.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:59:45.935 [DEBUG] [Thread-304115] [transport.py] [_log()] userauth is OK
2025-12-24T14:59:45.935 [DEBUG] [Thread-304115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:59:45.935 [DEBUG] [Thread-304115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:59:45.935 [DEBUG] [Thread-304115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T14:59:45.935 [DEBUG] [Thread-304115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:59:45.975 [INFO] [Thread-304115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:59:45.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:59:46.643 [DEBUG] [Thread-304115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:59:46.643 [DEBUG] [Thread-304115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:59:46.644 [DEBUG] [Thread-304115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T14:59:46.684 [DEBUG] [Thread-304115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:59:46.684 [DEBUG] [Thread-304115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:59:46.688 [DEBUG] [Thread-304115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:59:46.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:59:46.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T14:59:46.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T14:59:46.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T14:59:46.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:59:46.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T14:59:46.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:59:46.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:59:46.723 [DEBUG] [Thread-304115] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:59:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T14:59:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.541040 -999.00  +23.00   7.03     33   +6.20 1 2 1 1 1   888    0 16.86 -6.68 ----- 7.0 7.0 109.1 9.7 27.8 -13.2 27.8 -12.9 28.0 -13.2 28.1 -13.5
2025-12-24T14:59:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T14:59:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T14:59:46.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.541040
2025-12-24T14:59:46.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T14:59:46.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T14:59:46.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T14:59:46.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T14:59:46.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T14:59:46.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:59:08', tmtdew=19.17, humidity=28.35, cloud=0.0, wind=5.52, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:59:05.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T14:59:46.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T14:59:46.838 [DEBUG] [Thread-304118] [transport.py] [_log()] starting thread (client mode): 0xf5770d60
2025-12-24T14:59:46.838 [DEBUG] [Thread-304118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T14:59:46.853 [DEBUG] [Thread-304118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T14:59:46.853 [INFO] [Thread-304118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T14:59:46.860 [DEBUG] [Thread-304118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T14:59:46.860 [DEBUG] [Thread-304118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] client lang: <none>
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] server lang: <none>
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] kex follows: False
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] Compression: none
2025-12-24T14:59:46.861 [DEBUG] [Thread-304118] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T14:59:46.925 [DEBUG] [Thread-304118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T14:59:46.925 [DEBUG] [Thread-304118] [transport.py] [_log()] Switch to new keys ...
2025-12-24T14:59:46.926 [DEBUG] [Thread-304118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T14:59:46.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T14:59:46.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T14:59:46.985 [DEBUG] [Thread-304118] [transport.py] [_log()] userauth is OK
2025-12-24T14:59:46.985 [DEBUG] [Thread-304118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T14:59:46.985 [DEBUG] [Thread-304118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T14:59:46.985 [DEBUG] [Thread-304118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T14:59:46.985 [DEBUG] [Thread-304118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T14:59:47.002 [INFO] [Thread-304118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T14:59:47.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T14:59:47.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T14:59:47.844 [DEBUG] [Thread-304118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T14:59:47.845 [DEBUG] [Thread-304118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T14:59:47.892 [DEBUG] [Thread-304118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T14:59:47.893 [DEBUG] [Thread-304118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T14:59:47.902 [DEBUG] [Thread-304118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T14:59:47.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T14:59:47.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T14:59:47.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T14:59:47.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T14:59:47.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T14:59:47.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T14:59:47.940 [DEBUG] [Thread-304118] [transport.py] [_log()] EOF in transport thread
2025-12-24T14:59:49.455 [DEBUG] [Thread-304120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T14:59:53.878 [DEBUG] [Thread-304121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:00:09.048 [DEBUG] [Thread-304122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:00:17.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:00:17.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:00:17.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
2025-12-24T15:00:18.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 14, 59, 41), 19.36, 28.3, 0.0, 7.57, 22.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:00:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 14:59:41
2025-12-24T15:00:19.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:00:19.247 [DEBUG] [Thread-304123] [transport.py] [_log()] starting thread (client mode): 0xf572fb50
2025-12-24T15:00:19.248 [DEBUG] [Thread-304123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:00:19.249 [DEBUG] [Thread-304123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:00:19.249 [INFO] [Thread-304123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] client lang: <none>
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] server lang: <none>
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] kex follows: False
2025-12-24T15:00:19.253 [DEBUG] [Thread-304123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:00:19.254 [DEBUG] [Thread-304123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:00:19.254 [DEBUG] [Thread-304123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:00:19.254 [DEBUG] [Thread-304123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:00:19.254 [DEBUG] [Thread-304123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:00:19.254 [DEBUG] [Thread-304123] [transport.py] [_log()] Compression: none
2025-12-24T15:00:19.254 [DEBUG] [Thread-304123] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:00:19.286 [DEBUG] [Thread-304123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:00:19.289 [DEBUG] [Thread-304123] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:00:19.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:00:19.291 [DEBUG] [Thread-304123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:00:19.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:00:19.293 [DEBUG] [Thread-304123] [transport.py] [_log()] userauth is OK
2025-12-24T15:00:19.293 [DEBUG] [Thread-304123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:00:19.293 [DEBUG] [Thread-304123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:00:19.293 [DEBUG] [Thread-304123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:00:19.293 [DEBUG] [Thread-304123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:00:19.312 [INFO] [Thread-304123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:00:19.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:00:19.814 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:00:19.815 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:00:20.127 [DEBUG] [Thread-304123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:00:20.127 [DEBUG] [Thread-304123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:00:20.128 [DEBUG] [Thread-304123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:00:20.169 [DEBUG] [Thread-304123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:00:20.169 [DEBUG] [Thread-304123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:00:20.177 [DEBUG] [Thread-304123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:00:20.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:00:20.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:00:20.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:00:20.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:00:20.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:00:20.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:00:20.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:00:20.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:00:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:00:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.541388 -999.00  +23.40   6.12     33   +6.30 1 2 1 1 1   888    0 16.69 -4.74 ----- 6.1 6.1 140.6 14.7 28.0 -11.1 28.2 -11.6 28.4 -9.4 28.3 -12.3
2025-12-24T15:00:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:00:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:00:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.541388
2025-12-24T15:00:20.211 [DEBUG] [Thread-304123] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:00:20.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:00:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:00:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:00:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:00:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:00:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T14:59:41', tmtdew=19.36, humidity=28.3, cloud=0.0, wind=7.57, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T12:59:35.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:00:20.331 [DEBUG] [Thread-304126] [transport.py] [_log()] starting thread (client mode): 0xf81e61a0
2025-12-24T15:00:20.331 [DEBUG] [Thread-304126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:00:20.349 [DEBUG] [Thread-304126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:00:20.349 [INFO] [Thread-304126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] client lang: <none>
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] server lang: <none>
2025-12-24T15:00:20.356 [DEBUG] [Thread-304126] [transport.py] [_log()] kex follows: False
2025-12-24T15:00:20.357 [DEBUG] [Thread-304126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:00:20.357 [DEBUG] [Thread-304126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:00:20.357 [DEBUG] [Thread-304126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:00:20.357 [DEBUG] [Thread-304126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:00:20.357 [DEBUG] [Thread-304126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:00:20.357 [DEBUG] [Thread-304126] [transport.py] [_log()] Compression: none
2025-12-24T15:00:20.357 [DEBUG] [Thread-304126] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:00:20.412 [DEBUG] [Thread-304126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:00:20.412 [DEBUG] [Thread-304126] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:00:20.412 [DEBUG] [Thread-304126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:00:20.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:00:20.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:00:20.471 [DEBUG] [Thread-304126] [transport.py] [_log()] userauth is OK
2025-12-24T15:00:20.471 [DEBUG] [Thread-304126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:00:20.472 [DEBUG] [Thread-304126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:00:20.472 [DEBUG] [Thread-304126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:00:20.472 [DEBUG] [Thread-304126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:00:20.485 [INFO] [Thread-304126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:00:20.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:00:20.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:00:21.332 [DEBUG] [Thread-304126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:00:21.332 [DEBUG] [Thread-304126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:00:21.371 [DEBUG] [Thread-304126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:00:21.371 [DEBUG] [Thread-304126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:00:21.380 [DEBUG] [Thread-304126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:00:21.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:00:21.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:00:21.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:00:21.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:00:21.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:00:21.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:00:21.418 [DEBUG] [Thread-304126] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:00:24.141 [DEBUG] [Thread-304128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:00:39.249 [DEBUG] [Thread-304129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:00:49.709 [DEBUG] [Thread-304130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:00:51.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:00:51.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:00:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:00:52.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 0, 14), 19.4, 28.26, 0.0, 10.71, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:00:52.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:00:14
2025-12-24T15:00:52.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:00:52.675 [DEBUG] [Thread-304131] [transport.py] [_log()] starting thread (client mode): 0xf5789690
2025-12-24T15:00:52.675 [DEBUG] [Thread-304131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:00:52.683 [DEBUG] [Thread-304131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:00:52.684 [INFO] [Thread-304131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:00:52.691 [DEBUG] [Thread-304131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:00:52.691 [DEBUG] [Thread-304131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:00:52.691 [DEBUG] [Thread-304131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] client lang: <none>
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] server lang: <none>
2025-12-24T15:00:52.692 [DEBUG] [Thread-304131] [transport.py] [_log()] kex follows: False
2025-12-24T15:00:52.693 [DEBUG] [Thread-304131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:00:52.693 [DEBUG] [Thread-304131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:00:52.694 [DEBUG] [Thread-304131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:00:52.694 [DEBUG] [Thread-304131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:00:52.694 [DEBUG] [Thread-304131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:00:52.694 [DEBUG] [Thread-304131] [transport.py] [_log()] Compression: none
2025-12-24T15:00:52.694 [DEBUG] [Thread-304131] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:00:52.742 [DEBUG] [Thread-304131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:00:52.748 [DEBUG] [Thread-304131] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:00:52.750 [DEBUG] [Thread-304131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:00:52.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:00:52.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:00:52.755 [DEBUG] [Thread-304131] [transport.py] [_log()] userauth is OK
2025-12-24T15:00:52.755 [DEBUG] [Thread-304131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:00:52.755 [DEBUG] [Thread-304131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:00:52.755 [DEBUG] [Thread-304131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:00:52.755 [DEBUG] [Thread-304131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:00:52.796 [INFO] [Thread-304131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:00:52.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:00:53.458 [DEBUG] [Thread-304131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:00:53.458 [DEBUG] [Thread-304131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:00:53.459 [DEBUG] [Thread-304131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:00:53.499 [DEBUG] [Thread-304131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:00:53.499 [DEBUG] [Thread-304131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:00:53.501 [DEBUG] [Thread-304131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:00:53.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:00:53.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:00:53.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:00:53.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:00:53.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:00:53.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:00:53.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:00:53.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:00:53.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:00:53.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.541734 -999.00  +23.70  11.30     32   +6.40 1 3 1 1 1   888    0 16.73 -2.81 ----- 11.3 11.3 101.6 29.1 28.6 -8.9 28.6 -9.4 28.9 -8.3 29.0 -8.0
2025-12-24T15:00:53.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:00:53.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:00:53.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.541734
2025-12-24T15:00:53.537 [DEBUG] [Thread-304131] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:00:53.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:00:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:00:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:00:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:00:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-24T15:00:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:00:14', tmtdew=19.4, humidity=28.26, cloud=0.0, wind=10.71, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:00:05.818', atlas_cloud=3, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:00:53.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:00:53.661 [DEBUG] [Thread-304134] [transport.py] [_log()] starting thread (client mode): 0xf5788130
2025-12-24T15:00:53.661 [DEBUG] [Thread-304134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:00:53.675 [DEBUG] [Thread-304134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:00:53.675 [INFO] [Thread-304134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:00:53.683 [DEBUG] [Thread-304134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:00:53.683 [DEBUG] [Thread-304134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:00:53.683 [DEBUG] [Thread-304134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:00:53.683 [DEBUG] [Thread-304134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:00:53.683 [DEBUG] [Thread-304134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] client lang: <none>
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] server lang: <none>
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] kex follows: False
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] Compression: none
2025-12-24T15:00:53.684 [DEBUG] [Thread-304134] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:00:53.744 [DEBUG] [Thread-304134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:00:53.744 [DEBUG] [Thread-304134] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:00:53.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:00:53.745 [DEBUG] [Thread-304134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:00:53.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:00:53.801 [DEBUG] [Thread-304134] [transport.py] [_log()] userauth is OK
2025-12-24T15:00:53.801 [DEBUG] [Thread-304134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:00:53.801 [DEBUG] [Thread-304134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:00:53.801 [DEBUG] [Thread-304134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:00:53.801 [DEBUG] [Thread-304134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:00:53.815 [INFO] [Thread-304134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:00:53.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:00:53.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:00:54.313 [DEBUG] [Thread-304136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:00:54.719 [DEBUG] [Thread-304134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:00:54.719 [DEBUG] [Thread-304134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:00:54.767 [DEBUG] [Thread-304134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:00:54.767 [DEBUG] [Thread-304134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:00:54.776 [DEBUG] [Thread-304134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:00:54.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:00:54.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:00:54.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:00:54.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:00:54.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:00:54.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:00:54.814 [DEBUG] [Thread-304134] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:01:09.504 [DEBUG] [Thread-304137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:01:19.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:01:19.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:01:24.621 [DEBUG] [Thread-304138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:01:24.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:01:24.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:01:24.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
2025-12-24T15:01:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 0, 48), 19.8, 27.34, 0.0, 16.75, 23.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:01:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:00:48
2025-12-24T15:01:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:01:26.011 [DEBUG] [Thread-304139] [transport.py] [_log()] starting thread (client mode): 0xf81c17b0
2025-12-24T15:01:26.011 [DEBUG] [Thread-304139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:01:26.024 [DEBUG] [Thread-304139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:01:26.024 [INFO] [Thread-304139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:01:26.030 [DEBUG] [Thread-304139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:01:26.030 [DEBUG] [Thread-304139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:01:26.030 [DEBUG] [Thread-304139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:01:26.030 [DEBUG] [Thread-304139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] client lang: <none>
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] server lang: <none>
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] kex follows: False
2025-12-24T15:01:26.031 [DEBUG] [Thread-304139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:01:26.032 [DEBUG] [Thread-304139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:01:26.032 [DEBUG] [Thread-304139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:01:26.032 [DEBUG] [Thread-304139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:01:26.032 [DEBUG] [Thread-304139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:01:26.032 [DEBUG] [Thread-304139] [transport.py] [_log()] Compression: none
2025-12-24T15:01:26.032 [DEBUG] [Thread-304139] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:01:26.068 [DEBUG] [Thread-304139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:01:26.071 [DEBUG] [Thread-304139] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:01:26.072 [DEBUG] [Thread-304139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:01:26.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:01:26.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:01:26.076 [DEBUG] [Thread-304139] [transport.py] [_log()] userauth is OK
2025-12-24T15:01:26.076 [DEBUG] [Thread-304139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:01:26.076 [DEBUG] [Thread-304139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:01:26.076 [DEBUG] [Thread-304139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:01:26.076 [DEBUG] [Thread-304139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:01:26.094 [INFO] [Thread-304139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:01:26.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:01:26.689 [DEBUG] [Thread-304139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:01:26.689 [DEBUG] [Thread-304139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:01:26.689 [DEBUG] [Thread-304139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:01:26.729 [DEBUG] [Thread-304139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:01:26.730 [DEBUG] [Thread-304139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:01:26.732 [DEBUG] [Thread-304139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:01:26.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:01:26.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:01:26.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:01:26.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:01:26.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:01:26.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:01:26.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:01:26.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:01:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:01:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.542082 -999.00  +24.00  12.15     32   +6.30 1 3 1 1 1   888    0 16.74 0.25 ----- 12.2 12.2 148.8 22.8 29.1 -9.1 29.1 -10.1 29.6 -9.6 29.6 -9.2
2025-12-24T15:01:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:01:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:01:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.542082
2025-12-24T15:01:26.764 [DEBUG] [Thread-304139] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:01:26.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:01:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:01:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:01:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:01:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-24T15:01:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:00:48', tmtdew=19.8, humidity=27.34, cloud=0.0, wind=16.75, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:00:35.885', atlas_cloud=3, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:01:26.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:01:26.864 [DEBUG] [Thread-304142] [transport.py] [_log()] starting thread (client mode): 0xf57bdff0
2025-12-24T15:01:26.864 [DEBUG] [Thread-304142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:01:26.879 [DEBUG] [Thread-304142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:01:26.879 [INFO] [Thread-304142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:01:26.886 [DEBUG] [Thread-304142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] client lang: <none>
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] server lang: <none>
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] kex follows: False
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] Compression: none
2025-12-24T15:01:26.887 [DEBUG] [Thread-304142] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:01:26.948 [DEBUG] [Thread-304142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:01:26.949 [DEBUG] [Thread-304142] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:01:26.949 [DEBUG] [Thread-304142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:01:26.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:01:26.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:01:27.010 [DEBUG] [Thread-304142] [transport.py] [_log()] userauth is OK
2025-12-24T15:01:27.010 [DEBUG] [Thread-304142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:01:27.010 [DEBUG] [Thread-304142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:01:27.010 [DEBUG] [Thread-304142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:01:27.010 [DEBUG] [Thread-304142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:01:27.033 [INFO] [Thread-304142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:01:27.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:01:27.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:01:27.948 [DEBUG] [Thread-304142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:01:27.948 [DEBUG] [Thread-304142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:01:27.994 [DEBUG] [Thread-304142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:01:27.994 [DEBUG] [Thread-304142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:01:28.003 [DEBUG] [Thread-304142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:01:28.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:01:28.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:01:28.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
2025-12-24T15:01:28.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:01:28.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:01:28.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:01:28.036 [DEBUG] [Thread-304142] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:01:39.714 [DEBUG] [Thread-304144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:01:50.043 [DEBUG] [Thread-304145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:01:54.800 [DEBUG] [Thread-304146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:01:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:01:58.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:01:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:01:58.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 1, 21), 19.86, 27.24, 0.0, 17.96, 23.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:01:58.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:01:21
2025-12-24T15:01:59.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:01:59.330 [DEBUG] [Thread-304147] [transport.py] [_log()] starting thread (client mode): 0xf81e7c10
2025-12-24T15:01:59.331 [DEBUG] [Thread-304147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:01:59.341 [DEBUG] [Thread-304147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:01:59.341 [INFO] [Thread-304147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:01:59.347 [DEBUG] [Thread-304147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:01:59.348 [DEBUG] [Thread-304147] [transport.py] [_log()] client lang: <none>
2025-12-24T15:01:59.348 [DEBUG] [Thread-304147] [transport.py] [_log()] server lang: <none>
2025-12-24T15:01:59.348 [DEBUG] [Thread-304147] [transport.py] [_log()] kex follows: False
2025-12-24T15:01:59.348 [DEBUG] [Thread-304147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:01:59.349 [DEBUG] [Thread-304147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:01:59.349 [DEBUG] [Thread-304147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:01:59.349 [DEBUG] [Thread-304147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:01:59.349 [DEBUG] [Thread-304147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:01:59.349 [DEBUG] [Thread-304147] [transport.py] [_log()] Compression: none
2025-12-24T15:01:59.349 [DEBUG] [Thread-304147] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:01:59.390 [DEBUG] [Thread-304147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:01:59.395 [DEBUG] [Thread-304147] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:01:59.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:01:59.399 [DEBUG] [Thread-304147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:01:59.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:01:59.403 [DEBUG] [Thread-304147] [transport.py] [_log()] userauth is OK
2025-12-24T15:01:59.404 [DEBUG] [Thread-304147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:01:59.404 [DEBUG] [Thread-304147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:01:59.404 [DEBUG] [Thread-304147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:01:59.404 [DEBUG] [Thread-304147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:01:59.430 [INFO] [Thread-304147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:01:59.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:02:00.069 [DEBUG] [Thread-304147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:02:00.069 [DEBUG] [Thread-304147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:02:00.071 [DEBUG] [Thread-304147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:02:00.110 [DEBUG] [Thread-304147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:02:00.110 [DEBUG] [Thread-304147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:02:00.113 [DEBUG] [Thread-304147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:02:00.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:02:00.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:02:00.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:02:00.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:02:00.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:02:00.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:02:00.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:02:00.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:02:00.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:02:00.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.542429 -999.00  +23.90  15.01     32   +6.20 1 3 1 1 1   888    0 17.35 4.27 ----- 15.0 15.0 144.7 22.3 29.4 -10.1 29.3 -10.3 29.9 -9.3 30.0 -9.8
2025-12-24T15:02:00.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:02:00.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:02:00.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.542429
2025-12-24T15:02:00.147 [DEBUG] [Thread-304147] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:02:00.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:02:00.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:02:00.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:02:00.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:02:00.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-24T15:02:00.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:01:21', tmtdew=19.86, humidity=27.24, cloud=0.0, wind=17.96, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:01:05.866', atlas_cloud=3, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:02:00.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:02:00.254 [DEBUG] [Thread-304150] [transport.py] [_log()] starting thread (client mode): 0xf8189390
2025-12-24T15:02:00.254 [DEBUG] [Thread-304150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:02:00.270 [DEBUG] [Thread-304150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:02:00.270 [INFO] [Thread-304150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] client lang: <none>
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] server lang: <none>
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] kex follows: False
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:02:00.277 [DEBUG] [Thread-304150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:02:00.278 [DEBUG] [Thread-304150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:02:00.278 [DEBUG] [Thread-304150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:02:00.278 [DEBUG] [Thread-304150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:02:00.278 [DEBUG] [Thread-304150] [transport.py] [_log()] Compression: none
2025-12-24T15:02:00.278 [DEBUG] [Thread-304150] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:02:00.338 [DEBUG] [Thread-304150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:02:00.338 [DEBUG] [Thread-304150] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:02:00.339 [DEBUG] [Thread-304150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:02:00.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:02:00.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:02:00.393 [DEBUG] [Thread-304150] [transport.py] [_log()] userauth is OK
2025-12-24T15:02:00.393 [DEBUG] [Thread-304150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:02:00.393 [DEBUG] [Thread-304150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:02:00.393 [DEBUG] [Thread-304150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:02:00.393 [DEBUG] [Thread-304150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:02:00.407 [INFO] [Thread-304150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:02:00.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:02:00.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:02:01.235 [DEBUG] [Thread-304150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:02:01.235 [DEBUG] [Thread-304150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:02:01.282 [DEBUG] [Thread-304150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:02:01.283 [DEBUG] [Thread-304150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:02:01.291 [DEBUG] [Thread-304150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:02:01.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:02:01.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:02:01.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:02:01.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:02:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:02:01.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:02:01.328 [DEBUG] [Thread-304150] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:02:09.925 [DEBUG] [Thread-304152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:02:20.157 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:02:20.175 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:02:25.221 [DEBUG] [Thread-304153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:02:31.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:02:31.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:02:31.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
2025-12-24T15:02:32.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 1, 54), 20.01, 26.89, 0.0, 16.83, 23.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:02:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:01:54
2025-12-24T15:02:32.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:02:32.573 [DEBUG] [Thread-304154] [transport.py] [_log()] starting thread (client mode): 0xf574d9f0
2025-12-24T15:02:32.574 [DEBUG] [Thread-304154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:02:32.585 [DEBUG] [Thread-304154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:02:32.585 [INFO] [Thread-304154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:02:32.590 [DEBUG] [Thread-304154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] client lang: <none>
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] server lang: <none>
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] kex follows: False
2025-12-24T15:02:32.591 [DEBUG] [Thread-304154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:02:32.592 [DEBUG] [Thread-304154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:02:32.592 [DEBUG] [Thread-304154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:02:32.592 [DEBUG] [Thread-304154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:02:32.592 [DEBUG] [Thread-304154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:02:32.592 [DEBUG] [Thread-304154] [transport.py] [_log()] Compression: none
2025-12-24T15:02:32.592 [DEBUG] [Thread-304154] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:02:32.623 [DEBUG] [Thread-304154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:02:32.627 [DEBUG] [Thread-304154] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:02:32.628 [DEBUG] [Thread-304154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:02:32.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:02:32.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:02:32.633 [DEBUG] [Thread-304154] [transport.py] [_log()] userauth is OK
2025-12-24T15:02:32.633 [DEBUG] [Thread-304154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:02:32.633 [DEBUG] [Thread-304154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:02:32.633 [DEBUG] [Thread-304154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:02:32.633 [DEBUG] [Thread-304154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:02:32.654 [INFO] [Thread-304154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:02:32.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:02:33.310 [DEBUG] [Thread-304154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:02:33.311 [DEBUG] [Thread-304154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:02:33.312 [DEBUG] [Thread-304154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:02:33.352 [DEBUG] [Thread-304154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:02:33.352 [DEBUG] [Thread-304154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:02:33.355 [DEBUG] [Thread-304154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:02:33.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:02:33.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:02:33.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:02:33.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:02:33.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:02:33.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:02:33.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:02:33.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:02:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:02:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.542776 -999.00  +24.10  14.62     31   +6.30 1 2 1 1 1   888    0 17.20 8.60 ----- 14.6 14.6 145.4 17.0 29.7 -10.3 29.6 -10.9 30.3 -10.0 -999.0 -999.0
2025-12-24T15:02:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:02:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:02:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.542776
2025-12-24T15:02:33.391 [DEBUG] [Thread-304154] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:02:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:02:33.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:02:33.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:02:33.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:02:33.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:02:33.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:01:54', tmtdew=20.01, humidity=26.89, cloud=0.0, wind=16.83, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:01:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:02:33.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:02:33.512 [DEBUG] [Thread-304157] [transport.py] [_log()] starting thread (client mode): 0xf574f3a0
2025-12-24T15:02:33.512 [DEBUG] [Thread-304157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:02:33.527 [DEBUG] [Thread-304157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:02:33.527 [INFO] [Thread-304157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:02:33.534 [DEBUG] [Thread-304157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:02:33.534 [DEBUG] [Thread-304157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:02:33.534 [DEBUG] [Thread-304157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:02:33.534 [DEBUG] [Thread-304157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:02:33.534 [DEBUG] [Thread-304157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] client lang: <none>
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] server lang: <none>
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] kex follows: False
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] Compression: none
2025-12-24T15:02:33.535 [DEBUG] [Thread-304157] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:02:33.592 [DEBUG] [Thread-304157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:02:33.592 [DEBUG] [Thread-304157] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:02:33.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:02:33.593 [DEBUG] [Thread-304157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:02:33.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:02:33.650 [DEBUG] [Thread-304157] [transport.py] [_log()] userauth is OK
2025-12-24T15:02:33.650 [DEBUG] [Thread-304157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:02:33.650 [DEBUG] [Thread-304157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:02:33.650 [DEBUG] [Thread-304157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:02:33.650 [DEBUG] [Thread-304157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:02:33.677 [INFO] [Thread-304157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:02:33.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:02:33.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:02:34.489 [DEBUG] [Thread-304157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:02:34.490 [DEBUG] [Thread-304157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:02:34.528 [DEBUG] [Thread-304157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:02:34.528 [DEBUG] [Thread-304157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:02:34.538 [DEBUG] [Thread-304157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:02:34.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:02:34.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:02:34.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:02:34.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:02:34.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:02:34.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:02:34.575 [DEBUG] [Thread-304157] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:02:40.311 [DEBUG] [Thread-304159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:02:50.305 [DEBUG] [Thread-304160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:02:55.609 [DEBUG] [Thread-304161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:03:04.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:03:04.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:03:04.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:03:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 2, 28), 20.27, 26.48, 0.0, 18.95, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:03:05.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:02:28
2025-12-24T15:03:05.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:03:05.933 [DEBUG] [Thread-304162] [transport.py] [_log()] starting thread (client mode): 0xf57536a0
2025-12-24T15:03:05.934 [DEBUG] [Thread-304162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:03:05.935 [DEBUG] [Thread-304162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:03:05.935 [INFO] [Thread-304162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:03:05.941 [DEBUG] [Thread-304162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:03:05.941 [DEBUG] [Thread-304162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:03:05.941 [DEBUG] [Thread-304162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:03:05.941 [DEBUG] [Thread-304162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:03:05.941 [DEBUG] [Thread-304162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:03:05.941 [DEBUG] [Thread-304162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:03:05.942 [DEBUG] [Thread-304162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:03:05.942 [DEBUG] [Thread-304162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:03:05.942 [DEBUG] [Thread-304162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:03:05.942 [DEBUG] [Thread-304162] [transport.py] [_log()] client lang: <none>
2025-12-24T15:03:05.942 [DEBUG] [Thread-304162] [transport.py] [_log()] server lang: <none>
2025-12-24T15:03:05.942 [DEBUG] [Thread-304162] [transport.py] [_log()] kex follows: False
2025-12-24T15:03:05.942 [DEBUG] [Thread-304162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:03:05.943 [DEBUG] [Thread-304162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:03:05.943 [DEBUG] [Thread-304162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:03:05.943 [DEBUG] [Thread-304162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:03:05.944 [DEBUG] [Thread-304162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:03:05.944 [DEBUG] [Thread-304162] [transport.py] [_log()] Compression: none
2025-12-24T15:03:05.944 [DEBUG] [Thread-304162] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:03:05.979 [DEBUG] [Thread-304162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:03:05.982 [DEBUG] [Thread-304162] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:03:05.984 [DEBUG] [Thread-304162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:03:05.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:03:05.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:03:05.989 [DEBUG] [Thread-304162] [transport.py] [_log()] userauth is OK
2025-12-24T15:03:05.990 [DEBUG] [Thread-304162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:03:05.990 [DEBUG] [Thread-304162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:03:05.990 [DEBUG] [Thread-304162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:03:05.990 [DEBUG] [Thread-304162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:03:06.027 [INFO] [Thread-304162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:03:06.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:03:06.640 [DEBUG] [Thread-304162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:03:06.640 [DEBUG] [Thread-304162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:03:06.641 [DEBUG] [Thread-304162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:03:06.681 [DEBUG] [Thread-304162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:03:06.681 [DEBUG] [Thread-304162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:03:06.683 [DEBUG] [Thread-304162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:03:06.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:03:06.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:03:06.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:03:06.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:03:06.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:03:06.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:03:06.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:03:06.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:03:06.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:03:06.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.543471 -999.00  +24.30  23.39     31   +6.20 1 2 1 1 1   888    0 17.51 20.30 ----- 23.4 23.4 169.4 28.2 30.2 -11.2 29.8 -14.9 30.9 -12.2 31.1 -12.2
2025-12-24T15:03:06.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:03:06.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:03:06.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.543471
2025-12-24T15:03:06.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:03:06.723 [DEBUG] [Thread-304162] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:03:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:03:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:03:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:03:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:03:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:02:28', tmtdew=20.27, humidity=26.48, cloud=0.0, wind=18.95, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:02:35.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:03:06.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:03:06.817 [DEBUG] [Thread-304165] [transport.py] [_log()] starting thread (client mode): 0xf5753640
2025-12-24T15:03:06.817 [DEBUG] [Thread-304165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:03:06.832 [DEBUG] [Thread-304165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:03:06.832 [INFO] [Thread-304165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] client lang: <none>
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] server lang: <none>
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] kex follows: False
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:03:06.840 [DEBUG] [Thread-304165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:03:06.841 [DEBUG] [Thread-304165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:03:06.841 [DEBUG] [Thread-304165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:03:06.841 [DEBUG] [Thread-304165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:03:06.841 [DEBUG] [Thread-304165] [transport.py] [_log()] Compression: none
2025-12-24T15:03:06.841 [DEBUG] [Thread-304165] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:03:06.896 [DEBUG] [Thread-304165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:03:06.896 [DEBUG] [Thread-304165] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:03:06.896 [DEBUG] [Thread-304165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:03:06.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:03:06.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:03:06.954 [DEBUG] [Thread-304165] [transport.py] [_log()] userauth is OK
2025-12-24T15:03:06.954 [DEBUG] [Thread-304165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:03:06.954 [DEBUG] [Thread-304165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:03:06.954 [DEBUG] [Thread-304165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:03:06.954 [DEBUG] [Thread-304165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:03:06.970 [INFO] [Thread-304165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:03:06.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:03:06.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:03:07.889 [DEBUG] [Thread-304165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:03:07.889 [DEBUG] [Thread-304165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:03:07.929 [DEBUG] [Thread-304165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:03:07.929 [DEBUG] [Thread-304165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:03:07.937 [DEBUG] [Thread-304165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:03:07.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:03:07.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:03:07.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:03:07.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:03:07.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:03:07.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:03:07.970 [DEBUG] [Thread-304165] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:03:10.711 [DEBUG] [Thread-304167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:03:20.316 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:03:20.318 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:03:25.852 [DEBUG] [Thread-304168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:03:38.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:03:38.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:03:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:03:38.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 3, 1), 20.31, 26.41, 0.0, 17.31, 23.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:03:38.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:03:01
2025-12-24T15:03:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:03:39.267 [DEBUG] [Thread-304169] [transport.py] [_log()] starting thread (client mode): 0xf5752e00
2025-12-24T15:03:39.268 [DEBUG] [Thread-304169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:03:39.276 [DEBUG] [Thread-304169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:03:39.276 [INFO] [Thread-304169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:03:39.281 [DEBUG] [Thread-304169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:03:39.281 [DEBUG] [Thread-304169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:03:39.281 [DEBUG] [Thread-304169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:03:39.281 [DEBUG] [Thread-304169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:03:39.281 [DEBUG] [Thread-304169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:03:39.281 [DEBUG] [Thread-304169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] client lang: <none>
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] server lang: <none>
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] kex follows: False
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:03:39.282 [DEBUG] [Thread-304169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:03:39.283 [DEBUG] [Thread-304169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:03:39.283 [DEBUG] [Thread-304169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:03:39.283 [DEBUG] [Thread-304169] [transport.py] [_log()] Compression: none
2025-12-24T15:03:39.283 [DEBUG] [Thread-304169] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:03:39.315 [DEBUG] [Thread-304169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:03:39.318 [DEBUG] [Thread-304169] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:03:39.319 [DEBUG] [Thread-304169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:03:39.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:03:39.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:03:39.323 [DEBUG] [Thread-304169] [transport.py] [_log()] userauth is OK
2025-12-24T15:03:39.324 [DEBUG] [Thread-304169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:03:39.324 [DEBUG] [Thread-304169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:03:39.324 [DEBUG] [Thread-304169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:03:39.324 [DEBUG] [Thread-304169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:03:39.344 [INFO] [Thread-304169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:03:39.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:03:39.965 [DEBUG] [Thread-304169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:03:39.966 [DEBUG] [Thread-304169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:03:39.967 [DEBUG] [Thread-304169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:03:40.006 [DEBUG] [Thread-304169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:03:40.007 [DEBUG] [Thread-304169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:03:40.010 [DEBUG] [Thread-304169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:03:40.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:03:40.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:03:40.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:03:40.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:03:40.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:03:40.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:03:40.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:03:40.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:03:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:03:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.543818 -999.00  +24.00  15.57     32   +6.30 1 2 1 1 1   888    0 17.62 25.10 ----- 15.6 15.6 163.6 19.5 30.4 -12.4 29.8 -12.4 30.9 -12.2 31.4 -13.6
2025-12-24T15:03:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:03:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:03:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.543818
2025-12-24T15:03:40.047 [DEBUG] [Thread-304169] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:03:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:03:40.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:03:40.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:03:40.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:03:40.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:03:40.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:03:01', tmtdew=20.31, humidity=26.41, cloud=0.0, wind=17.31, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:03:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:03:40.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:03:40.160 [DEBUG] [Thread-304172] [transport.py] [_log()] starting thread (client mode): 0xf81e5210
2025-12-24T15:03:40.160 [DEBUG] [Thread-304172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:03:40.175 [DEBUG] [Thread-304172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:03:40.175 [INFO] [Thread-304172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:03:40.183 [DEBUG] [Thread-304172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:03:40.183 [DEBUG] [Thread-304172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:03:40.183 [DEBUG] [Thread-304172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:03:40.183 [DEBUG] [Thread-304172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:03:40.183 [DEBUG] [Thread-304172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] client lang: <none>
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] server lang: <none>
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] kex follows: False
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] Compression: none
2025-12-24T15:03:40.184 [DEBUG] [Thread-304172] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:03:40.243 [DEBUG] [Thread-304172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:03:40.243 [DEBUG] [Thread-304172] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:03:40.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:03:40.244 [DEBUG] [Thread-304172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:03:40.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:03:40.298 [DEBUG] [Thread-304172] [transport.py] [_log()] userauth is OK
2025-12-24T15:03:40.299 [DEBUG] [Thread-304172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:03:40.299 [DEBUG] [Thread-304172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:03:40.299 [DEBUG] [Thread-304172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:03:40.299 [DEBUG] [Thread-304172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:03:40.323 [INFO] [Thread-304172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:03:40.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:03:40.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:03:40.956 [DEBUG] [Thread-304174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:03:41.129 [DEBUG] [Thread-304172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:03:41.129 [DEBUG] [Thread-304172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:03:41.176 [DEBUG] [Thread-304172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:03:41.177 [DEBUG] [Thread-304172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:03:41.187 [DEBUG] [Thread-304172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:03:41.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:03: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')
2025-12-24T15:03:41.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:03:41.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:03:41.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:03:41.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:03:41.225 [DEBUG] [Thread-304172] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:03:50.630 [DEBUG] [Thread-304175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:03:56.107 [DEBUG] [Thread-304176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:04:11.216 [DEBUG] [Thread-304177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:04:11.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:04:11.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:04:11.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:04:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 3, 35), 19.87, 27.32, 0.0, 14.49, 23.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:04:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:03:35
2025-12-24T15:04:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:04:12.566 [DEBUG] [Thread-304178] [transport.py] [_log()] starting thread (client mode): 0xf81e4550
2025-12-24T15:04:12.567 [DEBUG] [Thread-304178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:04:12.579 [DEBUG] [Thread-304178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:04:12.579 [INFO] [Thread-304178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] client lang: <none>
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] server lang: <none>
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] kex follows: False
2025-12-24T15:04:12.585 [DEBUG] [Thread-304178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:04:12.586 [DEBUG] [Thread-304178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:04:12.586 [DEBUG] [Thread-304178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:04:12.586 [DEBUG] [Thread-304178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:04:12.586 [DEBUG] [Thread-304178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:04:12.586 [DEBUG] [Thread-304178] [transport.py] [_log()] Compression: none
2025-12-24T15:04:12.586 [DEBUG] [Thread-304178] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:04:12.620 [DEBUG] [Thread-304178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:04:12.624 [DEBUG] [Thread-304178] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:04:12.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:04:12.627 [DEBUG] [Thread-304178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:04:12.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:04:12.629 [DEBUG] [Thread-304178] [transport.py] [_log()] userauth is OK
2025-12-24T15:04:12.629 [DEBUG] [Thread-304178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:04:12.629 [DEBUG] [Thread-304178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:04:12.629 [DEBUG] [Thread-304178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:04:12.629 [DEBUG] [Thread-304178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:04:12.662 [INFO] [Thread-304178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:04:12.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:04:13.330 [DEBUG] [Thread-304178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:04:13.330 [DEBUG] [Thread-304178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:04:13.331 [DEBUG] [Thread-304178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:04:13.370 [DEBUG] [Thread-304178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:04:13.370 [DEBUG] [Thread-304178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:04:13.373 [DEBUG] [Thread-304178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:04:13.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:04:13.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:04:13.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:04:13.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:04:13.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:04:13.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:04:13.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:04:13.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:04:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:04:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.544165 -999.00  +24.00   7.62     32   +6.40 1 2 1 1 1   888    0 17.93 30.69 ----- 7.6 7.6 169.2 18.5 30.7 -11.4 30.1 -11.6 31.3 -11.6 31.8 -13.1
2025-12-24T15:04:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:04:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:04:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.544165
2025-12-24T15:04:13.408 [DEBUG] [Thread-304178] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:04:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:04:13.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:04:13.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:04:13.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:04:13.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:04:13.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:03:35', tmtdew=19.87, humidity=27.32, cloud=0.0, wind=14.49, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:03:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:04:13.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:04:13.518 [DEBUG] [Thread-304181] [transport.py] [_log()] starting thread (client mode): 0xf81e4880
2025-12-24T15:04:13.518 [DEBUG] [Thread-304181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:04:13.526 [DEBUG] [Thread-304181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:04:13.526 [INFO] [Thread-304181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] client lang: <none>
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] server lang: <none>
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] kex follows: False
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:04:13.534 [DEBUG] [Thread-304181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:04:13.535 [DEBUG] [Thread-304181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:04:13.535 [DEBUG] [Thread-304181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:04:13.535 [DEBUG] [Thread-304181] [transport.py] [_log()] Compression: none
2025-12-24T15:04:13.535 [DEBUG] [Thread-304181] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:04:13.592 [DEBUG] [Thread-304181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:04:13.592 [DEBUG] [Thread-304181] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:04:13.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:04:13.593 [DEBUG] [Thread-304181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:04:13.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:04:13.649 [DEBUG] [Thread-304181] [transport.py] [_log()] userauth is OK
2025-12-24T15:04:13.649 [DEBUG] [Thread-304181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:04:13.650 [DEBUG] [Thread-304181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:04:13.650 [DEBUG] [Thread-304181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:04:13.650 [DEBUG] [Thread-304181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:04:13.664 [INFO] [Thread-304181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:04:13.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:04:13.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:04:14.540 [DEBUG] [Thread-304181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:04:14.540 [DEBUG] [Thread-304181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:04:14.587 [DEBUG] [Thread-304181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:04:14.588 [DEBUG] [Thread-304181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:04:14.596 [DEBUG] [Thread-304181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:04:14.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:04:14.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:04:14.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:04:14.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:04:14.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:04:14.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:04:14.629 [DEBUG] [Thread-304181] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:04:20.464 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:04:20.466 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:04:26.332 [DEBUG] [Thread-304183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:04:41.475 [DEBUG] [Thread-304184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:04:44.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:04:44.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:04:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:04:45.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 4, 8), 19.78, 27.51, 0.0, 14.38, 23.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:04:45.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:04:08
2025-12-24T15:04:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:04:45.958 [DEBUG] [Thread-304185] [transport.py] [_log()] starting thread (client mode): 0xf8188820
2025-12-24T15:04:45.959 [DEBUG] [Thread-304185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:04:45.971 [DEBUG] [Thread-304185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:04:45.972 [INFO] [Thread-304185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:04:45.978 [DEBUG] [Thread-304185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:04:45.979 [DEBUG] [Thread-304185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:04:45.979 [DEBUG] [Thread-304185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:04:45.979 [DEBUG] [Thread-304185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:04:45.979 [DEBUG] [Thread-304185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:04:45.979 [DEBUG] [Thread-304185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:04:45.979 [DEBUG] [Thread-304185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:04:45.979 [DEBUG] [Thread-304185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:04:45.980 [DEBUG] [Thread-304185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:04:45.980 [DEBUG] [Thread-304185] [transport.py] [_log()] client lang: <none>
2025-12-24T15:04:45.980 [DEBUG] [Thread-304185] [transport.py] [_log()] server lang: <none>
2025-12-24T15:04:45.980 [DEBUG] [Thread-304185] [transport.py] [_log()] kex follows: False
2025-12-24T15:04:45.980 [DEBUG] [Thread-304185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:04:45.981 [DEBUG] [Thread-304185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:04:45.981 [DEBUG] [Thread-304185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:04:45.981 [DEBUG] [Thread-304185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:04:45.982 [DEBUG] [Thread-304185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:04:45.982 [DEBUG] [Thread-304185] [transport.py] [_log()] Compression: none
2025-12-24T15:04:45.982 [DEBUG] [Thread-304185] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:04:46.023 [DEBUG] [Thread-304185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:04:46.029 [DEBUG] [Thread-304185] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:04:46.031 [DEBUG] [Thread-304185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:04:46.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:04:46.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:04:46.038 [DEBUG] [Thread-304185] [transport.py] [_log()] userauth is OK
2025-12-24T15:04:46.039 [DEBUG] [Thread-304185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:04:46.039 [DEBUG] [Thread-304185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:04:46.039 [DEBUG] [Thread-304185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:04:46.039 [DEBUG] [Thread-304185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:04:46.068 [INFO] [Thread-304185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:04:46.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:04:46.737 [DEBUG] [Thread-304185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:04:46.738 [DEBUG] [Thread-304185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:04:46.739 [DEBUG] [Thread-304185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:04:46.770 [DEBUG] [Thread-304185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:04:46.771 [DEBUG] [Thread-304185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:04:46.775 [DEBUG] [Thread-304185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:04:46.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:04:46.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:04:46.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:04:46.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:04:46.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:04:46.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:04:46.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:04:46.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:04:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:04:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.544513 -999.00  +24.00  11.97     31   +6.20 1 2 1 1 1   888    0 18.12 36.44 ----- 12.0 12.0 168.4 15.2 30.6 -14.7 29.7 -16.1 31.0 -17.5 31.8 -15.7
2025-12-24T15:04:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:04:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:04:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.544513
2025-12-24T15:04:46.813 [DEBUG] [Thread-304185] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:04:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:04:46.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:04:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:04:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:04:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:04:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:04:08', tmtdew=19.78, humidity=27.51, cloud=0.0, wind=14.38, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:04:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:04:46.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:04:46.930 [DEBUG] [Thread-304188] [transport.py] [_log()] starting thread (client mode): 0xf81c0af0
2025-12-24T15:04:46.930 [DEBUG] [Thread-304188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:04:46.945 [DEBUG] [Thread-304188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:04:46.945 [INFO] [Thread-304188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] client lang: <none>
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] server lang: <none>
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] kex follows: False
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] Compression: none
2025-12-24T15:04:46.953 [DEBUG] [Thread-304188] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:04:47.008 [DEBUG] [Thread-304188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:04:47.009 [DEBUG] [Thread-304188] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:04:47.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:04:47.009 [DEBUG] [Thread-304188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:04:47.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:04:47.066 [DEBUG] [Thread-304188] [transport.py] [_log()] userauth is OK
2025-12-24T15:04:47.066 [DEBUG] [Thread-304188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:04:47.066 [DEBUG] [Thread-304188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:04:47.066 [DEBUG] [Thread-304188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:04:47.066 [DEBUG] [Thread-304188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:04:47.080 [INFO] [Thread-304188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:04:47.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:04:47.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:04:47.938 [DEBUG] [Thread-304188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:04:47.938 [DEBUG] [Thread-304188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:04:47.985 [DEBUG] [Thread-304188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:04:47.985 [DEBUG] [Thread-304188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:04:47.995 [DEBUG] [Thread-304188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:04:48.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:04:48.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:04:48.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
2025-12-24T15:04:48.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:04:48.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:04:48.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:04:48.034 [DEBUG] [Thread-304188] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:04:50.898 [DEBUG] [Thread-304190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:04:56.541 [DEBUG] [Thread-304191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:05:11.660 [DEBUG] [Thread-304192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:05:18.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:05:18.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:05:18.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:05:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 4, 42), 19.7, 27.59, 0.0, 13.46, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:05:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:04:42
2025-12-24T15:05:19.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:05:19.376 [DEBUG] [Thread-304193] [transport.py] [_log()] starting thread (client mode): 0xf81f2c50
2025-12-24T15:05:19.377 [DEBUG] [Thread-304193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:05:19.385 [DEBUG] [Thread-304193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:05:19.385 [INFO] [Thread-304193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:05:19.390 [DEBUG] [Thread-304193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:05:19.390 [DEBUG] [Thread-304193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:05:19.390 [DEBUG] [Thread-304193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:05:19.390 [DEBUG] [Thread-304193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:05:19.390 [DEBUG] [Thread-304193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:05:19.390 [DEBUG] [Thread-304193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:05:19.390 [DEBUG] [Thread-304193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:05:19.390 [DEBUG] [Thread-304193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] client lang: <none>
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] server lang: <none>
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] kex follows: False
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:05:19.391 [DEBUG] [Thread-304193] [transport.py] [_log()] Compression: none
2025-12-24T15:05:19.392 [DEBUG] [Thread-304193] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:05:19.422 [DEBUG] [Thread-304193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:05:19.426 [DEBUG] [Thread-304193] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:05:19.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:05:19.428 [DEBUG] [Thread-304193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:05:19.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:05:19.430 [DEBUG] [Thread-304193] [transport.py] [_log()] userauth is OK
2025-12-24T15:05:19.430 [DEBUG] [Thread-304193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:05:19.431 [DEBUG] [Thread-304193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:05:19.431 [DEBUG] [Thread-304193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:05:19.431 [DEBUG] [Thread-304193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:05:19.449 [INFO] [Thread-304193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:05:19.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:05:20.087 [DEBUG] [Thread-304193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:05:20.088 [DEBUG] [Thread-304193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:05:20.089 [DEBUG] [Thread-304193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:05:20.128 [DEBUG] [Thread-304193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:05:20.128 [DEBUG] [Thread-304193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:05:20.131 [DEBUG] [Thread-304193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:05:20.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:05:20.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:05:20.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:05:20.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:05:20.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:05:20.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:05:20.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:05:20.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:05:20.157 [DEBUG] [Thread-304193] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:05:20.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:05:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.544859 -999.00  +24.10  19.70     31   +6.30 1 2 1 1 1   888    0 18.45 38.90 ----- 19.7 19.7 156.6 24.8 30.3 -16.8 29.8 -15.9 30.8 -16.4 31.5 -18.7
2025-12-24T15:05:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:05:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:05:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.544859
2025-12-24T15:05:20.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:05:20.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:05:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:05:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:05:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:05:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:04:42', tmtdew=19.7, humidity=27.59, cloud=0.0, wind=13.46, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:04:35.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:05:20.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:05:20.278 [DEBUG] [Thread-304196] [transport.py] [_log()] starting thread (client mode): 0xf81e61a0
2025-12-24T15:05:20.278 [DEBUG] [Thread-304196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:05:20.293 [DEBUG] [Thread-304196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:05:20.293 [INFO] [Thread-304196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] client lang: <none>
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] server lang: <none>
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] kex follows: False
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:05:20.301 [DEBUG] [Thread-304196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:05:20.302 [DEBUG] [Thread-304196] [transport.py] [_log()] Compression: none
2025-12-24T15:05:20.302 [DEBUG] [Thread-304196] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:05:20.357 [DEBUG] [Thread-304196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:05:20.357 [DEBUG] [Thread-304196] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:05:20.357 [DEBUG] [Thread-304196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:05:20.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:05:20.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:05:20.414 [DEBUG] [Thread-304196] [transport.py] [_log()] userauth is OK
2025-12-24T15:05:20.414 [DEBUG] [Thread-304196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:05:20.414 [DEBUG] [Thread-304196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:05:20.414 [DEBUG] [Thread-304196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:05:20.414 [DEBUG] [Thread-304196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:05:20.428 [INFO] [Thread-304196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:05:20.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:05:20.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:05:20.612 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:05:20.613 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:05:21.270 [DEBUG] [Thread-304196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:05:21.270 [DEBUG] [Thread-304196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:05:21.318 [DEBUG] [Thread-304196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:05:21.319 [DEBUG] [Thread-304196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:05:21.328 [DEBUG] [Thread-304196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:05:21.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:05:21.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:05:21.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:05:21.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:05:21.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:05:21.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:05:21.366 [DEBUG] [Thread-304196] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:05:26.751 [DEBUG] [Thread-304198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:05:41.938 [DEBUG] [Thread-304199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:05:51.165 [DEBUG] [Thread-304200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:05:51.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:05:51.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:05:51.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:05:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 5, 15), 20.06, 27.01, 0.0, 17.38, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:05:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:05:15
2025-12-24T15:05:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:05:52.699 [DEBUG] [Thread-304201] [transport.py] [_log()] starting thread (client mode): 0xf5789120
2025-12-24T15:05:52.700 [DEBUG] [Thread-304201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:05:52.700 [DEBUG] [Thread-304201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:05:52.701 [INFO] [Thread-304201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:05:52.705 [DEBUG] [Thread-304201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:05:52.705 [DEBUG] [Thread-304201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:05:52.705 [DEBUG] [Thread-304201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] client lang: <none>
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] server lang: <none>
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] kex follows: False
2025-12-24T15:05:52.706 [DEBUG] [Thread-304201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:05:52.707 [DEBUG] [Thread-304201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:05:52.707 [DEBUG] [Thread-304201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:05:52.708 [DEBUG] [Thread-304201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:05:52.708 [DEBUG] [Thread-304201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:05:52.708 [DEBUG] [Thread-304201] [transport.py] [_log()] Compression: none
2025-12-24T15:05:52.708 [DEBUG] [Thread-304201] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:05:52.748 [DEBUG] [Thread-304201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:05:52.752 [DEBUG] [Thread-304201] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:05:52.754 [DEBUG] [Thread-304201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:05:52.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:05:52.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:05:52.759 [DEBUG] [Thread-304201] [transport.py] [_log()] userauth is OK
2025-12-24T15:05:52.760 [DEBUG] [Thread-304201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:05:52.760 [DEBUG] [Thread-304201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:05:52.760 [DEBUG] [Thread-304201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:05:52.760 [DEBUG] [Thread-304201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:05:52.787 [INFO] [Thread-304201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:05:52.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:05:53.401 [DEBUG] [Thread-304201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:05:53.401 [DEBUG] [Thread-304201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:05:53.404 [DEBUG] [Thread-304201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:05:53.442 [DEBUG] [Thread-304201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:05:53.442 [DEBUG] [Thread-304201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:05:53.446 [DEBUG] [Thread-304201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:05:53.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:05:53.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:05:53.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:05:53.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:05:53.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:05:53.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:05:53.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:05:53.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:05:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:05:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.545207 -999.00  +24.00  20.76     31   +6.00 1 2 1 1 1   888    0 18.09 48.84 ----- 20.8 20.8 158.2 30.5 30.2 -16.5 29.7 -16.3 30.4 -19.3 31.2 -19.1
2025-12-24T15:05:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:05:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:05:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.545207
2025-12-24T15:05:53.483 [DEBUG] [Thread-304201] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:05:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:05:53.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:05:53.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:05:53.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:05:53.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:05:53.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:05:15', tmtdew=20.06, humidity=27.01, cloud=0.0, wind=17.38, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:05:05.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:05:53.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:05:53.584 [DEBUG] [Thread-304204] [transport.py] [_log()] starting thread (client mode): 0xf57a9c30
2025-12-24T15:05:53.584 [DEBUG] [Thread-304204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:05:53.600 [DEBUG] [Thread-304204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:05:53.600 [INFO] [Thread-304204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] client lang: <none>
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] server lang: <none>
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] kex follows: False
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:05:53.607 [DEBUG] [Thread-304204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:05:53.608 [DEBUG] [Thread-304204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:05:53.608 [DEBUG] [Thread-304204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:05:53.608 [DEBUG] [Thread-304204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:05:53.608 [DEBUG] [Thread-304204] [transport.py] [_log()] Compression: none
2025-12-24T15:05:53.608 [DEBUG] [Thread-304204] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:05:53.664 [DEBUG] [Thread-304204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:05:53.664 [DEBUG] [Thread-304204] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:05:53.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:05:53.665 [DEBUG] [Thread-304204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:05:53.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:05:53.722 [DEBUG] [Thread-304204] [transport.py] [_log()] userauth is OK
2025-12-24T15:05:53.722 [DEBUG] [Thread-304204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:05:53.722 [DEBUG] [Thread-304204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:05:53.722 [DEBUG] [Thread-304204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:05:53.723 [DEBUG] [Thread-304204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:05:53.744 [INFO] [Thread-304204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:05:53.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:05:53.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:05:54.581 [DEBUG] [Thread-304204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:05:54.582 [DEBUG] [Thread-304204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:05:54.628 [DEBUG] [Thread-304204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:05:54.628 [DEBUG] [Thread-304204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:05:54.637 [DEBUG] [Thread-304204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:05:54.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:05:54.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:05:54.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:05:54.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:05:54.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:05:54.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:05:54.678 [DEBUG] [Thread-304204] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:05:57.038 [DEBUG] [Thread-304206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:06:12.216 [DEBUG] [Thread-304207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:06:20.767 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:06:20.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:06:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:06:24.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:06:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:06:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 5, 48), 20.96, 25.46, 0.0, 23.57, 24.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:06:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:05:48
2025-12-24T15:06:25.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:06:26.040 [DEBUG] [Thread-304208] [transport.py] [_log()] starting thread (client mode): 0xf81e50f0
2025-12-24T15:06:26.041 [DEBUG] [Thread-304208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:06:26.048 [DEBUG] [Thread-304208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:06:26.048 [INFO] [Thread-304208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:06:26.054 [DEBUG] [Thread-304208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:06:26.054 [DEBUG] [Thread-304208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:06:26.054 [DEBUG] [Thread-304208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:06:26.054 [DEBUG] [Thread-304208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:06:26.054 [DEBUG] [Thread-304208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:06:26.054 [DEBUG] [Thread-304208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] client lang: <none>
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] server lang: <none>
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] kex follows: False
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:06:26.055 [DEBUG] [Thread-304208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:06:26.056 [DEBUG] [Thread-304208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:06:26.056 [DEBUG] [Thread-304208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:06:26.056 [DEBUG] [Thread-304208] [transport.py] [_log()] Compression: none
2025-12-24T15:06:26.056 [DEBUG] [Thread-304208] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:06:26.088 [DEBUG] [Thread-304208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:06:26.092 [DEBUG] [Thread-304208] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:06:26.093 [DEBUG] [Thread-304208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:06:26.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:06:26.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:06:26.096 [DEBUG] [Thread-304208] [transport.py] [_log()] userauth is OK
2025-12-24T15:06:26.097 [DEBUG] [Thread-304208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:06:26.097 [DEBUG] [Thread-304208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:06:26.097 [DEBUG] [Thread-304208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:06:26.097 [DEBUG] [Thread-304208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:06:26.115 [INFO] [Thread-304208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:06:26.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:06:26.788 [DEBUG] [Thread-304208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:06:26.788 [DEBUG] [Thread-304208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:06:26.789 [DEBUG] [Thread-304208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:06:26.829 [DEBUG] [Thread-304208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:06:26.829 [DEBUG] [Thread-304208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:06:26.832 [DEBUG] [Thread-304208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:06:26.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:06:26.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:06:26.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:06:26.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:06:26.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:06:26.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:06:26.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:06:26.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:06:26.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:06:26.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.545554 -999.00  +23.60  18.73     31   +5.90 1 2 1 1 1   888    0 18.83 52.59 ----- 18.7 18.7 173.0 23.0 29.9 -17.2 29.3 -17.5 30.1 -18.6 30.9 -19.6
2025-12-24T15:06:26.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:06:26.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:06:26.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.545554
2025-12-24T15:06:26.875 [DEBUG] [Thread-304208] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:06:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:06:26.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:06:26.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:06:26.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:06:26.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:06:26.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:05:48', tmtdew=20.96, humidity=25.46, cloud=0.0, wind=23.57, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:05:35.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:06:26.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:06:26.974 [DEBUG] [Thread-304211] [transport.py] [_log()] starting thread (client mode): 0xf81e7ac0
2025-12-24T15:06:26.974 [DEBUG] [Thread-304211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:06:26.989 [DEBUG] [Thread-304211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:06:26.989 [INFO] [Thread-304211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] client lang: <none>
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] server lang: <none>
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] kex follows: False
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] Compression: none
2025-12-24T15:06:26.997 [DEBUG] [Thread-304211] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:06:27.057 [DEBUG] [Thread-304211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:06:27.057 [DEBUG] [Thread-304211] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:06:27.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:06:27.057 [DEBUG] [Thread-304211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:06:27.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:06:27.118 [DEBUG] [Thread-304211] [transport.py] [_log()] userauth is OK
2025-12-24T15:06:27.118 [DEBUG] [Thread-304211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:06:27.118 [DEBUG] [Thread-304211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:06:27.118 [DEBUG] [Thread-304211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:06:27.118 [DEBUG] [Thread-304211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:06:27.141 [INFO] [Thread-304211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:06:27.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:06:27.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:06:27.310 [DEBUG] [Thread-304213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:06:27.980 [DEBUG] [Thread-304211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:06:27.980 [DEBUG] [Thread-304211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:06:28.026 [DEBUG] [Thread-304211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:06:28.026 [DEBUG] [Thread-304211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:06:28.035 [DEBUG] [Thread-304211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:06:28.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:06:28.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:06:28.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
2025-12-24T15:06:28.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:06:28.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:06:28.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:06:28.074 [DEBUG] [Thread-304211] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:06:42.431 [DEBUG] [Thread-304214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:06:51.422 [DEBUG] [Thread-304215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:06:57.496 [DEBUG] [Thread-304216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:06:58.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:06:58.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:06:58.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:06:59.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 6, 22), 21.1, 25.23, 0.0, 24.7, 24.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:06:59.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:06:22
2025-12-24T15:06:59.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:06:59.419 [DEBUG] [Thread-304217] [transport.py] [_log()] starting thread (client mode): 0xf81f3af0
2025-12-24T15:06:59.419 [DEBUG] [Thread-304217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:06:59.430 [DEBUG] [Thread-304217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:06:59.430 [INFO] [Thread-304217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] client lang: <none>
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] server lang: <none>
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] kex follows: False
2025-12-24T15:06:59.435 [DEBUG] [Thread-304217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:06:59.436 [DEBUG] [Thread-304217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:06:59.436 [DEBUG] [Thread-304217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:06:59.436 [DEBUG] [Thread-304217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:06:59.436 [DEBUG] [Thread-304217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:06:59.436 [DEBUG] [Thread-304217] [transport.py] [_log()] Compression: none
2025-12-24T15:06:59.436 [DEBUG] [Thread-304217] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:06:59.473 [DEBUG] [Thread-304217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:06:59.477 [DEBUG] [Thread-304217] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:06:59.479 [DEBUG] [Thread-304217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:06:59.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:06:59.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:06:59.485 [DEBUG] [Thread-304217] [transport.py] [_log()] userauth is OK
2025-12-24T15:06:59.485 [DEBUG] [Thread-304217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:06:59.486 [DEBUG] [Thread-304217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:06:59.486 [DEBUG] [Thread-304217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:06:59.486 [DEBUG] [Thread-304217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:06:59.523 [INFO] [Thread-304217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:06:59.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:07:00.179 [DEBUG] [Thread-304217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:07:00.179 [DEBUG] [Thread-304217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:07:00.181 [DEBUG] [Thread-304217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:07:00.221 [DEBUG] [Thread-304217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:07:00.221 [DEBUG] [Thread-304217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:07:00.224 [DEBUG] [Thread-304217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:07:00.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:07:00.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:07:00.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:07:00.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:07:00.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:07:00.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:07:00.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:07:00.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:07:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:07:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.545901 -999.00  +23.60  12.31     32   +6.00 1 2 1 1 1   888    0 18.88 57.39 ----- 12.3 12.3 147.5 21.7 29.8 -17.6 29.3 -16.1 30.0 -17.7 30.8 -19.4
2025-12-24T15:07:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:07:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:07:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.545901
2025-12-24T15:07:00.264 [DEBUG] [Thread-304217] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:07:00.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:07:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:07:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:07:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:07:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:07:00.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:06:22', tmtdew=21.1, humidity=25.23, cloud=0.0, wind=24.7, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:06:05.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:07:00.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:07:00.385 [DEBUG] [Thread-304220] [transport.py] [_log()] starting thread (client mode): 0xf81f3340
2025-12-24T15:07:00.385 [DEBUG] [Thread-304220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:07:00.400 [DEBUG] [Thread-304220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:07:00.400 [INFO] [Thread-304220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:07:00.408 [DEBUG] [Thread-304220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] client lang: <none>
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] server lang: <none>
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] kex follows: False
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] Compression: none
2025-12-24T15:07:00.409 [DEBUG] [Thread-304220] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:07:00.466 [DEBUG] [Thread-304220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:07:00.467 [DEBUG] [Thread-304220] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:07:00.467 [DEBUG] [Thread-304220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:07:00.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:07:00.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:07:00.521 [DEBUG] [Thread-304220] [transport.py] [_log()] userauth is OK
2025-12-24T15:07:00.522 [DEBUG] [Thread-304220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:07:00.522 [DEBUG] [Thread-304220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:07:00.522 [DEBUG] [Thread-304220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:07:00.523 [DEBUG] [Thread-304220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:07:00.539 [INFO] [Thread-304220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:07:00.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:07:00.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:07:01.369 [DEBUG] [Thread-304220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:07:01.370 [DEBUG] [Thread-304220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:07:01.415 [DEBUG] [Thread-304220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:07:01.415 [DEBUG] [Thread-304220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:07:01.424 [DEBUG] [Thread-304220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:07:01.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:07: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')
2025-12-24T15:07:01.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:07:01.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:07:01.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:07:01.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:07:01.477 [DEBUG] [Thread-304220] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:07:12.598 [DEBUG] [Thread-304222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:07:20.922 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:07:20.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:07:27.734 [DEBUG] [Thread-304223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:07:31.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:07:31.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:07:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:07:32.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 6, 55), 21.06, 25.45, 0.0, 26.48, 24.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:07:32.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:06:55
2025-12-24T15:07:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:07:32.801 [DEBUG] [Thread-304224] [transport.py] [_log()] starting thread (client mode): 0xf57aba00
2025-12-24T15:07:32.802 [DEBUG] [Thread-304224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:07:32.812 [DEBUG] [Thread-304224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:07:32.812 [INFO] [Thread-304224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] client lang: <none>
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] server lang: <none>
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] kex follows: False
2025-12-24T15:07:32.819 [DEBUG] [Thread-304224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:07:32.820 [DEBUG] [Thread-304224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:07:32.820 [DEBUG] [Thread-304224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:07:32.820 [DEBUG] [Thread-304224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:07:32.820 [DEBUG] [Thread-304224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:07:32.820 [DEBUG] [Thread-304224] [transport.py] [_log()] Compression: none
2025-12-24T15:07:32.820 [DEBUG] [Thread-304224] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:07:32.852 [DEBUG] [Thread-304224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:07:32.857 [DEBUG] [Thread-304224] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:07:32.859 [DEBUG] [Thread-304224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:07:32.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:07:32.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:07:32.865 [DEBUG] [Thread-304224] [transport.py] [_log()] userauth is OK
2025-12-24T15:07:32.866 [DEBUG] [Thread-304224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:07:32.866 [DEBUG] [Thread-304224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:07:32.866 [DEBUG] [Thread-304224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:07:32.866 [DEBUG] [Thread-304224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:07:32.895 [INFO] [Thread-304224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:07:32.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:07:33.511 [DEBUG] [Thread-304224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:07:33.511 [DEBUG] [Thread-304224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:07:33.512 [DEBUG] [Thread-304224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:07:33.552 [DEBUG] [Thread-304224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:07:33.552 [DEBUG] [Thread-304224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:07:33.555 [DEBUG] [Thread-304224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:07:33.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:07:33.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:07:33.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:07:33.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:07:33.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:07:33.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:07:33.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:07:33.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:07:33.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:07:33.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.546249 -999.00  +23.80  24.06     32   +6.10 1 2 1 1 1   888    0 18.59 55.50 ----- 24.1 24.1 154.8 28.4 29.6 -16.9 29.3 -16.6 29.9 -17.6 30.6 -18.5
2025-12-24T15:07:33.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:07:33.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:07:33.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.546249
2025-12-24T15:07:33.594 [DEBUG] [Thread-304224] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:07:33.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:07:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:07:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:07:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:07:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:07:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:06:55', tmtdew=21.06, humidity=25.45, cloud=0.0, wind=26.48, temperature=24.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:06:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:07:33.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:07:33.695 [DEBUG] [Thread-304227] [transport.py] [_log()] starting thread (client mode): 0xf57500a0
2025-12-24T15:07:33.696 [DEBUG] [Thread-304227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:07:33.710 [DEBUG] [Thread-304227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:07:33.710 [INFO] [Thread-304227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] client lang: <none>
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] server lang: <none>
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] kex follows: False
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:07:33.717 [DEBUG] [Thread-304227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:07:33.718 [DEBUG] [Thread-304227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:07:33.718 [DEBUG] [Thread-304227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:07:33.718 [DEBUG] [Thread-304227] [transport.py] [_log()] Compression: none
2025-12-24T15:07:33.718 [DEBUG] [Thread-304227] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:07:33.774 [DEBUG] [Thread-304227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:07:33.774 [DEBUG] [Thread-304227] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:07:33.774 [DEBUG] [Thread-304227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:07:33.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:07:33.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:07:33.832 [DEBUG] [Thread-304227] [transport.py] [_log()] userauth is OK
2025-12-24T15:07:33.832 [DEBUG] [Thread-304227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:07:33.832 [DEBUG] [Thread-304227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:07:33.832 [DEBUG] [Thread-304227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:07:33.832 [DEBUG] [Thread-304227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:07:33.853 [INFO] [Thread-304227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:07:33.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:07:33.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:07:34.653 [DEBUG] [Thread-304227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:07:34.653 [DEBUG] [Thread-304227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:07:34.701 [DEBUG] [Thread-304227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:07:34.701 [DEBUG] [Thread-304227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:07:34.711 [DEBUG] [Thread-304227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:07:34.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:07:34.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:07:34.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:07:34.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:07:34.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:07:34.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:07:34.746 [DEBUG] [Thread-304227] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:07:42.810 [DEBUG] [Thread-304229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:07:51.711 [DEBUG] [Thread-304230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:07:57.976 [DEBUG] [Thread-304231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:08:04.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:08:04.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:08:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:08:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 7, 28), 21.48, 24.89, 0.0, 21.05, 24.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:08:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:07:28
2025-12-24T15:08:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:08:06.052 [DEBUG] [Thread-304232] [transport.py] [_log()] starting thread (client mode): 0xf57bdcc0
2025-12-24T15:08:06.053 [DEBUG] [Thread-304232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:08:06.064 [DEBUG] [Thread-304232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:08:06.064 [INFO] [Thread-304232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] client lang: <none>
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] server lang: <none>
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] kex follows: False
2025-12-24T15:08:06.069 [DEBUG] [Thread-304232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:08:06.070 [DEBUG] [Thread-304232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:08:06.070 [DEBUG] [Thread-304232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:08:06.070 [DEBUG] [Thread-304232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:08:06.070 [DEBUG] [Thread-304232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:08:06.070 [DEBUG] [Thread-304232] [transport.py] [_log()] Compression: none
2025-12-24T15:08:06.070 [DEBUG] [Thread-304232] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:08:06.102 [DEBUG] [Thread-304232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:08:06.106 [DEBUG] [Thread-304232] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:08:06.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:08:06.110 [DEBUG] [Thread-304232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:08:06.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:08:06.112 [DEBUG] [Thread-304232] [transport.py] [_log()] userauth is OK
2025-12-24T15:08:06.112 [DEBUG] [Thread-304232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:08:06.112 [DEBUG] [Thread-304232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:08:06.112 [DEBUG] [Thread-304232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:08:06.112 [DEBUG] [Thread-304232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:08:06.132 [INFO] [Thread-304232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:08:06.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:08:06.802 [DEBUG] [Thread-304232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:08:06.803 [DEBUG] [Thread-304232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:08:06.806 [DEBUG] [Thread-304232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:08:06.844 [DEBUG] [Thread-304232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:08:06.844 [DEBUG] [Thread-304232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:08:06.848 [DEBUG] [Thread-304232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:08:06.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:08:06.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:08:06.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:08:06.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:08:06.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:08:06.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:08:06.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:08:06.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:08:06.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:08:06.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.546943 -999.00  +23.10  10.49     32   +5.80 1 2 1 1 1   888    0 18.78 61.98 ----- 10.5 10.5 119.6 25.6 29.3 -17.8 29.1 -16.4 29.6 -17.9 30.0 -19.2
2025-12-24T15:08:06.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:08:06.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:08:06.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.546943
2025-12-24T15:08:06.884 [DEBUG] [Thread-304232] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:08:06.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:08:06.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:08:06.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:08:06.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:08:06.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:08:06.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:07:28', tmtdew=21.48, humidity=24.89, cloud=0.0, wind=21.05, temperature=24.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:07:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:08:06.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:08:07.000 [DEBUG] [Thread-304235] [transport.py] [_log()] starting thread (client mode): 0xf81f0400
2025-12-24T15:08:07.000 [DEBUG] [Thread-304235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:08:07.014 [DEBUG] [Thread-304235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:08:07.014 [INFO] [Thread-304235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] client lang: <none>
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] server lang: <none>
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] kex follows: False
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:08:07.022 [DEBUG] [Thread-304235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:08:07.023 [DEBUG] [Thread-304235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:08:07.023 [DEBUG] [Thread-304235] [transport.py] [_log()] Compression: none
2025-12-24T15:08:07.023 [DEBUG] [Thread-304235] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:08:07.083 [DEBUG] [Thread-304235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:08:07.083 [DEBUG] [Thread-304235] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:08:07.084 [DEBUG] [Thread-304235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:08:07.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:08:07.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:08:07.138 [DEBUG] [Thread-304235] [transport.py] [_log()] userauth is OK
2025-12-24T15:08:07.139 [DEBUG] [Thread-304235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:08:07.139 [DEBUG] [Thread-304235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:08:07.140 [DEBUG] [Thread-304235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:08:07.140 [DEBUG] [Thread-304235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:08:07.165 [INFO] [Thread-304235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:08:07.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:08:07.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:08:07.997 [DEBUG] [Thread-304235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:08:07.997 [DEBUG] [Thread-304235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:08:08.044 [DEBUG] [Thread-304235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:08:08.044 [DEBUG] [Thread-304235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:08:08.053 [DEBUG] [Thread-304235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:08:08.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:08:08.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:08:08.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:08:08.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:08:08.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:08:08.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:08:08.091 [DEBUG] [Thread-304235] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:08:13.055 [DEBUG] [Thread-304237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:08:21.075 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:08:21.076 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:08:28.179 [DEBUG] [Thread-304238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:08:38.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:08:38.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:08:38.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:08:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 8, 2), 21.67, 24.57, 0.0, 22.36, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:08:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:08:02
2025-12-24T15:08:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:08:39.416 [DEBUG] [Thread-304239] [transport.py] [_log()] starting thread (client mode): 0xf81f3340
2025-12-24T15:08:39.416 [DEBUG] [Thread-304239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:08:39.417 [DEBUG] [Thread-304239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:08:39.417 [INFO] [Thread-304239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:08:39.421 [DEBUG] [Thread-304239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:08:39.421 [DEBUG] [Thread-304239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:08:39.421 [DEBUG] [Thread-304239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:08:39.421 [DEBUG] [Thread-304239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:08:39.421 [DEBUG] [Thread-304239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:08:39.421 [DEBUG] [Thread-304239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:08:39.421 [DEBUG] [Thread-304239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] client lang: <none>
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] server lang: <none>
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] kex follows: False
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] Compression: none
2025-12-24T15:08:39.422 [DEBUG] [Thread-304239] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:08:39.453 [DEBUG] [Thread-304239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:08:39.457 [DEBUG] [Thread-304239] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:08:39.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:08:39.459 [DEBUG] [Thread-304239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:08:39.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:08:39.497 [DEBUG] [Thread-304239] [transport.py] [_log()] userauth is OK
2025-12-24T15:08:39.497 [DEBUG] [Thread-304239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:08:39.497 [DEBUG] [Thread-304239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:08:39.497 [DEBUG] [Thread-304239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:08:39.497 [DEBUG] [Thread-304239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:08:39.530 [INFO] [Thread-304239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:08:39.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:08:40.196 [DEBUG] [Thread-304239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:08:40.196 [DEBUG] [Thread-304239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:08:40.206 [DEBUG] [Thread-304239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:08:40.236 [DEBUG] [Thread-304239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:08:40.237 [DEBUG] [Thread-304239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:08:40.239 [DEBUG] [Thread-304239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:08:40.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:08:40.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:08:40.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:08:40.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:08:40.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:08:40.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:08:40.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:08:40.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.547290 -999.00  +23.20  14.37     32   +6.00 1 2 1 1 1   888    0 19.13 67.23 ----- 14.4 14.4 162.1 18.9 29.3 -16.9 29.1 -17.3 29.6 -17.1 30.0 -18.3
2025-12-24T15:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.547290
2025-12-24T15:08:40.267 [DEBUG] [Thread-304239] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:08:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:08:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:08:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:08:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:08:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:08:40.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:08:02', tmtdew=21.67, humidity=24.57, cloud=0.0, wind=22.36, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:08:05.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:08:40.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:08:40.372 [DEBUG] [Thread-304242] [transport.py] [_log()] starting thread (client mode): 0xf8188c70
2025-12-24T15:08:40.372 [DEBUG] [Thread-304242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:08:40.387 [DEBUG] [Thread-304242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:08:40.387 [INFO] [Thread-304242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:08:40.395 [DEBUG] [Thread-304242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:08:40.395 [DEBUG] [Thread-304242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:08:40.395 [DEBUG] [Thread-304242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:08:40.395 [DEBUG] [Thread-304242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:08:40.395 [DEBUG] [Thread-304242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:08:40.395 [DEBUG] [Thread-304242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] client lang: <none>
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] server lang: <none>
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] kex follows: False
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] Compression: none
2025-12-24T15:08:40.396 [DEBUG] [Thread-304242] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:08:40.455 [DEBUG] [Thread-304242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:08:40.455 [DEBUG] [Thread-304242] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:08:40.456 [DEBUG] [Thread-304242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:08:40.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:08:40.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:08:40.512 [DEBUG] [Thread-304242] [transport.py] [_log()] userauth is OK
2025-12-24T15:08:40.512 [DEBUG] [Thread-304242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:08:40.512 [DEBUG] [Thread-304242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:08:40.513 [DEBUG] [Thread-304242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:08:40.513 [DEBUG] [Thread-304242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:08:40.534 [INFO] [Thread-304242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:08:40.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:08:40.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:08:41.386 [DEBUG] [Thread-304242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:08:41.386 [DEBUG] [Thread-304242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:08:41.424 [DEBUG] [Thread-304242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:08:41.424 [DEBUG] [Thread-304242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:08:41.433 [DEBUG] [Thread-304242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:08:41.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:08:41.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')
2025-12-24T15:08:41.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
2025-12-24T15:08:41.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:08:41.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:08:41.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:08:41.471 [DEBUG] [Thread-304242] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:08:43.252 [DEBUG] [Thread-304244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:08:51.962 [DEBUG] [Thread-304245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:08:58.492 [DEBUG] [Thread-304246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:09:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:09:11.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:09:11.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:09:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 8, 35), 21.04, 25.52, 0.0, 22.3, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:09:12.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:08:35
2025-12-24T15:09:12.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:09:12.796 [DEBUG] [Thread-304247] [transport.py] [_log()] starting thread (client mode): 0xf81f27a0
2025-12-24T15:09:12.797 [DEBUG] [Thread-304247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:09:12.804 [DEBUG] [Thread-304247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:09:12.804 [INFO] [Thread-304247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:09:12.811 [DEBUG] [Thread-304247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:09:12.811 [DEBUG] [Thread-304247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] client lang: <none>
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] server lang: <none>
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] kex follows: False
2025-12-24T15:09:12.812 [DEBUG] [Thread-304247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:09:12.813 [DEBUG] [Thread-304247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:09:12.813 [DEBUG] [Thread-304247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:09:12.813 [DEBUG] [Thread-304247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:09:12.813 [DEBUG] [Thread-304247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:09:12.813 [DEBUG] [Thread-304247] [transport.py] [_log()] Compression: none
2025-12-24T15:09:12.813 [DEBUG] [Thread-304247] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:09:12.851 [DEBUG] [Thread-304247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:09:12.855 [DEBUG] [Thread-304247] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:09:12.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:09:12.858 [DEBUG] [Thread-304247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:09:12.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:09:12.860 [DEBUG] [Thread-304247] [transport.py] [_log()] userauth is OK
2025-12-24T15:09:12.860 [DEBUG] [Thread-304247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:09:12.861 [DEBUG] [Thread-304247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:09:12.861 [DEBUG] [Thread-304247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:09:12.861 [DEBUG] [Thread-304247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:09:12.879 [INFO] [Thread-304247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:09:12.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:09:13.507 [DEBUG] [Thread-304247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:09:13.507 [DEBUG] [Thread-304247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:09:13.508 [DEBUG] [Thread-304247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:09:13.549 [DEBUG] [Thread-304247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:09:13.549 [DEBUG] [Thread-304247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:09:13.552 [DEBUG] [Thread-304247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:09:13.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:09:13.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:09:13.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:09:13.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:09:13.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:09:13.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:09:13.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:09:13.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:09:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:09:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.547637 -999.00  +23.30  13.73     32   +5.90 1 2 1 1 1   888    0 19.32 70.24 ----- 13.7 13.7 159.4 25.5 29.1 -16.5 29.0 -16.1 29.5 -16.9 29.9 -17.9
2025-12-24T15:09:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:09:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:09:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.547637
2025-12-24T15:09:13.588 [DEBUG] [Thread-304247] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:09:13.593 [DEBUG] [Thread-304250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:09:13.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:09:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:09:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:09:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:09:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:09:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:08:35', tmtdew=21.04, humidity=25.52, cloud=0.0, wind=22.3, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:08:35.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:09:13.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:09:13.700 [DEBUG] [Thread-304251] [transport.py] [_log()] starting thread (client mode): 0xf57ab610
2025-12-24T15:09:13.700 [DEBUG] [Thread-304251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:09:13.715 [DEBUG] [Thread-304251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:09:13.715 [INFO] [Thread-304251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:09:13.722 [DEBUG] [Thread-304251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:09:13.722 [DEBUG] [Thread-304251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:09:13.722 [DEBUG] [Thread-304251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] client lang: <none>
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] server lang: <none>
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] kex follows: False
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] Compression: none
2025-12-24T15:09:13.723 [DEBUG] [Thread-304251] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:09:13.791 [DEBUG] [Thread-304251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:09:13.805 [DEBUG] [Thread-304251] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:09:13.805 [DEBUG] [Thread-304251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:09:13.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:09:13.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:09:13.846 [DEBUG] [Thread-304251] [transport.py] [_log()] userauth is OK
2025-12-24T15:09:13.846 [DEBUG] [Thread-304251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:09:13.846 [DEBUG] [Thread-304251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:09:13.846 [DEBUG] [Thread-304251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:09:13.846 [DEBUG] [Thread-304251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:09:13.861 [INFO] [Thread-304251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:09:13.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:09:13.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:09:14.700 [DEBUG] [Thread-304251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:09:14.700 [DEBUG] [Thread-304251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:09:14.747 [DEBUG] [Thread-304251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:09:14.747 [DEBUG] [Thread-304251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:09:14.755 [DEBUG] [Thread-304251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:09:14.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:09:14.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:09:14.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:09:14.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:09:14.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:09:14.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:09:14.788 [DEBUG] [Thread-304251] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:09:21.222 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:09:21.226 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:09:28.701 [DEBUG] [Thread-304253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:09:43.840 [DEBUG] [Thread-304254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:09:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:09:44.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:09:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:09:45.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 9, 9), 20.68, 26.0, 0.0, 17.89, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:09:45.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:09:09
2025-12-24T15:09:45.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:09:46.105 [DEBUG] [Thread-304255] [transport.py] [_log()] starting thread (client mode): 0xf57bfb80
2025-12-24T15:09:46.105 [DEBUG] [Thread-304255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:09:46.118 [DEBUG] [Thread-304255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:09:46.118 [INFO] [Thread-304255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] client lang: <none>
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] server lang: <none>
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] kex follows: False
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:09:46.123 [DEBUG] [Thread-304255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:09:46.124 [DEBUG] [Thread-304255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:09:46.124 [DEBUG] [Thread-304255] [transport.py] [_log()] Compression: none
2025-12-24T15:09:46.124 [DEBUG] [Thread-304255] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:09:46.153 [DEBUG] [Thread-304255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:09:46.157 [DEBUG] [Thread-304255] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:09:46.158 [DEBUG] [Thread-304255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:09:46.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:09:46.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:09:46.162 [DEBUG] [Thread-304255] [transport.py] [_log()] userauth is OK
2025-12-24T15:09:46.162 [DEBUG] [Thread-304255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:09:46.162 [DEBUG] [Thread-304255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:09:46.162 [DEBUG] [Thread-304255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:09:46.162 [DEBUG] [Thread-304255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:09:46.180 [INFO] [Thread-304255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:09:46.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:09:46.848 [DEBUG] [Thread-304255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:09:46.848 [DEBUG] [Thread-304255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:09:46.849 [DEBUG] [Thread-304255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:09:46.889 [DEBUG] [Thread-304255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:09:46.889 [DEBUG] [Thread-304255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:09:46.892 [DEBUG] [Thread-304255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:09:46.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:09:46.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:09:46.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:09:46.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:09:46.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:09:46.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:09:46.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:09:46.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:09:46.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:09:46.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.547985 -999.00  +23.40  11.11     32   +5.90 1 2 1 1 1   888    0 19.38 71.05 ----- 11.1 11.1 181.0 22.0 29.2 -17.1 28.9 -17.6 29.4 -17.2 29.9 -18.0
2025-12-24T15:09:46.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:09:46.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:09:46.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.547985
2025-12-24T15:09:46.925 [DEBUG] [Thread-304255] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:09:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:09:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:09:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:09:09', tmtdew=20.68, humidity=26.0, cloud=0.0, wind=17.89, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:09:05.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:09:47.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:09:47.050 [DEBUG] [Thread-304258] [transport.py] [_log()] starting thread (client mode): 0xf81e7790
2025-12-24T15:09:47.050 [DEBUG] [Thread-304258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:09:47.064 [DEBUG] [Thread-304258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:09:47.064 [INFO] [Thread-304258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] client lang: <none>
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] server lang: <none>
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] kex follows: False
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] Compression: none
2025-12-24T15:09:47.072 [DEBUG] [Thread-304258] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:09:47.129 [DEBUG] [Thread-304258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:09:47.129 [DEBUG] [Thread-304258] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:09:47.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:09:47.129 [DEBUG] [Thread-304258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:09:47.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:09:47.190 [DEBUG] [Thread-304258] [transport.py] [_log()] userauth is OK
2025-12-24T15:09:47.190 [DEBUG] [Thread-304258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:09:47.190 [DEBUG] [Thread-304258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:09:47.190 [DEBUG] [Thread-304258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:09:47.190 [DEBUG] [Thread-304258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:09:47.206 [INFO] [Thread-304258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:09:47.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:09:47.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:09:48.107 [DEBUG] [Thread-304258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:09:48.107 [DEBUG] [Thread-304258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:09:48.155 [DEBUG] [Thread-304258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:09:48.155 [DEBUG] [Thread-304258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:09:48.164 [DEBUG] [Thread-304258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:09:48.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:09:48.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')
2025-12-24T15:09:48.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
2025-12-24T15:09:48.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:09:48.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:09:48.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:09:48.199 [DEBUG] [Thread-304258] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:09:52.269 [DEBUG] [Thread-304260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:09:58.903 [DEBUG] [Thread-304261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:10:14.059 [DEBUG] [Thread-304262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:10:18.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:10:18.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:10:18.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:10:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 9, 42), 20.45, 26.28, 0.0, 22.15, 23.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:10:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:09:42
2025-12-24T15:10:19.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:10:19.576 [DEBUG] [Thread-304263] [transport.py] [_log()] starting thread (client mode): 0xf5750d90
2025-12-24T15:10:19.577 [DEBUG] [Thread-304263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:10:19.586 [DEBUG] [Thread-304263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:10:19.586 [INFO] [Thread-304263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:10:19.591 [DEBUG] [Thread-304263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] client lang: <none>
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] server lang: <none>
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] kex follows: False
2025-12-24T15:10:19.592 [DEBUG] [Thread-304263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:10:19.593 [DEBUG] [Thread-304263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:10:19.593 [DEBUG] [Thread-304263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:10:19.593 [DEBUG] [Thread-304263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:10:19.593 [DEBUG] [Thread-304263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:10:19.593 [DEBUG] [Thread-304263] [transport.py] [_log()] Compression: none
2025-12-24T15:10:19.593 [DEBUG] [Thread-304263] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:10:19.625 [DEBUG] [Thread-304263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:10:19.630 [DEBUG] [Thread-304263] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:10:19.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:10:19.632 [DEBUG] [Thread-304263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:10:19.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:10:19.634 [DEBUG] [Thread-304263] [transport.py] [_log()] userauth is OK
2025-12-24T15:10:19.634 [DEBUG] [Thread-304263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:10:19.635 [DEBUG] [Thread-304263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:10:19.635 [DEBUG] [Thread-304263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:10:19.635 [DEBUG] [Thread-304263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:10:19.657 [INFO] [Thread-304263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:10:19.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:10:20.315 [DEBUG] [Thread-304263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:10:20.316 [DEBUG] [Thread-304263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:10:20.318 [DEBUG] [Thread-304263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:10:20.356 [DEBUG] [Thread-304263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:10:20.356 [DEBUG] [Thread-304263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:10:20.360 [DEBUG] [Thread-304263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:10:20.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:10:20.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:10:20.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:10:20.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:10:20.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:10:20.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:10:20.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:10:20.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:10:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:10:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.548331 -999.00  +23.40  16.15     32   +6.00 1 2 1 1 1   888    0 19.29 76.46 ----- 16.1 16.1 180.2 30.6 29.1 -17.4 28.6 -19.4 29.4 -17.0 29.8 -18.3
2025-12-24T15:10:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:10:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:10:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.548331
2025-12-24T15:10:20.388 [DEBUG] [Thread-304263] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:10:20.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:10:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:10:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:10:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:10:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:10:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:09:42', tmtdew=20.45, humidity=26.28, cloud=0.0, wind=22.15, temperature=23.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:09:35.798', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:10:20.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:10:20.492 [DEBUG] [Thread-304266] [transport.py] [_log()] starting thread (client mode): 0xf57aa260
2025-12-24T15:10:20.493 [DEBUG] [Thread-304266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:10:20.507 [DEBUG] [Thread-304266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:10:20.507 [INFO] [Thread-304266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:10:20.514 [DEBUG] [Thread-304266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] client lang: <none>
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] server lang: <none>
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] kex follows: False
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] Compression: none
2025-12-24T15:10:20.515 [DEBUG] [Thread-304266] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:10:20.573 [DEBUG] [Thread-304266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:10:20.573 [DEBUG] [Thread-304266] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:10:20.573 [DEBUG] [Thread-304266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:10:20.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:10:20.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:10:20.630 [DEBUG] [Thread-304266] [transport.py] [_log()] userauth is OK
2025-12-24T15:10:20.630 [DEBUG] [Thread-304266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:10:20.630 [DEBUG] [Thread-304266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:10:20.630 [DEBUG] [Thread-304266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:10:20.630 [DEBUG] [Thread-304266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:10:20.644 [INFO] [Thread-304266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:10:20.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:10:20.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:10:21.372 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:10:21.375 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:10:21.439 [DEBUG] [Thread-304266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:10:21.439 [DEBUG] [Thread-304266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:10:21.487 [DEBUG] [Thread-304266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:10:21.487 [DEBUG] [Thread-304266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:10:21.495 [DEBUG] [Thread-304266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:10:21.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:10:21.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:10:21.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:10:21.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:10:21.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:10:21.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:10:21.531 [DEBUG] [Thread-304266] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:10:29.160 [DEBUG] [Thread-304268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:10:44.317 [DEBUG] [Thread-304269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:10:51.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:10:51.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:10:51.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:10:52.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 10, 15), 20.42, 26.33, 0.0, 24.44, 23.64, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:10:52.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:10:15
2025-12-24T15:10:52.522 [DEBUG] [Thread-304270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:10:52.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:10:52.859 [DEBUG] [Thread-304271] [transport.py] [_log()] starting thread (client mode): 0xf81e6e00
2025-12-24T15:10:52.860 [DEBUG] [Thread-304271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:10:52.869 [DEBUG] [Thread-304271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:10:52.869 [INFO] [Thread-304271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] client lang: <none>
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] server lang: <none>
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] kex follows: False
2025-12-24T15:10:52.876 [DEBUG] [Thread-304271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:10:52.877 [DEBUG] [Thread-304271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:10:52.877 [DEBUG] [Thread-304271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:10:52.878 [DEBUG] [Thread-304271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:10:52.878 [DEBUG] [Thread-304271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:10:52.878 [DEBUG] [Thread-304271] [transport.py] [_log()] Compression: none
2025-12-24T15:10:52.878 [DEBUG] [Thread-304271] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:10:52.960 [DEBUG] [Thread-304271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:10:52.964 [DEBUG] [Thread-304271] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:10:52.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:10:52.966 [DEBUG] [Thread-304271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:10:52.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:10:52.968 [DEBUG] [Thread-304271] [transport.py] [_log()] userauth is OK
2025-12-24T15:10:52.968 [DEBUG] [Thread-304271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:10:52.969 [DEBUG] [Thread-304271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:10:52.969 [DEBUG] [Thread-304271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:10:52.969 [DEBUG] [Thread-304271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:10:52.988 [INFO] [Thread-304271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:10:52.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:10:53.590 [DEBUG] [Thread-304271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:10:53.590 [DEBUG] [Thread-304271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:10:53.591 [DEBUG] [Thread-304271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:10:53.631 [DEBUG] [Thread-304271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:10:53.631 [DEBUG] [Thread-304271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:10:53.635 [DEBUG] [Thread-304271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:10:53.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:10:53.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:10:53.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:10:53.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:10:53.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:10:53.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:10:53.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:10:53.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:10:53.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:10:53.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.548679 -999.00  +23.40  18.76     32   +5.90 1 2 1 1 1   888    0 19.51 80.32 ----- 18.8 18.8 182.0 24.7 29.1 -16.0 28.7 -18.5 29.5 -12.1 29.7 -18.6
2025-12-24T15:10:53.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:10:53.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:10:53.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.548679
2025-12-24T15:10:53.671 [DEBUG] [Thread-304271] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:10:53.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:10:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:10:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:10:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:10:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:10:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:10:15', tmtdew=20.42, humidity=26.33, cloud=0.0, wind=24.44, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:10:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:10:53.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:10:53.779 [DEBUG] [Thread-304274] [transport.py] [_log()] starting thread (client mode): 0xf5752c50
2025-12-24T15:10:53.779 [DEBUG] [Thread-304274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:10:53.794 [DEBUG] [Thread-304274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:10:53.794 [INFO] [Thread-304274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:10:53.801 [DEBUG] [Thread-304274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:10:53.801 [DEBUG] [Thread-304274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:10:53.801 [DEBUG] [Thread-304274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] client lang: <none>
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] server lang: <none>
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] kex follows: False
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] Compression: none
2025-12-24T15:10:53.802 [DEBUG] [Thread-304274] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:10:53.859 [DEBUG] [Thread-304274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:10:53.860 [DEBUG] [Thread-304274] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:10:53.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:10:53.861 [DEBUG] [Thread-304274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:10:53.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:10:53.922 [DEBUG] [Thread-304274] [transport.py] [_log()] userauth is OK
2025-12-24T15:10:53.923 [DEBUG] [Thread-304274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:10:53.923 [DEBUG] [Thread-304274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:10:53.923 [DEBUG] [Thread-304274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:10:53.923 [DEBUG] [Thread-304274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:10:53.943 [INFO] [Thread-304274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:10:53.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:10:53.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:10:54.769 [DEBUG] [Thread-304274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:10:54.769 [DEBUG] [Thread-304274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:10:54.816 [DEBUG] [Thread-304274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:10:54.816 [DEBUG] [Thread-304274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:10:54.825 [DEBUG] [Thread-304274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:10:54.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:10:54.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:10:54.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:10:54.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:10:54.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:10:54.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:10:54.863 [DEBUG] [Thread-304274] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:10:59.361 [DEBUG] [Thread-304276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:11:14.546 [DEBUG] [Thread-304277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:11:21.522 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:11:21.526 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:11:24.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:11:24.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:11:24.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:11:25.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 10, 49), 20.72, 25.92, 0.0, 23.36, 23.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:11:25.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:10:49
2025-12-24T15:11:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:11:26.232 [DEBUG] [Thread-304278] [transport.py] [_log()] starting thread (client mode): 0xf572d210
2025-12-24T15:11:26.233 [DEBUG] [Thread-304278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:11:26.233 [DEBUG] [Thread-304278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:11:26.233 [INFO] [Thread-304278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] client lang: <none>
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] server lang: <none>
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] kex follows: False
2025-12-24T15:11:26.237 [DEBUG] [Thread-304278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:11:26.238 [DEBUG] [Thread-304278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:11:26.238 [DEBUG] [Thread-304278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:11:26.238 [DEBUG] [Thread-304278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:11:26.238 [DEBUG] [Thread-304278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:11:26.238 [DEBUG] [Thread-304278] [transport.py] [_log()] Compression: none
2025-12-24T15:11:26.238 [DEBUG] [Thread-304278] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:11:26.271 [DEBUG] [Thread-304278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:11:26.274 [DEBUG] [Thread-304278] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:11:26.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:11:26.277 [DEBUG] [Thread-304278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:11:26.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:11:26.279 [DEBUG] [Thread-304278] [transport.py] [_log()] userauth is OK
2025-12-24T15:11:26.279 [DEBUG] [Thread-304278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:11:26.279 [DEBUG] [Thread-304278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:11:26.279 [DEBUG] [Thread-304278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:11:26.279 [DEBUG] [Thread-304278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:11:26.296 [INFO] [Thread-304278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:11:26.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:11:26.962 [DEBUG] [Thread-304278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:11:26.962 [DEBUG] [Thread-304278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:11:26.963 [DEBUG] [Thread-304278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:11:27.004 [DEBUG] [Thread-304278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:11:27.004 [DEBUG] [Thread-304278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:11:27.006 [DEBUG] [Thread-304278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:11:27.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:11:27.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:11:27.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:11:27.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:11:27.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:11:27.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:11:27.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:11:27.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:11:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:11:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.549026 -999.00  +23.50  19.17     32   +6.00 1 2 1 1 1   888    0 19.83 76.69 ----- 19.2 19.2 195.2 31.2 29.5 -13.7 29.0 -18.0 29.9 -12.6 30.1 -13.9
2025-12-24T15:11:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:11:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:11:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.549026
2025-12-24T15:11:27.037 [DEBUG] [Thread-304278] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:11:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:11:27.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:11:27.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:11:27.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:11:27.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:11:27.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:10:49', tmtdew=20.72, humidity=25.92, cloud=0.0, wind=23.36, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:10:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:11:27.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:11:27.134 [DEBUG] [Thread-304281] [transport.py] [_log()] starting thread (client mode): 0xf572d420
2025-12-24T15:11:27.134 [DEBUG] [Thread-304281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:11:27.148 [DEBUG] [Thread-304281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:11:27.148 [INFO] [Thread-304281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:11:27.155 [DEBUG] [Thread-304281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] client lang: <none>
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] server lang: <none>
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] kex follows: False
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] Compression: none
2025-12-24T15:11:27.156 [DEBUG] [Thread-304281] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:11:27.213 [DEBUG] [Thread-304281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:11:27.214 [DEBUG] [Thread-304281] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:11:27.214 [DEBUG] [Thread-304281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:11:27.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:11:27.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:11:27.272 [DEBUG] [Thread-304281] [transport.py] [_log()] userauth is OK
2025-12-24T15:11:27.272 [DEBUG] [Thread-304281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:11:27.272 [DEBUG] [Thread-304281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:11:27.272 [DEBUG] [Thread-304281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:11:27.272 [DEBUG] [Thread-304281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:11:27.286 [INFO] [Thread-304281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:11:27.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:11:27.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:11:28.131 [DEBUG] [Thread-304281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:11:28.131 [DEBUG] [Thread-304281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:11:28.178 [DEBUG] [Thread-304281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:11:28.178 [DEBUG] [Thread-304281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:11:28.187 [DEBUG] [Thread-304281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:11:28.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:11:28.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:11:28.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:11:28.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:11:28.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:11:28.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:11:28.220 [DEBUG] [Thread-304281] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:11:29.657 [DEBUG] [Thread-304283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:11:44.806 [DEBUG] [Thread-304284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:11:52.892 [DEBUG] [Thread-304285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:11:58.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:11:58.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:11:58.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:11:59.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 11, 22), 20.86, 25.69, 0.0, 23.57, 23.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:11:59.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:11:22
2025-12-24T15:11:59.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:11:59.571 [DEBUG] [Thread-304286] [transport.py] [_log()] starting thread (client mode): 0xf818ab00
2025-12-24T15:11:59.571 [DEBUG] [Thread-304286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:11:59.585 [DEBUG] [Thread-304286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:11:59.585 [INFO] [Thread-304286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] client lang: <none>
2025-12-24T15:11:59.591 [DEBUG] [Thread-304286] [transport.py] [_log()] server lang: <none>
2025-12-24T15:11:59.592 [DEBUG] [Thread-304286] [transport.py] [_log()] kex follows: False
2025-12-24T15:11:59.592 [DEBUG] [Thread-304286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:11:59.592 [DEBUG] [Thread-304286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:11:59.593 [DEBUG] [Thread-304286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:11:59.593 [DEBUG] [Thread-304286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:11:59.593 [DEBUG] [Thread-304286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:11:59.593 [DEBUG] [Thread-304286] [transport.py] [_log()] Compression: none
2025-12-24T15:11:59.593 [DEBUG] [Thread-304286] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:11:59.629 [DEBUG] [Thread-304286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:11:59.633 [DEBUG] [Thread-304286] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:11:59.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:11:59.636 [DEBUG] [Thread-304286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:11:59.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:11:59.641 [DEBUG] [Thread-304286] [transport.py] [_log()] userauth is OK
2025-12-24T15:11:59.641 [DEBUG] [Thread-304286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:11:59.642 [DEBUG] [Thread-304286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:11:59.642 [DEBUG] [Thread-304286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:11:59.642 [DEBUG] [Thread-304286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:11:59.689 [INFO] [Thread-304286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:11:59.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:11:59.887 [DEBUG] [Thread-304288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:12:00.316 [DEBUG] [Thread-304286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:12:00.317 [DEBUG] [Thread-304286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:12:00.317 [DEBUG] [Thread-304286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:12:00.357 [DEBUG] [Thread-304286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:12:00.358 [DEBUG] [Thread-304286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:12:00.359 [DEBUG] [Thread-304286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:12:00.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:12:00.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:12:00.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:12:00.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:12:00.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:12:00.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:12:00.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:12:00.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:12:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:12:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.549374 -999.00  +23.60  14.54     32   +6.00 1 2 1 1 1   888    0 19.25 73.02 ----- 14.5 14.5 183.7 24.3 29.2 -18.2 28.5 -20.7 29.6 -18.9 30.0 -19.8
2025-12-24T15:12:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:12:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:12:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.549374
2025-12-24T15:12:00.386 [DEBUG] [Thread-304286] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:12:00.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:12:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:12:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:12:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:12:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:12:00.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:11:22', tmtdew=20.86, humidity=25.69, cloud=0.0, wind=23.57, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:11:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:12:00.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:12:00.486 [DEBUG] [Thread-304290] [transport.py] [_log()] starting thread (client mode): 0xf818a2c0
2025-12-24T15:12:00.486 [DEBUG] [Thread-304290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:12:00.503 [DEBUG] [Thread-304290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:12:00.503 [INFO] [Thread-304290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:12:00.511 [DEBUG] [Thread-304290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:12:00.511 [DEBUG] [Thread-304290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:12:00.511 [DEBUG] [Thread-304290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] client lang: <none>
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] server lang: <none>
2025-12-24T15:12:00.512 [DEBUG] [Thread-304290] [transport.py] [_log()] kex follows: False
2025-12-24T15:12:00.513 [DEBUG] [Thread-304290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:12:00.513 [DEBUG] [Thread-304290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:12:00.513 [DEBUG] [Thread-304290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:12:00.513 [DEBUG] [Thread-304290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:12:00.513 [DEBUG] [Thread-304290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:12:00.513 [DEBUG] [Thread-304290] [transport.py] [_log()] Compression: none
2025-12-24T15:12:00.514 [DEBUG] [Thread-304290] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:12:00.570 [DEBUG] [Thread-304290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:12:00.571 [DEBUG] [Thread-304290] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:12:00.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:12:00.572 [DEBUG] [Thread-304290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:12:00.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:12:00.626 [DEBUG] [Thread-304290] [transport.py] [_log()] userauth is OK
2025-12-24T15:12:00.626 [DEBUG] [Thread-304290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:12:00.627 [DEBUG] [Thread-304290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:12:00.627 [DEBUG] [Thread-304290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:12:00.627 [DEBUG] [Thread-304290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:12:00.647 [INFO] [Thread-304290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:12:00.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:12:00.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:12:01.508 [DEBUG] [Thread-304290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:12:01.508 [DEBUG] [Thread-304290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:12:01.557 [DEBUG] [Thread-304290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:12:01.557 [DEBUG] [Thread-304290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:12:01.566 [DEBUG] [Thread-304290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:12:01.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:12:01.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:12:01.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:12:01.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:12:01.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:12:01.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:12:01.607 [DEBUG] [Thread-304290] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:12:15.004 [DEBUG] [Thread-304292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:12:21.676 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:12:21.678 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:12:30.143 [DEBUG] [Thread-304293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:12:31.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:12:31.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:12:31.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:12:32.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 11, 55), 20.67, 26.17, 0.0, 19.43, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:12:32.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:11:55
2025-12-24T15:12:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:12:32.964 [DEBUG] [Thread-304294] [transport.py] [_log()] starting thread (client mode): 0xf818a620
2025-12-24T15:12:32.966 [DEBUG] [Thread-304294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:12:32.971 [DEBUG] [Thread-304294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:12:32.972 [INFO] [Thread-304294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:12:32.977 [DEBUG] [Thread-304294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] client lang: <none>
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] server lang: <none>
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] kex follows: False
2025-12-24T15:12:32.978 [DEBUG] [Thread-304294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:12:32.979 [DEBUG] [Thread-304294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:12:32.979 [DEBUG] [Thread-304294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:12:32.979 [DEBUG] [Thread-304294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:12:32.979 [DEBUG] [Thread-304294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:12:32.979 [DEBUG] [Thread-304294] [transport.py] [_log()] Compression: none
2025-12-24T15:12:32.979 [DEBUG] [Thread-304294] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:12:33.018 [DEBUG] [Thread-304294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:12:33.023 [DEBUG] [Thread-304294] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:12:33.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:12:33.026 [DEBUG] [Thread-304294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:12:33.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:12:33.031 [DEBUG] [Thread-304294] [transport.py] [_log()] userauth is OK
2025-12-24T15:12:33.032 [DEBUG] [Thread-304294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:12:33.032 [DEBUG] [Thread-304294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:12:33.032 [DEBUG] [Thread-304294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:12:33.032 [DEBUG] [Thread-304294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:12:33.060 [INFO] [Thread-304294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:12:33.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:12:33.680 [DEBUG] [Thread-304294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:12:33.680 [DEBUG] [Thread-304294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:12:33.681 [DEBUG] [Thread-304294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:12:33.722 [DEBUG] [Thread-304294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:12:33.722 [DEBUG] [Thread-304294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:12:33.724 [DEBUG] [Thread-304294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:12:33.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:12:33.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:12:33.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:12:33.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:12:33.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:12:33.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:12:33.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:12:33.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:12:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:12:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.549721 -999.00  +23.70  15.88     32   +6.00 1 2 1 1 1   888    0 19.58 77.54 ----- 15.9 15.9 151.8 22.4 29.1 -17.7 28.8 -17.2 29.4 -18.4 29.9 -19.1
2025-12-24T15:12:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:12:33.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:12:33.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.549721
2025-12-24T15:12:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:12:33.757 [DEBUG] [Thread-304294] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:12:33.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:12:33.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:12:33.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:12:33.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:12:33.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:11:55', tmtdew=20.67, humidity=26.17, cloud=0.0, wind=19.43, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:11:35.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:12:33.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:12:33.851 [DEBUG] [Thread-304297] [transport.py] [_log()] starting thread (client mode): 0xf81c0fa0
2025-12-24T15:12:33.851 [DEBUG] [Thread-304297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:12:33.866 [DEBUG] [Thread-304297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:12:33.866 [INFO] [Thread-304297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] client lang: <none>
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] server lang: <none>
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] kex follows: False
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] Compression: none
2025-12-24T15:12:33.874 [DEBUG] [Thread-304297] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:12:33.935 [DEBUG] [Thread-304297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:12:33.936 [DEBUG] [Thread-304297] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:12:33.936 [DEBUG] [Thread-304297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:12:33.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:12:33.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:12:33.990 [DEBUG] [Thread-304297] [transport.py] [_log()] userauth is OK
2025-12-24T15:12:33.990 [DEBUG] [Thread-304297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:12:33.991 [DEBUG] [Thread-304297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:12:33.991 [DEBUG] [Thread-304297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:12:33.991 [DEBUG] [Thread-304297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:12:34.012 [INFO] [Thread-304297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:12:34.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:12:34.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:12:34.843 [DEBUG] [Thread-304297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:12:34.843 [DEBUG] [Thread-304297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:12:34.891 [DEBUG] [Thread-304297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:12:34.891 [DEBUG] [Thread-304297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:12:34.900 [DEBUG] [Thread-304297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:12:34.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:12:34.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:12:34.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:12:34.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:12:34.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:12:34.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:12:34.936 [DEBUG] [Thread-304297] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:12:45.201 [DEBUG] [Thread-304299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:12:53.235 [DEBUG] [Thread-304300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:13:00.332 [DEBUG] [Thread-304301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:13:04.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:13:04.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:13:04.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:13:05.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 12, 28), 20.66, 26.2, 0.0, 16.96, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:13:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:12:28
2025-12-24T15:13:06.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:13:06.269 [DEBUG] [Thread-304302] [transport.py] [_log()] starting thread (client mode): 0xf818ab00
2025-12-24T15:13:06.269 [DEBUG] [Thread-304302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:13:06.283 [DEBUG] [Thread-304302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:13:06.283 [INFO] [Thread-304302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:13:06.289 [DEBUG] [Thread-304302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:13:06.290 [DEBUG] [Thread-304302] [transport.py] [_log()] client lang: <none>
2025-12-24T15:13:06.291 [DEBUG] [Thread-304302] [transport.py] [_log()] server lang: <none>
2025-12-24T15:13:06.291 [DEBUG] [Thread-304302] [transport.py] [_log()] kex follows: False
2025-12-24T15:13:06.291 [DEBUG] [Thread-304302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:13:06.292 [DEBUG] [Thread-304302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:13:06.292 [DEBUG] [Thread-304302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:13:06.292 [DEBUG] [Thread-304302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:13:06.292 [DEBUG] [Thread-304302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:13:06.292 [DEBUG] [Thread-304302] [transport.py] [_log()] Compression: none
2025-12-24T15:13:06.292 [DEBUG] [Thread-304302] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:13:06.330 [DEBUG] [Thread-304302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:13:06.334 [DEBUG] [Thread-304302] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:13:06.336 [DEBUG] [Thread-304302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:13:06.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:13:06.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:13:06.341 [DEBUG] [Thread-304302] [transport.py] [_log()] userauth is OK
2025-12-24T15:13:06.341 [DEBUG] [Thread-304302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:13:06.342 [DEBUG] [Thread-304302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:13:06.342 [DEBUG] [Thread-304302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:13:06.342 [DEBUG] [Thread-304302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:13:06.369 [INFO] [Thread-304302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:13:06.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:13:07.173 [DEBUG] [Thread-304302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:13:07.173 [DEBUG] [Thread-304302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:13:07.175 [DEBUG] [Thread-304302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:13:07.213 [DEBUG] [Thread-304302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:13:07.213 [DEBUG] [Thread-304302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:13:07.216 [DEBUG] [Thread-304302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:13:07.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:13:07.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:13:07.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:13:07.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:13:07.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:13:07.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:13:07.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:13:07.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:13:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:13:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.550068 -999.00  +23.50  14.98     32   +5.90 1 2 1 1 1   888    0 19.42 73.66 ----- 15.0 15.0 182.4 21.8 29.1 -17.8 28.6 -17.9 29.6 -15.8 29.9 -18.6
2025-12-24T15:13:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:13:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:13:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.550068
2025-12-24T15:13:07.252 [DEBUG] [Thread-304302] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:13:07.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:13:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:13:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:13:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:13:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:13:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:12:28', tmtdew=20.66, humidity=26.2, cloud=0.0, wind=16.96, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:12:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:13:07.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:13:07.372 [DEBUG] [Thread-304305] [transport.py] [_log()] starting thread (client mode): 0xf818add0
2025-12-24T15:13:07.372 [DEBUG] [Thread-304305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:13:07.387 [DEBUG] [Thread-304305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:13:07.387 [INFO] [Thread-304305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] client lang: <none>
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] server lang: <none>
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] kex follows: False
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:13:07.395 [DEBUG] [Thread-304305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:13:07.396 [DEBUG] [Thread-304305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:13:07.396 [DEBUG] [Thread-304305] [transport.py] [_log()] Compression: none
2025-12-24T15:13:07.396 [DEBUG] [Thread-304305] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:13:07.453 [DEBUG] [Thread-304305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:13:07.454 [DEBUG] [Thread-304305] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:13:07.454 [DEBUG] [Thread-304305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:13:07.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:13:07.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:13:07.511 [DEBUG] [Thread-304305] [transport.py] [_log()] userauth is OK
2025-12-24T15:13:07.511 [DEBUG] [Thread-304305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:13:07.512 [DEBUG] [Thread-304305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:13:07.512 [DEBUG] [Thread-304305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:13:07.512 [DEBUG] [Thread-304305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:13:07.530 [INFO] [Thread-304305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:13:07.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:13:07.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:13:08.385 [DEBUG] [Thread-304305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:13:08.385 [DEBUG] [Thread-304305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:13:08.433 [DEBUG] [Thread-304305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:13:08.433 [DEBUG] [Thread-304305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:13:08.442 [DEBUG] [Thread-304305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:13:08.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:13:08.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:13:08.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:13:08.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:13:08.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:13:08.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:13:08.481 [DEBUG] [Thread-304305] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:13:15.414 [DEBUG] [Thread-304307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:13:21.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:13:21.829 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:13:30.555 [DEBUG] [Thread-304308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:13:38.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:13:38.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:13:38.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
2025-12-24T15:13:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 13, 2), 20.58, 26.33, 0.0, 17.86, 23.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:13:39.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:13:02
2025-12-24T15:13:39.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:13:39.752 [DEBUG] [Thread-304309] [transport.py] [_log()] starting thread (client mode): 0xf81c19c0
2025-12-24T15:13:39.753 [DEBUG] [Thread-304309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:13:39.763 [DEBUG] [Thread-304309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:13:39.763 [INFO] [Thread-304309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:13:39.768 [DEBUG] [Thread-304309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:13:39.769 [DEBUG] [Thread-304309] [transport.py] [_log()] client lang: <none>
2025-12-24T15:13:39.769 [DEBUG] [Thread-304309] [transport.py] [_log()] server lang: <none>
2025-12-24T15:13:39.769 [DEBUG] [Thread-304309] [transport.py] [_log()] kex follows: False
2025-12-24T15:13:39.769 [DEBUG] [Thread-304309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:13:39.769 [DEBUG] [Thread-304309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:13:39.769 [DEBUG] [Thread-304309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:13:39.770 [DEBUG] [Thread-304309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:13:39.770 [DEBUG] [Thread-304309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:13:39.770 [DEBUG] [Thread-304309] [transport.py] [_log()] Compression: none
2025-12-24T15:13:39.770 [DEBUG] [Thread-304309] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:13:39.802 [DEBUG] [Thread-304309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:13:39.806 [DEBUG] [Thread-304309] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:13:39.807 [DEBUG] [Thread-304309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:13:39.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:13:39.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:13:39.812 [DEBUG] [Thread-304309] [transport.py] [_log()] userauth is OK
2025-12-24T15:13:39.812 [DEBUG] [Thread-304309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:13:39.813 [DEBUG] [Thread-304309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:13:39.813 [DEBUG] [Thread-304309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:13:39.813 [DEBUG] [Thread-304309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:13:39.853 [INFO] [Thread-304309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:13:39.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:13:40.501 [DEBUG] [Thread-304309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:13:40.501 [DEBUG] [Thread-304309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:13:40.510 [DEBUG] [Thread-304309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:13:40.543 [DEBUG] [Thread-304309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:13:40.543 [DEBUG] [Thread-304309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:13:40.546 [DEBUG] [Thread-304309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:13:40.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:13:40.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:13:40.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:13:40.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:13:40.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:13:40.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:13:40.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:13:40.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:13:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:13:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.550763 -999.00  +23.30  10.58     32   +5.90 1 2 1 1 1   888    0 19.85 79.68 ----- 10.6 10.6 201.8 15.4 29.7 -15.4 29.1 -14.5 30.3 -14.1 30.6 -15.0
2025-12-24T15:13:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:13:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:13:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.550763
2025-12-24T15:13:40.573 [DEBUG] [Thread-304309] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:13:40.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:13:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:13:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:13:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:13:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:13:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:13:02', tmtdew=20.58, humidity=26.33, cloud=0.0, wind=17.86, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:13:05.923', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:13:40.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:13:40.681 [DEBUG] [Thread-304312] [transport.py] [_log()] starting thread (client mode): 0xf81c1cf0
2025-12-24T15:13:40.681 [DEBUG] [Thread-304312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:13:40.696 [DEBUG] [Thread-304312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:13:40.696 [INFO] [Thread-304312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:13:40.703 [DEBUG] [Thread-304312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:13:40.703 [DEBUG] [Thread-304312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:13:40.703 [DEBUG] [Thread-304312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:13:40.703 [DEBUG] [Thread-304312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:13:40.703 [DEBUG] [Thread-304312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] client lang: <none>
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] server lang: <none>
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] kex follows: False
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] Compression: none
2025-12-24T15:13:40.704 [DEBUG] [Thread-304312] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:13:40.763 [DEBUG] [Thread-304312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:13:40.763 [DEBUG] [Thread-304312] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:13:40.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:13:40.764 [DEBUG] [Thread-304312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:13:40.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:13:40.823 [DEBUG] [Thread-304312] [transport.py] [_log()] userauth is OK
2025-12-24T15:13:40.823 [DEBUG] [Thread-304312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:13:40.823 [DEBUG] [Thread-304312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:13:40.823 [DEBUG] [Thread-304312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:13:40.823 [DEBUG] [Thread-304312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:13:40.841 [INFO] [Thread-304312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:13:40.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:13:40.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:13:41.818 [DEBUG] [Thread-304312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:13:41.818 [DEBUG] [Thread-304312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:13:41.865 [DEBUG] [Thread-304312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:13:41.865 [DEBUG] [Thread-304312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:13:41.873 [DEBUG] [Thread-304312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:13:41.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:13:41.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:13:41.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:13:41.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:13:41.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:13:41.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:13:41.907 [DEBUG] [Thread-304312] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:13:45.651 [DEBUG] [Thread-304314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:13:53.516 [DEBUG] [Thread-304315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:14:00.796 [DEBUG] [Thread-304316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:14:11.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:14:11.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:14:11.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:14:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 13, 35), 20.9, 25.5, 0.0, 15.44, 24.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:14:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:13:35
2025-12-24T15:14:13.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:14:13.250 [DEBUG] [Thread-304317] [transport.py] [_log()] starting thread (client mode): 0xf81c2a70
2025-12-24T15:14:13.251 [DEBUG] [Thread-304317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:14:13.252 [DEBUG] [Thread-304317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:14:13.252 [INFO] [Thread-304317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] client lang: <none>
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] server lang: <none>
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] kex follows: False
2025-12-24T15:14:13.257 [DEBUG] [Thread-304317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:14:13.259 [DEBUG] [Thread-304317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:14:13.259 [DEBUG] [Thread-304317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:14:13.259 [DEBUG] [Thread-304317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:14:13.259 [DEBUG] [Thread-304317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:14:13.259 [DEBUG] [Thread-304317] [transport.py] [_log()] Compression: none
2025-12-24T15:14:13.259 [DEBUG] [Thread-304317] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:14:13.298 [DEBUG] [Thread-304317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:14:13.303 [DEBUG] [Thread-304317] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:14:13.304 [DEBUG] [Thread-304317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:14:13.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:14:13.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:14:13.310 [DEBUG] [Thread-304317] [transport.py] [_log()] userauth is OK
2025-12-24T15:14:13.310 [DEBUG] [Thread-304317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:14:13.310 [DEBUG] [Thread-304317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:14:13.310 [DEBUG] [Thread-304317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:14:13.310 [DEBUG] [Thread-304317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:14:13.330 [INFO] [Thread-304317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:14:13.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:14:14.131 [DEBUG] [Thread-304317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:14:14.131 [DEBUG] [Thread-304317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:14:14.132 [DEBUG] [Thread-304317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:14:14.173 [DEBUG] [Thread-304317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:14:14.173 [DEBUG] [Thread-304317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:14:14.176 [DEBUG] [Thread-304317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:14:14.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:14:14.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:14:14.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:14:14.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:14:14.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:14:14.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:14:14.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:14:14.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:14:14.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:14:14.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.551110 -999.00  +23.60  16.21     32   +6.00 1 2 1 1 1   888    0 19.89 83.34 ----- 16.2 16.2 172.6 21.0 30.1 -14.9 29.5 -16.7 30.6 -15.4 31.0 -14.2
2025-12-24T15:14:14.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:14:14.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:14:14.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.551110
2025-12-24T15:14:14.223 [DEBUG] [Thread-304317] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:14:14.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:14:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:14:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:14:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:14:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:14:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:13:35', tmtdew=20.9, humidity=25.5, cloud=0.0, wind=15.44, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:13:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:14:14.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:14:14.325 [DEBUG] [Thread-304320] [transport.py] [_log()] starting thread (client mode): 0xf574de40
2025-12-24T15:14:14.325 [DEBUG] [Thread-304320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:14:14.340 [DEBUG] [Thread-304320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:14:14.340 [INFO] [Thread-304320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:14:14.348 [DEBUG] [Thread-304320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:14:14.348 [DEBUG] [Thread-304320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:14:14.348 [DEBUG] [Thread-304320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:14:14.348 [DEBUG] [Thread-304320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:14:14.348 [DEBUG] [Thread-304320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:14:14.348 [DEBUG] [Thread-304320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:14:14.348 [DEBUG] [Thread-304320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:14:14.348 [DEBUG] [Thread-304320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] client lang: <none>
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] server lang: <none>
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] kex follows: False
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] Compression: none
2025-12-24T15:14:14.349 [DEBUG] [Thread-304320] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:14:14.406 [DEBUG] [Thread-304320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:14:14.407 [DEBUG] [Thread-304320] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:14:14.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:14:14.408 [DEBUG] [Thread-304320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:14:14.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:14:14.463 [DEBUG] [Thread-304320] [transport.py] [_log()] userauth is OK
2025-12-24T15:14:14.463 [DEBUG] [Thread-304320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:14:14.463 [DEBUG] [Thread-304320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:14:14.463 [DEBUG] [Thread-304320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:14:14.464 [DEBUG] [Thread-304320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:14:14.481 [INFO] [Thread-304320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:14:14.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:14:14.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:14:15.341 [DEBUG] [Thread-304320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:14:15.341 [DEBUG] [Thread-304320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:14:15.390 [DEBUG] [Thread-304320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:14:15.390 [DEBUG] [Thread-304320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:14:15.399 [DEBUG] [Thread-304320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:14:15.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:14:15.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:14:15.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:14:15.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:14:15.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:14:15.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:14:15.438 [DEBUG] [Thread-304320] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:14:15.872 [DEBUG] [Thread-304322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:14:21.968 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:14:21.969 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:14:31.025 [DEBUG] [Thread-304323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:14:45.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:14:45.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:14:45.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:14:46.102 [DEBUG] [Thread-304324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:14:46.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 14, 41), 20.88, 25.92, 0.0, 9.71, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:14:46.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:14:41
2025-12-24T15:14:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:14:46.710 [DEBUG] [Thread-304325] [transport.py] [_log()] starting thread (client mode): 0xf57aa2c0
2025-12-24T15:14:46.711 [DEBUG] [Thread-304325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:14:46.723 [DEBUG] [Thread-304325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:14:46.723 [INFO] [Thread-304325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:14:46.730 [DEBUG] [Thread-304325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] client lang: <none>
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] server lang: <none>
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] kex follows: False
2025-12-24T15:14:46.731 [DEBUG] [Thread-304325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:14:46.732 [DEBUG] [Thread-304325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:14:46.733 [DEBUG] [Thread-304325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:14:46.733 [DEBUG] [Thread-304325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:14:46.733 [DEBUG] [Thread-304325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:14:46.733 [DEBUG] [Thread-304325] [transport.py] [_log()] Compression: none
2025-12-24T15:14:46.733 [DEBUG] [Thread-304325] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:14:46.772 [DEBUG] [Thread-304325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:14:46.777 [DEBUG] [Thread-304325] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:14:46.779 [DEBUG] [Thread-304325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:14:46.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:14:46.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:14:46.785 [DEBUG] [Thread-304325] [transport.py] [_log()] userauth is OK
2025-12-24T15:14:46.785 [DEBUG] [Thread-304325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:14:46.785 [DEBUG] [Thread-304325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:14:46.785 [DEBUG] [Thread-304325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:14:46.785 [DEBUG] [Thread-304325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:14:46.824 [INFO] [Thread-304325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:14:46.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:14:47.476 [DEBUG] [Thread-304325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:14:47.476 [DEBUG] [Thread-304325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:14:47.477 [DEBUG] [Thread-304325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:14:47.517 [DEBUG] [Thread-304325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:14:47.517 [DEBUG] [Thread-304325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:14:47.520 [DEBUG] [Thread-304325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:14:47.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:14:47.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:14:47.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:14:47.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:14:47.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:14:47.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:14:47.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:14:47.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:14:47.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:14:47.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.551457 -999.00  +23.60  10.87     31   +5.90 1 2 1 1 1   888    0 20.04 87.98 ----- 10.9 10.9 126.2 19.0 30.1 -15.5 29.9 -15.4 30.8 -14.6 31.1 -16.4
2025-12-24T15:14:47.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:14:47.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:14:47.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.551457
2025-12-24T15:14:47.558 [DEBUG] [Thread-304325] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:14:47.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:14:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:14:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:14:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:14:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:14:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:14:41', tmtdew=20.88, humidity=25.92, cloud=0.0, wind=9.71, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:14:05.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:14:47.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:14:47.668 [DEBUG] [Thread-304328] [transport.py] [_log()] starting thread (client mode): 0xf57bc2e0
2025-12-24T15:14:47.668 [DEBUG] [Thread-304328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:14:47.683 [DEBUG] [Thread-304328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:14:47.683 [INFO] [Thread-304328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:14:47.690 [DEBUG] [Thread-304328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] client lang: <none>
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] server lang: <none>
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] kex follows: False
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] Compression: none
2025-12-24T15:14:47.691 [DEBUG] [Thread-304328] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:14:47.749 [DEBUG] [Thread-304328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:14:47.749 [DEBUG] [Thread-304328] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:14:47.749 [DEBUG] [Thread-304328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:14:47.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:14:47.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:14:47.809 [DEBUG] [Thread-304328] [transport.py] [_log()] userauth is OK
2025-12-24T15:14:47.809 [DEBUG] [Thread-304328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:14:47.809 [DEBUG] [Thread-304328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:14:47.809 [DEBUG] [Thread-304328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:14:47.809 [DEBUG] [Thread-304328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:14:47.827 [INFO] [Thread-304328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:14:47.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:14:47.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:14:48.676 [DEBUG] [Thread-304328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:14:48.676 [DEBUG] [Thread-304328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:14:48.715 [DEBUG] [Thread-304328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:14:48.715 [DEBUG] [Thread-304328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:14:48.724 [DEBUG] [Thread-304328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:14:48.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:14:48.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:14:48.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:14:48.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:14:48.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:14:48.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:14:48.757 [DEBUG] [Thread-304328] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:14:53.835 [DEBUG] [Thread-304330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:15:01.180 [DEBUG] [Thread-304331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:15:16.357 [DEBUG] [Thread-304332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:15:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:15:18.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:15:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:15:19.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 15, 14), 20.57, 26.41, 0.0, 12.25, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:15:19.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:15:14
2025-12-24T15:15:19.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:15:20.024 [DEBUG] [Thread-304333] [transport.py] [_log()] starting thread (client mode): 0xf572c9a0
2025-12-24T15:15:20.025 [DEBUG] [Thread-304333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:15:20.038 [DEBUG] [Thread-304333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:15:20.038 [INFO] [Thread-304333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:15:20.043 [DEBUG] [Thread-304333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] client lang: <none>
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] server lang: <none>
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] kex follows: False
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] Compression: none
2025-12-24T15:15:20.044 [DEBUG] [Thread-304333] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:15:20.083 [DEBUG] [Thread-304333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:15:20.086 [DEBUG] [Thread-304333] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:15:20.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:15:20.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:15:20.091 [DEBUG] [Thread-304333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:15:20.092 [DEBUG] [Thread-304333] [transport.py] [_log()] userauth is OK
2025-12-24T15:15:20.092 [DEBUG] [Thread-304333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:15:20.092 [DEBUG] [Thread-304333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:15:20.092 [DEBUG] [Thread-304333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:15:20.092 [DEBUG] [Thread-304333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:15:20.113 [INFO] [Thread-304333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:15:20.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:15:20.926 [DEBUG] [Thread-304333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:15:20.926 [DEBUG] [Thread-304333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:15:20.927 [DEBUG] [Thread-304333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:15:20.968 [DEBUG] [Thread-304333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:15:20.969 [DEBUG] [Thread-304333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:15:20.972 [DEBUG] [Thread-304333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:15:20.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:15:20.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:15:20.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:15:20.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:15:20.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:15:20.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:15:20.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:15:20.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:15:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:15:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.551804 -999.00  +23.70  11.33     31   +5.90 1 2 1 1 1   888    0 19.63 80.23 ----- 11.3 11.3 152.4 12.8 30.1 -18.4 29.7 -19.7 30.6 -19.1 31.3 -19.7
2025-12-24T15:15:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:15:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:15:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.551804
2025-12-24T15:15:21.005 [DEBUG] [Thread-304333] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:15:21.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:15:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:15:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:15:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:15:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:15:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:15:14', tmtdew=20.57, humidity=26.41, cloud=0.0, wind=12.25, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:14:35.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:15:21.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:15:21.104 [DEBUG] [Thread-304336] [transport.py] [_log()] starting thread (client mode): 0xf5772dd0
2025-12-24T15:15:21.104 [DEBUG] [Thread-304336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:15:21.117 [DEBUG] [Thread-304336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:15:21.118 [INFO] [Thread-304336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:15:21.125 [DEBUG] [Thread-304336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:15:21.125 [DEBUG] [Thread-304336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:15:21.125 [DEBUG] [Thread-304336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] client lang: <none>
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] server lang: <none>
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] kex follows: False
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] Compression: none
2025-12-24T15:15:21.126 [DEBUG] [Thread-304336] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:15:21.183 [DEBUG] [Thread-304336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:15:21.184 [DEBUG] [Thread-304336] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:15:21.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:15:21.186 [DEBUG] [Thread-304336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:15:21.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:15:21.243 [DEBUG] [Thread-304336] [transport.py] [_log()] userauth is OK
2025-12-24T15:15:21.243 [DEBUG] [Thread-304336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:15:21.243 [DEBUG] [Thread-304336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:15:21.243 [DEBUG] [Thread-304336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:15:21.244 [DEBUG] [Thread-304336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:15:21.266 [INFO] [Thread-304336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:15:21.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:15:21.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:15:22.075 [DEBUG] [Thread-304336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:15:22.075 [DEBUG] [Thread-304336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:15:22.112 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:15:22.114 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:15:22.123 [DEBUG] [Thread-304336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:15:22.123 [DEBUG] [Thread-304336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:15:22.132 [DEBUG] [Thread-304336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:15:22.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:15:22.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:15:22.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:15:22.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:15:22.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:15:22.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:15:22.172 [DEBUG] [Thread-304336] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:15:31.506 [DEBUG] [Thread-304338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:15:46.690 [DEBUG] [Thread-304339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:15:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:15:52.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:15:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:15:53.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 15, 48), 20.89, 25.9, 0.0, 17.38, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:15:53.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:15:48
2025-12-24T15:15:53.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:15:53.774 [DEBUG] [Thread-304340] [transport.py] [_log()] starting thread (client mode): 0xf81e53f0
2025-12-24T15:15:53.775 [DEBUG] [Thread-304340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:15:53.789 [DEBUG] [Thread-304340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:15:53.789 [INFO] [Thread-304340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:15:53.793 [DEBUG] [Thread-304340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] client lang: <none>
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] server lang: <none>
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] kex follows: False
2025-12-24T15:15:53.794 [DEBUG] [Thread-304340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:15:53.795 [DEBUG] [Thread-304340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:15:53.795 [DEBUG] [Thread-304340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:15:53.795 [DEBUG] [Thread-304340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:15:53.795 [DEBUG] [Thread-304340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:15:53.795 [DEBUG] [Thread-304340] [transport.py] [_log()] Compression: none
2025-12-24T15:15:53.795 [DEBUG] [Thread-304340] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:15:53.830 [DEBUG] [Thread-304340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:15:53.833 [DEBUG] [Thread-304340] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:15:53.835 [DEBUG] [Thread-304340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:15:53.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:15:53.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:15:53.839 [DEBUG] [Thread-304340] [transport.py] [_log()] userauth is OK
2025-12-24T15:15:53.839 [DEBUG] [Thread-304340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:15:53.839 [DEBUG] [Thread-304340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:15:53.839 [DEBUG] [Thread-304340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:15:53.839 [DEBUG] [Thread-304340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:15:53.860 [INFO] [Thread-304340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:15:53.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:15:54.104 [DEBUG] [Thread-304342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:15:54.509 [DEBUG] [Thread-304340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:15:54.510 [DEBUG] [Thread-304340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:15:54.511 [DEBUG] [Thread-304340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:15:54.551 [DEBUG] [Thread-304340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:15:54.552 [DEBUG] [Thread-304340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:15:54.556 [DEBUG] [Thread-304340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:15:54.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:15:54.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:15:54.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:15:54.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:15:54.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:15:54.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:15:54.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:15:54.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:15:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:15:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.552151 -999.00  +23.60   8.21     31   +5.90 1 2 1 1 1   888    0 19.54 77.76 ----- 8.2 8.2 182.0 16.3 30.0 -19.3 29.6 -22.4 -999.0 -999.0 31.1 -19.8
2025-12-24T15:15:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:15:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:15:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.552151
2025-12-24T15:15:54.593 [DEBUG] [Thread-304340] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:15:54.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:15:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:15:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:15:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:15:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:15:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:15:48', tmtdew=20.89, humidity=25.9, cloud=0.0, wind=17.38, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:15:05.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:15:54.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:15:54.711 [DEBUG] [Thread-304344] [transport.py] [_log()] starting thread (client mode): 0xf572c9a0
2025-12-24T15:15:54.712 [DEBUG] [Thread-304344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:15:54.726 [DEBUG] [Thread-304344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:15:54.726 [INFO] [Thread-304344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] client lang: <none>
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] server lang: <none>
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] kex follows: False
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] Compression: none
2025-12-24T15:15:54.734 [DEBUG] [Thread-304344] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:15:54.791 [DEBUG] [Thread-304344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:15:54.792 [DEBUG] [Thread-304344] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:15:54.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:15:54.794 [DEBUG] [Thread-304344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:15:54.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:15:54.847 [DEBUG] [Thread-304344] [transport.py] [_log()] userauth is OK
2025-12-24T15:15:54.848 [DEBUG] [Thread-304344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:15:54.848 [DEBUG] [Thread-304344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:15:54.848 [DEBUG] [Thread-304344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:15:54.848 [DEBUG] [Thread-304344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:15:54.872 [INFO] [Thread-304344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:15:54.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:15:54.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:15:55.761 [DEBUG] [Thread-304344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:15:55.761 [DEBUG] [Thread-304344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:15:55.809 [DEBUG] [Thread-304344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:15:55.809 [DEBUG] [Thread-304344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:15:55.819 [DEBUG] [Thread-304344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:15:55.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:15:55.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:15:55.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:15:55.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:15:55.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:15:55.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:15:55.857 [DEBUG] [Thread-304344] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:16:01.790 [DEBUG] [Thread-304346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:16:16.985 [DEBUG] [Thread-304347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:16:22.265 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:16:22.268 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:16:25.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:16:25.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:16:25.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:16:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 16, 20), 20.77, 26.08, 0.0, 18.39, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:16:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:16:20
2025-12-24T15:16:27.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:16:27.332 [DEBUG] [Thread-304348] [transport.py] [_log()] starting thread (client mode): 0xf57704c0
2025-12-24T15:16:27.332 [DEBUG] [Thread-304348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:16:27.341 [DEBUG] [Thread-304348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:16:27.342 [INFO] [Thread-304348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:16:27.347 [DEBUG] [Thread-304348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:16:27.347 [DEBUG] [Thread-304348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:16:27.347 [DEBUG] [Thread-304348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:16:27.347 [DEBUG] [Thread-304348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:16:27.347 [DEBUG] [Thread-304348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:16:27.347 [DEBUG] [Thread-304348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:16:27.347 [DEBUG] [Thread-304348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] client lang: <none>
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] server lang: <none>
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] kex follows: False
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:16:27.348 [DEBUG] [Thread-304348] [transport.py] [_log()] Compression: none
2025-12-24T15:16:27.349 [DEBUG] [Thread-304348] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:16:27.372 [DEBUG] [Thread-304348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:16:27.376 [DEBUG] [Thread-304348] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:16:27.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:16:27.378 [DEBUG] [Thread-304348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:16:27.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:16:27.380 [DEBUG] [Thread-304348] [transport.py] [_log()] userauth is OK
2025-12-24T15:16:27.380 [DEBUG] [Thread-304348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:16:27.380 [DEBUG] [Thread-304348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:16:27.380 [DEBUG] [Thread-304348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:16:27.380 [DEBUG] [Thread-304348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:16:27.398 [INFO] [Thread-304348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:16:27.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:16:28.006 [DEBUG] [Thread-304348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:16:28.006 [DEBUG] [Thread-304348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:16:28.007 [DEBUG] [Thread-304348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:16:28.047 [DEBUG] [Thread-304348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:16:28.047 [DEBUG] [Thread-304348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:16:28.049 [DEBUG] [Thread-304348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:16:28.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:16:28.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:16:28.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:16:28.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:16:28.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:16:28.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:16:28.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:16:28.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:16:28.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:16:28.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.552499 -999.00  +23.70  12.01     32   +6.00 1 2 1 1 1   888    0 19.64 69.79 ----- 12.0 12.0 180.6 15.0 29.9 -18.5 29.3 -22.2 30.2 -19.0 30.9 -20.0
2025-12-24T15:16:28.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:16:28.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:16:28.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.552499
2025-12-24T15:16:28.078 [DEBUG] [Thread-304348] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:16:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:16:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:16:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:16:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:16:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:16:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:16:20', tmtdew=20.77, humidity=26.08, cloud=0.0, wind=18.39, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:15:35.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:16:28.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:16:28.178 [DEBUG] [Thread-304351] [transport.py] [_log()] starting thread (client mode): 0xf578a9b0
2025-12-24T15:16:28.178 [DEBUG] [Thread-304351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:16:28.193 [DEBUG] [Thread-304351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:16:28.193 [INFO] [Thread-304351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] client lang: <none>
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] server lang: <none>
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] kex follows: False
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] Compression: none
2025-12-24T15:16:28.201 [DEBUG] [Thread-304351] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:16:28.257 [DEBUG] [Thread-304351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:16:28.257 [DEBUG] [Thread-304351] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:16:28.257 [DEBUG] [Thread-304351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:16:28.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:16:28.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:16:28.318 [DEBUG] [Thread-304351] [transport.py] [_log()] userauth is OK
2025-12-24T15:16:28.318 [DEBUG] [Thread-304351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:16:28.318 [DEBUG] [Thread-304351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:16:28.318 [DEBUG] [Thread-304351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:16:28.318 [DEBUG] [Thread-304351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:16:28.336 [INFO] [Thread-304351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:16:28.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:16:28.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:16:29.154 [DEBUG] [Thread-304351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:16:29.154 [DEBUG] [Thread-304351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:16:29.206 [DEBUG] [Thread-304351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:16:29.206 [DEBUG] [Thread-304351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:16:29.214 [DEBUG] [Thread-304351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:16:29.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:16:29.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:16:29.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:16:29.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:16:29.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:16:29.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:16:29.256 [DEBUG] [Thread-304351] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:16:32.075 [DEBUG] [Thread-304353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:16:47.177 [DEBUG] [Thread-304354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:16:54.478 [DEBUG] [Thread-304355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:16:59.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:16:59.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:16:59.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:17:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 16, 54), 20.71, 25.82, 0.0, 16.41, 23.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:17:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:16:54
2025-12-24T15:17:00.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:17:00.592 [DEBUG] [Thread-304356] [transport.py] [_log()] starting thread (client mode): 0xf5788cd0
2025-12-24T15:17:00.592 [DEBUG] [Thread-304356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:17:00.593 [DEBUG] [Thread-304356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:17:00.593 [INFO] [Thread-304356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:17:00.597 [DEBUG] [Thread-304356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:17:00.597 [DEBUG] [Thread-304356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] client lang: <none>
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] server lang: <none>
2025-12-24T15:17:00.598 [DEBUG] [Thread-304356] [transport.py] [_log()] kex follows: False
2025-12-24T15:17:00.599 [DEBUG] [Thread-304356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:17:00.599 [DEBUG] [Thread-304356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:17:00.600 [DEBUG] [Thread-304356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:17:00.600 [DEBUG] [Thread-304356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:17:00.600 [DEBUG] [Thread-304356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:17:00.600 [DEBUG] [Thread-304356] [transport.py] [_log()] Compression: none
2025-12-24T15:17:00.600 [DEBUG] [Thread-304356] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:17:00.640 [DEBUG] [Thread-304356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:17:00.645 [DEBUG] [Thread-304356] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:17:00.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:17:00.650 [DEBUG] [Thread-304356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:17:00.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:17:00.653 [DEBUG] [Thread-304356] [transport.py] [_log()] userauth is OK
2025-12-24T15:17:00.653 [DEBUG] [Thread-304356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:17:00.653 [DEBUG] [Thread-304356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:17:00.653 [DEBUG] [Thread-304356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:17:00.653 [DEBUG] [Thread-304356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:17:00.699 [INFO] [Thread-304356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:17:00.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:17:01.365 [DEBUG] [Thread-304356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:17:01.365 [DEBUG] [Thread-304356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:17:01.366 [DEBUG] [Thread-304356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:17:01.406 [DEBUG] [Thread-304356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:17:01.406 [DEBUG] [Thread-304356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:17:01.409 [DEBUG] [Thread-304356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:17:01.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:17:01.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:17:01.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:17:01.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:17:01.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:17:01.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:17:01.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:17:01.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:17:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:17:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.552846 -999.00  +23.90   6.57     31   +6.10 1 2 1 1 1   888    0 19.68 68.00 ----- 6.6 6.6 172.3 14.4 29.8 -18.6 29.2 -20.2 30.1 -18.8 30.8 -19.2
2025-12-24T15:17:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:17:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:17:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.552846
2025-12-24T15:17:01.443 [DEBUG] [Thread-304356] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:17:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:17:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:17:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:17:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:17:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:17:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:16:54', tmtdew=20.71, humidity=25.82, cloud=0.0, wind=16.41, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:16:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:17:01.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:17:01.559 [DEBUG] [Thread-304359] [transport.py] [_log()] starting thread (client mode): 0xf5789ff0
2025-12-24T15:17:01.559 [DEBUG] [Thread-304359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:17:01.578 [DEBUG] [Thread-304359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:17:01.578 [INFO] [Thread-304359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:17:01.585 [DEBUG] [Thread-304359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:17:01.585 [DEBUG] [Thread-304359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:17:01.585 [DEBUG] [Thread-304359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:17:01.585 [DEBUG] [Thread-304359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] client lang: <none>
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] server lang: <none>
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] kex follows: False
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] Compression: none
2025-12-24T15:17:01.586 [DEBUG] [Thread-304359] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:17:01.641 [DEBUG] [Thread-304359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:17:01.641 [DEBUG] [Thread-304359] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:17:01.642 [DEBUG] [Thread-304359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:17:01.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:17:01.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:17:01.698 [DEBUG] [Thread-304359] [transport.py] [_log()] userauth is OK
2025-12-24T15:17:01.699 [DEBUG] [Thread-304359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:17:01.699 [DEBUG] [Thread-304359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:17:01.699 [DEBUG] [Thread-304359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:17:01.699 [DEBUG] [Thread-304359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:17:01.713 [INFO] [Thread-304359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:17:01.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:17:01.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:17:02.244 [DEBUG] [Thread-304361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:17:02.592 [DEBUG] [Thread-304359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:17:02.592 [DEBUG] [Thread-304359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:17:02.640 [DEBUG] [Thread-304359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:17:02.640 [DEBUG] [Thread-304359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:17:02.649 [DEBUG] [Thread-304359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:17:02.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:17: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')
2025-12-24T15:17: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
2025-12-24T15:17:02.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:17:02.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:17:02.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:17:02.685 [DEBUG] [Thread-304359] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:17:17.458 [DEBUG] [Thread-304362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:17:22.412 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:17:22.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:17:32.613 [DEBUG] [Thread-304363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:17:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:17:32.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:17:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:17:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 17, 27), 20.79, 25.7, 0.0, 15.84, 23.78, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:17:33.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:17:27
2025-12-24T15:17:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:17:34.301 [DEBUG] [Thread-304364] [transport.py] [_log()] starting thread (client mode): 0xf578bdf0
2025-12-24T15:17:34.302 [DEBUG] [Thread-304364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:17:34.314 [DEBUG] [Thread-304364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:17:34.315 [INFO] [Thread-304364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] client lang: <none>
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] server lang: <none>
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] kex follows: False
2025-12-24T15:17:34.320 [DEBUG] [Thread-304364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:17:34.321 [DEBUG] [Thread-304364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:17:34.321 [DEBUG] [Thread-304364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:17:34.321 [DEBUG] [Thread-304364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:17:34.321 [DEBUG] [Thread-304364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:17:34.321 [DEBUG] [Thread-304364] [transport.py] [_log()] Compression: none
2025-12-24T15:17:34.321 [DEBUG] [Thread-304364] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:17:34.352 [DEBUG] [Thread-304364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:17:34.355 [DEBUG] [Thread-304364] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:17:34.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:17:34.357 [DEBUG] [Thread-304364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:17:34.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:17:34.359 [DEBUG] [Thread-304364] [transport.py] [_log()] userauth is OK
2025-12-24T15:17:34.359 [DEBUG] [Thread-304364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:17:34.360 [DEBUG] [Thread-304364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:17:34.360 [DEBUG] [Thread-304364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:17:34.360 [DEBUG] [Thread-304364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:17:34.377 [INFO] [Thread-304364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:17:34.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:17:35.013 [DEBUG] [Thread-304364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:17:35.013 [DEBUG] [Thread-304364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:17:35.013 [DEBUG] [Thread-304364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:17:35.055 [DEBUG] [Thread-304364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:17:35.055 [DEBUG] [Thread-304364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:17:35.057 [DEBUG] [Thread-304364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:17:35.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:17:35.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:17:35.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:17:35.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:17:35.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:17:35.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:17:35.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:17:35.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:17:35.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:17:35.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.553193 -999.00  +24.00   6.75     31   +6.00 1 2 1 1 1   888    0 19.46 70.10 ----- 6.8 6.8 146.8 9.9 29.8 -17.5 29.3 -19.3 30.1 -18.2 30.6 -17.9
2025-12-24T15:17:35.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:17:35.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:17:35.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.553193
2025-12-24T15:17:35.085 [DEBUG] [Thread-304364] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:17:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:17:35.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:17:35.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:17:35.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:17:35.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:17:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:17:27', tmtdew=20.79, humidity=25.7, cloud=0.0, wind=15.84, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:16:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:17:35.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:17:35.180 [DEBUG] [Thread-304367] [transport.py] [_log()] starting thread (client mode): 0xf574f580
2025-12-24T15:17:35.180 [DEBUG] [Thread-304367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:17:35.195 [DEBUG] [Thread-304367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:17:35.195 [INFO] [Thread-304367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:17:35.202 [DEBUG] [Thread-304367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:17:35.202 [DEBUG] [Thread-304367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:17:35.202 [DEBUG] [Thread-304367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:17:35.202 [DEBUG] [Thread-304367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:17:35.202 [DEBUG] [Thread-304367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:17:35.202 [DEBUG] [Thread-304367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:17:35.202 [DEBUG] [Thread-304367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] client lang: <none>
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] server lang: <none>
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] kex follows: False
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] Compression: none
2025-12-24T15:17:35.203 [DEBUG] [Thread-304367] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:17:35.261 [DEBUG] [Thread-304367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:17:35.261 [DEBUG] [Thread-304367] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:17:35.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:17:35.262 [DEBUG] [Thread-304367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:17:35.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:17:35.318 [DEBUG] [Thread-304367] [transport.py] [_log()] userauth is OK
2025-12-24T15:17:35.318 [DEBUG] [Thread-304367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:17:35.318 [DEBUG] [Thread-304367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:17:35.318 [DEBUG] [Thread-304367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:17:35.318 [DEBUG] [Thread-304367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:17:35.333 [INFO] [Thread-304367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:17:35.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:17:35.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:17:36.187 [DEBUG] [Thread-304367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:17:36.188 [DEBUG] [Thread-304367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:17:36.236 [DEBUG] [Thread-304367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:17:36.236 [DEBUG] [Thread-304367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:17:36.245 [DEBUG] [Thread-304367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:17:36.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:17:36.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:17:36.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:17:36.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:17:36.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:17:36.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:17:36.279 [DEBUG] [Thread-304367] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:17:47.725 [DEBUG] [Thread-304369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:17:54.722 [DEBUG] [Thread-304370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:18:02.868 [DEBUG] [Thread-304371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:18:06.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:18:06.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:18:06.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:18:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 18, 1), 20.85, 25.77, 0.0, 16.9, 23.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:18:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:18:01
2025-12-24T15:18:07.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:18:07.652 [DEBUG] [Thread-304372] [transport.py] [_log()] starting thread (client mode): 0xf574d9f0
2025-12-24T15:18:07.653 [DEBUG] [Thread-304372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:18:07.665 [DEBUG] [Thread-304372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:18:07.665 [INFO] [Thread-304372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:18:07.670 [DEBUG] [Thread-304372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] client lang: <none>
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] server lang: <none>
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] kex follows: False
2025-12-24T15:18:07.671 [DEBUG] [Thread-304372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:18:07.672 [DEBUG] [Thread-304372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:18:07.672 [DEBUG] [Thread-304372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:18:07.673 [DEBUG] [Thread-304372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:18:07.673 [DEBUG] [Thread-304372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:18:07.673 [DEBUG] [Thread-304372] [transport.py] [_log()] Compression: none
2025-12-24T15:18:07.673 [DEBUG] [Thread-304372] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:18:07.713 [DEBUG] [Thread-304372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:18:07.717 [DEBUG] [Thread-304372] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:18:07.719 [DEBUG] [Thread-304372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:18:07.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:18:07.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:18:07.725 [DEBUG] [Thread-304372] [transport.py] [_log()] userauth is OK
2025-12-24T15:18:07.725 [DEBUG] [Thread-304372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:18:07.726 [DEBUG] [Thread-304372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:18:07.726 [DEBUG] [Thread-304372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:18:07.726 [DEBUG] [Thread-304372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:18:07.752 [INFO] [Thread-304372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:18:07.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:18:08.390 [DEBUG] [Thread-304372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:18:08.391 [DEBUG] [Thread-304372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:18:08.393 [DEBUG] [Thread-304372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:18:08.431 [DEBUG] [Thread-304372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:18:08.431 [DEBUG] [Thread-304372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:18:08.436 [DEBUG] [Thread-304372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:18:08.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:18:08.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:18:08.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:18:08.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:18:08.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:18:08.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:18:08.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:18:08.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:18:08.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:18:08.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.553540 -999.00  +24.10  21.51     31   +6.00 1 2 1 1 1   888    0 19.45 63.45 ----- 21.5 21.5 122.0 25.2 29.8 -17.3 29.4 -18.6 30.0 -18.4 30.6 -17.1
2025-12-24T15:18:08.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:18:08.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:18:08.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.553540
2025-12-24T15:18:08.472 [DEBUG] [Thread-304372] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:18:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:18:08.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:18:08.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:18:08.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:18:08.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:18:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:18:01', tmtdew=20.85, humidity=25.77, cloud=0.0, wind=16.9, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:17:05.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:18:08.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:18:08.579 [DEBUG] [Thread-304375] [transport.py] [_log()] starting thread (client mode): 0xf578a5f0
2025-12-24T15:18:08.579 [DEBUG] [Thread-304375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:18:08.593 [DEBUG] [Thread-304375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:18:08.593 [INFO] [Thread-304375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:18:08.601 [DEBUG] [Thread-304375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:18:08.601 [DEBUG] [Thread-304375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:18:08.601 [DEBUG] [Thread-304375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:18:08.601 [DEBUG] [Thread-304375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] client lang: <none>
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] server lang: <none>
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] kex follows: False
2025-12-24T15:18:08.602 [DEBUG] [Thread-304375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:18:08.603 [DEBUG] [Thread-304375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:18:08.603 [DEBUG] [Thread-304375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:18:08.603 [DEBUG] [Thread-304375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:18:08.603 [DEBUG] [Thread-304375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:18:08.603 [DEBUG] [Thread-304375] [transport.py] [_log()] Compression: none
2025-12-24T15:18:08.603 [DEBUG] [Thread-304375] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:18:08.664 [DEBUG] [Thread-304375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:18:08.665 [DEBUG] [Thread-304375] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:18:08.666 [DEBUG] [Thread-304375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:18:08.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:18:08.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:18:08.726 [DEBUG] [Thread-304375] [transport.py] [_log()] userauth is OK
2025-12-24T15:18:08.727 [DEBUG] [Thread-304375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:18:08.727 [DEBUG] [Thread-304375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:18:08.727 [DEBUG] [Thread-304375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:18:08.727 [DEBUG] [Thread-304375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:18:08.745 [INFO] [Thread-304375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:18:08.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:18:08.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:18:09.592 [DEBUG] [Thread-304375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:18:09.592 [DEBUG] [Thread-304375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:18:09.639 [DEBUG] [Thread-304375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:18:09.640 [DEBUG] [Thread-304375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:18:09.649 [DEBUG] [Thread-304375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:18:09.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:18:09.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:18:09.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:18:09.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:18:09.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:18:09.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:18:09.688 [DEBUG] [Thread-304375] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:18:17.954 [DEBUG] [Thread-304377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:18:22.552 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:18:22.553 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:18:33.152 [DEBUG] [Thread-304378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:18:39.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:18:39.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:18:39.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
2025-12-24T15:18:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 18, 34), 21.26, 25.02, 0.0, 18.21, 24.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:18:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:18:34
2025-12-24T15:18:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:18:40.806 [DEBUG] [Thread-304379] [transport.py] [_log()] starting thread (client mode): 0xf574d300
2025-12-24T15:18:40.806 [DEBUG] [Thread-304379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:18:40.818 [DEBUG] [Thread-304379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:18:40.818 [INFO] [Thread-304379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:18:40.823 [DEBUG] [Thread-304379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] client lang: <none>
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] server lang: <none>
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] kex follows: False
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:18:40.824 [DEBUG] [Thread-304379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:18:40.825 [DEBUG] [Thread-304379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:18:40.825 [DEBUG] [Thread-304379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:18:40.825 [DEBUG] [Thread-304379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:18:40.825 [DEBUG] [Thread-304379] [transport.py] [_log()] Compression: none
2025-12-24T15:18:40.825 [DEBUG] [Thread-304379] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:18:40.859 [DEBUG] [Thread-304379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:18:40.862 [DEBUG] [Thread-304379] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:18:40.863 [DEBUG] [Thread-304379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:18:40.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:18:40.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:18:40.866 [DEBUG] [Thread-304379] [transport.py] [_log()] userauth is OK
2025-12-24T15:18:40.866 [DEBUG] [Thread-304379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:18:40.867 [DEBUG] [Thread-304379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:18:40.867 [DEBUG] [Thread-304379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:18:40.867 [DEBUG] [Thread-304379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:18:40.888 [INFO] [Thread-304379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:18:40.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:18:41.512 [DEBUG] [Thread-304379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:18:41.512 [DEBUG] [Thread-304379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:18:41.522 [DEBUG] [Thread-304379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:18:41.554 [DEBUG] [Thread-304379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:18:41.554 [DEBUG] [Thread-304379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:18:41.557 [DEBUG] [Thread-304379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:18:41.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:18:41.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:18:41.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:18:41.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:18:41.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:18:41.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:18:41.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:18:41.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:18:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:18:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.554234 -999.00  +23.30  14.31     32   +5.70 1 2 1 1 1   888    0 19.59 70.41 ----- 14.3 14.3 118.9 20.6 29.2 -17.2 29.4 -18.2 29.7 -17.8 30.2 -17.8
2025-12-24T15:18:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:18:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:18:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.554234
2025-12-24T15:18:41.591 [DEBUG] [Thread-304379] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:18:41.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:18:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:18:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:18:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:18:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:18:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:18:34', tmtdew=21.26, humidity=25.02, cloud=0.0, wind=18.21, temperature=24.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:18:05.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:18:41.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:18:41.688 [DEBUG] [Thread-304382] [transport.py] [_log()] starting thread (client mode): 0xf572d420
2025-12-24T15:18:41.688 [DEBUG] [Thread-304382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:18:41.702 [DEBUG] [Thread-304382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:18:41.702 [INFO] [Thread-304382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] client lang: <none>
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] server lang: <none>
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] kex follows: False
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] Compression: none
2025-12-24T15:18:41.710 [DEBUG] [Thread-304382] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:18:41.765 [DEBUG] [Thread-304382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:18:41.765 [DEBUG] [Thread-304382] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:18:41.766 [DEBUG] [Thread-304382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:18:41.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:18:41.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:18:41.822 [DEBUG] [Thread-304382] [transport.py] [_log()] userauth is OK
2025-12-24T15:18:41.823 [DEBUG] [Thread-304382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:18:41.823 [DEBUG] [Thread-304382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:18:41.823 [DEBUG] [Thread-304382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:18:41.823 [DEBUG] [Thread-304382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:18:41.840 [INFO] [Thread-304382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:18:41.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:18:41.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:18:42.680 [DEBUG] [Thread-304382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:18:42.680 [DEBUG] [Thread-304382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:18:42.727 [DEBUG] [Thread-304382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:18:42.727 [DEBUG] [Thread-304382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:18:42.735 [DEBUG] [Thread-304382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:18:42.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:18:42.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:18:42.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:18:42.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:18:42.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:18:42.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:18:42.768 [DEBUG] [Thread-304382] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:18:48.264 [DEBUG] [Thread-304384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:18:54.994 [DEBUG] [Thread-304385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:19:03.403 [DEBUG] [Thread-304386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:19:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:19:12.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:19:12.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:19:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 19, 7), 21.07, 25.28, 0.0, 12.18, 23.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:19:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:19:07
2025-12-24T15:19:14.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:19:14.251 [DEBUG] [Thread-304387] [transport.py] [_log()] starting thread (client mode): 0xf57717b0
2025-12-24T15:19:14.252 [DEBUG] [Thread-304387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:19:14.259 [DEBUG] [Thread-304387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:19:14.259 [INFO] [Thread-304387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] client lang: <none>
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] server lang: <none>
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] kex follows: False
2025-12-24T15:19:14.266 [DEBUG] [Thread-304387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:19:14.267 [DEBUG] [Thread-304387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:19:14.267 [DEBUG] [Thread-304387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:19:14.267 [DEBUG] [Thread-304387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:19:14.267 [DEBUG] [Thread-304387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:19:14.267 [DEBUG] [Thread-304387] [transport.py] [_log()] Compression: none
2025-12-24T15:19:14.267 [DEBUG] [Thread-304387] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:19:14.302 [DEBUG] [Thread-304387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:19:14.306 [DEBUG] [Thread-304387] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:19:14.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:19:14.310 [DEBUG] [Thread-304387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:19:14.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:19:14.313 [DEBUG] [Thread-304387] [transport.py] [_log()] userauth is OK
2025-12-24T15:19:14.313 [DEBUG] [Thread-304387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:19:14.313 [DEBUG] [Thread-304387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:19:14.313 [DEBUG] [Thread-304387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:19:14.313 [DEBUG] [Thread-304387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:19:14.352 [INFO] [Thread-304387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:19:14.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:19:14.977 [DEBUG] [Thread-304387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:19:14.977 [DEBUG] [Thread-304387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:19:14.981 [DEBUG] [Thread-304387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:19:15.018 [DEBUG] [Thread-304387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:19:15.018 [DEBUG] [Thread-304387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:19:15.022 [DEBUG] [Thread-304387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:19:15.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:19:15.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:19:15.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:19:15.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:19:15.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:19:15.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:19:15.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:19:15.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:19:15.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:19:15.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.554582 -999.00  +23.40  14.67     32   +5.80 1 2 1 1 1   888    0 19.68 67.89 ----- 14.7 14.7 100.0 22.1 29.2 -16.8 29.3 -17.8 29.7 -17.6 30.1 -17.2
2025-12-24T15:19:15.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:19:15.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:19:15.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.554582
2025-12-24T15:19:15.058 [DEBUG] [Thread-304387] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:19:15.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:19:15.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:19:15.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:19:15.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:19:15.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:19:15.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:19:07', tmtdew=21.07, humidity=25.28, cloud=0.0, wind=12.18, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:18:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:19:15.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:19:15.171 [DEBUG] [Thread-304390] [transport.py] [_log()] starting thread (client mode): 0xf5770b20
2025-12-24T15:19:15.171 [DEBUG] [Thread-304390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:19:15.185 [DEBUG] [Thread-304390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:19:15.185 [INFO] [Thread-304390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] client lang: <none>
2025-12-24T15:19:15.194 [DEBUG] [Thread-304390] [transport.py] [_log()] server lang: <none>
2025-12-24T15:19:15.195 [DEBUG] [Thread-304390] [transport.py] [_log()] kex follows: False
2025-12-24T15:19:15.195 [DEBUG] [Thread-304390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:19:15.195 [DEBUG] [Thread-304390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:19:15.195 [DEBUG] [Thread-304390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:19:15.195 [DEBUG] [Thread-304390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:19:15.195 [DEBUG] [Thread-304390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:19:15.195 [DEBUG] [Thread-304390] [transport.py] [_log()] Compression: none
2025-12-24T15:19:15.195 [DEBUG] [Thread-304390] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:19:15.251 [DEBUG] [Thread-304390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:19:15.251 [DEBUG] [Thread-304390] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:19:15.252 [DEBUG] [Thread-304390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:19:15.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:19:15.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:19:15.307 [DEBUG] [Thread-304390] [transport.py] [_log()] userauth is OK
2025-12-24T15:19:15.307 [DEBUG] [Thread-304390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:19:15.307 [DEBUG] [Thread-304390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:19:15.307 [DEBUG] [Thread-304390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:19:15.307 [DEBUG] [Thread-304390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:19:15.322 [INFO] [Thread-304390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:19:15.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:19:15.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:19:16.206 [DEBUG] [Thread-304390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:19:16.206 [DEBUG] [Thread-304390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:19:16.252 [DEBUG] [Thread-304390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:19:16.252 [DEBUG] [Thread-304390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:19:16.260 [DEBUG] [Thread-304390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:19:16.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:19:16.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')
2025-12-24T15:19:16.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
2025-12-24T15:19:16.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:19:16.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:19:16.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:19:16.298 [DEBUG] [Thread-304390] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:19:18.465 [DEBUG] [Thread-304392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:19:22.709 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:19:22.718 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:19:33.613 [DEBUG] [Thread-304393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:19:46.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:19:46.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:19:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:19:47.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 19, 41), 20.8, 25.46, 0.0, 12.37, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:19:47.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:19:41
2025-12-24T15:19:47.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:19:47.750 [DEBUG] [Thread-304394] [transport.py] [_log()] starting thread (client mode): 0xf574d750
2025-12-24T15:19:47.750 [DEBUG] [Thread-304394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:19:47.754 [DEBUG] [Thread-304394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:19:47.754 [INFO] [Thread-304394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] client lang: <none>
2025-12-24T15:19:47.758 [DEBUG] [Thread-304394] [transport.py] [_log()] server lang: <none>
2025-12-24T15:19:47.759 [DEBUG] [Thread-304394] [transport.py] [_log()] kex follows: False
2025-12-24T15:19:47.759 [DEBUG] [Thread-304394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:19:47.759 [DEBUG] [Thread-304394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:19:47.759 [DEBUG] [Thread-304394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:19:47.760 [DEBUG] [Thread-304394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:19:47.760 [DEBUG] [Thread-304394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:19:47.760 [DEBUG] [Thread-304394] [transport.py] [_log()] Compression: none
2025-12-24T15:19:47.760 [DEBUG] [Thread-304394] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:19:47.797 [DEBUG] [Thread-304394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:19:47.800 [DEBUG] [Thread-304394] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:19:47.802 [DEBUG] [Thread-304394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:19:47.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:19:47.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:19:47.807 [DEBUG] [Thread-304394] [transport.py] [_log()] userauth is OK
2025-12-24T15:19:47.807 [DEBUG] [Thread-304394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:19:47.808 [DEBUG] [Thread-304394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:19:47.808 [DEBUG] [Thread-304394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:19:47.808 [DEBUG] [Thread-304394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:19:47.835 [INFO] [Thread-304394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:19:47.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:19:48.468 [DEBUG] [Thread-304394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:19:48.468 [DEBUG] [Thread-304394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:19:48.469 [DEBUG] [Thread-304394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:19:48.509 [DEBUG] [Thread-304394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:19:48.510 [DEBUG] [Thread-304394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:19:48.513 [DEBUG] [Thread-304394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:19:48.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:19:48.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:19:48.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:19:48.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:19:48.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:19:48.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:19:48.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:19:48.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:19:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:19:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.554929 -999.00  +23.20  10.54     32   +5.70 1 2 1 1 1   888    0 19.55 63.51 ----- 10.5 10.5 101.5 20.2 29.0 -19.9 29.2 -17.8 29.5 -17.5 30.0 -16.4
2025-12-24T15:19:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:19:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:19:48.543 [DEBUG] [Thread-304394] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:19:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.554929
2025-12-24T15:19:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:19:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:19:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:19:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:19:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:19:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:19:41', tmtdew=20.8, humidity=25.46, cloud=0.0, wind=12.37, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:19:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:19:48.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:19:48.676 [DEBUG] [Thread-304397] [transport.py] [_log()] starting thread (client mode): 0xf5753310
2025-12-24T15:19:48.676 [DEBUG] [Thread-304397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:19:48.690 [DEBUG] [Thread-304397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:19:48.690 [INFO] [Thread-304397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] client lang: <none>
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] server lang: <none>
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] kex follows: False
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:19:48.698 [DEBUG] [Thread-304397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:19:48.699 [DEBUG] [Thread-304397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:19:48.699 [DEBUG] [Thread-304397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:19:48.699 [DEBUG] [Thread-304397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:19:48.699 [DEBUG] [Thread-304397] [transport.py] [_log()] Compression: none
2025-12-24T15:19:48.699 [DEBUG] [Thread-304397] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:19:48.723 [DEBUG] [Thread-304399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:19:48.756 [DEBUG] [Thread-304397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:19:48.757 [DEBUG] [Thread-304397] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:19:48.757 [DEBUG] [Thread-304397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:19:48.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:19:48.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:19:48.819 [DEBUG] [Thread-304397] [transport.py] [_log()] userauth is OK
2025-12-24T15:19:48.819 [DEBUG] [Thread-304397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:19:48.819 [DEBUG] [Thread-304397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:19:48.819 [DEBUG] [Thread-304397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:19:48.819 [DEBUG] [Thread-304397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:19:48.838 [INFO] [Thread-304397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:19:48.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:19:48.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:19:49.703 [DEBUG] [Thread-304397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:19:49.704 [DEBUG] [Thread-304397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:19:49.743 [DEBUG] [Thread-304397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:19:49.744 [DEBUG] [Thread-304397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:19:49.753 [DEBUG] [Thread-304397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:19:49.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:19:49.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:19:49.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:19:49.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:19:49.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:19:49.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:19:49.792 [DEBUG] [Thread-304397] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:19:55.285 [DEBUG] [Thread-304400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:20:03.891 [DEBUG] [Thread-304401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:20:19.007 [DEBUG] [Thread-304402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:20:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:20:19.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:20:19.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:20:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 20, 14), 20.67, 25.68, 0.0, 11.88, 23.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:20:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:20:14
2025-12-24T15:20:20.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:20:21.137 [DEBUG] [Thread-304403] [transport.py] [_log()] starting thread (client mode): 0xf574d150
2025-12-24T15:20:21.137 [DEBUG] [Thread-304403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:20:21.150 [DEBUG] [Thread-304403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:20:21.150 [INFO] [Thread-304403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:20:21.156 [DEBUG] [Thread-304403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:20:21.157 [DEBUG] [Thread-304403] [transport.py] [_log()] client lang: <none>
2025-12-24T15:20:21.157 [DEBUG] [Thread-304403] [transport.py] [_log()] server lang: <none>
2025-12-24T15:20:21.157 [DEBUG] [Thread-304403] [transport.py] [_log()] kex follows: False
2025-12-24T15:20:21.157 [DEBUG] [Thread-304403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:20:21.157 [DEBUG] [Thread-304403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:20:21.158 [DEBUG] [Thread-304403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:20:21.158 [DEBUG] [Thread-304403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:20:21.158 [DEBUG] [Thread-304403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:20:21.158 [DEBUG] [Thread-304403] [transport.py] [_log()] Compression: none
2025-12-24T15:20:21.158 [DEBUG] [Thread-304403] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:20:21.199 [DEBUG] [Thread-304403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:20:21.204 [DEBUG] [Thread-304403] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:20:21.206 [DEBUG] [Thread-304403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:20:21.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:20:21.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:20:21.211 [DEBUG] [Thread-304403] [transport.py] [_log()] userauth is OK
2025-12-24T15:20:21.211 [DEBUG] [Thread-304403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:20:21.211 [DEBUG] [Thread-304403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:20:21.211 [DEBUG] [Thread-304403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:20:21.211 [DEBUG] [Thread-304403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:20:21.239 [INFO] [Thread-304403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:20:21.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:20:21.824 [DEBUG] [Thread-304403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:20:21.824 [DEBUG] [Thread-304403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:20:21.826 [DEBUG] [Thread-304403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:20:21.865 [DEBUG] [Thread-304403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:20:21.866 [DEBUG] [Thread-304403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:20:21.869 [DEBUG] [Thread-304403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:20:21.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:20:21.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:20:21.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:20:21.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:20:21.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:20:21.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:20:21.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:20:21.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:20:21.896 [DEBUG] [Thread-304403] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:20:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:20:21.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.555623 -999.00  +23.50  13.82     31   +5.80 1 2 1 1 1   888    0 19.28 53.87 ----- 13.8 13.8 139.6 27.4 29.1 -17.4 29.2 -17.5 29.5 -17.6 29.9 -16.2
2025-12-24T15:20:21.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:20:21.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:20:21.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.555623
2025-12-24T15:20:21.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:20:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:20:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:20:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:20:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:20:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:20:14', tmtdew=20.67, humidity=25.68, cloud=0.0, wind=11.88, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:20:05.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:20:22.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:20:22.018 [DEBUG] [Thread-304406] [transport.py] [_log()] starting thread (client mode): 0xf574d510
2025-12-24T15:20:22.018 [DEBUG] [Thread-304406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:20:22.032 [DEBUG] [Thread-304406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:20:22.032 [INFO] [Thread-304406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] client lang: <none>
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] server lang: <none>
2025-12-24T15:20:22.040 [DEBUG] [Thread-304406] [transport.py] [_log()] kex follows: False
2025-12-24T15:20:22.041 [DEBUG] [Thread-304406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:20:22.041 [DEBUG] [Thread-304406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:20:22.041 [DEBUG] [Thread-304406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:20:22.041 [DEBUG] [Thread-304406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:20:22.041 [DEBUG] [Thread-304406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:20:22.041 [DEBUG] [Thread-304406] [transport.py] [_log()] Compression: none
2025-12-24T15:20:22.041 [DEBUG] [Thread-304406] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:20:22.099 [DEBUG] [Thread-304406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:20:22.099 [DEBUG] [Thread-304406] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:20:22.100 [DEBUG] [Thread-304406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:20:22.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:20:22.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:20:22.157 [DEBUG] [Thread-304406] [transport.py] [_log()] userauth is OK
2025-12-24T15:20:22.157 [DEBUG] [Thread-304406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:20:22.158 [DEBUG] [Thread-304406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:20:22.158 [DEBUG] [Thread-304406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:20:22.158 [DEBUG] [Thread-304406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:20:22.176 [INFO] [Thread-304406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:20:22.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:20:22.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:20:22.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:20:22.861 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:20:23.032 [DEBUG] [Thread-304406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:20:23.032 [DEBUG] [Thread-304406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:20:23.080 [DEBUG] [Thread-304406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:20:23.080 [DEBUG] [Thread-304406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:20:23.088 [DEBUG] [Thread-304406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:20:23.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:20:23.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:20:23.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:20:23.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:20:23.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:20:23.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:20:23.120 [DEBUG] [Thread-304406] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:20:34.134 [DEBUG] [Thread-304408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:20:49.280 [DEBUG] [Thread-304409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:20:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:20:53.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:20:53.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:20:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 20, 47), 20.57, 26.18, 0.0, 14.59, 23.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:20:54.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:20:47
2025-12-24T15:20:55.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:20:55.327 [DEBUG] [Thread-304410] [transport.py] [_log()] starting thread (client mode): 0xf5788460
2025-12-24T15:20:55.328 [DEBUG] [Thread-304410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:20:55.334 [DEBUG] [Thread-304410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:20:55.334 [INFO] [Thread-304410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] client lang: <none>
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] server lang: <none>
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] kex follows: False
2025-12-24T15:20:55.339 [DEBUG] [Thread-304410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:20:55.340 [DEBUG] [Thread-304410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:20:55.340 [DEBUG] [Thread-304410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:20:55.340 [DEBUG] [Thread-304410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:20:55.340 [DEBUG] [Thread-304410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:20:55.340 [DEBUG] [Thread-304410] [transport.py] [_log()] Compression: none
2025-12-24T15:20:55.340 [DEBUG] [Thread-304410] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:20:55.371 [DEBUG] [Thread-304410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:20:55.374 [DEBUG] [Thread-304410] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:20:55.375 [DEBUG] [Thread-304410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:20:55.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:20:55.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:20:55.378 [DEBUG] [Thread-304410] [transport.py] [_log()] userauth is OK
2025-12-24T15:20:55.378 [DEBUG] [Thread-304410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:20:55.379 [DEBUG] [Thread-304410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:20:55.379 [DEBUG] [Thread-304410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:20:55.379 [DEBUG] [Thread-304410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:20:55.390 [INFO] [Thread-304410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:20:55.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:20:55.531 [DEBUG] [Thread-304412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:20:56.015 [DEBUG] [Thread-304410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:20:56.016 [DEBUG] [Thread-304410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:20:56.016 [DEBUG] [Thread-304410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:20:56.057 [DEBUG] [Thread-304410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:20:56.057 [DEBUG] [Thread-304410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:20:56.060 [DEBUG] [Thread-304410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:20:56.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:20:56.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:20:56.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:20:56.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:20:56.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:20:56.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:20:56.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:20:56.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:20:56.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:20:56.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.555971 -999.00  +23.50  12.82     31   +5.80 1 2 1 1 1   888    0 18.68 50.75 ----- 12.8 12.8 140.2 20.6 29.1 -16.5 29.1 -17.4 29.4 -16.4 29.7 -17.0
2025-12-24T15:20:56.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:20:56.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:20:56.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.555971
2025-12-24T15:20:56.090 [DEBUG] [Thread-304410] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:20:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:20:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:20:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:20:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:20:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:20:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:20:47', tmtdew=20.57, humidity=26.18, cloud=0.0, wind=14.59, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:20:35.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:20:56.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:20:56.205 [DEBUG] [Thread-304414] [transport.py] [_log()] starting thread (client mode): 0xf572e170
2025-12-24T15:20:56.206 [DEBUG] [Thread-304414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:20:56.220 [DEBUG] [Thread-304414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:20:56.220 [INFO] [Thread-304414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:20:56.228 [DEBUG] [Thread-304414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:20:56.228 [DEBUG] [Thread-304414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:20:56.228 [DEBUG] [Thread-304414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:20:56.229 [DEBUG] [Thread-304414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:20:56.229 [DEBUG] [Thread-304414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:20:56.229 [DEBUG] [Thread-304414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:20:56.229 [DEBUG] [Thread-304414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:20:56.229 [DEBUG] [Thread-304414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:20:56.229 [DEBUG] [Thread-304414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:20:56.229 [DEBUG] [Thread-304414] [transport.py] [_log()] client lang: <none>
2025-12-24T15:20:56.229 [DEBUG] [Thread-304414] [transport.py] [_log()] server lang: <none>
2025-12-24T15:20:56.230 [DEBUG] [Thread-304414] [transport.py] [_log()] kex follows: False
2025-12-24T15:20:56.230 [DEBUG] [Thread-304414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:20:56.230 [DEBUG] [Thread-304414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:20:56.230 [DEBUG] [Thread-304414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:20:56.230 [DEBUG] [Thread-304414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:20:56.230 [DEBUG] [Thread-304414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:20:56.230 [DEBUG] [Thread-304414] [transport.py] [_log()] Compression: none
2025-12-24T15:20:56.230 [DEBUG] [Thread-304414] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:20:56.288 [DEBUG] [Thread-304414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:20:56.289 [DEBUG] [Thread-304414] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:20:56.290 [DEBUG] [Thread-304414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:20:56.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:20:56.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:20:56.351 [DEBUG] [Thread-304414] [transport.py] [_log()] userauth is OK
2025-12-24T15:20:56.351 [DEBUG] [Thread-304414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:20:56.352 [DEBUG] [Thread-304414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:20:56.352 [DEBUG] [Thread-304414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:20:56.352 [DEBUG] [Thread-304414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:20:56.375 [INFO] [Thread-304414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:20:56.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:20:56.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:20:57.231 [DEBUG] [Thread-304414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:20:57.231 [DEBUG] [Thread-304414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:20:57.270 [DEBUG] [Thread-304414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:20:57.270 [DEBUG] [Thread-304414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:20:57.279 [DEBUG] [Thread-304414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:20:57.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:20:57.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')
2025-12-24T15:20:57.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:20:57.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:20:57.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:20:57.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:20:57.312 [DEBUG] [Thread-304414] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:21:04.381 [DEBUG] [Thread-304416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:21:19.513 [DEBUG] [Thread-304417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:21:23.001 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:21:23.003 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:21:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:21:27.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:21:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:21:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 21, 20), 20.66, 26.05, 0.0, 16.02, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:21:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:21:20
2025-12-24T15:21:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:21:28.841 [DEBUG] [Thread-304418] [transport.py] [_log()] starting thread (client mode): 0xf57539a0
2025-12-24T15:21:28.842 [DEBUG] [Thread-304418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:21:28.851 [DEBUG] [Thread-304418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:21:28.851 [INFO] [Thread-304418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] client lang: <none>
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] server lang: <none>
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] kex follows: False
2025-12-24T15:21:28.856 [DEBUG] [Thread-304418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:21:28.857 [DEBUG] [Thread-304418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:21:28.857 [DEBUG] [Thread-304418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:21:28.857 [DEBUG] [Thread-304418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:21:28.857 [DEBUG] [Thread-304418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:21:28.857 [DEBUG] [Thread-304418] [transport.py] [_log()] Compression: none
2025-12-24T15:21:28.857 [DEBUG] [Thread-304418] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:21:28.882 [DEBUG] [Thread-304418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:21:28.885 [DEBUG] [Thread-304418] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:21:28.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:21:28.888 [DEBUG] [Thread-304418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:21:28.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:21:28.891 [DEBUG] [Thread-304418] [transport.py] [_log()] userauth is OK
2025-12-24T15:21:28.891 [DEBUG] [Thread-304418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:21:28.891 [DEBUG] [Thread-304418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:21:28.891 [DEBUG] [Thread-304418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:21:28.891 [DEBUG] [Thread-304418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:21:28.914 [INFO] [Thread-304418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:21:28.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:21:29.521 [DEBUG] [Thread-304418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:21:29.521 [DEBUG] [Thread-304418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:21:29.522 [DEBUG] [Thread-304418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:21:29.564 [DEBUG] [Thread-304418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:21:29.564 [DEBUG] [Thread-304418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:21:29.565 [DEBUG] [Thread-304418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:21:29.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:21:29.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:21:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:21:29.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:21:29.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:21:29.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:21:29.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:21:29.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:21:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:21:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.556318 -999.00  +23.60  13.21     31   +5.80 1 2 1 1 1   888    0 18.59 47.02 ----- 13.2 13.2 160.4 19.9 28.9 -16.2 28.8 -18.4 29.3 -16.6 29.6 -16.8
2025-12-24T15:21:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:21:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:21:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.556318
2025-12-24T15:21:29.599 [DEBUG] [Thread-304418] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:21:29.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:21:29.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:21:29.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:21:29.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:21:29.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:21:29.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:21:20', tmtdew=20.66, humidity=26.05, cloud=0.0, wind=16.02, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:21:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:21:29.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:21:29.698 [DEBUG] [Thread-304421] [transport.py] [_log()] starting thread (client mode): 0xf57a9cc0
2025-12-24T15:21:29.698 [DEBUG] [Thread-304421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:21:29.714 [DEBUG] [Thread-304421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:21:29.714 [INFO] [Thread-304421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:21:29.721 [DEBUG] [Thread-304421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:21:29.721 [DEBUG] [Thread-304421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:21:29.721 [DEBUG] [Thread-304421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:21:29.721 [DEBUG] [Thread-304421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:21:29.721 [DEBUG] [Thread-304421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:21:29.721 [DEBUG] [Thread-304421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:21:29.721 [DEBUG] [Thread-304421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:21:29.721 [DEBUG] [Thread-304421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] client lang: <none>
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] server lang: <none>
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] kex follows: False
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] Compression: none
2025-12-24T15:21:29.722 [DEBUG] [Thread-304421] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:21:29.777 [DEBUG] [Thread-304421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:21:29.777 [DEBUG] [Thread-304421] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:21:29.777 [DEBUG] [Thread-304421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:21:29.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:21:29.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:21:29.834 [DEBUG] [Thread-304421] [transport.py] [_log()] userauth is OK
2025-12-24T15:21:29.834 [DEBUG] [Thread-304421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:21:29.834 [DEBUG] [Thread-304421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:21:29.834 [DEBUG] [Thread-304421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:21:29.834 [DEBUG] [Thread-304421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:21:29.848 [INFO] [Thread-304421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:21:29.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:21:29.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:21:30.726 [DEBUG] [Thread-304421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:21:30.726 [DEBUG] [Thread-304421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:21:30.774 [DEBUG] [Thread-304421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:21:30.774 [DEBUG] [Thread-304421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:21:30.783 [DEBUG] [Thread-304421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:21:30.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:21:30.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:21:30.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:21:30.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:21:30.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:21:30.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:21:30.815 [DEBUG] [Thread-304421] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:21:34.577 [DEBUG] [Thread-304423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:21:49.729 [DEBUG] [Thread-304424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:21:55.760 [DEBUG] [Thread-304425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:22:00.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:22:00.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:22:00.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
2025-12-24T15:22:01.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 21, 53), 20.6, 26.21, 0.0, 15.72, 23.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:22:01.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:21:53
2025-12-24T15:22:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:22:02.111 [DEBUG] [Thread-304426] [transport.py] [_log()] starting thread (client mode): 0xf5752b60
2025-12-24T15:22:02.111 [DEBUG] [Thread-304426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:22:02.125 [DEBUG] [Thread-304426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:22:02.126 [INFO] [Thread-304426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:22:02.132 [DEBUG] [Thread-304426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:22:02.132 [DEBUG] [Thread-304426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] client lang: <none>
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] server lang: <none>
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] kex follows: False
2025-12-24T15:22:02.133 [DEBUG] [Thread-304426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:22:02.134 [DEBUG] [Thread-304426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:22:02.135 [DEBUG] [Thread-304426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:22:02.135 [DEBUG] [Thread-304426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:22:02.135 [DEBUG] [Thread-304426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:22:02.135 [DEBUG] [Thread-304426] [transport.py] [_log()] Compression: none
2025-12-24T15:22:02.135 [DEBUG] [Thread-304426] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:22:02.163 [DEBUG] [Thread-304426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:22:02.168 [DEBUG] [Thread-304426] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:22:02.169 [DEBUG] [Thread-304426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:22:02.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:22:02.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:22:02.175 [DEBUG] [Thread-304426] [transport.py] [_log()] userauth is OK
2025-12-24T15:22:02.175 [DEBUG] [Thread-304426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:22:02.175 [DEBUG] [Thread-304426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:22:02.176 [DEBUG] [Thread-304426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:22:02.176 [DEBUG] [Thread-304426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:22:02.207 [INFO] [Thread-304426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:22:02.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:22:02.828 [DEBUG] [Thread-304426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:22:02.828 [DEBUG] [Thread-304426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:22:02.829 [DEBUG] [Thread-304426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:22:02.868 [DEBUG] [Thread-304426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:22:02.868 [DEBUG] [Thread-304426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:22:02.870 [DEBUG] [Thread-304426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:22:02.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:22:02.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:22:02.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:22:02.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:22:02.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:22:02.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:22:02.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:22:02.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:22:02.889 [DEBUG] [Thread-304426] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:22:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:22:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.556665 -999.00  +23.50   9.74     31   +5.80 1 2 1 1 1   888    0 18.55 46.05 ----- 9.7 9.7 134.4 18.8 28.9 -16.2 28.9 -16.5 29.3 -16.2 29.5 -16.9
2025-12-24T15:22:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:22:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:22:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.556665
2025-12-24T15:22:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:22:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:22:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:22:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:22:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:22:02.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:21:53', tmtdew=20.6, humidity=26.21, cloud=0.0, wind=15.72, temperature=23.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:21:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:22:02.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:22:03.003 [DEBUG] [Thread-304429] [transport.py] [_log()] starting thread (client mode): 0xf578a740
2025-12-24T15:22:03.004 [DEBUG] [Thread-304429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:22:03.019 [DEBUG] [Thread-304429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:22:03.019 [INFO] [Thread-304429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] client lang: <none>
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] server lang: <none>
2025-12-24T15:22:03.026 [DEBUG] [Thread-304429] [transport.py] [_log()] kex follows: False
2025-12-24T15:22:03.027 [DEBUG] [Thread-304429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:22:03.027 [DEBUG] [Thread-304429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:22:03.027 [DEBUG] [Thread-304429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:22:03.027 [DEBUG] [Thread-304429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:22:03.027 [DEBUG] [Thread-304429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:22:03.027 [DEBUG] [Thread-304429] [transport.py] [_log()] Compression: none
2025-12-24T15:22:03.027 [DEBUG] [Thread-304429] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:22:03.086 [DEBUG] [Thread-304429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:22:03.086 [DEBUG] [Thread-304429] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:22:03.086 [DEBUG] [Thread-304429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:22:03.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:22:03.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:22:03.143 [DEBUG] [Thread-304429] [transport.py] [_log()] userauth is OK
2025-12-24T15:22:03.143 [DEBUG] [Thread-304429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:22:03.143 [DEBUG] [Thread-304429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:22:03.143 [DEBUG] [Thread-304429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:22:03.143 [DEBUG] [Thread-304429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:22:03.161 [INFO] [Thread-304429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:22:03.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:22:03.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:22:04.076 [DEBUG] [Thread-304429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:22:04.076 [DEBUG] [Thread-304429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:22:04.124 [DEBUG] [Thread-304429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:22:04.125 [DEBUG] [Thread-304429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:22:04.134 [DEBUG] [Thread-304429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:22:04.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:22:04.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:22:04.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:22:04.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:22:04.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:22:04.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:22:04.172 [DEBUG] [Thread-304429] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:22:04.817 [DEBUG] [Thread-304431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:22:19.989 [DEBUG] [Thread-304432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:22:23.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:22:23.231 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:22:34.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:22:34.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:22:34.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
2025-12-24T15:22:35.070 [DEBUG] [Thread-304433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:22:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 22, 27), 20.51, 26.38, 0.0, 18.88, 23.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:22:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:22:27
2025-12-24T15:22:35.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:22:35.552 [DEBUG] [Thread-304434] [transport.py] [_log()] starting thread (client mode): 0xf57bc490
2025-12-24T15:22:35.552 [DEBUG] [Thread-304434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:22:35.556 [DEBUG] [Thread-304434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:22:35.556 [INFO] [Thread-304434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:22:35.560 [DEBUG] [Thread-304434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:22:35.560 [DEBUG] [Thread-304434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:22:35.560 [DEBUG] [Thread-304434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:22:35.560 [DEBUG] [Thread-304434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:22:35.560 [DEBUG] [Thread-304434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:22:35.560 [DEBUG] [Thread-304434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:22:35.560 [DEBUG] [Thread-304434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:22:35.560 [DEBUG] [Thread-304434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:22:35.561 [DEBUG] [Thread-304434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:22:35.561 [DEBUG] [Thread-304434] [transport.py] [_log()] client lang: <none>
2025-12-24T15:22:35.561 [DEBUG] [Thread-304434] [transport.py] [_log()] server lang: <none>
2025-12-24T15:22:35.561 [DEBUG] [Thread-304434] [transport.py] [_log()] kex follows: False
2025-12-24T15:22:35.561 [DEBUG] [Thread-304434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:22:35.561 [DEBUG] [Thread-304434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:22:35.562 [DEBUG] [Thread-304434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:22:35.562 [DEBUG] [Thread-304434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:22:35.562 [DEBUG] [Thread-304434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:22:35.562 [DEBUG] [Thread-304434] [transport.py] [_log()] Compression: none
2025-12-24T15:22:35.562 [DEBUG] [Thread-304434] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:22:35.596 [DEBUG] [Thread-304434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:22:35.599 [DEBUG] [Thread-304434] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:22:35.601 [DEBUG] [Thread-304434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:22:35.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:22:35.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:22:35.606 [DEBUG] [Thread-304434] [transport.py] [_log()] userauth is OK
2025-12-24T15:22:35.606 [DEBUG] [Thread-304434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:22:35.606 [DEBUG] [Thread-304434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:22:35.607 [DEBUG] [Thread-304434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:22:35.607 [DEBUG] [Thread-304434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:22:35.634 [INFO] [Thread-304434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:22:35.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:22:36.238 [DEBUG] [Thread-304434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:22:36.238 [DEBUG] [Thread-304434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:22:36.239 [DEBUG] [Thread-304434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:22:36.279 [DEBUG] [Thread-304434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:22:36.279 [DEBUG] [Thread-304434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:22:36.282 [DEBUG] [Thread-304434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:22:36.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:22:36.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:22:36.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:22:36.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:22:36.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:22:36.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:22:36.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:22:36.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:22:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:22:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.557012 -999.00  +23.30   5.87     32   +5.80 1 2 1 1 1   888    0 18.88 49.52 ----- 5.9 5.9 158.2 10.1 29.0 -15.8 28.8 -16.3 29.2 -15.7 29.6 -15.3
2025-12-24T15:22:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:22:36.301 [DEBUG] [Thread-304434] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:22:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:22:36.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.557012
2025-12-24T15:22:36.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:22:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:22:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:22:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:22:36.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:22:36.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:22:27', tmtdew=20.51, humidity=26.38, cloud=0.0, wind=18.88, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:22:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:22:36.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:22:36.433 [DEBUG] [Thread-304437] [transport.py] [_log()] starting thread (client mode): 0xf578b2e0
2025-12-24T15:22:36.433 [DEBUG] [Thread-304437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:22:36.448 [DEBUG] [Thread-304437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:22:36.448 [INFO] [Thread-304437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:22:36.455 [DEBUG] [Thread-304437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:22:36.455 [DEBUG] [Thread-304437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:22:36.455 [DEBUG] [Thread-304437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:22:36.455 [DEBUG] [Thread-304437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:22:36.455 [DEBUG] [Thread-304437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:22:36.455 [DEBUG] [Thread-304437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:22:36.455 [DEBUG] [Thread-304437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] client lang: <none>
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] server lang: <none>
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] kex follows: False
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] Compression: none
2025-12-24T15:22:36.456 [DEBUG] [Thread-304437] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:22:36.515 [DEBUG] [Thread-304437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:22:36.515 [DEBUG] [Thread-304437] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:22:36.516 [DEBUG] [Thread-304437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:22:36.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:22:36.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:22:36.571 [DEBUG] [Thread-304437] [transport.py] [_log()] userauth is OK
2025-12-24T15:22:36.571 [DEBUG] [Thread-304437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:22:36.571 [DEBUG] [Thread-304437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:22:36.571 [DEBUG] [Thread-304437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:22:36.571 [DEBUG] [Thread-304437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:22:36.593 [INFO] [Thread-304437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:22:36.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:22:36.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:22:37.411 [DEBUG] [Thread-304437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:22:37.411 [DEBUG] [Thread-304437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:22:37.458 [DEBUG] [Thread-304437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:22:37.458 [DEBUG] [Thread-304437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:22:37.466 [DEBUG] [Thread-304437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:22:37.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:22:37.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')
2025-12-24T15:22:37.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:22:37.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:22:37.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:22:37.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:22:37.499 [DEBUG] [Thread-304437] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:22:50.182 [DEBUG] [Thread-304439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:22:56.041 [DEBUG] [Thread-304440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:23:05.369 [DEBUG] [Thread-304441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:23:07.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:23:07.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:23:07.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:23:08.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 22, 27), 20.46, 26.38, 0.0, 22.48, 23.6, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:23:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:22:27
2025-12-24T15:23:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:23:09.057 [DEBUG] [Thread-304442] [transport.py] [_log()] starting thread (client mode): 0xf5753b50
2025-12-24T15:23:09.058 [DEBUG] [Thread-304442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:23:09.071 [DEBUG] [Thread-304442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:23:09.071 [INFO] [Thread-304442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] client lang: <none>
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] server lang: <none>
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] kex follows: False
2025-12-24T15:23:09.077 [DEBUG] [Thread-304442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:23:09.078 [DEBUG] [Thread-304442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:23:09.078 [DEBUG] [Thread-304442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:23:09.078 [DEBUG] [Thread-304442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:23:09.078 [DEBUG] [Thread-304442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:23:09.078 [DEBUG] [Thread-304442] [transport.py] [_log()] Compression: none
2025-12-24T15:23:09.078 [DEBUG] [Thread-304442] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:23:09.112 [DEBUG] [Thread-304442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:23:09.116 [DEBUG] [Thread-304442] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:23:09.118 [DEBUG] [Thread-304442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:23:09.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:23:09.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:23:09.124 [DEBUG] [Thread-304442] [transport.py] [_log()] userauth is OK
2025-12-24T15:23:09.125 [DEBUG] [Thread-304442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:23:09.125 [DEBUG] [Thread-304442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:23:09.125 [DEBUG] [Thread-304442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:23:09.125 [DEBUG] [Thread-304442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:23:09.153 [INFO] [Thread-304442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:23:09.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:23:09.779 [DEBUG] [Thread-304442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:23:09.780 [DEBUG] [Thread-304442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:23:09.781 [DEBUG] [Thread-304442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:23:09.821 [DEBUG] [Thread-304442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:23:09.821 [DEBUG] [Thread-304442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:23:09.825 [DEBUG] [Thread-304442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:23:09.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:23:09.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:23:09.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:23:09.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:23:09.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:23:09.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:23:09.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:23:09.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:23:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:23:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.557360 -999.00  +23.60  14.77     32   +6.00 1 2 1 1 1   888    0 18.56 44.53 ----- 14.8 14.8 172.8 22.2 29.0 -15.9 28.6 -18.0 29.2 -15.9 29.6 -14.9
2025-12-24T15:23:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:23:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:23:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.557360
2025-12-24T15:23:09.855 [DEBUG] [Thread-304442] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:23:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:23:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:23:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:23:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:23:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:23:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:22:27', tmtdew=20.46, humidity=26.38, cloud=0.0, wind=22.48, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:22:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:23:09.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:23:09.959 [DEBUG] [Thread-304445] [transport.py] [_log()] starting thread (client mode): 0xf81c0fa0
2025-12-24T15:23:09.959 [DEBUG] [Thread-304445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:23:09.974 [DEBUG] [Thread-304445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:23:09.975 [INFO] [Thread-304445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:23:09.982 [DEBUG] [Thread-304445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:23:09.982 [DEBUG] [Thread-304445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] client lang: <none>
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] server lang: <none>
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] kex follows: False
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] Compression: none
2025-12-24T15:23:09.983 [DEBUG] [Thread-304445] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:23:10.043 [DEBUG] [Thread-304445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:23:10.043 [DEBUG] [Thread-304445] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:23:10.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:23:10.044 [DEBUG] [Thread-304445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:23:10.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:23:10.103 [DEBUG] [Thread-304445] [transport.py] [_log()] userauth is OK
2025-12-24T15:23:10.103 [DEBUG] [Thread-304445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:23:10.103 [DEBUG] [Thread-304445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:23:10.103 [DEBUG] [Thread-304445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:23:10.103 [DEBUG] [Thread-304445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:23:10.123 [INFO] [Thread-304445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:23:10.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:23:10.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:23:10.946 [DEBUG] [Thread-304445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:23:10.947 [DEBUG] [Thread-304445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:23:10.994 [DEBUG] [Thread-304445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:23:10.994 [DEBUG] [Thread-304445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:23:11.002 [DEBUG] [Thread-304445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:23:11.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:23:11.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:23:11.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:23:11.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:23:11.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:23:11.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:23:11.040 [DEBUG] [Thread-304445] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:23:20.465 [DEBUG] [Thread-304447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:23:23.372 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:23:23.373 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:23:35.554 [DEBUG] [Thread-304448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:23:41.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:23:41.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:23:41.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
2025-12-24T15:23:41.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 23, 33), 20.42, 26.26, 0.0, 14.56, 23.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:23:41.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:23:33
2025-12-24T15:23:42.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:23:42.300 [DEBUG] [Thread-304449] [transport.py] [_log()] starting thread (client mode): 0xf5789fc0
2025-12-24T15:23:42.301 [DEBUG] [Thread-304449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:23:42.314 [DEBUG] [Thread-304449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:23:42.314 [INFO] [Thread-304449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:23:42.317 [DEBUG] [Thread-304449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:23:42.317 [DEBUG] [Thread-304449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:23:42.317 [DEBUG] [Thread-304449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:23:42.317 [DEBUG] [Thread-304449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:23:42.317 [DEBUG] [Thread-304449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:23:42.317 [DEBUG] [Thread-304449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:23:42.318 [DEBUG] [Thread-304449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:23:42.318 [DEBUG] [Thread-304449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:23:42.318 [DEBUG] [Thread-304449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:23:42.318 [DEBUG] [Thread-304449] [transport.py] [_log()] client lang: <none>
2025-12-24T15:23:42.318 [DEBUG] [Thread-304449] [transport.py] [_log()] server lang: <none>
2025-12-24T15:23:42.318 [DEBUG] [Thread-304449] [transport.py] [_log()] kex follows: False
2025-12-24T15:23:42.318 [DEBUG] [Thread-304449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:23:42.319 [DEBUG] [Thread-304449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:23:42.319 [DEBUG] [Thread-304449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:23:42.319 [DEBUG] [Thread-304449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:23:42.319 [DEBUG] [Thread-304449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:23:42.319 [DEBUG] [Thread-304449] [transport.py] [_log()] Compression: none
2025-12-24T15:23:42.319 [DEBUG] [Thread-304449] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:23:42.346 [DEBUG] [Thread-304449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:23:42.349 [DEBUG] [Thread-304449] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:23:42.350 [DEBUG] [Thread-304449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:23:42.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:23:42.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:23:42.393 [DEBUG] [Thread-304449] [transport.py] [_log()] userauth is OK
2025-12-24T15:23:42.393 [DEBUG] [Thread-304449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:23:42.393 [DEBUG] [Thread-304449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:23:42.393 [DEBUG] [Thread-304449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:23:42.393 [DEBUG] [Thread-304449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:23:42.412 [INFO] [Thread-304449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:23:42.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:23:43.086 [DEBUG] [Thread-304449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:23:43.086 [DEBUG] [Thread-304449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:23:43.089 [DEBUG] [Thread-304449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:23:43.127 [DEBUG] [Thread-304449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:23:43.127 [DEBUG] [Thread-304449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:23:43.129 [DEBUG] [Thread-304449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:23:43.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:23:43.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:23:43.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:23:43.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:23:43.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:23:43.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:23:43.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:23:43.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:23:43.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:23:43.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.558054 -999.00  +23.40   8.91     32   +5.90 1 2 1 1 1   888    0 18.30 38.92 ----- 8.9 8.9 154.0 16.9 28.8 -16.3 28.6 -15.9 29.1 -15.4 29.4 -15.8
2025-12-24T15:23:43.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:23:43.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:23:43.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.558054
2025-12-24T15:23:43.156 [DEBUG] [Thread-304449] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:23:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:23:43.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:23:43.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:23:43.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:23:43.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:23:43.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:23:33', tmtdew=20.42, humidity=26.26, cloud=0.0, wind=14.56, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:23:35.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:23:43.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:23:43.255 [DEBUG] [Thread-304452] [transport.py] [_log()] starting thread (client mode): 0xf572f730
2025-12-24T15:23:43.255 [DEBUG] [Thread-304452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:23:43.269 [DEBUG] [Thread-304452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:23:43.269 [INFO] [Thread-304452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:23:43.276 [DEBUG] [Thread-304452] [transport.py] [_log()] client lang: <none>
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] server lang: <none>
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] kex follows: False
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] Compression: none
2025-12-24T15:23:43.277 [DEBUG] [Thread-304452] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:23:43.333 [DEBUG] [Thread-304452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:23:43.333 [DEBUG] [Thread-304452] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:23:43.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:23:43.334 [DEBUG] [Thread-304452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:23:43.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:23:43.395 [DEBUG] [Thread-304452] [transport.py] [_log()] userauth is OK
2025-12-24T15:23:43.395 [DEBUG] [Thread-304452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:23:43.395 [DEBUG] [Thread-304452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:23:43.395 [DEBUG] [Thread-304452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:23:43.395 [DEBUG] [Thread-304452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:23:43.412 [INFO] [Thread-304452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:23:43.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:23:43.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:23:44.247 [DEBUG] [Thread-304452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:23:44.247 [DEBUG] [Thread-304452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:23:44.294 [DEBUG] [Thread-304452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:23:44.295 [DEBUG] [Thread-304452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:23:44.303 [DEBUG] [Thread-304452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:23:44.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:23:44.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')
2025-12-24T15:23:44.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:23:44.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:23:44.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:23:44.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:23:44.336 [DEBUG] [Thread-304452] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:23:50.634 [DEBUG] [Thread-304454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:23:56.276 [DEBUG] [Thread-304455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:24:05.802 [DEBUG] [Thread-304456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:24:14.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:24:14.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:24:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:24:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 24, 6), 20.36, 26.36, 0.0, 11.59, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:24:15.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:24:06
2025-12-24T15:24:15.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:24:15.737 [DEBUG] [Thread-304457] [transport.py] [_log()] starting thread (client mode): 0xf574f250
2025-12-24T15:24:15.737 [DEBUG] [Thread-304457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:24:15.749 [DEBUG] [Thread-304457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:24:15.749 [INFO] [Thread-304457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] client lang: <none>
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] server lang: <none>
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] kex follows: False
2025-12-24T15:24:15.754 [DEBUG] [Thread-304457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:24:15.755 [DEBUG] [Thread-304457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:24:15.755 [DEBUG] [Thread-304457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:24:15.755 [DEBUG] [Thread-304457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:24:15.755 [DEBUG] [Thread-304457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:24:15.755 [DEBUG] [Thread-304457] [transport.py] [_log()] Compression: none
2025-12-24T15:24:15.755 [DEBUG] [Thread-304457] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:24:15.794 [DEBUG] [Thread-304457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:24:15.799 [DEBUG] [Thread-304457] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:24:15.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:24:15.802 [DEBUG] [Thread-304457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:24:15.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:24:15.807 [DEBUG] [Thread-304457] [transport.py] [_log()] userauth is OK
2025-12-24T15:24:15.807 [DEBUG] [Thread-304457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:24:15.807 [DEBUG] [Thread-304457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:24:15.807 [DEBUG] [Thread-304457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:24:15.807 [DEBUG] [Thread-304457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:24:15.840 [INFO] [Thread-304457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:24:15.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:24:16.511 [DEBUG] [Thread-304457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:24:16.511 [DEBUG] [Thread-304457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:24:16.512 [DEBUG] [Thread-304457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:24:16.553 [DEBUG] [Thread-304457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:24:16.553 [DEBUG] [Thread-304457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:24:16.556 [DEBUG] [Thread-304457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:24:16.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:24:16.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:24:16.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:24:16.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:24:16.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:24:16.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:24:16.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:24:16.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:24:16.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:24:16.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.558401 -999.00  +23.50   8.36     32   +6.00 1 2 1 1 1   888    0 18.88 38.22 ----- 8.4 8.4 139.4 13.1 28.8 -16.0 28.6 -15.8 29.1 -14.5 29.4 -14.5
2025-12-24T15:24:16.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:24:16.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:24:16.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.558401
2025-12-24T15:24:16.595 [DEBUG] [Thread-304457] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:24:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:24:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:24:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:24:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:24:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:24:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:24:06', tmtdew=20.36, humidity=26.36, cloud=0.0, wind=11.59, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:24:05.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:24:16.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:24:16.709 [DEBUG] [Thread-304460] [transport.py] [_log()] starting thread (client mode): 0xf5752d70
2025-12-24T15:24:16.709 [DEBUG] [Thread-304460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:24:16.724 [DEBUG] [Thread-304460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:24:16.724 [INFO] [Thread-304460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] client lang: <none>
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] server lang: <none>
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] kex follows: False
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:24:16.732 [DEBUG] [Thread-304460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:24:16.733 [DEBUG] [Thread-304460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:24:16.733 [DEBUG] [Thread-304460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:24:16.733 [DEBUG] [Thread-304460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:24:16.733 [DEBUG] [Thread-304460] [transport.py] [_log()] Compression: none
2025-12-24T15:24:16.733 [DEBUG] [Thread-304460] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:24:16.790 [DEBUG] [Thread-304460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:24:16.790 [DEBUG] [Thread-304460] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:24:16.791 [DEBUG] [Thread-304460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:24:16.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:24:16.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:24:16.847 [DEBUG] [Thread-304460] [transport.py] [_log()] userauth is OK
2025-12-24T15:24:16.847 [DEBUG] [Thread-304460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:24:16.848 [DEBUG] [Thread-304460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:24:16.848 [DEBUG] [Thread-304460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:24:16.848 [DEBUG] [Thread-304460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:24:16.866 [INFO] [Thread-304460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:24:16.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:24:16.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:24:17.750 [DEBUG] [Thread-304460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:24:17.750 [DEBUG] [Thread-304460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:24:17.798 [DEBUG] [Thread-304460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:24:17.798 [DEBUG] [Thread-304460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:24:17.807 [DEBUG] [Thread-304460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:24:17.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:24:17.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:24:17.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:24:17.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:24:17.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:24:17.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:24:17.841 [DEBUG] [Thread-304460] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:24:20.879 [DEBUG] [Thread-304462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:24:23.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:24:23.515 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:24:36.066 [DEBUG] [Thread-304463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:24:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:24:47.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:24:47.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:24:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 24, 39), 20.1, 26.96, 0.0, 13.92, 23.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:24:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:24:39
2025-12-24T15:24:49.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:24:49.528 [DEBUG] [Thread-304464] [transport.py] [_log()] starting thread (client mode): 0xf572e4d0
2025-12-24T15:24:49.529 [DEBUG] [Thread-304464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:24:49.537 [DEBUG] [Thread-304464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:24:49.537 [INFO] [Thread-304464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:24:49.544 [DEBUG] [Thread-304464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:24:49.545 [DEBUG] [Thread-304464] [transport.py] [_log()] client lang: <none>
2025-12-24T15:24:49.546 [DEBUG] [Thread-304464] [transport.py] [_log()] server lang: <none>
2025-12-24T15:24:49.546 [DEBUG] [Thread-304464] [transport.py] [_log()] kex follows: False
2025-12-24T15:24:49.546 [DEBUG] [Thread-304464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:24:49.547 [DEBUG] [Thread-304464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:24:49.547 [DEBUG] [Thread-304464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:24:49.547 [DEBUG] [Thread-304464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:24:49.547 [DEBUG] [Thread-304464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:24:49.548 [DEBUG] [Thread-304464] [transport.py] [_log()] Compression: none
2025-12-24T15:24:49.548 [DEBUG] [Thread-304464] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:24:49.589 [DEBUG] [Thread-304464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:24:49.594 [DEBUG] [Thread-304464] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:24:49.596 [DEBUG] [Thread-304464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:24:49.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:24:49.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:24:49.603 [DEBUG] [Thread-304464] [transport.py] [_log()] userauth is OK
2025-12-24T15:24:49.603 [DEBUG] [Thread-304464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:24:49.603 [DEBUG] [Thread-304464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:24:49.604 [DEBUG] [Thread-304464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:24:49.604 [DEBUG] [Thread-304464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:24:49.634 [INFO] [Thread-304464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:24:49.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:24:50.283 [DEBUG] [Thread-304464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:24:50.284 [DEBUG] [Thread-304464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:24:50.285 [DEBUG] [Thread-304464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:24:50.324 [DEBUG] [Thread-304464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:24:50.324 [DEBUG] [Thread-304464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:24:50.327 [DEBUG] [Thread-304464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:24:50.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:24:50.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:24:50.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:24:50.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:24:50.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:24:50.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:24:50.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:24:50.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:24:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:24:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.558748 -999.00  +23.60  10.68     32   +6.00 1 2 1 1 1   888    0 18.23 33.80 ----- 10.7 10.7 165.8 13.2 28.9 -15.9 28.7 -17.0 29.1 -14.9 29.5 -15.0
2025-12-24T15:24:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:24:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:24:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.558748
2025-12-24T15:24:50.353 [DEBUG] [Thread-304464] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:24:50.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:24:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:24:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:24:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:24:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:24:50.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:24:39', tmtdew=20.1, humidity=26.96, cloud=0.0, wind=13.92, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:24:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:24:50.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:24:50.465 [DEBUG] [Thread-304467] [transport.py] [_log()] starting thread (client mode): 0xf818a4a0
2025-12-24T15:24:50.466 [DEBUG] [Thread-304467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:24:50.481 [DEBUG] [Thread-304467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:24:50.481 [INFO] [Thread-304467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:24:50.488 [DEBUG] [Thread-304467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] client lang: <none>
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] server lang: <none>
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] kex follows: False
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] Compression: none
2025-12-24T15:24:50.489 [DEBUG] [Thread-304467] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:24:50.547 [DEBUG] [Thread-304467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:24:50.548 [DEBUG] [Thread-304467] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:24:50.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:24:50.549 [DEBUG] [Thread-304467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:24:50.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:24:50.604 [DEBUG] [Thread-304467] [transport.py] [_log()] userauth is OK
2025-12-24T15:24:50.604 [DEBUG] [Thread-304467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:24:50.605 [DEBUG] [Thread-304467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:24:50.605 [DEBUG] [Thread-304467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:24:50.605 [DEBUG] [Thread-304467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:24:50.624 [INFO] [Thread-304467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:24:50.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:24:50.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:24:51.171 [DEBUG] [Thread-304469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:24:51.497 [DEBUG] [Thread-304467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:24:51.498 [DEBUG] [Thread-304467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:24:51.545 [DEBUG] [Thread-304467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:24:51.545 [DEBUG] [Thread-304467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:24:51.554 [DEBUG] [Thread-304467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:24:51.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:24:51.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:24:51.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:24:51.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:24:51.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:24:51.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:24:51.592 [DEBUG] [Thread-304467] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:24:56.568 [DEBUG] [Thread-304470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:25:06.305 [DEBUG] [Thread-304471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:25:21.453 [DEBUG] [Thread-304472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:25:21.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:25:21.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:25:21.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:25:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 25, 12), 20.34, 26.58, 0.0, 16.85, 23.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:25:22.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:25:12
2025-12-24T15:25:22.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:25:22.934 [DEBUG] [Thread-304473] [transport.py] [_log()] starting thread (client mode): 0xf5773df0
2025-12-24T15:25:22.935 [DEBUG] [Thread-304473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:25:22.936 [DEBUG] [Thread-304473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:25:22.936 [INFO] [Thread-304473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:25:22.939 [DEBUG] [Thread-304473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] client lang: <none>
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] server lang: <none>
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] kex follows: False
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] Compression: none
2025-12-24T15:25:22.940 [DEBUG] [Thread-304473] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:25:22.973 [DEBUG] [Thread-304473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:25:22.976 [DEBUG] [Thread-304473] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:25:22.977 [DEBUG] [Thread-304473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:25:22.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:25:22.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:25:22.982 [DEBUG] [Thread-304473] [transport.py] [_log()] userauth is OK
2025-12-24T15:25:22.982 [DEBUG] [Thread-304473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:25:22.982 [DEBUG] [Thread-304473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:25:22.982 [DEBUG] [Thread-304473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:25:22.982 [DEBUG] [Thread-304473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:25:23.000 [INFO] [Thread-304473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:25:23.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:25:23.657 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:25:23.659 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:25:23.673 [DEBUG] [Thread-304473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:25:23.673 [DEBUG] [Thread-304473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:25:23.675 [DEBUG] [Thread-304473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:25:23.714 [DEBUG] [Thread-304473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:25:23.714 [DEBUG] [Thread-304473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:25:23.717 [DEBUG] [Thread-304473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:25:23.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:25:23.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:25:23.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:25:23.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:25:23.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:25:23.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:25:23.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:25:23.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:25:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:25:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.559095 -999.00  +23.80  11.89     31   +6.00 1 2 1 1 1   888    0 18.45 30.50 ----- 11.9 11.9 178.6 15.8 28.9 -16.1 28.6 -17.0 29.1 -14.9 29.4 -15.2
2025-12-24T15:25:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:25:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:25:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.559095
2025-12-24T15:25:23.751 [DEBUG] [Thread-304473] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:25:23.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:25:23.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:25:23.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:25:23.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:25:23.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:25:23.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:25:12', tmtdew=20.34, humidity=26.58, cloud=0.0, wind=16.85, temperature=23.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:25:05.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:25:23.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:25:23.861 [DEBUG] [Thread-304476] [transport.py] [_log()] starting thread (client mode): 0xf574d7e0
2025-12-24T15:25:23.861 [DEBUG] [Thread-304476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:25:23.875 [DEBUG] [Thread-304476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:25:23.875 [INFO] [Thread-304476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:25:23.882 [DEBUG] [Thread-304476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] client lang: <none>
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] server lang: <none>
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] kex follows: False
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:25:23.883 [DEBUG] [Thread-304476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:25:23.884 [DEBUG] [Thread-304476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:25:23.884 [DEBUG] [Thread-304476] [transport.py] [_log()] Compression: none
2025-12-24T15:25:23.884 [DEBUG] [Thread-304476] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:25:23.939 [DEBUG] [Thread-304476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:25:23.940 [DEBUG] [Thread-304476] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:25:23.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:25:23.940 [DEBUG] [Thread-304476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:25:23.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:25:23.999 [DEBUG] [Thread-304476] [transport.py] [_log()] userauth is OK
2025-12-24T15:25:23.999 [DEBUG] [Thread-304476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:25:23.999 [DEBUG] [Thread-304476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:25:24.000 [DEBUG] [Thread-304476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:25:24.000 [DEBUG] [Thread-304476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:25:24.018 [INFO] [Thread-304476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:25:24.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:25:24.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:25:24.853 [DEBUG] [Thread-304476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:25:24.853 [DEBUG] [Thread-304476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:25:24.901 [DEBUG] [Thread-304476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:25:24.901 [DEBUG] [Thread-304476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:25:24.909 [DEBUG] [Thread-304476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:25:24.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:25:24.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:25:24.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:25:24.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:25:24.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:25:24.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:25:24.943 [DEBUG] [Thread-304476] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:25:36.541 [DEBUG] [Thread-304478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:25:51.645 [DEBUG] [Thread-304479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:25:54.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:25:54.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:25:54.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:25:55.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 25, 46), 20.67, 25.83, 0.0, 18.81, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:25:55.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:25:46
2025-12-24T15:25:56.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:25:56.235 [DEBUG] [Thread-304480] [transport.py] [_log()] starting thread (client mode): 0xf8188070
2025-12-24T15:25:56.236 [DEBUG] [Thread-304480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:25:56.248 [DEBUG] [Thread-304480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:25:56.248 [INFO] [Thread-304480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:25:56.254 [DEBUG] [Thread-304480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:25:56.255 [DEBUG] [Thread-304480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:25:56.255 [DEBUG] [Thread-304480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:25:56.255 [DEBUG] [Thread-304480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:25:56.255 [DEBUG] [Thread-304480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:25:56.255 [DEBUG] [Thread-304480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:25:56.255 [DEBUG] [Thread-304480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:25:56.255 [DEBUG] [Thread-304480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:25:56.255 [DEBUG] [Thread-304480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:25:56.256 [DEBUG] [Thread-304480] [transport.py] [_log()] client lang: <none>
2025-12-24T15:25:56.256 [DEBUG] [Thread-304480] [transport.py] [_log()] server lang: <none>
2025-12-24T15:25:56.256 [DEBUG] [Thread-304480] [transport.py] [_log()] kex follows: False
2025-12-24T15:25:56.256 [DEBUG] [Thread-304480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:25:56.257 [DEBUG] [Thread-304480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:25:56.257 [DEBUG] [Thread-304480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:25:56.257 [DEBUG] [Thread-304480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:25:56.257 [DEBUG] [Thread-304480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:25:56.258 [DEBUG] [Thread-304480] [transport.py] [_log()] Compression: none
2025-12-24T15:25:56.258 [DEBUG] [Thread-304480] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:25:56.299 [DEBUG] [Thread-304480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:25:56.302 [DEBUG] [Thread-304480] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:25:56.304 [DEBUG] [Thread-304480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:25:56.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:25:56.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:25:56.310 [DEBUG] [Thread-304480] [transport.py] [_log()] userauth is OK
2025-12-24T15:25:56.310 [DEBUG] [Thread-304480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:25:56.311 [DEBUG] [Thread-304480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:25:56.311 [DEBUG] [Thread-304480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:25:56.311 [DEBUG] [Thread-304480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:25:56.350 [INFO] [Thread-304480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:25:56.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:25:56.883 [DEBUG] [Thread-304482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:25:56.999 [DEBUG] [Thread-304480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:25:57.002 [DEBUG] [Thread-304480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:25:57.004 [DEBUG] [Thread-304480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:25:57.041 [DEBUG] [Thread-304480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:25:57.041 [DEBUG] [Thread-304480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:25:57.045 [DEBUG] [Thread-304480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:25:57.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:25:57.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:25:57.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:25:57.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:25:57.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:25:57.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:25:57.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:25:57.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:25:57.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:25:57.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.559443 -999.00  +23.70  14.91     31   +5.90 1 2 1 1 1   888    0 18.55 26.85 ----- 14.9 14.9 167.2 19.1 28.9 -16.9 28.6 -15.8 29.0 -14.6 29.4 -15.3
2025-12-24T15:25:57.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:25:57.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:25:57.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.559443
2025-12-24T15:25:57.073 [DEBUG] [Thread-304480] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:25:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:25:57.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:25:57.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:25:57.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:25:57.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:25:57.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:25:46', tmtdew=20.67, humidity=25.83, cloud=0.0, wind=18.81, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:25:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:25:57.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:25:57.173 [DEBUG] [Thread-304484] [transport.py] [_log()] starting thread (client mode): 0xf81c2cb0
2025-12-24T15:25:57.173 [DEBUG] [Thread-304484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:25:57.188 [DEBUG] [Thread-304484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:25:57.188 [INFO] [Thread-304484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:25:57.196 [DEBUG] [Thread-304484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] client lang: <none>
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] server lang: <none>
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] kex follows: False
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] Compression: none
2025-12-24T15:25:57.197 [DEBUG] [Thread-304484] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:25:57.255 [DEBUG] [Thread-304484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:25:57.256 [DEBUG] [Thread-304484] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:25:57.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:25:57.256 [DEBUG] [Thread-304484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:25:57.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:25:57.311 [DEBUG] [Thread-304484] [transport.py] [_log()] userauth is OK
2025-12-24T15:25:57.312 [DEBUG] [Thread-304484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:25:57.312 [DEBUG] [Thread-304484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:25:57.312 [DEBUG] [Thread-304484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:25:57.312 [DEBUG] [Thread-304484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:25:57.331 [INFO] [Thread-304484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:25:57.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:25:57.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:25:58.220 [DEBUG] [Thread-304484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:25:58.221 [DEBUG] [Thread-304484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:25:58.268 [DEBUG] [Thread-304484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:25:58.269 [DEBUG] [Thread-304484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:25:58.277 [DEBUG] [Thread-304484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:25:58.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:25:58.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:25:58.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:25:58.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:25:58.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:25:58.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:25:58.314 [DEBUG] [Thread-304484] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:26:06.710 [DEBUG] [Thread-304486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:26:21.876 [DEBUG] [Thread-304487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:26:23.803 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:26:23.804 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:26:28.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:26:28.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:26:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:26:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 26, 19), 20.81, 25.62, 0.0, 16.85, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:26:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:26:19
2025-12-24T15:26:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:26:30.112 [DEBUG] [Thread-304488] [transport.py] [_log()] starting thread (client mode): 0xf57536a0
2025-12-24T15:26:30.113 [DEBUG] [Thread-304488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:26:30.120 [DEBUG] [Thread-304488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:26:30.120 [INFO] [Thread-304488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:26:30.124 [DEBUG] [Thread-304488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] client lang: <none>
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] server lang: <none>
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] kex follows: False
2025-12-24T15:26:30.125 [DEBUG] [Thread-304488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:26:30.126 [DEBUG] [Thread-304488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:26:30.126 [DEBUG] [Thread-304488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:26:30.126 [DEBUG] [Thread-304488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:26:30.126 [DEBUG] [Thread-304488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:26:30.126 [DEBUG] [Thread-304488] [transport.py] [_log()] Compression: none
2025-12-24T15:26:30.126 [DEBUG] [Thread-304488] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:26:30.161 [DEBUG] [Thread-304488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:26:30.165 [DEBUG] [Thread-304488] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:26:30.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:26:30.168 [DEBUG] [Thread-304488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:26:30.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:26:30.169 [DEBUG] [Thread-304488] [transport.py] [_log()] userauth is OK
2025-12-24T15:26:30.169 [DEBUG] [Thread-304488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:26:30.170 [DEBUG] [Thread-304488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:26:30.170 [DEBUG] [Thread-304488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:26:30.170 [DEBUG] [Thread-304488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:26:30.188 [INFO] [Thread-304488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:26:30.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:26:30.853 [DEBUG] [Thread-304488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:26:30.853 [DEBUG] [Thread-304488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:26:30.854 [DEBUG] [Thread-304488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:26:30.894 [DEBUG] [Thread-304488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:26:30.894 [DEBUG] [Thread-304488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:26:30.896 [DEBUG] [Thread-304488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:26:30.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:26:30.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:26:30.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:26:30.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:26:30.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:26:30.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:26:30.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:26:30.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:26:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:26:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.559790 -999.00  +23.80  18.94     31   +6.00 1 2 1 1 1   888    0 18.13 24.46 ----- 18.9 18.9 138.4 23.8 28.9 -16.8 28.6 -17.0 29.0 -15.3 29.5 -16.3
2025-12-24T15:26:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:26:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:26:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.559790
2025-12-24T15:26:30.932 [DEBUG] [Thread-304488] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:26:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:26:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:26:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:26:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:26:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:26:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:26:19', tmtdew=20.81, humidity=25.62, cloud=0.0, wind=16.85, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:26:05.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:26:31.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:26:31.027 [DEBUG] [Thread-304491] [transport.py] [_log()] starting thread (client mode): 0xf818b9a0
2025-12-24T15:26:31.027 [DEBUG] [Thread-304491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:26:31.041 [DEBUG] [Thread-304491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:26:31.041 [INFO] [Thread-304491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] client lang: <none>
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] server lang: <none>
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] kex follows: False
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] Compression: none
2025-12-24T15:26:31.049 [DEBUG] [Thread-304491] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:26:31.105 [DEBUG] [Thread-304491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:26:31.106 [DEBUG] [Thread-304491] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:26:31.106 [DEBUG] [Thread-304491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:26:31.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:26:31.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:26:31.163 [DEBUG] [Thread-304491] [transport.py] [_log()] userauth is OK
2025-12-24T15:26:31.163 [DEBUG] [Thread-304491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:26:31.163 [DEBUG] [Thread-304491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:26:31.163 [DEBUG] [Thread-304491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:26:31.163 [DEBUG] [Thread-304491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:26:31.176 [INFO] [Thread-304491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:26:31.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:26:31.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:26:32.056 [DEBUG] [Thread-304491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:26:32.056 [DEBUG] [Thread-304491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:26:32.103 [DEBUG] [Thread-304491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:26:32.103 [DEBUG] [Thread-304491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:26:32.112 [DEBUG] [Thread-304491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:26:32.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:26:32.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:26:32.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:26:32.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:26:32.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:26:32.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:26:32.145 [DEBUG] [Thread-304491] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:26:36.975 [DEBUG] [Thread-304493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:26:52.174 [DEBUG] [Thread-304494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:26:57.265 [DEBUG] [Thread-304495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:27:02.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:27:02.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:27: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
2025-12-24T15:27:03.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 26, 52), 21.23, 24.85, 0.0, 24.4, 24.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:27:03.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:26:52
2025-12-24T15:27:03.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:27:03.694 [DEBUG] [Thread-304496] [transport.py] [_log()] starting thread (client mode): 0xf81e4d00
2025-12-24T15:27:03.694 [DEBUG] [Thread-304496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:27:03.707 [DEBUG] [Thread-304496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:27:03.707 [INFO] [Thread-304496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:27:03.711 [DEBUG] [Thread-304496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] client lang: <none>
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] server lang: <none>
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] kex follows: False
2025-12-24T15:27:03.712 [DEBUG] [Thread-304496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:27:03.713 [DEBUG] [Thread-304496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:27:03.713 [DEBUG] [Thread-304496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:27:03.713 [DEBUG] [Thread-304496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:27:03.713 [DEBUG] [Thread-304496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:27:03.713 [DEBUG] [Thread-304496] [transport.py] [_log()] Compression: none
2025-12-24T15:27:03.713 [DEBUG] [Thread-304496] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:27:03.746 [DEBUG] [Thread-304496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:27:03.749 [DEBUG] [Thread-304496] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:27:03.750 [DEBUG] [Thread-304496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:27:03.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:27:03.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:27:03.754 [DEBUG] [Thread-304496] [transport.py] [_log()] userauth is OK
2025-12-24T15:27:03.754 [DEBUG] [Thread-304496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:27:03.754 [DEBUG] [Thread-304496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:27:03.754 [DEBUG] [Thread-304496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:27:03.754 [DEBUG] [Thread-304496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:27:03.772 [INFO] [Thread-304496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:27:03.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:27:04.444 [DEBUG] [Thread-304496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:27:04.445 [DEBUG] [Thread-304496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:27:04.446 [DEBUG] [Thread-304496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:27:04.486 [DEBUG] [Thread-304496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:27:04.487 [DEBUG] [Thread-304496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:27:04.491 [DEBUG] [Thread-304496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:27:04.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:27:04.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:27:04.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:27:04.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:27:04.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:27:04.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:27:04.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:27:04.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:27:04.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:27:04.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.560137 -999.00  +23.90  19.43     31   +5.90 1 2 1 1 1   888    0 18.27 23.13 ----- 19.4 19.4 123.6 24.1 28.8 -16.4 28.7 -16.4 29.0 -15.5 29.3 -16.3
2025-12-24T15:27:04.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:27:04.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:27:04.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.560137
2025-12-24T15:27:04.528 [DEBUG] [Thread-304496] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:27:04.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:27:04.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:27:04.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:27:04.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:27:04.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:27:04.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:26:52', tmtdew=21.23, humidity=24.85, cloud=0.0, wind=24.4, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:26:35.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:27:04.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:27:04.653 [DEBUG] [Thread-304499] [transport.py] [_log()] starting thread (client mode): 0xf5771990
2025-12-24T15:27:04.654 [DEBUG] [Thread-304499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:27:04.668 [DEBUG] [Thread-304499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:27:04.669 [INFO] [Thread-304499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:27:04.676 [DEBUG] [Thread-304499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:27:04.676 [DEBUG] [Thread-304499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:27:04.677 [DEBUG] [Thread-304499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:27:04.677 [DEBUG] [Thread-304499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:27:04.677 [DEBUG] [Thread-304499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:27:04.677 [DEBUG] [Thread-304499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:27:04.677 [DEBUG] [Thread-304499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:27:04.677 [DEBUG] [Thread-304499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:27:04.677 [DEBUG] [Thread-304499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] client lang: <none>
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] server lang: <none>
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] kex follows: False
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] Compression: none
2025-12-24T15:27:04.678 [DEBUG] [Thread-304499] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:27:04.739 [DEBUG] [Thread-304499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:27:04.740 [DEBUG] [Thread-304499] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:27:04.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:27:04.741 [DEBUG] [Thread-304499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:27:04.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:27:04.800 [DEBUG] [Thread-304499] [transport.py] [_log()] userauth is OK
2025-12-24T15:27:04.800 [DEBUG] [Thread-304499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:27:04.800 [DEBUG] [Thread-304499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:27:04.800 [DEBUG] [Thread-304499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:27:04.800 [DEBUG] [Thread-304499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:27:04.819 [INFO] [Thread-304499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:27:04.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:27:04.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:27:05.692 [DEBUG] [Thread-304499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:27:05.692 [DEBUG] [Thread-304499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:27:05.731 [DEBUG] [Thread-304499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:27:05.731 [DEBUG] [Thread-304499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:27:05.740 [DEBUG] [Thread-304499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:27:05.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:27:05.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:27:05.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:27:05.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:27:05.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:27:05.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:27:05.778 [DEBUG] [Thread-304499] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:27:07.288 [DEBUG] [Thread-304501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:27:22.463 [DEBUG] [Thread-304502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:27:23.948 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:27:23.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:27:35.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:27:35.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:27:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:27:36.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 27, 25), 21.1, 25.03, 0.0, 23.24, 24.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:27:36.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:27:25
2025-12-24T15:27:36.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:27:37.083 [DEBUG] [Thread-304503] [transport.py] [_log()] starting thread (client mode): 0xf818be20
2025-12-24T15:27:37.084 [DEBUG] [Thread-304503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:27:37.093 [DEBUG] [Thread-304503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:27:37.093 [INFO] [Thread-304503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:27:37.099 [DEBUG] [Thread-304503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:27:37.099 [DEBUG] [Thread-304503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] client lang: <none>
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] server lang: <none>
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] kex follows: False
2025-12-24T15:27:37.100 [DEBUG] [Thread-304503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:27:37.101 [DEBUG] [Thread-304503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:27:37.101 [DEBUG] [Thread-304503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:27:37.101 [DEBUG] [Thread-304503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:27:37.102 [DEBUG] [Thread-304503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:27:37.102 [DEBUG] [Thread-304503] [transport.py] [_log()] Compression: none
2025-12-24T15:27:37.102 [DEBUG] [Thread-304503] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:27:37.143 [DEBUG] [Thread-304503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:27:37.148 [DEBUG] [Thread-304503] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:27:37.150 [DEBUG] [Thread-304503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:27:37.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:27:37.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:27:37.155 [DEBUG] [Thread-304503] [transport.py] [_log()] userauth is OK
2025-12-24T15:27:37.156 [DEBUG] [Thread-304503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:27:37.156 [DEBUG] [Thread-304503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:27:37.156 [DEBUG] [Thread-304503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:27:37.156 [DEBUG] [Thread-304503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:27:37.183 [INFO] [Thread-304503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:27:37.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:27:37.573 [DEBUG] [Thread-304505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:27:37.829 [DEBUG] [Thread-304503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:27:37.829 [DEBUG] [Thread-304503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:27:37.839 [DEBUG] [Thread-304503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:27:37.870 [DEBUG] [Thread-304503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:27:37.871 [DEBUG] [Thread-304503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:27:37.874 [DEBUG] [Thread-304503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:27:37.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:27:37.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:27:37.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:27:37.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:27:37.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:27:37.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:27:37.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:27:37.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:27:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:27:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.560485 -999.00  +23.90  18.28     31   +5.90 1 2 1 1 1   888    0 18.00 22.03 ----- 18.3 18.3 124.2 23.8 28.8 -16.3 28.7 -15.8 29.0 -14.2 29.3 -16.2
2025-12-24T15:27:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:27:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:27:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.560485
2025-12-24T15:27:37.909 [DEBUG] [Thread-304503] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:27:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:27:37.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:27:37.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:27:37.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:27:37.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:27:37.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:27:25', tmtdew=21.1, humidity=25.03, cloud=0.0, wind=23.24, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:27:05.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:27:37.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:27:38.008 [DEBUG] [Thread-304507] [transport.py] [_log()] starting thread (client mode): 0xf81e67d0
2025-12-24T15:27:38.008 [DEBUG] [Thread-304507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:27:38.022 [DEBUG] [Thread-304507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:27:38.022 [INFO] [Thread-304507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:27:38.030 [DEBUG] [Thread-304507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:27:38.030 [DEBUG] [Thread-304507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:27:38.030 [DEBUG] [Thread-304507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:27:38.030 [DEBUG] [Thread-304507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:27:38.030 [DEBUG] [Thread-304507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] client lang: <none>
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] server lang: <none>
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] kex follows: False
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] Compression: none
2025-12-24T15:27:38.031 [DEBUG] [Thread-304507] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:27:38.087 [DEBUG] [Thread-304507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:27:38.087 [DEBUG] [Thread-304507] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:27:38.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:27:38.088 [DEBUG] [Thread-304507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:27:38.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:27:38.143 [DEBUG] [Thread-304507] [transport.py] [_log()] userauth is OK
2025-12-24T15:27:38.143 [DEBUG] [Thread-304507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:27:38.143 [DEBUG] [Thread-304507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:27:38.144 [DEBUG] [Thread-304507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:27:38.144 [DEBUG] [Thread-304507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:27:38.166 [INFO] [Thread-304507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:27:38.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:27:38.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:27:39.027 [DEBUG] [Thread-304507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:27:39.027 [DEBUG] [Thread-304507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:27:39.066 [DEBUG] [Thread-304507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:27:39.066 [DEBUG] [Thread-304507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:27:39.074 [DEBUG] [Thread-304507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:27:39.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:27:39.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:27:39.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:27:39.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:27:39.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:27:39.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:27:39.108 [DEBUG] [Thread-304507] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:27:52.626 [DEBUG] [Thread-304509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:27:57.531 [DEBUG] [Thread-304510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:28:07.766 [DEBUG] [Thread-304511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:28:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:28:09.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:28:09.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:28:10.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 27, 59), 21.04, 25.36, 0.0, 27.75, 24.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:28:10.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:27:59
2025-12-24T15:28:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:28:10.617 [DEBUG] [Thread-304512] [transport.py] [_log()] starting thread (client mode): 0xf81e58d0
2025-12-24T15:28:10.617 [DEBUG] [Thread-304512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:28:10.633 [DEBUG] [Thread-304512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:28:10.634 [INFO] [Thread-304512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:28:10.638 [DEBUG] [Thread-304512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:28:10.638 [DEBUG] [Thread-304512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:28:10.638 [DEBUG] [Thread-304512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:28:10.638 [DEBUG] [Thread-304512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] client lang: <none>
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] server lang: <none>
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] kex follows: False
2025-12-24T15:28:10.639 [DEBUG] [Thread-304512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:28:10.640 [DEBUG] [Thread-304512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:28:10.640 [DEBUG] [Thread-304512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:28:10.640 [DEBUG] [Thread-304512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:28:10.640 [DEBUG] [Thread-304512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:28:10.640 [DEBUG] [Thread-304512] [transport.py] [_log()] Compression: none
2025-12-24T15:28:10.640 [DEBUG] [Thread-304512] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:28:10.668 [DEBUG] [Thread-304512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:28:10.671 [DEBUG] [Thread-304512] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:28:10.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:28:10.674 [DEBUG] [Thread-304512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:28:10.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:28:10.677 [DEBUG] [Thread-304512] [transport.py] [_log()] userauth is OK
2025-12-24T15:28:10.677 [DEBUG] [Thread-304512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:28:10.677 [DEBUG] [Thread-304512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:28:10.678 [DEBUG] [Thread-304512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:28:10.678 [DEBUG] [Thread-304512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:28:10.698 [INFO] [Thread-304512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:28:10.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:28:11.344 [DEBUG] [Thread-304512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:28:11.344 [DEBUG] [Thread-304512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:28:11.353 [DEBUG] [Thread-304512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:28:11.385 [DEBUG] [Thread-304512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:28:11.385 [DEBUG] [Thread-304512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:28:11.387 [DEBUG] [Thread-304512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:28:11.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:28:11.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:28:11.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:28:11.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:28:11.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:28:11.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:28:11.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:28:11.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:28:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:28:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.560832 -999.00  +23.80   9.30     31   +6.00 1 2 1 1 1   888    0 18.46 19.99 ----- 9.3 9.3 135.8 20.1 29.1 -13.8 29.2 -13.3 29.6 -11.3 29.7 -11.6
2025-12-24T15:28:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:28:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:28:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.560832
2025-12-24T15:28:11.424 [DEBUG] [Thread-304512] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:28:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:28:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:28:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:28:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:28:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:28:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:27:59', tmtdew=21.04, humidity=25.36, cloud=0.0, wind=27.75, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:27:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:28:11.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:28:11.520 [DEBUG] [Thread-304515] [transport.py] [_log()] starting thread (client mode): 0xf81f33d0
2025-12-24T15:28:11.520 [DEBUG] [Thread-304515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:28:11.536 [DEBUG] [Thread-304515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:28:11.536 [INFO] [Thread-304515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] client lang: <none>
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] server lang: <none>
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] kex follows: False
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:28:11.543 [DEBUG] [Thread-304515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:28:11.544 [DEBUG] [Thread-304515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:28:11.544 [DEBUG] [Thread-304515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:28:11.544 [DEBUG] [Thread-304515] [transport.py] [_log()] Compression: none
2025-12-24T15:28:11.544 [DEBUG] [Thread-304515] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:28:11.604 [DEBUG] [Thread-304515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:28:11.604 [DEBUG] [Thread-304515] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:28:11.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:28:11.605 [DEBUG] [Thread-304515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:28:11.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:28:11.659 [DEBUG] [Thread-304515] [transport.py] [_log()] userauth is OK
2025-12-24T15:28:11.660 [DEBUG] [Thread-304515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:28:11.660 [DEBUG] [Thread-304515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:28:11.660 [DEBUG] [Thread-304515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:28:11.660 [DEBUG] [Thread-304515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:28:11.678 [INFO] [Thread-304515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:28:11.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:28:11.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:28:12.513 [DEBUG] [Thread-304515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:28:12.513 [DEBUG] [Thread-304515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:28:12.564 [DEBUG] [Thread-304515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:28:12.564 [DEBUG] [Thread-304515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:28:12.573 [DEBUG] [Thread-304515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:28:12.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:28:12.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:28:12.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:28:12.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:28:12.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:28:12.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:28:12.610 [DEBUG] [Thread-304515] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:28:22.842 [DEBUG] [Thread-304517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:28:24.091 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:28:24.093 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:28:37.980 [DEBUG] [Thread-304518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:28:42.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:28:42.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:28:42.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:28:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 28, 31), 20.91, 25.55, 0.0, 22.32, 23.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:28:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:28:31
2025-12-24T15:28:44.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:28:44.213 [DEBUG] [Thread-304519] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-24T15:28:44.214 [DEBUG] [Thread-304519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:28:44.225 [DEBUG] [Thread-304519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:28:44.225 [INFO] [Thread-304519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:28:44.231 [DEBUG] [Thread-304519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:28:44.231 [DEBUG] [Thread-304519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:28:44.231 [DEBUG] [Thread-304519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] client lang: <none>
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] server lang: <none>
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] kex follows: False
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:28:44.232 [DEBUG] [Thread-304519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:28:44.233 [DEBUG] [Thread-304519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:28:44.233 [DEBUG] [Thread-304519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:28:44.233 [DEBUG] [Thread-304519] [transport.py] [_log()] Compression: none
2025-12-24T15:28:44.233 [DEBUG] [Thread-304519] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:28:44.266 [DEBUG] [Thread-304519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:28:44.269 [DEBUG] [Thread-304519] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:28:44.270 [DEBUG] [Thread-304519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:28:44.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:28:44.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:28:44.274 [DEBUG] [Thread-304519] [transport.py] [_log()] userauth is OK
2025-12-24T15:28:44.274 [DEBUG] [Thread-304519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:28:44.274 [DEBUG] [Thread-304519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:28:44.274 [DEBUG] [Thread-304519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:28:44.274 [DEBUG] [Thread-304519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:28:44.304 [INFO] [Thread-304519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:28:44.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:28:44.946 [DEBUG] [Thread-304519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:28:44.946 [DEBUG] [Thread-304519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:28:44.946 [DEBUG] [Thread-304519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:28:44.986 [DEBUG] [Thread-304519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:28:44.987 [DEBUG] [Thread-304519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:28:44.989 [DEBUG] [Thread-304519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:28:45.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:28:45.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:28:45.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:28:45.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:28:45.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:28:45.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:28:45.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:28:45.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:28:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:28:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.561179 -999.00  +24.10  16.98     31   +5.90 1 2 1 1 1   888    0 18.40 18.24 ----- 17.0 17.0 134.2 20.7 29.3 -16.3 29.1 -17.4 29.6 -16.1 30.0 -13.7
2025-12-24T15:28:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:28:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:28:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.561179
2025-12-24T15:28:45.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:28:45.032 [DEBUG] [Thread-304519] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:28:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:28:45.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:28:45.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:28:45.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:28:45.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:28:31', tmtdew=20.91, humidity=25.55, cloud=0.0, wind=22.32, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:28:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:28:45.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:28:45.121 [DEBUG] [Thread-304522] [transport.py] [_log()] starting thread (client mode): 0xf81f2f80
2025-12-24T15:28:45.121 [DEBUG] [Thread-304522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:28:45.136 [DEBUG] [Thread-304522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:28:45.136 [INFO] [Thread-304522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] client lang: <none>
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] server lang: <none>
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] kex follows: False
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:28:45.143 [DEBUG] [Thread-304522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:28:45.144 [DEBUG] [Thread-304522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:28:45.144 [DEBUG] [Thread-304522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:28:45.144 [DEBUG] [Thread-304522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:28:45.144 [DEBUG] [Thread-304522] [transport.py] [_log()] Compression: none
2025-12-24T15:28:45.144 [DEBUG] [Thread-304522] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:28:45.202 [DEBUG] [Thread-304522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:28:45.202 [DEBUG] [Thread-304522] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:28:45.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:28:45.203 [DEBUG] [Thread-304522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:28:45.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:28:45.259 [DEBUG] [Thread-304522] [transport.py] [_log()] userauth is OK
2025-12-24T15:28:45.259 [DEBUG] [Thread-304522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:28:45.259 [DEBUG] [Thread-304522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:28:45.259 [DEBUG] [Thread-304522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:28:45.259 [DEBUG] [Thread-304522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:28:45.273 [INFO] [Thread-304522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:28:45.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:28:45.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:28:46.125 [DEBUG] [Thread-304522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:28:46.125 [DEBUG] [Thread-304522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:28:46.172 [DEBUG] [Thread-304522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:28:46.172 [DEBUG] [Thread-304522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:28:46.181 [DEBUG] [Thread-304522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:28:46.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:28:46.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:28:46.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:28:46.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:28:46.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:28:46.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:28:46.213 [DEBUG] [Thread-304522] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:28:53.076 [DEBUG] [Thread-304524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:28:57.832 [DEBUG] [Thread-304525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:29:08.265 [DEBUG] [Thread-304526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:29:16.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:29:16.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:29:16.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:29:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 29, 5), 20.82, 25.7, 0.0, 26.29, 23.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:29:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:29:05
2025-12-24T15:29:17.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:29:17.657 [DEBUG] [Thread-304527] [transport.py] [_log()] starting thread (client mode): 0xf5751630
2025-12-24T15:29:17.658 [DEBUG] [Thread-304527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:29:17.667 [DEBUG] [Thread-304527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:29:17.667 [INFO] [Thread-304527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] client lang: <none>
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] server lang: <none>
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] kex follows: False
2025-12-24T15:29:17.673 [DEBUG] [Thread-304527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:29:17.674 [DEBUG] [Thread-304527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:29:17.674 [DEBUG] [Thread-304527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:29:17.674 [DEBUG] [Thread-304527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:29:17.674 [DEBUG] [Thread-304527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:29:17.674 [DEBUG] [Thread-304527] [transport.py] [_log()] Compression: none
2025-12-24T15:29:17.674 [DEBUG] [Thread-304527] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:29:17.708 [DEBUG] [Thread-304527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:29:17.712 [DEBUG] [Thread-304527] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:29:17.714 [DEBUG] [Thread-304527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:29:17.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:29:17.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:29:17.718 [DEBUG] [Thread-304527] [transport.py] [_log()] userauth is OK
2025-12-24T15:29:17.719 [DEBUG] [Thread-304527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:29:17.719 [DEBUG] [Thread-304527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:29:17.719 [DEBUG] [Thread-304527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:29:17.719 [DEBUG] [Thread-304527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:29:17.758 [INFO] [Thread-304527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:29:17.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:29:18.423 [DEBUG] [Thread-304527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:29:18.423 [DEBUG] [Thread-304527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:29:18.425 [DEBUG] [Thread-304527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:29:18.464 [DEBUG] [Thread-304527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:29:18.464 [DEBUG] [Thread-304527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:29:18.468 [DEBUG] [Thread-304527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:29:18.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:29:18.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:29:18.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:29:18.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:29:18.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:29:18.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:29:18.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:29:18.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.561874 -999.00  +24.10  16.76     31   +6.00 1 2 1 1 1   888    0 18.35 12.58 ----- 16.8 16.8 160.8 26.0 29.3 -14.8 29.1 -17.5 29.7 -16.0 30.0 -14.1
2025-12-24T15:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.561874
2025-12-24T15:29:18.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:29:18.512 [DEBUG] [Thread-304527] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:29:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:29:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:29:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:29:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:29:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:29:05', tmtdew=20.82, humidity=25.7, cloud=0.0, wind=26.29, temperature=23.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:29:05.914', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:29:18.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:29:18.603 [DEBUG] [Thread-304530] [transport.py] [_log()] starting thread (client mode): 0xf81f0160
2025-12-24T15:29:18.603 [DEBUG] [Thread-304530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:29:18.617 [DEBUG] [Thread-304530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:29:18.617 [INFO] [Thread-304530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:29:18.624 [DEBUG] [Thread-304530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:29:18.625 [DEBUG] [Thread-304530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:29:18.625 [DEBUG] [Thread-304530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:29:18.625 [DEBUG] [Thread-304530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:29:18.625 [DEBUG] [Thread-304530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:29:18.625 [DEBUG] [Thread-304530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:29:18.625 [DEBUG] [Thread-304530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:29:18.625 [DEBUG] [Thread-304530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:29:18.625 [DEBUG] [Thread-304530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:29:18.626 [DEBUG] [Thread-304530] [transport.py] [_log()] client lang: <none>
2025-12-24T15:29:18.626 [DEBUG] [Thread-304530] [transport.py] [_log()] server lang: <none>
2025-12-24T15:29:18.626 [DEBUG] [Thread-304530] [transport.py] [_log()] kex follows: False
2025-12-24T15:29:18.626 [DEBUG] [Thread-304530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:29:18.626 [DEBUG] [Thread-304530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:29:18.626 [DEBUG] [Thread-304530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:29:18.627 [DEBUG] [Thread-304530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:29:18.627 [DEBUG] [Thread-304530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:29:18.627 [DEBUG] [Thread-304530] [transport.py] [_log()] Compression: none
2025-12-24T15:29:18.627 [DEBUG] [Thread-304530] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:29:18.684 [DEBUG] [Thread-304530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:29:18.684 [DEBUG] [Thread-304530] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:29:18.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:29:18.686 [DEBUG] [Thread-304530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:29:18.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:29:18.743 [DEBUG] [Thread-304530] [transport.py] [_log()] userauth is OK
2025-12-24T15:29:18.744 [DEBUG] [Thread-304530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:29:18.744 [DEBUG] [Thread-304530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:29:18.744 [DEBUG] [Thread-304530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:29:18.744 [DEBUG] [Thread-304530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:29:18.762 [INFO] [Thread-304530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:29:18.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:29:18.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:29:19.595 [DEBUG] [Thread-304530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:29:19.595 [DEBUG] [Thread-304530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:29:19.643 [DEBUG] [Thread-304530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:29:19.643 [DEBUG] [Thread-304530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:29:19.652 [DEBUG] [Thread-304530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:29:19.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:29:19.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:29:19.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:29:19.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:29:19.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:29:19.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:29:19.688 [DEBUG] [Thread-304530] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:29:23.363 [DEBUG] [Thread-304532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:29:24.238 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:29:24.239 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:29:38.496 [DEBUG] [Thread-304533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:29:49.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:29:49.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:29:49.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:29:51.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 29, 38), 20.57, 26.26, 0.0, 22.13, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:29:51.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:29:38
2025-12-24T15:29:51.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:29:51.378 [DEBUG] [Thread-304534] [transport.py] [_log()] starting thread (client mode): 0xf5753a90
2025-12-24T15:29:51.379 [DEBUG] [Thread-304534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:29:51.388 [DEBUG] [Thread-304534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:29:51.388 [INFO] [Thread-304534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] client lang: <none>
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] server lang: <none>
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] kex follows: False
2025-12-24T15:29:51.395 [DEBUG] [Thread-304534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:29:51.396 [DEBUG] [Thread-304534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:29:51.396 [DEBUG] [Thread-304534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:29:51.396 [DEBUG] [Thread-304534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:29:51.396 [DEBUG] [Thread-304534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:29:51.396 [DEBUG] [Thread-304534] [transport.py] [_log()] Compression: none
2025-12-24T15:29:51.396 [DEBUG] [Thread-304534] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:29:51.432 [DEBUG] [Thread-304534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:29:51.437 [DEBUG] [Thread-304534] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:29:51.439 [DEBUG] [Thread-304534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:29:51.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:29:51.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:29:51.444 [DEBUG] [Thread-304534] [transport.py] [_log()] userauth is OK
2025-12-24T15:29:51.444 [DEBUG] [Thread-304534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:29:51.444 [DEBUG] [Thread-304534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:29:51.444 [DEBUG] [Thread-304534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:29:51.444 [DEBUG] [Thread-304534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:29:51.465 [INFO] [Thread-304534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:29:51.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:29:52.092 [DEBUG] [Thread-304534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:29:52.092 [DEBUG] [Thread-304534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:29:52.093 [DEBUG] [Thread-304534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:29:52.134 [DEBUG] [Thread-304534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:29:52.134 [DEBUG] [Thread-304534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:29:52.136 [DEBUG] [Thread-304534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:29:52.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:29:52.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:29:52.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:29:52.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:29:52.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:29:52.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:29:52.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:29:52.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:29:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:29:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.562220 -999.00  +24.30  20.17     31   +6.10 1 2 1 1 1   888    0 18.02 10.85 ----- 20.2 20.2 138.2 22.6 29.1 -17.1 28.9 -17.3 29.5 -16.9 30.0 -16.7
2025-12-24T15:29:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:29:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:29:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.562220
2025-12-24T15:29:52.163 [DEBUG] [Thread-304534] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:29:52.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:29:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:29:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:29:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:29:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:29:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:29:38', tmtdew=20.57, humidity=26.26, cloud=0.0, wind=22.13, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:29:35.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:29:52.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:29:52.262 [DEBUG] [Thread-304537] [transport.py] [_log()] starting thread (client mode): 0xf8189870
2025-12-24T15:29:52.263 [DEBUG] [Thread-304537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:29:52.276 [DEBUG] [Thread-304537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:29:52.276 [INFO] [Thread-304537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:29:52.283 [DEBUG] [Thread-304537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] client lang: <none>
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] server lang: <none>
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] kex follows: False
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] Compression: none
2025-12-24T15:29:52.284 [DEBUG] [Thread-304537] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:29:52.343 [DEBUG] [Thread-304537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:29:52.343 [DEBUG] [Thread-304537] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:29:52.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:29:52.344 [DEBUG] [Thread-304537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:29:52.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:29:52.400 [DEBUG] [Thread-304537] [transport.py] [_log()] userauth is OK
2025-12-24T15:29:52.400 [DEBUG] [Thread-304537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:29:52.400 [DEBUG] [Thread-304537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:29:52.400 [DEBUG] [Thread-304537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:29:52.401 [DEBUG] [Thread-304537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:29:52.419 [INFO] [Thread-304537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:29:52.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:29:52.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:29:53.277 [DEBUG] [Thread-304537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:29:53.277 [DEBUG] [Thread-304537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:29:53.324 [DEBUG] [Thread-304537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:29:53.324 [DEBUG] [Thread-304537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:29:53.333 [DEBUG] [Thread-304537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:29:53.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:29:53.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:29:53.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:29:53.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:29:53.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:29:53.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:29:53.367 [DEBUG] [Thread-304537] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:29:53.603 [DEBUG] [Thread-304539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:29:58.144 [DEBUG] [Thread-304540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:30:08.748 [DEBUG] [Thread-304541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:30:23.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:30:23.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:30:23.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:30:23.929 [DEBUG] [Thread-304542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:30:24.381 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:30:24.382 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:30:25.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 30, 11), 20.64, 26.18, 0.0, 23.64, 23.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:30:25.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:30:11
2025-12-24T15:30:25.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:30:25.375 [DEBUG] [Thread-304543] [transport.py] [_log()] starting thread (client mode): 0xf8188f40
2025-12-24T15:30:25.376 [DEBUG] [Thread-304543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:30:25.388 [DEBUG] [Thread-304543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:30:25.388 [INFO] [Thread-304543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:30:25.394 [DEBUG] [Thread-304543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] client lang: <none>
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] server lang: <none>
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] kex follows: False
2025-12-24T15:30:25.395 [DEBUG] [Thread-304543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:30:25.396 [DEBUG] [Thread-304543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:30:25.396 [DEBUG] [Thread-304543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:30:25.396 [DEBUG] [Thread-304543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:30:25.396 [DEBUG] [Thread-304543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:30:25.397 [DEBUG] [Thread-304543] [transport.py] [_log()] Compression: none
2025-12-24T15:30:25.397 [DEBUG] [Thread-304543] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:30:25.439 [DEBUG] [Thread-304543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:30:25.442 [DEBUG] [Thread-304543] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:30:25.444 [DEBUG] [Thread-304543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:30:25.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:30:25.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:30:25.447 [DEBUG] [Thread-304543] [transport.py] [_log()] userauth is OK
2025-12-24T15:30:25.447 [DEBUG] [Thread-304543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:30:25.447 [DEBUG] [Thread-304543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:30:25.447 [DEBUG] [Thread-304543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:30:25.447 [DEBUG] [Thread-304543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:30:25.480 [INFO] [Thread-304543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:30:25.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:30:26.163 [DEBUG] [Thread-304543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:30:26.163 [DEBUG] [Thread-304543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:30:26.163 [DEBUG] [Thread-304543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:30:26.204 [DEBUG] [Thread-304543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:30:26.204 [DEBUG] [Thread-304543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:30:26.208 [DEBUG] [Thread-304543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:30:26.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:30:26.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:30:26.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:30:26.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:30:26.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:30:26.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:30:26.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:30:26.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:30:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:30:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.562568 -999.00  +24.30  16.19     30   +6.00 1 2 1 1 1   888    0 18.19 11.47 ----- 16.2 16.2 123.6 26.7 29.0 -17.4 29.0 -17.6 29.5 -16.7 29.8 -17.4
2025-12-24T15:30:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:30:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:30:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.562568
2025-12-24T15:30:26.242 [DEBUG] [Thread-304543] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:30:26.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:30:26.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:30:26.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:30:26.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:30:26.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:30:26.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:30:11', tmtdew=20.64, humidity=26.18, cloud=0.0, wind=23.64, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:30:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:30:26.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:30:26.342 [DEBUG] [Thread-304546] [transport.py] [_log()] starting thread (client mode): 0xf81e4940
2025-12-24T15:30:26.342 [DEBUG] [Thread-304546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:30:26.357 [DEBUG] [Thread-304546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:30:26.357 [INFO] [Thread-304546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:30:26.364 [DEBUG] [Thread-304546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:30:26.365 [DEBUG] [Thread-304546] [transport.py] [_log()] client lang: <none>
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] server lang: <none>
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] kex follows: False
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] Compression: none
2025-12-24T15:30:26.366 [DEBUG] [Thread-304546] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:30:26.423 [DEBUG] [Thread-304546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:30:26.424 [DEBUG] [Thread-304546] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:30:26.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:30:26.425 [DEBUG] [Thread-304546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:30:26.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:30:26.479 [DEBUG] [Thread-304546] [transport.py] [_log()] userauth is OK
2025-12-24T15:30:26.479 [DEBUG] [Thread-304546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:30:26.479 [DEBUG] [Thread-304546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:30:26.479 [DEBUG] [Thread-304546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:30:26.479 [DEBUG] [Thread-304546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:30:26.493 [INFO] [Thread-304546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:30:26.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:30:26.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:30:27.319 [DEBUG] [Thread-304546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:30:27.320 [DEBUG] [Thread-304546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:30:27.358 [DEBUG] [Thread-304546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:30:27.358 [DEBUG] [Thread-304546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:30:27.367 [DEBUG] [Thread-304546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:30:27.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:30:27.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:30:27.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:30:27.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:30:27.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:30:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:30:27.401 [DEBUG] [Thread-304546] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:30:38.996 [DEBUG] [Thread-304548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:30:54.155 [DEBUG] [Thread-304549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:30:57.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:30:57.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:30:57.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:30:58.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 30, 44), 20.98, 25.66, 0.0, 18.77, 24.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:30:58.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:30:44
2025-12-24T15:30:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:30:58.409 [DEBUG] [Thread-304550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:30:58.496 [DEBUG] [Thread-304551] [transport.py] [_log()] starting thread (client mode): 0xf81f3640
2025-12-24T15:30:58.497 [DEBUG] [Thread-304551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:30:58.511 [DEBUG] [Thread-304551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:30:58.511 [INFO] [Thread-304551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] client lang: <none>
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] server lang: <none>
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] kex follows: False
2025-12-24T15:30:58.515 [DEBUG] [Thread-304551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:30:58.516 [DEBUG] [Thread-304551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:30:58.516 [DEBUG] [Thread-304551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:30:58.516 [DEBUG] [Thread-304551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:30:58.516 [DEBUG] [Thread-304551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:30:58.516 [DEBUG] [Thread-304551] [transport.py] [_log()] Compression: none
2025-12-24T15:30:58.516 [DEBUG] [Thread-304551] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:30:58.547 [DEBUG] [Thread-304551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:30:58.550 [DEBUG] [Thread-304551] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:30:58.551 [DEBUG] [Thread-304551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:30:58.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:30:58.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:30:58.554 [DEBUG] [Thread-304551] [transport.py] [_log()] userauth is OK
2025-12-24T15:30:58.554 [DEBUG] [Thread-304551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:30:58.554 [DEBUG] [Thread-304551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:30:58.554 [DEBUG] [Thread-304551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:30:58.554 [DEBUG] [Thread-304551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:30:58.573 [INFO] [Thread-304551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:30:58.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:30:59.148 [DEBUG] [Thread-304551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:30:59.148 [DEBUG] [Thread-304551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:30:59.149 [DEBUG] [Thread-304551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:30:59.189 [DEBUG] [Thread-304551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:30:59.190 [DEBUG] [Thread-304551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:30:59.192 [DEBUG] [Thread-304551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:30:59.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:30:59.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:30:59.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:30:59.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:30:59.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:30:59.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:30:59.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:30:59.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:30:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:30:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.562915 -999.00  +24.10  14.83     30   +5.80 1 2 1 1 1   888    0 18.12 13.51 ----- 14.8 14.8 127.8 22.6 28.9 -17.6 29.0 -18.1 29.4 -16.6 29.7 -17.6
2025-12-24T15:30:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:30:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:30:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.562915
2025-12-24T15:30:59.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:30:59.230 [DEBUG] [Thread-304551] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:30:59.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:30:59.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:30:59.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:30:59.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:30:59.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:30:44', tmtdew=20.98, humidity=25.66, cloud=0.0, wind=18.77, temperature=24.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:30:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:30:59.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:30:59.318 [DEBUG] [Thread-304554] [transport.py] [_log()] starting thread (client mode): 0xf81f1f00
2025-12-24T15:30:59.318 [DEBUG] [Thread-304554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:30:59.333 [DEBUG] [Thread-304554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:30:59.333 [INFO] [Thread-304554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] client lang: <none>
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] server lang: <none>
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] kex follows: False
2025-12-24T15:30:59.341 [DEBUG] [Thread-304554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:30:59.342 [DEBUG] [Thread-304554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:30:59.342 [DEBUG] [Thread-304554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:30:59.342 [DEBUG] [Thread-304554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:30:59.342 [DEBUG] [Thread-304554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:30:59.342 [DEBUG] [Thread-304554] [transport.py] [_log()] Compression: none
2025-12-24T15:30:59.342 [DEBUG] [Thread-304554] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:30:59.402 [DEBUG] [Thread-304554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:30:59.402 [DEBUG] [Thread-304554] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:30:59.402 [DEBUG] [Thread-304554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:30:59.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:30:59.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:30:59.459 [DEBUG] [Thread-304554] [transport.py] [_log()] userauth is OK
2025-12-24T15:30:59.459 [DEBUG] [Thread-304554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:30:59.459 [DEBUG] [Thread-304554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:30:59.459 [DEBUG] [Thread-304554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:30:59.459 [DEBUG] [Thread-304554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:30:59.475 [INFO] [Thread-304554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:30:59.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:30:59.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:31:00.313 [DEBUG] [Thread-304554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:31:00.313 [DEBUG] [Thread-304554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:31:00.361 [DEBUG] [Thread-304554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:31:00.361 [DEBUG] [Thread-304554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:31:00.369 [DEBUG] [Thread-304554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:31:00.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:31:00.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:31:00.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
2025-12-24T15:31:00.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:31:00.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:31:00.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:31:00.402 [DEBUG] [Thread-304554] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:31:09.267 [DEBUG] [Thread-304556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:31:24.428 [DEBUG] [Thread-304557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:31:24.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:31:24.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:31:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:31:30.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:31:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:31:31.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 31, 17), 20.88, 25.83, 0.0, 15.37, 24.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:31:31.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:31:17
2025-12-24T15:31:31.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:31:32.143 [DEBUG] [Thread-304558] [transport.py] [_log()] starting thread (client mode): 0xf81f2140
2025-12-24T15:31:32.143 [DEBUG] [Thread-304558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:31:32.155 [DEBUG] [Thread-304558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:31:32.156 [INFO] [Thread-304558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:31:32.161 [DEBUG] [Thread-304558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:31:32.161 [DEBUG] [Thread-304558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:31:32.161 [DEBUG] [Thread-304558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:31:32.161 [DEBUG] [Thread-304558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:31:32.161 [DEBUG] [Thread-304558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:31:32.161 [DEBUG] [Thread-304558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:31:32.161 [DEBUG] [Thread-304558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:31:32.161 [DEBUG] [Thread-304558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:31:32.162 [DEBUG] [Thread-304558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:31:32.162 [DEBUG] [Thread-304558] [transport.py] [_log()] client lang: <none>
2025-12-24T15:31:32.162 [DEBUG] [Thread-304558] [transport.py] [_log()] server lang: <none>
2025-12-24T15:31:32.162 [DEBUG] [Thread-304558] [transport.py] [_log()] kex follows: False
2025-12-24T15:31:32.162 [DEBUG] [Thread-304558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:31:32.163 [DEBUG] [Thread-304558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:31:32.163 [DEBUG] [Thread-304558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:31:32.163 [DEBUG] [Thread-304558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:31:32.163 [DEBUG] [Thread-304558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:31:32.163 [DEBUG] [Thread-304558] [transport.py] [_log()] Compression: none
2025-12-24T15:31:32.163 [DEBUG] [Thread-304558] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:31:32.200 [DEBUG] [Thread-304558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:31:32.205 [DEBUG] [Thread-304558] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:31:32.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:31:32.208 [DEBUG] [Thread-304558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:31:32.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:31:32.212 [DEBUG] [Thread-304558] [transport.py] [_log()] userauth is OK
2025-12-24T15:31:32.212 [DEBUG] [Thread-304558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:31:32.212 [DEBUG] [Thread-304558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:31:32.213 [DEBUG] [Thread-304558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:31:32.213 [DEBUG] [Thread-304558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:31:32.239 [INFO] [Thread-304558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:31:32.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:31:32.881 [DEBUG] [Thread-304558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:31:32.881 [DEBUG] [Thread-304558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:31:32.882 [DEBUG] [Thread-304558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:31:32.922 [DEBUG] [Thread-304558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:31:32.922 [DEBUG] [Thread-304558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:31:32.925 [DEBUG] [Thread-304558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:31:32.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:31:32.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:31:32.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:31:32.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:31:32.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:31:32.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:31:32.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:31:32.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:31:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:31:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.563262 -999.00  +24.00  10.78     31   +5.90 1 2 1 1 1   888    0 18.56 16.11 ----- 10.8 10.8 139.6 19.0 29.0 -16.8 29.1 -16.4 29.5 -15.1 29.8 -16.5
2025-12-24T15:31:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:31:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:31:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.563262
2025-12-24T15:31:32.954 [DEBUG] [Thread-304558] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:31:32.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:31:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:31:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:31:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:31:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:31:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:31:17', tmtdew=20.88, humidity=25.83, cloud=0.0, wind=15.37, temperature=24.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:31:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:31:33.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:31:33.062 [DEBUG] [Thread-304561] [transport.py] [_log()] starting thread (client mode): 0xf81e4670
2025-12-24T15:31:33.062 [DEBUG] [Thread-304561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:31:33.081 [DEBUG] [Thread-304561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:31:33.081 [INFO] [Thread-304561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] client lang: <none>
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] server lang: <none>
2025-12-24T15:31:33.088 [DEBUG] [Thread-304561] [transport.py] [_log()] kex follows: False
2025-12-24T15:31:33.089 [DEBUG] [Thread-304561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:31:33.089 [DEBUG] [Thread-304561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:31:33.089 [DEBUG] [Thread-304561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:31:33.089 [DEBUG] [Thread-304561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:31:33.089 [DEBUG] [Thread-304561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:31:33.089 [DEBUG] [Thread-304561] [transport.py] [_log()] Compression: none
2025-12-24T15:31:33.089 [DEBUG] [Thread-304561] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:31:33.148 [DEBUG] [Thread-304561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:31:33.149 [DEBUG] [Thread-304561] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:31:33.149 [DEBUG] [Thread-304561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:31:33.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:31:33.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:31:33.207 [DEBUG] [Thread-304561] [transport.py] [_log()] userauth is OK
2025-12-24T15:31:33.207 [DEBUG] [Thread-304561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:31:33.207 [DEBUG] [Thread-304561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:31:33.208 [DEBUG] [Thread-304561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:31:33.208 [DEBUG] [Thread-304561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:31:33.235 [INFO] [Thread-304561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:31:33.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:31:33.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:31:34.068 [DEBUG] [Thread-304561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:31:34.069 [DEBUG] [Thread-304561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:31:34.117 [DEBUG] [Thread-304561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:31:34.117 [DEBUG] [Thread-304561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:31:34.125 [DEBUG] [Thread-304561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:31:34.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:31:34.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:31:34.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:31:34.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:31:34.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:31:34.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:31:34.159 [DEBUG] [Thread-304561] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:31:39.514 [DEBUG] [Thread-304563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:31:54.661 [DEBUG] [Thread-304564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:31:58.636 [DEBUG] [Thread-304565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:32:04.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:32:04.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:32:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:32:05.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 31, 51), 21.22, 25.18, 0.0, 17.35, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:32:05.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:31:51
2025-12-24T15:32:05.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:32:05.957 [DEBUG] [Thread-304566] [transport.py] [_log()] starting thread (client mode): 0xf8189540
2025-12-24T15:32:05.958 [DEBUG] [Thread-304566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:32:05.969 [DEBUG] [Thread-304566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:32:05.969 [INFO] [Thread-304566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:32:05.975 [DEBUG] [Thread-304566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] client lang: <none>
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] server lang: <none>
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] kex follows: False
2025-12-24T15:32:05.976 [DEBUG] [Thread-304566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:32:05.977 [DEBUG] [Thread-304566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:32:05.977 [DEBUG] [Thread-304566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:32:05.977 [DEBUG] [Thread-304566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:32:05.977 [DEBUG] [Thread-304566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:32:05.977 [DEBUG] [Thread-304566] [transport.py] [_log()] Compression: none
2025-12-24T15:32:05.977 [DEBUG] [Thread-304566] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:32:06.015 [DEBUG] [Thread-304566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:32:06.020 [DEBUG] [Thread-304566] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:32:06.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:32:06.023 [DEBUG] [Thread-304566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:32:06.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:32:06.027 [DEBUG] [Thread-304566] [transport.py] [_log()] userauth is OK
2025-12-24T15:32:06.028 [DEBUG] [Thread-304566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:32:06.028 [DEBUG] [Thread-304566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:32:06.028 [DEBUG] [Thread-304566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:32:06.028 [DEBUG] [Thread-304566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:32:06.066 [INFO] [Thread-304566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:32:06.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:32:06.692 [DEBUG] [Thread-304566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:32:06.692 [DEBUG] [Thread-304566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:32:06.694 [DEBUG] [Thread-304566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:32:06.733 [DEBUG] [Thread-304566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:32:06.734 [DEBUG] [Thread-304566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:32:06.737 [DEBUG] [Thread-304566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:32:06.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:32:06.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:32:06.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:32:06.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:32:06.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:32:06.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:32:06.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:32:06.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:32:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:32:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.563610 -999.00  +24.20  11.04     31   +6.00 1 2 1 1 1   888    0 18.10 18.54 ----- 11.0 11.0 144.8 17.0 29.2 -15.1 29.3 -16.3 29.8 -15.1 30.0 -15.0
2025-12-24T15:32:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:32:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:32:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.563610
2025-12-24T15:32:06.776 [DEBUG] [Thread-304566] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:32:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:32:06.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:32:06.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:32:06.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:32:06.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:32:06.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:31:51', tmtdew=21.22, humidity=25.18, cloud=0.0, wind=17.35, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:31:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:32:06.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:32:06.879 [DEBUG] [Thread-304569] [transport.py] [_log()] starting thread (client mode): 0xf5750460
2025-12-24T15:32:06.880 [DEBUG] [Thread-304569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:32:06.895 [DEBUG] [Thread-304569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:32:06.895 [INFO] [Thread-304569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:32:06.905 [DEBUG] [Thread-304569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] client lang: <none>
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] server lang: <none>
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] kex follows: False
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:32:06.906 [DEBUG] [Thread-304569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:32:06.907 [DEBUG] [Thread-304569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:32:06.907 [DEBUG] [Thread-304569] [transport.py] [_log()] Compression: none
2025-12-24T15:32:06.907 [DEBUG] [Thread-304569] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:32:06.968 [DEBUG] [Thread-304569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:32:06.969 [DEBUG] [Thread-304569] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:32:06.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:32:06.970 [DEBUG] [Thread-304569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:32:06.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:32:07.031 [DEBUG] [Thread-304569] [transport.py] [_log()] userauth is OK
2025-12-24T15:32:07.031 [DEBUG] [Thread-304569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:32:07.032 [DEBUG] [Thread-304569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:32:07.032 [DEBUG] [Thread-304569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:32:07.032 [DEBUG] [Thread-304569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:32:07.059 [INFO] [Thread-304569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:32:07.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:32:07.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:32:07.919 [DEBUG] [Thread-304569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:32:07.919 [DEBUG] [Thread-304569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:32:07.966 [DEBUG] [Thread-304569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:32:07.966 [DEBUG] [Thread-304569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:32:07.975 [DEBUG] [Thread-304569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:32:07.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:32:07.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:32:07.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:32:08.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:32:08.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:32:08.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:32:08.009 [DEBUG] [Thread-304569] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:32:09.776 [DEBUG] [Thread-304571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:32:24.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:32:24.695 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:32:24.950 [DEBUG] [Thread-304572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:32:38.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:32:38.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:32:38.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
2025-12-24T15:32:39.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 32, 24), 21.2, 25.25, 0.0, 16.89, 24.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:32:39.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:32:24
2025-12-24T15:32:39.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:32:39.626 [DEBUG] [Thread-304573] [transport.py] [_log()] starting thread (client mode): 0xf81e6890
2025-12-24T15:32:39.627 [DEBUG] [Thread-304573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:32:39.636 [DEBUG] [Thread-304573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:32:39.636 [INFO] [Thread-304573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:32:39.641 [DEBUG] [Thread-304573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:32:39.641 [DEBUG] [Thread-304573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] client lang: <none>
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] server lang: <none>
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] kex follows: False
2025-12-24T15:32:39.642 [DEBUG] [Thread-304573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:32:39.643 [DEBUG] [Thread-304573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:32:39.643 [DEBUG] [Thread-304573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:32:39.643 [DEBUG] [Thread-304573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:32:39.644 [DEBUG] [Thread-304573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:32:39.644 [DEBUG] [Thread-304573] [transport.py] [_log()] Compression: none
2025-12-24T15:32:39.644 [DEBUG] [Thread-304573] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:32:39.676 [DEBUG] [Thread-304573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:32:39.679 [DEBUG] [Thread-304573] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:32:39.680 [DEBUG] [Thread-304573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:32:39.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:32:39.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:32:39.684 [DEBUG] [Thread-304573] [transport.py] [_log()] userauth is OK
2025-12-24T15:32:39.684 [DEBUG] [Thread-304573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:32:39.684 [DEBUG] [Thread-304573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:32:39.684 [DEBUG] [Thread-304573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:32:39.684 [DEBUG] [Thread-304573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:32:39.702 [INFO] [Thread-304573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:32:39.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:32:40.041 [DEBUG] [Thread-304575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:32:40.339 [DEBUG] [Thread-304573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:32:40.340 [DEBUG] [Thread-304573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:32:40.341 [DEBUG] [Thread-304573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:32:40.381 [DEBUG] [Thread-304573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:32:40.381 [DEBUG] [Thread-304573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:32:40.384 [DEBUG] [Thread-304573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:32:40.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:32:40.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:32:40.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:32:40.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:32:40.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:32:40.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:32:40.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:32:40.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:32:40.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:32:40.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.563957 -999.00  +24.40   9.71     31   +6.10 1 2 1 1 1   888    0 18.72 22.33 ----- 9.7 9.7 161.6 14.9 29.2 -17.2 29.1 -18.9 29.7 -16.7 30.0 -16.7
2025-12-24T15:32:40.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:32:40.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:32:40.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.563957
2025-12-24T15:32:40.412 [DEBUG] [Thread-304573] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:32:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:32:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:32:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:32:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:32:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:32:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:32:24', tmtdew=21.2, humidity=25.25, cloud=0.0, wind=16.89, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:32:05.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:32:40.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:32:40.507 [DEBUG] [Thread-304577] [transport.py] [_log()] starting thread (client mode): 0xf81c3cd0
2025-12-24T15:32:40.507 [DEBUG] [Thread-304577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:32:40.522 [DEBUG] [Thread-304577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:32:40.522 [INFO] [Thread-304577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] client lang: <none>
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] server lang: <none>
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] kex follows: False
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] Compression: none
2025-12-24T15:32:40.530 [DEBUG] [Thread-304577] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:32:40.586 [DEBUG] [Thread-304577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:32:40.586 [DEBUG] [Thread-304577] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:32:40.586 [DEBUG] [Thread-304577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:32:40.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:32:40.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:32:40.644 [DEBUG] [Thread-304577] [transport.py] [_log()] userauth is OK
2025-12-24T15:32:40.644 [DEBUG] [Thread-304577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:32:40.644 [DEBUG] [Thread-304577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:32:40.644 [DEBUG] [Thread-304577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:32:40.644 [DEBUG] [Thread-304577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:32:40.663 [INFO] [Thread-304577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:32:40.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:32:40.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:32:41.484 [DEBUG] [Thread-304577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:32:41.484 [DEBUG] [Thread-304577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:32:41.524 [DEBUG] [Thread-304577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:32:41.524 [DEBUG] [Thread-304577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:32:41.532 [DEBUG] [Thread-304577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:32:41.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:32: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')
2025-12-24T15:32:41.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
2025-12-24T15:32:41.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:32:41.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:32:41.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:32:41.565 [DEBUG] [Thread-304577] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:32:55.092 [DEBUG] [Thread-304579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:32:58.884 [DEBUG] [Thread-304580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:33:10.256 [DEBUG] [Thread-304581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:33:11.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:33:11.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:33:11.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:33:12.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 32, 57), 21.0, 25.5, 0.0, 16.71, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:33:12.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:32:57
2025-12-24T15:33:12.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:33:12.806 [DEBUG] [Thread-304582] [transport.py] [_log()] starting thread (client mode): 0xf81884f0
2025-12-24T15:33:12.807 [DEBUG] [Thread-304582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:33:12.821 [DEBUG] [Thread-304582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:33:12.821 [INFO] [Thread-304582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:33:12.828 [DEBUG] [Thread-304582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:33:12.828 [DEBUG] [Thread-304582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:33:12.828 [DEBUG] [Thread-304582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] client lang: <none>
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] server lang: <none>
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] kex follows: False
2025-12-24T15:33:12.829 [DEBUG] [Thread-304582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:33:12.830 [DEBUG] [Thread-304582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:33:12.830 [DEBUG] [Thread-304582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:33:12.830 [DEBUG] [Thread-304582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:33:12.831 [DEBUG] [Thread-304582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:33:12.831 [DEBUG] [Thread-304582] [transport.py] [_log()] Compression: none
2025-12-24T15:33:12.831 [DEBUG] [Thread-304582] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:33:12.868 [DEBUG] [Thread-304582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:33:12.873 [DEBUG] [Thread-304582] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:33:12.874 [DEBUG] [Thread-304582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:33:12.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:33:12.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:33:12.880 [DEBUG] [Thread-304582] [transport.py] [_log()] userauth is OK
2025-12-24T15:33:12.880 [DEBUG] [Thread-304582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:33:12.880 [DEBUG] [Thread-304582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:33:12.880 [DEBUG] [Thread-304582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:33:12.880 [DEBUG] [Thread-304582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:33:12.898 [INFO] [Thread-304582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:33:12.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:33:13.575 [DEBUG] [Thread-304582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:33:13.575 [DEBUG] [Thread-304582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:33:13.577 [DEBUG] [Thread-304582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:33:13.616 [DEBUG] [Thread-304582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:33:13.616 [DEBUG] [Thread-304582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:33:13.619 [DEBUG] [Thread-304582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:33:13.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:33:13.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:33:13.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:33:13.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:33:13.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:33:13.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:33:13.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:33:13.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:33:13.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:33:13.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.564304 -999.00  +24.40  17.78     30   +6.10 1 2 1 1 1   888    0 18.94 24.77 ----- 17.8 17.8 165.0 25.2 29.1 -17.6 28.9 -19.1 29.6 -18.0 29.9 -18.8
2025-12-24T15:33:13.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:33:13.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:33:13.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.564304
2025-12-24T15:33:13.645 [DEBUG] [Thread-304582] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:33:13.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:33:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:33:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:33:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:33:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:33:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:32:57', tmtdew=21.0, humidity=25.5, cloud=0.0, wind=16.71, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:32:35.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:33:13.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:33:13.751 [DEBUG] [Thread-304585] [transport.py] [_log()] starting thread (client mode): 0xf5752290
2025-12-24T15:33:13.751 [DEBUG] [Thread-304585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:33:13.769 [DEBUG] [Thread-304585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:33:13.769 [INFO] [Thread-304585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] client lang: <none>
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] server lang: <none>
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] kex follows: False
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] Compression: none
2025-12-24T15:33:13.777 [DEBUG] [Thread-304585] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:33:13.834 [DEBUG] [Thread-304585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:33:13.835 [DEBUG] [Thread-304585] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:33:13.835 [DEBUG] [Thread-304585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:33:13.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:33:13.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:33:13.892 [DEBUG] [Thread-304585] [transport.py] [_log()] userauth is OK
2025-12-24T15:33:13.892 [DEBUG] [Thread-304585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:33:13.892 [DEBUG] [Thread-304585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:33:13.892 [DEBUG] [Thread-304585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:33:13.892 [DEBUG] [Thread-304585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:33:13.906 [INFO] [Thread-304585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:33:13.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:33:13.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:33:14.751 [DEBUG] [Thread-304585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:33:14.751 [DEBUG] [Thread-304585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:33:14.798 [DEBUG] [Thread-304585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:33:14.799 [DEBUG] [Thread-304585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:33:14.807 [DEBUG] [Thread-304585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:33:14.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:33: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')
2025-12-24T15:33:14.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:33:14.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:33:14.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:33:14.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:33:14.854 [DEBUG] [Thread-304585] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:33:24.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:33:24.844 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:33:25.353 [DEBUG] [Thread-304587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:33:40.546 [DEBUG] [Thread-304588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:33:44.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:33:44.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:33:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:33:45.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 33, 31), 21.02, 25.46, 0.0, 13.83, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:33:45.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:33:31
2025-12-24T15:33:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:33:46.131 [DEBUG] [Thread-304589] [transport.py] [_log()] starting thread (client mode): 0xf8188f40
2025-12-24T15:33:46.132 [DEBUG] [Thread-304589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:33:46.135 [DEBUG] [Thread-304589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:33:46.135 [INFO] [Thread-304589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] client lang: <none>
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] server lang: <none>
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] kex follows: False
2025-12-24T15:33:46.139 [DEBUG] [Thread-304589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:33:46.140 [DEBUG] [Thread-304589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:33:46.140 [DEBUG] [Thread-304589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:33:46.140 [DEBUG] [Thread-304589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:33:46.140 [DEBUG] [Thread-304589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:33:46.140 [DEBUG] [Thread-304589] [transport.py] [_log()] Compression: none
2025-12-24T15:33:46.140 [DEBUG] [Thread-304589] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:33:46.160 [DEBUG] [Thread-304589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:33:46.162 [DEBUG] [Thread-304589] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:33:46.163 [DEBUG] [Thread-304589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:33:46.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:33:46.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:33:46.207 [DEBUG] [Thread-304589] [transport.py] [_log()] userauth is OK
2025-12-24T15:33:46.207 [DEBUG] [Thread-304589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:33:46.207 [DEBUG] [Thread-304589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:33:46.207 [DEBUG] [Thread-304589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:33:46.207 [DEBUG] [Thread-304589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:33:46.237 [INFO] [Thread-304589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:33:46.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:33:46.897 [DEBUG] [Thread-304589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:33:46.897 [DEBUG] [Thread-304589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:33:46.897 [DEBUG] [Thread-304589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:33:46.938 [DEBUG] [Thread-304589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:33:46.938 [DEBUG] [Thread-304589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:33:46.941 [DEBUG] [Thread-304589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:33:46.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:33:46.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:33:46.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:33:46.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:33:46.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:33:46.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:33:46.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:33:46.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:33:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:33:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.564651 -999.00  +24.20  20.83     30   +6.00 1 2 1 1 1   888    0 18.88 25.99 ----- 20.8 20.8 182.2 29.9 29.0 -16.9 28.4 -22.2 29.4 -18.2 29.7 -18.8
2025-12-24T15:33:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:33:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:33:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.564651
2025-12-24T15:33:46.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:33:46.975 [DEBUG] [Thread-304589] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:33:46.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:33:46.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:33:46.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:33:46.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:33:46.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:33:31', tmtdew=21.02, humidity=25.46, cloud=0.0, wind=13.83, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:33:05.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:33:47.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:33:47.089 [DEBUG] [Thread-304592] [transport.py] [_log()] starting thread (client mode): 0xf5770640
2025-12-24T15:33:47.089 [DEBUG] [Thread-304592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:33:47.103 [DEBUG] [Thread-304592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:33:47.103 [INFO] [Thread-304592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] client lang: <none>
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] server lang: <none>
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] kex follows: False
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] Compression: none
2025-12-24T15:33:47.111 [DEBUG] [Thread-304592] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:33:47.166 [DEBUG] [Thread-304592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:33:47.166 [DEBUG] [Thread-304592] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:33:47.166 [DEBUG] [Thread-304592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:33:47.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:33:47.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:33:47.223 [DEBUG] [Thread-304592] [transport.py] [_log()] userauth is OK
2025-12-24T15:33:47.223 [DEBUG] [Thread-304592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:33:47.223 [DEBUG] [Thread-304592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:33:47.223 [DEBUG] [Thread-304592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:33:47.223 [DEBUG] [Thread-304592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:33:47.237 [INFO] [Thread-304592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:33:47.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:33:47.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:33:48.063 [DEBUG] [Thread-304592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:33:48.063 [DEBUG] [Thread-304592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:33:48.111 [DEBUG] [Thread-304592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:33:48.111 [DEBUG] [Thread-304592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:33:48.119 [DEBUG] [Thread-304592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:33:48.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:33: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')
2025-12-24T15:33:48.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:33:48.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:33:48.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:33:48.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:33:48.151 [DEBUG] [Thread-304592] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:33:55.651 [DEBUG] [Thread-304594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:33:59.225 [DEBUG] [Thread-304595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:34:10.840 [DEBUG] [Thread-304596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:34:18.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:34:18.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:34:18.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:34:19.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 34, 5), 20.95, 25.6, 0.0, 18.83, 24.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:34:19.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:34:05
2025-12-24T15:34:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:34:19.707 [DEBUG] [Thread-304597] [transport.py] [_log()] starting thread (client mode): 0xf81f32b0
2025-12-24T15:34:19.708 [DEBUG] [Thread-304597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:34:19.717 [DEBUG] [Thread-304597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:34:19.717 [INFO] [Thread-304597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:34:19.723 [DEBUG] [Thread-304597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:34:19.723 [DEBUG] [Thread-304597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:34:19.723 [DEBUG] [Thread-304597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:34:19.723 [DEBUG] [Thread-304597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:34:19.723 [DEBUG] [Thread-304597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:34:19.723 [DEBUG] [Thread-304597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:34:19.723 [DEBUG] [Thread-304597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:34:19.723 [DEBUG] [Thread-304597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:34:19.724 [DEBUG] [Thread-304597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:34:19.724 [DEBUG] [Thread-304597] [transport.py] [_log()] client lang: <none>
2025-12-24T15:34:19.724 [DEBUG] [Thread-304597] [transport.py] [_log()] server lang: <none>
2025-12-24T15:34:19.724 [DEBUG] [Thread-304597] [transport.py] [_log()] kex follows: False
2025-12-24T15:34:19.724 [DEBUG] [Thread-304597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:34:19.724 [DEBUG] [Thread-304597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:34:19.725 [DEBUG] [Thread-304597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:34:19.725 [DEBUG] [Thread-304597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:34:19.725 [DEBUG] [Thread-304597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:34:19.725 [DEBUG] [Thread-304597] [transport.py] [_log()] Compression: none
2025-12-24T15:34:19.725 [DEBUG] [Thread-304597] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:34:19.771 [DEBUG] [Thread-304597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:34:19.777 [DEBUG] [Thread-304597] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:34:19.778 [DEBUG] [Thread-304597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:34:19.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:34:19.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:34:19.784 [DEBUG] [Thread-304597] [transport.py] [_log()] userauth is OK
2025-12-24T15:34:19.784 [DEBUG] [Thread-304597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:34:19.785 [DEBUG] [Thread-304597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:34:19.785 [DEBUG] [Thread-304597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:34:19.785 [DEBUG] [Thread-304597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:34:19.825 [INFO] [Thread-304597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:34:19.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:34:20.478 [DEBUG] [Thread-304597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:34:20.478 [DEBUG] [Thread-304597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:34:20.479 [DEBUG] [Thread-304597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:34:20.519 [DEBUG] [Thread-304597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:34:20.519 [DEBUG] [Thread-304597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:34:20.521 [DEBUG] [Thread-304597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:34:20.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:34:20.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:34:20.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:34:20.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:34:20.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:34:20.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:34:20.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:34:20.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:34:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:34:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.565346 -999.00  +23.90  12.33     31   +6.00 1 2 1 1 1   888    0 18.67 25.79 ----- 12.3 12.3 186.2 18.2 28.9 -17.6 28.4 -18.7 29.1 -17.7 29.6 -17.6
2025-12-24T15:34:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:34:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:34:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.565346
2025-12-24T15:34:20.547 [DEBUG] [Thread-304597] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:34:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:34:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:34:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:34:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:34:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:34:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:34:05', tmtdew=20.95, humidity=25.6, cloud=0.0, wind=18.83, temperature=24.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:34:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:34:20.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:34:20.648 [DEBUG] [Thread-304600] [transport.py] [_log()] starting thread (client mode): 0xf81f1cc0
2025-12-24T15:34:20.648 [DEBUG] [Thread-304600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:34:20.663 [DEBUG] [Thread-304600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:34:20.663 [INFO] [Thread-304600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:34:20.670 [DEBUG] [Thread-304600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:34:20.670 [DEBUG] [Thread-304600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] client lang: <none>
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] server lang: <none>
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] kex follows: False
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] Compression: none
2025-12-24T15:34:20.671 [DEBUG] [Thread-304600] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:34:20.730 [DEBUG] [Thread-304600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:34:20.730 [DEBUG] [Thread-304600] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:34:20.730 [DEBUG] [Thread-304600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:34:20.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:34:20.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:34:20.787 [DEBUG] [Thread-304600] [transport.py] [_log()] userauth is OK
2025-12-24T15:34:20.787 [DEBUG] [Thread-304600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:34:20.787 [DEBUG] [Thread-304600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:34:20.787 [DEBUG] [Thread-304600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:34:20.787 [DEBUG] [Thread-304600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:34:20.805 [INFO] [Thread-304600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:34:20.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:34:20.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:34:21.632 [DEBUG] [Thread-304600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:34:21.632 [DEBUG] [Thread-304600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:34:21.679 [DEBUG] [Thread-304600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:34:21.679 [DEBUG] [Thread-304600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:34:21.688 [DEBUG] [Thread-304600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:34:21.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:34: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')
2025-12-24T15:34:21.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:34:21.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:34:21.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:34:21.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:34:21.723 [DEBUG] [Thread-304600] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:34:25.000 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:34:25.015 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:34:25.947 [DEBUG] [Thread-304602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:34:41.078 [DEBUG] [Thread-304603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:34:51.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:34:51.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:34:51.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
2025-12-24T15:34:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 34, 38), 20.99, 25.18, 0.0, 17.75, 24.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:34:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:34:38
2025-12-24T15:34:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:34:53.688 [DEBUG] [Thread-304604] [transport.py] [_log()] starting thread (client mode): 0xf81c2bc0
2025-12-24T15:34:53.689 [DEBUG] [Thread-304604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:34:53.693 [DEBUG] [Thread-304604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:34:53.694 [INFO] [Thread-304604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:34:53.701 [DEBUG] [Thread-304604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:34:53.701 [DEBUG] [Thread-304604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] client lang: <none>
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] server lang: <none>
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] kex follows: False
2025-12-24T15:34:53.702 [DEBUG] [Thread-304604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:34:53.703 [DEBUG] [Thread-304604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:34:53.703 [DEBUG] [Thread-304604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:34:53.703 [DEBUG] [Thread-304604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:34:53.703 [DEBUG] [Thread-304604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:34:53.703 [DEBUG] [Thread-304604] [transport.py] [_log()] Compression: none
2025-12-24T15:34:53.703 [DEBUG] [Thread-304604] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:34:53.734 [DEBUG] [Thread-304604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:34:53.737 [DEBUG] [Thread-304604] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:34:53.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:34:53.739 [DEBUG] [Thread-304604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:34:53.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:34:53.743 [DEBUG] [Thread-304604] [transport.py] [_log()] userauth is OK
2025-12-24T15:34:53.743 [DEBUG] [Thread-304604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:34:53.743 [DEBUG] [Thread-304604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:34:53.743 [DEBUG] [Thread-304604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:34:53.744 [DEBUG] [Thread-304604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:34:53.762 [INFO] [Thread-304604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:34:53.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:34:54.421 [DEBUG] [Thread-304604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:34:54.422 [DEBUG] [Thread-304604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:34:54.423 [DEBUG] [Thread-304604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:34:54.462 [DEBUG] [Thread-304604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:34:54.462 [DEBUG] [Thread-304604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:34:54.466 [DEBUG] [Thread-304604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:34:54.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:34:54.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:34:54.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:34:54.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:34:54.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:34:54.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:34:54.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:34:54.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:34:54.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:34:54.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.565692 -999.00  +23.70  12.83     31   +5.90 1 2 1 1 1   888    0 18.36 22.96 ----- 12.8 12.8 201.4 16.4 28.8 -18.2 28.4 -18.8 29.1 -17.7 29.4 -18.4
2025-12-24T15:34:54.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:34:54.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:34:54.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.565692
2025-12-24T15:34:54.502 [DEBUG] [Thread-304604] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:34:54.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:34:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:34:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:34:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:34:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:34:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:34:38', tmtdew=20.99, humidity=25.18, cloud=0.0, wind=17.75, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:34:35.789', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:34:54.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:34:56.137 [DEBUG] [Thread-304607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:34:59.477 [DEBUG] [Thread-304608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:35:11.235 [DEBUG] [Thread-304609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:35:25.177 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:35:25.196 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:35:26.310 [DEBUG] [Thread-304610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:35:41.365 [DEBUG] [Thread-304611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:35:56.447 [DEBUG] [Thread-304612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:35:59.715 [DEBUG] [Thread-304613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:36:11.563 [DEBUG] [Thread-304614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:36:25.355 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:36:25.367 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:36:26.657 [DEBUG] [Thread-304615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:36:41.746 [DEBUG] [Thread-304616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:36:56.840 [DEBUG] [Thread-304617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:36:59.951 [DEBUG] [Thread-304618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:37:06.802 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T15:37:11.920 [DEBUG] [Thread-304619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:37:25.525 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:37:25.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:37:26.998 [DEBUG] [Thread-304620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:37:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:37:36.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:37:36.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:37:38.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 37, 24), 20.77, 25.72, 0.0, 22.99, 24.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:37:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:37:24
2025-12-24T15:37:38.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:37:38.554 [DEBUG] [Thread-304621] [transport.py] [_log()] starting thread (client mode): 0xf81c1360
2025-12-24T15:37:38.555 [DEBUG] [Thread-304621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:37:38.567 [DEBUG] [Thread-304621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:37:38.568 [INFO] [Thread-304621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:37:38.574 [DEBUG] [Thread-304621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:37:38.574 [DEBUG] [Thread-304621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:37:38.574 [DEBUG] [Thread-304621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] client lang: <none>
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] server lang: <none>
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] kex follows: False
2025-12-24T15:37:38.575 [DEBUG] [Thread-304621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:37:38.576 [DEBUG] [Thread-304621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:37:38.576 [DEBUG] [Thread-304621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:37:38.576 [DEBUG] [Thread-304621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:37:38.576 [DEBUG] [Thread-304621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:37:38.576 [DEBUG] [Thread-304621] [transport.py] [_log()] Compression: none
2025-12-24T15:37:38.576 [DEBUG] [Thread-304621] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:37:38.617 [DEBUG] [Thread-304621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:37:38.622 [DEBUG] [Thread-304621] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:37:38.624 [DEBUG] [Thread-304621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:37:38.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:37:38.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:37:38.631 [DEBUG] [Thread-304621] [transport.py] [_log()] userauth is OK
2025-12-24T15:37:38.631 [DEBUG] [Thread-304621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:37:38.631 [DEBUG] [Thread-304621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:37:38.631 [DEBUG] [Thread-304621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:37:38.631 [DEBUG] [Thread-304621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:37:38.671 [INFO] [Thread-304621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:37:38.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:37:39.335 [DEBUG] [Thread-304621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:37:39.336 [DEBUG] [Thread-304621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:37:39.338 [DEBUG] [Thread-304621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:37:39.367 [DEBUG] [Thread-304621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:37:39.367 [DEBUG] [Thread-304621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:37:39.371 [DEBUG] [Thread-304621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:37:39.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:37:39.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:37:39.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:37:39.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:37:39.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:37:39.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:37:39.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:37:39.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:37:39.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:37:39.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.567429 -999.00  +23.90  18.06     32   +6.20 1 2 1 1 1   888    0 18.49 22.38 ----- 18.1 18.1 146.0 25.2 28.7 -15.5 28.6 -14.5 29.2 -12.2 29.3 -17.0
2025-12-24T15:37:39.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:37:39.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:37:39.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.567429
2025-12-24T15:37:39.412 [DEBUG] [Thread-304621] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:37:39.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:37:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:37:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:37:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:37:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:37:39.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:37:24', tmtdew=20.77, humidity=25.72, cloud=0.0, wind=22.99, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:37:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:37:39.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:37:39.518 [DEBUG] [Thread-304624] [transport.py] [_log()] starting thread (client mode): 0xf81c3100
2025-12-24T15:37:39.518 [DEBUG] [Thread-304624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:37:39.533 [DEBUG] [Thread-304624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:37:39.533 [INFO] [Thread-304624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:37:39.541 [DEBUG] [Thread-304624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:37:39.541 [DEBUG] [Thread-304624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:37:39.542 [DEBUG] [Thread-304624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:37:39.542 [DEBUG] [Thread-304624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:37:39.542 [DEBUG] [Thread-304624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:37:39.542 [DEBUG] [Thread-304624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:37:39.542 [DEBUG] [Thread-304624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:37:39.542 [DEBUG] [Thread-304624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:37:39.542 [DEBUG] [Thread-304624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] client lang: <none>
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] server lang: <none>
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] kex follows: False
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] Compression: none
2025-12-24T15:37:39.543 [DEBUG] [Thread-304624] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:37:39.598 [DEBUG] [Thread-304624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:37:39.599 [DEBUG] [Thread-304624] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:37:39.599 [DEBUG] [Thread-304624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:37:39.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:37:39.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:37:39.655 [DEBUG] [Thread-304624] [transport.py] [_log()] userauth is OK
2025-12-24T15:37:39.655 [DEBUG] [Thread-304624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:37:39.655 [DEBUG] [Thread-304624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:37:39.655 [DEBUG] [Thread-304624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:37:39.656 [DEBUG] [Thread-304624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:37:39.671 [INFO] [Thread-304624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:37:39.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:37:39.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:37:40.490 [DEBUG] [Thread-304624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:37:40.491 [DEBUG] [Thread-304624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:37:40.538 [DEBUG] [Thread-304624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:37:40.538 [DEBUG] [Thread-304624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:37:40.547 [DEBUG] [Thread-304624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:37:40.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:37:40.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:37:40.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:37:40.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:37:40.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:37:40.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:37:40.585 [DEBUG] [Thread-304624] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:37:42.113 [DEBUG] [Thread-304626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:37:57.292 [DEBUG] [Thread-304627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:38:00.217 [DEBUG] [Thread-304628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:38:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:38:10.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:38:10.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:38:11.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 37, 57), 20.9, 25.58, 0.0, 30.56, 24.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:38:11.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:37:57
2025-12-24T15:38:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:38:11.852 [DEBUG] [Thread-304629] [transport.py] [_log()] starting thread (client mode): 0xf81c17b0
2025-12-24T15:38:11.853 [DEBUG] [Thread-304629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:38:11.854 [DEBUG] [Thread-304629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:38:11.854 [INFO] [Thread-304629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:38:11.857 [DEBUG] [Thread-304629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] client lang: <none>
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] server lang: <none>
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] kex follows: False
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:38:11.858 [DEBUG] [Thread-304629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:38:11.859 [DEBUG] [Thread-304629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:38:11.859 [DEBUG] [Thread-304629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:38:11.859 [DEBUG] [Thread-304629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:38:11.859 [DEBUG] [Thread-304629] [transport.py] [_log()] Compression: none
2025-12-24T15:38:11.859 [DEBUG] [Thread-304629] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:38:11.882 [DEBUG] [Thread-304629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:38:11.884 [DEBUG] [Thread-304629] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:38:11.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:38:11.887 [DEBUG] [Thread-304629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:38:11.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:38:11.888 [DEBUG] [Thread-304629] [transport.py] [_log()] userauth is OK
2025-12-24T15:38:11.888 [DEBUG] [Thread-304629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:38:11.888 [DEBUG] [Thread-304629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:38:11.888 [DEBUG] [Thread-304629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:38:11.889 [DEBUG] [Thread-304629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:38:11.909 [INFO] [Thread-304629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:38:11.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:38:12.391 [DEBUG] [Thread-304631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:38:12.557 [DEBUG] [Thread-304629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:38:12.557 [DEBUG] [Thread-304629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:38:12.557 [DEBUG] [Thread-304629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:38:12.598 [DEBUG] [Thread-304629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:38:12.598 [DEBUG] [Thread-304629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:38:12.600 [DEBUG] [Thread-304629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:38:12.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:38:12.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:38:12.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:38:12.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:38:12.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:38:12.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:38:12.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:38:12.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:38:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:38:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.567776 -999.00  +24.40  14.68     31   +6.20 1 2 1 1 1   888    0 18.53 22.30 ----- 14.7 14.7 134.6 26.7 29.3 -15.0 29.0 -15.0 29.7 -13.5 30.0 -14.4
2025-12-24T15:38:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:38:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:38:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.567776
2025-12-24T15:38:12.628 [DEBUG] [Thread-304629] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:38:12.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:38:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:38:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:38:12.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:38:12.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:38:12.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:37:57', tmtdew=20.9, humidity=25.58, cloud=0.0, wind=30.56, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:37:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:38:12.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:38:12.727 [DEBUG] [Thread-304633] [transport.py] [_log()] starting thread (client mode): 0xf57a8550
2025-12-24T15:38:12.727 [DEBUG] [Thread-304633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:38:12.740 [DEBUG] [Thread-304633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:38:12.740 [INFO] [Thread-304633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] client lang: <none>
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] server lang: <none>
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] kex follows: False
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] Compression: none
2025-12-24T15:38:12.747 [DEBUG] [Thread-304633] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:38:12.809 [DEBUG] [Thread-304633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:38:12.810 [DEBUG] [Thread-304633] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:38:12.810 [DEBUG] [Thread-304633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:38:12.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:38:12.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:38:12.867 [DEBUG] [Thread-304633] [transport.py] [_log()] userauth is OK
2025-12-24T15:38:12.867 [DEBUG] [Thread-304633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:38:12.867 [DEBUG] [Thread-304633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:38:12.867 [DEBUG] [Thread-304633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:38:12.867 [DEBUG] [Thread-304633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:38:12.883 [INFO] [Thread-304633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:38:12.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:38:12.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:38:13.706 [DEBUG] [Thread-304633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:38:13.706 [DEBUG] [Thread-304633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:38:13.754 [DEBUG] [Thread-304633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:38:13.754 [DEBUG] [Thread-304633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:38:13.762 [DEBUG] [Thread-304633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:38:13.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:38:13.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')
2025-12-24T15:38:13.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
2025-12-24T15:38:13.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:38:13.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:38:13.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:38:13.795 [DEBUG] [Thread-304633] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:38:25.706 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:38:25.725 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:38:27.511 [DEBUG] [Thread-304635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:38:42.677 [DEBUG] [Thread-304636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:38:43.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:38:43.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:38:43.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:38:45.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 38, 30), 20.88, 25.6, 0.0, 25.57, 24.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:38:45.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:38:30
2025-12-24T15:38:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:38:45.480 [DEBUG] [Thread-304637] [transport.py] [_log()] starting thread (client mode): 0xf5788dc0
2025-12-24T15:38:45.480 [DEBUG] [Thread-304637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:38:45.492 [DEBUG] [Thread-304637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:38:45.493 [INFO] [Thread-304637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:38:45.497 [DEBUG] [Thread-304637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] client lang: <none>
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] server lang: <none>
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] kex follows: False
2025-12-24T15:38:45.498 [DEBUG] [Thread-304637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:38:45.499 [DEBUG] [Thread-304637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:38:45.499 [DEBUG] [Thread-304637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:38:45.499 [DEBUG] [Thread-304637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:38:45.499 [DEBUG] [Thread-304637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:38:45.499 [DEBUG] [Thread-304637] [transport.py] [_log()] Compression: none
2025-12-24T15:38:45.499 [DEBUG] [Thread-304637] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:38:45.536 [DEBUG] [Thread-304637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:38:45.541 [DEBUG] [Thread-304637] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:38:45.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:38:45.545 [DEBUG] [Thread-304637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:38:45.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:38:45.549 [DEBUG] [Thread-304637] [transport.py] [_log()] userauth is OK
2025-12-24T15:38:45.549 [DEBUG] [Thread-304637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:38:45.550 [DEBUG] [Thread-304637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:38:45.550 [DEBUG] [Thread-304637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:38:45.550 [DEBUG] [Thread-304637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:38:45.589 [INFO] [Thread-304637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:38:45.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:38:46.267 [DEBUG] [Thread-304637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:38:46.267 [DEBUG] [Thread-304637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:38:46.269 [DEBUG] [Thread-304637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:38:46.308 [DEBUG] [Thread-304637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:38:46.308 [DEBUG] [Thread-304637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:38:46.311 [DEBUG] [Thread-304637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:38:46.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:38:46.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:38:46.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:38:46.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:38:46.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:38:46.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:38:46.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:38:46.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:38:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:38:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.568123 -999.00  +24.70  23.34     30   +6.30 1 2 1 1 1   888    0 18.53 23.13 ----- 23.3 23.3 126.6 27.3 29.5 -15.4 29.3 -15.8 30.1 -14.7 30.4 -15.3
2025-12-24T15:38:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:38:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:38:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.568123
2025-12-24T15:38:46.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:38:46.343 [DEBUG] [Thread-304637] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:38:46.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:38:46.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:38:46.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:38:46.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:38:46.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:38:30', tmtdew=20.88, humidity=25.6, cloud=0.0, wind=25.57, temperature=24.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:38:05.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:38:46.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:38:46.437 [DEBUG] [Thread-304640] [transport.py] [_log()] starting thread (client mode): 0xf5788f10
2025-12-24T15:38:46.437 [DEBUG] [Thread-304640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:38:46.451 [DEBUG] [Thread-304640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:38:46.451 [INFO] [Thread-304640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] client lang: <none>
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] server lang: <none>
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] kex follows: False
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:38:46.459 [DEBUG] [Thread-304640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:38:46.460 [DEBUG] [Thread-304640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:38:46.460 [DEBUG] [Thread-304640] [transport.py] [_log()] Compression: none
2025-12-24T15:38:46.460 [DEBUG] [Thread-304640] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:38:46.514 [DEBUG] [Thread-304640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:38:46.514 [DEBUG] [Thread-304640] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:38:46.514 [DEBUG] [Thread-304640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:38:46.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:38:46.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:38:46.571 [DEBUG] [Thread-304640] [transport.py] [_log()] userauth is OK
2025-12-24T15:38:46.571 [DEBUG] [Thread-304640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:38:46.571 [DEBUG] [Thread-304640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:38:46.571 [DEBUG] [Thread-304640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:38:46.571 [DEBUG] [Thread-304640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:38:46.589 [INFO] [Thread-304640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:38:46.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:38:46.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:38:47.493 [DEBUG] [Thread-304640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:38:47.493 [DEBUG] [Thread-304640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:38:47.540 [DEBUG] [Thread-304640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:38:47.540 [DEBUG] [Thread-304640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:38:47.548 [DEBUG] [Thread-304640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:38:47.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:38:47.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:38:47.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:38:47.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:38:47.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:38:47.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:38:47.584 [DEBUG] [Thread-304640] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:38:57.811 [DEBUG] [Thread-304642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:39:00.486 [DEBUG] [Thread-304643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:39:12.984 [DEBUG] [Thread-304644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:39:17.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:39:17.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:39:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:39:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 39, 3), 20.75, 25.83, 0.0, 24.84, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:39:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:39:03
2025-12-24T15:39:19.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:39:19.371 [DEBUG] [Thread-304645] [transport.py] [_log()] starting thread (client mode): 0xf81c1c00
2025-12-24T15:39:19.372 [DEBUG] [Thread-304645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:39:19.382 [DEBUG] [Thread-304645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:39:19.382 [INFO] [Thread-304645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:39:19.387 [DEBUG] [Thread-304645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:39:19.387 [DEBUG] [Thread-304645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:39:19.387 [DEBUG] [Thread-304645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:39:19.387 [DEBUG] [Thread-304645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] client lang: <none>
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] server lang: <none>
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] kex follows: False
2025-12-24T15:39:19.388 [DEBUG] [Thread-304645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:39:19.389 [DEBUG] [Thread-304645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:39:19.389 [DEBUG] [Thread-304645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:39:19.389 [DEBUG] [Thread-304645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:39:19.389 [DEBUG] [Thread-304645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:39:19.389 [DEBUG] [Thread-304645] [transport.py] [_log()] Compression: none
2025-12-24T15:39:19.390 [DEBUG] [Thread-304645] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:39:19.427 [DEBUG] [Thread-304645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:39:19.432 [DEBUG] [Thread-304645] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:39:19.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:39:19.437 [DEBUG] [Thread-304645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:39:19.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:39:19.441 [DEBUG] [Thread-304645] [transport.py] [_log()] userauth is OK
2025-12-24T15:39:19.442 [DEBUG] [Thread-304645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:39:19.442 [DEBUG] [Thread-304645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:39:19.442 [DEBUG] [Thread-304645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:39:19.442 [DEBUG] [Thread-304645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:39:19.468 [INFO] [Thread-304645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:39:19.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:39:20.118 [DEBUG] [Thread-304645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:39:20.119 [DEBUG] [Thread-304645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:39:20.120 [DEBUG] [Thread-304645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:39:20.160 [DEBUG] [Thread-304645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:39:20.160 [DEBUG] [Thread-304645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:39:20.164 [DEBUG] [Thread-304645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:39:20.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:39:20.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:39:20.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:39:20.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:39:20.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:39:20.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:39:20.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:39:20.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:39:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:39:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.568471 -999.00  +24.40  18.86     31   +6.10 1 2 1 1 1   888    0 18.75 22.66 ----- 18.9 18.9 126.2 34.1 29.7 -17.1 29.6 -16.6 30.4 -15.6 30.6 -15.9
2025-12-24T15:39:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:39:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:39:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.568471
2025-12-24T15:39:20.197 [DEBUG] [Thread-304645] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:39:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:39:20.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:39:20.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:39:20.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:39:20.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:39:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:39:03', tmtdew=20.75, humidity=25.83, cloud=0.0, wind=24.84, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:38:35.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:39:20.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:39:20.310 [DEBUG] [Thread-304648] [transport.py] [_log()] starting thread (client mode): 0xf81f1390
2025-12-24T15:39:20.310 [DEBUG] [Thread-304648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:39:20.325 [DEBUG] [Thread-304648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:39:20.325 [INFO] [Thread-304648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] client lang: <none>
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] server lang: <none>
2025-12-24T15:39:20.332 [DEBUG] [Thread-304648] [transport.py] [_log()] kex follows: False
2025-12-24T15:39:20.333 [DEBUG] [Thread-304648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:39:20.333 [DEBUG] [Thread-304648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:39:20.333 [DEBUG] [Thread-304648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:39:20.333 [DEBUG] [Thread-304648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:39:20.333 [DEBUG] [Thread-304648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:39:20.333 [DEBUG] [Thread-304648] [transport.py] [_log()] Compression: none
2025-12-24T15:39:20.333 [DEBUG] [Thread-304648] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:39:20.390 [DEBUG] [Thread-304648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:39:20.390 [DEBUG] [Thread-304648] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:39:20.390 [DEBUG] [Thread-304648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:39:20.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:39:20.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:39:20.447 [DEBUG] [Thread-304648] [transport.py] [_log()] userauth is OK
2025-12-24T15:39:20.447 [DEBUG] [Thread-304648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:39:20.447 [DEBUG] [Thread-304648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:39:20.447 [DEBUG] [Thread-304648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:39:20.447 [DEBUG] [Thread-304648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:39:20.461 [INFO] [Thread-304648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:39:20.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:39:20.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:39:21.307 [DEBUG] [Thread-304648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:39:21.307 [DEBUG] [Thread-304648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:39:21.345 [DEBUG] [Thread-304648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:39:21.345 [DEBUG] [Thread-304648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:39:21.354 [DEBUG] [Thread-304648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:39:21.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:39:21.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:39:21.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:39:21.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:39:21.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:39:21.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:39:21.393 [DEBUG] [Thread-304648] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:39:25.871 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:39:25.874 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:39:28.073 [DEBUG] [Thread-304650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:39:43.273 [DEBUG] [Thread-304651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:39:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:39:51.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:39:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:39:52.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 39, 36), 21.56, 24.85, 0.0, 32.85, 24.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:39:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:39:36
2025-12-24T15:39:53.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:39:53.219 [DEBUG] [Thread-304652] [transport.py] [_log()] starting thread (client mode): 0xf57735b0
2025-12-24T15:39:53.220 [DEBUG] [Thread-304652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:39:53.227 [DEBUG] [Thread-304652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:39:53.227 [INFO] [Thread-304652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:39:53.233 [DEBUG] [Thread-304652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:39:53.233 [DEBUG] [Thread-304652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:39:53.233 [DEBUG] [Thread-304652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:39:53.233 [DEBUG] [Thread-304652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:39:53.233 [DEBUG] [Thread-304652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:39:53.233 [DEBUG] [Thread-304652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:39:53.233 [DEBUG] [Thread-304652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:39:53.234 [DEBUG] [Thread-304652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:39:53.234 [DEBUG] [Thread-304652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:39:53.234 [DEBUG] [Thread-304652] [transport.py] [_log()] client lang: <none>
2025-12-24T15:39:53.234 [DEBUG] [Thread-304652] [transport.py] [_log()] server lang: <none>
2025-12-24T15:39:53.234 [DEBUG] [Thread-304652] [transport.py] [_log()] kex follows: False
2025-12-24T15:39:53.234 [DEBUG] [Thread-304652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:39:53.234 [DEBUG] [Thread-304652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:39:53.235 [DEBUG] [Thread-304652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:39:53.235 [DEBUG] [Thread-304652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:39:53.235 [DEBUG] [Thread-304652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:39:53.235 [DEBUG] [Thread-304652] [transport.py] [_log()] Compression: none
2025-12-24T15:39:53.235 [DEBUG] [Thread-304652] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:39:53.380 [DEBUG] [Thread-304652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:39:53.385 [DEBUG] [Thread-304652] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:39:53.388 [DEBUG] [Thread-304652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:39:53.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:39:53.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:39:53.393 [DEBUG] [Thread-304652] [transport.py] [_log()] userauth is OK
2025-12-24T15:39:53.393 [DEBUG] [Thread-304652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:39:53.393 [DEBUG] [Thread-304652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:39:53.393 [DEBUG] [Thread-304652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:39:53.393 [DEBUG] [Thread-304652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:39:53.425 [INFO] [Thread-304652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:39:53.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:39:54.056 [DEBUG] [Thread-304652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:39:54.057 [DEBUG] [Thread-304652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:39:54.058 [DEBUG] [Thread-304652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:39:54.098 [DEBUG] [Thread-304652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:39:54.099 [DEBUG] [Thread-304652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:39:54.101 [DEBUG] [Thread-304652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:39:54.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:39:54.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:39:54.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:39:54.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:39:54.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:39:54.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:39:54.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:39:54.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:39:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:39:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.569165 -999.00  +24.80  24.35     30   +6.30 1 2 1 1 1   888    0 18.47 25.03 ----- 24.4 24.4 144.6 32.2 29.7 -19.1 29.5 -20.2 30.4 -17.9 30.8 -18.9
2025-12-24T15:39:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:39:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:39:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.569165
2025-12-24T15:39:54.134 [DEBUG] [Thread-304652] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:39:54.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:39:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:39:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:39:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:39:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:39:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:39:36', tmtdew=21.56, humidity=24.85, cloud=0.0, wind=32.85, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:39:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:39:54.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:39:54.250 [DEBUG] [Thread-304655] [transport.py] [_log()] starting thread (client mode): 0xf572eb60
2025-12-24T15:39:54.250 [DEBUG] [Thread-304655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:39:54.270 [DEBUG] [Thread-304655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:39:54.270 [INFO] [Thread-304655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:39:54.278 [DEBUG] [Thread-304655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:39:54.278 [DEBUG] [Thread-304655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:39:54.278 [DEBUG] [Thread-304655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:39:54.278 [DEBUG] [Thread-304655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:39:54.278 [DEBUG] [Thread-304655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:39:54.278 [DEBUG] [Thread-304655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:39:54.278 [DEBUG] [Thread-304655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] client lang: <none>
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] server lang: <none>
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] kex follows: False
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] Compression: none
2025-12-24T15:39:54.279 [DEBUG] [Thread-304655] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:39:54.335 [DEBUG] [Thread-304655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:39:54.336 [DEBUG] [Thread-304655] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:39:54.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:39:54.336 [DEBUG] [Thread-304655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:39:54.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:39:54.391 [DEBUG] [Thread-304655] [transport.py] [_log()] userauth is OK
2025-12-24T15:39:54.392 [DEBUG] [Thread-304655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:39:54.392 [DEBUG] [Thread-304655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:39:54.392 [DEBUG] [Thread-304655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:39:54.392 [DEBUG] [Thread-304655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:39:54.415 [INFO] [Thread-304655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:39:54.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:39:54.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:39:55.232 [DEBUG] [Thread-304655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:39:55.232 [DEBUG] [Thread-304655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:39:55.280 [DEBUG] [Thread-304655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:39:55.280 [DEBUG] [Thread-304655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:39:55.288 [DEBUG] [Thread-304655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:39:55.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:39:55.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:39:55.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:39:55.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:39:55.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:39:55.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:39:55.321 [DEBUG] [Thread-304655] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:39:58.400 [DEBUG] [Thread-304657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:40:00.768 [DEBUG] [Thread-304658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:40:13.599 [DEBUG] [Thread-304659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:40:25.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:40:25.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:40:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:40:26.020 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:40:26.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:40:26.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 40, 9), 21.3, 25.23, 0.0, 27.93, 24.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:40:26.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:40:09
2025-12-24T15:40:26.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:40:26.689 [DEBUG] [Thread-304660] [transport.py] [_log()] starting thread (client mode): 0xf81f1ba0
2025-12-24T15:40:26.690 [DEBUG] [Thread-304660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:40:26.698 [DEBUG] [Thread-304660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:40:26.699 [INFO] [Thread-304660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] client lang: <none>
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] server lang: <none>
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] kex follows: False
2025-12-24T15:40:26.703 [DEBUG] [Thread-304660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:40:26.704 [DEBUG] [Thread-304660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:40:26.704 [DEBUG] [Thread-304660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:40:26.704 [DEBUG] [Thread-304660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:40:26.704 [DEBUG] [Thread-304660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:40:26.704 [DEBUG] [Thread-304660] [transport.py] [_log()] Compression: none
2025-12-24T15:40:26.704 [DEBUG] [Thread-304660] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:40:26.738 [DEBUG] [Thread-304660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:40:26.741 [DEBUG] [Thread-304660] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:40:26.742 [DEBUG] [Thread-304660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:40:26.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:40:26.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:40:26.746 [DEBUG] [Thread-304660] [transport.py] [_log()] userauth is OK
2025-12-24T15:40:26.746 [DEBUG] [Thread-304660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:40:26.746 [DEBUG] [Thread-304660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:40:26.746 [DEBUG] [Thread-304660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:40:26.746 [DEBUG] [Thread-304660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:40:26.765 [INFO] [Thread-304660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:40:26.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:40:27.409 [DEBUG] [Thread-304660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:40:27.419 [DEBUG] [Thread-304660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:40:27.421 [DEBUG] [Thread-304660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:40:27.451 [DEBUG] [Thread-304660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:40:27.451 [DEBUG] [Thread-304660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:40:27.454 [DEBUG] [Thread-304660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:40:27.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:40:27.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:40:27.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:40:27.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:40:27.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:40:27.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:40:27.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:40:27.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:40:27.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:40:27.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.569512 -999.00  +24.60  16.36     30   +6.30 1 2 1 1 1   888    0 18.82 26.89 ----- 16.4 16.4 148.0 24.8 30.0 -18.5 29.7 -18.3 30.8 -16.9 31.1 -18.3
2025-12-24T15:40:27.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:40:27.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:40:27.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.569512
2025-12-24T15:40:27.493 [DEBUG] [Thread-304660] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:40:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:40:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:40:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:40:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:40:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:40:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:40:09', tmtdew=21.3, humidity=25.23, cloud=0.0, wind=27.93, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:40:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:40:27.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:40:27.612 [DEBUG] [Thread-304663] [transport.py] [_log()] starting thread (client mode): 0xf57aa260
2025-12-24T15:40:27.612 [DEBUG] [Thread-304663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:40:27.627 [DEBUG] [Thread-304663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:40:27.627 [INFO] [Thread-304663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] client lang: <none>
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] server lang: <none>
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] kex follows: False
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:40:27.635 [DEBUG] [Thread-304663] [transport.py] [_log()] Compression: none
2025-12-24T15:40:27.636 [DEBUG] [Thread-304663] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:40:27.693 [DEBUG] [Thread-304663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:40:27.694 [DEBUG] [Thread-304663] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:40:27.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:40:27.696 [DEBUG] [Thread-304663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:40:27.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:40:27.752 [DEBUG] [Thread-304663] [transport.py] [_log()] userauth is OK
2025-12-24T15:40:27.752 [DEBUG] [Thread-304663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:40:27.752 [DEBUG] [Thread-304663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:40:27.752 [DEBUG] [Thread-304663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:40:27.753 [DEBUG] [Thread-304663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:40:27.774 [INFO] [Thread-304663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:40:27.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:40:27.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:40:28.678 [DEBUG] [Thread-304663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:40:28.678 [DEBUG] [Thread-304663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:40:28.720 [DEBUG] [Thread-304665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:40:28.726 [DEBUG] [Thread-304663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:40:28.726 [DEBUG] [Thread-304663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:40:28.735 [DEBUG] [Thread-304663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:40:28.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:40:28.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:40:28.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:40:28.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:40:28.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:40:28.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:40:28.771 [DEBUG] [Thread-304663] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:40:43.887 [DEBUG] [Thread-304666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:40:58.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:40:58.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:40:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:40:58.959 [DEBUG] [Thread-304667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:41:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 40, 42), 20.51, 26.23, 0.0, 23.27, 23.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:41:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:40:42
2025-12-24T15:41:00.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:41:00.561 [DEBUG] [Thread-304668] [transport.py] [_log()] starting thread (client mode): 0xf57520e0
2025-12-24T15:41:00.562 [DEBUG] [Thread-304668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:41:00.563 [DEBUG] [Thread-304668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:41:00.563 [INFO] [Thread-304668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] client lang: <none>
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] server lang: <none>
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] kex follows: False
2025-12-24T15:41:00.568 [DEBUG] [Thread-304668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:41:00.569 [DEBUG] [Thread-304668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:41:00.569 [DEBUG] [Thread-304668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:41:00.569 [DEBUG] [Thread-304668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:41:00.569 [DEBUG] [Thread-304668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:41:00.569 [DEBUG] [Thread-304668] [transport.py] [_log()] Compression: none
2025-12-24T15:41:00.569 [DEBUG] [Thread-304668] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:41:00.612 [DEBUG] [Thread-304668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:41:00.615 [DEBUG] [Thread-304668] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:41:00.616 [DEBUG] [Thread-304668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:41:00.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:41:00.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:41:00.619 [DEBUG] [Thread-304668] [transport.py] [_log()] userauth is OK
2025-12-24T15:41:00.619 [DEBUG] [Thread-304668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:41:00.619 [DEBUG] [Thread-304668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:41:00.619 [DEBUG] [Thread-304668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:41:00.619 [DEBUG] [Thread-304668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:41:00.637 [INFO] [Thread-304668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:41:00.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:41:00.972 [DEBUG] [Thread-304670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:41:01.225 [DEBUG] [Thread-304668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:41:01.225 [DEBUG] [Thread-304668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:41:01.225 [DEBUG] [Thread-304668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:41:01.267 [DEBUG] [Thread-304668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:41:01.267 [DEBUG] [Thread-304668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:41:01.269 [DEBUG] [Thread-304668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:41:01.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:41:01.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:41:01.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:41:01.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:41:01.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:41:01.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:41:01.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:41:01.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:41:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:41:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.569860 -999.00  +24.60  21.66     30   +6.20 1 2 1 1 1   888    0 18.97 28.78 ----- 21.7 21.7 171.2 24.7 30.1 -19.3 29.8 -19.5 30.9 -19.5 31.4 -18.9
2025-12-24T15:41:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:41:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:41:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.569860
2025-12-24T15:41:01.298 [DEBUG] [Thread-304668] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:41:01.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:41:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:41:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:41:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:41:01.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:41:01.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:40:42', tmtdew=20.51, humidity=26.23, cloud=0.0, wind=23.27, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:40:35.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:41:01.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:41:01.398 [DEBUG] [Thread-304672] [transport.py] [_log()] starting thread (client mode): 0xf5752440
2025-12-24T15:41:01.398 [DEBUG] [Thread-304672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:41:01.413 [DEBUG] [Thread-304672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:41:01.413 [INFO] [Thread-304672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:41:01.420 [DEBUG] [Thread-304672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] client lang: <none>
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] server lang: <none>
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] kex follows: False
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] Compression: none
2025-12-24T15:41:01.421 [DEBUG] [Thread-304672] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:41:01.478 [DEBUG] [Thread-304672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:41:01.478 [DEBUG] [Thread-304672] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:41:01.478 [DEBUG] [Thread-304672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:41:01.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:41:01.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:41:01.539 [DEBUG] [Thread-304672] [transport.py] [_log()] userauth is OK
2025-12-24T15:41:01.539 [DEBUG] [Thread-304672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:41:01.539 [DEBUG] [Thread-304672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:41:01.539 [DEBUG] [Thread-304672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:41:01.539 [DEBUG] [Thread-304672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:41:01.553 [INFO] [Thread-304672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:41:01.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:41:01.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:41:02.402 [DEBUG] [Thread-304672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:41:02.402 [DEBUG] [Thread-304672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:41:02.450 [DEBUG] [Thread-304672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:41:02.450 [DEBUG] [Thread-304672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:41:02.458 [DEBUG] [Thread-304672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:41:02.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:41:02.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:41:02.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:41:02.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:41:02.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:41:02.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:41:02.496 [DEBUG] [Thread-304672] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:41:14.039 [DEBUG] [Thread-304674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:41:26.188 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:41:26.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:41:29.184 [DEBUG] [Thread-304675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:41:32.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:41:32.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:41:32.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:41:34.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 41, 15), 20.58, 26.13, 0.0, 22.3, 23.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:41:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:41:15
2025-12-24T15:41:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:41:34.605 [DEBUG] [Thread-304676] [transport.py] [_log()] starting thread (client mode): 0xf57737f0
2025-12-24T15:41:34.605 [DEBUG] [Thread-304676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:41:34.619 [DEBUG] [Thread-304676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:41:34.619 [INFO] [Thread-304676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:41:34.623 [DEBUG] [Thread-304676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:41:34.623 [DEBUG] [Thread-304676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:41:34.623 [DEBUG] [Thread-304676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] client lang: <none>
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] server lang: <none>
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] kex follows: False
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:41:34.624 [DEBUG] [Thread-304676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:41:34.625 [DEBUG] [Thread-304676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:41:34.625 [DEBUG] [Thread-304676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:41:34.625 [DEBUG] [Thread-304676] [transport.py] [_log()] Compression: none
2025-12-24T15:41:34.625 [DEBUG] [Thread-304676] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:41:34.656 [DEBUG] [Thread-304676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:41:34.659 [DEBUG] [Thread-304676] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:41:34.661 [DEBUG] [Thread-304676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:41:34.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:41:34.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:41:34.664 [DEBUG] [Thread-304676] [transport.py] [_log()] userauth is OK
2025-12-24T15:41:34.664 [DEBUG] [Thread-304676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:41:34.664 [DEBUG] [Thread-304676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:41:34.664 [DEBUG] [Thread-304676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:41:34.664 [DEBUG] [Thread-304676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:41:34.686 [INFO] [Thread-304676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:41:34.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:41:35.353 [DEBUG] [Thread-304676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:41:35.362 [DEBUG] [Thread-304676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:41:35.363 [DEBUG] [Thread-304676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:41:35.394 [DEBUG] [Thread-304676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:41:35.394 [DEBUG] [Thread-304676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:41:35.396 [DEBUG] [Thread-304676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:41:35.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:41:35.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:41:35.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:41:35.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:41:35.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:41:35.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:41:35.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:41:35.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:41:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:41:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.570207 -999.00  +24.40  10.30     30   +6.10 1 2 1 1 1   888    0 18.96 27.65 ----- 10.3 10.3 218.1 25.1 30.1 -20.0 29.7 -23.3 31.0 -18.8 31.4 -21.2
2025-12-24T15:41:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:41:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:41:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.570207
2025-12-24T15:41:35.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:41:35.434 [DEBUG] [Thread-304676] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:41:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:41:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:41:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:41:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:41:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:41:15', tmtdew=20.58, humidity=26.13, cloud=0.0, wind=22.3, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:41:05.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:41:35.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:41:35.521 [DEBUG] [Thread-304679] [transport.py] [_log()] starting thread (client mode): 0xf578a1d0
2025-12-24T15:41:35.521 [DEBUG] [Thread-304679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:41:35.535 [DEBUG] [Thread-304679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:41:35.535 [INFO] [Thread-304679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:41:35.542 [DEBUG] [Thread-304679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] client lang: <none>
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] server lang: <none>
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] kex follows: False
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] Compression: none
2025-12-24T15:41:35.543 [DEBUG] [Thread-304679] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:41:35.598 [DEBUG] [Thread-304679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:41:35.598 [DEBUG] [Thread-304679] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:41:35.598 [DEBUG] [Thread-304679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:41:35.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:41:35.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:41:35.656 [DEBUG] [Thread-304679] [transport.py] [_log()] userauth is OK
2025-12-24T15:41:35.656 [DEBUG] [Thread-304679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:41:35.656 [DEBUG] [Thread-304679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:41:35.656 [DEBUG] [Thread-304679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:41:35.656 [DEBUG] [Thread-304679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:41:35.675 [INFO] [Thread-304679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:41:35.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:41:35.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:41:36.478 [DEBUG] [Thread-304679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:41:36.478 [DEBUG] [Thread-304679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:41:36.517 [DEBUG] [Thread-304679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:41:36.517 [DEBUG] [Thread-304679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:41:36.526 [DEBUG] [Thread-304679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:41:36.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:41:36.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:41:36.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:41:36.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:41:36.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:41:36.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:41:36.564 [DEBUG] [Thread-304679] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:41:44.262 [DEBUG] [Thread-304681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:41:59.394 [DEBUG] [Thread-304682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:42:01.267 [DEBUG] [Thread-304683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:42:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:42:06.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:42:06.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:42:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 41, 49), 20.65, 26.12, 0.0, 17.64, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:42:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:41:49
2025-12-24T15:42:08.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:42:08.312 [DEBUG] [Thread-304684] [transport.py] [_log()] starting thread (client mode): 0xf57a98a0
2025-12-24T15:42:08.312 [DEBUG] [Thread-304684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:42:08.325 [DEBUG] [Thread-304684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:42:08.325 [INFO] [Thread-304684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:42:08.332 [DEBUG] [Thread-304684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:42:08.333 [DEBUG] [Thread-304684] [transport.py] [_log()] client lang: <none>
2025-12-24T15:42:08.333 [DEBUG] [Thread-304684] [transport.py] [_log()] server lang: <none>
2025-12-24T15:42:08.333 [DEBUG] [Thread-304684] [transport.py] [_log()] kex follows: False
2025-12-24T15:42:08.333 [DEBUG] [Thread-304684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:42:08.333 [DEBUG] [Thread-304684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:42:08.333 [DEBUG] [Thread-304684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:42:08.333 [DEBUG] [Thread-304684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:42:08.334 [DEBUG] [Thread-304684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:42:08.334 [DEBUG] [Thread-304684] [transport.py] [_log()] Compression: none
2025-12-24T15:42:08.334 [DEBUG] [Thread-304684] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:42:08.372 [DEBUG] [Thread-304684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:42:08.377 [DEBUG] [Thread-304684] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:42:08.379 [DEBUG] [Thread-304684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:42:08.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:42:08.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:42:08.384 [DEBUG] [Thread-304684] [transport.py] [_log()] userauth is OK
2025-12-24T15:42:08.384 [DEBUG] [Thread-304684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:42:08.385 [DEBUG] [Thread-304684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:42:08.385 [DEBUG] [Thread-304684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:42:08.385 [DEBUG] [Thread-304684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:42:08.411 [INFO] [Thread-304684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:42:08.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:42:09.059 [DEBUG] [Thread-304684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:42:09.059 [DEBUG] [Thread-304684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:42:09.068 [DEBUG] [Thread-304684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:42:09.100 [DEBUG] [Thread-304684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:42:09.100 [DEBUG] [Thread-304684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:42:09.102 [DEBUG] [Thread-304684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:42:09.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:42:09.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:42:09.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:42:09.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:42:09.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:42:09.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:42:09.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:42:09.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:42:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:42:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.570554 -999.00  +24.40  13.20     31   +6.30 1 2 1 1 1   888    0 18.60 27.10 ----- 13.2 13.2 166.0 16.7 30.4 -18.9 30.0 -19.8 31.3 -18.1 31.7 -19.1
2025-12-24T15:42:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:42:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:42:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.570554
2025-12-24T15:42:09.131 [DEBUG] [Thread-304684] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:42:09.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:42:09.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:42:09.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:42:09.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:42:09.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:42:09.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:41:49', tmtdew=20.65, humidity=26.12, cloud=0.0, wind=17.64, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:41:35.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:42:09.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:42:09.230 [DEBUG] [Thread-304687] [transport.py] [_log()] starting thread (client mode): 0xf574f760
2025-12-24T15:42:09.230 [DEBUG] [Thread-304687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:42:09.244 [DEBUG] [Thread-304687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:42:09.244 [INFO] [Thread-304687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:42:09.251 [DEBUG] [Thread-304687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:42:09.251 [DEBUG] [Thread-304687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:42:09.251 [DEBUG] [Thread-304687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] client lang: <none>
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] server lang: <none>
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] kex follows: False
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] Compression: none
2025-12-24T15:42:09.252 [DEBUG] [Thread-304687] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:42:09.314 [DEBUG] [Thread-304687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:42:09.315 [DEBUG] [Thread-304687] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:42:09.315 [DEBUG] [Thread-304687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:42:09.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:42:09.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:42:09.371 [DEBUG] [Thread-304687] [transport.py] [_log()] userauth is OK
2025-12-24T15:42:09.371 [DEBUG] [Thread-304687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:42:09.371 [DEBUG] [Thread-304687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:42:09.371 [DEBUG] [Thread-304687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:42:09.371 [DEBUG] [Thread-304687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:42:09.384 [INFO] [Thread-304687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:42:09.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:42:09.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:42:10.213 [DEBUG] [Thread-304687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:42:10.213 [DEBUG] [Thread-304687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:42:10.252 [DEBUG] [Thread-304687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:42:10.252 [DEBUG] [Thread-304687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:42:10.262 [DEBUG] [Thread-304687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:42:10.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:42:10.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:42:10.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:42:10.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:42:10.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:42:10.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:42:10.300 [DEBUG] [Thread-304687] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:42:14.462 [DEBUG] [Thread-304689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:42:26.366 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:42:26.385 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:42:29.558 [DEBUG] [Thread-304690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:42:40.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:42:40.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:42:40.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:42:41.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 42, 21), 20.76, 25.95, 0.0, 19.29, 24.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:42:41.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:42:21
2025-12-24T15:42:41.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:42:41.711 [DEBUG] [Thread-304691] [transport.py] [_log()] starting thread (client mode): 0xf574e4d0
2025-12-24T15:42:41.712 [DEBUG] [Thread-304691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:42:41.720 [DEBUG] [Thread-304691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:42:41.720 [INFO] [Thread-304691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:42:41.726 [DEBUG] [Thread-304691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:42:41.726 [DEBUG] [Thread-304691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] client lang: <none>
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] server lang: <none>
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] kex follows: False
2025-12-24T15:42:41.727 [DEBUG] [Thread-304691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:42:41.728 [DEBUG] [Thread-304691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:42:41.728 [DEBUG] [Thread-304691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:42:41.728 [DEBUG] [Thread-304691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:42:41.728 [DEBUG] [Thread-304691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:42:41.728 [DEBUG] [Thread-304691] [transport.py] [_log()] Compression: none
2025-12-24T15:42:41.728 [DEBUG] [Thread-304691] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:42:41.769 [DEBUG] [Thread-304691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:42:41.774 [DEBUG] [Thread-304691] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:42:41.776 [DEBUG] [Thread-304691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:42:41.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:42:41.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:42:41.782 [DEBUG] [Thread-304691] [transport.py] [_log()] userauth is OK
2025-12-24T15:42:41.782 [DEBUG] [Thread-304691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:42:41.783 [DEBUG] [Thread-304691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:42:41.783 [DEBUG] [Thread-304691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:42:41.783 [DEBUG] [Thread-304691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:42:41.822 [INFO] [Thread-304691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:42:41.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:42:42.467 [DEBUG] [Thread-304691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:42:42.467 [DEBUG] [Thread-304691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:42:42.469 [DEBUG] [Thread-304691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:42:42.508 [DEBUG] [Thread-304691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:42:42.509 [DEBUG] [Thread-304691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:42:42.512 [DEBUG] [Thread-304691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:42:42.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:42:42.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:42:42.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:42:42.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:42:42.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:42:42.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:42:42.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:42:42.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:42:42.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:42:42.543 [DEBUG] [Thread-304691] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:42:42.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.570901 -999.00  +24.60  22.77     31   +6.30 1 2 1 1 1   888    0 18.61 26.84 ----- 22.8 22.8 170.8 26.2 30.5 -21.3 29.9 -23.7 31.4 -19.7 32.0 -20.7
2025-12-24T15:42:42.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:42:42.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:42:42.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.570901
2025-12-24T15:42:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:42:42.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:42:42.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:42:42.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:42:42.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:42:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:42:21', tmtdew=20.76, humidity=25.95, cloud=0.0, wind=19.29, temperature=24.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:42:05.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:42:42.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:42:42.667 [DEBUG] [Thread-304694] [transport.py] [_log()] starting thread (client mode): 0xf578ba30
2025-12-24T15:42:42.667 [DEBUG] [Thread-304694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:42:42.682 [DEBUG] [Thread-304694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:42:42.682 [INFO] [Thread-304694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:42:42.689 [DEBUG] [Thread-304694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:42:42.689 [DEBUG] [Thread-304694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:42:42.689 [DEBUG] [Thread-304694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] client lang: <none>
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] server lang: <none>
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] kex follows: False
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] Compression: none
2025-12-24T15:42:42.690 [DEBUG] [Thread-304694] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:42:42.747 [DEBUG] [Thread-304694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:42:42.747 [DEBUG] [Thread-304694] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:42:42.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:42:42.748 [DEBUG] [Thread-304694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:42:42.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:42:42.803 [DEBUG] [Thread-304694] [transport.py] [_log()] userauth is OK
2025-12-24T15:42:42.803 [DEBUG] [Thread-304694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:42:42.803 [DEBUG] [Thread-304694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:42:42.803 [DEBUG] [Thread-304694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:42:42.803 [DEBUG] [Thread-304694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:42:42.817 [INFO] [Thread-304694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:42:42.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:42:42.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:42:43.634 [DEBUG] [Thread-304694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:42:43.634 [DEBUG] [Thread-304694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:42:43.682 [DEBUG] [Thread-304694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:42:43.682 [DEBUG] [Thread-304694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:42:43.693 [DEBUG] [Thread-304694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:42:43.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:42:43.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:42:43.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:42:43.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:42:43.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:42:43.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:42:43.726 [DEBUG] [Thread-304694] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:42:44.625 [DEBUG] [Thread-304696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:42:59.790 [DEBUG] [Thread-304697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:43:01.476 [DEBUG] [Thread-304698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:43:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:43:13.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:43:13.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:43:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 42, 55), 21.03, 25.35, 0.0, 25.16, 24.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:43:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:42:55
2025-12-24T15:43:14.896 [DEBUG] [Thread-304699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:43:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:43:15.164 [DEBUG] [Thread-304700] [transport.py] [_log()] starting thread (client mode): 0xf57bc490
2025-12-24T15:43:15.165 [DEBUG] [Thread-304700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:43:15.177 [DEBUG] [Thread-304700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:43:15.178 [INFO] [Thread-304700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:43:15.183 [DEBUG] [Thread-304700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:43:15.183 [DEBUG] [Thread-304700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:43:15.183 [DEBUG] [Thread-304700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:43:15.183 [DEBUG] [Thread-304700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:43:15.183 [DEBUG] [Thread-304700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:43:15.183 [DEBUG] [Thread-304700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:43:15.183 [DEBUG] [Thread-304700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:43:15.183 [DEBUG] [Thread-304700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:43:15.184 [DEBUG] [Thread-304700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:43:15.184 [DEBUG] [Thread-304700] [transport.py] [_log()] client lang: <none>
2025-12-24T15:43:15.184 [DEBUG] [Thread-304700] [transport.py] [_log()] server lang: <none>
2025-12-24T15:43:15.184 [DEBUG] [Thread-304700] [transport.py] [_log()] kex follows: False
2025-12-24T15:43:15.184 [DEBUG] [Thread-304700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:43:15.185 [DEBUG] [Thread-304700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:43:15.185 [DEBUG] [Thread-304700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:43:15.185 [DEBUG] [Thread-304700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:43:15.185 [DEBUG] [Thread-304700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:43:15.185 [DEBUG] [Thread-304700] [transport.py] [_log()] Compression: none
2025-12-24T15:43:15.185 [DEBUG] [Thread-304700] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:43:15.219 [DEBUG] [Thread-304700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:43:15.222 [DEBUG] [Thread-304700] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:43:15.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:43:15.224 [DEBUG] [Thread-304700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:43:15.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:43:15.227 [DEBUG] [Thread-304700] [transport.py] [_log()] userauth is OK
2025-12-24T15:43:15.227 [DEBUG] [Thread-304700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:43:15.227 [DEBUG] [Thread-304700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:43:15.227 [DEBUG] [Thread-304700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:43:15.227 [DEBUG] [Thread-304700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:43:15.257 [INFO] [Thread-304700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:43:15.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:43:15.929 [DEBUG] [Thread-304700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:43:15.929 [DEBUG] [Thread-304700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:43:15.930 [DEBUG] [Thread-304700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:43:15.971 [DEBUG] [Thread-304700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:43:15.971 [DEBUG] [Thread-304700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:43:15.973 [DEBUG] [Thread-304700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:43:15.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:43:15.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:43:15.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:43:15.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:43:15.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:43:15.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:43:15.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:43:15.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:43:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:43:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.571248 -999.00  +24.30  19.35     31   +6.20 1 2 1 1 1   888    0 18.65 26.06 ----- 19.4 19.4 171.2 24.8 30.6 -20.4 30.0 -21.2 31.5 -20.0 32.1 -20.9
2025-12-24T15:43:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:43:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:43:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.571248
2025-12-24T15:43:16.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:43:16.008 [DEBUG] [Thread-304700] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:43:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:43:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:43:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:43:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:43:16.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:42:55', tmtdew=21.03, humidity=25.35, cloud=0.0, wind=25.16, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:42:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:43:16.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:43:16.102 [DEBUG] [Thread-304703] [transport.py] [_log()] starting thread (client mode): 0xf572f820
2025-12-24T15:43:16.102 [DEBUG] [Thread-304703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:43:16.117 [DEBUG] [Thread-304703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:43:16.117 [INFO] [Thread-304703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] client lang: <none>
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] server lang: <none>
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] kex follows: False
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] Compression: none
2025-12-24T15:43:16.125 [DEBUG] [Thread-304703] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:43:16.181 [DEBUG] [Thread-304703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:43:16.182 [DEBUG] [Thread-304703] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:43:16.182 [DEBUG] [Thread-304703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:43:16.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:43:16.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:43:16.239 [DEBUG] [Thread-304703] [transport.py] [_log()] userauth is OK
2025-12-24T15:43:16.239 [DEBUG] [Thread-304703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:43:16.239 [DEBUG] [Thread-304703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:43:16.239 [DEBUG] [Thread-304703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:43:16.239 [DEBUG] [Thread-304703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:43:16.254 [INFO] [Thread-304703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:43:16.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:43:16.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:43:17.084 [DEBUG] [Thread-304703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:43:17.084 [DEBUG] [Thread-304703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:43:17.131 [DEBUG] [Thread-304703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:43:17.131 [DEBUG] [Thread-304703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:43:17.140 [DEBUG] [Thread-304703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:43:17.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:43:17.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')
2025-12-24T15:43:17.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:43:17.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:43:17.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:43:17.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:43:17.173 [DEBUG] [Thread-304703] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:43:26.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:43:26.542 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:43:29.970 [DEBUG] [Thread-304705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:43:45.133 [DEBUG] [Thread-304706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:43:47.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:43:47.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:43:47.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:43:48.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 43, 29), 21.07, 25.29, 0.0, 25.81, 24.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:43:48.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:43:29
2025-12-24T15:43:48.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:43:48.863 [DEBUG] [Thread-304707] [transport.py] [_log()] starting thread (client mode): 0xf574dd20
2025-12-24T15:43:48.863 [DEBUG] [Thread-304707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:43:48.866 [DEBUG] [Thread-304707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:43:48.867 [INFO] [Thread-304707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:43:48.870 [DEBUG] [Thread-304707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:43:48.870 [DEBUG] [Thread-304707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:43:48.870 [DEBUG] [Thread-304707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] client lang: <none>
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] server lang: <none>
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] kex follows: False
2025-12-24T15:43:48.871 [DEBUG] [Thread-304707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:43:48.872 [DEBUG] [Thread-304707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:43:48.872 [DEBUG] [Thread-304707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:43:48.872 [DEBUG] [Thread-304707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:43:48.872 [DEBUG] [Thread-304707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:43:48.872 [DEBUG] [Thread-304707] [transport.py] [_log()] Compression: none
2025-12-24T15:43:48.872 [DEBUG] [Thread-304707] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:43:48.905 [DEBUG] [Thread-304707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:43:48.909 [DEBUG] [Thread-304707] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:43:48.910 [DEBUG] [Thread-304707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:43:48.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:43:48.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:43:48.915 [DEBUG] [Thread-304707] [transport.py] [_log()] userauth is OK
2025-12-24T15:43:48.915 [DEBUG] [Thread-304707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:43:48.916 [DEBUG] [Thread-304707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:43:48.916 [DEBUG] [Thread-304707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:43:48.916 [DEBUG] [Thread-304707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:43:48.957 [INFO] [Thread-304707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:43:48.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:43:49.594 [DEBUG] [Thread-304707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:43:49.595 [DEBUG] [Thread-304707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:43:49.605 [DEBUG] [Thread-304707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:43:49.635 [DEBUG] [Thread-304707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:43:49.636 [DEBUG] [Thread-304707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:43:49.639 [DEBUG] [Thread-304707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:43:49.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:43:49.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:43:49.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:43:49.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:43:49.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:43:49.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:43:49.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:43:49.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:43:49.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:43:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.571596 -999.00  +24.20  24.14     31   +6.30 1 2 1 1 1   888    0 18.49 23.63 ----- 24.1 24.1 161.0 27.7 30.6 -21.9 30.2 -21.2 31.5 -21.1 32.2 -20.7
2025-12-24T15:43:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:43:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:43:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.571596
2025-12-24T15:43:49.673 [DEBUG] [Thread-304707] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:43:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:43:49.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:43:49.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:43:49.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:43:49.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:43:49.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:43:29', tmtdew=21.07, humidity=25.29, cloud=0.0, wind=25.81, temperature=24.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:43:05.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:43:49.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:43:49.788 [DEBUG] [Thread-304710] [transport.py] [_log()] starting thread (client mode): 0xf57727d0
2025-12-24T15:43:49.788 [DEBUG] [Thread-304710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:43:49.804 [DEBUG] [Thread-304710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:43:49.804 [INFO] [Thread-304710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:43:49.811 [DEBUG] [Thread-304710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:43:49.811 [DEBUG] [Thread-304710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] client lang: <none>
2025-12-24T15:43:49.812 [DEBUG] [Thread-304710] [transport.py] [_log()] server lang: <none>
2025-12-24T15:43:49.813 [DEBUG] [Thread-304710] [transport.py] [_log()] kex follows: False
2025-12-24T15:43:49.813 [DEBUG] [Thread-304710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:43:49.813 [DEBUG] [Thread-304710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:43:49.813 [DEBUG] [Thread-304710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:43:49.813 [DEBUG] [Thread-304710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:43:49.813 [DEBUG] [Thread-304710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:43:49.814 [DEBUG] [Thread-304710] [transport.py] [_log()] Compression: none
2025-12-24T15:43:49.814 [DEBUG] [Thread-304710] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:43:49.872 [DEBUG] [Thread-304710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:43:49.873 [DEBUG] [Thread-304710] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:43:49.873 [DEBUG] [Thread-304710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:43:49.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:43:49.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:43:49.927 [DEBUG] [Thread-304710] [transport.py] [_log()] userauth is OK
2025-12-24T15:43:49.927 [DEBUG] [Thread-304710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:43:49.927 [DEBUG] [Thread-304710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:43:49.927 [DEBUG] [Thread-304710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:43:49.927 [DEBUG] [Thread-304710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:43:49.942 [INFO] [Thread-304710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:43:49.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:43:49.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:43:50.768 [DEBUG] [Thread-304710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:43:50.768 [DEBUG] [Thread-304710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:43:50.815 [DEBUG] [Thread-304710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:43:50.815 [DEBUG] [Thread-304710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:43:50.824 [DEBUG] [Thread-304710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:43:50.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:43:50.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:43:50.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:43:50.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:43:50.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:43:50.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:43:50.856 [DEBUG] [Thread-304710] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:44:00.290 [DEBUG] [Thread-304712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:44:02.046 [DEBUG] [Thread-304713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:44:15.535 [DEBUG] [Thread-304714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:44:20.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:44:20.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:44:20.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:44:22.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 44, 2), 20.86, 25.6, 0.0, 24.54, 24.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:44:22.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:44:02
2025-12-24T15:44:22.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:44:22.578 [DEBUG] [Thread-304715] [transport.py] [_log()] starting thread (client mode): 0xf574c820
2025-12-24T15:44:22.578 [DEBUG] [Thread-304715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:44:22.591 [DEBUG] [Thread-304715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:44:22.591 [INFO] [Thread-304715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:44:22.596 [DEBUG] [Thread-304715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:44:22.596 [DEBUG] [Thread-304715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] client lang: <none>
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] server lang: <none>
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] kex follows: False
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:44:22.597 [DEBUG] [Thread-304715] [transport.py] [_log()] Compression: none
2025-12-24T15:44:22.598 [DEBUG] [Thread-304715] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:44:22.634 [DEBUG] [Thread-304715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:44:22.639 [DEBUG] [Thread-304715] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:44:22.641 [DEBUG] [Thread-304715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:44:22.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:44:22.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:44:22.648 [DEBUG] [Thread-304715] [transport.py] [_log()] userauth is OK
2025-12-24T15:44:22.648 [DEBUG] [Thread-304715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:44:22.648 [DEBUG] [Thread-304715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:44:22.648 [DEBUG] [Thread-304715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:44:22.649 [DEBUG] [Thread-304715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:44:22.686 [INFO] [Thread-304715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:44:22.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:44:23.319 [DEBUG] [Thread-304715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:44:23.319 [DEBUG] [Thread-304715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:44:23.320 [DEBUG] [Thread-304715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:44:23.359 [DEBUG] [Thread-304715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:44:23.360 [DEBUG] [Thread-304715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:44:23.362 [DEBUG] [Thread-304715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:44:23.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:44:23.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:44:23.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:44:23.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:44:23.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:44:23.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:44:23.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:44:23.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:44:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:44:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.571942 -999.00  +24.30  23.31     31   +6.40 1 2 1 1 1   888    0 18.55 23.66 ----- 23.3 23.3 149.6 35.3 30.7 -20.7 30.2 -21.8 31.6 -20.6 32.2 -20.5
2025-12-24T15:44:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:44:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:44:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.571942
2025-12-24T15:44:23.395 [DEBUG] [Thread-304715] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:44:23.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:44:23.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:44:23.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:44:23.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:44:23.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:44:23.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:44:02', tmtdew=20.86, humidity=25.6, cloud=0.0, wind=24.54, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:43:35.789', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:44:23.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:44:23.505 [DEBUG] [Thread-304718] [transport.py] [_log()] starting thread (client mode): 0xf572eb60
2025-12-24T15:44:23.505 [DEBUG] [Thread-304718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:44:23.519 [DEBUG] [Thread-304718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:44:23.519 [INFO] [Thread-304718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] client lang: <none>
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] server lang: <none>
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] kex follows: False
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] Compression: none
2025-12-24T15:44:23.526 [DEBUG] [Thread-304718] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:44:23.582 [DEBUG] [Thread-304718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:44:23.582 [DEBUG] [Thread-304718] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:44:23.582 [DEBUG] [Thread-304718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:44:23.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:44:23.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:44:23.639 [DEBUG] [Thread-304718] [transport.py] [_log()] userauth is OK
2025-12-24T15:44:23.639 [DEBUG] [Thread-304718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:44:23.639 [DEBUG] [Thread-304718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:44:23.639 [DEBUG] [Thread-304718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:44:23.639 [DEBUG] [Thread-304718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:44:23.653 [INFO] [Thread-304718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:44:23.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:44:23.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:44:24.514 [DEBUG] [Thread-304718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:44:24.515 [DEBUG] [Thread-304718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:44:24.561 [DEBUG] [Thread-304718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:44:24.561 [DEBUG] [Thread-304718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:44:24.570 [DEBUG] [Thread-304718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:44:24.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:44: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')
2025-12-24T15:44:24.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:44:24.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:44:24.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:44:24.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:44:24.603 [DEBUG] [Thread-304718] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:44:26.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:44:26.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:44:30.615 [DEBUG] [Thread-304720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:44:45.760 [DEBUG] [Thread-304721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:44:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:44:54.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:44:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:44:56.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 44, 36), 21.51, 25.02, 0.0, 24.9, 24.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:44:56.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:44:36
2025-12-24T15:44:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:44:56.395 [DEBUG] [Thread-304722] [transport.py] [_log()] starting thread (client mode): 0xf578b3a0
2025-12-24T15:44:56.395 [DEBUG] [Thread-304722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:44:56.405 [DEBUG] [Thread-304722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:44:56.405 [INFO] [Thread-304722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:44:56.411 [DEBUG] [Thread-304722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] client lang: <none>
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] server lang: <none>
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] kex follows: False
2025-12-24T15:44:56.412 [DEBUG] [Thread-304722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:44:56.413 [DEBUG] [Thread-304722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:44:56.413 [DEBUG] [Thread-304722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:44:56.413 [DEBUG] [Thread-304722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:44:56.413 [DEBUG] [Thread-304722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:44:56.413 [DEBUG] [Thread-304722] [transport.py] [_log()] Compression: none
2025-12-24T15:44:56.413 [DEBUG] [Thread-304722] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:44:56.453 [DEBUG] [Thread-304722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:44:56.458 [DEBUG] [Thread-304722] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:44:56.460 [DEBUG] [Thread-304722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:44:56.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:44:56.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:44:56.464 [DEBUG] [Thread-304722] [transport.py] [_log()] userauth is OK
2025-12-24T15:44:56.464 [DEBUG] [Thread-304722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:44:56.465 [DEBUG] [Thread-304722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:44:56.465 [DEBUG] [Thread-304722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:44:56.465 [DEBUG] [Thread-304722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:44:56.483 [INFO] [Thread-304722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:44:56.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:44:57.308 [DEBUG] [Thread-304722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:44:57.308 [DEBUG] [Thread-304722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:44:57.310 [DEBUG] [Thread-304722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:44:57.349 [DEBUG] [Thread-304722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:44:57.350 [DEBUG] [Thread-304722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:44:57.353 [DEBUG] [Thread-304722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:44:57.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:44:57.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:44:57.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:44:57.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:44:57.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:44:57.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:44:57.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:44:57.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:44:57.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:44:57.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.572637 -999.00  +24.40  19.02     31   +6.20 1 2 1 1 1   888    0 18.64 21.41 ----- 19.0 19.0 155.8 34.0 30.6 -21.9 30.3 -21.7 31.6 -20.7 32.3 -22.1
2025-12-24T15:44:57.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:44:57.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:44:57.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.572637
2025-12-24T15:44:57.392 [DEBUG] [Thread-304722] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:44:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:44:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:44:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:44:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:44:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:44:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:44:36', tmtdew=21.51, humidity=25.02, cloud=0.0, wind=24.9, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:44:35.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:44:57.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:44:57.519 [DEBUG] [Thread-304725] [transport.py] [_log()] starting thread (client mode): 0xf572d540
2025-12-24T15:44:57.519 [DEBUG] [Thread-304725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:44:57.538 [DEBUG] [Thread-304725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:44:57.538 [INFO] [Thread-304725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] client lang: <none>
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] server lang: <none>
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] kex follows: False
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:44:57.546 [DEBUG] [Thread-304725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:44:57.547 [DEBUG] [Thread-304725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:44:57.547 [DEBUG] [Thread-304725] [transport.py] [_log()] Compression: none
2025-12-24T15:44:57.547 [DEBUG] [Thread-304725] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:44:57.608 [DEBUG] [Thread-304725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:44:57.608 [DEBUG] [Thread-304725] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:44:57.609 [DEBUG] [Thread-304725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:44:57.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:44:57.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:44:57.667 [DEBUG] [Thread-304725] [transport.py] [_log()] userauth is OK
2025-12-24T15:44:57.667 [DEBUG] [Thread-304725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:44:57.668 [DEBUG] [Thread-304725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:44:57.668 [DEBUG] [Thread-304725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:44:57.668 [DEBUG] [Thread-304725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:44:57.693 [INFO] [Thread-304725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:44:57.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:44:57.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:44:58.512 [DEBUG] [Thread-304725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:44:58.512 [DEBUG] [Thread-304725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:44:58.560 [DEBUG] [Thread-304725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:44:58.560 [DEBUG] [Thread-304725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:44:58.570 [DEBUG] [Thread-304725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:44:58.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:44:58.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')
2025-12-24T15:44:58.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:44:58.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:44:58.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:44:58.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:44:58.608 [DEBUG] [Thread-304725] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:45:00.849 [DEBUG] [Thread-304727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:45:02.351 [DEBUG] [Thread-304728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:45:16.038 [DEBUG] [Thread-304729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:45:26.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:45:26.837 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:45:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:45:28.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:45:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:45:29.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 45, 9), 21.69, 24.77, 0.0, 26.47, 25.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:45:29.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:45:09
2025-12-24T15:45:29.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:45:29.856 [DEBUG] [Thread-304730] [transport.py] [_log()] starting thread (client mode): 0xf5788be0
2025-12-24T15:45:29.856 [DEBUG] [Thread-304730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:45:29.869 [DEBUG] [Thread-304730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:45:29.869 [INFO] [Thread-304730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] client lang: <none>
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] server lang: <none>
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] kex follows: False
2025-12-24T15:45:29.873 [DEBUG] [Thread-304730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:45:29.874 [DEBUG] [Thread-304730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:45:29.874 [DEBUG] [Thread-304730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:45:29.874 [DEBUG] [Thread-304730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:45:29.874 [DEBUG] [Thread-304730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:45:29.874 [DEBUG] [Thread-304730] [transport.py] [_log()] Compression: none
2025-12-24T15:45:29.874 [DEBUG] [Thread-304730] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:45:29.906 [DEBUG] [Thread-304730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:45:29.911 [DEBUG] [Thread-304730] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:45:29.912 [DEBUG] [Thread-304730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:45:29.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:45:29.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:45:29.917 [DEBUG] [Thread-304730] [transport.py] [_log()] userauth is OK
2025-12-24T15:45:29.918 [DEBUG] [Thread-304730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:45:29.918 [DEBUG] [Thread-304730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:45:29.918 [DEBUG] [Thread-304730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:45:29.918 [DEBUG] [Thread-304730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:45:29.946 [INFO] [Thread-304730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:45:29.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:45:30.591 [DEBUG] [Thread-304730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:45:30.592 [DEBUG] [Thread-304730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:45:30.593 [DEBUG] [Thread-304730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:45:30.633 [DEBUG] [Thread-304730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:45:30.633 [DEBUG] [Thread-304730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:45:30.637 [DEBUG] [Thread-304730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:45:30.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:45:30.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:45:30.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:45:30.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:45:30.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:45:30.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:45:30.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:45:30.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:45:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:45:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.572984 -999.00  +24.30  15.13     31   +6.30 1 2 1 1 1   888    0 18.45 22.33 ----- 15.1 15.1 153.6 22.0 30.8 -21.4 30.3 -21.4 31.8 -20.0 32.5 -20.3
2025-12-24T15:45:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:45:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:45:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.572984
2025-12-24T15:45:30.673 [DEBUG] [Thread-304730] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:45:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:45:30.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:45:30.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:45:30.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:45:30.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:45:30.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:45:09', tmtdew=21.69, humidity=24.77, cloud=0.0, wind=26.47, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:45:05.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:45:30.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:45:30.785 [DEBUG] [Thread-304733] [transport.py] [_log()] starting thread (client mode): 0xf81c3640
2025-12-24T15:45:30.786 [DEBUG] [Thread-304733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:45:30.801 [DEBUG] [Thread-304733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:45:30.801 [INFO] [Thread-304733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:45:30.809 [DEBUG] [Thread-304733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:45:30.809 [DEBUG] [Thread-304733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:45:30.809 [DEBUG] [Thread-304733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:45:30.809 [DEBUG] [Thread-304733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] client lang: <none>
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] server lang: <none>
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] kex follows: False
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] Compression: none
2025-12-24T15:45:30.810 [DEBUG] [Thread-304733] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:45:30.871 [DEBUG] [Thread-304733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:45:30.872 [DEBUG] [Thread-304733] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:45:30.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:45:30.873 [DEBUG] [Thread-304733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:45:30.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:45:30.930 [DEBUG] [Thread-304733] [transport.py] [_log()] userauth is OK
2025-12-24T15:45:30.930 [DEBUG] [Thread-304733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:45:30.930 [DEBUG] [Thread-304733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:45:30.930 [DEBUG] [Thread-304733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:45:30.930 [DEBUG] [Thread-304733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:45:30.949 [INFO] [Thread-304733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:45:30.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:45:30.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:45:31.175 [DEBUG] [Thread-304735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:45:31.772 [DEBUG] [Thread-304733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:45:31.772 [DEBUG] [Thread-304733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:45:31.811 [DEBUG] [Thread-304733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:45:31.811 [DEBUG] [Thread-304733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:45:31.821 [DEBUG] [Thread-304733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:45:31.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:45:31.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:45:31.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:45:31.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:45:31.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:45:31.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:45:31.859 [DEBUG] [Thread-304733] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:45:46.374 [DEBUG] [Thread-304736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:46:01.504 [DEBUG] [Thread-304737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:46:01.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:46:01.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:46:01.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:46:02.599 [DEBUG] [Thread-304738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:46:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 45, 42), 21.46, 24.79, 0.0, 25.27, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:46:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:45:42
2025-12-24T15:46:03.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:46:03.813 [DEBUG] [Thread-304739] [transport.py] [_log()] starting thread (client mode): 0xf57887f0
2025-12-24T15:46:03.814 [DEBUG] [Thread-304739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:46:03.827 [DEBUG] [Thread-304739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:46:03.827 [INFO] [Thread-304739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] client lang: <none>
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] server lang: <none>
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] kex follows: False
2025-12-24T15:46:03.832 [DEBUG] [Thread-304739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:46:03.833 [DEBUG] [Thread-304739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:46:03.833 [DEBUG] [Thread-304739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:46:03.833 [DEBUG] [Thread-304739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:46:03.833 [DEBUG] [Thread-304739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:46:03.833 [DEBUG] [Thread-304739] [transport.py] [_log()] Compression: none
2025-12-24T15:46:03.833 [DEBUG] [Thread-304739] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:46:03.857 [DEBUG] [Thread-304739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:46:03.860 [DEBUG] [Thread-304739] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:46:03.861 [DEBUG] [Thread-304739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:46:03.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:46:03.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:46:03.864 [DEBUG] [Thread-304739] [transport.py] [_log()] userauth is OK
2025-12-24T15:46:03.864 [DEBUG] [Thread-304739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:46:03.865 [DEBUG] [Thread-304739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:46:03.865 [DEBUG] [Thread-304739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:46:03.865 [DEBUG] [Thread-304739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:46:03.882 [INFO] [Thread-304739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:46:03.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:46:04.708 [DEBUG] [Thread-304739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:46:04.708 [DEBUG] [Thread-304739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:46:04.709 [DEBUG] [Thread-304739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:46:04.749 [DEBUG] [Thread-304739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:46:04.749 [DEBUG] [Thread-304739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:46:04.752 [DEBUG] [Thread-304739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:46:04.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:46:04.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:46:04.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:46:04.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:46:04.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:46:04.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:46:04.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:46:04.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:46:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:46:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.573332 -999.00  +24.70  13.19     31   +6.40 1 2 1 1 1   888    0 18.37 21.01 ----- 13.2 13.2 164.7 21.0 30.9 -20.9 30.3 -24.6 32.0 -20.1 32.7 -19.5
2025-12-24T15:46:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:46:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:46:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.573332
2025-12-24T15:46:04.784 [DEBUG] [Thread-304739] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:46:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:46:04.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:46:04.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:46:04.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:46:04.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:46:04.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:45:42', tmtdew=21.46, humidity=24.79, cloud=0.0, wind=25.27, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:45:35.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:46:04.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:46:04.882 [DEBUG] [Thread-304742] [transport.py] [_log()] starting thread (client mode): 0xf572ea70
2025-12-24T15:46:04.882 [DEBUG] [Thread-304742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:46:04.897 [DEBUG] [Thread-304742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:46:04.897 [INFO] [Thread-304742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] client lang: <none>
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] server lang: <none>
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] kex follows: False
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] Compression: none
2025-12-24T15:46:04.904 [DEBUG] [Thread-304742] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:46:04.966 [DEBUG] [Thread-304742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:46:04.966 [DEBUG] [Thread-304742] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:46:04.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:46:04.966 [DEBUG] [Thread-304742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:46:04.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:46:05.023 [DEBUG] [Thread-304742] [transport.py] [_log()] userauth is OK
2025-12-24T15:46:05.023 [DEBUG] [Thread-304742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:46:05.023 [DEBUG] [Thread-304742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:46:05.023 [DEBUG] [Thread-304742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:46:05.023 [DEBUG] [Thread-304742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:46:05.038 [INFO] [Thread-304742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:46:05.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:46:05.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:46:05.914 [DEBUG] [Thread-304742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:46:05.914 [DEBUG] [Thread-304742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:46:05.961 [DEBUG] [Thread-304742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:46:05.961 [DEBUG] [Thread-304742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:46:05.970 [DEBUG] [Thread-304742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:46:05.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:46:05.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:46:05.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:46:05.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:46:05.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:46:05.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:46:06.003 [DEBUG] [Thread-304742] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:46:16.592 [DEBUG] [Thread-304744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:46:26.998 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:46:27.016 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:46:31.755 [DEBUG] [Thread-304745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:46:36.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:46:36.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:46:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:46:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 46, 15), 21.51, 24.72, 0.0, 27.58, 24.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:46:37.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:46:15
2025-12-24T15:46:37.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:46:37.767 [DEBUG] [Thread-304746] [transport.py] [_log()] starting thread (client mode): 0xf81e4340
2025-12-24T15:46:37.768 [DEBUG] [Thread-304746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:46:37.773 [DEBUG] [Thread-304746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:46:37.773 [INFO] [Thread-304746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:46:37.776 [DEBUG] [Thread-304746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] client lang: <none>
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] server lang: <none>
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] kex follows: False
2025-12-24T15:46:37.777 [DEBUG] [Thread-304746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:46:37.778 [DEBUG] [Thread-304746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:46:37.778 [DEBUG] [Thread-304746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:46:37.778 [DEBUG] [Thread-304746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:46:37.778 [DEBUG] [Thread-304746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:46:37.778 [DEBUG] [Thread-304746] [transport.py] [_log()] Compression: none
2025-12-24T15:46:37.778 [DEBUG] [Thread-304746] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:46:37.814 [DEBUG] [Thread-304746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:46:37.819 [DEBUG] [Thread-304746] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:46:37.821 [DEBUG] [Thread-304746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:46:37.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:46:37.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:46:37.825 [DEBUG] [Thread-304746] [transport.py] [_log()] userauth is OK
2025-12-24T15:46:37.826 [DEBUG] [Thread-304746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:46:37.826 [DEBUG] [Thread-304746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:46:37.826 [DEBUG] [Thread-304746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:46:37.826 [DEBUG] [Thread-304746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:46:37.853 [INFO] [Thread-304746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:46:37.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:46:38.498 [DEBUG] [Thread-304746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:46:38.499 [DEBUG] [Thread-304746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:46:38.500 [DEBUG] [Thread-304746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:46:38.540 [DEBUG] [Thread-304746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:46:38.540 [DEBUG] [Thread-304746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:46:38.544 [DEBUG] [Thread-304746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:46:38.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:46:38.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:46:38.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:46:38.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:46:38.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:46:38.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:46:38.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:46:38.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:46:38.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:46:38.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.573679 -999.00  +24.90  24.29     30   +6.30 1 2 1 1 1   888    0 18.36 22.84 ----- 24.3 24.3 173.2 28.9 30.9 -21.5 30.1 -22.4 31.9 -21.6 32.6 -21.3
2025-12-24T15:46:38.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:46:38.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:46:38.576 [DEBUG] [Thread-304746] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:46:38.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.573679
2025-12-24T15:46:38.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:46:38.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:46:38.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:46:38.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:46:38.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:46:38.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:46:15', tmtdew=21.51, humidity=24.72, cloud=0.0, wind=27.58, temperature=24.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:46:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:46:38.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:46:38.699 [DEBUG] [Thread-304749] [transport.py] [_log()] starting thread (client mode): 0xf81e7640
2025-12-24T15:46:38.699 [DEBUG] [Thread-304749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:46:38.714 [DEBUG] [Thread-304749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:46:38.714 [INFO] [Thread-304749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:46:38.721 [DEBUG] [Thread-304749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:46:38.721 [DEBUG] [Thread-304749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:46:38.721 [DEBUG] [Thread-304749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:46:38.721 [DEBUG] [Thread-304749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:46:38.721 [DEBUG] [Thread-304749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] client lang: <none>
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] server lang: <none>
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] kex follows: False
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] Compression: none
2025-12-24T15:46:38.722 [DEBUG] [Thread-304749] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:46:38.778 [DEBUG] [Thread-304749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:46:38.779 [DEBUG] [Thread-304749] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:46:38.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:46:38.780 [DEBUG] [Thread-304749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:46:38.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:46:38.839 [DEBUG] [Thread-304749] [transport.py] [_log()] userauth is OK
2025-12-24T15:46:38.840 [DEBUG] [Thread-304749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:46:38.840 [DEBUG] [Thread-304749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:46:38.840 [DEBUG] [Thread-304749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:46:38.840 [DEBUG] [Thread-304749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:46:38.859 [INFO] [Thread-304749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:46:38.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:46:38.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:46:39.697 [DEBUG] [Thread-304749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:46:39.697 [DEBUG] [Thread-304749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:46:39.738 [DEBUG] [Thread-304749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:46:39.738 [DEBUG] [Thread-304749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:46:39.747 [DEBUG] [Thread-304749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:46:39.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:46:39.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:46:39.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
2025-12-24T15:46:39.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:46:39.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:46:39.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:46:39.785 [DEBUG] [Thread-304749] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:46:46.824 [DEBUG] [Thread-304751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:47:01.991 [DEBUG] [Thread-304752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:47:02.889 [DEBUG] [Thread-304753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:47:09.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:47:09.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:47:09.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:47:11.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 46, 48), 21.08, 25.4, 0.0, 30.91, 24.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:47:11.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:46:48
2025-12-24T15:47:11.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:47:11.474 [DEBUG] [Thread-304754] [transport.py] [_log()] starting thread (client mode): 0xf574e710
2025-12-24T15:47:11.475 [DEBUG] [Thread-304754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:47:11.486 [DEBUG] [Thread-304754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:47:11.486 [INFO] [Thread-304754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] client lang: <none>
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] server lang: <none>
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] kex follows: False
2025-12-24T15:47:11.491 [DEBUG] [Thread-304754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:47:11.492 [DEBUG] [Thread-304754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:47:11.492 [DEBUG] [Thread-304754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:47:11.492 [DEBUG] [Thread-304754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:47:11.492 [DEBUG] [Thread-304754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:47:11.492 [DEBUG] [Thread-304754] [transport.py] [_log()] Compression: none
2025-12-24T15:47:11.492 [DEBUG] [Thread-304754] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:47:11.521 [DEBUG] [Thread-304754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:47:11.525 [DEBUG] [Thread-304754] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:47:11.527 [DEBUG] [Thread-304754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:47:11.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:47:11.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:47:11.533 [DEBUG] [Thread-304754] [transport.py] [_log()] userauth is OK
2025-12-24T15:47:11.534 [DEBUG] [Thread-304754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:47:11.534 [DEBUG] [Thread-304754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:47:11.534 [DEBUG] [Thread-304754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:47:11.534 [DEBUG] [Thread-304754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:47:11.572 [INFO] [Thread-304754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:47:11.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:47:12.231 [DEBUG] [Thread-304754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:47:12.231 [DEBUG] [Thread-304754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:47:12.233 [DEBUG] [Thread-304754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:47:12.272 [DEBUG] [Thread-304754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:47:12.272 [DEBUG] [Thread-304754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:47:12.276 [DEBUG] [Thread-304754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:47:12.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:47:12.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:47:12.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:47:12.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:47:12.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:47:12.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:47:12.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:47:12.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:47:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:47:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.574026 -999.00  +24.60  23.44     30   +6.20 1 1 1 1 1   888    0 18.97 25.65 ----- 23.4 23.4 178.4 33.4 30.7 -21.7 29.8 -26.6 31.6 -22.1 32.6 -19.7
2025-12-24T15:47:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:47:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:47:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.574026
2025-12-24T15:47:12.302 [DEBUG] [Thread-304754] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:47:12.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:47:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:47:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:47:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:47:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T15:47:12.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:46:48', tmtdew=21.08, humidity=25.4, cloud=0.0, wind=30.91, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:46:35.846', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:47:12.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:47:12.426 [DEBUG] [Thread-304757] [transport.py] [_log()] starting thread (client mode): 0xf5772800
2025-12-24T15:47:12.426 [DEBUG] [Thread-304757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:47:12.445 [DEBUG] [Thread-304757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:47:12.445 [INFO] [Thread-304757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:47:12.453 [DEBUG] [Thread-304757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:47:12.454 [DEBUG] [Thread-304757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:47:12.454 [DEBUG] [Thread-304757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:47:12.454 [DEBUG] [Thread-304757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:47:12.454 [DEBUG] [Thread-304757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:47:12.454 [DEBUG] [Thread-304757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] client lang: <none>
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] server lang: <none>
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] kex follows: False
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] Compression: none
2025-12-24T15:47:12.455 [DEBUG] [Thread-304757] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:47:12.512 [DEBUG] [Thread-304757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:47:12.512 [DEBUG] [Thread-304757] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:47:12.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:47:12.514 [DEBUG] [Thread-304757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:47:12.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:47:12.571 [DEBUG] [Thread-304757] [transport.py] [_log()] userauth is OK
2025-12-24T15:47:12.572 [DEBUG] [Thread-304757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:47:12.572 [DEBUG] [Thread-304757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:47:12.572 [DEBUG] [Thread-304757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:47:12.572 [DEBUG] [Thread-304757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:47:12.593 [INFO] [Thread-304757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:47:12.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:47:12.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:47:13.443 [DEBUG] [Thread-304757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:47:13.443 [DEBUG] [Thread-304757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:47:13.490 [DEBUG] [Thread-304757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:47:13.490 [DEBUG] [Thread-304757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:47:13.498 [DEBUG] [Thread-304757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:47:13.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:47:13.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:47:13.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:47:13.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:47:13.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:47:13.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:47:13.536 [DEBUG] [Thread-304757] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:47:17.109 [DEBUG] [Thread-304759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:47:27.157 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:47:27.159 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:47:32.290 [DEBUG] [Thread-304760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:47:43.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:47:43.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:47:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:47:44.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 47, 21), 21.04, 25.45, 0.0, 27.83, 24.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:47:44.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:47:21
2025-12-24T15:47:44.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:47:45.129 [DEBUG] [Thread-304761] [transport.py] [_log()] starting thread (client mode): 0xf57717b0
2025-12-24T15:47:45.130 [DEBUG] [Thread-304761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:47:45.139 [DEBUG] [Thread-304761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:47:45.139 [INFO] [Thread-304761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:47:45.144 [DEBUG] [Thread-304761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:47:45.144 [DEBUG] [Thread-304761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:47:45.144 [DEBUG] [Thread-304761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:47:45.144 [DEBUG] [Thread-304761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:47:45.144 [DEBUG] [Thread-304761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:47:45.144 [DEBUG] [Thread-304761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:47:45.144 [DEBUG] [Thread-304761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:47:45.145 [DEBUG] [Thread-304761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:47:45.145 [DEBUG] [Thread-304761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:47:45.145 [DEBUG] [Thread-304761] [transport.py] [_log()] client lang: <none>
2025-12-24T15:47:45.145 [DEBUG] [Thread-304761] [transport.py] [_log()] server lang: <none>
2025-12-24T15:47:45.145 [DEBUG] [Thread-304761] [transport.py] [_log()] kex follows: False
2025-12-24T15:47:45.145 [DEBUG] [Thread-304761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:47:45.145 [DEBUG] [Thread-304761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:47:45.145 [DEBUG] [Thread-304761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:47:45.146 [DEBUG] [Thread-304761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:47:45.146 [DEBUG] [Thread-304761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:47:45.146 [DEBUG] [Thread-304761] [transport.py] [_log()] Compression: none
2025-12-24T15:47:45.146 [DEBUG] [Thread-304761] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:47:45.186 [DEBUG] [Thread-304761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:47:45.191 [DEBUG] [Thread-304761] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:47:45.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:47:45.195 [DEBUG] [Thread-304761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:47:45.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:47:45.199 [DEBUG] [Thread-304761] [transport.py] [_log()] userauth is OK
2025-12-24T15:47:45.199 [DEBUG] [Thread-304761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:47:45.200 [DEBUG] [Thread-304761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:47:45.200 [DEBUG] [Thread-304761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:47:45.200 [DEBUG] [Thread-304761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:47:45.240 [INFO] [Thread-304761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:47:45.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:47:45.860 [DEBUG] [Thread-304761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:47:45.860 [DEBUG] [Thread-304761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:47:45.870 [DEBUG] [Thread-304761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:47:45.902 [DEBUG] [Thread-304761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:47:45.902 [DEBUG] [Thread-304761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:47:45.904 [DEBUG] [Thread-304761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:47:45.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:47:45.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:47:45.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:47:45.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:47:45.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:47:45.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:47:45.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:47:45.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:47:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:47:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.574373 -999.00  +24.30  17.08     31   +6.20 1 2 1 1 1   888    0 18.70 25.60 ----- 17.1 17.1 146.2 26.1 30.5 -20.1 30.1 -20.4 31.7 -19.0 32.2 -21.5
2025-12-24T15:47:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:47:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:47:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.574373
2025-12-24T15:47:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:47:45.944 [DEBUG] [Thread-304761] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:47:45.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:47:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:47:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:47:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:47:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:47:21', tmtdew=21.04, humidity=25.45, cloud=0.0, wind=27.83, temperature=24.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:47:05.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:47:46.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:47:46.048 [DEBUG] [Thread-304764] [transport.py] [_log()] starting thread (client mode): 0xf578b340
2025-12-24T15:47:46.048 [DEBUG] [Thread-304764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:47:46.063 [DEBUG] [Thread-304764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:47:46.064 [INFO] [Thread-304764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:47:46.072 [DEBUG] [Thread-304764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:47:46.072 [DEBUG] [Thread-304764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:47:46.072 [DEBUG] [Thread-304764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:47:46.072 [DEBUG] [Thread-304764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] client lang: <none>
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] server lang: <none>
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] kex follows: False
2025-12-24T15:47:46.073 [DEBUG] [Thread-304764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:47:46.074 [DEBUG] [Thread-304764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:47:46.074 [DEBUG] [Thread-304764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:47:46.074 [DEBUG] [Thread-304764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:47:46.074 [DEBUG] [Thread-304764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:47:46.074 [DEBUG] [Thread-304764] [transport.py] [_log()] Compression: none
2025-12-24T15:47:46.074 [DEBUG] [Thread-304764] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:47:46.136 [DEBUG] [Thread-304764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:47:46.137 [DEBUG] [Thread-304764] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:47:46.138 [DEBUG] [Thread-304764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:47:46.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:47:46.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:47:46.200 [DEBUG] [Thread-304764] [transport.py] [_log()] userauth is OK
2025-12-24T15:47:46.200 [DEBUG] [Thread-304764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:47:46.200 [DEBUG] [Thread-304764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:47:46.200 [DEBUG] [Thread-304764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:47:46.200 [DEBUG] [Thread-304764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:47:46.219 [INFO] [Thread-304764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:47:46.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:47:46.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:47:47.079 [DEBUG] [Thread-304764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:47:47.079 [DEBUG] [Thread-304764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:47:47.126 [DEBUG] [Thread-304764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:47:47.126 [DEBUG] [Thread-304764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:47:47.134 [DEBUG] [Thread-304764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:47:47.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:47:47.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:47:47.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:47:47.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:47:47.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:47:47.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:47:47.168 [DEBUG] [Thread-304764] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:47:47.360 [DEBUG] [Thread-304766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:48:02.544 [DEBUG] [Thread-304767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:48:03.223 [DEBUG] [Thread-304768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:48:17.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:48:17.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:48:17.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:48:17.668 [DEBUG] [Thread-304769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:48:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 47, 55), 20.74, 26.0, 0.0, 20.73, 23.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:48:18.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:47:55
2025-12-24T15:48:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:48:18.476 [DEBUG] [Thread-304770] [transport.py] [_log()] starting thread (client mode): 0xf57ab3a0
2025-12-24T15:48:18.477 [DEBUG] [Thread-304770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:48:18.489 [DEBUG] [Thread-304770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:48:18.489 [INFO] [Thread-304770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:48:18.493 [DEBUG] [Thread-304770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] client lang: <none>
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] server lang: <none>
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] kex follows: False
2025-12-24T15:48:18.494 [DEBUG] [Thread-304770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:48:18.495 [DEBUG] [Thread-304770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:48:18.495 [DEBUG] [Thread-304770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:48:18.495 [DEBUG] [Thread-304770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:48:18.495 [DEBUG] [Thread-304770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:48:18.495 [DEBUG] [Thread-304770] [transport.py] [_log()] Compression: none
2025-12-24T15:48:18.495 [DEBUG] [Thread-304770] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:48:18.526 [DEBUG] [Thread-304770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:48:18.529 [DEBUG] [Thread-304770] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:48:18.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:48:18.531 [DEBUG] [Thread-304770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:48:18.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:48:18.534 [DEBUG] [Thread-304770] [transport.py] [_log()] userauth is OK
2025-12-24T15:48:18.534 [DEBUG] [Thread-304770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:48:18.535 [DEBUG] [Thread-304770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:48:18.535 [DEBUG] [Thread-304770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:48:18.535 [DEBUG] [Thread-304770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:48:18.554 [INFO] [Thread-304770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:48:18.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:48:19.211 [DEBUG] [Thread-304770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:48:19.211 [DEBUG] [Thread-304770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:48:19.212 [DEBUG] [Thread-304770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:48:19.253 [DEBUG] [Thread-304770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:48:19.253 [DEBUG] [Thread-304770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:48:19.255 [DEBUG] [Thread-304770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:48:19.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:48:19.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:48:19.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:48:19.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:48:19.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:48:19.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:48:19.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:48:19.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:48:19.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:48:19.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.574720 -999.00  +24.50  17.49     30   +6.10 1 2 1 1 1   888    0 18.52 28.88 ----- 17.5 17.5 136.2 28.4 30.8 -19.1 30.4 -20.7 31.9 -19.0 32.5 -19.9
2025-12-24T15:48:19.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:48:19.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:48:19.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.574720
2025-12-24T15:48:19.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:48:19.297 [DEBUG] [Thread-304770] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:48:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:48:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:48:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:48:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:48:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:47:55', tmtdew=20.74, humidity=26.0, cloud=0.0, wind=20.73, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:47:35.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:48:19.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:48:19.386 [DEBUG] [Thread-304773] [transport.py] [_log()] starting thread (client mode): 0xf578a3b0
2025-12-24T15:48:19.386 [DEBUG] [Thread-304773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:48:19.401 [DEBUG] [Thread-304773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:48:19.401 [INFO] [Thread-304773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] client lang: <none>
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] server lang: <none>
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] kex follows: False
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:48:19.408 [DEBUG] [Thread-304773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:48:19.409 [DEBUG] [Thread-304773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:48:19.409 [DEBUG] [Thread-304773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:48:19.409 [DEBUG] [Thread-304773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:48:19.409 [DEBUG] [Thread-304773] [transport.py] [_log()] Compression: none
2025-12-24T15:48:19.409 [DEBUG] [Thread-304773] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:48:19.466 [DEBUG] [Thread-304773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:48:19.466 [DEBUG] [Thread-304773] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:48:19.466 [DEBUG] [Thread-304773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:48:19.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:48:19.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:48:19.523 [DEBUG] [Thread-304773] [transport.py] [_log()] userauth is OK
2025-12-24T15:48:19.523 [DEBUG] [Thread-304773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:48:19.523 [DEBUG] [Thread-304773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:48:19.523 [DEBUG] [Thread-304773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:48:19.523 [DEBUG] [Thread-304773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:48:19.537 [INFO] [Thread-304773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:48:19.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:48:19.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:48:20.407 [DEBUG] [Thread-304773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:48:20.407 [DEBUG] [Thread-304773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:48:20.454 [DEBUG] [Thread-304773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:48:20.455 [DEBUG] [Thread-304773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:48:20.462 [DEBUG] [Thread-304773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:48:20.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:48:20.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')
2025-12-24T15:48:20.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:48:20.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:48:20.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:48:20.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:48:20.496 [DEBUG] [Thread-304773] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:48:27.319 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:48:27.328 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:48:32.793 [DEBUG] [Thread-304775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:48:47.976 [DEBUG] [Thread-304776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:48:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:48:50.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:48: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
2025-12-24T15:48:51.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 48, 28), 20.76, 26.0, 0.0, 20.13, 24.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:48:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:48:28
2025-12-24T15:48:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:48:52.098 [DEBUG] [Thread-304777] [transport.py] [_log()] starting thread (client mode): 0xf818ae30
2025-12-24T15:48:52.099 [DEBUG] [Thread-304777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:48:52.111 [DEBUG] [Thread-304777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:48:52.112 [INFO] [Thread-304777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:48:52.118 [DEBUG] [Thread-304777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:48:52.118 [DEBUG] [Thread-304777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:48:52.118 [DEBUG] [Thread-304777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:48:52.118 [DEBUG] [Thread-304777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:48:52.118 [DEBUG] [Thread-304777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:48:52.119 [DEBUG] [Thread-304777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:48:52.119 [DEBUG] [Thread-304777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:48:52.119 [DEBUG] [Thread-304777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:48:52.119 [DEBUG] [Thread-304777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:48:52.119 [DEBUG] [Thread-304777] [transport.py] [_log()] client lang: <none>
2025-12-24T15:48:52.119 [DEBUG] [Thread-304777] [transport.py] [_log()] server lang: <none>
2025-12-24T15:48:52.119 [DEBUG] [Thread-304777] [transport.py] [_log()] kex follows: False
2025-12-24T15:48:52.119 [DEBUG] [Thread-304777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:48:52.120 [DEBUG] [Thread-304777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:48:52.121 [DEBUG] [Thread-304777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:48:52.121 [DEBUG] [Thread-304777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:48:52.121 [DEBUG] [Thread-304777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:48:52.121 [DEBUG] [Thread-304777] [transport.py] [_log()] Compression: none
2025-12-24T15:48:52.121 [DEBUG] [Thread-304777] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:48:52.161 [DEBUG] [Thread-304777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:48:52.167 [DEBUG] [Thread-304777] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:48:52.169 [DEBUG] [Thread-304777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:48:52.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:48:52.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:48:52.175 [DEBUG] [Thread-304777] [transport.py] [_log()] userauth is OK
2025-12-24T15:48:52.176 [DEBUG] [Thread-304777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:48:52.176 [DEBUG] [Thread-304777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:48:52.176 [DEBUG] [Thread-304777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:48:52.176 [DEBUG] [Thread-304777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:48:52.215 [INFO] [Thread-304777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:48:52.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:48:52.866 [DEBUG] [Thread-304777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:48:52.867 [DEBUG] [Thread-304777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:48:52.868 [DEBUG] [Thread-304777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:48:52.907 [DEBUG] [Thread-304777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:48:52.907 [DEBUG] [Thread-304777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:48:52.908 [DEBUG] [Thread-304777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:48:52.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:48:52.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:48:52.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:48:52.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:48:52.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:48:52.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:48:52.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:48:52.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:48:52.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:48:52.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.575068 -999.00  +24.70  21.36     30   +6.10 1 2 1 1 1   888    0 18.74 27.61 ----- 21.4 21.4 137.8 26.3 30.9 -19.5 30.6 -22.1 31.9 -18.9 32.7 -20.6
2025-12-24T15:48:52.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:48:52.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:48:52.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.575068
2025-12-24T15:48:52.939 [DEBUG] [Thread-304777] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:48:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:48:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:48:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:48:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:48:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:48:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:48:28', tmtdew=20.76, humidity=26.0, cloud=0.0, wind=20.13, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:48:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:48:53.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:48:53.048 [DEBUG] [Thread-304780] [transport.py] [_log()] starting thread (client mode): 0xf81c0f40
2025-12-24T15:48:53.048 [DEBUG] [Thread-304780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:48:53.062 [DEBUG] [Thread-304780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:48:53.062 [INFO] [Thread-304780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:48:53.069 [DEBUG] [Thread-304780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:48:53.069 [DEBUG] [Thread-304780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:48:53.069 [DEBUG] [Thread-304780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:48:53.069 [DEBUG] [Thread-304780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] client lang: <none>
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] server lang: <none>
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] kex follows: False
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] Compression: none
2025-12-24T15:48:53.070 [DEBUG] [Thread-304780] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:48:53.126 [DEBUG] [Thread-304780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:48:53.126 [DEBUG] [Thread-304780] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:48:53.126 [DEBUG] [Thread-304780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:48:53.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:48:53.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:48:53.187 [DEBUG] [Thread-304780] [transport.py] [_log()] userauth is OK
2025-12-24T15:48:53.187 [DEBUG] [Thread-304780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:48:53.187 [DEBUG] [Thread-304780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:48:53.187 [DEBUG] [Thread-304780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:48:53.187 [DEBUG] [Thread-304780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:48:53.203 [INFO] [Thread-304780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:48:53.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:48:53.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:48:54.002 [DEBUG] [Thread-304780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:48:54.002 [DEBUG] [Thread-304780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:48:54.049 [DEBUG] [Thread-304780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:48:54.049 [DEBUG] [Thread-304780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:48:54.057 [DEBUG] [Thread-304780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:48:54.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:48:54.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:48:54.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:48:54.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:48:54.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:48:54.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:48:54.090 [DEBUG] [Thread-304780] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:49:03.079 [DEBUG] [Thread-304782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:49:03.673 [DEBUG] [Thread-304783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:49:18.285 [DEBUG] [Thread-304784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:49:24.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:49:24.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:49:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:49:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 49, 1), 20.89, 25.8, 0.0, 21.0, 24.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:49:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:49:01
2025-12-24T15:49:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:49:25.843 [DEBUG] [Thread-304785] [transport.py] [_log()] starting thread (client mode): 0xf81890f0
2025-12-24T15:49:25.844 [DEBUG] [Thread-304785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:49:25.845 [DEBUG] [Thread-304785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:49:25.846 [INFO] [Thread-304785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:49:25.849 [DEBUG] [Thread-304785] [transport.py] [_log()] client lang: <none>
2025-12-24T15:49:25.850 [DEBUG] [Thread-304785] [transport.py] [_log()] server lang: <none>
2025-12-24T15:49:25.850 [DEBUG] [Thread-304785] [transport.py] [_log()] kex follows: False
2025-12-24T15:49:25.850 [DEBUG] [Thread-304785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:49:25.850 [DEBUG] [Thread-304785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:49:25.850 [DEBUG] [Thread-304785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:49:25.850 [DEBUG] [Thread-304785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:49:25.850 [DEBUG] [Thread-304785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:49:25.850 [DEBUG] [Thread-304785] [transport.py] [_log()] Compression: none
2025-12-24T15:49:25.851 [DEBUG] [Thread-304785] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:49:25.888 [DEBUG] [Thread-304785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:49:25.892 [DEBUG] [Thread-304785] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:49:25.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:49:25.896 [DEBUG] [Thread-304785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:49:25.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:49:25.898 [DEBUG] [Thread-304785] [transport.py] [_log()] userauth is OK
2025-12-24T15:49:25.898 [DEBUG] [Thread-304785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:49:25.899 [DEBUG] [Thread-304785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:49:25.899 [DEBUG] [Thread-304785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:49:25.899 [DEBUG] [Thread-304785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:49:25.916 [INFO] [Thread-304785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:49:25.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:49:26.579 [DEBUG] [Thread-304785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:49:26.579 [DEBUG] [Thread-304785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:49:26.588 [DEBUG] [Thread-304785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:49:26.620 [DEBUG] [Thread-304785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:49:26.620 [DEBUG] [Thread-304785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:49:26.622 [DEBUG] [Thread-304785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:49:26.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:49:26.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:49:26.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:49:26.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:49:26.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:49:26.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:49:26.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:49:26.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:49:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:49:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.575415 -999.00  +24.70  13.93     30   +6.20 1 2 1 1 1   888    0 19.10 28.21 ----- 13.9 13.9 124.0 23.3 31.0 -18.5 30.8 -20.6 32.0 -20.3 32.8 -19.1
2025-12-24T15:49:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:49:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:49:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.575415
2025-12-24T15:49:26.650 [DEBUG] [Thread-304785] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:49:26.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:49:26.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:49:26.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:49:26.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:49:26.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:49:26.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:49:01', tmtdew=20.89, humidity=25.8, cloud=0.0, wind=21.0, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:48:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:49:26.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:49:26.749 [DEBUG] [Thread-304788] [transport.py] [_log()] starting thread (client mode): 0xf81e40a0
2025-12-24T15:49:26.750 [DEBUG] [Thread-304788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:49:26.764 [DEBUG] [Thread-304788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:49:26.764 [INFO] [Thread-304788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] client lang: <none>
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] server lang: <none>
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] kex follows: False
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] Compression: none
2025-12-24T15:49:26.772 [DEBUG] [Thread-304788] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:49:26.830 [DEBUG] [Thread-304788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:49:26.830 [DEBUG] [Thread-304788] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:49:26.830 [DEBUG] [Thread-304788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:49:26.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:49:26.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:49:26.888 [DEBUG] [Thread-304788] [transport.py] [_log()] userauth is OK
2025-12-24T15:49:26.888 [DEBUG] [Thread-304788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:49:26.888 [DEBUG] [Thread-304788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:49:26.888 [DEBUG] [Thread-304788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:49:26.888 [DEBUG] [Thread-304788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:49:26.911 [INFO] [Thread-304788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:49:26.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:49:26.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:49:27.480 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:49:27.482 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:49:27.808 [DEBUG] [Thread-304788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:49:27.808 [DEBUG] [Thread-304788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:49:27.856 [DEBUG] [Thread-304788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:49:27.856 [DEBUG] [Thread-304788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:49:27.864 [DEBUG] [Thread-304788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:49:27.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:49:27.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:49:27.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:49:27.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:49:27.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:49:27.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:49:27.898 [DEBUG] [Thread-304788] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:49:33.355 [DEBUG] [Thread-304790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:49:48.547 [DEBUG] [Thread-304791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:49:57.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:49:57.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:49: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
2025-12-24T15:49:59.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 49, 34), 21.29, 24.92, 0.0, 18.72, 24.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:49:59.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:49:34
2025-12-24T15:49:59.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:49:59.680 [DEBUG] [Thread-304792] [transport.py] [_log()] starting thread (client mode): 0xf578a7a0
2025-12-24T15:49:59.680 [DEBUG] [Thread-304792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:49:59.691 [DEBUG] [Thread-304792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:49:59.691 [INFO] [Thread-304792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] client lang: <none>
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] server lang: <none>
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] kex follows: False
2025-12-24T15:49:59.696 [DEBUG] [Thread-304792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:49:59.697 [DEBUG] [Thread-304792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:49:59.697 [DEBUG] [Thread-304792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:49:59.697 [DEBUG] [Thread-304792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:49:59.697 [DEBUG] [Thread-304792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:49:59.697 [DEBUG] [Thread-304792] [transport.py] [_log()] Compression: none
2025-12-24T15:49:59.697 [DEBUG] [Thread-304792] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:49:59.735 [DEBUG] [Thread-304792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:49:59.740 [DEBUG] [Thread-304792] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:49:59.742 [DEBUG] [Thread-304792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:49:59.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:49:59.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:49:59.748 [DEBUG] [Thread-304792] [transport.py] [_log()] userauth is OK
2025-12-24T15:49:59.748 [DEBUG] [Thread-304792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:49:59.749 [DEBUG] [Thread-304792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:49:59.749 [DEBUG] [Thread-304792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:49:59.749 [DEBUG] [Thread-304792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:49:59.777 [INFO] [Thread-304792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:49:59.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:50:00.400 [DEBUG] [Thread-304792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:50:00.400 [DEBUG] [Thread-304792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:50:00.402 [DEBUG] [Thread-304792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:50:00.441 [DEBUG] [Thread-304792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:50:00.441 [DEBUG] [Thread-304792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:50:00.445 [DEBUG] [Thread-304792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:50:00.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:50:00.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:50:00.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:50:00.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:50:00.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:50:00.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:50:00.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:50:00.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:50:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:50:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.575762 -999.00  +25.00  15.13     29   +6.20 1 2 1 1 1   888    0 18.95 30.10 ----- 15.1 15.1 151.2 21.1 31.1 -19.6 30.8 -23.1 32.4 -19.8 32.9 -19.8
2025-12-24T15:50:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:50:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:50:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.575762
2025-12-24T15:50:00.480 [DEBUG] [Thread-304792] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:50:00.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:50:00.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:50:00.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:50:00.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:50:00.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:50:00.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:49:34', tmtdew=21.29, humidity=24.92, cloud=0.0, wind=18.72, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:49:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:50:00.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:50:00.616 [DEBUG] [Thread-304795] [transport.py] [_log()] starting thread (client mode): 0xf818bb80
2025-12-24T15:50:00.616 [DEBUG] [Thread-304795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:50:00.623 [DEBUG] [Thread-304795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:50:00.623 [INFO] [Thread-304795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] client lang: <none>
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] server lang: <none>
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] kex follows: False
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:50:00.630 [DEBUG] [Thread-304795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:50:00.631 [DEBUG] [Thread-304795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:50:00.631 [DEBUG] [Thread-304795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:50:00.631 [DEBUG] [Thread-304795] [transport.py] [_log()] Compression: none
2025-12-24T15:50:00.631 [DEBUG] [Thread-304795] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:50:00.685 [DEBUG] [Thread-304795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:50:00.686 [DEBUG] [Thread-304795] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:50:00.686 [DEBUG] [Thread-304795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:50:00.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:50:00.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:50:00.747 [DEBUG] [Thread-304795] [transport.py] [_log()] userauth is OK
2025-12-24T15:50:00.747 [DEBUG] [Thread-304795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:50:00.747 [DEBUG] [Thread-304795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:50:00.747 [DEBUG] [Thread-304795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:50:00.747 [DEBUG] [Thread-304795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:50:00.765 [INFO] [Thread-304795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:50:00.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:50:00.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:50:01.618 [DEBUG] [Thread-304795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:50:01.619 [DEBUG] [Thread-304795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:50:01.665 [DEBUG] [Thread-304795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:50:01.666 [DEBUG] [Thread-304795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:50:01.675 [DEBUG] [Thread-304795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:50:01.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:50:01.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:50:01.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:50:01.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:50:01.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:50:01.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:50:01.715 [DEBUG] [Thread-304795] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:50:03.674 [DEBUG] [Thread-304797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:50:04.000 [DEBUG] [Thread-304798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:50:18.868 [DEBUG] [Thread-304799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:50:27.641 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:50:27.654 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:50:31.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:50:31.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:50:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:50:32.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 50, 8), 21.11, 25.2, 0.0, 19.2, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:50:32.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:50:08
2025-12-24T15:50:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:50:32.892 [DEBUG] [Thread-304800] [transport.py] [_log()] starting thread (client mode): 0xf5752440
2025-12-24T15:50:32.894 [DEBUG] [Thread-304800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:50:32.897 [DEBUG] [Thread-304800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:50:32.897 [INFO] [Thread-304800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] client lang: <none>
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] server lang: <none>
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] kex follows: False
2025-12-24T15:50:32.902 [DEBUG] [Thread-304800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:50:32.903 [DEBUG] [Thread-304800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:50:32.903 [DEBUG] [Thread-304800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:50:32.903 [DEBUG] [Thread-304800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:50:32.903 [DEBUG] [Thread-304800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:50:32.903 [DEBUG] [Thread-304800] [transport.py] [_log()] Compression: none
2025-12-24T15:50:32.903 [DEBUG] [Thread-304800] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:50:32.938 [DEBUG] [Thread-304800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:50:32.942 [DEBUG] [Thread-304800] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:50:32.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:50:32.943 [DEBUG] [Thread-304800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:50:32.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:50:32.946 [DEBUG] [Thread-304800] [transport.py] [_log()] userauth is OK
2025-12-24T15:50:32.946 [DEBUG] [Thread-304800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:50:32.946 [DEBUG] [Thread-304800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:50:32.946 [DEBUG] [Thread-304800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:50:32.947 [DEBUG] [Thread-304800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:50:32.977 [INFO] [Thread-304800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:50:32.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:50:33.604 [DEBUG] [Thread-304800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:50:33.604 [DEBUG] [Thread-304800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:50:33.605 [DEBUG] [Thread-304800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:50:33.646 [DEBUG] [Thread-304800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:50:33.646 [DEBUG] [Thread-304800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:50:33.649 [DEBUG] [Thread-304800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:50:33.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:50:33.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:50:33.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:50:33.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:50:33.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:50:33.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:50:33.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:50:33.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:50:33.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:50:33.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.576456 -999.00  +25.40  17.46     29   +6.30 1 2 1 1 1   888    0 19.11 34.62 ----- 17.5 17.5 170.4 21.5 31.4 -19.3 30.9 -21.9 32.5 -20.3 33.2 -21.2
2025-12-24T15:50:33.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:50:33.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:50:33.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.576456
2025-12-24T15:50:33.686 [DEBUG] [Thread-304800] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:50:33.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:50:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:50:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:50:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:50:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:50:33.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:50:08', tmtdew=21.11, humidity=25.2, cloud=0.0, wind=19.2, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:50:05.798', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:50:33.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:50:33.824 [DEBUG] [Thread-304803] [transport.py] [_log()] starting thread (client mode): 0xf818bf40
2025-12-24T15:50:33.824 [DEBUG] [Thread-304803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:50:33.837 [DEBUG] [Thread-304803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:50:33.838 [INFO] [Thread-304803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] client lang: <none>
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] server lang: <none>
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] kex follows: False
2025-12-24T15:50:33.845 [DEBUG] [Thread-304803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:50:33.846 [DEBUG] [Thread-304803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:50:33.846 [DEBUG] [Thread-304803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:50:33.846 [DEBUG] [Thread-304803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:50:33.846 [DEBUG] [Thread-304803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:50:33.846 [DEBUG] [Thread-304803] [transport.py] [_log()] Compression: none
2025-12-24T15:50:33.846 [DEBUG] [Thread-304803] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:50:33.903 [DEBUG] [Thread-304803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:50:33.905 [DEBUG] [Thread-304803] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:50:33.905 [DEBUG] [Thread-304803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:50:33.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:50:33.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:50:33.946 [DEBUG] [Thread-304805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:50:33.960 [DEBUG] [Thread-304803] [transport.py] [_log()] userauth is OK
2025-12-24T15:50:33.960 [DEBUG] [Thread-304803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:50:33.960 [DEBUG] [Thread-304803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:50:33.960 [DEBUG] [Thread-304803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:50:33.960 [DEBUG] [Thread-304803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:50:33.984 [INFO] [Thread-304803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:50:33.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:50:33.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:50:34.829 [DEBUG] [Thread-304803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:50:34.830 [DEBUG] [Thread-304803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:50:34.876 [DEBUG] [Thread-304803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:50:34.877 [DEBUG] [Thread-304803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:50:34.885 [DEBUG] [Thread-304803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:50:34.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:50:34.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:50:34.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:50:34.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:50:34.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:50:34.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:50:34.923 [DEBUG] [Thread-304803] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:50:49.094 [DEBUG] [Thread-304806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:51:04.180 [DEBUG] [Thread-304807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:51:04.259 [DEBUG] [Thread-304808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:51:04.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:51:04.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:51: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
2025-12-24T15:51:06.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 50, 41), 20.84, 25.78, 0.0, 20.1, 23.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:51:06.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:50:41
2025-12-24T15:51:06.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:51:06.684 [DEBUG] [Thread-304809] [transport.py] [_log()] starting thread (client mode): 0xf81f0970
2025-12-24T15:51:06.685 [DEBUG] [Thread-304809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:51:06.690 [DEBUG] [Thread-304809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:51:06.690 [INFO] [Thread-304809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] client lang: <none>
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] server lang: <none>
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] kex follows: False
2025-12-24T15:51:06.695 [DEBUG] [Thread-304809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:51:06.696 [DEBUG] [Thread-304809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:51:06.696 [DEBUG] [Thread-304809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:51:06.696 [DEBUG] [Thread-304809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:51:06.696 [DEBUG] [Thread-304809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:51:06.696 [DEBUG] [Thread-304809] [transport.py] [_log()] Compression: none
2025-12-24T15:51:06.696 [DEBUG] [Thread-304809] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:51:06.727 [DEBUG] [Thread-304809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:51:06.731 [DEBUG] [Thread-304809] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:51:06.732 [DEBUG] [Thread-304809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:51:06.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:51:06.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:51:06.736 [DEBUG] [Thread-304809] [transport.py] [_log()] userauth is OK
2025-12-24T15:51:06.736 [DEBUG] [Thread-304809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:51:06.736 [DEBUG] [Thread-304809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:51:06.736 [DEBUG] [Thread-304809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:51:06.736 [DEBUG] [Thread-304809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:51:06.753 [INFO] [Thread-304809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:51:06.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:51:07.528 [DEBUG] [Thread-304809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:51:07.528 [DEBUG] [Thread-304809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:51:07.529 [DEBUG] [Thread-304809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:51:07.570 [DEBUG] [Thread-304809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:51:07.570 [DEBUG] [Thread-304809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:51:07.572 [DEBUG] [Thread-304809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:51:07.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:51:07.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:51:07.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:51:07.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:51:07.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:51:07.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:51:07.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:51:07.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:51:07.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:51:07.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.576804 -999.00  +25.20  15.88     29   +6.10 1 2 1 1 1   888    0 19.33 39.09 ----- 15.9 15.9 184.8 21.9 31.4 -20.8 30.6 -24.8 32.6 -20.7 33.3 -20.2
2025-12-24T15:51:07.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:51:07.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:51:07.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.576804
2025-12-24T15:51:07.601 [DEBUG] [Thread-304809] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:51:07.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:51:07.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:51:07.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:51:07.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:51:07.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:51:07.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:50:41', tmtdew=20.84, humidity=25.78, cloud=0.0, wind=20.1, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:50:35.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:51:07.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:51:07.704 [DEBUG] [Thread-304812] [transport.py] [_log()] starting thread (client mode): 0xf81c3910
2025-12-24T15:51:07.704 [DEBUG] [Thread-304812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:51:07.719 [DEBUG] [Thread-304812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:51:07.719 [INFO] [Thread-304812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] client lang: <none>
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] server lang: <none>
2025-12-24T15:51:07.726 [DEBUG] [Thread-304812] [transport.py] [_log()] kex follows: False
2025-12-24T15:51:07.727 [DEBUG] [Thread-304812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:51:07.727 [DEBUG] [Thread-304812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:51:07.727 [DEBUG] [Thread-304812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:51:07.727 [DEBUG] [Thread-304812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:51:07.727 [DEBUG] [Thread-304812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:51:07.727 [DEBUG] [Thread-304812] [transport.py] [_log()] Compression: none
2025-12-24T15:51:07.727 [DEBUG] [Thread-304812] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:51:07.786 [DEBUG] [Thread-304812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:51:07.786 [DEBUG] [Thread-304812] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:51:07.786 [DEBUG] [Thread-304812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:51:07.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:51:07.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:51:07.847 [DEBUG] [Thread-304812] [transport.py] [_log()] userauth is OK
2025-12-24T15:51:07.847 [DEBUG] [Thread-304812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:51:07.847 [DEBUG] [Thread-304812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:51:07.847 [DEBUG] [Thread-304812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:51:07.847 [DEBUG] [Thread-304812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:51:07.865 [INFO] [Thread-304812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:51:07.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:51:07.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:51:08.718 [DEBUG] [Thread-304812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:51:08.718 [DEBUG] [Thread-304812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:51:08.765 [DEBUG] [Thread-304812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:51:08.765 [DEBUG] [Thread-304812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:51:08.773 [DEBUG] [Thread-304812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:51:08.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:51:08.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:51:08.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:51:08.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:51:08.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:51:08.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:51:08.806 [DEBUG] [Thread-304812] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:51:19.270 [DEBUG] [Thread-304814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:51:27.797 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:51:27.800 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:51:34.373 [DEBUG] [Thread-304815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:51:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:51:38.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:51:38.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
2025-12-24T15:51:40.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 51, 14), 20.75, 25.95, 0.0, 19.45, 23.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:51:40.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:51:14
2025-12-24T15:51:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:51:40.517 [DEBUG] [Thread-304816] [transport.py] [_log()] starting thread (client mode): 0xf818bf40
2025-12-24T15:51:40.518 [DEBUG] [Thread-304816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:51:40.531 [DEBUG] [Thread-304816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:51:40.531 [INFO] [Thread-304816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:51:40.535 [DEBUG] [Thread-304816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] client lang: <none>
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] server lang: <none>
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] kex follows: False
2025-12-24T15:51:40.536 [DEBUG] [Thread-304816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:51:40.537 [DEBUG] [Thread-304816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:51:40.537 [DEBUG] [Thread-304816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:51:40.537 [DEBUG] [Thread-304816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:51:40.537 [DEBUG] [Thread-304816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:51:40.538 [DEBUG] [Thread-304816] [transport.py] [_log()] Compression: none
2025-12-24T15:51:40.538 [DEBUG] [Thread-304816] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:51:40.573 [DEBUG] [Thread-304816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:51:40.578 [DEBUG] [Thread-304816] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:51:40.580 [DEBUG] [Thread-304816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:51:40.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:51:40.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:51:40.586 [DEBUG] [Thread-304816] [transport.py] [_log()] userauth is OK
2025-12-24T15:51:40.587 [DEBUG] [Thread-304816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:51:40.587 [DEBUG] [Thread-304816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:51:40.587 [DEBUG] [Thread-304816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:51:40.587 [DEBUG] [Thread-304816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:51:40.610 [INFO] [Thread-304816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:51:40.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:51:41.256 [DEBUG] [Thread-304816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:51:41.258 [DEBUG] [Thread-304816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:51:41.259 [DEBUG] [Thread-304816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:51:41.298 [DEBUG] [Thread-304816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:51:41.299 [DEBUG] [Thread-304816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:51:41.303 [DEBUG] [Thread-304816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:51:41.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:51:41.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:51:41.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:51:41.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:51:41.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:51:41.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:51:41.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:51:41.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:51:41.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:51:41.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.577151 -999.00  +25.00  11.00     29   +6.00 1 1 1 1 1   888    0 19.60 41.60 ----- 11.0 11.0 177.8 19.1 31.1 -21.7 30.4 -27.5 32.5 -21.3 33.0 -23.9
2025-12-24T15:51:41.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:51:41.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:51:41.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.577151
2025-12-24T15:51:41.340 [DEBUG] [Thread-304816] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:51:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:51:41.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:51:41.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:51:41.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:51:41.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T15:51:41.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:51:14', tmtdew=20.75, humidity=25.95, cloud=0.0, wind=19.45, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:51:05.846', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:51:41.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:51:41.432 [DEBUG] [Thread-304819] [transport.py] [_log()] starting thread (client mode): 0xf81f13c0
2025-12-24T15:51:41.432 [DEBUG] [Thread-304819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:51:41.447 [DEBUG] [Thread-304819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:51:41.447 [INFO] [Thread-304819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:51:41.454 [DEBUG] [Thread-304819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:51:41.454 [DEBUG] [Thread-304819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:51:41.454 [DEBUG] [Thread-304819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:51:41.454 [DEBUG] [Thread-304819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:51:41.454 [DEBUG] [Thread-304819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] client lang: <none>
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] server lang: <none>
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] kex follows: False
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] Compression: none
2025-12-24T15:51:41.455 [DEBUG] [Thread-304819] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:51:41.511 [DEBUG] [Thread-304819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:51:41.512 [DEBUG] [Thread-304819] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:51:41.512 [DEBUG] [Thread-304819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:51:41.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:51:41.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:51:41.571 [DEBUG] [Thread-304819] [transport.py] [_log()] userauth is OK
2025-12-24T15:51:41.571 [DEBUG] [Thread-304819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:51:41.571 [DEBUG] [Thread-304819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:51:41.571 [DEBUG] [Thread-304819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:51:41.571 [DEBUG] [Thread-304819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:51:41.585 [INFO] [Thread-304819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:51:41.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:51:41.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:51:42.405 [DEBUG] [Thread-304819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:51:42.405 [DEBUG] [Thread-304819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:51:42.453 [DEBUG] [Thread-304819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:51:42.453 [DEBUG] [Thread-304819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:51:42.464 [DEBUG] [Thread-304819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:51:42.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:51:42.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:51:42.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:51:42.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:51:42.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:51:42.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:51:42.501 [DEBUG] [Thread-304819] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:51:49.425 [DEBUG] [Thread-304821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:52:04.572 [DEBUG] [Thread-304823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:52:04.567 [DEBUG] [Thread-304822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:52:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:52:12.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:52:12.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:52:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 51, 47), 20.82, 25.88, 0.0, 13.76, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:52:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:51:47
2025-12-24T15:52:14.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:52:14.550 [DEBUG] [Thread-304824] [transport.py] [_log()] starting thread (client mode): 0xf572ea70
2025-12-24T15:52:14.551 [DEBUG] [Thread-304824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:52:14.564 [DEBUG] [Thread-304824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:52:14.565 [INFO] [Thread-304824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] client lang: <none>
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] server lang: <none>
2025-12-24T15:52:14.569 [DEBUG] [Thread-304824] [transport.py] [_log()] kex follows: False
2025-12-24T15:52:14.570 [DEBUG] [Thread-304824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:52:14.570 [DEBUG] [Thread-304824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:52:14.570 [DEBUG] [Thread-304824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:52:14.570 [DEBUG] [Thread-304824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:52:14.570 [DEBUG] [Thread-304824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:52:14.570 [DEBUG] [Thread-304824] [transport.py] [_log()] Compression: none
2025-12-24T15:52:14.570 [DEBUG] [Thread-304824] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:52:14.604 [DEBUG] [Thread-304824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:52:14.608 [DEBUG] [Thread-304824] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:52:14.610 [DEBUG] [Thread-304824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:52:14.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:52:14.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:52:14.614 [DEBUG] [Thread-304824] [transport.py] [_log()] userauth is OK
2025-12-24T15:52:14.614 [DEBUG] [Thread-304824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:52:14.614 [DEBUG] [Thread-304824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:52:14.615 [DEBUG] [Thread-304824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:52:14.615 [DEBUG] [Thread-304824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:52:14.640 [INFO] [Thread-304824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:52:14.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:52:15.435 [DEBUG] [Thread-304824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:52:15.436 [DEBUG] [Thread-304824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:52:15.447 [DEBUG] [Thread-304824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:52:15.477 [DEBUG] [Thread-304824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:52:15.478 [DEBUG] [Thread-304824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:52:15.481 [DEBUG] [Thread-304824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:52:15.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:52:15.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:52:15.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:52:15.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:52:15.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:52:15.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:52:15.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:52:15.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:52:15.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:52:15.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.577498 -999.00  +24.80  12.36     29   +5.90 1 2 1 1 1   888    0 19.47 45.79 ----- 12.4 12.4 189.6 16.9 31.3 -18.8 30.7 -20.0 32.2 -22.6 33.0 -20.3
2025-12-24T15:52:15.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:52:15.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:52:15.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.577498
2025-12-24T15:52:15.509 [DEBUG] [Thread-304824] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:52:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:52:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:52:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:52:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:52:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:52:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:51:47', tmtdew=20.82, humidity=25.88, cloud=0.0, wind=13.76, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:51:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:52:15.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:52:15.628 [DEBUG] [Thread-304827] [transport.py] [_log()] starting thread (client mode): 0xf81e7c10
2025-12-24T15:52:15.628 [DEBUG] [Thread-304827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:52:15.642 [DEBUG] [Thread-304827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:52:15.643 [INFO] [Thread-304827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] client lang: <none>
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] server lang: <none>
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] kex follows: False
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:52:15.650 [DEBUG] [Thread-304827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:52:15.651 [DEBUG] [Thread-304827] [transport.py] [_log()] Compression: none
2025-12-24T15:52:15.651 [DEBUG] [Thread-304827] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:52:15.711 [DEBUG] [Thread-304827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:52:15.712 [DEBUG] [Thread-304827] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:52:15.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:52:15.722 [DEBUG] [Thread-304827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:52:15.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:52:15.767 [DEBUG] [Thread-304827] [transport.py] [_log()] userauth is OK
2025-12-24T15:52:15.768 [DEBUG] [Thread-304827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:52:15.768 [DEBUG] [Thread-304827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:52:15.768 [DEBUG] [Thread-304827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:52:15.768 [DEBUG] [Thread-304827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:52:15.793 [INFO] [Thread-304827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:52:15.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:52:15.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:52:16.622 [DEBUG] [Thread-304827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:52:16.623 [DEBUG] [Thread-304827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:52:16.670 [DEBUG] [Thread-304827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:52:16.670 [DEBUG] [Thread-304827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:52:16.681 [DEBUG] [Thread-304827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:52:16.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:52:16.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:52:16.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:52:16.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:52:16.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:52:16.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:52:16.723 [DEBUG] [Thread-304827] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:52:19.633 [DEBUG] [Thread-304829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:52:27.948 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:52:27.953 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:52:34.772 [DEBUG] [Thread-304830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:52:46.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:52:46.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:52:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:52:48.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 52, 20), 20.81, 25.9, 0.0, 14.75, 23.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:52:48.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:52:20
2025-12-24T15:52:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:52:48.640 [DEBUG] [Thread-304831] [transport.py] [_log()] starting thread (client mode): 0xf818ae90
2025-12-24T15:52:48.641 [DEBUG] [Thread-304831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:52:48.649 [DEBUG] [Thread-304831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:52:48.649 [INFO] [Thread-304831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:52:48.654 [DEBUG] [Thread-304831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:52:48.654 [DEBUG] [Thread-304831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:52:48.654 [DEBUG] [Thread-304831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:52:48.654 [DEBUG] [Thread-304831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] client lang: <none>
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] server lang: <none>
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] kex follows: False
2025-12-24T15:52:48.655 [DEBUG] [Thread-304831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:52:48.656 [DEBUG] [Thread-304831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:52:48.656 [DEBUG] [Thread-304831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:52:48.656 [DEBUG] [Thread-304831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:52:48.656 [DEBUG] [Thread-304831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:52:48.656 [DEBUG] [Thread-304831] [transport.py] [_log()] Compression: none
2025-12-24T15:52:48.656 [DEBUG] [Thread-304831] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:52:48.696 [DEBUG] [Thread-304831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:52:48.701 [DEBUG] [Thread-304831] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:52:48.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:52:48.704 [DEBUG] [Thread-304831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:52:48.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:52:48.707 [DEBUG] [Thread-304831] [transport.py] [_log()] userauth is OK
2025-12-24T15:52:48.708 [DEBUG] [Thread-304831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:52:48.708 [DEBUG] [Thread-304831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:52:48.708 [DEBUG] [Thread-304831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:52:48.708 [DEBUG] [Thread-304831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:52:48.736 [INFO] [Thread-304831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:52:48.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:52:49.376 [DEBUG] [Thread-304831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:52:49.385 [DEBUG] [Thread-304831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:52:49.386 [DEBUG] [Thread-304831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:52:49.417 [DEBUG] [Thread-304831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:52:49.418 [DEBUG] [Thread-304831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:52:49.421 [DEBUG] [Thread-304831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:52:49.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:52:49.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:52:49.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:52:49.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:52:49.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:52:49.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:52:49.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:52:49.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:52:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:52:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.577845 -999.00  +24.90  13.87     30   +6.10 1 2 1 1 1   888    0 19.75 45.72 ----- 13.9 13.9 188.4 15.2 31.4 -19.3 30.6 -24.8 32.6 -19.0 33.2 -21.5
2025-12-24T15:52:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:52:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:52:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.577845
2025-12-24T15:52:49.460 [DEBUG] [Thread-304831] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:52:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:52:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:52:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:52:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:52:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:52:49.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:52:20', tmtdew=20.81, humidity=25.9, cloud=0.0, wind=14.75, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:52:05.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:52:49.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:52:49.589 [DEBUG] [Thread-304834] [transport.py] [_log()] starting thread (client mode): 0xf81c2530
2025-12-24T15:52:49.589 [DEBUG] [Thread-304834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:52:49.603 [DEBUG] [Thread-304834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:52:49.603 [INFO] [Thread-304834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:52:49.611 [DEBUG] [Thread-304834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] client lang: <none>
2025-12-24T15:52:49.612 [DEBUG] [Thread-304834] [transport.py] [_log()] server lang: <none>
2025-12-24T15:52:49.613 [DEBUG] [Thread-304834] [transport.py] [_log()] kex follows: False
2025-12-24T15:52:49.613 [DEBUG] [Thread-304834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:52:49.613 [DEBUG] [Thread-304834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:52:49.613 [DEBUG] [Thread-304834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:52:49.613 [DEBUG] [Thread-304834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:52:49.614 [DEBUG] [Thread-304834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:52:49.614 [DEBUG] [Thread-304834] [transport.py] [_log()] Compression: none
2025-12-24T15:52:49.614 [DEBUG] [Thread-304834] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:52:49.678 [DEBUG] [Thread-304834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:52:49.679 [DEBUG] [Thread-304834] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:52:49.680 [DEBUG] [Thread-304834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:52:49.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:52:49.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:52:49.737 [DEBUG] [Thread-304834] [transport.py] [_log()] userauth is OK
2025-12-24T15:52:49.737 [DEBUG] [Thread-304834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:52:49.737 [DEBUG] [Thread-304834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:52:49.737 [DEBUG] [Thread-304834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:52:49.737 [DEBUG] [Thread-304834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:52:49.776 [INFO] [Thread-304834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:52:49.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:52:49.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:52:49.866 [DEBUG] [Thread-304836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:52:50.599 [DEBUG] [Thread-304834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:52:50.599 [DEBUG] [Thread-304834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:52:50.647 [DEBUG] [Thread-304834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:52:50.648 [DEBUG] [Thread-304834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:52:50.657 [DEBUG] [Thread-304834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:52:50.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:52:50.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:52:50.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:52:50.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:52:50.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:52:50.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:52:50.691 [DEBUG] [Thread-304834] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:53:04.912 [DEBUG] [Thread-304837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:53:05.026 [DEBUG] [Thread-304838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:53:20.130 [DEBUG] [Thread-304839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:53:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:53:20.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:53:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:53:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 52, 54), 20.89, 25.36, 0.0, 15.69, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:53:21.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:52:54
2025-12-24T15:53:21.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:53:22.091 [DEBUG] [Thread-304840] [transport.py] [_log()] starting thread (client mode): 0xf81f2d40
2025-12-24T15:53:22.091 [DEBUG] [Thread-304840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:53:22.103 [DEBUG] [Thread-304840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:53:22.103 [INFO] [Thread-304840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] client lang: <none>
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] server lang: <none>
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] kex follows: False
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:53:22.110 [DEBUG] [Thread-304840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:53:22.111 [DEBUG] [Thread-304840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:53:22.111 [DEBUG] [Thread-304840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:53:22.111 [DEBUG] [Thread-304840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:53:22.111 [DEBUG] [Thread-304840] [transport.py] [_log()] Compression: none
2025-12-24T15:53:22.111 [DEBUG] [Thread-304840] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:53:22.145 [DEBUG] [Thread-304840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:53:22.149 [DEBUG] [Thread-304840] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:53:22.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:53:22.151 [DEBUG] [Thread-304840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:53:22.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:53:22.155 [DEBUG] [Thread-304840] [transport.py] [_log()] userauth is OK
2025-12-24T15:53:22.155 [DEBUG] [Thread-304840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:53:22.155 [DEBUG] [Thread-304840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:53:22.155 [DEBUG] [Thread-304840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:53:22.155 [DEBUG] [Thread-304840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:53:22.175 [INFO] [Thread-304840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:53:22.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:53:22.851 [DEBUG] [Thread-304840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:53:22.851 [DEBUG] [Thread-304840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:53:22.863 [DEBUG] [Thread-304840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:53:22.892 [DEBUG] [Thread-304840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:53:22.893 [DEBUG] [Thread-304840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:53:22.895 [DEBUG] [Thread-304840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:53:22.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:53:22.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:53:22.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:53:22.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:53:22.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:53:22.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:53:22.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:53:22.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:53:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:53:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.578193 -999.00  +25.00  12.41     29   +6.20 1 2 1 1 1   888    0 19.40 46.45 ----- 12.4 12.4 159.8 15.9 31.6 -18.6 31.1 -19.2 32.5 -19.7 33.4 -19.3
2025-12-24T15:53:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:53:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:53:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.578193
2025-12-24T15:53:22.927 [DEBUG] [Thread-304840] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:53:22.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:53:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:53:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:53:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:53:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:53:22.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:52:54', tmtdew=20.89, humidity=25.36, cloud=0.0, wind=15.69, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:52:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:53:23.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:53:23.039 [DEBUG] [Thread-304843] [transport.py] [_log()] starting thread (client mode): 0xf81f1db0
2025-12-24T15:53:23.039 [DEBUG] [Thread-304843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:53:23.054 [DEBUG] [Thread-304843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:53:23.054 [INFO] [Thread-304843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] client lang: <none>
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] server lang: <none>
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] kex follows: False
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] Compression: none
2025-12-24T15:53:23.061 [DEBUG] [Thread-304843] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:53:23.117 [DEBUG] [Thread-304843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:53:23.117 [DEBUG] [Thread-304843] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:53:23.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:53:23.118 [DEBUG] [Thread-304843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:53:23.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:53:23.177 [DEBUG] [Thread-304843] [transport.py] [_log()] userauth is OK
2025-12-24T15:53:23.177 [DEBUG] [Thread-304843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:53:23.177 [DEBUG] [Thread-304843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:53:23.177 [DEBUG] [Thread-304843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:53:23.177 [DEBUG] [Thread-304843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:53:23.190 [INFO] [Thread-304843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:53:23.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:53:23.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:53:24.026 [DEBUG] [Thread-304843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:53:24.026 [DEBUG] [Thread-304843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:53:24.072 [DEBUG] [Thread-304843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:53:24.072 [DEBUG] [Thread-304843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:53:24.081 [DEBUG] [Thread-304843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:53:24.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:53:24.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:53:24.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:53:24.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:53:24.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:53:24.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:53:24.114 [DEBUG] [Thread-304843] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:53:28.098 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:53:28.102 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:53:35.221 [DEBUG] [Thread-304845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:53:50.376 [DEBUG] [Thread-304846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:53:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:53:54.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:53:54.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
2025-12-24T15:53:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 53, 28), 21.07, 25.1, 0.0, 17.26, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:53:55.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:53:28
2025-12-24T15:53:55.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:53:55.864 [DEBUG] [Thread-304847] [transport.py] [_log()] starting thread (client mode): 0xf81f0460
2025-12-24T15:53:55.865 [DEBUG] [Thread-304847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:53:55.881 [DEBUG] [Thread-304847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:53:55.881 [INFO] [Thread-304847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:53:55.885 [DEBUG] [Thread-304847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] client lang: <none>
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] server lang: <none>
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] kex follows: False
2025-12-24T15:53:55.886 [DEBUG] [Thread-304847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:53:55.887 [DEBUG] [Thread-304847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:53:55.887 [DEBUG] [Thread-304847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:53:55.887 [DEBUG] [Thread-304847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:53:55.887 [DEBUG] [Thread-304847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:53:55.887 [DEBUG] [Thread-304847] [transport.py] [_log()] Compression: none
2025-12-24T15:53:55.887 [DEBUG] [Thread-304847] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:53:55.922 [DEBUG] [Thread-304847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:53:55.927 [DEBUG] [Thread-304847] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:53:55.929 [DEBUG] [Thread-304847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:53:55.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:53:55.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:53:55.935 [DEBUG] [Thread-304847] [transport.py] [_log()] userauth is OK
2025-12-24T15:53:55.935 [DEBUG] [Thread-304847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:53:55.936 [DEBUG] [Thread-304847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:53:55.936 [DEBUG] [Thread-304847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:53:55.936 [DEBUG] [Thread-304847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:53:55.974 [INFO] [Thread-304847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:53:55.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:53:56.607 [DEBUG] [Thread-304847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:53:56.608 [DEBUG] [Thread-304847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:53:56.609 [DEBUG] [Thread-304847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:53:56.649 [DEBUG] [Thread-304847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:53:56.649 [DEBUG] [Thread-304847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:53:56.653 [DEBUG] [Thread-304847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:53:56.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:53:56.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:53:56.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:53:56.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:53:56.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:53:56.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:53:56.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:53:56.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:53:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:53:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.578540 -999.00  +25.10  11.92     29   +5.90 1 2 1 1 1   888    0 19.71 52.83 ----- 11.9 11.9 148.0 19.5 31.7 -18.6 31.2 -19.7 32.9 -20.0 33.6 -19.6
2025-12-24T15:53:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:53:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:53:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.578540
2025-12-24T15:53:56.692 [DEBUG] [Thread-304847] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:53:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:53:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:53:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:53:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:53:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:53:56.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:53:28', tmtdew=21.07, humidity=25.1, cloud=0.0, wind=17.26, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:53:05.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:53:56.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:53:56.814 [DEBUG] [Thread-304850] [transport.py] [_log()] starting thread (client mode): 0xf818ba30
2025-12-24T15:53:56.814 [DEBUG] [Thread-304850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:53:56.828 [DEBUG] [Thread-304850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:53:56.829 [INFO] [Thread-304850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:53:56.836 [DEBUG] [Thread-304850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:53:56.836 [DEBUG] [Thread-304850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:53:56.836 [DEBUG] [Thread-304850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] client lang: <none>
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] server lang: <none>
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] kex follows: False
2025-12-24T15:53:56.837 [DEBUG] [Thread-304850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:53:56.838 [DEBUG] [Thread-304850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:53:56.838 [DEBUG] [Thread-304850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:53:56.838 [DEBUG] [Thread-304850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:53:56.838 [DEBUG] [Thread-304850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:53:56.838 [DEBUG] [Thread-304850] [transport.py] [_log()] Compression: none
2025-12-24T15:53:56.838 [DEBUG] [Thread-304850] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:53:56.895 [DEBUG] [Thread-304850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:53:56.896 [DEBUG] [Thread-304850] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:53:56.897 [DEBUG] [Thread-304850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:53:56.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:53:56.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:53:56.951 [DEBUG] [Thread-304850] [transport.py] [_log()] userauth is OK
2025-12-24T15:53:56.951 [DEBUG] [Thread-304850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:53:56.951 [DEBUG] [Thread-304850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:53:56.951 [DEBUG] [Thread-304850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:53:56.951 [DEBUG] [Thread-304850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:53:56.964 [INFO] [Thread-304850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:53:56.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:53:56.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:53:57.773 [DEBUG] [Thread-304850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:53:57.773 [DEBUG] [Thread-304850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:53:57.820 [DEBUG] [Thread-304850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:53:57.821 [DEBUG] [Thread-304850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:53:57.829 [DEBUG] [Thread-304850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:53:57.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:53:57.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:53:57.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:53:57.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:53:57.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:53:57.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:53:57.865 [DEBUG] [Thread-304850] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:54:05.189 [DEBUG] [Thread-304852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:54:05.453 [DEBUG] [Thread-304853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:54:20.622 [DEBUG] [Thread-304854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:54:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:54:27.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:54:27.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:54:28.247 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:54:28.249 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:54:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 54), 21.59, 24.32, 0.0, 12.4, 24.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:54:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:54:00
2025-12-24T15:54:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:54:29.736 [DEBUG] [Thread-304855] [transport.py] [_log()] starting thread (client mode): 0xf5751360
2025-12-24T15:54:29.737 [DEBUG] [Thread-304855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:54:29.748 [DEBUG] [Thread-304855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:54:29.748 [INFO] [Thread-304855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:54:29.753 [DEBUG] [Thread-304855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] client lang: <none>
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] server lang: <none>
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] kex follows: False
2025-12-24T15:54:29.754 [DEBUG] [Thread-304855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:54:29.755 [DEBUG] [Thread-304855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:54:29.755 [DEBUG] [Thread-304855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:54:29.755 [DEBUG] [Thread-304855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:54:29.755 [DEBUG] [Thread-304855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:54:29.756 [DEBUG] [Thread-304855] [transport.py] [_log()] Compression: none
2025-12-24T15:54:29.756 [DEBUG] [Thread-304855] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:54:29.793 [DEBUG] [Thread-304855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:54:29.798 [DEBUG] [Thread-304855] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:54:29.800 [DEBUG] [Thread-304855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:54:29.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:54:29.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:54:29.806 [DEBUG] [Thread-304855] [transport.py] [_log()] userauth is OK
2025-12-24T15:54:29.806 [DEBUG] [Thread-304855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:54:29.807 [DEBUG] [Thread-304855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:54:29.807 [DEBUG] [Thread-304855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:54:29.807 [DEBUG] [Thread-304855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:54:29.834 [INFO] [Thread-304855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:54:29.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:54:30.475 [DEBUG] [Thread-304855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:54:30.476 [DEBUG] [Thread-304855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:54:30.477 [DEBUG] [Thread-304855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:54:30.517 [DEBUG] [Thread-304855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:54:30.517 [DEBUG] [Thread-304855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:54:30.520 [DEBUG] [Thread-304855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:54:30.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:54:30.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:54:30.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:54:30.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:54:30.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:54:30.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:54:30.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:54:30.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:54:30.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:54:30.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.578887 -999.00  +24.80  10.63     29   +5.70 1 2 1 1 1   888    0 20.21 58.59 ----- 10.6 10.6 168.8 14.9 31.8 -18.8 31.4 -20.7 32.9 -20.9 33.7 -19.6
2025-12-24T15:54:30.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:54:30.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:54:30.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.578887
2025-12-24T15:54:30.553 [DEBUG] [Thread-304855] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:54:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:54:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:54:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:54:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:54:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:54:30.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:54:00', tmtdew=21.59, humidity=24.32, cloud=0.0, wind=12.4, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:53:35.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:54:30.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:54:30.662 [DEBUG] [Thread-304858] [transport.py] [_log()] starting thread (client mode): 0xf57525c0
2025-12-24T15:54:30.663 [DEBUG] [Thread-304858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:54:30.677 [DEBUG] [Thread-304858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:54:30.677 [INFO] [Thread-304858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:54:30.684 [DEBUG] [Thread-304858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] client lang: <none>
2025-12-24T15:54:30.685 [DEBUG] [Thread-304858] [transport.py] [_log()] server lang: <none>
2025-12-24T15:54:30.686 [DEBUG] [Thread-304858] [transport.py] [_log()] kex follows: False
2025-12-24T15:54:30.686 [DEBUG] [Thread-304858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:54:30.686 [DEBUG] [Thread-304858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:54:30.686 [DEBUG] [Thread-304858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:54:30.686 [DEBUG] [Thread-304858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:54:30.686 [DEBUG] [Thread-304858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:54:30.686 [DEBUG] [Thread-304858] [transport.py] [_log()] Compression: none
2025-12-24T15:54:30.687 [DEBUG] [Thread-304858] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:54:30.747 [DEBUG] [Thread-304858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:54:30.748 [DEBUG] [Thread-304858] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:54:30.748 [DEBUG] [Thread-304858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:54:30.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:54:30.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:54:30.803 [DEBUG] [Thread-304858] [transport.py] [_log()] userauth is OK
2025-12-24T15:54:30.803 [DEBUG] [Thread-304858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:54:30.803 [DEBUG] [Thread-304858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:54:30.803 [DEBUG] [Thread-304858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:54:30.803 [DEBUG] [Thread-304858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:54:30.821 [INFO] [Thread-304858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:54:30.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:54:30.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:54:31.649 [DEBUG] [Thread-304858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:54:31.649 [DEBUG] [Thread-304858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:54:31.697 [DEBUG] [Thread-304858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:54:31.697 [DEBUG] [Thread-304858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:54:31.706 [DEBUG] [Thread-304858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:54:31.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:54: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')
2025-12-24T15:54:31.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
2025-12-24T15:54:31.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:54:31.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:54:31.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:54:31.739 [DEBUG] [Thread-304858] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:54:35.751 [DEBUG] [Thread-304860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:54:50.879 [DEBUG] [Thread-304861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:55:01.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:55:01.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:55:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:55:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 54, 34), 21.58, 24.32, 0.0, 5.81, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:55:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:54:34
2025-12-24T15:55:03.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:55:04.058 [DEBUG] [Thread-304862] [transport.py] [_log()] starting thread (client mode): 0xf81e5a20
2025-12-24T15:55:04.059 [DEBUG] [Thread-304862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:55:04.060 [DEBUG] [Thread-304862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:55:04.060 [INFO] [Thread-304862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:55:04.065 [DEBUG] [Thread-304862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:55:04.065 [DEBUG] [Thread-304862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:55:04.065 [DEBUG] [Thread-304862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:55:04.065 [DEBUG] [Thread-304862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:55:04.065 [DEBUG] [Thread-304862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:55:04.065 [DEBUG] [Thread-304862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:55:04.065 [DEBUG] [Thread-304862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:55:04.065 [DEBUG] [Thread-304862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:55:04.066 [DEBUG] [Thread-304862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:55:04.066 [DEBUG] [Thread-304862] [transport.py] [_log()] client lang: <none>
2025-12-24T15:55:04.066 [DEBUG] [Thread-304862] [transport.py] [_log()] server lang: <none>
2025-12-24T15:55:04.066 [DEBUG] [Thread-304862] [transport.py] [_log()] kex follows: False
2025-12-24T15:55:04.066 [DEBUG] [Thread-304862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:55:04.067 [DEBUG] [Thread-304862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:55:04.067 [DEBUG] [Thread-304862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:55:04.067 [DEBUG] [Thread-304862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:55:04.067 [DEBUG] [Thread-304862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:55:04.067 [DEBUG] [Thread-304862] [transport.py] [_log()] Compression: none
2025-12-24T15:55:04.067 [DEBUG] [Thread-304862] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:55:04.101 [DEBUG] [Thread-304862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:55:04.103 [DEBUG] [Thread-304862] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:55:04.105 [DEBUG] [Thread-304862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:55:04.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:55:04.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:55:04.109 [DEBUG] [Thread-304862] [transport.py] [_log()] userauth is OK
2025-12-24T15:55:04.109 [DEBUG] [Thread-304862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:55:04.109 [DEBUG] [Thread-304862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:55:04.109 [DEBUG] [Thread-304862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:55:04.109 [DEBUG] [Thread-304862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:55:04.128 [INFO] [Thread-304862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:55:04.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:55:04.955 [DEBUG] [Thread-304862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:55:04.955 [DEBUG] [Thread-304862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:55:04.956 [DEBUG] [Thread-304862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:55:04.998 [DEBUG] [Thread-304862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:55:04.998 [DEBUG] [Thread-304862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:55:05.002 [DEBUG] [Thread-304862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:55:05.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:55:05.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:55:05.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:55:05.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:55:05.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:55:05.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:55:05.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:55:05.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:55:05.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:55:05.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.579234 -999.00  +24.70   7.92     29   +5.70 1 2 1 1 1   888    0 20.33 56.91 ----- 7.9 7.9 174.6 12.6 31.9 -19.0 31.5 -20.7 33.1 -19.8 33.8 -19.3
2025-12-24T15:55:05.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:55:05.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:55:05.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.579234
2025-12-24T15:55:05.057 [DEBUG] [Thread-304862] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:55:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:55:05.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:55:05.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:55:05.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:55:05.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:55:05.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:54:34', tmtdew=21.58, humidity=24.32, cloud=0.0, wind=5.81, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:54:05.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:55:05.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:55:05.173 [DEBUG] [Thread-304865] [transport.py] [_log()] starting thread (client mode): 0xf81e7b50
2025-12-24T15:55:05.173 [DEBUG] [Thread-304865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:55:05.189 [DEBUG] [Thread-304865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:55:05.190 [INFO] [Thread-304865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:55:05.201 [DEBUG] [Thread-304865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:55:05.201 [DEBUG] [Thread-304865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:55:05.201 [DEBUG] [Thread-304865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:55:05.201 [DEBUG] [Thread-304865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:55:05.201 [DEBUG] [Thread-304865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:55:05.201 [DEBUG] [Thread-304865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:55:05.202 [DEBUG] [Thread-304865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:55:05.202 [DEBUG] [Thread-304865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:55:05.202 [DEBUG] [Thread-304865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:55:05.202 [DEBUG] [Thread-304865] [transport.py] [_log()] client lang: <none>
2025-12-24T15:55:05.202 [DEBUG] [Thread-304865] [transport.py] [_log()] server lang: <none>
2025-12-24T15:55:05.202 [DEBUG] [Thread-304865] [transport.py] [_log()] kex follows: False
2025-12-24T15:55:05.202 [DEBUG] [Thread-304865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:55:05.202 [DEBUG] [Thread-304865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:55:05.203 [DEBUG] [Thread-304865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:55:05.203 [DEBUG] [Thread-304865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:55:05.203 [DEBUG] [Thread-304865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:55:05.203 [DEBUG] [Thread-304865] [transport.py] [_log()] Compression: none
2025-12-24T15:55:05.203 [DEBUG] [Thread-304865] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:55:05.265 [DEBUG] [Thread-304865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:55:05.266 [DEBUG] [Thread-304865] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:55:05.267 [DEBUG] [Thread-304865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:55:05.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:55:05.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:55:05.333 [DEBUG] [Thread-304865] [transport.py] [_log()] userauth is OK
2025-12-24T15:55:05.334 [DEBUG] [Thread-304865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:55:05.334 [DEBUG] [Thread-304865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:55:05.334 [DEBUG] [Thread-304865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:55:05.334 [DEBUG] [Thread-304865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:55:05.357 [INFO] [Thread-304865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:55:05.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:55:05.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:55:05.510 [DEBUG] [Thread-304867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:55:05.941 [DEBUG] [Thread-304868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:55:06.213 [DEBUG] [Thread-304865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:55:06.214 [DEBUG] [Thread-304865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:55:06.265 [DEBUG] [Thread-304865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:55:06.265 [DEBUG] [Thread-304865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:55:06.276 [DEBUG] [Thread-304865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:55:06.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:55:06.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')
2025-12-24T15:55:06.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:55:06.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:55:06.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:55:06.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:55:06.320 [DEBUG] [Thread-304865] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:55:21.075 [DEBUG] [Thread-304869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:55:28.391 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:55:28.393 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:55:36.207 [DEBUG] [Thread-304870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:55:36.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:55:36.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:55:36.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:55:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 55, 7), 21.5, 24.45, 0.0, 6.81, 24.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:55:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:55:07
2025-12-24T15:55:37.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:55:37.611 [DEBUG] [Thread-304871] [transport.py] [_log()] starting thread (client mode): 0xf5752cb0
2025-12-24T15:55:37.612 [DEBUG] [Thread-304871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:55:37.627 [DEBUG] [Thread-304871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:55:37.627 [INFO] [Thread-304871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] client lang: <none>
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] server lang: <none>
2025-12-24T15:55:37.632 [DEBUG] [Thread-304871] [transport.py] [_log()] kex follows: False
2025-12-24T15:55:37.633 [DEBUG] [Thread-304871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:55:37.633 [DEBUG] [Thread-304871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:55:37.633 [DEBUG] [Thread-304871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:55:37.633 [DEBUG] [Thread-304871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:55:37.633 [DEBUG] [Thread-304871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:55:37.633 [DEBUG] [Thread-304871] [transport.py] [_log()] Compression: none
2025-12-24T15:55:37.633 [DEBUG] [Thread-304871] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:55:37.667 [DEBUG] [Thread-304871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:55:37.670 [DEBUG] [Thread-304871] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:55:37.671 [DEBUG] [Thread-304871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:55:37.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:55:37.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:55:37.675 [DEBUG] [Thread-304871] [transport.py] [_log()] userauth is OK
2025-12-24T15:55:37.676 [DEBUG] [Thread-304871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:55:37.676 [DEBUG] [Thread-304871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:55:37.676 [DEBUG] [Thread-304871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:55:37.676 [DEBUG] [Thread-304871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:55:37.698 [INFO] [Thread-304871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:55:37.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:55:38.360 [DEBUG] [Thread-304871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:55:38.360 [DEBUG] [Thread-304871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:55:38.361 [DEBUG] [Thread-304871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:55:38.401 [DEBUG] [Thread-304871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:55:38.401 [DEBUG] [Thread-304871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:55:38.405 [DEBUG] [Thread-304871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:55:38.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:55:38.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:55:38.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:55:38.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:55:38.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:55:38.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:55:38.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:55:38.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:55:38.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:55:38.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.579928 -999.00  +24.70   8.63     29   +5.70 1 1 1 1 1   888    0 20.45 63.00 ----- 8.6 8.6 181.4 11.0 31.6 -21.7 31.1 -25.8 32.8 -23.8 33.5 -23.6
2025-12-24T15:55:38.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:55:38.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:55:38.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.579928
2025-12-24T15:55:38.434 [DEBUG] [Thread-304871] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:55:38.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:55:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:55:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:55:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:55:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T15:55:38.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:55:07', tmtdew=21.5, humidity=24.45, cloud=0.0, wind=6.81, temperature=24.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:55:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:55:38.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:55:38.529 [DEBUG] [Thread-304874] [transport.py] [_log()] starting thread (client mode): 0xf5751d80
2025-12-24T15:55:38.529 [DEBUG] [Thread-304874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:55:38.544 [DEBUG] [Thread-304874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:55:38.545 [INFO] [Thread-304874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:55:38.552 [DEBUG] [Thread-304874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:55:38.553 [DEBUG] [Thread-304874] [transport.py] [_log()] client lang: <none>
2025-12-24T15:55:38.554 [DEBUG] [Thread-304874] [transport.py] [_log()] server lang: <none>
2025-12-24T15:55:38.554 [DEBUG] [Thread-304874] [transport.py] [_log()] kex follows: False
2025-12-24T15:55:38.554 [DEBUG] [Thread-304874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:55:38.554 [DEBUG] [Thread-304874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:55:38.554 [DEBUG] [Thread-304874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:55:38.554 [DEBUG] [Thread-304874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:55:38.554 [DEBUG] [Thread-304874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:55:38.555 [DEBUG] [Thread-304874] [transport.py] [_log()] Compression: none
2025-12-24T15:55:38.555 [DEBUG] [Thread-304874] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:55:38.612 [DEBUG] [Thread-304874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:55:38.613 [DEBUG] [Thread-304874] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:55:38.613 [DEBUG] [Thread-304874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:55:38.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:55:38.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:55:38.672 [DEBUG] [Thread-304874] [transport.py] [_log()] userauth is OK
2025-12-24T15:55:38.672 [DEBUG] [Thread-304874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:55:38.672 [DEBUG] [Thread-304874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:55:38.673 [DEBUG] [Thread-304874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:55:38.673 [DEBUG] [Thread-304874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:55:38.692 [INFO] [Thread-304874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:55:38.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:55:38.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:55:39.513 [DEBUG] [Thread-304874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:55:39.513 [DEBUG] [Thread-304874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:55:39.561 [DEBUG] [Thread-304874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:55:39.561 [DEBUG] [Thread-304874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:55:39.570 [DEBUG] [Thread-304874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:55:39.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:55:39.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:55:39.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:55:39.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:55:39.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:55:39.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:55:39.603 [DEBUG] [Thread-304874] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:55:51.324 [DEBUG] [Thread-304876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:56:05.751 [DEBUG] [Thread-304877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:56:06.467 [DEBUG] [Thread-304878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:56:09.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:56:09.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:56:09.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:56:10.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 55, 40), 21.45, 24.58, 0.0, 4.78, 24.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:56:10.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:55:40
2025-12-24T15:56:11.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:56:11.327 [DEBUG] [Thread-304879] [transport.py] [_log()] starting thread (client mode): 0xf5751630
2025-12-24T15:56:11.328 [DEBUG] [Thread-304879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:56:11.339 [DEBUG] [Thread-304879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:56:11.340 [INFO] [Thread-304879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:56:11.345 [DEBUG] [Thread-304879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:56:11.346 [DEBUG] [Thread-304879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:56:11.346 [DEBUG] [Thread-304879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:56:11.346 [DEBUG] [Thread-304879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:56:11.346 [DEBUG] [Thread-304879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:56:11.346 [DEBUG] [Thread-304879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:56:11.346 [DEBUG] [Thread-304879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:56:11.346 [DEBUG] [Thread-304879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:56:11.346 [DEBUG] [Thread-304879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:56:11.347 [DEBUG] [Thread-304879] [transport.py] [_log()] client lang: <none>
2025-12-24T15:56:11.347 [DEBUG] [Thread-304879] [transport.py] [_log()] server lang: <none>
2025-12-24T15:56:11.347 [DEBUG] [Thread-304879] [transport.py] [_log()] kex follows: False
2025-12-24T15:56:11.347 [DEBUG] [Thread-304879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:56:11.348 [DEBUG] [Thread-304879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:56:11.348 [DEBUG] [Thread-304879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:56:11.348 [DEBUG] [Thread-304879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:56:11.348 [DEBUG] [Thread-304879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:56:11.348 [DEBUG] [Thread-304879] [transport.py] [_log()] Compression: none
2025-12-24T15:56:11.348 [DEBUG] [Thread-304879] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:56:11.387 [DEBUG] [Thread-304879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:56:11.392 [DEBUG] [Thread-304879] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:56:11.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:56:11.396 [DEBUG] [Thread-304879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:56:11.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:56:11.400 [DEBUG] [Thread-304879] [transport.py] [_log()] userauth is OK
2025-12-24T15:56:11.400 [DEBUG] [Thread-304879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:56:11.400 [DEBUG] [Thread-304879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:56:11.400 [DEBUG] [Thread-304879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:56:11.400 [DEBUG] [Thread-304879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:56:11.427 [INFO] [Thread-304879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:56:11.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:56:12.217 [DEBUG] [Thread-304879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:56:12.217 [DEBUG] [Thread-304879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:56:12.217 [DEBUG] [Thread-304879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:56:12.257 [DEBUG] [Thread-304879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:56:12.258 [DEBUG] [Thread-304879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:56:12.260 [DEBUG] [Thread-304879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:56:12.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:56:12.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:56:12.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:56:12.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:56:12.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:56:12.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:56:12.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:56:12.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:56:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:56:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.580276 -999.00  +24.60   3.61     29   +5.70 1 2 1 1 1   888    0 19.85 61.78 ----- 3.6 3.6 197.6 8.0 31.6 -20.9 31.3 -21.6 32.5 -23.3 33.3 -22.1
2025-12-24T15:56:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:56:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:56:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.580276
2025-12-24T15:56:12.288 [DEBUG] [Thread-304879] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:56:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:56:12.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:56:12.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:56:12.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:56:12.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:56:12.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:55:40', tmtdew=21.45, humidity=24.58, cloud=0.0, wind=4.78, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:55:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:56:12.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:56:12.393 [DEBUG] [Thread-304882] [transport.py] [_log()] starting thread (client mode): 0xf8189900
2025-12-24T15:56:12.393 [DEBUG] [Thread-304882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:56:12.409 [DEBUG] [Thread-304882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:56:12.409 [INFO] [Thread-304882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] client lang: <none>
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] server lang: <none>
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] kex follows: False
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] Compression: none
2025-12-24T15:56:12.417 [DEBUG] [Thread-304882] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:56:12.473 [DEBUG] [Thread-304882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:56:12.474 [DEBUG] [Thread-304882] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:56:12.474 [DEBUG] [Thread-304882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:56:12.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:56:12.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:56:12.531 [DEBUG] [Thread-304882] [transport.py] [_log()] userauth is OK
2025-12-24T15:56:12.531 [DEBUG] [Thread-304882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:56:12.531 [DEBUG] [Thread-304882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:56:12.531 [DEBUG] [Thread-304882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:56:12.531 [DEBUG] [Thread-304882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:56:12.545 [INFO] [Thread-304882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:56:12.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:56:12.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:56:13.384 [DEBUG] [Thread-304882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:56:13.384 [DEBUG] [Thread-304882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:56:13.432 [DEBUG] [Thread-304882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:56:13.432 [DEBUG] [Thread-304882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:56:13.440 [DEBUG] [Thread-304882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:56:13.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:56: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')
2025-12-24T15:56: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
2025-12-24T15:56:13.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:56:13.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:56:13.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:56:13.475 [DEBUG] [Thread-304882] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:56:21.578 [DEBUG] [Thread-304885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:56:28.532 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:56:28.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:56:34.957 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:56:36.785 [DEBUG] [Thread-304886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:56:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:56:43.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:56:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:56:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 56, 13), 21.43, 24.62, 0.0, 4.57, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:56:45.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:56:13
2025-12-24T15:56:45.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:56:45.473 [DEBUG] [Thread-304887] [transport.py] [_log()] starting thread (client mode): 0xf572de10
2025-12-24T15:56:45.474 [DEBUG] [Thread-304887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:56:45.474 [DEBUG] [Thread-304887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:56:45.474 [INFO] [Thread-304887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] client lang: <none>
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] server lang: <none>
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] kex follows: False
2025-12-24T15:56:45.480 [DEBUG] [Thread-304887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:56:45.481 [DEBUG] [Thread-304887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:56:45.481 [DEBUG] [Thread-304887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:56:45.481 [DEBUG] [Thread-304887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:56:45.481 [DEBUG] [Thread-304887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:56:45.481 [DEBUG] [Thread-304887] [transport.py] [_log()] Compression: none
2025-12-24T15:56:45.481 [DEBUG] [Thread-304887] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:56:45.511 [DEBUG] [Thread-304887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:56:45.514 [DEBUG] [Thread-304887] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:56:45.516 [DEBUG] [Thread-304887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:56:45.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:56:45.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:56:45.520 [DEBUG] [Thread-304887] [transport.py] [_log()] userauth is OK
2025-12-24T15:56:45.520 [DEBUG] [Thread-304887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:56:45.520 [DEBUG] [Thread-304887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:56:45.520 [DEBUG] [Thread-304887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:56:45.520 [DEBUG] [Thread-304887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:56:45.551 [INFO] [Thread-304887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:56:45.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:56:46.165 [DEBUG] [Thread-304887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:56:46.166 [DEBUG] [Thread-304887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:56:46.176 [DEBUG] [Thread-304887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:56:46.207 [DEBUG] [Thread-304887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:56:46.207 [DEBUG] [Thread-304887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:56:46.210 [DEBUG] [Thread-304887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:56:46.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:56:46.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:56:46.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:56:46.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:56:46.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:56:46.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:56:46.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:56:46.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:56:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:56:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.580623 -999.00  +24.70   2.79     29   +5.80 1 2 1 1 1   888    0 20.09 60.53 ----- 2.8 2.8 148.3 5.2 31.7 -19.8 31.4 -21.1 32.5 -22.4 33.2 -21.1
2025-12-24T15:56:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:56:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:56:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.580623
2025-12-24T15:56:46.248 [DEBUG] [Thread-304887] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:56:46.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:56:46.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:56:46.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:56:46.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:56:46.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:56:46.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:56:13', tmtdew=21.43, humidity=24.62, cloud=0.0, wind=4.57, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:56:05.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:56:46.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:56:46.365 [DEBUG] [Thread-304890] [transport.py] [_log()] starting thread (client mode): 0xf57a8880
2025-12-24T15:56:46.366 [DEBUG] [Thread-304890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:56:46.381 [DEBUG] [Thread-304890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:56:46.381 [INFO] [Thread-304890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:56:46.388 [DEBUG] [Thread-304890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:56:46.388 [DEBUG] [Thread-304890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:56:46.388 [DEBUG] [Thread-304890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:56:46.388 [DEBUG] [Thread-304890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] client lang: <none>
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] server lang: <none>
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] kex follows: False
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] Compression: none
2025-12-24T15:56:46.389 [DEBUG] [Thread-304890] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:56:46.447 [DEBUG] [Thread-304890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:56:46.448 [DEBUG] [Thread-304890] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:56:46.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:56:46.449 [DEBUG] [Thread-304890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:56:46.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:56:46.507 [DEBUG] [Thread-304890] [transport.py] [_log()] userauth is OK
2025-12-24T15:56:46.507 [DEBUG] [Thread-304890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:56:46.507 [DEBUG] [Thread-304890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:56:46.508 [DEBUG] [Thread-304890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:56:46.508 [DEBUG] [Thread-304890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:56:46.531 [INFO] [Thread-304890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:56:46.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:56:46.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:56:47.380 [DEBUG] [Thread-304890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:56:47.380 [DEBUG] [Thread-304890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:56:47.428 [DEBUG] [Thread-304890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:56:47.428 [DEBUG] [Thread-304890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:56:47.436 [DEBUG] [Thread-304890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:56:47.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:56:47.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:56:47.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:56:47.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:56:47.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:56:47.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:56:47.470 [DEBUG] [Thread-304890] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:56:51.879 [DEBUG] [Thread-304892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:06.124 [DEBUG] [Thread-304893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:07.033 [DEBUG] [Thread-304894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:15.638 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:17.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:57:17.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:57:17.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:57:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 56, 46), 21.44, 24.37, 0.0, 12.24, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:57:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:56:46
2025-12-24T15:57:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:57:19.283 [DEBUG] [Thread-304895] [transport.py] [_log()] starting thread (client mode): 0xf818bac0
2025-12-24T15:57:19.283 [DEBUG] [Thread-304895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:57:19.291 [DEBUG] [Thread-304895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:57:19.291 [INFO] [Thread-304895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:57:19.296 [DEBUG] [Thread-304895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:57:19.296 [DEBUG] [Thread-304895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:57:19.296 [DEBUG] [Thread-304895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:57:19.296 [DEBUG] [Thread-304895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:57:19.296 [DEBUG] [Thread-304895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:57:19.296 [DEBUG] [Thread-304895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] client lang: <none>
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] server lang: <none>
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] kex follows: False
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:57:19.297 [DEBUG] [Thread-304895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:57:19.298 [DEBUG] [Thread-304895] [transport.py] [_log()] Compression: none
2025-12-24T15:57:19.298 [DEBUG] [Thread-304895] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:57:19.331 [DEBUG] [Thread-304895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:57:19.335 [DEBUG] [Thread-304895] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:57:19.336 [DEBUG] [Thread-304895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:57:19.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:57:19.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:57:19.338 [DEBUG] [Thread-304895] [transport.py] [_log()] userauth is OK
2025-12-24T15:57:19.339 [DEBUG] [Thread-304895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:57:19.339 [DEBUG] [Thread-304895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:57:19.339 [DEBUG] [Thread-304895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:57:19.339 [DEBUG] [Thread-304895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:57:19.357 [INFO] [Thread-304895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:57:19.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:57:20.099 [DEBUG] [Thread-304895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:57:20.099 [DEBUG] [Thread-304895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:57:20.100 [DEBUG] [Thread-304895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:57:20.140 [DEBUG] [Thread-304895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:57:20.141 [DEBUG] [Thread-304895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:57:20.143 [DEBUG] [Thread-304895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:57:20.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:57:20.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:57:20.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:57:20.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:57:20.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:57:20.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:57:20.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:57:20.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:57:20.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:57:20.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.580970 -999.00  +24.80   5.09     29   +5.70 1 2 1 1 1   888    0 19.85 62.84 ----- 5.1 5.1 177.0 9.2 31.7 -20.1 31.4 -21.2 32.4 -22.0 33.0 -22.0
2025-12-24T15:57:20.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:57:20.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:57:20.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.580970
2025-12-24T15:57:20.177 [DEBUG] [Thread-304895] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:57:20.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:57:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:57:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:57:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:57:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:57:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:56:46', tmtdew=21.44, humidity=24.37, cloud=0.0, wind=12.24, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:56:35.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:57:20.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:57:20.272 [DEBUG] [Thread-304898] [transport.py] [_log()] starting thread (client mode): 0xf81e65f0
2025-12-24T15:57:20.272 [DEBUG] [Thread-304898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:57:20.287 [DEBUG] [Thread-304898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:57:20.287 [INFO] [Thread-304898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:57:20.294 [DEBUG] [Thread-304898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:57:20.294 [DEBUG] [Thread-304898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] client lang: <none>
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] server lang: <none>
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] kex follows: False
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] Compression: none
2025-12-24T15:57:20.295 [DEBUG] [Thread-304898] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:57:20.350 [DEBUG] [Thread-304898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:57:20.350 [DEBUG] [Thread-304898] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:57:20.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:57:20.350 [DEBUG] [Thread-304898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:57:20.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:57:20.407 [DEBUG] [Thread-304898] [transport.py] [_log()] userauth is OK
2025-12-24T15:57:20.407 [DEBUG] [Thread-304898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:57:20.407 [DEBUG] [Thread-304898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:57:20.407 [DEBUG] [Thread-304898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:57:20.407 [DEBUG] [Thread-304898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:57:20.424 [INFO] [Thread-304898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:57:20.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:57:20.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:57:21.239 [DEBUG] [Thread-304898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:57:21.239 [DEBUG] [Thread-304898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:57:21.286 [DEBUG] [Thread-304898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:57:21.287 [DEBUG] [Thread-304898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:57:21.295 [DEBUG] [Thread-304898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:57:21.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:57:21.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:57:21.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:57:21.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:57:21.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:57:21.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:57:21.328 [DEBUG] [Thread-304898] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:57:22.139 [DEBUG] [Thread-304900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:28.679 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:28.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:37.261 [DEBUG] [Thread-304901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:51.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:57:51.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:57:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:57:52.343 [DEBUG] [Thread-304902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:57:52.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 57, 19), 21.39, 24.45, 0.0, 14.19, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:57:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:57:19
2025-12-24T15:57:52.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:57:52.722 [DEBUG] [Thread-304903] [transport.py] [_log()] starting thread (client mode): 0xf57ab610
2025-12-24T15:57:52.723 [DEBUG] [Thread-304903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:57:52.724 [DEBUG] [Thread-304903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:57:52.724 [INFO] [Thread-304903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:57:52.728 [DEBUG] [Thread-304903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:57:52.728 [DEBUG] [Thread-304903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] client lang: <none>
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] server lang: <none>
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] kex follows: False
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:57:52.729 [DEBUG] [Thread-304903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:57:52.730 [DEBUG] [Thread-304903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:57:52.730 [DEBUG] [Thread-304903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:57:52.730 [DEBUG] [Thread-304903] [transport.py] [_log()] Compression: none
2025-12-24T15:57:52.730 [DEBUG] [Thread-304903] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:57:52.759 [DEBUG] [Thread-304903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:57:52.762 [DEBUG] [Thread-304903] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:57:52.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:57:52.764 [DEBUG] [Thread-304903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:57:52.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:57:52.767 [DEBUG] [Thread-304903] [transport.py] [_log()] userauth is OK
2025-12-24T15:57:52.767 [DEBUG] [Thread-304903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:57:52.768 [DEBUG] [Thread-304903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:57:52.768 [DEBUG] [Thread-304903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:57:52.768 [DEBUG] [Thread-304903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:57:52.788 [INFO] [Thread-304903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:57:52.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:57:53.410 [DEBUG] [Thread-304903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:57:53.410 [DEBUG] [Thread-304903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:57:53.411 [DEBUG] [Thread-304903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:57:53.451 [DEBUG] [Thread-304903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:57:53.452 [DEBUG] [Thread-304903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:57:53.454 [DEBUG] [Thread-304903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:57:53.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:57:53.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:57:53.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:57:53.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:57:53.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:57:53.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:57:53.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:57:53.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:57:53.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:57:53.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.581318 -999.00  +24.70  12.79     29   +5.80 1 2 1 1 1   888    0 20.25 66.23 ----- 12.8 12.8 135.7 16.6 31.6 -20.4 31.3 -21.5 32.3 -21.3 33.1 -22.0
2025-12-24T15:57:53.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:57:53.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:57:53.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.581318
2025-12-24T15:57:53.482 [DEBUG] [Thread-304903] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:57:53.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:57:53.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:57:53.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:57:53.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:57:53.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:57:53.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:57:19', tmtdew=21.39, humidity=24.45, cloud=0.0, wind=14.19, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:57:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:57:53.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:57:53.587 [DEBUG] [Thread-304906] [transport.py] [_log()] starting thread (client mode): 0xf818a320
2025-12-24T15:57:53.588 [DEBUG] [Thread-304906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:57:53.602 [DEBUG] [Thread-304906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:57:53.602 [INFO] [Thread-304906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] client lang: <none>
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] server lang: <none>
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] kex follows: False
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:57:53.609 [DEBUG] [Thread-304906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:57:53.610 [DEBUG] [Thread-304906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:57:53.610 [DEBUG] [Thread-304906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:57:53.610 [DEBUG] [Thread-304906] [transport.py] [_log()] Compression: none
2025-12-24T15:57:53.610 [DEBUG] [Thread-304906] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:57:53.665 [DEBUG] [Thread-304906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:57:53.666 [DEBUG] [Thread-304906] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:57:53.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:57:53.666 [DEBUG] [Thread-304906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:57:53.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:57:53.723 [DEBUG] [Thread-304906] [transport.py] [_log()] userauth is OK
2025-12-24T15:57:53.723 [DEBUG] [Thread-304906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:57:53.723 [DEBUG] [Thread-304906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:57:53.723 [DEBUG] [Thread-304906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:57:53.723 [DEBUG] [Thread-304906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:57:53.740 [INFO] [Thread-304906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:57:53.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:57:53.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:57:54.558 [DEBUG] [Thread-304906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:57:54.558 [DEBUG] [Thread-304906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:57:54.565 [DEBUG] [Thread-304906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:57:54.565 [DEBUG] [Thread-304906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:57:54.573 [DEBUG] [Thread-304906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:57:54.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:57:54.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:57:54.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:57:54.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:57:54.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:57:54.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:57:54.606 [DEBUG] [Thread-304906] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:58:06.438 [DEBUG] [Thread-304908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:07.440 [DEBUG] [Thread-304909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:19.487 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:22.665 [DEBUG] [Thread-304910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:24.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:58:24.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:58:24.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
2025-12-24T15:58:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 57, 51), 21.0, 25.35, 0.0, 13.98, 23.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:58:25.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:57:51
2025-12-24T15:58:25.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:58:25.956 [DEBUG] [Thread-304911] [transport.py] [_log()] starting thread (client mode): 0xf81f0af0
2025-12-24T15:58:25.957 [DEBUG] [Thread-304911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:58:25.965 [DEBUG] [Thread-304911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:58:25.965 [INFO] [Thread-304911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:58:25.970 [DEBUG] [Thread-304911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] client lang: <none>
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] server lang: <none>
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] kex follows: False
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:58:25.971 [DEBUG] [Thread-304911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:58:25.972 [DEBUG] [Thread-304911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:58:25.972 [DEBUG] [Thread-304911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:58:25.972 [DEBUG] [Thread-304911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:58:25.972 [DEBUG] [Thread-304911] [transport.py] [_log()] Compression: none
2025-12-24T15:58:25.972 [DEBUG] [Thread-304911] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:58:26.006 [DEBUG] [Thread-304911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:58:26.010 [DEBUG] [Thread-304911] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:58:26.011 [DEBUG] [Thread-304911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:58:26.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:58:26.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:58:26.015 [DEBUG] [Thread-304911] [transport.py] [_log()] userauth is OK
2025-12-24T15:58:26.015 [DEBUG] [Thread-304911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:58:26.016 [DEBUG] [Thread-304911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:58:26.016 [DEBUG] [Thread-304911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:58:26.016 [DEBUG] [Thread-304911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:58:26.047 [INFO] [Thread-304911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:58:26.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:58:26.673 [DEBUG] [Thread-304911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:58:26.673 [DEBUG] [Thread-304911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:58:26.674 [DEBUG] [Thread-304911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:58:26.715 [DEBUG] [Thread-304911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:58:26.715 [DEBUG] [Thread-304911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:58:26.717 [DEBUG] [Thread-304911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:58:26.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:58:26.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:58:26.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:58:26.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:58:26.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:58:26.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:58:26.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:58:26.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:58:26.741 [DEBUG] [Thread-304911] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:58:26.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:58:26.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.581665 -999.00  +24.70   9.51     29   +5.80 1 2 1 1 1   888    0 20.63 64.78 ----- 9.5 9.5 178.8 24.4 31.3 -21.7 30.8 -21.7 32.3 -22.8 32.6 -23.3
2025-12-24T15:58:26.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:58:26.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:58:26.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.581665
2025-12-24T15:58:26.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:58:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:58:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:58:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:58:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T15:58:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:57:51', tmtdew=21.0, humidity=25.35, cloud=0.0, wind=13.98, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:57:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:58:26.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:58:26.848 [DEBUG] [Thread-304914] [transport.py] [_log()] starting thread (client mode): 0xf5753280
2025-12-24T15:58:26.848 [DEBUG] [Thread-304914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:58:26.862 [DEBUG] [Thread-304914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:58:26.862 [INFO] [Thread-304914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] client lang: <none>
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] server lang: <none>
2025-12-24T15:58:26.869 [DEBUG] [Thread-304914] [transport.py] [_log()] kex follows: False
2025-12-24T15:58:26.870 [DEBUG] [Thread-304914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:58:26.870 [DEBUG] [Thread-304914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:58:26.870 [DEBUG] [Thread-304914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:58:26.870 [DEBUG] [Thread-304914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:58:26.870 [DEBUG] [Thread-304914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:58:26.870 [DEBUG] [Thread-304914] [transport.py] [_log()] Compression: none
2025-12-24T15:58:26.870 [DEBUG] [Thread-304914] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:58:26.930 [DEBUG] [Thread-304914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:58:26.930 [DEBUG] [Thread-304914] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:58:26.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:58:26.931 [DEBUG] [Thread-304914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:58:26.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:58:26.991 [DEBUG] [Thread-304914] [transport.py] [_log()] userauth is OK
2025-12-24T15:58:26.991 [DEBUG] [Thread-304914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:58:26.991 [DEBUG] [Thread-304914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:58:26.991 [DEBUG] [Thread-304914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:58:26.991 [DEBUG] [Thread-304914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:58:27.009 [INFO] [Thread-304914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:58:27.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:58:27.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:58:27.830 [DEBUG] [Thread-304914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:58:27.831 [DEBUG] [Thread-304914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:58:27.879 [DEBUG] [Thread-304914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:58:27.879 [DEBUG] [Thread-304914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:58:27.888 [DEBUG] [Thread-304914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:58:27.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:58:27.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:58:27.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:58:27.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:58:27.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:58:27.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:58:27.921 [DEBUG] [Thread-304914] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:58:28.827 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:28.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:37.777 [DEBUG] [Thread-304916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:44.072 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:52.956 [DEBUG] [Thread-304917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:58:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:58:57.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:58:58.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
2025-12-24T15:58:59.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 58, 25), 20.86, 25.58, 0.0, 15.34, 23.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:58:59.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:58:25
2025-12-24T15:58:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:58:59.806 [DEBUG] [Thread-304918] [transport.py] [_log()] starting thread (client mode): 0xf57aa590
2025-12-24T15:58:59.807 [DEBUG] [Thread-304918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:58:59.814 [DEBUG] [Thread-304918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:58:59.815 [INFO] [Thread-304918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] client lang: <none>
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] server lang: <none>
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] kex follows: False
2025-12-24T15:58:59.820 [DEBUG] [Thread-304918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:58:59.821 [DEBUG] [Thread-304918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:58:59.821 [DEBUG] [Thread-304918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:58:59.821 [DEBUG] [Thread-304918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:58:59.821 [DEBUG] [Thread-304918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:58:59.821 [DEBUG] [Thread-304918] [transport.py] [_log()] Compression: none
2025-12-24T15:58:59.821 [DEBUG] [Thread-304918] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:58:59.853 [DEBUG] [Thread-304918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:58:59.857 [DEBUG] [Thread-304918] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:58:59.859 [DEBUG] [Thread-304918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:58:59.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:58:59.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:58:59.862 [DEBUG] [Thread-304918] [transport.py] [_log()] userauth is OK
2025-12-24T15:58:59.863 [DEBUG] [Thread-304918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:58:59.863 [DEBUG] [Thread-304918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:58:59.863 [DEBUG] [Thread-304918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:58:59.863 [DEBUG] [Thread-304918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:58:59.882 [INFO] [Thread-304918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:58:59.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:59:00.536 [DEBUG] [Thread-304918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:59:00.536 [DEBUG] [Thread-304918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:59:00.537 [DEBUG] [Thread-304918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:59:00.578 [DEBUG] [Thread-304918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:59:00.578 [DEBUG] [Thread-304918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:59:00.580 [DEBUG] [Thread-304918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:59:00.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:59:00.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:59:00.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:59:00.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:59:00.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:59:00.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:59:00.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:59:00.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:59:00.602 [DEBUG] [Thread-304918] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:59:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:59:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.582012 -999.00  +24.70  10.23     29   +5.80 1 1 1 1 1   888    0 20.86 63.32 ----- 10.2 10.2 170.4 11.6 31.2 -21.5 30.5 -27.7 31.9 -22.5 32.5 -23.0
2025-12-24T15:59:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:59:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:59:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.582012
2025-12-24T15:59:00.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:59:00.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:59:00.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:59:00.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:59:00.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T15:59:00.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:58:25', tmtdew=20.86, humidity=25.58, cloud=0.0, wind=15.34, temperature=23.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:58:05.837', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:59:00.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:59:00.712 [DEBUG] [Thread-304921] [transport.py] [_log()] starting thread (client mode): 0xf81f0520
2025-12-24T15:59:00.712 [DEBUG] [Thread-304921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:59:00.726 [DEBUG] [Thread-304921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:59:00.726 [INFO] [Thread-304921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] client lang: <none>
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] server lang: <none>
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] kex follows: False
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] Compression: none
2025-12-24T15:59:00.734 [DEBUG] [Thread-304921] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:59:00.790 [DEBUG] [Thread-304921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:59:00.790 [DEBUG] [Thread-304921] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:59:00.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:59:00.790 [DEBUG] [Thread-304921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:59:00.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:59:00.847 [DEBUG] [Thread-304921] [transport.py] [_log()] userauth is OK
2025-12-24T15:59:00.847 [DEBUG] [Thread-304921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:59:00.847 [DEBUG] [Thread-304921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:59:00.848 [DEBUG] [Thread-304921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:59:00.848 [DEBUG] [Thread-304921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:59:00.861 [INFO] [Thread-304921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:59:00.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:59:00.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:59:01.711 [DEBUG] [Thread-304921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:59:01.711 [DEBUG] [Thread-304921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:59:01.759 [DEBUG] [Thread-304921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:59:01.759 [DEBUG] [Thread-304921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:59:01.768 [DEBUG] [Thread-304921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:59:01.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:59:01.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:59:01.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:59:01.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:59:01.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:59:01.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:59:01.804 [DEBUG] [Thread-304921] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:59:06.669 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:06.695 [DEBUG] [Thread-304923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:08.035 [DEBUG] [Thread-304924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:23.174 [DEBUG] [Thread-304925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:28.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:28.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:29.289 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T15:59:31.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T15:59:31.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T15:59:33.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 58, 57), 20.52, 26.23, 0.0, 11.44, 23.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T15:59:33.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:58:57
2025-12-24T15:59:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T15:59:33.432 [DEBUG] [Thread-304926] [transport.py] [_log()] starting thread (client mode): 0xf81c37c0
2025-12-24T15:59:33.433 [DEBUG] [Thread-304926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:59:33.441 [DEBUG] [Thread-304926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T15:59:33.441 [INFO] [Thread-304926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T15:59:33.446 [DEBUG] [Thread-304926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] client lang: <none>
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] server lang: <none>
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] kex follows: False
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:59:33.447 [DEBUG] [Thread-304926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:59:33.448 [DEBUG] [Thread-304926] [transport.py] [_log()] Compression: none
2025-12-24T15:59:33.448 [DEBUG] [Thread-304926] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:59:33.483 [DEBUG] [Thread-304926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:59:33.487 [DEBUG] [Thread-304926] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:59:33.488 [DEBUG] [Thread-304926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T15:59:33.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T15:59:33.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:59:33.490 [DEBUG] [Thread-304926] [transport.py] [_log()] userauth is OK
2025-12-24T15:59:33.490 [DEBUG] [Thread-304926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:59:33.490 [DEBUG] [Thread-304926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:59:33.490 [DEBUG] [Thread-304926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T15:59:33.490 [DEBUG] [Thread-304926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:59:33.509 [INFO] [Thread-304926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:59:33.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:59:34.139 [DEBUG] [Thread-304926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:59:34.139 [DEBUG] [Thread-304926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:59:34.140 [DEBUG] [Thread-304926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T15:59:34.180 [DEBUG] [Thread-304926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:59:34.180 [DEBUG] [Thread-304926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:59:34.182 [DEBUG] [Thread-304926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:59:34.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:59:34.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T15:59:34.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T15:59:34.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T15:59:34.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:59:34.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T15:59:34.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:59:34.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:59:34.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T15:59:34.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.582359 -999.00  +24.50  14.38     29   +5.70 1 1 1 1 1   888    0 20.66 63.72 ----- 14.4 14.4 179.6 21.5 31.0 -21.3 30.5 -25.3 31.6 -22.7 32.1 -22.3
2025-12-24T15:59:34.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T15:59:34.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T15:59:34.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.582359
2025-12-24T15:59:34.211 [DEBUG] [Thread-304926] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:59:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T15:59:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T15:59:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T15:59:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T15:59:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T15:59:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:58:57', tmtdew=20.52, humidity=26.23, cloud=0.0, wind=11.44, temperature=23.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T13:58:35.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T15:59:34.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T15:59:34.309 [DEBUG] [Thread-304929] [transport.py] [_log()] starting thread (client mode): 0xf5771990
2025-12-24T15:59:34.309 [DEBUG] [Thread-304929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T15:59:34.324 [DEBUG] [Thread-304929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T15:59:34.324 [INFO] [Thread-304929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] client lang: <none>
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] server lang: <none>
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] kex follows: False
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] Compression: none
2025-12-24T15:59:34.332 [DEBUG] [Thread-304929] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T15:59:34.390 [DEBUG] [Thread-304929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T15:59:34.390 [DEBUG] [Thread-304929] [transport.py] [_log()] Switch to new keys ...
2025-12-24T15:59:34.390 [DEBUG] [Thread-304929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T15:59:34.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T15:59:34.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T15:59:34.449 [DEBUG] [Thread-304929] [transport.py] [_log()] userauth is OK
2025-12-24T15:59:34.449 [DEBUG] [Thread-304929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T15:59:34.449 [DEBUG] [Thread-304929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T15:59:34.449 [DEBUG] [Thread-304929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T15:59:34.449 [DEBUG] [Thread-304929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T15:59:34.462 [INFO] [Thread-304929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T15:59:34.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T15:59:34.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T15:59:35.269 [DEBUG] [Thread-304929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T15:59:35.269 [DEBUG] [Thread-304929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T15:59:35.317 [DEBUG] [Thread-304929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T15:59:35.317 [DEBUG] [Thread-304929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T15:59:35.325 [DEBUG] [Thread-304929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T15:59:35.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T15:59:35.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T15:59:35.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T15:59:35.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T15:59:35.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T15:59:35.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T15:59:35.359 [DEBUG] [Thread-304929] [transport.py] [_log()] EOF in transport thread
2025-12-24T15:59:38.259 [DEBUG] [Thread-304931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:51.933 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T15:59:53.387 [DEBUG] [Thread-304932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:05.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:00:05.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:00:05.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:00:06.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 15, 59, 30), 20.47, 26.34, 0.0, 16.82, 23.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:00:06.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 15:59:30
2025-12-24T16:00:06.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:00:06.884 [DEBUG] [Thread-304933] [transport.py] [_log()] starting thread (client mode): 0xf81f0520
2025-12-24T16:00:06.885 [DEBUG] [Thread-304933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:00:06.890 [DEBUG] [Thread-304933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:00:06.891 [INFO] [Thread-304933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] client lang: <none>
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] server lang: <none>
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] kex follows: False
2025-12-24T16:00:06.896 [DEBUG] [Thread-304933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:00:06.897 [DEBUG] [Thread-304933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:00:06.897 [DEBUG] [Thread-304933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:00:06.897 [DEBUG] [Thread-304933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:00:06.897 [DEBUG] [Thread-304933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:00:06.897 [DEBUG] [Thread-304933] [transport.py] [_log()] Compression: none
2025-12-24T16:00:06.897 [DEBUG] [Thread-304933] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:00:06.925 [DEBUG] [Thread-304933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:00:06.929 [DEBUG] [Thread-304933] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:00:06.930 [DEBUG] [Thread-304933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:00:06.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:00:06.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:00:06.934 [DEBUG] [Thread-304933] [transport.py] [_log()] userauth is OK
2025-12-24T16:00:06.934 [DEBUG] [Thread-304933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:00:06.934 [DEBUG] [Thread-304933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:00:06.934 [DEBUG] [Thread-304933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:00:06.934 [DEBUG] [Thread-304933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:00:06.952 [INFO] [Thread-304933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:00:06.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:00:06.960 [DEBUG] [Thread-304935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:08.488 [DEBUG] [Thread-304936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:14.601 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:17.150 [DEBUG] [Thread-304933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:00:17.150 [DEBUG] [Thread-304933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:00:17.151 [DEBUG] [Thread-304933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:00:17.190 [DEBUG] [Thread-304933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:00:17.191 [DEBUG] [Thread-304933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:00:17.193 [DEBUG] [Thread-304933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:00:17.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:00:17.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:00:17.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:00:17.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:00:17.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:00:17.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:00:17.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:00:17.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:00:17.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:00:17.269 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-24T16:00:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T15:59:30', tmtdew=20.47, humidity=26.34, cloud=0.0, wind=16.82, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:00:17.273 [DEBUG] [Thread-304933] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:00:17.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:00:17.358 [DEBUG] [Thread-304938] [transport.py] [_log()] starting thread (client mode): 0xf5789a20
2025-12-24T16:00:17.358 [DEBUG] [Thread-304938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:00:17.374 [DEBUG] [Thread-304938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:00:17.374 [INFO] [Thread-304938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:00:17.381 [DEBUG] [Thread-304938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:00:17.381 [DEBUG] [Thread-304938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:00:17.381 [DEBUG] [Thread-304938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:00:17.381 [DEBUG] [Thread-304938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:00:17.381 [DEBUG] [Thread-304938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:00:17.381 [DEBUG] [Thread-304938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:00:17.381 [DEBUG] [Thread-304938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] client lang: <none>
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] server lang: <none>
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] kex follows: False
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] Compression: none
2025-12-24T16:00:17.382 [DEBUG] [Thread-304938] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:00:17.442 [DEBUG] [Thread-304938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:00:17.442 [DEBUG] [Thread-304938] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:00:17.443 [DEBUG] [Thread-304938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:00:17.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:00:17.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:00:17.499 [DEBUG] [Thread-304938] [transport.py] [_log()] userauth is OK
2025-12-24T16:00:17.500 [DEBUG] [Thread-304938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:00:17.500 [DEBUG] [Thread-304938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:00:17.500 [DEBUG] [Thread-304938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:00:17.500 [DEBUG] [Thread-304938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:00:17.519 [INFO] [Thread-304938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:00:17.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:00:17.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:00:18.359 [DEBUG] [Thread-304938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:00:18.359 [DEBUG] [Thread-304938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:00:18.407 [DEBUG] [Thread-304938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:00:18.407 [DEBUG] [Thread-304938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:00:18.416 [DEBUG] [Thread-304938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:00:18.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:00:18.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')
2025-12-24T16:00:18.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:00:18.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:00:18.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:00:18.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:00:18.456 [DEBUG] [Thread-304938] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:00:23.595 [DEBUG] [Thread-304940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:29.129 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:29.131 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:37.247 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:38.820 [DEBUG] [Thread-304941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:48.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:00:48.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:00:48.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:00:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 0, 37), 20.69, 25.93, 0.0, 14.28, 23.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:00:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:00:37
2025-12-24T16:00:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:00:49.854 [DEBUG] [Thread-304942] [transport.py] [_log()] starting thread (client mode): 0xf57abd00
2025-12-24T16:00:49.855 [DEBUG] [Thread-304942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:00:49.863 [DEBUG] [Thread-304942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:00:49.863 [INFO] [Thread-304942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:00:49.870 [DEBUG] [Thread-304942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:00:49.870 [DEBUG] [Thread-304942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:00:49.870 [DEBUG] [Thread-304942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:00:49.870 [DEBUG] [Thread-304942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] client lang: <none>
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] server lang: <none>
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] kex follows: False
2025-12-24T16:00:49.871 [DEBUG] [Thread-304942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:00:49.872 [DEBUG] [Thread-304942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:00:49.872 [DEBUG] [Thread-304942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:00:49.872 [DEBUG] [Thread-304942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:00:49.872 [DEBUG] [Thread-304942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:00:49.872 [DEBUG] [Thread-304942] [transport.py] [_log()] Compression: none
2025-12-24T16:00:49.873 [DEBUG] [Thread-304942] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:00:49.912 [DEBUG] [Thread-304942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:00:49.917 [DEBUG] [Thread-304942] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:00:49.920 [DEBUG] [Thread-304942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:00:49.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:00:49.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:00:49.925 [DEBUG] [Thread-304942] [transport.py] [_log()] userauth is OK
2025-12-24T16:00:49.925 [DEBUG] [Thread-304942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:00:49.926 [DEBUG] [Thread-304942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:00:49.926 [DEBUG] [Thread-304942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:00:49.926 [DEBUG] [Thread-304942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:00:49.954 [INFO] [Thread-304942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:00:49.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:00:50.562 [DEBUG] [Thread-304942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:00:50.562 [DEBUG] [Thread-304942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:00:50.564 [DEBUG] [Thread-304942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:00:50.603 [DEBUG] [Thread-304942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:00:50.604 [DEBUG] [Thread-304942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:00:50.607 [DEBUG] [Thread-304942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:00:50.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:00:50.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:00:50.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:00:50.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:00:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:00:50.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:00:50.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:00:50.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:00:50.628 [DEBUG] [Thread-304942] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:00:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:00:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.583748 -999.00  +24.40  10.85     30   +5.80 1 2 1 1 1   888    0 19.91 57.04 ----- 10.8 10.8 187.0 18.9 31.1 -18.5 30.4 -21.1 31.3 -19.1 32.1 -18.5
2025-12-24T16:00:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:00:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:00:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.583748
2025-12-24T16:00:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:00:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:00:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:00:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:00:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:00:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:00:37', tmtdew=20.69, humidity=25.93, cloud=0.0, wind=14.28, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:00:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:00:50.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:00:50.746 [DEBUG] [Thread-304945] [transport.py] [_log()] starting thread (client mode): 0xf81f05e0
2025-12-24T16:00:50.746 [DEBUG] [Thread-304945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:00:50.761 [DEBUG] [Thread-304945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:00:50.761 [INFO] [Thread-304945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:00:50.768 [DEBUG] [Thread-304945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] client lang: <none>
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] server lang: <none>
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] kex follows: False
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] Compression: none
2025-12-24T16:00:50.769 [DEBUG] [Thread-304945] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:00:50.829 [DEBUG] [Thread-304945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:00:50.829 [DEBUG] [Thread-304945] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:00:50.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:00:50.830 [DEBUG] [Thread-304945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:00:50.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:00:50.888 [DEBUG] [Thread-304945] [transport.py] [_log()] userauth is OK
2025-12-24T16:00:50.888 [DEBUG] [Thread-304945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:00:50.888 [DEBUG] [Thread-304945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:00:50.888 [DEBUG] [Thread-304945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:00:50.888 [DEBUG] [Thread-304945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:00:50.911 [INFO] [Thread-304945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:00:50.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:00:50.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:00:51.748 [DEBUG] [Thread-304945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:00:51.748 [DEBUG] [Thread-304945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:00:51.796 [DEBUG] [Thread-304945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:00:51.796 [DEBUG] [Thread-304945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:00:51.804 [DEBUG] [Thread-304945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:00:51.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:00:51.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:00:51.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:00:51.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:00:51.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:00:51.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:00:51.840 [DEBUG] [Thread-304945] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:00:53.920 [DEBUG] [Thread-304947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:00:59.883 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:07.224 [DEBUG] [Thread-304948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:09.073 [DEBUG] [Thread-304949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:01:21.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:01:21.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:01:22.457 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:22.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 1, 10), 20.78, 25.8, 0.0, 22.85, 23.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:01:22.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:01:10
2025-12-24T16:01:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:01:23.238 [DEBUG] [Thread-304950] [transport.py] [_log()] starting thread (client mode): 0xf5773df0
2025-12-24T16:01:23.239 [DEBUG] [Thread-304950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:01:23.242 [DEBUG] [Thread-304950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:01:23.242 [INFO] [Thread-304950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] client lang: <none>
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] server lang: <none>
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] kex follows: False
2025-12-24T16:01:23.249 [DEBUG] [Thread-304950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:01:23.250 [DEBUG] [Thread-304950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:01:23.250 [DEBUG] [Thread-304950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:01:23.250 [DEBUG] [Thread-304950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:01:23.250 [DEBUG] [Thread-304950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:01:23.250 [DEBUG] [Thread-304950] [transport.py] [_log()] Compression: none
2025-12-24T16:01:23.250 [DEBUG] [Thread-304950] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:01:23.289 [DEBUG] [Thread-304950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:01:23.293 [DEBUG] [Thread-304950] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:01:23.294 [DEBUG] [Thread-304950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:01:23.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:01:23.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:01:23.300 [DEBUG] [Thread-304950] [transport.py] [_log()] userauth is OK
2025-12-24T16:01:23.301 [DEBUG] [Thread-304950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:01:23.301 [DEBUG] [Thread-304950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:01:23.301 [DEBUG] [Thread-304950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:01:23.301 [DEBUG] [Thread-304950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:01:23.322 [INFO] [Thread-304950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:01:23.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:01:24.074 [DEBUG] [Thread-304950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:01:24.074 [DEBUG] [Thread-304950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:01:24.075 [DEBUG] [Thread-304950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:01:24.116 [DEBUG] [Thread-304950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:01:24.117 [DEBUG] [Thread-304950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:01:24.119 [DEBUG] [Thread-304950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:01:24.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:01:24.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:01:24.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:01:24.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:01:24.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:01:24.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:01:24.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:01:24.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:01:24.140 [DEBUG] [Thread-304950] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:01:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:01:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.583748 -999.00  +24.40  10.85     30   +5.80 1 2 1 1 1   888    0 19.91 57.04 ----- 10.8 10.8 187.0 18.9 31.1 -18.5 30.4 -21.1 31.3 -19.1 32.1 -18.5
2025-12-24T16:01:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:01:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:01:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.583748
2025-12-24T16:01:24.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:01:24.156 [DEBUG] [Thread-304953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:01:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:01:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:01:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:01:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:01:10', tmtdew=20.78, humidity=25.8, cloud=0.0, wind=22.85, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:00:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:01:24.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:01:29.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:29.272 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:39.257 [DEBUG] [Thread-304954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:45.082 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:01:54.404 [DEBUG] [Thread-304955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:07.487 [DEBUG] [Thread-304956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:07.656 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:08.314 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:09.491 [DEBUG] [Thread-304957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:10.719 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:11.161 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:12.659 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:14.135 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:15.653 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:17.152 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:18.650 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:20.059 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:21.562 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:23.062 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:23.841 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:24.581 [DEBUG] [Thread-304958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:29.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:29.421 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:32.371 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:38.909 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:39.658 [DEBUG] [Thread-304959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:45.395 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:51.939 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:54.741 [DEBUG] [Thread-304960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:02:58.458 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:04.946 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:07.757 [DEBUG] [Thread-304961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:09.816 [DEBUG] [Thread-304962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:11.452 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:17.979 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:24.460 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:24.885 [DEBUG] [Thread-304963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:29.564 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:29.566 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:30.926 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:31.433 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:32.827 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:33.290 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:33.721 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:34.196 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:34.775 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:35.206 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:35.702 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:36.046 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T16:03:36.190 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:36.677 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:37.089 [DEBUG] [Thread-304884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:39.966 [DEBUG] [Thread-304964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:03:55.080 [DEBUG] [Thread-304965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:04:06.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:04:06.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:04:06.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:04:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 3, 56), 21.26, 25.25, 0.0, 13.23, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:04:07.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:03:56
2025-12-24T16:04:07.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:04:07.724 [DEBUG] [Thread-304966] [transport.py] [_log()] starting thread (client mode): 0xf57709a0
2025-12-24T16:04:07.725 [DEBUG] [Thread-304966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:04:07.738 [DEBUG] [Thread-304966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:04:07.738 [INFO] [Thread-304966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:04:07.745 [DEBUG] [Thread-304966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] client lang: <none>
2025-12-24T16:04:07.746 [DEBUG] [Thread-304966] [transport.py] [_log()] server lang: <none>
2025-12-24T16:04:07.747 [DEBUG] [Thread-304966] [transport.py] [_log()] kex follows: False
2025-12-24T16:04:07.747 [DEBUG] [Thread-304966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:04:07.747 [DEBUG] [Thread-304966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:04:07.748 [DEBUG] [Thread-304966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:04:07.748 [DEBUG] [Thread-304966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:04:07.748 [DEBUG] [Thread-304966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:04:07.748 [DEBUG] [Thread-304966] [transport.py] [_log()] Compression: none
2025-12-24T16:04:07.749 [DEBUG] [Thread-304966] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:04:07.790 [DEBUG] [Thread-304966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:04:07.796 [DEBUG] [Thread-304966] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:04:07.798 [DEBUG] [Thread-304966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:04:07.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:04:07.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:04:07.804 [DEBUG] [Thread-304966] [transport.py] [_log()] userauth is OK
2025-12-24T16:04:07.804 [DEBUG] [Thread-304966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:04:07.805 [DEBUG] [Thread-304966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:04:07.805 [DEBUG] [Thread-304966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:04:07.805 [DEBUG] [Thread-304966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:04:07.842 [INFO] [Thread-304966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:04:07.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:04:07.976 [DEBUG] [Thread-304968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:04:08.482 [DEBUG] [Thread-304966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:04:08.482 [DEBUG] [Thread-304966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:04:08.483 [DEBUG] [Thread-304966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:04:08.523 [DEBUG] [Thread-304966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:04:08.523 [DEBUG] [Thread-304966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:04:08.525 [DEBUG] [Thread-304966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:04:08.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:04:08.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:04:08.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:04:08.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:04:08.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:04:08.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:04:08.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:04:08.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:04:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:04:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.585484 -999.00  +25.00  18.75     29   +5.80 1 2 1 1 1   888    0 20.01 55.66 ----- 18.8 18.8 193.2 23.4 31.1 -22.3 30.8 -24.0 32.0 -19.6 32.5 -22.3
2025-12-24T16:04:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:04:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:04:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.585484
2025-12-24T16:04:08.555 [DEBUG] [Thread-304966] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:04:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:04:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:04:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:04:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:04:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:04:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:03:56', tmtdew=21.26, humidity=25.25, cloud=0.0, wind=13.23, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:03:05.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:04:08.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:04:08.657 [DEBUG] [Thread-304970] [transport.py] [_log()] starting thread (client mode): 0xf81e6e30
2025-12-24T16:04:08.658 [DEBUG] [Thread-304970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:04:08.672 [DEBUG] [Thread-304970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:04:08.673 [INFO] [Thread-304970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:04:08.680 [DEBUG] [Thread-304970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:04:08.681 [DEBUG] [Thread-304970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:04:08.681 [DEBUG] [Thread-304970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:04:08.681 [DEBUG] [Thread-304970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:04:08.681 [DEBUG] [Thread-304970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:04:08.681 [DEBUG] [Thread-304970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:04:08.681 [DEBUG] [Thread-304970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:04:08.681 [DEBUG] [Thread-304970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:04:08.681 [DEBUG] [Thread-304970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:04:08.682 [DEBUG] [Thread-304970] [transport.py] [_log()] client lang: <none>
2025-12-24T16:04:08.682 [DEBUG] [Thread-304970] [transport.py] [_log()] server lang: <none>
2025-12-24T16:04:08.682 [DEBUG] [Thread-304970] [transport.py] [_log()] kex follows: False
2025-12-24T16:04:08.682 [DEBUG] [Thread-304970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:04:08.682 [DEBUG] [Thread-304970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:04:08.682 [DEBUG] [Thread-304970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:04:08.682 [DEBUG] [Thread-304970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:04:08.682 [DEBUG] [Thread-304970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:04:08.683 [DEBUG] [Thread-304970] [transport.py] [_log()] Compression: none
2025-12-24T16:04:08.683 [DEBUG] [Thread-304970] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:04:08.741 [DEBUG] [Thread-304970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:04:08.742 [DEBUG] [Thread-304970] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:04:08.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:04:08.743 [DEBUG] [Thread-304970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:04:08.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:04:08.805 [DEBUG] [Thread-304970] [transport.py] [_log()] userauth is OK
2025-12-24T16:04:08.805 [DEBUG] [Thread-304970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:04:08.806 [DEBUG] [Thread-304970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:04:08.806 [DEBUG] [Thread-304970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:04:08.806 [DEBUG] [Thread-304970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:04:08.825 [INFO] [Thread-304970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:04:08.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:04:08.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:04:09.635 [DEBUG] [Thread-304970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:04:09.635 [DEBUG] [Thread-304970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:04:09.683 [DEBUG] [Thread-304970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:04:09.683 [DEBUG] [Thread-304970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:04:09.691 [DEBUG] [Thread-304970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:04:09.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:04:09.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:04:09.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:04:09.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:04:09.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:04:09.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:04:09.724 [DEBUG] [Thread-304970] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:04:10.169 [DEBUG] [Thread-304972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:04:25.402 [DEBUG] [Thread-304973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:04:29.718 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:04:29.720 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:04:39.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:04:39.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:04:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:04:40.536 [DEBUG] [Thread-304974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:04:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 4, 29), 21.38, 25.1, 0.0, 18.21, 24.35, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:04:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:04:29
2025-12-24T16:04:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:04:41.418 [DEBUG] [Thread-304975] [transport.py] [_log()] starting thread (client mode): 0xf81c0bb0
2025-12-24T16:04:41.418 [DEBUG] [Thread-304975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:04:41.431 [DEBUG] [Thread-304975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:04:41.431 [INFO] [Thread-304975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:04:41.437 [DEBUG] [Thread-304975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:04:41.437 [DEBUG] [Thread-304975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:04:41.437 [DEBUG] [Thread-304975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:04:41.437 [DEBUG] [Thread-304975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:04:41.437 [DEBUG] [Thread-304975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:04:41.437 [DEBUG] [Thread-304975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:04:41.438 [DEBUG] [Thread-304975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:04:41.438 [DEBUG] [Thread-304975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:04:41.438 [DEBUG] [Thread-304975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:04:41.438 [DEBUG] [Thread-304975] [transport.py] [_log()] client lang: <none>
2025-12-24T16:04:41.438 [DEBUG] [Thread-304975] [transport.py] [_log()] server lang: <none>
2025-12-24T16:04:41.438 [DEBUG] [Thread-304975] [transport.py] [_log()] kex follows: False
2025-12-24T16:04:41.438 [DEBUG] [Thread-304975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:04:41.439 [DEBUG] [Thread-304975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:04:41.439 [DEBUG] [Thread-304975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:04:41.439 [DEBUG] [Thread-304975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:04:41.440 [DEBUG] [Thread-304975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:04:41.440 [DEBUG] [Thread-304975] [transport.py] [_log()] Compression: none
2025-12-24T16:04:41.440 [DEBUG] [Thread-304975] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:04:41.475 [DEBUG] [Thread-304975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:04:41.479 [DEBUG] [Thread-304975] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:04:41.481 [DEBUG] [Thread-304975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:04:41.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:04:41.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:04:41.487 [DEBUG] [Thread-304975] [transport.py] [_log()] userauth is OK
2025-12-24T16:04:41.487 [DEBUG] [Thread-304975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:04:41.488 [DEBUG] [Thread-304975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:04:41.488 [DEBUG] [Thread-304975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:04:41.488 [DEBUG] [Thread-304975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:04:41.514 [INFO] [Thread-304975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:04:41.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:04:42.231 [DEBUG] [Thread-304975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:04:42.231 [DEBUG] [Thread-304975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:04:42.240 [DEBUG] [Thread-304975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:04:42.273 [DEBUG] [Thread-304975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:04:42.273 [DEBUG] [Thread-304975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:04:42.275 [DEBUG] [Thread-304975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:04:42.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:04:42.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:04:42.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:04:42.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:04:42.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:04:42.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:04:42.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:04:42.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:04:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:04:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.586179 -999.00  +24.40  12.74     30   +5.80 1 2 1 1 1   888    0 19.91 49.28 ----- 12.7 12.7 177.6 13.6 31.3 -19.6 30.5 -20.9 31.9 -16.3 32.7 -16.2
2025-12-24T16:04:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:04:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:04:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.586179
2025-12-24T16:04:42.303 [DEBUG] [Thread-304975] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:04:42.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:04:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:04:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:04:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:04:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:04:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:04:29', tmtdew=21.38, humidity=25.1, cloud=0.0, wind=18.21, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:04:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:04:42.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:04:42.398 [DEBUG] [Thread-304978] [transport.py] [_log()] starting thread (client mode): 0xf574d240
2025-12-24T16:04:42.399 [DEBUG] [Thread-304978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:04:42.413 [DEBUG] [Thread-304978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:04:42.413 [INFO] [Thread-304978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:04:42.420 [DEBUG] [Thread-304978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:04:42.420 [DEBUG] [Thread-304978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:04:42.420 [DEBUG] [Thread-304978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:04:42.420 [DEBUG] [Thread-304978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:04:42.420 [DEBUG] [Thread-304978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] client lang: <none>
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] server lang: <none>
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] kex follows: False
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] Compression: none
2025-12-24T16:04:42.421 [DEBUG] [Thread-304978] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:04:42.484 [DEBUG] [Thread-304978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:04:42.485 [DEBUG] [Thread-304978] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:04:42.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:04:42.487 [DEBUG] [Thread-304978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:04:42.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:04:42.539 [DEBUG] [Thread-304978] [transport.py] [_log()] userauth is OK
2025-12-24T16:04:42.540 [DEBUG] [Thread-304978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:04:42.540 [DEBUG] [Thread-304978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:04:42.540 [DEBUG] [Thread-304978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:04:42.540 [DEBUG] [Thread-304978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:04:42.563 [INFO] [Thread-304978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:04:42.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:04:42.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:04:43.383 [DEBUG] [Thread-304978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:04:43.384 [DEBUG] [Thread-304978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:04:43.431 [DEBUG] [Thread-304978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:04:43.431 [DEBUG] [Thread-304978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:04:43.440 [DEBUG] [Thread-304978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:04:43.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:04:43.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')
2025-12-24T16:04:43.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
2025-12-24T16:04:43.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:04:43.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:04:43.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:04:43.477 [DEBUG] [Thread-304978] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:04:55.609 [DEBUG] [Thread-304980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:05:08.271 [DEBUG] [Thread-304981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:05:10.758 [DEBUG] [Thread-304982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:05:13.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:05:13.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:05:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:05:14.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 5, 2), 21.45, 24.98, 0.0, 17.82, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:05:14.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:05:02
2025-12-24T16:05:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:05:15.290 [DEBUG] [Thread-304983] [transport.py] [_log()] starting thread (client mode): 0xf57730a0
2025-12-24T16:05:15.291 [DEBUG] [Thread-304983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:05:15.306 [DEBUG] [Thread-304983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:05:15.306 [INFO] [Thread-304983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:05:15.314 [DEBUG] [Thread-304983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:05:15.314 [DEBUG] [Thread-304983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:05:15.314 [DEBUG] [Thread-304983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:05:15.314 [DEBUG] [Thread-304983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:05:15.314 [DEBUG] [Thread-304983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:05:15.315 [DEBUG] [Thread-304983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:05:15.315 [DEBUG] [Thread-304983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:05:15.315 [DEBUG] [Thread-304983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:05:15.315 [DEBUG] [Thread-304983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:05:15.315 [DEBUG] [Thread-304983] [transport.py] [_log()] client lang: <none>
2025-12-24T16:05:15.315 [DEBUG] [Thread-304983] [transport.py] [_log()] server lang: <none>
2025-12-24T16:05:15.315 [DEBUG] [Thread-304983] [transport.py] [_log()] kex follows: False
2025-12-24T16:05:15.315 [DEBUG] [Thread-304983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:05:15.316 [DEBUG] [Thread-304983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:05:15.317 [DEBUG] [Thread-304983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:05:15.317 [DEBUG] [Thread-304983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:05:15.317 [DEBUG] [Thread-304983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:05:15.317 [DEBUG] [Thread-304983] [transport.py] [_log()] Compression: none
2025-12-24T16:05:15.318 [DEBUG] [Thread-304983] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:05:15.360 [DEBUG] [Thread-304983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:05:15.365 [DEBUG] [Thread-304983] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:05:15.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:05:15.368 [DEBUG] [Thread-304983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:05:15.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:05:15.373 [DEBUG] [Thread-304983] [transport.py] [_log()] userauth is OK
2025-12-24T16:05:15.373 [DEBUG] [Thread-304983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:05:15.373 [DEBUG] [Thread-304983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:05:15.373 [DEBUG] [Thread-304983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:05:15.374 [DEBUG] [Thread-304983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:05:15.415 [INFO] [Thread-304983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:05:15.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:05:16.039 [DEBUG] [Thread-304983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:05:16.039 [DEBUG] [Thread-304983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:05:16.040 [DEBUG] [Thread-304983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:05:16.080 [DEBUG] [Thread-304983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:05:16.081 [DEBUG] [Thread-304983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:05:16.084 [DEBUG] [Thread-304983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:05:16.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:05:16.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:05:16.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:05:16.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:05:16.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:05:16.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:05:16.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:05:16.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:05:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:05:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.586525 -999.00  +24.40  14.03     30   +5.90 1 2 1 1 1   888    0 19.94 43.73 ----- 14.0 14.0 167.0 24.8 31.0 -20.3 30.7 -20.7 32.0 -19.5 32.3 -18.9
2025-12-24T16:05:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:05:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:05:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.586525
2025-12-24T16:05:16.113 [DEBUG] [Thread-304983] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:05:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:05:16.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:05:16.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:05:16.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:05:16.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:05:16.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:05:02', tmtdew=21.45, humidity=24.98, cloud=0.0, wind=17.82, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:04:35.760', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:05:16.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:05:25.883 [DEBUG] [Thread-304986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:05:29.871 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:05:29.873 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:05:41.036 [DEBUG] [Thread-304987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:05:56.154 [DEBUG] [Thread-304988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:06:08.563 [DEBUG] [Thread-304989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:06:11.245 [DEBUG] [Thread-304990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:06:26.340 [DEBUG] [Thread-304991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:06:30.014 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:06:30.015 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:06:41.413 [DEBUG] [Thread-304992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:06:56.542 [DEBUG] [Thread-304993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:07:08.841 [DEBUG] [Thread-304994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:07:11.647 [DEBUG] [Thread-304995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:07:26.788 [DEBUG] [Thread-304996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:07:29.519 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T16:07:30.159 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:07:30.161 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:07:41.877 [DEBUG] [Thread-304997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:07:56.982 [DEBUG] [Thread-304998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:07:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:07:59.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:07:59.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:08:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 7, 48), 21.41, 24.58, 0.0, 20.7, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:08:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:07:48
2025-12-24T16:08:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:08:00.767 [DEBUG] [Thread-304999] [transport.py] [_log()] starting thread (client mode): 0xf81e6e30
2025-12-24T16:08:00.768 [DEBUG] [Thread-304999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:08:00.782 [DEBUG] [Thread-304999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:08:00.782 [INFO] [Thread-304999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:08:00.787 [DEBUG] [Thread-304999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:08:00.787 [DEBUG] [Thread-304999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:08:00.787 [DEBUG] [Thread-304999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] client lang: <none>
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] server lang: <none>
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] kex follows: False
2025-12-24T16:08:00.788 [DEBUG] [Thread-304999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:08:00.789 [DEBUG] [Thread-304999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:08:00.789 [DEBUG] [Thread-304999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:08:00.789 [DEBUG] [Thread-304999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:08:00.789 [DEBUG] [Thread-304999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:08:00.789 [DEBUG] [Thread-304999] [transport.py] [_log()] Compression: none
2025-12-24T16:08:00.789 [DEBUG] [Thread-304999] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:08:00.824 [DEBUG] [Thread-304999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:08:00.829 [DEBUG] [Thread-304999] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:08:00.831 [DEBUG] [Thread-304999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:08:00.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:08:00.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:08:00.836 [DEBUG] [Thread-304999] [transport.py] [_log()] userauth is OK
2025-12-24T16:08:00.836 [DEBUG] [Thread-304999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:08:00.837 [DEBUG] [Thread-304999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:08:00.837 [DEBUG] [Thread-304999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:08:00.837 [DEBUG] [Thread-304999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:08:00.863 [INFO] [Thread-304999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:08:00.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:08:01.633 [DEBUG] [Thread-304999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:08:01.633 [DEBUG] [Thread-304999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:08:01.643 [DEBUG] [Thread-304999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:08:01.674 [DEBUG] [Thread-304999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:08:01.674 [DEBUG] [Thread-304999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:08:01.677 [DEBUG] [Thread-304999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:08:01.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:08:01.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:08:01.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:08:01.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:08:01.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:08:01.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:08:01.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:08:01.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:08:01.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:08:01.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.588262 -999.00  +24.00  15.94     30   +5.80 1 2 1 1 1   888    0 19.26 20.61 ----- 15.9 15.9 130.2 19.4 30.4 -21.1 30.4 -22.1 31.4 -20.3 31.9 -21.3
2025-12-24T16:08:01.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:08:01.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:08:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.588262
2025-12-24T16:08:01.709 [DEBUG] [Thread-304999] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:08:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:08:01.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:08:01.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:08:01.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:08:01.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:08:01.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:07:48', tmtdew=21.41, humidity=24.58, cloud=0.0, wind=20.7, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:07:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:08:01.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:08:01.828 [DEBUG] [Thread-305002] [transport.py] [_log()] starting thread (client mode): 0xf57a9d20
2025-12-24T16:08:01.828 [DEBUG] [Thread-305002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:08:01.842 [DEBUG] [Thread-305002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:08:01.843 [INFO] [Thread-305002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] client lang: <none>
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] server lang: <none>
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] kex follows: False
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] Compression: none
2025-12-24T16:08:01.850 [DEBUG] [Thread-305002] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:08:01.905 [DEBUG] [Thread-305002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:08:01.905 [DEBUG] [Thread-305002] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:08:01.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:08:01.906 [DEBUG] [Thread-305002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:08:01.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:08:01.963 [DEBUG] [Thread-305002] [transport.py] [_log()] userauth is OK
2025-12-24T16:08:01.963 [DEBUG] [Thread-305002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:08:01.963 [DEBUG] [Thread-305002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:08:01.963 [DEBUG] [Thread-305002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:08:01.963 [DEBUG] [Thread-305002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:08:01.977 [INFO] [Thread-305002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:08:01.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:08:01.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:08:02.794 [DEBUG] [Thread-305002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:08:02.794 [DEBUG] [Thread-305002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:08:02.843 [DEBUG] [Thread-305002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:08:02.843 [DEBUG] [Thread-305002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:08:02.852 [DEBUG] [Thread-305002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:08:02.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:08:02.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:08:02.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:08:02.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:08:02.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:08:02.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:08:02.887 [DEBUG] [Thread-305002] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:08:09.157 [DEBUG] [Thread-305004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:08:12.062 [DEBUG] [Thread-305005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:08:27.238 [DEBUG] [Thread-305006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:08:30.302 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:08:30.303 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:08:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:08:32.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:08:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:08:34.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 8, 22), 21.42, 24.6, 0.0, 22.78, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:08:34.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:08:22
2025-12-24T16:08:34.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:08:34.570 [DEBUG] [Thread-305007] [transport.py] [_log()] starting thread (client mode): 0xf81c2740
2025-12-24T16:08:34.571 [DEBUG] [Thread-305007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:08:34.584 [DEBUG] [Thread-305007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:08:34.584 [INFO] [Thread-305007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] client lang: <none>
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] server lang: <none>
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] kex follows: False
2025-12-24T16:08:34.589 [DEBUG] [Thread-305007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:08:34.590 [DEBUG] [Thread-305007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:08:34.590 [DEBUG] [Thread-305007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:08:34.590 [DEBUG] [Thread-305007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:08:34.590 [DEBUG] [Thread-305007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:08:34.590 [DEBUG] [Thread-305007] [transport.py] [_log()] Compression: none
2025-12-24T16:08:34.590 [DEBUG] [Thread-305007] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:08:34.623 [DEBUG] [Thread-305007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:08:34.627 [DEBUG] [Thread-305007] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:08:34.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:08:34.629 [DEBUG] [Thread-305007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:08:34.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:08:34.632 [DEBUG] [Thread-305007] [transport.py] [_log()] userauth is OK
2025-12-24T16:08:34.632 [DEBUG] [Thread-305007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:08:34.632 [DEBUG] [Thread-305007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:08:34.632 [DEBUG] [Thread-305007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:08:34.632 [DEBUG] [Thread-305007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:08:34.663 [INFO] [Thread-305007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:08:34.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:08:35.275 [DEBUG] [Thread-305007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:08:35.275 [DEBUG] [Thread-305007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:08:35.276 [DEBUG] [Thread-305007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:08:35.317 [DEBUG] [Thread-305007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:08:35.317 [DEBUG] [Thread-305007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:08:35.319 [DEBUG] [Thread-305007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:08:35.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:08:35.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:08:35.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:08:35.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:08:35.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:08:35.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:08:35.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:08:35.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:08:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:08:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.588609 -999.00  +24.30  19.76     30   +5.80 1 2 1 1 1   888    0 19.02 16.43 ----- 19.8 19.8 161.2 28.1 30.2 -22.6 30.4 -21.5 31.2 -20.6 31.6 -21.7
2025-12-24T16:08:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:08:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:08:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.588609
2025-12-24T16:08:35.345 [DEBUG] [Thread-305007] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:08:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:08:35.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:08:35.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:08:35.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:08:35.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:08:35.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:08:22', tmtdew=21.42, humidity=24.6, cloud=0.0, wind=22.78, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:07:35.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:08:35.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:08:35.446 [DEBUG] [Thread-305010] [transport.py] [_log()] starting thread (client mode): 0xf81896c0
2025-12-24T16:08:35.446 [DEBUG] [Thread-305010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:08:35.460 [DEBUG] [Thread-305010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:08:35.460 [INFO] [Thread-305010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] client lang: <none>
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] server lang: <none>
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] kex follows: False
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:08:35.468 [DEBUG] [Thread-305010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:08:35.469 [DEBUG] [Thread-305010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:08:35.469 [DEBUG] [Thread-305010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:08:35.469 [DEBUG] [Thread-305010] [transport.py] [_log()] Compression: none
2025-12-24T16:08:35.469 [DEBUG] [Thread-305010] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:08:35.526 [DEBUG] [Thread-305010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:08:35.527 [DEBUG] [Thread-305010] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:08:35.527 [DEBUG] [Thread-305010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:08:35.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:08:35.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:08:35.584 [DEBUG] [Thread-305010] [transport.py] [_log()] userauth is OK
2025-12-24T16:08:35.584 [DEBUG] [Thread-305010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:08:35.584 [DEBUG] [Thread-305010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:08:35.584 [DEBUG] [Thread-305010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:08:35.584 [DEBUG] [Thread-305010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:08:35.598 [INFO] [Thread-305010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:08:35.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:08:35.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:08:36.428 [DEBUG] [Thread-305010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:08:36.428 [DEBUG] [Thread-305010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:08:36.476 [DEBUG] [Thread-305010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:08:36.476 [DEBUG] [Thread-305010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:08:36.484 [DEBUG] [Thread-305010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:08:36.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:08:36.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:08:36.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:08:36.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:08:36.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:08:36.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:08:36.519 [DEBUG] [Thread-305010] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:08:42.322 [DEBUG] [Thread-305012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:08:57.478 [DEBUG] [Thread-305013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:09:06.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:09:06.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:09:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:09:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 8, 55), 21.64, 24.35, 0.0, 33.63, 24.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:09:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:08:55
2025-12-24T16:09:07.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:09:08.075 [DEBUG] [Thread-305014] [transport.py] [_log()] starting thread (client mode): 0xf81c3e20
2025-12-24T16:09:08.076 [DEBUG] [Thread-305014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:09:08.076 [DEBUG] [Thread-305014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:09:08.076 [INFO] [Thread-305014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:09:08.079 [DEBUG] [Thread-305014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:09:08.079 [DEBUG] [Thread-305014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] client lang: <none>
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] server lang: <none>
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] kex follows: False
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:09:08.080 [DEBUG] [Thread-305014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:09:08.081 [DEBUG] [Thread-305014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:09:08.081 [DEBUG] [Thread-305014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:09:08.081 [DEBUG] [Thread-305014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:09:08.081 [DEBUG] [Thread-305014] [transport.py] [_log()] Compression: none
2025-12-24T16:09:08.081 [DEBUG] [Thread-305014] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:09:08.115 [DEBUG] [Thread-305014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:09:08.119 [DEBUG] [Thread-305014] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:09:08.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:09:08.124 [DEBUG] [Thread-305014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:09:08.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:09:08.127 [DEBUG] [Thread-305014] [transport.py] [_log()] userauth is OK
2025-12-24T16:09:08.128 [DEBUG] [Thread-305014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:09:08.128 [DEBUG] [Thread-305014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:09:08.128 [DEBUG] [Thread-305014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:09:08.128 [DEBUG] [Thread-305014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:09:08.157 [INFO] [Thread-305014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:09:08.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:09:08.802 [DEBUG] [Thread-305014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:09:08.803 [DEBUG] [Thread-305014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:09:08.814 [DEBUG] [Thread-305014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:09:08.844 [DEBUG] [Thread-305014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:09:08.844 [DEBUG] [Thread-305014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:09:08.848 [DEBUG] [Thread-305014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:09:08.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:09:08.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:09:08.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:09:08.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:09:08.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:09:08.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:09:08.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:09:08.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:09:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:09:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.589303 -999.00  +24.00  16.73     30   +5.70 1 2 1 1 1   888    0 19.02 13.86 ----- 16.7 16.7 155.9 29.6 29.7 -22.9 29.6 -22.6 30.6 -20.6 30.9 -22.1
2025-12-24T16:09:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:09:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:09:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.589303
2025-12-24T16:09:08.887 [DEBUG] [Thread-305014] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:09:08.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:09:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:09:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:09:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:09:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:09:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:08:55', tmtdew=21.64, humidity=24.35, cloud=0.0, wind=33.63, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:08:35.779', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:09:08.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:09:08.988 [DEBUG] [Thread-305017] [transport.py] [_log()] starting thread (client mode): 0xf571a7a0
2025-12-24T16:09:08.988 [DEBUG] [Thread-305017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:09:09.002 [DEBUG] [Thread-305017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:09:09.002 [INFO] [Thread-305017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] client lang: <none>
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] server lang: <none>
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] kex follows: False
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] Compression: none
2025-12-24T16:09:09.010 [DEBUG] [Thread-305017] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:09:09.067 [DEBUG] [Thread-305017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:09:09.068 [DEBUG] [Thread-305017] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:09:09.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:09:09.069 [DEBUG] [Thread-305017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:09:09.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:09:09.123 [DEBUG] [Thread-305017] [transport.py] [_log()] userauth is OK
2025-12-24T16:09:09.124 [DEBUG] [Thread-305017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:09:09.124 [DEBUG] [Thread-305017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:09:09.124 [DEBUG] [Thread-305017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:09:09.124 [DEBUG] [Thread-305017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:09:09.142 [INFO] [Thread-305017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:09:09.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:09:09.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:09:09.462 [DEBUG] [Thread-305019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:09:09.933 [DEBUG] [Thread-305017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:09:09.933 [DEBUG] [Thread-305017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:09:09.982 [DEBUG] [Thread-305017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:09:09.982 [DEBUG] [Thread-305017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:09:09.990 [DEBUG] [Thread-305017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:09:09.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:09:09.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:09:10.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
2025-12-24T16:09:10.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:09:10.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:09:10.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:09:10.026 [DEBUG] [Thread-305017] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:09:12.550 [DEBUG] [Thread-305020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:09:27.726 [DEBUG] [Thread-305021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:09:30.444 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:09:30.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:09:40.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:09:40.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:09: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
2025-12-24T16:09:41.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 9, 28), 21.63, 24.37, 0.0, 27.19, 24.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:09:41.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:09:28
2025-12-24T16:09:41.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:09:41.766 [DEBUG] [Thread-305022] [transport.py] [_log()] starting thread (client mode): 0xf5718880
2025-12-24T16:09:41.767 [DEBUG] [Thread-305022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:09:41.781 [DEBUG] [Thread-305022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:09:41.781 [INFO] [Thread-305022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:09:41.787 [DEBUG] [Thread-305022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] client lang: <none>
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] server lang: <none>
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] kex follows: False
2025-12-24T16:09:41.788 [DEBUG] [Thread-305022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:09:41.789 [DEBUG] [Thread-305022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:09:41.789 [DEBUG] [Thread-305022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:09:41.790 [DEBUG] [Thread-305022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:09:41.790 [DEBUG] [Thread-305022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:09:41.790 [DEBUG] [Thread-305022] [transport.py] [_log()] Compression: none
2025-12-24T16:09:41.790 [DEBUG] [Thread-305022] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:09:41.818 [DEBUG] [Thread-305022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:09:41.823 [DEBUG] [Thread-305022] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:09:41.825 [DEBUG] [Thread-305022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:09:41.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:09:41.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:09:41.831 [DEBUG] [Thread-305022] [transport.py] [_log()] userauth is OK
2025-12-24T16:09:41.831 [DEBUG] [Thread-305022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:09:41.832 [DEBUG] [Thread-305022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:09:41.832 [DEBUG] [Thread-305022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:09:41.832 [DEBUG] [Thread-305022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:09:41.859 [INFO] [Thread-305022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:09:41.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:09:42.450 [DEBUG] [Thread-305022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:09:42.450 [DEBUG] [Thread-305022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:09:42.452 [DEBUG] [Thread-305022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:09:42.491 [DEBUG] [Thread-305022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:09:42.491 [DEBUG] [Thread-305022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:09:42.493 [DEBUG] [Thread-305022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:09:42.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:09:42.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:09:42.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:09:42.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:09:42.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:09:42.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:09:42.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:09:42.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:09:42.515 [DEBUG] [Thread-305022] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:09:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:09:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.589998 -999.00  +23.50  18.08     31   +5.70 1 2 1 1 1   888    0 18.63 8.89 ----- 18.1 18.1 178.8 27.4 29.3 -22.8 29.3 -22.4 30.0 -21.1 30.4 -21.9
2025-12-24T16:09:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:09:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:09:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.589998
2025-12-24T16:09:42.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:09:42.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:09:42.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:09:42.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:09:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:09:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:09:28', tmtdew=21.63, humidity=24.37, cloud=0.0, wind=27.19, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:09:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:09:42.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:09:42.644 [DEBUG] [Thread-305025] [transport.py] [_log()] starting thread (client mode): 0xf571ad10
2025-12-24T16:09:42.644 [DEBUG] [Thread-305025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:09:42.661 [DEBUG] [Thread-305025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:09:42.661 [INFO] [Thread-305025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] client lang: <none>
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] server lang: <none>
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] kex follows: False
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] Compression: none
2025-12-24T16:09:42.669 [DEBUG] [Thread-305025] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:09:42.726 [DEBUG] [Thread-305025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:09:42.726 [DEBUG] [Thread-305025] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:09:42.727 [DEBUG] [Thread-305025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:09:42.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:09:42.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:09:42.783 [DEBUG] [Thread-305025] [transport.py] [_log()] userauth is OK
2025-12-24T16:09:42.783 [DEBUG] [Thread-305025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:09:42.783 [DEBUG] [Thread-305025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:09:42.783 [DEBUG] [Thread-305025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:09:42.783 [DEBUG] [Thread-305025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:09:42.797 [INFO] [Thread-305025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:09:42.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:09:42.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:09:42.852 [DEBUG] [Thread-305027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:09:43.649 [DEBUG] [Thread-305025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:09:43.649 [DEBUG] [Thread-305025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:09:43.697 [DEBUG] [Thread-305025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:09:43.697 [DEBUG] [Thread-305025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:09:43.706 [DEBUG] [Thread-305025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:09:43.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:09:43.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:09:43.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:09:43.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:09:43.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:09:43.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:09:43.744 [DEBUG] [Thread-305025] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:09:58.004 [DEBUG] [Thread-305028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:10:09.795 [DEBUG] [Thread-305029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:10:13.113 [DEBUG] [Thread-305030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:10:13.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:10:13.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:10:13.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:10:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 10, 2), 21.48, 24.57, 0.0, 24.93, 24.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:10:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:10:02
2025-12-24T16:10:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:10:15.657 [DEBUG] [Thread-305031] [transport.py] [_log()] starting thread (client mode): 0xf5788e50
2025-12-24T16:10:15.657 [DEBUG] [Thread-305031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:10:15.664 [DEBUG] [Thread-305031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:10:15.665 [INFO] [Thread-305031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:10:15.670 [DEBUG] [Thread-305031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:10:15.670 [DEBUG] [Thread-305031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:10:15.670 [DEBUG] [Thread-305031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:10:15.670 [DEBUG] [Thread-305031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:10:15.670 [DEBUG] [Thread-305031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:10:15.670 [DEBUG] [Thread-305031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] client lang: <none>
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] server lang: <none>
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] kex follows: False
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:10:15.671 [DEBUG] [Thread-305031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:10:15.672 [DEBUG] [Thread-305031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:10:15.672 [DEBUG] [Thread-305031] [transport.py] [_log()] Compression: none
2025-12-24T16:10:15.672 [DEBUG] [Thread-305031] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:10:15.696 [DEBUG] [Thread-305031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:10:15.700 [DEBUG] [Thread-305031] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:10:15.701 [DEBUG] [Thread-305031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:10:15.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:10:15.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:10:15.704 [DEBUG] [Thread-305031] [transport.py] [_log()] userauth is OK
2025-12-24T16:10:15.704 [DEBUG] [Thread-305031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:10:15.704 [DEBUG] [Thread-305031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:10:15.704 [DEBUG] [Thread-305031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:10:15.704 [DEBUG] [Thread-305031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:10:15.716 [INFO] [Thread-305031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:10:15.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:10:16.328 [DEBUG] [Thread-305031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:10:16.328 [DEBUG] [Thread-305031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:10:16.331 [DEBUG] [Thread-305031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:10:16.369 [DEBUG] [Thread-305031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:10:16.369 [DEBUG] [Thread-305031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:10:16.373 [DEBUG] [Thread-305031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:10:16.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:10:16.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:10:16.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:10:16.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:10:16.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:10:16.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:10:16.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:10:16.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:10:16.394 [DEBUG] [Thread-305031] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:10:16.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:10:16.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.590345 -999.00  +23.60  24.28     31   +5.80 1 2 1 1 1   888    0 18.86 6.05 ----- 24.3 24.3 174.8 31.1 29.3 -22.8 29.0 -22.2 29.9 -20.6 30.1 -22.9
2025-12-24T16:10:16.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:10:16.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:10:16.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.590345
2025-12-24T16:10:16.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:10:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:10:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:10:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:10:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:10:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:10:02', tmtdew=21.48, humidity=24.57, cloud=0.0, wind=24.93, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:10:05.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:10:16.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:10:16.500 [DEBUG] [Thread-305034] [transport.py] [_log()] starting thread (client mode): 0xf5789480
2025-12-24T16:10:16.500 [DEBUG] [Thread-305034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:10:16.515 [DEBUG] [Thread-305034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:10:16.515 [INFO] [Thread-305034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] client lang: <none>
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] server lang: <none>
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] kex follows: False
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] Compression: none
2025-12-24T16:10:16.522 [DEBUG] [Thread-305034] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:10:16.577 [DEBUG] [Thread-305034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:10:16.578 [DEBUG] [Thread-305034] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:10:16.578 [DEBUG] [Thread-305034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:10:16.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:10:16.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:10:16.635 [DEBUG] [Thread-305034] [transport.py] [_log()] userauth is OK
2025-12-24T16:10:16.635 [DEBUG] [Thread-305034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:10:16.635 [DEBUG] [Thread-305034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:10:16.635 [DEBUG] [Thread-305034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:10:16.635 [DEBUG] [Thread-305034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:10:16.649 [INFO] [Thread-305034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:10:16.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:10:16.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:10:17.485 [DEBUG] [Thread-305034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:10:17.486 [DEBUG] [Thread-305034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:10:17.532 [DEBUG] [Thread-305034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:10:17.533 [DEBUG] [Thread-305034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:10:17.541 [DEBUG] [Thread-305034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:10:17.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:10:17.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:10:17.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:10:17.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:10:17.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:10:17.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:10:17.575 [DEBUG] [Thread-305034] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:10:28.319 [DEBUG] [Thread-305036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:10:30.597 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:10:30.599 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:10:43.449 [DEBUG] [Thread-305037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:10:47.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:10:47.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:10:47.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:10:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 10, 36), 20.76, 25.68, 0.0, 24.24, 23.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:10:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:10:36
2025-12-24T16:10:48.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:10:48.704 [DEBUG] [Thread-305038] [transport.py] [_log()] starting thread (client mode): 0xf571a5c0
2025-12-24T16:10:48.705 [DEBUG] [Thread-305038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:10:48.711 [DEBUG] [Thread-305038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:10:48.711 [INFO] [Thread-305038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:10:48.716 [DEBUG] [Thread-305038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] client lang: <none>
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] server lang: <none>
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] kex follows: False
2025-12-24T16:10:48.717 [DEBUG] [Thread-305038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:10:48.718 [DEBUG] [Thread-305038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:10:48.718 [DEBUG] [Thread-305038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:10:48.718 [DEBUG] [Thread-305038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:10:48.718 [DEBUG] [Thread-305038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:10:48.718 [DEBUG] [Thread-305038] [transport.py] [_log()] Compression: none
2025-12-24T16:10:48.718 [DEBUG] [Thread-305038] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:10:48.747 [DEBUG] [Thread-305038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:10:48.751 [DEBUG] [Thread-305038] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:10:48.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:10:48.753 [DEBUG] [Thread-305038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:10:48.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:10:48.755 [DEBUG] [Thread-305038] [transport.py] [_log()] userauth is OK
2025-12-24T16:10:48.756 [DEBUG] [Thread-305038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:10:48.756 [DEBUG] [Thread-305038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:10:48.756 [DEBUG] [Thread-305038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:10:48.756 [DEBUG] [Thread-305038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:10:48.773 [INFO] [Thread-305038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:10:48.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:10:49.388 [DEBUG] [Thread-305038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:10:49.388 [DEBUG] [Thread-305038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:10:49.389 [DEBUG] [Thread-305038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:10:49.430 [DEBUG] [Thread-305038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:10:49.430 [DEBUG] [Thread-305038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:10:49.432 [DEBUG] [Thread-305038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:10:49.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:10:49.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:10:49.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:10:49.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:10:49.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:10:49.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:10:49.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:10:49.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:10:49.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:10:49.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.590693 -999.00  +23.60  15.97     31   +5.80 1 2 1 1 1   888    0 18.73 1.54 ----- 16.0 16.0 164.8 27.6 29.1 -22.8 28.8 -21.8 29.6 -21.0 30.0 -21.8
2025-12-24T16:10:49.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:10:49.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:10:49.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.590693
2025-12-24T16:10:49.464 [DEBUG] [Thread-305038] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:10:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:10:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:10:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:10:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:10:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:10:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:10:36', tmtdew=20.76, humidity=25.68, cloud=0.0, wind=24.24, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:10:35.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:10:49.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:10:49.560 [DEBUG] [Thread-305041] [transport.py] [_log()] starting thread (client mode): 0xf5771d80
2025-12-24T16:10:49.560 [DEBUG] [Thread-305041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:10:49.575 [DEBUG] [Thread-305041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:10:49.575 [INFO] [Thread-305041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] client lang: <none>
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] server lang: <none>
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] kex follows: False
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] Compression: none
2025-12-24T16:10:49.582 [DEBUG] [Thread-305041] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:10:49.642 [DEBUG] [Thread-305041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:10:49.642 [DEBUG] [Thread-305041] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:10:49.642 [DEBUG] [Thread-305041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:10:49.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:10:49.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:10:49.699 [DEBUG] [Thread-305041] [transport.py] [_log()] userauth is OK
2025-12-24T16:10:49.699 [DEBUG] [Thread-305041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:10:49.699 [DEBUG] [Thread-305041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:10:49.699 [DEBUG] [Thread-305041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:10:49.699 [DEBUG] [Thread-305041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:10:49.713 [INFO] [Thread-305041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:10:49.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:10:49.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:10:50.541 [DEBUG] [Thread-305041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:10:50.541 [DEBUG] [Thread-305041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:10:50.588 [DEBUG] [Thread-305041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:10:50.589 [DEBUG] [Thread-305041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:10:50.597 [DEBUG] [Thread-305041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:10:50.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:10:50.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:10:50.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:10:50.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:10:50.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:10:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:10:50.633 [DEBUG] [Thread-305041] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:10:58.527 [DEBUG] [Thread-305043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:11:10.072 [DEBUG] [Thread-305044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:11:13.656 [DEBUG] [Thread-305045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:11:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:11:20.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:11:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:11:21.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 11, 9), 20.71, 25.76, 0.0, 24.91, 23.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:11:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:11:09
2025-12-24T16:11:22.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:11:22.229 [DEBUG] [Thread-305046] [transport.py] [_log()] starting thread (client mode): 0xf5788b20
2025-12-24T16:11:22.230 [DEBUG] [Thread-305046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:11:22.241 [DEBUG] [Thread-305046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:11:22.241 [INFO] [Thread-305046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] client lang: <none>
2025-12-24T16:11:22.247 [DEBUG] [Thread-305046] [transport.py] [_log()] server lang: <none>
2025-12-24T16:11:22.248 [DEBUG] [Thread-305046] [transport.py] [_log()] kex follows: False
2025-12-24T16:11:22.248 [DEBUG] [Thread-305046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:11:22.248 [DEBUG] [Thread-305046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:11:22.248 [DEBUG] [Thread-305046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:11:22.249 [DEBUG] [Thread-305046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:11:22.249 [DEBUG] [Thread-305046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:11:22.249 [DEBUG] [Thread-305046] [transport.py] [_log()] Compression: none
2025-12-24T16:11:22.249 [DEBUG] [Thread-305046] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:11:22.289 [DEBUG] [Thread-305046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:11:22.294 [DEBUG] [Thread-305046] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:11:22.296 [DEBUG] [Thread-305046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:11:22.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:11:22.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:11:22.301 [DEBUG] [Thread-305046] [transport.py] [_log()] userauth is OK
2025-12-24T16:11:22.301 [DEBUG] [Thread-305046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:11:22.301 [DEBUG] [Thread-305046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:11:22.301 [DEBUG] [Thread-305046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:11:22.301 [DEBUG] [Thread-305046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:11:22.329 [INFO] [Thread-305046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:11:22.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:11:22.914 [DEBUG] [Thread-305046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:11:22.914 [DEBUG] [Thread-305046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:11:22.918 [DEBUG] [Thread-305046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:11:22.960 [DEBUG] [Thread-305046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:11:22.961 [DEBUG] [Thread-305046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:11:22.964 [DEBUG] [Thread-305046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:11:22.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:11:22.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:11:22.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:11:22.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:11:22.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:11:22.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:11:22.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:11:22.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:11:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:11:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.591040 -999.00  +23.60  17.65     31   +5.90 1 2 1 1 1   888    0 18.61 -2.55 ----- 17.6 17.6 146.8 22.1 29.1 -22.9 28.8 -22.1 29.5 -19.7 29.8 -22.5
2025-12-24T16:11:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:11:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:11:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.591040
2025-12-24T16:11:23.005 [DEBUG] [Thread-305046] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:11:23.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:11:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:11:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:11:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:11:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:11:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:11:09', tmtdew=20.71, humidity=25.76, cloud=0.0, wind=24.91, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:11:05.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:11:23.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:11:23.219 [DEBUG] [Thread-305049] [transport.py] [_log()] starting thread (client mode): 0xf578b160
2025-12-24T16:11:23.220 [DEBUG] [Thread-305049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:11:23.220 [DEBUG] [Thread-305049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:11:23.220 [INFO] [Thread-305049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] client lang: <none>
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] server lang: <none>
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] kex follows: False
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:11:23.228 [DEBUG] [Thread-305049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:11:23.229 [DEBUG] [Thread-305049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:11:23.229 [DEBUG] [Thread-305049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:11:23.229 [DEBUG] [Thread-305049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:11:23.229 [DEBUG] [Thread-305049] [transport.py] [_log()] Compression: none
2025-12-24T16:11:23.229 [DEBUG] [Thread-305049] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:11:23.294 [DEBUG] [Thread-305049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:11:23.294 [DEBUG] [Thread-305049] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:11:23.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:11:23.294 [DEBUG] [Thread-305049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:11:23.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:11:23.351 [DEBUG] [Thread-305049] [transport.py] [_log()] userauth is OK
2025-12-24T16:11:23.351 [DEBUG] [Thread-305049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:11:23.351 [DEBUG] [Thread-305049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:11:23.351 [DEBUG] [Thread-305049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:11:23.351 [DEBUG] [Thread-305049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:11:23.365 [INFO] [Thread-305049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:11:23.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:11:23.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:11:24.202 [DEBUG] [Thread-305049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:11:24.202 [DEBUG] [Thread-305049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:11:24.249 [DEBUG] [Thread-305049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:11:24.250 [DEBUG] [Thread-305049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:11:24.259 [DEBUG] [Thread-305049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:11:24.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:11:24.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:11: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') -> 00000000
2025-12-24T16:11:24.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:11:24.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:11:24.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:11:24.295 [DEBUG] [Thread-305049] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:11:28.736 [DEBUG] [Thread-305051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:11:30.741 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:11:30.743 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:11:43.878 [DEBUG] [Thread-305052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:11:54.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:11:54.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:11:54.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:11:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 11, 43), 20.9, 25.7, 0.0, 33.05, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:11:55.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:11:43
2025-12-24T16:11:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:11:56.106 [DEBUG] [Thread-305053] [transport.py] [_log()] starting thread (client mode): 0xf571b490
2025-12-24T16:11:56.107 [DEBUG] [Thread-305053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:11:56.107 [DEBUG] [Thread-305053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:11:56.108 [INFO] [Thread-305053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:11:56.111 [DEBUG] [Thread-305053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] client lang: <none>
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] server lang: <none>
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] kex follows: False
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:11:56.112 [DEBUG] [Thread-305053] [transport.py] [_log()] Compression: none
2025-12-24T16:11:56.113 [DEBUG] [Thread-305053] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:11:56.138 [DEBUG] [Thread-305053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:11:56.143 [DEBUG] [Thread-305053] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:11:56.145 [DEBUG] [Thread-305053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:11:56.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:11:56.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:11:56.150 [DEBUG] [Thread-305053] [transport.py] [_log()] userauth is OK
2025-12-24T16:11:56.150 [DEBUG] [Thread-305053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:11:56.151 [DEBUG] [Thread-305053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:11:56.151 [DEBUG] [Thread-305053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:11:56.151 [DEBUG] [Thread-305053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:11:56.179 [INFO] [Thread-305053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:11:56.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:11:56.785 [DEBUG] [Thread-305053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:11:56.785 [DEBUG] [Thread-305053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:11:56.786 [DEBUG] [Thread-305053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:11:56.827 [DEBUG] [Thread-305053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:11:56.827 [DEBUG] [Thread-305053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:11:56.830 [DEBUG] [Thread-305053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:11:56.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:11:56.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:11:56.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:11:56.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:11:56.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:11:56.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:11:56.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:11:56.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:11:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:11:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.591387 -999.00  +23.60  31.31     31   +5.80 1 2 2 1 1   888    0 18.16 -7.88 ----- 31.3 31.3 141.0 39.2 28.9 -22.7 28.8 -23.1 29.3 -21.9 29.4 -23.7
2025-12-24T16:11:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:11:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:11:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.591387
2025-12-24T16:11:56.862 [DEBUG] [Thread-305053] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:11:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:11:56.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:11:56.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:11:56.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:11:56.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:11:56.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:11:43', tmtdew=20.9, humidity=25.7, cloud=0.0, wind=33.05, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:11:35.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:11:56.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:11:56.967 [DEBUG] [Thread-305056] [transport.py] [_log()] starting thread (client mode): 0xf81c30d0
2025-12-24T16:11:56.967 [DEBUG] [Thread-305056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:11:56.982 [DEBUG] [Thread-305056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:11:56.982 [INFO] [Thread-305056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:11:56.990 [DEBUG] [Thread-305056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:11:56.990 [DEBUG] [Thread-305056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:11:56.990 [DEBUG] [Thread-305056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:11:56.990 [DEBUG] [Thread-305056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:11:56.990 [DEBUG] [Thread-305056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:11:56.990 [DEBUG] [Thread-305056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] client lang: <none>
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] server lang: <none>
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] kex follows: False
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:11:56.991 [DEBUG] [Thread-305056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:11:56.992 [DEBUG] [Thread-305056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:11:56.992 [DEBUG] [Thread-305056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:11:56.992 [DEBUG] [Thread-305056] [transport.py] [_log()] Compression: none
2025-12-24T16:11:56.992 [DEBUG] [Thread-305056] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:11:57.047 [DEBUG] [Thread-305056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:11:57.048 [DEBUG] [Thread-305056] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:11:57.048 [DEBUG] [Thread-305056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:11:57.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:11:57.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:11:57.103 [DEBUG] [Thread-305056] [transport.py] [_log()] userauth is OK
2025-12-24T16:11:57.103 [DEBUG] [Thread-305056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:11:57.103 [DEBUG] [Thread-305056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:11:57.103 [DEBUG] [Thread-305056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:11:57.103 [DEBUG] [Thread-305056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:11:57.122 [INFO] [Thread-305056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:11:57.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:11:57.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:11:57.972 [DEBUG] [Thread-305056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:11:57.972 [DEBUG] [Thread-305056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:11:58.011 [DEBUG] [Thread-305056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:11:58.011 [DEBUG] [Thread-305056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:11:58.019 [DEBUG] [Thread-305056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:11:58.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:11:58.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:11:58.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:11:58.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:11:58.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:11:58.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:11:58.056 [DEBUG] [Thread-305056] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:11:58.997 [DEBUG] [Thread-305058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:12:10.292 [DEBUG] [Thread-305059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:12:14.166 [DEBUG] [Thread-305060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:12:28.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:12:28.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:12:28.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:12:29.258 [DEBUG] [Thread-305061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:12:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 12, 16), 20.9, 25.7, 0.0, 33.75, 23.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:12:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:12:16
2025-12-24T16:12:29.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:12:29.860 [DEBUG] [Thread-305062] [transport.py] [_log()] starting thread (client mode): 0xf5719510
2025-12-24T16:12:29.860 [DEBUG] [Thread-305062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:12:29.869 [DEBUG] [Thread-305062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:12:29.869 [INFO] [Thread-305062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:12:29.874 [DEBUG] [Thread-305062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] client lang: <none>
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] server lang: <none>
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] kex follows: False
2025-12-24T16:12:29.875 [DEBUG] [Thread-305062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:12:29.876 [DEBUG] [Thread-305062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:12:29.876 [DEBUG] [Thread-305062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:12:29.876 [DEBUG] [Thread-305062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:12:29.877 [DEBUG] [Thread-305062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:12:29.877 [DEBUG] [Thread-305062] [transport.py] [_log()] Compression: none
2025-12-24T16:12:29.877 [DEBUG] [Thread-305062] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:12:29.913 [DEBUG] [Thread-305062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:12:29.918 [DEBUG] [Thread-305062] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:12:29.920 [DEBUG] [Thread-305062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:12:29.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:12:29.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:12:29.926 [DEBUG] [Thread-305062] [transport.py] [_log()] userauth is OK
2025-12-24T16:12:29.926 [DEBUG] [Thread-305062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:12:29.926 [DEBUG] [Thread-305062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:12:29.926 [DEBUG] [Thread-305062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:12:29.926 [DEBUG] [Thread-305062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:12:29.955 [INFO] [Thread-305062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:12:29.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:12:30.622 [DEBUG] [Thread-305062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:12:30.623 [DEBUG] [Thread-305062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:12:30.626 [DEBUG] [Thread-305062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:12:30.664 [DEBUG] [Thread-305062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:12:30.665 [DEBUG] [Thread-305062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:12:30.668 [DEBUG] [Thread-305062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:12:30.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:12:30.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:12:30.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:12:30.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:12:30.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:12:30.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:12:30.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:12:30.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:12:30.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:12:30.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.591734 -999.00  +23.60  24.29     31   +5.80 1 2 1 1 1   888    0 17.94 -13.32 ----- 24.3 24.3 172.4 31.2 28.6 -23.5 28.5 -23.1 29.1 -21.2 29.2 -23.6
2025-12-24T16:12:30.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:12:30.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:12:30.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.591734
2025-12-24T16:12:30.704 [DEBUG] [Thread-305062] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:12:30.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:12:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:12:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:12:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:12:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:12:30.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:12:16', tmtdew=20.9, humidity=25.7, cloud=0.0, wind=33.75, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:12:05.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:12:30.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:12:30.813 [DEBUG] [Thread-305065] [transport.py] [_log()] starting thread (client mode): 0xf57bc490
2025-12-24T16:12:30.813 [DEBUG] [Thread-305065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:12:30.827 [DEBUG] [Thread-305065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:12:30.827 [INFO] [Thread-305065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:12:30.835 [DEBUG] [Thread-305065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:12:30.835 [DEBUG] [Thread-305065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:12:30.835 [DEBUG] [Thread-305065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:12:30.835 [DEBUG] [Thread-305065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:12:30.835 [DEBUG] [Thread-305065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] client lang: <none>
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] server lang: <none>
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] kex follows: False
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:12:30.836 [DEBUG] [Thread-305065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:12:30.837 [DEBUG] [Thread-305065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:12:30.837 [DEBUG] [Thread-305065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:12:30.837 [DEBUG] [Thread-305065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:12:30.837 [DEBUG] [Thread-305065] [transport.py] [_log()] Compression: none
2025-12-24T16:12:30.837 [DEBUG] [Thread-305065] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:12:30.883 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:12:30.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:12:30.896 [DEBUG] [Thread-305065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:12:30.897 [DEBUG] [Thread-305065] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:12:30.898 [DEBUG] [Thread-305065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:12:30.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:12:30.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:12:30.951 [DEBUG] [Thread-305065] [transport.py] [_log()] userauth is OK
2025-12-24T16:12:30.951 [DEBUG] [Thread-305065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:12:30.951 [DEBUG] [Thread-305065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:12:30.951 [DEBUG] [Thread-305065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:12:30.951 [DEBUG] [Thread-305065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:12:30.975 [INFO] [Thread-305065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:12:30.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:12:30.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:12:31.817 [DEBUG] [Thread-305065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:12:31.817 [DEBUG] [Thread-305065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:12:31.856 [DEBUG] [Thread-305065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:12:31.856 [DEBUG] [Thread-305065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:12:31.865 [DEBUG] [Thread-305065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:12:31.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:12:31.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:12:31.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:12:31.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:12:31.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:12:31.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:12:31.897 [DEBUG] [Thread-305065] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:12:44.381 [DEBUG] [Thread-305067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:12:59.528 [DEBUG] [Thread-305068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:13:01.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:13:01.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:13:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:13:02.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 12, 49), 20.49, 26.28, 0.0, 25.34, 23.45, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:13:02.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:12:49
2025-12-24T16:13:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:13:03.128 [DEBUG] [Thread-305069] [transport.py] [_log()] starting thread (client mode): 0xf5771990
2025-12-24T16:13:03.128 [DEBUG] [Thread-305069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:13:03.138 [DEBUG] [Thread-305069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:13:03.138 [INFO] [Thread-305069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:13:03.144 [DEBUG] [Thread-305069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:13:03.146 [DEBUG] [Thread-305069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:13:03.146 [DEBUG] [Thread-305069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:13:03.146 [DEBUG] [Thread-305069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:13:03.146 [DEBUG] [Thread-305069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:13:03.146 [DEBUG] [Thread-305069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] client lang: <none>
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] server lang: <none>
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] kex follows: False
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:13:03.147 [DEBUG] [Thread-305069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:13:03.148 [DEBUG] [Thread-305069] [transport.py] [_log()] Compression: none
2025-12-24T16:13:03.148 [DEBUG] [Thread-305069] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:13:03.189 [DEBUG] [Thread-305069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:13:03.195 [DEBUG] [Thread-305069] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:13:03.196 [DEBUG] [Thread-305069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:13:03.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:13:03.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:13:03.207 [DEBUG] [Thread-305069] [transport.py] [_log()] userauth is OK
2025-12-24T16:13:03.207 [DEBUG] [Thread-305069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:13:03.207 [DEBUG] [Thread-305069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:13:03.207 [DEBUG] [Thread-305069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:13:03.207 [DEBUG] [Thread-305069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:13:03.231 [INFO] [Thread-305069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:13:03.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:13:03.878 [DEBUG] [Thread-305069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:13:03.878 [DEBUG] [Thread-305069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:13:03.895 [DEBUG] [Thread-305069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:13:03.918 [DEBUG] [Thread-305069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:13:03.919 [DEBUG] [Thread-305069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:13:03.921 [DEBUG] [Thread-305069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:13:03.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:13:03.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:13:03.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:13:03.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:13:03.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:13:03.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:13:03.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:13:03.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:13:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:13:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.592081 -999.00  +23.40  16.60     32   +5.80 1 2 1 1 1   888    0 18.09 -19.39 ----- 16.6 16.6 152.0 29.0 28.3 -25.1 28.3 -23.0 28.8 -21.4 29.1 -23.3
2025-12-24T16:13:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:13:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:13:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.592081
2025-12-24T16:13:03.954 [DEBUG] [Thread-305069] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:13:03.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:13:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:13:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:13:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:13:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:13:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:12:49', tmtdew=20.49, humidity=26.28, cloud=0.0, wind=25.34, temperature=23.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:12:35.798', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:13:04.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:13:04.052 [DEBUG] [Thread-305072] [transport.py] [_log()] starting thread (client mode): 0xf578a920
2025-12-24T16:13:04.052 [DEBUG] [Thread-305072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:13:04.067 [DEBUG] [Thread-305072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:13:04.067 [INFO] [Thread-305072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] client lang: <none>
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] server lang: <none>
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] kex follows: False
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] Compression: none
2025-12-24T16:13:04.075 [DEBUG] [Thread-305072] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:13:04.135 [DEBUG] [Thread-305072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:13:04.135 [DEBUG] [Thread-305072] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:13:04.135 [DEBUG] [Thread-305072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:13:04.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:13:04.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:13:04.191 [DEBUG] [Thread-305072] [transport.py] [_log()] userauth is OK
2025-12-24T16:13:04.191 [DEBUG] [Thread-305072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:13:04.192 [DEBUG] [Thread-305072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:13:04.192 [DEBUG] [Thread-305072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:13:04.192 [DEBUG] [Thread-305072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:13:04.210 [INFO] [Thread-305072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:13:04.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:13:04.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:13:05.083 [DEBUG] [Thread-305072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:13:05.083 [DEBUG] [Thread-305072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:13:05.130 [DEBUG] [Thread-305072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:13:05.130 [DEBUG] [Thread-305072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:13:05.139 [DEBUG] [Thread-305072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:13:05.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:13:05.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:13:05.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:13:05.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:13:05.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:13:05.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:13:05.174 [DEBUG] [Thread-305072] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:13:10.530 [DEBUG] [Thread-305074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:13:14.607 [DEBUG] [Thread-305075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:13:29.736 [DEBUG] [Thread-305076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:13:31.027 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:13:31.029 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:13:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:13:35.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:13:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:13:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 13, 22), 20.39, 26.43, 0.0, 30.12, 23.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:13:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:13:22
2025-12-24T16:13:36.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:13:36.943 [DEBUG] [Thread-305077] [transport.py] [_log()] starting thread (client mode): 0xf5771750
2025-12-24T16:13:36.943 [DEBUG] [Thread-305077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:13:36.955 [DEBUG] [Thread-305077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:13:36.955 [INFO] [Thread-305077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:13:36.961 [DEBUG] [Thread-305077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:13:36.961 [DEBUG] [Thread-305077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] client lang: <none>
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] server lang: <none>
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] kex follows: False
2025-12-24T16:13:36.962 [DEBUG] [Thread-305077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:13:36.963 [DEBUG] [Thread-305077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:13:36.963 [DEBUG] [Thread-305077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:13:36.964 [DEBUG] [Thread-305077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:13:36.964 [DEBUG] [Thread-305077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:13:36.964 [DEBUG] [Thread-305077] [transport.py] [_log()] Compression: none
2025-12-24T16:13:36.964 [DEBUG] [Thread-305077] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:13:37.000 [DEBUG] [Thread-305077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:13:37.005 [DEBUG] [Thread-305077] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:13:37.007 [DEBUG] [Thread-305077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:13:37.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:13:37.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:13:37.012 [DEBUG] [Thread-305077] [transport.py] [_log()] userauth is OK
2025-12-24T16:13:37.013 [DEBUG] [Thread-305077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:13:37.013 [DEBUG] [Thread-305077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:13:37.013 [DEBUG] [Thread-305077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:13:37.013 [DEBUG] [Thread-305077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:13:37.052 [INFO] [Thread-305077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:13:37.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:13:37.723 [DEBUG] [Thread-305077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:13:37.723 [DEBUG] [Thread-305077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:13:37.724 [DEBUG] [Thread-305077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:13:37.764 [DEBUG] [Thread-305077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:13:37.764 [DEBUG] [Thread-305077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:13:37.766 [DEBUG] [Thread-305077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:13:37.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:13:37.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:13:37.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:13:37.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:13:37.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:13:37.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:13:37.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:13:37.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:13:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:13:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.592429 -999.00  +23.30  17.00     32   +5.80 1 2 1 1 1   888    0 17.40 -27.39 ----- 17.0 17.0 140.1 27.9 28.2 -24.2 28.1 -23.5 28.7 -20.5 29.0 -22.6
2025-12-24T16:13:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:13:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:13:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.592429
2025-12-24T16:13:37.795 [DEBUG] [Thread-305077] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:13:37.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:13:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:13:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:13:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:13:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:13:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:13:22', tmtdew=20.39, humidity=26.43, cloud=0.0, wind=30.12, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:13:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:13:37.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:13:37.893 [DEBUG] [Thread-305080] [transport.py] [_log()] starting thread (client mode): 0xf574e500
2025-12-24T16:13:37.894 [DEBUG] [Thread-305080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:13:37.908 [DEBUG] [Thread-305080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:13:37.909 [INFO] [Thread-305080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:13:37.916 [DEBUG] [Thread-305080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:13:37.916 [DEBUG] [Thread-305080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:13:37.916 [DEBUG] [Thread-305080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:13:37.916 [DEBUG] [Thread-305080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] client lang: <none>
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] server lang: <none>
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] kex follows: False
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:13:37.917 [DEBUG] [Thread-305080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:13:37.918 [DEBUG] [Thread-305080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:13:37.918 [DEBUG] [Thread-305080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:13:37.918 [DEBUG] [Thread-305080] [transport.py] [_log()] Compression: none
2025-12-24T16:13:37.918 [DEBUG] [Thread-305080] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:13:37.976 [DEBUG] [Thread-305080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:13:37.976 [DEBUG] [Thread-305080] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:13:37.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:13:37.977 [DEBUG] [Thread-305080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:13:37.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:13:38.031 [DEBUG] [Thread-305080] [transport.py] [_log()] userauth is OK
2025-12-24T16:13:38.031 [DEBUG] [Thread-305080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:13:38.031 [DEBUG] [Thread-305080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:13:38.031 [DEBUG] [Thread-305080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:13:38.031 [DEBUG] [Thread-305080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:13:38.046 [INFO] [Thread-305080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:13:38.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:13:38.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:13:38.852 [DEBUG] [Thread-305080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:13:38.853 [DEBUG] [Thread-305080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:13:38.900 [DEBUG] [Thread-305080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:13:38.900 [DEBUG] [Thread-305080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:13:38.908 [DEBUG] [Thread-305080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:13:38.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:13:38.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:13:38.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:13:38.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:13:38.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:13:38.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:13:38.944 [DEBUG] [Thread-305080] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:13:44.822 [DEBUG] [Thread-305082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:13:59.999 [DEBUG] [Thread-305083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:14:08.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:14:08.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:14:09.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:14:10.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 13, 56), 20.36, 26.5, 0.0, 33.01, 23.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:14:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:13:56
2025-12-24T16:14:10.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:14:10.702 [DEBUG] [Thread-305084] [transport.py] [_log()] starting thread (client mode): 0xf5771960
2025-12-24T16:14:10.703 [DEBUG] [Thread-305084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:14:10.714 [DEBUG] [Thread-305084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:14:10.714 [INFO] [Thread-305084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:14:10.719 [DEBUG] [Thread-305084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] client lang: <none>
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] server lang: <none>
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] kex follows: False
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:14:10.720 [DEBUG] [Thread-305084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:14:10.721 [DEBUG] [Thread-305084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:14:10.721 [DEBUG] [Thread-305084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:14:10.721 [DEBUG] [Thread-305084] [transport.py] [_log()] Compression: none
2025-12-24T16:14:10.721 [DEBUG] [Thread-305084] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:14:10.752 [DEBUG] [Thread-305084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:14:10.755 [DEBUG] [Thread-305084] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:14:10.756 [DEBUG] [Thread-305084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:14:10.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:14:10.760 [DEBUG] [Thread-305086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:14:10.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:14:10.764 [DEBUG] [Thread-305084] [transport.py] [_log()] userauth is OK
2025-12-24T16:14:10.764 [DEBUG] [Thread-305084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:14:10.765 [DEBUG] [Thread-305084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:14:10.765 [DEBUG] [Thread-305084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:14:10.765 [DEBUG] [Thread-305084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:14:10.783 [INFO] [Thread-305084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:14:10.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:14:11.398 [DEBUG] [Thread-305084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:14:11.399 [DEBUG] [Thread-305084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:14:11.400 [DEBUG] [Thread-305084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:14:11.430 [DEBUG] [Thread-305084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:14:11.430 [DEBUG] [Thread-305084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:14:11.434 [DEBUG] [Thread-305084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:14:11.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:14:11.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:14:11.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:14:11.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:14:11.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:14:11.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:14:11.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:14:11.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:14:11.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:14:11.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.592776 -999.00  +23.30  19.74     32   +5.90 1 2 1 1 1   888    0 17.27 -36.69 ----- 19.7 19.7 164.8 30.1 28.1 -25.0 28.0 -23.4 28.5 -21.3 28.8 -22.9
2025-12-24T16:14:11.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:14:11.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:14:11.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.592776
2025-12-24T16:14:11.472 [DEBUG] [Thread-305084] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:14:11.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:14:11.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:14:11.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:14:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:14:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:14:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:13:56', tmtdew=20.36, humidity=26.5, cloud=0.0, wind=33.01, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:13:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:14:11.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:14:11.593 [DEBUG] [Thread-305088] [transport.py] [_log()] starting thread (client mode): 0xf578a680
2025-12-24T16:14:11.593 [DEBUG] [Thread-305088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:14:11.608 [DEBUG] [Thread-305088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:14:11.608 [INFO] [Thread-305088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] client lang: <none>
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] server lang: <none>
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] kex follows: False
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:14:11.616 [DEBUG] [Thread-305088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:14:11.617 [DEBUG] [Thread-305088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:14:11.617 [DEBUG] [Thread-305088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:14:11.617 [DEBUG] [Thread-305088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:14:11.617 [DEBUG] [Thread-305088] [transport.py] [_log()] Compression: none
2025-12-24T16:14:11.617 [DEBUG] [Thread-305088] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:14:11.675 [DEBUG] [Thread-305088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:14:11.676 [DEBUG] [Thread-305088] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:14:11.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:14:11.677 [DEBUG] [Thread-305088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:14:11.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:14:11.732 [DEBUG] [Thread-305088] [transport.py] [_log()] userauth is OK
2025-12-24T16:14:11.732 [DEBUG] [Thread-305088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:14:11.732 [DEBUG] [Thread-305088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:14:11.732 [DEBUG] [Thread-305088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:14:11.732 [DEBUG] [Thread-305088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:14:11.753 [INFO] [Thread-305088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:14:11.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:14:11.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:14:12.573 [DEBUG] [Thread-305088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:14:12.573 [DEBUG] [Thread-305088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:14:12.621 [DEBUG] [Thread-305088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:14:12.622 [DEBUG] [Thread-305088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:14:12.631 [DEBUG] [Thread-305088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:14:12.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:14:12.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:14:12.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:14:12.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:14:12.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:14:12.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:14:12.668 [DEBUG] [Thread-305088] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:14:15.119 [DEBUG] [Thread-305090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:14:30.265 [DEBUG] [Thread-305091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:14:31.171 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:14:31.172 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:14:42.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:14:42.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:14:42.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:14:44.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 14, 29), 20.37, 26.48, 0.0, 34.14, 23.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:14:44.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:14:29
2025-12-24T16:14:44.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:14:44.486 [DEBUG] [Thread-305092] [transport.py] [_log()] starting thread (client mode): 0xf81c1d80
2025-12-24T16:14:44.487 [DEBUG] [Thread-305092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:14:44.488 [DEBUG] [Thread-305092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:14:44.489 [INFO] [Thread-305092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] client lang: <none>
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] server lang: <none>
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] kex follows: False
2025-12-24T16:14:44.492 [DEBUG] [Thread-305092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:14:44.493 [DEBUG] [Thread-305092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:14:44.493 [DEBUG] [Thread-305092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:14:44.493 [DEBUG] [Thread-305092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:14:44.493 [DEBUG] [Thread-305092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:14:44.494 [DEBUG] [Thread-305092] [transport.py] [_log()] Compression: none
2025-12-24T16:14:44.494 [DEBUG] [Thread-305092] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:14:44.529 [DEBUG] [Thread-305092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:14:44.533 [DEBUG] [Thread-305092] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:14:44.535 [DEBUG] [Thread-305092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:14:44.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:14:44.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:14:44.540 [DEBUG] [Thread-305092] [transport.py] [_log()] userauth is OK
2025-12-24T16:14:44.540 [DEBUG] [Thread-305092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:14:44.540 [DEBUG] [Thread-305092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:14:44.540 [DEBUG] [Thread-305092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:14:44.540 [DEBUG] [Thread-305092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:14:44.580 [INFO] [Thread-305092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:14:44.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:14:45.190 [DEBUG] [Thread-305092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:14:45.191 [DEBUG] [Thread-305092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:14:45.200 [DEBUG] [Thread-305092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:14:45.231 [DEBUG] [Thread-305092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:14:45.231 [DEBUG] [Thread-305092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:14:45.234 [DEBUG] [Thread-305092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:14:45.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:14:45.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:14:45.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:14:45.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:14:45.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:14:45.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:14:45.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:14:45.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:14:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:14:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.593470 -999.00  +23.20  18.18     32   +5.90 1 2 1 1 1   888    0 16.86 -55.53 ----- 18.2 18.2 158.6 29.1 27.8 -25.6 27.7 -23.2 28.2 -21.4 28.5 -23.3
2025-12-24T16:14:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:14:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:14:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.593470
2025-12-24T16:14:45.267 [DEBUG] [Thread-305092] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:14:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:14:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:14:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:14:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:14:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:14:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:14:29', tmtdew=20.37, humidity=26.48, cloud=0.0, wind=34.14, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:14:35.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:14:45.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:14:45.363 [DEBUG] [Thread-305095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:14:45.364 [DEBUG] [Thread-305096] [transport.py] [_log()] starting thread (client mode): 0xf5789390
2025-12-24T16:14:45.364 [DEBUG] [Thread-305096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:14:45.379 [DEBUG] [Thread-305096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:14:45.379 [INFO] [Thread-305096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] client lang: <none>
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] server lang: <none>
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] kex follows: False
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] Compression: none
2025-12-24T16:14:45.386 [DEBUG] [Thread-305096] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:14:45.446 [DEBUG] [Thread-305096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:14:45.446 [DEBUG] [Thread-305096] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:14:45.446 [DEBUG] [Thread-305096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:14:45.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:14:45.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:14:45.503 [DEBUG] [Thread-305096] [transport.py] [_log()] userauth is OK
2025-12-24T16:14:45.503 [DEBUG] [Thread-305096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:14:45.503 [DEBUG] [Thread-305096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:14:45.503 [DEBUG] [Thread-305096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:14:45.503 [DEBUG] [Thread-305096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:14:45.523 [INFO] [Thread-305096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:14:45.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:14:45.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:14:46.404 [DEBUG] [Thread-305096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:14:46.404 [DEBUG] [Thread-305096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:14:46.443 [DEBUG] [Thread-305096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:14:46.443 [DEBUG] [Thread-305096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:14:46.452 [DEBUG] [Thread-305096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:14:46.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:14:46.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:14:46.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:14:46.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:14:46.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:14:46.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:14:46.484 [DEBUG] [Thread-305096] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:15:00.562 [DEBUG] [Thread-305098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:15:11.008 [DEBUG] [Thread-305099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:15:15.686 [DEBUG] [Thread-305100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:15:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:15:16.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:15:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:15:17.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 15, 2), 20.34, 26.51, 0.0, 35.41, 23.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:15:17.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:15:02
2025-12-24T16:15:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:15:17.797 [DEBUG] [Thread-305101] [transport.py] [_log()] starting thread (client mode): 0xf57709a0
2025-12-24T16:15:17.798 [DEBUG] [Thread-305101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:15:17.811 [DEBUG] [Thread-305101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:15:17.811 [INFO] [Thread-305101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:15:17.816 [DEBUG] [Thread-305101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:15:17.816 [DEBUG] [Thread-305101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] client lang: <none>
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] server lang: <none>
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] kex follows: False
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:15:17.817 [DEBUG] [Thread-305101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:15:17.818 [DEBUG] [Thread-305101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:15:17.818 [DEBUG] [Thread-305101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:15:17.818 [DEBUG] [Thread-305101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:15:17.818 [DEBUG] [Thread-305101] [transport.py] [_log()] Compression: none
2025-12-24T16:15:17.818 [DEBUG] [Thread-305101] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:15:17.852 [DEBUG] [Thread-305101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:15:17.857 [DEBUG] [Thread-305101] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:15:17.858 [DEBUG] [Thread-305101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:15:17.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:15:17.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:15:17.864 [DEBUG] [Thread-305101] [transport.py] [_log()] userauth is OK
2025-12-24T16:15:17.865 [DEBUG] [Thread-305101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:15:17.865 [DEBUG] [Thread-305101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:15:17.865 [DEBUG] [Thread-305101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:15:17.865 [DEBUG] [Thread-305101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:15:17.892 [INFO] [Thread-305101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:15:17.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:15:18.516 [DEBUG] [Thread-305101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:15:18.517 [DEBUG] [Thread-305101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:15:18.518 [DEBUG] [Thread-305101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:15:18.559 [DEBUG] [Thread-305101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:15:18.559 [DEBUG] [Thread-305101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:15:18.563 [DEBUG] [Thread-305101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:15:18.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:15:18.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:15:18.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:15:18.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:15:18.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:15:18.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:15:18.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:15:18.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:15:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:15:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.593817 -999.00  +23.20  20.58     32   +5.90 1 2 1 1 1   888    0 16.36 -63.08 ----- 20.6 20.6 155.6 28.4 27.6 -25.6 27.5 -23.3 28.1 -21.8 28.4 -23.2
2025-12-24T16:15:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:15:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:15:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.593817
2025-12-24T16:15:18.591 [DEBUG] [Thread-305101] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:15:18.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:15:18.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:15:18.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:15:18.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:15:18.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:15:18.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:15:02', tmtdew=20.34, humidity=26.51, cloud=0.0, wind=35.41, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:15:05.789', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:15:18.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:15:18.689 [DEBUG] [Thread-305104] [transport.py] [_log()] starting thread (client mode): 0xf571a770
2025-12-24T16:15:18.690 [DEBUG] [Thread-305104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:15:18.704 [DEBUG] [Thread-305104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:15:18.704 [INFO] [Thread-305104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:15:18.711 [DEBUG] [Thread-305104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:15:18.712 [DEBUG] [Thread-305104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:15:18.712 [DEBUG] [Thread-305104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:15:18.712 [DEBUG] [Thread-305104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:15:18.712 [DEBUG] [Thread-305104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:15:18.712 [DEBUG] [Thread-305104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:15:18.712 [DEBUG] [Thread-305104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:15:18.712 [DEBUG] [Thread-305104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:15:18.712 [DEBUG] [Thread-305104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] client lang: <none>
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] server lang: <none>
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] kex follows: False
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] Compression: none
2025-12-24T16:15:18.713 [DEBUG] [Thread-305104] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:15:18.770 [DEBUG] [Thread-305104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:15:18.770 [DEBUG] [Thread-305104] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:15:18.771 [DEBUG] [Thread-305104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:15:18.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:15:18.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:15:18.827 [DEBUG] [Thread-305104] [transport.py] [_log()] userauth is OK
2025-12-24T16:15:18.828 [DEBUG] [Thread-305104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:15:18.828 [DEBUG] [Thread-305104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:15:18.828 [DEBUG] [Thread-305104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:15:18.828 [DEBUG] [Thread-305104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:15:18.846 [INFO] [Thread-305104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:15:18.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:15:18.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:15:19.652 [DEBUG] [Thread-305104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:15:19.653 [DEBUG] [Thread-305104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:15:19.700 [DEBUG] [Thread-305104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:15:19.700 [DEBUG] [Thread-305104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:15:19.708 [DEBUG] [Thread-305104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:15:19.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:15:19.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:15:19.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:15:19.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:15:19.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:15:19.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:15:19.746 [DEBUG] [Thread-305104] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:15:30.774 [DEBUG] [Thread-305106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:15:31.315 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:15:31.316 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:15:45.900 [DEBUG] [Thread-305107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:15:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:15:49.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:15:49.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
2025-12-24T16:15:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 15, 35), 20.36, 26.28, 0.0, 31.55, 23.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:15:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:15:35
2025-12-24T16:15:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:15:51.472 [DEBUG] [Thread-305108] [transport.py] [_log()] starting thread (client mode): 0xf574cd60
2025-12-24T16:15:51.473 [DEBUG] [Thread-305108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:15:51.480 [DEBUG] [Thread-305108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:15:51.481 [INFO] [Thread-305108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] client lang: <none>
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] server lang: <none>
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] kex follows: False
2025-12-24T16:15:51.486 [DEBUG] [Thread-305108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:15:51.487 [DEBUG] [Thread-305108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:15:51.487 [DEBUG] [Thread-305108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:15:51.487 [DEBUG] [Thread-305108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:15:51.487 [DEBUG] [Thread-305108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:15:51.487 [DEBUG] [Thread-305108] [transport.py] [_log()] Compression: none
2025-12-24T16:15:51.487 [DEBUG] [Thread-305108] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:15:51.517 [DEBUG] [Thread-305108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:15:51.520 [DEBUG] [Thread-305108] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:15:51.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:15:51.523 [DEBUG] [Thread-305108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:15:51.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:15:51.525 [DEBUG] [Thread-305108] [transport.py] [_log()] userauth is OK
2025-12-24T16:15:51.525 [DEBUG] [Thread-305108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:15:51.525 [DEBUG] [Thread-305108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:15:51.525 [DEBUG] [Thread-305108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:15:51.525 [DEBUG] [Thread-305108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:15:51.537 [INFO] [Thread-305108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:15:51.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:15:52.204 [DEBUG] [Thread-305108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:15:52.204 [DEBUG] [Thread-305108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:15:52.205 [DEBUG] [Thread-305108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:15:52.245 [DEBUG] [Thread-305108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:15:52.245 [DEBUG] [Thread-305108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:15:52.248 [DEBUG] [Thread-305108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:15:52.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:15:52.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:15:52.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:15:52.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:15:52.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:15:52.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:15:52.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:15:52.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:15:52.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:15:52.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.594165 -999.00  +23.30  25.60     32   +5.90 1 2 1 1 1   888    0 16.43 -67.96 ----- 25.6 25.6 156.1 38.7 27.5 -24.5 27.4 -23.4 27.9 -20.9 28.1 -24.3
2025-12-24T16:15:52.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:15:52.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:15:52.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.594165
2025-12-24T16:15:52.275 [DEBUG] [Thread-305108] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:15:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:15:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:15:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:15:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:15:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:15:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:15:35', tmtdew=20.36, humidity=26.28, cloud=0.0, wind=31.55, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:15:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:15:52.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:15:52.378 [DEBUG] [Thread-305111] [transport.py] [_log()] starting thread (client mode): 0xf5753310
2025-12-24T16:15:52.378 [DEBUG] [Thread-305111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:15:52.393 [DEBUG] [Thread-305111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:15:52.394 [INFO] [Thread-305111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] client lang: <none>
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] server lang: <none>
2025-12-24T16:15:52.401 [DEBUG] [Thread-305111] [transport.py] [_log()] kex follows: False
2025-12-24T16:15:52.402 [DEBUG] [Thread-305111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:15:52.402 [DEBUG] [Thread-305111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:15:52.402 [DEBUG] [Thread-305111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:15:52.402 [DEBUG] [Thread-305111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:15:52.402 [DEBUG] [Thread-305111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:15:52.402 [DEBUG] [Thread-305111] [transport.py] [_log()] Compression: none
2025-12-24T16:15:52.402 [DEBUG] [Thread-305111] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:15:52.457 [DEBUG] [Thread-305111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:15:52.458 [DEBUG] [Thread-305111] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:15:52.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:15:52.458 [DEBUG] [Thread-305111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:15:52.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:15:52.515 [DEBUG] [Thread-305111] [transport.py] [_log()] userauth is OK
2025-12-24T16:15:52.515 [DEBUG] [Thread-305111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:15:52.515 [DEBUG] [Thread-305111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:15:52.515 [DEBUG] [Thread-305111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:15:52.515 [DEBUG] [Thread-305111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:15:52.529 [INFO] [Thread-305111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:15:52.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:15:52.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:15:53.348 [DEBUG] [Thread-305111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:15:53.349 [DEBUG] [Thread-305111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:15:53.395 [DEBUG] [Thread-305111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:15:53.396 [DEBUG] [Thread-305111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:15:53.404 [DEBUG] [Thread-305111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:15:53.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:15:53.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:15:53.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:15:53.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:15:53.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:15:53.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:15:53.436 [DEBUG] [Thread-305111] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:16:01.001 [DEBUG] [Thread-305113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:16:11.291 [DEBUG] [Thread-305114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:16:16.158 [DEBUG] [Thread-305115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:16:23.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:16:23.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:16:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:16:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 16, 9), 20.18, 26.54, 0.0, 32.43, 23.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:16:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:16:09
2025-12-24T16:16:25.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:16:25.340 [DEBUG] [Thread-305116] [transport.py] [_log()] starting thread (client mode): 0xf81c1240
2025-12-24T16:16:25.341 [DEBUG] [Thread-305116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:16:25.349 [DEBUG] [Thread-305116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:16:25.349 [INFO] [Thread-305116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:16:25.357 [DEBUG] [Thread-305116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:16:25.357 [DEBUG] [Thread-305116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:16:25.357 [DEBUG] [Thread-305116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:16:25.357 [DEBUG] [Thread-305116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:16:25.357 [DEBUG] [Thread-305116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:16:25.357 [DEBUG] [Thread-305116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:16:25.358 [DEBUG] [Thread-305116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:16:25.358 [DEBUG] [Thread-305116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:16:25.358 [DEBUG] [Thread-305116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:16:25.358 [DEBUG] [Thread-305116] [transport.py] [_log()] client lang: <none>
2025-12-24T16:16:25.358 [DEBUG] [Thread-305116] [transport.py] [_log()] server lang: <none>
2025-12-24T16:16:25.358 [DEBUG] [Thread-305116] [transport.py] [_log()] kex follows: False
2025-12-24T16:16:25.358 [DEBUG] [Thread-305116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:16:25.359 [DEBUG] [Thread-305116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:16:25.359 [DEBUG] [Thread-305116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:16:25.360 [DEBUG] [Thread-305116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:16:25.360 [DEBUG] [Thread-305116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:16:25.360 [DEBUG] [Thread-305116] [transport.py] [_log()] Compression: none
2025-12-24T16:16:25.360 [DEBUG] [Thread-305116] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:16:25.400 [DEBUG] [Thread-305116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:16:25.405 [DEBUG] [Thread-305116] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:16:25.407 [DEBUG] [Thread-305116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:16:25.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:16:25.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:16:25.413 [DEBUG] [Thread-305116] [transport.py] [_log()] userauth is OK
2025-12-24T16:16:25.414 [DEBUG] [Thread-305116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:16:25.414 [DEBUG] [Thread-305116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:16:25.414 [DEBUG] [Thread-305116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:16:25.414 [DEBUG] [Thread-305116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:16:25.442 [INFO] [Thread-305116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:16:25.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:16:26.087 [DEBUG] [Thread-305116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:16:26.088 [DEBUG] [Thread-305116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:16:26.089 [DEBUG] [Thread-305116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:16:26.128 [DEBUG] [Thread-305116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:16:26.128 [DEBUG] [Thread-305116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:16:26.130 [DEBUG] [Thread-305116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:16:26.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:16:26.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:16:26.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:16:26.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:16:26.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:16:26.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:16:26.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:16:26.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:16:26.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:16:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.594512 -999.00  +23.10  27.08     32   +5.90 1 1 1 1 1   888    0 16.10 -78.25 ----- 27.1 27.1 144.0 34.5 27.3 -25.3 27.1 -24.0 27.7 -22.5 27.9 -23.9
2025-12-24T16:16:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:16:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:16:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.594512
2025-12-24T16:16:26.156 [DEBUG] [Thread-305116] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:16:26.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:16:26.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:16:26.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:16:26.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:16:26.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:16:26.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:16:09', tmtdew=20.18, humidity=26.54, cloud=0.0, wind=32.43, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:16:05.837', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:16:26.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:16:26.273 [DEBUG] [Thread-305119] [transport.py] [_log()] starting thread (client mode): 0xf572ce50
2025-12-24T16:16:26.273 [DEBUG] [Thread-305119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:16:26.287 [DEBUG] [Thread-305119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:16:26.287 [INFO] [Thread-305119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:16:26.295 [DEBUG] [Thread-305119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:16:26.295 [DEBUG] [Thread-305119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:16:26.295 [DEBUG] [Thread-305119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:16:26.295 [DEBUG] [Thread-305119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:16:26.295 [DEBUG] [Thread-305119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:16:26.295 [DEBUG] [Thread-305119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:16:26.295 [DEBUG] [Thread-305119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] client lang: <none>
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] server lang: <none>
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] kex follows: False
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:16:26.296 [DEBUG] [Thread-305119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:16:26.297 [DEBUG] [Thread-305119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:16:26.297 [DEBUG] [Thread-305119] [transport.py] [_log()] Compression: none
2025-12-24T16:16:26.297 [DEBUG] [Thread-305119] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:16:26.353 [DEBUG] [Thread-305119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:16:26.354 [DEBUG] [Thread-305119] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:16:26.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:16:26.354 [DEBUG] [Thread-305119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:16:26.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:16:26.411 [DEBUG] [Thread-305119] [transport.py] [_log()] userauth is OK
2025-12-24T16:16:26.411 [DEBUG] [Thread-305119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:16:26.411 [DEBUG] [Thread-305119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:16:26.411 [DEBUG] [Thread-305119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:16:26.411 [DEBUG] [Thread-305119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:16:26.425 [INFO] [Thread-305119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:16:26.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:16:26.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:16:27.298 [DEBUG] [Thread-305119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:16:27.298 [DEBUG] [Thread-305119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:16:27.337 [DEBUG] [Thread-305119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:16:27.337 [DEBUG] [Thread-305119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:16:27.346 [DEBUG] [Thread-305119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:16:27.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:16:27.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:16:27.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:16:27.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:16:27.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:16:27.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:16:27.383 [DEBUG] [Thread-305119] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:16:31.255 [DEBUG] [Thread-305121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:16:31.457 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:16:31.459 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:16:46.471 [DEBUG] [Thread-305122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:16:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:16:57.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:16:57.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:16:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 16, 42), 20.05, 27.09, 0.0, 32.62, 23.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:16:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:16:42
2025-12-24T16:16:59.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:16:59.186 [DEBUG] [Thread-305123] [transport.py] [_log()] starting thread (client mode): 0xf81c2ad0
2025-12-24T16:16:59.186 [DEBUG] [Thread-305123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:16:59.196 [DEBUG] [Thread-305123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:16:59.196 [INFO] [Thread-305123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:16:59.202 [DEBUG] [Thread-305123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:16:59.202 [DEBUG] [Thread-305123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] client lang: <none>
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] server lang: <none>
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] kex follows: False
2025-12-24T16:16:59.203 [DEBUG] [Thread-305123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:16:59.204 [DEBUG] [Thread-305123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:16:59.204 [DEBUG] [Thread-305123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:16:59.204 [DEBUG] [Thread-305123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:16:59.204 [DEBUG] [Thread-305123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:16:59.205 [DEBUG] [Thread-305123] [transport.py] [_log()] Compression: none
2025-12-24T16:16:59.205 [DEBUG] [Thread-305123] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:16:59.240 [DEBUG] [Thread-305123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:16:59.245 [DEBUG] [Thread-305123] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:16:59.247 [DEBUG] [Thread-305123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:16:59.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:16:59.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:16:59.251 [DEBUG] [Thread-305123] [transport.py] [_log()] userauth is OK
2025-12-24T16:16:59.251 [DEBUG] [Thread-305123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:16:59.251 [DEBUG] [Thread-305123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:16:59.251 [DEBUG] [Thread-305123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:16:59.251 [DEBUG] [Thread-305123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:16:59.270 [INFO] [Thread-305123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:16:59.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:16:59.918 [DEBUG] [Thread-305123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:16:59.919 [DEBUG] [Thread-305123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:16:59.920 [DEBUG] [Thread-305123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:16:59.959 [DEBUG] [Thread-305123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:16:59.959 [DEBUG] [Thread-305123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:16:59.962 [DEBUG] [Thread-305123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:16:59.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:16:59.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:16:59.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:16:59.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:16:59.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:16:59.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:16:59.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:16:59.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:16:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:16:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.594859 -999.00  +23.20  18.35     32   +5.90 1 2 1 1 1   888    0 16.02 -83.89 ----- 18.4 18.4 159.3 31.6 27.2 -25.1 27.1 -23.5 27.5 -21.8 27.9 -23.1
2025-12-24T16:16:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:16:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:16:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.594859
2025-12-24T16:16:59.993 [DEBUG] [Thread-305123] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:17:00.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:17:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:17:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:17:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:17:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:17:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:16:42', tmtdew=20.05, humidity=27.09, cloud=0.0, wind=32.62, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:16:35.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:17:00.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:17:00.099 [DEBUG] [Thread-305126] [transport.py] [_log()] starting thread (client mode): 0xf81c3130
2025-12-24T16:17:00.099 [DEBUG] [Thread-305126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:17:00.114 [DEBUG] [Thread-305126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:17:00.114 [INFO] [Thread-305126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] client lang: <none>
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] server lang: <none>
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] kex follows: False
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] Compression: none
2025-12-24T16:17:00.122 [DEBUG] [Thread-305126] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:17:00.180 [DEBUG] [Thread-305126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:17:00.180 [DEBUG] [Thread-305126] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:17:00.181 [DEBUG] [Thread-305126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:17:00.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:17:00.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:17:00.235 [DEBUG] [Thread-305126] [transport.py] [_log()] userauth is OK
2025-12-24T16:17:00.236 [DEBUG] [Thread-305126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:17:00.238 [DEBUG] [Thread-305126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:17:00.238 [DEBUG] [Thread-305126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:17:00.238 [DEBUG] [Thread-305126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:17:00.259 [INFO] [Thread-305126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:17:00.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:17:00.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:17:01.089 [DEBUG] [Thread-305126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:17:01.089 [DEBUG] [Thread-305126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:17:01.136 [DEBUG] [Thread-305126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:17:01.137 [DEBUG] [Thread-305126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:17:01.146 [DEBUG] [Thread-305126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:17:01.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:17:01.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:17:01.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:17:01.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:17:01.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:17:01.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:17:01.184 [DEBUG] [Thread-305126] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:17:01.577 [DEBUG] [Thread-305128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:17:11.516 [DEBUG] [Thread-305129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:17:16.723 [DEBUG] [Thread-305130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:17:31.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:17:31.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:17:31.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
2025-12-24T16:17:31.605 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:17:31.609 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:17:31.825 [DEBUG] [Thread-305131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:17:32.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 17, 15), 20.16, 26.94, 0.0, 32.47, 23.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:17:32.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:17:15
2025-12-24T16:17:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:17:33.083 [DEBUG] [Thread-305132] [transport.py] [_log()] starting thread (client mode): 0xf81f2bf0
2025-12-24T16:17:33.084 [DEBUG] [Thread-305132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:17:33.084 [DEBUG] [Thread-305132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:17:33.084 [INFO] [Thread-305132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] client lang: <none>
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] server lang: <none>
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] kex follows: False
2025-12-24T16:17:33.088 [DEBUG] [Thread-305132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:17:33.089 [DEBUG] [Thread-305132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:17:33.089 [DEBUG] [Thread-305132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:17:33.089 [DEBUG] [Thread-305132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:17:33.089 [DEBUG] [Thread-305132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:17:33.089 [DEBUG] [Thread-305132] [transport.py] [_log()] Compression: none
2025-12-24T16:17:33.089 [DEBUG] [Thread-305132] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:17:33.124 [DEBUG] [Thread-305132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:17:33.127 [DEBUG] [Thread-305132] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:17:33.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:17:33.131 [DEBUG] [Thread-305132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:17:33.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:17:33.132 [DEBUG] [Thread-305132] [transport.py] [_log()] userauth is OK
2025-12-24T16:17:33.132 [DEBUG] [Thread-305132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:17:33.133 [DEBUG] [Thread-305132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:17:33.133 [DEBUG] [Thread-305132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:17:33.133 [DEBUG] [Thread-305132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:17:33.152 [INFO] [Thread-305132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:17:33.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:17:33.776 [DEBUG] [Thread-305132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:17:33.776 [DEBUG] [Thread-305132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:17:33.777 [DEBUG] [Thread-305132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:17:33.817 [DEBUG] [Thread-305132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:17:33.817 [DEBUG] [Thread-305132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:17:33.820 [DEBUG] [Thread-305132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:17:33.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:17:33.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:17:33.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:17:33.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:17:33.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:17:33.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:17:33.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:17:33.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:17:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:17:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.595206 -999.00  +23.30  31.72     32   +5.90 1 2 2 1 1   888    0 16.12 -85.57 ----- 31.7 31.7 173.8 35.8 27.1 -24.6 27.0 -23.1 27.5 -21.1 27.8 -24.0
2025-12-24T16:17:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:17:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:17:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.595206
2025-12-24T16:17:33.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:17:33.851 [DEBUG] [Thread-305132] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:17:33.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:17:33.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:17:33.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:17:33.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:17:33.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:17:15', tmtdew=20.16, humidity=26.94, cloud=0.0, wind=32.47, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:17:05.798', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:17:33.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:17:33.945 [DEBUG] [Thread-305135] [transport.py] [_log()] starting thread (client mode): 0xf574c9d0
2025-12-24T16:17:33.945 [DEBUG] [Thread-305135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:17:33.964 [DEBUG] [Thread-305135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:17:33.965 [INFO] [Thread-305135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:17:33.972 [DEBUG] [Thread-305135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:17:33.972 [DEBUG] [Thread-305135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] client lang: <none>
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] server lang: <none>
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] kex follows: False
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:17:33.973 [DEBUG] [Thread-305135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:17:33.974 [DEBUG] [Thread-305135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:17:33.974 [DEBUG] [Thread-305135] [transport.py] [_log()] Compression: none
2025-12-24T16:17:33.974 [DEBUG] [Thread-305135] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:17:34.031 [DEBUG] [Thread-305135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:17:34.031 [DEBUG] [Thread-305135] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:17:34.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:17:34.032 [DEBUG] [Thread-305135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:17:34.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:17:34.087 [DEBUG] [Thread-305135] [transport.py] [_log()] userauth is OK
2025-12-24T16:17:34.088 [DEBUG] [Thread-305135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:17:34.088 [DEBUG] [Thread-305135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:17:34.088 [DEBUG] [Thread-305135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:17:34.088 [DEBUG] [Thread-305135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:17:34.106 [INFO] [Thread-305135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:17:34.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:17:34.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:17:34.941 [DEBUG] [Thread-305135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:17:34.941 [DEBUG] [Thread-305135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:17:34.989 [DEBUG] [Thread-305135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:17:34.989 [DEBUG] [Thread-305135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:17:34.999 [DEBUG] [Thread-305135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:17:35.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:17:35.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:17:35.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:17:35.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:17:35.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:17:35.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:17:35.036 [DEBUG] [Thread-305135] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:17:46.895 [DEBUG] [Thread-305137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:18:02.036 [DEBUG] [Thread-305138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:18:05.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:18:05.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:18:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:18:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 17, 48), 19.8, 27.11, 0.0, 32.15, 22.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:18:06.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:17:48
2025-12-24T16:18:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:18:06.492 [DEBUG] [Thread-305139] [transport.py] [_log()] starting thread (client mode): 0xf81f1150
2025-12-24T16:18:06.492 [DEBUG] [Thread-305139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:18:06.505 [DEBUG] [Thread-305139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:18:06.506 [INFO] [Thread-305139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] client lang: <none>
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] server lang: <none>
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] kex follows: False
2025-12-24T16:18:06.510 [DEBUG] [Thread-305139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:18:06.511 [DEBUG] [Thread-305139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:18:06.511 [DEBUG] [Thread-305139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:18:06.511 [DEBUG] [Thread-305139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:18:06.511 [DEBUG] [Thread-305139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:18:06.511 [DEBUG] [Thread-305139] [transport.py] [_log()] Compression: none
2025-12-24T16:18:06.511 [DEBUG] [Thread-305139] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:18:06.541 [DEBUG] [Thread-305139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:18:06.544 [DEBUG] [Thread-305139] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:18:06.546 [DEBUG] [Thread-305139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:18:06.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:18:06.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:18:06.549 [DEBUG] [Thread-305139] [transport.py] [_log()] userauth is OK
2025-12-24T16:18:06.549 [DEBUG] [Thread-305139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:18:06.549 [DEBUG] [Thread-305139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:18:06.549 [DEBUG] [Thread-305139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:18:06.549 [DEBUG] [Thread-305139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:18:06.567 [INFO] [Thread-305139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:18:06.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:18:07.214 [DEBUG] [Thread-305139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:18:07.214 [DEBUG] [Thread-305139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:18:07.215 [DEBUG] [Thread-305139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:18:07.255 [DEBUG] [Thread-305139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:18:07.255 [DEBUG] [Thread-305139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:18:07.257 [DEBUG] [Thread-305139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:18:07.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:18:07.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:18:07.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:18:07.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:18:07.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:18:07.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:18:07.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:18:07.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:18:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:18:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.595554 -999.00  +23.10  24.11     32   +5.80 1 1 1 1 1   888    0 15.44 -94.68 ----- 24.1 24.1 159.8 31.0 27.1 -25.2 26.9 -24.5 27.4 -21.6 27.6 -24.5
2025-12-24T16:18:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:18:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:18:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.595554
2025-12-24T16:18:07.286 [DEBUG] [Thread-305139] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:18:07.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:18:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:18:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:18:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:18:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:18:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:17:48', tmtdew=19.8, humidity=27.11, cloud=0.0, wind=32.15, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:17:35.866', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:18:07.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:18:07.385 [DEBUG] [Thread-305142] [transport.py] [_log()] starting thread (client mode): 0xf81f21d0
2025-12-24T16:18:07.385 [DEBUG] [Thread-305142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:18:07.402 [DEBUG] [Thread-305142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:18:07.402 [INFO] [Thread-305142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] client lang: <none>
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] server lang: <none>
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] kex follows: False
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] Compression: none
2025-12-24T16:18:07.411 [DEBUG] [Thread-305142] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:18:07.466 [DEBUG] [Thread-305142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:18:07.466 [DEBUG] [Thread-305142] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:18:07.466 [DEBUG] [Thread-305142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:18:07.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:18:07.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:18:07.523 [DEBUG] [Thread-305142] [transport.py] [_log()] userauth is OK
2025-12-24T16:18:07.523 [DEBUG] [Thread-305142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:18:07.523 [DEBUG] [Thread-305142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:18:07.523 [DEBUG] [Thread-305142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:18:07.523 [DEBUG] [Thread-305142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:18:07.539 [INFO] [Thread-305142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:18:07.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:18:07.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:18:08.446 [DEBUG] [Thread-305142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:18:08.446 [DEBUG] [Thread-305142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:18:08.493 [DEBUG] [Thread-305142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:18:08.493 [DEBUG] [Thread-305142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:18:08.501 [DEBUG] [Thread-305142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:18:08.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:18:08.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:18:08.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:18:08.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:18:08.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:18:08.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:18:08.534 [DEBUG] [Thread-305142] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:18:11.747 [DEBUG] [Thread-305144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:18:17.158 [DEBUG] [Thread-305145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:18:31.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:18:31.800 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:18:32.410 [DEBUG] [Thread-305146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:18:38.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:18:38.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:18:38.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:18:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 18, 21), 19.77, 27.16, 0.0, 29.93, 22.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:18:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:18:21
2025-12-24T16:18:40.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:18:40.295 [DEBUG] [Thread-305147] [transport.py] [_log()] starting thread (client mode): 0xf571ada0
2025-12-24T16:18:40.296 [DEBUG] [Thread-305147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:18:40.310 [DEBUG] [Thread-305147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:18:40.310 [INFO] [Thread-305147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:18:40.314 [DEBUG] [Thread-305147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] client lang: <none>
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] server lang: <none>
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] kex follows: False
2025-12-24T16:18:40.315 [DEBUG] [Thread-305147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:18:40.316 [DEBUG] [Thread-305147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:18:40.316 [DEBUG] [Thread-305147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:18:40.316 [DEBUG] [Thread-305147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:18:40.317 [DEBUG] [Thread-305147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:18:40.317 [DEBUG] [Thread-305147] [transport.py] [_log()] Compression: none
2025-12-24T16:18:40.317 [DEBUG] [Thread-305147] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:18:40.356 [DEBUG] [Thread-305147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:18:40.361 [DEBUG] [Thread-305147] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:18:40.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:18:40.364 [DEBUG] [Thread-305147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:18:40.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:18:40.368 [DEBUG] [Thread-305147] [transport.py] [_log()] userauth is OK
2025-12-24T16:18:40.368 [DEBUG] [Thread-305147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:18:40.369 [DEBUG] [Thread-305147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:18:40.369 [DEBUG] [Thread-305147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:18:40.369 [DEBUG] [Thread-305147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:18:40.408 [INFO] [Thread-305147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:18:40.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:18:41.071 [DEBUG] [Thread-305147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:18:41.071 [DEBUG] [Thread-305147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:18:41.072 [DEBUG] [Thread-305147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:18:41.113 [DEBUG] [Thread-305147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:18:41.113 [DEBUG] [Thread-305147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:18:41.116 [DEBUG] [Thread-305147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:18:41.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:18:41.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:18:41.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:18:41.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:18:41.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:18:41.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:18:41.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:18:41.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:18:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:18:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.595901 -999.00  +22.90  18.19     33   +5.70 1 1 1 1 1   888    0 15.50 -102.16 ----- 18.2 18.2 167.8 27.6 26.9 -25.5 26.8 -24.3 27.2 -22.0 27.5 -24.0
2025-12-24T16:18:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:18:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:18:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.595901
2025-12-24T16:18:41.154 [DEBUG] [Thread-305147] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:18:41.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:18:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:18:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:18:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:18:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:18:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:18:21', tmtdew=19.77, humidity=27.16, cloud=0.0, wind=29.93, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:18:05.846', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:18:41.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:18:41.259 [DEBUG] [Thread-305150] [transport.py] [_log()] starting thread (client mode): 0xf81c2c50
2025-12-24T16:18:41.259 [DEBUG] [Thread-305150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:18:41.273 [DEBUG] [Thread-305150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:18:41.273 [INFO] [Thread-305150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:18:41.281 [DEBUG] [Thread-305150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] client lang: <none>
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] server lang: <none>
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] kex follows: False
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] Compression: none
2025-12-24T16:18:41.282 [DEBUG] [Thread-305150] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:18:41.338 [DEBUG] [Thread-305150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:18:41.338 [DEBUG] [Thread-305150] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:18:41.339 [DEBUG] [Thread-305150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:18:41.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:18:41.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:18:41.396 [DEBUG] [Thread-305150] [transport.py] [_log()] userauth is OK
2025-12-24T16:18:41.396 [DEBUG] [Thread-305150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:18:41.396 [DEBUG] [Thread-305150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:18:41.396 [DEBUG] [Thread-305150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:18:41.396 [DEBUG] [Thread-305150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:18:41.409 [INFO] [Thread-305150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:18:41.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:18:41.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:18:42.232 [DEBUG] [Thread-305150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:18:42.232 [DEBUG] [Thread-305150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:18:42.280 [DEBUG] [Thread-305150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:18:42.281 [DEBUG] [Thread-305150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:18:42.290 [DEBUG] [Thread-305150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:18:42.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:18:42.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:18:42.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:18:42.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:18:42.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:18:42.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:18:42.328 [DEBUG] [Thread-305150] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:18:47.498 [DEBUG] [Thread-305152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:19:02.703 [DEBUG] [Thread-305153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:19:12.095 [DEBUG] [Thread-305154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:19:12.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:19:12.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:19:12.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:19:13.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 18, 55), 19.95, 27.19, 0.0, 23.64, 22.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:19:13.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:18:55
2025-12-24T16:19:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:19:14.326 [DEBUG] [Thread-305155] [transport.py] [_log()] starting thread (client mode): 0xf5718580
2025-12-24T16:19:14.327 [DEBUG] [Thread-305155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:19:14.341 [DEBUG] [Thread-305155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:19:14.342 [INFO] [Thread-305155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:19:14.348 [DEBUG] [Thread-305155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:19:14.349 [DEBUG] [Thread-305155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:19:14.349 [DEBUG] [Thread-305155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:19:14.349 [DEBUG] [Thread-305155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:19:14.349 [DEBUG] [Thread-305155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:19:14.349 [DEBUG] [Thread-305155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:19:14.349 [DEBUG] [Thread-305155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:19:14.349 [DEBUG] [Thread-305155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:19:14.349 [DEBUG] [Thread-305155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:19:14.350 [DEBUG] [Thread-305155] [transport.py] [_log()] client lang: <none>
2025-12-24T16:19:14.350 [DEBUG] [Thread-305155] [transport.py] [_log()] server lang: <none>
2025-12-24T16:19:14.350 [DEBUG] [Thread-305155] [transport.py] [_log()] kex follows: False
2025-12-24T16:19:14.350 [DEBUG] [Thread-305155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:19:14.351 [DEBUG] [Thread-305155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:19:14.351 [DEBUG] [Thread-305155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:19:14.351 [DEBUG] [Thread-305155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:19:14.351 [DEBUG] [Thread-305155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:19:14.351 [DEBUG] [Thread-305155] [transport.py] [_log()] Compression: none
2025-12-24T16:19:14.351 [DEBUG] [Thread-305155] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:19:14.389 [DEBUG] [Thread-305155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:19:14.394 [DEBUG] [Thread-305155] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:19:14.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:19:14.397 [DEBUG] [Thread-305155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:19:14.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:19:14.402 [DEBUG] [Thread-305155] [transport.py] [_log()] userauth is OK
2025-12-24T16:19:14.402 [DEBUG] [Thread-305155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:19:14.403 [DEBUG] [Thread-305155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:19:14.403 [DEBUG] [Thread-305155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:19:14.403 [DEBUG] [Thread-305155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:19:14.429 [INFO] [Thread-305155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:19:14.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:19:14.986 [DEBUG] [Thread-305155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:19:14.987 [DEBUG] [Thread-305155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:19:14.988 [DEBUG] [Thread-305155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:19:15.027 [DEBUG] [Thread-305155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:19:15.028 [DEBUG] [Thread-305155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:19:15.031 [DEBUG] [Thread-305155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:19:15.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:19:15.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:19:15.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:19:15.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:19:15.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:19:15.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:19:15.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:19:15.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:19:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:19:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.596248 -999.00  +22.90  21.19     33   +5.80 1 2 1 1 1   888    0 15.16 -106.27 ----- 21.2 21.2 160.0 25.3 -999.0 -999.0 26.4 -27.4 27.0 -22.8 27.4 -23.5
2025-12-24T16:19:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:19:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:19:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.596248
2025-12-24T16:19:15.067 [DEBUG] [Thread-305155] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:19:15.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:19:15.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:19:15.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:19:15.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:19:15.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:19:15.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:18:55', tmtdew=19.95, humidity=27.19, cloud=0.0, wind=23.64, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:18:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:19:15.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:19:15.184 [DEBUG] [Thread-305158] [transport.py] [_log()] starting thread (client mode): 0xf572e4d0
2025-12-24T16:19:15.184 [DEBUG] [Thread-305158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:19:15.198 [DEBUG] [Thread-305158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:19:15.198 [INFO] [Thread-305158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] client lang: <none>
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] server lang: <none>
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] kex follows: False
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:19:15.206 [DEBUG] [Thread-305158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:19:15.207 [DEBUG] [Thread-305158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:19:15.207 [DEBUG] [Thread-305158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:19:15.207 [DEBUG] [Thread-305158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:19:15.207 [DEBUG] [Thread-305158] [transport.py] [_log()] Compression: none
2025-12-24T16:19:15.207 [DEBUG] [Thread-305158] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:19:15.264 [DEBUG] [Thread-305158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:19:15.265 [DEBUG] [Thread-305158] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:19:15.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:19:15.266 [DEBUG] [Thread-305158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:19:15.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:19:15.326 [DEBUG] [Thread-305158] [transport.py] [_log()] userauth is OK
2025-12-24T16:19:15.327 [DEBUG] [Thread-305158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:19:15.327 [DEBUG] [Thread-305158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:19:15.327 [DEBUG] [Thread-305158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:19:15.327 [DEBUG] [Thread-305158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:19:15.347 [INFO] [Thread-305158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:19:15.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:19:15.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:19:16.207 [DEBUG] [Thread-305158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:19:16.207 [DEBUG] [Thread-305158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:19:16.255 [DEBUG] [Thread-305158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:19:16.255 [DEBUG] [Thread-305158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:19:16.264 [DEBUG] [Thread-305158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:19:16.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:19:16.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:19:16.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:19:16.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:19:16.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:19:16.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:19:16.307 [DEBUG] [Thread-305158] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:19:17.821 [DEBUG] [Thread-305160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:19:31.959 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:19:31.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:19:32.965 [DEBUG] [Thread-305161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:19:46.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:19:46.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:19:46.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:19:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 19, 28), 19.95, 27.19, 0.0, 23.64, 22.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:19:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:19:28
2025-12-24T16:19:48.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:19:48.064 [DEBUG] [Thread-305162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:19:48.250 [DEBUG] [Thread-305163] [transport.py] [_log()] starting thread (client mode): 0xf818a2c0
2025-12-24T16:19:48.251 [DEBUG] [Thread-305163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:19:48.262 [DEBUG] [Thread-305163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:19:48.262 [INFO] [Thread-305163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] client lang: <none>
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] server lang: <none>
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] kex follows: False
2025-12-24T16:19:48.266 [DEBUG] [Thread-305163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:19:48.267 [DEBUG] [Thread-305163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:19:48.267 [DEBUG] [Thread-305163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:19:48.267 [DEBUG] [Thread-305163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:19:48.267 [DEBUG] [Thread-305163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:19:48.267 [DEBUG] [Thread-305163] [transport.py] [_log()] Compression: none
2025-12-24T16:19:48.267 [DEBUG] [Thread-305163] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:19:48.304 [DEBUG] [Thread-305163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:19:48.308 [DEBUG] [Thread-305163] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:19:48.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:19:48.312 [DEBUG] [Thread-305163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:19:48.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:19:48.350 [DEBUG] [Thread-305163] [transport.py] [_log()] userauth is OK
2025-12-24T16:19:48.351 [DEBUG] [Thread-305163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:19:48.351 [DEBUG] [Thread-305163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:19:48.351 [DEBUG] [Thread-305163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:19:48.351 [DEBUG] [Thread-305163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:19:48.390 [INFO] [Thread-305163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:19:48.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:19:49.032 [DEBUG] [Thread-305163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:19:49.032 [DEBUG] [Thread-305163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:19:49.033 [DEBUG] [Thread-305163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:19:49.074 [DEBUG] [Thread-305163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:19:49.074 [DEBUG] [Thread-305163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:19:49.078 [DEBUG] [Thread-305163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:19:49.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:19:49.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:19:49.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:19:49.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:19:49.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:19:49.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:19:49.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:19:49.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:19:49.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:19:49.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.596595 -999.00  +22.80  14.32     33   +5.80 1 2 1 1 1   888    0 15.09 -109.92 ----- 14.3 14.3 151.0 25.4 26.7 -25.2 26.5 -23.8 27.0 -22.0 27.3 -23.6
2025-12-24T16:19:49.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:19:49.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:19:49.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.596595
2025-12-24T16:19:49.117 [DEBUG] [Thread-305163] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:19:49.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:19:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:19:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:19:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:19:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:19:49.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:19:28', tmtdew=19.95, humidity=27.19, cloud=0.0, wind=23.64, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:19:05.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:19:49.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:19:49.220 [DEBUG] [Thread-305166] [transport.py] [_log()] starting thread (client mode): 0xf81c3310
2025-12-24T16:19:49.221 [DEBUG] [Thread-305166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:19:49.235 [DEBUG] [Thread-305166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:19:49.235 [INFO] [Thread-305166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:19:49.242 [DEBUG] [Thread-305166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:19:49.242 [DEBUG] [Thread-305166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] client lang: <none>
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] server lang: <none>
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] kex follows: False
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] Compression: none
2025-12-24T16:19:49.243 [DEBUG] [Thread-305166] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:19:49.299 [DEBUG] [Thread-305166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:19:49.300 [DEBUG] [Thread-305166] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:19:49.301 [DEBUG] [Thread-305166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:19:49.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:19:49.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:19:49.355 [DEBUG] [Thread-305166] [transport.py] [_log()] userauth is OK
2025-12-24T16:19:49.355 [DEBUG] [Thread-305166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:19:49.355 [DEBUG] [Thread-305166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:19:49.355 [DEBUG] [Thread-305166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:19:49.355 [DEBUG] [Thread-305166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:19:49.369 [INFO] [Thread-305166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:19:49.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:19:49.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:19:50.202 [DEBUG] [Thread-305166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:19:50.202 [DEBUG] [Thread-305166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:19:50.249 [DEBUG] [Thread-305166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:19:50.249 [DEBUG] [Thread-305166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:19:50.258 [DEBUG] [Thread-305166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:19:50.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:19:50.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:19:50.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:19:50.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:19:50.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:19:50.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:19:50.295 [DEBUG] [Thread-305166] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:20:03.194 [DEBUG] [Thread-305168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:20:12.345 [DEBUG] [Thread-305169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:20:18.419 [DEBUG] [Thread-305170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:20:20.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:20:20.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:20:20.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
2025-12-24T16:20:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 20, 1), 19.98, 27.26, 0.0, 23.5, 23.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:20:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:20:01
2025-12-24T16:20:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:20:21.972 [DEBUG] [Thread-305171] [transport.py] [_log()] starting thread (client mode): 0xf81e6020
2025-12-24T16:20:21.973 [DEBUG] [Thread-305171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:20:21.974 [DEBUG] [Thread-305171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:20:21.975 [INFO] [Thread-305171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:20:21.980 [DEBUG] [Thread-305171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:20:21.980 [DEBUG] [Thread-305171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:20:21.980 [DEBUG] [Thread-305171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:20:21.980 [DEBUG] [Thread-305171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:20:21.980 [DEBUG] [Thread-305171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:20:21.980 [DEBUG] [Thread-305171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:20:21.980 [DEBUG] [Thread-305171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:20:21.981 [DEBUG] [Thread-305171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:20:21.981 [DEBUG] [Thread-305171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:20:21.981 [DEBUG] [Thread-305171] [transport.py] [_log()] client lang: <none>
2025-12-24T16:20:21.981 [DEBUG] [Thread-305171] [transport.py] [_log()] server lang: <none>
2025-12-24T16:20:21.981 [DEBUG] [Thread-305171] [transport.py] [_log()] kex follows: False
2025-12-24T16:20:21.981 [DEBUG] [Thread-305171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:20:21.982 [DEBUG] [Thread-305171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:20:21.982 [DEBUG] [Thread-305171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:20:21.982 [DEBUG] [Thread-305171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:20:21.983 [DEBUG] [Thread-305171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:20:21.983 [DEBUG] [Thread-305171] [transport.py] [_log()] Compression: none
2025-12-24T16:20:21.983 [DEBUG] [Thread-305171] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:20:22.022 [DEBUG] [Thread-305171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:20:22.026 [DEBUG] [Thread-305171] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:20:22.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:20:22.029 [DEBUG] [Thread-305171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:20:22.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:20:22.034 [DEBUG] [Thread-305171] [transport.py] [_log()] userauth is OK
2025-12-24T16:20:22.034 [DEBUG] [Thread-305171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:20:22.034 [DEBUG] [Thread-305171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:20:22.034 [DEBUG] [Thread-305171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:20:22.034 [DEBUG] [Thread-305171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:20:22.063 [INFO] [Thread-305171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:20:22.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:20:22.722 [DEBUG] [Thread-305171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:20:22.722 [DEBUG] [Thread-305171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:20:22.723 [DEBUG] [Thread-305171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:20:22.762 [DEBUG] [Thread-305171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:20:22.763 [DEBUG] [Thread-305171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:20:22.765 [DEBUG] [Thread-305171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:20:22.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:20:22.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:20:22.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:20:22.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:20:22.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:20:22.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:20:22.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:20:22.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:20:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:20:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.597289 -999.00  +22.70  12.47     33   +5.80 1 2 1 1 1   888    0 14.87 -105.05 ----- 12.5 12.5 158.7 20.7 26.6 -23.2 26.4 -22.1 27.1 -17.8 27.7 -20.6
2025-12-24T16:20:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:20:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:20:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.597289
2025-12-24T16:20:22.801 [DEBUG] [Thread-305171] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:20:22.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:20:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:20:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:20:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:20:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:20:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:20:01', tmtdew=19.98, humidity=27.26, cloud=0.0, wind=23.5, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:20:05.770', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:20:22.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:20:22.905 [DEBUG] [Thread-305174] [transport.py] [_log()] starting thread (client mode): 0xf818bb80
2025-12-24T16:20:22.905 [DEBUG] [Thread-305174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:20:22.919 [DEBUG] [Thread-305174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:20:22.919 [INFO] [Thread-305174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] client lang: <none>
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] server lang: <none>
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] kex follows: False
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] Compression: none
2025-12-24T16:20:22.927 [DEBUG] [Thread-305174] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:20:22.982 [DEBUG] [Thread-305174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:20:22.982 [DEBUG] [Thread-305174] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:20:22.982 [DEBUG] [Thread-305174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:20:22.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:20:22.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:20:23.039 [DEBUG] [Thread-305174] [transport.py] [_log()] userauth is OK
2025-12-24T16:20:23.040 [DEBUG] [Thread-305174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:20:23.040 [DEBUG] [Thread-305174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:20:23.040 [DEBUG] [Thread-305174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:20:23.040 [DEBUG] [Thread-305174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:20:23.054 [INFO] [Thread-305174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:20:23.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:20:23.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:20:23.917 [DEBUG] [Thread-305174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:20:23.917 [DEBUG] [Thread-305174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:20:23.965 [DEBUG] [Thread-305174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:20:23.965 [DEBUG] [Thread-305174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:20:23.974 [DEBUG] [Thread-305174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:20:23.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:20:23.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:20:23.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:20:24.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:20:24.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:20:24.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:20:24.011 [DEBUG] [Thread-305174] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:20:32.121 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:20:32.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:20:33.526 [DEBUG] [Thread-305176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:20:48.710 [DEBUG] [Thread-305177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:20:54.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:20:54.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:20:54.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:20:55.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 20, 34), 20.2, 26.66, 0.0, 22.21, 23.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:20:55.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:20:34
2025-12-24T16:20:55.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:20:55.567 [DEBUG] [Thread-305178] [transport.py] [_log()] starting thread (client mode): 0xf81e5210
2025-12-24T16:20:55.568 [DEBUG] [Thread-305178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:20:55.575 [DEBUG] [Thread-305178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:20:55.576 [INFO] [Thread-305178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] client lang: <none>
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] server lang: <none>
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] kex follows: False
2025-12-24T16:20:55.580 [DEBUG] [Thread-305178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:20:55.581 [DEBUG] [Thread-305178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:20:55.581 [DEBUG] [Thread-305178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:20:55.581 [DEBUG] [Thread-305178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:20:55.581 [DEBUG] [Thread-305178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:20:55.581 [DEBUG] [Thread-305178] [transport.py] [_log()] Compression: none
2025-12-24T16:20:55.581 [DEBUG] [Thread-305178] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:20:55.612 [DEBUG] [Thread-305178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:20:55.615 [DEBUG] [Thread-305178] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:20:55.616 [DEBUG] [Thread-305178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:20:55.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:20:55.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:20:55.620 [DEBUG] [Thread-305178] [transport.py] [_log()] userauth is OK
2025-12-24T16:20:55.620 [DEBUG] [Thread-305178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:20:55.620 [DEBUG] [Thread-305178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:20:55.620 [DEBUG] [Thread-305178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:20:55.620 [DEBUG] [Thread-305178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:20:55.650 [INFO] [Thread-305178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:20:55.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:20:56.301 [DEBUG] [Thread-305178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:20:56.301 [DEBUG] [Thread-305178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:20:56.302 [DEBUG] [Thread-305178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:20:56.342 [DEBUG] [Thread-305178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:20:56.343 [DEBUG] [Thread-305178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:20:56.345 [DEBUG] [Thread-305178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:20:56.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:20:56.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:20:56.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:20:56.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:20:56.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:20:56.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:20:56.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:20:56.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:20:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:20:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.597637 -999.00  +22.90  12.29     33   +5.80 1 2 1 1 1   888    0 15.05 -105.27 ----- 12.3 12.3 179.6 23.7 26.9 -22.6 26.6 -23.8 27.4 -18.8 28.0 -19.1
2025-12-24T16:20:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:20:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:20:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.597637
2025-12-24T16:20:56.378 [DEBUG] [Thread-305178] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:20:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:20:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:20:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:20:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:20:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:20:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:20:34', tmtdew=20.2, humidity=26.66, cloud=0.0, wind=22.21, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:20:35.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:20:56.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:20:56.477 [DEBUG] [Thread-305181] [transport.py] [_log()] starting thread (client mode): 0xf572d810
2025-12-24T16:20:56.478 [DEBUG] [Thread-305181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:20:56.492 [DEBUG] [Thread-305181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:20:56.492 [INFO] [Thread-305181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] client lang: <none>
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] server lang: <none>
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] kex follows: False
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] Compression: none
2025-12-24T16:20:56.499 [DEBUG] [Thread-305181] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:20:56.558 [DEBUG] [Thread-305181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:20:56.558 [DEBUG] [Thread-305181] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:20:56.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:20:56.558 [DEBUG] [Thread-305181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:20:56.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:20:56.615 [DEBUG] [Thread-305181] [transport.py] [_log()] userauth is OK
2025-12-24T16:20:56.615 [DEBUG] [Thread-305181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:20:56.615 [DEBUG] [Thread-305181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:20:56.615 [DEBUG] [Thread-305181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:20:56.615 [DEBUG] [Thread-305181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:20:56.629 [INFO] [Thread-305181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:20:56.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:20:56.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:20:57.460 [DEBUG] [Thread-305181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:20:57.460 [DEBUG] [Thread-305181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:20:57.509 [DEBUG] [Thread-305181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:20:57.509 [DEBUG] [Thread-305181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:20:57.517 [DEBUG] [Thread-305181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:20:57.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:20:57.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')
2025-12-24T16:20:57.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:20:57.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:20:57.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:20:57.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:20:57.550 [DEBUG] [Thread-305181] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:21:03.809 [DEBUG] [Thread-305183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:21:12.656 [DEBUG] [Thread-305184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:21:19.019 [DEBUG] [Thread-305185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:21:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:21:27.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:21:27.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:21:29.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 21, 7), 20.14, 26.74, 0.0, 21.67, 23.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:21:29.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:21:07
2025-12-24T16:21:29.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:21:29.380 [DEBUG] [Thread-305186] [transport.py] [_log()] starting thread (client mode): 0xf572e410
2025-12-24T16:21:29.381 [DEBUG] [Thread-305186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:21:29.389 [DEBUG] [Thread-305186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:21:29.389 [INFO] [Thread-305186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:21:29.394 [DEBUG] [Thread-305186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:21:29.394 [DEBUG] [Thread-305186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:21:29.394 [DEBUG] [Thread-305186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] client lang: <none>
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] server lang: <none>
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] kex follows: False
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:21:29.395 [DEBUG] [Thread-305186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:21:29.396 [DEBUG] [Thread-305186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:21:29.396 [DEBUG] [Thread-305186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:21:29.396 [DEBUG] [Thread-305186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:21:29.396 [DEBUG] [Thread-305186] [transport.py] [_log()] Compression: none
2025-12-24T16:21:29.396 [DEBUG] [Thread-305186] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:21:29.428 [DEBUG] [Thread-305186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:21:29.431 [DEBUG] [Thread-305186] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:21:29.433 [DEBUG] [Thread-305186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:21:29.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:21:29.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:21:29.436 [DEBUG] [Thread-305186] [transport.py] [_log()] userauth is OK
2025-12-24T16:21:29.436 [DEBUG] [Thread-305186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:21:29.436 [DEBUG] [Thread-305186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:21:29.436 [DEBUG] [Thread-305186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:21:29.436 [DEBUG] [Thread-305186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:21:29.448 [INFO] [Thread-305186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:21:29.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:21:30.058 [DEBUG] [Thread-305186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:21:30.059 [DEBUG] [Thread-305186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:21:30.060 [DEBUG] [Thread-305186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:21:30.100 [DEBUG] [Thread-305186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:21:30.100 [DEBUG] [Thread-305186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:21:30.103 [DEBUG] [Thread-305186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:21:30.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:21:30.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:21:30.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:21:30.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:21:30.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:21:30.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:21:30.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:21:30.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:21:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:21:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.597984 -999.00  +23.10  12.11     33   +6.00 1 2 1 1 1   888    0 14.84 -102.88 ----- 12.1 12.1 141.2 18.3 27.2 -21.5 26.8 -21.3 27.8 -17.8 28.4 -19.6
2025-12-24T16:21:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:21:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:21:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.597984
2025-12-24T16:21:30.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:21:30.136 [DEBUG] [Thread-305186] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:21:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:21:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:21:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:21:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:21:30.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:21:07', tmtdew=20.14, humidity=26.74, cloud=0.0, wind=21.67, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:21:05.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:21:30.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:21:30.235 [DEBUG] [Thread-305189] [transport.py] [_log()] starting thread (client mode): 0xf81e4520
2025-12-24T16:21:30.235 [DEBUG] [Thread-305189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:21:30.249 [DEBUG] [Thread-305189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:21:30.249 [INFO] [Thread-305189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:21:30.257 [DEBUG] [Thread-305189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:21:30.257 [DEBUG] [Thread-305189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:21:30.257 [DEBUG] [Thread-305189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:21:30.257 [DEBUG] [Thread-305189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:21:30.257 [DEBUG] [Thread-305189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:21:30.257 [DEBUG] [Thread-305189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] client lang: <none>
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] server lang: <none>
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] kex follows: False
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:21:30.258 [DEBUG] [Thread-305189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:21:30.259 [DEBUG] [Thread-305189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:21:30.259 [DEBUG] [Thread-305189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:21:30.259 [DEBUG] [Thread-305189] [transport.py] [_log()] Compression: none
2025-12-24T16:21:30.259 [DEBUG] [Thread-305189] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:21:30.316 [DEBUG] [Thread-305189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:21:30.317 [DEBUG] [Thread-305189] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:21:30.317 [DEBUG] [Thread-305189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:21:30.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:21:30.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:21:30.371 [DEBUG] [Thread-305189] [transport.py] [_log()] userauth is OK
2025-12-24T16:21:30.372 [DEBUG] [Thread-305189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:21:30.372 [DEBUG] [Thread-305189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:21:30.372 [DEBUG] [Thread-305189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:21:30.372 [DEBUG] [Thread-305189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:21:30.393 [INFO] [Thread-305189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:21:30.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:21:30.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:21:31.230 [DEBUG] [Thread-305189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:21:31.230 [DEBUG] [Thread-305189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:21:31.270 [DEBUG] [Thread-305189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:21:31.270 [DEBUG] [Thread-305189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:21:31.279 [DEBUG] [Thread-305189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:21:31.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:21:31.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:21:31.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:21:31.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:21:31.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:21:31.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:21:31.315 [DEBUG] [Thread-305189] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:21:32.268 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:21:32.269 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:21:34.148 [DEBUG] [Thread-305191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:21:49.317 [DEBUG] [Thread-305192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:22:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:22:01.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:22:01.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:22:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 21, 40), 20.19, 26.83, 0.0, 26.47, 23.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:22:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:21:40
2025-12-24T16:22:02.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:22:03.139 [DEBUG] [Thread-305193] [transport.py] [_log()] starting thread (client mode): 0xf81e68c0
2025-12-24T16:22:03.144 [DEBUG] [Thread-305193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:22:03.149 [DEBUG] [Thread-305193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:22:03.149 [INFO] [Thread-305193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] client lang: <none>
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] server lang: <none>
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] kex follows: False
2025-12-24T16:22:03.155 [DEBUG] [Thread-305193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:22:03.156 [DEBUG] [Thread-305193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:22:03.156 [DEBUG] [Thread-305193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:22:03.156 [DEBUG] [Thread-305193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:22:03.156 [DEBUG] [Thread-305193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:22:03.156 [DEBUG] [Thread-305193] [transport.py] [_log()] Compression: none
2025-12-24T16:22:03.156 [DEBUG] [Thread-305193] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:22:03.186 [DEBUG] [Thread-305193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:22:03.190 [DEBUG] [Thread-305193] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:22:03.191 [DEBUG] [Thread-305193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:22:03.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:22:03.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:22:03.196 [DEBUG] [Thread-305193] [transport.py] [_log()] userauth is OK
2025-12-24T16:22:03.196 [DEBUG] [Thread-305193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:22:03.196 [DEBUG] [Thread-305193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:22:03.196 [DEBUG] [Thread-305193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:22:03.196 [DEBUG] [Thread-305193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:22:03.266 [INFO] [Thread-305193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:22:03.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:22:03.943 [DEBUG] [Thread-305193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:22:03.943 [DEBUG] [Thread-305193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:22:03.946 [DEBUG] [Thread-305193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:22:03.985 [DEBUG] [Thread-305193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:22:03.985 [DEBUG] [Thread-305193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:22:03.988 [DEBUG] [Thread-305193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:22:04.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:22:04.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:22:04.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:22:04.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:22:04.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:22:04.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:22:04.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:22:04.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:22:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:22:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.598331 -999.00  +23.60  24.23     32   +6.00 1 2 1 1 1   888    0 15.14 -94.88 ----- 24.2 24.2 152.2 29.2 27.4 -22.1 27.2 -21.5 28.2 -17.7 28.5 -22.3
2025-12-24T16:22:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:22:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:22:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.598331
2025-12-24T16:22:04.023 [DEBUG] [Thread-305193] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:22:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:22:04.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:22:04.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:22:04.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:22:04.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:22:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:21:40', tmtdew=20.19, humidity=26.83, cloud=0.0, wind=26.47, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:21:35.798', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:22:04.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:22:04.140 [DEBUG] [Thread-305196] [transport.py] [_log()] starting thread (client mode): 0xf5751360
2025-12-24T16:22:04.140 [DEBUG] [Thread-305196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:22:04.155 [DEBUG] [Thread-305196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:22:04.155 [INFO] [Thread-305196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:22:04.162 [DEBUG] [Thread-305196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:22:04.163 [DEBUG] [Thread-305196] [transport.py] [_log()] client lang: <none>
2025-12-24T16:22:04.164 [DEBUG] [Thread-305196] [transport.py] [_log()] server lang: <none>
2025-12-24T16:22:04.164 [DEBUG] [Thread-305196] [transport.py] [_log()] kex follows: False
2025-12-24T16:22:04.164 [DEBUG] [Thread-305196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:22:04.164 [DEBUG] [Thread-305196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:22:04.164 [DEBUG] [Thread-305196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:22:04.164 [DEBUG] [Thread-305196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:22:04.164 [DEBUG] [Thread-305196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:22:04.165 [DEBUG] [Thread-305196] [transport.py] [_log()] Compression: none
2025-12-24T16:22:04.165 [DEBUG] [Thread-305196] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:22:04.227 [DEBUG] [Thread-305196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:22:04.228 [DEBUG] [Thread-305196] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:22:04.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:22:04.229 [DEBUG] [Thread-305196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:22:04.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:22:04.284 [DEBUG] [Thread-305196] [transport.py] [_log()] userauth is OK
2025-12-24T16:22:04.284 [DEBUG] [Thread-305196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:22:04.284 [DEBUG] [Thread-305196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:22:04.284 [DEBUG] [Thread-305196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:22:04.285 [DEBUG] [Thread-305196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:22:04.310 [INFO] [Thread-305196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:22:04.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:22:04.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:22:04.415 [DEBUG] [Thread-305198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:22:05.206 [DEBUG] [Thread-305196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:22:05.206 [DEBUG] [Thread-305196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:22:05.254 [DEBUG] [Thread-305196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:22:05.254 [DEBUG] [Thread-305196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:22:05.263 [DEBUG] [Thread-305196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:22:05.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:22:05.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:22:05.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:22:05.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:22:05.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:22:05.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:22:05.297 [DEBUG] [Thread-305196] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:22:12.948 [DEBUG] [Thread-305199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:22:19.543 [DEBUG] [Thread-305200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:22:32.421 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:22:32.432 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:22:34.631 [DEBUG] [Thread-305201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:22:35.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:22:35.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:22:35.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:22:36.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 22, 13), 20.22, 26.76, 0.0, 25.3, 23.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:22:36.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:22:13
2025-12-24T16:22:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:22:37.191 [DEBUG] [Thread-305202] [transport.py] [_log()] starting thread (client mode): 0xf81f39a0
2025-12-24T16:22:37.192 [DEBUG] [Thread-305202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:22:37.203 [DEBUG] [Thread-305202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:22:37.203 [INFO] [Thread-305202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:22:37.209 [DEBUG] [Thread-305202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:22:37.209 [DEBUG] [Thread-305202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:22:37.209 [DEBUG] [Thread-305202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:22:37.209 [DEBUG] [Thread-305202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:22:37.209 [DEBUG] [Thread-305202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:22:37.209 [DEBUG] [Thread-305202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:22:37.210 [DEBUG] [Thread-305202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:22:37.210 [DEBUG] [Thread-305202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:22:37.210 [DEBUG] [Thread-305202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:22:37.210 [DEBUG] [Thread-305202] [transport.py] [_log()] client lang: <none>
2025-12-24T16:22:37.210 [DEBUG] [Thread-305202] [transport.py] [_log()] server lang: <none>
2025-12-24T16:22:37.210 [DEBUG] [Thread-305202] [transport.py] [_log()] kex follows: False
2025-12-24T16:22:37.210 [DEBUG] [Thread-305202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:22:37.211 [DEBUG] [Thread-305202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:22:37.211 [DEBUG] [Thread-305202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:22:37.211 [DEBUG] [Thread-305202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:22:37.212 [DEBUG] [Thread-305202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:22:37.212 [DEBUG] [Thread-305202] [transport.py] [_log()] Compression: none
2025-12-24T16:22:37.212 [DEBUG] [Thread-305202] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:22:37.248 [DEBUG] [Thread-305202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:22:37.252 [DEBUG] [Thread-305202] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:22:37.255 [DEBUG] [Thread-305202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:22:37.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:22:37.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:22:37.260 [DEBUG] [Thread-305202] [transport.py] [_log()] userauth is OK
2025-12-24T16:22:37.261 [DEBUG] [Thread-305202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:22:37.261 [DEBUG] [Thread-305202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:22:37.261 [DEBUG] [Thread-305202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:22:37.261 [DEBUG] [Thread-305202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:22:37.289 [INFO] [Thread-305202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:22:37.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:22:37.930 [DEBUG] [Thread-305202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:22:37.930 [DEBUG] [Thread-305202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:22:37.940 [DEBUG] [Thread-305202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:22:37.971 [DEBUG] [Thread-305202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:22:37.971 [DEBUG] [Thread-305202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:22:37.975 [DEBUG] [Thread-305202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:22:37.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:22:37.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:22:37.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:22:37.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:22:37.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:22:37.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:22:37.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:22:37.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:22:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:22:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.598679 -999.00  +23.40  17.52     32   +5.90 1 2 1 1 1   888    0 15.13 -95.56 ----- 17.5 17.5 136.0 25.4 27.4 -23.2 27.3 -22.3 28.3 -21.0 28.8 -20.1
2025-12-24T16:22:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:22:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:22:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.598679
2025-12-24T16:22:38.006 [DEBUG] [Thread-305202] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:22:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:22:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:22:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:22:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:22:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:22:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:22:13', tmtdew=20.22, humidity=26.76, cloud=0.0, wind=25.3, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:22:05.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:22:38.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:22:38.117 [DEBUG] [Thread-305205] [transport.py] [_log()] starting thread (client mode): 0xf818a290
2025-12-24T16:22:38.117 [DEBUG] [Thread-305205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:22:38.132 [DEBUG] [Thread-305205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:22:38.132 [INFO] [Thread-305205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:22:38.139 [DEBUG] [Thread-305205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:22:38.139 [DEBUG] [Thread-305205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:22:38.139 [DEBUG] [Thread-305205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:22:38.139 [DEBUG] [Thread-305205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:22:38.139 [DEBUG] [Thread-305205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] client lang: <none>
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] server lang: <none>
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] kex follows: False
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] Compression: none
2025-12-24T16:22:38.140 [DEBUG] [Thread-305205] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:22:38.199 [DEBUG] [Thread-305205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:22:38.199 [DEBUG] [Thread-305205] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:22:38.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:22:38.200 [DEBUG] [Thread-305205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:22:38.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:22:38.256 [DEBUG] [Thread-305205] [transport.py] [_log()] userauth is OK
2025-12-24T16:22:38.256 [DEBUG] [Thread-305205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:22:38.256 [DEBUG] [Thread-305205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:22:38.256 [DEBUG] [Thread-305205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:22:38.256 [DEBUG] [Thread-305205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:22:38.275 [INFO] [Thread-305205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:22:38.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:22:38.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:22:39.096 [DEBUG] [Thread-305205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:22:39.097 [DEBUG] [Thread-305205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:22:39.134 [DEBUG] [Thread-305205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:22:39.134 [DEBUG] [Thread-305205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:22:39.144 [DEBUG] [Thread-305205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:22:39.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:22:39.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:22:39.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:22:39.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:22:39.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:22:39.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:22:39.183 [DEBUG] [Thread-305205] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:22:49.736 [DEBUG] [Thread-305207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:23:04.846 [DEBUG] [Thread-305208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:23:09.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:23:09.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:23:09.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:23:09.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 22, 47), 20.2, 26.88, 0.0, 21.84, 23.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:23:09.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:22:47
2025-12-24T16:23:10.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:23:10.330 [DEBUG] [Thread-305209] [transport.py] [_log()] starting thread (client mode): 0xf572eda0
2025-12-24T16:23:10.330 [DEBUG] [Thread-305209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:23:10.334 [DEBUG] [Thread-305209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:23:10.334 [INFO] [Thread-305209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] client lang: <none>
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] server lang: <none>
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] kex follows: False
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] Compression: none
2025-12-24T16:23:10.338 [DEBUG] [Thread-305209] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:23:10.366 [DEBUG] [Thread-305209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:23:10.368 [DEBUG] [Thread-305209] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:23:10.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:23:10.370 [DEBUG] [Thread-305209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:23:10.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:23:10.409 [DEBUG] [Thread-305209] [transport.py] [_log()] userauth is OK
2025-12-24T16:23:10.409 [DEBUG] [Thread-305209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:23:10.409 [DEBUG] [Thread-305209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:23:10.409 [DEBUG] [Thread-305209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:23:10.409 [DEBUG] [Thread-305209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:23:10.439 [INFO] [Thread-305209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:23:10.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:23:11.057 [DEBUG] [Thread-305209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:23:11.058 [DEBUG] [Thread-305209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:23:11.059 [DEBUG] [Thread-305209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:23:11.099 [DEBUG] [Thread-305209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:23:11.099 [DEBUG] [Thread-305209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:23:11.102 [DEBUG] [Thread-305209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:23:11.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:23:11.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:23:11.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:23:11.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:23:11.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:23:11.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:23:11.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:23:11.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:23:11.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:23:11.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.599026 -999.00  +23.60  14.44     32   +5.90 1 2 1 1 1   888    0 15.46 -94.73 ----- 14.4 14.4 163.0 21.4 -999.0 -999.0 27.5 -21.6 28.6 -18.7 29.2 -20.0
2025-12-24T16:23:11.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:23:11.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:23:11.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.599026
2025-12-24T16:23:11.136 [DEBUG] [Thread-305209] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:23:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:23:11.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:23:11.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:23:11.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:23:11.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:23:11.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:22:47', tmtdew=20.2, humidity=26.88, cloud=0.0, wind=21.84, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:22:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:23:11.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:23:11.246 [DEBUG] [Thread-305212] [transport.py] [_log()] starting thread (client mode): 0xf574f8b0
2025-12-24T16:23:11.246 [DEBUG] [Thread-305212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:23:11.260 [DEBUG] [Thread-305212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:23:11.260 [INFO] [Thread-305212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] client lang: <none>
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] server lang: <none>
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] kex follows: False
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] Compression: none
2025-12-24T16:23:11.268 [DEBUG] [Thread-305212] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:23:11.330 [DEBUG] [Thread-305212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:23:11.330 [DEBUG] [Thread-305212] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:23:11.330 [DEBUG] [Thread-305212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:23:11.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:23:11.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:23:11.391 [DEBUG] [Thread-305212] [transport.py] [_log()] userauth is OK
2025-12-24T16:23:11.391 [DEBUG] [Thread-305212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:23:11.391 [DEBUG] [Thread-305212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:23:11.391 [DEBUG] [Thread-305212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:23:11.391 [DEBUG] [Thread-305212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:23:11.407 [INFO] [Thread-305212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:23:11.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:23:11.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:23:12.266 [DEBUG] [Thread-305212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:23:12.267 [DEBUG] [Thread-305212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:23:12.316 [DEBUG] [Thread-305212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:23:12.316 [DEBUG] [Thread-305212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:23:12.325 [DEBUG] [Thread-305212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:23:12.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:23:12.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:23:12.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:23:12.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:23:12.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:23:12.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:23:12.361 [DEBUG] [Thread-305212] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:23:13.311 [DEBUG] [Thread-305214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:23:19.899 [DEBUG] [Thread-305215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:23:32.587 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:23:32.599 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:23:35.055 [DEBUG] [Thread-305216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:23:42.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:23:42.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:23:42.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
2025-12-24T16:23:44.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 23, 20), 20.18, 26.91, 0.0, 21.07, 23.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:23:44.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:23:20
2025-12-24T16:23:44.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:23:44.610 [DEBUG] [Thread-305217] [transport.py] [_log()] starting thread (client mode): 0xf8189390
2025-12-24T16:23:44.611 [DEBUG] [Thread-305217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:23:44.619 [DEBUG] [Thread-305217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:23:44.619 [INFO] [Thread-305217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:23:44.625 [DEBUG] [Thread-305217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:23:44.625 [DEBUG] [Thread-305217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:23:44.625 [DEBUG] [Thread-305217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:23:44.625 [DEBUG] [Thread-305217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:23:44.625 [DEBUG] [Thread-305217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:23:44.626 [DEBUG] [Thread-305217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:23:44.626 [DEBUG] [Thread-305217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:23:44.626 [DEBUG] [Thread-305217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:23:44.626 [DEBUG] [Thread-305217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:23:44.626 [DEBUG] [Thread-305217] [transport.py] [_log()] client lang: <none>
2025-12-24T16:23:44.626 [DEBUG] [Thread-305217] [transport.py] [_log()] server lang: <none>
2025-12-24T16:23:44.626 [DEBUG] [Thread-305217] [transport.py] [_log()] kex follows: False
2025-12-24T16:23:44.626 [DEBUG] [Thread-305217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:23:44.627 [DEBUG] [Thread-305217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:23:44.627 [DEBUG] [Thread-305217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:23:44.628 [DEBUG] [Thread-305217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:23:44.628 [DEBUG] [Thread-305217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:23:44.628 [DEBUG] [Thread-305217] [transport.py] [_log()] Compression: none
2025-12-24T16:23:44.628 [DEBUG] [Thread-305217] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:23:44.672 [DEBUG] [Thread-305217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:23:44.676 [DEBUG] [Thread-305217] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:23:44.678 [DEBUG] [Thread-305217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:23:44.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:23:44.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:23:44.682 [DEBUG] [Thread-305217] [transport.py] [_log()] userauth is OK
2025-12-24T16:23:44.683 [DEBUG] [Thread-305217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:23:44.683 [DEBUG] [Thread-305217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:23:44.683 [DEBUG] [Thread-305217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:23:44.683 [DEBUG] [Thread-305217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:23:44.701 [INFO] [Thread-305217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:23:44.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:23:45.299 [DEBUG] [Thread-305217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:23:45.300 [DEBUG] [Thread-305217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:23:45.301 [DEBUG] [Thread-305217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:23:45.341 [DEBUG] [Thread-305217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:23:45.342 [DEBUG] [Thread-305217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:23:45.345 [DEBUG] [Thread-305217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:23:45.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:23:45.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:23:45.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:23:45.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:23:45.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:23:45.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:23:45.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:23:45.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:23:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:23:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.599373 -999.00  +23.90  21.03     31   +5.90 1 2 1 1 1   888    0 15.35 -86.23 ----- 21.0 21.0 171.8 24.9 27.9 -22.7 27.7 -22.6 28.9 -19.3 29.4 -21.6
2025-12-24T16:23:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:23:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:23:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.599373
2025-12-24T16:23:45.385 [DEBUG] [Thread-305217] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:23:45.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:23:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:23:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:23:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:23:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:23:45.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:23:20', tmtdew=20.18, humidity=26.91, cloud=0.0, wind=21.07, temperature=23.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:23:05.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:23:45.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:23:45.501 [DEBUG] [Thread-305220] [transport.py] [_log()] starting thread (client mode): 0xf81f1360
2025-12-24T16:23:45.501 [DEBUG] [Thread-305220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:23:45.516 [DEBUG] [Thread-305220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:23:45.516 [INFO] [Thread-305220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:23:45.523 [DEBUG] [Thread-305220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:23:45.524 [DEBUG] [Thread-305220] [transport.py] [_log()] client lang: <none>
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] server lang: <none>
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] kex follows: False
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] Compression: none
2025-12-24T16:23:45.525 [DEBUG] [Thread-305220] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:23:45.583 [DEBUG] [Thread-305220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:23:45.583 [DEBUG] [Thread-305220] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:23:45.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:23:45.584 [DEBUG] [Thread-305220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:23:45.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:23:45.639 [DEBUG] [Thread-305220] [transport.py] [_log()] userauth is OK
2025-12-24T16:23:45.640 [DEBUG] [Thread-305220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:23:45.640 [DEBUG] [Thread-305220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:23:45.640 [DEBUG] [Thread-305220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:23:45.640 [DEBUG] [Thread-305220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:23:45.664 [INFO] [Thread-305220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:23:45.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:23:45.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:23:46.498 [DEBUG] [Thread-305220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:23:46.498 [DEBUG] [Thread-305220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:23:46.546 [DEBUG] [Thread-305220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:23:46.546 [DEBUG] [Thread-305220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:23:46.555 [DEBUG] [Thread-305220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:23:46.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:23:46.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:23:46.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:23:46.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:23:46.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:23:46.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:23:46.592 [DEBUG] [Thread-305220] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:23:50.160 [DEBUG] [Thread-305222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:24:05.317 [DEBUG] [Thread-305223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:24:13.624 [DEBUG] [Thread-305224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:24:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:24:16.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:24:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:24:18.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 23, 54), 20.38, 26.34, 0.0, 23.38, 23.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:24:18.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:23:54
2025-12-24T16:24:18.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:24:18.461 [DEBUG] [Thread-305225] [transport.py] [_log()] starting thread (client mode): 0xf5753b80
2025-12-24T16:24:18.462 [DEBUG] [Thread-305225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:24:18.476 [DEBUG] [Thread-305225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:24:18.476 [INFO] [Thread-305225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:24:18.482 [DEBUG] [Thread-305225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] client lang: <none>
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] server lang: <none>
2025-12-24T16:24:18.483 [DEBUG] [Thread-305225] [transport.py] [_log()] kex follows: False
2025-12-24T16:24:18.484 [DEBUG] [Thread-305225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:24:18.484 [DEBUG] [Thread-305225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:24:18.485 [DEBUG] [Thread-305225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:24:18.485 [DEBUG] [Thread-305225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:24:18.485 [DEBUG] [Thread-305225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:24:18.485 [DEBUG] [Thread-305225] [transport.py] [_log()] Compression: none
2025-12-24T16:24:18.485 [DEBUG] [Thread-305225] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:24:18.528 [DEBUG] [Thread-305225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:24:18.533 [DEBUG] [Thread-305225] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:24:18.536 [DEBUG] [Thread-305225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:24:18.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:24:18.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:24:18.542 [DEBUG] [Thread-305225] [transport.py] [_log()] userauth is OK
2025-12-24T16:24:18.542 [DEBUG] [Thread-305225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:24:18.542 [DEBUG] [Thread-305225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:24:18.542 [DEBUG] [Thread-305225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:24:18.542 [DEBUG] [Thread-305225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:24:18.583 [INFO] [Thread-305225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:24:18.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:24:19.245 [DEBUG] [Thread-305225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:24:19.245 [DEBUG] [Thread-305225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:24:19.246 [DEBUG] [Thread-305225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:24:19.286 [DEBUG] [Thread-305225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:24:19.287 [DEBUG] [Thread-305225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:24:19.289 [DEBUG] [Thread-305225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:24:19.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:24:19.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:24:19.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:24:19.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:24:19.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:24:19.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:24:19.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:24:19.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:24:19.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:24:19.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.599720 -999.00  +23.80  16.83     31   +5.90 1 2 1 1 1   888    0 15.52 -81.86 ----- 16.8 16.8 177.2 17.9 28.0 -22.8 27.8 -23.7 29.1 -20.5 29.6 -21.7
2025-12-24T16:24:19.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:24:19.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:24:19.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.599720
2025-12-24T16:24:19.321 [DEBUG] [Thread-305225] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:24:19.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:24:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:24:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:24:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:24:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:24:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:23:54', tmtdew=20.38, humidity=26.34, cloud=0.0, wind=23.38, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:23:35.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:24:19.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:24:19.427 [DEBUG] [Thread-305228] [transport.py] [_log()] starting thread (client mode): 0xf81f26b0
2025-12-24T16:24:19.427 [DEBUG] [Thread-305228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:24:19.441 [DEBUG] [Thread-305228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:24:19.441 [INFO] [Thread-305228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] client lang: <none>
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] server lang: <none>
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] kex follows: False
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] Compression: none
2025-12-24T16:24:19.449 [DEBUG] [Thread-305228] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:24:19.506 [DEBUG] [Thread-305228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:24:19.506 [DEBUG] [Thread-305228] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:24:19.506 [DEBUG] [Thread-305228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:24:19.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:24:19.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:24:19.563 [DEBUG] [Thread-305228] [transport.py] [_log()] userauth is OK
2025-12-24T16:24:19.563 [DEBUG] [Thread-305228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:24:19.563 [DEBUG] [Thread-305228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:24:19.563 [DEBUG] [Thread-305228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:24:19.563 [DEBUG] [Thread-305228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:24:19.577 [INFO] [Thread-305228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:24:19.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:24:19.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:24:20.382 [DEBUG] [Thread-305228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:24:20.383 [DEBUG] [Thread-305228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:24:20.426 [DEBUG] [Thread-305230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:24:20.429 [DEBUG] [Thread-305228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:24:20.429 [DEBUG] [Thread-305228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:24:20.438 [DEBUG] [Thread-305228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:24:20.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:24:20.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:24:20.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:24:20.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:24:20.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:24:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:24:20.470 [DEBUG] [Thread-305228] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:24:32.763 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:24:32.784 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:24:35.565 [DEBUG] [Thread-305231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:24:50.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:24:50.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:24:50.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
2025-12-24T16:24:50.641 [DEBUG] [Thread-305232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:24:51.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 24, 27), 20.55, 26.08, 0.0, 24.3, 23.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:24:51.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:24:27
2025-12-24T16:24:52.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:24:52.310 [DEBUG] [Thread-305233] [transport.py] [_log()] starting thread (client mode): 0xf574f760
2025-12-24T16:24:52.310 [DEBUG] [Thread-305233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:24:52.324 [DEBUG] [Thread-305233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:24:52.325 [INFO] [Thread-305233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] client lang: <none>
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] server lang: <none>
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] kex follows: False
2025-12-24T16:24:52.328 [DEBUG] [Thread-305233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:24:52.329 [DEBUG] [Thread-305233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:24:52.329 [DEBUG] [Thread-305233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:24:52.329 [DEBUG] [Thread-305233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:24:52.329 [DEBUG] [Thread-305233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:24:52.329 [DEBUG] [Thread-305233] [transport.py] [_log()] Compression: none
2025-12-24T16:24:52.329 [DEBUG] [Thread-305233] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:24:52.359 [DEBUG] [Thread-305233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:24:52.363 [DEBUG] [Thread-305233] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:24:52.365 [DEBUG] [Thread-305233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:24:52.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:24:52.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:24:52.371 [DEBUG] [Thread-305233] [transport.py] [_log()] userauth is OK
2025-12-24T16:24:52.371 [DEBUG] [Thread-305233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:24:52.371 [DEBUG] [Thread-305233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:24:52.371 [DEBUG] [Thread-305233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:24:52.371 [DEBUG] [Thread-305233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:24:52.410 [INFO] [Thread-305233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:24:52.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:24:53.057 [DEBUG] [Thread-305233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:24:53.058 [DEBUG] [Thread-305233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:24:53.059 [DEBUG] [Thread-305233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:24:53.098 [DEBUG] [Thread-305233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:24:53.098 [DEBUG] [Thread-305233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:24:53.102 [DEBUG] [Thread-305233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:24:53.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:24:53.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:24:53.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:24:53.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:24:53.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:24:53.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:24:53.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:24:53.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:24:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:24:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.600068 -999.00  +23.90  17.34     31   +6.00 1 2 1 1 1   888    0 15.45 -80.68 ----- 17.3 17.3 151.2 22.8 28.1 -23.1 27.8 -22.9 29.3 -19.8 29.9 -21.8
2025-12-24T16:24:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:24:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:24:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.600068
2025-12-24T16:24:53.135 [DEBUG] [Thread-305233] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:24:53.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:24:53.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:24:53.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:24:53.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:24:53.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:24:53.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:24:27', tmtdew=20.55, humidity=26.08, cloud=0.0, wind=24.3, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:24:05.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:24:53.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:24:53.233 [DEBUG] [Thread-305236] [transport.py] [_log()] starting thread (client mode): 0xf81c22c0
2025-12-24T16:24:53.233 [DEBUG] [Thread-305236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:24:53.249 [DEBUG] [Thread-305236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:24:53.249 [INFO] [Thread-305236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:24:53.256 [DEBUG] [Thread-305236] [transport.py] [_log()] client lang: <none>
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] server lang: <none>
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] kex follows: False
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] Compression: none
2025-12-24T16:24:53.257 [DEBUG] [Thread-305236] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:24:53.315 [DEBUG] [Thread-305236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:24:53.315 [DEBUG] [Thread-305236] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:24:53.316 [DEBUG] [Thread-305236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:24:53.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:24:53.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:24:53.371 [DEBUG] [Thread-305236] [transport.py] [_log()] userauth is OK
2025-12-24T16:24:53.371 [DEBUG] [Thread-305236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:24:53.372 [DEBUG] [Thread-305236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:24:53.372 [DEBUG] [Thread-305236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:24:53.372 [DEBUG] [Thread-305236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:24:53.389 [INFO] [Thread-305236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:24:53.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:24:53.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:24:54.200 [DEBUG] [Thread-305236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:24:54.201 [DEBUG] [Thread-305236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:24:54.247 [DEBUG] [Thread-305236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:24:54.247 [DEBUG] [Thread-305236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:24:54.256 [DEBUG] [Thread-305236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:24:54.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:24:54.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:24:54.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:24:54.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:24:54.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:24:54.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:24:54.294 [DEBUG] [Thread-305236] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:25:05.741 [DEBUG] [Thread-305238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:25:13.929 [DEBUG] [Thread-305239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:25:21.010 [DEBUG] [Thread-305240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:25:24.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:25:24.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:25:24.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:25:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 25), 20.73, 25.88, 0.0, 24.91, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:25:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:25:00
2025-12-24T16:25:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:25:26.086 [DEBUG] [Thread-305241] [transport.py] [_log()] starting thread (client mode): 0xf572fcd0
2025-12-24T16:25:26.087 [DEBUG] [Thread-305241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:25:26.099 [DEBUG] [Thread-305241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:25:26.099 [INFO] [Thread-305241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] client lang: <none>
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] server lang: <none>
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] kex follows: False
2025-12-24T16:25:26.104 [DEBUG] [Thread-305241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:25:26.105 [DEBUG] [Thread-305241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:25:26.105 [DEBUG] [Thread-305241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:25:26.105 [DEBUG] [Thread-305241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:25:26.105 [DEBUG] [Thread-305241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:25:26.105 [DEBUG] [Thread-305241] [transport.py] [_log()] Compression: none
2025-12-24T16:25:26.105 [DEBUG] [Thread-305241] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:25:26.151 [DEBUG] [Thread-305241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:25:26.156 [DEBUG] [Thread-305241] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:25:26.158 [DEBUG] [Thread-305241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:25:26.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:25:26.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:25:26.164 [DEBUG] [Thread-305241] [transport.py] [_log()] userauth is OK
2025-12-24T16:25:26.164 [DEBUG] [Thread-305241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:25:26.165 [DEBUG] [Thread-305241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:25:26.165 [DEBUG] [Thread-305241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:25:26.165 [DEBUG] [Thread-305241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:25:26.192 [INFO] [Thread-305241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:25:26.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:25:26.983 [DEBUG] [Thread-305241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:25:26.984 [DEBUG] [Thread-305241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:25:26.985 [DEBUG] [Thread-305241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:25:27.025 [DEBUG] [Thread-305241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:25:27.025 [DEBUG] [Thread-305241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:25:27.028 [DEBUG] [Thread-305241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:25:27.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:25:27.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:25:27.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:25:27.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:25:27.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:25:27.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:25:27.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:25:27.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:25:27.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:25:27.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.600762 -999.00  +24.10  23.14     31   +5.90 1 2 1 1 1   888    0 15.81 -73.00 ----- 23.1 23.1 143.0 27.3 28.5 -23.6 28.3 -23.4 29.7 -20.2 30.3 -21.4
2025-12-24T16:25:27.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:25:27.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:25:27.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.600762
2025-12-24T16:25:27.063 [DEBUG] [Thread-305241] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:25:27.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:25:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:25:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:25:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:25:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:25:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:25:00', tmtdew=20.73, humidity=25.88, cloud=0.0, wind=24.91, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:25:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:25:27.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:25:27.177 [DEBUG] [Thread-305244] [transport.py] [_log()] starting thread (client mode): 0xf5752fe0
2025-12-24T16:25:27.177 [DEBUG] [Thread-305244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:25:27.191 [DEBUG] [Thread-305244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:25:27.191 [INFO] [Thread-305244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:25:27.198 [DEBUG] [Thread-305244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:25:27.198 [DEBUG] [Thread-305244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:25:27.198 [DEBUG] [Thread-305244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:25:27.198 [DEBUG] [Thread-305244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:25:27.198 [DEBUG] [Thread-305244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:25:27.198 [DEBUG] [Thread-305244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] client lang: <none>
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] server lang: <none>
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] kex follows: False
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] Compression: none
2025-12-24T16:25:27.199 [DEBUG] [Thread-305244] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:25:27.255 [DEBUG] [Thread-305244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:25:27.256 [DEBUG] [Thread-305244] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:25:27.257 [DEBUG] [Thread-305244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:25:27.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:25:27.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:25:27.311 [DEBUG] [Thread-305244] [transport.py] [_log()] userauth is OK
2025-12-24T16:25:27.312 [DEBUG] [Thread-305244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:25:27.312 [DEBUG] [Thread-305244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:25:27.312 [DEBUG] [Thread-305244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:25:27.312 [DEBUG] [Thread-305244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:25:27.330 [INFO] [Thread-305244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:25:27.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:25:27.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:25:28.194 [DEBUG] [Thread-305244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:25:28.195 [DEBUG] [Thread-305244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:25:28.241 [DEBUG] [Thread-305244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:25:28.241 [DEBUG] [Thread-305244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:25:28.250 [DEBUG] [Thread-305244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:25:28.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:25:28.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:25:28.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:25:28.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:25:28.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:25:28.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:25:28.289 [DEBUG] [Thread-305244] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:25:32.927 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:25:32.930 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:25:36.109 [DEBUG] [Thread-305246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:25:51.235 [DEBUG] [Thread-305247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:25:58.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:25:58.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:25:58.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:25:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 25, 34), 21.11, 25.26, 0.0, 30.3, 24.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:25:59.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:25:34
2025-12-24T16:25:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:25:59.551 [DEBUG] [Thread-305248] [transport.py] [_log()] starting thread (client mode): 0xf574f250
2025-12-24T16:25:59.551 [DEBUG] [Thread-305248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:25:59.553 [DEBUG] [Thread-305248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:25:59.553 [INFO] [Thread-305248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] client lang: <none>
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] server lang: <none>
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] kex follows: False
2025-12-24T16:25:59.557 [DEBUG] [Thread-305248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:25:59.558 [DEBUG] [Thread-305248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:25:59.558 [DEBUG] [Thread-305248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:25:59.558 [DEBUG] [Thread-305248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:25:59.558 [DEBUG] [Thread-305248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:25:59.558 [DEBUG] [Thread-305248] [transport.py] [_log()] Compression: none
2025-12-24T16:25:59.558 [DEBUG] [Thread-305248] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:25:59.590 [DEBUG] [Thread-305248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:25:59.593 [DEBUG] [Thread-305248] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:25:59.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:25:59.595 [DEBUG] [Thread-305248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:25:59.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:25:59.633 [DEBUG] [Thread-305248] [transport.py] [_log()] userauth is OK
2025-12-24T16:25:59.633 [DEBUG] [Thread-305248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:25:59.633 [DEBUG] [Thread-305248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:25:59.633 [DEBUG] [Thread-305248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:25:59.633 [DEBUG] [Thread-305248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:25:59.653 [INFO] [Thread-305248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:25:59.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:26:00.277 [DEBUG] [Thread-305248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:26:00.277 [DEBUG] [Thread-305248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:26:00.277 [DEBUG] [Thread-305248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:26:00.318 [DEBUG] [Thread-305248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:26:00.318 [DEBUG] [Thread-305248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:26:00.320 [DEBUG] [Thread-305248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:26:00.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:26:00.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:26:00.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:26:00.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:26:00.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:26:00.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:26:00.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:26:00.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:26:00.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:26:00.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.601109 -999.00  +23.90  17.50     31   +5.80 1 2 1 1 1   888    0 15.80 -68.21 ----- 17.5 17.5 149.9 28.9 28.6 -24.2 28.5 -23.5 29.8 -21.7 30.3 -22.9
2025-12-24T16:26:00.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:26:00.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:26:00.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.601109
2025-12-24T16:26:00.350 [DEBUG] [Thread-305248] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:26:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:26:00.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:26:00.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:26:00.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:26:00.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:26:00.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:25:34', tmtdew=21.11, humidity=25.26, cloud=0.0, wind=30.3, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:25:35.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:26:00.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:26:00.448 [DEBUG] [Thread-305251] [transport.py] [_log()] starting thread (client mode): 0xf57724a0
2025-12-24T16:26:00.448 [DEBUG] [Thread-305251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:26:00.462 [DEBUG] [Thread-305251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:26:00.462 [INFO] [Thread-305251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] client lang: <none>
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] server lang: <none>
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] kex follows: False
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] Compression: none
2025-12-24T16:26:00.470 [DEBUG] [Thread-305251] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:26:00.526 [DEBUG] [Thread-305251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:26:00.526 [DEBUG] [Thread-305251] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:26:00.526 [DEBUG] [Thread-305251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:26:00.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:26:00.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:26:00.583 [DEBUG] [Thread-305251] [transport.py] [_log()] userauth is OK
2025-12-24T16:26:00.583 [DEBUG] [Thread-305251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:26:00.583 [DEBUG] [Thread-305251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:26:00.583 [DEBUG] [Thread-305251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:26:00.583 [DEBUG] [Thread-305251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:26:00.597 [INFO] [Thread-305251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:26:00.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:26:00.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:26:01.415 [DEBUG] [Thread-305251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:26:01.415 [DEBUG] [Thread-305251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:26:01.463 [DEBUG] [Thread-305251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:26:01.463 [DEBUG] [Thread-305251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:26:01.472 [DEBUG] [Thread-305251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:26:01.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:26:01.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:26:01.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:26:01.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:26:01.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:26:01.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:26:01.504 [DEBUG] [Thread-305251] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:26:06.332 [DEBUG] [Thread-305253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:26:14.272 [DEBUG] [Thread-305254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:26:21.514 [DEBUG] [Thread-305255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:26:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:26:31.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:26:31.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:26:33.073 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:26:33.074 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:26:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 26, 7), 21.14, 25.23, 0.0, 27.86, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:26:33.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:26:07
2025-12-24T16:26:33.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:26:33.531 [DEBUG] [Thread-305256] [transport.py] [_log()] starting thread (client mode): 0xf574eb30
2025-12-24T16:26:33.532 [DEBUG] [Thread-305256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:26:33.541 [DEBUG] [Thread-305256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:26:33.541 [INFO] [Thread-305256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:26:33.546 [DEBUG] [Thread-305256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] client lang: <none>
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] server lang: <none>
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] kex follows: False
2025-12-24T16:26:33.547 [DEBUG] [Thread-305256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:26:33.548 [DEBUG] [Thread-305256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:26:33.548 [DEBUG] [Thread-305256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:26:33.548 [DEBUG] [Thread-305256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:26:33.548 [DEBUG] [Thread-305256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:26:33.548 [DEBUG] [Thread-305256] [transport.py] [_log()] Compression: none
2025-12-24T16:26:33.548 [DEBUG] [Thread-305256] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:26:33.583 [DEBUG] [Thread-305256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:26:33.587 [DEBUG] [Thread-305256] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:26:33.589 [DEBUG] [Thread-305256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:26:33.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:26:33.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:26:33.593 [DEBUG] [Thread-305256] [transport.py] [_log()] userauth is OK
2025-12-24T16:26:33.593 [DEBUG] [Thread-305256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:26:33.594 [DEBUG] [Thread-305256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:26:33.594 [DEBUG] [Thread-305256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:26:33.594 [DEBUG] [Thread-305256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:26:33.617 [INFO] [Thread-305256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:26:33.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:26:34.418 [DEBUG] [Thread-305256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:26:34.427 [DEBUG] [Thread-305256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:26:34.428 [DEBUG] [Thread-305256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:26:34.460 [DEBUG] [Thread-305256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:26:34.460 [DEBUG] [Thread-305256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:26:34.463 [DEBUG] [Thread-305256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:26:34.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:26:34.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:26:34.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:26:34.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:26:34.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:26:34.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:26:34.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:26:34.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:26:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:26:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.601456 -999.00  +23.60  18.88     31   +5.80 1 1 1 1 1   888    0 15.64 -68.28 ----- 18.9 18.9 144.2 24.4 28.6 -23.8 28.4 -24.0 29.8 -22.6 30.4 -21.8
2025-12-24T16:26:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:26:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:26:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.601456
2025-12-24T16:26:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:26:34.505 [DEBUG] [Thread-305256] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:26:34.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:26:34.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:26:34.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:26:34.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:26:34.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:26:07', tmtdew=21.14, humidity=25.23, cloud=0.0, wind=27.86, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:26:05.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:26:34.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:26:34.593 [DEBUG] [Thread-305259] [transport.py] [_log()] starting thread (client mode): 0xf574d420
2025-12-24T16:26:34.594 [DEBUG] [Thread-305259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:26:34.608 [DEBUG] [Thread-305259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:26:34.608 [INFO] [Thread-305259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:26:34.615 [DEBUG] [Thread-305259] [transport.py] [_log()] client lang: <none>
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] server lang: <none>
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] kex follows: False
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] Compression: none
2025-12-24T16:26:34.616 [DEBUG] [Thread-305259] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:26:34.674 [DEBUG] [Thread-305259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:26:34.674 [DEBUG] [Thread-305259] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:26:34.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:26:34.674 [DEBUG] [Thread-305259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:26:34.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:26:34.731 [DEBUG] [Thread-305259] [transport.py] [_log()] userauth is OK
2025-12-24T16:26:34.731 [DEBUG] [Thread-305259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:26:34.731 [DEBUG] [Thread-305259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:26:34.731 [DEBUG] [Thread-305259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:26:34.731 [DEBUG] [Thread-305259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:26:34.744 [INFO] [Thread-305259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:26:34.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:26:34.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:26:35.565 [DEBUG] [Thread-305259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:26:35.565 [DEBUG] [Thread-305259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:26:35.612 [DEBUG] [Thread-305259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:26:35.612 [DEBUG] [Thread-305259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:26:35.620 [DEBUG] [Thread-305259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:26:35.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:26:35.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:26:35.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:26:35.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:26:35.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:26:35.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:26:35.654 [DEBUG] [Thread-305259] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:26:36.592 [DEBUG] [Thread-305261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:26:51.759 [DEBUG] [Thread-305262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:27:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:27:05.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:27:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:27:06.850 [DEBUG] [Thread-305263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:27:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 26, 40), 21.1, 25.43, 0.0, 24.19, 24.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:27:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:26:40
2025-12-24T16:27:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:27:07.473 [DEBUG] [Thread-305264] [transport.py] [_log()] starting thread (client mode): 0xf818ba90
2025-12-24T16:27:07.473 [DEBUG] [Thread-305264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:27:07.485 [DEBUG] [Thread-305264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:27:07.486 [INFO] [Thread-305264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:27:07.491 [DEBUG] [Thread-305264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:27:07.491 [DEBUG] [Thread-305264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:27:07.491 [DEBUG] [Thread-305264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:27:07.491 [DEBUG] [Thread-305264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] client lang: <none>
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] server lang: <none>
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] kex follows: False
2025-12-24T16:27:07.492 [DEBUG] [Thread-305264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:27:07.493 [DEBUG] [Thread-305264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:27:07.493 [DEBUG] [Thread-305264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:27:07.493 [DEBUG] [Thread-305264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:27:07.493 [DEBUG] [Thread-305264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:27:07.494 [DEBUG] [Thread-305264] [transport.py] [_log()] Compression: none
2025-12-24T16:27:07.494 [DEBUG] [Thread-305264] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:27:07.531 [DEBUG] [Thread-305264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:27:07.536 [DEBUG] [Thread-305264] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:27:07.538 [DEBUG] [Thread-305264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:27:07.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:27:07.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:27:07.544 [DEBUG] [Thread-305264] [transport.py] [_log()] userauth is OK
2025-12-24T16:27:07.544 [DEBUG] [Thread-305264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:27:07.544 [DEBUG] [Thread-305264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:27:07.544 [DEBUG] [Thread-305264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:27:07.545 [DEBUG] [Thread-305264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:27:07.584 [INFO] [Thread-305264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:27:07.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:27:08.222 [DEBUG] [Thread-305264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:27:08.222 [DEBUG] [Thread-305264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:27:08.224 [DEBUG] [Thread-305264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:27:08.263 [DEBUG] [Thread-305264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:27:08.264 [DEBUG] [Thread-305264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:27:08.268 [DEBUG] [Thread-305264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:27:08.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:27:08.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:27:08.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:27:08.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:27:08.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:27:08.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:27:08.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:27:08.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:27:08.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:27:08.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.601803 -999.00  +23.70  21.00     31   +5.90 1 2 1 1 1   888    0 15.62 -69.15 ----- 21.0 21.0 147.4 25.6 28.7 -24.0 28.5 -23.2 29.9 -21.0 30.5 -22.3
2025-12-24T16:27:08.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:27:08.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:27:08.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.601803
2025-12-24T16:27:08.305 [DEBUG] [Thread-305264] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:27:08.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:27:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:27:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:27:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:27:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:27:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:26:40', tmtdew=21.1, humidity=25.43, cloud=0.0, wind=24.19, temperature=24.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:26:35.779', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:27:08.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:27:08.404 [DEBUG] [Thread-305267] [transport.py] [_log()] starting thread (client mode): 0xf574e0b0
2025-12-24T16:27:08.404 [DEBUG] [Thread-305267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:27:08.418 [DEBUG] [Thread-305267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:27:08.418 [INFO] [Thread-305267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] client lang: <none>
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] server lang: <none>
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] kex follows: False
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] Compression: none
2025-12-24T16:27:08.426 [DEBUG] [Thread-305267] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:27:08.486 [DEBUG] [Thread-305267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:27:08.487 [DEBUG] [Thread-305267] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:27:08.487 [DEBUG] [Thread-305267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:27:08.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:27:08.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:27:08.543 [DEBUG] [Thread-305267] [transport.py] [_log()] userauth is OK
2025-12-24T16:27:08.543 [DEBUG] [Thread-305267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:27:08.543 [DEBUG] [Thread-305267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:27:08.543 [DEBUG] [Thread-305267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:27:08.543 [DEBUG] [Thread-305267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:27:08.559 [INFO] [Thread-305267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:27:08.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:27:08.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:27:09.384 [DEBUG] [Thread-305267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:27:09.384 [DEBUG] [Thread-305267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:27:09.432 [DEBUG] [Thread-305267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:27:09.432 [DEBUG] [Thread-305267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:27:09.440 [DEBUG] [Thread-305267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:27:09.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:27:09.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')
2025-12-24T16:27:09.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
2025-12-24T16:27:09.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:27:09.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:27:09.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:27:09.474 [DEBUG] [Thread-305267] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:27:14.528 [DEBUG] [Thread-305269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:27:21.986 [DEBUG] [Thread-305270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:27:33.244 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:27:33.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:27:37.135 [DEBUG] [Thread-305271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:27:39.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:27:39.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:27:39.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:27:40.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 27, 13), 21.24, 25.2, 0.0, 24.03, 24.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:27:40.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:27:13
2025-12-24T16:27:41.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:27:41.302 [DEBUG] [Thread-305272] [transport.py] [_log()] starting thread (client mode): 0xf81c2200
2025-12-24T16:27:41.303 [DEBUG] [Thread-305272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:27:41.310 [DEBUG] [Thread-305272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:27:41.310 [INFO] [Thread-305272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] client lang: <none>
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] server lang: <none>
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] kex follows: False
2025-12-24T16:27:41.315 [DEBUG] [Thread-305272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:27:41.316 [DEBUG] [Thread-305272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:27:41.316 [DEBUG] [Thread-305272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:27:41.316 [DEBUG] [Thread-305272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:27:41.316 [DEBUG] [Thread-305272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:27:41.316 [DEBUG] [Thread-305272] [transport.py] [_log()] Compression: none
2025-12-24T16:27:41.316 [DEBUG] [Thread-305272] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:27:41.355 [DEBUG] [Thread-305272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:27:41.360 [DEBUG] [Thread-305272] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:27:41.363 [DEBUG] [Thread-305272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:27:41.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:27:41.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:27:41.368 [DEBUG] [Thread-305272] [transport.py] [_log()] userauth is OK
2025-12-24T16:27:41.369 [DEBUG] [Thread-305272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:27:41.369 [DEBUG] [Thread-305272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:27:41.369 [DEBUG] [Thread-305272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:27:41.369 [DEBUG] [Thread-305272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:27:41.401 [INFO] [Thread-305272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:27:41.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:27:42.064 [DEBUG] [Thread-305272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:27:42.064 [DEBUG] [Thread-305272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:27:42.067 [DEBUG] [Thread-305272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:27:42.105 [DEBUG] [Thread-305272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:27:42.106 [DEBUG] [Thread-305272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:27:42.109 [DEBUG] [Thread-305272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:27:42.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:27:42.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:27:42.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:27:42.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:27:42.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:27:42.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:27:42.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:27:42.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:27:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:27:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.602151 -999.00  +23.90  28.44     31   +5.90 1 2 1 1 1   888    0 15.96 -65.66 ----- 28.4 28.4 139.0 32.4 28.8 -22.8 28.6 -23.1 30.1 -20.3 30.6 -22.9
2025-12-24T16:27:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:27:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:27:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.602151
2025-12-24T16:27:42.143 [DEBUG] [Thread-305272] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:27:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:27:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:27:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:27:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:27:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:27:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:27:13', tmtdew=21.24, humidity=25.2, cloud=0.0, wind=24.03, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:27:05.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:27:42.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:27:42.255 [DEBUG] [Thread-305275] [transport.py] [_log()] starting thread (client mode): 0xf81e5720
2025-12-24T16:27:42.256 [DEBUG] [Thread-305275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:27:42.269 [DEBUG] [Thread-305275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:27:42.269 [INFO] [Thread-305275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:27:42.277 [DEBUG] [Thread-305275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:27:42.278 [DEBUG] [Thread-305275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:27:42.278 [DEBUG] [Thread-305275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:27:42.278 [DEBUG] [Thread-305275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:27:42.278 [DEBUG] [Thread-305275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:27:42.278 [DEBUG] [Thread-305275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:27:42.278 [DEBUG] [Thread-305275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] client lang: <none>
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] server lang: <none>
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] kex follows: False
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] Compression: none
2025-12-24T16:27:42.279 [DEBUG] [Thread-305275] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:27:42.340 [DEBUG] [Thread-305275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:27:42.340 [DEBUG] [Thread-305275] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:27:42.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:27:42.342 [DEBUG] [Thread-305275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:27:42.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:27:42.400 [DEBUG] [Thread-305275] [transport.py] [_log()] userauth is OK
2025-12-24T16:27:42.400 [DEBUG] [Thread-305275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:27:42.400 [DEBUG] [Thread-305275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:27:42.400 [DEBUG] [Thread-305275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:27:42.401 [DEBUG] [Thread-305275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:27:42.419 [INFO] [Thread-305275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:27:42.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:27:42.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:27:43.242 [DEBUG] [Thread-305275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:27:43.242 [DEBUG] [Thread-305275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:27:43.289 [DEBUG] [Thread-305275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:27:43.290 [DEBUG] [Thread-305275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:27:43.298 [DEBUG] [Thread-305275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:27:43.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:27: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')
2025-12-24T16:27: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
2025-12-24T16:27:43.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:27:43.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:27:43.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:27:43.334 [DEBUG] [Thread-305275] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:27:52.253 [DEBUG] [Thread-305277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:28:07.475 [DEBUG] [Thread-305278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:28:13.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:28:13.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:28:13.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:28:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 27, 46), 21.04, 25.18, 0.0, 25.41, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:28:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:27:46
2025-12-24T16:28:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:28:14.782 [DEBUG] [Thread-305279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:28:14.823 [DEBUG] [Thread-305280] [transport.py] [_log()] starting thread (client mode): 0xf57706a0
2025-12-24T16:28:14.824 [DEBUG] [Thread-305280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:28:14.836 [DEBUG] [Thread-305280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:28:14.836 [INFO] [Thread-305280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:28:14.840 [DEBUG] [Thread-305280] [transport.py] [_log()] client lang: <none>
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] server lang: <none>
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] kex follows: False
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] Compression: none
2025-12-24T16:28:14.841 [DEBUG] [Thread-305280] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:28:14.872 [DEBUG] [Thread-305280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:28:14.876 [DEBUG] [Thread-305280] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:28:14.877 [DEBUG] [Thread-305280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:28:14.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:28:14.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:28:14.881 [DEBUG] [Thread-305280] [transport.py] [_log()] userauth is OK
2025-12-24T16:28:14.881 [DEBUG] [Thread-305280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:28:14.881 [DEBUG] [Thread-305280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:28:14.881 [DEBUG] [Thread-305280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:28:14.881 [DEBUG] [Thread-305280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:28:14.915 [INFO] [Thread-305280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:28:14.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:28:15.572 [DEBUG] [Thread-305280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:28:15.572 [DEBUG] [Thread-305280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:28:15.573 [DEBUG] [Thread-305280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:28:15.614 [DEBUG] [Thread-305280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:28:15.615 [DEBUG] [Thread-305280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:28:15.619 [DEBUG] [Thread-305280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:28:15.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:28:15.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:28:15.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:28:15.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:28:15.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:28:15.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:28:15.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:28:15.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:28:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:28:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.602498 -999.00  +23.60  14.97     31   +5.80 1 2 1 1 1   888    0 16.36 -61.78 ----- 15.0 15.0 165.4 23.5 28.8 -24.3 28.5 -24.0 30.0 -21.2 30.7 -23.7
2025-12-24T16:28:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:28:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:28:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.602498
2025-12-24T16:28:15.651 [DEBUG] [Thread-305280] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:28:15.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:28:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:28:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:28:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:28:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:28:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:27:46', tmtdew=21.04, humidity=25.18, cloud=0.0, wind=25.41, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:27:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:28:15.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:28:15.779 [DEBUG] [Thread-305283] [transport.py] [_log()] starting thread (client mode): 0xf574ea10
2025-12-24T16:28:15.779 [DEBUG] [Thread-305283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:28:15.793 [DEBUG] [Thread-305283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:28:15.793 [INFO] [Thread-305283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] client lang: <none>
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] server lang: <none>
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] kex follows: False
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] Compression: none
2025-12-24T16:28:15.801 [DEBUG] [Thread-305283] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:28:15.858 [DEBUG] [Thread-305283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:28:15.859 [DEBUG] [Thread-305283] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:28:15.859 [DEBUG] [Thread-305283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:28:15.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:28:15.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:28:15.919 [DEBUG] [Thread-305283] [transport.py] [_log()] userauth is OK
2025-12-24T16:28:15.919 [DEBUG] [Thread-305283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:28:15.919 [DEBUG] [Thread-305283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:28:15.919 [DEBUG] [Thread-305283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:28:15.919 [DEBUG] [Thread-305283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:28:15.934 [INFO] [Thread-305283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:28:15.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:28:15.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:28:16.760 [DEBUG] [Thread-305283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:28:16.760 [DEBUG] [Thread-305283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:28:16.810 [DEBUG] [Thread-305283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:28:16.810 [DEBUG] [Thread-305283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:28:16.822 [DEBUG] [Thread-305283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:28:16.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:28:16.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:28: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') -> 00000000
2025-12-24T16:28:16.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:28:16.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:28:16.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:28:16.866 [DEBUG] [Thread-305283] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:28:22.587 [DEBUG] [Thread-305285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:28:33.400 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:28:33.402 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:28:37.829 [DEBUG] [Thread-305286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:28:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:28:46.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:28:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:28:48.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 28, 19), 20.96, 25.28, 0.0, 22.34, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:28:48.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:28:19
2025-12-24T16:28:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:28:48.789 [DEBUG] [Thread-305287] [transport.py] [_log()] starting thread (client mode): 0xf5719e70
2025-12-24T16:28:48.790 [DEBUG] [Thread-305287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:28:48.790 [DEBUG] [Thread-305287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:28:48.790 [INFO] [Thread-305287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:28:48.794 [DEBUG] [Thread-305287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:28:48.794 [DEBUG] [Thread-305287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:28:48.794 [DEBUG] [Thread-305287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:28:48.794 [DEBUG] [Thread-305287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:28:48.794 [DEBUG] [Thread-305287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:28:48.794 [DEBUG] [Thread-305287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:28:48.795 [DEBUG] [Thread-305287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:28:48.795 [DEBUG] [Thread-305287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:28:48.795 [DEBUG] [Thread-305287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:28:48.795 [DEBUG] [Thread-305287] [transport.py] [_log()] client lang: <none>
2025-12-24T16:28:48.795 [DEBUG] [Thread-305287] [transport.py] [_log()] server lang: <none>
2025-12-24T16:28:48.795 [DEBUG] [Thread-305287] [transport.py] [_log()] kex follows: False
2025-12-24T16:28:48.795 [DEBUG] [Thread-305287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:28:48.796 [DEBUG] [Thread-305287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:28:48.796 [DEBUG] [Thread-305287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:28:48.796 [DEBUG] [Thread-305287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:28:48.796 [DEBUG] [Thread-305287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:28:48.796 [DEBUG] [Thread-305287] [transport.py] [_log()] Compression: none
2025-12-24T16:28:48.796 [DEBUG] [Thread-305287] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:28:48.833 [DEBUG] [Thread-305287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:28:48.835 [DEBUG] [Thread-305287] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:28:48.837 [DEBUG] [Thread-305287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:28:48.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:28:48.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:28:48.840 [DEBUG] [Thread-305287] [transport.py] [_log()] userauth is OK
2025-12-24T16:28:48.840 [DEBUG] [Thread-305287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:28:48.840 [DEBUG] [Thread-305287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:28:48.840 [DEBUG] [Thread-305287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:28:48.840 [DEBUG] [Thread-305287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:28:48.858 [INFO] [Thread-305287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:28:48.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:28:49.527 [DEBUG] [Thread-305287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:28:49.527 [DEBUG] [Thread-305287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:28:49.528 [DEBUG] [Thread-305287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:28:49.569 [DEBUG] [Thread-305287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:28:49.569 [DEBUG] [Thread-305287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:28:49.573 [DEBUG] [Thread-305287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:28:49.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:28:49.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:28:49.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:28:49.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:28:49.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:28:49.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:28:49.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:28:49.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:28:49.602 [DEBUG] [Thread-305287] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:28:49.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:28:49.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.602845 -999.00  +23.90  11.89     31   +5.90 1 2 1 1 1   888    0 15.80 -64.13 ----- 11.9 11.9 159.2 23.2 28.9 -22.7 28.6 -22.7 30.3 -20.6 30.9 -23.7
2025-12-24T16:28:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:28:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:28:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.602845
2025-12-24T16:28:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:28:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:28:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:28:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:28:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:28:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:28:19', tmtdew=20.96, humidity=25.28, cloud=0.0, wind=22.34, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:28:05.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:28:49.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:28:49.729 [DEBUG] [Thread-305290] [transport.py] [_log()] starting thread (client mode): 0xf57717b0
2025-12-24T16:28:49.729 [DEBUG] [Thread-305290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:28:49.743 [DEBUG] [Thread-305290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:28:49.743 [INFO] [Thread-305290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:28:49.751 [DEBUG] [Thread-305290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:28:49.751 [DEBUG] [Thread-305290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:28:49.751 [DEBUG] [Thread-305290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:28:49.751 [DEBUG] [Thread-305290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:28:49.751 [DEBUG] [Thread-305290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:28:49.751 [DEBUG] [Thread-305290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:28:49.751 [DEBUG] [Thread-305290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:28:49.751 [DEBUG] [Thread-305290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] client lang: <none>
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] server lang: <none>
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] kex follows: False
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] Compression: none
2025-12-24T16:28:49.752 [DEBUG] [Thread-305290] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:28:49.808 [DEBUG] [Thread-305290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:28:49.808 [DEBUG] [Thread-305290] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:28:49.809 [DEBUG] [Thread-305290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:28:49.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:28:49.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:28:49.864 [DEBUG] [Thread-305290] [transport.py] [_log()] userauth is OK
2025-12-24T16:28:49.864 [DEBUG] [Thread-305290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:28:49.864 [DEBUG] [Thread-305290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:28:49.865 [DEBUG] [Thread-305290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:28:49.865 [DEBUG] [Thread-305290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:28:49.884 [INFO] [Thread-305290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:28:49.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:28:49.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:28:50.752 [DEBUG] [Thread-305290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:28:50.753 [DEBUG] [Thread-305290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:28:50.791 [DEBUG] [Thread-305290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:28:50.791 [DEBUG] [Thread-305290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:28:50.800 [DEBUG] [Thread-305290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:28:50.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:28:50.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:28: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') -> 00000000
2025-12-24T16:28:50.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:28:50.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:28:50.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:28:50.843 [DEBUG] [Thread-305290] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:28:52.916 [DEBUG] [Thread-305292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:29:08.132 [DEBUG] [Thread-305293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:29:15.073 [DEBUG] [Thread-305294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:29:20.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:29:20.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:29:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:29:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 28, 52), 20.49, 26.14, 0.0, 22.0, 23.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:29:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:28:52
2025-12-24T16:29:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:29:22.651 [DEBUG] [Thread-305295] [transport.py] [_log()] starting thread (client mode): 0xf5718700
2025-12-24T16:29:22.652 [DEBUG] [Thread-305295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:29:22.659 [DEBUG] [Thread-305295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:29:22.659 [INFO] [Thread-305295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:29:22.665 [DEBUG] [Thread-305295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] client lang: <none>
2025-12-24T16:29:22.666 [DEBUG] [Thread-305295] [transport.py] [_log()] server lang: <none>
2025-12-24T16:29:22.667 [DEBUG] [Thread-305295] [transport.py] [_log()] kex follows: False
2025-12-24T16:29:22.667 [DEBUG] [Thread-305295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:29:22.668 [DEBUG] [Thread-305295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:29:22.668 [DEBUG] [Thread-305295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:29:22.668 [DEBUG] [Thread-305295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:29:22.668 [DEBUG] [Thread-305295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:29:22.668 [DEBUG] [Thread-305295] [transport.py] [_log()] Compression: none
2025-12-24T16:29:22.668 [DEBUG] [Thread-305295] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:29:22.717 [DEBUG] [Thread-305295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:29:22.722 [DEBUG] [Thread-305295] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:29:22.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:29:22.726 [DEBUG] [Thread-305295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:29:22.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:29:22.730 [DEBUG] [Thread-305295] [transport.py] [_log()] userauth is OK
2025-12-24T16:29:22.731 [DEBUG] [Thread-305295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:29:22.731 [DEBUG] [Thread-305295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:29:22.731 [DEBUG] [Thread-305295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:29:22.731 [DEBUG] [Thread-305295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:29:22.751 [INFO] [Thread-305295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:29:22.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:29:23.245 [DEBUG] [Thread-305297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:29:23.402 [DEBUG] [Thread-305295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:29:23.402 [DEBUG] [Thread-305295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:29:23.403 [DEBUG] [Thread-305295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:29:23.443 [DEBUG] [Thread-305295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:29:23.443 [DEBUG] [Thread-305295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:29:23.447 [DEBUG] [Thread-305295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:29:23.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:29:23.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:29:23.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:29:23.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:29:23.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:29:23.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:29:23.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:29:23.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:29:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:29:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.603192 -999.00  +24.10  14.04     31   +5.90 1 1 1 1 1   888    0 16.26 -57.27 ----- 14.0 14.0 154.4 21.8 29.0 -23.9 28.8 -22.9 30.2 -23.7 30.4 -27.8
2025-12-24T16:29:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:29:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:29:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.603192
2025-12-24T16:29:23.482 [DEBUG] [Thread-305295] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:29:23.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:29:23.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:29:23.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:29:23.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:29:23.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:29:23.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:28:52', tmtdew=20.49, humidity=26.14, cloud=0.0, wind=22.0, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:28:35.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:29:23.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:29:23.599 [DEBUG] [Thread-305299] [transport.py] [_log()] starting thread (client mode): 0xf81c39d0
2025-12-24T16:29:23.599 [DEBUG] [Thread-305299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:29:23.613 [DEBUG] [Thread-305299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:29:23.613 [INFO] [Thread-305299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:29:23.621 [DEBUG] [Thread-305299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:29:23.621 [DEBUG] [Thread-305299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:29:23.621 [DEBUG] [Thread-305299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:29:23.621 [DEBUG] [Thread-305299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:29:23.621 [DEBUG] [Thread-305299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:29:23.621 [DEBUG] [Thread-305299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:29:23.622 [DEBUG] [Thread-305299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:29:23.622 [DEBUG] [Thread-305299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:29:23.622 [DEBUG] [Thread-305299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:29:23.622 [DEBUG] [Thread-305299] [transport.py] [_log()] client lang: <none>
2025-12-24T16:29:23.622 [DEBUG] [Thread-305299] [transport.py] [_log()] server lang: <none>
2025-12-24T16:29:23.622 [DEBUG] [Thread-305299] [transport.py] [_log()] kex follows: False
2025-12-24T16:29:23.622 [DEBUG] [Thread-305299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:29:23.623 [DEBUG] [Thread-305299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:29:23.623 [DEBUG] [Thread-305299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:29:23.623 [DEBUG] [Thread-305299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:29:23.623 [DEBUG] [Thread-305299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:29:23.623 [DEBUG] [Thread-305299] [transport.py] [_log()] Compression: none
2025-12-24T16:29:23.623 [DEBUG] [Thread-305299] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:29:23.679 [DEBUG] [Thread-305299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:29:23.680 [DEBUG] [Thread-305299] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:29:23.681 [DEBUG] [Thread-305299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:29:23.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:29:23.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:29:23.738 [DEBUG] [Thread-305299] [transport.py] [_log()] userauth is OK
2025-12-24T16:29:23.738 [DEBUG] [Thread-305299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:29:23.738 [DEBUG] [Thread-305299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:29:23.738 [DEBUG] [Thread-305299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:29:23.738 [DEBUG] [Thread-305299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:29:23.766 [INFO] [Thread-305299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:29:23.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:29:23.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:29:24.567 [DEBUG] [Thread-305299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:29:24.567 [DEBUG] [Thread-305299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:29:24.615 [DEBUG] [Thread-305299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:29:24.615 [DEBUG] [Thread-305299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:29:24.624 [DEBUG] [Thread-305299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:29:24.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:29:24.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:29:24.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:29:24.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:29:24.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:29:24.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:29:24.662 [DEBUG] [Thread-305299] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:29:33.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:29:33.679 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:29:38.324 [DEBUG] [Thread-305301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:29:53.484 [DEBUG] [Thread-305302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:29:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:29:54.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:29:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:29:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 29, 25), 20.44, 26.23, 0.0, 21.12, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:29:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:29:25
2025-12-24T16:29:56.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:29:56.454 [DEBUG] [Thread-305303] [transport.py] [_log()] starting thread (client mode): 0xf574eec0
2025-12-24T16:29:56.455 [DEBUG] [Thread-305303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:29:56.468 [DEBUG] [Thread-305303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:29:56.468 [INFO] [Thread-305303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:29:56.473 [DEBUG] [Thread-305303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:29:56.473 [DEBUG] [Thread-305303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:29:56.473 [DEBUG] [Thread-305303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:29:56.473 [DEBUG] [Thread-305303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:29:56.473 [DEBUG] [Thread-305303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:29:56.473 [DEBUG] [Thread-305303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:29:56.474 [DEBUG] [Thread-305303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:29:56.474 [DEBUG] [Thread-305303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:29:56.474 [DEBUG] [Thread-305303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:29:56.474 [DEBUG] [Thread-305303] [transport.py] [_log()] client lang: <none>
2025-12-24T16:29:56.474 [DEBUG] [Thread-305303] [transport.py] [_log()] server lang: <none>
2025-12-24T16:29:56.474 [DEBUG] [Thread-305303] [transport.py] [_log()] kex follows: False
2025-12-24T16:29:56.474 [DEBUG] [Thread-305303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:29:56.474 [DEBUG] [Thread-305303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:29:56.475 [DEBUG] [Thread-305303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:29:56.475 [DEBUG] [Thread-305303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:29:56.475 [DEBUG] [Thread-305303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:29:56.475 [DEBUG] [Thread-305303] [transport.py] [_log()] Compression: none
2025-12-24T16:29:56.475 [DEBUG] [Thread-305303] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:29:56.511 [DEBUG] [Thread-305303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:29:56.514 [DEBUG] [Thread-305303] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:29:56.515 [DEBUG] [Thread-305303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:29:56.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:29:56.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:29:56.519 [DEBUG] [Thread-305303] [transport.py] [_log()] userauth is OK
2025-12-24T16:29:56.519 [DEBUG] [Thread-305303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:29:56.519 [DEBUG] [Thread-305303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:29:56.519 [DEBUG] [Thread-305303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:29:56.519 [DEBUG] [Thread-305303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:29:56.552 [INFO] [Thread-305303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:29:56.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:29:57.203 [DEBUG] [Thread-305303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:29:57.204 [DEBUG] [Thread-305303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:29:57.214 [DEBUG] [Thread-305303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:29:57.245 [DEBUG] [Thread-305303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:29:57.245 [DEBUG] [Thread-305303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:29:57.249 [DEBUG] [Thread-305303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:29:57.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:29:57.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:29:57.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:29:57.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:29:57.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:29:57.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:29:57.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:29:57.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:29:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:29:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.603540 -999.00  +24.00  21.15     30   +5.80 1 1 1 1 1   888    0 16.42 -50.95 ----- 21.1 21.1 162.4 28.0 28.6 -25.1 28.4 -25.7 29.8 -25.0 30.4 -27.8
2025-12-24T16:29:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:29:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:29:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.603540
2025-12-24T16:29:57.285 [DEBUG] [Thread-305303] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:29:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:29:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:29:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:29:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:29:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:29:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:29:25', tmtdew=20.44, humidity=26.23, cloud=0.0, wind=21.12, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:29:05.856', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:29:57.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:29:57.400 [DEBUG] [Thread-305306] [transport.py] [_log()] starting thread (client mode): 0xf578b8b0
2025-12-24T16:29:57.400 [DEBUG] [Thread-305306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:29:57.415 [DEBUG] [Thread-305306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:29:57.415 [INFO] [Thread-305306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:29:57.422 [DEBUG] [Thread-305306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:29:57.423 [DEBUG] [Thread-305306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:29:57.423 [DEBUG] [Thread-305306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:29:57.423 [DEBUG] [Thread-305306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:29:57.423 [DEBUG] [Thread-305306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] client lang: <none>
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] server lang: <none>
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] kex follows: False
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] Compression: none
2025-12-24T16:29:57.424 [DEBUG] [Thread-305306] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:29:57.483 [DEBUG] [Thread-305306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:29:57.484 [DEBUG] [Thread-305306] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:29:57.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:29:57.485 [DEBUG] [Thread-305306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:29:57.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:29:57.540 [DEBUG] [Thread-305306] [transport.py] [_log()] userauth is OK
2025-12-24T16:29:57.540 [DEBUG] [Thread-305306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:29:57.541 [DEBUG] [Thread-305306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:29:57.541 [DEBUG] [Thread-305306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:29:57.541 [DEBUG] [Thread-305306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:29:57.560 [INFO] [Thread-305306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:29:57.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:29:57.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:29:58.397 [DEBUG] [Thread-305306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:29:58.397 [DEBUG] [Thread-305306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:29:58.436 [DEBUG] [Thread-305306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:29:58.436 [DEBUG] [Thread-305306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:29:58.445 [DEBUG] [Thread-305306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:29:58.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:29:58.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:29:58.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:29:58.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:29:58.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:29:58.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:29:58.478 [DEBUG] [Thread-305306] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:30:08.621 [DEBUG] [Thread-305308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:30:15.353 [DEBUG] [Thread-305309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:30:23.803 [DEBUG] [Thread-305310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:30:28.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:30:28.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:30:28.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:30:29.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 29, 59), 20.43, 26.16, 0.0, 20.54, 23.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:30:29.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:29:59
2025-12-24T16:30:29.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:30:29.737 [DEBUG] [Thread-305311] [transport.py] [_log()] starting thread (client mode): 0xf57524a0
2025-12-24T16:30:29.738 [DEBUG] [Thread-305311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:30:29.753 [DEBUG] [Thread-305311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:30:29.753 [INFO] [Thread-305311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] client lang: <none>
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] server lang: <none>
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] kex follows: False
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:30:29.758 [DEBUG] [Thread-305311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:30:29.759 [DEBUG] [Thread-305311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:30:29.759 [DEBUG] [Thread-305311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:30:29.759 [DEBUG] [Thread-305311] [transport.py] [_log()] Compression: none
2025-12-24T16:30:29.759 [DEBUG] [Thread-305311] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:30:29.790 [DEBUG] [Thread-305311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:30:29.793 [DEBUG] [Thread-305311] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:30:29.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:30:29.795 [DEBUG] [Thread-305311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:30:29.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:30:29.798 [DEBUG] [Thread-305311] [transport.py] [_log()] userauth is OK
2025-12-24T16:30:29.798 [DEBUG] [Thread-305311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:30:29.799 [DEBUG] [Thread-305311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:30:29.799 [DEBUG] [Thread-305311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:30:29.799 [DEBUG] [Thread-305311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:30:29.822 [INFO] [Thread-305311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:30:29.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:30:30.474 [DEBUG] [Thread-305311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:30:30.475 [DEBUG] [Thread-305311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:30:30.476 [DEBUG] [Thread-305311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:30:30.516 [DEBUG] [Thread-305311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:30:30.516 [DEBUG] [Thread-305311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:30:30.521 [DEBUG] [Thread-305311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:30:30.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:30:30.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:30:30.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:30:30.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:30:30.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:30:30.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:30:30.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:30:30.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:30:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:30:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.603887 -999.00  +23.70  18.32     31   +5.70 1 1 1 1 1   888    0 16.39 -52.13 ----- 18.3 18.3 153.4 27.6 28.5 -25.3 28.2 -24.7 29.5 -25.2 30.1 -26.6
2025-12-24T16:30:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:30:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:30:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.603887
2025-12-24T16:30:30.558 [DEBUG] [Thread-305311] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:30:30.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:30:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:30:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:30:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:30:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:30:30.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:29:59', tmtdew=20.43, humidity=26.16, cloud=0.0, wind=20.54, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:29:35.837', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:30:30.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:30:30.671 [DEBUG] [Thread-305314] [transport.py] [_log()] starting thread (client mode): 0xf5772fe0
2025-12-24T16:30:30.671 [DEBUG] [Thread-305314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:30:30.686 [DEBUG] [Thread-305314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:30:30.686 [INFO] [Thread-305314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:30:30.693 [DEBUG] [Thread-305314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:30:30.694 [DEBUG] [Thread-305314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:30:30.694 [DEBUG] [Thread-305314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:30:30.694 [DEBUG] [Thread-305314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:30:30.694 [DEBUG] [Thread-305314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:30:30.694 [DEBUG] [Thread-305314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:30:30.694 [DEBUG] [Thread-305314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:30:30.694 [DEBUG] [Thread-305314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:30:30.695 [DEBUG] [Thread-305314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:30:30.695 [DEBUG] [Thread-305314] [transport.py] [_log()] client lang: <none>
2025-12-24T16:30:30.695 [DEBUG] [Thread-305314] [transport.py] [_log()] server lang: <none>
2025-12-24T16:30:30.695 [DEBUG] [Thread-305314] [transport.py] [_log()] kex follows: False
2025-12-24T16:30:30.695 [DEBUG] [Thread-305314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:30:30.695 [DEBUG] [Thread-305314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:30:30.695 [DEBUG] [Thread-305314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:30:30.695 [DEBUG] [Thread-305314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:30:30.696 [DEBUG] [Thread-305314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:30:30.696 [DEBUG] [Thread-305314] [transport.py] [_log()] Compression: none
2025-12-24T16:30:30.696 [DEBUG] [Thread-305314] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:30:30.753 [DEBUG] [Thread-305314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:30:30.753 [DEBUG] [Thread-305314] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:30:30.754 [DEBUG] [Thread-305314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:30:30.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:30:30.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:30:30.812 [DEBUG] [Thread-305314] [transport.py] [_log()] userauth is OK
2025-12-24T16:30:30.813 [DEBUG] [Thread-305314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:30:30.813 [DEBUG] [Thread-305314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:30:30.813 [DEBUG] [Thread-305314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:30:30.813 [DEBUG] [Thread-305314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:30:30.832 [INFO] [Thread-305314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:30:30.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:30:30.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:30:31.669 [DEBUG] [Thread-305314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:30:31.669 [DEBUG] [Thread-305314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:30:31.717 [DEBUG] [Thread-305314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:30:31.718 [DEBUG] [Thread-305314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:30:31.727 [DEBUG] [Thread-305314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:30:31.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:30:31.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:30: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') -> 00000000
2025-12-24T16:30:31.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:30:31.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:30:31.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:30:31.765 [DEBUG] [Thread-305314] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:30:33.823 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:30:33.825 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:30:38.939 [DEBUG] [Thread-305316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:30:54.162 [DEBUG] [Thread-305317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:31:01.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:31:01.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:31:01.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
2025-12-24T16:31:03.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 30, 31), 20.48, 26.06, 0.0, 23.06, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:31:03.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:30:31
2025-12-24T16:31:03.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:31:04.092 [DEBUG] [Thread-305318] [transport.py] [_log()] starting thread (client mode): 0xf578a7d0
2025-12-24T16:31:04.093 [DEBUG] [Thread-305318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:31:04.096 [DEBUG] [Thread-305318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:31:04.096 [INFO] [Thread-305318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] client lang: <none>
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] server lang: <none>
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] kex follows: False
2025-12-24T16:31:04.102 [DEBUG] [Thread-305318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:31:04.103 [DEBUG] [Thread-305318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:31:04.103 [DEBUG] [Thread-305318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:31:04.103 [DEBUG] [Thread-305318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:31:04.103 [DEBUG] [Thread-305318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:31:04.103 [DEBUG] [Thread-305318] [transport.py] [_log()] Compression: none
2025-12-24T16:31:04.103 [DEBUG] [Thread-305318] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:31:04.140 [DEBUG] [Thread-305318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:31:04.148 [DEBUG] [Thread-305318] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:31:04.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:31:04.152 [DEBUG] [Thread-305318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:31:04.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:31:04.157 [DEBUG] [Thread-305318] [transport.py] [_log()] userauth is OK
2025-12-24T16:31:04.158 [DEBUG] [Thread-305318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:31:04.158 [DEBUG] [Thread-305318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:31:04.158 [DEBUG] [Thread-305318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:31:04.158 [DEBUG] [Thread-305318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:31:04.189 [INFO] [Thread-305318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:31:04.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:31:04.839 [DEBUG] [Thread-305318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:31:04.839 [DEBUG] [Thread-305318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:31:04.839 [DEBUG] [Thread-305318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:31:04.880 [DEBUG] [Thread-305318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:31:04.880 [DEBUG] [Thread-305318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:31:04.882 [DEBUG] [Thread-305318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:31:04.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:31:04.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:31:04.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:31:04.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:31:04.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:31:04.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:31:04.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:31:04.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:31:04.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:31:04.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.604581 -999.00  +23.80  20.24     31   +5.70 1 1 1 1 1   888    0 16.42 -43.66 ----- 20.2 20.2 149.0 27.4 28.3 -24.9 28.1 -24.5 29.1 -23.0 29.8 -25.1
2025-12-24T16:31:04.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:31:04.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:31:04.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.604581
2025-12-24T16:31:04.911 [DEBUG] [Thread-305318] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:31:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:31:04.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:31:04.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:31:04.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:31:04.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:31:04.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:30:31', tmtdew=20.48, humidity=26.06, cloud=0.0, wind=23.06, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:30:35.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:31:04.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:31:05.010 [DEBUG] [Thread-305321] [transport.py] [_log()] starting thread (client mode): 0xf5719030
2025-12-24T16:31:05.010 [DEBUG] [Thread-305321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:31:05.025 [DEBUG] [Thread-305321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:31:05.025 [INFO] [Thread-305321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:31:05.032 [DEBUG] [Thread-305321] [transport.py] [_log()] client lang: <none>
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] server lang: <none>
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] kex follows: False
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] Compression: none
2025-12-24T16:31:05.033 [DEBUG] [Thread-305321] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:31:05.094 [DEBUG] [Thread-305321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:31:05.094 [DEBUG] [Thread-305321] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:31:05.094 [DEBUG] [Thread-305321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:31:05.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:31:05.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:31:05.151 [DEBUG] [Thread-305321] [transport.py] [_log()] userauth is OK
2025-12-24T16:31:05.151 [DEBUG] [Thread-305321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:31:05.151 [DEBUG] [Thread-305321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:31:05.151 [DEBUG] [Thread-305321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:31:05.151 [DEBUG] [Thread-305321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:31:05.168 [INFO] [Thread-305321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:31:05.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:31:05.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:31:06.088 [DEBUG] [Thread-305321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:31:06.088 [DEBUG] [Thread-305321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:31:06.139 [DEBUG] [Thread-305321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:31:06.139 [DEBUG] [Thread-305321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:31:06.151 [DEBUG] [Thread-305321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:31:06.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:31:06.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:31:06.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:31:06.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:31:06.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:31:06.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:31:06.184 [DEBUG] [Thread-305321] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:31:09.256 [DEBUG] [Thread-305323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:31:15.621 [DEBUG] [Thread-305324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:31:24.378 [DEBUG] [Thread-305325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:31:33.969 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:31:33.971 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:31:36.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:31:36.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:31:36.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:31:37.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 31, 5), 20.43, 26.14, 0.0, 24.97, 23.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:31:37.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:31:05
2025-12-24T16:31:37.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:31:38.064 [DEBUG] [Thread-305326] [transport.py] [_log()] starting thread (client mode): 0xf571a080
2025-12-24T16:31:38.065 [DEBUG] [Thread-305326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:31:38.065 [DEBUG] [Thread-305326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:31:38.065 [INFO] [Thread-305326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] client lang: <none>
2025-12-24T16:31:38.068 [DEBUG] [Thread-305326] [transport.py] [_log()] server lang: <none>
2025-12-24T16:31:38.069 [DEBUG] [Thread-305326] [transport.py] [_log()] kex follows: False
2025-12-24T16:31:38.069 [DEBUG] [Thread-305326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:31:38.069 [DEBUG] [Thread-305326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:31:38.069 [DEBUG] [Thread-305326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:31:38.069 [DEBUG] [Thread-305326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:31:38.069 [DEBUG] [Thread-305326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:31:38.069 [DEBUG] [Thread-305326] [transport.py] [_log()] Compression: none
2025-12-24T16:31:38.069 [DEBUG] [Thread-305326] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:31:38.103 [DEBUG] [Thread-305326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:31:38.107 [DEBUG] [Thread-305326] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:31:38.109 [DEBUG] [Thread-305326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:31:38.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:31:38.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:31:38.114 [DEBUG] [Thread-305326] [transport.py] [_log()] userauth is OK
2025-12-24T16:31:38.114 [DEBUG] [Thread-305326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:31:38.114 [DEBUG] [Thread-305326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:31:38.114 [DEBUG] [Thread-305326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:31:38.114 [DEBUG] [Thread-305326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:31:38.141 [INFO] [Thread-305326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:31:38.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:31:38.904 [DEBUG] [Thread-305326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:31:38.904 [DEBUG] [Thread-305326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:31:38.904 [DEBUG] [Thread-305326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:31:38.945 [DEBUG] [Thread-305326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:31:38.945 [DEBUG] [Thread-305326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:31:38.947 [DEBUG] [Thread-305326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:31:38.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:31:38.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:31:38.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:31:38.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:31:38.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:31:38.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:31:38.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:31:38.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:31:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:31:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.604929 -999.00  +23.80  22.66     31   +5.70 1 1 1 1 1   888    0 16.72 -37.66 ----- 22.7 22.7 136.6 29.9 28.2 -24.0 28.0 -24.4 29.1 -21.7 29.6 -25.8
2025-12-24T16:31:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:31:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:31:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.604929
2025-12-24T16:31:38.976 [DEBUG] [Thread-305326] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:31:38.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:31:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:31:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:31:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:31:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:31:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:31:05', tmtdew=20.43, humidity=26.14, cloud=0.0, wind=24.97, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:31:05.866', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:31:39.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:31:39.075 [DEBUG] [Thread-305329] [transport.py] [_log()] starting thread (client mode): 0xf5718580
2025-12-24T16:31:39.075 [DEBUG] [Thread-305329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:31:39.089 [DEBUG] [Thread-305329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:31:39.090 [INFO] [Thread-305329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] client lang: <none>
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] server lang: <none>
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] kex follows: False
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:31:39.097 [DEBUG] [Thread-305329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:31:39.098 [DEBUG] [Thread-305329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:31:39.098 [DEBUG] [Thread-305329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:31:39.098 [DEBUG] [Thread-305329] [transport.py] [_log()] Compression: none
2025-12-24T16:31:39.098 [DEBUG] [Thread-305329] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:31:39.153 [DEBUG] [Thread-305329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:31:39.154 [DEBUG] [Thread-305329] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:31:39.154 [DEBUG] [Thread-305329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:31:39.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:31:39.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:31:39.211 [DEBUG] [Thread-305329] [transport.py] [_log()] userauth is OK
2025-12-24T16:31:39.211 [DEBUG] [Thread-305329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:31:39.211 [DEBUG] [Thread-305329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:31:39.211 [DEBUG] [Thread-305329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:31:39.211 [DEBUG] [Thread-305329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:31:39.225 [INFO] [Thread-305329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:31:39.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:31:39.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:31:39.453 [DEBUG] [Thread-305331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:31:40.062 [DEBUG] [Thread-305329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:31:40.062 [DEBUG] [Thread-305329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:31:40.110 [DEBUG] [Thread-305329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:31:40.110 [DEBUG] [Thread-305329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:31:40.119 [DEBUG] [Thread-305329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:31:40.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:31:40.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:31:40.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:31:40.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:31:40.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:31:40.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:31:40.152 [DEBUG] [Thread-305329] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:31:54.628 [DEBUG] [Thread-305332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:32:09.729 [DEBUG] [Thread-305333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:32:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:32:10.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:32:10.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:32:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 31, 37), 20.6, 26.11, 0.0, 33.79, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:32:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:31:37
2025-12-24T16:32:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:32:11.985 [DEBUG] [Thread-305334] [transport.py] [_log()] starting thread (client mode): 0xf571ac20
2025-12-24T16:32:11.985 [DEBUG] [Thread-305334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:32:11.997 [DEBUG] [Thread-305334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:32:11.997 [INFO] [Thread-305334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:32:12.000 [DEBUG] [Thread-305334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:32:12.000 [DEBUG] [Thread-305334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:32:12.000 [DEBUG] [Thread-305334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:32:12.000 [DEBUG] [Thread-305334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:32:12.000 [DEBUG] [Thread-305334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:32:12.000 [DEBUG] [Thread-305334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:32:12.000 [DEBUG] [Thread-305334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:32:12.000 [DEBUG] [Thread-305334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] client lang: <none>
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] server lang: <none>
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] kex follows: False
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] Compression: none
2025-12-24T16:32:12.001 [DEBUG] [Thread-305334] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:32:12.032 [DEBUG] [Thread-305334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:32:12.035 [DEBUG] [Thread-305334] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:32:12.036 [DEBUG] [Thread-305334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:32:12.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:32:12.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:32:12.040 [DEBUG] [Thread-305334] [transport.py] [_log()] userauth is OK
2025-12-24T16:32:12.040 [DEBUG] [Thread-305334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:32:12.040 [DEBUG] [Thread-305334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:32:12.040 [DEBUG] [Thread-305334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:32:12.040 [DEBUG] [Thread-305334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:32:12.058 [INFO] [Thread-305334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:32:12.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:32:12.660 [DEBUG] [Thread-305334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:32:12.660 [DEBUG] [Thread-305334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:32:12.660 [DEBUG] [Thread-305334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:32:12.701 [DEBUG] [Thread-305334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:32:12.701 [DEBUG] [Thread-305334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:32:12.704 [DEBUG] [Thread-305334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:32:12.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:32:12.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:32:12.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:32:12.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:32:12.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:32:12.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:32:12.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:32:12.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:32:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:32:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.605276 -999.00  +23.80  29.79     31   +5.60 1 2 1 1 1   888    0 16.81 -32.19 ----- 29.8 29.8 142.8 36.8 28.5 -21.7 28.3 -21.6 29.4 -21.5 29.8 -21.7
2025-12-24T16:32:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:32:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:32:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.605276
2025-12-24T16:32:12.742 [DEBUG] [Thread-305334] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:32:12.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:32:12.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:32:12.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:32:12.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:32:12.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:32:12.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:31:37', tmtdew=20.6, humidity=26.11, cloud=0.0, wind=33.79, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:31:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:32:12.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:32:12.840 [DEBUG] [Thread-305337] [transport.py] [_log()] starting thread (client mode): 0xf5789d50
2025-12-24T16:32:12.840 [DEBUG] [Thread-305337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:32:12.855 [DEBUG] [Thread-305337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:32:12.855 [INFO] [Thread-305337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:32:12.862 [DEBUG] [Thread-305337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] client lang: <none>
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] server lang: <none>
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] kex follows: False
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] Compression: none
2025-12-24T16:32:12.863 [DEBUG] [Thread-305337] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:32:12.918 [DEBUG] [Thread-305337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:32:12.918 [DEBUG] [Thread-305337] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:32:12.918 [DEBUG] [Thread-305337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:32:12.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:32:12.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:32:12.975 [DEBUG] [Thread-305337] [transport.py] [_log()] userauth is OK
2025-12-24T16:32:12.975 [DEBUG] [Thread-305337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:32:12.975 [DEBUG] [Thread-305337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:32:12.975 [DEBUG] [Thread-305337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:32:12.975 [DEBUG] [Thread-305337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:32:12.990 [INFO] [Thread-305337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:32:12.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:32:12.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:32:13.846 [DEBUG] [Thread-305337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:32:13.846 [DEBUG] [Thread-305337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:32:13.896 [DEBUG] [Thread-305337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:32:13.896 [DEBUG] [Thread-305337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:32:13.906 [DEBUG] [Thread-305337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:32:13.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:32:13.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:32:13.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:32:13.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:32:13.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:32:13.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:32:13.940 [DEBUG] [Thread-305337] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:32:15.903 [DEBUG] [Thread-305339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:32:24.817 [DEBUG] [Thread-305340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:32:34.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:32:34.119 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:32:39.981 [DEBUG] [Thread-305341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:32:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:32:43.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:32: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
2025-12-24T16:32:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 32, 10), 20.73, 25.93, 0.0, 34.72, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:32:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:32:10
2025-12-24T16:32:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:32:45.512 [DEBUG] [Thread-305342] [transport.py] [_log()] starting thread (client mode): 0xf5788460
2025-12-24T16:32:45.512 [DEBUG] [Thread-305342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:32:45.523 [DEBUG] [Thread-305342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:32:45.523 [INFO] [Thread-305342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] client lang: <none>
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] server lang: <none>
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] kex follows: False
2025-12-24T16:32:45.529 [DEBUG] [Thread-305342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:32:45.530 [DEBUG] [Thread-305342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:32:45.530 [DEBUG] [Thread-305342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:32:45.530 [DEBUG] [Thread-305342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:32:45.530 [DEBUG] [Thread-305342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:32:45.530 [DEBUG] [Thread-305342] [transport.py] [_log()] Compression: none
2025-12-24T16:32:45.530 [DEBUG] [Thread-305342] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:32:45.557 [DEBUG] [Thread-305342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:32:45.561 [DEBUG] [Thread-305342] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:32:45.563 [DEBUG] [Thread-305342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:32:45.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:32:45.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:32:45.566 [DEBUG] [Thread-305342] [transport.py] [_log()] userauth is OK
2025-12-24T16:32:45.567 [DEBUG] [Thread-305342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:32:45.567 [DEBUG] [Thread-305342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:32:45.567 [DEBUG] [Thread-305342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:32:45.567 [DEBUG] [Thread-305342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:32:45.587 [INFO] [Thread-305342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:32:45.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:32:46.235 [DEBUG] [Thread-305342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:32:46.236 [DEBUG] [Thread-305342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:32:46.236 [DEBUG] [Thread-305342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:32:46.276 [DEBUG] [Thread-305342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:32:46.277 [DEBUG] [Thread-305342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:32:46.279 [DEBUG] [Thread-305342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:32:46.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:32:46.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:32:46.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:32:46.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:32:46.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:32:46.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:32:46.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:32:46.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:32:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:32:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.605623 -999.00  +23.50  17.97     31   +5.60 1 2 1 1 1   888    0 17.07 -28.54 ----- 18.0 18.0 153.9 32.6 28.4 -22.0 28.3 -22.0 29.5 -21.7 29.8 -22.5
2025-12-24T16:32:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:32:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:32:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.605623
2025-12-24T16:32:46.307 [DEBUG] [Thread-305342] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:32:46.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:32:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:32:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:32:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:32:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:32:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:32:10', tmtdew=20.73, humidity=25.93, cloud=0.0, wind=34.72, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:32:05.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:32:46.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:32:46.410 [DEBUG] [Thread-305345] [transport.py] [_log()] starting thread (client mode): 0xf57893c0
2025-12-24T16:32:46.410 [DEBUG] [Thread-305345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:32:46.424 [DEBUG] [Thread-305345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:32:46.424 [INFO] [Thread-305345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] client lang: <none>
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] server lang: <none>
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] kex follows: False
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] Compression: none
2025-12-24T16:32:46.432 [DEBUG] [Thread-305345] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:32:46.494 [DEBUG] [Thread-305345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:32:46.494 [DEBUG] [Thread-305345] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:32:46.494 [DEBUG] [Thread-305345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:32:46.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:32:46.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:32:46.551 [DEBUG] [Thread-305345] [transport.py] [_log()] userauth is OK
2025-12-24T16:32:46.551 [DEBUG] [Thread-305345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:32:46.551 [DEBUG] [Thread-305345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:32:46.551 [DEBUG] [Thread-305345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:32:46.551 [DEBUG] [Thread-305345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:32:46.565 [INFO] [Thread-305345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:32:46.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:32:46.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:32:47.427 [DEBUG] [Thread-305345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:32:47.427 [DEBUG] [Thread-305345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:32:47.474 [DEBUG] [Thread-305345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:32:47.475 [DEBUG] [Thread-305345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:32:47.483 [DEBUG] [Thread-305345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:32:47.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:32:47.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:32:47.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:32:47.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:32:47.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:32:47.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:32:47.527 [DEBUG] [Thread-305345] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:32:55.050 [DEBUG] [Thread-305347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:33:10.204 [DEBUG] [Thread-305348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:33:16.176 [DEBUG] [Thread-305349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:33:17.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:33:17.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:33:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:33:18.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 32, 43), 20.62, 25.95, 0.0, 21.28, 23.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:33:18.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:32:43
2025-12-24T16:33:18.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:33:18.809 [DEBUG] [Thread-305350] [transport.py] [_log()] starting thread (client mode): 0xf57198d0
2025-12-24T16:33:18.810 [DEBUG] [Thread-305350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:33:18.823 [DEBUG] [Thread-305350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:33:18.823 [INFO] [Thread-305350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] client lang: <none>
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] server lang: <none>
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] kex follows: False
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:33:18.828 [DEBUG] [Thread-305350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:33:18.829 [DEBUG] [Thread-305350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:33:18.829 [DEBUG] [Thread-305350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:33:18.829 [DEBUG] [Thread-305350] [transport.py] [_log()] Compression: none
2025-12-24T16:33:18.829 [DEBUG] [Thread-305350] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:33:18.861 [DEBUG] [Thread-305350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:33:18.864 [DEBUG] [Thread-305350] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:33:18.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:33:18.867 [DEBUG] [Thread-305350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:33:18.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:33:18.869 [DEBUG] [Thread-305350] [transport.py] [_log()] userauth is OK
2025-12-24T16:33:18.869 [DEBUG] [Thread-305350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:33:18.869 [DEBUG] [Thread-305350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:33:18.869 [DEBUG] [Thread-305350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:33:18.869 [DEBUG] [Thread-305350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:33:18.899 [INFO] [Thread-305350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:33:18.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:33:19.551 [DEBUG] [Thread-305350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:33:19.552 [DEBUG] [Thread-305350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:33:19.553 [DEBUG] [Thread-305350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:33:19.593 [DEBUG] [Thread-305350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:33:19.593 [DEBUG] [Thread-305350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:33:19.595 [DEBUG] [Thread-305350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:33:19.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:33:19.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:33:19.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:33:19.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:33:19.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:33:19.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:33:19.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:33:19.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:33:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:33:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.605970 -999.00  +23.50  14.54     31   +5.70 1 2 1 1 1   888    0 17.14 -23.87 ----- 14.5 14.5 131.4 25.4 28.4 -22.5 28.3 -22.4 29.5 -21.9 29.9 -23.6
2025-12-24T16:33:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:33:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:33:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.605970
2025-12-24T16:33:19.626 [DEBUG] [Thread-305350] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:33:19.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:33:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:33:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:33:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:33:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:33:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:32:43', tmtdew=20.62, humidity=25.95, cloud=0.0, wind=21.28, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:32:35.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:33:19.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:33:19.730 [DEBUG] [Thread-305353] [transport.py] [_log()] starting thread (client mode): 0xf818ba90
2025-12-24T16:33:19.730 [DEBUG] [Thread-305353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:33:19.744 [DEBUG] [Thread-305353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:33:19.744 [INFO] [Thread-305353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] client lang: <none>
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] server lang: <none>
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] kex follows: False
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] Compression: none
2025-12-24T16:33:19.752 [DEBUG] [Thread-305353] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:33:19.811 [DEBUG] [Thread-305353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:33:19.811 [DEBUG] [Thread-305353] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:33:19.812 [DEBUG] [Thread-305353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:33:19.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:33:19.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:33:19.871 [DEBUG] [Thread-305353] [transport.py] [_log()] userauth is OK
2025-12-24T16:33:19.871 [DEBUG] [Thread-305353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:33:19.871 [DEBUG] [Thread-305353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:33:19.871 [DEBUG] [Thread-305353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:33:19.871 [DEBUG] [Thread-305353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:33:19.887 [INFO] [Thread-305353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:33:19.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:33:19.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:33:20.681 [DEBUG] [Thread-305353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:33:20.681 [DEBUG] [Thread-305353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:33:20.730 [DEBUG] [Thread-305353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:33:20.730 [DEBUG] [Thread-305353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:33:20.740 [DEBUG] [Thread-305353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:33:20.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:33:20.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:33:20.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:33:20.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:33:20.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:33:20.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:33:20.774 [DEBUG] [Thread-305353] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:33:25.277 [DEBUG] [Thread-305355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:33:34.269 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:33:34.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:33:40.417 [DEBUG] [Thread-305356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:33:50.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:33:50.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:33:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:33:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 33, 16), 20.63, 25.93, 0.0, 21.77, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:33:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:33:16
2025-12-24T16:33:52.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:33:52.237 [DEBUG] [Thread-305357] [transport.py] [_log()] starting thread (client mode): 0xf5770b20
2025-12-24T16:33:52.238 [DEBUG] [Thread-305357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:33:52.249 [DEBUG] [Thread-305357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:33:52.249 [INFO] [Thread-305357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] client lang: <none>
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] server lang: <none>
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] kex follows: False
2025-12-24T16:33:52.254 [DEBUG] [Thread-305357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:33:52.255 [DEBUG] [Thread-305357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:33:52.255 [DEBUG] [Thread-305357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:33:52.255 [DEBUG] [Thread-305357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:33:52.255 [DEBUG] [Thread-305357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:33:52.255 [DEBUG] [Thread-305357] [transport.py] [_log()] Compression: none
2025-12-24T16:33:52.255 [DEBUG] [Thread-305357] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:33:52.285 [DEBUG] [Thread-305357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:33:52.289 [DEBUG] [Thread-305357] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:33:52.290 [DEBUG] [Thread-305357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:33:52.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:33:52.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:33:52.294 [DEBUG] [Thread-305357] [transport.py] [_log()] userauth is OK
2025-12-24T16:33:52.294 [DEBUG] [Thread-305357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:33:52.294 [DEBUG] [Thread-305357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:33:52.294 [DEBUG] [Thread-305357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:33:52.294 [DEBUG] [Thread-305357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:33:52.306 [INFO] [Thread-305357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:33:52.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:33:52.940 [DEBUG] [Thread-305357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:33:52.940 [DEBUG] [Thread-305357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:33:52.941 [DEBUG] [Thread-305357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:33:52.982 [DEBUG] [Thread-305357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:33:52.982 [DEBUG] [Thread-305357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:33:52.984 [DEBUG] [Thread-305357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:33:52.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:33:52.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:33:53.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:33:53.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:33:53.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:33:53.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:33:53.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:33:53.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:33:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:33:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.606317 -999.00  +23.60  28.45     31   +5.60 1 2 1 1 1   888    0 17.34 -18.12 ----- 28.4 28.4 141.8 30.5 28.6 -20.6 28.5 -20.1 29.8 -20.5 30.1 -21.4
2025-12-24T16:33:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:33:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:33:53.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.606317
2025-12-24T16:33:53.020 [DEBUG] [Thread-305357] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:33:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:33:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:33:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:33:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:33:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:33:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:33:16', tmtdew=20.63, humidity=25.93, cloud=0.0, wind=21.77, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:33:05.789', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:33:53.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:33:53.157 [DEBUG] [Thread-305360] [transport.py] [_log()] starting thread (client mode): 0xf5773610
2025-12-24T16:33:53.157 [DEBUG] [Thread-305360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:33:53.157 [DEBUG] [Thread-305360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:33:53.157 [INFO] [Thread-305360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] client lang: <none>
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] server lang: <none>
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] kex follows: False
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] Compression: none
2025-12-24T16:33:53.173 [DEBUG] [Thread-305360] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:33:53.238 [DEBUG] [Thread-305360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:33:53.238 [DEBUG] [Thread-305360] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:33:53.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:33:53.238 [DEBUG] [Thread-305360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:33:53.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:33:53.295 [DEBUG] [Thread-305360] [transport.py] [_log()] userauth is OK
2025-12-24T16:33:53.296 [DEBUG] [Thread-305360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:33:53.296 [DEBUG] [Thread-305360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:33:53.296 [DEBUG] [Thread-305360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:33:53.296 [DEBUG] [Thread-305360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:33:53.309 [INFO] [Thread-305360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:33:53.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:33:53.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:33:54.152 [DEBUG] [Thread-305360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:33:54.153 [DEBUG] [Thread-305360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:33:54.200 [DEBUG] [Thread-305360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:33:54.200 [DEBUG] [Thread-305360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:33:54.209 [DEBUG] [Thread-305360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:33:54.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:33:54.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:33:54.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
2025-12-24T16:33:54.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:33:54.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:33:54.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:33:54.244 [DEBUG] [Thread-305360] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:33:55.473 [DEBUG] [Thread-305362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:34:10.629 [DEBUG] [Thread-305363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:34:16.534 [DEBUG] [Thread-305364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:34:24.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:34:24.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:34:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:34:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 33, 49), 21.07, 25.28, 0.0, 26.59, 23.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:34:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:33:49
2025-12-24T16:34:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:34:25.726 [DEBUG] [Thread-305365] [transport.py] [_log()] starting thread (client mode): 0xf81f2b30
2025-12-24T16:34:25.727 [DEBUG] [Thread-305365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:34:25.727 [DEBUG] [Thread-305365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:34:25.727 [INFO] [Thread-305365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:34:25.731 [DEBUG] [Thread-305365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] client lang: <none>
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] server lang: <none>
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] kex follows: False
2025-12-24T16:34:25.732 [DEBUG] [Thread-305365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:34:25.733 [DEBUG] [Thread-305365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:34:25.733 [DEBUG] [Thread-305365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:34:25.733 [DEBUG] [Thread-305365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:34:25.733 [DEBUG] [Thread-305365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:34:25.733 [DEBUG] [Thread-305365] [transport.py] [_log()] Compression: none
2025-12-24T16:34:25.733 [DEBUG] [Thread-305365] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:34:25.748 [DEBUG] [Thread-305367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:34:25.773 [DEBUG] [Thread-305365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:34:25.776 [DEBUG] [Thread-305365] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:34:25.778 [DEBUG] [Thread-305365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:34:25.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:34:25.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:34:25.781 [DEBUG] [Thread-305365] [transport.py] [_log()] userauth is OK
2025-12-24T16:34:25.781 [DEBUG] [Thread-305365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:34:25.781 [DEBUG] [Thread-305365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:34:25.781 [DEBUG] [Thread-305365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:34:25.781 [DEBUG] [Thread-305365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:34:25.813 [INFO] [Thread-305365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:34:25.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:34:26.469 [DEBUG] [Thread-305365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:34:26.469 [DEBUG] [Thread-305365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:34:26.469 [DEBUG] [Thread-305365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:34:26.510 [DEBUG] [Thread-305365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:34:26.510 [DEBUG] [Thread-305365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:34:26.512 [DEBUG] [Thread-305365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:34:26.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:34:26.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:34:26.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:34:26.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:34:26.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:34:26.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:34:26.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:34:26.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:34:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:34:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.606665 -999.00  +23.60  19.80     31   +5.60 1 2 1 1 1   888    0 17.37 -11.33 ----- 19.8 19.8 146.2 28.5 28.6 -20.6 28.6 -20.8 29.8 -22.2 30.2 -21.6
2025-12-24T16:34:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:34:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:34:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.606665
2025-12-24T16:34:26.542 [DEBUG] [Thread-305365] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:34:26.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:34:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:34:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:34:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:34:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:34:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:33:49', tmtdew=21.07, humidity=25.28, cloud=0.0, wind=26.59, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:33:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:34:26.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:34:26.651 [DEBUG] [Thread-305369] [transport.py] [_log()] starting thread (client mode): 0xf578aaa0
2025-12-24T16:34:26.651 [DEBUG] [Thread-305369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:34:26.666 [DEBUG] [Thread-305369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:34:26.666 [INFO] [Thread-305369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:34:26.673 [DEBUG] [Thread-305369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:34:26.673 [DEBUG] [Thread-305369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] client lang: <none>
2025-12-24T16:34:26.674 [DEBUG] [Thread-305369] [transport.py] [_log()] server lang: <none>
2025-12-24T16:34:26.675 [DEBUG] [Thread-305369] [transport.py] [_log()] kex follows: False
2025-12-24T16:34:26.675 [DEBUG] [Thread-305369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:34:26.675 [DEBUG] [Thread-305369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:34:26.675 [DEBUG] [Thread-305369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:34:26.675 [DEBUG] [Thread-305369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:34:26.675 [DEBUG] [Thread-305369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:34:26.675 [DEBUG] [Thread-305369] [transport.py] [_log()] Compression: none
2025-12-24T16:34:26.675 [DEBUG] [Thread-305369] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:34:26.736 [DEBUG] [Thread-305369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:34:26.737 [DEBUG] [Thread-305369] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:34:26.738 [DEBUG] [Thread-305369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:34:26.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:34:26.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:34:26.792 [DEBUG] [Thread-305369] [transport.py] [_log()] userauth is OK
2025-12-24T16:34:26.792 [DEBUG] [Thread-305369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:34:26.792 [DEBUG] [Thread-305369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:34:26.792 [DEBUG] [Thread-305369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:34:26.792 [DEBUG] [Thread-305369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:34:26.811 [INFO] [Thread-305369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:34:26.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:34:26.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:34:27.679 [DEBUG] [Thread-305369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:34:27.680 [DEBUG] [Thread-305369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:34:27.727 [DEBUG] [Thread-305369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:34:27.727 [DEBUG] [Thread-305369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:34:27.737 [DEBUG] [Thread-305369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:34:27.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:34:27.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:34:27.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:34:27.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:34:27.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:34:27.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:34:27.774 [DEBUG] [Thread-305369] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:34:34.411 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:34:34.412 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:34:40.829 [DEBUG] [Thread-305371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:34:55.967 [DEBUG] [Thread-305372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:34:57.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:34:57.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:34:57.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:34:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 34, 22), 21.12, 25.23, 0.0, 25.89, 23.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:34:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:34:22
2025-12-24T16:34:59.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:34:59.242 [DEBUG] [Thread-305373] [transport.py] [_log()] starting thread (client mode): 0xf57737f0
2025-12-24T16:34:59.243 [DEBUG] [Thread-305373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:34:59.255 [DEBUG] [Thread-305373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:34:59.255 [INFO] [Thread-305373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:34:59.259 [DEBUG] [Thread-305373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] client lang: <none>
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] server lang: <none>
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] kex follows: False
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:34:59.260 [DEBUG] [Thread-305373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:34:59.261 [DEBUG] [Thread-305373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:34:59.261 [DEBUG] [Thread-305373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:34:59.261 [DEBUG] [Thread-305373] [transport.py] [_log()] Compression: none
2025-12-24T16:34:59.261 [DEBUG] [Thread-305373] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:34:59.295 [DEBUG] [Thread-305373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:34:59.298 [DEBUG] [Thread-305373] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:34:59.300 [DEBUG] [Thread-305373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:34:59.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:34:59.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:34:59.303 [DEBUG] [Thread-305373] [transport.py] [_log()] userauth is OK
2025-12-24T16:34:59.303 [DEBUG] [Thread-305373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:34:59.303 [DEBUG] [Thread-305373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:34:59.303 [DEBUG] [Thread-305373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:34:59.303 [DEBUG] [Thread-305373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:34:59.321 [INFO] [Thread-305373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:34:59.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:34:59.978 [DEBUG] [Thread-305373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:34:59.979 [DEBUG] [Thread-305373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:34:59.979 [DEBUG] [Thread-305373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:35:00.020 [DEBUG] [Thread-305373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:35:00.020 [DEBUG] [Thread-305373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:35:00.023 [DEBUG] [Thread-305373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:35:00.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:35:00.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:35:00.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:35:00.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:35:00.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:35:00.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:35:00.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:35:00.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:35:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:35:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.607012 -999.00  +23.50  18.40     31   +5.50 1 2 1 1 1   888    0 17.63 -6.86 ----- 18.4 18.4 153.4 26.6 28.6 -20.2 28.6 -21.1 30.0 -20.6 30.3 -21.4
2025-12-24T16:35:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:35:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:35:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.607012
2025-12-24T16:35:00.062 [DEBUG] [Thread-305373] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:35:00.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:35:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:35:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:35:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:35:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:35:00.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:34:22', tmtdew=21.12, humidity=25.23, cloud=0.0, wind=25.89, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:34:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:35:00.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:35:00.176 [DEBUG] [Thread-305376] [transport.py] [_log()] starting thread (client mode): 0xf5773a60
2025-12-24T16:35:00.176 [DEBUG] [Thread-305376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:35:00.191 [DEBUG] [Thread-305376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:35:00.191 [INFO] [Thread-305376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:35:00.198 [DEBUG] [Thread-305376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:35:00.198 [DEBUG] [Thread-305376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:35:00.198 [DEBUG] [Thread-305376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:35:00.198 [DEBUG] [Thread-305376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] client lang: <none>
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] server lang: <none>
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] kex follows: False
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:35:00.199 [DEBUG] [Thread-305376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:35:00.200 [DEBUG] [Thread-305376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:35:00.200 [DEBUG] [Thread-305376] [transport.py] [_log()] Compression: none
2025-12-24T16:35:00.200 [DEBUG] [Thread-305376] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:35:00.258 [DEBUG] [Thread-305376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:35:00.259 [DEBUG] [Thread-305376] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:35:00.259 [DEBUG] [Thread-305376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:35:00.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:35:00.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:35:00.315 [DEBUG] [Thread-305376] [transport.py] [_log()] userauth is OK
2025-12-24T16:35:00.315 [DEBUG] [Thread-305376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:35:00.315 [DEBUG] [Thread-305376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:35:00.315 [DEBUG] [Thread-305376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:35:00.315 [DEBUG] [Thread-305376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:35:00.329 [INFO] [Thread-305376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:35:00.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:35:00.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:35:01.161 [DEBUG] [Thread-305376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:35:01.161 [DEBUG] [Thread-305376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:35:01.207 [DEBUG] [Thread-305376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:35:01.208 [DEBUG] [Thread-305376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:35:01.216 [DEBUG] [Thread-305376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:35:01.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:35:01.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:35:01.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
2025-12-24T16:35:01.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:35:01.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:35:01.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:35:01.248 [DEBUG] [Thread-305376] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:35:11.050 [DEBUG] [Thread-305378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:35:16.852 [DEBUG] [Thread-305379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:35:26.165 [DEBUG] [Thread-305380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:35:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:35:31.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:35: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
2025-12-24T16:35:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 34, 56), 21.22, 24.87, 0.0, 27.4, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:35:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:34:56
2025-12-24T16:35:32.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:35:32.589 [DEBUG] [Thread-305381] [transport.py] [_log()] starting thread (client mode): 0xf5772440
2025-12-24T16:35:32.590 [DEBUG] [Thread-305381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:35:32.602 [DEBUG] [Thread-305381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:35:32.602 [INFO] [Thread-305381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] client lang: <none>
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] server lang: <none>
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] kex follows: False
2025-12-24T16:35:32.608 [DEBUG] [Thread-305381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:35:32.609 [DEBUG] [Thread-305381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:35:32.609 [DEBUG] [Thread-305381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:35:32.609 [DEBUG] [Thread-305381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:35:32.609 [DEBUG] [Thread-305381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:35:32.609 [DEBUG] [Thread-305381] [transport.py] [_log()] Compression: none
2025-12-24T16:35:32.609 [DEBUG] [Thread-305381] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:35:32.647 [DEBUG] [Thread-305381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:35:32.652 [DEBUG] [Thread-305381] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:35:32.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:35:32.655 [DEBUG] [Thread-305381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:35:32.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:35:32.657 [DEBUG] [Thread-305381] [transport.py] [_log()] userauth is OK
2025-12-24T16:35:32.658 [DEBUG] [Thread-305381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:35:32.658 [DEBUG] [Thread-305381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:35:32.658 [DEBUG] [Thread-305381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:35:32.658 [DEBUG] [Thread-305381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:35:32.676 [INFO] [Thread-305381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:35:32.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:35:33.320 [DEBUG] [Thread-305381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:35:33.320 [DEBUG] [Thread-305381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:35:33.322 [DEBUG] [Thread-305381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:35:33.362 [DEBUG] [Thread-305381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:35:33.364 [DEBUG] [Thread-305381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:35:33.366 [DEBUG] [Thread-305381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:35:33.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:35:33.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:35:33.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:35:33.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:35:33.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:35:33.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:35:33.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:35:33.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:35:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:35:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.607359 -999.00  +23.50  23.75     31   +5.60 1 2 1 1 1   888    0 17.68 -2.80 ----- 23.8 23.8 143.7 30.1 28.6 -21.7 28.6 -20.4 30.0 -21.6 30.4 -22.7
2025-12-24T16:35:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:35:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:35:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.607359
2025-12-24T16:35:33.414 [DEBUG] [Thread-305381] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:35:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:35:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:35:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:35:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:35:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:35:33.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:34:56', tmtdew=21.22, humidity=24.87, cloud=0.0, wind=27.4, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:34:35.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:35:33.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:35:33.576 [DEBUG] [Thread-305384] [transport.py] [_log()] starting thread (client mode): 0xf8189b10
2025-12-24T16:35:33.577 [DEBUG] [Thread-305384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:35:33.590 [DEBUG] [Thread-305384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:35:33.590 [INFO] [Thread-305384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] client lang: <none>
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] server lang: <none>
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] kex follows: False
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:35:33.598 [DEBUG] [Thread-305384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:35:33.599 [DEBUG] [Thread-305384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:35:33.599 [DEBUG] [Thread-305384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:35:33.599 [DEBUG] [Thread-305384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:35:33.599 [DEBUG] [Thread-305384] [transport.py] [_log()] Compression: none
2025-12-24T16:35:33.599 [DEBUG] [Thread-305384] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:35:33.654 [DEBUG] [Thread-305384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:35:33.654 [DEBUG] [Thread-305384] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:35:33.654 [DEBUG] [Thread-305384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:35:33.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:35:33.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:35:33.711 [DEBUG] [Thread-305384] [transport.py] [_log()] userauth is OK
2025-12-24T16:35:33.711 [DEBUG] [Thread-305384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:35:33.711 [DEBUG] [Thread-305384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:35:33.711 [DEBUG] [Thread-305384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:35:33.711 [DEBUG] [Thread-305384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:35:33.729 [INFO] [Thread-305384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:35:33.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:35:33.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:35:34.558 [DEBUG] [Thread-305384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:35:34.558 [DEBUG] [Thread-305384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:35:34.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:35:34.575 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:35:34.606 [DEBUG] [Thread-305384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:35:34.606 [DEBUG] [Thread-305384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:35:34.614 [DEBUG] [Thread-305384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:35:34.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:35:34.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:35:34.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:35:34.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:35:34.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:35:34.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:35:34.647 [DEBUG] [Thread-305384] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:35:41.245 [DEBUG] [Thread-305386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:35:56.405 [DEBUG] [Thread-305387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:36:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:36:04.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:36:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:36:05.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 35, 29), 21.24, 24.82, 0.0, 26.1, 23.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:36:05.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:35:29
2025-12-24T16:36:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:36:06.053 [DEBUG] [Thread-305388] [transport.py] [_log()] starting thread (client mode): 0xf5773550
2025-12-24T16:36:06.054 [DEBUG] [Thread-305388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:36:06.063 [DEBUG] [Thread-305388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:36:06.063 [INFO] [Thread-305388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] client lang: <none>
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] server lang: <none>
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] kex follows: False
2025-12-24T16:36:06.068 [DEBUG] [Thread-305388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:36:06.069 [DEBUG] [Thread-305388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:36:06.069 [DEBUG] [Thread-305388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:36:06.069 [DEBUG] [Thread-305388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:36:06.069 [DEBUG] [Thread-305388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:36:06.069 [DEBUG] [Thread-305388] [transport.py] [_log()] Compression: none
2025-12-24T16:36:06.069 [DEBUG] [Thread-305388] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:36:06.101 [DEBUG] [Thread-305388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:36:06.104 [DEBUG] [Thread-305388] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:36:06.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:36:06.106 [DEBUG] [Thread-305388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:36:06.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:36:06.109 [DEBUG] [Thread-305388] [transport.py] [_log()] userauth is OK
2025-12-24T16:36:06.109 [DEBUG] [Thread-305388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:36:06.109 [DEBUG] [Thread-305388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:36:06.109 [DEBUG] [Thread-305388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:36:06.109 [DEBUG] [Thread-305388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:36:06.127 [INFO] [Thread-305388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:36:06.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:36:06.774 [DEBUG] [Thread-305388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:36:06.775 [DEBUG] [Thread-305388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:36:06.776 [DEBUG] [Thread-305388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:36:06.816 [DEBUG] [Thread-305388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:36:06.817 [DEBUG] [Thread-305388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:36:06.820 [DEBUG] [Thread-305388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:36:06.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:36:06.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:36:06.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:36:06.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:36:06.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:36:06.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:36:06.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:36:06.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:36:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:36:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.608053 -999.00  +23.70  18.54     31   +5.70 1 2 1 1 1   888    0 17.74 5.51 ----- 18.5 18.5 143.0 26.7 28.9 -20.2 28.9 -20.2 30.3 -21.0 30.6 -21.6
2025-12-24T16:36:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:36:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:36:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.608053
2025-12-24T16:36:06.858 [DEBUG] [Thread-305388] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:36:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:36:06.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:36:06.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:36:06.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:36:06.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:36:06.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:35:29', tmtdew=21.24, humidity=24.82, cloud=0.0, wind=26.1, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:35:35.779', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:36:06.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:36:06.974 [DEBUG] [Thread-305391] [transport.py] [_log()] starting thread (client mode): 0xf574eec0
2025-12-24T16:36:06.975 [DEBUG] [Thread-305391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:36:06.990 [DEBUG] [Thread-305391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:36:06.991 [INFO] [Thread-305391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:36:06.998 [DEBUG] [Thread-305391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:36:06.998 [DEBUG] [Thread-305391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:36:06.998 [DEBUG] [Thread-305391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] client lang: <none>
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] server lang: <none>
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] kex follows: False
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] Compression: none
2025-12-24T16:36:06.999 [DEBUG] [Thread-305391] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:36:07.056 [DEBUG] [Thread-305391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:36:07.056 [DEBUG] [Thread-305391] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:36:07.057 [DEBUG] [Thread-305391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:36:07.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:36:07.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:36:07.116 [DEBUG] [Thread-305391] [transport.py] [_log()] userauth is OK
2025-12-24T16:36:07.116 [DEBUG] [Thread-305391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:36:07.117 [DEBUG] [Thread-305391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:36:07.117 [DEBUG] [Thread-305391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:36:07.117 [DEBUG] [Thread-305391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:36:07.136 [INFO] [Thread-305391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:36:07.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:36:07.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:36:08.018 [DEBUG] [Thread-305391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:36:08.018 [DEBUG] [Thread-305391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:36:08.056 [DEBUG] [Thread-305391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:36:08.056 [DEBUG] [Thread-305391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:36:08.064 [DEBUG] [Thread-305391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:36:08.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:36:08.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:36:08.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:36:08.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:36:08.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:36:08.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:36:08.100 [DEBUG] [Thread-305391] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:36:11.514 [DEBUG] [Thread-305393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:36:17.099 [DEBUG] [Thread-305394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:36:26.672 [DEBUG] [Thread-305395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:36:34.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:36:34.725 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:36:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:36:38.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:36:38.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:36:39.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 36, 2), 21.26, 24.78, 0.0, 25.0, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:36:39.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:36:02
2025-12-24T16:36:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:36:39.453 [DEBUG] [Thread-305396] [transport.py] [_log()] starting thread (client mode): 0xf5770490
2025-12-24T16:36:39.454 [DEBUG] [Thread-305396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:36:39.464 [DEBUG] [Thread-305396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:36:39.464 [INFO] [Thread-305396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:36:39.469 [DEBUG] [Thread-305396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:36:39.469 [DEBUG] [Thread-305396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:36:39.469 [DEBUG] [Thread-305396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:36:39.469 [DEBUG] [Thread-305396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:36:39.469 [DEBUG] [Thread-305396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:36:39.469 [DEBUG] [Thread-305396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:36:39.469 [DEBUG] [Thread-305396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:36:39.469 [DEBUG] [Thread-305396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] client lang: <none>
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] server lang: <none>
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] kex follows: False
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] Compression: none
2025-12-24T16:36:39.470 [DEBUG] [Thread-305396] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:36:39.501 [DEBUG] [Thread-305396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:36:39.504 [DEBUG] [Thread-305396] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:36:39.505 [DEBUG] [Thread-305396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:36:39.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:36:39.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:36:39.509 [DEBUG] [Thread-305396] [transport.py] [_log()] userauth is OK
2025-12-24T16:36:39.509 [DEBUG] [Thread-305396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:36:39.509 [DEBUG] [Thread-305396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:36:39.509 [DEBUG] [Thread-305396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:36:39.509 [DEBUG] [Thread-305396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:36:39.527 [INFO] [Thread-305396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:36:39.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:36:40.184 [DEBUG] [Thread-305396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:36:40.193 [DEBUG] [Thread-305396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:36:40.195 [DEBUG] [Thread-305396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:36:40.227 [DEBUG] [Thread-305396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:36:40.227 [DEBUG] [Thread-305396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:36:40.231 [DEBUG] [Thread-305396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:36:40.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:36:40.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:36:40.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:36:40.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:36:40.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:36:40.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:36:40.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:36:40.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:36:40.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:36:40.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.608401 -999.00  +23.70  14.43     31   +5.60 1 2 1 1 1   888    0 17.89 10.09 ----- 14.4 14.4 141.2 22.4 28.9 -20.5 28.9 -20.0 30.4 -22.2 30.7 -21.1
2025-12-24T16:36:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:36:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:36:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.608401
2025-12-24T16:36:40.271 [DEBUG] [Thread-305396] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:36:40.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:36:40.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:36:40.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:36:40.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:36:40.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:36:40.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:36:02', tmtdew=21.26, humidity=24.78, cloud=0.0, wind=25.0, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:36:05.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:36:40.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:36:40.384 [DEBUG] [Thread-305399] [transport.py] [_log()] starting thread (client mode): 0xf81c1240
2025-12-24T16:36:40.385 [DEBUG] [Thread-305399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:36:40.399 [DEBUG] [Thread-305399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:36:40.399 [INFO] [Thread-305399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] client lang: <none>
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] server lang: <none>
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] kex follows: False
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:36:40.406 [DEBUG] [Thread-305399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:36:40.407 [DEBUG] [Thread-305399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:36:40.407 [DEBUG] [Thread-305399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:36:40.407 [DEBUG] [Thread-305399] [transport.py] [_log()] Compression: none
2025-12-24T16:36:40.407 [DEBUG] [Thread-305399] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:36:40.462 [DEBUG] [Thread-305399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:36:40.463 [DEBUG] [Thread-305399] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:36:40.463 [DEBUG] [Thread-305399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:36:40.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:36:40.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:36:40.519 [DEBUG] [Thread-305399] [transport.py] [_log()] userauth is OK
2025-12-24T16:36:40.519 [DEBUG] [Thread-305399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:36:40.519 [DEBUG] [Thread-305399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:36:40.519 [DEBUG] [Thread-305399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:36:40.519 [DEBUG] [Thread-305399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:36:40.534 [INFO] [Thread-305399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:36:40.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:36:40.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:36:41.346 [DEBUG] [Thread-305399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:36:41.346 [DEBUG] [Thread-305399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:36:41.393 [DEBUG] [Thread-305399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:36:41.394 [DEBUG] [Thread-305399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:36:41.403 [DEBUG] [Thread-305399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:36:41.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:36:41.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:36:41.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:36:41.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:36:41.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:36:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:36:41.440 [DEBUG] [Thread-305399] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:36:41.767 [DEBUG] [Thread-305401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:36:56.930 [DEBUG] [Thread-305402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:37:11.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:37:11.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:37:11.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:37:12.032 [DEBUG] [Thread-305403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:37:12.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 36, 35), 21.09, 25.42, 0.0, 12.7, 24.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:37:12.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:36:35
2025-12-24T16:37:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:37:12.799 [DEBUG] [Thread-305404] [transport.py] [_log()] starting thread (client mode): 0xf81c1d80
2025-12-24T16:37:12.800 [DEBUG] [Thread-305404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:37:12.803 [DEBUG] [Thread-305404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:37:12.803 [INFO] [Thread-305404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] client lang: <none>
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] server lang: <none>
2025-12-24T16:37:12.807 [DEBUG] [Thread-305404] [transport.py] [_log()] kex follows: False
2025-12-24T16:37:12.808 [DEBUG] [Thread-305404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:37:12.809 [DEBUG] [Thread-305404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:37:12.809 [DEBUG] [Thread-305404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:37:12.809 [DEBUG] [Thread-305404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:37:12.809 [DEBUG] [Thread-305404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:37:12.810 [DEBUG] [Thread-305404] [transport.py] [_log()] Compression: none
2025-12-24T16:37:12.810 [DEBUG] [Thread-305404] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:37:12.844 [DEBUG] [Thread-305404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:37:12.846 [DEBUG] [Thread-305404] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:37:12.846 [DEBUG] [Thread-305404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:37:12.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:37:12.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:37:12.849 [DEBUG] [Thread-305404] [transport.py] [_log()] userauth is OK
2025-12-24T16:37:12.849 [DEBUG] [Thread-305404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:37:12.849 [DEBUG] [Thread-305404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:37:12.849 [DEBUG] [Thread-305404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:37:12.849 [DEBUG] [Thread-305404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:37:12.867 [INFO] [Thread-305404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:37:12.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:37:13.499 [DEBUG] [Thread-305404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:37:13.499 [DEBUG] [Thread-305404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:37:13.500 [DEBUG] [Thread-305404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:37:13.540 [DEBUG] [Thread-305404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:37:13.541 [DEBUG] [Thread-305404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:37:13.543 [DEBUG] [Thread-305404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:37:13.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:37:13.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:37:13.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:37:13.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:37:13.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:37:13.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:37:13.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:37:13.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:37:13.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:37:13.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.608748 -999.00  +23.60  11.07     31   +5.70 1 2 1 1 1   888    0 18.12 12.81 ----- 11.1 11.1 108.6 15.9 29.0 -19.2 29.1 -20.2 30.5 -20.3 30.8 -20.9
2025-12-24T16:37:13.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:37:13.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:37:13.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.608748
2025-12-24T16:37:13.571 [DEBUG] [Thread-305404] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:37:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:37:13.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:37:13.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:37:13.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:37:13.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:37:13.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:36:35', tmtdew=21.09, humidity=25.42, cloud=0.0, wind=12.7, temperature=24.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:36:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:37:13.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:37:13.675 [DEBUG] [Thread-305407] [transport.py] [_log()] starting thread (client mode): 0xf5770f70
2025-12-24T16:37:13.675 [DEBUG] [Thread-305407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:37:13.692 [DEBUG] [Thread-305407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:37:13.692 [INFO] [Thread-305407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] client lang: <none>
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] server lang: <none>
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] kex follows: False
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] Compression: none
2025-12-24T16:37:13.699 [DEBUG] [Thread-305407] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:37:13.759 [DEBUG] [Thread-305407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:37:13.759 [DEBUG] [Thread-305407] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:37:13.760 [DEBUG] [Thread-305407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:37:13.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:37:13.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:37:13.815 [DEBUG] [Thread-305407] [transport.py] [_log()] userauth is OK
2025-12-24T16:37:13.815 [DEBUG] [Thread-305407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:37:13.816 [DEBUG] [Thread-305407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:37:13.816 [DEBUG] [Thread-305407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:37:13.816 [DEBUG] [Thread-305407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:37:13.834 [INFO] [Thread-305407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:37:13.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:37:13.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:37:14.670 [DEBUG] [Thread-305407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:37:14.670 [DEBUG] [Thread-305407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:37:14.718 [DEBUG] [Thread-305407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:37:14.718 [DEBUG] [Thread-305407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:37:14.727 [DEBUG] [Thread-305407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:37:14.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:37:14.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:37:14.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:37:14.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:37:14.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:37:14.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:37:14.763 [DEBUG] [Thread-305407] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:37:17.421 [DEBUG] [Thread-305409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:37:27.116 [DEBUG] [Thread-305410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:37:34.863 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:37:34.864 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:37:42.289 [DEBUG] [Thread-305411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:37:44.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:37:44.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:37:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:37:45.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 37, 9), 21.24, 25.17, 0.0, 12.09, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:37:45.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:37:09
2025-12-24T16:37:45.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:37:46.101 [DEBUG] [Thread-305412] [transport.py] [_log()] starting thread (client mode): 0xf5719de0
2025-12-24T16:37:46.102 [DEBUG] [Thread-305412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:37:46.118 [DEBUG] [Thread-305412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:37:46.118 [INFO] [Thread-305412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] client lang: <none>
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] server lang: <none>
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] kex follows: False
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:37:46.123 [DEBUG] [Thread-305412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:37:46.124 [DEBUG] [Thread-305412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:37:46.124 [DEBUG] [Thread-305412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:37:46.124 [DEBUG] [Thread-305412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:37:46.124 [DEBUG] [Thread-305412] [transport.py] [_log()] Compression: none
2025-12-24T16:37:46.124 [DEBUG] [Thread-305412] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:37:46.162 [DEBUG] [Thread-305412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:37:46.166 [DEBUG] [Thread-305412] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:37:46.167 [DEBUG] [Thread-305412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:37:46.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:37:46.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:37:46.171 [DEBUG] [Thread-305412] [transport.py] [_log()] userauth is OK
2025-12-24T16:37:46.171 [DEBUG] [Thread-305412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:37:46.171 [DEBUG] [Thread-305412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:37:46.171 [DEBUG] [Thread-305412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:37:46.171 [DEBUG] [Thread-305412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:37:46.200 [INFO] [Thread-305412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:37:46.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:37:46.866 [DEBUG] [Thread-305412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:37:46.866 [DEBUG] [Thread-305412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:37:46.868 [DEBUG] [Thread-305412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:37:46.908 [DEBUG] [Thread-305412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:37:46.908 [DEBUG] [Thread-305412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:37:46.911 [DEBUG] [Thread-305412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:37:46.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:37:46.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:37:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:37:46.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:37:46.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:37:46.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:37:46.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:37:46.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:37:46.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:37:46.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.609095 -999.00  +23.50   7.44     31   +5.60 1 2 1 1 1   888    0 18.22 15.61 ----- 7.4 7.4 119.6 14.2 29.1 -19.8 29.3 -19.2 30.7 -20.2 31.1 -20.3
2025-12-24T16:37:46.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:37:46.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:37:46.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.609095
2025-12-24T16:37:46.950 [DEBUG] [Thread-305412] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:37:46.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:37:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:37:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:37:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:37:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:37:46.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:37:09', tmtdew=21.24, humidity=25.17, cloud=0.0, wind=12.09, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:37:05.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:37:47.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:37:57.381 [DEBUG] [Thread-305415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:38:12.489 [DEBUG] [Thread-305416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:38:17.636 [DEBUG] [Thread-305417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:38:27.608 [DEBUG] [Thread-305418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:38:35.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:38:35.008 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:38:42.699 [DEBUG] [Thread-305419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:38:57.813 [DEBUG] [Thread-305420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:39:12.968 [DEBUG] [Thread-305421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:39:17.983 [DEBUG] [Thread-305422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:39:28.099 [DEBUG] [Thread-305423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:39:35.151 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:39:35.154 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:39:43.225 [DEBUG] [Thread-305424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:39:58.322 [DEBUG] [Thread-305425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:39:59.214 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T16:40:13.397 [DEBUG] [Thread-305426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:40:18.294 [DEBUG] [Thread-305427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:40:28.477 [DEBUG] [Thread-305428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:40:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:40:29.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:40:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:40:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 39, 56), 21.23, 25.05, 0.0, 24.98, 24.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:40:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:39:56
2025-12-24T16:40:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:40:30.470 [DEBUG] [Thread-305429] [transport.py] [_log()] starting thread (client mode): 0xf818a7a0
2025-12-24T16:40:30.471 [DEBUG] [Thread-305429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:40:30.481 [DEBUG] [Thread-305429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:40:30.481 [INFO] [Thread-305429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] client lang: <none>
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] server lang: <none>
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] kex follows: False
2025-12-24T16:40:30.494 [DEBUG] [Thread-305429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:40:30.495 [DEBUG] [Thread-305429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:40:30.495 [DEBUG] [Thread-305429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:40:30.495 [DEBUG] [Thread-305429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:40:30.495 [DEBUG] [Thread-305429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:40:30.495 [DEBUG] [Thread-305429] [transport.py] [_log()] Compression: none
2025-12-24T16:40:30.495 [DEBUG] [Thread-305429] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:40:30.527 [DEBUG] [Thread-305429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:40:30.530 [DEBUG] [Thread-305429] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:40:30.531 [DEBUG] [Thread-305429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:40:30.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:40:30.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:40:30.534 [DEBUG] [Thread-305429] [transport.py] [_log()] userauth is OK
2025-12-24T16:40:30.534 [DEBUG] [Thread-305429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:40:30.534 [DEBUG] [Thread-305429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:40:30.534 [DEBUG] [Thread-305429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:40:30.534 [DEBUG] [Thread-305429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:40:30.568 [INFO] [Thread-305429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:40:30.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:40:31.188 [DEBUG] [Thread-305429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:40:31.188 [DEBUG] [Thread-305429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:40:31.189 [DEBUG] [Thread-305429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:40:31.229 [DEBUG] [Thread-305429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:40:31.229 [DEBUG] [Thread-305429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:40:31.232 [DEBUG] [Thread-305429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:40:31.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:40:31.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:40:31.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:40:31.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:40:31.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:40:31.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:40:31.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:40:31.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:40:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:40:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.610831 -999.00  +24.10  22.84     30   +5.60 1 2 1 1 1   888    0 19.07 45.51 ----- 22.8 22.8 138.4 30.9 29.9 -18.3 29.9 -18.8 31.5 -18.3 31.9 -20.1
2025-12-24T16:40:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:40:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:40:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.610831
2025-12-24T16:40:31.258 [DEBUG] [Thread-305429] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:40:31.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:40:31.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:40:31.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:40:31.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:40:31.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:40:31.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:39:56', tmtdew=21.23, humidity=25.05, cloud=0.0, wind=24.98, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:39:35.798', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:40:31.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:40:31.359 [DEBUG] [Thread-305432] [transport.py] [_log()] starting thread (client mode): 0xf8189330
2025-12-24T16:40:31.359 [DEBUG] [Thread-305432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:40:31.378 [DEBUG] [Thread-305432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:40:31.378 [INFO] [Thread-305432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] client lang: <none>
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] server lang: <none>
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] kex follows: False
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:40:31.386 [DEBUG] [Thread-305432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:40:31.387 [DEBUG] [Thread-305432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:40:31.387 [DEBUG] [Thread-305432] [transport.py] [_log()] Compression: none
2025-12-24T16:40:31.387 [DEBUG] [Thread-305432] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:40:31.442 [DEBUG] [Thread-305432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:40:31.442 [DEBUG] [Thread-305432] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:40:31.443 [DEBUG] [Thread-305432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:40:31.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:40:31.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:40:31.500 [DEBUG] [Thread-305432] [transport.py] [_log()] userauth is OK
2025-12-24T16:40:31.500 [DEBUG] [Thread-305432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:40:31.500 [DEBUG] [Thread-305432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:40:31.500 [DEBUG] [Thread-305432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:40:31.500 [DEBUG] [Thread-305432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:40:31.514 [INFO] [Thread-305432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:40:31.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:40:31.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:40:32.371 [DEBUG] [Thread-305432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:40:32.371 [DEBUG] [Thread-305432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:40:32.418 [DEBUG] [Thread-305432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:40:32.418 [DEBUG] [Thread-305432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:40:32.427 [DEBUG] [Thread-305432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:40:32.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:40:32.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:40:32.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:40:32.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:40:32.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:40:32.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:40:32.459 [DEBUG] [Thread-305432] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:40:35.300 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:40:35.302 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:40:43.571 [DEBUG] [Thread-305434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:40:58.725 [DEBUG] [Thread-305435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:41:02.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:41:02.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:41:02.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:41:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 40, 29), 21.33, 24.9, 0.0, 25.41, 24.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:41:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:40:29
2025-12-24T16:41:04.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:41:04.521 [DEBUG] [Thread-305436] [transport.py] [_log()] starting thread (client mode): 0xf81c2b60
2025-12-24T16:41:04.521 [DEBUG] [Thread-305436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:41:04.529 [DEBUG] [Thread-305436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:41:04.529 [INFO] [Thread-305436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] client lang: <none>
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] server lang: <none>
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] kex follows: False
2025-12-24T16:41:04.534 [DEBUG] [Thread-305436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:41:04.535 [DEBUG] [Thread-305436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:41:04.535 [DEBUG] [Thread-305436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:41:04.535 [DEBUG] [Thread-305436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:41:04.535 [DEBUG] [Thread-305436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:41:04.535 [DEBUG] [Thread-305436] [transport.py] [_log()] Compression: none
2025-12-24T16:41:04.535 [DEBUG] [Thread-305436] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:41:04.568 [DEBUG] [Thread-305436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:41:04.572 [DEBUG] [Thread-305436] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:41:04.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:41:04.574 [DEBUG] [Thread-305436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:41:04.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:41:04.577 [DEBUG] [Thread-305436] [transport.py] [_log()] userauth is OK
2025-12-24T16:41:04.577 [DEBUG] [Thread-305436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:41:04.577 [DEBUG] [Thread-305436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:41:04.577 [DEBUG] [Thread-305436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:41:04.577 [DEBUG] [Thread-305436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:41:04.596 [INFO] [Thread-305436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:41:04.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:41:05.258 [DEBUG] [Thread-305436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:41:05.258 [DEBUG] [Thread-305436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:41:05.259 [DEBUG] [Thread-305436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:41:05.300 [DEBUG] [Thread-305436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:41:05.300 [DEBUG] [Thread-305436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:41:05.304 [DEBUG] [Thread-305436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:41:05.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:41:05.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:41:05.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:41:05.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:41:05.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:41:05.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:41:05.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:41:05.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:41:05.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:41:05.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.611525 -999.00  +24.40  14.39     30   +5.80 1 2 1 1 1   888    0 19.26 55.00 ----- 14.4 14.4 171.0 25.3 30.0 -17.5 29.9 -19.2 31.6 -16.4 31.9 -18.7
2025-12-24T16:41:05.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:41:05.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:41:05.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.611525
2025-12-24T16:41:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:41:05.350 [DEBUG] [Thread-305436] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:41:05.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:41:05.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:41:05.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:41:05.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:41:05.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:40:29', tmtdew=21.33, humidity=24.9, cloud=0.0, wind=25.41, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:40:35.760', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:41:05.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:41:05.445 [DEBUG] [Thread-305439] [transport.py] [_log()] starting thread (client mode): 0xf81c36a0
2025-12-24T16:41:05.445 [DEBUG] [Thread-305439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:41:05.462 [DEBUG] [Thread-305439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:41:05.462 [INFO] [Thread-305439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] client lang: <none>
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] server lang: <none>
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] kex follows: False
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] Compression: none
2025-12-24T16:41:05.473 [DEBUG] [Thread-305439] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:41:05.526 [DEBUG] [Thread-305439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:41:05.526 [DEBUG] [Thread-305439] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:41:05.527 [DEBUG] [Thread-305439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:41:05.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:41:05.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:41:05.583 [DEBUG] [Thread-305439] [transport.py] [_log()] userauth is OK
2025-12-24T16:41:05.583 [DEBUG] [Thread-305439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:41:05.583 [DEBUG] [Thread-305439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:41:05.583 [DEBUG] [Thread-305439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:41:05.583 [DEBUG] [Thread-305439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:41:05.597 [INFO] [Thread-305439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:41:05.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:41:05.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:41:06.470 [DEBUG] [Thread-305439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:41:06.470 [DEBUG] [Thread-305439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:41:06.508 [DEBUG] [Thread-305439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:41:06.508 [DEBUG] [Thread-305439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:41:06.517 [DEBUG] [Thread-305439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:41:06.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:41:06.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:41:06.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:41:06.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:41:06.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:41:06.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:41:06.555 [DEBUG] [Thread-305439] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:41:13.831 [DEBUG] [Thread-305441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:41:18.535 [DEBUG] [Thread-305442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:41:28.979 [DEBUG] [Thread-305443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:41:35.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:41:35.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:41:36.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:41:36.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:41:36.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
2025-12-24T16:41:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 41, 2), 21.47, 24.7, 0.0, 25.95, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:41:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:41:02
2025-12-24T16:41:37.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:41:38.160 [DEBUG] [Thread-305444] [transport.py] [_log()] starting thread (client mode): 0xf5752290
2025-12-24T16:41:38.161 [DEBUG] [Thread-305444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:41:38.161 [DEBUG] [Thread-305444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:41:38.161 [INFO] [Thread-305444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] client lang: <none>
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] server lang: <none>
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] kex follows: False
2025-12-24T16:41:38.165 [DEBUG] [Thread-305444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:41:38.166 [DEBUG] [Thread-305444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:41:38.166 [DEBUG] [Thread-305444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:41:38.166 [DEBUG] [Thread-305444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:41:38.166 [DEBUG] [Thread-305444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:41:38.166 [DEBUG] [Thread-305444] [transport.py] [_log()] Compression: none
2025-12-24T16:41:38.166 [DEBUG] [Thread-305444] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:41:38.198 [DEBUG] [Thread-305444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:41:38.201 [DEBUG] [Thread-305444] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:41:38.202 [DEBUG] [Thread-305444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:41:38.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:41:38.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:41:38.205 [DEBUG] [Thread-305444] [transport.py] [_log()] userauth is OK
2025-12-24T16:41:38.205 [DEBUG] [Thread-305444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:41:38.205 [DEBUG] [Thread-305444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:41:38.205 [DEBUG] [Thread-305444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:41:38.205 [DEBUG] [Thread-305444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:41:38.223 [INFO] [Thread-305444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:41:38.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:41:38.883 [DEBUG] [Thread-305444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:41:38.883 [DEBUG] [Thread-305444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:41:38.884 [DEBUG] [Thread-305444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:41:38.924 [DEBUG] [Thread-305444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:41:38.924 [DEBUG] [Thread-305444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:41:38.926 [DEBUG] [Thread-305444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:41:38.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:41:38.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:41:38.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:41:38.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:41:38.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:41:38.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:41:38.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:41:38.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:41:38.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:41:38.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.611873 -999.00  +24.70  17.83     29   +5.80 1 2 1 1 1   888    0 19.80 57.67 ----- 17.8 17.8 165.0 24.4 30.0 -18.1 29.7 -20.8 31.6 -17.0 31.9 -18.8
2025-12-24T16:41:38.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:41:38.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:41:38.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.611873
2025-12-24T16:41:38.960 [DEBUG] [Thread-305444] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:41:38.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:41:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:41:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:41:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:41:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:41:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:41:02', tmtdew=21.47, humidity=24.7, cloud=0.0, wind=25.95, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:41:05.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:41:39.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:41:39.056 [DEBUG] [Thread-305447] [transport.py] [_log()] starting thread (client mode): 0xf572c7f0
2025-12-24T16:41:39.057 [DEBUG] [Thread-305447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:41:39.071 [DEBUG] [Thread-305447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:41:39.071 [INFO] [Thread-305447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] client lang: <none>
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] server lang: <none>
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] kex follows: False
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] Compression: none
2025-12-24T16:41:39.079 [DEBUG] [Thread-305447] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:41:39.134 [DEBUG] [Thread-305447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:41:39.134 [DEBUG] [Thread-305447] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:41:39.134 [DEBUG] [Thread-305447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:41:39.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:41:39.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:41:39.191 [DEBUG] [Thread-305447] [transport.py] [_log()] userauth is OK
2025-12-24T16:41:39.191 [DEBUG] [Thread-305447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:41:39.191 [DEBUG] [Thread-305447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:41:39.191 [DEBUG] [Thread-305447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:41:39.191 [DEBUG] [Thread-305447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:41:39.207 [INFO] [Thread-305447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:41:39.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:41:39.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:41:40.072 [DEBUG] [Thread-305447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:41:40.072 [DEBUG] [Thread-305447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:41:40.111 [DEBUG] [Thread-305447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:41:40.111 [DEBUG] [Thread-305447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:41:40.120 [DEBUG] [Thread-305447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:41:40.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:41:40.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:41:40.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:41:40.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:41:40.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:41:40.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:41:40.162 [DEBUG] [Thread-305447] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:41:44.070 [DEBUG] [Thread-305449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:41:59.267 [DEBUG] [Thread-305450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:42:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:42:10.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:42:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:42:11.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 41, 35), 21.99, 24.04, 0.0, 34.92, 24.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:42:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:41:35
2025-12-24T16:42:11.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:42:11.620 [DEBUG] [Thread-305451] [transport.py] [_log()] starting thread (client mode): 0xf5752470
2025-12-24T16:42:11.620 [DEBUG] [Thread-305451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:42:11.628 [DEBUG] [Thread-305451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:42:11.628 [INFO] [Thread-305451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:42:11.633 [DEBUG] [Thread-305451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:42:11.634 [DEBUG] [Thread-305451] [transport.py] [_log()] client lang: <none>
2025-12-24T16:42:11.634 [DEBUG] [Thread-305451] [transport.py] [_log()] server lang: <none>
2025-12-24T16:42:11.634 [DEBUG] [Thread-305451] [transport.py] [_log()] kex follows: False
2025-12-24T16:42:11.634 [DEBUG] [Thread-305451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:42:11.634 [DEBUG] [Thread-305451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:42:11.634 [DEBUG] [Thread-305451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:42:11.635 [DEBUG] [Thread-305451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:42:11.635 [DEBUG] [Thread-305451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:42:11.635 [DEBUG] [Thread-305451] [transport.py] [_log()] Compression: none
2025-12-24T16:42:11.635 [DEBUG] [Thread-305451] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:42:11.658 [DEBUG] [Thread-305451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:42:11.661 [DEBUG] [Thread-305451] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:42:11.662 [DEBUG] [Thread-305451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:42:11.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:42:11.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:42:11.665 [DEBUG] [Thread-305451] [transport.py] [_log()] userauth is OK
2025-12-24T16:42:11.665 [DEBUG] [Thread-305451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:42:11.666 [DEBUG] [Thread-305451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:42:11.666 [DEBUG] [Thread-305451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:42:11.666 [DEBUG] [Thread-305451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:42:11.683 [INFO] [Thread-305451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:42:11.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:42:12.314 [DEBUG] [Thread-305451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:42:12.314 [DEBUG] [Thread-305451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:42:12.315 [DEBUG] [Thread-305451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:42:12.356 [DEBUG] [Thread-305451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:42:12.356 [DEBUG] [Thread-305451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:42:12.358 [DEBUG] [Thread-305451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:42:12.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:42:12.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:42:12.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:42:12.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:42:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:42:12.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:42:12.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:42:12.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:42:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:42:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.612220 -999.00  +24.70  20.87     29   +5.70 1 2 1 1 1   888    0 19.89 62.74 ----- 20.9 20.9 157.8 29.6 30.2 -19.0 30.0 -17.1 31.7 -17.7 32.2 -17.6
2025-12-24T16:42:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:42:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:42:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.612220
2025-12-24T16:42:12.387 [DEBUG] [Thread-305451] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:42:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:42:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:42:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:42:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:42:12.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:42:12.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:41:35', tmtdew=21.99, humidity=24.04, cloud=0.0, wind=34.92, temperature=24.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:41:35.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:42:12.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:42:12.496 [DEBUG] [Thread-305454] [transport.py] [_log()] starting thread (client mode): 0xf5753af0
2025-12-24T16:42:12.496 [DEBUG] [Thread-305454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:42:12.510 [DEBUG] [Thread-305454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:42:12.511 [INFO] [Thread-305454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:42:12.518 [DEBUG] [Thread-305454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:42:12.518 [DEBUG] [Thread-305454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:42:12.518 [DEBUG] [Thread-305454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:42:12.518 [DEBUG] [Thread-305454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] client lang: <none>
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] server lang: <none>
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] kex follows: False
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] Compression: none
2025-12-24T16:42:12.519 [DEBUG] [Thread-305454] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:42:12.576 [DEBUG] [Thread-305454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:42:12.576 [DEBUG] [Thread-305454] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:42:12.577 [DEBUG] [Thread-305454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:42:12.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:42:12.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:42:12.632 [DEBUG] [Thread-305454] [transport.py] [_log()] userauth is OK
2025-12-24T16:42:12.632 [DEBUG] [Thread-305454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:42:12.632 [DEBUG] [Thread-305454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:42:12.632 [DEBUG] [Thread-305454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:42:12.632 [DEBUG] [Thread-305454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:42:12.655 [INFO] [Thread-305454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:42:12.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:42:12.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:42:13.501 [DEBUG] [Thread-305454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:42:13.501 [DEBUG] [Thread-305454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:42:13.517 [DEBUG] [Thread-305454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:42:13.517 [DEBUG] [Thread-305454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:42:13.526 [DEBUG] [Thread-305454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:42:13.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:42:13.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')
2025-12-24T16:42:13.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:42:13.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:42:13.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:42:13.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:42:13.566 [DEBUG] [Thread-305454] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:42:14.371 [DEBUG] [Thread-305456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:42:18.806 [DEBUG] [Thread-305457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:42:29.500 [DEBUG] [Thread-305458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:42:35.599 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:42:35.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:42:43.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:42:43.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:42:43.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:42:44.580 [DEBUG] [Thread-305459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:42:44.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 42, 8), 21.88, 24.17, 0.0, 28.95, 24.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:42:44.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:42:08
2025-12-24T16:42:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:42:44.987 [DEBUG] [Thread-305460] [transport.py] [_log()] starting thread (client mode): 0xf5752cb0
2025-12-24T16:42:44.988 [DEBUG] [Thread-305460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:42:45.000 [DEBUG] [Thread-305460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:42:45.000 [INFO] [Thread-305460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] client lang: <none>
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] server lang: <none>
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] kex follows: False
2025-12-24T16:42:45.005 [DEBUG] [Thread-305460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:42:45.006 [DEBUG] [Thread-305460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:42:45.006 [DEBUG] [Thread-305460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:42:45.006 [DEBUG] [Thread-305460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:42:45.006 [DEBUG] [Thread-305460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:42:45.006 [DEBUG] [Thread-305460] [transport.py] [_log()] Compression: none
2025-12-24T16:42:45.006 [DEBUG] [Thread-305460] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:42:45.039 [DEBUG] [Thread-305460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:42:45.042 [DEBUG] [Thread-305460] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:42:45.043 [DEBUG] [Thread-305460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:42:45.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:42:45.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:42:45.047 [DEBUG] [Thread-305460] [transport.py] [_log()] userauth is OK
2025-12-24T16:42:45.047 [DEBUG] [Thread-305460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:42:45.047 [DEBUG] [Thread-305460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:42:45.047 [DEBUG] [Thread-305460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:42:45.047 [DEBUG] [Thread-305460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:42:45.077 [INFO] [Thread-305460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:42:45.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:42:45.707 [DEBUG] [Thread-305460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:42:45.707 [DEBUG] [Thread-305460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:42:45.707 [DEBUG] [Thread-305460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:42:45.748 [DEBUG] [Thread-305460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:42:45.748 [DEBUG] [Thread-305460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:42:45.750 [DEBUG] [Thread-305460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:42:45.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:42:45.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:42:45.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:42:45.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:42:45.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:42:45.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:42:45.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:42:45.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:42:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:42:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.612567 -999.00  +24.40  26.29     29   +5.60 1 2 1 1 1   888    0 19.92 73.72 ----- 26.3 26.3 154.4 39.8 30.1 -20.9 30.0 -19.1 31.4 -20.2 32.1 -19.6
2025-12-24T16:42:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:42:45.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:42:45.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.612567
2025-12-24T16:42:45.782 [DEBUG] [Thread-305460] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:42:45.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:42:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:42:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:42:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:42:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:42:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:42:08', tmtdew=21.88, humidity=24.17, cloud=0.0, wind=28.95, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:42:05.789', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:42:45.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:42:45.882 [DEBUG] [Thread-305463] [transport.py] [_log()] starting thread (client mode): 0xf574c9d0
2025-12-24T16:42:45.883 [DEBUG] [Thread-305463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:42:45.897 [DEBUG] [Thread-305463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:42:45.897 [INFO] [Thread-305463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:42:45.904 [DEBUG] [Thread-305463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:42:45.905 [DEBUG] [Thread-305463] [transport.py] [_log()] client lang: <none>
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] server lang: <none>
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] kex follows: False
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] Compression: none
2025-12-24T16:42:45.906 [DEBUG] [Thread-305463] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:42:45.963 [DEBUG] [Thread-305463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:42:45.964 [DEBUG] [Thread-305463] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:42:45.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:42:45.965 [DEBUG] [Thread-305463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:42:45.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:42:46.019 [DEBUG] [Thread-305463] [transport.py] [_log()] userauth is OK
2025-12-24T16:42:46.019 [DEBUG] [Thread-305463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:42:46.020 [DEBUG] [Thread-305463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:42:46.020 [DEBUG] [Thread-305463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:42:46.020 [DEBUG] [Thread-305463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:42:46.042 [INFO] [Thread-305463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:42:46.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:42:46.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:42:46.875 [DEBUG] [Thread-305463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:42:46.875 [DEBUG] [Thread-305463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:42:46.923 [DEBUG] [Thread-305463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:42:46.923 [DEBUG] [Thread-305463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:42:46.932 [DEBUG] [Thread-305463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:42:46.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:42:46.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:42:46.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:42:46.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:42:46.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:42:46.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:42:46.967 [DEBUG] [Thread-305463] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:42:59.720 [DEBUG] [Thread-305465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:43:14.904 [DEBUG] [Thread-305466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:43:16.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:43:16.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:43:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:43:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 42, 41), 21.94, 23.73, 0.0, 25.78, 24.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:43:17.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:42:41
2025-12-24T16:43:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:43:18.326 [DEBUG] [Thread-305467] [transport.py] [_log()] starting thread (client mode): 0xf57705b0
2025-12-24T16:43:18.327 [DEBUG] [Thread-305467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:43:18.338 [DEBUG] [Thread-305467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:43:18.339 [INFO] [Thread-305467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] client lang: <none>
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] server lang: <none>
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] kex follows: False
2025-12-24T16:43:18.343 [DEBUG] [Thread-305467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:43:18.344 [DEBUG] [Thread-305467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:43:18.344 [DEBUG] [Thread-305467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:43:18.344 [DEBUG] [Thread-305467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:43:18.344 [DEBUG] [Thread-305467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:43:18.344 [DEBUG] [Thread-305467] [transport.py] [_log()] Compression: none
2025-12-24T16:43:18.344 [DEBUG] [Thread-305467] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:43:18.376 [DEBUG] [Thread-305467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:43:18.379 [DEBUG] [Thread-305467] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:43:18.380 [DEBUG] [Thread-305467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:43:18.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:43:18.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:43:18.385 [DEBUG] [Thread-305467] [transport.py] [_log()] userauth is OK
2025-12-24T16:43:18.385 [DEBUG] [Thread-305467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:43:18.385 [DEBUG] [Thread-305467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:43:18.385 [DEBUG] [Thread-305467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:43:18.385 [DEBUG] [Thread-305467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:43:18.414 [INFO] [Thread-305467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:43:18.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:43:19.005 [DEBUG] [Thread-305467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:43:19.006 [DEBUG] [Thread-305467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:43:19.007 [DEBUG] [Thread-305467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:43:19.047 [DEBUG] [Thread-305467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:43:19.047 [DEBUG] [Thread-305467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:43:19.050 [DEBUG] [Thread-305467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:43:19.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:43:19.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:43:19.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:43:19.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:43:19.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:43:19.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:43:19.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:43:19.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:43:19.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:43:19.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.612915 -999.00  +24.30  22.67     30   +5.70 1 2 1 1 1   888    0 20.51 75.75 ----- 22.7 22.7 148.2 30.0 29.6 -21.3 29.6 -20.9 30.9 -21.4 31.4 -23.8
2025-12-24T16:43:19.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:43:19.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:43:19.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.612915
2025-12-24T16:43:19.078 [DEBUG] [Thread-305467] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:43:19.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:43:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:43:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:43:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:43:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:43:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:42:41', tmtdew=21.94, humidity=23.73, cloud=0.0, wind=25.78, temperature=24.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:42:35.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:43:19.099 [DEBUG] [Thread-305470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:43:19.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:43:19.174 [DEBUG] [Thread-305471] [transport.py] [_log()] starting thread (client mode): 0xf81e56f0
2025-12-24T16:43:19.174 [DEBUG] [Thread-305471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:43:19.189 [DEBUG] [Thread-305471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:43:19.189 [INFO] [Thread-305471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:43:19.196 [DEBUG] [Thread-305471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] client lang: <none>
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] server lang: <none>
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] kex follows: False
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] Compression: none
2025-12-24T16:43:19.197 [DEBUG] [Thread-305471] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:43:19.254 [DEBUG] [Thread-305471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:43:19.255 [DEBUG] [Thread-305471] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:43:19.255 [DEBUG] [Thread-305471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:43:19.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:43:19.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:43:19.316 [DEBUG] [Thread-305471] [transport.py] [_log()] userauth is OK
2025-12-24T16:43:19.316 [DEBUG] [Thread-305471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:43:19.316 [DEBUG] [Thread-305471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:43:19.316 [DEBUG] [Thread-305471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:43:19.316 [DEBUG] [Thread-305471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:43:19.330 [INFO] [Thread-305471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:43:19.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:43:19.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:43:20.160 [DEBUG] [Thread-305471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:43:20.160 [DEBUG] [Thread-305471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:43:20.207 [DEBUG] [Thread-305471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:43:20.207 [DEBUG] [Thread-305471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:43:20.215 [DEBUG] [Thread-305471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:43:20.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:43:20.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:43:20.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:43:20.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:43:20.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:43:20.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:43:20.248 [DEBUG] [Thread-305471] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:43:30.045 [DEBUG] [Thread-305473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:43:35.753 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:43:35.754 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:43:45.198 [DEBUG] [Thread-305474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:43:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:43:50.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:43:50.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:43:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 43, 14), 21.74, 24.02, 0.0, 24.77, 24.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:43:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:43:14
2025-12-24T16:43:51.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:43:51.576 [DEBUG] [Thread-305475] [transport.py] [_log()] starting thread (client mode): 0xf5719540
2025-12-24T16:43:51.577 [DEBUG] [Thread-305475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:43:51.585 [DEBUG] [Thread-305475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:43:51.585 [INFO] [Thread-305475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] client lang: <none>
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] server lang: <none>
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] kex follows: False
2025-12-24T16:43:51.590 [DEBUG] [Thread-305475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:43:51.591 [DEBUG] [Thread-305475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:43:51.591 [DEBUG] [Thread-305475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:43:51.591 [DEBUG] [Thread-305475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:43:51.591 [DEBUG] [Thread-305475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:43:51.591 [DEBUG] [Thread-305475] [transport.py] [_log()] Compression: none
2025-12-24T16:43:51.591 [DEBUG] [Thread-305475] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:43:51.623 [DEBUG] [Thread-305475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:43:51.627 [DEBUG] [Thread-305475] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:43:51.628 [DEBUG] [Thread-305475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:43:51.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:43:51.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:43:51.631 [DEBUG] [Thread-305475] [transport.py] [_log()] userauth is OK
2025-12-24T16:43:51.631 [DEBUG] [Thread-305475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:43:51.632 [DEBUG] [Thread-305475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:43:51.632 [DEBUG] [Thread-305475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:43:51.632 [DEBUG] [Thread-305475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:43:51.648 [INFO] [Thread-305475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:43:51.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:43:52.289 [DEBUG] [Thread-305475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:43:52.290 [DEBUG] [Thread-305475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:43:52.290 [DEBUG] [Thread-305475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:43:52.332 [DEBUG] [Thread-305475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:43:52.332 [DEBUG] [Thread-305475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:43:52.337 [DEBUG] [Thread-305475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:43:52.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:43:52.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:43:52.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:43:52.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:43:52.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:43:52.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:43:52.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:43:52.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:43:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:43:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.613262 -999.00  +24.30  14.13     30   +5.70 1 2 1 1 1   888    0 20.37 84.19 ----- 14.1 14.1 148.0 24.8 29.5 -22.0 29.4 -20.4 30.6 -20.6 31.2 -22.5
2025-12-24T16:43:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:43:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:43:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.613262
2025-12-24T16:43:52.371 [DEBUG] [Thread-305475] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:43:52.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:43:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:43:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:43:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:43:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:43:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:43:14', tmtdew=21.74, humidity=24.02, cloud=0.0, wind=24.77, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:43:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:43:52.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:44:00.300 [DEBUG] [Thread-305478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:44:15.514 [DEBUG] [Thread-305479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:44:19.318 [DEBUG] [Thread-305480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:44:30.663 [DEBUG] [Thread-305481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:44:35.894 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:44:35.896 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:44:45.733 [DEBUG] [Thread-305482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:45:00.842 [DEBUG] [Thread-305483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:45:15.984 [DEBUG] [Thread-305484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:45:19.548 [DEBUG] [Thread-305485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:45:31.119 [DEBUG] [Thread-305486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:45:36.047 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:45:36.057 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:45:46.208 [DEBUG] [Thread-305487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:46:01.305 [DEBUG] [Thread-305488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:46:07.869 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T16:46:16.417 [DEBUG] [Thread-305489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:46:19.752 [DEBUG] [Thread-305490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:46:31.512 [DEBUG] [Thread-305491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:46:36.200 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:46:36.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:46:37.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:46:37.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:46:37.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:46:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 46, 2), 22.0, 23.62, 0.0, 26.87, 24.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:46:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:46:02
2025-12-24T16:46:39.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:46:39.215 [DEBUG] [Thread-305492] [transport.py] [_log()] starting thread (client mode): 0xf81c1120
2025-12-24T16:46:39.216 [DEBUG] [Thread-305492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:46:39.224 [DEBUG] [Thread-305492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:46:39.224 [INFO] [Thread-305492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] client lang: <none>
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] server lang: <none>
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] kex follows: False
2025-12-24T16:46:39.228 [DEBUG] [Thread-305492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:46:39.229 [DEBUG] [Thread-305492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:46:39.229 [DEBUG] [Thread-305492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:46:39.229 [DEBUG] [Thread-305492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:46:39.229 [DEBUG] [Thread-305492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:46:39.229 [DEBUG] [Thread-305492] [transport.py] [_log()] Compression: none
2025-12-24T16:46:39.229 [DEBUG] [Thread-305492] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:46:39.256 [DEBUG] [Thread-305492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:46:39.259 [DEBUG] [Thread-305492] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:46:39.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:46:39.261 [DEBUG] [Thread-305492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:46:39.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:46:39.263 [DEBUG] [Thread-305492] [transport.py] [_log()] userauth is OK
2025-12-24T16:46:39.263 [DEBUG] [Thread-305492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:46:39.263 [DEBUG] [Thread-305492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:46:39.263 [DEBUG] [Thread-305492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:46:39.263 [DEBUG] [Thread-305492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:46:39.282 [INFO] [Thread-305492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:46:39.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:46:40.085 [DEBUG] [Thread-305492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:46:40.085 [DEBUG] [Thread-305492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:46:40.086 [DEBUG] [Thread-305492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:46:40.126 [DEBUG] [Thread-305492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:46:40.126 [DEBUG] [Thread-305492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:46:40.130 [DEBUG] [Thread-305492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:46:40.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:46:40.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:46:40.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:46:40.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:46:40.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:46:40.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:46:40.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:46:40.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:46:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:46:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.615345 -999.00  +23.80  22.02     30   +5.50 1 2 1 1 1   888    0 19.99 62.89 ----- 22.0 22.0 166.6 32.4 28.6 -24.7 28.7 -22.6 29.3 -21.9 29.9 -24.1
2025-12-24T16:46:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:46:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:46:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.615345
2025-12-24T16:46:40.169 [DEBUG] [Thread-305492] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:46:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:46:40.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:46:40.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:46:40.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:46:40.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:46:40.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:46:02', tmtdew=22.0, humidity=23.62, cloud=0.0, wind=26.87, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:46:05.808', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:46:40.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:46:40.286 [DEBUG] [Thread-305495] [transport.py] [_log()] starting thread (client mode): 0xf5753910
2025-12-24T16:46:40.286 [DEBUG] [Thread-305495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:46:40.301 [DEBUG] [Thread-305495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:46:40.301 [INFO] [Thread-305495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:46:40.309 [DEBUG] [Thread-305495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:46:40.309 [DEBUG] [Thread-305495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:46:40.309 [DEBUG] [Thread-305495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:46:40.309 [DEBUG] [Thread-305495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:46:40.309 [DEBUG] [Thread-305495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:46:40.309 [DEBUG] [Thread-305495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:46:40.309 [DEBUG] [Thread-305495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:46:40.309 [DEBUG] [Thread-305495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] client lang: <none>
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] server lang: <none>
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] kex follows: False
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] Compression: none
2025-12-24T16:46:40.310 [DEBUG] [Thread-305495] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:46:40.368 [DEBUG] [Thread-305495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:46:40.369 [DEBUG] [Thread-305495] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:46:40.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:46:40.370 [DEBUG] [Thread-305495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:46:40.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:46:40.428 [DEBUG] [Thread-305495] [transport.py] [_log()] userauth is OK
2025-12-24T16:46:40.428 [DEBUG] [Thread-305495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:46:40.428 [DEBUG] [Thread-305495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:46:40.428 [DEBUG] [Thread-305495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:46:40.429 [DEBUG] [Thread-305495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:46:40.447 [INFO] [Thread-305495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:46:40.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:46:40.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:46:41.261 [DEBUG] [Thread-305495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:46:41.261 [DEBUG] [Thread-305495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:46:41.309 [DEBUG] [Thread-305495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:46:41.310 [DEBUG] [Thread-305495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:46:41.322 [DEBUG] [Thread-305495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:46:41.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:46: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')
2025-12-24T16:46:41.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
2025-12-24T16:46:41.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:46:41.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:46:41.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:46:41.360 [DEBUG] [Thread-305495] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:46:46.579 [DEBUG] [Thread-305497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:47:01.754 [DEBUG] [Thread-305498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:47:11.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:47:11.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:47:11.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:47:12.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 46, 35), 21.23, 25.02, 0.0, 31.48, 23.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:47:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:46:35
2025-12-24T16:47:12.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:47:12.703 [DEBUG] [Thread-305499] [transport.py] [_log()] starting thread (client mode): 0xf574ea70
2025-12-24T16:47:12.704 [DEBUG] [Thread-305499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:47:12.706 [DEBUG] [Thread-305499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:47:12.706 [INFO] [Thread-305499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:47:12.713 [DEBUG] [Thread-305499] [transport.py] [_log()] client lang: <none>
2025-12-24T16:47:12.714 [DEBUG] [Thread-305499] [transport.py] [_log()] server lang: <none>
2025-12-24T16:47:12.714 [DEBUG] [Thread-305499] [transport.py] [_log()] kex follows: False
2025-12-24T16:47:12.714 [DEBUG] [Thread-305499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:47:12.714 [DEBUG] [Thread-305499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:47:12.714 [DEBUG] [Thread-305499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:47:12.715 [DEBUG] [Thread-305499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:47:12.715 [DEBUG] [Thread-305499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:47:12.715 [DEBUG] [Thread-305499] [transport.py] [_log()] Compression: none
2025-12-24T16:47:12.715 [DEBUG] [Thread-305499] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:47:12.752 [DEBUG] [Thread-305499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:47:12.756 [DEBUG] [Thread-305499] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:47:12.758 [DEBUG] [Thread-305499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:47:12.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:47:12.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:47:12.764 [DEBUG] [Thread-305499] [transport.py] [_log()] userauth is OK
2025-12-24T16:47:12.764 [DEBUG] [Thread-305499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:47:12.764 [DEBUG] [Thread-305499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:47:12.765 [DEBUG] [Thread-305499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:47:12.765 [DEBUG] [Thread-305499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:47:12.791 [INFO] [Thread-305499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:47:12.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:47:13.436 [DEBUG] [Thread-305499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:47:13.436 [DEBUG] [Thread-305499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:47:13.516 [DEBUG] [Thread-305499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:47:13.516 [DEBUG] [Thread-305499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:47:13.516 [DEBUG] [Thread-305499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:47:13.519 [DEBUG] [Thread-305499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:47:13.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:47:13.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:47:13.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:47:13.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:47:13.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:47:13.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:47:13.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:47:13.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:47:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:47:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.615692 -999.00  +23.80  25.49     30   +5.50 1 2 1 1 1   888    0 20.00 61.95 ----- 25.5 25.5 160.4 39.4 28.5 -23.8 28.4 -23.1 29.1 -20.8 29.6 -22.6
2025-12-24T16:47:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:47:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:47:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.615692
2025-12-24T16:47:13.547 [DEBUG] [Thread-305499] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:47:13.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:47:13.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:47:13.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:47:13.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:47:13.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:47:13.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:46:35', tmtdew=21.23, humidity=25.02, cloud=0.0, wind=31.48, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:46:35.789', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:47:13.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:47:13.658 [DEBUG] [Thread-305502] [transport.py] [_log()] starting thread (client mode): 0xf578a6e0
2025-12-24T16:47:13.658 [DEBUG] [Thread-305502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:47:13.672 [DEBUG] [Thread-305502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:47:13.672 [INFO] [Thread-305502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] client lang: <none>
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] server lang: <none>
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] kex follows: False
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] Compression: none
2025-12-24T16:47:13.680 [DEBUG] [Thread-305502] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:47:13.739 [DEBUG] [Thread-305502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:47:13.739 [DEBUG] [Thread-305502] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:47:13.740 [DEBUG] [Thread-305502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:47:13.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:47:13.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:47:13.795 [DEBUG] [Thread-305502] [transport.py] [_log()] userauth is OK
2025-12-24T16:47:13.796 [DEBUG] [Thread-305502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:47:13.796 [DEBUG] [Thread-305502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:47:13.796 [DEBUG] [Thread-305502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:47:13.796 [DEBUG] [Thread-305502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:47:13.819 [INFO] [Thread-305502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:47:13.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:47:13.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:47:14.689 [DEBUG] [Thread-305502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:47:14.689 [DEBUG] [Thread-305502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:47:14.737 [DEBUG] [Thread-305502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:47:14.737 [DEBUG] [Thread-305502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:47:14.746 [DEBUG] [Thread-305502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:47:14.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:47:14.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:47:14.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:47:14.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:47:14.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:47:14.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:47:14.788 [DEBUG] [Thread-305502] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:47:16.868 [DEBUG] [Thread-305504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:47:19.996 [DEBUG] [Thread-305505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:47:32.021 [DEBUG] [Thread-305506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:47:36.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:47:36.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:47:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:47:44.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:47:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:47:45.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 47, 9), 21.25, 24.98, 0.0, 32.96, 23.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:47:45.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:47:09
2025-12-24T16:47:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:47:46.080 [DEBUG] [Thread-305507] [transport.py] [_log()] starting thread (client mode): 0xf572ef80
2025-12-24T16:47:46.081 [DEBUG] [Thread-305507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:47:46.093 [DEBUG] [Thread-305507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:47:46.093 [INFO] [Thread-305507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] client lang: <none>
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] server lang: <none>
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] kex follows: False
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:47:46.097 [DEBUG] [Thread-305507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:47:46.098 [DEBUG] [Thread-305507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:47:46.098 [DEBUG] [Thread-305507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:47:46.098 [DEBUG] [Thread-305507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:47:46.098 [DEBUG] [Thread-305507] [transport.py] [_log()] Compression: none
2025-12-24T16:47:46.098 [DEBUG] [Thread-305507] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:47:46.129 [DEBUG] [Thread-305507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:47:46.132 [DEBUG] [Thread-305507] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:47:46.133 [DEBUG] [Thread-305507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:47:46.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:47:46.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:47:46.136 [DEBUG] [Thread-305507] [transport.py] [_log()] userauth is OK
2025-12-24T16:47:46.136 [DEBUG] [Thread-305507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:47:46.136 [DEBUG] [Thread-305507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:47:46.136 [DEBUG] [Thread-305507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:47:46.136 [DEBUG] [Thread-305507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:47:46.147 [INFO] [Thread-305507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:47:46.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:47:46.953 [DEBUG] [Thread-305507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:47:46.953 [DEBUG] [Thread-305507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:47:46.953 [DEBUG] [Thread-305507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:47:46.993 [DEBUG] [Thread-305507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:47:46.993 [DEBUG] [Thread-305507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:47:46.995 [DEBUG] [Thread-305507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:47:47.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:47:47.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:47:47.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:47:47.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:47:47.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:47:47.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:47:47.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:47:47.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:47:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:47:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.616039 -999.00  +23.60  19.25     30   +5.40 1 2 1 1 1   888    0 19.92 62.95 ----- 19.2 19.2 165.8 36.2 28.2 -25.0 28.1 -22.8 28.7 -22.8 29.2 -23.9
2025-12-24T16:47:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:47:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:47:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.616039
2025-12-24T16:47:47.024 [DEBUG] [Thread-305507] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:47:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:47:47.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:47:47.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:47:47.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:47:47.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:47:47.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:47:09', tmtdew=21.25, humidity=24.98, cloud=0.0, wind=32.96, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:47:05.770', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:47:47.078 [DEBUG] [Thread-305510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:47:47.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:47:47.127 [DEBUG] [Thread-305511] [transport.py] [_log()] starting thread (client mode): 0xf572c2b0
2025-12-24T16:47:47.128 [DEBUG] [Thread-305511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:47:47.142 [DEBUG] [Thread-305511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:47:47.142 [INFO] [Thread-305511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:47:47.149 [DEBUG] [Thread-305511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:47:47.149 [DEBUG] [Thread-305511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:47:47.149 [DEBUG] [Thread-305511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] client lang: <none>
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] server lang: <none>
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] kex follows: False
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] Compression: none
2025-12-24T16:47:47.150 [DEBUG] [Thread-305511] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:47:47.206 [DEBUG] [Thread-305511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:47:47.206 [DEBUG] [Thread-305511] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:47:47.206 [DEBUG] [Thread-305511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:47:47.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:47:47.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:47:47.263 [DEBUG] [Thread-305511] [transport.py] [_log()] userauth is OK
2025-12-24T16:47:47.263 [DEBUG] [Thread-305511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:47:47.263 [DEBUG] [Thread-305511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:47:47.263 [DEBUG] [Thread-305511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:47:47.263 [DEBUG] [Thread-305511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:47:47.281 [INFO] [Thread-305511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:47:47.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:47:47.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:47:48.131 [DEBUG] [Thread-305511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:47:48.131 [DEBUG] [Thread-305511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:47:48.179 [DEBUG] [Thread-305511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:47:48.179 [DEBUG] [Thread-305511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:47:48.187 [DEBUG] [Thread-305511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:47:48.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:47:48.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')
2025-12-24T16:47:48.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:47:48.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:47:48.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:47:48.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:47:48.219 [DEBUG] [Thread-305511] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:48:02.243 [DEBUG] [Thread-305513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:48:17.366 [DEBUG] [Thread-305514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:48:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:48:18.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:48:18.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:48:19.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 47, 42), 21.19, 25.08, 0.0, 33.3, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:48:19.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:47:42
2025-12-24T16:48:19.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:48:19.525 [DEBUG] [Thread-305515] [transport.py] [_log()] starting thread (client mode): 0xf572dcf0
2025-12-24T16:48:19.526 [DEBUG] [Thread-305515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:48:19.537 [DEBUG] [Thread-305515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:48:19.537 [INFO] [Thread-305515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] client lang: <none>
2025-12-24T16:48:19.542 [DEBUG] [Thread-305515] [transport.py] [_log()] server lang: <none>
2025-12-24T16:48:19.543 [DEBUG] [Thread-305515] [transport.py] [_log()] kex follows: False
2025-12-24T16:48:19.543 [DEBUG] [Thread-305515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:48:19.543 [DEBUG] [Thread-305515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:48:19.543 [DEBUG] [Thread-305515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:48:19.543 [DEBUG] [Thread-305515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:48:19.543 [DEBUG] [Thread-305515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:48:19.543 [DEBUG] [Thread-305515] [transport.py] [_log()] Compression: none
2025-12-24T16:48:19.543 [DEBUG] [Thread-305515] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:48:19.580 [DEBUG] [Thread-305515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:48:19.584 [DEBUG] [Thread-305515] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:48:19.585 [DEBUG] [Thread-305515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:48:19.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:48:19.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:48:19.589 [DEBUG] [Thread-305515] [transport.py] [_log()] userauth is OK
2025-12-24T16:48:19.589 [DEBUG] [Thread-305515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:48:19.589 [DEBUG] [Thread-305515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:48:19.589 [DEBUG] [Thread-305515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:48:19.589 [DEBUG] [Thread-305515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:48:19.619 [INFO] [Thread-305515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:48:19.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:48:20.232 [DEBUG] [Thread-305517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:48:20.251 [DEBUG] [Thread-305515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:48:20.251 [DEBUG] [Thread-305515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:48:20.252 [DEBUG] [Thread-305515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:48:20.293 [DEBUG] [Thread-305515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:48:20.293 [DEBUG] [Thread-305515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:48:20.296 [DEBUG] [Thread-305515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:48:20.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:48:20.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:48:20.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:48:20.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:48:20.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:48:20.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:48:20.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:48:20.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:48:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:48:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.616387 -999.00  +23.70  17.50     30   +5.50 1 2 1 1 1   888    0 20.19 59.16 ----- 17.5 17.5 162.6 32.8 28.1 -23.8 27.9 -24.1 28.6 -21.4 29.0 -23.6
2025-12-24T16:48:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:48:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:48:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.616387
2025-12-24T16:48:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:48:20.333 [DEBUG] [Thread-305515] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:48:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:48:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:48:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:48:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:48:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:47:42', tmtdew=21.19, humidity=25.08, cloud=0.0, wind=33.3, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:47:35.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:48:20.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:48:20.421 [DEBUG] [Thread-305519] [transport.py] [_log()] starting thread (client mode): 0xf5753a90
2025-12-24T16:48:20.421 [DEBUG] [Thread-305519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:48:20.436 [DEBUG] [Thread-305519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:48:20.436 [INFO] [Thread-305519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] client lang: <none>
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] server lang: <none>
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] kex follows: False
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] Compression: none
2025-12-24T16:48:20.444 [DEBUG] [Thread-305519] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:48:20.502 [DEBUG] [Thread-305519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:48:20.503 [DEBUG] [Thread-305519] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:48:20.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:48:20.503 [DEBUG] [Thread-305519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:48:20.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:48:20.559 [DEBUG] [Thread-305519] [transport.py] [_log()] userauth is OK
2025-12-24T16:48:20.559 [DEBUG] [Thread-305519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:48:20.559 [DEBUG] [Thread-305519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:48:20.559 [DEBUG] [Thread-305519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:48:20.559 [DEBUG] [Thread-305519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:48:20.575 [INFO] [Thread-305519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:48:20.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:48:20.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:48:21.395 [DEBUG] [Thread-305519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:48:21.396 [DEBUG] [Thread-305519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:48:21.443 [DEBUG] [Thread-305519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:48:21.443 [DEBUG] [Thread-305519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:48:21.451 [DEBUG] [Thread-305519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:48:21.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:48:21.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:48:21.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:48:21.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:48:21.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:48:21.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:48:21.486 [DEBUG] [Thread-305519] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:48:32.472 [DEBUG] [Thread-305521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:48:36.493 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:48:36.497 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:48:47.611 [DEBUG] [Thread-305522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:48:51.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:48:51.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:48:51.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:48:52.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 48, 15), 21.22, 25.02, 0.0, 37.23, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:48:52.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:48:15
2025-12-24T16:48:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:48:52.816 [DEBUG] [Thread-305523] [transport.py] [_log()] starting thread (client mode): 0xf572e890
2025-12-24T16:48:52.817 [DEBUG] [Thread-305523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:48:52.829 [DEBUG] [Thread-305523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:48:52.830 [INFO] [Thread-305523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:48:52.836 [DEBUG] [Thread-305523] [transport.py] [_log()] client lang: <none>
2025-12-24T16:48:52.837 [DEBUG] [Thread-305523] [transport.py] [_log()] server lang: <none>
2025-12-24T16:48:52.837 [DEBUG] [Thread-305523] [transport.py] [_log()] kex follows: False
2025-12-24T16:48:52.837 [DEBUG] [Thread-305523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:48:52.837 [DEBUG] [Thread-305523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:48:52.837 [DEBUG] [Thread-305523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:48:52.837 [DEBUG] [Thread-305523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:48:52.837 [DEBUG] [Thread-305523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:48:52.838 [DEBUG] [Thread-305523] [transport.py] [_log()] Compression: none
2025-12-24T16:48:52.838 [DEBUG] [Thread-305523] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:48:52.873 [DEBUG] [Thread-305523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:48:52.878 [DEBUG] [Thread-305523] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:48:52.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:48:52.881 [DEBUG] [Thread-305523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:48:52.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:48:52.883 [DEBUG] [Thread-305523] [transport.py] [_log()] userauth is OK
2025-12-24T16:48:52.883 [DEBUG] [Thread-305523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:48:52.883 [DEBUG] [Thread-305523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:48:52.883 [DEBUG] [Thread-305523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:48:52.883 [DEBUG] [Thread-305523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:48:52.903 [INFO] [Thread-305523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:48:52.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:48:53.694 [DEBUG] [Thread-305523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:48:53.694 [DEBUG] [Thread-305523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:48:53.695 [DEBUG] [Thread-305523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:48:53.735 [DEBUG] [Thread-305523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:48:53.735 [DEBUG] [Thread-305523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:48:53.814 [DEBUG] [Thread-305523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:48:53.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:48:53.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:48:53.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:48:53.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:48:53.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:48:53.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:48:53.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:48:53.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:48:53.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:48:53.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.616734 -999.00  +23.50  20.51     30   +5.40 1 2 1 1 1   888    0 20.11 58.58 ----- 20.5 20.5 162.0 38.5 27.9 -25.0 27.8 -23.3 28.4 -22.6 28.9 -24.9
2025-12-24T16:48:53.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:48:53.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:48:53.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.616734
2025-12-24T16:48:53.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:48:53.850 [DEBUG] [Thread-305523] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:48:53.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:48:53.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:48:53.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:48:53.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:48:53.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:48:15', tmtdew=21.22, humidity=25.02, cloud=0.0, wind=37.23, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:48:05.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:48:53.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:48:53.944 [DEBUG] [Thread-305526] [transport.py] [_log()] starting thread (client mode): 0xf5750460
2025-12-24T16:48:53.944 [DEBUG] [Thread-305526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:48:53.959 [DEBUG] [Thread-305526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:48:53.959 [INFO] [Thread-305526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] client lang: <none>
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] server lang: <none>
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] kex follows: False
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:48:53.966 [DEBUG] [Thread-305526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:48:53.967 [DEBUG] [Thread-305526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:48:53.967 [DEBUG] [Thread-305526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:48:53.967 [DEBUG] [Thread-305526] [transport.py] [_log()] Compression: none
2025-12-24T16:48:53.967 [DEBUG] [Thread-305526] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:48:54.022 [DEBUG] [Thread-305526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:48:54.023 [DEBUG] [Thread-305526] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:48:54.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:48:54.023 [DEBUG] [Thread-305526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:48:54.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:48:54.079 [DEBUG] [Thread-305526] [transport.py] [_log()] userauth is OK
2025-12-24T16:48:54.080 [DEBUG] [Thread-305526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:48:54.080 [DEBUG] [Thread-305526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:48:54.080 [DEBUG] [Thread-305526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:48:54.080 [DEBUG] [Thread-305526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:48:54.103 [INFO] [Thread-305526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:48:54.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:48:54.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:48:54.891 [DEBUG] [Thread-305526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:48:54.892 [DEBUG] [Thread-305526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:48:54.940 [DEBUG] [Thread-305526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:48:54.941 [DEBUG] [Thread-305526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:48:54.949 [DEBUG] [Thread-305526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:48:54.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:48:54.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:48:54.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:48:54.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:48:54.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:48:54.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:48:54.983 [DEBUG] [Thread-305526] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:49:02.676 [DEBUG] [Thread-305528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:49:17.848 [DEBUG] [Thread-305529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:49:20.481 [DEBUG] [Thread-305530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:49:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:49:25.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:49:25.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:49:25.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 48, 48), 20.78, 25.63, 0.0, 29.77, 23.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:49:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:48:48
2025-12-24T16:49:26.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:49:26.328 [DEBUG] [Thread-305531] [transport.py] [_log()] starting thread (client mode): 0xf5752530
2025-12-24T16:49:26.329 [DEBUG] [Thread-305531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:49:26.340 [DEBUG] [Thread-305531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:49:26.340 [INFO] [Thread-305531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:49:26.345 [DEBUG] [Thread-305531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:49:26.345 [DEBUG] [Thread-305531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] client lang: <none>
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] server lang: <none>
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] kex follows: False
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:49:26.346 [DEBUG] [Thread-305531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:49:26.347 [DEBUG] [Thread-305531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:49:26.347 [DEBUG] [Thread-305531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:49:26.347 [DEBUG] [Thread-305531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:49:26.347 [DEBUG] [Thread-305531] [transport.py] [_log()] Compression: none
2025-12-24T16:49:26.347 [DEBUG] [Thread-305531] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:49:26.380 [DEBUG] [Thread-305531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:49:26.384 [DEBUG] [Thread-305531] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:49:26.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:49:26.388 [DEBUG] [Thread-305531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:49:26.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:49:26.390 [DEBUG] [Thread-305531] [transport.py] [_log()] userauth is OK
2025-12-24T16:49:26.390 [DEBUG] [Thread-305531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:49:26.391 [DEBUG] [Thread-305531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:49:26.391 [DEBUG] [Thread-305531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:49:26.391 [DEBUG] [Thread-305531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:49:26.414 [INFO] [Thread-305531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:49:26.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:49:27.037 [DEBUG] [Thread-305531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:49:27.037 [DEBUG] [Thread-305531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:49:27.038 [DEBUG] [Thread-305531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:49:27.080 [DEBUG] [Thread-305531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:49:27.080 [DEBUG] [Thread-305531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:49:27.083 [DEBUG] [Thread-305531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:49:27.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:49:27.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:49:27.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:49:27.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:49:27.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:49:27.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:49:27.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:49:27.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:49:27.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:49:27.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.617081 -999.00  +23.30  15.44     31   +5.40 1 1 1 1 1   888    0 19.85 57.90 ----- 15.4 15.4 153.4 34.4 27.7 -24.8 27.6 -23.4 28.1 -23.6 28.6 -24.2
2025-12-24T16:49:27.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:49:27.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:49:27.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.617081
2025-12-24T16:49:27.117 [DEBUG] [Thread-305531] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:49:27.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:49:27.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:49:27.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:49:27.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:49:27.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:49:27.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:48:48', tmtdew=20.78, humidity=25.63, cloud=0.0, wind=29.77, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:48:35.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:49:27.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:49:27.233 [DEBUG] [Thread-305534] [transport.py] [_log()] starting thread (client mode): 0xf572d750
2025-12-24T16:49:27.234 [DEBUG] [Thread-305534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:49:27.249 [DEBUG] [Thread-305534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:49:27.249 [INFO] [Thread-305534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:49:27.257 [DEBUG] [Thread-305534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:49:27.257 [DEBUG] [Thread-305534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:49:27.257 [DEBUG] [Thread-305534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:49:27.257 [DEBUG] [Thread-305534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:49:27.257 [DEBUG] [Thread-305534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:49:27.257 [DEBUG] [Thread-305534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:49:27.257 [DEBUG] [Thread-305534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:49:27.257 [DEBUG] [Thread-305534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] client lang: <none>
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] server lang: <none>
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] kex follows: False
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] Compression: none
2025-12-24T16:49:27.258 [DEBUG] [Thread-305534] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:49:27.316 [DEBUG] [Thread-305534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:49:27.317 [DEBUG] [Thread-305534] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:49:27.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:49:27.318 [DEBUG] [Thread-305534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:49:27.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:49:27.376 [DEBUG] [Thread-305534] [transport.py] [_log()] userauth is OK
2025-12-24T16:49:27.376 [DEBUG] [Thread-305534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:49:27.376 [DEBUG] [Thread-305534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:49:27.376 [DEBUG] [Thread-305534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:49:27.376 [DEBUG] [Thread-305534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:49:27.395 [INFO] [Thread-305534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:49:27.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:49:27.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:49:28.214 [DEBUG] [Thread-305534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:49:28.214 [DEBUG] [Thread-305534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:49:28.262 [DEBUG] [Thread-305534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:49:28.262 [DEBUG] [Thread-305534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:49:28.271 [DEBUG] [Thread-305534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:49:28.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:49:28.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:49:28.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:49:28.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:49:28.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:49:28.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:49:28.309 [DEBUG] [Thread-305534] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:49:32.972 [DEBUG] [Thread-305536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:49:36.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:49:36.648 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:49:48.165 [DEBUG] [Thread-305537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:49:58.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:49:58.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:49:58.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:49:59.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 49, 22), 20.69, 25.76, 0.0, 29.15, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:49:59.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:49:22
2025-12-24T16:49:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:49:59.643 [DEBUG] [Thread-305538] [transport.py] [_log()] starting thread (client mode): 0xf57525c0
2025-12-24T16:49:59.644 [DEBUG] [Thread-305538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:49:59.651 [DEBUG] [Thread-305538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:49:59.651 [INFO] [Thread-305538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:49:59.655 [DEBUG] [Thread-305538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:49:59.655 [DEBUG] [Thread-305538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:49:59.655 [DEBUG] [Thread-305538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] client lang: <none>
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] server lang: <none>
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] kex follows: False
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:49:59.656 [DEBUG] [Thread-305538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:49:59.657 [DEBUG] [Thread-305538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:49:59.657 [DEBUG] [Thread-305538] [transport.py] [_log()] Compression: none
2025-12-24T16:49:59.657 [DEBUG] [Thread-305538] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:49:59.688 [DEBUG] [Thread-305538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:49:59.691 [DEBUG] [Thread-305538] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:49:59.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:49:59.694 [DEBUG] [Thread-305538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:49:59.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:49:59.696 [DEBUG] [Thread-305538] [transport.py] [_log()] userauth is OK
2025-12-24T16:49:59.696 [DEBUG] [Thread-305538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:49:59.696 [DEBUG] [Thread-305538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:49:59.696 [DEBUG] [Thread-305538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:49:59.696 [DEBUG] [Thread-305538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:49:59.717 [INFO] [Thread-305538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:49:59.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:50:00.471 [DEBUG] [Thread-305538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:50:00.471 [DEBUG] [Thread-305538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:50:00.471 [DEBUG] [Thread-305538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:50:00.512 [DEBUG] [Thread-305538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:50:00.512 [DEBUG] [Thread-305538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:50:00.515 [DEBUG] [Thread-305538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:50:00.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:50:00.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:50:00.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:50:00.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:50:00.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:50:00.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:50:00.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:50:00.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:50:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:50:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.617428 -999.00  +23.30  13.82     31   +5.40 1 1 1 1 1   888    0 19.69 49.09 ----- 13.8 13.8 147.2 22.6 27.6 -24.6 27.4 -23.8 28.1 -22.7 28.4 -23.6
2025-12-24T16:50:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:50:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:50:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.617428
2025-12-24T16:50:00.550 [DEBUG] [Thread-305538] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:50:00.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:50:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:50:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:50:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:50:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:50:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:49:22', tmtdew=20.69, humidity=25.76, cloud=0.0, wind=29.15, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:49:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:50:00.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:50:00.657 [DEBUG] [Thread-305541] [transport.py] [_log()] starting thread (client mode): 0xf5753b80
2025-12-24T16:50:00.657 [DEBUG] [Thread-305541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:50:00.672 [DEBUG] [Thread-305541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:50:00.673 [INFO] [Thread-305541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] client lang: <none>
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] server lang: <none>
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] kex follows: False
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:50:00.680 [DEBUG] [Thread-305541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:50:00.681 [DEBUG] [Thread-305541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:50:00.681 [DEBUG] [Thread-305541] [transport.py] [_log()] Compression: none
2025-12-24T16:50:00.681 [DEBUG] [Thread-305541] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:50:00.738 [DEBUG] [Thread-305541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:50:00.739 [DEBUG] [Thread-305541] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:50:00.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:50:00.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:50:00.739 [DEBUG] [Thread-305541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:50:00.795 [DEBUG] [Thread-305541] [transport.py] [_log()] userauth is OK
2025-12-24T16:50:00.795 [DEBUG] [Thread-305541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:50:00.795 [DEBUG] [Thread-305541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:50:00.795 [DEBUG] [Thread-305541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:50:00.795 [DEBUG] [Thread-305541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:50:00.810 [INFO] [Thread-305541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:50:00.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:50:00.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:50:01.645 [DEBUG] [Thread-305541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:50:01.645 [DEBUG] [Thread-305541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:50:01.694 [DEBUG] [Thread-305541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:50:01.694 [DEBUG] [Thread-305541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:50:01.702 [DEBUG] [Thread-305541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:50:01.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:50:01.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')
2025-12-24T16:50:01.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
2025-12-24T16:50:01.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:50:01.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:50:01.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:50:01.735 [DEBUG] [Thread-305541] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:50:03.411 [DEBUG] [Thread-305543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:50:18.572 [DEBUG] [Thread-305544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:50:20.709 [DEBUG] [Thread-305545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:50:31.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:50:31.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:50:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:50:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 49, 55), 20.59, 26.03, 0.0, 24.26, 23.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:50:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:49:55
2025-12-24T16:50:32.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:50:33.195 [DEBUG] [Thread-305546] [transport.py] [_log()] starting thread (client mode): 0xf5751e10
2025-12-24T16:50:33.196 [DEBUG] [Thread-305546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:50:33.197 [DEBUG] [Thread-305546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:50:33.198 [INFO] [Thread-305546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] client lang: <none>
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] server lang: <none>
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] kex follows: False
2025-12-24T16:50:33.201 [DEBUG] [Thread-305546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:50:33.202 [DEBUG] [Thread-305546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:50:33.202 [DEBUG] [Thread-305546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:50:33.202 [DEBUG] [Thread-305546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:50:33.202 [DEBUG] [Thread-305546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:50:33.202 [DEBUG] [Thread-305546] [transport.py] [_log()] Compression: none
2025-12-24T16:50:33.202 [DEBUG] [Thread-305546] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:50:33.237 [DEBUG] [Thread-305546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:50:33.241 [DEBUG] [Thread-305546] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:50:33.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:50:33.244 [DEBUG] [Thread-305546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:50:33.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:50:33.246 [DEBUG] [Thread-305546] [transport.py] [_log()] userauth is OK
2025-12-24T16:50:33.246 [DEBUG] [Thread-305546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:50:33.246 [DEBUG] [Thread-305546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:50:33.246 [DEBUG] [Thread-305546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:50:33.246 [DEBUG] [Thread-305546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:50:33.302 [INFO] [Thread-305546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:50:33.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:50:33.684 [DEBUG] [Thread-305548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:50:33.895 [DEBUG] [Thread-305546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:50:33.895 [DEBUG] [Thread-305546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:50:33.896 [DEBUG] [Thread-305546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:50:33.937 [DEBUG] [Thread-305546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:50:33.937 [DEBUG] [Thread-305546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:50:33.940 [DEBUG] [Thread-305546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:50:33.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:50:33.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:50:33.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:50:33.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:50:33.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:50:33.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:50:33.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:50:33.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:50:33.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:50:33.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.617775 -999.00  +23.30  14.26     31   +5.40 1 1 1 1 1   888    0 19.84 49.35 ----- 14.3 14.3 145.8 21.2 27.5 -24.6 27.4 -23.8 27.9 -23.0 28.3 -23.9
2025-12-24T16:50:33.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:50:33.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:50:33.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.617775
2025-12-24T16:50:33.967 [DEBUG] [Thread-305546] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:50:33.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:50:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:50:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:50:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:50:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:50:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:49:55', tmtdew=20.59, humidity=26.03, cloud=0.0, wind=24.26, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:49:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:50:34.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:50:34.072 [DEBUG] [Thread-305550] [transport.py] [_log()] starting thread (client mode): 0xf81e7a00
2025-12-24T16:50:34.072 [DEBUG] [Thread-305550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:50:34.090 [DEBUG] [Thread-305550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:50:34.090 [INFO] [Thread-305550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:50:34.097 [DEBUG] [Thread-305550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] client lang: <none>
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] server lang: <none>
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] kex follows: False
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] Compression: none
2025-12-24T16:50:34.098 [DEBUG] [Thread-305550] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:50:34.155 [DEBUG] [Thread-305550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:50:34.155 [DEBUG] [Thread-305550] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:50:34.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:50:34.156 [DEBUG] [Thread-305550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:50:34.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:50:34.212 [DEBUG] [Thread-305550] [transport.py] [_log()] userauth is OK
2025-12-24T16:50:34.212 [DEBUG] [Thread-305550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:50:34.212 [DEBUG] [Thread-305550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:50:34.212 [DEBUG] [Thread-305550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:50:34.212 [DEBUG] [Thread-305550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:50:34.232 [INFO] [Thread-305550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:50:34.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:50:34.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:50:35.032 [DEBUG] [Thread-305550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:50:35.032 [DEBUG] [Thread-305550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:50:35.079 [DEBUG] [Thread-305550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:50:35.079 [DEBUG] [Thread-305550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:50:35.089 [DEBUG] [Thread-305550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:50:35.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:50:35.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:50:35.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:50:35.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:50:35.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:50:35.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:50:35.126 [DEBUG] [Thread-305550] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:50:36.789 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:50:36.791 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:50:48.793 [DEBUG] [Thread-305552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:51:03.974 [DEBUG] [Thread-305553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:51:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:51:05.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:51:05.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:51:06.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 50, 28), 20.54, 26.08, 0.0, 22.41, 23.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:51:06.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:50:28
2025-12-24T16:51:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:51:06.421 [DEBUG] [Thread-305554] [transport.py] [_log()] starting thread (client mode): 0xf572b340
2025-12-24T16:51:06.421 [DEBUG] [Thread-305554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:51:06.433 [DEBUG] [Thread-305554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:51:06.433 [INFO] [Thread-305554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] client lang: <none>
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] server lang: <none>
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] kex follows: False
2025-12-24T16:51:06.438 [DEBUG] [Thread-305554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:51:06.439 [DEBUG] [Thread-305554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:51:06.439 [DEBUG] [Thread-305554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:51:06.439 [DEBUG] [Thread-305554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:51:06.439 [DEBUG] [Thread-305554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:51:06.439 [DEBUG] [Thread-305554] [transport.py] [_log()] Compression: none
2025-12-24T16:51:06.439 [DEBUG] [Thread-305554] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:51:06.465 [DEBUG] [Thread-305554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:51:06.469 [DEBUG] [Thread-305554] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:51:06.471 [DEBUG] [Thread-305554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:51:06.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:51:06.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:51:06.476 [DEBUG] [Thread-305554] [transport.py] [_log()] userauth is OK
2025-12-24T16:51:06.476 [DEBUG] [Thread-305554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:51:06.477 [DEBUG] [Thread-305554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:51:06.477 [DEBUG] [Thread-305554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:51:06.477 [DEBUG] [Thread-305554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:51:06.501 [INFO] [Thread-305554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:51:06.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:51:07.255 [DEBUG] [Thread-305554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:51:07.255 [DEBUG] [Thread-305554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:51:07.256 [DEBUG] [Thread-305554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:51:07.296 [DEBUG] [Thread-305554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:51:07.297 [DEBUG] [Thread-305554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:51:07.300 [DEBUG] [Thread-305554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:51:07.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:51:07.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:51:07.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:51:07.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:51:07.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:51:07.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:51:07.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:51:07.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:51:07.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:51:07.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.618470 -999.00  +23.50  15.59     31   +5.40 1 1 1 1 1   888    0 19.15 36.34 ----- 15.6 15.6 165.3 26.0 27.3 -24.6 27.2 -24.2 27.7 -22.5 28.1 -23.4
2025-12-24T16:51:07.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:51:07.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:51:07.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.618470
2025-12-24T16:51:07.339 [DEBUG] [Thread-305554] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:51:07.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:51:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:51:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:51:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:51:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:51:07.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:50:28', tmtdew=20.54, humidity=26.08, cloud=0.0, wind=22.41, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:50:35.808', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:51:07.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:51:07.469 [DEBUG] [Thread-305557] [transport.py] [_log()] starting thread (client mode): 0xf57290f0
2025-12-24T16:51:07.469 [DEBUG] [Thread-305557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:51:07.483 [DEBUG] [Thread-305557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:51:07.484 [INFO] [Thread-305557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:51:07.491 [DEBUG] [Thread-305557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:51:07.491 [DEBUG] [Thread-305557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:51:07.491 [DEBUG] [Thread-305557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:51:07.491 [DEBUG] [Thread-305557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] client lang: <none>
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] server lang: <none>
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] kex follows: False
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] Compression: none
2025-12-24T16:51:07.492 [DEBUG] [Thread-305557] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:51:07.552 [DEBUG] [Thread-305557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:51:07.553 [DEBUG] [Thread-305557] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:51:07.554 [DEBUG] [Thread-305557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:51:07.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:51:07.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:51:07.607 [DEBUG] [Thread-305557] [transport.py] [_log()] userauth is OK
2025-12-24T16:51:07.608 [DEBUG] [Thread-305557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:51:07.608 [DEBUG] [Thread-305557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:51:07.608 [DEBUG] [Thread-305557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:51:07.608 [DEBUG] [Thread-305557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:51:07.627 [INFO] [Thread-305557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:51:07.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:51:07.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:51:08.449 [DEBUG] [Thread-305557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:51:08.449 [DEBUG] [Thread-305557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:51:08.497 [DEBUG] [Thread-305557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:51:08.497 [DEBUG] [Thread-305557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:51:08.510 [DEBUG] [Thread-305557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:51:08.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:51:08.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:51:08.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:51:08.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:51:08.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:51:08.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:51:08.548 [DEBUG] [Thread-305557] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:51:19.114 [DEBUG] [Thread-305559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:51:21.013 [DEBUG] [Thread-305560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:51:34.299 [DEBUG] [Thread-305561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:51:36.934 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:51:36.935 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:51:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:51:38.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:51:38.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:51:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 51, 2), 20.6, 26.0, 0.0, 32.32, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:51:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:51:02
2025-12-24T16:51:39.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:51:39.816 [DEBUG] [Thread-305562] [transport.py] [_log()] starting thread (client mode): 0xf572d0f0
2025-12-24T16:51:39.817 [DEBUG] [Thread-305562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:51:39.829 [DEBUG] [Thread-305562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:51:39.830 [INFO] [Thread-305562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:51:39.834 [DEBUG] [Thread-305562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:51:39.834 [DEBUG] [Thread-305562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:51:39.834 [DEBUG] [Thread-305562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:51:39.834 [DEBUG] [Thread-305562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] client lang: <none>
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] server lang: <none>
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] kex follows: False
2025-12-24T16:51:39.835 [DEBUG] [Thread-305562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:51:39.836 [DEBUG] [Thread-305562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:51:39.836 [DEBUG] [Thread-305562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:51:39.837 [DEBUG] [Thread-305562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:51:39.837 [DEBUG] [Thread-305562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:51:39.837 [DEBUG] [Thread-305562] [transport.py] [_log()] Compression: none
2025-12-24T16:51:39.837 [DEBUG] [Thread-305562] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:51:39.872 [DEBUG] [Thread-305562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:51:39.876 [DEBUG] [Thread-305562] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:51:39.877 [DEBUG] [Thread-305562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:51:39.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:51:39.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:51:39.882 [DEBUG] [Thread-305562] [transport.py] [_log()] userauth is OK
2025-12-24T16:51:39.882 [DEBUG] [Thread-305562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:51:39.882 [DEBUG] [Thread-305562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:51:39.882 [DEBUG] [Thread-305562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:51:39.882 [DEBUG] [Thread-305562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:51:39.910 [INFO] [Thread-305562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:51:39.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:51:40.561 [DEBUG] [Thread-305562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:51:40.561 [DEBUG] [Thread-305562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:51:40.562 [DEBUG] [Thread-305562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:51:40.603 [DEBUG] [Thread-305562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:51:40.603 [DEBUG] [Thread-305562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:51:40.607 [DEBUG] [Thread-305562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:51:40.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:51:40.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:51:40.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:51:40.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:51:40.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:51:40.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:51:40.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:51:40.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:51:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:51:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.618817 -999.00  +23.40  27.82     31   +5.40 1 1 1 1 1   888    0 19.22 30.45 ----- 27.8 27.8 145.0 36.6 27.2 -25.0 27.1 -24.4 27.7 -23.1 28.0 -23.9
2025-12-24T16:51:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:51:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:51:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.618817
2025-12-24T16:51:40.641 [DEBUG] [Thread-305562] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:51:40.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:51:40.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:51:40.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:51:40.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:51:40.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:51:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:51:02', tmtdew=20.6, humidity=26.0, cloud=0.0, wind=32.32, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:51:05.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:51:40.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:51:40.752 [DEBUG] [Thread-305565] [transport.py] [_log()] starting thread (client mode): 0xf5753310
2025-12-24T16:51:40.752 [DEBUG] [Thread-305565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:51:40.766 [DEBUG] [Thread-305565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:51:40.766 [INFO] [Thread-305565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:51:40.774 [DEBUG] [Thread-305565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:51:40.774 [DEBUG] [Thread-305565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:51:40.774 [DEBUG] [Thread-305565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:51:40.774 [DEBUG] [Thread-305565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:51:40.774 [DEBUG] [Thread-305565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:51:40.775 [DEBUG] [Thread-305565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:51:40.775 [DEBUG] [Thread-305565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:51:40.775 [DEBUG] [Thread-305565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:51:40.775 [DEBUG] [Thread-305565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:51:40.775 [DEBUG] [Thread-305565] [transport.py] [_log()] client lang: <none>
2025-12-24T16:51:40.775 [DEBUG] [Thread-305565] [transport.py] [_log()] server lang: <none>
2025-12-24T16:51:40.775 [DEBUG] [Thread-305565] [transport.py] [_log()] kex follows: False
2025-12-24T16:51:40.775 [DEBUG] [Thread-305565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:51:40.776 [DEBUG] [Thread-305565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:51:40.776 [DEBUG] [Thread-305565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:51:40.776 [DEBUG] [Thread-305565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:51:40.776 [DEBUG] [Thread-305565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:51:40.776 [DEBUG] [Thread-305565] [transport.py] [_log()] Compression: none
2025-12-24T16:51:40.776 [DEBUG] [Thread-305565] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:51:40.832 [DEBUG] [Thread-305565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:51:40.832 [DEBUG] [Thread-305565] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:51:40.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:51:40.833 [DEBUG] [Thread-305565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:51:40.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:51:40.888 [DEBUG] [Thread-305565] [transport.py] [_log()] userauth is OK
2025-12-24T16:51:40.888 [DEBUG] [Thread-305565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:51:40.888 [DEBUG] [Thread-305565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:51:40.888 [DEBUG] [Thread-305565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:51:40.888 [DEBUG] [Thread-305565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:51:40.907 [INFO] [Thread-305565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:51:40.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:51:40.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:51:41.702 [DEBUG] [Thread-305565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:51:41.702 [DEBUG] [Thread-305565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:51:41.749 [DEBUG] [Thread-305565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:51:41.750 [DEBUG] [Thread-305565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:51:41.758 [DEBUG] [Thread-305565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:51:41.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:51:41.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:51:41.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:51:41.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:51:41.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:51:41.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:51:41.792 [DEBUG] [Thread-305565] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:51:49.399 [DEBUG] [Thread-305567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:52:04.577 [DEBUG] [Thread-305568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:52:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:52:11.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:52:11.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
2025-12-24T16:52:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 51, 35), 20.83, 25.53, 0.0, 29.4, 23.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:52:12.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:51:35
2025-12-24T16:52:12.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:52:13.104 [DEBUG] [Thread-305569] [transport.py] [_log()] starting thread (client mode): 0xf5752d70
2025-12-24T16:52:13.105 [DEBUG] [Thread-305569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:52:13.107 [DEBUG] [Thread-305569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:52:13.107 [INFO] [Thread-305569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:52:13.174 [DEBUG] [Thread-305569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] client lang: <none>
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] server lang: <none>
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] kex follows: False
2025-12-24T16:52:13.175 [DEBUG] [Thread-305569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:52:13.176 [DEBUG] [Thread-305569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:52:13.177 [DEBUG] [Thread-305569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:52:13.177 [DEBUG] [Thread-305569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:52:13.177 [DEBUG] [Thread-305569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:52:13.177 [DEBUG] [Thread-305569] [transport.py] [_log()] Compression: none
2025-12-24T16:52:13.177 [DEBUG] [Thread-305569] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:52:13.226 [DEBUG] [Thread-305569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:52:13.234 [DEBUG] [Thread-305569] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:52:13.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:52:13.236 [DEBUG] [Thread-305569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:52:13.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:52:13.242 [DEBUG] [Thread-305569] [transport.py] [_log()] userauth is OK
2025-12-24T16:52:13.242 [DEBUG] [Thread-305569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:52:13.242 [DEBUG] [Thread-305569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:52:13.242 [DEBUG] [Thread-305569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:52:13.242 [DEBUG] [Thread-305569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:52:13.262 [INFO] [Thread-305569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:52:13.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:52:13.987 [DEBUG] [Thread-305569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:52:13.987 [DEBUG] [Thread-305569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:52:13.988 [DEBUG] [Thread-305569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:52:14.027 [DEBUG] [Thread-305569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:52:14.028 [DEBUG] [Thread-305569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:52:14.031 [DEBUG] [Thread-305569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:52:14.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:52:14.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:52:14.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:52:14.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:52:14.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:52:14.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:52:14.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:52:14.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:52:14.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:52:14.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.619164 -999.00  +23.30  20.91     31   +5.40 1 2 1 1 1   888    0 19.04 25.21 ----- 20.9 20.9 145.2 36.1 27.2 -23.7 27.1 -24.1 27.8 -20.3 28.0 -22.1
2025-12-24T16:52:14.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:52:14.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:52:14.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.619164
2025-12-24T16:52:14.057 [DEBUG] [Thread-305569] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:52:14.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:52:14.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:52:14.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:52:14.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:52:14.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:52:14.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:51:35', tmtdew=20.83, humidity=25.53, cloud=0.0, wind=29.4, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:51:35.770', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:52:14.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:52:14.176 [DEBUG] [Thread-305572] [transport.py] [_log()] starting thread (client mode): 0xf574d4b0
2025-12-24T16:52:14.176 [DEBUG] [Thread-305572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:52:14.191 [DEBUG] [Thread-305572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:52:14.191 [INFO] [Thread-305572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:52:14.198 [DEBUG] [Thread-305572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:52:14.198 [DEBUG] [Thread-305572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] client lang: <none>
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] server lang: <none>
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] kex follows: False
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] Compression: none
2025-12-24T16:52:14.199 [DEBUG] [Thread-305572] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:52:14.254 [DEBUG] [Thread-305572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:52:14.254 [DEBUG] [Thread-305572] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:52:14.254 [DEBUG] [Thread-305572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:52:14.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:52:14.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:52:14.311 [DEBUG] [Thread-305572] [transport.py] [_log()] userauth is OK
2025-12-24T16:52:14.312 [DEBUG] [Thread-305572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:52:14.312 [DEBUG] [Thread-305572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:52:14.312 [DEBUG] [Thread-305572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:52:14.312 [DEBUG] [Thread-305572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:52:14.325 [INFO] [Thread-305572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:52:14.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:52:14.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:52:15.138 [DEBUG] [Thread-305572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:52:15.138 [DEBUG] [Thread-305572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:52:15.184 [DEBUG] [Thread-305572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:52:15.184 [DEBUG] [Thread-305572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:52:15.192 [DEBUG] [Thread-305572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:52:15.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:52:15.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')
2025-12-24T16:52:15.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:52:15.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:52:15.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:52:15.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:52:15.226 [DEBUG] [Thread-305572] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:52:19.699 [DEBUG] [Thread-305574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:52:21.249 [DEBUG] [Thread-305575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:52:34.937 [DEBUG] [Thread-305576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:52:37.087 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:52:37.089 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:52:45.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:52:45.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:52:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:52:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 52, 9), 20.92, 25.4, 0.0, 30.88, 23.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:52:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:52:09
2025-12-24T16:52:46.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:52:46.519 [DEBUG] [Thread-305577] [transport.py] [_log()] starting thread (client mode): 0xf572ccd0
2025-12-24T16:52:46.520 [DEBUG] [Thread-305577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:52:46.529 [DEBUG] [Thread-305577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:52:46.530 [INFO] [Thread-305577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] client lang: <none>
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] server lang: <none>
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] kex follows: False
2025-12-24T16:52:46.535 [DEBUG] [Thread-305577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:52:46.536 [DEBUG] [Thread-305577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:52:46.536 [DEBUG] [Thread-305577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:52:46.536 [DEBUG] [Thread-305577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:52:46.536 [DEBUG] [Thread-305577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:52:46.536 [DEBUG] [Thread-305577] [transport.py] [_log()] Compression: none
2025-12-24T16:52:46.536 [DEBUG] [Thread-305577] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:52:46.573 [DEBUG] [Thread-305577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:52:46.577 [DEBUG] [Thread-305577] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:52:46.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:52:46.581 [DEBUG] [Thread-305577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:52:46.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:52:46.584 [DEBUG] [Thread-305577] [transport.py] [_log()] userauth is OK
2025-12-24T16:52:46.584 [DEBUG] [Thread-305577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:52:46.585 [DEBUG] [Thread-305577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:52:46.585 [DEBUG] [Thread-305577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:52:46.585 [DEBUG] [Thread-305577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:52:46.608 [INFO] [Thread-305577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:52:46.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:52:47.257 [DEBUG] [Thread-305577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:52:47.258 [DEBUG] [Thread-305577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:52:47.259 [DEBUG] [Thread-305577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:52:47.299 [DEBUG] [Thread-305577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:52:47.299 [DEBUG] [Thread-305577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:52:47.302 [DEBUG] [Thread-305577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:52:47.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:52:47.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:52:47.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:52:47.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:52:47.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:52:47.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:52:47.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:52:47.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:52:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:52:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.619512 -999.00  +23.40  24.60     31   +5.40 1 2 1 1 1   888    0 18.97 21.46 ----- 24.6 24.6 141.6 32.9 27.2 -24.2 27.2 -23.6 27.9 -20.8 28.2 -22.1
2025-12-24T16:52:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:52:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:52:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.619512
2025-12-24T16:52:47.329 [DEBUG] [Thread-305577] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:52:47.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:52:47.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:52:47.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:52:47.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:52:47.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:52:47.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:52:09', tmtdew=20.92, humidity=25.4, cloud=0.0, wind=30.88, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:52:05.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:52:47.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:52:47.434 [DEBUG] [Thread-305580] [transport.py] [_log()] starting thread (client mode): 0xf5752290
2025-12-24T16:52:47.434 [DEBUG] [Thread-305580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:52:47.448 [DEBUG] [Thread-305580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:52:47.448 [INFO] [Thread-305580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] client lang: <none>
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] server lang: <none>
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] kex follows: False
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:52:47.456 [DEBUG] [Thread-305580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:52:47.457 [DEBUG] [Thread-305580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:52:47.457 [DEBUG] [Thread-305580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:52:47.457 [DEBUG] [Thread-305580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:52:47.457 [DEBUG] [Thread-305580] [transport.py] [_log()] Compression: none
2025-12-24T16:52:47.457 [DEBUG] [Thread-305580] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:52:47.519 [DEBUG] [Thread-305580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:52:47.519 [DEBUG] [Thread-305580] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:52:47.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:52:47.519 [DEBUG] [Thread-305580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:52:47.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:52:47.586 [DEBUG] [Thread-305580] [transport.py] [_log()] userauth is OK
2025-12-24T16:52:47.586 [DEBUG] [Thread-305580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:52:47.586 [DEBUG] [Thread-305580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:52:47.586 [DEBUG] [Thread-305580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:52:47.586 [DEBUG] [Thread-305580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:52:47.604 [INFO] [Thread-305580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:52:47.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:52:47.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:52:48.456 [DEBUG] [Thread-305580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:52:48.457 [DEBUG] [Thread-305580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:52:48.504 [DEBUG] [Thread-305580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:52:48.504 [DEBUG] [Thread-305580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:52:48.512 [DEBUG] [Thread-305580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:52:48.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:52:48.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:52:48.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:52:48.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:52:48.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:52:48.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:52:48.545 [DEBUG] [Thread-305580] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:52:50.027 [DEBUG] [Thread-305582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:53:05.185 [DEBUG] [Thread-305583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:53:18.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:53:18.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:53:18.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:53:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 52, 41), 20.79, 25.8, 0.0, 31.72, 23.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:53:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:52:41
2025-12-24T16:53:19.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:53:19.843 [DEBUG] [Thread-305584] [transport.py] [_log()] starting thread (client mode): 0xf5752d40
2025-12-24T16:53:19.844 [DEBUG] [Thread-305584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:53:19.845 [DEBUG] [Thread-305584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:53:19.845 [INFO] [Thread-305584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] client lang: <none>
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] server lang: <none>
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] kex follows: False
2025-12-24T16:53:19.848 [DEBUG] [Thread-305584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:53:19.849 [DEBUG] [Thread-305584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:53:19.849 [DEBUG] [Thread-305584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:53:19.849 [DEBUG] [Thread-305584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:53:19.849 [DEBUG] [Thread-305584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:53:19.849 [DEBUG] [Thread-305584] [transport.py] [_log()] Compression: none
2025-12-24T16:53:19.849 [DEBUG] [Thread-305584] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:53:19.875 [DEBUG] [Thread-305584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:53:19.879 [DEBUG] [Thread-305584] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:53:19.881 [DEBUG] [Thread-305584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:53:19.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:53:19.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:53:19.885 [DEBUG] [Thread-305584] [transport.py] [_log()] userauth is OK
2025-12-24T16:53:19.886 [DEBUG] [Thread-305584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:53:19.886 [DEBUG] [Thread-305584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:53:19.886 [DEBUG] [Thread-305584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:53:19.886 [DEBUG] [Thread-305584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:53:19.910 [INFO] [Thread-305584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:53:19.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:53:20.273 [DEBUG] [Thread-305586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:53:20.547 [DEBUG] [Thread-305584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:53:20.548 [DEBUG] [Thread-305584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:53:20.548 [DEBUG] [Thread-305584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:53:20.590 [DEBUG] [Thread-305584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:53:20.590 [DEBUG] [Thread-305584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:53:20.593 [DEBUG] [Thread-305584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:53:20.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:53:20.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:53:20.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:53:20.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:53:20.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:53:20.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:53:20.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:53:20.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:53:20.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:53:20.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.619859 -999.00  +23.50  27.68     31   +5.40 1 1 1 1 1   888    0 18.69 17.66 ----- 27.7 27.7 154.6 37.1 27.1 -24.8 27.1 -25.3 27.9 -22.0 28.1 -23.9
2025-12-24T16:53:20.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:53:20.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:53:20.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.619859
2025-12-24T16:53:20.621 [DEBUG] [Thread-305584] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:53:20.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:53:20.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:53:20.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:53:20.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:53:20.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:53:20.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:52:41', tmtdew=20.79, humidity=25.8, cloud=0.0, wind=31.72, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:52:35.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:53:20.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:53:20.720 [DEBUG] [Thread-305588] [transport.py] [_log()] starting thread (client mode): 0xf57507c0
2025-12-24T16:53:20.720 [DEBUG] [Thread-305588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:53:20.734 [DEBUG] [Thread-305588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:53:20.735 [INFO] [Thread-305588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] client lang: <none>
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] server lang: <none>
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] kex follows: False
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:53:20.742 [DEBUG] [Thread-305588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:53:20.743 [DEBUG] [Thread-305588] [transport.py] [_log()] Compression: none
2025-12-24T16:53:20.743 [DEBUG] [Thread-305588] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:53:20.798 [DEBUG] [Thread-305588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:53:20.798 [DEBUG] [Thread-305588] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:53:20.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:53:20.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:53:20.798 [DEBUG] [Thread-305588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:53:20.855 [DEBUG] [Thread-305588] [transport.py] [_log()] userauth is OK
2025-12-24T16:53:20.855 [DEBUG] [Thread-305588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:53:20.856 [DEBUG] [Thread-305588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:53:20.856 [DEBUG] [Thread-305588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:53:20.856 [DEBUG] [Thread-305588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:53:20.875 [INFO] [Thread-305588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:53:20.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:53:20.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:53:21.555 [DEBUG] [Thread-305590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:53:21.657 [DEBUG] [Thread-305588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:53:21.658 [DEBUG] [Thread-305588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:53:21.709 [DEBUG] [Thread-305588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:53:21.709 [DEBUG] [Thread-305588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:53:21.718 [DEBUG] [Thread-305588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:53:21.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:53:21.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:53:21.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:53:21.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:53:21.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:53:21.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:53:21.757 [DEBUG] [Thread-305588] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:53:35.388 [DEBUG] [Thread-305591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:53:37.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:53:37.231 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:53:50.563 [DEBUG] [Thread-305592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:53:51.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:53:51.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:53:51.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:53:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 53, 15), 20.79, 25.78, 0.0, 31.07, 23.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:53:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:53:15
2025-12-24T16:53:52.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:53:53.085 [DEBUG] [Thread-305593] [transport.py] [_log()] starting thread (client mode): 0xf5751090
2025-12-24T16:53:53.085 [DEBUG] [Thread-305593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:53:53.098 [DEBUG] [Thread-305593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:53:53.099 [INFO] [Thread-305593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] client lang: <none>
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] server lang: <none>
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] kex follows: False
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:53:53.104 [DEBUG] [Thread-305593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:53:53.105 [DEBUG] [Thread-305593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:53:53.105 [DEBUG] [Thread-305593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:53:53.105 [DEBUG] [Thread-305593] [transport.py] [_log()] Compression: none
2025-12-24T16:53:53.105 [DEBUG] [Thread-305593] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:53:53.205 [DEBUG] [Thread-305593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:53:53.209 [DEBUG] [Thread-305593] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:53:53.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:53:53.210 [DEBUG] [Thread-305593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:53:53.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:53:53.214 [DEBUG] [Thread-305593] [transport.py] [_log()] userauth is OK
2025-12-24T16:53:53.214 [DEBUG] [Thread-305593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:53:53.214 [DEBUG] [Thread-305593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:53:53.214 [DEBUG] [Thread-305593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:53:53.214 [DEBUG] [Thread-305593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:53:53.245 [INFO] [Thread-305593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:53:53.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:53:53.851 [DEBUG] [Thread-305593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:53:53.852 [DEBUG] [Thread-305593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:53:53.853 [DEBUG] [Thread-305593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:53:53.892 [DEBUG] [Thread-305593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:53:53.892 [DEBUG] [Thread-305593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:53:53.895 [DEBUG] [Thread-305593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:53:53.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:53:53.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:53:53.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:53:53.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:53:53.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:53:53.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:53:53.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:53:53.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:53:53.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:53:53.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.620206 -999.00  +23.40  16.88     31   +5.40 1 1 1 1 1   888    0 18.66 14.22 ----- 16.9 16.9 163.2 27.7 26.8 -25.9 26.9 -26.4 27.6 -23.5 27.9 -24.6
2025-12-24T16:53:53.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:53:53.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:53:53.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.620206
2025-12-24T16:53:53.929 [DEBUG] [Thread-305593] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:53:53.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:53:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:53:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:53:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:53:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:53:53.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:53:15', tmtdew=20.79, humidity=25.78, cloud=0.0, wind=31.07, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:53:05.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:53:54.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:53:54.040 [DEBUG] [Thread-305596] [transport.py] [_log()] starting thread (client mode): 0xf572e680
2025-12-24T16:53:54.040 [DEBUG] [Thread-305596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:53:54.054 [DEBUG] [Thread-305596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:53:54.054 [INFO] [Thread-305596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] client lang: <none>
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] server lang: <none>
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] kex follows: False
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] Compression: none
2025-12-24T16:53:54.062 [DEBUG] [Thread-305596] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:53:54.123 [DEBUG] [Thread-305596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:53:54.123 [DEBUG] [Thread-305596] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:53:54.124 [DEBUG] [Thread-305596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:53:54.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:53:54.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:53:54.180 [DEBUG] [Thread-305596] [transport.py] [_log()] userauth is OK
2025-12-24T16:53:54.180 [DEBUG] [Thread-305596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:53:54.180 [DEBUG] [Thread-305596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:53:54.180 [DEBUG] [Thread-305596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:53:54.181 [DEBUG] [Thread-305596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:53:54.199 [INFO] [Thread-305596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:53:54.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:53:54.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:53:55.023 [DEBUG] [Thread-305596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:53:55.024 [DEBUG] [Thread-305596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:53:55.071 [DEBUG] [Thread-305596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:53:55.071 [DEBUG] [Thread-305596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:53:55.079 [DEBUG] [Thread-305596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:53:55.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:53:55.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:53: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') -> 00000000
2025-12-24T16:53:55.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:53:55.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:53:55.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:53:55.112 [DEBUG] [Thread-305596] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:54:05.626 [DEBUG] [Thread-305598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:54:20.785 [DEBUG] [Thread-305599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:54:21.800 [DEBUG] [Thread-305600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:54:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:54:25.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:54:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:54:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 53, 48), 20.67, 25.51, 0.0, 26.54, 23.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:54:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:53:48
2025-12-24T16:54:26.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:54:26.553 [DEBUG] [Thread-305601] [transport.py] [_log()] starting thread (client mode): 0xf574c880
2025-12-24T16:54:26.553 [DEBUG] [Thread-305601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:54:26.564 [DEBUG] [Thread-305601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:54:26.564 [INFO] [Thread-305601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] client lang: <none>
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] server lang: <none>
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] kex follows: False
2025-12-24T16:54:26.569 [DEBUG] [Thread-305601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:54:26.570 [DEBUG] [Thread-305601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:54:26.570 [DEBUG] [Thread-305601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:54:26.570 [DEBUG] [Thread-305601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:54:26.570 [DEBUG] [Thread-305601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:54:26.570 [DEBUG] [Thread-305601] [transport.py] [_log()] Compression: none
2025-12-24T16:54:26.570 [DEBUG] [Thread-305601] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:54:26.603 [DEBUG] [Thread-305601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:54:26.607 [DEBUG] [Thread-305601] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:54:26.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:54:26.610 [DEBUG] [Thread-305601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:54:26.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:54:26.612 [DEBUG] [Thread-305601] [transport.py] [_log()] userauth is OK
2025-12-24T16:54:26.612 [DEBUG] [Thread-305601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:54:26.612 [DEBUG] [Thread-305601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:54:26.612 [DEBUG] [Thread-305601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:54:26.612 [DEBUG] [Thread-305601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:54:26.630 [INFO] [Thread-305601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:54:26.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:54:27.297 [DEBUG] [Thread-305601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:54:27.298 [DEBUG] [Thread-305601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:54:27.301 [DEBUG] [Thread-305601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:54:27.338 [DEBUG] [Thread-305601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:54:27.339 [DEBUG] [Thread-305601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:54:27.343 [DEBUG] [Thread-305601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:54:27.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:54:27.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:54:27.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:54:27.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:54:27.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:54:27.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:54:27.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:54:27.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:54:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:54:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.620553 -999.00  +23.40  20.76     31   +5.40 1 1 1 1 1   888    0 18.35 13.08 ----- 20.8 20.8 139.0 31.0 26.8 -25.6 26.7 -25.7 27.4 -23.6 27.8 -24.3
2025-12-24T16:54:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:54:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:54:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.620553
2025-12-24T16:54:27.379 [DEBUG] [Thread-305601] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:54:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:54:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:54:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:54:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:54:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:54:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:53:48', tmtdew=20.67, humidity=25.51, cloud=0.0, wind=26.54, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:53:35.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:54:27.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:54:27.492 [DEBUG] [Thread-305604] [transport.py] [_log()] starting thread (client mode): 0xf574dd20
2025-12-24T16:54:27.492 [DEBUG] [Thread-305604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:54:27.509 [DEBUG] [Thread-305604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:54:27.509 [INFO] [Thread-305604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:54:27.517 [DEBUG] [Thread-305604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:54:27.517 [DEBUG] [Thread-305604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:54:27.517 [DEBUG] [Thread-305604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:54:27.517 [DEBUG] [Thread-305604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:54:27.517 [DEBUG] [Thread-305604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] client lang: <none>
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] server lang: <none>
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] kex follows: False
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:54:27.518 [DEBUG] [Thread-305604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:54:27.519 [DEBUG] [Thread-305604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:54:27.519 [DEBUG] [Thread-305604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:54:27.519 [DEBUG] [Thread-305604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:54:27.519 [DEBUG] [Thread-305604] [transport.py] [_log()] Compression: none
2025-12-24T16:54:27.519 [DEBUG] [Thread-305604] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:54:27.576 [DEBUG] [Thread-305604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:54:27.577 [DEBUG] [Thread-305604] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:54:27.578 [DEBUG] [Thread-305604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:54:27.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:54:27.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:54:27.637 [DEBUG] [Thread-305604] [transport.py] [_log()] userauth is OK
2025-12-24T16:54:27.637 [DEBUG] [Thread-305604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:54:27.638 [DEBUG] [Thread-305604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:54:27.638 [DEBUG] [Thread-305604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:54:27.638 [DEBUG] [Thread-305604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:54:27.658 [INFO] [Thread-305604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:54:27.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:54:27.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:54:28.514 [DEBUG] [Thread-305604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:54:28.515 [DEBUG] [Thread-305604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:54:28.560 [DEBUG] [Thread-305604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:54:28.560 [DEBUG] [Thread-305604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:54:28.569 [DEBUG] [Thread-305604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:54:28.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:54:28.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:54:28.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:54:28.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:54:28.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:54:28.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:54:28.602 [DEBUG] [Thread-305604] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:54:35.891 [DEBUG] [Thread-305606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:54:37.382 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:54:37.384 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:54:51.086 [DEBUG] [Thread-305607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:54:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:54:58.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:54:58.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:54:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 54, 21), 20.59, 25.63, 0.0, 25.69, 22.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:54:59.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:54:21
2025-12-24T16:54:59.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:54:59.984 [DEBUG] [Thread-305608] [transport.py] [_log()] starting thread (client mode): 0xf81c0dc0
2025-12-24T16:54:59.984 [DEBUG] [Thread-305608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:54:59.991 [DEBUG] [Thread-305608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:54:59.991 [INFO] [Thread-305608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:54:59.996 [DEBUG] [Thread-305608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] client lang: <none>
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] server lang: <none>
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] kex follows: False
2025-12-24T16:54:59.997 [DEBUG] [Thread-305608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:54:59.998 [DEBUG] [Thread-305608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:54:59.998 [DEBUG] [Thread-305608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:54:59.998 [DEBUG] [Thread-305608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:54:59.998 [DEBUG] [Thread-305608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:54:59.998 [DEBUG] [Thread-305608] [transport.py] [_log()] Compression: none
2025-12-24T16:54:59.998 [DEBUG] [Thread-305608] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:55:00.037 [DEBUG] [Thread-305608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:55:00.041 [DEBUG] [Thread-305608] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:55:00.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:55:00.045 [DEBUG] [Thread-305608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:55:00.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:55:00.047 [DEBUG] [Thread-305608] [transport.py] [_log()] userauth is OK
2025-12-24T16:55:00.047 [DEBUG] [Thread-305608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:55:00.047 [DEBUG] [Thread-305608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:55:00.047 [DEBUG] [Thread-305608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:55:00.047 [DEBUG] [Thread-305608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:55:00.077 [INFO] [Thread-305608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:55:00.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:55:00.711 [DEBUG] [Thread-305608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:55:00.711 [DEBUG] [Thread-305608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:55:00.712 [DEBUG] [Thread-305608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:55:00.752 [DEBUG] [Thread-305608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:55:00.752 [DEBUG] [Thread-305608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:55:00.755 [DEBUG] [Thread-305608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:55:00.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:55:00.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:55:00.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:55:00.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:55:00.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:55:00.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:55:00.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:55:00.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:55:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:55:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.621247 -999.00  +23.20  24.59     31   +5.30 1 1 1 1 1   888    0 18.09 8.61 ----- 24.6 24.6 154.7 32.6 26.6 -26.8 26.6 -25.9 27.1 -25.3 27.5 -25.4
2025-12-24T16:55:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:55:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:55:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.621247
2025-12-24T16:55:00.784 [DEBUG] [Thread-305608] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:55:00.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:55:00.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:55:00.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:55:00.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:55:00.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:55:00.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:54:21', tmtdew=20.59, humidity=25.63, cloud=0.0, wind=25.69, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:54:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:55:00.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:55:00.887 [DEBUG] [Thread-305611] [transport.py] [_log()] starting thread (client mode): 0xf81f2350
2025-12-24T16:55:00.887 [DEBUG] [Thread-305611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:55:00.901 [DEBUG] [Thread-305611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:55:00.901 [INFO] [Thread-305611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] client lang: <none>
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] server lang: <none>
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] kex follows: False
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] Compression: none
2025-12-24T16:55:00.909 [DEBUG] [Thread-305611] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:55:00.967 [DEBUG] [Thread-305611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:55:00.967 [DEBUG] [Thread-305611] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:55:00.968 [DEBUG] [Thread-305611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:55:00.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:55:00.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:55:01.023 [DEBUG] [Thread-305611] [transport.py] [_log()] userauth is OK
2025-12-24T16:55:01.023 [DEBUG] [Thread-305611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:55:01.023 [DEBUG] [Thread-305611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:55:01.023 [DEBUG] [Thread-305611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:55:01.023 [DEBUG] [Thread-305611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:55:01.039 [INFO] [Thread-305611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:55:01.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:55:01.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:55:01.874 [DEBUG] [Thread-305611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:55:01.874 [DEBUG] [Thread-305611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:55:01.923 [DEBUG] [Thread-305611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:55:01.923 [DEBUG] [Thread-305611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:55:01.935 [DEBUG] [Thread-305611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:55:01.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:55: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')
2025-12-24T16:55:01.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:55:01.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:55:01.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:55:01.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:55:01.969 [DEBUG] [Thread-305611] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:55:06.184 [DEBUG] [Thread-305613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:55:21.397 [DEBUG] [Thread-305614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:55:22.069 [DEBUG] [Thread-305615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:55:32.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:55:32.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:55:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:55:33.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 54, 56), 20.54, 26.18, 0.0, 33.17, 23.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:55:33.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:54:56
2025-12-24T16:55:33.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:55:33.402 [DEBUG] [Thread-305616] [transport.py] [_log()] starting thread (client mode): 0xf572eda0
2025-12-24T16:55:33.403 [DEBUG] [Thread-305616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:55:33.409 [DEBUG] [Thread-305616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:55:33.409 [INFO] [Thread-305616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] client lang: <none>
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] server lang: <none>
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] kex follows: False
2025-12-24T16:55:33.416 [DEBUG] [Thread-305616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:55:33.417 [DEBUG] [Thread-305616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:55:33.418 [DEBUG] [Thread-305616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:55:33.418 [DEBUG] [Thread-305616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:55:33.418 [DEBUG] [Thread-305616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:55:33.418 [DEBUG] [Thread-305616] [transport.py] [_log()] Compression: none
2025-12-24T16:55:33.418 [DEBUG] [Thread-305616] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:55:33.455 [DEBUG] [Thread-305616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:55:33.458 [DEBUG] [Thread-305616] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:55:33.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:55:33.463 [DEBUG] [Thread-305616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:55:33.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:55:33.465 [DEBUG] [Thread-305616] [transport.py] [_log()] userauth is OK
2025-12-24T16:55:33.465 [DEBUG] [Thread-305616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:55:33.466 [DEBUG] [Thread-305616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:55:33.466 [DEBUG] [Thread-305616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:55:33.466 [DEBUG] [Thread-305616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:55:33.728 [INFO] [Thread-305616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:55:33.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:55:34.415 [DEBUG] [Thread-305616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:55:34.415 [DEBUG] [Thread-305616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:55:34.416 [DEBUG] [Thread-305616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:55:34.457 [DEBUG] [Thread-305616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:55:34.457 [DEBUG] [Thread-305616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:55:34.461 [DEBUG] [Thread-305616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:55:34.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:55:34.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:55:34.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:55:34.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:55:34.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:55:34.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:55:34.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:55:34.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:55:34.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:55:34.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.621595 -999.00  +22.90  23.88     31   +5.30 1 1 1 1 1   888    0 18.44 5.65 ----- 23.9 23.9 157.4 29.8 26.3 -26.2 26.4 -27.0 26.8 -24.5 27.2 -25.8
2025-12-24T16:55:34.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:55:34.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:55:34.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.621595
2025-12-24T16:55:34.506 [DEBUG] [Thread-305616] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:55:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:55:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:55:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:55:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:55:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:55:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:54:56', tmtdew=20.54, humidity=26.18, cloud=0.0, wind=33.17, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:55:05.808', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:55:34.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:55:34.612 [DEBUG] [Thread-305619] [transport.py] [_log()] starting thread (client mode): 0xf81c3880
2025-12-24T16:55:34.612 [DEBUG] [Thread-305619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:55:34.627 [DEBUG] [Thread-305619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:55:34.627 [INFO] [Thread-305619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:55:34.634 [DEBUG] [Thread-305619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] client lang: <none>
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] server lang: <none>
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] kex follows: False
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:55:34.635 [DEBUG] [Thread-305619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:55:34.636 [DEBUG] [Thread-305619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:55:34.636 [DEBUG] [Thread-305619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:55:34.636 [DEBUG] [Thread-305619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:55:34.636 [DEBUG] [Thread-305619] [transport.py] [_log()] Compression: none
2025-12-24T16:55:34.636 [DEBUG] [Thread-305619] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:55:34.689 [DEBUG] [Thread-305619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:55:34.689 [DEBUG] [Thread-305619] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:55:34.690 [DEBUG] [Thread-305619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:55:34.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:55:34.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:55:34.747 [DEBUG] [Thread-305619] [transport.py] [_log()] userauth is OK
2025-12-24T16:55:34.747 [DEBUG] [Thread-305619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:55:34.747 [DEBUG] [Thread-305619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:55:34.747 [DEBUG] [Thread-305619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:55:34.747 [DEBUG] [Thread-305619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:55:34.761 [INFO] [Thread-305619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:55:34.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:55:34.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:55:35.591 [DEBUG] [Thread-305619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:55:35.591 [DEBUG] [Thread-305619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:55:35.639 [DEBUG] [Thread-305619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:55:35.639 [DEBUG] [Thread-305619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:55:35.648 [DEBUG] [Thread-305619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:55:35.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:55:35.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:55:35.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:55:35.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:55:35.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:55:35.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:55:35.682 [DEBUG] [Thread-305619] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:55:36.503 [DEBUG] [Thread-305621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:55:37.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:55:37.536 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:55:51.796 [DEBUG] [Thread-305622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:56:05.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:56:05.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:56:05.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:56:06.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 55, 29), 20.54, 26.16, 0.0, 33.54, 23.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:56:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:55:29
2025-12-24T16:56:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:56:06.910 [DEBUG] [Thread-305623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:56:07.029 [DEBUG] [Thread-305624] [transport.py] [_log()] starting thread (client mode): 0xf5752b60
2025-12-24T16:56:07.030 [DEBUG] [Thread-305624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:56:07.045 [DEBUG] [Thread-305624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:56:07.045 [INFO] [Thread-305624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] client lang: <none>
2025-12-24T16:56:07.048 [DEBUG] [Thread-305624] [transport.py] [_log()] server lang: <none>
2025-12-24T16:56:07.049 [DEBUG] [Thread-305624] [transport.py] [_log()] kex follows: False
2025-12-24T16:56:07.049 [DEBUG] [Thread-305624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:56:07.049 [DEBUG] [Thread-305624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:56:07.049 [DEBUG] [Thread-305624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:56:07.049 [DEBUG] [Thread-305624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:56:07.049 [DEBUG] [Thread-305624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:56:07.049 [DEBUG] [Thread-305624] [transport.py] [_log()] Compression: none
2025-12-24T16:56:07.049 [DEBUG] [Thread-305624] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:56:07.082 [DEBUG] [Thread-305624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:56:07.085 [DEBUG] [Thread-305624] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:56:07.086 [DEBUG] [Thread-305624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:56:07.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:56:07.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:56:07.089 [DEBUG] [Thread-305624] [transport.py] [_log()] userauth is OK
2025-12-24T16:56:07.089 [DEBUG] [Thread-305624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:56:07.089 [DEBUG] [Thread-305624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:56:07.089 [DEBUG] [Thread-305624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:56:07.089 [DEBUG] [Thread-305624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:56:07.107 [INFO] [Thread-305624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:56:07.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:56:07.747 [DEBUG] [Thread-305624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:56:07.747 [DEBUG] [Thread-305624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:56:07.749 [DEBUG] [Thread-305624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:56:07.789 [DEBUG] [Thread-305624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:56:07.789 [DEBUG] [Thread-305624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:56:07.792 [DEBUG] [Thread-305624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:56:07.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:56:07.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:56:07.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:56:07.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:56:07.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:56:07.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:56:07.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:56:07.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:56:07.825 [DEBUG] [Thread-305624] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:56:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:56:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.621942 -999.00  +22.80  18.72     32   +5.30 1 1 1 1 1   888    0 18.67 2.91 ----- 18.7 18.7 154.6 31.2 26.2 -26.0 26.2 -25.6 26.6 -24.4 27.1 -24.7
2025-12-24T16:56:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:56:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:56:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.621942
2025-12-24T16:56:07.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:56:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:56:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:56:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:56:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:56:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:55:29', tmtdew=20.54, humidity=26.16, cloud=0.0, wind=33.54, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:55:35.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:56:07.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:56:07.954 [DEBUG] [Thread-305627] [transport.py] [_log()] starting thread (client mode): 0xf5752050
2025-12-24T16:56:07.954 [DEBUG] [Thread-305627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:56:07.969 [DEBUG] [Thread-305627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:56:07.969 [INFO] [Thread-305627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] client lang: <none>
2025-12-24T16:56:07.977 [DEBUG] [Thread-305627] [transport.py] [_log()] server lang: <none>
2025-12-24T16:56:07.978 [DEBUG] [Thread-305627] [transport.py] [_log()] kex follows: False
2025-12-24T16:56:07.978 [DEBUG] [Thread-305627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:56:07.978 [DEBUG] [Thread-305627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:56:07.978 [DEBUG] [Thread-305627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:56:07.978 [DEBUG] [Thread-305627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:56:07.978 [DEBUG] [Thread-305627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:56:07.978 [DEBUG] [Thread-305627] [transport.py] [_log()] Compression: none
2025-12-24T16:56:07.978 [DEBUG] [Thread-305627] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:56:08.036 [DEBUG] [Thread-305627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:56:08.036 [DEBUG] [Thread-305627] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:56:08.037 [DEBUG] [Thread-305627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:56:08.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:56:08.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:56:08.091 [DEBUG] [Thread-305627] [transport.py] [_log()] userauth is OK
2025-12-24T16:56:08.092 [DEBUG] [Thread-305627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:56:08.092 [DEBUG] [Thread-305627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:56:08.092 [DEBUG] [Thread-305627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:56:08.092 [DEBUG] [Thread-305627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:56:08.111 [INFO] [Thread-305627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:56:08.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:56:08.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:56:08.977 [DEBUG] [Thread-305627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:56:08.977 [DEBUG] [Thread-305627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:56:09.016 [DEBUG] [Thread-305627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:56:09.016 [DEBUG] [Thread-305627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:56:09.025 [DEBUG] [Thread-305627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:56:09.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:56:09.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:56:09.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:56:09.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:56:09.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:56:09.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:56:09.058 [DEBUG] [Thread-305627] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:56:22.023 [DEBUG] [Thread-305629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:56:22.333 [DEBUG] [Thread-305630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:56:37.206 [DEBUG] [Thread-305631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:56:37.676 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:56:37.678 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:56:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:56:39.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:56:39.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:56:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 56, 3), 20.59, 26.09, 0.0, 34.6, 23.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:56:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:56:03
2025-12-24T16:56:40.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:56:40.371 [DEBUG] [Thread-305632] [transport.py] [_log()] starting thread (client mode): 0xf574d330
2025-12-24T16:56:40.372 [DEBUG] [Thread-305632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:56:40.383 [DEBUG] [Thread-305632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:56:40.383 [INFO] [Thread-305632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:56:40.388 [DEBUG] [Thread-305632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] client lang: <none>
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] server lang: <none>
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] kex follows: False
2025-12-24T16:56:40.389 [DEBUG] [Thread-305632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:56:40.390 [DEBUG] [Thread-305632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:56:40.390 [DEBUG] [Thread-305632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:56:40.390 [DEBUG] [Thread-305632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:56:40.390 [DEBUG] [Thread-305632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:56:40.390 [DEBUG] [Thread-305632] [transport.py] [_log()] Compression: none
2025-12-24T16:56:40.390 [DEBUG] [Thread-305632] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:56:40.426 [DEBUG] [Thread-305632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:56:40.431 [DEBUG] [Thread-305632] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:56:40.433 [DEBUG] [Thread-305632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:56:40.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:56:40.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:56:40.441 [DEBUG] [Thread-305632] [transport.py] [_log()] userauth is OK
2025-12-24T16:56:40.441 [DEBUG] [Thread-305632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:56:40.441 [DEBUG] [Thread-305632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:56:40.441 [DEBUG] [Thread-305632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:56:40.441 [DEBUG] [Thread-305632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:56:40.469 [INFO] [Thread-305632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:56:40.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:56:41.122 [DEBUG] [Thread-305632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:56:41.122 [DEBUG] [Thread-305632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:56:41.124 [DEBUG] [Thread-305632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:56:41.163 [DEBUG] [Thread-305632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:56:41.163 [DEBUG] [Thread-305632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:56:41.168 [DEBUG] [Thread-305632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:56:41.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:56:41.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:56:41.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:56:41.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:56:41.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:56:41.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:56:41.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:56:41.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:56:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:56:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.622289 -999.00  +22.90  20.16     32   +5.30 1 1 1 1 1   888    0 17.96 -0.41 ----- 20.2 20.2 160.4 24.6 26.2 -25.0 26.1 -24.9 26.6 -24.3 26.9 -23.8
2025-12-24T16:56:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:56:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:56:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.622289
2025-12-24T16:56:41.207 [DEBUG] [Thread-305632] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:56:41.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:56:41.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:56:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:56:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:56:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:56:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:56:03', tmtdew=20.59, humidity=26.09, cloud=0.0, wind=34.6, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:56:05.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:56:41.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:56:41.315 [DEBUG] [Thread-305635] [transport.py] [_log()] starting thread (client mode): 0xf81f1cc0
2025-12-24T16:56:41.315 [DEBUG] [Thread-305635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:56:41.330 [DEBUG] [Thread-305635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:56:41.330 [INFO] [Thread-305635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:56:41.337 [DEBUG] [Thread-305635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:56:41.337 [DEBUG] [Thread-305635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:56:41.337 [DEBUG] [Thread-305635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:56:41.337 [DEBUG] [Thread-305635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:56:41.337 [DEBUG] [Thread-305635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:56:41.337 [DEBUG] [Thread-305635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] client lang: <none>
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] server lang: <none>
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] kex follows: False
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] Compression: none
2025-12-24T16:56:41.338 [DEBUG] [Thread-305635] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:56:41.396 [DEBUG] [Thread-305635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:56:41.397 [DEBUG] [Thread-305635] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:56:41.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:56:41.398 [DEBUG] [Thread-305635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:56:41.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:56:41.452 [DEBUG] [Thread-305635] [transport.py] [_log()] userauth is OK
2025-12-24T16:56:41.452 [DEBUG] [Thread-305635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:56:41.452 [DEBUG] [Thread-305635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:56:41.452 [DEBUG] [Thread-305635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:56:41.453 [DEBUG] [Thread-305635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:56:41.471 [INFO] [Thread-305635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:56:41.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:56:41.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:56:42.279 [DEBUG] [Thread-305635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:56:42.279 [DEBUG] [Thread-305635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:56:42.326 [DEBUG] [Thread-305635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:56:42.326 [DEBUG] [Thread-305635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:56:42.335 [DEBUG] [Thread-305635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:56:42.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:56:42.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:56:42.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:56:42.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:56:42.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:56:42.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:56:42.373 [DEBUG] [Thread-305635] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:56:52.338 [DEBUG] [Thread-305637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:57:07.549 [DEBUG] [Thread-305638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:57:12.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:57:12.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:57:12.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:57:13.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 56, 36), 20.4, 26.14, 0.0, 25.6, 22.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:57:13.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:56:36
2025-12-24T16:57:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:57:13.905 [DEBUG] [Thread-305639] [transport.py] [_log()] starting thread (client mode): 0xf572a530
2025-12-24T16:57:13.906 [DEBUG] [Thread-305639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:57:13.912 [DEBUG] [Thread-305639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:57:13.912 [INFO] [Thread-305639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:57:13.917 [DEBUG] [Thread-305639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:57:13.917 [DEBUG] [Thread-305639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:57:13.917 [DEBUG] [Thread-305639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:57:13.917 [DEBUG] [Thread-305639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:57:13.917 [DEBUG] [Thread-305639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:57:13.917 [DEBUG] [Thread-305639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:57:13.917 [DEBUG] [Thread-305639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:57:13.917 [DEBUG] [Thread-305639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] client lang: <none>
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] server lang: <none>
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] kex follows: False
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:57:13.918 [DEBUG] [Thread-305639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:57:13.919 [DEBUG] [Thread-305639] [transport.py] [_log()] Compression: none
2025-12-24T16:57:13.919 [DEBUG] [Thread-305639] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:57:13.946 [DEBUG] [Thread-305639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:57:13.949 [DEBUG] [Thread-305639] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:57:13.950 [DEBUG] [Thread-305639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:57:13.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:57:13.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:57:13.954 [DEBUG] [Thread-305639] [transport.py] [_log()] userauth is OK
2025-12-24T16:57:13.954 [DEBUG] [Thread-305639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:57:13.954 [DEBUG] [Thread-305639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:57:13.954 [DEBUG] [Thread-305639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:57:13.954 [DEBUG] [Thread-305639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:57:13.976 [INFO] [Thread-305639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:57:13.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:57:14.643 [DEBUG] [Thread-305639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:57:14.643 [DEBUG] [Thread-305639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:57:14.644 [DEBUG] [Thread-305639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:57:14.685 [DEBUG] [Thread-305639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:57:14.685 [DEBUG] [Thread-305639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:57:14.688 [DEBUG] [Thread-305639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:57:14.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:57:14.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:57:14.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:57:14.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:57:14.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:57:14.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:57:14.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:57:14.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:57:14.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:57:14.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.622637 -999.00  +22.90  20.91     32   +5.30 1 1 1 1 1   888    0 17.86 -4.63 ----- 20.9 20.9 145.8 28.3 26.1 -24.9 26.0 -25.7 26.5 -23.6 26.8 -23.9
2025-12-24T16:57:14.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:57:14.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:57:14.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.622637
2025-12-24T16:57:14.718 [DEBUG] [Thread-305639] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:57:14.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:57:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:57:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:57:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:57:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:57:14.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:56:36', tmtdew=20.4, humidity=26.14, cloud=0.0, wind=25.6, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:56:35.837', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:57:14.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:57:14.816 [DEBUG] [Thread-305642] [transport.py] [_log()] starting thread (client mode): 0xf57295d0
2025-12-24T16:57:14.816 [DEBUG] [Thread-305642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:57:14.831 [DEBUG] [Thread-305642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:57:14.831 [INFO] [Thread-305642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] client lang: <none>
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] server lang: <none>
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] kex follows: False
2025-12-24T16:57:14.838 [DEBUG] [Thread-305642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:57:14.839 [DEBUG] [Thread-305642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:57:14.839 [DEBUG] [Thread-305642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:57:14.839 [DEBUG] [Thread-305642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:57:14.839 [DEBUG] [Thread-305642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:57:14.839 [DEBUG] [Thread-305642] [transport.py] [_log()] Compression: none
2025-12-24T16:57:14.839 [DEBUG] [Thread-305642] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:57:14.894 [DEBUG] [Thread-305642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:57:14.894 [DEBUG] [Thread-305642] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:57:14.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:57:14.894 [DEBUG] [Thread-305642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:57:14.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:57:14.951 [DEBUG] [Thread-305642] [transport.py] [_log()] userauth is OK
2025-12-24T16:57:14.952 [DEBUG] [Thread-305642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:57:14.952 [DEBUG] [Thread-305642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:57:14.952 [DEBUG] [Thread-305642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:57:14.952 [DEBUG] [Thread-305642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:57:14.965 [INFO] [Thread-305642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:57:14.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:57:14.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:57:15.782 [DEBUG] [Thread-305642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:57:15.782 [DEBUG] [Thread-305642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:57:15.829 [DEBUG] [Thread-305642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:57:15.829 [DEBUG] [Thread-305642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:57:15.837 [DEBUG] [Thread-305642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:57:15.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:57:15.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:57:15.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:57:15.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:57:15.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:57:15.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:57:15.871 [DEBUG] [Thread-305642] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:57:22.569 [DEBUG] [Thread-305644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:57:22.631 [DEBUG] [Thread-305645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:57:37.819 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:57:37.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:57:37.832 [DEBUG] [Thread-305646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:57:45.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:57:45.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:57:45.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
2025-12-24T16:57:46.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 57, 9), 20.32, 26.24, 0.0, 22.0, 22.76, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:57:46.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:57:09
2025-12-24T16:57:46.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:57:47.079 [DEBUG] [Thread-305647] [transport.py] [_log()] starting thread (client mode): 0xf81e4d30
2025-12-24T16:57:47.079 [DEBUG] [Thread-305647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:57:47.092 [DEBUG] [Thread-305647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:57:47.092 [INFO] [Thread-305647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] client lang: <none>
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] server lang: <none>
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] kex follows: False
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:57:47.095 [DEBUG] [Thread-305647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:57:47.096 [DEBUG] [Thread-305647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:57:47.096 [DEBUG] [Thread-305647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:57:47.096 [DEBUG] [Thread-305647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:57:47.096 [DEBUG] [Thread-305647] [transport.py] [_log()] Compression: none
2025-12-24T16:57:47.096 [DEBUG] [Thread-305647] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:57:47.121 [DEBUG] [Thread-305647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:57:47.122 [DEBUG] [Thread-305647] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:57:47.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:57:47.123 [DEBUG] [Thread-305647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:57:47.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:57:47.126 [DEBUG] [Thread-305647] [transport.py] [_log()] userauth is OK
2025-12-24T16:57:47.126 [DEBUG] [Thread-305647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:57:47.126 [DEBUG] [Thread-305647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:57:47.126 [DEBUG] [Thread-305647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:57:47.126 [DEBUG] [Thread-305647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:57:47.137 [INFO] [Thread-305647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:57:47.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:57:47.791 [DEBUG] [Thread-305647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:57:47.792 [DEBUG] [Thread-305647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:57:47.793 [DEBUG] [Thread-305647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:57:47.832 [DEBUG] [Thread-305647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:57:47.833 [DEBUG] [Thread-305647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:57:47.836 [DEBUG] [Thread-305647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:57:47.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:57:47.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:57:47.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:57:47.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:57:47.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:57:47.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:57:47.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:57:47.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:57:47.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:57:47.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.622984 -999.00  +22.90  12.35     32   +5.30 1 1 1 1 1   888    0 17.90 -7.85 ----- 12.3 12.3 158.2 20.5 26.1 -24.5 26.0 -24.5 26.6 -22.3 26.9 -22.3
2025-12-24T16:57:47.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:57:47.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:57:47.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.622984
2025-12-24T16:57:47.869 [DEBUG] [Thread-305647] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:57:47.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:57:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:57:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:57:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:57:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:57:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:57:09', tmtdew=20.32, humidity=26.24, cloud=0.0, wind=22.0, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:57:05.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:57:47.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:57:47.961 [DEBUG] [Thread-305650] [transport.py] [_log()] starting thread (client mode): 0xf5718850
2025-12-24T16:57:47.961 [DEBUG] [Thread-305650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:57:47.976 [DEBUG] [Thread-305650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:57:47.976 [INFO] [Thread-305650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:57:47.983 [DEBUG] [Thread-305650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:57:47.983 [DEBUG] [Thread-305650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:57:47.983 [DEBUG] [Thread-305650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:57:47.983 [DEBUG] [Thread-305650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] client lang: <none>
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] server lang: <none>
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] kex follows: False
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] Compression: none
2025-12-24T16:57:47.984 [DEBUG] [Thread-305650] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:57:48.047 [DEBUG] [Thread-305650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:57:48.047 [DEBUG] [Thread-305650] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:57:48.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:57:48.048 [DEBUG] [Thread-305650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:57:48.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:57:48.103 [DEBUG] [Thread-305650] [transport.py] [_log()] userauth is OK
2025-12-24T16:57:48.103 [DEBUG] [Thread-305650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:57:48.103 [DEBUG] [Thread-305650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:57:48.104 [DEBUG] [Thread-305650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:57:48.104 [DEBUG] [Thread-305650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:57:48.126 [INFO] [Thread-305650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:57:48.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:57:48.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:57:48.987 [DEBUG] [Thread-305650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:57:48.987 [DEBUG] [Thread-305650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:57:49.034 [DEBUG] [Thread-305650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:57:49.034 [DEBUG] [Thread-305650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:57:49.045 [DEBUG] [Thread-305650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:57:49.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:57:49.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:57:49.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:57:49.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:57:49.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:57:49.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:57:49.079 [DEBUG] [Thread-305650] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:57:52.910 [DEBUG] [Thread-305652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:58:08.077 [DEBUG] [Thread-305653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:58:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:58:19.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:58:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:58:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 57, 42), 20.13, 26.39, 0.0, 21.4, 22.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:58:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:57:42
2025-12-24T16:58:20.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:58:20.370 [DEBUG] [Thread-305654] [transport.py] [_log()] starting thread (client mode): 0xf81e7a30
2025-12-24T16:58:20.371 [DEBUG] [Thread-305654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:58:20.384 [DEBUG] [Thread-305654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:58:20.384 [INFO] [Thread-305654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:58:20.389 [DEBUG] [Thread-305654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:58:20.389 [DEBUG] [Thread-305654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:58:20.389 [DEBUG] [Thread-305654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:58:20.389 [DEBUG] [Thread-305654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] client lang: <none>
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] server lang: <none>
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] kex follows: False
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:58:20.390 [DEBUG] [Thread-305654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:58:20.391 [DEBUG] [Thread-305654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:58:20.391 [DEBUG] [Thread-305654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:58:20.391 [DEBUG] [Thread-305654] [transport.py] [_log()] Compression: none
2025-12-24T16:58:20.391 [DEBUG] [Thread-305654] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:58:20.423 [DEBUG] [Thread-305654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:58:20.427 [DEBUG] [Thread-305654] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:58:20.428 [DEBUG] [Thread-305654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:58:20.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:58:20.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:58:20.431 [DEBUG] [Thread-305654] [transport.py] [_log()] userauth is OK
2025-12-24T16:58:20.431 [DEBUG] [Thread-305654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:58:20.432 [DEBUG] [Thread-305654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:58:20.432 [DEBUG] [Thread-305654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:58:20.432 [DEBUG] [Thread-305654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:58:20.449 [INFO] [Thread-305654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:58:20.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:58:21.085 [DEBUG] [Thread-305654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:58:21.085 [DEBUG] [Thread-305654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:58:21.085 [DEBUG] [Thread-305654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:58:21.126 [DEBUG] [Thread-305654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:58:21.126 [DEBUG] [Thread-305654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:58:21.129 [DEBUG] [Thread-305654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:58:21.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:58:21.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:58:21.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:58:21.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:58:21.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:58:21.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:58:21.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:58:21.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:58:21.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:58:21.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.623331 -999.00  +23.00  18.27     31   +5.30 1 1 1 1 1   888    0 17.57 -10.80 ----- 18.3 18.3 159.0 21.2 26.1 -24.5 26.0 -24.5 26.5 -23.3 26.9 -23.2
2025-12-24T16:58:21.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:58:21.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:58:21.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.623331
2025-12-24T16:58:21.165 [DEBUG] [Thread-305654] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:58:21.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:58:21.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:58:21.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:58:21.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:58:21.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:58:21.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:57:42', tmtdew=20.13, humidity=26.39, cloud=0.0, wind=21.4, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:57:35.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:58:21.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:58:21.272 [DEBUG] [Thread-305657] [transport.py] [_log()] starting thread (client mode): 0xf81e6d70
2025-12-24T16:58:21.272 [DEBUG] [Thread-305657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:58:21.286 [DEBUG] [Thread-305657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:58:21.286 [INFO] [Thread-305657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:58:21.294 [DEBUG] [Thread-305657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:58:21.294 [DEBUG] [Thread-305657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:58:21.294 [DEBUG] [Thread-305657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:58:21.294 [DEBUG] [Thread-305657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:58:21.294 [DEBUG] [Thread-305657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:58:21.294 [DEBUG] [Thread-305657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:58:21.294 [DEBUG] [Thread-305657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:58:21.294 [DEBUG] [Thread-305657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] client lang: <none>
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] server lang: <none>
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] kex follows: False
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:58:21.295 [DEBUG] [Thread-305657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:58:21.296 [DEBUG] [Thread-305657] [transport.py] [_log()] Compression: none
2025-12-24T16:58:21.296 [DEBUG] [Thread-305657] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:58:21.351 [DEBUG] [Thread-305657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:58:21.351 [DEBUG] [Thread-305657] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:58:21.352 [DEBUG] [Thread-305657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:58:21.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:58:21.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:58:21.407 [DEBUG] [Thread-305657] [transport.py] [_log()] userauth is OK
2025-12-24T16:58:21.407 [DEBUG] [Thread-305657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:58:21.407 [DEBUG] [Thread-305657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:58:21.407 [DEBUG] [Thread-305657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:58:21.407 [DEBUG] [Thread-305657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:58:21.420 [INFO] [Thread-305657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:58:21.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:58:21.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:58:22.270 [DEBUG] [Thread-305657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:58:22.270 [DEBUG] [Thread-305657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:58:22.318 [DEBUG] [Thread-305657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:58:22.318 [DEBUG] [Thread-305657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:58:22.327 [DEBUG] [Thread-305657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:58:22.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:58:22.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:58:22.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:58:22.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:58:22.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:58:22.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:58:22.363 [DEBUG] [Thread-305657] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:58:22.862 [DEBUG] [Thread-305659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:58:23.220 [DEBUG] [Thread-305660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:58:37.964 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:58:37.966 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:58:38.500 [DEBUG] [Thread-305661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:58:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:58:52.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:58:52.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:58:53.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 58, 15), 20.27, 26.19, 0.0, 21.77, 22.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:58:53.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:58:15
2025-12-24T16:58:53.746 [DEBUG] [Thread-305662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:58:54.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:58:54.236 [DEBUG] [Thread-305663] [transport.py] [_log()] starting thread (client mode): 0xf5752da0
2025-12-24T16:58:54.236 [DEBUG] [Thread-305663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:58:54.238 [DEBUG] [Thread-305663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:58:54.239 [INFO] [Thread-305663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] client lang: <none>
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] server lang: <none>
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] kex follows: False
2025-12-24T16:58:54.242 [DEBUG] [Thread-305663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:58:54.243 [DEBUG] [Thread-305663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:58:54.243 [DEBUG] [Thread-305663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:58:54.243 [DEBUG] [Thread-305663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:58:54.243 [DEBUG] [Thread-305663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:58:54.243 [DEBUG] [Thread-305663] [transport.py] [_log()] Compression: none
2025-12-24T16:58:54.243 [DEBUG] [Thread-305663] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:58:54.272 [DEBUG] [Thread-305663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:58:54.275 [DEBUG] [Thread-305663] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:58:54.276 [DEBUG] [Thread-305663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:58:54.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:58:54.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:58:54.317 [DEBUG] [Thread-305663] [transport.py] [_log()] userauth is OK
2025-12-24T16:58:54.318 [DEBUG] [Thread-305663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:58:54.318 [DEBUG] [Thread-305663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:58:54.318 [DEBUG] [Thread-305663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:58:54.318 [DEBUG] [Thread-305663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:58:54.356 [INFO] [Thread-305663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:58:54.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:58:55.003 [DEBUG] [Thread-305663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:58:55.004 [DEBUG] [Thread-305663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:58:55.005 [DEBUG] [Thread-305663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:58:55.045 [DEBUG] [Thread-305663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:58:55.045 [DEBUG] [Thread-305663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:58:55.049 [DEBUG] [Thread-305663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:58:55.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:58:55.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:58:55.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:58:55.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:58:55.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:58:55.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:58:55.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:58:55.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:58:55.078 [DEBUG] [Thread-305663] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:58:55.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:58:55.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.623678 -999.00  +23.10  21.18     31   +5.40 1 1 1 1 1   888    0 17.77 -13.80 ----- 21.2 21.2 141.4 28.6 26.1 -24.7 26.0 -24.5 26.4 -23.5 26.8 -23.6
2025-12-24T16:58:55.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:58:55.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:58:55.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.623678
2025-12-24T16:58:55.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:58:55.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:58:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:58:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:58:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T16:58:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:58:15', tmtdew=20.27, humidity=26.19, cloud=0.0, wind=21.77, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:58:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:58:55.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:58:55.214 [DEBUG] [Thread-305666] [transport.py] [_log()] starting thread (client mode): 0xf5772ec0
2025-12-24T16:58:55.214 [DEBUG] [Thread-305666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:58:55.228 [DEBUG] [Thread-305666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:58:55.229 [INFO] [Thread-305666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] client lang: <none>
2025-12-24T16:58:55.236 [DEBUG] [Thread-305666] [transport.py] [_log()] server lang: <none>
2025-12-24T16:58:55.237 [DEBUG] [Thread-305666] [transport.py] [_log()] kex follows: False
2025-12-24T16:58:55.237 [DEBUG] [Thread-305666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:58:55.237 [DEBUG] [Thread-305666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:58:55.237 [DEBUG] [Thread-305666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:58:55.237 [DEBUG] [Thread-305666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:58:55.237 [DEBUG] [Thread-305666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:58:55.237 [DEBUG] [Thread-305666] [transport.py] [_log()] Compression: none
2025-12-24T16:58:55.237 [DEBUG] [Thread-305666] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:58:55.300 [DEBUG] [Thread-305666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:58:55.301 [DEBUG] [Thread-305666] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:58:55.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:58:55.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:58:55.303 [DEBUG] [Thread-305666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:58:55.359 [DEBUG] [Thread-305666] [transport.py] [_log()] userauth is OK
2025-12-24T16:58:55.359 [DEBUG] [Thread-305666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:58:55.359 [DEBUG] [Thread-305666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:58:55.360 [DEBUG] [Thread-305666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:58:55.360 [DEBUG] [Thread-305666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:58:55.379 [INFO] [Thread-305666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:58:55.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:58:55.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:58:56.193 [DEBUG] [Thread-305666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:58:56.193 [DEBUG] [Thread-305666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:58:56.241 [DEBUG] [Thread-305666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:58:56.241 [DEBUG] [Thread-305666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:58:56.249 [DEBUG] [Thread-305666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:58:56.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:58:56.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T16:58:56.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T16:58:56.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:58:56.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:58:56.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:58:56.282 [DEBUG] [Thread-305666] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:59:08.859 [DEBUG] [Thread-305668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:59:23.434 [DEBUG] [Thread-305669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:59:24.033 [DEBUG] [Thread-305670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:59:26.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:59:26.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:59:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T16:59:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 58, 49), 20.68, 25.53, 0.0, 27.01, 23.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T16:59:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:58:49
2025-12-24T16:59:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T16:59:27.576 [DEBUG] [Thread-305671] [transport.py] [_log()] starting thread (client mode): 0xf5719780
2025-12-24T16:59:27.576 [DEBUG] [Thread-305671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:59:27.590 [DEBUG] [Thread-305671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T16:59:27.590 [INFO] [Thread-305671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] client lang: <none>
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] server lang: <none>
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] kex follows: False
2025-12-24T16:59:27.595 [DEBUG] [Thread-305671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:59:27.596 [DEBUG] [Thread-305671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:59:27.596 [DEBUG] [Thread-305671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:59:27.596 [DEBUG] [Thread-305671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:59:27.596 [DEBUG] [Thread-305671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:59:27.596 [DEBUG] [Thread-305671] [transport.py] [_log()] Compression: none
2025-12-24T16:59:27.596 [DEBUG] [Thread-305671] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:59:27.629 [DEBUG] [Thread-305671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:59:27.632 [DEBUG] [Thread-305671] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:59:27.633 [DEBUG] [Thread-305671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T16:59:27.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T16:59:27.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:59:27.636 [DEBUG] [Thread-305671] [transport.py] [_log()] userauth is OK
2025-12-24T16:59:27.636 [DEBUG] [Thread-305671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:59:27.636 [DEBUG] [Thread-305671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:59:27.636 [DEBUG] [Thread-305671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T16:59:27.636 [DEBUG] [Thread-305671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:59:27.658 [INFO] [Thread-305671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:59:27.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:59:28.280 [DEBUG] [Thread-305671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:59:28.280 [DEBUG] [Thread-305671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:59:28.282 [DEBUG] [Thread-305671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T16:59:28.320 [DEBUG] [Thread-305671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:59:28.320 [DEBUG] [Thread-305671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:59:28.322 [DEBUG] [Thread-305671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:59:28.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:59:28.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T16:59:28.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T16:59:28.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T16:59:28.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:59:28.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T16:59:28.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:59:28.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:59:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T16:59:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.624025 -999.00  +23.00  22.80     31   +5.30 1 2 1 1 1   888    0 17.89 -16.18 ----- 22.8 22.8 145.8 31.8 26.1 -22.8 25.9 -25.3 26.6 -20.0 26.7 -22.8
2025-12-24T16:59:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T16:59:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T16:59:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.624025
2025-12-24T16:59:28.351 [DEBUG] [Thread-305671] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:59:28.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T16:59:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T16:59:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T16:59:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T16:59:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T16:59:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:58:49', tmtdew=20.68, humidity=25.53, cloud=0.0, wind=27.01, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:58:35.760', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T16:59:28.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T16:59:28.456 [DEBUG] [Thread-305674] [transport.py] [_log()] starting thread (client mode): 0xf5719900
2025-12-24T16:59:28.456 [DEBUG] [Thread-305674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T16:59:28.470 [DEBUG] [Thread-305674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T16:59:28.470 [INFO] [Thread-305674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] client lang: <none>
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] server lang: <none>
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] kex follows: False
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] Compression: none
2025-12-24T16:59:28.478 [DEBUG] [Thread-305674] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T16:59:28.534 [DEBUG] [Thread-305674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T16:59:28.534 [DEBUG] [Thread-305674] [transport.py] [_log()] Switch to new keys ...
2025-12-24T16:59:28.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T16:59:28.535 [DEBUG] [Thread-305674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T16:59:28.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T16:59:28.591 [DEBUG] [Thread-305674] [transport.py] [_log()] userauth is OK
2025-12-24T16:59:28.591 [DEBUG] [Thread-305674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T16:59:28.591 [DEBUG] [Thread-305674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T16:59:28.591 [DEBUG] [Thread-305674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T16:59:28.591 [DEBUG] [Thread-305674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T16:59:28.605 [INFO] [Thread-305674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T16:59:28.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T16:59:28.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T16:59:29.448 [DEBUG] [Thread-305674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T16:59:29.448 [DEBUG] [Thread-305674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T16:59:29.495 [DEBUG] [Thread-305674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T16:59:29.495 [DEBUG] [Thread-305674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T16:59:29.504 [DEBUG] [Thread-305674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T16:59:29.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T16:59:29.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')
2025-12-24T16:59:29.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
2025-12-24T16:59:29.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T16:59:29.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T16:59:29.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T16:59:29.537 [DEBUG] [Thread-305674] [transport.py] [_log()] EOF in transport thread
2025-12-24T16:59:38.110 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:59:38.113 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:59:39.152 [DEBUG] [Thread-305676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:59:54.371 [DEBUG] [Thread-305677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T16:59:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T16:59:59.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T16:59:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:00:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 59, 22), 20.7, 25.5, 0.0, 27.21, 23.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:00:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:59:22
2025-12-24T17:00:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:00:00.810 [DEBUG] [Thread-305678] [transport.py] [_log()] starting thread (client mode): 0xf81f21d0
2025-12-24T17:00:00.810 [DEBUG] [Thread-305678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:00:00.824 [DEBUG] [Thread-305678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:00:00.824 [INFO] [Thread-305678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] client lang: <none>
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] server lang: <none>
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] kex follows: False
2025-12-24T17:00:00.828 [DEBUG] [Thread-305678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:00:00.829 [DEBUG] [Thread-305678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:00:00.829 [DEBUG] [Thread-305678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:00:00.829 [DEBUG] [Thread-305678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:00:00.829 [DEBUG] [Thread-305678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:00:00.829 [DEBUG] [Thread-305678] [transport.py] [_log()] Compression: none
2025-12-24T17:00:00.829 [DEBUG] [Thread-305678] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:00:00.858 [DEBUG] [Thread-305678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:00:00.862 [DEBUG] [Thread-305678] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:00:00.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:00:00.865 [DEBUG] [Thread-305678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:00:00.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:00:00.868 [DEBUG] [Thread-305678] [transport.py] [_log()] userauth is OK
2025-12-24T17:00:00.868 [DEBUG] [Thread-305678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:00:00.868 [DEBUG] [Thread-305678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:00:00.869 [DEBUG] [Thread-305678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:00:00.869 [DEBUG] [Thread-305678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:00:00.901 [INFO] [Thread-305678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:00:00.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:00:01.518 [DEBUG] [Thread-305678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:00:01.518 [DEBUG] [Thread-305678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:00:01.911 [DEBUG] [Thread-305678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:00:01.911 [DEBUG] [Thread-305678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:00:01.912 [DEBUG] [Thread-305678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:00:01.916 [DEBUG] [Thread-305678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:00:01.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:00:01.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:00:01.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:00:01.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:00:01.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:00:01.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:00:01.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:00:01.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:00:01.935 [DEBUG] [Thread-305678] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:00:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:00:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.624719 -999.00  +22.90  21.26     32   +5.30 1 1 1 1 1   888    0 17.40 -20.66 ----- 21.3 21.3 129.2 25.2 26.2 -24.3 26.4 -23.2 27.1 -23.7 27.3 -21.4
2025-12-24T17:00:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:00:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:00:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.624719
2025-12-24T17:00:01.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:00:01.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:00:01.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:00:01.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:00:01.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:00:01.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:59:22', tmtdew=20.7, humidity=25.5, cloud=0.0, wind=27.21, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T14:59:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:00:02.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:00:02.068 [DEBUG] [Thread-305681] [transport.py] [_log()] starting thread (client mode): 0xf81f02e0
2025-12-24T17:00:02.068 [DEBUG] [Thread-305681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:00:02.083 [DEBUG] [Thread-305681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:00:02.084 [INFO] [Thread-305681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] client lang: <none>
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] server lang: <none>
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] kex follows: False
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:00:02.091 [DEBUG] [Thread-305681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:00:02.092 [DEBUG] [Thread-305681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:00:02.092 [DEBUG] [Thread-305681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:00:02.092 [DEBUG] [Thread-305681] [transport.py] [_log()] Compression: none
2025-12-24T17:00:02.092 [DEBUG] [Thread-305681] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:00:02.150 [DEBUG] [Thread-305681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:00:02.151 [DEBUG] [Thread-305681] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:00:02.151 [DEBUG] [Thread-305681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:00:02.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:00:02.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:00:02.207 [DEBUG] [Thread-305681] [transport.py] [_log()] userauth is OK
2025-12-24T17:00:02.207 [DEBUG] [Thread-305681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:00:02.208 [DEBUG] [Thread-305681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:00:02.208 [DEBUG] [Thread-305681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:00:02.208 [DEBUG] [Thread-305681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:00:02.223 [INFO] [Thread-305681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:00:02.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:00:02.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:00:03.059 [DEBUG] [Thread-305681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:00:03.059 [DEBUG] [Thread-305681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:00:03.107 [DEBUG] [Thread-305681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:00:03.107 [DEBUG] [Thread-305681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:00:03.115 [DEBUG] [Thread-305681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:00:03.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:00: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')
2025-12-24T17:00:03.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:00:03.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:00:03.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:00:03.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:00:03.153 [DEBUG] [Thread-305681] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:00:09.474 [DEBUG] [Thread-305683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:00:23.858 [DEBUG] [Thread-305684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:00:24.597 [DEBUG] [Thread-305685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:00:33.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:00:33.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:00:33.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:00:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 16, 59, 56), 20.57, 26.11, 0.0, 26.43, 23.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:00:34.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 16:59:56
2025-12-24T17:00:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:00:34.647 [DEBUG] [Thread-305686] [transport.py] [_log()] starting thread (client mode): 0xf81f3f10
2025-12-24T17:00:34.648 [DEBUG] [Thread-305686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:00:34.657 [DEBUG] [Thread-305686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:00:34.657 [INFO] [Thread-305686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:00:34.663 [DEBUG] [Thread-305686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:00:34.663 [DEBUG] [Thread-305686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:00:34.663 [DEBUG] [Thread-305686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:00:34.663 [DEBUG] [Thread-305686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:00:34.663 [DEBUG] [Thread-305686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:00:34.663 [DEBUG] [Thread-305686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] client lang: <none>
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] server lang: <none>
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] kex follows: False
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:00:34.664 [DEBUG] [Thread-305686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:00:34.665 [DEBUG] [Thread-305686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:00:34.665 [DEBUG] [Thread-305686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:00:34.665 [DEBUG] [Thread-305686] [transport.py] [_log()] Compression: none
2025-12-24T17:00:34.665 [DEBUG] [Thread-305686] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:00:34.696 [DEBUG] [Thread-305686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:00:34.699 [DEBUG] [Thread-305686] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:00:34.701 [DEBUG] [Thread-305686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:00:34.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:00:34.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:00:34.705 [DEBUG] [Thread-305686] [transport.py] [_log()] userauth is OK
2025-12-24T17:00:34.705 [DEBUG] [Thread-305686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:00:34.705 [DEBUG] [Thread-305686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:00:34.705 [DEBUG] [Thread-305686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:00:34.705 [DEBUG] [Thread-305686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:00:34.735 [INFO] [Thread-305686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:00:34.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:00:35.397 [DEBUG] [Thread-305686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:00:35.397 [DEBUG] [Thread-305686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:00:35.397 [DEBUG] [Thread-305686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:00:35.438 [DEBUG] [Thread-305686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:00:35.438 [DEBUG] [Thread-305686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:00:35.441 [DEBUG] [Thread-305686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:00:35.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:00:35.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:00:35.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:00:35.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:00:35.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:00:35.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:00:35.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:00:35.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:00:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:00:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.625067 -999.00  +23.10  18.45     31   +5.30 1 1 1 1 1   888    0 17.01 -23.60 ----- 18.4 18.4 139.6 23.8 26.1 -25.1 -999.0 -999.0 26.9 -24.4 27.2 -24.6
2025-12-24T17:00:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:00:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:00:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.625067
2025-12-24T17:00:35.474 [DEBUG] [Thread-305686] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:00:35.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:00:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:00:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:00:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:00:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:00:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T16:59:56', tmtdew=20.57, humidity=26.11, cloud=0.0, wind=26.43, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:00:05.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:00:35.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:00:35.577 [DEBUG] [Thread-305689] [transport.py] [_log()] starting thread (client mode): 0xf572e380
2025-12-24T17:00:35.577 [DEBUG] [Thread-305689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:00:35.591 [DEBUG] [Thread-305689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:00:35.591 [INFO] [Thread-305689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] client lang: <none>
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] server lang: <none>
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] kex follows: False
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:00:35.599 [DEBUG] [Thread-305689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:00:35.600 [DEBUG] [Thread-305689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:00:35.600 [DEBUG] [Thread-305689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:00:35.600 [DEBUG] [Thread-305689] [transport.py] [_log()] Compression: none
2025-12-24T17:00:35.600 [DEBUG] [Thread-305689] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:00:35.657 [DEBUG] [Thread-305689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:00:35.658 [DEBUG] [Thread-305689] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:00:35.658 [DEBUG] [Thread-305689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:00:35.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:00:35.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:00:35.715 [DEBUG] [Thread-305689] [transport.py] [_log()] userauth is OK
2025-12-24T17:00:35.715 [DEBUG] [Thread-305689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:00:35.716 [DEBUG] [Thread-305689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:00:35.716 [DEBUG] [Thread-305689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:00:35.716 [DEBUG] [Thread-305689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:00:35.736 [INFO] [Thread-305689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:00:35.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:00:35.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:00:36.566 [DEBUG] [Thread-305689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:00:36.566 [DEBUG] [Thread-305689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:00:36.613 [DEBUG] [Thread-305689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:00:36.613 [DEBUG] [Thread-305689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:00:36.621 [DEBUG] [Thread-305689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:00:36.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:00:36.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:00:36.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:00:36.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:00:36.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:00:36.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:00:36.654 [DEBUG] [Thread-305689] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:00:38.267 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:00:38.268 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:00:39.696 [DEBUG] [Thread-305691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:00:54.927 [DEBUG] [Thread-305692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:01:06.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:01:06.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:01:06.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
2025-12-24T17:01:07.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 0, 29), 20.71, 25.91, 0.0, 25.76, 23.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:01:07.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:00:29
2025-12-24T17:01:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:01:07.922 [DEBUG] [Thread-305693] [transport.py] [_log()] starting thread (client mode): 0xf81f2c50
2025-12-24T17:01:07.923 [DEBUG] [Thread-305693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:01:07.927 [DEBUG] [Thread-305693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:01:07.927 [INFO] [Thread-305693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] client lang: <none>
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] server lang: <none>
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] kex follows: False
2025-12-24T17:01:07.932 [DEBUG] [Thread-305693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:01:07.933 [DEBUG] [Thread-305693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:01:07.933 [DEBUG] [Thread-305693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:01:07.933 [DEBUG] [Thread-305693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:01:07.934 [DEBUG] [Thread-305693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:01:07.934 [DEBUG] [Thread-305693] [transport.py] [_log()] Compression: none
2025-12-24T17:01:07.934 [DEBUG] [Thread-305693] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:01:07.972 [DEBUG] [Thread-305693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:01:07.977 [DEBUG] [Thread-305693] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:01:07.979 [DEBUG] [Thread-305693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:01:07.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:01:07.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:01:07.985 [DEBUG] [Thread-305693] [transport.py] [_log()] userauth is OK
2025-12-24T17:01:07.985 [DEBUG] [Thread-305693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:01:07.986 [DEBUG] [Thread-305693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:01:07.986 [DEBUG] [Thread-305693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:01:07.986 [DEBUG] [Thread-305693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:01:08.013 [INFO] [Thread-305693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:01:08.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:01:08.672 [DEBUG] [Thread-305693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:01:08.672 [DEBUG] [Thread-305693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:01:08.673 [DEBUG] [Thread-305693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:01:08.714 [DEBUG] [Thread-305693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:01:08.714 [DEBUG] [Thread-305693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:01:08.716 [DEBUG] [Thread-305693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:01:08.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:01:08.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:01:08.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:01:08.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:01:08.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:01:08.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:01:08.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:01:08.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:01:08.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:01:08.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.625414 -999.00  +23.30  27.41     31   +5.40 1 2 1 1 1   888    0 17.09 -27.38 ----- 27.4 27.4 156.0 31.6 26.4 -22.8 26.2 -23.4 27.2 -20.4 27.3 -21.2
2025-12-24T17:01:08.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:01:08.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:01:08.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.625414
2025-12-24T17:01:08.746 [DEBUG] [Thread-305693] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:01:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:01:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:01:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:01:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:01:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T17:01:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:00:29', tmtdew=20.71, humidity=25.91, cloud=0.0, wind=25.76, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:00:35.770', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:01:08.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:01:08.847 [DEBUG] [Thread-305696] [transport.py] [_log()] starting thread (client mode): 0xf81f3850
2025-12-24T17:01:08.847 [DEBUG] [Thread-305696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:01:08.866 [DEBUG] [Thread-305696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:01:08.866 [INFO] [Thread-305696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] client lang: <none>
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] server lang: <none>
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] kex follows: False
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] Compression: none
2025-12-24T17:01:08.874 [DEBUG] [Thread-305696] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:01:08.932 [DEBUG] [Thread-305696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:01:08.933 [DEBUG] [Thread-305696] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:01:08.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:01:08.934 [DEBUG] [Thread-305696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:01:08.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:01:08.992 [DEBUG] [Thread-305696] [transport.py] [_log()] userauth is OK
2025-12-24T17:01:08.992 [DEBUG] [Thread-305696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:01:08.992 [DEBUG] [Thread-305696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:01:08.992 [DEBUG] [Thread-305696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:01:08.992 [DEBUG] [Thread-305696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:01:09.015 [INFO] [Thread-305696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:01:09.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:01:09.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:01:09.847 [DEBUG] [Thread-305696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:01:09.847 [DEBUG] [Thread-305696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:01:09.894 [DEBUG] [Thread-305696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:01:09.895 [DEBUG] [Thread-305696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:01:09.904 [DEBUG] [Thread-305696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:01:09.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:01:09.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:01:09.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:01:09.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:01:09.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:01:09.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:01:09.943 [DEBUG] [Thread-305696] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:01:10.051 [DEBUG] [Thread-305698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:01:24.180 [DEBUG] [Thread-305699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:01:25.215 [DEBUG] [Thread-305700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:01:38.428 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:01:38.442 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:01:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:01:39.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:01:39.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:01:40.294 [DEBUG] [Thread-305701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:01:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 1, 3), 20.75, 25.85, 0.0, 25.04, 23.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:01:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:01:03
2025-12-24T17:01:40.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:01:41.143 [DEBUG] [Thread-305702] [transport.py] [_log()] starting thread (client mode): 0xf81f2950
2025-12-24T17:01:41.144 [DEBUG] [Thread-305702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:01:41.147 [DEBUG] [Thread-305702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:01:41.147 [INFO] [Thread-305702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:01:41.151 [DEBUG] [Thread-305702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:01:41.151 [DEBUG] [Thread-305702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] client lang: <none>
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] server lang: <none>
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] kex follows: False
2025-12-24T17:01:41.152 [DEBUG] [Thread-305702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:01:41.153 [DEBUG] [Thread-305702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:01:41.153 [DEBUG] [Thread-305702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:01:41.153 [DEBUG] [Thread-305702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:01:41.153 [DEBUG] [Thread-305702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:01:41.153 [DEBUG] [Thread-305702] [transport.py] [_log()] Compression: none
2025-12-24T17:01:41.153 [DEBUG] [Thread-305702] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:01:41.191 [DEBUG] [Thread-305702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:01:41.195 [DEBUG] [Thread-305702] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:01:41.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:01:41.198 [DEBUG] [Thread-305702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:01:41.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:01:41.203 [DEBUG] [Thread-305702] [transport.py] [_log()] userauth is OK
2025-12-24T17:01:41.203 [DEBUG] [Thread-305702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:01:41.203 [DEBUG] [Thread-305702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:01:41.203 [DEBUG] [Thread-305702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:01:41.204 [DEBUG] [Thread-305702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:01:41.245 [INFO] [Thread-305702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:01:41.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:01:41.902 [DEBUG] [Thread-305702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:01:41.902 [DEBUG] [Thread-305702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:01:41.903 [DEBUG] [Thread-305702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:01:41.943 [DEBUG] [Thread-305702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:01:41.944 [DEBUG] [Thread-305702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:01:41.947 [DEBUG] [Thread-305702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:01:41.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:01:41.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:01:41.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:01:41.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:01:41.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:01:41.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:01:41.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:01:41.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:01:41.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:01:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.625762 -999.00  +23.20  26.81     31   +5.30 1 1 1 1 1   888    0 17.13 -28.20 ----- 26.8 26.8 181.4 32.4 26.5 -23.3 26.4 -26.4 27.5 -20.7 27.6 -22.7
2025-12-24T17:01:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:01:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:01:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.625762
2025-12-24T17:01:41.984 [DEBUG] [Thread-305702] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:01:41.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:01:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:01:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:01:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:01:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:01:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:01:03', tmtdew=20.75, humidity=25.85, cloud=0.0, wind=25.04, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:01:05.837', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:01:42.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:01:42.092 [DEBUG] [Thread-305705] [transport.py] [_log()] starting thread (client mode): 0xf818ba30
2025-12-24T17:01:42.092 [DEBUG] [Thread-305705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:01:42.107 [DEBUG] [Thread-305705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:01:42.107 [INFO] [Thread-305705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:01:42.114 [DEBUG] [Thread-305705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] client lang: <none>
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] server lang: <none>
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] kex follows: False
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] Compression: none
2025-12-24T17:01:42.115 [DEBUG] [Thread-305705] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:01:42.171 [DEBUG] [Thread-305705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:01:42.172 [DEBUG] [Thread-305705] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:01:42.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:01:42.173 [DEBUG] [Thread-305705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:01:42.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:01:42.227 [DEBUG] [Thread-305705] [transport.py] [_log()] userauth is OK
2025-12-24T17:01:42.228 [DEBUG] [Thread-305705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:01:42.228 [DEBUG] [Thread-305705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:01:42.228 [DEBUG] [Thread-305705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:01:42.228 [DEBUG] [Thread-305705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:01:42.246 [INFO] [Thread-305705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:01:42.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:01:42.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:01:43.051 [DEBUG] [Thread-305705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:01:43.051 [DEBUG] [Thread-305705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:01:43.098 [DEBUG] [Thread-305705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:01:43.099 [DEBUG] [Thread-305705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:01:43.107 [DEBUG] [Thread-305705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:01:43.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:01:43.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:01:43.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:01:43.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:01:43.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:01:43.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:01:43.140 [DEBUG] [Thread-305705] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:01:55.411 [DEBUG] [Thread-305707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:02:10.560 [DEBUG] [Thread-305708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:02:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:02:13.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:02:13.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:02:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 1, 36), 20.87, 25.26, 0.0, 28.48, 23.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:02:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:01:36
2025-12-24T17:02:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:02:14.614 [DEBUG] [Thread-305709] [transport.py] [_log()] starting thread (client mode): 0xf5770ac0
2025-12-24T17:02:14.615 [DEBUG] [Thread-305709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:02:14.628 [DEBUG] [Thread-305709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:02:14.628 [INFO] [Thread-305709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] client lang: <none>
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] server lang: <none>
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] kex follows: False
2025-12-24T17:02:14.633 [DEBUG] [Thread-305709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:02:14.634 [DEBUG] [Thread-305709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:02:14.634 [DEBUG] [Thread-305709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:02:14.634 [DEBUG] [Thread-305709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:02:14.634 [DEBUG] [Thread-305709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:02:14.634 [DEBUG] [Thread-305709] [transport.py] [_log()] Compression: none
2025-12-24T17:02:14.634 [DEBUG] [Thread-305709] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:02:14.667 [DEBUG] [Thread-305709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:02:14.671 [DEBUG] [Thread-305709] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:02:14.673 [DEBUG] [Thread-305709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:02:14.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:02:14.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:02:14.678 [DEBUG] [Thread-305709] [transport.py] [_log()] userauth is OK
2025-12-24T17:02:14.679 [DEBUG] [Thread-305709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:02:14.679 [DEBUG] [Thread-305709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:02:14.679 [DEBUG] [Thread-305709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:02:14.679 [DEBUG] [Thread-305709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:02:14.703 [INFO] [Thread-305709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:02:14.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:02:15.340 [DEBUG] [Thread-305709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:02:15.340 [DEBUG] [Thread-305709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:02:15.341 [DEBUG] [Thread-305709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:02:15.382 [DEBUG] [Thread-305709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:02:15.382 [DEBUG] [Thread-305709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:02:15.384 [DEBUG] [Thread-305709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:02:15.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:02:15.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:02:15.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:02:15.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:02:15.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:02:15.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:02:15.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:02:15.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:02:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:02:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.626109 -999.00  +23.10  20.97     31   +5.30 1 1 1 1 1   887    0 17.41 -28.13 ----- 21.0 21.0 176.0 31.6 26.5 -23.7 26.3 -26.6 27.5 -21.5 27.7 -23.1
2025-12-24T17:02:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:02:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:02:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.626109
2025-12-24T17:02:15.411 [DEBUG] [Thread-305709] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:02:15.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:02:15.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:02:15.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:02:15.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:02:15.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:02:15.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:01:36', tmtdew=20.87, humidity=25.26, cloud=0.0, wind=28.48, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:01:35.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:02:15.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:02:15.511 [DEBUG] [Thread-305712] [transport.py] [_log()] starting thread (client mode): 0xf81f1990
2025-12-24T17:02:15.511 [DEBUG] [Thread-305712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:02:15.526 [DEBUG] [Thread-305712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:02:15.526 [INFO] [Thread-305712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] client lang: <none>
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] server lang: <none>
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] kex follows: False
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] Compression: none
2025-12-24T17:02:15.534 [DEBUG] [Thread-305712] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:02:15.590 [DEBUG] [Thread-305712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:02:15.590 [DEBUG] [Thread-305712] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:02:15.590 [DEBUG] [Thread-305712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:02:15.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:02:15.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:02:15.647 [DEBUG] [Thread-305712] [transport.py] [_log()] userauth is OK
2025-12-24T17:02:15.647 [DEBUG] [Thread-305712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:02:15.647 [DEBUG] [Thread-305712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:02:15.647 [DEBUG] [Thread-305712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:02:15.647 [DEBUG] [Thread-305712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:02:15.663 [INFO] [Thread-305712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:02:15.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:02:15.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:02:16.517 [DEBUG] [Thread-305712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:02:16.518 [DEBUG] [Thread-305712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:02:16.565 [DEBUG] [Thread-305712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:02:16.566 [DEBUG] [Thread-305712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:02:16.574 [DEBUG] [Thread-305712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:02:16.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:02:16.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:02:16.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:02:16.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:02:16.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:02:16.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:02:16.606 [DEBUG] [Thread-305712] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:02:24.457 [DEBUG] [Thread-305714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:02:25.671 [DEBUG] [Thread-305715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:02:38.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:02:38.597 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:02:40.819 [DEBUG] [Thread-305716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:02:46.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:02:46.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:02:46.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:02:47.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 2, 9), 21.11, 24.9, 0.0, 30.44, 23.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:02:47.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:02:09
2025-12-24T17:02:47.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:02:47.955 [DEBUG] [Thread-305717] [transport.py] [_log()] starting thread (client mode): 0xf81c0c70
2025-12-24T17:02:47.956 [DEBUG] [Thread-305717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:02:47.965 [DEBUG] [Thread-305717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:02:47.965 [INFO] [Thread-305717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:02:47.969 [DEBUG] [Thread-305717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:02:47.969 [DEBUG] [Thread-305717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:02:47.969 [DEBUG] [Thread-305717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:02:47.969 [DEBUG] [Thread-305717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:02:47.969 [DEBUG] [Thread-305717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:02:47.969 [DEBUG] [Thread-305717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] client lang: <none>
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] server lang: <none>
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] kex follows: False
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] Compression: none
2025-12-24T17:02:47.970 [DEBUG] [Thread-305717] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:02:48.001 [DEBUG] [Thread-305717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:02:48.004 [DEBUG] [Thread-305717] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:02:48.005 [DEBUG] [Thread-305717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:02:48.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:02:48.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:02:48.008 [DEBUG] [Thread-305717] [transport.py] [_log()] userauth is OK
2025-12-24T17:02:48.008 [DEBUG] [Thread-305717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:02:48.009 [DEBUG] [Thread-305717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:02:48.009 [DEBUG] [Thread-305717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:02:48.009 [DEBUG] [Thread-305717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:02:48.028 [INFO] [Thread-305717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:02:48.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:02:48.681 [DEBUG] [Thread-305717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:02:48.682 [DEBUG] [Thread-305717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:02:48.685 [DEBUG] [Thread-305717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:02:48.723 [DEBUG] [Thread-305717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:02:48.723 [DEBUG] [Thread-305717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:02:48.726 [DEBUG] [Thread-305717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:02:48.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:02:48.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:02:48.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:02:48.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:02:48.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:02:48.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:02:48.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:02:48.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:02:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:02:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.626456 -999.00  +23.10  19.34     31   +5.30 1 1 1 1 1   887    0 17.40 -31.85 ----- 19.3 19.3 179.6 26.5 26.6 -24.9 26.4 -26.0 27.7 -23.4 27.9 -22.8
2025-12-24T17:02:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:02:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:02:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.626456
2025-12-24T17:02:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:02:48.768 [DEBUG] [Thread-305717] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:02:09', tmtdew=21.11, humidity=24.9, cloud=0.0, wind=30.44, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:02:05.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:02:48.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:02:48.863 [DEBUG] [Thread-305720] [transport.py] [_log()] starting thread (client mode): 0xf572d540
2025-12-24T17:02:48.863 [DEBUG] [Thread-305720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:02:48.877 [DEBUG] [Thread-305720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:02:48.877 [INFO] [Thread-305720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] client lang: <none>
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] server lang: <none>
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] kex follows: False
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] Compression: none
2025-12-24T17:02:48.885 [DEBUG] [Thread-305720] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:02:48.946 [DEBUG] [Thread-305720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:02:48.946 [DEBUG] [Thread-305720] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:02:48.946 [DEBUG] [Thread-305720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:02:48.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:02:48.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:02:49.003 [DEBUG] [Thread-305720] [transport.py] [_log()] userauth is OK
2025-12-24T17:02:49.004 [DEBUG] [Thread-305720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:02:49.004 [DEBUG] [Thread-305720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:02:49.004 [DEBUG] [Thread-305720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:02:49.004 [DEBUG] [Thread-305720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:02:49.022 [INFO] [Thread-305720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:02:49.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:02:49.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:02:49.860 [DEBUG] [Thread-305720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:02:49.861 [DEBUG] [Thread-305720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:02:49.909 [DEBUG] [Thread-305720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:02:49.909 [DEBUG] [Thread-305720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:02:49.917 [DEBUG] [Thread-305720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:02:49.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:02:49.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:02:49.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:02:49.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:02:49.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:02:49.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:02:49.950 [DEBUG] [Thread-305720] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:02:55.903 [DEBUG] [Thread-305722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:03:11.096 [DEBUG] [Thread-305723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:03:19.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:03:19.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:03:20.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:03:20.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 2, 43), 21.04, 25.28, 0.0, 22.59, 23.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:03:20.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:02:43
2025-12-24T17:03:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:03:21.248 [DEBUG] [Thread-305724] [transport.py] [_log()] starting thread (client mode): 0xf571b490
2025-12-24T17:03:21.249 [DEBUG] [Thread-305724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:03:21.257 [DEBUG] [Thread-305724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:03:21.258 [INFO] [Thread-305724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:03:21.263 [DEBUG] [Thread-305724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:03:21.263 [DEBUG] [Thread-305724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:03:21.263 [DEBUG] [Thread-305724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:03:21.263 [DEBUG] [Thread-305724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] client lang: <none>
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] server lang: <none>
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] kex follows: False
2025-12-24T17:03:21.264 [DEBUG] [Thread-305724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:03:21.265 [DEBUG] [Thread-305724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:03:21.265 [DEBUG] [Thread-305724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:03:21.265 [DEBUG] [Thread-305724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:03:21.265 [DEBUG] [Thread-305724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:03:21.265 [DEBUG] [Thread-305724] [transport.py] [_log()] Compression: none
2025-12-24T17:03:21.265 [DEBUG] [Thread-305724] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:03:21.306 [DEBUG] [Thread-305724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:03:21.310 [DEBUG] [Thread-305724] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:03:21.312 [DEBUG] [Thread-305724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:03:21.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:03:21.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:03:21.317 [DEBUG] [Thread-305724] [transport.py] [_log()] userauth is OK
2025-12-24T17:03:21.317 [DEBUG] [Thread-305724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:03:21.317 [DEBUG] [Thread-305724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:03:21.317 [DEBUG] [Thread-305724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:03:21.317 [DEBUG] [Thread-305724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:03:21.336 [INFO] [Thread-305724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:03:21.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:03:21.991 [DEBUG] [Thread-305724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:03:21.992 [DEBUG] [Thread-305724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:03:21.993 [DEBUG] [Thread-305724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:03:22.032 [DEBUG] [Thread-305724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:03:22.032 [DEBUG] [Thread-305724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:03:22.035 [DEBUG] [Thread-305724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:03:22.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:03:22.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:03:22.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:03:22.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:03:22.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:03:22.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:03:22.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:03:22.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:03:22.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:03:22.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.626803 -999.00  +23.10  18.40     31   +5.30 1 1 1 1 1   887    0 17.11 -31.11 ----- 18.4 18.4 184.6 28.2 26.6 -24.3 26.3 -26.0 27.7 -23.0 27.9 -23.3
2025-12-24T17:03:22.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:03:22.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:03:22.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.626803
2025-12-24T17:03:22.062 [DEBUG] [Thread-305724] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:03:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:03:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:03:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:03:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:03:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:03:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:02:43', tmtdew=21.04, humidity=25.28, cloud=0.0, wind=22.59, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:02:35.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:03:22.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:03:22.166 [DEBUG] [Thread-305727] [transport.py] [_log()] starting thread (client mode): 0xf5719ed0
2025-12-24T17:03:22.166 [DEBUG] [Thread-305727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:03:22.181 [DEBUG] [Thread-305727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:03:22.181 [INFO] [Thread-305727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:03:22.188 [DEBUG] [Thread-305727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] client lang: <none>
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] server lang: <none>
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] kex follows: False
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] Compression: none
2025-12-24T17:03:22.189 [DEBUG] [Thread-305727] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:03:22.247 [DEBUG] [Thread-305727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:03:22.248 [DEBUG] [Thread-305727] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:03:22.248 [DEBUG] [Thread-305727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:03:22.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:03:22.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:03:22.303 [DEBUG] [Thread-305727] [transport.py] [_log()] userauth is OK
2025-12-24T17:03:22.304 [DEBUG] [Thread-305727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:03:22.304 [DEBUG] [Thread-305727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:03:22.304 [DEBUG] [Thread-305727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:03:22.304 [DEBUG] [Thread-305727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:03:22.323 [INFO] [Thread-305727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:03:22.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:03:22.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:03:23.135 [DEBUG] [Thread-305727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:03:23.135 [DEBUG] [Thread-305727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:03:23.182 [DEBUG] [Thread-305727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:03:23.183 [DEBUG] [Thread-305727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:03:23.191 [DEBUG] [Thread-305727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:03:23.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:03:23.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:03:23.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:03:23.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:03:23.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:03:23.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:03:23.226 [DEBUG] [Thread-305727] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:03:24.784 [DEBUG] [Thread-305729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:03:26.192 [DEBUG] [Thread-305730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:03:38.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:03:38.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:03:41.346 [DEBUG] [Thread-305731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:03:53.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:03:53.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:03:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:03:54.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 3, 16), 21.17, 25.1, 0.0, 25.74, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:03:54.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:03:16
2025-12-24T17:03:54.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:03:54.658 [DEBUG] [Thread-305732] [transport.py] [_log()] starting thread (client mode): 0xf574d510
2025-12-24T17:03:54.659 [DEBUG] [Thread-305732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:03:54.666 [DEBUG] [Thread-305732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:03:54.666 [INFO] [Thread-305732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:03:54.671 [DEBUG] [Thread-305732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] client lang: <none>
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] server lang: <none>
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] kex follows: False
2025-12-24T17:03:54.672 [DEBUG] [Thread-305732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:03:54.673 [DEBUG] [Thread-305732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:03:54.673 [DEBUG] [Thread-305732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:03:54.673 [DEBUG] [Thread-305732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:03:54.673 [DEBUG] [Thread-305732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:03:54.673 [DEBUG] [Thread-305732] [transport.py] [_log()] Compression: none
2025-12-24T17:03:54.673 [DEBUG] [Thread-305732] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:03:54.705 [DEBUG] [Thread-305732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:03:54.709 [DEBUG] [Thread-305732] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:03:54.711 [DEBUG] [Thread-305732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:03:54.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:03:54.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:03:54.715 [DEBUG] [Thread-305732] [transport.py] [_log()] userauth is OK
2025-12-24T17:03:54.715 [DEBUG] [Thread-305732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:03:54.715 [DEBUG] [Thread-305732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:03:54.715 [DEBUG] [Thread-305732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:03:54.715 [DEBUG] [Thread-305732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:03:54.736 [INFO] [Thread-305732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:03:54.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:03:55.365 [DEBUG] [Thread-305732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:03:55.365 [DEBUG] [Thread-305732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:03:55.367 [DEBUG] [Thread-305732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:03:55.406 [DEBUG] [Thread-305732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:03:55.407 [DEBUG] [Thread-305732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:03:55.410 [DEBUG] [Thread-305732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:03:55.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:03:55.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:03:55.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:03:55.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:03:55.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:03:55.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:03:55.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:03:55.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:03:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:03:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.627150 -999.00  +23.20  21.15     31   +5.30 1 2 1 1 1   887    0 17.10 -33.61 ----- 21.1 21.1 183.4 28.6 26.7 -23.6 26.5 -24.2 27.9 -21.6 28.1 -23.0
2025-12-24T17:03:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:03:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:03:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.627150
2025-12-24T17:03:55.447 [DEBUG] [Thread-305732] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:03:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:03:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:03:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:03:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:03:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T17:03:55.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:03:16', tmtdew=21.17, humidity=25.1, cloud=0.0, wind=25.74, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:03:05.760', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:03:55.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:03:55.566 [DEBUG] [Thread-305735] [transport.py] [_log()] starting thread (client mode): 0xf572ef80
2025-12-24T17:03:55.566 [DEBUG] [Thread-305735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:03:55.581 [DEBUG] [Thread-305735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:03:55.581 [INFO] [Thread-305735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:03:55.588 [DEBUG] [Thread-305735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:03:55.589 [DEBUG] [Thread-305735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:03:55.589 [DEBUG] [Thread-305735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:03:55.589 [DEBUG] [Thread-305735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:03:55.589 [DEBUG] [Thread-305735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:03:55.589 [DEBUG] [Thread-305735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:03:55.589 [DEBUG] [Thread-305735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:03:55.590 [DEBUG] [Thread-305735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:03:55.590 [DEBUG] [Thread-305735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:03:55.590 [DEBUG] [Thread-305735] [transport.py] [_log()] client lang: <none>
2025-12-24T17:03:55.590 [DEBUG] [Thread-305735] [transport.py] [_log()] server lang: <none>
2025-12-24T17:03:55.590 [DEBUG] [Thread-305735] [transport.py] [_log()] kex follows: False
2025-12-24T17:03:55.590 [DEBUG] [Thread-305735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:03:55.590 [DEBUG] [Thread-305735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:03:55.590 [DEBUG] [Thread-305735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:03:55.591 [DEBUG] [Thread-305735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:03:55.591 [DEBUG] [Thread-305735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:03:55.591 [DEBUG] [Thread-305735] [transport.py] [_log()] Compression: none
2025-12-24T17:03:55.591 [DEBUG] [Thread-305735] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:03:55.646 [DEBUG] [Thread-305735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:03:55.647 [DEBUG] [Thread-305735] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:03:55.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:03:55.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:03:55.648 [DEBUG] [Thread-305735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:03:55.706 [DEBUG] [Thread-305735] [transport.py] [_log()] userauth is OK
2025-12-24T17:03:55.707 [DEBUG] [Thread-305735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:03:55.707 [DEBUG] [Thread-305735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:03:55.707 [DEBUG] [Thread-305735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:03:55.707 [DEBUG] [Thread-305735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:03:55.730 [INFO] [Thread-305735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:03:55.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:03:55.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:03:56.422 [DEBUG] [Thread-305737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:03:56.541 [DEBUG] [Thread-305735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:03:56.541 [DEBUG] [Thread-305735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:03:56.589 [DEBUG] [Thread-305735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:03:56.589 [DEBUG] [Thread-305735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:03:56.598 [DEBUG] [Thread-305735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:03:56.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:03:56.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:03:56.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:03:56.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:03:56.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:03:56.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:03:56.637 [DEBUG] [Thread-305735] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:04:11.609 [DEBUG] [Thread-305738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:04:25.039 [DEBUG] [Thread-305739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:04:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:04:26.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:04:26.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:04:26.685 [DEBUG] [Thread-305740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:04:27.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 3, 50), 21.25, 24.75, 0.0, 26.06, 23.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:04:27.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:03:50
2025-12-24T17:04:27.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:04:27.897 [DEBUG] [Thread-305741] [transport.py] [_log()] starting thread (client mode): 0xf572eb30
2025-12-24T17:04:27.898 [DEBUG] [Thread-305741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:04:27.901 [DEBUG] [Thread-305741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:04:27.901 [INFO] [Thread-305741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:04:27.904 [DEBUG] [Thread-305741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:04:27.904 [DEBUG] [Thread-305741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:04:27.904 [DEBUG] [Thread-305741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:04:27.904 [DEBUG] [Thread-305741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:04:27.904 [DEBUG] [Thread-305741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] client lang: <none>
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] server lang: <none>
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] kex follows: False
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:04:27.905 [DEBUG] [Thread-305741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:04:27.906 [DEBUG] [Thread-305741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:04:27.906 [DEBUG] [Thread-305741] [transport.py] [_log()] Compression: none
2025-12-24T17:04:27.906 [DEBUG] [Thread-305741] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:04:27.937 [DEBUG] [Thread-305741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:04:27.939 [DEBUG] [Thread-305741] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:04:27.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:04:27.941 [DEBUG] [Thread-305741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:04:27.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:04:27.943 [DEBUG] [Thread-305741] [transport.py] [_log()] userauth is OK
2025-12-24T17:04:27.943 [DEBUG] [Thread-305741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:04:27.943 [DEBUG] [Thread-305741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:04:27.943 [DEBUG] [Thread-305741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:04:27.943 [DEBUG] [Thread-305741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:04:27.960 [INFO] [Thread-305741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:04:27.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:04:28.617 [DEBUG] [Thread-305741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:04:28.617 [DEBUG] [Thread-305741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:04:28.617 [DEBUG] [Thread-305741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:04:28.658 [DEBUG] [Thread-305741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:04:28.658 [DEBUG] [Thread-305741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:04:28.660 [DEBUG] [Thread-305741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:04:28.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:04:28.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:04:28.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:04:28.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:04:28.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:04:28.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:04:28.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:04:28.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:04:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:04:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.627498 -999.00  +23.30  18.09     31   +5.30 1 1 1 1 1   887    0 17.23 -34.52 ----- 18.1 18.1 184.8 25.3 26.8 -23.8 26.5 -27.4 28.0 -21.8 28.2 -22.7
2025-12-24T17:04:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:04:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:04:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.627498
2025-12-24T17:04:28.694 [DEBUG] [Thread-305741] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:04:28.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:04:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:04:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:04:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:04:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:04:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:03:50', tmtdew=21.25, humidity=24.75, cloud=0.0, wind=26.06, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:03:35.827', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:04:28.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:04:28.795 [DEBUG] [Thread-305744] [transport.py] [_log()] starting thread (client mode): 0xf81890f0
2025-12-24T17:04:28.796 [DEBUG] [Thread-305744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:04:28.811 [DEBUG] [Thread-305744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:04:28.811 [INFO] [Thread-305744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] client lang: <none>
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] server lang: <none>
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] kex follows: False
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] Compression: none
2025-12-24T17:04:28.818 [DEBUG] [Thread-305744] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:04:28.873 [DEBUG] [Thread-305744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:04:28.874 [DEBUG] [Thread-305744] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:04:28.874 [DEBUG] [Thread-305744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:04:28.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:04:28.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:04:28.931 [DEBUG] [Thread-305744] [transport.py] [_log()] userauth is OK
2025-12-24T17:04:28.931 [DEBUG] [Thread-305744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:04:28.931 [DEBUG] [Thread-305744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:04:28.931 [DEBUG] [Thread-305744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:04:28.931 [DEBUG] [Thread-305744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:04:28.944 [INFO] [Thread-305744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:04:28.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:04:28.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:04:29.765 [DEBUG] [Thread-305744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:04:29.765 [DEBUG] [Thread-305744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:04:29.812 [DEBUG] [Thread-305744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:04:29.812 [DEBUG] [Thread-305744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:04:29.820 [DEBUG] [Thread-305744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:04:29.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:04:29.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:04:29.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:04:29.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:04:29.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:04:29.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:04:29.853 [DEBUG] [Thread-305744] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:04:38.898 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:04:38.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:04:41.798 [DEBUG] [Thread-305746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:04:56.970 [DEBUG] [Thread-305747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:04:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:04:59.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:04:59.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:05:00.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 4, 23), 21.28, 24.72, 0.0, 25.02, 23.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:05:00.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:04:23
2025-12-24T17:05:01.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:05:01.409 [DEBUG] [Thread-305748] [transport.py] [_log()] starting thread (client mode): 0xf5772ec0
2025-12-24T17:05:01.409 [DEBUG] [Thread-305748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:05:01.423 [DEBUG] [Thread-305748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:05:01.423 [INFO] [Thread-305748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:05:01.427 [DEBUG] [Thread-305748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:05:01.427 [DEBUG] [Thread-305748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] client lang: <none>
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] server lang: <none>
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] kex follows: False
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] Compression: none
2025-12-24T17:05:01.428 [DEBUG] [Thread-305748] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:05:01.464 [DEBUG] [Thread-305748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:05:01.469 [DEBUG] [Thread-305748] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:05:01.470 [DEBUG] [Thread-305748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:05:01.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:05:01.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:05:01.475 [DEBUG] [Thread-305748] [transport.py] [_log()] userauth is OK
2025-12-24T17:05:01.475 [DEBUG] [Thread-305748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:05:01.475 [DEBUG] [Thread-305748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:05:01.475 [DEBUG] [Thread-305748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:05:01.475 [DEBUG] [Thread-305748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:05:01.507 [INFO] [Thread-305748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:05:01.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:05:02.138 [DEBUG] [Thread-305748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:05:02.138 [DEBUG] [Thread-305748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:05:02.140 [DEBUG] [Thread-305748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:05:02.179 [DEBUG] [Thread-305748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:05:02.179 [DEBUG] [Thread-305748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:05:02.181 [DEBUG] [Thread-305748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:05:02.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:05:02.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:05:02.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:05:02.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:05:02.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:05:02.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:05:02.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:05:02.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:05:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:05:02.200 [DEBUG] [Thread-305748] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:05:02.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.628192 -999.00  +23.50  18.14     30   +5.30 1 2 1 1 1   887    0 16.51 -36.19 ----- 18.1 18.1 150.4 27.4 27.1 -24.1 27.0 -23.8 28.4 -22.1 28.6 -23.0
2025-12-24T17:05:02.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:05:02.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:05:02.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.628192
2025-12-24T17:05:02.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:05:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:05:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:05:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:05:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T17:05:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:04:23', tmtdew=21.28, humidity=24.72, cloud=0.0, wind=25.02, temperature=23.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:04:35.789', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:05:02.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:05:02.310 [DEBUG] [Thread-305751] [transport.py] [_log()] starting thread (client mode): 0xf81f3cd0
2025-12-24T17:05:02.310 [DEBUG] [Thread-305751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:05:02.324 [DEBUG] [Thread-305751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:05:02.324 [INFO] [Thread-305751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:05:02.332 [DEBUG] [Thread-305751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] client lang: <none>
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] server lang: <none>
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] kex follows: False
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] Compression: none
2025-12-24T17:05:02.333 [DEBUG] [Thread-305751] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:05:02.394 [DEBUG] [Thread-305751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:05:02.394 [DEBUG] [Thread-305751] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:05:02.394 [DEBUG] [Thread-305751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:05:02.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:05:02.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:05:02.451 [DEBUG] [Thread-305751] [transport.py] [_log()] userauth is OK
2025-12-24T17:05:02.451 [DEBUG] [Thread-305751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:05:02.451 [DEBUG] [Thread-305751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:05:02.451 [DEBUG] [Thread-305751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:05:02.451 [DEBUG] [Thread-305751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:05:02.472 [INFO] [Thread-305751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:05:02.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:05:02.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:05:03.324 [DEBUG] [Thread-305751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:05:03.324 [DEBUG] [Thread-305751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:05:03.373 [DEBUG] [Thread-305751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:05:03.373 [DEBUG] [Thread-305751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:05:03.381 [DEBUG] [Thread-305751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:05:03.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:05:03.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:05:03.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:05:03.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:05:03.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:05:03.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:05:03.418 [DEBUG] [Thread-305751] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:05:12.104 [DEBUG] [Thread-305753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:05:25.313 [DEBUG] [Thread-305754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:05:27.241 [DEBUG] [Thread-305755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:05:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:05:33.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:05:33.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:05:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 4, 57), 21.26, 24.97, 0.0, 22.73, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:05:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:04:57
2025-12-24T17:05:34.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:05:34.843 [DEBUG] [Thread-305756] [transport.py] [_log()] starting thread (client mode): 0xf571ac50
2025-12-24T17:05:34.844 [DEBUG] [Thread-305756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:05:34.852 [DEBUG] [Thread-305756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:05:34.852 [INFO] [Thread-305756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:05:34.857 [DEBUG] [Thread-305756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] client lang: <none>
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] server lang: <none>
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] kex follows: False
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:05:34.858 [DEBUG] [Thread-305756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:05:34.859 [DEBUG] [Thread-305756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:05:34.859 [DEBUG] [Thread-305756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:05:34.859 [DEBUG] [Thread-305756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:05:34.859 [DEBUG] [Thread-305756] [transport.py] [_log()] Compression: none
2025-12-24T17:05:34.859 [DEBUG] [Thread-305756] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:05:34.896 [DEBUG] [Thread-305756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:05:34.902 [DEBUG] [Thread-305756] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:05:34.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:05:34.905 [DEBUG] [Thread-305756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:05:34.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:05:34.910 [DEBUG] [Thread-305756] [transport.py] [_log()] userauth is OK
2025-12-24T17:05:34.910 [DEBUG] [Thread-305756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:05:34.911 [DEBUG] [Thread-305756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:05:34.911 [DEBUG] [Thread-305756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:05:34.911 [DEBUG] [Thread-305756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:05:34.939 [INFO] [Thread-305756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:05:34.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:05:35.565 [DEBUG] [Thread-305756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:05:35.566 [DEBUG] [Thread-305756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:05:35.568 [DEBUG] [Thread-305756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:05:35.607 [DEBUG] [Thread-305756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:05:35.608 [DEBUG] [Thread-305756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:05:35.611 [DEBUG] [Thread-305756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:05:35.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:05:35.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:05:35.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:05:35.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:05:35.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:05:35.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:05:35.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:05:35.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:05:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:05:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.628539 -999.00  +23.30  18.37     31   +5.30 1 2 1 1 1   887    0 17.24 -34.79 ----- 18.4 18.4 161.4 21.9 27.2 -24.1 27.1 -23.0 28.6 -22.3 28.8 -22.3
2025-12-24T17:05:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:05:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:05:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.628539
2025-12-24T17:05:35.647 [DEBUG] [Thread-305756] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:05:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:05:35.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:05:35.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:05:35.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:05:35.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T17:05:35.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:04:57', tmtdew=21.26, humidity=24.97, cloud=0.0, wind=22.73, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:05:05.770', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:05:35.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:05:35.759 [DEBUG] [Thread-305759] [transport.py] [_log()] starting thread (client mode): 0xf574cd00
2025-12-24T17:05:35.759 [DEBUG] [Thread-305759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:05:35.774 [DEBUG] [Thread-305759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:05:35.774 [INFO] [Thread-305759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] client lang: <none>
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] server lang: <none>
2025-12-24T17:05:35.782 [DEBUG] [Thread-305759] [transport.py] [_log()] kex follows: False
2025-12-24T17:05:35.783 [DEBUG] [Thread-305759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:05:35.783 [DEBUG] [Thread-305759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:05:35.783 [DEBUG] [Thread-305759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:05:35.783 [DEBUG] [Thread-305759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:05:35.783 [DEBUG] [Thread-305759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:05:35.783 [DEBUG] [Thread-305759] [transport.py] [_log()] Compression: none
2025-12-24T17:05:35.783 [DEBUG] [Thread-305759] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:05:35.838 [DEBUG] [Thread-305759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:05:35.839 [DEBUG] [Thread-305759] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:05:35.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:05:35.840 [DEBUG] [Thread-305759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:05:35.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:05:35.895 [DEBUG] [Thread-305759] [transport.py] [_log()] userauth is OK
2025-12-24T17:05:35.896 [DEBUG] [Thread-305759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:05:35.896 [DEBUG] [Thread-305759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:05:35.896 [DEBUG] [Thread-305759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:05:35.896 [DEBUG] [Thread-305759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:05:35.914 [INFO] [Thread-305759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:05:35.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:05:35.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:05:36.738 [DEBUG] [Thread-305759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:05:36.738 [DEBUG] [Thread-305759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:05:36.776 [DEBUG] [Thread-305759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:05:36.776 [DEBUG] [Thread-305759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:05:36.785 [DEBUG] [Thread-305759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:05:36.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:05:36.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:05:36.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:05:36.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:05:36.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:05:36.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:05:36.819 [DEBUG] [Thread-305759] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:05:39.052 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:05:39.054 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:05:42.339 [DEBUG] [Thread-305761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:05:57.489 [DEBUG] [Thread-305762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:06:06.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:06:06.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:06:06.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
2025-12-24T17:06:07.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 5, 30), 21.21, 25.03, 0.0, 22.92, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:06:07.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:05:30
2025-12-24T17:06:07.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:06:08.129 [DEBUG] [Thread-305763] [transport.py] [_log()] starting thread (client mode): 0xf571aa70
2025-12-24T17:06:08.130 [DEBUG] [Thread-305763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:06:08.133 [DEBUG] [Thread-305763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:06:08.133 [INFO] [Thread-305763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:06:08.136 [DEBUG] [Thread-305763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:06:08.136 [DEBUG] [Thread-305763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] client lang: <none>
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] server lang: <none>
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] kex follows: False
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:06:08.137 [DEBUG] [Thread-305763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:06:08.138 [DEBUG] [Thread-305763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:06:08.138 [DEBUG] [Thread-305763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:06:08.138 [DEBUG] [Thread-305763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:06:08.138 [DEBUG] [Thread-305763] [transport.py] [_log()] Compression: none
2025-12-24T17:06:08.138 [DEBUG] [Thread-305763] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:06:08.166 [DEBUG] [Thread-305763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:06:08.170 [DEBUG] [Thread-305763] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:06:08.172 [DEBUG] [Thread-305763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:06:08.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:06:08.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:06:08.209 [DEBUG] [Thread-305763] [transport.py] [_log()] userauth is OK
2025-12-24T17:06:08.209 [DEBUG] [Thread-305763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:06:08.210 [DEBUG] [Thread-305763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:06:08.210 [DEBUG] [Thread-305763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:06:08.210 [DEBUG] [Thread-305763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:06:08.249 [INFO] [Thread-305763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:06:08.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:06:08.888 [DEBUG] [Thread-305763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:06:08.888 [DEBUG] [Thread-305763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:06:08.898 [DEBUG] [Thread-305763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:06:08.929 [DEBUG] [Thread-305763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:06:08.929 [DEBUG] [Thread-305763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:06:08.931 [DEBUG] [Thread-305763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:06:08.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:06:08.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:06:08.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:06:08.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:06:08.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:06:08.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:06:08.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:06:08.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:06:08.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:06:08.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.628887 -999.00  +23.50  24.49     31   +5.40 1 1 1 1 1   887    0 16.70 -34.31 ----- 24.5 24.5 173.8 33.9 27.2 -23.7 27.1 -27.8 28.6 -21.6 28.8 -23.6
2025-12-24T17:06:08.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:06:08.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:06:08.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.628887
2025-12-24T17:06:08.967 [DEBUG] [Thread-305763] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:06:08.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:06:08.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:06:08.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:06:08.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:06:08.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:06:08.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:05:30', tmtdew=21.21, humidity=25.03, cloud=0.0, wind=22.92, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:05:35.837', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:06:09.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:06:09.064 [DEBUG] [Thread-305766] [transport.py] [_log()] starting thread (client mode): 0xf81f2b60
2025-12-24T17:06:09.064 [DEBUG] [Thread-305766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:06:09.079 [DEBUG] [Thread-305766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:06:09.079 [INFO] [Thread-305766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:06:09.087 [DEBUG] [Thread-305766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:06:09.087 [DEBUG] [Thread-305766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:06:09.087 [DEBUG] [Thread-305766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:06:09.087 [DEBUG] [Thread-305766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:06:09.087 [DEBUG] [Thread-305766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:06:09.087 [DEBUG] [Thread-305766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] client lang: <none>
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] server lang: <none>
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] kex follows: False
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] Compression: none
2025-12-24T17:06:09.088 [DEBUG] [Thread-305766] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:06:09.147 [DEBUG] [Thread-305766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:06:09.148 [DEBUG] [Thread-305766] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:06:09.148 [DEBUG] [Thread-305766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:06:09.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:06:09.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:06:09.203 [DEBUG] [Thread-305766] [transport.py] [_log()] userauth is OK
2025-12-24T17:06:09.203 [DEBUG] [Thread-305766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:06:09.203 [DEBUG] [Thread-305766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:06:09.203 [DEBUG] [Thread-305766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:06:09.204 [DEBUG] [Thread-305766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:06:09.229 [INFO] [Thread-305766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:06:09.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:06:09.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:06:10.052 [DEBUG] [Thread-305766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:06:10.053 [DEBUG] [Thread-305766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:06:10.100 [DEBUG] [Thread-305766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:06:10.100 [DEBUG] [Thread-305766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:06:10.109 [DEBUG] [Thread-305766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:06:10.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:06:10.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:06:10.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:06:10.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:06:10.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:06:10.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:06:10.148 [DEBUG] [Thread-305766] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:06:12.593 [DEBUG] [Thread-305768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:06:25.554 [DEBUG] [Thread-305769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:06:27.755 [DEBUG] [Thread-305770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:06:39.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:06:39.211 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:06:40.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:06:40.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:06:40.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:06:41.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 6, 4), 21.23, 25.02, 0.0, 25.95, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:06:41.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:06:04
2025-12-24T17:06:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:06:41.416 [DEBUG] [Thread-305771] [transport.py] [_log()] starting thread (client mode): 0xf818bee0
2025-12-24T17:06:41.417 [DEBUG] [Thread-305771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:06:41.430 [DEBUG] [Thread-305771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:06:41.430 [INFO] [Thread-305771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:06:41.434 [DEBUG] [Thread-305771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] client lang: <none>
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] server lang: <none>
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] kex follows: False
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:06:41.435 [DEBUG] [Thread-305771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:06:41.436 [DEBUG] [Thread-305771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:06:41.436 [DEBUG] [Thread-305771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:06:41.436 [DEBUG] [Thread-305771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:06:41.436 [DEBUG] [Thread-305771] [transport.py] [_log()] Compression: none
2025-12-24T17:06:41.436 [DEBUG] [Thread-305771] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:06:41.470 [DEBUG] [Thread-305771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:06:41.474 [DEBUG] [Thread-305771] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:06:41.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:06:41.476 [DEBUG] [Thread-305771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:06:41.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:06:41.478 [DEBUG] [Thread-305771] [transport.py] [_log()] userauth is OK
2025-12-24T17:06:41.479 [DEBUG] [Thread-305771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:06:41.479 [DEBUG] [Thread-305771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:06:41.479 [DEBUG] [Thread-305771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:06:41.479 [DEBUG] [Thread-305771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:06:41.512 [INFO] [Thread-305771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:06:41.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:06:42.175 [DEBUG] [Thread-305771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:06:42.175 [DEBUG] [Thread-305771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:06:42.176 [DEBUG] [Thread-305771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:06:42.216 [DEBUG] [Thread-305771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:06:42.216 [DEBUG] [Thread-305771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:06:42.218 [DEBUG] [Thread-305771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:06:42.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:06:42.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:06:42.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:06:42.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:06:42.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:06:42.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:06:42.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:06:42.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:06:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:06:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.629234 -999.00  +23.60  33.48     30   +5.30 1 1 2 1 1   887    0 16.91 -35.07 ----- 33.5 33.5 165.4 38.6 27.4 -24.3 27.1 -25.0 28.8 -23.0 29.0 -22.7
2025-12-24T17:06:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:06:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:06:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.629234
2025-12-24T17:06:42.245 [DEBUG] [Thread-305771] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:06:42.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:06:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:06:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:06:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:06:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:06:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:06:04', tmtdew=21.23, humidity=25.02, cloud=0.0, wind=25.95, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:06:05.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:06:42.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:06:42.345 [DEBUG] [Thread-305774] [transport.py] [_log()] starting thread (client mode): 0xf574e410
2025-12-24T17:06:42.345 [DEBUG] [Thread-305774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:06:42.359 [DEBUG] [Thread-305774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:06:42.359 [INFO] [Thread-305774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] client lang: <none>
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] server lang: <none>
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] kex follows: False
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] Compression: none
2025-12-24T17:06:42.367 [DEBUG] [Thread-305774] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:06:42.425 [DEBUG] [Thread-305774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:06:42.425 [DEBUG] [Thread-305774] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:06:42.425 [DEBUG] [Thread-305774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:06:42.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:06:42.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:06:42.482 [DEBUG] [Thread-305774] [transport.py] [_log()] userauth is OK
2025-12-24T17:06:42.482 [DEBUG] [Thread-305774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:06:42.482 [DEBUG] [Thread-305774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:06:42.482 [DEBUG] [Thread-305774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:06:42.482 [DEBUG] [Thread-305774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:06:42.497 [INFO] [Thread-305774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:06:42.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:06:42.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:06:42.806 [DEBUG] [Thread-305776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:06:43.325 [DEBUG] [Thread-305774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:06:43.325 [DEBUG] [Thread-305774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:06:43.373 [DEBUG] [Thread-305774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:06:43.373 [DEBUG] [Thread-305774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:06:43.381 [DEBUG] [Thread-305774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:06:43.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:06:43.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:06:43.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:06:43.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:06:43.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:06:43.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:06:43.415 [DEBUG] [Thread-305774] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:06:57.974 [DEBUG] [Thread-305777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:07:13.114 [DEBUG] [Thread-305778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:07:13.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:07:13.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:07:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:07:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 6, 37), 21.62, 24.23, 0.0, 26.64, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:07:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:06:37
2025-12-24T17:07:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:07:14.843 [DEBUG] [Thread-305779] [transport.py] [_log()] starting thread (client mode): 0xf572b220
2025-12-24T17:07:14.843 [DEBUG] [Thread-305779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:07:14.844 [DEBUG] [Thread-305779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:07:14.844 [INFO] [Thread-305779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] client lang: <none>
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] server lang: <none>
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] kex follows: False
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:07:14.847 [DEBUG] [Thread-305779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:07:14.848 [DEBUG] [Thread-305779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:07:14.848 [DEBUG] [Thread-305779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:07:14.848 [DEBUG] [Thread-305779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:07:14.848 [DEBUG] [Thread-305779] [transport.py] [_log()] Compression: none
2025-12-24T17:07:14.848 [DEBUG] [Thread-305779] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:07:14.883 [DEBUG] [Thread-305779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:07:14.886 [DEBUG] [Thread-305779] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:07:14.887 [DEBUG] [Thread-305779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:07:14.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:07:14.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:07:14.892 [DEBUG] [Thread-305779] [transport.py] [_log()] userauth is OK
2025-12-24T17:07:14.892 [DEBUG] [Thread-305779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:07:14.892 [DEBUG] [Thread-305779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:07:14.892 [DEBUG] [Thread-305779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:07:14.893 [DEBUG] [Thread-305779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:07:14.918 [INFO] [Thread-305779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:07:14.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:07:15.554 [DEBUG] [Thread-305779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:07:15.554 [DEBUG] [Thread-305779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:07:15.555 [DEBUG] [Thread-305779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:07:15.595 [DEBUG] [Thread-305779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:07:15.596 [DEBUG] [Thread-305779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:07:15.599 [DEBUG] [Thread-305779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:07:15.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:07:15.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:07:15.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:07:15.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:07:15.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:07:15.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:07:15.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:07:15.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:07:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:07:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.629581 -999.00  +23.40  21.59     30   +5.30 1 1 1 1 1   887    0 16.71 -32.97 ----- 21.6 21.6 172.8 32.8 27.3 -25.1 27.2 -26.3 28.6 -22.7 29.0 -25.4
2025-12-24T17:07:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:07:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:07:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.629581
2025-12-24T17:07:15.637 [DEBUG] [Thread-305779] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:07:15.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:07:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:07:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:07:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:07:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:07:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:06:37', tmtdew=21.62, humidity=24.23, cloud=0.0, wind=26.64, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:06:35.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:07:15.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:07:15.736 [DEBUG] [Thread-305782] [transport.py] [_log()] starting thread (client mode): 0xf572dd50
2025-12-24T17:07:15.736 [DEBUG] [Thread-305782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:07:15.751 [DEBUG] [Thread-305782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:07:15.751 [INFO] [Thread-305782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:07:15.759 [DEBUG] [Thread-305782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:07:15.759 [DEBUG] [Thread-305782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:07:15.760 [DEBUG] [Thread-305782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:07:15.760 [DEBUG] [Thread-305782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:07:15.760 [DEBUG] [Thread-305782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:07:15.760 [DEBUG] [Thread-305782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:07:15.760 [DEBUG] [Thread-305782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:07:15.760 [DEBUG] [Thread-305782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:07:15.760 [DEBUG] [Thread-305782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:07:15.760 [DEBUG] [Thread-305782] [transport.py] [_log()] client lang: <none>
2025-12-24T17:07:15.761 [DEBUG] [Thread-305782] [transport.py] [_log()] server lang: <none>
2025-12-24T17:07:15.761 [DEBUG] [Thread-305782] [transport.py] [_log()] kex follows: False
2025-12-24T17:07:15.761 [DEBUG] [Thread-305782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:07:15.761 [DEBUG] [Thread-305782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:07:15.761 [DEBUG] [Thread-305782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:07:15.761 [DEBUG] [Thread-305782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:07:15.761 [DEBUG] [Thread-305782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:07:15.761 [DEBUG] [Thread-305782] [transport.py] [_log()] Compression: none
2025-12-24T17:07:15.762 [DEBUG] [Thread-305782] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:07:15.819 [DEBUG] [Thread-305782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:07:15.820 [DEBUG] [Thread-305782] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:07:15.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:07:15.822 [DEBUG] [Thread-305782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:07:15.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:07:15.875 [DEBUG] [Thread-305782] [transport.py] [_log()] userauth is OK
2025-12-24T17:07:15.876 [DEBUG] [Thread-305782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:07:15.876 [DEBUG] [Thread-305782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:07:15.876 [DEBUG] [Thread-305782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:07:15.876 [DEBUG] [Thread-305782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:07:15.895 [INFO] [Thread-305782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:07:15.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:07:15.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:07:16.780 [DEBUG] [Thread-305782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:07:16.781 [DEBUG] [Thread-305782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:07:16.828 [DEBUG] [Thread-305782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:07:16.828 [DEBUG] [Thread-305782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:07:16.837 [DEBUG] [Thread-305782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:07:16.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:07:16.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')
2025-12-24T17:07:16.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:07:16.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:07:16.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:07:16.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:07:16.873 [DEBUG] [Thread-305782] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:07:25.818 [DEBUG] [Thread-305784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:07:28.210 [DEBUG] [Thread-305785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:07:39.360 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:07:39.361 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:07:43.339 [DEBUG] [Thread-305786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:07:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:07:46.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:07:46.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:07:47.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 7, 9), 21.98, 23.72, 0.0, 29.25, 24.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:07:47.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:07:09
2025-12-24T17:07:47.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:07:48.181 [DEBUG] [Thread-305787] [transport.py] [_log()] starting thread (client mode): 0xf5729ae0
2025-12-24T17:07:48.182 [DEBUG] [Thread-305787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:07:48.193 [DEBUG] [Thread-305787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:07:48.193 [INFO] [Thread-305787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:07:48.198 [DEBUG] [Thread-305787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] client lang: <none>
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] server lang: <none>
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] kex follows: False
2025-12-24T17:07:48.199 [DEBUG] [Thread-305787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:07:48.200 [DEBUG] [Thread-305787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:07:48.200 [DEBUG] [Thread-305787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:07:48.201 [DEBUG] [Thread-305787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:07:48.201 [DEBUG] [Thread-305787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:07:48.201 [DEBUG] [Thread-305787] [transport.py] [_log()] Compression: none
2025-12-24T17:07:48.201 [DEBUG] [Thread-305787] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:07:48.242 [DEBUG] [Thread-305787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:07:48.246 [DEBUG] [Thread-305787] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:07:48.249 [DEBUG] [Thread-305787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:07:48.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:07:48.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:07:48.254 [DEBUG] [Thread-305787] [transport.py] [_log()] userauth is OK
2025-12-24T17:07:48.254 [DEBUG] [Thread-305787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:07:48.254 [DEBUG] [Thread-305787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:07:48.254 [DEBUG] [Thread-305787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:07:48.255 [DEBUG] [Thread-305787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:07:48.282 [INFO] [Thread-305787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:07:48.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:07:48.920 [DEBUG] [Thread-305787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:07:48.920 [DEBUG] [Thread-305787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:07:48.920 [DEBUG] [Thread-305787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:07:48.961 [DEBUG] [Thread-305787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:07:48.961 [DEBUG] [Thread-305787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:07:48.964 [DEBUG] [Thread-305787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:07:48.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:07:48.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:07:48.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:07:48.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:07:48.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:07:48.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:07:48.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:07:48.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:07:48.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:07:48.992 [DEBUG] [Thread-305787] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:07:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.629928 -999.00  +23.30  28.66     31   +5.30 1 1 1 1 1   887    0 16.94 -34.67 ----- 28.7 28.7 167.4 30.5 27.2 -25.3 27.0 -27.8 28.6 -22.8 28.9 -25.2
2025-12-24T17:07:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:07:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:07:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.629928
2025-12-24T17:07:49.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:07:49.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:07:49.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:07:49.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:07:49.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:07:49.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:07:09', tmtdew=21.98, humidity=23.72, cloud=0.0, wind=29.25, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:07:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:07:49.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:07:49.102 [DEBUG] [Thread-305790] [transport.py] [_log()] starting thread (client mode): 0xf571a7a0
2025-12-24T17:07:49.102 [DEBUG] [Thread-305790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:07:49.116 [DEBUG] [Thread-305790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:07:49.116 [INFO] [Thread-305790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] client lang: <none>
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] server lang: <none>
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] kex follows: False
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] Compression: none
2025-12-24T17:07:49.124 [DEBUG] [Thread-305790] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:07:49.183 [DEBUG] [Thread-305790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:07:49.183 [DEBUG] [Thread-305790] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:07:49.184 [DEBUG] [Thread-305790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:07:49.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:07:49.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:07:49.239 [DEBUG] [Thread-305790] [transport.py] [_log()] userauth is OK
2025-12-24T17:07:49.239 [DEBUG] [Thread-305790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:07:49.239 [DEBUG] [Thread-305790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:07:49.239 [DEBUG] [Thread-305790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:07:49.239 [DEBUG] [Thread-305790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:07:49.252 [INFO] [Thread-305790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:07:49.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:07:49.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:07:50.127 [DEBUG] [Thread-305790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:07:50.127 [DEBUG] [Thread-305790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:07:50.175 [DEBUG] [Thread-305790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:07:50.175 [DEBUG] [Thread-305790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:07:50.184 [DEBUG] [Thread-305790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:07:50.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:07:50.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:07:50.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:07:50.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:07:50.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:07:50.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:07:50.220 [DEBUG] [Thread-305790] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:07:58.424 [DEBUG] [Thread-305792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:08:13.651 [DEBUG] [Thread-305793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:08:20.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:08:20.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:08:20.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:08:21.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 7, 43), 21.54, 24.34, 0.0, 27.21, 23.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:08:21.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:07:43
2025-12-24T17:08:21.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:08:21.579 [DEBUG] [Thread-305794] [transport.py] [_log()] starting thread (client mode): 0xf8188a90
2025-12-24T17:08:21.580 [DEBUG] [Thread-305794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:08:21.588 [DEBUG] [Thread-305794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:08:21.588 [INFO] [Thread-305794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] client lang: <none>
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] server lang: <none>
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] kex follows: False
2025-12-24T17:08:21.593 [DEBUG] [Thread-305794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:08:21.594 [DEBUG] [Thread-305794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:08:21.594 [DEBUG] [Thread-305794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:08:21.594 [DEBUG] [Thread-305794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:08:21.594 [DEBUG] [Thread-305794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:08:21.594 [DEBUG] [Thread-305794] [transport.py] [_log()] Compression: none
2025-12-24T17:08:21.594 [DEBUG] [Thread-305794] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:08:21.628 [DEBUG] [Thread-305794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:08:21.633 [DEBUG] [Thread-305794] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:08:21.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:08:21.637 [DEBUG] [Thread-305794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:08:21.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:08:21.641 [DEBUG] [Thread-305794] [transport.py] [_log()] userauth is OK
2025-12-24T17:08:21.641 [DEBUG] [Thread-305794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:08:21.642 [DEBUG] [Thread-305794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:08:21.642 [DEBUG] [Thread-305794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:08:21.642 [DEBUG] [Thread-305794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:08:21.681 [INFO] [Thread-305794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:08:21.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:08:22.365 [DEBUG] [Thread-305794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:08:22.366 [DEBUG] [Thread-305794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:08:22.367 [DEBUG] [Thread-305794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:08:22.407 [DEBUG] [Thread-305794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:08:22.407 [DEBUG] [Thread-305794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:08:22.410 [DEBUG] [Thread-305794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:08:22.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:08:22.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:08:22.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:08:22.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:08:22.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:08:22.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:08:22.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:08:22.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:08:22.438 [DEBUG] [Thread-305794] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:08:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:08:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.630275 -999.00  +23.20  19.65     31   +5.30 1 1 1 1 1   887    0 17.26 -34.41 ----- 19.6 19.6 161.8 26.1 27.4 -24.5 27.1 -23.9 28.8 -22.5 29.2 -23.0
2025-12-24T17:08:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:08:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:08:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.630275
2025-12-24T17:08:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:08:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:08:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:08:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:08:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:08:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:07:43', tmtdew=21.54, humidity=24.34, cloud=0.0, wind=27.21, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:07:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:08:22.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:08:22.545 [DEBUG] [Thread-305797] [transport.py] [_log()] starting thread (client mode): 0xf572dd50
2025-12-24T17:08:22.545 [DEBUG] [Thread-305797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:08:22.559 [DEBUG] [Thread-305797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:08:22.559 [INFO] [Thread-305797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:08:22.566 [DEBUG] [Thread-305797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:08:22.566 [DEBUG] [Thread-305797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:08:22.566 [DEBUG] [Thread-305797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] client lang: <none>
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] server lang: <none>
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] kex follows: False
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] Compression: none
2025-12-24T17:08:22.567 [DEBUG] [Thread-305797] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:08:22.625 [DEBUG] [Thread-305797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:08:22.626 [DEBUG] [Thread-305797] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:08:22.626 [DEBUG] [Thread-305797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:08:22.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:08:22.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:08:22.682 [DEBUG] [Thread-305797] [transport.py] [_log()] userauth is OK
2025-12-24T17:08:22.682 [DEBUG] [Thread-305797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:08:22.682 [DEBUG] [Thread-305797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:08:22.682 [DEBUG] [Thread-305797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:08:22.682 [DEBUG] [Thread-305797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:08:22.703 [INFO] [Thread-305797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:08:22.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:08:22.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:08:23.552 [DEBUG] [Thread-305797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:08:23.553 [DEBUG] [Thread-305797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:08:23.599 [DEBUG] [Thread-305797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:08:23.599 [DEBUG] [Thread-305797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:08:23.608 [DEBUG] [Thread-305797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:08:23.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:08:23.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:08:23.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:08:23.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:08:23.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:08:23.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:08:23.652 [DEBUG] [Thread-305797] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:08:26.123 [DEBUG] [Thread-305799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:08:28.778 [DEBUG] [Thread-305800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:08:39.505 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:08:39.506 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:08:43.913 [DEBUG] [Thread-305801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:08:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:08:53.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:08:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:08:54.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 8, 49), 21.47, 24.59, 0.0, 22.94, 23.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:08:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:08:49
2025-12-24T17:08:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:08:55.102 [DEBUG] [Thread-305802] [transport.py] [_log()] starting thread (client mode): 0xf572b640
2025-12-24T17:08:55.102 [DEBUG] [Thread-305802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:08:55.111 [DEBUG] [Thread-305802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:08:55.111 [INFO] [Thread-305802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] client lang: <none>
2025-12-24T17:08:55.115 [DEBUG] [Thread-305802] [transport.py] [_log()] server lang: <none>
2025-12-24T17:08:55.116 [DEBUG] [Thread-305802] [transport.py] [_log()] kex follows: False
2025-12-24T17:08:55.116 [DEBUG] [Thread-305802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:08:55.116 [DEBUG] [Thread-305802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:08:55.116 [DEBUG] [Thread-305802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:08:55.116 [DEBUG] [Thread-305802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:08:55.116 [DEBUG] [Thread-305802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:08:55.117 [DEBUG] [Thread-305802] [transport.py] [_log()] Compression: none
2025-12-24T17:08:55.117 [DEBUG] [Thread-305802] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:08:55.149 [DEBUG] [Thread-305802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:08:55.153 [DEBUG] [Thread-305802] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:08:55.154 [DEBUG] [Thread-305802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:08:55.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:08:55.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:08:55.158 [DEBUG] [Thread-305802] [transport.py] [_log()] userauth is OK
2025-12-24T17:08:55.158 [DEBUG] [Thread-305802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:08:55.159 [DEBUG] [Thread-305802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:08:55.159 [DEBUG] [Thread-305802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:08:55.159 [DEBUG] [Thread-305802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:08:55.177 [INFO] [Thread-305802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:08:55.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:08:55.810 [DEBUG] [Thread-305802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:08:55.810 [DEBUG] [Thread-305802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:08:55.811 [DEBUG] [Thread-305802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:08:55.851 [DEBUG] [Thread-305802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:08:55.852 [DEBUG] [Thread-305802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:08:55.855 [DEBUG] [Thread-305802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:08:55.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:08:55.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:08:55.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:08:55.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:08:55.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:08:55.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:08:55.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:08:55.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:08:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:08:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.630623 -999.00  +23.10  20.83     31   +5.20 1 1 1 1 1   887    0 16.79 -37.86 ----- 20.8 20.8 171.0 24.8 27.4 -24.6 27.3 -24.1 28.8 -22.2 29.2 -24.3
2025-12-24T17:08:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:08:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:08:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.630623
2025-12-24T17:08:55.893 [DEBUG] [Thread-305802] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:08:55.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:08:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:08:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:08:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:08:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:08:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:08:49', tmtdew=21.47, humidity=24.59, cloud=0.0, wind=22.94, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:08:05.827', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:08:55.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:08:55.989 [DEBUG] [Thread-305805] [transport.py] [_log()] starting thread (client mode): 0xf5788a30
2025-12-24T17:08:55.989 [DEBUG] [Thread-305805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:08:56.004 [DEBUG] [Thread-305805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:08:56.004 [INFO] [Thread-305805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:08:56.011 [DEBUG] [Thread-305805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] client lang: <none>
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] server lang: <none>
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] kex follows: False
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] Compression: none
2025-12-24T17:08:56.012 [DEBUG] [Thread-305805] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:08:56.069 [DEBUG] [Thread-305805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:08:56.069 [DEBUG] [Thread-305805] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:08:56.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:08:56.070 [DEBUG] [Thread-305805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:08:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:08:56.126 [DEBUG] [Thread-305805] [transport.py] [_log()] userauth is OK
2025-12-24T17:08:56.126 [DEBUG] [Thread-305805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:08:56.126 [DEBUG] [Thread-305805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:08:56.126 [DEBUG] [Thread-305805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:08:56.126 [DEBUG] [Thread-305805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:08:56.139 [INFO] [Thread-305805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:08:56.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:08:56.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:08:56.990 [DEBUG] [Thread-305805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:08:56.990 [DEBUG] [Thread-305805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:08:57.038 [DEBUG] [Thread-305805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:08:57.038 [DEBUG] [Thread-305805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:08:57.047 [DEBUG] [Thread-305805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:08:57.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:08:57.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:08:57.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:08:57.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:08:57.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:08:57.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:08:57.083 [DEBUG] [Thread-305805] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:08:58.994 [DEBUG] [Thread-305807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:09:14.160 [DEBUG] [Thread-305808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:09:26.382 [DEBUG] [Thread-305809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:09:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:09:27.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:09:27.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:09:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 9, 22), 21.5, 24.52, 0.0, 22.96, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:09:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:09:22
2025-12-24T17:09:28.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:09:28.327 [DEBUG] [Thread-305810] [transport.py] [_log()] starting thread (client mode): 0xf57723e0
2025-12-24T17:09:28.328 [DEBUG] [Thread-305810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:09:28.341 [DEBUG] [Thread-305810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:09:28.341 [INFO] [Thread-305810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:09:28.347 [DEBUG] [Thread-305810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] client lang: <none>
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] server lang: <none>
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] kex follows: False
2025-12-24T17:09:28.348 [DEBUG] [Thread-305810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:09:28.349 [DEBUG] [Thread-305810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:09:28.349 [DEBUG] [Thread-305810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:09:28.349 [DEBUG] [Thread-305810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:09:28.349 [DEBUG] [Thread-305810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:09:28.349 [DEBUG] [Thread-305810] [transport.py] [_log()] Compression: none
2025-12-24T17:09:28.349 [DEBUG] [Thread-305810] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:09:28.385 [DEBUG] [Thread-305810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:09:28.389 [DEBUG] [Thread-305810] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:09:28.391 [DEBUG] [Thread-305810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:09:28.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:09:28.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:09:28.396 [DEBUG] [Thread-305810] [transport.py] [_log()] userauth is OK
2025-12-24T17:09:28.396 [DEBUG] [Thread-305810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:09:28.396 [DEBUG] [Thread-305810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:09:28.397 [DEBUG] [Thread-305810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:09:28.397 [DEBUG] [Thread-305810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:09:28.424 [INFO] [Thread-305810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:09:28.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:09:29.063 [DEBUG] [Thread-305810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:09:29.063 [DEBUG] [Thread-305810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:09:29.065 [DEBUG] [Thread-305810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:09:29.104 [DEBUG] [Thread-305810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:09:29.105 [DEBUG] [Thread-305810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:09:29.108 [DEBUG] [Thread-305810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:09:29.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:09:29.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:09:29.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:09:29.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:09:29.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:09:29.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:09:29.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:09:29.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:09:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:09:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.630970 -999.00  +23.20  14.31     31   +5.30 1 1 1 1 1   887    0 16.63 -33.34 ----- 14.3 14.3 180.2 24.7 27.5 -25.1 27.3 -25.8 28.9 -23.1 29.3 -23.2
2025-12-24T17:09:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:09:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:09:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.630970
2025-12-24T17:09:29.146 [DEBUG] [Thread-305810] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:09:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:09:29.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:09:29.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:09:29.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:09:29.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:09:29.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:09:22', tmtdew=21.5, humidity=24.52, cloud=0.0, wind=22.96, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:08:35.808', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:09:29.232 [DEBUG] [Thread-305813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:09:29.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:09:29.269 [DEBUG] [Thread-305814] [transport.py] [_log()] starting thread (client mode): 0xf81f0940
2025-12-24T17:09:29.269 [DEBUG] [Thread-305814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:09:29.283 [DEBUG] [Thread-305814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:09:29.284 [INFO] [Thread-305814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:09:29.291 [DEBUG] [Thread-305814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] client lang: <none>
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] server lang: <none>
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] kex follows: False
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] Compression: none
2025-12-24T17:09:29.292 [DEBUG] [Thread-305814] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:09:29.349 [DEBUG] [Thread-305814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:09:29.349 [DEBUG] [Thread-305814] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:09:29.349 [DEBUG] [Thread-305814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:09:29.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:09:29.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:09:29.406 [DEBUG] [Thread-305814] [transport.py] [_log()] userauth is OK
2025-12-24T17:09:29.406 [DEBUG] [Thread-305814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:09:29.406 [DEBUG] [Thread-305814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:09:29.406 [DEBUG] [Thread-305814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:09:29.406 [DEBUG] [Thread-305814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:09:29.423 [INFO] [Thread-305814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:09:29.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:09:29.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:09:30.293 [DEBUG] [Thread-305814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:09:30.293 [DEBUG] [Thread-305814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:09:30.341 [DEBUG] [Thread-305814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:09:30.341 [DEBUG] [Thread-305814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:09:30.349 [DEBUG] [Thread-305814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:09:30.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:09: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')
2025-12-24T17:09: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') -> 00000000
2025-12-24T17:09:30.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:09:30.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:09:30.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:09:30.384 [DEBUG] [Thread-305814] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:09:39.668 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:09:39.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:09:44.436 [DEBUG] [Thread-305816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:09:59.561 [DEBUG] [Thread-305817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:10:00.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:10:00.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:10:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:10:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 9, 56), 21.49, 24.62, 0.0, 26.06, 23.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:10:01.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:09:56
2025-12-24T17:10:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:10:01.642 [DEBUG] [Thread-305818] [transport.py] [_log()] starting thread (client mode): 0xf572a710
2025-12-24T17:10:01.643 [DEBUG] [Thread-305818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:10:01.643 [DEBUG] [Thread-305818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:10:01.643 [INFO] [Thread-305818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:10:01.649 [DEBUG] [Thread-305818] [transport.py] [_log()] client lang: <none>
2025-12-24T17:10:01.650 [DEBUG] [Thread-305818] [transport.py] [_log()] server lang: <none>
2025-12-24T17:10:01.650 [DEBUG] [Thread-305818] [transport.py] [_log()] kex follows: False
2025-12-24T17:10:01.650 [DEBUG] [Thread-305818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:10:01.650 [DEBUG] [Thread-305818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:10:01.650 [DEBUG] [Thread-305818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:10:01.651 [DEBUG] [Thread-305818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:10:01.651 [DEBUG] [Thread-305818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:10:01.651 [DEBUG] [Thread-305818] [transport.py] [_log()] Compression: none
2025-12-24T17:10:01.651 [DEBUG] [Thread-305818] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:10:01.677 [DEBUG] [Thread-305818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:10:01.681 [DEBUG] [Thread-305818] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:10:01.683 [DEBUG] [Thread-305818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:10:01.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:10:01.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:10:01.688 [DEBUG] [Thread-305818] [transport.py] [_log()] userauth is OK
2025-12-24T17:10:01.688 [DEBUG] [Thread-305818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:10:01.688 [DEBUG] [Thread-305818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:10:01.688 [DEBUG] [Thread-305818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:10:01.689 [DEBUG] [Thread-305818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:10:01.710 [INFO] [Thread-305818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:10:01.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:10:02.319 [DEBUG] [Thread-305818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:10:02.319 [DEBUG] [Thread-305818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:10:02.319 [DEBUG] [Thread-305818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:10:02.360 [DEBUG] [Thread-305818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:10:02.360 [DEBUG] [Thread-305818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:10:02.363 [DEBUG] [Thread-305818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:10:02.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:10:02.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:10:02.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:10:02.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:10:02.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:10:02.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:10:02.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:10:02.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:10:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:10:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.631664 -999.00  +23.60  26.56     30   +5.40 1 2 1 1 1   887    0 17.13 -29.88 ----- 26.6 26.6 177.0 31.8 27.6 -24.1 27.4 -24.0 29.1 -21.9 29.5 -23.7
2025-12-24T17:10:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:10:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:10:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.631664
2025-12-24T17:10:02.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:10:02.394 [DEBUG] [Thread-305818] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:10:02.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:10:02.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:10:02.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:10:02.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T17:10:02.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:09:56', tmtdew=21.49, humidity=24.62, cloud=0.0, wind=26.06, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:09:35.770', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:10:02.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:10:02.485 [DEBUG] [Thread-305821] [transport.py] [_log()] starting thread (client mode): 0xf578abc0
2025-12-24T17:10:02.485 [DEBUG] [Thread-305821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:10:02.500 [DEBUG] [Thread-305821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:10:02.500 [INFO] [Thread-305821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] client lang: <none>
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] server lang: <none>
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] kex follows: False
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] Compression: none
2025-12-24T17:10:02.508 [DEBUG] [Thread-305821] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:10:02.566 [DEBUG] [Thread-305821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:10:02.567 [DEBUG] [Thread-305821] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:10:02.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:10:02.568 [DEBUG] [Thread-305821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:10:02.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:10:02.622 [DEBUG] [Thread-305821] [transport.py] [_log()] userauth is OK
2025-12-24T17:10:02.623 [DEBUG] [Thread-305821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:10:02.623 [DEBUG] [Thread-305821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:10:02.623 [DEBUG] [Thread-305821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:10:02.623 [DEBUG] [Thread-305821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:10:02.642 [INFO] [Thread-305821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:10:02.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:10:02.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:10:03.470 [DEBUG] [Thread-305821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:10:03.470 [DEBUG] [Thread-305821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:10:03.518 [DEBUG] [Thread-305821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:10:03.518 [DEBUG] [Thread-305821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:10:03.527 [DEBUG] [Thread-305821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:10:03.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:10:03.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')
2025-12-24T17:10:03.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:10:03.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:10:03.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:10:03.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:10:03.563 [DEBUG] [Thread-305821] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:10:14.673 [DEBUG] [Thread-305823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:10:26.619 [DEBUG] [Thread-305824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:10:29.843 [DEBUG] [Thread-305825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:10:33.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:10:33.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:10:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:10:34.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 10, 29), 21.49, 24.64, 0.0, 26.7, 23.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:10:34.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:10:29
2025-12-24T17:10:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:10:35.364 [DEBUG] [Thread-305826] [transport.py] [_log()] starting thread (client mode): 0xf5751e10
2025-12-24T17:10:35.365 [DEBUG] [Thread-305826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:10:35.375 [DEBUG] [Thread-305826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:10:35.375 [INFO] [Thread-305826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:10:35.380 [DEBUG] [Thread-305826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] client lang: <none>
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] server lang: <none>
2025-12-24T17:10:35.381 [DEBUG] [Thread-305826] [transport.py] [_log()] kex follows: False
2025-12-24T17:10:35.382 [DEBUG] [Thread-305826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:10:35.382 [DEBUG] [Thread-305826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:10:35.382 [DEBUG] [Thread-305826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:10:35.383 [DEBUG] [Thread-305826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:10:35.383 [DEBUG] [Thread-305826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:10:35.383 [DEBUG] [Thread-305826] [transport.py] [_log()] Compression: none
2025-12-24T17:10:35.383 [DEBUG] [Thread-305826] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:10:35.423 [DEBUG] [Thread-305826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:10:35.428 [DEBUG] [Thread-305826] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:10:35.430 [DEBUG] [Thread-305826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:10:35.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:10:35.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:10:35.436 [DEBUG] [Thread-305826] [transport.py] [_log()] userauth is OK
2025-12-24T17:10:35.436 [DEBUG] [Thread-305826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:10:35.437 [DEBUG] [Thread-305826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:10:35.437 [DEBUG] [Thread-305826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:10:35.437 [DEBUG] [Thread-305826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:10:35.477 [INFO] [Thread-305826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:10:35.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:10:36.320 [DEBUG] [Thread-305826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:10:36.320 [DEBUG] [Thread-305826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:10:36.322 [DEBUG] [Thread-305826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:10:36.361 [DEBUG] [Thread-305826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:10:36.362 [DEBUG] [Thread-305826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:10:36.365 [DEBUG] [Thread-305826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:10:36.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:10:36.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:10:36.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:10:36.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:10:36.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:10:36.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:10:36.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:10:36.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:10:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:10:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.632011 -999.00  +23.50  23.18     30   +5.30 1 1 1 1 1   887    0 16.68 -30.22 ----- 23.2 23.2 191.2 27.4 27.6 -24.4 27.3 -24.3 29.1 -23.4 29.5 -24.3
2025-12-24T17:10:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:10:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:10:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.632011
2025-12-24T17:10:36.403 [DEBUG] [Thread-305826] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:10:36.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:10:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:10:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:10:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:10:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:10:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:10:29', tmtdew=21.49, humidity=24.64, cloud=0.0, wind=26.7, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:10:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:10:36.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:10:36.518 [DEBUG] [Thread-305829] [transport.py] [_log()] starting thread (client mode): 0xf5773a90
2025-12-24T17:10:36.518 [DEBUG] [Thread-305829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:10:36.532 [DEBUG] [Thread-305829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:10:36.532 [INFO] [Thread-305829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] client lang: <none>
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] server lang: <none>
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] kex follows: False
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:10:36.540 [DEBUG] [Thread-305829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:10:36.541 [DEBUG] [Thread-305829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:10:36.541 [DEBUG] [Thread-305829] [transport.py] [_log()] Compression: none
2025-12-24T17:10:36.541 [DEBUG] [Thread-305829] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:10:36.599 [DEBUG] [Thread-305829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:10:36.599 [DEBUG] [Thread-305829] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:10:36.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:10:36.601 [DEBUG] [Thread-305829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:10:36.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:10:36.655 [DEBUG] [Thread-305829] [transport.py] [_log()] userauth is OK
2025-12-24T17:10:36.655 [DEBUG] [Thread-305829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:10:36.655 [DEBUG] [Thread-305829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:10:36.656 [DEBUG] [Thread-305829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:10:36.656 [DEBUG] [Thread-305829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:10:36.674 [INFO] [Thread-305829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:10:36.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:10:36.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:10:37.497 [DEBUG] [Thread-305829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:10:37.497 [DEBUG] [Thread-305829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:10:37.544 [DEBUG] [Thread-305829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:10:37.544 [DEBUG] [Thread-305829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:10:37.553 [DEBUG] [Thread-305829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:10:37.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:10:37.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:10:37.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:10:37.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:10:37.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:10:37.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:10:37.592 [DEBUG] [Thread-305829] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:10:39.830 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:10:39.833 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:10:44.938 [DEBUG] [Thread-305831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:11:00.066 [DEBUG] [Thread-305832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:11:07.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:11:07.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:11:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:11:08.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 11, 2), 21.55, 24.55, 0.0, 29.41, 23.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:11:08.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:11:02
2025-12-24T17:11:08.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:11:08.881 [DEBUG] [Thread-305833] [transport.py] [_log()] starting thread (client mode): 0xf572cee0
2025-12-24T17:11:08.882 [DEBUG] [Thread-305833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:11:08.882 [DEBUG] [Thread-305833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:11:08.882 [INFO] [Thread-305833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:11:08.887 [DEBUG] [Thread-305833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] client lang: <none>
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] server lang: <none>
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] kex follows: False
2025-12-24T17:11:08.888 [DEBUG] [Thread-305833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:11:08.889 [DEBUG] [Thread-305833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:11:08.889 [DEBUG] [Thread-305833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:11:08.889 [DEBUG] [Thread-305833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:11:08.889 [DEBUG] [Thread-305833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:11:08.889 [DEBUG] [Thread-305833] [transport.py] [_log()] Compression: none
2025-12-24T17:11:08.889 [DEBUG] [Thread-305833] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:11:08.915 [DEBUG] [Thread-305833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:11:08.918 [DEBUG] [Thread-305833] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:11:08.920 [DEBUG] [Thread-305833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:11:08.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:11:08.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:11:08.924 [DEBUG] [Thread-305833] [transport.py] [_log()] userauth is OK
2025-12-24T17:11:08.925 [DEBUG] [Thread-305833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:11:08.925 [DEBUG] [Thread-305833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:11:08.925 [DEBUG] [Thread-305833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:11:08.925 [DEBUG] [Thread-305833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:11:08.940 [INFO] [Thread-305833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:11:08.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:11:09.603 [DEBUG] [Thread-305833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:11:09.603 [DEBUG] [Thread-305833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:11:09.604 [DEBUG] [Thread-305833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:11:09.644 [DEBUG] [Thread-305833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:11:09.644 [DEBUG] [Thread-305833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:11:09.647 [DEBUG] [Thread-305833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:11:09.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:11:09.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:11:09.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:11:09.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:11:09.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:11:09.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:11:09.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:11:09.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:11:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:11:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.632359 -999.00  +23.50  20.20     30   +5.30 1 1 1 1 1   887    0 16.95 -26.50 ----- 20.2 20.2 180.2 25.2 27.7 -24.6 27.4 -23.6 29.1 -22.8 29.4 -25.1
2025-12-24T17:11:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:11:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:11:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.632359
2025-12-24T17:11:09.676 [DEBUG] [Thread-305833] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:11:09.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:11:09.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:11:09.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:11:09.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:11:09.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:11:09.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:11:02', tmtdew=21.55, humidity=24.55, cloud=0.0, wind=29.41, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:10:35.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:11:09.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:11:09.781 [DEBUG] [Thread-305836] [transport.py] [_log()] starting thread (client mode): 0xf5752ec0
2025-12-24T17:11:09.781 [DEBUG] [Thread-305836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:11:09.795 [DEBUG] [Thread-305836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:11:09.795 [INFO] [Thread-305836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] client lang: <none>
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] server lang: <none>
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] kex follows: False
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] Compression: none
2025-12-24T17:11:09.803 [DEBUG] [Thread-305836] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:11:09.862 [DEBUG] [Thread-305836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:11:09.863 [DEBUG] [Thread-305836] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:11:09.863 [DEBUG] [Thread-305836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:11:09.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:11:09.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:11:09.918 [DEBUG] [Thread-305836] [transport.py] [_log()] userauth is OK
2025-12-24T17:11:09.919 [DEBUG] [Thread-305836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:11:09.919 [DEBUG] [Thread-305836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:11:09.919 [DEBUG] [Thread-305836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:11:09.919 [DEBUG] [Thread-305836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:11:09.940 [INFO] [Thread-305836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:11:09.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:11:09.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:11:10.783 [DEBUG] [Thread-305836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:11:10.783 [DEBUG] [Thread-305836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:11:10.831 [DEBUG] [Thread-305836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:11:10.831 [DEBUG] [Thread-305836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:11:10.839 [DEBUG] [Thread-305836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:11:10.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:11:10.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:11:10.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
2025-12-24T17:11:10.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:11:10.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:11:10.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:11:10.872 [DEBUG] [Thread-305836] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:11:15.166 [DEBUG] [Thread-305838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:11:26.873 [DEBUG] [Thread-305839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:11:30.342 [DEBUG] [Thread-305840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:11:39.989 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:11:40.001 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:11:40.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:11:40.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:11:40.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:11:41.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 11, 36), 21.33, 24.92, 0.0, 24.54, 23.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:11:41.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:11:36
2025-12-24T17:11:42.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:11:42.197 [DEBUG] [Thread-305841] [transport.py] [_log()] starting thread (client mode): 0xf5752bc0
2025-12-24T17:11:42.198 [DEBUG] [Thread-305841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:11:42.201 [DEBUG] [Thread-305841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:11:42.201 [INFO] [Thread-305841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:11:42.205 [DEBUG] [Thread-305841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] client lang: <none>
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] server lang: <none>
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] kex follows: False
2025-12-24T17:11:42.206 [DEBUG] [Thread-305841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:11:42.207 [DEBUG] [Thread-305841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:11:42.207 [DEBUG] [Thread-305841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:11:42.207 [DEBUG] [Thread-305841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:11:42.207 [DEBUG] [Thread-305841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:11:42.208 [DEBUG] [Thread-305841] [transport.py] [_log()] Compression: none
2025-12-24T17:11:42.208 [DEBUG] [Thread-305841] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:11:42.239 [DEBUG] [Thread-305841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:11:42.243 [DEBUG] [Thread-305841] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:11:42.245 [DEBUG] [Thread-305841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:11:42.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:11:42.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:11:42.251 [DEBUG] [Thread-305841] [transport.py] [_log()] userauth is OK
2025-12-24T17:11:42.251 [DEBUG] [Thread-305841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:11:42.251 [DEBUG] [Thread-305841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:11:42.251 [DEBUG] [Thread-305841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:11:42.251 [DEBUG] [Thread-305841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:11:42.278 [INFO] [Thread-305841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:11:42.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:11:43.065 [DEBUG] [Thread-305841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:11:43.065 [DEBUG] [Thread-305841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:11:43.066 [DEBUG] [Thread-305841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:11:43.107 [DEBUG] [Thread-305841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:11:43.107 [DEBUG] [Thread-305841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:11:43.109 [DEBUG] [Thread-305841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:11:43.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:11:43.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:11:43.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:11:43.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:11:43.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:11:43.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:11:43.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:11:43.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:11:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:11:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.632706 -999.00  +23.60  18.14     30   +5.30 1 1 1 1 1   887    0 17.12 -24.88 ----- 18.1 18.1 183.8 25.5 27.7 -24.6 27.3 -26.5 29.1 -22.4 29.5 -24.6
2025-12-24T17:11:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:11:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:11:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.632706
2025-12-24T17:11:43.144 [DEBUG] [Thread-305841] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:11:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:11:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:11:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:11:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:11:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:11:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:11:36', tmtdew=21.33, humidity=24.92, cloud=0.0, wind=24.54, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:11:05.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:11:43.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:11:43.256 [DEBUG] [Thread-305844] [transport.py] [_log()] starting thread (client mode): 0xf572cfd0
2025-12-24T17:11:43.256 [DEBUG] [Thread-305844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:11:43.270 [DEBUG] [Thread-305844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:11:43.270 [INFO] [Thread-305844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] client lang: <none>
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] server lang: <none>
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] kex follows: False
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] Compression: none
2025-12-24T17:11:43.278 [DEBUG] [Thread-305844] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:11:43.333 [DEBUG] [Thread-305844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:11:43.333 [DEBUG] [Thread-305844] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:11:43.333 [DEBUG] [Thread-305844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:11:43.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:11:43.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:11:43.390 [DEBUG] [Thread-305844] [transport.py] [_log()] userauth is OK
2025-12-24T17:11:43.390 [DEBUG] [Thread-305844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:11:43.390 [DEBUG] [Thread-305844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:11:43.390 [DEBUG] [Thread-305844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:11:43.390 [DEBUG] [Thread-305844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:11:43.404 [INFO] [Thread-305844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:11:43.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:11:43.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:11:44.284 [DEBUG] [Thread-305844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:11:44.284 [DEBUG] [Thread-305844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:11:44.331 [DEBUG] [Thread-305844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:11:44.332 [DEBUG] [Thread-305844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:11:44.340 [DEBUG] [Thread-305844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:11:44.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:11:44.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:11:44.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:11:44.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:11:44.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:11:44.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:11:44.373 [DEBUG] [Thread-305844] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:11:45.418 [DEBUG] [Thread-305846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:12:00.601 [DEBUG] [Thread-305847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:12:14.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:12:14.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:12:14.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:12:15.713 [DEBUG] [Thread-305848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:12:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 12, 9), 21.09, 25.25, 0.0, 24.24, 23.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:12:15.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:12:09
2025-12-24T17:12:15.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:12:16.135 [DEBUG] [Thread-305849] [transport.py] [_log()] starting thread (client mode): 0xf5789f30
2025-12-24T17:12:16.135 [DEBUG] [Thread-305849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:12:16.148 [DEBUG] [Thread-305849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:12:16.149 [INFO] [Thread-305849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:12:16.155 [DEBUG] [Thread-305849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:12:16.155 [DEBUG] [Thread-305849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:12:16.155 [DEBUG] [Thread-305849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:12:16.155 [DEBUG] [Thread-305849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:12:16.155 [DEBUG] [Thread-305849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:12:16.155 [DEBUG] [Thread-305849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:12:16.155 [DEBUG] [Thread-305849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:12:16.156 [DEBUG] [Thread-305849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:12:16.156 [DEBUG] [Thread-305849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:12:16.156 [DEBUG] [Thread-305849] [transport.py] [_log()] client lang: <none>
2025-12-24T17:12:16.156 [DEBUG] [Thread-305849] [transport.py] [_log()] server lang: <none>
2025-12-24T17:12:16.156 [DEBUG] [Thread-305849] [transport.py] [_log()] kex follows: False
2025-12-24T17:12:16.156 [DEBUG] [Thread-305849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:12:16.157 [DEBUG] [Thread-305849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:12:16.157 [DEBUG] [Thread-305849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:12:16.157 [DEBUG] [Thread-305849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:12:16.158 [DEBUG] [Thread-305849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:12:16.158 [DEBUG] [Thread-305849] [transport.py] [_log()] Compression: none
2025-12-24T17:12:16.158 [DEBUG] [Thread-305849] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:12:16.199 [DEBUG] [Thread-305849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:12:16.204 [DEBUG] [Thread-305849] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:12:16.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:12:16.208 [DEBUG] [Thread-305849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:12:16.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:12:16.211 [DEBUG] [Thread-305849] [transport.py] [_log()] userauth is OK
2025-12-24T17:12:16.212 [DEBUG] [Thread-305849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:12:16.212 [DEBUG] [Thread-305849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:12:16.212 [DEBUG] [Thread-305849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:12:16.212 [DEBUG] [Thread-305849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:12:16.239 [INFO] [Thread-305849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:12:16.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:12:16.884 [DEBUG] [Thread-305849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:12:16.885 [DEBUG] [Thread-305849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:12:16.886 [DEBUG] [Thread-305849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:12:16.926 [DEBUG] [Thread-305849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:12:16.927 [DEBUG] [Thread-305849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:12:16.930 [DEBUG] [Thread-305849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:12:16.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:12:16.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:12:16.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:12:16.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:12:16.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:12:16.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:12:16.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:12:16.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:12:16.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:12:16.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.633053 -999.00  +23.70  14.28     30   +5.40 1 1 1 1 1   887    0 17.80 -17.91 ----- 14.3 14.3 195.8 22.1 27.8 -25.0 27.5 -25.6 29.3 -23.1 29.6 -23.8
2025-12-24T17:12:16.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:12:16.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:12:16.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.633053
2025-12-24T17:12:16.966 [DEBUG] [Thread-305849] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:12:16.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:12:16.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:12:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:12:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:12:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:12:16.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:12:09', tmtdew=21.09, humidity=25.25, cloud=0.0, wind=24.24, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:11:35.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:12:17.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:12:17.081 [DEBUG] [Thread-305852] [transport.py] [_log()] starting thread (client mode): 0xf5753430
2025-12-24T17:12:17.081 [DEBUG] [Thread-305852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:12:17.095 [DEBUG] [Thread-305852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:12:17.095 [INFO] [Thread-305852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:12:17.103 [DEBUG] [Thread-305852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:12:17.103 [DEBUG] [Thread-305852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:12:17.103 [DEBUG] [Thread-305852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:12:17.103 [DEBUG] [Thread-305852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:12:17.103 [DEBUG] [Thread-305852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:12:17.103 [DEBUG] [Thread-305852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:12:17.103 [DEBUG] [Thread-305852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:12:17.103 [DEBUG] [Thread-305852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] client lang: <none>
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] server lang: <none>
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] kex follows: False
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] Compression: none
2025-12-24T17:12:17.104 [DEBUG] [Thread-305852] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:12:17.163 [DEBUG] [Thread-305852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:12:17.164 [DEBUG] [Thread-305852] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:12:17.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:12:17.164 [DEBUG] [Thread-305852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:12:17.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:12:17.219 [DEBUG] [Thread-305852] [transport.py] [_log()] userauth is OK
2025-12-24T17:12:17.219 [DEBUG] [Thread-305852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:12:17.219 [DEBUG] [Thread-305852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:12:17.219 [DEBUG] [Thread-305852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:12:17.219 [DEBUG] [Thread-305852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:12:17.238 [INFO] [Thread-305852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:12:17.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:12:17.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:12:18.065 [DEBUG] [Thread-305852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:12:18.066 [DEBUG] [Thread-305852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:12:18.113 [DEBUG] [Thread-305852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:12:18.113 [DEBUG] [Thread-305852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:12:18.121 [DEBUG] [Thread-305852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:12:18.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:12:18.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:12:18.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:12:18.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:12:18.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:12:18.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:12:18.157 [DEBUG] [Thread-305852] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:12:27.106 [DEBUG] [Thread-305854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:12:30.807 [DEBUG] [Thread-305855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:12:40.142 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:12:40.143 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:12:46.060 [DEBUG] [Thread-305856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:12:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:12:48.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:12:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:12:49.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 12, 42), 21.28, 24.77, 0.0, 25.35, 23.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:12:49.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:12:42
2025-12-24T17:12:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:12:49.482 [DEBUG] [Thread-305857] [transport.py] [_log()] starting thread (client mode): 0xf572bee0
2025-12-24T17:12:49.483 [DEBUG] [Thread-305857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:12:49.490 [DEBUG] [Thread-305857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:12:49.490 [INFO] [Thread-305857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:12:49.494 [DEBUG] [Thread-305857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:12:49.494 [DEBUG] [Thread-305857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:12:49.494 [DEBUG] [Thread-305857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:12:49.494 [DEBUG] [Thread-305857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:12:49.494 [DEBUG] [Thread-305857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:12:49.494 [DEBUG] [Thread-305857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:12:49.494 [DEBUG] [Thread-305857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] client lang: <none>
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] server lang: <none>
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] kex follows: False
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] Compression: none
2025-12-24T17:12:49.495 [DEBUG] [Thread-305857] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:12:49.530 [DEBUG] [Thread-305857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:12:49.533 [DEBUG] [Thread-305857] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:12:49.535 [DEBUG] [Thread-305857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:12:49.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:12:49.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:12:49.541 [DEBUG] [Thread-305857] [transport.py] [_log()] userauth is OK
2025-12-24T17:12:49.541 [DEBUG] [Thread-305857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:12:49.542 [DEBUG] [Thread-305857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:12:49.542 [DEBUG] [Thread-305857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:12:49.542 [DEBUG] [Thread-305857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:12:49.579 [INFO] [Thread-305857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:12:49.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:12:50.209 [DEBUG] [Thread-305857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:12:50.209 [DEBUG] [Thread-305857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:12:50.209 [DEBUG] [Thread-305857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:12:50.250 [DEBUG] [Thread-305857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:12:50.250 [DEBUG] [Thread-305857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:12:50.253 [DEBUG] [Thread-305857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:12:50.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:12:50.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:12:50.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:12:50.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:12:50.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:12:50.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:12:50.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:12:50.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:12:50.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:12:50.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.633400 -999.00  +23.90  17.84     30   +5.40 1 1 1 1 1   887    0 17.16 -14.19 ----- 17.8 17.8 178.6 21.0 27.8 -24.8 27.5 -24.9 29.3 -23.2 29.6 -25.1
2025-12-24T17:12:50.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:12:50.281 [DEBUG] [Thread-305857] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:12:50.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:12:50.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.633400
2025-12-24T17:12:50.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:12:50.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:12:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:12:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:12:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:12:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:12:42', tmtdew=21.28, humidity=24.77, cloud=0.0, wind=25.35, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:12:05.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:12:50.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:12:50.410 [DEBUG] [Thread-305860] [transport.py] [_log()] starting thread (client mode): 0xf5728c10
2025-12-24T17:12:50.410 [DEBUG] [Thread-305860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:12:50.427 [DEBUG] [Thread-305860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:12:50.428 [INFO] [Thread-305860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:12:50.435 [DEBUG] [Thread-305860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:12:50.435 [DEBUG] [Thread-305860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] client lang: <none>
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] server lang: <none>
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] kex follows: False
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:12:50.436 [DEBUG] [Thread-305860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:12:50.437 [DEBUG] [Thread-305860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:12:50.437 [DEBUG] [Thread-305860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:12:50.437 [DEBUG] [Thread-305860] [transport.py] [_log()] Compression: none
2025-12-24T17:12:50.437 [DEBUG] [Thread-305860] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:12:50.494 [DEBUG] [Thread-305860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:12:50.494 [DEBUG] [Thread-305860] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:12:50.495 [DEBUG] [Thread-305860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:12:50.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:12:50.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:12:50.550 [DEBUG] [Thread-305860] [transport.py] [_log()] userauth is OK
2025-12-24T17:12:50.551 [DEBUG] [Thread-305860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:12:50.551 [DEBUG] [Thread-305860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:12:50.551 [DEBUG] [Thread-305860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:12:50.551 [DEBUG] [Thread-305860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:12:50.574 [INFO] [Thread-305860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:12:50.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:12:50.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:12:51.441 [DEBUG] [Thread-305860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:12:51.441 [DEBUG] [Thread-305860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:12:51.481 [DEBUG] [Thread-305860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:12:51.482 [DEBUG] [Thread-305860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:12:51.490 [DEBUG] [Thread-305860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:12:51.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:12:51.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:12:51.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:12:51.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:12:51.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:12:51.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:12:51.528 [DEBUG] [Thread-305860] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:13:01.188 [DEBUG] [Thread-305862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:13:16.355 [DEBUG] [Thread-305863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:13:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:13:21.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:13:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:13:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 13, 15), 21.27, 24.78, 0.0, 27.0, 23.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:13:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:13:15
2025-12-24T17:13:23.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:13:23.422 [DEBUG] [Thread-305864] [transport.py] [_log()] starting thread (client mode): 0xf572b250
2025-12-24T17:13:23.422 [DEBUG] [Thread-305864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:13:23.427 [DEBUG] [Thread-305864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:13:23.428 [INFO] [Thread-305864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] client lang: <none>
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] server lang: <none>
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] kex follows: False
2025-12-24T17:13:23.436 [DEBUG] [Thread-305864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:13:23.437 [DEBUG] [Thread-305864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:13:23.437 [DEBUG] [Thread-305864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:13:23.437 [DEBUG] [Thread-305864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:13:23.437 [DEBUG] [Thread-305864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:13:23.437 [DEBUG] [Thread-305864] [transport.py] [_log()] Compression: none
2025-12-24T17:13:23.437 [DEBUG] [Thread-305864] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:13:23.480 [DEBUG] [Thread-305864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:13:23.485 [DEBUG] [Thread-305864] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:13:23.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:13:23.489 [DEBUG] [Thread-305864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:13:23.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:13:23.492 [DEBUG] [Thread-305864] [transport.py] [_log()] userauth is OK
2025-12-24T17:13:23.492 [DEBUG] [Thread-305864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:13:23.492 [DEBUG] [Thread-305864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:13:23.492 [DEBUG] [Thread-305864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:13:23.492 [DEBUG] [Thread-305864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:13:23.510 [INFO] [Thread-305864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:13:23.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:13:24.145 [DEBUG] [Thread-305864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:13:24.146 [DEBUG] [Thread-305864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:13:24.147 [DEBUG] [Thread-305864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:13:24.186 [DEBUG] [Thread-305864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:13:24.186 [DEBUG] [Thread-305864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:13:24.190 [DEBUG] [Thread-305864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:13:24.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:13:24.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:13:24.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:13:24.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:13:24.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:13:24.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:13:24.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:13:24.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:13:24.222 [DEBUG] [Thread-305864] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:13:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:13:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.633747 -999.00  +23.70  25.42     30   +5.30 1 1 1 1 1   887    0 17.76 -9.71 ----- 25.4 25.4 163.5 32.1 27.9 -25.0 27.6 -26.0 29.3 -22.9 29.7 -24.7
2025-12-24T17:13:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:13:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:13:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.633747
2025-12-24T17:13:24.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:13:24.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:13:24.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:13:24.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:13:24.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:13:24.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:13:15', tmtdew=21.27, humidity=24.78, cloud=0.0, wind=27.0, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:12:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:13:24.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:13:24.347 [DEBUG] [Thread-305867] [transport.py] [_log()] starting thread (client mode): 0xf578a170
2025-12-24T17:13:24.347 [DEBUG] [Thread-305867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:13:24.361 [DEBUG] [Thread-305867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:13:24.362 [INFO] [Thread-305867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] client lang: <none>
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] server lang: <none>
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] kex follows: False
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:13:24.370 [DEBUG] [Thread-305867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:13:24.371 [DEBUG] [Thread-305867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:13:24.371 [DEBUG] [Thread-305867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:13:24.371 [DEBUG] [Thread-305867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:13:24.371 [DEBUG] [Thread-305867] [transport.py] [_log()] Compression: none
2025-12-24T17:13:24.371 [DEBUG] [Thread-305867] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:13:24.426 [DEBUG] [Thread-305867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:13:24.426 [DEBUG] [Thread-305867] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:13:24.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:13:24.427 [DEBUG] [Thread-305867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:13:24.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:13:24.482 [DEBUG] [Thread-305867] [transport.py] [_log()] userauth is OK
2025-12-24T17:13:24.483 [DEBUG] [Thread-305867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:13:24.483 [DEBUG] [Thread-305867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:13:24.483 [DEBUG] [Thread-305867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:13:24.483 [DEBUG] [Thread-305867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:13:24.501 [INFO] [Thread-305867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:13:24.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:13:24.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:13:25.327 [DEBUG] [Thread-305867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:13:25.328 [DEBUG] [Thread-305867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:13:25.375 [DEBUG] [Thread-305867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:13:25.375 [DEBUG] [Thread-305867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:13:25.384 [DEBUG] [Thread-305867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:13:25.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:13:25.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:13:25.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:13:25.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:13:25.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:13:25.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:13:25.423 [DEBUG] [Thread-305867] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:13:27.344 [DEBUG] [Thread-305869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:13:31.467 [DEBUG] [Thread-305870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:13:40.292 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:13:40.293 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:13:46.608 [DEBUG] [Thread-305871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:13:55.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:13:55.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:13:55.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:13:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 13, 48), 21.4, 24.75, 0.0, 26.34, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:13:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:13:48
2025-12-24T17:13:56.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:13:56.939 [DEBUG] [Thread-305872] [transport.py] [_log()] starting thread (client mode): 0xf5752560
2025-12-24T17:13:56.940 [DEBUG] [Thread-305872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:13:56.950 [DEBUG] [Thread-305872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:13:56.950 [INFO] [Thread-305872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] client lang: <none>
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] server lang: <none>
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] kex follows: False
2025-12-24T17:13:56.954 [DEBUG] [Thread-305872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:13:56.955 [DEBUG] [Thread-305872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:13:56.955 [DEBUG] [Thread-305872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:13:56.955 [DEBUG] [Thread-305872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:13:56.955 [DEBUG] [Thread-305872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:13:56.955 [DEBUG] [Thread-305872] [transport.py] [_log()] Compression: none
2025-12-24T17:13:56.955 [DEBUG] [Thread-305872] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:13:56.984 [DEBUG] [Thread-305872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:13:56.988 [DEBUG] [Thread-305872] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:13:56.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:13:56.990 [DEBUG] [Thread-305872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:13:56.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:13:56.992 [DEBUG] [Thread-305872] [transport.py] [_log()] userauth is OK
2025-12-24T17:13:56.992 [DEBUG] [Thread-305872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:13:56.992 [DEBUG] [Thread-305872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:13:56.993 [DEBUG] [Thread-305872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:13:56.993 [DEBUG] [Thread-305872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:13:57.025 [INFO] [Thread-305872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:13:57.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:13:57.650 [DEBUG] [Thread-305872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:13:57.650 [DEBUG] [Thread-305872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:13:57.651 [DEBUG] [Thread-305872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:13:57.691 [DEBUG] [Thread-305872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:13:57.691 [DEBUG] [Thread-305872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:13:57.693 [DEBUG] [Thread-305872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:13:57.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:13:57.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:13:57.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:13:57.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:13:57.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:13:57.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:13:57.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:13:57.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:13:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:13:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.634095 -999.00  +23.60  16.36     30   +5.20 1 1 1 1 1   887    0 18.12 -4.46 ----- 16.4 16.4 144.3 25.8 27.8 -25.7 27.8 -24.7 29.3 -23.7 29.7 -24.9
2025-12-24T17:13:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:13:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:13:57.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.634095
2025-12-24T17:13:57.729 [DEBUG] [Thread-305872] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:13:57.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:13:57.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:13:57.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:13:57.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:13:57.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:13:57.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:13:48', tmtdew=21.4, humidity=24.75, cloud=0.0, wind=26.34, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:13:05.808', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:13:57.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:13:57.827 [DEBUG] [Thread-305875] [transport.py] [_log()] starting thread (client mode): 0xf5788b20
2025-12-24T17:13:57.827 [DEBUG] [Thread-305875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:13:57.842 [DEBUG] [Thread-305875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:13:57.842 [INFO] [Thread-305875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] client lang: <none>
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] server lang: <none>
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] kex follows: False
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:13:57.849 [DEBUG] [Thread-305875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:13:57.850 [DEBUG] [Thread-305875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:13:57.850 [DEBUG] [Thread-305875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:13:57.850 [DEBUG] [Thread-305875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:13:57.850 [DEBUG] [Thread-305875] [transport.py] [_log()] Compression: none
2025-12-24T17:13:57.850 [DEBUG] [Thread-305875] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:13:57.905 [DEBUG] [Thread-305875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:13:57.905 [DEBUG] [Thread-305875] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:13:57.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:13:57.905 [DEBUG] [Thread-305875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:13:57.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:13:57.962 [DEBUG] [Thread-305875] [transport.py] [_log()] userauth is OK
2025-12-24T17:13:57.962 [DEBUG] [Thread-305875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:13:57.962 [DEBUG] [Thread-305875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:13:57.962 [DEBUG] [Thread-305875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:13:57.962 [DEBUG] [Thread-305875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:13:57.976 [INFO] [Thread-305875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:13:57.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:13:57.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:13:58.805 [DEBUG] [Thread-305875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:13:58.805 [DEBUG] [Thread-305875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:13:58.853 [DEBUG] [Thread-305875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:13:58.853 [DEBUG] [Thread-305875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:13:58.861 [DEBUG] [Thread-305875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:13:58.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:13:58.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:13:58.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
2025-12-24T17:13:58.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:13:58.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:13:58.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:13:58.893 [DEBUG] [Thread-305875] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:14:01.671 [DEBUG] [Thread-305877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:14:16.866 [DEBUG] [Thread-305878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:14:27.578 [DEBUG] [Thread-305879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:14:28.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:14:28.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:14:28.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:14:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 14, 21), 21.39, 24.77, 0.0, 25.46, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:14:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:14:21
2025-12-24T17:14:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:14:30.173 [DEBUG] [Thread-305880] [transport.py] [_log()] starting thread (client mode): 0xf5728f40
2025-12-24T17:14:30.174 [DEBUG] [Thread-305880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:14:30.187 [DEBUG] [Thread-305880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:14:30.187 [INFO] [Thread-305880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:14:30.193 [DEBUG] [Thread-305880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] client lang: <none>
2025-12-24T17:14:30.194 [DEBUG] [Thread-305880] [transport.py] [_log()] server lang: <none>
2025-12-24T17:14:30.195 [DEBUG] [Thread-305880] [transport.py] [_log()] kex follows: False
2025-12-24T17:14:30.195 [DEBUG] [Thread-305880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:14:30.195 [DEBUG] [Thread-305880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:14:30.196 [DEBUG] [Thread-305880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:14:30.196 [DEBUG] [Thread-305880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:14:30.196 [DEBUG] [Thread-305880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:14:30.197 [DEBUG] [Thread-305880] [transport.py] [_log()] Compression: none
2025-12-24T17:14:30.197 [DEBUG] [Thread-305880] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:14:30.238 [DEBUG] [Thread-305880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:14:30.243 [DEBUG] [Thread-305880] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:14:30.245 [DEBUG] [Thread-305880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:14:30.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:14:30.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:14:30.250 [DEBUG] [Thread-305880] [transport.py] [_log()] userauth is OK
2025-12-24T17:14:30.251 [DEBUG] [Thread-305880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:14:30.251 [DEBUG] [Thread-305880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:14:30.251 [DEBUG] [Thread-305880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:14:30.251 [DEBUG] [Thread-305880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:14:30.294 [INFO] [Thread-305880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:14:30.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:14:30.938 [DEBUG] [Thread-305880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:14:30.938 [DEBUG] [Thread-305880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:14:30.949 [DEBUG] [Thread-305880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:14:30.979 [DEBUG] [Thread-305880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:14:30.980 [DEBUG] [Thread-305880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:14:30.983 [DEBUG] [Thread-305880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:14:30.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:14:30.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:14:31.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:14:31.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:14:31.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:14:31.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:14:31.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:14:31.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:14:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:14:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.634442 -999.00  +23.50  14.81     30   +5.20 1 1 1 1 1   887    0 18.25 -0.19 ----- 14.8 14.8 169.4 26.1 27.9 -25.3 27.8 -24.6 29.3 -23.3 29.8 -24.7
2025-12-24T17:14:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:14:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:14:31.013 [DEBUG] [Thread-305880] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:14:31.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.634442
2025-12-24T17:14:31.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:14:31.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:14:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:14:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:14:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:14:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:14:21', tmtdew=21.39, humidity=24.77, cloud=0.0, wind=25.46, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:13:35.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:14:31.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:14:31.134 [DEBUG] [Thread-305883] [transport.py] [_log()] starting thread (client mode): 0xf81885e0
2025-12-24T17:14:31.134 [DEBUG] [Thread-305883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:14:31.148 [DEBUG] [Thread-305883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:14:31.148 [INFO] [Thread-305883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:14:31.155 [DEBUG] [Thread-305883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:14:31.156 [DEBUG] [Thread-305883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:14:31.156 [DEBUG] [Thread-305883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:14:31.156 [DEBUG] [Thread-305883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:14:31.156 [DEBUG] [Thread-305883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:14:31.156 [DEBUG] [Thread-305883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:14:31.156 [DEBUG] [Thread-305883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:14:31.156 [DEBUG] [Thread-305883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:14:31.156 [DEBUG] [Thread-305883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:14:31.157 [DEBUG] [Thread-305883] [transport.py] [_log()] client lang: <none>
2025-12-24T17:14:31.157 [DEBUG] [Thread-305883] [transport.py] [_log()] server lang: <none>
2025-12-24T17:14:31.157 [DEBUG] [Thread-305883] [transport.py] [_log()] kex follows: False
2025-12-24T17:14:31.157 [DEBUG] [Thread-305883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:14:31.157 [DEBUG] [Thread-305883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:14:31.157 [DEBUG] [Thread-305883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:14:31.157 [DEBUG] [Thread-305883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:14:31.157 [DEBUG] [Thread-305883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:14:31.158 [DEBUG] [Thread-305883] [transport.py] [_log()] Compression: none
2025-12-24T17:14:31.158 [DEBUG] [Thread-305883] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:14:31.216 [DEBUG] [Thread-305883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:14:31.216 [DEBUG] [Thread-305883] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:14:31.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:14:31.218 [DEBUG] [Thread-305883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:14:31.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:14:31.275 [DEBUG] [Thread-305883] [transport.py] [_log()] userauth is OK
2025-12-24T17:14:31.275 [DEBUG] [Thread-305883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:14:31.276 [DEBUG] [Thread-305883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:14:31.276 [DEBUG] [Thread-305883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:14:31.276 [DEBUG] [Thread-305883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:14:31.297 [INFO] [Thread-305883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:14:31.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:14:31.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:14:32.005 [DEBUG] [Thread-305885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:14:32.130 [DEBUG] [Thread-305883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:14:32.130 [DEBUG] [Thread-305883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:14:32.178 [DEBUG] [Thread-305883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:14:32.178 [DEBUG] [Thread-305883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:14:32.187 [DEBUG] [Thread-305883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:14:32.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:14: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')
2025-12-24T17:14:32.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:14:32.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:14:32.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:14:32.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:14:32.228 [DEBUG] [Thread-305883] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:14:40.442 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:14:40.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:14:47.153 [DEBUG] [Thread-305886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:15:02.262 [DEBUG] [Thread-305887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:15:02.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:15:02.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:15:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:15:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 14, 55), 21.41, 24.54, 0.0, 29.64, 23.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:15:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:14:55
2025-12-24T17:15:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:15:04.312 [DEBUG] [Thread-305888] [transport.py] [_log()] starting thread (client mode): 0xf81e4460
2025-12-24T17:15:04.313 [DEBUG] [Thread-305888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:15:04.322 [DEBUG] [Thread-305888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:15:04.322 [INFO] [Thread-305888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:15:04.326 [DEBUG] [Thread-305888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:15:04.326 [DEBUG] [Thread-305888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:15:04.326 [DEBUG] [Thread-305888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:15:04.326 [DEBUG] [Thread-305888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:15:04.326 [DEBUG] [Thread-305888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:15:04.326 [DEBUG] [Thread-305888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:15:04.326 [DEBUG] [Thread-305888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] client lang: <none>
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] server lang: <none>
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] kex follows: False
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:15:04.327 [DEBUG] [Thread-305888] [transport.py] [_log()] Compression: none
2025-12-24T17:15:04.328 [DEBUG] [Thread-305888] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:15:04.364 [DEBUG] [Thread-305888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:15:04.370 [DEBUG] [Thread-305888] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:15:04.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:15:04.374 [DEBUG] [Thread-305888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:15:04.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:15:04.379 [DEBUG] [Thread-305888] [transport.py] [_log()] userauth is OK
2025-12-24T17:15:04.379 [DEBUG] [Thread-305888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:15:04.379 [DEBUG] [Thread-305888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:15:04.379 [DEBUG] [Thread-305888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:15:04.379 [DEBUG] [Thread-305888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:15:04.417 [INFO] [Thread-305888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:15:04.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:15:05.457 [DEBUG] [Thread-305888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:15:05.458 [DEBUG] [Thread-305888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:15:05.460 [DEBUG] [Thread-305888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:15:05.498 [DEBUG] [Thread-305888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:15:05.498 [DEBUG] [Thread-305888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:15:05.501 [DEBUG] [Thread-305888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:15:05.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:15:05.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:15:05.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:15:05.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:15:05.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:15:05.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:15:05.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:15:05.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:15:05.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:15:05.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.634789 -999.00  +23.50  19.97     30   +5.30 1 1 1 1 1   887    0 18.43 3.16 ----- 20.0 20.0 165.2 27.0 27.9 -25.5 27.8 -24.8 29.4 -23.2 29.8 -24.7
2025-12-24T17:15:05.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:15:05.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:15:05.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.634789
2025-12-24T17:15:05.562 [DEBUG] [Thread-305888] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:15:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:15:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:15:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:15:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:15:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:15:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:14:55', tmtdew=21.41, humidity=24.54, cloud=0.0, wind=29.64, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:14:05.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:15:05.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:15:05.676 [DEBUG] [Thread-305891] [transport.py] [_log()] starting thread (client mode): 0xf578bdf0
2025-12-24T17:15:05.676 [DEBUG] [Thread-305891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:15:05.691 [DEBUG] [Thread-305891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:15:05.691 [INFO] [Thread-305891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] client lang: <none>
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] server lang: <none>
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] kex follows: False
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:15:05.699 [DEBUG] [Thread-305891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:15:05.700 [DEBUG] [Thread-305891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:15:05.700 [DEBUG] [Thread-305891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:15:05.700 [DEBUG] [Thread-305891] [transport.py] [_log()] Compression: none
2025-12-24T17:15:05.700 [DEBUG] [Thread-305891] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:15:05.759 [DEBUG] [Thread-305891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:15:05.760 [DEBUG] [Thread-305891] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:15:05.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:15:05.761 [DEBUG] [Thread-305891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:15:05.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:15:05.818 [DEBUG] [Thread-305891] [transport.py] [_log()] userauth is OK
2025-12-24T17:15:05.819 [DEBUG] [Thread-305891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:15:05.819 [DEBUG] [Thread-305891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:15:05.819 [DEBUG] [Thread-305891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:15:05.819 [DEBUG] [Thread-305891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:15:05.837 [INFO] [Thread-305891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:15:05.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:15:05.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:15:06.686 [DEBUG] [Thread-305891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:15:06.686 [DEBUG] [Thread-305891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:15:06.733 [DEBUG] [Thread-305891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:15:06.733 [DEBUG] [Thread-305891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:15:06.741 [DEBUG] [Thread-305891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:15:06.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:15:06.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:15:06.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:15:06.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:15:06.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:15:06.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:15:06.774 [DEBUG] [Thread-305891] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:15:17.381 [DEBUG] [Thread-305893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:15:27.866 [DEBUG] [Thread-305894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:15:32.526 [DEBUG] [Thread-305895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:15:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:15:36.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:15:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:15:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 15, 29), 21.3, 24.65, 0.0, 29.96, 23.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:15:38.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:15:29
2025-12-24T17:15:38.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:15:38.580 [DEBUG] [Thread-305896] [transport.py] [_log()] starting thread (client mode): 0xf81e6fb0
2025-12-24T17:15:38.581 [DEBUG] [Thread-305896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:15:38.584 [DEBUG] [Thread-305896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:15:38.584 [INFO] [Thread-305896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] client lang: <none>
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] server lang: <none>
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] kex follows: False
2025-12-24T17:15:38.588 [DEBUG] [Thread-305896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:15:38.589 [DEBUG] [Thread-305896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:15:38.589 [DEBUG] [Thread-305896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:15:38.589 [DEBUG] [Thread-305896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:15:38.589 [DEBUG] [Thread-305896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:15:38.589 [DEBUG] [Thread-305896] [transport.py] [_log()] Compression: none
2025-12-24T17:15:38.589 [DEBUG] [Thread-305896] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:15:38.619 [DEBUG] [Thread-305896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:15:38.623 [DEBUG] [Thread-305896] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:15:38.625 [DEBUG] [Thread-305896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:15:38.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:15:38.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:15:38.631 [DEBUG] [Thread-305896] [transport.py] [_log()] userauth is OK
2025-12-24T17:15:38.631 [DEBUG] [Thread-305896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:15:38.632 [DEBUG] [Thread-305896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:15:38.632 [DEBUG] [Thread-305896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:15:38.632 [DEBUG] [Thread-305896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:15:38.674 [INFO] [Thread-305896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:15:38.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:15:39.278 [DEBUG] [Thread-305896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:15:39.278 [DEBUG] [Thread-305896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:15:39.279 [DEBUG] [Thread-305896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:15:39.320 [DEBUG] [Thread-305896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:15:39.320 [DEBUG] [Thread-305896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:15:39.323 [DEBUG] [Thread-305896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:15:39.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:15:39.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:15:39.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:15:39.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:15:39.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:15:39.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:15:39.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:15:39.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:15:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:15:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.635483 -999.00  +23.80  16.85     30   +5.30 1 1 1 1 1   887    0 18.19 9.90 ----- 16.9 16.9 182.9 26.2 27.9 -25.1 27.7 -25.5 29.4 -22.5 29.8 -25.4
2025-12-24T17:15:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:15:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:15:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.635483
2025-12-24T17:15:39.348 [DEBUG] [Thread-305896] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:15:39.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:15:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:15:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:15:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:15:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:15:39.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:15:29', tmtdew=21.3, humidity=24.65, cloud=0.0, wind=29.96, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:15:05.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:15:39.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:15:39.447 [DEBUG] [Thread-305899] [transport.py] [_log()] starting thread (client mode): 0xf574fac0
2025-12-24T17:15:39.447 [DEBUG] [Thread-305899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:15:39.462 [DEBUG] [Thread-305899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:15:39.462 [INFO] [Thread-305899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] client lang: <none>
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] server lang: <none>
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] kex follows: False
2025-12-24T17:15:39.469 [DEBUG] [Thread-305899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:15:39.470 [DEBUG] [Thread-305899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:15:39.470 [DEBUG] [Thread-305899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:15:39.470 [DEBUG] [Thread-305899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:15:39.470 [DEBUG] [Thread-305899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:15:39.470 [DEBUG] [Thread-305899] [transport.py] [_log()] Compression: none
2025-12-24T17:15:39.470 [DEBUG] [Thread-305899] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:15:39.524 [DEBUG] [Thread-305899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:15:39.524 [DEBUG] [Thread-305899] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:15:39.524 [DEBUG] [Thread-305899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:15:39.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:15:39.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:15:39.582 [DEBUG] [Thread-305899] [transport.py] [_log()] userauth is OK
2025-12-24T17:15:39.582 [DEBUG] [Thread-305899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:15:39.582 [DEBUG] [Thread-305899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:15:39.582 [DEBUG] [Thread-305899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:15:39.582 [DEBUG] [Thread-305899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:15:39.596 [INFO] [Thread-305899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:15:39.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:15:39.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:15:40.426 [DEBUG] [Thread-305899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:15:40.426 [DEBUG] [Thread-305899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:15:40.465 [DEBUG] [Thread-305899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:15:40.465 [DEBUG] [Thread-305899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:15:40.475 [DEBUG] [Thread-305899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:15:40.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:15:40.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:15:40.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:15:40.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:15:40.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:15:40.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:15:40.512 [DEBUG] [Thread-305899] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:15:40.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:15:40.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:15:47.627 [DEBUG] [Thread-305901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:16:02.777 [DEBUG] [Thread-305902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:16:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:16:10.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:16:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:16:11.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 16, 1), 21.18, 24.85, 0.0, 28.95, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:16:11.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:16:01
2025-12-24T17:16:11.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:16:11.837 [DEBUG] [Thread-305903] [transport.py] [_log()] starting thread (client mode): 0xf5729810
2025-12-24T17:16:11.838 [DEBUG] [Thread-305903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:16:11.846 [DEBUG] [Thread-305903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:16:11.846 [INFO] [Thread-305903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] client lang: <none>
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] server lang: <none>
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] kex follows: False
2025-12-24T17:16:11.851 [DEBUG] [Thread-305903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:16:11.852 [DEBUG] [Thread-305903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:16:11.852 [DEBUG] [Thread-305903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:16:11.852 [DEBUG] [Thread-305903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:16:11.852 [DEBUG] [Thread-305903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:16:11.852 [DEBUG] [Thread-305903] [transport.py] [_log()] Compression: none
2025-12-24T17:16:11.852 [DEBUG] [Thread-305903] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:16:11.884 [DEBUG] [Thread-305903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:16:11.887 [DEBUG] [Thread-305903] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:16:11.888 [DEBUG] [Thread-305903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:16:11.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:16:11.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:16:11.892 [DEBUG] [Thread-305903] [transport.py] [_log()] userauth is OK
2025-12-24T17:16:11.892 [DEBUG] [Thread-305903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:16:11.893 [DEBUG] [Thread-305903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:16:11.893 [DEBUG] [Thread-305903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:16:11.893 [DEBUG] [Thread-305903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:16:11.910 [INFO] [Thread-305903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:16:11.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:16:12.527 [DEBUG] [Thread-305903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:16:12.527 [DEBUG] [Thread-305903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:16:12.527 [DEBUG] [Thread-305903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:16:12.568 [DEBUG] [Thread-305903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:16:12.568 [DEBUG] [Thread-305903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:16:12.571 [DEBUG] [Thread-305903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:16:12.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:16:12.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:16:12.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:16:12.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:16:12.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:16:12.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:16:12.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:16:12.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:16:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:16:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.635831 -999.00  +23.90  17.92     30   +5.30 1 1 1 1 1   887    0 18.55 15.27 ----- 17.9 17.9 167.4 30.1 28.0 -26.3 27.8 -26.0 29.4 -24.8 29.8 -25.6
2025-12-24T17:16:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:16:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:16:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.635831
2025-12-24T17:16:12.599 [DEBUG] [Thread-305903] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:16:12.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:16:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:16:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:16:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:16:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:16:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:16:01', tmtdew=21.18, humidity=24.85, cloud=0.0, wind=28.95, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:15:35.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:16:12.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:16:12.705 [DEBUG] [Thread-305906] [transport.py] [_log()] starting thread (client mode): 0xf81e4880
2025-12-24T17:16:12.705 [DEBUG] [Thread-305906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:16:12.719 [DEBUG] [Thread-305906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:16:12.719 [INFO] [Thread-305906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] client lang: <none>
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] server lang: <none>
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] kex follows: False
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] Compression: none
2025-12-24T17:16:12.728 [DEBUG] [Thread-305906] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:16:12.784 [DEBUG] [Thread-305906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:16:12.784 [DEBUG] [Thread-305906] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:16:12.785 [DEBUG] [Thread-305906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:16:12.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:16:12.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:16:12.842 [DEBUG] [Thread-305906] [transport.py] [_log()] userauth is OK
2025-12-24T17:16:12.842 [DEBUG] [Thread-305906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:16:12.842 [DEBUG] [Thread-305906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:16:12.842 [DEBUG] [Thread-305906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:16:12.842 [DEBUG] [Thread-305906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:16:12.856 [INFO] [Thread-305906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:16:12.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:16:12.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:16:13.686 [DEBUG] [Thread-305906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:16:13.686 [DEBUG] [Thread-305906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:16:13.734 [DEBUG] [Thread-305906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:16:13.735 [DEBUG] [Thread-305906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:16:13.743 [DEBUG] [Thread-305906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:16:13.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:16:13.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')
2025-12-24T17:16:13.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:16:13.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:16:13.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:16:13.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:16:13.779 [DEBUG] [Thread-305906] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:16:17.863 [DEBUG] [Thread-305908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:16:28.192 [DEBUG] [Thread-305909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:16:33.005 [DEBUG] [Thread-305910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:16:40.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:16:40.737 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:16:43.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:16:43.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:16:43.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
2025-12-24T17:16:45.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 16, 36), 21.6, 24.25, 0.0, 27.0, 23.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:16:45.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:16:36
2025-12-24T17:16:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:16:45.769 [DEBUG] [Thread-305911] [transport.py] [_log()] starting thread (client mode): 0xf5788fa0
2025-12-24T17:16:45.770 [DEBUG] [Thread-305911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:16:45.779 [DEBUG] [Thread-305911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:16:45.779 [INFO] [Thread-305911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] client lang: <none>
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] server lang: <none>
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] kex follows: False
2025-12-24T17:16:45.783 [DEBUG] [Thread-305911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:16:45.784 [DEBUG] [Thread-305911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:16:45.784 [DEBUG] [Thread-305911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:16:45.784 [DEBUG] [Thread-305911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:16:45.784 [DEBUG] [Thread-305911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:16:45.784 [DEBUG] [Thread-305911] [transport.py] [_log()] Compression: none
2025-12-24T17:16:45.784 [DEBUG] [Thread-305911] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:16:45.820 [DEBUG] [Thread-305911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:16:45.826 [DEBUG] [Thread-305911] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:16:45.828 [DEBUG] [Thread-305911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:16:45.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:16:45.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:16:45.836 [DEBUG] [Thread-305911] [transport.py] [_log()] userauth is OK
2025-12-24T17:16:45.836 [DEBUG] [Thread-305911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:16:45.836 [DEBUG] [Thread-305911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:16:45.836 [DEBUG] [Thread-305911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:16:45.837 [DEBUG] [Thread-305911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:16:45.865 [INFO] [Thread-305911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:16:45.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:16:46.659 [DEBUG] [Thread-305911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:16:46.659 [DEBUG] [Thread-305911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:16:46.660 [DEBUG] [Thread-305911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:16:46.701 [DEBUG] [Thread-305911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:16:46.701 [DEBUG] [Thread-305911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:16:46.704 [DEBUG] [Thread-305911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:16:46.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:16:46.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:16:46.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:16:46.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:16:46.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:16:46.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:16:46.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:16:46.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:16:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:16:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.636178 -999.00  +24.00  17.12     30   +5.40 1 1 1 1 1   887    0 18.32 20.50 ----- 17.1 17.1 142.4 29.4 28.1 -25.0 27.7 -24.8 29.5 -22.6 29.9 -24.7
2025-12-24T17:16:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:16:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:16:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.636178
2025-12-24T17:16:46.744 [DEBUG] [Thread-305911] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:16:46.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:16:46.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:16:46.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:16:46.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:16:46.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:16:46.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:16:36', tmtdew=21.6, humidity=24.25, cloud=0.0, wind=27.0, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:16:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:16:46.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:16:46.846 [DEBUG] [Thread-305914] [transport.py] [_log()] starting thread (client mode): 0xf572f310
2025-12-24T17:16:46.846 [DEBUG] [Thread-305914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:16:46.861 [DEBUG] [Thread-305914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:16:46.861 [INFO] [Thread-305914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:16:46.868 [DEBUG] [Thread-305914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] client lang: <none>
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] server lang: <none>
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] kex follows: False
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] Compression: none
2025-12-24T17:16:46.869 [DEBUG] [Thread-305914] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:16:46.927 [DEBUG] [Thread-305914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:16:46.927 [DEBUG] [Thread-305914] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:16:46.928 [DEBUG] [Thread-305914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:16:46.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:16:46.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:16:46.982 [DEBUG] [Thread-305914] [transport.py] [_log()] userauth is OK
2025-12-24T17:16:46.982 [DEBUG] [Thread-305914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:16:46.982 [DEBUG] [Thread-305914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:16:46.982 [DEBUG] [Thread-305914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:16:46.982 [DEBUG] [Thread-305914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:16:47.000 [INFO] [Thread-305914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:16:47.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:16:47.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:16:47.881 [DEBUG] [Thread-305914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:16:47.882 [DEBUG] [Thread-305914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:16:47.932 [DEBUG] [Thread-305914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:16:47.932 [DEBUG] [Thread-305914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:16:47.941 [DEBUG] [Thread-305914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:16:47.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:16:47.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:16:47.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:16:47.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:16:47.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:16:47.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:16:47.979 [DEBUG] [Thread-305914] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:16:48.084 [DEBUG] [Thread-305916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:17:03.282 [DEBUG] [Thread-305917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:17:18.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:17:18.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:17:18.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:17:18.379 [DEBUG] [Thread-305918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:17:19.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 17, 9), 21.66, 24.17, 0.0, 24.63, 24.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:17:19.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:17:09
2025-12-24T17:17:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:17:19.534 [DEBUG] [Thread-305919] [transport.py] [_log()] starting thread (client mode): 0xf8189900
2025-12-24T17:17:19.534 [DEBUG] [Thread-305919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:17:19.548 [DEBUG] [Thread-305919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:17:19.548 [INFO] [Thread-305919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:17:19.552 [DEBUG] [Thread-305919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] client lang: <none>
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] server lang: <none>
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] kex follows: False
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:17:19.553 [DEBUG] [Thread-305919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:17:19.554 [DEBUG] [Thread-305919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:17:19.554 [DEBUG] [Thread-305919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:17:19.554 [DEBUG] [Thread-305919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:17:19.554 [DEBUG] [Thread-305919] [transport.py] [_log()] Compression: none
2025-12-24T17:17:19.554 [DEBUG] [Thread-305919] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:17:19.585 [DEBUG] [Thread-305919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:17:19.588 [DEBUG] [Thread-305919] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:17:19.589 [DEBUG] [Thread-305919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:17:19.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:17:19.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:17:19.593 [DEBUG] [Thread-305919] [transport.py] [_log()] userauth is OK
2025-12-24T17:17:19.593 [DEBUG] [Thread-305919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:17:19.593 [DEBUG] [Thread-305919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:17:19.593 [DEBUG] [Thread-305919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:17:19.593 [DEBUG] [Thread-305919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:17:19.611 [INFO] [Thread-305919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:17:19.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:17:20.248 [DEBUG] [Thread-305919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:17:20.249 [DEBUG] [Thread-305919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:17:20.250 [DEBUG] [Thread-305919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:17:20.290 [DEBUG] [Thread-305919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:17:20.290 [DEBUG] [Thread-305919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:17:20.293 [DEBUG] [Thread-305919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:17:20.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:17:20.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:17:20.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:17:20.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:17:20.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:17:20.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:17:20.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:17:20.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:17:20.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:17:20.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.636525 -999.00  +23.80  20.25     30   +5.20 1 1 1 1 1   887    0 18.94 23.15 ----- 20.2 20.2 146.4 27.6 28.0 -25.7 28.0 -25.2 29.5 -23.4 29.9 -25.4
2025-12-24T17:17:20.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:17:20.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:17:20.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.636525
2025-12-24T17:17:20.316 [DEBUG] [Thread-305919] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:17:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:17:20.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:17:20.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:17:20.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:17:20.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:17:20.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:17:09', tmtdew=21.66, humidity=24.17, cloud=0.0, wind=24.63, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:16:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:17:20.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:17:20.411 [DEBUG] [Thread-305922] [transport.py] [_log()] starting thread (client mode): 0xf818a890
2025-12-24T17:17:20.411 [DEBUG] [Thread-305922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:17:20.426 [DEBUG] [Thread-305922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:17:20.426 [INFO] [Thread-305922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:17:20.433 [DEBUG] [Thread-305922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] client lang: <none>
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] server lang: <none>
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] kex follows: False
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] Compression: none
2025-12-24T17:17:20.434 [DEBUG] [Thread-305922] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:17:20.488 [DEBUG] [Thread-305922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:17:20.489 [DEBUG] [Thread-305922] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:17:20.489 [DEBUG] [Thread-305922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:17:20.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:17:20.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:17:20.546 [DEBUG] [Thread-305922] [transport.py] [_log()] userauth is OK
2025-12-24T17:17:20.546 [DEBUG] [Thread-305922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:17:20.546 [DEBUG] [Thread-305922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:17:20.546 [DEBUG] [Thread-305922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:17:20.546 [DEBUG] [Thread-305922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:17:20.560 [INFO] [Thread-305922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:17:20.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:17:20.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:17:21.405 [DEBUG] [Thread-305922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:17:21.405 [DEBUG] [Thread-305922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:17:21.453 [DEBUG] [Thread-305922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:17:21.453 [DEBUG] [Thread-305922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:17:21.461 [DEBUG] [Thread-305922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:17:21.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:17:21.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:17:21.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') -> 00000000
2025-12-24T17:17:21.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:17:21.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:17:21.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:17:21.498 [DEBUG] [Thread-305922] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:17:28.514 [DEBUG] [Thread-305924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:17:33.438 [DEBUG] [Thread-305925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:17:40.882 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:17:40.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:17:48.614 [DEBUG] [Thread-305926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:17:51.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:17:51.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:17:51.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:17:52.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 17, 42), 21.79, 24.12, 0.0, 32.45, 24.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:17:52.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:17:42
2025-12-24T17:17:52.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:17:52.885 [DEBUG] [Thread-305927] [transport.py] [_log()] starting thread (client mode): 0xf5788fa0
2025-12-24T17:17:52.886 [DEBUG] [Thread-305927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:17:52.901 [DEBUG] [Thread-305927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:17:52.901 [INFO] [Thread-305927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] client lang: <none>
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] server lang: <none>
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] kex follows: False
2025-12-24T17:17:52.906 [DEBUG] [Thread-305927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:17:52.907 [DEBUG] [Thread-305927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:17:52.907 [DEBUG] [Thread-305927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:17:52.907 [DEBUG] [Thread-305927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:17:52.907 [DEBUG] [Thread-305927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:17:52.907 [DEBUG] [Thread-305927] [transport.py] [_log()] Compression: none
2025-12-24T17:17:52.907 [DEBUG] [Thread-305927] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:17:52.942 [DEBUG] [Thread-305927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:17:52.947 [DEBUG] [Thread-305927] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:17:52.948 [DEBUG] [Thread-305927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:17:52.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:17:52.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:17:52.953 [DEBUG] [Thread-305927] [transport.py] [_log()] userauth is OK
2025-12-24T17:17:52.953 [DEBUG] [Thread-305927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:17:52.953 [DEBUG] [Thread-305927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:17:52.953 [DEBUG] [Thread-305927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:17:52.953 [DEBUG] [Thread-305927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:17:52.971 [INFO] [Thread-305927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:17:52.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:17:53.779 [DEBUG] [Thread-305927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:17:53.779 [DEBUG] [Thread-305927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:17:53.780 [DEBUG] [Thread-305927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:17:53.861 [DEBUG] [Thread-305927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:17:53.861 [DEBUG] [Thread-305927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:17:53.864 [DEBUG] [Thread-305927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:17:53.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:17:53.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:17:53.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:17:53.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:17:53.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:17:53.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:17:53.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:17:53.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:17:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:17:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.636873 -999.00  +23.70  26.19     30   +5.20 1 1 1 1 1   887    0 18.95 26.56 ----- 26.2 26.2 154.2 32.3 27.9 -25.7 27.9 -26.6 29.5 -23.0 29.9 -25.6
2025-12-24T17:17:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:17:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:17:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.636873
2025-12-24T17:17:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:17:53.902 [DEBUG] [Thread-305927] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:17:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:17:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:17:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:17:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:17:53.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:17:42', tmtdew=21.79, humidity=24.12, cloud=0.0, wind=32.45, temperature=24.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:17:05.827', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:17:53.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:17:53.996 [DEBUG] [Thread-305930] [transport.py] [_log()] starting thread (client mode): 0xf81e62f0
2025-12-24T17:17:53.996 [DEBUG] [Thread-305930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:17:54.009 [DEBUG] [Thread-305930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:17:54.009 [INFO] [Thread-305930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] client lang: <none>
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] server lang: <none>
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] kex follows: False
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] Compression: none
2025-12-24T17:17:54.017 [DEBUG] [Thread-305930] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:17:54.072 [DEBUG] [Thread-305930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:17:54.073 [DEBUG] [Thread-305930] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:17:54.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:17:54.073 [DEBUG] [Thread-305930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:17:54.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:17:54.130 [DEBUG] [Thread-305930] [transport.py] [_log()] userauth is OK
2025-12-24T17:17:54.131 [DEBUG] [Thread-305930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:17:54.131 [DEBUG] [Thread-305930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:17:54.131 [DEBUG] [Thread-305930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:17:54.131 [DEBUG] [Thread-305930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:17:54.149 [INFO] [Thread-305930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:17:54.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:17:54.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:17:54.984 [DEBUG] [Thread-305930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:17:54.984 [DEBUG] [Thread-305930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:17:55.032 [DEBUG] [Thread-305930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:17:55.032 [DEBUG] [Thread-305930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:17:55.041 [DEBUG] [Thread-305930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:17:55.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:17:55.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:17:55.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:17:55.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:17:55.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:17:55.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:17:55.079 [DEBUG] [Thread-305930] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:18:03.708 [DEBUG] [Thread-305932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:18:18.873 [DEBUG] [Thread-305933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:18:25.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:18:25.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:18:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:18:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 18, 16), 21.64, 24.32, 0.0, 27.68, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:18:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:18:16
2025-12-24T17:18:26.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:18:26.319 [DEBUG] [Thread-305934] [transport.py] [_log()] starting thread (client mode): 0xf574ca60
2025-12-24T17:18:26.320 [DEBUG] [Thread-305934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:18:26.329 [DEBUG] [Thread-305934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:18:26.329 [INFO] [Thread-305934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] client lang: <none>
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] server lang: <none>
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] kex follows: False
2025-12-24T17:18:26.332 [DEBUG] [Thread-305934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:18:26.333 [DEBUG] [Thread-305934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:18:26.333 [DEBUG] [Thread-305934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:18:26.333 [DEBUG] [Thread-305934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:18:26.333 [DEBUG] [Thread-305934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:18:26.333 [DEBUG] [Thread-305934] [transport.py] [_log()] Compression: none
2025-12-24T17:18:26.333 [DEBUG] [Thread-305934] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:18:26.361 [DEBUG] [Thread-305934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:18:26.363 [DEBUG] [Thread-305934] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:18:26.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:18:26.364 [DEBUG] [Thread-305934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:18:26.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:18:26.366 [DEBUG] [Thread-305934] [transport.py] [_log()] userauth is OK
2025-12-24T17:18:26.366 [DEBUG] [Thread-305934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:18:26.366 [DEBUG] [Thread-305934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:18:26.366 [DEBUG] [Thread-305934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:18:26.366 [DEBUG] [Thread-305934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:18:26.383 [INFO] [Thread-305934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:18:26.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:18:27.039 [DEBUG] [Thread-305934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:18:27.039 [DEBUG] [Thread-305934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:18:27.040 [DEBUG] [Thread-305934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:18:27.081 [DEBUG] [Thread-305934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:18:27.082 [DEBUG] [Thread-305934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:18:27.085 [DEBUG] [Thread-305934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:18:27.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:18:27.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:18:27.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:18:27.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:18:27.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:18:27.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:18:27.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:18:27.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:18:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:18:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.637220 -999.00  +23.60  23.92     30   +5.20 1 1 1 1 1   887    0 19.14 29.70 ----- 23.9 23.9 155.0 28.8 28.0 -25.4 28.0 -25.1 29.5 -23.3 29.9 -25.1
2025-12-24T17:18:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:18:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:18:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.637220
2025-12-24T17:18:27.121 [DEBUG] [Thread-305934] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:18:27.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:18:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:18:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:18:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:18:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:18:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:18:16', tmtdew=21.64, humidity=24.32, cloud=0.0, wind=27.68, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:17:35.808', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:18:27.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:18:27.230 [DEBUG] [Thread-305937] [transport.py] [_log()] starting thread (client mode): 0xf574f910
2025-12-24T17:18:27.231 [DEBUG] [Thread-305937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:18:27.245 [DEBUG] [Thread-305937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:18:27.245 [INFO] [Thread-305937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:18:27.252 [DEBUG] [Thread-305937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] client lang: <none>
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] server lang: <none>
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] kex follows: False
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] Compression: none
2025-12-24T17:18:27.253 [DEBUG] [Thread-305937] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:18:27.311 [DEBUG] [Thread-305937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:18:27.311 [DEBUG] [Thread-305937] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:18:27.311 [DEBUG] [Thread-305937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:18:27.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:18:27.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:18:27.366 [DEBUG] [Thread-305937] [transport.py] [_log()] userauth is OK
2025-12-24T17:18:27.366 [DEBUG] [Thread-305937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:18:27.366 [DEBUG] [Thread-305937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:18:27.366 [DEBUG] [Thread-305937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:18:27.366 [DEBUG] [Thread-305937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:18:27.380 [INFO] [Thread-305937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:18:27.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:18:27.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:18:28.271 [DEBUG] [Thread-305937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:18:28.271 [DEBUG] [Thread-305937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:18:28.310 [DEBUG] [Thread-305937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:18:28.310 [DEBUG] [Thread-305937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:18:28.319 [DEBUG] [Thread-305937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:18:28.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:18: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')
2025-12-24T17:18:28.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:18:28.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:18:28.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:18:28.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:18:28.351 [DEBUG] [Thread-305937] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:18:28.756 [DEBUG] [Thread-305939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:18:33.981 [DEBUG] [Thread-305940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:18:41.036 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:18:41.037 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:18:49.136 [DEBUG] [Thread-305941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:18:58.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:18:58.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:18:58.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:18:59.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 18, 49), 21.22, 24.85, 0.0, 22.06, 23.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:18:59.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:18:49
2025-12-24T17:18:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:19:00.053 [DEBUG] [Thread-305942] [transport.py] [_log()] starting thread (client mode): 0xf81c0820
2025-12-24T17:19:00.054 [DEBUG] [Thread-305942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:19:00.059 [DEBUG] [Thread-305942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:19:00.059 [INFO] [Thread-305942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] client lang: <none>
2025-12-24T17:19:00.063 [DEBUG] [Thread-305942] [transport.py] [_log()] server lang: <none>
2025-12-24T17:19:00.064 [DEBUG] [Thread-305942] [transport.py] [_log()] kex follows: False
2025-12-24T17:19:00.064 [DEBUG] [Thread-305942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:19:00.064 [DEBUG] [Thread-305942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:19:00.064 [DEBUG] [Thread-305942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:19:00.064 [DEBUG] [Thread-305942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:19:00.064 [DEBUG] [Thread-305942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:19:00.064 [DEBUG] [Thread-305942] [transport.py] [_log()] Compression: none
2025-12-24T17:19:00.064 [DEBUG] [Thread-305942] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:19:00.097 [DEBUG] [Thread-305942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:19:00.101 [DEBUG] [Thread-305942] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:19:00.102 [DEBUG] [Thread-305942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:19:00.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:19:00.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:19:00.105 [DEBUG] [Thread-305942] [transport.py] [_log()] userauth is OK
2025-12-24T17:19:00.106 [DEBUG] [Thread-305942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:19:00.106 [DEBUG] [Thread-305942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:19:00.106 [DEBUG] [Thread-305942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:19:00.106 [DEBUG] [Thread-305942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:19:00.135 [INFO] [Thread-305942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:19:00.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:19:00.867 [DEBUG] [Thread-305942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:19:00.877 [DEBUG] [Thread-305942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:19:00.878 [DEBUG] [Thread-305942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:19:00.908 [DEBUG] [Thread-305942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:19:00.909 [DEBUG] [Thread-305942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:19:00.912 [DEBUG] [Thread-305942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:19:00.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:19:00.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:19:00.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:19:00.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:19:00.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:19:00.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:19:00.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:19:00.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:19:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:19:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.637567 -999.00  +23.50  21.48     30   +5.20 1 1 1 1 1   887    0 19.13 31.88 ----- 21.5 21.5 163.5 28.6 27.9 -25.6 28.0 -24.9 29.4 -23.4 29.8 -25.3
2025-12-24T17:19:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:19:00.940 [DEBUG] [Thread-305942] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:19:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:19:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.637567
2025-12-24T17:19:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:19:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:19:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:19:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:19:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:19:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:18:49', tmtdew=21.22, humidity=24.85, cloud=0.0, wind=22.06, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:18:05.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:19:01.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:19:01.070 [DEBUG] [Thread-305945] [transport.py] [_log()] starting thread (client mode): 0xf81c1360
2025-12-24T17:19:01.070 [DEBUG] [Thread-305945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:19:01.086 [DEBUG] [Thread-305945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:19:01.086 [INFO] [Thread-305945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] client lang: <none>
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] server lang: <none>
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] kex follows: False
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:19:01.094 [DEBUG] [Thread-305945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:19:01.095 [DEBUG] [Thread-305945] [transport.py] [_log()] Compression: none
2025-12-24T17:19:01.095 [DEBUG] [Thread-305945] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:19:01.153 [DEBUG] [Thread-305945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:19:01.154 [DEBUG] [Thread-305945] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:19:01.154 [DEBUG] [Thread-305945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:19:01.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:19:01.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:19:01.210 [DEBUG] [Thread-305945] [transport.py] [_log()] userauth is OK
2025-12-24T17:19:01.210 [DEBUG] [Thread-305945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:19:01.211 [DEBUG] [Thread-305945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:19:01.211 [DEBUG] [Thread-305945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:19:01.211 [DEBUG] [Thread-305945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:19:01.231 [INFO] [Thread-305945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:19:01.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:19:01.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:19:02.076 [DEBUG] [Thread-305945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:19:02.076 [DEBUG] [Thread-305945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:19:02.123 [DEBUG] [Thread-305945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:19:02.124 [DEBUG] [Thread-305945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:19:02.132 [DEBUG] [Thread-305945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:19:02.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:19:02.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:19:02.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:19:02.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:19:02.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:19:02.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:19:02.165 [DEBUG] [Thread-305945] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:19:04.261 [DEBUG] [Thread-305947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:19:19.429 [DEBUG] [Thread-305948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:19:29.110 [DEBUG] [Thread-305949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:19:32.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:19:32.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:19:32.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:19:33.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 19, 22), 21.28, 24.77, 0.0, 21.19, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:19:33.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:19:22
2025-12-24T17:19:33.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:19:33.716 [DEBUG] [Thread-305950] [transport.py] [_log()] starting thread (client mode): 0xf8188760
2025-12-24T17:19:33.717 [DEBUG] [Thread-305950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:19:33.731 [DEBUG] [Thread-305950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:19:33.731 [INFO] [Thread-305950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] client lang: <none>
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] server lang: <none>
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] kex follows: False
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:19:33.737 [DEBUG] [Thread-305950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:19:33.738 [DEBUG] [Thread-305950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:19:33.738 [DEBUG] [Thread-305950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:19:33.738 [DEBUG] [Thread-305950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:19:33.738 [DEBUG] [Thread-305950] [transport.py] [_log()] Compression: none
2025-12-24T17:19:33.738 [DEBUG] [Thread-305950] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:19:33.773 [DEBUG] [Thread-305950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:19:33.777 [DEBUG] [Thread-305950] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:19:33.778 [DEBUG] [Thread-305950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:19:33.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:19:33.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:19:33.782 [DEBUG] [Thread-305950] [transport.py] [_log()] userauth is OK
2025-12-24T17:19:33.782 [DEBUG] [Thread-305950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:19:33.782 [DEBUG] [Thread-305950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:19:33.782 [DEBUG] [Thread-305950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:19:33.782 [DEBUG] [Thread-305950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:19:33.801 [INFO] [Thread-305950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:19:33.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:19:34.442 [DEBUG] [Thread-305950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:19:34.442 [DEBUG] [Thread-305950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:19:34.443 [DEBUG] [Thread-305950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:19:34.483 [DEBUG] [Thread-305950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:19:34.483 [DEBUG] [Thread-305950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:19:34.486 [DEBUG] [Thread-305950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:19:34.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:19:34.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:19:34.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:19:34.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:19:34.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:19:34.516 [DEBUG] [Thread-305953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:19:34.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:19:34.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:19:34.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:19:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:19:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.637914 -999.00  +23.50  19.40     30   +5.20 1 1 1 1 1   887    0 18.96 29.19 ----- 19.4 19.4 165.4 26.3 28.0 -25.4 28.0 -24.9 29.5 -22.7 29.9 -25.3
2025-12-24T17:19:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:19:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:19:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.637914
2025-12-24T17:19:34.526 [DEBUG] [Thread-305950] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:19:34.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:19:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:19:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:19:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:19:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:19:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:19:22', tmtdew=21.28, humidity=24.77, cloud=0.0, wind=21.19, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:18:35.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:19:34.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:19:34.649 [DEBUG] [Thread-305954] [transport.py] [_log()] starting thread (client mode): 0xf81c3220
2025-12-24T17:19:34.649 [DEBUG] [Thread-305954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:19:34.663 [DEBUG] [Thread-305954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:19:34.663 [INFO] [Thread-305954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:19:34.671 [DEBUG] [Thread-305954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] client lang: <none>
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] server lang: <none>
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] kex follows: False
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] Compression: none
2025-12-24T17:19:34.672 [DEBUG] [Thread-305954] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:19:34.731 [DEBUG] [Thread-305954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:19:34.732 [DEBUG] [Thread-305954] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:19:34.732 [DEBUG] [Thread-305954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:19:34.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:19:34.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:19:34.790 [DEBUG] [Thread-305954] [transport.py] [_log()] userauth is OK
2025-12-24T17:19:34.791 [DEBUG] [Thread-305954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:19:34.791 [DEBUG] [Thread-305954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:19:34.791 [DEBUG] [Thread-305954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:19:34.791 [DEBUG] [Thread-305954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:19:34.814 [INFO] [Thread-305954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:19:34.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:19:34.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:19:35.620 [DEBUG] [Thread-305954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:19:35.621 [DEBUG] [Thread-305954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:19:35.668 [DEBUG] [Thread-305954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:19:35.668 [DEBUG] [Thread-305954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:19:35.678 [DEBUG] [Thread-305954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:19:35.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:19:35.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:19:35.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:19:35.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:19:35.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:19:35.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:19:35.721 [DEBUG] [Thread-305954] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:19:41.181 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:19:41.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:19:49.622 [DEBUG] [Thread-305956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:20:04.819 [DEBUG] [Thread-305957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:20:05.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:20:05.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:20:05.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:20:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 19, 56), 21.49, 24.38, 0.0, 26.33, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:20:07.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:19:56
2025-12-24T17:20:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:20:07.455 [DEBUG] [Thread-305958] [transport.py] [_log()] starting thread (client mode): 0xf571b220
2025-12-24T17:20:07.455 [DEBUG] [Thread-305958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:20:07.469 [DEBUG] [Thread-305958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:20:07.469 [INFO] [Thread-305958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:20:07.475 [DEBUG] [Thread-305958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:20:07.475 [DEBUG] [Thread-305958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:20:07.475 [DEBUG] [Thread-305958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:20:07.475 [DEBUG] [Thread-305958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:20:07.475 [DEBUG] [Thread-305958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] client lang: <none>
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] server lang: <none>
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] kex follows: False
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:20:07.476 [DEBUG] [Thread-305958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:20:07.477 [DEBUG] [Thread-305958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:20:07.477 [DEBUG] [Thread-305958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:20:07.477 [DEBUG] [Thread-305958] [transport.py] [_log()] Compression: none
2025-12-24T17:20:07.477 [DEBUG] [Thread-305958] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:20:07.506 [DEBUG] [Thread-305958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:20:07.510 [DEBUG] [Thread-305958] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:20:07.512 [DEBUG] [Thread-305958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:20:07.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:20:07.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:20:07.518 [DEBUG] [Thread-305958] [transport.py] [_log()] userauth is OK
2025-12-24T17:20:07.518 [DEBUG] [Thread-305958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:20:07.518 [DEBUG] [Thread-305958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:20:07.518 [DEBUG] [Thread-305958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:20:07.518 [DEBUG] [Thread-305958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:20:07.546 [INFO] [Thread-305958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:20:07.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:20:08.214 [DEBUG] [Thread-305958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:20:08.214 [DEBUG] [Thread-305958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:20:08.215 [DEBUG] [Thread-305958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:20:08.255 [DEBUG] [Thread-305958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:20:08.256 [DEBUG] [Thread-305958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:20:08.259 [DEBUG] [Thread-305958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:20:08.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:20:08.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:20:08.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:20:08.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:20:08.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:20:08.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:20:08.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:20:08.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:20:08.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:20:08.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.638261 -999.00  +23.60  22.87     30   +5.30 1 1 1 1 1   887    0 19.08 31.07 ----- 22.9 22.9 167.0 28.6 28.0 -25.9 28.0 -25.5 29.5 -23.1 30.0 -24.1
2025-12-24T17:20:08.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:20:08.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:20:08.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.638261
2025-12-24T17:20:08.295 [DEBUG] [Thread-305958] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:20:08.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:20:08.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:20:08.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:20:08.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:20:08.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:20:08.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:19:56', tmtdew=21.49, humidity=24.38, cloud=0.0, wind=26.33, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:19:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:20:08.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:20:08.397 [DEBUG] [Thread-305961] [transport.py] [_log()] starting thread (client mode): 0xf5752b60
2025-12-24T17:20:08.397 [DEBUG] [Thread-305961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:20:08.411 [DEBUG] [Thread-305961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:20:08.412 [INFO] [Thread-305961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:20:08.419 [DEBUG] [Thread-305961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:20:08.419 [DEBUG] [Thread-305961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] client lang: <none>
2025-12-24T17:20:08.420 [DEBUG] [Thread-305961] [transport.py] [_log()] server lang: <none>
2025-12-24T17:20:08.421 [DEBUG] [Thread-305961] [transport.py] [_log()] kex follows: False
2025-12-24T17:20:08.421 [DEBUG] [Thread-305961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:20:08.421 [DEBUG] [Thread-305961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:20:08.421 [DEBUG] [Thread-305961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:20:08.421 [DEBUG] [Thread-305961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:20:08.421 [DEBUG] [Thread-305961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:20:08.421 [DEBUG] [Thread-305961] [transport.py] [_log()] Compression: none
2025-12-24T17:20:08.422 [DEBUG] [Thread-305961] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:20:08.480 [DEBUG] [Thread-305961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:20:08.480 [DEBUG] [Thread-305961] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:20:08.480 [DEBUG] [Thread-305961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:20:08.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:20:08.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:20:08.538 [DEBUG] [Thread-305961] [transport.py] [_log()] userauth is OK
2025-12-24T17:20:08.539 [DEBUG] [Thread-305961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:20:08.539 [DEBUG] [Thread-305961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:20:08.539 [DEBUG] [Thread-305961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:20:08.539 [DEBUG] [Thread-305961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:20:08.557 [INFO] [Thread-305961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:20:08.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:20:08.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:20:09.378 [DEBUG] [Thread-305961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:20:09.378 [DEBUG] [Thread-305961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:20:09.425 [DEBUG] [Thread-305961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:20:09.426 [DEBUG] [Thread-305961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:20:09.435 [DEBUG] [Thread-305961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:20:09.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:20:09.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:20:09.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:20:09.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:20:09.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:20:09.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:20:09.473 [DEBUG] [Thread-305961] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:20:19.953 [DEBUG] [Thread-305963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:20:29.399 [DEBUG] [Thread-305964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:20:35.107 [DEBUG] [Thread-305965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:20:39.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:20:39.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:20:39.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:20:40.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 20, 29), 21.52, 24.35, 0.0, 28.69, 23.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:20:40.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:20:29
2025-12-24T17:20:40.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:20:40.776 [DEBUG] [Thread-305966] [transport.py] [_log()] starting thread (client mode): 0xf5719f00
2025-12-24T17:20:40.777 [DEBUG] [Thread-305966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:20:40.794 [DEBUG] [Thread-305966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:20:40.794 [INFO] [Thread-305966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:20:40.799 [DEBUG] [Thread-305966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] client lang: <none>
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] server lang: <none>
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] kex follows: False
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:20:40.800 [DEBUG] [Thread-305966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:20:40.801 [DEBUG] [Thread-305966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:20:40.801 [DEBUG] [Thread-305966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:20:40.801 [DEBUG] [Thread-305966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:20:40.801 [DEBUG] [Thread-305966] [transport.py] [_log()] Compression: none
2025-12-24T17:20:40.801 [DEBUG] [Thread-305966] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:20:40.838 [DEBUG] [Thread-305966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:20:40.843 [DEBUG] [Thread-305966] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:20:40.846 [DEBUG] [Thread-305966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:20:40.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:20:40.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:20:40.850 [DEBUG] [Thread-305966] [transport.py] [_log()] userauth is OK
2025-12-24T17:20:40.850 [DEBUG] [Thread-305966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:20:40.850 [DEBUG] [Thread-305966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:20:40.850 [DEBUG] [Thread-305966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:20:40.851 [DEBUG] [Thread-305966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:20:40.883 [INFO] [Thread-305966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:20:40.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:20:41.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:20:41.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:20:41.502 [DEBUG] [Thread-305966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:20:41.502 [DEBUG] [Thread-305966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:20:41.504 [DEBUG] [Thread-305966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:20:41.543 [DEBUG] [Thread-305966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:20:41.543 [DEBUG] [Thread-305966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:20:41.547 [DEBUG] [Thread-305966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:20:41.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:20:41.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:20:41.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:20:41.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:20:41.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:20:41.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:20:41.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:20:41.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:20:41.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:20:41.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.638955 -999.00  +23.40  28.27     30   +5.20 1 1 1 1 1   887    0 18.98 31.37 ----- 28.3 28.3 179.8 30.9 27.7 -25.6 27.4 -28.7 29.2 -23.1 29.6 -25.6
2025-12-24T17:20:41.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:20:41.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:20:41.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.638955
2025-12-24T17:20:41.575 [DEBUG] [Thread-305966] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:20:41.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:20:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:20:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:20:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:20:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:20:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:20:29', tmtdew=21.52, humidity=24.35, cloud=0.0, wind=28.69, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:20:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:20:41.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:20:41.674 [DEBUG] [Thread-305969] [transport.py] [_log()] starting thread (client mode): 0xf5728b20
2025-12-24T17:20:41.674 [DEBUG] [Thread-305969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:20:41.693 [DEBUG] [Thread-305969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:20:41.693 [INFO] [Thread-305969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:20:41.700 [DEBUG] [Thread-305969] [transport.py] [_log()] client lang: <none>
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] server lang: <none>
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] kex follows: False
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] Compression: none
2025-12-24T17:20:41.701 [DEBUG] [Thread-305969] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:20:41.757 [DEBUG] [Thread-305969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:20:41.757 [DEBUG] [Thread-305969] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:20:41.757 [DEBUG] [Thread-305969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:20:41.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:20:41.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:20:41.814 [DEBUG] [Thread-305969] [transport.py] [_log()] userauth is OK
2025-12-24T17:20:41.814 [DEBUG] [Thread-305969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:20:41.814 [DEBUG] [Thread-305969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:20:41.814 [DEBUG] [Thread-305969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:20:41.814 [DEBUG] [Thread-305969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:20:41.833 [INFO] [Thread-305969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:20:41.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:20:41.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:20:42.661 [DEBUG] [Thread-305969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:20:42.661 [DEBUG] [Thread-305969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:20:42.708 [DEBUG] [Thread-305969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:20:42.708 [DEBUG] [Thread-305969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:20:42.716 [DEBUG] [Thread-305969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:20:42.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:20:42.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:20:42.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:20:42.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:20:42.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:20:42.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:20:42.750 [DEBUG] [Thread-305969] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:20:50.219 [DEBUG] [Thread-305971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:21:05.434 [DEBUG] [Thread-305972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:21:12.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:21:12.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:21:12.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:21:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 21, 2), 21.51, 24.37, 0.0, 26.78, 23.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:21:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:21:02
2025-12-24T17:21:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:21:14.499 [DEBUG] [Thread-305973] [transport.py] [_log()] starting thread (client mode): 0xf571a9e0
2025-12-24T17:21:14.499 [DEBUG] [Thread-305973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:21:14.500 [DEBUG] [Thread-305973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:21:14.500 [INFO] [Thread-305973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] client lang: <none>
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] server lang: <none>
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] kex follows: False
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:21:14.504 [DEBUG] [Thread-305973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:21:14.505 [DEBUG] [Thread-305973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:21:14.505 [DEBUG] [Thread-305973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:21:14.505 [DEBUG] [Thread-305973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:21:14.505 [DEBUG] [Thread-305973] [transport.py] [_log()] Compression: none
2025-12-24T17:21:14.505 [DEBUG] [Thread-305973] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:21:14.534 [DEBUG] [Thread-305973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:21:14.536 [DEBUG] [Thread-305973] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:21:14.537 [DEBUG] [Thread-305973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:21:14.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:21:14.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:21:14.540 [DEBUG] [Thread-305973] [transport.py] [_log()] userauth is OK
2025-12-24T17:21:14.540 [DEBUG] [Thread-305973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:21:14.540 [DEBUG] [Thread-305973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:21:14.540 [DEBUG] [Thread-305973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:21:14.540 [DEBUG] [Thread-305973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:21:14.558 [INFO] [Thread-305973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:21:14.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:21:15.185 [DEBUG] [Thread-305973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:21:15.185 [DEBUG] [Thread-305973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:21:15.185 [DEBUG] [Thread-305973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:21:15.226 [DEBUG] [Thread-305973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:21:15.226 [DEBUG] [Thread-305973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:21:15.228 [DEBUG] [Thread-305973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:21:15.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:21:15.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:21:15.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:21:15.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:21:15.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:21:15.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:21:15.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:21:15.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:21:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:21:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.639303 -999.00  +23.30  24.24     31   +5.20 1 1 1 1 1   887    0 18.99 31.92 ----- 24.2 24.2 154.4 34.5 27.7 -25.5 27.3 -28.3 29.3 -23.1 29.6 -25.2
2025-12-24T17:21:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:21:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:21:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.639303
2025-12-24T17:21:15.255 [DEBUG] [Thread-305973] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:21:15.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:21:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:21:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:21:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:21:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:21:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:21:02', tmtdew=21.51, humidity=24.37, cloud=0.0, wind=26.78, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:20:35.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:21:15.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:21:15.355 [DEBUG] [Thread-305976] [transport.py] [_log()] starting thread (client mode): 0xf5718880
2025-12-24T17:21:15.355 [DEBUG] [Thread-305976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:21:15.369 [DEBUG] [Thread-305976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:21:15.369 [INFO] [Thread-305976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] client lang: <none>
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] server lang: <none>
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] kex follows: False
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] Compression: none
2025-12-24T17:21:15.377 [DEBUG] [Thread-305976] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:21:15.432 [DEBUG] [Thread-305976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:21:15.432 [DEBUG] [Thread-305976] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:21:15.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:21:15.432 [DEBUG] [Thread-305976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:21:15.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:21:15.489 [DEBUG] [Thread-305976] [transport.py] [_log()] userauth is OK
2025-12-24T17:21:15.489 [DEBUG] [Thread-305976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:21:15.489 [DEBUG] [Thread-305976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:21:15.489 [DEBUG] [Thread-305976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:21:15.490 [DEBUG] [Thread-305976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:21:15.503 [INFO] [Thread-305976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:21:15.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:21:15.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:21:16.342 [DEBUG] [Thread-305976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:21:16.342 [DEBUG] [Thread-305976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:21:16.389 [DEBUG] [Thread-305976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:21:16.389 [DEBUG] [Thread-305976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:21:16.398 [DEBUG] [Thread-305976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:21:16.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:21:16.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')
2025-12-24T17:21:16.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:21:16.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:21:16.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:21:16.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:21:16.430 [DEBUG] [Thread-305976] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:21:20.533 [DEBUG] [Thread-305978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:21:29.600 [DEBUG] [Thread-305979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:21:35.668 [DEBUG] [Thread-305980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:21:41.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:21:41.483 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:21:46.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:21:46.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:21:46.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
2025-12-24T17:21:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 21, 35), 21.45, 24.45, 0.0, 28.3, 23.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:21:47.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:21:35
2025-12-24T17:21:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:21:48.195 [DEBUG] [Thread-305981] [transport.py] [_log()] starting thread (client mode): 0xf81f11b0
2025-12-24T17:21:48.196 [DEBUG] [Thread-305981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:21:48.202 [DEBUG] [Thread-305981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:21:48.202 [INFO] [Thread-305981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:21:48.208 [DEBUG] [Thread-305981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:21:48.208 [DEBUG] [Thread-305981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:21:48.208 [DEBUG] [Thread-305981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] client lang: <none>
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] server lang: <none>
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] kex follows: False
2025-12-24T17:21:48.209 [DEBUG] [Thread-305981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:21:48.210 [DEBUG] [Thread-305981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:21:48.210 [DEBUG] [Thread-305981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:21:48.210 [DEBUG] [Thread-305981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:21:48.211 [DEBUG] [Thread-305981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:21:48.211 [DEBUG] [Thread-305981] [transport.py] [_log()] Compression: none
2025-12-24T17:21:48.211 [DEBUG] [Thread-305981] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:21:48.239 [DEBUG] [Thread-305981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:21:48.243 [DEBUG] [Thread-305981] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:21:48.245 [DEBUG] [Thread-305981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:21:48.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:21:48.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:21:48.250 [DEBUG] [Thread-305981] [transport.py] [_log()] userauth is OK
2025-12-24T17:21:48.250 [DEBUG] [Thread-305981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:21:48.251 [DEBUG] [Thread-305981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:21:48.251 [DEBUG] [Thread-305981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:21:48.251 [DEBUG] [Thread-305981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:21:48.277 [INFO] [Thread-305981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:21:48.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:21:48.902 [DEBUG] [Thread-305981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:21:48.902 [DEBUG] [Thread-305981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:21:48.903 [DEBUG] [Thread-305981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:21:48.944 [DEBUG] [Thread-305981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:21:48.944 [DEBUG] [Thread-305981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:21:48.947 [DEBUG] [Thread-305981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:21:48.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:21:48.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:21:48.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:21:48.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:21:48.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:21:48.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:21:48.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:21:48.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:21:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:21:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.639650 -999.00  +23.50  19.73     30   +5.30 1 1 1 1 1   887    0 18.77 31.25 ----- 19.7 19.7 147.8 29.8 27.7 -25.9 27.7 -25.0 29.3 -23.0 29.7 -24.6
2025-12-24T17:21:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:21:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:21:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.639650
2025-12-24T17:21:48.982 [DEBUG] [Thread-305981] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:21:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:21:48.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:21:48.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:21:48.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:21:48.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:21:48.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:21:35', tmtdew=21.45, humidity=24.45, cloud=0.0, wind=28.3, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:21:05.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:21:49.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:21:49.085 [DEBUG] [Thread-305984] [transport.py] [_log()] starting thread (client mode): 0xf81f0520
2025-12-24T17:21:49.085 [DEBUG] [Thread-305984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:21:49.100 [DEBUG] [Thread-305984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:21:49.100 [INFO] [Thread-305984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:21:49.107 [DEBUG] [Thread-305984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:21:49.107 [DEBUG] [Thread-305984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:21:49.107 [DEBUG] [Thread-305984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:21:49.107 [DEBUG] [Thread-305984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] client lang: <none>
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] server lang: <none>
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] kex follows: False
2025-12-24T17:21:49.108 [DEBUG] [Thread-305984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:21:49.109 [DEBUG] [Thread-305984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:21:49.109 [DEBUG] [Thread-305984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:21:49.109 [DEBUG] [Thread-305984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:21:49.109 [DEBUG] [Thread-305984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:21:49.109 [DEBUG] [Thread-305984] [transport.py] [_log()] Compression: none
2025-12-24T17:21:49.110 [DEBUG] [Thread-305984] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:21:49.166 [DEBUG] [Thread-305984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:21:49.166 [DEBUG] [Thread-305984] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:21:49.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:21:49.167 [DEBUG] [Thread-305984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:21:49.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:21:49.222 [DEBUG] [Thread-305984] [transport.py] [_log()] userauth is OK
2025-12-24T17:21:49.222 [DEBUG] [Thread-305984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:21:49.222 [DEBUG] [Thread-305984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:21:49.222 [DEBUG] [Thread-305984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:21:49.222 [DEBUG] [Thread-305984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:21:49.241 [INFO] [Thread-305984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:21:49.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:21:49.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:21:50.082 [DEBUG] [Thread-305984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:21:50.082 [DEBUG] [Thread-305984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:21:50.132 [DEBUG] [Thread-305984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:21:50.132 [DEBUG] [Thread-305984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:21:50.141 [DEBUG] [Thread-305984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:21:50.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:21:50.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')
2025-12-24T17:21:50.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:21:50.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:21:50.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:21:50.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:21:50.177 [DEBUG] [Thread-305984] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:21:50.780 [DEBUG] [Thread-305986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:22:06.049 [DEBUG] [Thread-305987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:22:20.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:22:20.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:22:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:22:21.151 [DEBUG] [Thread-305988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:22:21.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 22, 9), 21.47, 24.4, 0.0, 24.24, 23.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:22:21.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:22:09
2025-12-24T17:22:21.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:22:21.927 [DEBUG] [Thread-305989] [transport.py] [_log()] starting thread (client mode): 0xf81c1330
2025-12-24T17:22:21.928 [DEBUG] [Thread-305989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:22:21.938 [DEBUG] [Thread-305989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:22:21.938 [INFO] [Thread-305989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:22:21.943 [DEBUG] [Thread-305989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:22:21.943 [DEBUG] [Thread-305989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:22:21.943 [DEBUG] [Thread-305989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] client lang: <none>
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] server lang: <none>
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] kex follows: False
2025-12-24T17:22:21.944 [DEBUG] [Thread-305989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:22:21.945 [DEBUG] [Thread-305989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:22:21.945 [DEBUG] [Thread-305989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:22:21.945 [DEBUG] [Thread-305989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:22:21.945 [DEBUG] [Thread-305989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:22:21.945 [DEBUG] [Thread-305989] [transport.py] [_log()] Compression: none
2025-12-24T17:22:21.945 [DEBUG] [Thread-305989] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:22:21.986 [DEBUG] [Thread-305989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:22:21.991 [DEBUG] [Thread-305989] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:22:21.992 [DEBUG] [Thread-305989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:22:21.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:22:21.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:22:21.998 [DEBUG] [Thread-305989] [transport.py] [_log()] userauth is OK
2025-12-24T17:22:21.998 [DEBUG] [Thread-305989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:22:21.998 [DEBUG] [Thread-305989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:22:21.998 [DEBUG] [Thread-305989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:22:21.998 [DEBUG] [Thread-305989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:22:22.039 [INFO] [Thread-305989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:22:22.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:22:22.700 [DEBUG] [Thread-305989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:22:22.700 [DEBUG] [Thread-305989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:22:22.702 [DEBUG] [Thread-305989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:22:22.743 [DEBUG] [Thread-305989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:22:22.743 [DEBUG] [Thread-305989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:22:22.746 [DEBUG] [Thread-305989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:22:22.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:22:22.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:22:22.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:22:22.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:22:22.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:22:22.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:22:22.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:22:22.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:22:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:22:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.639997 -999.00  +23.30  20.86     30   +5.20 1 1 1 1 1   887    0 19.08 32.34 ----- 20.9 20.9 155.4 32.7 27.7 -25.6 27.8 -24.7 29.3 -22.8 29.6 -25.6
2025-12-24T17:22:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:22:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:22:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.639997
2025-12-24T17:22:22.782 [DEBUG] [Thread-305989] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:22:22.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:22:22.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:22:22.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:22:22.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:22:22.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:22:22.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:22:09', tmtdew=21.47, humidity=24.4, cloud=0.0, wind=24.24, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:21:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:22:22.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:22:22.899 [DEBUG] [Thread-305992] [transport.py] [_log()] starting thread (client mode): 0xf81f2da0
2025-12-24T17:22:22.899 [DEBUG] [Thread-305992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:22:22.914 [DEBUG] [Thread-305992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:22:22.914 [INFO] [Thread-305992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:22:22.925 [DEBUG] [Thread-305992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:22:22.925 [DEBUG] [Thread-305992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] client lang: <none>
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] server lang: <none>
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] kex follows: False
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:22:22.926 [DEBUG] [Thread-305992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:22:22.927 [DEBUG] [Thread-305992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:22:22.927 [DEBUG] [Thread-305992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:22:22.927 [DEBUG] [Thread-305992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:22:22.927 [DEBUG] [Thread-305992] [transport.py] [_log()] Compression: none
2025-12-24T17:22:22.927 [DEBUG] [Thread-305992] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:22:22.976 [DEBUG] [Thread-305992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:22:22.976 [DEBUG] [Thread-305992] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:22:22.977 [DEBUG] [Thread-305992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:22:22.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:22:22.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:22:23.034 [DEBUG] [Thread-305992] [transport.py] [_log()] userauth is OK
2025-12-24T17:22:23.034 [DEBUG] [Thread-305992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:22:23.034 [DEBUG] [Thread-305992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:22:23.034 [DEBUG] [Thread-305992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:22:23.034 [DEBUG] [Thread-305992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:22:23.048 [INFO] [Thread-305992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:22:23.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:22:23.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:22:23.873 [DEBUG] [Thread-305992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:22:23.873 [DEBUG] [Thread-305992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:22:23.920 [DEBUG] [Thread-305992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:22:23.920 [DEBUG] [Thread-305992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:22:23.929 [DEBUG] [Thread-305992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:22:23.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:22:23.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:22:23.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:22:23.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:22:23.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:22:23.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:22:23.968 [DEBUG] [Thread-305992] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:22:29.776 [DEBUG] [Thread-305994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:22:36.224 [DEBUG] [Thread-305995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:22:41.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:22:41.645 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:22:51.400 [DEBUG] [Thread-305996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:22:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:22:53.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:22:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:22:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 22, 41), 21.34, 24.83, 0.0, 26.68, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:22:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:22:41
2025-12-24T17:22:55.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:22:55.699 [DEBUG] [Thread-305997] [transport.py] [_log()] starting thread (client mode): 0xf81c3550
2025-12-24T17:22:55.700 [DEBUG] [Thread-305997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:22:55.712 [DEBUG] [Thread-305997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:22:55.713 [INFO] [Thread-305997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:22:55.719 [DEBUG] [Thread-305997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:22:55.719 [DEBUG] [Thread-305997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:22:55.719 [DEBUG] [Thread-305997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:22:55.719 [DEBUG] [Thread-305997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:22:55.719 [DEBUG] [Thread-305997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:22:55.719 [DEBUG] [Thread-305997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:22:55.719 [DEBUG] [Thread-305997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] client lang: <none>
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] server lang: <none>
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] kex follows: False
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:22:55.720 [DEBUG] [Thread-305997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:22:55.721 [DEBUG] [Thread-305997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:22:55.721 [DEBUG] [Thread-305997] [transport.py] [_log()] Compression: none
2025-12-24T17:22:55.721 [DEBUG] [Thread-305997] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:22:55.756 [DEBUG] [Thread-305997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:22:55.761 [DEBUG] [Thread-305997] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:22:55.763 [DEBUG] [Thread-305997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:22:55.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:22:55.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:22:55.768 [DEBUG] [Thread-305997] [transport.py] [_log()] userauth is OK
2025-12-24T17:22:55.768 [DEBUG] [Thread-305997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:22:55.768 [DEBUG] [Thread-305997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:22:55.768 [DEBUG] [Thread-305997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:22:55.768 [DEBUG] [Thread-305997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:22:55.807 [INFO] [Thread-305997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:22:55.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:22:56.442 [DEBUG] [Thread-305997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:22:56.443 [DEBUG] [Thread-305997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:22:56.444 [DEBUG] [Thread-305997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:22:56.484 [DEBUG] [Thread-305997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:22:56.484 [DEBUG] [Thread-305997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:22:56.487 [DEBUG] [Thread-305997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:22:56.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:22:56.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:22:56.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:22:56.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:22:56.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:22:56.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:22:56.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:22:56.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:22:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:22:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.640345 -999.00  +23.50  15.51     30   +5.30 1 1 1 1 1   887    0 19.09 33.34 ----- 15.5 15.5 153.4 24.7 27.8 -25.3 27.8 -24.9 29.3 -22.5 29.7 -24.8
2025-12-24T17:22:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:22:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:22:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.640345
2025-12-24T17:22:56.521 [DEBUG] [Thread-305997] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:22:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:22:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:22:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:22:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:22:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:22:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:22:41', tmtdew=21.34, humidity=24.83, cloud=0.0, wind=26.68, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:22:05.808', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:22:56.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:22:56.632 [DEBUG] [Thread-306000] [transport.py] [_log()] starting thread (client mode): 0xf574e0b0
2025-12-24T17:22:56.633 [DEBUG] [Thread-306000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:22:56.646 [DEBUG] [Thread-306000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:22:56.646 [INFO] [Thread-306000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] client lang: <none>
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] server lang: <none>
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] kex follows: False
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:22:56.654 [DEBUG] [Thread-306000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:22:56.655 [DEBUG] [Thread-306000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:22:56.655 [DEBUG] [Thread-306000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:22:56.655 [DEBUG] [Thread-306000] [transport.py] [_log()] Compression: none
2025-12-24T17:22:56.655 [DEBUG] [Thread-306000] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:22:56.714 [DEBUG] [Thread-306000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:22:56.714 [DEBUG] [Thread-306000] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:22:56.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:22:56.716 [DEBUG] [Thread-306000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:22:56.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:22:56.770 [DEBUG] [Thread-306000] [transport.py] [_log()] userauth is OK
2025-12-24T17:22:56.770 [DEBUG] [Thread-306000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:22:56.771 [DEBUG] [Thread-306000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:22:56.771 [DEBUG] [Thread-306000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:22:56.771 [DEBUG] [Thread-306000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:22:56.790 [INFO] [Thread-306000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:22:56.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:22:56.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:22:57.613 [DEBUG] [Thread-306000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:22:57.613 [DEBUG] [Thread-306000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:22:57.653 [DEBUG] [Thread-306000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:22:57.653 [DEBUG] [Thread-306000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:22:57.662 [DEBUG] [Thread-306000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:22:57.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:22:57.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:22:57.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:22:57.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:22:57.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:22:57.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:22:57.700 [DEBUG] [Thread-306000] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:23:06.509 [DEBUG] [Thread-306002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:23:21.718 [DEBUG] [Thread-306003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:23:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:23:27.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:23:27.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:23:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 23, 15), 21.45, 24.65, 0.0, 23.57, 23.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:23:28.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:23:15
2025-12-24T17:23:28.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:23:28.996 [DEBUG] [Thread-306004] [transport.py] [_log()] starting thread (client mode): 0xf81c0340
2025-12-24T17:23:28.997 [DEBUG] [Thread-306004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:23:29.005 [DEBUG] [Thread-306004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:23:29.005 [INFO] [Thread-306004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] client lang: <none>
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] server lang: <none>
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] kex follows: False
2025-12-24T17:23:29.010 [DEBUG] [Thread-306004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:23:29.011 [DEBUG] [Thread-306004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:23:29.011 [DEBUG] [Thread-306004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:23:29.011 [DEBUG] [Thread-306004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:23:29.011 [DEBUG] [Thread-306004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:23:29.011 [DEBUG] [Thread-306004] [transport.py] [_log()] Compression: none
2025-12-24T17:23:29.011 [DEBUG] [Thread-306004] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:23:29.041 [DEBUG] [Thread-306004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:23:29.044 [DEBUG] [Thread-306004] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:23:29.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:23:29.046 [DEBUG] [Thread-306004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:23:29.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:23:29.048 [DEBUG] [Thread-306004] [transport.py] [_log()] userauth is OK
2025-12-24T17:23:29.048 [DEBUG] [Thread-306004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:23:29.048 [DEBUG] [Thread-306004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:23:29.048 [DEBUG] [Thread-306004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:23:29.048 [DEBUG] [Thread-306004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:23:29.082 [INFO] [Thread-306004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:23:29.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:23:29.693 [DEBUG] [Thread-306004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:23:29.693 [DEBUG] [Thread-306004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:23:29.694 [DEBUG] [Thread-306004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:23:29.735 [DEBUG] [Thread-306004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:23:29.735 [DEBUG] [Thread-306004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:23:29.737 [DEBUG] [Thread-306004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:23:29.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:23:29.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:23:29.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:23:29.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:23:29.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:23:29.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:23:29.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:23:29.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.640692 -999.00  +23.50  18.46     30   +5.20 1 1 1 1 1   887    0 19.29 36.20 ----- 18.5 18.5 145.7 34.5 27.7 -25.7 27.8 -26.0 29.3 -23.0 29.7 -25.9
2025-12-24T17:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.640692
2025-12-24T17:23:29.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:23:29.775 [DEBUG] [Thread-306004] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:23:29.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:23:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:23:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:23:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:23:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:23:15', tmtdew=21.45, humidity=24.65, cloud=0.0, wind=23.57, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:22:35.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:23:29.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:23:29.865 [DEBUG] [Thread-306007] [transport.py] [_log()] starting thread (client mode): 0xf81c3280
2025-12-24T17:23:29.865 [DEBUG] [Thread-306007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:23:29.879 [DEBUG] [Thread-306007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:23:29.880 [INFO] [Thread-306007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] client lang: <none>
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] server lang: <none>
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] kex follows: False
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:23:29.887 [DEBUG] [Thread-306007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:23:29.888 [DEBUG] [Thread-306007] [transport.py] [_log()] Compression: none
2025-12-24T17:23:29.888 [DEBUG] [Thread-306007] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:23:29.949 [DEBUG] [Thread-306007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:23:29.949 [DEBUG] [Thread-306007] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:23:29.949 [DEBUG] [Thread-306007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:23:29.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:23:29.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:23:30.015 [DEBUG] [Thread-306009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:23:30.016 [DEBUG] [Thread-306007] [transport.py] [_log()] userauth is OK
2025-12-24T17:23:30.016 [DEBUG] [Thread-306007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:23:30.016 [DEBUG] [Thread-306007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:23:30.016 [DEBUG] [Thread-306007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:23:30.017 [DEBUG] [Thread-306007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:23:30.034 [INFO] [Thread-306007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:23:30.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:23:30.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:23:30.873 [DEBUG] [Thread-306007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:23:30.874 [DEBUG] [Thread-306007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:23:30.923 [DEBUG] [Thread-306007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:23:30.923 [DEBUG] [Thread-306007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:23:30.932 [DEBUG] [Thread-306007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:23:30.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:23:30.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:23:30.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:23:30.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:23:30.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:23:30.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:23:30.972 [DEBUG] [Thread-306007] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:23:36.836 [DEBUG] [Thread-306010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:23:41.789 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:23:41.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:23:52.014 [DEBUG] [Thread-306011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:24:00.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:24:01.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:24:01.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
2025-12-24T17:24:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 23, 48), 21.67, 24.35, 0.0, 24.91, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:24:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:23:48
2025-12-24T17:24:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:24:02.768 [DEBUG] [Thread-306012] [transport.py] [_log()] starting thread (client mode): 0xf5788fa0
2025-12-24T17:24:02.769 [DEBUG] [Thread-306012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:24:02.770 [DEBUG] [Thread-306012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:24:02.770 [INFO] [Thread-306012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] client lang: <none>
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] server lang: <none>
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] kex follows: False
2025-12-24T17:24:02.775 [DEBUG] [Thread-306012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:24:02.776 [DEBUG] [Thread-306012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:24:02.776 [DEBUG] [Thread-306012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:24:02.776 [DEBUG] [Thread-306012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:24:02.776 [DEBUG] [Thread-306012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:24:02.776 [DEBUG] [Thread-306012] [transport.py] [_log()] Compression: none
2025-12-24T17:24:02.776 [DEBUG] [Thread-306012] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:24:02.812 [DEBUG] [Thread-306012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:24:02.817 [DEBUG] [Thread-306012] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:24:02.819 [DEBUG] [Thread-306012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:24:02.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:24:02.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:24:02.825 [DEBUG] [Thread-306012] [transport.py] [_log()] userauth is OK
2025-12-24T17:24:02.825 [DEBUG] [Thread-306012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:24:02.825 [DEBUG] [Thread-306012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:24:02.826 [DEBUG] [Thread-306012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:24:02.826 [DEBUG] [Thread-306012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:24:02.854 [INFO] [Thread-306012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:24:02.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:24:03.434 [DEBUG] [Thread-306012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:24:03.434 [DEBUG] [Thread-306012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:24:03.465 [DEBUG] [Thread-306012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:24:03.476 [DEBUG] [Thread-306012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:24:03.476 [DEBUG] [Thread-306012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:24:03.478 [DEBUG] [Thread-306012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:24:03.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:24:03.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:24:03.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:24:03.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:24:03.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:24:03.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:24:03.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:24:03.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:24:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:24:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.641386 -999.00  +23.50  23.91     30   +5.20 1 1 1 1 1   887    0 19.09 37.17 ----- 23.9 23.9 137.8 33.0 27.7 -26.1 27.9 -25.5 29.4 -23.7 29.7 -25.2
2025-12-24T17:24:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:24:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:24:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.641386
2025-12-24T17:24:03.509 [DEBUG] [Thread-306012] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:24:03.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:24:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:24:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:24:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:24:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:24:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:23:48', tmtdew=21.67, humidity=24.35, cloud=0.0, wind=24.91, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:23:35.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:24:03.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:24:03.626 [DEBUG] [Thread-306015] [transport.py] [_log()] starting thread (client mode): 0xf57895d0
2025-12-24T17:24:03.626 [DEBUG] [Thread-306015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:24:03.643 [DEBUG] [Thread-306015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:24:03.643 [INFO] [Thread-306015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] client lang: <none>
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] server lang: <none>
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] kex follows: False
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] Compression: none
2025-12-24T17:24:03.653 [DEBUG] [Thread-306015] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:24:03.708 [DEBUG] [Thread-306015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:24:03.709 [DEBUG] [Thread-306015] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:24:03.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:24:03.709 [DEBUG] [Thread-306015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:24:03.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:24:03.769 [DEBUG] [Thread-306015] [transport.py] [_log()] userauth is OK
2025-12-24T17:24:03.769 [DEBUG] [Thread-306015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:24:03.769 [DEBUG] [Thread-306015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:24:03.769 [DEBUG] [Thread-306015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:24:03.769 [DEBUG] [Thread-306015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:24:03.783 [INFO] [Thread-306015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:24:03.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:24:03.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:24:04.624 [DEBUG] [Thread-306015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:24:04.624 [DEBUG] [Thread-306015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:24:04.671 [DEBUG] [Thread-306015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:24:04.671 [DEBUG] [Thread-306015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:24:04.680 [DEBUG] [Thread-306015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:24:04.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:24:04.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:24:04.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:24:04.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:24:04.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:24:04.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:24:04.716 [DEBUG] [Thread-306015] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:24:07.101 [DEBUG] [Thread-306017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:24:22.279 [DEBUG] [Thread-306018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:24:30.308 [DEBUG] [Thread-306019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:24:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:24:34.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:24:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:24:36.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 24, 22), 21.67, 24.35, 0.0, 23.5, 23.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:24:36.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:24:22
2025-12-24T17:24:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:24:36.350 [DEBUG] [Thread-306020] [transport.py] [_log()] starting thread (client mode): 0xf571b610
2025-12-24T17:24:36.350 [DEBUG] [Thread-306020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:24:36.364 [DEBUG] [Thread-306020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:24:36.364 [INFO] [Thread-306020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:24:36.369 [DEBUG] [Thread-306020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:24:36.369 [DEBUG] [Thread-306020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] client lang: <none>
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] server lang: <none>
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] kex follows: False
2025-12-24T17:24:36.370 [DEBUG] [Thread-306020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:24:36.371 [DEBUG] [Thread-306020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:24:36.371 [DEBUG] [Thread-306020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:24:36.372 [DEBUG] [Thread-306020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:24:36.372 [DEBUG] [Thread-306020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:24:36.372 [DEBUG] [Thread-306020] [transport.py] [_log()] Compression: none
2025-12-24T17:24:36.372 [DEBUG] [Thread-306020] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:24:36.405 [DEBUG] [Thread-306020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:24:36.409 [DEBUG] [Thread-306020] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:24:36.411 [DEBUG] [Thread-306020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:24:36.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:24:36.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:24:36.417 [DEBUG] [Thread-306020] [transport.py] [_log()] userauth is OK
2025-12-24T17:24:36.417 [DEBUG] [Thread-306020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:24:36.417 [DEBUG] [Thread-306020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:24:36.417 [DEBUG] [Thread-306020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:24:36.417 [DEBUG] [Thread-306020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:24:36.439 [INFO] [Thread-306020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:24:36.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:24:37.005 [DEBUG] [Thread-306020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:24:37.005 [DEBUG] [Thread-306020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:24:37.006 [DEBUG] [Thread-306020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:24:37.047 [DEBUG] [Thread-306020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:24:37.047 [DEBUG] [Thread-306020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:24:37.049 [DEBUG] [Thread-306020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:24:37.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:24:37.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:24:37.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:24:37.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:24:37.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:24:37.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:24:37.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:24:37.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:24:37.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:24:37.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.641734 -999.00  +23.40  20.12     30   +5.20 1 1 1 1 1   887    0 19.13 37.91 ----- 20.1 20.1 158.0 26.1 27.7 -26.2 27.9 -25.3 29.4 -23.9 29.8 -25.7
2025-12-24T17:24:37.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:24:37.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:24:37.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.641734
2025-12-24T17:24:37.080 [DEBUG] [Thread-306020] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:24:37.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:24:37.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:24:37.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:24:37.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:24:37.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:24:37.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:24:22', tmtdew=21.67, humidity=24.35, cloud=0.0, wind=23.5, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:24:05.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:24:37.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:24:37.184 [DEBUG] [Thread-306023] [transport.py] [_log()] starting thread (client mode): 0xf574c850
2025-12-24T17:24:37.184 [DEBUG] [Thread-306023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:24:37.203 [DEBUG] [Thread-306023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:24:37.203 [INFO] [Thread-306023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:24:37.210 [DEBUG] [Thread-306023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] client lang: <none>
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] server lang: <none>
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] kex follows: False
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] Compression: none
2025-12-24T17:24:37.211 [DEBUG] [Thread-306023] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:24:37.271 [DEBUG] [Thread-306023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:24:37.271 [DEBUG] [Thread-306023] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:24:37.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:24:37.272 [DEBUG] [Thread-306023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:24:37.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:24:37.326 [DEBUG] [Thread-306023] [transport.py] [_log()] userauth is OK
2025-12-24T17:24:37.326 [DEBUG] [Thread-306023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:24:37.326 [DEBUG] [Thread-306023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:24:37.327 [DEBUG] [Thread-306023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:24:37.327 [DEBUG] [Thread-306023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:24:37.345 [INFO] [Thread-306023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:24:37.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:24:37.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:24:37.398 [DEBUG] [Thread-306025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:24:38.201 [DEBUG] [Thread-306023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:24:38.201 [DEBUG] [Thread-306023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:24:38.249 [DEBUG] [Thread-306023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:24:38.249 [DEBUG] [Thread-306023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:24:38.258 [DEBUG] [Thread-306023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:24:38.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:24:38.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:24:38.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:24:38.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:24:38.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:24:38.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:24:38.292 [DEBUG] [Thread-306023] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:24:41.941 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:24:41.942 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:24:52.669 [DEBUG] [Thread-306026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:25:07.817 [DEBUG] [Thread-306027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:25:08.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:25:08.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:25:08.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
2025-12-24T17:25:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 24, 56), 21.39, 24.47, 0.0, 20.79, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:25:09.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:24:56
2025-12-24T17:25:09.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:25:09.906 [DEBUG] [Thread-306028] [transport.py] [_log()] starting thread (client mode): 0xf8189330
2025-12-24T17:25:09.907 [DEBUG] [Thread-306028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:25:09.920 [DEBUG] [Thread-306028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:25:09.920 [INFO] [Thread-306028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:25:09.926 [DEBUG] [Thread-306028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:25:09.926 [DEBUG] [Thread-306028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:25:09.926 [DEBUG] [Thread-306028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:25:09.926 [DEBUG] [Thread-306028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:25:09.926 [DEBUG] [Thread-306028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:25:09.926 [DEBUG] [Thread-306028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:25:09.927 [DEBUG] [Thread-306028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:25:09.927 [DEBUG] [Thread-306028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:25:09.927 [DEBUG] [Thread-306028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:25:09.927 [DEBUG] [Thread-306028] [transport.py] [_log()] client lang: <none>
2025-12-24T17:25:09.927 [DEBUG] [Thread-306028] [transport.py] [_log()] server lang: <none>
2025-12-24T17:25:09.927 [DEBUG] [Thread-306028] [transport.py] [_log()] kex follows: False
2025-12-24T17:25:09.927 [DEBUG] [Thread-306028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:25:09.928 [DEBUG] [Thread-306028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:25:09.928 [DEBUG] [Thread-306028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:25:09.928 [DEBUG] [Thread-306028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:25:09.928 [DEBUG] [Thread-306028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:25:09.928 [DEBUG] [Thread-306028] [transport.py] [_log()] Compression: none
2025-12-24T17:25:09.928 [DEBUG] [Thread-306028] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:25:09.960 [DEBUG] [Thread-306028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:25:09.963 [DEBUG] [Thread-306028] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:25:09.965 [DEBUG] [Thread-306028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:25:09.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:25:09.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:25:09.972 [DEBUG] [Thread-306028] [transport.py] [_log()] userauth is OK
2025-12-24T17:25:09.972 [DEBUG] [Thread-306028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:25:09.972 [DEBUG] [Thread-306028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:25:09.972 [DEBUG] [Thread-306028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:25:09.972 [DEBUG] [Thread-306028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:25:10.012 [INFO] [Thread-306028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:25:10.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:25:10.632 [DEBUG] [Thread-306028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:25:10.632 [DEBUG] [Thread-306028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:25:10.633 [DEBUG] [Thread-306028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:25:10.673 [DEBUG] [Thread-306028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:25:10.673 [DEBUG] [Thread-306028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:25:10.686 [DEBUG] [Thread-306028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:25:10.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:25:10.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:25:10.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:25:10.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:25:10.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:25:10.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:25:10.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:25:10.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:25:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:25:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.642428 -999.00  +23.50  20.65     30   +5.20 1 1 1 1 1   887    0 19.58 36.62 ----- 20.6 20.6 168.4 24.7 27.7 -26.1 27.8 -24.7 29.3 -23.6 29.6 -25.3
2025-12-24T17:25:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:25:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:25:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.642428
2025-12-24T17:25:10.712 [DEBUG] [Thread-306028] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:25:10.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:25:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:25:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:25:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:25:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:25:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:24:56', tmtdew=21.39, humidity=24.47, cloud=0.0, wind=20.79, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:25:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:25:10.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:25:10.810 [DEBUG] [Thread-306031] [transport.py] [_log()] starting thread (client mode): 0xf81f32b0
2025-12-24T17:25:10.810 [DEBUG] [Thread-306031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:25:10.829 [DEBUG] [Thread-306031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:25:10.829 [INFO] [Thread-306031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] client lang: <none>
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] server lang: <none>
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] kex follows: False
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] Compression: none
2025-12-24T17:25:10.837 [DEBUG] [Thread-306031] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:25:10.893 [DEBUG] [Thread-306031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:25:10.893 [DEBUG] [Thread-306031] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:25:10.894 [DEBUG] [Thread-306031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:25:10.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:25:10.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:25:10.950 [DEBUG] [Thread-306031] [transport.py] [_log()] userauth is OK
2025-12-24T17:25:10.950 [DEBUG] [Thread-306031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:25:10.950 [DEBUG] [Thread-306031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:25:10.950 [DEBUG] [Thread-306031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:25:10.950 [DEBUG] [Thread-306031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:25:10.966 [INFO] [Thread-306031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:25:10.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:25:10.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:25:11.806 [DEBUG] [Thread-306031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:25:11.806 [DEBUG] [Thread-306031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:25:11.854 [DEBUG] [Thread-306031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:25:11.855 [DEBUG] [Thread-306031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:25:11.864 [DEBUG] [Thread-306031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:25:11.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:25:11.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:25:11.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:25:11.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:25:11.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:25:11.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:25:11.901 [DEBUG] [Thread-306031] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:25:23.083 [DEBUG] [Thread-306033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:25:30.563 [DEBUG] [Thread-306034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:25:38.464 [DEBUG] [Thread-306035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:25:41.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:25:41.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:25:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:25:42.084 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:25:42.085 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:25:42.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 25, 29), 21.42, 24.42, 0.0, 23.38, 23.64, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:25:42.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:25:29
2025-12-24T17:25:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:25:43.239 [DEBUG] [Thread-306036] [transport.py] [_log()] starting thread (client mode): 0xf574c730
2025-12-24T17:25:43.240 [DEBUG] [Thread-306036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:25:43.248 [DEBUG] [Thread-306036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:25:43.249 [INFO] [Thread-306036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] client lang: <none>
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] server lang: <none>
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] kex follows: False
2025-12-24T17:25:43.254 [DEBUG] [Thread-306036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:25:43.255 [DEBUG] [Thread-306036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:25:43.255 [DEBUG] [Thread-306036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:25:43.255 [DEBUG] [Thread-306036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:25:43.255 [DEBUG] [Thread-306036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:25:43.255 [DEBUG] [Thread-306036] [transport.py] [_log()] Compression: none
2025-12-24T17:25:43.255 [DEBUG] [Thread-306036] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:25:43.284 [DEBUG] [Thread-306036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:25:43.289 [DEBUG] [Thread-306036] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:25:43.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:25:43.292 [DEBUG] [Thread-306036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:25:43.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:25:43.295 [DEBUG] [Thread-306036] [transport.py] [_log()] userauth is OK
2025-12-24T17:25:43.295 [DEBUG] [Thread-306036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:25:43.295 [DEBUG] [Thread-306036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:25:43.295 [DEBUG] [Thread-306036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:25:43.295 [DEBUG] [Thread-306036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:25:43.314 [INFO] [Thread-306036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:25:43.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:25:43.902 [DEBUG] [Thread-306036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:25:43.902 [DEBUG] [Thread-306036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:25:43.904 [DEBUG] [Thread-306036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:25:43.943 [DEBUG] [Thread-306036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:25:43.944 [DEBUG] [Thread-306036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:25:43.947 [DEBUG] [Thread-306036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:25:43.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:25:43.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:25:43.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:25:43.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:25:43.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:25:43.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:25:43.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:25:43.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:25:43.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:25:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.642775 -999.00  +23.60  19.86     30   +5.20 1 1 1 1 1   887    0 19.28 35.79 ----- 19.9 19.9 157.4 23.3 27.8 -26.0 27.7 -26.6 29.3 -23.5 29.6 -25.5
2025-12-24T17:25:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:25:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:25:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.642775
2025-12-24T17:25:43.981 [DEBUG] [Thread-306036] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:25:43.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:25:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:25:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:25:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:25:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:25:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:25:29', tmtdew=21.42, humidity=24.42, cloud=0.0, wind=23.38, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:25:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:25:44.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:25:44.078 [DEBUG] [Thread-306039] [transport.py] [_log()] starting thread (client mode): 0xf81e7f70
2025-12-24T17:25:44.078 [DEBUG] [Thread-306039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:25:44.093 [DEBUG] [Thread-306039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:25:44.093 [INFO] [Thread-306039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] client lang: <none>
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] server lang: <none>
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] kex follows: False
2025-12-24T17:25:44.100 [DEBUG] [Thread-306039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:25:44.101 [DEBUG] [Thread-306039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:25:44.101 [DEBUG] [Thread-306039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:25:44.101 [DEBUG] [Thread-306039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:25:44.101 [DEBUG] [Thread-306039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:25:44.101 [DEBUG] [Thread-306039] [transport.py] [_log()] Compression: none
2025-12-24T17:25:44.101 [DEBUG] [Thread-306039] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:25:44.157 [DEBUG] [Thread-306039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:25:44.157 [DEBUG] [Thread-306039] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:25:44.157 [DEBUG] [Thread-306039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:25:44.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:25:44.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:25:44.218 [DEBUG] [Thread-306039] [transport.py] [_log()] userauth is OK
2025-12-24T17:25:44.218 [DEBUG] [Thread-306039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:25:44.218 [DEBUG] [Thread-306039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:25:44.218 [DEBUG] [Thread-306039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:25:44.219 [DEBUG] [Thread-306039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:25:44.242 [INFO] [Thread-306039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:25:44.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:25:44.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:25:45.054 [DEBUG] [Thread-306039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:25:45.054 [DEBUG] [Thread-306039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:25:45.102 [DEBUG] [Thread-306039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:25:45.102 [DEBUG] [Thread-306039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:25:45.110 [DEBUG] [Thread-306039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:25:45.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:25:45.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:25:45.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:25:45.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:25:45.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:25:45.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:25:45.143 [DEBUG] [Thread-306039] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:25:53.548 [DEBUG] [Thread-306041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:26:08.708 [DEBUG] [Thread-306042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:26:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:26:15.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:26:15.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
2025-12-24T17:26:16.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 26, 2), 21.48, 24.33, 0.0, 26.82, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:26:16.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:26:02
2025-12-24T17:26:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:26:16.813 [DEBUG] [Thread-306043] [transport.py] [_log()] starting thread (client mode): 0xf818b250
2025-12-24T17:26:16.814 [DEBUG] [Thread-306043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:26:16.820 [DEBUG] [Thread-306043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:26:16.821 [INFO] [Thread-306043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] client lang: <none>
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] server lang: <none>
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] kex follows: False
2025-12-24T17:26:16.826 [DEBUG] [Thread-306043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:26:16.827 [DEBUG] [Thread-306043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:26:16.827 [DEBUG] [Thread-306043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:26:16.827 [DEBUG] [Thread-306043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:26:16.827 [DEBUG] [Thread-306043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:26:16.827 [DEBUG] [Thread-306043] [transport.py] [_log()] Compression: none
2025-12-24T17:26:16.827 [DEBUG] [Thread-306043] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:26:16.852 [DEBUG] [Thread-306043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:26:16.856 [DEBUG] [Thread-306043] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:26:16.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:26:16.858 [DEBUG] [Thread-306043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:26:16.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:26:16.861 [DEBUG] [Thread-306043] [transport.py] [_log()] userauth is OK
2025-12-24T17:26:16.861 [DEBUG] [Thread-306043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:26:16.861 [DEBUG] [Thread-306043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:26:16.861 [DEBUG] [Thread-306043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:26:16.861 [DEBUG] [Thread-306043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:26:16.880 [INFO] [Thread-306043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:26:16.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:26:17.490 [DEBUG] [Thread-306043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:26:17.490 [DEBUG] [Thread-306043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:26:17.491 [DEBUG] [Thread-306043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:26:17.531 [DEBUG] [Thread-306043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:26:17.531 [DEBUG] [Thread-306043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:26:17.532 [DEBUG] [Thread-306043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:26:17.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:26:17.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:26:17.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:26:17.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:26:17.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:26:17.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:26:17.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:26:17.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:26:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:26:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.643122 -999.00  +23.60  21.26     30   +5.20 1 1 1 1 1   887    0 19.32 38.70 ----- 21.3 21.3 166.9 31.1 27.7 -26.8 27.8 -24.9 29.2 -24.7 29.6 -26.1
2025-12-24T17:26:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:26:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:26:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.643122
2025-12-24T17:26:17.555 [DEBUG] [Thread-306043] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:26:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:26:17.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:26:17.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:26:17.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:26:17.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:26:17.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:26:02', tmtdew=21.48, humidity=24.33, cloud=0.0, wind=26.82, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:26:05.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:26:17.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:26:17.659 [DEBUG] [Thread-306046] [transport.py] [_log()] starting thread (client mode): 0xf81c33d0
2025-12-24T17:26:17.659 [DEBUG] [Thread-306046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:26:17.673 [DEBUG] [Thread-306046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:26:17.673 [INFO] [Thread-306046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] client lang: <none>
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] server lang: <none>
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] kex follows: False
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] Compression: none
2025-12-24T17:26:17.681 [DEBUG] [Thread-306046] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:26:17.736 [DEBUG] [Thread-306046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:26:17.736 [DEBUG] [Thread-306046] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:26:17.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:26:17.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:26:17.737 [DEBUG] [Thread-306046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:26:17.794 [DEBUG] [Thread-306046] [transport.py] [_log()] userauth is OK
2025-12-24T17:26:17.794 [DEBUG] [Thread-306046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:26:17.794 [DEBUG] [Thread-306046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:26:17.794 [DEBUG] [Thread-306046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:26:17.794 [DEBUG] [Thread-306046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:26:17.808 [INFO] [Thread-306046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:26:17.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:26:17.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:26:18.625 [DEBUG] [Thread-306046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:26:18.625 [DEBUG] [Thread-306046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:26:18.674 [DEBUG] [Thread-306046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:26:18.674 [DEBUG] [Thread-306046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:26:18.682 [DEBUG] [Thread-306046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:26:18.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:26:18.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:26:18.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:26:18.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:26:18.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:26:18.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:26:18.714 [DEBUG] [Thread-306046] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:26:23.848 [DEBUG] [Thread-306048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:26:30.753 [DEBUG] [Thread-306049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:26:38.972 [DEBUG] [Thread-306050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:26:42.236 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:26:42.238 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:26:48.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:26:48.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:26:48.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:26:50.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 26, 36), 21.5, 24.58, 0.0, 28.55, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:26:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:26:36
2025-12-24T17:26:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:26:50.400 [DEBUG] [Thread-306051] [transport.py] [_log()] starting thread (client mode): 0xf571ac80
2025-12-24T17:26:50.401 [DEBUG] [Thread-306051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:26:50.401 [DEBUG] [Thread-306051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:26:50.401 [INFO] [Thread-306051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] client lang: <none>
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] server lang: <none>
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] kex follows: False
2025-12-24T17:26:50.405 [DEBUG] [Thread-306051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:26:50.406 [DEBUG] [Thread-306051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:26:50.406 [DEBUG] [Thread-306051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:26:50.406 [DEBUG] [Thread-306051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:26:50.406 [DEBUG] [Thread-306051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:26:50.406 [DEBUG] [Thread-306051] [transport.py] [_log()] Compression: none
2025-12-24T17:26:50.406 [DEBUG] [Thread-306051] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:26:50.440 [DEBUG] [Thread-306051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:26:50.444 [DEBUG] [Thread-306051] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:26:50.445 [DEBUG] [Thread-306051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:26:50.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:26:50.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:26:50.449 [DEBUG] [Thread-306051] [transport.py] [_log()] userauth is OK
2025-12-24T17:26:50.449 [DEBUG] [Thread-306051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:26:50.450 [DEBUG] [Thread-306051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:26:50.450 [DEBUG] [Thread-306051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:26:50.450 [DEBUG] [Thread-306051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:26:50.473 [INFO] [Thread-306051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:26:50.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:26:51.100 [DEBUG] [Thread-306051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:26:51.100 [DEBUG] [Thread-306051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:26:51.101 [DEBUG] [Thread-306051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:26:51.142 [DEBUG] [Thread-306051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:26:51.142 [DEBUG] [Thread-306051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:26:51.146 [DEBUG] [Thread-306051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:26:51.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:26:51.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:26:51.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:26:51.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:26:51.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:26:51.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:26:51.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:26:51.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:26:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:26:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.643470 -999.00  +23.60  18.99     30   +5.10 1 1 1 1 1   887    0 19.22 34.79 ----- 19.0 19.0 151.9 31.2 27.5 -27.8 27.7 -26.7 28.9 -27.2 29.4 -27.5
2025-12-24T17:26:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:26:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:26:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.643470
2025-12-24T17:26:51.188 [DEBUG] [Thread-306051] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:26:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:26:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:26:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:26:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:26:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:26:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:26:36', tmtdew=21.5, humidity=24.58, cloud=0.0, wind=28.55, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:26:35.808', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:26:51.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:26:51.313 [DEBUG] [Thread-306054] [transport.py] [_log()] starting thread (client mode): 0xf574f520
2025-12-24T17:26:51.313 [DEBUG] [Thread-306054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:26:51.328 [DEBUG] [Thread-306054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:26:51.328 [INFO] [Thread-306054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] client lang: <none>
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] server lang: <none>
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] kex follows: False
2025-12-24T17:26:51.335 [DEBUG] [Thread-306054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:26:51.336 [DEBUG] [Thread-306054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:26:51.336 [DEBUG] [Thread-306054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:26:51.336 [DEBUG] [Thread-306054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:26:51.336 [DEBUG] [Thread-306054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:26:51.336 [DEBUG] [Thread-306054] [transport.py] [_log()] Compression: none
2025-12-24T17:26:51.336 [DEBUG] [Thread-306054] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:26:51.393 [DEBUG] [Thread-306054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:26:51.394 [DEBUG] [Thread-306054] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:26:51.394 [DEBUG] [Thread-306054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:26:51.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:26:51.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:26:51.449 [DEBUG] [Thread-306054] [transport.py] [_log()] userauth is OK
2025-12-24T17:26:51.450 [DEBUG] [Thread-306054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:26:51.450 [DEBUG] [Thread-306054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:26:51.450 [DEBUG] [Thread-306054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:26:51.450 [DEBUG] [Thread-306054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:26:51.468 [INFO] [Thread-306054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:26:51.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:26:51.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:26:52.396 [DEBUG] [Thread-306054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:26:52.396 [DEBUG] [Thread-306054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:26:52.435 [DEBUG] [Thread-306054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:26:52.435 [DEBUG] [Thread-306054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:26:52.444 [DEBUG] [Thread-306054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:26:52.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:26:52.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:26:52.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:26:52.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:26:52.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:26:52.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:26:52.482 [DEBUG] [Thread-306054] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:26:54.051 [DEBUG] [Thread-306056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:27:09.227 [DEBUG] [Thread-306057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:27:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:27:22.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:27:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:27:24.338 [DEBUG] [Thread-306058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:27:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 27, 10), 21.47, 24.63, 0.0, 29.13, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:27:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:27:10
2025-12-24T17:27:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:27:24.805 [DEBUG] [Thread-306059] [transport.py] [_log()] starting thread (client mode): 0xf818ba90
2025-12-24T17:27:24.806 [DEBUG] [Thread-306059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:27:24.818 [DEBUG] [Thread-306059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:27:24.818 [INFO] [Thread-306059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:27:24.823 [DEBUG] [Thread-306059] [transport.py] [_log()] client lang: <none>
2025-12-24T17:27:24.824 [DEBUG] [Thread-306059] [transport.py] [_log()] server lang: <none>
2025-12-24T17:27:24.824 [DEBUG] [Thread-306059] [transport.py] [_log()] kex follows: False
2025-12-24T17:27:24.824 [DEBUG] [Thread-306059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:27:24.824 [DEBUG] [Thread-306059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:27:24.824 [DEBUG] [Thread-306059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:27:24.824 [DEBUG] [Thread-306059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:27:24.824 [DEBUG] [Thread-306059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:27:24.825 [DEBUG] [Thread-306059] [transport.py] [_log()] Compression: none
2025-12-24T17:27:24.825 [DEBUG] [Thread-306059] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:27:24.865 [DEBUG] [Thread-306059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:27:24.870 [DEBUG] [Thread-306059] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:27:24.872 [DEBUG] [Thread-306059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:27:24.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:27:24.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:27:24.879 [DEBUG] [Thread-306059] [transport.py] [_log()] userauth is OK
2025-12-24T17:27:24.879 [DEBUG] [Thread-306059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:27:24.880 [DEBUG] [Thread-306059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:27:24.880 [DEBUG] [Thread-306059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:27:24.880 [DEBUG] [Thread-306059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:27:24.908 [INFO] [Thread-306059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:27:24.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:27:25.545 [DEBUG] [Thread-306059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:27:25.545 [DEBUG] [Thread-306059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:27:25.554 [DEBUG] [Thread-306059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:27:25.587 [DEBUG] [Thread-306059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:27:25.587 [DEBUG] [Thread-306059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:27:25.590 [DEBUG] [Thread-306059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:27:25.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:27:25.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:27:25.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:27:25.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:27:25.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:27:25.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:27:25.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:27:25.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:27:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:27:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.643817 -999.00  +23.50  13.74     30   +5.10 1 1 1 1 1   887    0 19.37 34.64 ----- 13.7 13.7 150.8 23.0 27.4 -27.5 27.5 -27.2 28.5 -26.7 29.1 -28.1
2025-12-24T17:27:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:27:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:27:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.643817
2025-12-24T17:27:25.625 [DEBUG] [Thread-306059] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:27:25.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:27:25.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:27:25.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:27:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:27:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:27:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:27:10', tmtdew=21.47, humidity=24.63, cloud=0.0, wind=29.13, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:27:05.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:27:25.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:27:25.734 [DEBUG] [Thread-306062] [transport.py] [_log()] starting thread (client mode): 0xf81e6530
2025-12-24T17:27:25.734 [DEBUG] [Thread-306062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:27:25.749 [DEBUG] [Thread-306062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:27:25.750 [INFO] [Thread-306062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:27:25.757 [DEBUG] [Thread-306062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:27:25.758 [DEBUG] [Thread-306062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:27:25.758 [DEBUG] [Thread-306062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:27:25.758 [DEBUG] [Thread-306062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:27:25.758 [DEBUG] [Thread-306062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:27:25.758 [DEBUG] [Thread-306062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:27:25.758 [DEBUG] [Thread-306062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:27:25.758 [DEBUG] [Thread-306062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:27:25.759 [DEBUG] [Thread-306062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:27:25.759 [DEBUG] [Thread-306062] [transport.py] [_log()] client lang: <none>
2025-12-24T17:27:25.759 [DEBUG] [Thread-306062] [transport.py] [_log()] server lang: <none>
2025-12-24T17:27:25.759 [DEBUG] [Thread-306062] [transport.py] [_log()] kex follows: False
2025-12-24T17:27:25.759 [DEBUG] [Thread-306062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:27:25.759 [DEBUG] [Thread-306062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:27:25.759 [DEBUG] [Thread-306062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:27:25.759 [DEBUG] [Thread-306062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:27:25.760 [DEBUG] [Thread-306062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:27:25.760 [DEBUG] [Thread-306062] [transport.py] [_log()] Compression: none
2025-12-24T17:27:25.760 [DEBUG] [Thread-306062] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:27:25.822 [DEBUG] [Thread-306062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:27:25.822 [DEBUG] [Thread-306062] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:27:25.823 [DEBUG] [Thread-306062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:27:25.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:27:25.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:27:25.878 [DEBUG] [Thread-306062] [transport.py] [_log()] userauth is OK
2025-12-24T17:27:25.878 [DEBUG] [Thread-306062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:27:25.878 [DEBUG] [Thread-306062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:27:25.878 [DEBUG] [Thread-306062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:27:25.878 [DEBUG] [Thread-306062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:27:25.895 [INFO] [Thread-306062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:27:25.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:27:25.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:27:26.791 [DEBUG] [Thread-306062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:27:26.792 [DEBUG] [Thread-306062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:27:26.839 [DEBUG] [Thread-306062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:27:26.839 [DEBUG] [Thread-306062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:27:26.849 [DEBUG] [Thread-306062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:27:26.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:27:26.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:27:26.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:27:26.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:27:26.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:27:26.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:27:26.886 [DEBUG] [Thread-306062] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:27:31.060 [DEBUG] [Thread-306064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:27:39.431 [DEBUG] [Thread-306065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:27:42.381 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:27:42.382 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:27:54.565 [DEBUG] [Thread-306066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:27:56.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:27:56.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:27:56.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:27:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 27, 43), 21.17, 25.07, 0.0, 24.72, 23.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:27:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:27:43
2025-12-24T17:27:58.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:27:58.611 [DEBUG] [Thread-306067] [transport.py] [_log()] starting thread (client mode): 0xf81e4550
2025-12-24T17:27:58.611 [DEBUG] [Thread-306067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:27:58.624 [DEBUG] [Thread-306067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:27:58.624 [INFO] [Thread-306067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] client lang: <none>
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] server lang: <none>
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] kex follows: False
2025-12-24T17:27:58.629 [DEBUG] [Thread-306067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:27:58.630 [DEBUG] [Thread-306067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:27:58.630 [DEBUG] [Thread-306067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:27:58.630 [DEBUG] [Thread-306067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:27:58.630 [DEBUG] [Thread-306067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:27:58.630 [DEBUG] [Thread-306067] [transport.py] [_log()] Compression: none
2025-12-24T17:27:58.630 [DEBUG] [Thread-306067] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:27:58.668 [DEBUG] [Thread-306067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:27:58.672 [DEBUG] [Thread-306067] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:27:58.674 [DEBUG] [Thread-306067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:27:58.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:27:58.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:27:58.678 [DEBUG] [Thread-306067] [transport.py] [_log()] userauth is OK
2025-12-24T17:27:58.678 [DEBUG] [Thread-306067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:27:58.679 [DEBUG] [Thread-306067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:27:58.679 [DEBUG] [Thread-306067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:27:58.679 [DEBUG] [Thread-306067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:27:58.697 [INFO] [Thread-306067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:27:58.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:27:59.326 [DEBUG] [Thread-306067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:27:59.326 [DEBUG] [Thread-306067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:27:59.327 [DEBUG] [Thread-306067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:27:59.367 [DEBUG] [Thread-306067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:27:59.368 [DEBUG] [Thread-306067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:27:59.371 [DEBUG] [Thread-306067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:27:59.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:27:59.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:27:59.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:27:59.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:27:59.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:27:59.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:27:59.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:27:59.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:27:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:27:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.644164 -999.00  +23.50  21.31     30   +5.10 1 1 1 1 1   887    0 19.64 33.71 ----- 21.3 21.3 158.8 29.9 27.3 -26.9 27.3 -26.7 28.4 -24.7 28.8 -27.2
2025-12-24T17:27:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:27:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:27:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.644164
2025-12-24T17:27:59.397 [DEBUG] [Thread-306067] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:27:59.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:27:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:27:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:27:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:27:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:27:59.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:27:43', tmtdew=21.17, humidity=25.07, cloud=0.0, wind=24.72, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:27:35.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:27:59.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:27:59.494 [DEBUG] [Thread-306070] [transport.py] [_log()] starting thread (client mode): 0xf81e56f0
2025-12-24T17:27:59.494 [DEBUG] [Thread-306070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:27:59.511 [DEBUG] [Thread-306070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:27:59.511 [INFO] [Thread-306070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:27:59.518 [DEBUG] [Thread-306070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:27:59.518 [DEBUG] [Thread-306070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:27:59.518 [DEBUG] [Thread-306070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:27:59.518 [DEBUG] [Thread-306070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:27:59.518 [DEBUG] [Thread-306070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:27:59.518 [DEBUG] [Thread-306070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:27:59.518 [DEBUG] [Thread-306070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] client lang: <none>
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] server lang: <none>
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] kex follows: False
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] Compression: none
2025-12-24T17:27:59.519 [DEBUG] [Thread-306070] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:27:59.577 [DEBUG] [Thread-306070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:27:59.578 [DEBUG] [Thread-306070] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:27:59.578 [DEBUG] [Thread-306070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:27:59.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:27:59.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:27:59.638 [DEBUG] [Thread-306070] [transport.py] [_log()] userauth is OK
2025-12-24T17:27:59.638 [DEBUG] [Thread-306070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:27:59.638 [DEBUG] [Thread-306070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:27:59.638 [DEBUG] [Thread-306070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:27:59.638 [DEBUG] [Thread-306070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:27:59.658 [INFO] [Thread-306070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:27:59.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:27:59.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:28:00.530 [DEBUG] [Thread-306070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:28:00.530 [DEBUG] [Thread-306070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:28:00.577 [DEBUG] [Thread-306070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:28:00.578 [DEBUG] [Thread-306070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:28:00.586 [DEBUG] [Thread-306070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:28:00.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:28:00.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:28:00.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:28:00.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:28:00.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:28:00.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:28:00.623 [DEBUG] [Thread-306070] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:28:09.681 [DEBUG] [Thread-306072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:28:24.947 [DEBUG] [Thread-306073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:28:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:28:30.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:28:30.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:28:31.273 [DEBUG] [Thread-306074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:28:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 28, 16), 21.36, 24.78, 0.0, 24.37, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:28:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:28:16
2025-12-24T17:28:31.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:28:31.899 [DEBUG] [Thread-306075] [transport.py] [_log()] starting thread (client mode): 0xf578bdf0
2025-12-24T17:28:31.900 [DEBUG] [Thread-306075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:28:31.912 [DEBUG] [Thread-306075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:28:31.912 [INFO] [Thread-306075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] client lang: <none>
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] server lang: <none>
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] kex follows: False
2025-12-24T17:28:31.917 [DEBUG] [Thread-306075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:28:31.918 [DEBUG] [Thread-306075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:28:31.918 [DEBUG] [Thread-306075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:28:31.918 [DEBUG] [Thread-306075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:28:31.918 [DEBUG] [Thread-306075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:28:31.918 [DEBUG] [Thread-306075] [transport.py] [_log()] Compression: none
2025-12-24T17:28:31.918 [DEBUG] [Thread-306075] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:28:31.942 [DEBUG] [Thread-306075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:28:31.946 [DEBUG] [Thread-306075] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:28:31.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:28:31.948 [DEBUG] [Thread-306075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:28:31.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:28:31.950 [DEBUG] [Thread-306075] [transport.py] [_log()] userauth is OK
2025-12-24T17:28:31.950 [DEBUG] [Thread-306075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:28:31.951 [DEBUG] [Thread-306075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:28:31.951 [DEBUG] [Thread-306075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:28:31.951 [DEBUG] [Thread-306075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:28:31.968 [INFO] [Thread-306075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:28:31.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:28:32.542 [DEBUG] [Thread-306075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:28:32.542 [DEBUG] [Thread-306075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:28:32.543 [DEBUG] [Thread-306075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:28:32.585 [DEBUG] [Thread-306075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:28:32.585 [DEBUG] [Thread-306075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:28:32.586 [DEBUG] [Thread-306075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:28:32.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:28:32.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:28:32.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:28:32.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:28:32.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:28:32.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:28:32.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:28:32.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:28:32.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:28:32.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.644511 -999.00  +23.50  20.89     30   +5.10 1 1 1 1 1   887    0 19.36 32.59 ----- 20.9 20.9 167.8 31.1 27.4 -26.7 27.3 -26.6 28.4 -24.5 28.8 -25.1
2025-12-24T17:28:32.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:28:32.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:28:32.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.644511
2025-12-24T17:28:32.613 [DEBUG] [Thread-306075] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:28:32.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:28:32.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:28:32.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:28:32.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:28:32.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:28:32.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:28:16', tmtdew=21.36, humidity=24.78, cloud=0.0, wind=24.37, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:28:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:28:32.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:28:32.719 [DEBUG] [Thread-306078] [transport.py] [_log()] starting thread (client mode): 0xf578b6a0
2025-12-24T17:28:32.719 [DEBUG] [Thread-306078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:28:32.733 [DEBUG] [Thread-306078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:28:32.733 [INFO] [Thread-306078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:28:32.740 [DEBUG] [Thread-306078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] client lang: <none>
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] server lang: <none>
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] kex follows: False
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] Compression: none
2025-12-24T17:28:32.741 [DEBUG] [Thread-306078] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:28:32.796 [DEBUG] [Thread-306078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:28:32.796 [DEBUG] [Thread-306078] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:28:32.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:28:32.797 [DEBUG] [Thread-306078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:28:32.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:28:32.853 [DEBUG] [Thread-306078] [transport.py] [_log()] userauth is OK
2025-12-24T17:28:32.853 [DEBUG] [Thread-306078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:28:32.853 [DEBUG] [Thread-306078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:28:32.853 [DEBUG] [Thread-306078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:28:32.853 [DEBUG] [Thread-306078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:28:32.867 [INFO] [Thread-306078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:28:32.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:28:32.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:28:33.705 [DEBUG] [Thread-306078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:28:33.705 [DEBUG] [Thread-306078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:28:33.750 [DEBUG] [Thread-306078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:28:33.750 [DEBUG] [Thread-306078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:28:33.759 [DEBUG] [Thread-306078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:28:33.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:28:33.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:28:33.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:28:33.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:28:33.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:28:33.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:28:33.792 [DEBUG] [Thread-306078] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:28:40.069 [DEBUG] [Thread-306080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:28:42.523 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:28:42.525 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:28:55.237 [DEBUG] [Thread-306081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:29:03.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:29:03.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:29:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:29:05.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 28, 49), 20.99, 25.08, 0.0, 28.28, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:29:05.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:28:49
2025-12-24T17:29:05.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:29:05.486 [DEBUG] [Thread-306082] [transport.py] [_log()] starting thread (client mode): 0xf81f2d70
2025-12-24T17:29:05.487 [DEBUG] [Thread-306082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:29:05.500 [DEBUG] [Thread-306082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:29:05.500 [INFO] [Thread-306082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:29:05.505 [DEBUG] [Thread-306082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:29:05.505 [DEBUG] [Thread-306082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:29:05.505 [DEBUG] [Thread-306082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:29:05.505 [DEBUG] [Thread-306082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:29:05.505 [DEBUG] [Thread-306082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:29:05.505 [DEBUG] [Thread-306082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:29:05.506 [DEBUG] [Thread-306082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:29:05.506 [DEBUG] [Thread-306082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:29:05.506 [DEBUG] [Thread-306082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:29:05.506 [DEBUG] [Thread-306082] [transport.py] [_log()] client lang: <none>
2025-12-24T17:29:05.506 [DEBUG] [Thread-306082] [transport.py] [_log()] server lang: <none>
2025-12-24T17:29:05.506 [DEBUG] [Thread-306082] [transport.py] [_log()] kex follows: False
2025-12-24T17:29:05.506 [DEBUG] [Thread-306082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:29:05.506 [DEBUG] [Thread-306082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:29:05.507 [DEBUG] [Thread-306082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:29:05.507 [DEBUG] [Thread-306082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:29:05.507 [DEBUG] [Thread-306082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:29:05.507 [DEBUG] [Thread-306082] [transport.py] [_log()] Compression: none
2025-12-24T17:29:05.507 [DEBUG] [Thread-306082] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:29:05.547 [DEBUG] [Thread-306082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:29:05.552 [DEBUG] [Thread-306082] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:29:05.553 [DEBUG] [Thread-306082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:29:05.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:29:05.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:29:05.559 [DEBUG] [Thread-306082] [transport.py] [_log()] userauth is OK
2025-12-24T17:29:05.559 [DEBUG] [Thread-306082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:29:05.560 [DEBUG] [Thread-306082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:29:05.560 [DEBUG] [Thread-306082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:29:05.560 [DEBUG] [Thread-306082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:29:05.599 [INFO] [Thread-306082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:29:05.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:29:06.273 [DEBUG] [Thread-306082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:29:06.273 [DEBUG] [Thread-306082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:29:06.274 [DEBUG] [Thread-306082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:29:06.314 [DEBUG] [Thread-306082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:29:06.314 [DEBUG] [Thread-306082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:29:06.318 [DEBUG] [Thread-306082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:29:06.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:29:06.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:29:06.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:29:06.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:29:06.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:29:06.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:29:06.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:29:06.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:29:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:29:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.644859 -999.00  +23.40  19.79     30   +5.10 1 1 1 1 1   887    0 19.25 32.00 ----- 19.8 19.8 173.6 24.8 27.3 -27.4 27.2 -27.9 28.3 -26.1 28.8 -26.4
2025-12-24T17:29:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:29:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:29:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.644859
2025-12-24T17:29:06.355 [DEBUG] [Thread-306082] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:29:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:29:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:29:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:29:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:29:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:29:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:28:49', tmtdew=20.99, humidity=25.08, cloud=0.0, wind=28.28, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:28:35.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:29:06.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:29:06.474 [DEBUG] [Thread-306085] [transport.py] [_log()] starting thread (client mode): 0xf572bf70
2025-12-24T17:29:06.474 [DEBUG] [Thread-306085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:29:06.488 [DEBUG] [Thread-306085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:29:06.488 [INFO] [Thread-306085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] client lang: <none>
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] server lang: <none>
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] kex follows: False
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] Compression: none
2025-12-24T17:29:06.496 [DEBUG] [Thread-306085] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:29:06.553 [DEBUG] [Thread-306085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:29:06.553 [DEBUG] [Thread-306085] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:29:06.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:29:06.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:29:06.554 [DEBUG] [Thread-306085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:29:06.610 [DEBUG] [Thread-306085] [transport.py] [_log()] userauth is OK
2025-12-24T17:29:06.610 [DEBUG] [Thread-306085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:29:06.610 [DEBUG] [Thread-306085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:29:06.610 [DEBUG] [Thread-306085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:29:06.610 [DEBUG] [Thread-306085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:29:06.634 [INFO] [Thread-306085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:29:06.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:29:06.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:29:07.481 [DEBUG] [Thread-306085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:29:07.481 [DEBUG] [Thread-306085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:29:07.528 [DEBUG] [Thread-306085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:29:07.528 [DEBUG] [Thread-306085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:29:07.537 [DEBUG] [Thread-306085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:29:07.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:29:07.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:29:07.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:29:07.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:29:07.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:29:07.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:29:07.570 [DEBUG] [Thread-306085] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:29:10.334 [DEBUG] [Thread-306087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:29:25.500 [DEBUG] [Thread-306088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:29:31.497 [DEBUG] [Thread-306089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:29:37.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:29:37.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:29:37.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:29:38.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 29, 23), 20.92, 25.2, 0.0, 25.22, 23.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:29:38.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:29:23
2025-12-24T17:29:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:29:39.248 [DEBUG] [Thread-306090] [transport.py] [_log()] starting thread (client mode): 0xf5753a90
2025-12-24T17:29:39.249 [DEBUG] [Thread-306090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:29:39.249 [DEBUG] [Thread-306090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:29:39.249 [INFO] [Thread-306090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] client lang: <none>
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] server lang: <none>
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] kex follows: False
2025-12-24T17:29:39.254 [DEBUG] [Thread-306090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:29:39.255 [DEBUG] [Thread-306090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:29:39.255 [DEBUG] [Thread-306090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:29:39.255 [DEBUG] [Thread-306090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:29:39.255 [DEBUG] [Thread-306090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:29:39.255 [DEBUG] [Thread-306090] [transport.py] [_log()] Compression: none
2025-12-24T17:29:39.255 [DEBUG] [Thread-306090] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:29:39.284 [DEBUG] [Thread-306090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:29:39.287 [DEBUG] [Thread-306090] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:29:39.288 [DEBUG] [Thread-306090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:29:39.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:29:39.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:29:39.292 [DEBUG] [Thread-306090] [transport.py] [_log()] userauth is OK
2025-12-24T17:29:39.292 [DEBUG] [Thread-306090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:29:39.292 [DEBUG] [Thread-306090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:29:39.292 [DEBUG] [Thread-306090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:29:39.292 [DEBUG] [Thread-306090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:29:39.310 [INFO] [Thread-306090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:29:39.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:29:39.945 [DEBUG] [Thread-306090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:29:39.946 [DEBUG] [Thread-306090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:29:39.947 [DEBUG] [Thread-306090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:29:39.987 [DEBUG] [Thread-306090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:29:39.988 [DEBUG] [Thread-306090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:29:39.992 [DEBUG] [Thread-306090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:29:40.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:29:40.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:29:40.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:29:40.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:29:40.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:29:40.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:29:40.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:29:40.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:29:40.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:29:40.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.645206 -999.00  +23.20  14.83     30   +5.10 1 1 1 1 1   887    0 19.43 27.52 ----- 14.8 14.8 170.0 27.6 27.2 -25.8 26.9 -27.3 28.4 -23.8 28.6 -26.0
2025-12-24T17:29:40.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:29:40.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:29:40.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.645206
2025-12-24T17:29:40.033 [DEBUG] [Thread-306090] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:29:40.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:29:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:29:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:29:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:29:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:29:40.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:29:23', tmtdew=20.92, humidity=25.2, cloud=0.0, wind=25.22, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:29:05.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:29:40.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:29:40.147 [DEBUG] [Thread-306093] [transport.py] [_log()] starting thread (client mode): 0xf5770b80
2025-12-24T17:29:40.148 [DEBUG] [Thread-306093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:29:40.162 [DEBUG] [Thread-306093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:29:40.162 [INFO] [Thread-306093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:29:40.170 [DEBUG] [Thread-306093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:29:40.170 [DEBUG] [Thread-306093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:29:40.170 [DEBUG] [Thread-306093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:29:40.171 [DEBUG] [Thread-306093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:29:40.171 [DEBUG] [Thread-306093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:29:40.171 [DEBUG] [Thread-306093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:29:40.171 [DEBUG] [Thread-306093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:29:40.171 [DEBUG] [Thread-306093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:29:40.171 [DEBUG] [Thread-306093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:29:40.171 [DEBUG] [Thread-306093] [transport.py] [_log()] client lang: <none>
2025-12-24T17:29:40.171 [DEBUG] [Thread-306093] [transport.py] [_log()] server lang: <none>
2025-12-24T17:29:40.172 [DEBUG] [Thread-306093] [transport.py] [_log()] kex follows: False
2025-12-24T17:29:40.172 [DEBUG] [Thread-306093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:29:40.172 [DEBUG] [Thread-306093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:29:40.172 [DEBUG] [Thread-306093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:29:40.173 [DEBUG] [Thread-306093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:29:40.173 [DEBUG] [Thread-306093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:29:40.173 [DEBUG] [Thread-306093] [transport.py] [_log()] Compression: none
2025-12-24T17:29:40.173 [DEBUG] [Thread-306093] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:29:40.232 [DEBUG] [Thread-306093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:29:40.232 [DEBUG] [Thread-306093] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:29:40.233 [DEBUG] [Thread-306093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:29:40.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:29:40.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:29:40.290 [DEBUG] [Thread-306093] [transport.py] [_log()] userauth is OK
2025-12-24T17:29:40.290 [DEBUG] [Thread-306093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:29:40.290 [DEBUG] [Thread-306093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:29:40.290 [DEBUG] [Thread-306093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:29:40.291 [DEBUG] [Thread-306093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:29:40.310 [INFO] [Thread-306093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:29:40.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:29:40.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:29:40.607 [DEBUG] [Thread-306095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:29:41.168 [DEBUG] [Thread-306093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:29:41.169 [DEBUG] [Thread-306093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:29:41.208 [DEBUG] [Thread-306093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:29:41.209 [DEBUG] [Thread-306093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:29:41.218 [DEBUG] [Thread-306093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:29:41.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:29:41.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:29:41.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:29:41.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:29:41.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:29:41.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:29:41.256 [DEBUG] [Thread-306093] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:29:42.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:29:42.666 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:29:55.788 [DEBUG] [Thread-306096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:30:10.892 [DEBUG] [Thread-306097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:30:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:30:11.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:30:11.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:30:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 29, 56), 20.93, 25.48, 0.0, 22.8, 23.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:30:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:29:56
2025-12-24T17:30:12.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:30:12.822 [DEBUG] [Thread-306098] [transport.py] [_log()] starting thread (client mode): 0xf81c3970
2025-12-24T17:30:12.822 [DEBUG] [Thread-306098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:30:12.831 [DEBUG] [Thread-306098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:30:12.831 [INFO] [Thread-306098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] client lang: <none>
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] server lang: <none>
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] kex follows: False
2025-12-24T17:30:12.838 [DEBUG] [Thread-306098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:30:12.839 [DEBUG] [Thread-306098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:30:12.839 [DEBUG] [Thread-306098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:30:12.839 [DEBUG] [Thread-306098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:30:12.839 [DEBUG] [Thread-306098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:30:12.839 [DEBUG] [Thread-306098] [transport.py] [_log()] Compression: none
2025-12-24T17:30:12.840 [DEBUG] [Thread-306098] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:30:12.878 [DEBUG] [Thread-306098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:30:12.883 [DEBUG] [Thread-306098] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:30:12.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:30:12.887 [DEBUG] [Thread-306098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:30:12.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:30:12.890 [DEBUG] [Thread-306098] [transport.py] [_log()] userauth is OK
2025-12-24T17:30:12.891 [DEBUG] [Thread-306098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:30:12.891 [DEBUG] [Thread-306098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:30:12.891 [DEBUG] [Thread-306098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:30:12.891 [DEBUG] [Thread-306098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:30:12.919 [INFO] [Thread-306098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:30:12.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:30:13.574 [DEBUG] [Thread-306098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:30:13.574 [DEBUG] [Thread-306098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:30:13.576 [DEBUG] [Thread-306098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:30:13.615 [DEBUG] [Thread-306098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:30:13.615 [DEBUG] [Thread-306098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:30:13.618 [DEBUG] [Thread-306098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:30:13.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:30:13.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:30:13.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:30:13.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:30:13.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:30:13.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:30:13.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:30:13.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:30:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:30:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.645552 -999.00  +23.30  16.03     30   +5.10 1 1 1 1 1   887    0 19.07 24.38 ----- 16.0 16.0 157.8 25.2 27.2 -26.2 26.9 -28.7 28.4 -23.9 28.7 -24.7
2025-12-24T17:30:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:30:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:30:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.645552
2025-12-24T17:30:13.652 [DEBUG] [Thread-306098] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:30:13.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:30:13.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:30:13.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:30:13.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:30:13.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:30:13.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:29:56', tmtdew=20.93, humidity=25.48, cloud=0.0, wind=22.8, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:29:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:30:13.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:30:13.767 [DEBUG] [Thread-306101] [transport.py] [_log()] starting thread (client mode): 0xf5728520
2025-12-24T17:30:13.767 [DEBUG] [Thread-306101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:30:13.786 [DEBUG] [Thread-306101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:30:13.786 [INFO] [Thread-306101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] client lang: <none>
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] server lang: <none>
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] kex follows: False
2025-12-24T17:30:13.793 [DEBUG] [Thread-306101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:30:13.794 [DEBUG] [Thread-306101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:30:13.794 [DEBUG] [Thread-306101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:30:13.794 [DEBUG] [Thread-306101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:30:13.794 [DEBUG] [Thread-306101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:30:13.794 [DEBUG] [Thread-306101] [transport.py] [_log()] Compression: none
2025-12-24T17:30:13.794 [DEBUG] [Thread-306101] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:30:13.849 [DEBUG] [Thread-306101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:30:13.850 [DEBUG] [Thread-306101] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:30:13.850 [DEBUG] [Thread-306101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:30:13.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:30:13.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:30:13.906 [DEBUG] [Thread-306101] [transport.py] [_log()] userauth is OK
2025-12-24T17:30:13.906 [DEBUG] [Thread-306101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:30:13.906 [DEBUG] [Thread-306101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:30:13.907 [DEBUG] [Thread-306101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:30:13.907 [DEBUG] [Thread-306101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:30:13.924 [INFO] [Thread-306101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:30:13.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:30:13.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:30:14.767 [DEBUG] [Thread-306101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:30:14.767 [DEBUG] [Thread-306101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:30:14.813 [DEBUG] [Thread-306101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:30:14.814 [DEBUG] [Thread-306101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:30:14.822 [DEBUG] [Thread-306101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:30:14.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:30:14.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:30:14.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:30:14.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:30:14.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:30:14.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:30:14.858 [DEBUG] [Thread-306101] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:30:25.995 [DEBUG] [Thread-306103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:30:31.705 [DEBUG] [Thread-306104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:30:41.151 [DEBUG] [Thread-306105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:30:42.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:30:42.808 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:30:44.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:30:44.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:30: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
2025-12-24T17:30:45.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 30, 29), 20.89, 25.53, 0.0, 22.09, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:30:45.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:30:29
2025-12-24T17:30:45.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:30:46.123 [DEBUG] [Thread-306106] [transport.py] [_log()] starting thread (client mode): 0xf574c130
2025-12-24T17:30:46.124 [DEBUG] [Thread-306106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:30:46.135 [DEBUG] [Thread-306106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:30:46.136 [INFO] [Thread-306106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] client lang: <none>
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] server lang: <none>
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] kex follows: False
2025-12-24T17:30:46.140 [DEBUG] [Thread-306106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:30:46.141 [DEBUG] [Thread-306106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:30:46.141 [DEBUG] [Thread-306106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:30:46.141 [DEBUG] [Thread-306106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:30:46.141 [DEBUG] [Thread-306106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:30:46.141 [DEBUG] [Thread-306106] [transport.py] [_log()] Compression: none
2025-12-24T17:30:46.141 [DEBUG] [Thread-306106] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:30:46.172 [DEBUG] [Thread-306106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:30:46.176 [DEBUG] [Thread-306106] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:30:46.177 [DEBUG] [Thread-306106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:30:46.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:30:46.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:30:46.180 [DEBUG] [Thread-306106] [transport.py] [_log()] userauth is OK
2025-12-24T17:30:46.180 [DEBUG] [Thread-306106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:30:46.180 [DEBUG] [Thread-306106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:30:46.180 [DEBUG] [Thread-306106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:30:46.180 [DEBUG] [Thread-306106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:30:46.198 [INFO] [Thread-306106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:30:46.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:30:46.830 [DEBUG] [Thread-306106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:30:46.830 [DEBUG] [Thread-306106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:30:46.831 [DEBUG] [Thread-306106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:30:46.871 [DEBUG] [Thread-306106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:30:46.871 [DEBUG] [Thread-306106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:30:46.874 [DEBUG] [Thread-306106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:30:46.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:30:46.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:30:46.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:30:46.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:30:46.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:30:46.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:30:46.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:30:46.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:30:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:30:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.646247 -999.00  +23.30  12.92     30   +5.10 1 1 1 1 1   887    0 18.79 18.44 ----- 12.9 12.9 178.1 20.4 27.3 -26.0 27.2 -25.1 28.7 -23.4 28.9 -25.1
2025-12-24T17:30:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:30:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:30:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.646247
2025-12-24T17:30:46.904 [DEBUG] [Thread-306106] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:30:46.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:30:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:30:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:30:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:30:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:30:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:30:29', tmtdew=20.89, humidity=25.53, cloud=0.0, wind=22.09, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:30:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:30:46.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:30:47.010 [DEBUG] [Thread-306109] [transport.py] [_log()] starting thread (client mode): 0xf57895a0
2025-12-24T17:30:47.010 [DEBUG] [Thread-306109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:30:47.024 [DEBUG] [Thread-306109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:30:47.024 [INFO] [Thread-306109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] client lang: <none>
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] server lang: <none>
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] kex follows: False
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] Compression: none
2025-12-24T17:30:47.032 [DEBUG] [Thread-306109] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:30:47.088 [DEBUG] [Thread-306109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:30:47.088 [DEBUG] [Thread-306109] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:30:47.088 [DEBUG] [Thread-306109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:30:47.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:30:47.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:30:47.145 [DEBUG] [Thread-306109] [transport.py] [_log()] userauth is OK
2025-12-24T17:30:47.145 [DEBUG] [Thread-306109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:30:47.145 [DEBUG] [Thread-306109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:30:47.145 [DEBUG] [Thread-306109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:30:47.145 [DEBUG] [Thread-306109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:30:47.160 [INFO] [Thread-306109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:30:47.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:30:47.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:30:48.041 [DEBUG] [Thread-306109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:30:48.041 [DEBUG] [Thread-306109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:30:48.089 [DEBUG] [Thread-306109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:30:48.089 [DEBUG] [Thread-306109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:30:48.097 [DEBUG] [Thread-306109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:30:48.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:30:48.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')
2025-12-24T17:30:48.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:30:48.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:30:48.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:30:48.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:30:48.133 [DEBUG] [Thread-306109] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:30:56.229 [DEBUG] [Thread-306111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:31:11.445 [DEBUG] [Thread-306112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:31:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:31:18.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:31:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:31:19.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 31, 2), 20.81, 25.65, 0.0, 19.16, 23.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:31:19.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:31:02
2025-12-24T17:31:19.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:31:19.827 [DEBUG] [Thread-306113] [transport.py] [_log()] starting thread (client mode): 0xf57889a0
2025-12-24T17:31:19.828 [DEBUG] [Thread-306113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:31:19.840 [DEBUG] [Thread-306113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:31:19.840 [INFO] [Thread-306113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:31:19.845 [DEBUG] [Thread-306113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:31:19.845 [DEBUG] [Thread-306113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:31:19.845 [DEBUG] [Thread-306113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:31:19.845 [DEBUG] [Thread-306113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:31:19.845 [DEBUG] [Thread-306113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:31:19.845 [DEBUG] [Thread-306113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:31:19.845 [DEBUG] [Thread-306113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:31:19.845 [DEBUG] [Thread-306113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:31:19.846 [DEBUG] [Thread-306113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:31:19.846 [DEBUG] [Thread-306113] [transport.py] [_log()] client lang: <none>
2025-12-24T17:31:19.846 [DEBUG] [Thread-306113] [transport.py] [_log()] server lang: <none>
2025-12-24T17:31:19.846 [DEBUG] [Thread-306113] [transport.py] [_log()] kex follows: False
2025-12-24T17:31:19.846 [DEBUG] [Thread-306113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:31:19.846 [DEBUG] [Thread-306113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:31:19.847 [DEBUG] [Thread-306113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:31:19.847 [DEBUG] [Thread-306113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:31:19.847 [DEBUG] [Thread-306113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:31:19.847 [DEBUG] [Thread-306113] [transport.py] [_log()] Compression: none
2025-12-24T17:31:19.847 [DEBUG] [Thread-306113] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:31:19.885 [DEBUG] [Thread-306113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:31:19.890 [DEBUG] [Thread-306113] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:31:19.893 [DEBUG] [Thread-306113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:31:19.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:31:19.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:31:19.898 [DEBUG] [Thread-306113] [transport.py] [_log()] userauth is OK
2025-12-24T17:31:19.898 [DEBUG] [Thread-306113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:31:19.899 [DEBUG] [Thread-306113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:31:19.899 [DEBUG] [Thread-306113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:31:19.899 [DEBUG] [Thread-306113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:31:19.931 [INFO] [Thread-306113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:31:19.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:31:20.601 [DEBUG] [Thread-306113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:31:20.601 [DEBUG] [Thread-306113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:31:20.602 [DEBUG] [Thread-306113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:31:20.642 [DEBUG] [Thread-306113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:31:20.642 [DEBUG] [Thread-306113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:31:20.644 [DEBUG] [Thread-306113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:31:20.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:31:20.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:31:20.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:31:20.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:31:20.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:31:20.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:31:20.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:31:20.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:31:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:31:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.646595 -999.00  +23.30  15.29     30   +5.20 1 1 1 1 1   887    0 18.92 16.76 ----- 15.3 15.3 183.0 21.0 27.3 -26.1 27.2 -27.5 28.6 -25.0 29.0 -25.4
2025-12-24T17:31:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:31:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:31:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.646595
2025-12-24T17:31:20.674 [DEBUG] [Thread-306113] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:31:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:31:20.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:31:20.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:31:20.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:31:20.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:31:20.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:31:02', tmtdew=20.81, humidity=25.65, cloud=0.0, wind=19.16, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:31:05.808', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:31:20.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:31:20.772 [DEBUG] [Thread-306116] [transport.py] [_log()] starting thread (client mode): 0xf57190c0
2025-12-24T17:31:20.772 [DEBUG] [Thread-306116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:31:20.786 [DEBUG] [Thread-306116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:31:20.786 [INFO] [Thread-306116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] client lang: <none>
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] server lang: <none>
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] kex follows: False
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] Compression: none
2025-12-24T17:31:20.794 [DEBUG] [Thread-306116] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:31:20.852 [DEBUG] [Thread-306116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:31:20.852 [DEBUG] [Thread-306116] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:31:20.853 [DEBUG] [Thread-306116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:31:20.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:31:20.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:31:20.909 [DEBUG] [Thread-306116] [transport.py] [_log()] userauth is OK
2025-12-24T17:31:20.909 [DEBUG] [Thread-306116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:31:20.909 [DEBUG] [Thread-306116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:31:20.909 [DEBUG] [Thread-306116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:31:20.909 [DEBUG] [Thread-306116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:31:20.923 [INFO] [Thread-306116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:31:20.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:31:20.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:31:21.771 [DEBUG] [Thread-306116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:31:21.771 [DEBUG] [Thread-306116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:31:21.818 [DEBUG] [Thread-306116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:31:21.818 [DEBUG] [Thread-306116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:31:21.828 [DEBUG] [Thread-306116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:31:21.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:31:21.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:31:21.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
2025-12-24T17:31:21.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:31:21.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:31:21.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:31:21.867 [DEBUG] [Thread-306116] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:31:26.559 [DEBUG] [Thread-306118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:31:31.941 [DEBUG] [Thread-306119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:31:41.692 [DEBUG] [Thread-306120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:31:42.952 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:31:42.954 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:31:51.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:31:51.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:31:51.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
2025-12-24T17:31:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 31, 36), 21.14, 24.82, 0.0, 17.66, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:31:53.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:31:36
2025-12-24T17:31:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:31:54.118 [DEBUG] [Thread-306121] [transport.py] [_log()] starting thread (client mode): 0xf5751300
2025-12-24T17:31:54.119 [DEBUG] [Thread-306121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:31:54.128 [DEBUG] [Thread-306121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:31:54.128 [INFO] [Thread-306121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:31:54.134 [DEBUG] [Thread-306121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:31:54.134 [DEBUG] [Thread-306121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:31:54.134 [DEBUG] [Thread-306121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] client lang: <none>
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] server lang: <none>
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] kex follows: False
2025-12-24T17:31:54.135 [DEBUG] [Thread-306121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:31:54.136 [DEBUG] [Thread-306121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:31:54.136 [DEBUG] [Thread-306121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:31:54.137 [DEBUG] [Thread-306121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:31:54.137 [DEBUG] [Thread-306121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:31:54.137 [DEBUG] [Thread-306121] [transport.py] [_log()] Compression: none
2025-12-24T17:31:54.137 [DEBUG] [Thread-306121] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:31:54.177 [DEBUG] [Thread-306121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:31:54.182 [DEBUG] [Thread-306121] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:31:54.184 [DEBUG] [Thread-306121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:31:54.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:31:54.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:31:54.190 [DEBUG] [Thread-306121] [transport.py] [_log()] userauth is OK
2025-12-24T17:31:54.190 [DEBUG] [Thread-306121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:31:54.190 [DEBUG] [Thread-306121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:31:54.190 [DEBUG] [Thread-306121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:31:54.190 [DEBUG] [Thread-306121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:31:54.232 [INFO] [Thread-306121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:31:54.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:31:54.868 [DEBUG] [Thread-306121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:31:54.868 [DEBUG] [Thread-306121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:31:54.869 [DEBUG] [Thread-306121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:31:54.909 [DEBUG] [Thread-306121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:31:54.909 [DEBUG] [Thread-306121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:31:54.913 [DEBUG] [Thread-306121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:31:54.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:31:54.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:31:54.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:31:54.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:31:54.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:31:54.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:31:54.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:31:54.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:31:54.943 [DEBUG] [Thread-306121] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:31:54.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:31:54.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.646942 -999.00  +23.50  15.38     30   +5.20 1 1 1 1 1   887    0 19.06 16.65 ----- 15.4 15.4 192.0 19.1 27.4 -25.8 27.2 -27.6 28.9 -23.6 29.1 -24.7
2025-12-24T17:31:54.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:31:54.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:31:54.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.646942
2025-12-24T17:31:54.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:31:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:31:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:31:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:31:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:31:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:31:36', tmtdew=21.14, humidity=24.82, cloud=0.0, wind=17.66, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:31:35.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:31:55.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:31:55.066 [DEBUG] [Thread-306124] [transport.py] [_log()] starting thread (client mode): 0xf572b130
2025-12-24T17:31:55.066 [DEBUG] [Thread-306124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:31:55.080 [DEBUG] [Thread-306124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:31:55.081 [INFO] [Thread-306124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:31:55.088 [DEBUG] [Thread-306124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:31:55.088 [DEBUG] [Thread-306124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] client lang: <none>
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] server lang: <none>
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] kex follows: False
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] Compression: none
2025-12-24T17:31:55.089 [DEBUG] [Thread-306124] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:31:55.145 [DEBUG] [Thread-306124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:31:55.146 [DEBUG] [Thread-306124] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:31:55.146 [DEBUG] [Thread-306124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:31:55.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:31:55.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:31:55.202 [DEBUG] [Thread-306124] [transport.py] [_log()] userauth is OK
2025-12-24T17:31:55.202 [DEBUG] [Thread-306124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:31:55.202 [DEBUG] [Thread-306124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:31:55.203 [DEBUG] [Thread-306124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:31:55.203 [DEBUG] [Thread-306124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:31:55.227 [INFO] [Thread-306124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:31:55.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:31:55.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:31:56.054 [DEBUG] [Thread-306124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:31:56.054 [DEBUG] [Thread-306124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:31:56.102 [DEBUG] [Thread-306124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:31:56.102 [DEBUG] [Thread-306124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:31:56.111 [DEBUG] [Thread-306124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:31:56.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:31:56.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:31:56.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:31:56.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:31:56.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:31:56.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:31:56.146 [DEBUG] [Thread-306124] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:31:56.789 [DEBUG] [Thread-306126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:32:11.961 [DEBUG] [Thread-306127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:32:26.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:32:26.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:32:26.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:32:27.074 [DEBUG] [Thread-306128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:32:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 32, 9), 21.22, 24.7, 0.0, 19.71, 23.47, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:32:27.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:32:09
2025-12-24T17:32:27.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:32:27.883 [DEBUG] [Thread-306129] [transport.py] [_log()] starting thread (client mode): 0xf5729ed0
2025-12-24T17:32:27.884 [DEBUG] [Thread-306129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:32:27.884 [DEBUG] [Thread-306129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:32:27.884 [INFO] [Thread-306129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:32:27.888 [DEBUG] [Thread-306129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:32:27.888 [DEBUG] [Thread-306129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:32:27.888 [DEBUG] [Thread-306129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] client lang: <none>
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] server lang: <none>
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] kex follows: False
2025-12-24T17:32:27.889 [DEBUG] [Thread-306129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:32:27.890 [DEBUG] [Thread-306129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:32:27.890 [DEBUG] [Thread-306129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:32:27.890 [DEBUG] [Thread-306129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:32:27.890 [DEBUG] [Thread-306129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:32:27.890 [DEBUG] [Thread-306129] [transport.py] [_log()] Compression: none
2025-12-24T17:32:27.890 [DEBUG] [Thread-306129] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:32:27.923 [DEBUG] [Thread-306129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:32:27.927 [DEBUG] [Thread-306129] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:32:27.928 [DEBUG] [Thread-306129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:32:27.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:32:27.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:32:27.933 [DEBUG] [Thread-306129] [transport.py] [_log()] userauth is OK
2025-12-24T17:32:27.934 [DEBUG] [Thread-306129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:32:27.934 [DEBUG] [Thread-306129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:32:27.934 [DEBUG] [Thread-306129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:32:27.934 [DEBUG] [Thread-306129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:32:27.960 [INFO] [Thread-306129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:32:27.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:32:28.610 [DEBUG] [Thread-306129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:32:28.610 [DEBUG] [Thread-306129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:32:28.611 [DEBUG] [Thread-306129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:32:28.651 [DEBUG] [Thread-306129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:32:28.651 [DEBUG] [Thread-306129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:32:28.654 [DEBUG] [Thread-306129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:32:28.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:32:28.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:32:28.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:32:28.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:32:28.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:32:28.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:32:28.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:32:28.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:32:28.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:32:28.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.647289 -999.00  +23.50  12.61     30   +5.10 1 1 1 1 1   887    0 18.77 14.61 ----- 12.6 12.6 189.6 22.3 27.3 -26.8 27.3 -27.9 28.8 -25.5 29.0 -27.0
2025-12-24T17:32:28.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:32:28.682 [DEBUG] [Thread-306129] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:32:28.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:32:28.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.647289
2025-12-24T17:32:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:32:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:32:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:32:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:32:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:32:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:32:09', tmtdew=21.22, humidity=24.7, cloud=0.0, wind=19.71, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:32:05.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:32:28.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:32:28.800 [DEBUG] [Thread-306132] [transport.py] [_log()] starting thread (client mode): 0xf57711e0
2025-12-24T17:32:28.800 [DEBUG] [Thread-306132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:32:28.814 [DEBUG] [Thread-306132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:32:28.814 [INFO] [Thread-306132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:32:28.821 [DEBUG] [Thread-306132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] client lang: <none>
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] server lang: <none>
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] kex follows: False
2025-12-24T17:32:28.822 [DEBUG] [Thread-306132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:32:28.823 [DEBUG] [Thread-306132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:32:28.823 [DEBUG] [Thread-306132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:32:28.823 [DEBUG] [Thread-306132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:32:28.823 [DEBUG] [Thread-306132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:32:28.823 [DEBUG] [Thread-306132] [transport.py] [_log()] Compression: none
2025-12-24T17:32:28.823 [DEBUG] [Thread-306132] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:32:28.880 [DEBUG] [Thread-306132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:32:28.881 [DEBUG] [Thread-306132] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:32:28.881 [DEBUG] [Thread-306132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:32:28.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:32:28.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:32:28.937 [DEBUG] [Thread-306132] [transport.py] [_log()] userauth is OK
2025-12-24T17:32:28.937 [DEBUG] [Thread-306132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:32:28.937 [DEBUG] [Thread-306132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:32:28.937 [DEBUG] [Thread-306132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:32:28.938 [DEBUG] [Thread-306132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:32:28.959 [INFO] [Thread-306132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:32:28.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:32:28.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:32:29.764 [DEBUG] [Thread-306132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:32:29.764 [DEBUG] [Thread-306132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:32:29.811 [DEBUG] [Thread-306132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:32:29.811 [DEBUG] [Thread-306132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:32:29.820 [DEBUG] [Thread-306132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:32:29.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:32:29.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:32:29.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:32:29.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:32:29.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:32:29.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:32:29.857 [DEBUG] [Thread-306132] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:32:32.203 [DEBUG] [Thread-306134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:32:42.154 [DEBUG] [Thread-306135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:32:43.095 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:32:43.096 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:32:57.324 [DEBUG] [Thread-306136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:32:59.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:32:59.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:32:59.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:33:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 32, 42), 21.18, 24.75, 0.0, 22.3, 23.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:33:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:32:42
2025-12-24T17:33:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:33:01.402 [DEBUG] [Thread-306137] [transport.py] [_log()] starting thread (client mode): 0xf5752620
2025-12-24T17:33:01.403 [DEBUG] [Thread-306137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:33:01.419 [DEBUG] [Thread-306137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:33:01.419 [INFO] [Thread-306137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] client lang: <none>
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] server lang: <none>
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] kex follows: False
2025-12-24T17:33:01.424 [DEBUG] [Thread-306137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:33:01.425 [DEBUG] [Thread-306137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:33:01.425 [DEBUG] [Thread-306137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:33:01.425 [DEBUG] [Thread-306137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:33:01.425 [DEBUG] [Thread-306137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:33:01.425 [DEBUG] [Thread-306137] [transport.py] [_log()] Compression: none
2025-12-24T17:33:01.425 [DEBUG] [Thread-306137] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:33:01.455 [DEBUG] [Thread-306137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:33:01.458 [DEBUG] [Thread-306137] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:33:01.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:33:01.459 [DEBUG] [Thread-306137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:33:01.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:33:01.462 [DEBUG] [Thread-306137] [transport.py] [_log()] userauth is OK
2025-12-24T17:33:01.462 [DEBUG] [Thread-306137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:33:01.462 [DEBUG] [Thread-306137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:33:01.462 [DEBUG] [Thread-306137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:33:01.462 [DEBUG] [Thread-306137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:33:01.482 [INFO] [Thread-306137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:33:01.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:33:02.125 [DEBUG] [Thread-306137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:33:02.125 [DEBUG] [Thread-306137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:33:02.127 [DEBUG] [Thread-306137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:33:02.165 [DEBUG] [Thread-306137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:33:02.165 [DEBUG] [Thread-306137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:33:02.168 [DEBUG] [Thread-306137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:33:02.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:33:02.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:33:02.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:33:02.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:33:02.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:33:02.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:33:02.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:33:02.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:33:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:33:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.647636 -999.00  +23.50  17.06     30   +5.10 1 1 1 1 1   887    0 19.00 13.65 ----- 17.1 17.1 173.6 22.7 27.1 -27.4 27.2 -28.1 28.4 -26.7 28.8 -27.6
2025-12-24T17:33:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:33:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:33:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.647636
2025-12-24T17:33:02.205 [DEBUG] [Thread-306137] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:33:02.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:33:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:33:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:33:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:33:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:33:02.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:32:42', tmtdew=21.18, humidity=24.75, cloud=0.0, wind=22.3, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:32:35.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:33:02.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:33:02.309 [DEBUG] [Thread-306140] [transport.py] [_log()] starting thread (client mode): 0xf5752560
2025-12-24T17:33:02.309 [DEBUG] [Thread-306140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:33:02.323 [DEBUG] [Thread-306140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:33:02.323 [INFO] [Thread-306140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] client lang: <none>
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] server lang: <none>
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] kex follows: False
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] Compression: none
2025-12-24T17:33:02.331 [DEBUG] [Thread-306140] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:33:02.390 [DEBUG] [Thread-306140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:33:02.390 [DEBUG] [Thread-306140] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:33:02.391 [DEBUG] [Thread-306140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:33:02.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:33:02.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:33:02.446 [DEBUG] [Thread-306140] [transport.py] [_log()] userauth is OK
2025-12-24T17:33:02.446 [DEBUG] [Thread-306140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:33:02.446 [DEBUG] [Thread-306140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:33:02.446 [DEBUG] [Thread-306140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:33:02.446 [DEBUG] [Thread-306140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:33:02.470 [INFO] [Thread-306140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:33:02.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:33:02.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:33:03.303 [DEBUG] [Thread-306140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:33:03.303 [DEBUG] [Thread-306140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:33:03.350 [DEBUG] [Thread-306140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:33:03.350 [DEBUG] [Thread-306140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:33:03.359 [DEBUG] [Thread-306140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:33:03.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:33:03.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:33:03.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:33:03.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:33:03.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:33:03.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:33:03.395 [DEBUG] [Thread-306140] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:33:12.411 [DEBUG] [Thread-306142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:33:27.562 [DEBUG] [Thread-306143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:33:32.455 [DEBUG] [Thread-306144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:33:33.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:33:33.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:33:33.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:33:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 33, 15), 20.97, 25.05, 0.0, 23.33, 23.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:33:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:33:15
2025-12-24T17:33:34.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:33:35.109 [DEBUG] [Thread-306145] [transport.py] [_log()] starting thread (client mode): 0xf57525c0
2025-12-24T17:33:35.110 [DEBUG] [Thread-306145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:33:35.123 [DEBUG] [Thread-306145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:33:35.123 [INFO] [Thread-306145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] client lang: <none>
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] server lang: <none>
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] kex follows: False
2025-12-24T17:33:35.128 [DEBUG] [Thread-306145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:33:35.129 [DEBUG] [Thread-306145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:33:35.129 [DEBUG] [Thread-306145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:33:35.129 [DEBUG] [Thread-306145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:33:35.129 [DEBUG] [Thread-306145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:33:35.129 [DEBUG] [Thread-306145] [transport.py] [_log()] Compression: none
2025-12-24T17:33:35.129 [DEBUG] [Thread-306145] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:33:35.162 [DEBUG] [Thread-306145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:33:35.165 [DEBUG] [Thread-306145] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:33:35.167 [DEBUG] [Thread-306145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:33:35.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:33:35.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:33:35.170 [DEBUG] [Thread-306145] [transport.py] [_log()] userauth is OK
2025-12-24T17:33:35.170 [DEBUG] [Thread-306145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:33:35.171 [DEBUG] [Thread-306145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:33:35.171 [DEBUG] [Thread-306145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:33:35.171 [DEBUG] [Thread-306145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:33:35.190 [INFO] [Thread-306145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:33:35.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:33:35.817 [DEBUG] [Thread-306145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:33:35.817 [DEBUG] [Thread-306145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:33:35.818 [DEBUG] [Thread-306145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:33:35.859 [DEBUG] [Thread-306145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:33:35.859 [DEBUG] [Thread-306145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:33:35.862 [DEBUG] [Thread-306145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:33:35.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:33:35.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:33:35.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:33:35.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:33:35.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:33:35.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:33:35.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:33:35.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:33:35.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:33:35.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.647984 -999.00  +23.50  17.97     30   +5.10 1 1 1 1 1   887    0 18.72 11.22 ----- 18.0 18.0 182.4 26.2 27.3 -26.1 27.1 -25.6 28.6 -23.8 28.8 -26.2
2025-12-24T17:33:35.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:33:35.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:33:35.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.647984
2025-12-24T17:33:35.892 [DEBUG] [Thread-306145] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:33:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:33:35.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:33:35.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:33:35.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:33:35.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:33:35.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:33:15', tmtdew=20.97, humidity=25.05, cloud=0.0, wind=23.33, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:33:05.818', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:33:35.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:33:35.991 [DEBUG] [Thread-306148] [transport.py] [_log()] starting thread (client mode): 0xf571af20
2025-12-24T17:33:35.991 [DEBUG] [Thread-306148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:33:36.005 [DEBUG] [Thread-306148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:33:36.005 [INFO] [Thread-306148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] client lang: <none>
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] server lang: <none>
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] kex follows: False
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:33:36.013 [DEBUG] [Thread-306148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:33:36.014 [DEBUG] [Thread-306148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:33:36.014 [DEBUG] [Thread-306148] [transport.py] [_log()] Compression: none
2025-12-24T17:33:36.014 [DEBUG] [Thread-306148] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:33:36.068 [DEBUG] [Thread-306148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:33:36.068 [DEBUG] [Thread-306148] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:33:36.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:33:36.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:33:36.068 [DEBUG] [Thread-306148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:33:36.125 [DEBUG] [Thread-306148] [transport.py] [_log()] userauth is OK
2025-12-24T17:33:36.125 [DEBUG] [Thread-306148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:33:36.125 [DEBUG] [Thread-306148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:33:36.125 [DEBUG] [Thread-306148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:33:36.125 [DEBUG] [Thread-306148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:33:36.139 [INFO] [Thread-306148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:33:36.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:33:36.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:33:36.948 [DEBUG] [Thread-306148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:33:36.948 [DEBUG] [Thread-306148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:33:36.999 [DEBUG] [Thread-306148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:33:36.999 [DEBUG] [Thread-306148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:33:37.007 [DEBUG] [Thread-306148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:33:37.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:33:37.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:33:37.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:33:37.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:33:37.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:33:37.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:33:37.040 [DEBUG] [Thread-306148] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:33:42.689 [DEBUG] [Thread-306150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:33:43.234 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:33:43.235 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:33:57.904 [DEBUG] [Thread-306151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:34:07.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:34:07.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:34:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:34:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 33, 48), 20.96, 25.15, 0.0, 18.9, 23.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:34:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:33:48
2025-12-24T17:34:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:34:08.736 [DEBUG] [Thread-306152] [transport.py] [_log()] starting thread (client mode): 0xf5789e10
2025-12-24T17:34:08.737 [DEBUG] [Thread-306152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:34:08.750 [DEBUG] [Thread-306152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:34:08.751 [INFO] [Thread-306152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] client lang: <none>
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] server lang: <none>
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] kex follows: False
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:34:08.755 [DEBUG] [Thread-306152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:34:08.756 [DEBUG] [Thread-306152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:34:08.756 [DEBUG] [Thread-306152] [transport.py] [_log()] Compression: none
2025-12-24T17:34:08.756 [DEBUG] [Thread-306152] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:34:08.786 [DEBUG] [Thread-306152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:34:08.789 [DEBUG] [Thread-306152] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:34:08.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:34:08.791 [DEBUG] [Thread-306152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:34:08.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:34:08.793 [DEBUG] [Thread-306152] [transport.py] [_log()] userauth is OK
2025-12-24T17:34:08.793 [DEBUG] [Thread-306152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:34:08.793 [DEBUG] [Thread-306152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:34:08.793 [DEBUG] [Thread-306152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:34:08.793 [DEBUG] [Thread-306152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:34:08.804 [INFO] [Thread-306152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:34:08.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:34:09.476 [DEBUG] [Thread-306152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:34:09.477 [DEBUG] [Thread-306152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:34:09.478 [DEBUG] [Thread-306152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:34:09.518 [DEBUG] [Thread-306152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:34:09.518 [DEBUG] [Thread-306152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:34:09.521 [DEBUG] [Thread-306152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:34:09.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:34:09.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:34:09.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:34:09.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:34:09.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:34:09.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:34:09.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:34:09.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:34:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:34:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.648331 -999.00  +23.50  16.32     30   +5.20 1 1 1 1 1   887    0 18.43 9.42 ----- 16.3 16.3 203.9 32.8 27.3 -26.4 27.1 -28.1 28.7 -24.3 28.8 -25.2
2025-12-24T17:34:09.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:34:09.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:34:09.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.648331
2025-12-24T17:34:09.551 [DEBUG] [Thread-306152] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:34:09.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:34:09.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:34:09.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:34:09.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:34:09.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:34:09.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:33:48', tmtdew=20.96, humidity=25.15, cloud=0.0, wind=18.9, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:33:35.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:34:09.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:34:09.660 [DEBUG] [Thread-306155] [transport.py] [_log()] starting thread (client mode): 0xf5772ec0
2025-12-24T17:34:09.660 [DEBUG] [Thread-306155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:34:09.674 [DEBUG] [Thread-306155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:34:09.674 [INFO] [Thread-306155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:34:09.682 [DEBUG] [Thread-306155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:34:09.682 [DEBUG] [Thread-306155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:34:09.682 [DEBUG] [Thread-306155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:34:09.682 [DEBUG] [Thread-306155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:34:09.682 [DEBUG] [Thread-306155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:34:09.682 [DEBUG] [Thread-306155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:34:09.682 [DEBUG] [Thread-306155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:34:09.682 [DEBUG] [Thread-306155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:34:09.683 [DEBUG] [Thread-306155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:34:09.683 [DEBUG] [Thread-306155] [transport.py] [_log()] client lang: <none>
2025-12-24T17:34:09.683 [DEBUG] [Thread-306155] [transport.py] [_log()] server lang: <none>
2025-12-24T17:34:09.683 [DEBUG] [Thread-306155] [transport.py] [_log()] kex follows: False
2025-12-24T17:34:09.683 [DEBUG] [Thread-306155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:34:09.683 [DEBUG] [Thread-306155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:34:09.683 [DEBUG] [Thread-306155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:34:09.683 [DEBUG] [Thread-306155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:34:09.684 [DEBUG] [Thread-306155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:34:09.684 [DEBUG] [Thread-306155] [transport.py] [_log()] Compression: none
2025-12-24T17:34:09.684 [DEBUG] [Thread-306155] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:34:09.740 [DEBUG] [Thread-306155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:34:09.741 [DEBUG] [Thread-306155] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:34:09.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:34:09.742 [DEBUG] [Thread-306155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:34:09.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:34:09.797 [DEBUG] [Thread-306155] [transport.py] [_log()] userauth is OK
2025-12-24T17:34:09.797 [DEBUG] [Thread-306155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:34:09.798 [DEBUG] [Thread-306155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:34:09.798 [DEBUG] [Thread-306155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:34:09.798 [DEBUG] [Thread-306155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:34:09.816 [INFO] [Thread-306155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:34:09.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:34:09.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:34:10.641 [DEBUG] [Thread-306155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:34:10.641 [DEBUG] [Thread-306155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:34:10.689 [DEBUG] [Thread-306155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:34:10.689 [DEBUG] [Thread-306155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:34:10.698 [DEBUG] [Thread-306155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:34:10.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:34:10.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:34:10.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:34:10.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:34:10.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:34:10.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:34:10.730 [DEBUG] [Thread-306155] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:34:13.023 [DEBUG] [Thread-306157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:34:28.170 [DEBUG] [Thread-306158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:34:32.751 [DEBUG] [Thread-306159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:34:40.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:34:40.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:34:40.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
2025-12-24T17:34:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 34, 22), 20.96, 25.15, 0.0, 18.9, 23.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:34:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:34:22
2025-12-24T17:34:42.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:34:42.436 [DEBUG] [Thread-306160] [transport.py] [_log()] starting thread (client mode): 0xf571a500
2025-12-24T17:34:42.436 [DEBUG] [Thread-306160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:34:42.448 [DEBUG] [Thread-306160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:34:42.448 [INFO] [Thread-306160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:34:42.453 [DEBUG] [Thread-306160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:34:42.453 [DEBUG] [Thread-306160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:34:42.453 [DEBUG] [Thread-306160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:34:42.453 [DEBUG] [Thread-306160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:34:42.453 [DEBUG] [Thread-306160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:34:42.454 [DEBUG] [Thread-306160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:34:42.454 [DEBUG] [Thread-306160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:34:42.454 [DEBUG] [Thread-306160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:34:42.454 [DEBUG] [Thread-306160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:34:42.454 [DEBUG] [Thread-306160] [transport.py] [_log()] client lang: <none>
2025-12-24T17:34:42.454 [DEBUG] [Thread-306160] [transport.py] [_log()] server lang: <none>
2025-12-24T17:34:42.454 [DEBUG] [Thread-306160] [transport.py] [_log()] kex follows: False
2025-12-24T17:34:42.454 [DEBUG] [Thread-306160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:34:42.455 [DEBUG] [Thread-306160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:34:42.455 [DEBUG] [Thread-306160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:34:42.455 [DEBUG] [Thread-306160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:34:42.455 [DEBUG] [Thread-306160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:34:42.455 [DEBUG] [Thread-306160] [transport.py] [_log()] Compression: none
2025-12-24T17:34:42.455 [DEBUG] [Thread-306160] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:34:42.491 [DEBUG] [Thread-306160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:34:42.496 [DEBUG] [Thread-306160] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:34:42.498 [DEBUG] [Thread-306160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:34:42.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:34:42.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:34:42.503 [DEBUG] [Thread-306160] [transport.py] [_log()] userauth is OK
2025-12-24T17:34:42.503 [DEBUG] [Thread-306160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:34:42.504 [DEBUG] [Thread-306160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:34:42.504 [DEBUG] [Thread-306160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:34:42.504 [DEBUG] [Thread-306160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:34:42.530 [INFO] [Thread-306160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:34:42.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:34:43.182 [DEBUG] [Thread-306160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:34:43.182 [DEBUG] [Thread-306160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:34:43.183 [DEBUG] [Thread-306160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:34:43.224 [DEBUG] [Thread-306160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:34:43.224 [DEBUG] [Thread-306160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:34:43.236 [DEBUG] [Thread-306160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:34:43.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:34:43.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:34:43.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:34:43.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:34:43.247 [DEBUG] [Thread-306163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:34:43.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:34:43.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:34:43.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:34:43.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:34:43.253 [DEBUG] [Thread-306160] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:34:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:34:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.648678 -999.00  +23.50  13.56     30   +5.10 1 1 1 1 1   887    0 18.91 9.71 ----- 13.6 13.6 189.6 18.7 27.3 -25.9 27.2 -27.6 28.8 -23.5 28.9 -25.6
2025-12-24T17:34:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:34:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:34:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.648678
2025-12-24T17:34:43.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:34:43.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:34:43.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:34:43.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:34:43.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:34:43.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:34:22', tmtdew=20.96, humidity=25.15, cloud=0.0, wind=18.9, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:34:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:34:43.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:34:43.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:34:43.378 [DEBUG] [Thread-306164] [transport.py] [_log()] starting thread (client mode): 0xf578baf0
2025-12-24T17:34:43.378 [DEBUG] [Thread-306164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:34:43.379 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:34:43.388 [DEBUG] [Thread-306164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:34:43.388 [INFO] [Thread-306164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:34:43.395 [DEBUG] [Thread-306164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:34:43.395 [DEBUG] [Thread-306164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:34:43.395 [DEBUG] [Thread-306164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:34:43.395 [DEBUG] [Thread-306164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:34:43.395 [DEBUG] [Thread-306164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:34:43.395 [DEBUG] [Thread-306164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:34:43.396 [DEBUG] [Thread-306164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:34:43.396 [DEBUG] [Thread-306164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:34:43.396 [DEBUG] [Thread-306164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:34:43.396 [DEBUG] [Thread-306164] [transport.py] [_log()] client lang: <none>
2025-12-24T17:34:43.396 [DEBUG] [Thread-306164] [transport.py] [_log()] server lang: <none>
2025-12-24T17:34:43.396 [DEBUG] [Thread-306164] [transport.py] [_log()] kex follows: False
2025-12-24T17:34:43.397 [DEBUG] [Thread-306164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:34:43.397 [DEBUG] [Thread-306164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:34:43.397 [DEBUG] [Thread-306164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:34:43.397 [DEBUG] [Thread-306164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:34:43.397 [DEBUG] [Thread-306164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:34:43.397 [DEBUG] [Thread-306164] [transport.py] [_log()] Compression: none
2025-12-24T17:34:43.397 [DEBUG] [Thread-306164] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:34:43.452 [DEBUG] [Thread-306164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:34:43.452 [DEBUG] [Thread-306164] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:34:43.452 [DEBUG] [Thread-306164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:34:43.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:34:43.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:34:43.509 [DEBUG] [Thread-306164] [transport.py] [_log()] userauth is OK
2025-12-24T17:34:43.509 [DEBUG] [Thread-306164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:34:43.509 [DEBUG] [Thread-306164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:34:43.509 [DEBUG] [Thread-306164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:34:43.510 [DEBUG] [Thread-306164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:34:43.528 [INFO] [Thread-306164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:34:43.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:34:43.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:34:44.364 [DEBUG] [Thread-306164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:34:44.364 [DEBUG] [Thread-306164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:34:44.409 [DEBUG] [Thread-306164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:34:44.409 [DEBUG] [Thread-306164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:34:44.418 [DEBUG] [Thread-306164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:34:44.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:34:44.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:34:44.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:34:44.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:34:44.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:34:44.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:34:44.455 [DEBUG] [Thread-306164] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:34:58.314 [DEBUG] [Thread-306166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:35:13.519 [DEBUG] [Thread-306167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:35:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:35:14.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:35:14.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:35:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 34, 56), 20.99, 25.1, 0.0, 24.72, 23.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:35:15.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:34:56
2025-12-24T17:35:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:35:16.168 [DEBUG] [Thread-306168] [transport.py] [_log()] starting thread (client mode): 0xf5750c10
2025-12-24T17:35:16.169 [DEBUG] [Thread-306168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:35:16.175 [DEBUG] [Thread-306168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:35:16.175 [INFO] [Thread-306168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:35:16.178 [DEBUG] [Thread-306168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:35:16.178 [DEBUG] [Thread-306168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:35:16.178 [DEBUG] [Thread-306168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:35:16.178 [DEBUG] [Thread-306168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:35:16.178 [DEBUG] [Thread-306168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:35:16.178 [DEBUG] [Thread-306168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:35:16.178 [DEBUG] [Thread-306168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:35:16.179 [DEBUG] [Thread-306168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:35:16.179 [DEBUG] [Thread-306168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:35:16.179 [DEBUG] [Thread-306168] [transport.py] [_log()] client lang: <none>
2025-12-24T17:35:16.179 [DEBUG] [Thread-306168] [transport.py] [_log()] server lang: <none>
2025-12-24T17:35:16.179 [DEBUG] [Thread-306168] [transport.py] [_log()] kex follows: False
2025-12-24T17:35:16.179 [DEBUG] [Thread-306168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:35:16.179 [DEBUG] [Thread-306168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:35:16.179 [DEBUG] [Thread-306168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:35:16.180 [DEBUG] [Thread-306168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:35:16.180 [DEBUG] [Thread-306168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:35:16.180 [DEBUG] [Thread-306168] [transport.py] [_log()] Compression: none
2025-12-24T17:35:16.180 [DEBUG] [Thread-306168] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:35:16.215 [DEBUG] [Thread-306168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:35:16.219 [DEBUG] [Thread-306168] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:35:16.221 [DEBUG] [Thread-306168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:35:16.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:35:16.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:35:16.226 [DEBUG] [Thread-306168] [transport.py] [_log()] userauth is OK
2025-12-24T17:35:16.226 [DEBUG] [Thread-306168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:35:16.226 [DEBUG] [Thread-306168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:35:16.226 [DEBUG] [Thread-306168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:35:16.227 [DEBUG] [Thread-306168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:35:16.253 [INFO] [Thread-306168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:35:16.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:35:16.873 [DEBUG] [Thread-306168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:35:16.874 [DEBUG] [Thread-306168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:35:16.876 [DEBUG] [Thread-306168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:35:16.916 [DEBUG] [Thread-306168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:35:16.917 [DEBUG] [Thread-306168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:35:16.920 [DEBUG] [Thread-306168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:35:16.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:35:16.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:35:16.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:35:16.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:35:16.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:35:16.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:35:16.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:35:16.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:35:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:35:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.649025 -999.00  +23.60  15.03     30   +5.20 1 1 1 1 1   887    0 18.59 9.21 ----- 15.0 15.0 160.0 21.2 27.3 -25.3 27.2 -27.3 28.8 -23.2 29.0 -25.6
2025-12-24T17:35:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:35:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:35:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.649025
2025-12-24T17:35:16.953 [DEBUG] [Thread-306168] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:35:16.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:35:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:35:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:35:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:35:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:35:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:34:56', tmtdew=20.99, humidity=25.1, cloud=0.0, wind=24.72, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:34:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:35:17.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:35:17.058 [DEBUG] [Thread-306171] [transport.py] [_log()] starting thread (client mode): 0xf5729b10
2025-12-24T17:35:17.058 [DEBUG] [Thread-306171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:35:17.072 [DEBUG] [Thread-306171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:35:17.072 [INFO] [Thread-306171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] client lang: <none>
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] server lang: <none>
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] kex follows: False
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] Compression: none
2025-12-24T17:35:17.079 [DEBUG] [Thread-306171] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:35:17.136 [DEBUG] [Thread-306171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:35:17.136 [DEBUG] [Thread-306171] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:35:17.136 [DEBUG] [Thread-306171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:35:17.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:35:17.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:35:17.194 [DEBUG] [Thread-306171] [transport.py] [_log()] userauth is OK
2025-12-24T17:35:17.194 [DEBUG] [Thread-306171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:35:17.194 [DEBUG] [Thread-306171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:35:17.194 [DEBUG] [Thread-306171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:35:17.194 [DEBUG] [Thread-306171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:35:17.210 [INFO] [Thread-306171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:35:17.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:35:17.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:35:18.024 [DEBUG] [Thread-306171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:35:18.025 [DEBUG] [Thread-306171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:35:18.072 [DEBUG] [Thread-306171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:35:18.072 [DEBUG] [Thread-306171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:35:18.081 [DEBUG] [Thread-306171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:35:18.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:35:18.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:35:18.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:35:18.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:35:18.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:35:18.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:35:18.117 [DEBUG] [Thread-306171] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:35:28.629 [DEBUG] [Thread-306173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:35:33.058 [DEBUG] [Thread-306174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:35:43.584 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:35:43.600 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:35:43.784 [DEBUG] [Thread-306175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:35:48.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:35:48.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:35:48.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
2025-12-24T17:35:49.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 35, 30), 21.04, 25.02, 0.0, 25.96, 23.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:35:49.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:35:30
2025-12-24T17:35:49.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:35:49.414 [DEBUG] [Thread-306176] [transport.py] [_log()] starting thread (client mode): 0xf5718a90
2025-12-24T17:35:49.415 [DEBUG] [Thread-306176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:35:49.427 [DEBUG] [Thread-306176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:35:49.427 [INFO] [Thread-306176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] client lang: <none>
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] server lang: <none>
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] kex follows: False
2025-12-24T17:35:49.432 [DEBUG] [Thread-306176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:35:49.433 [DEBUG] [Thread-306176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:35:49.433 [DEBUG] [Thread-306176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:35:49.433 [DEBUG] [Thread-306176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:35:49.433 [DEBUG] [Thread-306176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:35:49.433 [DEBUG] [Thread-306176] [transport.py] [_log()] Compression: none
2025-12-24T17:35:49.433 [DEBUG] [Thread-306176] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:35:49.466 [DEBUG] [Thread-306176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:35:49.469 [DEBUG] [Thread-306176] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:35:49.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:35:49.471 [DEBUG] [Thread-306176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:35:49.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:35:49.474 [DEBUG] [Thread-306176] [transport.py] [_log()] userauth is OK
2025-12-24T17:35:49.474 [DEBUG] [Thread-306176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:35:49.475 [DEBUG] [Thread-306176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:35:49.475 [DEBUG] [Thread-306176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:35:49.475 [DEBUG] [Thread-306176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:35:49.496 [INFO] [Thread-306176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:35:49.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:35:50.163 [DEBUG] [Thread-306176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:35:50.163 [DEBUG] [Thread-306176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:35:50.164 [DEBUG] [Thread-306176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:35:50.204 [DEBUG] [Thread-306176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:35:50.204 [DEBUG] [Thread-306176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:35:50.207 [DEBUG] [Thread-306176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:35:50.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:35:50.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:35:50.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:35:50.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:35:50.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:35:50.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:35:50.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:35:50.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:35:50.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:35:50.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.649719 -999.00  +23.50  20.74     30   +5.10 1 1 1 1 1   887    0 18.42 8.36 ----- 20.7 20.7 141.4 24.6 27.3 -26.3 27.5 -26.5 28.9 -24.3 29.1 -26.3
2025-12-24T17:35:50.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:35:50.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:35:50.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.649719
2025-12-24T17:35:50.233 [DEBUG] [Thread-306176] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:35:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:35:50.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:35:50.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:35:50.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:35:50.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:35:50.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:35:30', tmtdew=21.04, humidity=25.02, cloud=0.0, wind=25.96, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:35:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:35:50.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:35:50.338 [DEBUG] [Thread-306179] [transport.py] [_log()] starting thread (client mode): 0xf5752530
2025-12-24T17:35:50.338 [DEBUG] [Thread-306179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:35:50.352 [DEBUG] [Thread-306179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:35:50.352 [INFO] [Thread-306179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] client lang: <none>
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] server lang: <none>
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] kex follows: False
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] Compression: none
2025-12-24T17:35:50.360 [DEBUG] [Thread-306179] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:35:50.416 [DEBUG] [Thread-306179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:35:50.416 [DEBUG] [Thread-306179] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:35:50.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:35:50.416 [DEBUG] [Thread-306179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:35:50.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:35:50.474 [DEBUG] [Thread-306179] [transport.py] [_log()] userauth is OK
2025-12-24T17:35:50.474 [DEBUG] [Thread-306179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:35:50.474 [DEBUG] [Thread-306179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:35:50.474 [DEBUG] [Thread-306179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:35:50.474 [DEBUG] [Thread-306179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:35:50.488 [INFO] [Thread-306179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:35:50.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:35:50.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:35:51.327 [DEBUG] [Thread-306179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:35:51.328 [DEBUG] [Thread-306179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:35:51.366 [DEBUG] [Thread-306179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:35:51.366 [DEBUG] [Thread-306179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:35:51.375 [DEBUG] [Thread-306179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:35:51.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:35: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')
2025-12-24T17:35:51.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:35:51.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:35:51.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:35:51.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:35:51.409 [DEBUG] [Thread-306179] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:35:58.879 [DEBUG] [Thread-306181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:36:14.069 [DEBUG] [Thread-306182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:36:21.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:36:21.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:36:21.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:36:22.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 36, 4), 20.97, 25.1, 0.0, 25.97, 23.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:36:22.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:36:04
2025-12-24T17:36:23.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:36:23.347 [DEBUG] [Thread-306183] [transport.py] [_log()] starting thread (client mode): 0xf81e45e0
2025-12-24T17:36:23.347 [DEBUG] [Thread-306183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:36:23.357 [DEBUG] [Thread-306183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:36:23.358 [INFO] [Thread-306183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:36:23.363 [DEBUG] [Thread-306183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] client lang: <none>
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] server lang: <none>
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] kex follows: False
2025-12-24T17:36:23.364 [DEBUG] [Thread-306183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:36:23.365 [DEBUG] [Thread-306183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:36:23.365 [DEBUG] [Thread-306183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:36:23.365 [DEBUG] [Thread-306183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:36:23.365 [DEBUG] [Thread-306183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:36:23.365 [DEBUG] [Thread-306183] [transport.py] [_log()] Compression: none
2025-12-24T17:36:23.365 [DEBUG] [Thread-306183] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:36:23.402 [DEBUG] [Thread-306183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:36:23.406 [DEBUG] [Thread-306183] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:36:23.408 [DEBUG] [Thread-306183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:36:23.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:36:23.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:36:23.412 [DEBUG] [Thread-306183] [transport.py] [_log()] userauth is OK
2025-12-24T17:36:23.413 [DEBUG] [Thread-306183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:36:23.413 [DEBUG] [Thread-306183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:36:23.413 [DEBUG] [Thread-306183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:36:23.413 [DEBUG] [Thread-306183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:36:23.432 [INFO] [Thread-306183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:36:23.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:36:24.068 [DEBUG] [Thread-306183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:36:24.069 [DEBUG] [Thread-306183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:36:24.070 [DEBUG] [Thread-306183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:36:24.111 [DEBUG] [Thread-306183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:36:24.111 [DEBUG] [Thread-306183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:36:24.115 [DEBUG] [Thread-306183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:36:24.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:36:24.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:36:24.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:36:24.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:36:24.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:36:24.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:36:24.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:36:24.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:36:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:36:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.650067 -999.00  +23.20  23.68     30   +5.00 1 1 1 1 1   887    0 18.22 8.70 ----- 23.7 23.7 142.4 29.2 27.3 -26.4 27.4 -26.7 28.8 -25.2 29.1 -26.8
2025-12-24T17:36:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:36:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:36:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.650067
2025-12-24T17:36:24.156 [DEBUG] [Thread-306183] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:36:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:36:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:36:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:36:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:36:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:36:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:36:04', tmtdew=20.97, humidity=25.1, cloud=0.0, wind=25.97, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:36:05.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:36:24.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:36:24.275 [DEBUG] [Thread-306186] [transport.py] [_log()] starting thread (client mode): 0xf81e4880
2025-12-24T17:36:24.276 [DEBUG] [Thread-306186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:36:24.290 [DEBUG] [Thread-306186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:36:24.290 [INFO] [Thread-306186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:36:24.298 [DEBUG] [Thread-306186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:36:24.298 [DEBUG] [Thread-306186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:36:24.298 [DEBUG] [Thread-306186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:36:24.298 [DEBUG] [Thread-306186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:36:24.298 [DEBUG] [Thread-306186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:36:24.298 [DEBUG] [Thread-306186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:36:24.298 [DEBUG] [Thread-306186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:36:24.298 [DEBUG] [Thread-306186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] client lang: <none>
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] server lang: <none>
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] kex follows: False
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] Compression: none
2025-12-24T17:36:24.299 [DEBUG] [Thread-306186] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:36:24.357 [DEBUG] [Thread-306186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:36:24.357 [DEBUG] [Thread-306186] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:36:24.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:36:24.358 [DEBUG] [Thread-306186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:36:24.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:36:24.413 [DEBUG] [Thread-306186] [transport.py] [_log()] userauth is OK
2025-12-24T17:36:24.414 [DEBUG] [Thread-306186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:36:24.414 [DEBUG] [Thread-306186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:36:24.414 [DEBUG] [Thread-306186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:36:24.414 [DEBUG] [Thread-306186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:36:24.431 [INFO] [Thread-306186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:36:24.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:36:24.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:36:25.284 [DEBUG] [Thread-306186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:36:25.284 [DEBUG] [Thread-306186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:36:25.335 [DEBUG] [Thread-306186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:36:25.335 [DEBUG] [Thread-306186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:36:25.344 [DEBUG] [Thread-306186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:36:25.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:36:25.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:36:25.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
2025-12-24T17:36:25.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:36:25.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:36:25.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:36:25.378 [DEBUG] [Thread-306186] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:36:29.178 [DEBUG] [Thread-306188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:36:33.493 [DEBUG] [Thread-306189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:36:43.808 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:36:43.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:36:44.347 [DEBUG] [Thread-306190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:36:55.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:36:55.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:36:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:36:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 36, 37), 21.04, 25.3, 0.0, 27.79, 23.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:36:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:36:37
2025-12-24T17:36:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:36:57.118 [DEBUG] [Thread-306191] [transport.py] [_log()] starting thread (client mode): 0xf571af50
2025-12-24T17:36:57.119 [DEBUG] [Thread-306191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:36:57.128 [DEBUG] [Thread-306191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:36:57.128 [INFO] [Thread-306191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] client lang: <none>
2025-12-24T17:36:57.133 [DEBUG] [Thread-306191] [transport.py] [_log()] server lang: <none>
2025-12-24T17:36:57.134 [DEBUG] [Thread-306191] [transport.py] [_log()] kex follows: False
2025-12-24T17:36:57.134 [DEBUG] [Thread-306191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:36:57.134 [DEBUG] [Thread-306191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:36:57.134 [DEBUG] [Thread-306191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:36:57.134 [DEBUG] [Thread-306191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:36:57.134 [DEBUG] [Thread-306191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:36:57.135 [DEBUG] [Thread-306191] [transport.py] [_log()] Compression: none
2025-12-24T17:36:57.135 [DEBUG] [Thread-306191] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:36:57.172 [DEBUG] [Thread-306191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:36:57.178 [DEBUG] [Thread-306191] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:36:57.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:36:57.182 [DEBUG] [Thread-306191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:36:57.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:36:57.186 [DEBUG] [Thread-306191] [transport.py] [_log()] userauth is OK
2025-12-24T17:36:57.186 [DEBUG] [Thread-306191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:36:57.187 [DEBUG] [Thread-306191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:36:57.187 [DEBUG] [Thread-306191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:36:57.187 [DEBUG] [Thread-306191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:36:57.214 [INFO] [Thread-306191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:36:57.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:36:57.830 [DEBUG] [Thread-306191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:36:57.831 [DEBUG] [Thread-306191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:36:57.831 [DEBUG] [Thread-306191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:36:57.872 [DEBUG] [Thread-306191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:36:57.872 [DEBUG] [Thread-306191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:36:57.875 [DEBUG] [Thread-306191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:36:57.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:36:57.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:36:57.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:36:57.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:36:57.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:36:57.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:36:57.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:36:57.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:36:57.900 [DEBUG] [Thread-306191] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:36:57.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:36:57.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.650414 -999.00  +23.10  25.06     31   +5.00 1 1 1 1 1   887    0 18.63 7.36 ----- 25.1 25.1 137.5 34.6 27.2 -26.7 27.4 -25.7 28.7 -25.6 28.9 -27.4
2025-12-24T17:36:57.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:36:57.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:36:57.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.650414
2025-12-24T17:36:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:36:57.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:36:57.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:36:57.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:36:57.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:36:57.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:36:37', tmtdew=21.04, humidity=25.3, cloud=0.0, wind=27.79, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:36:35.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:36:57.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:36:58.008 [DEBUG] [Thread-306194] [transport.py] [_log()] starting thread (client mode): 0xf8188b50
2025-12-24T17:36:58.008 [DEBUG] [Thread-306194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:36:58.022 [DEBUG] [Thread-306194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:36:58.022 [INFO] [Thread-306194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] client lang: <none>
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] server lang: <none>
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] kex follows: False
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:36:58.030 [DEBUG] [Thread-306194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:36:58.031 [DEBUG] [Thread-306194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:36:58.031 [DEBUG] [Thread-306194] [transport.py] [_log()] Compression: none
2025-12-24T17:36:58.031 [DEBUG] [Thread-306194] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:36:58.087 [DEBUG] [Thread-306194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:36:58.087 [DEBUG] [Thread-306194] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:36:58.087 [DEBUG] [Thread-306194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:36:58.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:36:58.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:36:58.146 [DEBUG] [Thread-306194] [transport.py] [_log()] userauth is OK
2025-12-24T17:36:58.146 [DEBUG] [Thread-306194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:36:58.146 [DEBUG] [Thread-306194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:36:58.146 [DEBUG] [Thread-306194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:36:58.146 [DEBUG] [Thread-306194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:36:58.168 [INFO] [Thread-306194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:36:58.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:36:58.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:36:58.985 [DEBUG] [Thread-306194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:36:58.986 [DEBUG] [Thread-306194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:36:59.033 [DEBUG] [Thread-306194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:36:59.033 [DEBUG] [Thread-306194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:36:59.043 [DEBUG] [Thread-306194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:36:59.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:36:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:36:59.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:36:59.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:36:59.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:36:59.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:36:59.082 [DEBUG] [Thread-306194] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:36:59.434 [DEBUG] [Thread-306196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:37:14.602 [DEBUG] [Thread-306197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:37:29.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:37:29.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:37:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:37:29.688 [DEBUG] [Thread-306198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:37:30.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 37, 10), 20.96, 25.43, 0.0, 26.17, 23.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:37:30.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:37:10
2025-12-24T17:37:30.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:37:30.788 [DEBUG] [Thread-306199] [transport.py] [_log()] starting thread (client mode): 0xf81890c0
2025-12-24T17:37:30.789 [DEBUG] [Thread-306199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:37:30.801 [DEBUG] [Thread-306199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:37:30.802 [INFO] [Thread-306199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] client lang: <none>
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] server lang: <none>
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] kex follows: False
2025-12-24T17:37:30.806 [DEBUG] [Thread-306199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:37:30.807 [DEBUG] [Thread-306199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:37:30.807 [DEBUG] [Thread-306199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:37:30.807 [DEBUG] [Thread-306199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:37:30.807 [DEBUG] [Thread-306199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:37:30.807 [DEBUG] [Thread-306199] [transport.py] [_log()] Compression: none
2025-12-24T17:37:30.807 [DEBUG] [Thread-306199] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:37:30.839 [DEBUG] [Thread-306199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:37:30.842 [DEBUG] [Thread-306199] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:37:30.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:37:30.845 [DEBUG] [Thread-306199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:37:30.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:37:30.847 [DEBUG] [Thread-306199] [transport.py] [_log()] userauth is OK
2025-12-24T17:37:30.847 [DEBUG] [Thread-306199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:37:30.847 [DEBUG] [Thread-306199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:37:30.847 [DEBUG] [Thread-306199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:37:30.847 [DEBUG] [Thread-306199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:37:30.878 [INFO] [Thread-306199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:37:30.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:37:31.515 [DEBUG] [Thread-306199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:37:31.524 [DEBUG] [Thread-306199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:37:31.524 [DEBUG] [Thread-306199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:37:31.556 [DEBUG] [Thread-306199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:37:31.556 [DEBUG] [Thread-306199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:37:31.558 [DEBUG] [Thread-306199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:37:31.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:37:31.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:37:31.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:37:31.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:37:31.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:37:31.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:37:31.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:37:31.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:37:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:37:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.650761 -999.00  +22.90  21.70     31   +5.00 1 1 1 1 1   887    0 18.32 4.22 ----- 21.7 21.7 131.1 30.5 26.9 -26.6 27.3 -26.9 28.4 -26.1 28.7 -28.0
2025-12-24T17:37:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:37:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:37:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.650761
2025-12-24T17:37:31.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:37:31.589 [DEBUG] [Thread-306199] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:37:31.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:37:31.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:37:31.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:37:31.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:37:31.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:37:10', tmtdew=20.96, humidity=25.43, cloud=0.0, wind=26.17, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:37:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:37:31.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:37:31.682 [DEBUG] [Thread-306202] [transport.py] [_log()] starting thread (client mode): 0xf818a290
2025-12-24T17:37:31.682 [DEBUG] [Thread-306202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:37:31.697 [DEBUG] [Thread-306202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:37:31.697 [INFO] [Thread-306202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] client lang: <none>
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] server lang: <none>
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] kex follows: False
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] Compression: none
2025-12-24T17:37:31.705 [DEBUG] [Thread-306202] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:37:31.761 [DEBUG] [Thread-306202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:37:31.761 [DEBUG] [Thread-306202] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:37:31.761 [DEBUG] [Thread-306202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:37:31.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:37:31.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:37:31.818 [DEBUG] [Thread-306202] [transport.py] [_log()] userauth is OK
2025-12-24T17:37:31.818 [DEBUG] [Thread-306202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:37:31.818 [DEBUG] [Thread-306202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:37:31.818 [DEBUG] [Thread-306202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:37:31.818 [DEBUG] [Thread-306202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:37:31.833 [INFO] [Thread-306202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:37:31.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:37:31.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:37:32.635 [DEBUG] [Thread-306202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:37:32.636 [DEBUG] [Thread-306202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:37:32.684 [DEBUG] [Thread-306202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:37:32.684 [DEBUG] [Thread-306202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:37:32.693 [DEBUG] [Thread-306202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:37:32.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:37:32.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:37:32.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:37:32.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:37:32.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:37:32.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:37:32.731 [DEBUG] [Thread-306202] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:37:33.817 [DEBUG] [Thread-306204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:37:43.970 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:37:43.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:37:44.763 [DEBUG] [Thread-306205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:37:59.980 [DEBUG] [Thread-306206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:38:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:38:02.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:38:02.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:38:04.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 37, 42), 20.86, 25.35, 0.0, 22.55, 23.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:38:04.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:37:42
2025-12-24T17:38:04.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:38:04.863 [DEBUG] [Thread-306207] [transport.py] [_log()] starting thread (client mode): 0xf572bfa0
2025-12-24T17:38:04.864 [DEBUG] [Thread-306207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:38:04.864 [DEBUG] [Thread-306207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:38:04.864 [INFO] [Thread-306207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:38:04.869 [DEBUG] [Thread-306207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:38:04.869 [DEBUG] [Thread-306207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:38:04.869 [DEBUG] [Thread-306207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:38:04.869 [DEBUG] [Thread-306207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:38:04.869 [DEBUG] [Thread-306207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:38:04.869 [DEBUG] [Thread-306207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:38:04.869 [DEBUG] [Thread-306207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:38:04.869 [DEBUG] [Thread-306207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:38:04.870 [DEBUG] [Thread-306207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:38:04.870 [DEBUG] [Thread-306207] [transport.py] [_log()] client lang: <none>
2025-12-24T17:38:04.870 [DEBUG] [Thread-306207] [transport.py] [_log()] server lang: <none>
2025-12-24T17:38:04.870 [DEBUG] [Thread-306207] [transport.py] [_log()] kex follows: False
2025-12-24T17:38:04.870 [DEBUG] [Thread-306207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:38:04.871 [DEBUG] [Thread-306207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:38:04.871 [DEBUG] [Thread-306207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:38:04.871 [DEBUG] [Thread-306207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:38:04.871 [DEBUG] [Thread-306207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:38:04.871 [DEBUG] [Thread-306207] [transport.py] [_log()] Compression: none
2025-12-24T17:38:04.871 [DEBUG] [Thread-306207] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:38:04.900 [DEBUG] [Thread-306207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:38:04.903 [DEBUG] [Thread-306207] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:38:04.904 [DEBUG] [Thread-306207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:38:04.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:38:04.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:38:04.908 [DEBUG] [Thread-306207] [transport.py] [_log()] userauth is OK
2025-12-24T17:38:04.908 [DEBUG] [Thread-306207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:38:04.908 [DEBUG] [Thread-306207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:38:04.908 [DEBUG] [Thread-306207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:38:04.908 [DEBUG] [Thread-306207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:38:04.926 [INFO] [Thread-306207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:38:04.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:38:05.593 [DEBUG] [Thread-306207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:38:05.593 [DEBUG] [Thread-306207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:38:05.594 [DEBUG] [Thread-306207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:38:05.634 [DEBUG] [Thread-306207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:38:05.634 [DEBUG] [Thread-306207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:38:05.637 [DEBUG] [Thread-306207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:38:05.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:38:05.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:38:05.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:38:05.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:38:05.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:38:05.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:38:05.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:38:05.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:38:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:38:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.651108 -999.00  +22.80  20.85     31   +5.00 1 1 1 1 1   887    0 18.21 0.92 ----- 20.9 20.9 130.6 23.5 26.9 -26.3 27.2 -26.4 28.3 -25.1 28.7 -26.4
2025-12-24T17:38:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:38:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:38:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.651108
2025-12-24T17:38:05.668 [DEBUG] [Thread-306207] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:38:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:38:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:38:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:38:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:38:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:38:05.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:37:42', tmtdew=20.86, humidity=25.35, cloud=0.0, wind=22.55, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:37:35.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:38:05.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:38:05.776 [DEBUG] [Thread-306210] [transport.py] [_log()] starting thread (client mode): 0xf572aa10
2025-12-24T17:38:05.776 [DEBUG] [Thread-306210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:38:05.790 [DEBUG] [Thread-306210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:38:05.791 [INFO] [Thread-306210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:38:05.798 [DEBUG] [Thread-306210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:38:05.798 [DEBUG] [Thread-306210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] client lang: <none>
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] server lang: <none>
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] kex follows: False
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:38:05.799 [DEBUG] [Thread-306210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:38:05.800 [DEBUG] [Thread-306210] [transport.py] [_log()] Compression: none
2025-12-24T17:38:05.800 [DEBUG] [Thread-306210] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:38:05.863 [DEBUG] [Thread-306210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:38:05.863 [DEBUG] [Thread-306210] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:38:05.864 [DEBUG] [Thread-306210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:38:05.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:38:05.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:38:05.919 [DEBUG] [Thread-306210] [transport.py] [_log()] userauth is OK
2025-12-24T17:38:05.919 [DEBUG] [Thread-306210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:38:05.919 [DEBUG] [Thread-306210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:38:05.919 [DEBUG] [Thread-306210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:38:05.919 [DEBUG] [Thread-306210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:38:05.937 [INFO] [Thread-306210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:38:05.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:38:05.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:38:06.809 [DEBUG] [Thread-306210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:38:06.809 [DEBUG] [Thread-306210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:38:06.855 [DEBUG] [Thread-306210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:38:06.855 [DEBUG] [Thread-306210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:38:06.864 [DEBUG] [Thread-306210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:38:06.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:38:06.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:38:06.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:38:06.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:38:06.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:38:06.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:38:06.902 [DEBUG] [Thread-306210] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:38:15.083 [DEBUG] [Thread-306212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:38:30.279 [DEBUG] [Thread-306213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:38:34.087 [DEBUG] [Thread-306214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:38:36.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:38:36.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:38:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:38:38.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 38, 16), 20.85, 25.36, 0.0, 20.1, 23.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:38:38.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:38:16
2025-12-24T17:38:38.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:38:38.459 [DEBUG] [Thread-306215] [transport.py] [_log()] starting thread (client mode): 0xf572aef0
2025-12-24T17:38:38.460 [DEBUG] [Thread-306215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:38:38.472 [DEBUG] [Thread-306215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:38:38.472 [INFO] [Thread-306215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:38:38.476 [DEBUG] [Thread-306215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] client lang: <none>
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] server lang: <none>
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] kex follows: False
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:38:38.477 [DEBUG] [Thread-306215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:38:38.478 [DEBUG] [Thread-306215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:38:38.478 [DEBUG] [Thread-306215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:38:38.478 [DEBUG] [Thread-306215] [transport.py] [_log()] Compression: none
2025-12-24T17:38:38.478 [DEBUG] [Thread-306215] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:38:38.509 [DEBUG] [Thread-306215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:38:38.512 [DEBUG] [Thread-306215] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:38:38.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:38:38.514 [DEBUG] [Thread-306215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:38:38.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:38:38.517 [DEBUG] [Thread-306215] [transport.py] [_log()] userauth is OK
2025-12-24T17:38:38.517 [DEBUG] [Thread-306215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:38:38.517 [DEBUG] [Thread-306215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:38:38.518 [DEBUG] [Thread-306215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:38:38.518 [DEBUG] [Thread-306215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:38:38.535 [INFO] [Thread-306215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:38:38.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:38:39.167 [DEBUG] [Thread-306215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:38:39.167 [DEBUG] [Thread-306215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:38:39.167 [DEBUG] [Thread-306215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:38:39.208 [DEBUG] [Thread-306215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:38:39.208 [DEBUG] [Thread-306215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:38:39.210 [DEBUG] [Thread-306215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:38:39.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:38:39.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:38:39.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:38:39.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:38:39.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:38:39.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:38:39.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:38:39.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:38:39.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:38:39.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.651456 -999.00  +22.80  15.26     31   +5.00 1 1 1 1 1   887    0 18.17 -3.35 ----- 15.3 15.3 162.0 21.5 27.0 -26.2 27.3 -25.5 28.5 -23.6 28.7 -25.0
2025-12-24T17:38:39.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:38:39.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:38:39.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.651456
2025-12-24T17:38:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:38:39.247 [DEBUG] [Thread-306215] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:38:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:38:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:38:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:38:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:38:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:38:16', tmtdew=20.85, humidity=25.36, cloud=0.0, wind=20.1, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:38:05.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:38:39.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:38:39.335 [DEBUG] [Thread-306218] [transport.py] [_log()] starting thread (client mode): 0xf818bf40
2025-12-24T17:38:39.335 [DEBUG] [Thread-306218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:38:39.349 [DEBUG] [Thread-306218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:38:39.349 [INFO] [Thread-306218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] client lang: <none>
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] server lang: <none>
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] kex follows: False
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] Compression: none
2025-12-24T17:38:39.357 [DEBUG] [Thread-306218] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:38:39.413 [DEBUG] [Thread-306218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:38:39.413 [DEBUG] [Thread-306218] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:38:39.413 [DEBUG] [Thread-306218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:38:39.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:38:39.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:38:39.470 [DEBUG] [Thread-306218] [transport.py] [_log()] userauth is OK
2025-12-24T17:38:39.470 [DEBUG] [Thread-306218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:38:39.470 [DEBUG] [Thread-306218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:38:39.470 [DEBUG] [Thread-306218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:38:39.470 [DEBUG] [Thread-306218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:38:39.484 [INFO] [Thread-306218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:38:39.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:38:39.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:38:40.307 [DEBUG] [Thread-306218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:38:40.308 [DEBUG] [Thread-306218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:38:40.355 [DEBUG] [Thread-306218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:38:40.356 [DEBUG] [Thread-306218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:38:40.364 [DEBUG] [Thread-306218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:38:40.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:38:40.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:38:40.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:38:40.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:38:40.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:38:40.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:38:40.398 [DEBUG] [Thread-306218] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:38:44.115 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:38:44.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:38:45.421 [DEBUG] [Thread-306220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:39:00.663 [DEBUG] [Thread-306221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:39:10.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:39:10.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:39:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:39:11.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 38, 49), 20.79, 25.55, 0.0, 23.8, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:39:11.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:38:49
2025-12-24T17:39:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:39:12.154 [DEBUG] [Thread-306222] [transport.py] [_log()] starting thread (client mode): 0xf574c550
2025-12-24T17:39:12.155 [DEBUG] [Thread-306222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:39:12.167 [DEBUG] [Thread-306222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:39:12.167 [INFO] [Thread-306222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] client lang: <none>
2025-12-24T17:39:12.173 [DEBUG] [Thread-306222] [transport.py] [_log()] server lang: <none>
2025-12-24T17:39:12.174 [DEBUG] [Thread-306222] [transport.py] [_log()] kex follows: False
2025-12-24T17:39:12.174 [DEBUG] [Thread-306222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:39:12.174 [DEBUG] [Thread-306222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:39:12.174 [DEBUG] [Thread-306222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:39:12.174 [DEBUG] [Thread-306222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:39:12.174 [DEBUG] [Thread-306222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:39:12.175 [DEBUG] [Thread-306222] [transport.py] [_log()] Compression: none
2025-12-24T17:39:12.175 [DEBUG] [Thread-306222] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:39:12.209 [DEBUG] [Thread-306222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:39:12.213 [DEBUG] [Thread-306222] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:39:12.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:39:12.215 [DEBUG] [Thread-306222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:39:12.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:39:12.218 [DEBUG] [Thread-306222] [transport.py] [_log()] userauth is OK
2025-12-24T17:39:12.218 [DEBUG] [Thread-306222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:39:12.218 [DEBUG] [Thread-306222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:39:12.218 [DEBUG] [Thread-306222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:39:12.218 [DEBUG] [Thread-306222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:39:12.243 [INFO] [Thread-306222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:39:12.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:39:12.904 [DEBUG] [Thread-306222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:39:12.904 [DEBUG] [Thread-306222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:39:12.905 [DEBUG] [Thread-306222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:39:12.945 [DEBUG] [Thread-306222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:39:12.945 [DEBUG] [Thread-306222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:39:12.949 [DEBUG] [Thread-306222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:39:12.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:39:12.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:39:12.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:39:12.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:39:12.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:39:12.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:39:12.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:39:12.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:39:12.976 [DEBUG] [Thread-306222] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:39:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:39:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.651803 -999.00  +23.10  19.57     31   +5.10 1 1 1 1 1   887    0 18.15 -8.30 ----- 19.6 19.6 159.8 25.3 27.1 -25.7 27.3 -25.0 28.6 -23.7 28.8 -25.7
2025-12-24T17:39:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:39:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:39:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.651803
2025-12-24T17:39:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:39:12.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:39:12.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:39:12.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:39:12.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:39:12.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:38:49', tmtdew=20.79, humidity=25.55, cloud=0.0, wind=23.8, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:38:35.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:39:13.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:39:13.090 [DEBUG] [Thread-306225] [transport.py] [_log()] starting thread (client mode): 0xf818ac20
2025-12-24T17:39:13.090 [DEBUG] [Thread-306225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:39:13.103 [DEBUG] [Thread-306225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:39:13.103 [INFO] [Thread-306225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] client lang: <none>
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] server lang: <none>
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] kex follows: False
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] Compression: none
2025-12-24T17:39:13.111 [DEBUG] [Thread-306225] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:39:13.169 [DEBUG] [Thread-306225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:39:13.169 [DEBUG] [Thread-306225] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:39:13.169 [DEBUG] [Thread-306225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:39:13.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:39:13.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:39:13.226 [DEBUG] [Thread-306225] [transport.py] [_log()] userauth is OK
2025-12-24T17:39:13.226 [DEBUG] [Thread-306225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:39:13.226 [DEBUG] [Thread-306225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:39:13.226 [DEBUG] [Thread-306225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:39:13.226 [DEBUG] [Thread-306225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:39:13.243 [INFO] [Thread-306225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:39:13.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:39:13.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:39:14.028 [DEBUG] [Thread-306225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:39:14.028 [DEBUG] [Thread-306225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:39:14.076 [DEBUG] [Thread-306225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:39:14.076 [DEBUG] [Thread-306225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:39:14.084 [DEBUG] [Thread-306225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:39:14.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:39:14.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:39:14.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:39:14.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:39:14.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:39:14.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:39:14.119 [DEBUG] [Thread-306225] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:39:15.788 [DEBUG] [Thread-306227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:39:30.961 [DEBUG] [Thread-306228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:39:34.291 [DEBUG] [Thread-306229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:39:44.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:39:44.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:39:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:39:44.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:39:44.263 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:39:45.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 39, 23), 20.83, 25.48, 0.0, 24.16, 23.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:39:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:39:23
2025-12-24T17:39:45.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:39:45.930 [DEBUG] [Thread-306230] [transport.py] [_log()] starting thread (client mode): 0xf5753700
2025-12-24T17:39:45.931 [DEBUG] [Thread-306230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:39:45.945 [DEBUG] [Thread-306230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:39:45.945 [INFO] [Thread-306230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:39:45.950 [DEBUG] [Thread-306230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:39:45.950 [DEBUG] [Thread-306230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:39:45.950 [DEBUG] [Thread-306230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:39:45.950 [DEBUG] [Thread-306230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] client lang: <none>
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] server lang: <none>
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] kex follows: False
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:39:45.951 [DEBUG] [Thread-306230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:39:45.952 [DEBUG] [Thread-306230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:39:45.952 [DEBUG] [Thread-306230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:39:45.952 [DEBUG] [Thread-306230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:39:45.952 [DEBUG] [Thread-306230] [transport.py] [_log()] Compression: none
2025-12-24T17:39:45.952 [DEBUG] [Thread-306230] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:39:45.984 [DEBUG] [Thread-306230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:39:45.989 [DEBUG] [Thread-306230] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:39:45.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:39:45.993 [DEBUG] [Thread-306230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:39:45.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:39:45.997 [DEBUG] [Thread-306230] [transport.py] [_log()] userauth is OK
2025-12-24T17:39:45.998 [DEBUG] [Thread-306230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:39:45.998 [DEBUG] [Thread-306230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:39:45.998 [DEBUG] [Thread-306230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:39:45.998 [DEBUG] [Thread-306230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:39:46.025 [INFO] [Thread-306230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:39:46.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:39:46.077 [DEBUG] [Thread-306232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:39:46.688 [DEBUG] [Thread-306230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:39:46.688 [DEBUG] [Thread-306230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:39:46.689 [DEBUG] [Thread-306230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:39:46.730 [DEBUG] [Thread-306230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:39:46.730 [DEBUG] [Thread-306230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:39:46.732 [DEBUG] [Thread-306230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:39:46.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:39:46.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:39:46.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:39:46.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:39:46.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:39:46.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:39:46.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:39:46.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:39:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:39:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.652150 -999.00  +23.10  24.91     30   +5.00 1 1 1 1 1   887    0 17.95 -12.97 ----- 24.9 24.9 170.2 34.6 27.0 -26.2 27.2 -25.1 28.5 -24.1 28.7 -26.3
2025-12-24T17:39:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:39:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:39:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.652150
2025-12-24T17:39:46.759 [DEBUG] [Thread-306230] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:39:46.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:39:46.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:39:46.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:39:46.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:39:46.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:39:46.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:39:23', tmtdew=20.83, humidity=25.48, cloud=0.0, wind=24.16, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:39:05.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:39:46.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:39:46.856 [DEBUG] [Thread-306234] [transport.py] [_log()] starting thread (client mode): 0xf81e7a30
2025-12-24T17:39:46.856 [DEBUG] [Thread-306234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:39:46.870 [DEBUG] [Thread-306234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:39:46.870 [INFO] [Thread-306234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] client lang: <none>
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] server lang: <none>
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] kex follows: False
2025-12-24T17:39:46.878 [DEBUG] [Thread-306234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:39:46.879 [DEBUG] [Thread-306234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:39:46.879 [DEBUG] [Thread-306234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:39:46.879 [DEBUG] [Thread-306234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:39:46.879 [DEBUG] [Thread-306234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:39:46.879 [DEBUG] [Thread-306234] [transport.py] [_log()] Compression: none
2025-12-24T17:39:46.879 [DEBUG] [Thread-306234] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:39:46.934 [DEBUG] [Thread-306234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:39:46.934 [DEBUG] [Thread-306234] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:39:46.935 [DEBUG] [Thread-306234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:39:46.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:39:46.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:39:46.990 [DEBUG] [Thread-306234] [transport.py] [_log()] userauth is OK
2025-12-24T17:39:46.990 [DEBUG] [Thread-306234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:39:46.990 [DEBUG] [Thread-306234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:39:46.990 [DEBUG] [Thread-306234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:39:46.990 [DEBUG] [Thread-306234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:39:47.006 [INFO] [Thread-306234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:39:47.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:39:47.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:39:47.855 [DEBUG] [Thread-306234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:39:47.856 [DEBUG] [Thread-306234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:39:47.903 [DEBUG] [Thread-306234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:39:47.903 [DEBUG] [Thread-306234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:39:47.912 [DEBUG] [Thread-306234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:39:47.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:39:47.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:39:47.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:39:47.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:39:47.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:39:47.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:39:47.947 [DEBUG] [Thread-306234] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:40:01.265 [DEBUG] [Thread-306236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:40:16.785 [DEBUG] [Thread-306237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:40:17.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:40:17.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:40:18.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:40:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 39, 56), 20.77, 25.43, 0.0, 20.4, 22.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:40:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:39:56
2025-12-24T17:40:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:40:19.758 [DEBUG] [Thread-306238] [transport.py] [_log()] starting thread (client mode): 0xf81f0790
2025-12-24T17:40:19.758 [DEBUG] [Thread-306238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:40:19.771 [DEBUG] [Thread-306238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:40:19.771 [INFO] [Thread-306238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:40:19.777 [DEBUG] [Thread-306238] [transport.py] [_log()] client lang: <none>
2025-12-24T17:40:19.778 [DEBUG] [Thread-306238] [transport.py] [_log()] server lang: <none>
2025-12-24T17:40:19.778 [DEBUG] [Thread-306238] [transport.py] [_log()] kex follows: False
2025-12-24T17:40:19.778 [DEBUG] [Thread-306238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:40:19.778 [DEBUG] [Thread-306238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:40:19.778 [DEBUG] [Thread-306238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:40:19.779 [DEBUG] [Thread-306238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:40:19.779 [DEBUG] [Thread-306238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:40:19.779 [DEBUG] [Thread-306238] [transport.py] [_log()] Compression: none
2025-12-24T17:40:19.779 [DEBUG] [Thread-306238] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:40:19.819 [DEBUG] [Thread-306238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:40:19.823 [DEBUG] [Thread-306238] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:40:19.825 [DEBUG] [Thread-306238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:40:19.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:40:19.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:40:19.830 [DEBUG] [Thread-306238] [transport.py] [_log()] userauth is OK
2025-12-24T17:40:19.831 [DEBUG] [Thread-306238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:40:19.831 [DEBUG] [Thread-306238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:40:19.831 [DEBUG] [Thread-306238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:40:19.831 [DEBUG] [Thread-306238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:40:19.858 [INFO] [Thread-306238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:40:19.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:40:20.504 [DEBUG] [Thread-306238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:40:20.505 [DEBUG] [Thread-306238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:40:20.505 [DEBUG] [Thread-306238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:40:20.546 [DEBUG] [Thread-306238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:40:20.546 [DEBUG] [Thread-306238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:40:20.549 [DEBUG] [Thread-306238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:40:20.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:40:20.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:40:20.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:40:20.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:40:20.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:40:20.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:40:20.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:40:20.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:40:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:40:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.652497 -999.00  +23.00  13.25     31   +5.00 1 1 1 1 1   887    0 18.01 -14.34 ----- 13.2 13.2 171.4 20.8 26.9 -26.2 26.9 -29.2 28.5 -24.4 28.6 -26.4
2025-12-24T17:40:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:40:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:40:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.652497
2025-12-24T17:40:20.581 [DEBUG] [Thread-306238] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:40:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:40:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:40:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:40:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:40:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:40:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:39:56', tmtdew=20.77, humidity=25.43, cloud=0.0, wind=20.4, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:39:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:40:20.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:40:20.679 [DEBUG] [Thread-306241] [transport.py] [_log()] starting thread (client mode): 0xf81c1ba0
2025-12-24T17:40:20.679 [DEBUG] [Thread-306241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:40:20.694 [DEBUG] [Thread-306241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:40:20.694 [INFO] [Thread-306241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] client lang: <none>
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] server lang: <none>
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] kex follows: False
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] Compression: none
2025-12-24T17:40:20.702 [DEBUG] [Thread-306241] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:40:20.757 [DEBUG] [Thread-306241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:40:20.757 [DEBUG] [Thread-306241] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:40:20.757 [DEBUG] [Thread-306241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:40:20.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:40:20.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:40:20.814 [DEBUG] [Thread-306241] [transport.py] [_log()] userauth is OK
2025-12-24T17:40:20.814 [DEBUG] [Thread-306241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:40:20.814 [DEBUG] [Thread-306241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:40:20.814 [DEBUG] [Thread-306241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:40:20.814 [DEBUG] [Thread-306241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:40:20.828 [INFO] [Thread-306241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:40:20.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:40:20.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:40:21.668 [DEBUG] [Thread-306241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:40:21.668 [DEBUG] [Thread-306241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:40:21.716 [DEBUG] [Thread-306241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:40:21.716 [DEBUG] [Thread-306241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:40:21.725 [DEBUG] [Thread-306241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:40:21.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:40:21.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:40:21.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:40:21.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:40:21.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:40:21.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:40:21.762 [DEBUG] [Thread-306241] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:40:31.938 [DEBUG] [Thread-306243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:40:34.544 [DEBUG] [Thread-306244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:40:44.410 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:40:44.413 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:40:47.096 [DEBUG] [Thread-306245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:40:51.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:40:51.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:40:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:40:52.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 40, 29), 20.93, 25.21, 0.0, 20.15, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:40:52.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:40:29
2025-12-24T17:40:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:40:53.163 [DEBUG] [Thread-306246] [transport.py] [_log()] starting thread (client mode): 0xf574c6d0
2025-12-24T17:40:53.165 [DEBUG] [Thread-306246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:40:53.166 [DEBUG] [Thread-306246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:40:53.166 [INFO] [Thread-306246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] client lang: <none>
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] server lang: <none>
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] kex follows: False
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:40:53.173 [DEBUG] [Thread-306246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:40:53.174 [DEBUG] [Thread-306246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:40:53.174 [DEBUG] [Thread-306246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:40:53.174 [DEBUG] [Thread-306246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:40:53.174 [DEBUG] [Thread-306246] [transport.py] [_log()] Compression: none
2025-12-24T17:40:53.174 [DEBUG] [Thread-306246] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:40:53.214 [DEBUG] [Thread-306246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:40:53.217 [DEBUG] [Thread-306246] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:40:53.219 [DEBUG] [Thread-306246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:40:53.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:40:53.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:40:53.224 [DEBUG] [Thread-306246] [transport.py] [_log()] userauth is OK
2025-12-24T17:40:53.224 [DEBUG] [Thread-306246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:40:53.224 [DEBUG] [Thread-306246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:40:53.224 [DEBUG] [Thread-306246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:40:53.224 [DEBUG] [Thread-306246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:40:53.247 [INFO] [Thread-306246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:40:53.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:40:54.081 [DEBUG] [Thread-306246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:40:54.081 [DEBUG] [Thread-306246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:40:54.082 [DEBUG] [Thread-306246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:40:54.122 [DEBUG] [Thread-306246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:40:54.122 [DEBUG] [Thread-306246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:40:54.124 [DEBUG] [Thread-306246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:40:54.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:40:54.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:40:54.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:40:54.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:40:54.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:40:54.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:40:54.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:40:54.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:40:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:40:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.652844 -999.00  +23.00   5.92     31   +5.10 1 1 1 1 1   887    0 17.80 -16.11 ----- 5.9 5.9 165.4 16.3 27.1 -25.6 27.1 -25.3 28.7 -23.4 28.8 -25.8
2025-12-24T17:40:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:40:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:40:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.652844
2025-12-24T17:40:54.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:40:54.156 [DEBUG] [Thread-306246] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:40:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:40:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:40:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:40:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:40:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:40:29', tmtdew=20.93, humidity=25.21, cloud=0.0, wind=20.15, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:40:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:40:54.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:40:54.252 [DEBUG] [Thread-306249] [transport.py] [_log()] starting thread (client mode): 0xf81e6d70
2025-12-24T17:40:54.252 [DEBUG] [Thread-306249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:40:54.269 [DEBUG] [Thread-306249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:40:54.269 [INFO] [Thread-306249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] client lang: <none>
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] server lang: <none>
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] kex follows: False
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] Compression: none
2025-12-24T17:40:54.277 [DEBUG] [Thread-306249] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:40:54.333 [DEBUG] [Thread-306249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:40:54.333 [DEBUG] [Thread-306249] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:40:54.334 [DEBUG] [Thread-306249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:40:54.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:40:54.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:40:54.390 [DEBUG] [Thread-306249] [transport.py] [_log()] userauth is OK
2025-12-24T17:40:54.390 [DEBUG] [Thread-306249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:40:54.390 [DEBUG] [Thread-306249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:40:54.390 [DEBUG] [Thread-306249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:40:54.390 [DEBUG] [Thread-306249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:40:54.405 [INFO] [Thread-306249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:40:54.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:40:54.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:40:55.253 [DEBUG] [Thread-306249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:40:55.254 [DEBUG] [Thread-306249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:40:55.301 [DEBUG] [Thread-306249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:40:55.301 [DEBUG] [Thread-306249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:40:55.309 [DEBUG] [Thread-306249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:40:55.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:40:55.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:40:55.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:40:55.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:40:55.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:40:55.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:40:55.342 [DEBUG] [Thread-306249] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:41:02.196 [DEBUG] [Thread-306251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:41:17.406 [DEBUG] [Thread-306252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:41:25.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:41:25.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:41:25.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:41:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 41, 2), 21.02, 25.05, 0.0, 19.94, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:41:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:41:02
2025-12-24T17:41:26.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:41:27.100 [DEBUG] [Thread-306253] [transport.py] [_log()] starting thread (client mode): 0xf572b760
2025-12-24T17:41:27.101 [DEBUG] [Thread-306253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:41:27.111 [DEBUG] [Thread-306253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:41:27.111 [INFO] [Thread-306253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:41:27.116 [DEBUG] [Thread-306253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:41:27.116 [DEBUG] [Thread-306253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:41:27.116 [DEBUG] [Thread-306253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:41:27.116 [DEBUG] [Thread-306253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] client lang: <none>
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] server lang: <none>
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] kex follows: False
2025-12-24T17:41:27.117 [DEBUG] [Thread-306253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:41:27.118 [DEBUG] [Thread-306253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:41:27.118 [DEBUG] [Thread-306253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:41:27.118 [DEBUG] [Thread-306253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:41:27.118 [DEBUG] [Thread-306253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:41:27.118 [DEBUG] [Thread-306253] [transport.py] [_log()] Compression: none
2025-12-24T17:41:27.118 [DEBUG] [Thread-306253] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:41:27.156 [DEBUG] [Thread-306253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:41:27.160 [DEBUG] [Thread-306253] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:41:27.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:41:27.164 [DEBUG] [Thread-306253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:41:27.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:41:27.167 [DEBUG] [Thread-306253] [transport.py] [_log()] userauth is OK
2025-12-24T17:41:27.167 [DEBUG] [Thread-306253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:41:27.167 [DEBUG] [Thread-306253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:41:27.167 [DEBUG] [Thread-306253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:41:27.168 [DEBUG] [Thread-306253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:41:27.195 [INFO] [Thread-306253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:41:27.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:41:27.848 [DEBUG] [Thread-306253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:41:27.848 [DEBUG] [Thread-306253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:41:27.849 [DEBUG] [Thread-306253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:41:27.889 [DEBUG] [Thread-306253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:41:27.889 [DEBUG] [Thread-306253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:41:27.893 [DEBUG] [Thread-306253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:41:27.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:41:27.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:41:27.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:41:27.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:41:27.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:41:27.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:41:27.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:41:27.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:41:27.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:41:27.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.653539 -999.00  +23.30  15.77     30   +5.20 1 1 1 1 1   887    0 17.06 -20.03 ----- 15.8 15.8 157.8 20.3 27.2 -25.8 27.2 -25.2 28.9 -23.6 29.0 -25.0
2025-12-24T17:41:27.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:41:27.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:41:27.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.653539
2025-12-24T17:41:27.927 [DEBUG] [Thread-306253] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:41:27.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:41:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:41:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:41:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:41:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:41:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:41:02', tmtdew=21.02, humidity=25.05, cloud=0.0, wind=19.94, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:41:05.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:41:28.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:41:28.029 [DEBUG] [Thread-306256] [transport.py] [_log()] starting thread (client mode): 0xf81887c0
2025-12-24T17:41:28.029 [DEBUG] [Thread-306256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:41:28.043 [DEBUG] [Thread-306256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:41:28.043 [INFO] [Thread-306256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:41:28.051 [DEBUG] [Thread-306256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:41:28.051 [DEBUG] [Thread-306256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:41:28.051 [DEBUG] [Thread-306256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:41:28.051 [DEBUG] [Thread-306256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:41:28.051 [DEBUG] [Thread-306256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:41:28.051 [DEBUG] [Thread-306256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:41:28.051 [DEBUG] [Thread-306256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:41:28.051 [DEBUG] [Thread-306256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] client lang: <none>
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] server lang: <none>
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] kex follows: False
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] Compression: none
2025-12-24T17:41:28.052 [DEBUG] [Thread-306256] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:41:28.110 [DEBUG] [Thread-306256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:41:28.110 [DEBUG] [Thread-306256] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:41:28.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:41:28.111 [DEBUG] [Thread-306256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:41:28.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:41:28.170 [DEBUG] [Thread-306256] [transport.py] [_log()] userauth is OK
2025-12-24T17:41:28.170 [DEBUG] [Thread-306256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:41:28.171 [DEBUG] [Thread-306256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:41:28.171 [DEBUG] [Thread-306256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:41:28.171 [DEBUG] [Thread-306256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:41:28.185 [INFO] [Thread-306256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:41:28.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:41:28.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:41:29.000 [DEBUG] [Thread-306256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:41:29.000 [DEBUG] [Thread-306256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:41:29.048 [DEBUG] [Thread-306256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:41:29.048 [DEBUG] [Thread-306256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:41:29.057 [DEBUG] [Thread-306256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:41:29.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:41:29.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:41:29.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:41:29.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:41:29.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:41:29.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:41:29.095 [DEBUG] [Thread-306256] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:41:32.521 [DEBUG] [Thread-306258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:41:34.785 [DEBUG] [Thread-306259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:41:44.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:41:44.576 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:41:47.655 [DEBUG] [Thread-306260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:41:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:41:59.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:41:59.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:42:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 41, 36), 20.97, 25.13, 0.0, 18.76, 23.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:42:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:41:36
2025-12-24T17:42:00.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:42:00.893 [DEBUG] [Thread-306261] [transport.py] [_log()] starting thread (client mode): 0xf81e4220
2025-12-24T17:42:00.894 [DEBUG] [Thread-306261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:42:00.903 [DEBUG] [Thread-306261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:42:00.904 [INFO] [Thread-306261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:42:00.909 [DEBUG] [Thread-306261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] client lang: <none>
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] server lang: <none>
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] kex follows: False
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:42:00.910 [DEBUG] [Thread-306261] [transport.py] [_log()] Compression: none
2025-12-24T17:42:00.911 [DEBUG] [Thread-306261] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:42:00.943 [DEBUG] [Thread-306261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:42:00.946 [DEBUG] [Thread-306261] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:42:00.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:42:00.948 [DEBUG] [Thread-306261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:42:00.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:42:00.952 [DEBUG] [Thread-306261] [transport.py] [_log()] userauth is OK
2025-12-24T17:42:00.953 [DEBUG] [Thread-306261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:42:00.953 [DEBUG] [Thread-306261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:42:00.953 [DEBUG] [Thread-306261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:42:00.954 [DEBUG] [Thread-306261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:42:00.981 [INFO] [Thread-306261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:42:00.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:42:01.780 [DEBUG] [Thread-306261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:42:01.780 [DEBUG] [Thread-306261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:42:01.782 [DEBUG] [Thread-306261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:42:01.866 [DEBUG] [Thread-306261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:42:01.866 [DEBUG] [Thread-306261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:42:01.869 [DEBUG] [Thread-306261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:42:01.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:42:01.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:42:01.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:42:01.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:42:01.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:42:01.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:42:01.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:42:01.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:42:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:42:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.653886 -999.00  +23.30  20.40     30   +5.00 1 1 1 1 1   887    0 17.47 -20.69 ----- 20.4 20.4 182.0 27.8 27.1 -26.1 27.2 -29.1 28.7 -24.5 29.0 -26.5
2025-12-24T17:42:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:42:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:42:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.653886
2025-12-24T17:42:01.914 [DEBUG] [Thread-306261] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:42:01.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:42:01.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:42:01.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:42:01.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:42:01.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:42:01.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:41:36', tmtdew=20.97, humidity=25.13, cloud=0.0, wind=18.76, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:41:35.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:42:02.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:42:02.019 [DEBUG] [Thread-306264] [transport.py] [_log()] starting thread (client mode): 0xf81e7f70
2025-12-24T17:42:02.019 [DEBUG] [Thread-306264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:42:02.034 [DEBUG] [Thread-306264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:42:02.034 [INFO] [Thread-306264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:42:02.041 [DEBUG] [Thread-306264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:42:02.041 [DEBUG] [Thread-306264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:42:02.041 [DEBUG] [Thread-306264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:42:02.041 [DEBUG] [Thread-306264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] client lang: <none>
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] server lang: <none>
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] kex follows: False
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] Compression: none
2025-12-24T17:42:02.042 [DEBUG] [Thread-306264] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:42:02.099 [DEBUG] [Thread-306264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:42:02.099 [DEBUG] [Thread-306264] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:42:02.100 [DEBUG] [Thread-306264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:42:02.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:42:02.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:42:02.155 [DEBUG] [Thread-306264] [transport.py] [_log()] userauth is OK
2025-12-24T17:42:02.155 [DEBUG] [Thread-306264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:42:02.155 [DEBUG] [Thread-306264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:42:02.155 [DEBUG] [Thread-306264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:42:02.155 [DEBUG] [Thread-306264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:42:02.177 [INFO] [Thread-306264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:42:02.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:42:02.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:42:02.741 [DEBUG] [Thread-306266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:42:03.038 [DEBUG] [Thread-306264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:42:03.039 [DEBUG] [Thread-306264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:42:03.086 [DEBUG] [Thread-306264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:42:03.086 [DEBUG] [Thread-306264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:42:03.095 [DEBUG] [Thread-306264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:42:03.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:42:03.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:42:03.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:42:03.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:42:03.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:42:03.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:42:03.131 [DEBUG] [Thread-306264] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:42:17.952 [DEBUG] [Thread-306267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:42:33.050 [DEBUG] [Thread-306268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:42:33.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:42:33.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:42:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:42:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 42, 9), 21.13, 24.92, 0.0, 23.29, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:42:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:42:09
2025-12-24T17:42:34.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:42:34.990 [DEBUG] [Thread-306269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:42:35.006 [DEBUG] [Thread-306270] [transport.py] [_log()] starting thread (client mode): 0xf57524d0
2025-12-24T17:42:35.007 [DEBUG] [Thread-306270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:42:35.019 [DEBUG] [Thread-306270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:42:35.019 [INFO] [Thread-306270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] client lang: <none>
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] server lang: <none>
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] kex follows: False
2025-12-24T17:42:35.024 [DEBUG] [Thread-306270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:42:35.025 [DEBUG] [Thread-306270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:42:35.025 [DEBUG] [Thread-306270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:42:35.025 [DEBUG] [Thread-306270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:42:35.025 [DEBUG] [Thread-306270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:42:35.025 [DEBUG] [Thread-306270] [transport.py] [_log()] Compression: none
2025-12-24T17:42:35.025 [DEBUG] [Thread-306270] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:42:35.056 [DEBUG] [Thread-306270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:42:35.060 [DEBUG] [Thread-306270] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:42:35.061 [DEBUG] [Thread-306270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:42:35.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:42:35.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:42:35.067 [DEBUG] [Thread-306270] [transport.py] [_log()] userauth is OK
2025-12-24T17:42:35.067 [DEBUG] [Thread-306270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:42:35.068 [DEBUG] [Thread-306270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:42:35.068 [DEBUG] [Thread-306270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:42:35.068 [DEBUG] [Thread-306270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:42:35.106 [INFO] [Thread-306270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:42:35.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:42:35.753 [DEBUG] [Thread-306270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:42:35.763 [DEBUG] [Thread-306270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:42:35.765 [DEBUG] [Thread-306270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:42:35.794 [DEBUG] [Thread-306270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:42:35.795 [DEBUG] [Thread-306270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:42:35.798 [DEBUG] [Thread-306270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:42:35.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:42:35.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:42:35.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:42:35.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:42:35.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:42:35.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:42:35.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:42:35.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:42:35.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:42:35.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.654233 -999.00  +23.30  20.36     30   +5.10 1 1 1 1 1   887    0 17.85 -22.69 ----- 20.4 20.4 164.2 32.7 27.1 -26.0 27.1 -26.9 28.6 -24.1 28.9 -27.9
2025-12-24T17:42:35.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:42:35.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:42:35.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.654233
2025-12-24T17:42:35.833 [DEBUG] [Thread-306270] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:42:35.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:42:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:42:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:42:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:42:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:42:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:42:09', tmtdew=21.13, humidity=24.92, cloud=0.0, wind=23.29, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:42:05.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:42:35.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:42:35.952 [DEBUG] [Thread-306273] [transport.py] [_log()] starting thread (client mode): 0xf81e4df0
2025-12-24T17:42:35.952 [DEBUG] [Thread-306273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:42:35.967 [DEBUG] [Thread-306273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:42:35.967 [INFO] [Thread-306273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:42:35.974 [DEBUG] [Thread-306273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:42:35.974 [DEBUG] [Thread-306273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:42:35.974 [DEBUG] [Thread-306273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:42:35.974 [DEBUG] [Thread-306273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] client lang: <none>
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] server lang: <none>
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] kex follows: False
2025-12-24T17:42:35.975 [DEBUG] [Thread-306273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:42:35.976 [DEBUG] [Thread-306273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:42:35.976 [DEBUG] [Thread-306273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:42:35.976 [DEBUG] [Thread-306273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:42:35.976 [DEBUG] [Thread-306273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:42:35.976 [DEBUG] [Thread-306273] [transport.py] [_log()] Compression: none
2025-12-24T17:42:35.976 [DEBUG] [Thread-306273] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:42:36.031 [DEBUG] [Thread-306273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:42:36.032 [DEBUG] [Thread-306273] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:42:36.033 [DEBUG] [Thread-306273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:42:36.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:42:36.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:42:36.087 [DEBUG] [Thread-306273] [transport.py] [_log()] userauth is OK
2025-12-24T17:42:36.087 [DEBUG] [Thread-306273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:42:36.088 [DEBUG] [Thread-306273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:42:36.088 [DEBUG] [Thread-306273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:42:36.088 [DEBUG] [Thread-306273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:42:36.115 [INFO] [Thread-306273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:42:36.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:42:36.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:42:36.946 [DEBUG] [Thread-306273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:42:36.946 [DEBUG] [Thread-306273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:42:36.984 [DEBUG] [Thread-306273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:42:36.984 [DEBUG] [Thread-306273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:42:36.993 [DEBUG] [Thread-306273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:42:37.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:42:37.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:42:37.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:42:37.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:42:37.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:42:37.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:42:37.032 [DEBUG] [Thread-306273] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:42:44.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:42:44.719 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:42:48.128 [DEBUG] [Thread-306275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:43:03.367 [DEBUG] [Thread-306276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:43:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:43:07.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:43:07.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:43:08.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 42, 43), 21.35, 24.78, 0.0, 25.37, 23.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:43:08.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:42:43
2025-12-24T17:43:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:43:08.374 [DEBUG] [Thread-306277] [transport.py] [_log()] starting thread (client mode): 0xf81e79a0
2025-12-24T17:43:08.375 [DEBUG] [Thread-306277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:43:08.385 [DEBUG] [Thread-306277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:43:08.386 [INFO] [Thread-306277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] client lang: <none>
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] server lang: <none>
2025-12-24T17:43:08.391 [DEBUG] [Thread-306277] [transport.py] [_log()] kex follows: False
2025-12-24T17:43:08.392 [DEBUG] [Thread-306277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:43:08.392 [DEBUG] [Thread-306277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:43:08.392 [DEBUG] [Thread-306277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:43:08.393 [DEBUG] [Thread-306277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:43:08.393 [DEBUG] [Thread-306277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:43:08.393 [DEBUG] [Thread-306277] [transport.py] [_log()] Compression: none
2025-12-24T17:43:08.393 [DEBUG] [Thread-306277] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:43:08.423 [DEBUG] [Thread-306277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:43:08.427 [DEBUG] [Thread-306277] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:43:08.429 [DEBUG] [Thread-306277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:43:08.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:43:08.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:43:08.434 [DEBUG] [Thread-306277] [transport.py] [_log()] userauth is OK
2025-12-24T17:43:08.434 [DEBUG] [Thread-306277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:43:08.435 [DEBUG] [Thread-306277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:43:08.435 [DEBUG] [Thread-306277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:43:08.435 [DEBUG] [Thread-306277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:43:08.460 [INFO] [Thread-306277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:43:08.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:43:09.114 [DEBUG] [Thread-306277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:43:09.114 [DEBUG] [Thread-306277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:43:09.114 [DEBUG] [Thread-306277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:43:09.155 [DEBUG] [Thread-306277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:43:09.155 [DEBUG] [Thread-306277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:43:09.158 [DEBUG] [Thread-306277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:43:09.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:43:09.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:43:09.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:43:09.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:43:09.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:43:09.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:43:09.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:43:09.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:43:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:43:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.654581 -999.00  +23.10  18.61     31   +5.00 1 1 1 1 1   887    0 17.23 -18.93 ----- 18.6 18.6 164.3 29.3 27.2 -25.7 27.2 -25.2 28.8 -23.7 28.9 -26.4
2025-12-24T17:43:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:43:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:43:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.654581
2025-12-24T17:43:09.189 [DEBUG] [Thread-306277] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:43:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:43:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:43:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:43:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:43:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:43:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:42:43', tmtdew=21.35, humidity=24.78, cloud=0.0, wind=25.37, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:42:35.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:43:09.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:43:09.291 [DEBUG] [Thread-306280] [transport.py] [_log()] starting thread (client mode): 0xf572bbb0
2025-12-24T17:43:09.291 [DEBUG] [Thread-306280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:43:09.306 [DEBUG] [Thread-306280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:43:09.306 [INFO] [Thread-306280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] client lang: <none>
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] server lang: <none>
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] kex follows: False
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:43:09.313 [DEBUG] [Thread-306280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:43:09.314 [DEBUG] [Thread-306280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:43:09.314 [DEBUG] [Thread-306280] [transport.py] [_log()] Compression: none
2025-12-24T17:43:09.314 [DEBUG] [Thread-306280] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:43:09.371 [DEBUG] [Thread-306280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:43:09.371 [DEBUG] [Thread-306280] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:43:09.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:43:09.372 [DEBUG] [Thread-306280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:43:09.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:43:09.426 [DEBUG] [Thread-306280] [transport.py] [_log()] userauth is OK
2025-12-24T17:43:09.426 [DEBUG] [Thread-306280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:43:09.426 [DEBUG] [Thread-306280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:43:09.426 [DEBUG] [Thread-306280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:43:09.427 [DEBUG] [Thread-306280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:43:09.441 [INFO] [Thread-306280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:43:09.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:43:09.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:43:10.302 [DEBUG] [Thread-306280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:43:10.302 [DEBUG] [Thread-306280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:43:10.349 [DEBUG] [Thread-306280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:43:10.350 [DEBUG] [Thread-306280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:43:10.358 [DEBUG] [Thread-306280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:43:10.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:43: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')
2025-12-24T17:43:10.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:43:10.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:43:10.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:43:10.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:43:10.394 [DEBUG] [Thread-306280] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:43:18.498 [DEBUG] [Thread-306282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:43:33.658 [DEBUG] [Thread-306283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:43:35.221 [DEBUG] [Thread-306284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:43:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:43:40.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:43:40.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:43:41.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 43, 16), 21.23, 24.95, 0.0, 25.94, 23.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:43:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:43:16
2025-12-24T17:43:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:43:42.070 [DEBUG] [Thread-306285] [transport.py] [_log()] starting thread (client mode): 0xf5770d90
2025-12-24T17:43:42.071 [DEBUG] [Thread-306285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:43:42.084 [DEBUG] [Thread-306285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:43:42.084 [INFO] [Thread-306285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] client lang: <none>
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] server lang: <none>
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] kex follows: False
2025-12-24T17:43:42.088 [DEBUG] [Thread-306285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:43:42.089 [DEBUG] [Thread-306285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:43:42.089 [DEBUG] [Thread-306285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:43:42.089 [DEBUG] [Thread-306285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:43:42.089 [DEBUG] [Thread-306285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:43:42.089 [DEBUG] [Thread-306285] [transport.py] [_log()] Compression: none
2025-12-24T17:43:42.089 [DEBUG] [Thread-306285] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:43:42.120 [DEBUG] [Thread-306285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:43:42.122 [DEBUG] [Thread-306285] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:43:42.124 [DEBUG] [Thread-306285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:43:42.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:43:42.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:43:42.127 [DEBUG] [Thread-306285] [transport.py] [_log()] userauth is OK
2025-12-24T17:43:42.127 [DEBUG] [Thread-306285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:43:42.127 [DEBUG] [Thread-306285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:43:42.127 [DEBUG] [Thread-306285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:43:42.127 [DEBUG] [Thread-306285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:43:42.144 [INFO] [Thread-306285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:43:42.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:43:42.766 [DEBUG] [Thread-306285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:43:42.766 [DEBUG] [Thread-306285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:43:42.767 [DEBUG] [Thread-306285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:43:42.808 [DEBUG] [Thread-306285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:43:42.808 [DEBUG] [Thread-306285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:43:42.811 [DEBUG] [Thread-306285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:43:42.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:43:42.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:43:42.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:43:42.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:43:42.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:43:42.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:43:42.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:43:42.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:43:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:43:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.654928 -999.00  +23.20  21.91     31   +5.10 1 1 1 1 1   887    0 17.49 -19.08 ----- 21.9 21.9 148.2 28.9 27.1 -25.9 27.3 -24.7 28.6 -24.7 28.9 -26.6
2025-12-24T17:43:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:43:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:43:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.654928
2025-12-24T17:43:42.844 [DEBUG] [Thread-306285] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:43:42.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:43:42.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:43:42.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:43:42.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:43:42.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:43:42.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:43:16', tmtdew=21.23, humidity=24.95, cloud=0.0, wind=25.94, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:43:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:43:42.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:43:42.953 [DEBUG] [Thread-306288] [transport.py] [_log()] starting thread (client mode): 0xf03bd330
2025-12-24T17:43:42.953 [DEBUG] [Thread-306288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:43:42.968 [DEBUG] [Thread-306288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:43:42.968 [INFO] [Thread-306288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:43:42.975 [DEBUG] [Thread-306288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:43:42.975 [DEBUG] [Thread-306288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] client lang: <none>
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] server lang: <none>
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] kex follows: False
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] Compression: none
2025-12-24T17:43:42.976 [DEBUG] [Thread-306288] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:43:43.033 [DEBUG] [Thread-306288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:43:43.034 [DEBUG] [Thread-306288] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:43:43.034 [DEBUG] [Thread-306288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:43:43.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:43:43.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:43:43.095 [DEBUG] [Thread-306288] [transport.py] [_log()] userauth is OK
2025-12-24T17:43:43.095 [DEBUG] [Thread-306288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:43:43.095 [DEBUG] [Thread-306288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:43:43.095 [DEBUG] [Thread-306288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:43:43.095 [DEBUG] [Thread-306288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:43:43.108 [INFO] [Thread-306288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:43:43.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:43:43.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:43:43.934 [DEBUG] [Thread-306288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:43:43.934 [DEBUG] [Thread-306288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:43:43.983 [DEBUG] [Thread-306288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:43:43.983 [DEBUG] [Thread-306288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:43:43.991 [DEBUG] [Thread-306288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:43:43.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:43:43.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:43:44.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
2025-12-24T17:43:44.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:43:44.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:43:44.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:43:44.027 [DEBUG] [Thread-306288] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:43:44.865 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:43:44.867 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:43:48.750 [DEBUG] [Thread-306290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:44:03.952 [DEBUG] [Thread-306291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:44:14.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:44:14.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:44:14.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:44:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 43, 49), 21.04, 25.3, 0.0, 21.97, 23.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:44:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:43:49
2025-12-24T17:44:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:44:15.711 [DEBUG] [Thread-306292] [transport.py] [_log()] starting thread (client mode): 0xf03be950
2025-12-24T17:44:15.712 [DEBUG] [Thread-306292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:44:15.722 [DEBUG] [Thread-306292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:44:15.722 [INFO] [Thread-306292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] client lang: <none>
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] server lang: <none>
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] kex follows: False
2025-12-24T17:44:15.728 [DEBUG] [Thread-306292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:44:15.729 [DEBUG] [Thread-306292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:44:15.729 [DEBUG] [Thread-306292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:44:15.729 [DEBUG] [Thread-306292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:44:15.729 [DEBUG] [Thread-306292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:44:15.729 [DEBUG] [Thread-306292] [transport.py] [_log()] Compression: none
2025-12-24T17:44:15.729 [DEBUG] [Thread-306292] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:44:15.771 [DEBUG] [Thread-306292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:44:15.776 [DEBUG] [Thread-306292] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:44:15.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:44:15.780 [DEBUG] [Thread-306292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:44:15.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:44:15.784 [DEBUG] [Thread-306292] [transport.py] [_log()] userauth is OK
2025-12-24T17:44:15.785 [DEBUG] [Thread-306292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:44:15.785 [DEBUG] [Thread-306292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:44:15.785 [DEBUG] [Thread-306292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:44:15.785 [DEBUG] [Thread-306292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:44:15.824 [INFO] [Thread-306292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:44:15.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:44:16.493 [DEBUG] [Thread-306292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:44:16.493 [DEBUG] [Thread-306292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:44:16.493 [DEBUG] [Thread-306292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:44:16.534 [DEBUG] [Thread-306292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:44:16.534 [DEBUG] [Thread-306292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:44:16.536 [DEBUG] [Thread-306292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:44:16.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:44:16.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:44:16.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:44:16.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:44:16.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:44:16.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:44:16.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:44:16.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:44:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:44:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.655275 -999.00  +23.00  23.75     31   +5.00 1 1 1 1 1   887    0 17.21 -19.53 ----- 23.8 23.8 134.0 28.9 27.1 -25.8 27.3 -25.9 28.6 -24.2 28.8 -26.8
2025-12-24T17:44:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:44:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:44:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.655275
2025-12-24T17:44:16.568 [DEBUG] [Thread-306292] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:44:16.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:44:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:44:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:44:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:44:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:44:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:43:49', tmtdew=21.04, humidity=25.3, cloud=0.0, wind=21.97, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:43:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:44:16.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:44:16.675 [DEBUG] [Thread-306295] [transport.py] [_log()] starting thread (client mode): 0xf03bc640
2025-12-24T17:44:16.675 [DEBUG] [Thread-306295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:44:16.689 [DEBUG] [Thread-306295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:44:16.689 [INFO] [Thread-306295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] client lang: <none>
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] server lang: <none>
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] kex follows: False
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:44:16.697 [DEBUG] [Thread-306295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:44:16.698 [DEBUG] [Thread-306295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:44:16.698 [DEBUG] [Thread-306295] [transport.py] [_log()] Compression: none
2025-12-24T17:44:16.698 [DEBUG] [Thread-306295] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:44:16.754 [DEBUG] [Thread-306295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:44:16.754 [DEBUG] [Thread-306295] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:44:16.754 [DEBUG] [Thread-306295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:44:16.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:44:16.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:44:16.811 [DEBUG] [Thread-306295] [transport.py] [_log()] userauth is OK
2025-12-24T17:44:16.811 [DEBUG] [Thread-306295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:44:16.811 [DEBUG] [Thread-306295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:44:16.811 [DEBUG] [Thread-306295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:44:16.811 [DEBUG] [Thread-306295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:44:16.831 [INFO] [Thread-306295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:44:16.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:44:16.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:44:17.672 [DEBUG] [Thread-306295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:44:17.673 [DEBUG] [Thread-306295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:44:17.721 [DEBUG] [Thread-306295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:44:17.721 [DEBUG] [Thread-306295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:44:17.730 [DEBUG] [Thread-306295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:44:17.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:44:17.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:44:17.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:44:17.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:44:17.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:44:17.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:44:17.768 [DEBUG] [Thread-306295] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:44:19.132 [DEBUG] [Thread-306297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:44:34.333 [DEBUG] [Thread-306298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:44:35.458 [DEBUG] [Thread-306299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:44:45.020 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:44:45.023 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:44:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:44:47.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:44:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:44:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 44, 22), 20.96, 25.41, 0.0, 19.5, 23.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:44:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:44:22
2025-12-24T17:44:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:44:49.422 [DEBUG] [Thread-306300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:44:49.551 [DEBUG] [Thread-306301] [transport.py] [_log()] starting thread (client mode): 0xf03bc2b0
2025-12-24T17:44:49.551 [DEBUG] [Thread-306301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:44:49.563 [DEBUG] [Thread-306301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:44:49.563 [INFO] [Thread-306301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:44:49.568 [DEBUG] [Thread-306301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:44:49.568 [DEBUG] [Thread-306301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:44:49.568 [DEBUG] [Thread-306301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:44:49.568 [DEBUG] [Thread-306301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] client lang: <none>
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] server lang: <none>
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] kex follows: False
2025-12-24T17:44:49.569 [DEBUG] [Thread-306301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:44:49.570 [DEBUG] [Thread-306301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:44:49.570 [DEBUG] [Thread-306301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:44:49.570 [DEBUG] [Thread-306301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:44:49.570 [DEBUG] [Thread-306301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:44:49.570 [DEBUG] [Thread-306301] [transport.py] [_log()] Compression: none
2025-12-24T17:44:49.570 [DEBUG] [Thread-306301] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:44:49.608 [DEBUG] [Thread-306301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:44:49.612 [DEBUG] [Thread-306301] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:44:49.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:44:49.615 [DEBUG] [Thread-306301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:44:49.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:44:49.620 [DEBUG] [Thread-306301] [transport.py] [_log()] userauth is OK
2025-12-24T17:44:49.620 [DEBUG] [Thread-306301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:44:49.621 [DEBUG] [Thread-306301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:44:49.621 [DEBUG] [Thread-306301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:44:49.621 [DEBUG] [Thread-306301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:44:49.648 [INFO] [Thread-306301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:44:49.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:44:50.279 [DEBUG] [Thread-306301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:44:50.279 [DEBUG] [Thread-306301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:44:50.280 [DEBUG] [Thread-306301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:44:50.321 [DEBUG] [Thread-306301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:44:50.321 [DEBUG] [Thread-306301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:44:50.324 [DEBUG] [Thread-306301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:44:50.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:44:50.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:44:50.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:44:50.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:44:50.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:44:50.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:44:50.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:44:50.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:44:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:44:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.655622 -999.00  +22.90  14.77     31   +5.00 1 1 1 1 1   887    0 16.99 -22.23 ----- 14.8 14.8 130.8 28.0 27.0 -25.5 27.3 -25.2 28.7 -24.5 28.9 -25.7
2025-12-24T17:44:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:44:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:44:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.655622
2025-12-24T17:44:50.356 [DEBUG] [Thread-306301] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:44:50.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:44:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:44:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:44:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:44:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:44:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:44:22', tmtdew=20.96, humidity=25.41, cloud=0.0, wind=19.5, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:44:05.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:44:50.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:44:50.468 [DEBUG] [Thread-306304] [transport.py] [_log()] starting thread (client mode): 0xf03bcfa0
2025-12-24T17:44:50.469 [DEBUG] [Thread-306304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:44:50.483 [DEBUG] [Thread-306304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:44:50.483 [INFO] [Thread-306304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] client lang: <none>
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] server lang: <none>
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] kex follows: False
2025-12-24T17:44:50.491 [DEBUG] [Thread-306304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:44:50.492 [DEBUG] [Thread-306304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:44:50.492 [DEBUG] [Thread-306304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:44:50.492 [DEBUG] [Thread-306304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:44:50.492 [DEBUG] [Thread-306304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:44:50.492 [DEBUG] [Thread-306304] [transport.py] [_log()] Compression: none
2025-12-24T17:44:50.492 [DEBUG] [Thread-306304] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:44:50.549 [DEBUG] [Thread-306304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:44:50.550 [DEBUG] [Thread-306304] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:44:50.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:44:50.551 [DEBUG] [Thread-306304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:44:50.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:44:50.607 [DEBUG] [Thread-306304] [transport.py] [_log()] userauth is OK
2025-12-24T17:44:50.608 [DEBUG] [Thread-306304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:44:50.608 [DEBUG] [Thread-306304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:44:50.608 [DEBUG] [Thread-306304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:44:50.608 [DEBUG] [Thread-306304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:44:50.627 [INFO] [Thread-306304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:44:50.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:44:50.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:44:51.468 [DEBUG] [Thread-306304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:44:51.468 [DEBUG] [Thread-306304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:44:51.507 [DEBUG] [Thread-306304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:44:51.507 [DEBUG] [Thread-306304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:44:51.516 [DEBUG] [Thread-306304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:44:51.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:44:51.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:44:51.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:44:51.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:44:51.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:44:51.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:44:51.554 [DEBUG] [Thread-306304] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:45:04.541 [DEBUG] [Thread-306306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:45:19.841 [DEBUG] [Thread-306307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:45:21.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:45:21.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:45:21.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:45:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 44, 56), 20.96, 25.01, 0.0, 27.08, 23.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:45:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:44:56
2025-12-24T17:45:23.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:45:23.639 [DEBUG] [Thread-306308] [transport.py] [_log()] starting thread (client mode): 0xf03bd570
2025-12-24T17:45:23.640 [DEBUG] [Thread-306308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:45:23.640 [DEBUG] [Thread-306308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:45:23.641 [INFO] [Thread-306308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:45:23.647 [DEBUG] [Thread-306308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:45:23.647 [DEBUG] [Thread-306308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] client lang: <none>
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] server lang: <none>
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] kex follows: False
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:45:23.648 [DEBUG] [Thread-306308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:45:23.649 [DEBUG] [Thread-306308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:45:23.649 [DEBUG] [Thread-306308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:45:23.649 [DEBUG] [Thread-306308] [transport.py] [_log()] Compression: none
2025-12-24T17:45:23.649 [DEBUG] [Thread-306308] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:45:23.688 [DEBUG] [Thread-306308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:45:23.692 [DEBUG] [Thread-306308] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:45:23.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:45:23.695 [DEBUG] [Thread-306308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:45:23.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:45:23.699 [DEBUG] [Thread-306308] [transport.py] [_log()] userauth is OK
2025-12-24T17:45:23.699 [DEBUG] [Thread-306308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:45:23.700 [DEBUG] [Thread-306308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:45:23.700 [DEBUG] [Thread-306308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:45:23.700 [DEBUG] [Thread-306308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:45:23.718 [INFO] [Thread-306308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:45:23.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:45:24.348 [DEBUG] [Thread-306308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:45:24.348 [DEBUG] [Thread-306308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:45:24.349 [DEBUG] [Thread-306308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:45:24.390 [DEBUG] [Thread-306308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:45:24.390 [DEBUG] [Thread-306308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:45:24.391 [DEBUG] [Thread-306308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:45:24.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:45:24.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:45:24.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:45:24.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:45:24.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:45:24.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:45:24.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:45:24.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:45:24.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:45:24.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.655969 -999.00  +23.10  22.72     31   +5.00 1 1 1 1 1   887    0 17.34 -24.01 ----- 22.7 22.7 137.0 29.5 26.9 -25.5 27.3 -25.9 28.6 -24.0 28.8 -26.6
2025-12-24T17:45:24.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:45:24.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:45:24.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.655969
2025-12-24T17:45:24.419 [DEBUG] [Thread-306308] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:45:24.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:45:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:45:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:45:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:45:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:45:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:44:56', tmtdew=20.96, humidity=25.01, cloud=0.0, wind=27.08, temperature=23.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:44:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:45:24.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:45:24.512 [DEBUG] [Thread-306311] [transport.py] [_log()] starting thread (client mode): 0xf81f2890
2025-12-24T17:45:24.512 [DEBUG] [Thread-306311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:45:24.526 [DEBUG] [Thread-306311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:45:24.527 [INFO] [Thread-306311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] client lang: <none>
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] server lang: <none>
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] kex follows: False
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] Compression: none
2025-12-24T17:45:24.534 [DEBUG] [Thread-306311] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:45:24.594 [DEBUG] [Thread-306311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:45:24.594 [DEBUG] [Thread-306311] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:45:24.595 [DEBUG] [Thread-306311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:45:24.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:45:24.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:45:24.651 [DEBUG] [Thread-306311] [transport.py] [_log()] userauth is OK
2025-12-24T17:45:24.651 [DEBUG] [Thread-306311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:45:24.651 [DEBUG] [Thread-306311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:45:24.651 [DEBUG] [Thread-306311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:45:24.651 [DEBUG] [Thread-306311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:45:24.666 [INFO] [Thread-306311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:45:24.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:45:24.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:45:25.501 [DEBUG] [Thread-306311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:45:25.501 [DEBUG] [Thread-306311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:45:25.549 [DEBUG] [Thread-306311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:45:25.550 [DEBUG] [Thread-306311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:45:25.559 [DEBUG] [Thread-306311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:45:25.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:45:25.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:45:25.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:45:25.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:45:25.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:45:25.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:45:25.597 [DEBUG] [Thread-306311] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:45:34.969 [DEBUG] [Thread-306313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:45:35.716 [DEBUG] [Thread-306314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:45:45.164 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:45:45.165 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:45:50.172 [DEBUG] [Thread-306315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:45:55.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:45:55.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:45:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:45:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 45, 29), 21.05, 24.88, 0.0, 28.88, 23.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:45:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:45:29
2025-12-24T17:45:56.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:45:56.714 [DEBUG] [Thread-306316] [transport.py] [_log()] starting thread (client mode): 0xf03beb30
2025-12-24T17:45:56.715 [DEBUG] [Thread-306316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:45:56.726 [DEBUG] [Thread-306316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:45:56.727 [INFO] [Thread-306316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] client lang: <none>
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] server lang: <none>
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] kex follows: False
2025-12-24T17:45:56.732 [DEBUG] [Thread-306316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:45:56.733 [DEBUG] [Thread-306316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:45:56.733 [DEBUG] [Thread-306316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:45:56.733 [DEBUG] [Thread-306316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:45:56.733 [DEBUG] [Thread-306316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:45:56.733 [DEBUG] [Thread-306316] [transport.py] [_log()] Compression: none
2025-12-24T17:45:56.733 [DEBUG] [Thread-306316] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:45:56.766 [DEBUG] [Thread-306316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:45:56.770 [DEBUG] [Thread-306316] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:45:56.771 [DEBUG] [Thread-306316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:45:56.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:45:56.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:45:56.775 [DEBUG] [Thread-306316] [transport.py] [_log()] userauth is OK
2025-12-24T17:45:56.775 [DEBUG] [Thread-306316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:45:56.775 [DEBUG] [Thread-306316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:45:56.775 [DEBUG] [Thread-306316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:45:56.775 [DEBUG] [Thread-306316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:45:56.796 [INFO] [Thread-306316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:45:56.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:45:57.439 [DEBUG] [Thread-306316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:45:57.439 [DEBUG] [Thread-306316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:45:57.439 [DEBUG] [Thread-306316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:45:57.480 [DEBUG] [Thread-306316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:45:57.480 [DEBUG] [Thread-306316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:45:57.483 [DEBUG] [Thread-306316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:45:57.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:45:57.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:45:57.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:45:57.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:45:57.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:45:57.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:45:57.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:45:57.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:45:57.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:45:57.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.656316 -999.00  +23.10  19.46     31   +5.00 1 1 1 1 1   887    0 17.65 -22.49 ----- 19.5 19.5 156.4 26.8 27.0 -26.0 27.4 -24.9 28.6 -24.1 28.9 -25.7
2025-12-24T17:45:57.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:45:57.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:45:57.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.656316
2025-12-24T17:45:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:45:57.529 [DEBUG] [Thread-306316] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:45:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:45:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:45:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:45:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:45:57.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:45:29', tmtdew=21.05, humidity=24.88, cloud=0.0, wind=28.88, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:45:05.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:45:57.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:45:57.618 [DEBUG] [Thread-306319] [transport.py] [_log()] starting thread (client mode): 0xf03bc9a0
2025-12-24T17:45:57.618 [DEBUG] [Thread-306319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:45:57.631 [DEBUG] [Thread-306319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:45:57.631 [INFO] [Thread-306319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] client lang: <none>
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] server lang: <none>
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] kex follows: False
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] Compression: none
2025-12-24T17:45:57.639 [DEBUG] [Thread-306319] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:45:57.697 [DEBUG] [Thread-306319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:45:57.697 [DEBUG] [Thread-306319] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:45:57.698 [DEBUG] [Thread-306319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:45:57.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:45:57.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:45:57.755 [DEBUG] [Thread-306319] [transport.py] [_log()] userauth is OK
2025-12-24T17:45:57.755 [DEBUG] [Thread-306319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:45:57.755 [DEBUG] [Thread-306319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:45:57.755 [DEBUG] [Thread-306319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:45:57.755 [DEBUG] [Thread-306319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:45:57.769 [INFO] [Thread-306319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:45:57.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:45:57.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:45:58.654 [DEBUG] [Thread-306319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:45:58.655 [DEBUG] [Thread-306319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:45:58.704 [DEBUG] [Thread-306319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:45:58.704 [DEBUG] [Thread-306319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:45:58.713 [DEBUG] [Thread-306319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:45:58.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:45: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')
2025-12-24T17:45:58.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
2025-12-24T17:45:58.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:45:58.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:45:58.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:45:58.748 [DEBUG] [Thread-306319] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:46:05.289 [DEBUG] [Thread-306321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:46:20.446 [DEBUG] [Thread-306322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:46:28.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:46:28.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:46:28.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:46:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 46, 3), 21.07, 24.83, 0.0, 27.9, 23.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:46:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:46:03
2025-12-24T17:46:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:46:30.485 [DEBUG] [Thread-306323] [transport.py] [_log()] starting thread (client mode): 0xf03bc370
2025-12-24T17:46:30.486 [DEBUG] [Thread-306323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:46:30.486 [DEBUG] [Thread-306323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:46:30.486 [INFO] [Thread-306323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] client lang: <none>
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] server lang: <none>
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] kex follows: False
2025-12-24T17:46:30.489 [DEBUG] [Thread-306323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:46:30.490 [DEBUG] [Thread-306323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:46:30.490 [DEBUG] [Thread-306323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:46:30.490 [DEBUG] [Thread-306323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:46:30.490 [DEBUG] [Thread-306323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:46:30.490 [DEBUG] [Thread-306323] [transport.py] [_log()] Compression: none
2025-12-24T17:46:30.490 [DEBUG] [Thread-306323] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:46:30.521 [DEBUG] [Thread-306323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:46:30.525 [DEBUG] [Thread-306323] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:46:30.527 [DEBUG] [Thread-306323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:46:30.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:46:30.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:46:30.531 [DEBUG] [Thread-306323] [transport.py] [_log()] userauth is OK
2025-12-24T17:46:30.532 [DEBUG] [Thread-306323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:46:30.532 [DEBUG] [Thread-306323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:46:30.532 [DEBUG] [Thread-306323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:46:30.532 [DEBUG] [Thread-306323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:46:30.568 [INFO] [Thread-306323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:46:30.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:46:31.216 [DEBUG] [Thread-306323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:46:31.216 [DEBUG] [Thread-306323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:46:31.217 [DEBUG] [Thread-306323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:46:31.257 [DEBUG] [Thread-306323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:46:31.257 [DEBUG] [Thread-306323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:46:31.260 [DEBUG] [Thread-306323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:46:31.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:46:31.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:46:31.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:46:31.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:46:31.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:46:31.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:46:31.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:46:31.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:46:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:46:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.657011 -999.00  +23.20  18.20     30   +5.00 1 1 1 1 1   887    0 17.75 -17.25 ----- 18.2 18.2 156.6 24.9 27.0 -26.3 27.3 -25.4 28.7 -24.3 28.9 -25.2
2025-12-24T17:46:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:46:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:46:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.657011
2025-12-24T17:46:31.299 [DEBUG] [Thread-306323] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:46:31.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:46:31.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:46:31.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:46:31.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:46:31.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:46:31.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:46:03', tmtdew=21.07, humidity=24.83, cloud=0.0, wind=27.9, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:46:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:46:31.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:46:31.400 [DEBUG] [Thread-306326] [transport.py] [_log()] starting thread (client mode): 0xf81c2050
2025-12-24T17:46:31.400 [DEBUG] [Thread-306326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:46:31.415 [DEBUG] [Thread-306326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:46:31.415 [INFO] [Thread-306326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:46:31.422 [DEBUG] [Thread-306326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:46:31.422 [DEBUG] [Thread-306326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:46:31.422 [DEBUG] [Thread-306326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:46:31.422 [DEBUG] [Thread-306326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:46:31.422 [DEBUG] [Thread-306326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] client lang: <none>
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] server lang: <none>
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] kex follows: False
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] Compression: none
2025-12-24T17:46:31.423 [DEBUG] [Thread-306326] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:46:31.479 [DEBUG] [Thread-306326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:46:31.480 [DEBUG] [Thread-306326] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:46:31.480 [DEBUG] [Thread-306326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:46:31.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:46:31.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:46:31.535 [DEBUG] [Thread-306326] [transport.py] [_log()] userauth is OK
2025-12-24T17:46:31.536 [DEBUG] [Thread-306326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:46:31.536 [DEBUG] [Thread-306326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:46:31.536 [DEBUG] [Thread-306326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:46:31.536 [DEBUG] [Thread-306326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:46:31.556 [INFO] [Thread-306326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:46:31.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:46:31.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:46:32.386 [DEBUG] [Thread-306326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:46:32.386 [DEBUG] [Thread-306326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:46:32.433 [DEBUG] [Thread-306326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:46:32.433 [DEBUG] [Thread-306326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:46:32.441 [DEBUG] [Thread-306326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:46:32.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:46:32.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:46:32.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:46:32.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:46:32.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:46:32.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:46:32.477 [DEBUG] [Thread-306326] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:46:35.534 [DEBUG] [Thread-306328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:46:35.933 [DEBUG] [Thread-306329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:46:45.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:46:45.313 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:46:50.705 [DEBUG] [Thread-306330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:47:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:47:02.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:47:02.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:47:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 46, 36), 20.94, 25.33, 0.0, 31.57, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:47:04.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:46:36
2025-12-24T17:47:04.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:47:04.665 [DEBUG] [Thread-306331] [transport.py] [_log()] starting thread (client mode): 0xf03bca90
2025-12-24T17:47:04.666 [DEBUG] [Thread-306331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:47:04.676 [DEBUG] [Thread-306331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:47:04.677 [INFO] [Thread-306331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:47:04.681 [DEBUG] [Thread-306331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:47:04.681 [DEBUG] [Thread-306331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] client lang: <none>
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] server lang: <none>
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] kex follows: False
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:47:04.682 [DEBUG] [Thread-306331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:47:04.683 [DEBUG] [Thread-306331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:47:04.683 [DEBUG] [Thread-306331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:47:04.683 [DEBUG] [Thread-306331] [transport.py] [_log()] Compression: none
2025-12-24T17:47:04.683 [DEBUG] [Thread-306331] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:47:04.719 [DEBUG] [Thread-306331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:47:04.724 [DEBUG] [Thread-306331] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:47:04.725 [DEBUG] [Thread-306331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:47:04.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:47:04.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:47:04.731 [DEBUG] [Thread-306331] [transport.py] [_log()] userauth is OK
2025-12-24T17:47:04.732 [DEBUG] [Thread-306331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:47:04.732 [DEBUG] [Thread-306331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:47:04.732 [DEBUG] [Thread-306331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:47:04.732 [DEBUG] [Thread-306331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:47:04.769 [INFO] [Thread-306331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:47:04.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:47:05.600 [DEBUG] [Thread-306331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:47:05.600 [DEBUG] [Thread-306331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:47:05.602 [DEBUG] [Thread-306331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:47:05.641 [DEBUG] [Thread-306331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:47:05.642 [DEBUG] [Thread-306331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:47:05.645 [DEBUG] [Thread-306331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:47:05.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:47:05.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:47:05.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:47:05.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:47:05.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:47:05.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:47:05.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:47:05.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:47:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:47:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.657358 -999.00  +23.10  20.02     31   +5.10 1 1 1 1 1   887    0 17.80 -15.52 ----- 20.0 20.0 142.4 28.7 27.0 -25.3 27.3 -25.0 28.7 -24.1 28.9 -26.3
2025-12-24T17:47:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:47:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:47:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.657358
2025-12-24T17:47:05.680 [DEBUG] [Thread-306331] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:47:05.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:47:05.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:47:05.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:47:05.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:47:05.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:47:05.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:46:36', tmtdew=20.94, humidity=25.33, cloud=0.0, wind=31.57, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:46:35.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:47:05.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:47:05.799 [DEBUG] [Thread-306334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:47:05.804 [DEBUG] [Thread-306335] [transport.py] [_log()] starting thread (client mode): 0xf81c0520
2025-12-24T17:47:05.804 [DEBUG] [Thread-306335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:47:05.818 [DEBUG] [Thread-306335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:47:05.818 [INFO] [Thread-306335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:47:05.825 [DEBUG] [Thread-306335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:47:05.825 [DEBUG] [Thread-306335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:47:05.825 [DEBUG] [Thread-306335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:47:05.825 [DEBUG] [Thread-306335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:47:05.825 [DEBUG] [Thread-306335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:47:05.825 [DEBUG] [Thread-306335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:47:05.825 [DEBUG] [Thread-306335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:47:05.825 [DEBUG] [Thread-306335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] client lang: <none>
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] server lang: <none>
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] kex follows: False
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] Compression: none
2025-12-24T17:47:05.826 [DEBUG] [Thread-306335] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:47:05.887 [DEBUG] [Thread-306335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:47:05.888 [DEBUG] [Thread-306335] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:47:05.888 [DEBUG] [Thread-306335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:47:05.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:47:05.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:47:05.943 [DEBUG] [Thread-306335] [transport.py] [_log()] userauth is OK
2025-12-24T17:47:05.943 [DEBUG] [Thread-306335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:47:05.943 [DEBUG] [Thread-306335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:47:05.943 [DEBUG] [Thread-306335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:47:05.943 [DEBUG] [Thread-306335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:47:05.957 [INFO] [Thread-306335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:47:05.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:47:05.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:47:06.831 [DEBUG] [Thread-306335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:47:06.831 [DEBUG] [Thread-306335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:47:06.879 [DEBUG] [Thread-306335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:47:06.879 [DEBUG] [Thread-306335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:47:06.889 [DEBUG] [Thread-306335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:47:06.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:47:06.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')
2025-12-24T17:47:06.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:47:06.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:47:06.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:47:06.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:47:06.927 [DEBUG] [Thread-306335] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:47:20.990 [DEBUG] [Thread-306337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:47:36.129 [DEBUG] [Thread-306338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:47:36.186 [DEBUG] [Thread-306339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:47:36.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:47:36.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:47:37.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:47:38.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 47, 9), 20.9, 25.38, 0.0, 29.91, 23.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:47:38.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:47:09
2025-12-24T17:47:38.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:47:38.793 [DEBUG] [Thread-306340] [transport.py] [_log()] starting thread (client mode): 0xf81f0880
2025-12-24T17:47:38.794 [DEBUG] [Thread-306340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:47:38.807 [DEBUG] [Thread-306340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:47:38.807 [INFO] [Thread-306340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:47:38.814 [DEBUG] [Thread-306340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:47:38.815 [DEBUG] [Thread-306340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:47:38.815 [DEBUG] [Thread-306340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:47:38.815 [DEBUG] [Thread-306340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:47:38.815 [DEBUG] [Thread-306340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:47:38.815 [DEBUG] [Thread-306340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:47:38.815 [DEBUG] [Thread-306340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:47:38.815 [DEBUG] [Thread-306340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:47:38.815 [DEBUG] [Thread-306340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:47:38.816 [DEBUG] [Thread-306340] [transport.py] [_log()] client lang: <none>
2025-12-24T17:47:38.816 [DEBUG] [Thread-306340] [transport.py] [_log()] server lang: <none>
2025-12-24T17:47:38.816 [DEBUG] [Thread-306340] [transport.py] [_log()] kex follows: False
2025-12-24T17:47:38.816 [DEBUG] [Thread-306340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:47:38.817 [DEBUG] [Thread-306340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:47:38.817 [DEBUG] [Thread-306340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:47:38.817 [DEBUG] [Thread-306340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:47:38.817 [DEBUG] [Thread-306340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:47:38.817 [DEBUG] [Thread-306340] [transport.py] [_log()] Compression: none
2025-12-24T17:47:38.818 [DEBUG] [Thread-306340] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:47:38.860 [DEBUG] [Thread-306340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:47:38.864 [DEBUG] [Thread-306340] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:47:38.866 [DEBUG] [Thread-306340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:47:38.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:47:38.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:47:38.872 [DEBUG] [Thread-306340] [transport.py] [_log()] userauth is OK
2025-12-24T17:47:38.873 [DEBUG] [Thread-306340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:47:38.873 [DEBUG] [Thread-306340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:47:38.873 [DEBUG] [Thread-306340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:47:38.873 [DEBUG] [Thread-306340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:47:38.900 [INFO] [Thread-306340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:47:38.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:47:39.503 [DEBUG] [Thread-306340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:47:39.503 [DEBUG] [Thread-306340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:47:39.513 [DEBUG] [Thread-306340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:47:39.544 [DEBUG] [Thread-306340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:47:39.545 [DEBUG] [Thread-306340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:47:39.548 [DEBUG] [Thread-306340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:47:39.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:47:39.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:47:39.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:47:39.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:47:39.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:47:39.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:47:39.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:47:39.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:47:39.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:47:39.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.657706 -999.00  +23.20  19.96     30   +5.10 1 1 1 1 1   887    0 18.22 -14.60 ----- 20.0 20.0 159.1 26.8 26.9 -26.5 27.4 -25.0 28.7 -25.0 28.9 -26.4
2025-12-24T17:47:39.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:47:39.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:47:39.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.657706
2025-12-24T17:47:39.578 [DEBUG] [Thread-306340] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:47:39.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:47:39.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:47:39.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:47:39.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:47:39.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:47:39.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:47:09', tmtdew=20.9, humidity=25.38, cloud=0.0, wind=29.91, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:47:05.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:47:39.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:47:39.672 [DEBUG] [Thread-306343] [transport.py] [_log()] starting thread (client mode): 0xf03bc0d0
2025-12-24T17:47:39.672 [DEBUG] [Thread-306343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:47:39.687 [DEBUG] [Thread-306343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:47:39.687 [INFO] [Thread-306343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] client lang: <none>
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] server lang: <none>
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] kex follows: False
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] Compression: none
2025-12-24T17:47:39.695 [DEBUG] [Thread-306343] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:47:39.750 [DEBUG] [Thread-306343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:47:39.750 [DEBUG] [Thread-306343] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:47:39.750 [DEBUG] [Thread-306343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:47:39.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:47:39.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:47:39.807 [DEBUG] [Thread-306343] [transport.py] [_log()] userauth is OK
2025-12-24T17:47:39.807 [DEBUG] [Thread-306343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:47:39.808 [DEBUG] [Thread-306343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:47:39.808 [DEBUG] [Thread-306343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:47:39.808 [DEBUG] [Thread-306343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:47:39.822 [INFO] [Thread-306343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:47:39.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:47:39.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:47:40.727 [DEBUG] [Thread-306343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:47:40.727 [DEBUG] [Thread-306343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:47:40.775 [DEBUG] [Thread-306343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:47:40.775 [DEBUG] [Thread-306343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:47:40.784 [DEBUG] [Thread-306343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:47:40.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:47:40.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:47: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
2025-12-24T17:47:40.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:47:40.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:47:40.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:47:40.823 [DEBUG] [Thread-306343] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:47:45.470 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:47:45.482 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:47:51.254 [DEBUG] [Thread-306345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:48:06.445 [DEBUG] [Thread-306346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:48:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:48:10.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:48:10.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:48:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 47, 42), 21.03, 25.33, 0.0, 30.72, 23.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:48:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:47:42
2025-12-24T17:48:11.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:48:11.969 [DEBUG] [Thread-306347] [transport.py] [_log()] starting thread (client mode): 0xf81c2d40
2025-12-24T17:48:11.969 [DEBUG] [Thread-306347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:48:11.983 [DEBUG] [Thread-306347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:48:11.983 [INFO] [Thread-306347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:48:11.988 [DEBUG] [Thread-306347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:48:11.988 [DEBUG] [Thread-306347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:48:11.988 [DEBUG] [Thread-306347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:48:11.988 [DEBUG] [Thread-306347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:48:11.988 [DEBUG] [Thread-306347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:48:11.988 [DEBUG] [Thread-306347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:48:11.988 [DEBUG] [Thread-306347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:48:11.988 [DEBUG] [Thread-306347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] client lang: <none>
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] server lang: <none>
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] kex follows: False
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] Compression: none
2025-12-24T17:48:11.989 [DEBUG] [Thread-306347] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:48:12.022 [DEBUG] [Thread-306347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:48:12.026 [DEBUG] [Thread-306347] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:48:12.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:48:12.028 [DEBUG] [Thread-306347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:48:12.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:48:12.030 [DEBUG] [Thread-306347] [transport.py] [_log()] userauth is OK
2025-12-24T17:48:12.030 [DEBUG] [Thread-306347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:48:12.030 [DEBUG] [Thread-306347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:48:12.030 [DEBUG] [Thread-306347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:48:12.030 [DEBUG] [Thread-306347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:48:12.048 [INFO] [Thread-306347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:48:12.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:48:12.808 [DEBUG] [Thread-306347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:48:12.808 [DEBUG] [Thread-306347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:48:12.809 [DEBUG] [Thread-306347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:48:12.849 [DEBUG] [Thread-306347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:48:12.849 [DEBUG] [Thread-306347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:48:12.851 [DEBUG] [Thread-306347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:48:12.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:48:12.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:48:12.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:48:12.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:48:12.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:48:12.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:48:12.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:48:12.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:48:12.874 [DEBUG] [Thread-306347] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:48:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:48:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.658053 -999.00  +23.10  19.93     31   +5.10 1 1 1 1 1   887    0 17.94 -14.25 ----- 19.9 19.9 149.9 32.0 26.9 -25.7 27.2 -25.3 28.6 -23.4 28.8 -25.9
2025-12-24T17:48:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:48:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:48:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.658053
2025-12-24T17:48:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:48:12.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:48:12.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:48:12.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:48:12.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:48:12.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:47:42', tmtdew=21.03, humidity=25.33, cloud=0.0, wind=30.72, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:47:35.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:48:12.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:48:12.994 [DEBUG] [Thread-306350] [transport.py] [_log()] starting thread (client mode): 0xf574f3a0
2025-12-24T17:48:12.995 [DEBUG] [Thread-306350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:48:13.010 [DEBUG] [Thread-306350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:48:13.010 [INFO] [Thread-306350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] client lang: <none>
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] server lang: <none>
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] kex follows: False
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:48:13.017 [DEBUG] [Thread-306350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:48:13.021 [DEBUG] [Thread-306350] [transport.py] [_log()] Compression: none
2025-12-24T17:48:13.021 [DEBUG] [Thread-306350] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:48:13.074 [DEBUG] [Thread-306350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:48:13.074 [DEBUG] [Thread-306350] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:48:13.074 [DEBUG] [Thread-306350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:48:13.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:48:13.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:48:13.131 [DEBUG] [Thread-306350] [transport.py] [_log()] userauth is OK
2025-12-24T17:48:13.131 [DEBUG] [Thread-306350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:48:13.131 [DEBUG] [Thread-306350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:48:13.131 [DEBUG] [Thread-306350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:48:13.131 [DEBUG] [Thread-306350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:48:13.145 [INFO] [Thread-306350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:48:13.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:48:13.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:48:13.993 [DEBUG] [Thread-306350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:48:13.993 [DEBUG] [Thread-306350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:48:14.039 [DEBUG] [Thread-306350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:48:14.039 [DEBUG] [Thread-306350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:48:14.049 [DEBUG] [Thread-306350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:48:14.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:48:14.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:48:14.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:48:14.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:48:14.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:48:14.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:48:14.087 [DEBUG] [Thread-306350] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:48:21.608 [DEBUG] [Thread-306352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:48:36.455 [DEBUG] [Thread-306353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:48:36.887 [DEBUG] [Thread-306354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:48:44.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:48:44.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:48:44.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:48:45.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 48, 15), 21.05, 25.28, 0.0, 31.09, 23.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:48:45.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:48:15
2025-12-24T17:48:45.627 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:48:45.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:48:45.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:48:45.823 [DEBUG] [Thread-306355] [transport.py] [_log()] starting thread (client mode): 0xf81f05e0
2025-12-24T17:48:45.824 [DEBUG] [Thread-306355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:48:45.834 [DEBUG] [Thread-306355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:48:45.835 [INFO] [Thread-306355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:48:45.840 [DEBUG] [Thread-306355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] client lang: <none>
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] server lang: <none>
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] kex follows: False
2025-12-24T17:48:45.841 [DEBUG] [Thread-306355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:48:45.842 [DEBUG] [Thread-306355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:48:45.842 [DEBUG] [Thread-306355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:48:45.842 [DEBUG] [Thread-306355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:48:45.842 [DEBUG] [Thread-306355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:48:45.842 [DEBUG] [Thread-306355] [transport.py] [_log()] Compression: none
2025-12-24T17:48:45.842 [DEBUG] [Thread-306355] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:48:45.881 [DEBUG] [Thread-306355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:48:45.886 [DEBUG] [Thread-306355] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:48:45.888 [DEBUG] [Thread-306355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:48:45.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:48:45.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:48:45.894 [DEBUG] [Thread-306355] [transport.py] [_log()] userauth is OK
2025-12-24T17:48:45.894 [DEBUG] [Thread-306355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:48:45.895 [DEBUG] [Thread-306355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:48:45.895 [DEBUG] [Thread-306355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:48:45.895 [DEBUG] [Thread-306355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:48:45.923 [INFO] [Thread-306355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:48:45.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:48:46.585 [DEBUG] [Thread-306355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:48:46.585 [DEBUG] [Thread-306355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:48:46.586 [DEBUG] [Thread-306355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:48:46.627 [DEBUG] [Thread-306355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:48:46.627 [DEBUG] [Thread-306355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:48:46.630 [DEBUG] [Thread-306355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:48:46.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:48:46.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:48:46.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:48:46.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:48:46.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:48:46.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:48:46.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:48:46.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:48:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:48:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.658400 -999.00  +23.20  20.46     30   +5.10 1 1 1 1 1   887    0 17.97 -14.55 ----- 20.5 20.5 137.0 27.5 27.0 -25.5 27.2 -24.7 28.6 -23.3 28.9 -25.1
2025-12-24T17:48:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:48:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:48:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.658400
2025-12-24T17:48:46.663 [DEBUG] [Thread-306355] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:48:46.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:48:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:48:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:48:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:48:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:48:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:48:15', tmtdew=21.05, humidity=25.28, cloud=0.0, wind=31.09, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:48:05.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:48:46.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:48:46.764 [DEBUG] [Thread-306358] [transport.py] [_log()] starting thread (client mode): 0xf81c3160
2025-12-24T17:48:46.764 [DEBUG] [Thread-306358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:48:46.783 [DEBUG] [Thread-306358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:48:46.783 [INFO] [Thread-306358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] client lang: <none>
2025-12-24T17:48:46.790 [DEBUG] [Thread-306358] [transport.py] [_log()] server lang: <none>
2025-12-24T17:48:46.791 [DEBUG] [Thread-306358] [transport.py] [_log()] kex follows: False
2025-12-24T17:48:46.791 [DEBUG] [Thread-306358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:48:46.791 [DEBUG] [Thread-306358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:48:46.791 [DEBUG] [Thread-306358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:48:46.791 [DEBUG] [Thread-306358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:48:46.791 [DEBUG] [Thread-306358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:48:46.791 [DEBUG] [Thread-306358] [transport.py] [_log()] Compression: none
2025-12-24T17:48:46.791 [DEBUG] [Thread-306358] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:48:46.846 [DEBUG] [Thread-306358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:48:46.846 [DEBUG] [Thread-306358] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:48:46.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:48:46.847 [DEBUG] [Thread-306358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:48:46.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:48:46.903 [DEBUG] [Thread-306358] [transport.py] [_log()] userauth is OK
2025-12-24T17:48:46.904 [DEBUG] [Thread-306358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:48:46.904 [DEBUG] [Thread-306358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:48:46.904 [DEBUG] [Thread-306358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:48:46.904 [DEBUG] [Thread-306358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:48:46.925 [INFO] [Thread-306358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:48:46.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:48:46.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:48:47.755 [DEBUG] [Thread-306358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:48:47.755 [DEBUG] [Thread-306358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:48:47.802 [DEBUG] [Thread-306358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:48:47.802 [DEBUG] [Thread-306358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:48:47.810 [DEBUG] [Thread-306358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:48:47.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:48: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')
2025-12-24T17:48:47.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:48:47.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:48:47.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:48:47.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:48:47.843 [DEBUG] [Thread-306358] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:48:51.978 [DEBUG] [Thread-306360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:49:07.235 [DEBUG] [Thread-306361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:49:17.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:49:17.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:49:17.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:49:19.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 48, 48), 21.19, 24.65, 0.0, 32.31, 23.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:49:19.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:48:48
2025-12-24T17:49:19.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:49:19.759 [DEBUG] [Thread-306362] [transport.py] [_log()] starting thread (client mode): 0xf81c0ee0
2025-12-24T17:49:19.760 [DEBUG] [Thread-306362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:49:19.760 [DEBUG] [Thread-306362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:49:19.760 [INFO] [Thread-306362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] client lang: <none>
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] server lang: <none>
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] kex follows: False
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:49:19.764 [DEBUG] [Thread-306362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:49:19.765 [DEBUG] [Thread-306362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:49:19.765 [DEBUG] [Thread-306362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:49:19.765 [DEBUG] [Thread-306362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:49:19.765 [DEBUG] [Thread-306362] [transport.py] [_log()] Compression: none
2025-12-24T17:49:19.765 [DEBUG] [Thread-306362] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:49:19.794 [DEBUG] [Thread-306362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:49:19.798 [DEBUG] [Thread-306362] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:49:19.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:49:19.801 [DEBUG] [Thread-306362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:49:19.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:49:19.805 [DEBUG] [Thread-306362] [transport.py] [_log()] userauth is OK
2025-12-24T17:49:19.805 [DEBUG] [Thread-306362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:49:19.806 [DEBUG] [Thread-306362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:49:19.806 [DEBUG] [Thread-306362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:49:19.806 [DEBUG] [Thread-306362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:49:19.833 [INFO] [Thread-306362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:49:19.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:49:20.493 [DEBUG] [Thread-306362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:49:20.493 [DEBUG] [Thread-306362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:49:20.494 [DEBUG] [Thread-306362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:49:20.534 [DEBUG] [Thread-306362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:49:20.534 [DEBUG] [Thread-306362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:49:20.537 [DEBUG] [Thread-306362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:49:20.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:49:20.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:49:20.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:49:20.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:49:20.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:49:20.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:49:20.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:49:20.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:49:20.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:49:20.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.658747 -999.00  +23.40  20.30     30   +5.10 1 1 1 1 1   887    0 17.65 -13.88 ----- 20.3 20.3 147.4 28.8 27.1 -25.2 27.3 -24.5 28.7 -22.8 28.9 -24.4
2025-12-24T17:49:20.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:49:20.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:49:20.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.658747
2025-12-24T17:49:20.565 [DEBUG] [Thread-306362] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:49:20.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:49:20.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:49:20.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:49:20.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:49:20.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:49:20.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:48:48', tmtdew=21.19, humidity=24.65, cloud=0.0, wind=32.31, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:48:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:49:20.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:49:20.666 [DEBUG] [Thread-306365] [transport.py] [_log()] starting thread (client mode): 0xf8188be0
2025-12-24T17:49:20.666 [DEBUG] [Thread-306365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:49:20.681 [DEBUG] [Thread-306365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:49:20.681 [INFO] [Thread-306365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] client lang: <none>
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] server lang: <none>
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] kex follows: False
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] Compression: none
2025-12-24T17:49:20.689 [DEBUG] [Thread-306365] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:49:20.746 [DEBUG] [Thread-306365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:49:20.746 [DEBUG] [Thread-306365] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:49:20.746 [DEBUG] [Thread-306365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:49:20.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:49:20.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:49:20.803 [DEBUG] [Thread-306365] [transport.py] [_log()] userauth is OK
2025-12-24T17:49:20.803 [DEBUG] [Thread-306365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:49:20.803 [DEBUG] [Thread-306365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:49:20.804 [DEBUG] [Thread-306365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:49:20.804 [DEBUG] [Thread-306365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:49:20.820 [INFO] [Thread-306365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:49:20.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:49:20.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:49:21.677 [DEBUG] [Thread-306365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:49:21.678 [DEBUG] [Thread-306365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:49:21.716 [DEBUG] [Thread-306365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:49:21.716 [DEBUG] [Thread-306365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:49:21.725 [DEBUG] [Thread-306365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:49:21.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:49:21.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:49:21.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:49:21.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:49:21.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:49:21.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:49:21.763 [DEBUG] [Thread-306365] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:49:22.348 [DEBUG] [Thread-306367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:49:36.715 [DEBUG] [Thread-306368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:49:37.484 [DEBUG] [Thread-306369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:49:45.788 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:49:45.792 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:49:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:49:51.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:49:51.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:49:52.561 [DEBUG] [Thread-306370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:49:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 49, 21), 21.25, 24.57, 0.0, 30.98, 23.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:49:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:49:21
2025-12-24T17:49:54.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:49:54.325 [DEBUG] [Thread-306371] [transport.py] [_log()] starting thread (client mode): 0xf578baf0
2025-12-24T17:49:54.326 [DEBUG] [Thread-306371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:49:54.338 [DEBUG] [Thread-306371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:49:54.338 [INFO] [Thread-306371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:49:54.343 [DEBUG] [Thread-306371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:49:54.343 [DEBUG] [Thread-306371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:49:54.343 [DEBUG] [Thread-306371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] client lang: <none>
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] server lang: <none>
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] kex follows: False
2025-12-24T17:49:54.344 [DEBUG] [Thread-306371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:49:54.345 [DEBUG] [Thread-306371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:49:54.345 [DEBUG] [Thread-306371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:49:54.345 [DEBUG] [Thread-306371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:49:54.345 [DEBUG] [Thread-306371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:49:54.345 [DEBUG] [Thread-306371] [transport.py] [_log()] Compression: none
2025-12-24T17:49:54.345 [DEBUG] [Thread-306371] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:49:54.380 [DEBUG] [Thread-306371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:49:54.386 [DEBUG] [Thread-306371] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:49:54.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:49:54.390 [DEBUG] [Thread-306371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:49:54.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:49:54.394 [DEBUG] [Thread-306371] [transport.py] [_log()] userauth is OK
2025-12-24T17:49:54.394 [DEBUG] [Thread-306371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:49:54.395 [DEBUG] [Thread-306371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:49:54.395 [DEBUG] [Thread-306371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:49:54.395 [DEBUG] [Thread-306371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:49:54.418 [INFO] [Thread-306371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:49:54.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:49:55.032 [DEBUG] [Thread-306371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:49:55.032 [DEBUG] [Thread-306371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:49:55.034 [DEBUG] [Thread-306371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:49:55.064 [DEBUG] [Thread-306371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:49:55.064 [DEBUG] [Thread-306371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:49:55.067 [DEBUG] [Thread-306371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:49:55.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:49:55.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:49:55.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:49:55.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:49:55.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:49:55.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:49:55.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:49:55.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:49:55.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:49:55.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.659094 -999.00  +23.10  25.34     30   +5.00 1 1 1 1 1   887    0 17.76 -12.84 ----- 25.3 25.3 144.2 33.0 26.9 -25.4 27.3 -25.3 28.7 -23.7 28.8 -24.8
2025-12-24T17:49:55.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:49:55.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:49:55.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.659094
2025-12-24T17:49:55.095 [DEBUG] [Thread-306371] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:49:55.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:49:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:49:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:49:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:49:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:49:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:49:21', tmtdew=21.25, humidity=24.57, cloud=0.0, wind=30.98, temperature=23.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:49:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:49:55.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:49:55.202 [DEBUG] [Thread-306374] [transport.py] [_log()] starting thread (client mode): 0xf03bc790
2025-12-24T17:49:55.202 [DEBUG] [Thread-306374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:49:55.217 [DEBUG] [Thread-306374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:49:55.217 [INFO] [Thread-306374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] client lang: <none>
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] server lang: <none>
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] kex follows: False
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:49:55.225 [DEBUG] [Thread-306374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:49:55.226 [DEBUG] [Thread-306374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:49:55.226 [DEBUG] [Thread-306374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:49:55.226 [DEBUG] [Thread-306374] [transport.py] [_log()] Compression: none
2025-12-24T17:49:55.226 [DEBUG] [Thread-306374] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:49:55.283 [DEBUG] [Thread-306374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:49:55.284 [DEBUG] [Thread-306374] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:49:55.284 [DEBUG] [Thread-306374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:49:55.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:49:55.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:49:55.339 [DEBUG] [Thread-306374] [transport.py] [_log()] userauth is OK
2025-12-24T17:49:55.339 [DEBUG] [Thread-306374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:49:55.339 [DEBUG] [Thread-306374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:49:55.339 [DEBUG] [Thread-306374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:49:55.339 [DEBUG] [Thread-306374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:49:55.353 [INFO] [Thread-306374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:49:55.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:49:55.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:49:56.179 [DEBUG] [Thread-306374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:49:56.179 [DEBUG] [Thread-306374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:49:56.226 [DEBUG] [Thread-306374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:49:56.227 [DEBUG] [Thread-306374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:49:56.235 [DEBUG] [Thread-306374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:49:56.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:49:56.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:49:56.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
2025-12-24T17:49:56.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:49:56.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:49:56.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:49:56.268 [DEBUG] [Thread-306374] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:50:07.634 [DEBUG] [Thread-306376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:50:22.847 [DEBUG] [Thread-306377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:50:26.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:50:26.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:50:26.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:50:27.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 49, 55), 21.3, 24.95, 0.0, 25.69, 23.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:50:27.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:49:55
2025-12-24T17:50:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:50:28.180 [DEBUG] [Thread-306378] [transport.py] [_log()] starting thread (client mode): 0xf574e0e0
2025-12-24T17:50:28.181 [DEBUG] [Thread-306378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:50:28.191 [DEBUG] [Thread-306378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:50:28.192 [INFO] [Thread-306378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:50:28.198 [DEBUG] [Thread-306378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:50:28.199 [DEBUG] [Thread-306378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:50:28.199 [DEBUG] [Thread-306378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:50:28.199 [DEBUG] [Thread-306378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:50:28.199 [DEBUG] [Thread-306378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:50:28.199 [DEBUG] [Thread-306378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:50:28.199 [DEBUG] [Thread-306378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:50:28.199 [DEBUG] [Thread-306378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:50:28.200 [DEBUG] [Thread-306378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:50:28.200 [DEBUG] [Thread-306378] [transport.py] [_log()] client lang: <none>
2025-12-24T17:50:28.200 [DEBUG] [Thread-306378] [transport.py] [_log()] server lang: <none>
2025-12-24T17:50:28.200 [DEBUG] [Thread-306378] [transport.py] [_log()] kex follows: False
2025-12-24T17:50:28.200 [DEBUG] [Thread-306378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:50:28.201 [DEBUG] [Thread-306378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:50:28.201 [DEBUG] [Thread-306378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:50:28.201 [DEBUG] [Thread-306378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:50:28.202 [DEBUG] [Thread-306378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:50:28.202 [DEBUG] [Thread-306378] [transport.py] [_log()] Compression: none
2025-12-24T17:50:28.202 [DEBUG] [Thread-306378] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:50:28.239 [DEBUG] [Thread-306378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:50:28.243 [DEBUG] [Thread-306378] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:50:28.245 [DEBUG] [Thread-306378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:50:28.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:50:28.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:50:28.251 [DEBUG] [Thread-306378] [transport.py] [_log()] userauth is OK
2025-12-24T17:50:28.251 [DEBUG] [Thread-306378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:50:28.252 [DEBUG] [Thread-306378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:50:28.252 [DEBUG] [Thread-306378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:50:28.252 [DEBUG] [Thread-306378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:50:28.282 [INFO] [Thread-306378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:50:28.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:50:28.939 [DEBUG] [Thread-306378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:50:28.939 [DEBUG] [Thread-306378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:50:28.940 [DEBUG] [Thread-306378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:50:28.979 [DEBUG] [Thread-306378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:50:28.979 [DEBUG] [Thread-306378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:50:28.982 [DEBUG] [Thread-306378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:50:28.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:50:28.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:50:28.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:50:28.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:50:29.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:50:29.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:50:29.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:50:29.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:50:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:50:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.659442 -999.00  +23.10  23.78     30   +5.00 1 1 1 1 1   887    0 17.40 -13.02 ----- 23.8 23.8 143.4 29.4 26.9 -25.4 27.3 -24.5 28.7 -22.8 28.9 -25.6
2025-12-24T17:50:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:50:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:50:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.659442
2025-12-24T17:50:29.009 [DEBUG] [Thread-306378] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:50:29.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:50:29.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:50:29.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:50:29.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:50:29.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:50:29.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:49:55', tmtdew=21.3, humidity=24.95, cloud=0.0, wind=25.69, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:49:35.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:50:29.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:50:29.110 [DEBUG] [Thread-306381] [transport.py] [_log()] starting thread (client mode): 0xf574c4f0
2025-12-24T17:50:29.110 [DEBUG] [Thread-306381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:50:29.125 [DEBUG] [Thread-306381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:50:29.125 [INFO] [Thread-306381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:50:29.132 [DEBUG] [Thread-306381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] client lang: <none>
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] server lang: <none>
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] kex follows: False
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] Compression: none
2025-12-24T17:50:29.133 [DEBUG] [Thread-306381] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:50:29.194 [DEBUG] [Thread-306381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:50:29.194 [DEBUG] [Thread-306381] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:50:29.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:50:29.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:50:29.195 [DEBUG] [Thread-306381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:50:29.251 [DEBUG] [Thread-306381] [transport.py] [_log()] userauth is OK
2025-12-24T17:50:29.251 [DEBUG] [Thread-306381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:50:29.251 [DEBUG] [Thread-306381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:50:29.251 [DEBUG] [Thread-306381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:50:29.251 [DEBUG] [Thread-306381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:50:29.269 [INFO] [Thread-306381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:50:29.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:50:29.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:50:30.165 [DEBUG] [Thread-306381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:50:30.165 [DEBUG] [Thread-306381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:50:30.212 [DEBUG] [Thread-306381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:50:30.212 [DEBUG] [Thread-306381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:50:30.220 [DEBUG] [Thread-306381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:50:30.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:50:30.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:50:30.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:50:30.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:50:30.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:50:30.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:50:30.254 [DEBUG] [Thread-306381] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:50:37.006 [DEBUG] [Thread-306383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:50:38.056 [DEBUG] [Thread-306384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:50:45.938 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:50:45.942 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:50:53.261 [DEBUG] [Thread-306385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:51:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:51:00.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:51:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:51:01.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 50, 27), 21.33, 24.9, 0.0, 26.22, 23.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:51:01.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:50:27
2025-12-24T17:51:01.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:51:02.073 [DEBUG] [Thread-306386] [transport.py] [_log()] starting thread (client mode): 0xf81c1ed0
2025-12-24T17:51:02.074 [DEBUG] [Thread-306386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:51:02.082 [DEBUG] [Thread-306386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:51:02.082 [INFO] [Thread-306386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:51:02.086 [DEBUG] [Thread-306386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] client lang: <none>
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] server lang: <none>
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] kex follows: False
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:51:02.087 [DEBUG] [Thread-306386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:51:02.088 [DEBUG] [Thread-306386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:51:02.088 [DEBUG] [Thread-306386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:51:02.088 [DEBUG] [Thread-306386] [transport.py] [_log()] Compression: none
2025-12-24T17:51:02.088 [DEBUG] [Thread-306386] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:51:02.121 [DEBUG] [Thread-306386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:51:02.125 [DEBUG] [Thread-306386] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:51:02.126 [DEBUG] [Thread-306386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:51:02.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:51:02.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:51:02.129 [DEBUG] [Thread-306386] [transport.py] [_log()] userauth is OK
2025-12-24T17:51:02.130 [DEBUG] [Thread-306386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:51:02.130 [DEBUG] [Thread-306386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:51:02.130 [DEBUG] [Thread-306386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:51:02.130 [DEBUG] [Thread-306386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:51:02.148 [INFO] [Thread-306386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:51:02.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:51:02.782 [DEBUG] [Thread-306386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:51:02.782 [DEBUG] [Thread-306386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:51:02.950 [DEBUG] [Thread-306386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:51:02.951 [DEBUG] [Thread-306386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:51:02.951 [DEBUG] [Thread-306386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:51:02.953 [DEBUG] [Thread-306386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:51:02.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:51:02.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:51:02.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:51:02.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:51:02.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:51:02.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:51:02.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:51:02.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:51:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:51:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.659788 -999.00  +23.20  14.49     31   +5.10 1 1 1 1 1   887    0 17.56 -14.35 ----- 14.5 14.5 162.3 29.4 27.0 -25.4 27.3 -24.6 28.8 -22.9 28.9 -24.6
2025-12-24T17:51:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:51:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:51:02.977 [DEBUG] [Thread-306386] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:51:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.659788
2025-12-24T17:51:02.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:51:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:51:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:51:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:51:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:51:03.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:50:27', tmtdew=21.33, humidity=24.9, cloud=0.0, wind=26.22, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:50:05.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:51:03.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:51:03.096 [DEBUG] [Thread-306389] [transport.py] [_log()] starting thread (client mode): 0xf81e53f0
2025-12-24T17:51:03.096 [DEBUG] [Thread-306389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:51:03.111 [DEBUG] [Thread-306389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:51:03.111 [INFO] [Thread-306389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] client lang: <none>
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] server lang: <none>
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] kex follows: False
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] Compression: none
2025-12-24T17:51:03.122 [DEBUG] [Thread-306389] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:51:03.177 [DEBUG] [Thread-306389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:51:03.177 [DEBUG] [Thread-306389] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:51:03.178 [DEBUG] [Thread-306389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:51:03.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:51:03.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:51:03.238 [DEBUG] [Thread-306389] [transport.py] [_log()] userauth is OK
2025-12-24T17:51:03.238 [DEBUG] [Thread-306389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:51:03.238 [DEBUG] [Thread-306389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:51:03.238 [DEBUG] [Thread-306389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:51:03.238 [DEBUG] [Thread-306389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:51:03.257 [INFO] [Thread-306389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:51:03.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:51:03.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:51:04.102 [DEBUG] [Thread-306389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:51:04.102 [DEBUG] [Thread-306389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:51:04.150 [DEBUG] [Thread-306389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:51:04.150 [DEBUG] [Thread-306389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:51:04.158 [DEBUG] [Thread-306389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:51:04.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:51:04.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:51:04.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:51:04.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:51:04.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:51:04.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:51:04.192 [DEBUG] [Thread-306389] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:51:08.355 [DEBUG] [Thread-306391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:51:23.516 [DEBUG] [Thread-306392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:51:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:51:34.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:51:34.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:51:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 50, 27), 21.18, 24.9, 0.0, 24.42, 23.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:51:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:50:27
2025-12-24T17:51:35.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:51:36.039 [DEBUG] [Thread-306393] [transport.py] [_log()] starting thread (client mode): 0xf574f760
2025-12-24T17:51:36.040 [DEBUG] [Thread-306393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:51:36.050 [DEBUG] [Thread-306393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:51:36.050 [INFO] [Thread-306393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] client lang: <none>
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] server lang: <none>
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] kex follows: False
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:51:36.055 [DEBUG] [Thread-306393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:51:36.056 [DEBUG] [Thread-306393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:51:36.056 [DEBUG] [Thread-306393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:51:36.056 [DEBUG] [Thread-306393] [transport.py] [_log()] Compression: none
2025-12-24T17:51:36.056 [DEBUG] [Thread-306393] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:51:36.088 [DEBUG] [Thread-306393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:51:36.092 [DEBUG] [Thread-306393] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:51:36.093 [DEBUG] [Thread-306393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:51:36.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:51:36.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:51:36.097 [DEBUG] [Thread-306393] [transport.py] [_log()] userauth is OK
2025-12-24T17:51:36.097 [DEBUG] [Thread-306393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:51:36.098 [DEBUG] [Thread-306393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:51:36.098 [DEBUG] [Thread-306393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:51:36.098 [DEBUG] [Thread-306393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:51:36.116 [INFO] [Thread-306393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:51:36.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:51:36.762 [DEBUG] [Thread-306393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:51:36.762 [DEBUG] [Thread-306393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:51:36.763 [DEBUG] [Thread-306393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:51:36.804 [DEBUG] [Thread-306393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:51:36.804 [DEBUG] [Thread-306393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:51:36.806 [DEBUG] [Thread-306393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:51:36.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:51:36.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:51:36.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:51:36.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:51:36.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:51:36.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:51:36.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:51:36.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:51:36.829 [DEBUG] [Thread-306393] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:51:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:51:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.660483 -999.00  +22.90  21.56     31   +5.00 1 1 1 1 1   887    0 17.79 -16.21 ----- 21.6 21.6 139.4 26.0 26.9 -25.5 27.3 -24.7 28.7 -23.2 28.8 -26.0
2025-12-24T17:51:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:51:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:51:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.660483
2025-12-24T17:51:36.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:51:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:51:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:51:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:51:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:51:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:50:27', tmtdew=21.18, humidity=24.9, cloud=0.0, wind=24.42, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:51:05.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:51:36.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:51:36.939 [DEBUG] [Thread-306396] [transport.py] [_log()] starting thread (client mode): 0xf574f8b0
2025-12-24T17:51:36.939 [DEBUG] [Thread-306396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:51:36.956 [DEBUG] [Thread-306396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:51:36.956 [INFO] [Thread-306396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] client lang: <none>
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] server lang: <none>
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] kex follows: False
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] Compression: none
2025-12-24T17:51:36.963 [DEBUG] [Thread-306396] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:51:37.017 [DEBUG] [Thread-306396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:51:37.017 [DEBUG] [Thread-306396] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:51:37.018 [DEBUG] [Thread-306396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:51:37.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:51:37.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:51:37.075 [DEBUG] [Thread-306396] [transport.py] [_log()] userauth is OK
2025-12-24T17:51:37.075 [DEBUG] [Thread-306396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:51:37.075 [DEBUG] [Thread-306396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:51:37.075 [DEBUG] [Thread-306396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:51:37.075 [DEBUG] [Thread-306396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:51:37.089 [INFO] [Thread-306396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:51:37.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:51:37.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:51:37.254 [DEBUG] [Thread-306398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:51:37.913 [DEBUG] [Thread-306396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:51:37.913 [DEBUG] [Thread-306396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:51:37.960 [DEBUG] [Thread-306396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:51:37.960 [DEBUG] [Thread-306396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:51:37.968 [DEBUG] [Thread-306396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:51:37.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:51:37.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:51:37.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:51:37.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:51:37.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:51:38.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:51:38.007 [DEBUG] [Thread-306396] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:51:38.622 [DEBUG] [Thread-306399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:51:46.100 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:51:46.114 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:51:53.829 [DEBUG] [Thread-306400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:52:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:52:08.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:52:08.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:52:08.995 [DEBUG] [Thread-306401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:52:09.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 51, 34), 21.28, 24.9, 0.0, 22.69, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:52:09.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:51:34
2025-12-24T17:52:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:52:09.656 [DEBUG] [Thread-306402] [transport.py] [_log()] starting thread (client mode): 0xf574ee30
2025-12-24T17:52:09.656 [DEBUG] [Thread-306402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:52:09.658 [DEBUG] [Thread-306402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:52:09.658 [INFO] [Thread-306402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:52:09.661 [DEBUG] [Thread-306402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] client lang: <none>
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] server lang: <none>
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] kex follows: False
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:52:09.662 [DEBUG] [Thread-306402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:52:09.663 [DEBUG] [Thread-306402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:52:09.663 [DEBUG] [Thread-306402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:52:09.663 [DEBUG] [Thread-306402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:52:09.663 [DEBUG] [Thread-306402] [transport.py] [_log()] Compression: none
2025-12-24T17:52:09.663 [DEBUG] [Thread-306402] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:52:09.693 [DEBUG] [Thread-306402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:52:09.696 [DEBUG] [Thread-306402] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:52:09.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:52:09.698 [DEBUG] [Thread-306402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:52:09.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:52:09.700 [DEBUG] [Thread-306402] [transport.py] [_log()] userauth is OK
2025-12-24T17:52:09.700 [DEBUG] [Thread-306402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:52:09.700 [DEBUG] [Thread-306402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:52:09.700 [DEBUG] [Thread-306402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:52:09.700 [DEBUG] [Thread-306402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:52:09.721 [INFO] [Thread-306402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:52:09.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:52:10.530 [DEBUG] [Thread-306402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:52:10.530 [DEBUG] [Thread-306402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:52:10.531 [DEBUG] [Thread-306402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:52:10.572 [DEBUG] [Thread-306402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:52:10.572 [DEBUG] [Thread-306402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:52:10.574 [DEBUG] [Thread-306402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:52:10.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:52:10.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:52:10.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:52:10.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:52:10.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:52:10.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:52:10.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:52:10.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:52:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:52:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.660830 -999.00  +22.90  19.03     31   +5.00 1 1 1 1 1   887    0 17.55 -18.58 ----- 19.0 19.0 133.8 24.5 26.9 -25.5 27.4 -25.3 28.8 -23.3 28.8 -25.6
2025-12-24T17:52:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:52:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:52:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.660830
2025-12-24T17:52:10.604 [DEBUG] [Thread-306402] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:52:10.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:52:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:52:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:52:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:52:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:52:10.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:51:34', tmtdew=21.28, humidity=24.9, cloud=0.0, wind=22.69, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:51:35.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:52:10.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:52:10.704 [DEBUG] [Thread-306405] [transport.py] [_log()] starting thread (client mode): 0xf574f190
2025-12-24T17:52:10.704 [DEBUG] [Thread-306405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:52:10.724 [DEBUG] [Thread-306405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:52:10.724 [INFO] [Thread-306405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] client lang: <none>
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] server lang: <none>
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] kex follows: False
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:52:10.732 [DEBUG] [Thread-306405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:52:10.733 [DEBUG] [Thread-306405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:52:10.733 [DEBUG] [Thread-306405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:52:10.733 [DEBUG] [Thread-306405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:52:10.733 [DEBUG] [Thread-306405] [transport.py] [_log()] Compression: none
2025-12-24T17:52:10.733 [DEBUG] [Thread-306405] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:52:10.791 [DEBUG] [Thread-306405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:52:10.792 [DEBUG] [Thread-306405] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:52:10.793 [DEBUG] [Thread-306405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:52:10.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:52:10.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:52:10.848 [DEBUG] [Thread-306405] [transport.py] [_log()] userauth is OK
2025-12-24T17:52:10.848 [DEBUG] [Thread-306405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:52:10.848 [DEBUG] [Thread-306405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:52:10.848 [DEBUG] [Thread-306405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:52:10.848 [DEBUG] [Thread-306405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:52:10.868 [INFO] [Thread-306405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:52:10.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:52:10.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:52:11.691 [DEBUG] [Thread-306405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:52:11.691 [DEBUG] [Thread-306405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:52:11.739 [DEBUG] [Thread-306405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:52:11.739 [DEBUG] [Thread-306405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:52:11.748 [DEBUG] [Thread-306405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:52:11.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:52:11.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:52:11.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:52:11.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:52:11.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:52:11.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:52:11.781 [DEBUG] [Thread-306405] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:52:24.117 [DEBUG] [Thread-306407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:52:37.550 [DEBUG] [Thread-306408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:52:39.288 [DEBUG] [Thread-306409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:52:41.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:52:41.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:52:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:52:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 52, 7), 21.2, 25.0, 0.0, 18.92, 23.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:52:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:52:07
2025-12-24T17:52:42.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:52:43.212 [DEBUG] [Thread-306410] [transport.py] [_log()] starting thread (client mode): 0xf81c2cb0
2025-12-24T17:52:43.213 [DEBUG] [Thread-306410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:52:43.224 [DEBUG] [Thread-306410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:52:43.224 [INFO] [Thread-306410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] client lang: <none>
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] server lang: <none>
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] kex follows: False
2025-12-24T17:52:43.230 [DEBUG] [Thread-306410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:52:43.231 [DEBUG] [Thread-306410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:52:43.231 [DEBUG] [Thread-306410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:52:43.231 [DEBUG] [Thread-306410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:52:43.231 [DEBUG] [Thread-306410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:52:43.231 [DEBUG] [Thread-306410] [transport.py] [_log()] Compression: none
2025-12-24T17:52:43.231 [DEBUG] [Thread-306410] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:52:43.279 [DEBUG] [Thread-306410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:52:43.283 [DEBUG] [Thread-306410] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:52:43.285 [DEBUG] [Thread-306410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:52:43.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:52:43.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:52:43.290 [DEBUG] [Thread-306410] [transport.py] [_log()] userauth is OK
2025-12-24T17:52:43.290 [DEBUG] [Thread-306410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:52:43.290 [DEBUG] [Thread-306410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:52:43.290 [DEBUG] [Thread-306410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:52:43.290 [DEBUG] [Thread-306410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:52:43.321 [INFO] [Thread-306410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:52:43.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:52:43.938 [DEBUG] [Thread-306410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:52:43.938 [DEBUG] [Thread-306410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:52:43.939 [DEBUG] [Thread-306410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:52:43.979 [DEBUG] [Thread-306410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:52:43.979 [DEBUG] [Thread-306410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:52:43.982 [DEBUG] [Thread-306410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:52:43.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:52:43.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:52:43.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:52:44.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:52:44.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:52:44.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:52:44.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:52:44.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:52:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:52:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.661178 -999.00  +22.90  20.96     31   +5.10 1 1 1 1 1   887    0 17.48 -21.18 ----- 21.0 21.0 159.1 23.3 26.9 -25.5 27.3 -24.8 28.7 -23.3 28.9 -26.3
2025-12-24T17:52:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:52:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:52:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.661178
2025-12-24T17:52:44.015 [DEBUG] [Thread-306410] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:52:44.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:52:44.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:52:44.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:52:44.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:52:44.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:52:44.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:52:07', tmtdew=21.2, humidity=25.0, cloud=0.0, wind=18.92, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:52:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:52:44.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:52:44.115 [DEBUG] [Thread-306413] [transport.py] [_log()] starting thread (client mode): 0xf81e75e0
2025-12-24T17:52:44.115 [DEBUG] [Thread-306413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:52:44.129 [DEBUG] [Thread-306413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:52:44.129 [INFO] [Thread-306413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:52:44.136 [DEBUG] [Thread-306413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:52:44.136 [DEBUG] [Thread-306413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:52:44.136 [DEBUG] [Thread-306413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:52:44.136 [DEBUG] [Thread-306413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:52:44.136 [DEBUG] [Thread-306413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:52:44.136 [DEBUG] [Thread-306413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] client lang: <none>
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] server lang: <none>
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] kex follows: False
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] Compression: none
2025-12-24T17:52:44.137 [DEBUG] [Thread-306413] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:52:44.195 [DEBUG] [Thread-306413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:52:44.195 [DEBUG] [Thread-306413] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:52:44.196 [DEBUG] [Thread-306413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:52:44.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:52:44.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:52:44.251 [DEBUG] [Thread-306413] [transport.py] [_log()] userauth is OK
2025-12-24T17:52:44.251 [DEBUG] [Thread-306413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:52:44.251 [DEBUG] [Thread-306413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:52:44.251 [DEBUG] [Thread-306413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:52:44.251 [DEBUG] [Thread-306413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:52:44.266 [INFO] [Thread-306413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:52:44.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:52:44.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:52:45.097 [DEBUG] [Thread-306413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:52:45.097 [DEBUG] [Thread-306413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:52:45.144 [DEBUG] [Thread-306413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:52:45.144 [DEBUG] [Thread-306413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:52:45.153 [DEBUG] [Thread-306413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:52:45.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:52:45.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:52:45.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:52:45.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:52:45.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:52:45.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:52:45.197 [DEBUG] [Thread-306413] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:52:46.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:52:46.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:52:54.383 [DEBUG] [Thread-306415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:53:09.508 [DEBUG] [Thread-306416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:53:15.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:53:15.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:53:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:53:16.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 52, 40), 21.13, 25.18, 0.0, 22.28, 23.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:53:16.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:52:40
2025-12-24T17:53:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:53:16.559 [DEBUG] [Thread-306417] [transport.py] [_log()] starting thread (client mode): 0xf81f3340
2025-12-24T17:53:16.559 [DEBUG] [Thread-306417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:53:16.570 [DEBUG] [Thread-306417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:53:16.571 [INFO] [Thread-306417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] client lang: <none>
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] server lang: <none>
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] kex follows: False
2025-12-24T17:53:16.575 [DEBUG] [Thread-306417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:53:16.576 [DEBUG] [Thread-306417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:53:16.576 [DEBUG] [Thread-306417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:53:16.576 [DEBUG] [Thread-306417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:53:16.576 [DEBUG] [Thread-306417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:53:16.576 [DEBUG] [Thread-306417] [transport.py] [_log()] Compression: none
2025-12-24T17:53:16.576 [DEBUG] [Thread-306417] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:53:16.611 [DEBUG] [Thread-306417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:53:16.615 [DEBUG] [Thread-306417] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:53:16.616 [DEBUG] [Thread-306417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:53:16.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:53:16.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:53:16.620 [DEBUG] [Thread-306417] [transport.py] [_log()] userauth is OK
2025-12-24T17:53:16.620 [DEBUG] [Thread-306417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:53:16.620 [DEBUG] [Thread-306417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:53:16.620 [DEBUG] [Thread-306417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:53:16.620 [DEBUG] [Thread-306417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:53:16.639 [INFO] [Thread-306417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:53:16.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:53:17.444 [DEBUG] [Thread-306417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:53:17.444 [DEBUG] [Thread-306417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:53:17.445 [DEBUG] [Thread-306417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:53:17.485 [DEBUG] [Thread-306417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:53:17.485 [DEBUG] [Thread-306417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:53:17.488 [DEBUG] [Thread-306417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:53:17.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:53:17.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:53:17.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:53:17.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:53:17.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:53:17.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:53:17.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:53:17.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:53:17.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:53:17.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.661525 -999.00  +23.00  12.88     31   +5.10 1 1 1 1 1   887    0 17.56 -23.88 ----- 12.9 12.9 162.6 27.9 26.9 -25.6 27.2 -27.1 28.8 -23.2 28.9 -25.5
2025-12-24T17:53:17.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:53:17.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:53:17.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.661525
2025-12-24T17:53:17.518 [DEBUG] [Thread-306417] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:53:17.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:53:17.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:53:17.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:53:17.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:53:17.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:53:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:52:40', tmtdew=21.13, humidity=25.18, cloud=0.0, wind=22.28, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:52:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:53:17.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:53:17.622 [DEBUG] [Thread-306420] [transport.py] [_log()] starting thread (client mode): 0xf81f3eb0
2025-12-24T17:53:17.622 [DEBUG] [Thread-306420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:53:17.637 [DEBUG] [Thread-306420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:53:17.637 [INFO] [Thread-306420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] client lang: <none>
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] server lang: <none>
2025-12-24T17:53:17.646 [DEBUG] [Thread-306420] [transport.py] [_log()] kex follows: False
2025-12-24T17:53:17.647 [DEBUG] [Thread-306420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:53:17.647 [DEBUG] [Thread-306420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:53:17.647 [DEBUG] [Thread-306420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:53:17.647 [DEBUG] [Thread-306420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:53:17.647 [DEBUG] [Thread-306420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:53:17.647 [DEBUG] [Thread-306420] [transport.py] [_log()] Compression: none
2025-12-24T17:53:17.647 [DEBUG] [Thread-306420] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:53:17.702 [DEBUG] [Thread-306420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:53:17.702 [DEBUG] [Thread-306420] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:53:17.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:53:17.702 [DEBUG] [Thread-306420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:53:17.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:53:17.760 [DEBUG] [Thread-306420] [transport.py] [_log()] userauth is OK
2025-12-24T17:53:17.760 [DEBUG] [Thread-306420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:53:17.760 [DEBUG] [Thread-306420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:53:17.760 [DEBUG] [Thread-306420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:53:17.760 [DEBUG] [Thread-306420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:53:17.773 [INFO] [Thread-306420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:53:17.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:53:17.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:53:18.577 [DEBUG] [Thread-306420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:53:18.577 [DEBUG] [Thread-306420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:53:18.625 [DEBUG] [Thread-306420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:53:18.625 [DEBUG] [Thread-306420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:53:18.633 [DEBUG] [Thread-306420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:53:18.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:53:18.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:53:18.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:53:18.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:53:18.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:53:18.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:53:18.666 [DEBUG] [Thread-306420] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:53:24.612 [DEBUG] [Thread-306422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:53:37.829 [DEBUG] [Thread-306423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:53:39.888 [DEBUG] [Thread-306424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:53:46.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:53:46.417 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:53:48.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:53:48.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:53:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:53:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 53, 13), 21.1, 25.23, 0.0, 20.8, 23.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:53:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:53:13
2025-12-24T17:53:49.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:53:50.136 [DEBUG] [Thread-306425] [transport.py] [_log()] starting thread (client mode): 0xf81e41c0
2025-12-24T17:53:50.137 [DEBUG] [Thread-306425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:53:50.144 [DEBUG] [Thread-306425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:53:50.144 [INFO] [Thread-306425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] client lang: <none>
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] server lang: <none>
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] kex follows: False
2025-12-24T17:53:50.149 [DEBUG] [Thread-306425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:53:50.150 [DEBUG] [Thread-306425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:53:50.150 [DEBUG] [Thread-306425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:53:50.150 [DEBUG] [Thread-306425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:53:50.150 [DEBUG] [Thread-306425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:53:50.150 [DEBUG] [Thread-306425] [transport.py] [_log()] Compression: none
2025-12-24T17:53:50.150 [DEBUG] [Thread-306425] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:53:50.184 [DEBUG] [Thread-306425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:53:50.187 [DEBUG] [Thread-306425] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:53:50.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:53:50.190 [DEBUG] [Thread-306425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:53:50.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:53:50.192 [DEBUG] [Thread-306425] [transport.py] [_log()] userauth is OK
2025-12-24T17:53:50.193 [DEBUG] [Thread-306425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:53:50.193 [DEBUG] [Thread-306425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:53:50.193 [DEBUG] [Thread-306425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:53:50.193 [DEBUG] [Thread-306425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:53:50.211 [INFO] [Thread-306425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:53:50.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:53:50.847 [DEBUG] [Thread-306425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:53:50.847 [DEBUG] [Thread-306425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:53:50.848 [DEBUG] [Thread-306425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:53:50.889 [DEBUG] [Thread-306425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:53:50.889 [DEBUG] [Thread-306425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:53:50.892 [DEBUG] [Thread-306425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:53:50.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:53:50.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:53:50.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:53:50.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:53:50.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:53:50.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:53:50.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:53:50.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:53:50.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:53:50.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.661872 -999.00  +23.00  14.10     31   +5.00 1 1 1 1 1   887    0 17.58 -26.28 ----- 14.1 14.1 179.8 27.6 26.9 -25.7 27.2 -25.0 28.7 -23.5 28.8 -26.7
2025-12-24T17:53:50.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:53:50.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:53:50.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.661872
2025-12-24T17:53:50.928 [DEBUG] [Thread-306425] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:53:50.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:53:50.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:53:50.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:53:50.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:53:50.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:53:50.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:53:13', tmtdew=21.1, humidity=25.23, cloud=0.0, wind=20.8, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:53:05.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:53:51.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:53:51.043 [DEBUG] [Thread-306428] [transport.py] [_log()] starting thread (client mode): 0xf818bca0
2025-12-24T17:53:51.043 [DEBUG] [Thread-306428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:53:51.058 [DEBUG] [Thread-306428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:53:51.058 [INFO] [Thread-306428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:53:51.065 [DEBUG] [Thread-306428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:53:51.066 [DEBUG] [Thread-306428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:53:51.066 [DEBUG] [Thread-306428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:53:51.066 [DEBUG] [Thread-306428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:53:51.066 [DEBUG] [Thread-306428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] client lang: <none>
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] server lang: <none>
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] kex follows: False
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] Compression: none
2025-12-24T17:53:51.067 [DEBUG] [Thread-306428] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:53:51.123 [DEBUG] [Thread-306428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:53:51.124 [DEBUG] [Thread-306428] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:53:51.124 [DEBUG] [Thread-306428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:53:51.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:53:51.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:53:51.180 [DEBUG] [Thread-306428] [transport.py] [_log()] userauth is OK
2025-12-24T17:53:51.180 [DEBUG] [Thread-306428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:53:51.180 [DEBUG] [Thread-306428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:53:51.180 [DEBUG] [Thread-306428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:53:51.180 [DEBUG] [Thread-306428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:53:51.203 [INFO] [Thread-306428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:53:51.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:53:51.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:53:52.022 [DEBUG] [Thread-306428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:53:52.022 [DEBUG] [Thread-306428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:53:52.070 [DEBUG] [Thread-306428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:53:52.070 [DEBUG] [Thread-306428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:53:52.078 [DEBUG] [Thread-306428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:53:52.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:53:52.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:53:52.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:53:52.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:53:52.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:53:52.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:53:52.111 [DEBUG] [Thread-306428] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:53:54.980 [DEBUG] [Thread-306430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:54:10.164 [DEBUG] [Thread-306431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:54:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:54:22.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:54:22.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:54:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 53, 46), 20.79, 25.66, 0.0, 22.0, 22.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:54:24.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:53:46
2025-12-24T17:54:24.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:54:24.580 [DEBUG] [Thread-306432] [transport.py] [_log()] starting thread (client mode): 0xf81f2f80
2025-12-24T17:54:24.581 [DEBUG] [Thread-306432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:54:24.590 [DEBUG] [Thread-306432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:54:24.590 [INFO] [Thread-306432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] client lang: <none>
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] server lang: <none>
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] kex follows: False
2025-12-24T17:54:24.595 [DEBUG] [Thread-306432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:54:24.596 [DEBUG] [Thread-306432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:54:24.596 [DEBUG] [Thread-306432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:54:24.596 [DEBUG] [Thread-306432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:54:24.596 [DEBUG] [Thread-306432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:54:24.597 [DEBUG] [Thread-306432] [transport.py] [_log()] Compression: none
2025-12-24T17:54:24.597 [DEBUG] [Thread-306432] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:54:24.621 [DEBUG] [Thread-306432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:54:24.625 [DEBUG] [Thread-306432] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:54:24.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:54:24.627 [DEBUG] [Thread-306432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:54:24.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:54:24.630 [DEBUG] [Thread-306432] [transport.py] [_log()] userauth is OK
2025-12-24T17:54:24.630 [DEBUG] [Thread-306432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:54:24.630 [DEBUG] [Thread-306432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:54:24.630 [DEBUG] [Thread-306432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:54:24.630 [DEBUG] [Thread-306432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:54:24.642 [INFO] [Thread-306432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:54:24.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:54:25.303 [DEBUG] [Thread-306434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:54:25.303 [DEBUG] [Thread-306432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:54:25.305 [DEBUG] [Thread-306432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:54:25.306 [DEBUG] [Thread-306432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:54:25.338 [DEBUG] [Thread-306432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:54:25.338 [DEBUG] [Thread-306432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:54:25.341 [DEBUG] [Thread-306432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:54:25.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:54:25.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:54:25.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:54:25.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:54:25.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:54:25.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:54:25.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:54:25.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:54:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:54:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.662219 -999.00  +23.00  14.43     31   +5.00 1 1 1 1 1   887    0 17.19 -31.47 ----- 14.4 14.4 164.9 21.3 26.9 -26.1 27.1 -27.1 28.7 -24.0 28.9 -25.8
2025-12-24T17:54:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:54:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:54:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.662219
2025-12-24T17:54:25.374 [DEBUG] [Thread-306432] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:54:25.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:54:25.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:54:25.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:54:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:54:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:54:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:53:46', tmtdew=20.79, humidity=25.66, cloud=0.0, wind=22.0, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:53:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:54:25.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:54:25.486 [DEBUG] [Thread-306436] [transport.py] [_log()] starting thread (client mode): 0xf03bcb80
2025-12-24T17:54:25.486 [DEBUG] [Thread-306436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:54:25.500 [DEBUG] [Thread-306436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:54:25.500 [INFO] [Thread-306436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:54:25.508 [DEBUG] [Thread-306436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] client lang: <none>
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] server lang: <none>
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] kex follows: False
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] Compression: none
2025-12-24T17:54:25.509 [DEBUG] [Thread-306436] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:54:25.571 [DEBUG] [Thread-306436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:54:25.572 [DEBUG] [Thread-306436] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:54:25.572 [DEBUG] [Thread-306436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:54:25.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:54:25.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:54:25.628 [DEBUG] [Thread-306436] [transport.py] [_log()] userauth is OK
2025-12-24T17:54:25.629 [DEBUG] [Thread-306436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:54:25.629 [DEBUG] [Thread-306436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:54:25.629 [DEBUG] [Thread-306436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:54:25.629 [DEBUG] [Thread-306436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:54:25.647 [INFO] [Thread-306436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:54:25.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:54:25.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:54:26.518 [DEBUG] [Thread-306436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:54:26.519 [DEBUG] [Thread-306436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:54:26.557 [DEBUG] [Thread-306436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:54:26.557 [DEBUG] [Thread-306436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:54:26.566 [DEBUG] [Thread-306436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:54:26.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:54:26.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:54:26.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
2025-12-24T17:54:26.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:54:26.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:54:26.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:54:26.604 [DEBUG] [Thread-306436] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:54:38.145 [DEBUG] [Thread-306438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:54:40.386 [DEBUG] [Thread-306439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:54:46.571 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:54:46.582 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:54:55.531 [DEBUG] [Thread-306440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:54:56.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:54:56.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:54:56.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:54:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 54, 20), 20.75, 25.73, 0.0, 23.63, 22.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:54:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:54:20
2025-12-24T17:54:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:54:58.015 [DEBUG] [Thread-306441] [transport.py] [_log()] starting thread (client mode): 0xf5751cf0
2025-12-24T17:54:58.016 [DEBUG] [Thread-306441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:54:58.016 [DEBUG] [Thread-306441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:54:58.016 [INFO] [Thread-306441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] client lang: <none>
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] server lang: <none>
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] kex follows: False
2025-12-24T17:54:58.021 [DEBUG] [Thread-306441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:54:58.022 [DEBUG] [Thread-306441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:54:58.022 [DEBUG] [Thread-306441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:54:58.022 [DEBUG] [Thread-306441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:54:58.022 [DEBUG] [Thread-306441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:54:58.022 [DEBUG] [Thread-306441] [transport.py] [_log()] Compression: none
2025-12-24T17:54:58.022 [DEBUG] [Thread-306441] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:54:58.053 [DEBUG] [Thread-306441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:54:58.056 [DEBUG] [Thread-306441] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:54:58.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:54:58.057 [DEBUG] [Thread-306441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:54:58.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:54:58.060 [DEBUG] [Thread-306441] [transport.py] [_log()] userauth is OK
2025-12-24T17:54:58.060 [DEBUG] [Thread-306441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:54:58.060 [DEBUG] [Thread-306441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:54:58.060 [DEBUG] [Thread-306441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:54:58.060 [DEBUG] [Thread-306441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:54:58.088 [INFO] [Thread-306441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:54:58.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:54:58.722 [DEBUG] [Thread-306441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:54:58.722 [DEBUG] [Thread-306441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:54:58.724 [DEBUG] [Thread-306441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:54:58.763 [DEBUG] [Thread-306441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:54:58.764 [DEBUG] [Thread-306441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:54:58.767 [DEBUG] [Thread-306441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:54:58.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:54:58.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:54:58.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:54:58.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:54:58.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:54:58.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:54:58.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:54:58.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:54:58.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:54:58.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.662567 -999.00  +23.10  16.93     31   +5.00 1 1 1 1 1   887    0 17.59 -31.50 ----- 16.9 16.9 157.3 22.5 26.9 -26.1 27.2 -25.7 28.8 -24.3 28.9 -25.7
2025-12-24T17:54:58.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:54:58.793 [DEBUG] [Thread-306441] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:54:58.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:54:58.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.662567
2025-12-24T17:54:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:54:58.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:54:58.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:54:58.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:54:58.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:54:58.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:54:20', tmtdew=20.75, humidity=25.73, cloud=0.0, wind=23.63, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:54:05.789', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:54:58.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:54:58.911 [DEBUG] [Thread-306444] [transport.py] [_log()] starting thread (client mode): 0xf57525c0
2025-12-24T17:54:58.912 [DEBUG] [Thread-306444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:54:58.925 [DEBUG] [Thread-306444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:54:58.926 [INFO] [Thread-306444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:54:58.933 [DEBUG] [Thread-306444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:54:58.934 [DEBUG] [Thread-306444] [transport.py] [_log()] client lang: <none>
2025-12-24T17:54:58.935 [DEBUG] [Thread-306444] [transport.py] [_log()] server lang: <none>
2025-12-24T17:54:58.935 [DEBUG] [Thread-306444] [transport.py] [_log()] kex follows: False
2025-12-24T17:54:58.935 [DEBUG] [Thread-306444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:54:58.935 [DEBUG] [Thread-306444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:54:58.935 [DEBUG] [Thread-306444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:54:58.935 [DEBUG] [Thread-306444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:54:58.935 [DEBUG] [Thread-306444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:54:58.935 [DEBUG] [Thread-306444] [transport.py] [_log()] Compression: none
2025-12-24T17:54:58.936 [DEBUG] [Thread-306444] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:54:58.992 [DEBUG] [Thread-306444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:54:58.993 [DEBUG] [Thread-306444] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:54:58.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:54:58.994 [DEBUG] [Thread-306444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:54:58.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:54:59.048 [DEBUG] [Thread-306444] [transport.py] [_log()] userauth is OK
2025-12-24T17:54:59.048 [DEBUG] [Thread-306444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:54:59.049 [DEBUG] [Thread-306444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:54:59.049 [DEBUG] [Thread-306444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:54:59.049 [DEBUG] [Thread-306444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:54:59.072 [INFO] [Thread-306444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:54:59.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:54:59.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:54:59.918 [DEBUG] [Thread-306444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:54:59.918 [DEBUG] [Thread-306444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:54:59.965 [DEBUG] [Thread-306444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:54:59.965 [DEBUG] [Thread-306444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:54:59.974 [DEBUG] [Thread-306444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:54:59.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:54:59.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:54:59.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:54:59.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:54:59.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:54:59.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:55:00.006 [DEBUG] [Thread-306444] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:55:10.661 [DEBUG] [Thread-306446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:55:25.829 [DEBUG] [Thread-306447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:55:30.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:55:30.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:55:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:55:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 54, 54), 21.0, 25.08, 0.0, 21.81, 23.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:55:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:54:54
2025-12-24T17:55:31.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:55:31.290 [DEBUG] [Thread-306448] [transport.py] [_log()] starting thread (client mode): 0xf57294e0
2025-12-24T17:55:31.291 [DEBUG] [Thread-306448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:55:31.305 [DEBUG] [Thread-306448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:55:31.305 [INFO] [Thread-306448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:55:31.310 [DEBUG] [Thread-306448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] client lang: <none>
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] server lang: <none>
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] kex follows: False
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:55:31.311 [DEBUG] [Thread-306448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:55:31.312 [DEBUG] [Thread-306448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:55:31.312 [DEBUG] [Thread-306448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:55:31.312 [DEBUG] [Thread-306448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:55:31.312 [DEBUG] [Thread-306448] [transport.py] [_log()] Compression: none
2025-12-24T17:55:31.312 [DEBUG] [Thread-306448] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:55:31.340 [DEBUG] [Thread-306448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:55:31.343 [DEBUG] [Thread-306448] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:55:31.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:55:31.345 [DEBUG] [Thread-306448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:55:31.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:55:31.348 [DEBUG] [Thread-306448] [transport.py] [_log()] userauth is OK
2025-12-24T17:55:31.348 [DEBUG] [Thread-306448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:55:31.349 [DEBUG] [Thread-306448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:55:31.349 [DEBUG] [Thread-306448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:55:31.349 [DEBUG] [Thread-306448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:55:31.369 [INFO] [Thread-306448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:55:31.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:55:32.097 [DEBUG] [Thread-306448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:55:32.097 [DEBUG] [Thread-306448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:55:32.098 [DEBUG] [Thread-306448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:55:32.138 [DEBUG] [Thread-306448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:55:32.139 [DEBUG] [Thread-306448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:55:32.141 [DEBUG] [Thread-306448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:55:32.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:55:32.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:55:32.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:55:32.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:55:32.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:55:32.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:55:32.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:55:32.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:55:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:55:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.662914 -999.00  +22.90  21.26     31   +5.00 1 1 1 1 1   887    0 17.21 -32.02 ----- 21.3 21.3 147.6 33.1 26.9 -26.4 27.2 -26.2 28.8 -24.3 28.7 -27.0
2025-12-24T17:55:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:55:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:55:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.662914
2025-12-24T17:55:32.168 [DEBUG] [Thread-306448] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:55:32.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:55:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:55:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:55:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:55:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:55:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:54:54', tmtdew=21.0, humidity=25.08, cloud=0.0, wind=21.81, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:54:35.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:55:32.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:55:32.265 [DEBUG] [Thread-306451] [transport.py] [_log()] starting thread (client mode): 0xf572af20
2025-12-24T17:55:32.265 [DEBUG] [Thread-306451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:55:32.279 [DEBUG] [Thread-306451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:55:32.279 [INFO] [Thread-306451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] client lang: <none>
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] server lang: <none>
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] kex follows: False
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] Compression: none
2025-12-24T17:55:32.287 [DEBUG] [Thread-306451] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:55:32.342 [DEBUG] [Thread-306451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:55:32.342 [DEBUG] [Thread-306451] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:55:32.342 [DEBUG] [Thread-306451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:55:32.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:55:32.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:55:32.399 [DEBUG] [Thread-306451] [transport.py] [_log()] userauth is OK
2025-12-24T17:55:32.399 [DEBUG] [Thread-306451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:55:32.399 [DEBUG] [Thread-306451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:55:32.399 [DEBUG] [Thread-306451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:55:32.399 [DEBUG] [Thread-306451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:55:32.417 [INFO] [Thread-306451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:55:32.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:55:32.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:55:33.227 [DEBUG] [Thread-306451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:55:33.227 [DEBUG] [Thread-306451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:55:33.274 [DEBUG] [Thread-306451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:55:33.274 [DEBUG] [Thread-306451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:55:33.283 [DEBUG] [Thread-306451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:55:33.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:55:33.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')
2025-12-24T17:55:33.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:55:33.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:55:33.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:55:33.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:55:33.317 [DEBUG] [Thread-306451] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:55:38.435 [DEBUG] [Thread-306453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:55:40.925 [DEBUG] [Thread-306454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:55:46.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:55:46.725 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:55:56.070 [DEBUG] [Thread-306455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:56:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:56:03.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:56:03.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:56:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 55, 27), 21.16, 24.87, 0.0, 23.8, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:56:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:55:27
2025-12-24T17:56:04.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:56:04.956 [DEBUG] [Thread-306456] [transport.py] [_log()] starting thread (client mode): 0xf5753d00
2025-12-24T17:56:04.957 [DEBUG] [Thread-306456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:56:04.972 [DEBUG] [Thread-306456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:56:04.973 [INFO] [Thread-306456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] client lang: <none>
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] server lang: <none>
2025-12-24T17:56:04.980 [DEBUG] [Thread-306456] [transport.py] [_log()] kex follows: False
2025-12-24T17:56:04.981 [DEBUG] [Thread-306456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:56:04.981 [DEBUG] [Thread-306456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:56:04.981 [DEBUG] [Thread-306456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:56:04.982 [DEBUG] [Thread-306456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:56:04.982 [DEBUG] [Thread-306456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:56:04.982 [DEBUG] [Thread-306456] [transport.py] [_log()] Compression: none
2025-12-24T17:56:04.982 [DEBUG] [Thread-306456] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:56:05.020 [DEBUG] [Thread-306456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:56:05.025 [DEBUG] [Thread-306456] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:56:05.027 [DEBUG] [Thread-306456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:56:05.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:56:05.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:56:05.032 [DEBUG] [Thread-306456] [transport.py] [_log()] userauth is OK
2025-12-24T17:56:05.032 [DEBUG] [Thread-306456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:56:05.033 [DEBUG] [Thread-306456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:56:05.033 [DEBUG] [Thread-306456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:56:05.033 [DEBUG] [Thread-306456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:56:05.072 [INFO] [Thread-306456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:56:05.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:56:05.735 [DEBUG] [Thread-306456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:56:05.735 [DEBUG] [Thread-306456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:56:05.736 [DEBUG] [Thread-306456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:56:05.776 [DEBUG] [Thread-306456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:56:05.776 [DEBUG] [Thread-306456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:56:05.779 [DEBUG] [Thread-306456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:56:05.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:56:05.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:56:05.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:56:05.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:56:05.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:56:05.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:56:05.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:56:05.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:56:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:56:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.663261 -999.00  +22.80  18.73     31   +5.00 1 1 1 1 1   887    0 17.32 -33.93 ----- 18.7 18.7 160.6 29.8 26.8 -26.8 26.8 -30.7 28.5 -24.4 28.6 -27.1
2025-12-24T17:56:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:56:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:56:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.663261
2025-12-24T17:56:05.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:56:05.821 [DEBUG] [Thread-306456] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:56:05.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:56:05.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:56:05.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:56:05.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:56:05.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:55:27', tmtdew=21.16, humidity=24.87, cloud=0.0, wind=23.8, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:55:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:56:05.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:56:05.909 [DEBUG] [Thread-306459] [transport.py] [_log()] starting thread (client mode): 0xf5751360
2025-12-24T17:56:05.909 [DEBUG] [Thread-306459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:56:05.923 [DEBUG] [Thread-306459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:56:05.923 [INFO] [Thread-306459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:56:05.931 [DEBUG] [Thread-306459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:56:05.931 [DEBUG] [Thread-306459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:56:05.932 [DEBUG] [Thread-306459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:56:05.932 [DEBUG] [Thread-306459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:56:05.932 [DEBUG] [Thread-306459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:56:05.932 [DEBUG] [Thread-306459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:56:05.932 [DEBUG] [Thread-306459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:56:05.932 [DEBUG] [Thread-306459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:56:05.932 [DEBUG] [Thread-306459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] client lang: <none>
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] server lang: <none>
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] kex follows: False
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] Compression: none
2025-12-24T17:56:05.933 [DEBUG] [Thread-306459] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:56:05.992 [DEBUG] [Thread-306459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:56:05.993 [DEBUG] [Thread-306459] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:56:05.993 [DEBUG] [Thread-306459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:56:05.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:56:05.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:56:06.048 [DEBUG] [Thread-306459] [transport.py] [_log()] userauth is OK
2025-12-24T17:56:06.048 [DEBUG] [Thread-306459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:56:06.049 [DEBUG] [Thread-306459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:56:06.049 [DEBUG] [Thread-306459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:56:06.049 [DEBUG] [Thread-306459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:56:06.074 [INFO] [Thread-306459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:56:06.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:56:06.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:56:06.934 [DEBUG] [Thread-306459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:56:06.934 [DEBUG] [Thread-306459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:56:06.981 [DEBUG] [Thread-306459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:56:06.981 [DEBUG] [Thread-306459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:56:06.990 [DEBUG] [Thread-306459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:56:06.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:56:06.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:56:07.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:56:07.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:56:07.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:56:07.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:56:07.024 [DEBUG] [Thread-306459] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:56:11.163 [DEBUG] [Thread-306461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:56:26.350 [DEBUG] [Thread-306462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:56:37.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:56:37.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:56:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:56:38.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 55, 27), 21.11, 24.87, 0.0, 23.8, 23.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:56:38.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:55:27
2025-12-24T17:56:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:56:38.406 [DEBUG] [Thread-306463] [transport.py] [_log()] starting thread (client mode): 0xf5729330
2025-12-24T17:56:38.407 [DEBUG] [Thread-306463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:56:38.411 [DEBUG] [Thread-306463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:56:38.411 [INFO] [Thread-306463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] client lang: <none>
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] server lang: <none>
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] kex follows: False
2025-12-24T17:56:38.417 [DEBUG] [Thread-306463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:56:38.418 [DEBUG] [Thread-306463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:56:38.418 [DEBUG] [Thread-306463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:56:38.418 [DEBUG] [Thread-306463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:56:38.418 [DEBUG] [Thread-306463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:56:38.418 [DEBUG] [Thread-306463] [transport.py] [_log()] Compression: none
2025-12-24T17:56:38.418 [DEBUG] [Thread-306463] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:56:38.439 [DEBUG] [Thread-306463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:56:38.442 [DEBUG] [Thread-306463] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:56:38.444 [DEBUG] [Thread-306463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:56:38.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:56:38.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:56:38.447 [DEBUG] [Thread-306463] [transport.py] [_log()] userauth is OK
2025-12-24T17:56:38.447 [DEBUG] [Thread-306463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:56:38.448 [DEBUG] [Thread-306463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:56:38.448 [DEBUG] [Thread-306463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:56:38.448 [DEBUG] [Thread-306463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:56:38.466 [INFO] [Thread-306463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:56:38.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:56:38.644 [DEBUG] [Thread-306465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:56:39.059 [DEBUG] [Thread-306463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:56:39.059 [DEBUG] [Thread-306463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:56:39.060 [DEBUG] [Thread-306463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:56:39.100 [DEBUG] [Thread-306463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:56:39.100 [DEBUG] [Thread-306463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:56:39.104 [DEBUG] [Thread-306463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:56:39.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:56:39.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:56:39.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:56:39.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:56:39.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:56:39.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:56:39.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:56:39.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:56:39.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:56:39.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.663608 -999.00  +22.80  24.83     31   +5.00 1 1 1 1 1   887    0 17.05 -30.76 ----- 24.8 24.8 161.8 27.0 26.8 -26.9 26.9 -25.5 28.4 -24.3 28.6 -26.1
2025-12-24T17:56:39.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:56:39.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:56:39.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.663608
2025-12-24T17:56:39.136 [DEBUG] [Thread-306463] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:56:39.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:56:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:56:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:56:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:56:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:56:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:55:27', tmtdew=21.11, humidity=24.87, cloud=0.0, wind=23.8, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:55:35.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:56:39.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:56:39.251 [DEBUG] [Thread-306467] [transport.py] [_log()] starting thread (client mode): 0xf578aad0
2025-12-24T17:56:39.252 [DEBUG] [Thread-306467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:56:39.268 [DEBUG] [Thread-306467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:56:39.268 [INFO] [Thread-306467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:56:39.276 [DEBUG] [Thread-306467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:56:39.276 [DEBUG] [Thread-306467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:56:39.276 [DEBUG] [Thread-306467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:56:39.276 [DEBUG] [Thread-306467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:56:39.276 [DEBUG] [Thread-306467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:56:39.276 [DEBUG] [Thread-306467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:56:39.276 [DEBUG] [Thread-306467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:56:39.276 [DEBUG] [Thread-306467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] client lang: <none>
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] server lang: <none>
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] kex follows: False
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] Compression: none
2025-12-24T17:56:39.277 [DEBUG] [Thread-306467] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:56:39.336 [DEBUG] [Thread-306467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:56:39.337 [DEBUG] [Thread-306467] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:56:39.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:56:39.338 [DEBUG] [Thread-306467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:56:39.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:56:39.392 [DEBUG] [Thread-306467] [transport.py] [_log()] userauth is OK
2025-12-24T17:56:39.393 [DEBUG] [Thread-306467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:56:39.393 [DEBUG] [Thread-306467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:56:39.393 [DEBUG] [Thread-306467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:56:39.393 [DEBUG] [Thread-306467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:56:39.417 [INFO] [Thread-306467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:56:39.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:56:39.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:56:40.249 [DEBUG] [Thread-306467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:56:40.249 [DEBUG] [Thread-306467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:56:40.297 [DEBUG] [Thread-306467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:56:40.297 [DEBUG] [Thread-306467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:56:40.305 [DEBUG] [Thread-306467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:56:40.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:56:40.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:56:40.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:56:40.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:56:40.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:56:40.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:56:40.338 [DEBUG] [Thread-306467] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:56:41.471 [DEBUG] [Thread-306469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:56:46.867 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:56:46.869 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:56:56.676 [DEBUG] [Thread-306470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:57:10.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:57:10.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:57:10.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:57:11.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 56, 34), 21.2, 25.02, 0.0, 24.0, 23.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:57:11.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:56:34
2025-12-24T17:57:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:57:11.679 [DEBUG] [Thread-306471] [transport.py] [_log()] starting thread (client mode): 0xf57898d0
2025-12-24T17:57:11.680 [DEBUG] [Thread-306471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:57:11.688 [DEBUG] [Thread-306471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:57:11.688 [INFO] [Thread-306471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] client lang: <none>
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] server lang: <none>
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] kex follows: False
2025-12-24T17:57:11.694 [DEBUG] [Thread-306471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:57:11.695 [DEBUG] [Thread-306471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:57:11.695 [DEBUG] [Thread-306471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:57:11.696 [DEBUG] [Thread-306471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:57:11.696 [DEBUG] [Thread-306471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:57:11.696 [DEBUG] [Thread-306471] [transport.py] [_log()] Compression: none
2025-12-24T17:57:11.696 [DEBUG] [Thread-306471] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:57:11.729 [DEBUG] [Thread-306471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:57:11.733 [DEBUG] [Thread-306471] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:57:11.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:57:11.736 [DEBUG] [Thread-306471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:57:11.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:57:11.739 [DEBUG] [Thread-306471] [transport.py] [_log()] userauth is OK
2025-12-24T17:57:11.739 [DEBUG] [Thread-306471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:57:11.740 [DEBUG] [Thread-306471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:57:11.740 [DEBUG] [Thread-306471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:57:11.740 [DEBUG] [Thread-306471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:57:11.762 [INFO] [Thread-306471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:57:11.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:57:11.779 [DEBUG] [Thread-306473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:57:12.398 [DEBUG] [Thread-306471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:57:12.398 [DEBUG] [Thread-306471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:57:12.400 [DEBUG] [Thread-306471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:57:12.440 [DEBUG] [Thread-306471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:57:12.440 [DEBUG] [Thread-306471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:57:12.445 [DEBUG] [Thread-306471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:57:12.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:57:12.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:57:12.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:57:12.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:57:12.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:57:12.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:57:12.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:57:12.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:57:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:57:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.664303 -999.00  +22.90  26.95     31   +5.00 1 1 1 1 1   887    0 17.53 -29.27 ----- 26.9 26.9 162.2 34.3 26.8 -26.5 26.9 -26.3 28.4 -24.1 28.6 -26.4
2025-12-24T17:57:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:57:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:57:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.664303
2025-12-24T17:57:12.482 [DEBUG] [Thread-306471] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:57:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:57:12.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:57:12.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:57:12.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:57:12.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:57:12.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:56:34', tmtdew=21.2, humidity=25.02, cloud=0.0, wind=24.0, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:56:35.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:57:12.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:57:12.606 [DEBUG] [Thread-306475] [transport.py] [_log()] starting thread (client mode): 0xf5729f00
2025-12-24T17:57:12.606 [DEBUG] [Thread-306475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:57:12.621 [DEBUG] [Thread-306475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:57:12.621 [INFO] [Thread-306475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:57:12.629 [DEBUG] [Thread-306475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:57:12.629 [DEBUG] [Thread-306475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:57:12.629 [DEBUG] [Thread-306475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] client lang: <none>
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] server lang: <none>
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] kex follows: False
2025-12-24T17:57:12.630 [DEBUG] [Thread-306475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:57:12.631 [DEBUG] [Thread-306475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:57:12.631 [DEBUG] [Thread-306475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:57:12.631 [DEBUG] [Thread-306475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:57:12.631 [DEBUG] [Thread-306475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:57:12.631 [DEBUG] [Thread-306475] [transport.py] [_log()] Compression: none
2025-12-24T17:57:12.631 [DEBUG] [Thread-306475] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:57:12.689 [DEBUG] [Thread-306475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:57:12.689 [DEBUG] [Thread-306475] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:57:12.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:57:12.691 [DEBUG] [Thread-306475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:57:12.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:57:12.748 [DEBUG] [Thread-306475] [transport.py] [_log()] userauth is OK
2025-12-24T17:57:12.748 [DEBUG] [Thread-306475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:57:12.748 [DEBUG] [Thread-306475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:57:12.748 [DEBUG] [Thread-306475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:57:12.748 [DEBUG] [Thread-306475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:57:12.766 [INFO] [Thread-306475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:57:12.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:57:12.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:57:13.638 [DEBUG] [Thread-306475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:57:13.638 [DEBUG] [Thread-306475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:57:13.685 [DEBUG] [Thread-306475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:57:13.686 [DEBUG] [Thread-306475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:57:13.694 [DEBUG] [Thread-306475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:57:13.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:57: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')
2025-12-24T17:57:13.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:57:13.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:57:13.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:57:13.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:57:13.727 [DEBUG] [Thread-306475] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:57:26.911 [DEBUG] [Thread-306477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:57:38.883 [DEBUG] [Thread-306478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:57:42.061 [DEBUG] [Thread-306479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:57:43.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:57:43.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:57:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:57:45.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 57, 8), 21.23, 24.95, 0.0, 24.83, 23.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:57:45.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:57:08
2025-12-24T17:57:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:57:45.412 [DEBUG] [Thread-306480] [transport.py] [_log()] starting thread (client mode): 0xf5789060
2025-12-24T17:57:45.413 [DEBUG] [Thread-306480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:57:45.414 [DEBUG] [Thread-306480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:57:45.414 [INFO] [Thread-306480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] client lang: <none>
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] server lang: <none>
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] kex follows: False
2025-12-24T17:57:45.418 [DEBUG] [Thread-306480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:57:45.419 [DEBUG] [Thread-306480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:57:45.419 [DEBUG] [Thread-306480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:57:45.419 [DEBUG] [Thread-306480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:57:45.420 [DEBUG] [Thread-306480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:57:45.420 [DEBUG] [Thread-306480] [transport.py] [_log()] Compression: none
2025-12-24T17:57:45.420 [DEBUG] [Thread-306480] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:57:45.451 [DEBUG] [Thread-306480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:57:45.454 [DEBUG] [Thread-306480] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:57:45.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:57:45.456 [DEBUG] [Thread-306480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:57:45.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:57:45.459 [DEBUG] [Thread-306480] [transport.py] [_log()] userauth is OK
2025-12-24T17:57:45.459 [DEBUG] [Thread-306480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:57:45.459 [DEBUG] [Thread-306480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:57:45.459 [DEBUG] [Thread-306480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:57:45.459 [DEBUG] [Thread-306480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:57:45.478 [INFO] [Thread-306480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:57:45.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:57:46.151 [DEBUG] [Thread-306480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:57:46.151 [DEBUG] [Thread-306480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:57:46.151 [DEBUG] [Thread-306480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:57:46.191 [DEBUG] [Thread-306480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:57:46.191 [DEBUG] [Thread-306480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:57:46.194 [DEBUG] [Thread-306480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:57:46.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:57:46.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:57:46.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:57:46.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:57:46.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:57:46.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:57:46.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:57:46.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:57:46.221 [DEBUG] [Thread-306480] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:57:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:57:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.664650 -999.00  +22.90  25.28     31   +5.00 1 1 1 1 1   887    0 17.65 -27.52 ----- 25.3 25.3 163.4 31.5 26.7 -26.6 26.8 -27.8 28.4 -24.3 28.5 -26.4
2025-12-24T17:57:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:57:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:57:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.664650
2025-12-24T17:57:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:57:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:57:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:57:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:57:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:57:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:57:08', tmtdew=21.23, humidity=24.95, cloud=0.0, wind=24.83, temperature=23.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:57:05.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:57:46.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:57:46.338 [DEBUG] [Thread-306483] [transport.py] [_log()] starting thread (client mode): 0xf571a680
2025-12-24T17:57:46.338 [DEBUG] [Thread-306483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:57:46.352 [DEBUG] [Thread-306483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:57:46.352 [INFO] [Thread-306483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:57:46.360 [DEBUG] [Thread-306483] [transport.py] [_log()] client lang: <none>
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] server lang: <none>
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] kex follows: False
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] Compression: none
2025-12-24T17:57:46.361 [DEBUG] [Thread-306483] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:57:46.420 [DEBUG] [Thread-306483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:57:46.421 [DEBUG] [Thread-306483] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:57:46.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:57:46.422 [DEBUG] [Thread-306483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:57:46.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:57:46.476 [DEBUG] [Thread-306483] [transport.py] [_log()] userauth is OK
2025-12-24T17:57:46.476 [DEBUG] [Thread-306483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:57:46.477 [DEBUG] [Thread-306483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:57:46.477 [DEBUG] [Thread-306483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:57:46.477 [DEBUG] [Thread-306483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:57:46.497 [INFO] [Thread-306483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:57:46.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:57:46.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:57:47.010 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:57:47.011 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:57:47.337 [DEBUG] [Thread-306483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:57:47.337 [DEBUG] [Thread-306483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:57:47.384 [DEBUG] [Thread-306483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:57:47.384 [DEBUG] [Thread-306483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:57:47.393 [DEBUG] [Thread-306483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:57:47.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:57:47.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:57:47.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:57:47.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:57:47.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:57:47.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:57:47.425 [DEBUG] [Thread-306483] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:57:57.183 [DEBUG] [Thread-306485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:58:12.376 [DEBUG] [Thread-306486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:58:17.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:58:17.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:58:17.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
2025-12-24T17:58:18.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 57, 41), 20.97, 24.97, 0.0, 31.44, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:58:18.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:57:41
2025-12-24T17:58:18.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:58:18.759 [DEBUG] [Thread-306487] [transport.py] [_log()] starting thread (client mode): 0xf5718ee0
2025-12-24T17:58:18.760 [DEBUG] [Thread-306487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:58:18.772 [DEBUG] [Thread-306487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:58:18.772 [INFO] [Thread-306487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:58:18.778 [DEBUG] [Thread-306487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:58:18.779 [DEBUG] [Thread-306487] [transport.py] [_log()] client lang: <none>
2025-12-24T17:58:18.779 [DEBUG] [Thread-306487] [transport.py] [_log()] server lang: <none>
2025-12-24T17:58:18.779 [DEBUG] [Thread-306487] [transport.py] [_log()] kex follows: False
2025-12-24T17:58:18.779 [DEBUG] [Thread-306487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:58:18.779 [DEBUG] [Thread-306487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:58:18.779 [DEBUG] [Thread-306487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:58:18.780 [DEBUG] [Thread-306487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:58:18.780 [DEBUG] [Thread-306487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:58:18.780 [DEBUG] [Thread-306487] [transport.py] [_log()] Compression: none
2025-12-24T17:58:18.780 [DEBUG] [Thread-306487] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:58:18.814 [DEBUG] [Thread-306487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:58:18.817 [DEBUG] [Thread-306487] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:58:18.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:58:18.819 [DEBUG] [Thread-306487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:58:18.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:58:18.821 [DEBUG] [Thread-306487] [transport.py] [_log()] userauth is OK
2025-12-24T17:58:18.821 [DEBUG] [Thread-306487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:58:18.822 [DEBUG] [Thread-306487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:58:18.822 [DEBUG] [Thread-306487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:58:18.822 [DEBUG] [Thread-306487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:58:18.855 [INFO] [Thread-306487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:58:18.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:58:19.515 [DEBUG] [Thread-306487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:58:19.515 [DEBUG] [Thread-306487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:58:19.517 [DEBUG] [Thread-306487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:58:19.557 [DEBUG] [Thread-306487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:58:19.557 [DEBUG] [Thread-306487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:58:19.560 [DEBUG] [Thread-306487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:58:19.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:58:19.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:58:19.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:58:19.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:58:19.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:58:19.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:58:19.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:58:19.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:58:19.583 [DEBUG] [Thread-306487] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:58:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:58:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.664997 -999.00  +22.80  26.41     31   +5.00 1 1 1 1 1   887    0 17.68 -26.77 ----- 26.4 26.4 176.2 31.1 26.7 -26.7 26.7 -28.4 28.4 -24.9 28.3 -27.0
2025-12-24T17:58:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:58:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:58:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.664997
2025-12-24T17:58:19.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:58:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:58:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:58:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:58:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:58:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:57:41', tmtdew=20.97, humidity=24.97, cloud=0.0, wind=31.44, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:57:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:58:19.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:58:19.691 [DEBUG] [Thread-306490] [transport.py] [_log()] starting thread (client mode): 0xf5729fc0
2025-12-24T17:58:19.691 [DEBUG] [Thread-306490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:58:19.706 [DEBUG] [Thread-306490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:58:19.706 [INFO] [Thread-306490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:58:19.713 [DEBUG] [Thread-306490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:58:19.713 [DEBUG] [Thread-306490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] client lang: <none>
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] server lang: <none>
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] kex follows: False
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] Compression: none
2025-12-24T17:58:19.714 [DEBUG] [Thread-306490] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:58:19.770 [DEBUG] [Thread-306490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:58:19.770 [DEBUG] [Thread-306490] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:58:19.771 [DEBUG] [Thread-306490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:58:19.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:58:19.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:58:19.828 [DEBUG] [Thread-306490] [transport.py] [_log()] userauth is OK
2025-12-24T17:58:19.828 [DEBUG] [Thread-306490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:58:19.828 [DEBUG] [Thread-306490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:58:19.828 [DEBUG] [Thread-306490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:58:19.828 [DEBUG] [Thread-306490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:58:19.842 [INFO] [Thread-306490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:58:19.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:58:19.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:58:20.690 [DEBUG] [Thread-306490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:58:20.690 [DEBUG] [Thread-306490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:58:20.738 [DEBUG] [Thread-306490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:58:20.739 [DEBUG] [Thread-306490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:58:20.746 [DEBUG] [Thread-306490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:58:20.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:58:20.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:58:20.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:58:20.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:58:20.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:58:20.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:58:20.779 [DEBUG] [Thread-306490] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:58:27.492 [DEBUG] [Thread-306492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:58:39.198 [DEBUG] [Thread-306493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:58:42.657 [DEBUG] [Thread-306494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:58:47.153 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:58:47.154 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:58:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:58:50.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:58:50.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:58:51.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 58, 15), 20.89, 25.08, 0.0, 30.67, 22.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:58:51.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:58:15
2025-12-24T17:58:51.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:58:52.163 [DEBUG] [Thread-306495] [transport.py] [_log()] starting thread (client mode): 0xf81e7640
2025-12-24T17:58:52.163 [DEBUG] [Thread-306495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:58:52.175 [DEBUG] [Thread-306495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:58:52.175 [INFO] [Thread-306495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:58:52.179 [DEBUG] [Thread-306495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] client lang: <none>
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] server lang: <none>
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] kex follows: False
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:58:52.180 [DEBUG] [Thread-306495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:58:52.181 [DEBUG] [Thread-306495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:58:52.181 [DEBUG] [Thread-306495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:58:52.181 [DEBUG] [Thread-306495] [transport.py] [_log()] Compression: none
2025-12-24T17:58:52.181 [DEBUG] [Thread-306495] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:58:52.214 [DEBUG] [Thread-306495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:58:52.218 [DEBUG] [Thread-306495] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:58:52.219 [DEBUG] [Thread-306495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:58:52.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:58:52.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:58:52.222 [DEBUG] [Thread-306495] [transport.py] [_log()] userauth is OK
2025-12-24T17:58:52.223 [DEBUG] [Thread-306495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:58:52.223 [DEBUG] [Thread-306495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:58:52.223 [DEBUG] [Thread-306495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:58:52.223 [DEBUG] [Thread-306495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:58:52.240 [INFO] [Thread-306495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:58:52.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:58:52.925 [DEBUG] [Thread-306495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:58:52.925 [DEBUG] [Thread-306495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:58:52.926 [DEBUG] [Thread-306495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:58:52.966 [DEBUG] [Thread-306495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:58:52.966 [DEBUG] [Thread-306495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:58:52.969 [DEBUG] [Thread-306495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:58:52.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:58:52.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:58:52.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:58:52.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:58:52.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:58:52.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:58:52.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:58:52.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:58:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:58:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.665344 -999.00  +22.70  22.39     31   +5.00 1 1 1 1 1   887    0 17.58 -23.87 ----- 22.4 22.4 160.8 35.4 26.6 -26.6 26.6 -28.1 28.1 -25.4 28.3 -26.1
2025-12-24T17:58:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:58:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:58:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.665344
2025-12-24T17:58:53.010 [DEBUG] [Thread-306495] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:58:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:58:53.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:58:53.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:58:53.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:58:53.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:58:53.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:58:15', tmtdew=20.89, humidity=25.08, cloud=0.0, wind=30.67, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:58:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:58:53.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:58:53.132 [DEBUG] [Thread-306498] [transport.py] [_log()] starting thread (client mode): 0xf5751750
2025-12-24T17:58:53.132 [DEBUG] [Thread-306498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:58:53.146 [DEBUG] [Thread-306498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:58:53.147 [INFO] [Thread-306498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] client lang: <none>
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] server lang: <none>
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] kex follows: False
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] Compression: none
2025-12-24T17:58:53.155 [DEBUG] [Thread-306498] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:58:53.216 [DEBUG] [Thread-306498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:58:53.217 [DEBUG] [Thread-306498] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:58:53.217 [DEBUG] [Thread-306498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:58:53.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:58:53.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:58:53.277 [DEBUG] [Thread-306498] [transport.py] [_log()] userauth is OK
2025-12-24T17:58:53.277 [DEBUG] [Thread-306498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:58:53.277 [DEBUG] [Thread-306498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:58:53.277 [DEBUG] [Thread-306498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:58:53.277 [DEBUG] [Thread-306498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:58:53.292 [INFO] [Thread-306498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:58:53.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:58:53.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:58:54.120 [DEBUG] [Thread-306498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:58:54.120 [DEBUG] [Thread-306498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:58:54.167 [DEBUG] [Thread-306498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:58:54.168 [DEBUG] [Thread-306498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:58:54.176 [DEBUG] [Thread-306498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:58:54.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:58:54.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T17:58:54.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T17:58:54.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:58:54.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:58:54.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:58:54.211 [DEBUG] [Thread-306498] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:58:57.737 [DEBUG] [Thread-306500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:59:12.919 [DEBUG] [Thread-306501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:59:24.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:59:24.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:59:24.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:59:25.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 58, 49), 20.73, 25.6, 0.0, 25.55, 22.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:59:25.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:58:49
2025-12-24T17:59:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:59:25.996 [DEBUG] [Thread-306502] [transport.py] [_log()] starting thread (client mode): 0xf5752cb0
2025-12-24T17:59:25.996 [DEBUG] [Thread-306502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:59:26.004 [DEBUG] [Thread-306502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:59:26.004 [INFO] [Thread-306502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] client lang: <none>
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] server lang: <none>
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] kex follows: False
2025-12-24T17:59:26.009 [DEBUG] [Thread-306502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:59:26.010 [DEBUG] [Thread-306502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:59:26.010 [DEBUG] [Thread-306502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:59:26.010 [DEBUG] [Thread-306502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:59:26.010 [DEBUG] [Thread-306502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:59:26.010 [DEBUG] [Thread-306502] [transport.py] [_log()] Compression: none
2025-12-24T17:59:26.010 [DEBUG] [Thread-306502] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:59:26.037 [DEBUG] [Thread-306502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:59:26.040 [DEBUG] [Thread-306502] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:59:26.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:59:26.042 [DEBUG] [Thread-306502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:59:26.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:59:26.045 [DEBUG] [Thread-306502] [transport.py] [_log()] userauth is OK
2025-12-24T17:59:26.045 [DEBUG] [Thread-306502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:59:26.046 [DEBUG] [Thread-306502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:59:26.046 [DEBUG] [Thread-306502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:59:26.046 [DEBUG] [Thread-306502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:59:26.064 [INFO] [Thread-306502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:59:26.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:59:26.718 [DEBUG] [Thread-306502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:59:26.718 [DEBUG] [Thread-306502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:59:26.718 [DEBUG] [Thread-306502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T17:59:26.759 [DEBUG] [Thread-306502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:59:26.759 [DEBUG] [Thread-306502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:59:26.761 [DEBUG] [Thread-306502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:59:26.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:59:26.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T17:59:26.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T17:59:26.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T17:59:26.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:59:26.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T17:59:26.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:59:26.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:59:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T17:59:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.666039 -999.00  +22.70  24.87     31   +4.90 1 1 1 1 1   887    0 17.31 -24.68 ----- 24.9 24.9 170.2 31.9 26.5 -26.3 26.7 -25.6 28.1 -24.2 28.2 -26.4
2025-12-24T17:59:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T17:59:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T17:59:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.666039
2025-12-24T17:59:26.791 [DEBUG] [Thread-306502] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:59:26.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T17:59:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T17:59:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T17:59:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T17:59:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T17:59:26.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:58:49', tmtdew=20.73, humidity=25.6, cloud=0.0, wind=25.55, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:59:05.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T17:59:26.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T17:59:26.889 [DEBUG] [Thread-306505] [transport.py] [_log()] starting thread (client mode): 0xf574f580
2025-12-24T17:59:26.890 [DEBUG] [Thread-306505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:59:26.904 [DEBUG] [Thread-306505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T17:59:26.904 [INFO] [Thread-306505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T17:59:26.911 [DEBUG] [Thread-306505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] client lang: <none>
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] server lang: <none>
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] kex follows: False
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] Compression: none
2025-12-24T17:59:26.912 [DEBUG] [Thread-306505] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:59:26.967 [DEBUG] [Thread-306505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:59:26.967 [DEBUG] [Thread-306505] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:59:26.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T17:59:26.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:59:26.968 [DEBUG] [Thread-306505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T17:59:27.028 [DEBUG] [Thread-306505] [transport.py] [_log()] userauth is OK
2025-12-24T17:59:27.028 [DEBUG] [Thread-306505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:59:27.028 [DEBUG] [Thread-306505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:59:27.028 [DEBUG] [Thread-306505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T17:59:27.028 [DEBUG] [Thread-306505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:59:27.053 [INFO] [Thread-306505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:59:27.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T17:59:27.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T17:59:27.912 [DEBUG] [Thread-306505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T17:59:27.912 [DEBUG] [Thread-306505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T17:59:27.952 [DEBUG] [Thread-306505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T17:59:27.952 [DEBUG] [Thread-306505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T17:59:27.960 [DEBUG] [Thread-306505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T17:59:27.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T17:59: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')
2025-12-24T17:59:27.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
2025-12-24T17:59:27.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T17:59:27.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T17:59:27.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T17:59:27.992 [DEBUG] [Thread-306505] [transport.py] [_log()] EOF in transport thread
2025-12-24T17:59:28.035 [DEBUG] [Thread-306507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:59:39.526 [DEBUG] [Thread-306508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:59:43.153 [DEBUG] [Thread-306509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:59:47.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:59:47.319 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:59:58.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T17:59:58.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T17:59:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T17:59:58.256 [DEBUG] [Thread-306510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T17:59:59.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 59, 22), 20.72, 25.62, 0.0, 25.46, 22.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T17:59:59.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:59:22
2025-12-24T17:59:59.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T17:59:59.407 [DEBUG] [Thread-306511] [transport.py] [_log()] starting thread (client mode): 0xf574f2e0
2025-12-24T17:59:59.408 [DEBUG] [Thread-306511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T17:59:59.417 [DEBUG] [Thread-306511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T17:59:59.417 [INFO] [Thread-306511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] client lang: <none>
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] server lang: <none>
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] kex follows: False
2025-12-24T17:59:59.422 [DEBUG] [Thread-306511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T17:59:59.423 [DEBUG] [Thread-306511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T17:59:59.423 [DEBUG] [Thread-306511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T17:59:59.423 [DEBUG] [Thread-306511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T17:59:59.423 [DEBUG] [Thread-306511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T17:59:59.423 [DEBUG] [Thread-306511] [transport.py] [_log()] Compression: none
2025-12-24T17:59:59.423 [DEBUG] [Thread-306511] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T17:59:59.457 [DEBUG] [Thread-306511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T17:59:59.461 [DEBUG] [Thread-306511] [transport.py] [_log()] Switch to new keys ...
2025-12-24T17:59:59.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T17:59:59.464 [DEBUG] [Thread-306511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T17:59:59.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T17:59:59.466 [DEBUG] [Thread-306511] [transport.py] [_log()] userauth is OK
2025-12-24T17:59:59.466 [DEBUG] [Thread-306511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T17:59:59.467 [DEBUG] [Thread-306511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T17:59:59.467 [DEBUG] [Thread-306511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T17:59:59.467 [DEBUG] [Thread-306511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T17:59:59.488 [INFO] [Thread-306511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T17:59:59.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:00:00.051 [DEBUG] [Thread-306511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:00:00.051 [DEBUG] [Thread-306511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:00:00.052 [DEBUG] [Thread-306511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:00:00.091 [DEBUG] [Thread-306511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:00:00.092 [DEBUG] [Thread-306511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:00:00.094 [DEBUG] [Thread-306511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:00:00.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:00:00.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:00:00.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:00:00.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:00:00.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:00:00.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:00:00.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:00:00.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:00:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:00:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.666386 -999.00  +22.70  20.90     31   +5.00 1 1 1 1 1   887    0 17.37 -24.24 ----- 20.9 20.9 161.0 27.8 26.5 -26.3 26.6 -25.7 28.0 -24.2 28.2 -26.5
2025-12-24T18:00:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:00:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:00:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.666386
2025-12-24T18:00:00.118 [DEBUG] [Thread-306511] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:00:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:00:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:00:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:00:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:00:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:00:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:59:22', tmtdew=20.72, humidity=25.62, cloud=0.0, wind=25.46, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T15:59:35.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:00:00.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:00:00.222 [DEBUG] [Thread-306514] [transport.py] [_log()] starting thread (client mode): 0xf5789e10
2025-12-24T18:00:00.222 [DEBUG] [Thread-306514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:00:00.237 [DEBUG] [Thread-306514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:00:00.237 [INFO] [Thread-306514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] client lang: <none>
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] server lang: <none>
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] kex follows: False
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:00:00.244 [DEBUG] [Thread-306514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:00:00.245 [DEBUG] [Thread-306514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:00:00.245 [DEBUG] [Thread-306514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:00:00.245 [DEBUG] [Thread-306514] [transport.py] [_log()] Compression: none
2025-12-24T18:00:00.245 [DEBUG] [Thread-306514] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:00:00.302 [DEBUG] [Thread-306514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:00:00.302 [DEBUG] [Thread-306514] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:00:00.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:00:00.302 [DEBUG] [Thread-306514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:00:00.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:00:00.360 [DEBUG] [Thread-306514] [transport.py] [_log()] userauth is OK
2025-12-24T18:00:00.360 [DEBUG] [Thread-306514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:00:00.360 [DEBUG] [Thread-306514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:00:00.360 [DEBUG] [Thread-306514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:00:00.360 [DEBUG] [Thread-306514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:00:00.373 [INFO] [Thread-306514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:00:00.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:00:00.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:00:01.208 [DEBUG] [Thread-306514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:00:01.208 [DEBUG] [Thread-306514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:00:01.256 [DEBUG] [Thread-306514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:00:01.257 [DEBUG] [Thread-306514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:00:01.265 [DEBUG] [Thread-306514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:00:01.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:00:01.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:00:01.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:00:01.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:00:01.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:00:01.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:00:01.304 [DEBUG] [Thread-306514] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:00:13.521 [DEBUG] [Thread-306516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:00:28.712 [DEBUG] [Thread-306517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:00:31.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:00:31.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:00:31.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
2025-12-24T18:00:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 17, 59, 56), 20.88, 25.12, 0.0, 24.56, 23.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:00:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 17:59:56
2025-12-24T18:00:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:00:32.655 [DEBUG] [Thread-306518] [transport.py] [_log()] starting thread (client mode): 0xf5718520
2025-12-24T18:00:32.656 [DEBUG] [Thread-306518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:00:32.656 [DEBUG] [Thread-306518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:00:32.656 [INFO] [Thread-306518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] client lang: <none>
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] server lang: <none>
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] kex follows: False
2025-12-24T18:00:32.660 [DEBUG] [Thread-306518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:00:32.661 [DEBUG] [Thread-306518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:00:32.661 [DEBUG] [Thread-306518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:00:32.661 [DEBUG] [Thread-306518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:00:32.661 [DEBUG] [Thread-306518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:00:32.661 [DEBUG] [Thread-306518] [transport.py] [_log()] Compression: none
2025-12-24T18:00:32.661 [DEBUG] [Thread-306518] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:00:32.693 [DEBUG] [Thread-306518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:00:32.696 [DEBUG] [Thread-306518] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:00:32.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:00:32.698 [DEBUG] [Thread-306518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:00:32.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:00:32.700 [DEBUG] [Thread-306518] [transport.py] [_log()] userauth is OK
2025-12-24T18:00:32.700 [DEBUG] [Thread-306518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:00:32.700 [DEBUG] [Thread-306518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:00:32.700 [DEBUG] [Thread-306518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:00:32.700 [DEBUG] [Thread-306518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:00:32.713 [INFO] [Thread-306518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:00:32.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:00:33.303 [DEBUG] [Thread-306518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:00:33.303 [DEBUG] [Thread-306518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:00:33.303 [DEBUG] [Thread-306518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:00:33.344 [DEBUG] [Thread-306518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:00:33.344 [DEBUG] [Thread-306518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:00:33.349 [DEBUG] [Thread-306518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:00:33.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:00:33.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:00:33.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:00:33.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:00:33.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:00:33.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:00:33.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:00:33.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:00:33.366 [DEBUG] [Thread-306518] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:00:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:00:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.666733 -999.00  +22.60  18.63     31   +4.90 1 1 1 1 1   887    0 17.40 -23.17 ----- 18.6 18.6 149.0 27.2 26.4 -26.6 26.6 -27.5 28.0 -24.7 28.1 -26.7
2025-12-24T18:00:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:00:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:00:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.666733
2025-12-24T18:00:33.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:00:33.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:00:33.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:00:33.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:00:33.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:00:33.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T17:59:56', tmtdew=20.88, humidity=25.12, cloud=0.0, wind=24.56, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:00:05.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:00:33.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:00:33.480 [DEBUG] [Thread-306521] [transport.py] [_log()] starting thread (client mode): 0xf81c33d0
2025-12-24T18:00:33.480 [DEBUG] [Thread-306521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:00:33.495 [DEBUG] [Thread-306521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:00:33.495 [INFO] [Thread-306521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:00:33.503 [DEBUG] [Thread-306521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:00:33.504 [DEBUG] [Thread-306521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:00:33.504 [DEBUG] [Thread-306521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:00:33.504 [DEBUG] [Thread-306521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:00:33.504 [DEBUG] [Thread-306521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:00:33.504 [DEBUG] [Thread-306521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] client lang: <none>
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] server lang: <none>
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] kex follows: False
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] Compression: none
2025-12-24T18:00:33.548 [DEBUG] [Thread-306521] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:00:33.564 [DEBUG] [Thread-306521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:00:33.564 [DEBUG] [Thread-306521] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:00:33.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:00:33.564 [DEBUG] [Thread-306521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:00:33.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:00:33.626 [DEBUG] [Thread-306521] [transport.py] [_log()] userauth is OK
2025-12-24T18:00:33.626 [DEBUG] [Thread-306521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:00:33.626 [DEBUG] [Thread-306521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:00:33.626 [DEBUG] [Thread-306521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:00:33.626 [DEBUG] [Thread-306521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:00:33.643 [INFO] [Thread-306521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:00:33.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:00:33.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:00:34.493 [DEBUG] [Thread-306521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:00:34.493 [DEBUG] [Thread-306521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:00:34.540 [DEBUG] [Thread-306521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:00:34.540 [DEBUG] [Thread-306521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:00:34.548 [DEBUG] [Thread-306521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:00:34.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:00:34.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:00:34.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:00:34.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:00:34.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:00:34.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:00:34.581 [DEBUG] [Thread-306521] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:00:39.855 [DEBUG] [Thread-306523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:00:43.850 [DEBUG] [Thread-306524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:00:47.460 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:00:47.462 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:00:59.038 [DEBUG] [Thread-306525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:01:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:01:04.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:01:04.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:01:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 0, 29), 20.9, 25.08, 0.0, 24.98, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:01:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:00:29
2025-12-24T18:01:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:01:05.995 [DEBUG] [Thread-306526] [transport.py] [_log()] starting thread (client mode): 0xf5752bc0
2025-12-24T18:01:05.996 [DEBUG] [Thread-306526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:01:05.996 [DEBUG] [Thread-306526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:01:05.996 [INFO] [Thread-306526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] client lang: <none>
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] server lang: <none>
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] kex follows: False
2025-12-24T18:01:06.001 [DEBUG] [Thread-306526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:01:06.002 [DEBUG] [Thread-306526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:01:06.002 [DEBUG] [Thread-306526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:01:06.002 [DEBUG] [Thread-306526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:01:06.002 [DEBUG] [Thread-306526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:01:06.002 [DEBUG] [Thread-306526] [transport.py] [_log()] Compression: none
2025-12-24T18:01:06.002 [DEBUG] [Thread-306526] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:01:06.033 [DEBUG] [Thread-306526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:01:06.037 [DEBUG] [Thread-306526] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:01:06.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:01:06.040 [DEBUG] [Thread-306526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:01:06.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:01:06.042 [DEBUG] [Thread-306526] [transport.py] [_log()] userauth is OK
2025-12-24T18:01:06.042 [DEBUG] [Thread-306526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:01:06.043 [DEBUG] [Thread-306526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:01:06.043 [DEBUG] [Thread-306526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:01:06.043 [DEBUG] [Thread-306526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:01:06.063 [INFO] [Thread-306526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:01:06.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:01:06.639 [DEBUG] [Thread-306526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:01:06.639 [DEBUG] [Thread-306526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:01:06.639 [DEBUG] [Thread-306526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:01:06.680 [DEBUG] [Thread-306526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:01:06.680 [DEBUG] [Thread-306526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:01:06.682 [DEBUG] [Thread-306526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:01:06.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:01:06.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:01:06.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:01:06.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:01:06.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:01:06.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:01:06.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:01:06.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:01:06.710 [DEBUG] [Thread-306526] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:01:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:01:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.667081 -999.00  +22.50  21.77     31   +5.00 1 1 1 1 1   887    0 17.09 -21.97 ----- 21.8 21.8 157.2 29.5 26.4 -26.4 26.6 -26.8 27.9 -24.5 28.1 -26.8
2025-12-24T18:01:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:01:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:01:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.667081
2025-12-24T18:01:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:01:06.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:01:06.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:01:06.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:01:06.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:01:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:00:29', tmtdew=20.9, humidity=25.08, cloud=0.0, wind=24.98, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:00:35.798', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:01:06.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:01:06.830 [DEBUG] [Thread-306529] [transport.py] [_log()] starting thread (client mode): 0xf572b640
2025-12-24T18:01:06.831 [DEBUG] [Thread-306529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:01:06.845 [DEBUG] [Thread-306529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:01:06.845 [INFO] [Thread-306529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:01:06.852 [DEBUG] [Thread-306529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:01:06.852 [DEBUG] [Thread-306529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] client lang: <none>
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] server lang: <none>
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] kex follows: False
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] Compression: none
2025-12-24T18:01:06.853 [DEBUG] [Thread-306529] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:01:06.911 [DEBUG] [Thread-306529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:01:06.911 [DEBUG] [Thread-306529] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:01:06.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:01:06.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:01:06.911 [DEBUG] [Thread-306529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:01:06.968 [DEBUG] [Thread-306529] [transport.py] [_log()] userauth is OK
2025-12-24T18:01:06.968 [DEBUG] [Thread-306529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:01:06.968 [DEBUG] [Thread-306529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:01:06.968 [DEBUG] [Thread-306529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:01:06.968 [DEBUG] [Thread-306529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:01:06.985 [INFO] [Thread-306529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:01:06.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:01:06.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:01:07.808 [DEBUG] [Thread-306529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:01:07.809 [DEBUG] [Thread-306529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:01:07.856 [DEBUG] [Thread-306529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:01:07.856 [DEBUG] [Thread-306529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:01:07.864 [DEBUG] [Thread-306529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:01:07.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:01:07.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:01:07.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') -> 00000000
2025-12-24T18:01:07.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:01:07.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:01:07.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:01:07.899 [DEBUG] [Thread-306529] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:01:14.146 [DEBUG] [Thread-306531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:01:29.289 [DEBUG] [Thread-306532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:01:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:01:37.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:01:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:01:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 1, 2), 20.92, 25.03, 0.0, 24.76, 23.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:01:38.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:01:02
2025-12-24T18:01:39.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:01:39.342 [DEBUG] [Thread-306533] [transport.py] [_log()] starting thread (client mode): 0xf57181c0
2025-12-24T18:01:39.344 [DEBUG] [Thread-306533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:01:39.350 [DEBUG] [Thread-306533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:01:39.351 [INFO] [Thread-306533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:01:39.355 [DEBUG] [Thread-306533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] client lang: <none>
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] server lang: <none>
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] kex follows: False
2025-12-24T18:01:39.356 [DEBUG] [Thread-306533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:01:39.357 [DEBUG] [Thread-306533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:01:39.357 [DEBUG] [Thread-306533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:01:39.357 [DEBUG] [Thread-306533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:01:39.357 [DEBUG] [Thread-306533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:01:39.357 [DEBUG] [Thread-306533] [transport.py] [_log()] Compression: none
2025-12-24T18:01:39.357 [DEBUG] [Thread-306533] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:01:39.388 [DEBUG] [Thread-306533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:01:39.392 [DEBUG] [Thread-306533] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:01:39.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:01:39.394 [DEBUG] [Thread-306533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:01:39.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:01:39.397 [DEBUG] [Thread-306533] [transport.py] [_log()] userauth is OK
2025-12-24T18:01:39.397 [DEBUG] [Thread-306533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:01:39.397 [DEBUG] [Thread-306533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:01:39.397 [DEBUG] [Thread-306533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:01:39.397 [DEBUG] [Thread-306533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:01:39.415 [INFO] [Thread-306533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:01:39.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:01:40.045 [DEBUG] [Thread-306533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:01:40.045 [DEBUG] [Thread-306533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:01:40.046 [DEBUG] [Thread-306533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:01:40.086 [DEBUG] [Thread-306533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:01:40.086 [DEBUG] [Thread-306533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:01:40.087 [DEBUG] [Thread-306533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:01:40.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:01:40.107 [DEBUG] [Thread-306535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:01:40.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:01:40.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:01:40.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:01:40.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:01:40.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:01:40.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:01:40.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:01:40.119 [DEBUG] [Thread-306533] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:01:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:01:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.667428 -999.00  +22.70  17.42     31   +5.00 1 1 1 1 1   887    0 16.95 -24.81 ----- 17.4 17.4 158.2 24.4 26.4 -26.3 26.5 -25.7 27.9 -24.8 28.1 -25.9
2025-12-24T18:01:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:01:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:01:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.667428
2025-12-24T18:01:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:01:40.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:01:40.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:01:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:01:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:01:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:01:02', tmtdew=20.92, humidity=25.03, cloud=0.0, wind=24.76, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:01:05.779', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:01:40.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:01:40.242 [DEBUG] [Thread-306537] [transport.py] [_log()] starting thread (client mode): 0xf572b220
2025-12-24T18:01:40.243 [DEBUG] [Thread-306537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:01:40.257 [DEBUG] [Thread-306537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:01:40.257 [INFO] [Thread-306537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:01:40.265 [DEBUG] [Thread-306537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:01:40.265 [DEBUG] [Thread-306537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:01:40.265 [DEBUG] [Thread-306537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] client lang: <none>
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] server lang: <none>
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] kex follows: False
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] Compression: none
2025-12-24T18:01:40.266 [DEBUG] [Thread-306537] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:01:40.324 [DEBUG] [Thread-306537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:01:40.325 [DEBUG] [Thread-306537] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:01:40.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:01:40.326 [DEBUG] [Thread-306537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:01:40.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:01:40.381 [DEBUG] [Thread-306537] [transport.py] [_log()] userauth is OK
2025-12-24T18:01:40.381 [DEBUG] [Thread-306537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:01:40.381 [DEBUG] [Thread-306537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:01:40.381 [DEBUG] [Thread-306537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:01:40.381 [DEBUG] [Thread-306537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:01:40.400 [INFO] [Thread-306537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:01:40.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:01:40.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:01:41.219 [DEBUG] [Thread-306537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:01:41.219 [DEBUG] [Thread-306537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:01:41.266 [DEBUG] [Thread-306537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:01:41.266 [DEBUG] [Thread-306537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:01:41.274 [DEBUG] [Thread-306537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:01:41.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:01:41.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:01:41.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:01:41.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:01:41.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:01:41.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:01:41.309 [DEBUG] [Thread-306537] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:01:44.383 [DEBUG] [Thread-306539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:01:47.611 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:01:47.612 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:01:59.520 [DEBUG] [Thread-306540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:02:11.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:02:11.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:02:11.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
2025-12-24T18:02:12.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 1, 36), 20.66, 25.78, 0.0, 24.61, 22.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:02:12.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:01:36
2025-12-24T18:02:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:02:12.693 [DEBUG] [Thread-306541] [transport.py] [_log()] starting thread (client mode): 0xf574ed70
2025-12-24T18:02:12.694 [DEBUG] [Thread-306541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:02:12.698 [DEBUG] [Thread-306541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:02:12.698 [INFO] [Thread-306541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:02:12.704 [DEBUG] [Thread-306541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] client lang: <none>
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] server lang: <none>
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] kex follows: False
2025-12-24T18:02:12.705 [DEBUG] [Thread-306541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:02:12.706 [DEBUG] [Thread-306541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:02:12.706 [DEBUG] [Thread-306541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:02:12.706 [DEBUG] [Thread-306541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:02:12.706 [DEBUG] [Thread-306541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:02:12.706 [DEBUG] [Thread-306541] [transport.py] [_log()] Compression: none
2025-12-24T18:02:12.706 [DEBUG] [Thread-306541] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:02:12.750 [DEBUG] [Thread-306541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:02:12.757 [DEBUG] [Thread-306541] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:02:12.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:02:12.760 [DEBUG] [Thread-306541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:02:12.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:02:12.763 [DEBUG] [Thread-306541] [transport.py] [_log()] userauth is OK
2025-12-24T18:02:12.763 [DEBUG] [Thread-306541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:02:12.763 [DEBUG] [Thread-306541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:02:12.763 [DEBUG] [Thread-306541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:02:12.763 [DEBUG] [Thread-306541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:02:12.782 [INFO] [Thread-306541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:02:12.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:02:13.384 [DEBUG] [Thread-306541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:02:13.384 [DEBUG] [Thread-306541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:02:13.385 [DEBUG] [Thread-306541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:02:13.425 [DEBUG] [Thread-306541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:02:13.425 [DEBUG] [Thread-306541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:02:13.486 [DEBUG] [Thread-306541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:02:13.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:02:13.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:02:13.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:02:13.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:02:13.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:02:13.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:02:13.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:02:13.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:02:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:02:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.668122 -999.00  +22.70  16.72     31   +4.90 1 1 1 1 1   887    0 17.30 -22.49 ----- 16.7 16.7 156.8 28.0 26.4 -26.8 26.5 -25.7 27.9 -25.0 28.0 -26.0
2025-12-24T18:02:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:02:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:02:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.668122
2025-12-24T18:02:13.510 [DEBUG] [Thread-306541] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:02:13.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:02:13.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:02:13.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:02:13.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:02:13.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:02:13.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:01:36', tmtdew=20.66, humidity=25.78, cloud=0.0, wind=24.61, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:02:05.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:02:13.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:02:13.622 [DEBUG] [Thread-306544] [transport.py] [_log()] starting thread (client mode): 0xf81f20b0
2025-12-24T18:02:13.622 [DEBUG] [Thread-306544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:02:13.637 [DEBUG] [Thread-306544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:02:13.637 [INFO] [Thread-306544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] client lang: <none>
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] server lang: <none>
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] kex follows: False
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] Compression: none
2025-12-24T18:02:13.644 [DEBUG] [Thread-306544] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:02:13.702 [DEBUG] [Thread-306544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:02:13.702 [DEBUG] [Thread-306544] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:02:13.702 [DEBUG] [Thread-306544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:02:13.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:02:13.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:02:13.760 [DEBUG] [Thread-306544] [transport.py] [_log()] userauth is OK
2025-12-24T18:02:13.760 [DEBUG] [Thread-306544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:02:13.760 [DEBUG] [Thread-306544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:02:13.760 [DEBUG] [Thread-306544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:02:13.760 [DEBUG] [Thread-306544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:02:13.781 [INFO] [Thread-306544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:02:13.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:02:13.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:02:14.598 [DEBUG] [Thread-306544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:02:14.598 [DEBUG] [Thread-306544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:02:14.613 [DEBUG] [Thread-306546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:02:14.646 [DEBUG] [Thread-306544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:02:14.646 [DEBUG] [Thread-306544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:02:14.654 [DEBUG] [Thread-306544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:02:14.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:02:14.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:02:14.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:02:14.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:02:14.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:02:14.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:02:14.691 [DEBUG] [Thread-306544] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:02:29.809 [DEBUG] [Thread-306547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:02:40.341 [DEBUG] [Thread-306548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:02:44.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:02:44.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:02:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:02:44.908 [DEBUG] [Thread-306549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:02:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 2, 9), 20.69, 25.73, 0.0, 24.97, 22.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:02:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:02:09
2025-12-24T18:02:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:02:46.066 [DEBUG] [Thread-306550] [transport.py] [_log()] starting thread (client mode): 0xf57525c0
2025-12-24T18:02:46.067 [DEBUG] [Thread-306550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:02:46.078 [DEBUG] [Thread-306550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:02:46.078 [INFO] [Thread-306550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] client lang: <none>
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] server lang: <none>
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] kex follows: False
2025-12-24T18:02:46.083 [DEBUG] [Thread-306550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:02:46.084 [DEBUG] [Thread-306550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:02:46.084 [DEBUG] [Thread-306550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:02:46.084 [DEBUG] [Thread-306550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:02:46.084 [DEBUG] [Thread-306550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:02:46.084 [DEBUG] [Thread-306550] [transport.py] [_log()] Compression: none
2025-12-24T18:02:46.084 [DEBUG] [Thread-306550] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:02:46.115 [DEBUG] [Thread-306550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:02:46.119 [DEBUG] [Thread-306550] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:02:46.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:02:46.121 [DEBUG] [Thread-306550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:02:46.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:02:46.123 [DEBUG] [Thread-306550] [transport.py] [_log()] userauth is OK
2025-12-24T18:02:46.123 [DEBUG] [Thread-306550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:02:46.123 [DEBUG] [Thread-306550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:02:46.123 [DEBUG] [Thread-306550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:02:46.123 [DEBUG] [Thread-306550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:02:46.138 [INFO] [Thread-306550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:02:46.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:02:46.757 [DEBUG] [Thread-306550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:02:46.757 [DEBUG] [Thread-306550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:02:46.759 [DEBUG] [Thread-306550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:02:46.798 [DEBUG] [Thread-306550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:02:46.798 [DEBUG] [Thread-306550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:02:46.802 [DEBUG] [Thread-306550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:02:46.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:02:46.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:02:46.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:02:46.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:02:46.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:02:46.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:02:46.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:02:46.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:02:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:02:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.668469 -999.00  +22.60  17.14     31   +4.90 1 1 1 1 1   887    0 17.01 -21.79 ----- 17.1 17.1 155.0 26.5 26.3 -26.5 26.4 -26.3 27.8 -24.3 27.9 -26.1
2025-12-24T18:02:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:02:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:02:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.668469
2025-12-24T18:02:46.838 [DEBUG] [Thread-306550] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:02:46.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:02:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:02:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:02:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:02:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:02:46.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:02:09', tmtdew=20.69, humidity=25.73, cloud=0.0, wind=24.97, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:02:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:02:46.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:02:46.965 [DEBUG] [Thread-306553] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-24T18:02:46.966 [DEBUG] [Thread-306553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:02:46.980 [DEBUG] [Thread-306553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:02:46.980 [INFO] [Thread-306553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:02:46.987 [DEBUG] [Thread-306553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:02:46.987 [DEBUG] [Thread-306553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:02:46.987 [DEBUG] [Thread-306553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:02:46.987 [DEBUG] [Thread-306553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:02:46.987 [DEBUG] [Thread-306553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:02:46.987 [DEBUG] [Thread-306553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] client lang: <none>
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] server lang: <none>
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] kex follows: False
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] Compression: none
2025-12-24T18:02:46.988 [DEBUG] [Thread-306553] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:02:47.049 [DEBUG] [Thread-306553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:02:47.049 [DEBUG] [Thread-306553] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:02:47.050 [DEBUG] [Thread-306553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:02:47.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:02:47.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:02:47.104 [DEBUG] [Thread-306553] [transport.py] [_log()] userauth is OK
2025-12-24T18:02:47.104 [DEBUG] [Thread-306553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:02:47.104 [DEBUG] [Thread-306553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:02:47.104 [DEBUG] [Thread-306553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:02:47.105 [DEBUG] [Thread-306553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:02:47.125 [INFO] [Thread-306553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:02:47.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:02:47.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:02:47.752 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:02:47.754 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:02:47.961 [DEBUG] [Thread-306553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:02:47.961 [DEBUG] [Thread-306553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:02:48.010 [DEBUG] [Thread-306553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:02:48.010 [DEBUG] [Thread-306553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:02:48.019 [DEBUG] [Thread-306553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:02:48.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:02:48.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:02:48.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:02:48.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:02:48.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:02:48.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:02:48.056 [DEBUG] [Thread-306553] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:02:59.998 [DEBUG] [Thread-306555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:03:15.194 [DEBUG] [Thread-306556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:03:18.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:03:18.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:03:18.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:03:18.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 2, 42), 20.7, 25.78, 0.0, 24.61, 22.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:03:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:02:42
2025-12-24T18:03:19.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:03:19.359 [DEBUG] [Thread-306557] [transport.py] [_log()] starting thread (client mode): 0xf571a8f0
2025-12-24T18:03:19.359 [DEBUG] [Thread-306557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:03:19.360 [DEBUG] [Thread-306557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:03:19.360 [INFO] [Thread-306557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] client lang: <none>
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] server lang: <none>
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] kex follows: False
2025-12-24T18:03:19.364 [DEBUG] [Thread-306557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:03:19.365 [DEBUG] [Thread-306557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:03:19.365 [DEBUG] [Thread-306557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:03:19.365 [DEBUG] [Thread-306557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:03:19.365 [DEBUG] [Thread-306557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:03:19.365 [DEBUG] [Thread-306557] [transport.py] [_log()] Compression: none
2025-12-24T18:03:19.365 [DEBUG] [Thread-306557] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:03:19.397 [DEBUG] [Thread-306557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:03:19.399 [DEBUG] [Thread-306557] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:03:19.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:03:19.401 [DEBUG] [Thread-306557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:03:19.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:03:19.404 [DEBUG] [Thread-306557] [transport.py] [_log()] userauth is OK
2025-12-24T18:03:19.404 [DEBUG] [Thread-306557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:03:19.404 [DEBUG] [Thread-306557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:03:19.404 [DEBUG] [Thread-306557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:03:19.404 [DEBUG] [Thread-306557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:03:19.422 [INFO] [Thread-306557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:03:19.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:03:20.049 [DEBUG] [Thread-306557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:03:20.049 [DEBUG] [Thread-306557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:03:20.050 [DEBUG] [Thread-306557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:03:20.091 [DEBUG] [Thread-306557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:03:20.091 [DEBUG] [Thread-306557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:03:20.094 [DEBUG] [Thread-306557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:03:20.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:03:20.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:03:20.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:03:20.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:03:20.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:03:20.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:03:20.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:03:20.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:03:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:03:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.668816 -999.00  +22.70  19.19     31   +4.90 1 1 1 1 1   887    0 17.25 -22.14 ----- 19.2 19.2 165.9 23.1 26.2 -26.3 26.4 -25.9 27.8 -24.5 28.1 -26.2
2025-12-24T18:03:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:03:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:03:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.668816
2025-12-24T18:03:20.121 [DEBUG] [Thread-306557] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:03:20.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:03:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:03:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:03:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:03:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:03:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:02:42', tmtdew=20.7, humidity=25.78, cloud=0.0, wind=24.61, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:03:05.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:03:20.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:03:20.220 [DEBUG] [Thread-306560] [transport.py] [_log()] starting thread (client mode): 0xf5753460
2025-12-24T18:03:20.220 [DEBUG] [Thread-306560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:03:20.234 [DEBUG] [Thread-306560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:03:20.234 [INFO] [Thread-306560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:03:20.241 [DEBUG] [Thread-306560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:03:20.241 [DEBUG] [Thread-306560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:03:20.241 [DEBUG] [Thread-306560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:03:20.241 [DEBUG] [Thread-306560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:03:20.241 [DEBUG] [Thread-306560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:03:20.241 [DEBUG] [Thread-306560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] client lang: <none>
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] server lang: <none>
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] kex follows: False
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] Compression: none
2025-12-24T18:03:20.242 [DEBUG] [Thread-306560] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:03:20.300 [DEBUG] [Thread-306560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:03:20.300 [DEBUG] [Thread-306560] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:03:20.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:03:20.301 [DEBUG] [Thread-306560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:03:20.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:03:20.356 [DEBUG] [Thread-306560] [transport.py] [_log()] userauth is OK
2025-12-24T18:03:20.356 [DEBUG] [Thread-306560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:03:20.356 [DEBUG] [Thread-306560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:03:20.356 [DEBUG] [Thread-306560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:03:20.356 [DEBUG] [Thread-306560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:03:20.369 [INFO] [Thread-306560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:03:20.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:03:20.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:03:21.178 [DEBUG] [Thread-306560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:03:21.178 [DEBUG] [Thread-306560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:03:21.225 [DEBUG] [Thread-306560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:03:21.225 [DEBUG] [Thread-306560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:03:21.234 [DEBUG] [Thread-306560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:03:21.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:03:21.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:03:21.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:03:21.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:03:21.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:03:21.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:03:21.272 [DEBUG] [Thread-306560] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:03:30.368 [DEBUG] [Thread-306562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:03:40.644 [DEBUG] [Thread-306563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:03:45.490 [DEBUG] [Thread-306564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:03:47.894 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:03:47.896 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:03:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:03:51.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:03:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:03:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 3, 16), 20.72, 25.76, 0.0, 26.47, 22.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:03:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:03:16
2025-12-24T18:03:52.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:03:52.587 [DEBUG] [Thread-306565] [transport.py] [_log()] starting thread (client mode): 0xf81c1ba0
2025-12-24T18:03:52.588 [DEBUG] [Thread-306565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:03:52.590 [DEBUG] [Thread-306565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:03:52.590 [INFO] [Thread-306565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] client lang: <none>
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] server lang: <none>
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] kex follows: False
2025-12-24T18:03:52.594 [DEBUG] [Thread-306565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:03:52.595 [DEBUG] [Thread-306565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:03:52.595 [DEBUG] [Thread-306565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:03:52.595 [DEBUG] [Thread-306565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:03:52.595 [DEBUG] [Thread-306565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:03:52.595 [DEBUG] [Thread-306565] [transport.py] [_log()] Compression: none
2025-12-24T18:03:52.595 [DEBUG] [Thread-306565] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:03:52.624 [DEBUG] [Thread-306565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:03:52.627 [DEBUG] [Thread-306565] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:03:52.628 [DEBUG] [Thread-306565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:03:52.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:03:52.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:03:52.632 [DEBUG] [Thread-306565] [transport.py] [_log()] userauth is OK
2025-12-24T18:03:52.632 [DEBUG] [Thread-306565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:03:52.632 [DEBUG] [Thread-306565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:03:52.632 [DEBUG] [Thread-306565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:03:52.632 [DEBUG] [Thread-306565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:03:52.650 [INFO] [Thread-306565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:03:52.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:03:53.274 [DEBUG] [Thread-306565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:03:53.274 [DEBUG] [Thread-306565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:03:53.276 [DEBUG] [Thread-306565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:03:53.316 [DEBUG] [Thread-306565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:03:53.316 [DEBUG] [Thread-306565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:03:53.318 [DEBUG] [Thread-306565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:03:53.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:03:53.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:03:53.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:03:53.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:03:53.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:03:53.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:03:53.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:03:53.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:03:53.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:03:53.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.669164 -999.00  +22.80  22.98     31   +5.00 1 1 1 1 1   887    0 17.42 -22.04 ----- 23.0 23.0 151.8 25.8 26.3 -25.8 26.5 -25.1 27.8 -24.2 28.1 -26.9
2025-12-24T18:03:53.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:03:53.345 [DEBUG] [Thread-306565] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:03:53.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:03:53.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.669164
2025-12-24T18:03:53.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:03:53.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:03:53.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:03:53.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:03:53.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:03:53.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:03:16', tmtdew=20.72, humidity=25.76, cloud=0.0, wind=26.47, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:03:35.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:03:53.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:03:53.461 [DEBUG] [Thread-306568] [transport.py] [_log()] starting thread (client mode): 0xf81c1870
2025-12-24T18:03:53.461 [DEBUG] [Thread-306568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:03:53.475 [DEBUG] [Thread-306568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:03:53.475 [INFO] [Thread-306568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] client lang: <none>
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] server lang: <none>
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] kex follows: False
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] Compression: none
2025-12-24T18:03:53.483 [DEBUG] [Thread-306568] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:03:53.543 [DEBUG] [Thread-306568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:03:53.543 [DEBUG] [Thread-306568] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:03:53.543 [DEBUG] [Thread-306568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:03:53.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:03:53.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:03:53.604 [DEBUG] [Thread-306568] [transport.py] [_log()] userauth is OK
2025-12-24T18:03:53.604 [DEBUG] [Thread-306568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:03:53.604 [DEBUG] [Thread-306568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:03:53.604 [DEBUG] [Thread-306568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:03:53.604 [DEBUG] [Thread-306568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:03:53.621 [INFO] [Thread-306568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:03:53.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:03:53.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:03:54.461 [DEBUG] [Thread-306568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:03:54.462 [DEBUG] [Thread-306568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:03:54.508 [DEBUG] [Thread-306568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:03:54.508 [DEBUG] [Thread-306568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:03:54.517 [DEBUG] [Thread-306568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:03:54.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:03:54.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')
2025-12-24T18:03:54.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') -> 00000000
2025-12-24T18:03:54.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:03:54.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:03:54.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:03:54.551 [DEBUG] [Thread-306568] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:04:00.577 [DEBUG] [Thread-306570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:04:15.807 [DEBUG] [Thread-306571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:04:24.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:04:24.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:04:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:04:25.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 3, 49), 20.87, 25.28, 0.0, 30.45, 23.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:04:25.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:03:49
2025-12-24T18:04:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:04:26.201 [DEBUG] [Thread-306572] [transport.py] [_log()] starting thread (client mode): 0xf574e260
2025-12-24T18:04:26.202 [DEBUG] [Thread-306572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:04:26.215 [DEBUG] [Thread-306572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:04:26.215 [INFO] [Thread-306572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:04:26.220 [DEBUG] [Thread-306572] [transport.py] [_log()] client lang: <none>
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] server lang: <none>
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] kex follows: False
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] Compression: none
2025-12-24T18:04:26.221 [DEBUG] [Thread-306572] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:04:26.252 [DEBUG] [Thread-306572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:04:26.256 [DEBUG] [Thread-306572] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:04:26.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:04:26.258 [DEBUG] [Thread-306572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:04:26.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:04:26.260 [DEBUG] [Thread-306572] [transport.py] [_log()] userauth is OK
2025-12-24T18:04:26.260 [DEBUG] [Thread-306572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:04:26.260 [DEBUG] [Thread-306572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:04:26.260 [DEBUG] [Thread-306572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:04:26.260 [DEBUG] [Thread-306572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:04:26.273 [INFO] [Thread-306572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:04:26.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:04:26.899 [DEBUG] [Thread-306572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:04:26.899 [DEBUG] [Thread-306572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:04:26.900 [DEBUG] [Thread-306572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:04:26.941 [DEBUG] [Thread-306572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:04:26.941 [DEBUG] [Thread-306572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:04:26.944 [DEBUG] [Thread-306572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:04:26.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:04:26.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:04:26.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:04:26.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:04:26.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:04:26.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:04:26.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:04:26.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:04:26.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:04:26.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.669511 -999.00  +22.60  16.13     31   +4.90 1 1 1 1 1   887    0 17.27 -21.10 ----- 16.1 16.1 143.6 33.4 26.3 -26.2 26.5 -26.5 27.8 -24.6 27.9 -26.1
2025-12-24T18:04:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:04:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:04:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.669511
2025-12-24T18:04:26.974 [DEBUG] [Thread-306572] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:04:26.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:04:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:04:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:04:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:04:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:04:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:03:49', tmtdew=20.87, humidity=25.28, cloud=0.0, wind=30.45, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:04:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:04:27.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:04:27.073 [DEBUG] [Thread-306575] [transport.py] [_log()] starting thread (client mode): 0xf81f02e0
2025-12-24T18:04:27.074 [DEBUG] [Thread-306575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:04:27.088 [DEBUG] [Thread-306575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:04:27.088 [INFO] [Thread-306575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] client lang: <none>
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] server lang: <none>
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] kex follows: False
2025-12-24T18:04:27.096 [DEBUG] [Thread-306575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:04:27.097 [DEBUG] [Thread-306575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:04:27.097 [DEBUG] [Thread-306575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:04:27.097 [DEBUG] [Thread-306575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:04:27.097 [DEBUG] [Thread-306575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:04:27.097 [DEBUG] [Thread-306575] [transport.py] [_log()] Compression: none
2025-12-24T18:04:27.097 [DEBUG] [Thread-306575] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:04:27.154 [DEBUG] [Thread-306575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:04:27.154 [DEBUG] [Thread-306575] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:04:27.154 [DEBUG] [Thread-306575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:04:27.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:04:27.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:04:27.212 [DEBUG] [Thread-306575] [transport.py] [_log()] userauth is OK
2025-12-24T18:04:27.213 [DEBUG] [Thread-306575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:04:27.213 [DEBUG] [Thread-306575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:04:27.213 [DEBUG] [Thread-306575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:04:27.213 [DEBUG] [Thread-306575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:04:27.226 [INFO] [Thread-306575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:04:27.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:04:27.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:04:28.101 [DEBUG] [Thread-306575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:04:28.102 [DEBUG] [Thread-306575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:04:28.148 [DEBUG] [Thread-306575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:04:28.149 [DEBUG] [Thread-306575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:04:28.157 [DEBUG] [Thread-306575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:04:28.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:04:28.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:04:28.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:04:28.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:04:28.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:04:28.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:04:28.194 [DEBUG] [Thread-306575] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:04:30.913 [DEBUG] [Thread-306577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:04:40.932 [DEBUG] [Thread-306578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:04:46.007 [DEBUG] [Thread-306579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:04:48.039 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:04:48.040 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:04:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:04:58.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:04:58.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:04:59.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 4, 22), 20.86, 25.28, 0.0, 29.11, 22.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:04:59.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:04:22
2025-12-24T18:04:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:04:59.645 [DEBUG] [Thread-306580] [transport.py] [_log()] starting thread (client mode): 0xf574c7f0
2025-12-24T18:04:59.646 [DEBUG] [Thread-306580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:04:59.654 [DEBUG] [Thread-306580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:04:59.654 [INFO] [Thread-306580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] client lang: <none>
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] server lang: <none>
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] kex follows: False
2025-12-24T18:04:59.659 [DEBUG] [Thread-306580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:04:59.660 [DEBUG] [Thread-306580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:04:59.660 [DEBUG] [Thread-306580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:04:59.660 [DEBUG] [Thread-306580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:04:59.660 [DEBUG] [Thread-306580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:04:59.660 [DEBUG] [Thread-306580] [transport.py] [_log()] Compression: none
2025-12-24T18:04:59.660 [DEBUG] [Thread-306580] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:04:59.695 [DEBUG] [Thread-306580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:04:59.699 [DEBUG] [Thread-306580] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:04:59.700 [DEBUG] [Thread-306580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:04:59.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:04:59.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:04:59.703 [DEBUG] [Thread-306580] [transport.py] [_log()] userauth is OK
2025-12-24T18:04:59.703 [DEBUG] [Thread-306580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:04:59.704 [DEBUG] [Thread-306580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:04:59.704 [DEBUG] [Thread-306580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:04:59.704 [DEBUG] [Thread-306580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:04:59.724 [INFO] [Thread-306580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:04:59.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:05:00.366 [DEBUG] [Thread-306580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:05:00.367 [DEBUG] [Thread-306580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:05:00.367 [DEBUG] [Thread-306580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:05:00.408 [DEBUG] [Thread-306580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:05:00.408 [DEBUG] [Thread-306580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:05:00.410 [DEBUG] [Thread-306580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:05:00.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:05:00.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:05:00.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:05:00.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:05:00.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:05:00.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:05:00.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:05:00.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:05:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:05:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.669858 -999.00  +22.70  22.68     31   +4.90 1 1 1 1 1   887    0 17.52 -19.95 ----- 22.7 22.7 142.8 28.9 26.2 -26.1 26.4 -26.1 27.7 -24.4 27.9 -26.4
2025-12-24T18:05:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:05:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:05:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.669858
2025-12-24T18:05:00.439 [DEBUG] [Thread-306580] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:05:00.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:05:00.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:05:00.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:05:00.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:05:00.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:05:00.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:04:22', tmtdew=20.86, humidity=25.28, cloud=0.0, wind=29.11, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:04:35.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:05:00.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:05:00.544 [DEBUG] [Thread-306583] [transport.py] [_log()] starting thread (client mode): 0xf5753af0
2025-12-24T18:05:00.544 [DEBUG] [Thread-306583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:05:00.559 [DEBUG] [Thread-306583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:05:00.559 [INFO] [Thread-306583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] client lang: <none>
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] server lang: <none>
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] kex follows: False
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:05:00.566 [DEBUG] [Thread-306583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:05:00.567 [DEBUG] [Thread-306583] [transport.py] [_log()] Compression: none
2025-12-24T18:05:00.567 [DEBUG] [Thread-306583] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:05:00.624 [DEBUG] [Thread-306583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:05:00.625 [DEBUG] [Thread-306583] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:05:00.626 [DEBUG] [Thread-306583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:05:00.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:05:00.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:05:00.680 [DEBUG] [Thread-306583] [transport.py] [_log()] userauth is OK
2025-12-24T18:05:00.680 [DEBUG] [Thread-306583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:05:00.680 [DEBUG] [Thread-306583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:05:00.680 [DEBUG] [Thread-306583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:05:00.680 [DEBUG] [Thread-306583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:05:00.699 [INFO] [Thread-306583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:05:00.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:05:00.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:05:01.095 [DEBUG] [Thread-306585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:05:01.547 [DEBUG] [Thread-306583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:05:01.548 [DEBUG] [Thread-306583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:05:01.596 [DEBUG] [Thread-306583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:05:01.596 [DEBUG] [Thread-306583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:05:01.605 [DEBUG] [Thread-306583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:05:01.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:05:01.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:05:01.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:05:01.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:05:01.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:05:01.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:05:01.643 [DEBUG] [Thread-306583] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:05:16.275 [DEBUG] [Thread-306586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:05:31.400 [DEBUG] [Thread-306587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:05:31.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:05:31.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:05:31.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:05:32.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 4, 56), 20.58, 25.88, 0.0, 30.79, 22.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:05:32.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:04:56
2025-12-24T18:05:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:05:32.868 [DEBUG] [Thread-306588] [transport.py] [_log()] starting thread (client mode): 0xf574e620
2025-12-24T18:05:32.869 [DEBUG] [Thread-306588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:05:32.879 [DEBUG] [Thread-306588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:05:32.879 [INFO] [Thread-306588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] client lang: <none>
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] server lang: <none>
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] kex follows: False
2025-12-24T18:05:32.885 [DEBUG] [Thread-306588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:05:32.886 [DEBUG] [Thread-306588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:05:32.886 [DEBUG] [Thread-306588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:05:32.886 [DEBUG] [Thread-306588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:05:32.886 [DEBUG] [Thread-306588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:05:32.886 [DEBUG] [Thread-306588] [transport.py] [_log()] Compression: none
2025-12-24T18:05:32.886 [DEBUG] [Thread-306588] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:05:32.925 [DEBUG] [Thread-306588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:05:32.931 [DEBUG] [Thread-306588] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:05:32.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:05:32.933 [DEBUG] [Thread-306588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:05:32.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:05:32.936 [DEBUG] [Thread-306588] [transport.py] [_log()] userauth is OK
2025-12-24T18:05:32.936 [DEBUG] [Thread-306588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:05:32.936 [DEBUG] [Thread-306588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:05:32.936 [DEBUG] [Thread-306588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:05:32.936 [DEBUG] [Thread-306588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:05:32.954 [INFO] [Thread-306588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:05:32.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:05:33.636 [DEBUG] [Thread-306588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:05:33.636 [DEBUG] [Thread-306588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:05:33.637 [DEBUG] [Thread-306588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:05:33.676 [DEBUG] [Thread-306588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:05:33.677 [DEBUG] [Thread-306588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:05:33.679 [DEBUG] [Thread-306588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:05:33.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:05:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:05:33.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:05:33.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:05:33.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:05:33.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:05:33.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:05:33.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:05:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:05:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.670205 -999.00  +22.50  18.04     31   +4.90 1 1 1 1 1   887    0 17.17 -19.64 ----- 18.0 18.0 149.8 27.6 26.2 -26.0 26.4 -25.6 27.8 -23.7 27.9 -26.5
2025-12-24T18:05:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:05:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:05:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.670205
2025-12-24T18:05:33.707 [DEBUG] [Thread-306588] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:05:33.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:05:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:05:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:05:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:05:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:05:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:04:56', tmtdew=20.58, humidity=25.88, cloud=0.0, wind=30.79, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:05:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:05:33.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:05:33.845 [DEBUG] [Thread-306591] [transport.py] [_log()] starting thread (client mode): 0xf571b100
2025-12-24T18:05:33.846 [DEBUG] [Thread-306591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:05:33.860 [DEBUG] [Thread-306591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:05:33.860 [INFO] [Thread-306591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] client lang: <none>
2025-12-24T18:05:33.874 [DEBUG] [Thread-306591] [transport.py] [_log()] server lang: <none>
2025-12-24T18:05:33.875 [DEBUG] [Thread-306591] [transport.py] [_log()] kex follows: False
2025-12-24T18:05:33.875 [DEBUG] [Thread-306591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:05:33.875 [DEBUG] [Thread-306591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:05:33.875 [DEBUG] [Thread-306591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:05:33.875 [DEBUG] [Thread-306591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:05:33.875 [DEBUG] [Thread-306591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:05:33.875 [DEBUG] [Thread-306591] [transport.py] [_log()] Compression: none
2025-12-24T18:05:33.875 [DEBUG] [Thread-306591] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:05:33.933 [DEBUG] [Thread-306591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:05:33.933 [DEBUG] [Thread-306591] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:05:33.934 [DEBUG] [Thread-306591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:05:33.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:05:33.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:05:33.992 [DEBUG] [Thread-306591] [transport.py] [_log()] userauth is OK
2025-12-24T18:05:33.992 [DEBUG] [Thread-306591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:05:33.992 [DEBUG] [Thread-306591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:05:33.992 [DEBUG] [Thread-306591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:05:33.992 [DEBUG] [Thread-306591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:05:34.007 [INFO] [Thread-306591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:05:34.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:05:34.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:05:34.842 [DEBUG] [Thread-306591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:05:34.842 [DEBUG] [Thread-306591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:05:34.890 [DEBUG] [Thread-306591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:05:34.890 [DEBUG] [Thread-306591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:05:34.899 [DEBUG] [Thread-306591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:05:34.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:05:34.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:05:34.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:05:34.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:05:34.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:05:34.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:05:34.933 [DEBUG] [Thread-306591] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:05:41.169 [DEBUG] [Thread-306593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:05:46.489 [DEBUG] [Thread-306594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:05:48.182 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:05:48.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:06:01.675 [DEBUG] [Thread-306595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:06:04.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:06:04.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:06:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:06:05.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 5, 30), 20.57, 25.91, 0.0, 31.92, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:06:05.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:05:30
2025-12-24T18:06:06.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:06:06.323 [DEBUG] [Thread-306596] [transport.py] [_log()] starting thread (client mode): 0xf578abc0
2025-12-24T18:06:06.324 [DEBUG] [Thread-306596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:06:06.336 [DEBUG] [Thread-306596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:06:06.336 [INFO] [Thread-306596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] client lang: <none>
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] server lang: <none>
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] kex follows: False
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] Compression: none
2025-12-24T18:06:06.340 [DEBUG] [Thread-306596] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:06:06.368 [DEBUG] [Thread-306596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:06:06.370 [DEBUG] [Thread-306596] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:06:06.371 [DEBUG] [Thread-306596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:06:06.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:06:06.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:06:06.409 [DEBUG] [Thread-306596] [transport.py] [_log()] userauth is OK
2025-12-24T18:06:06.409 [DEBUG] [Thread-306596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:06:06.409 [DEBUG] [Thread-306596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:06:06.409 [DEBUG] [Thread-306596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:06:06.409 [DEBUG] [Thread-306596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:06:06.438 [INFO] [Thread-306596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:06:06.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:06:07.062 [DEBUG] [Thread-306596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:06:07.062 [DEBUG] [Thread-306596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:06:07.073 [DEBUG] [Thread-306596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:06:07.103 [DEBUG] [Thread-306596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:06:07.104 [DEBUG] [Thread-306596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:06:07.107 [DEBUG] [Thread-306596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:06:07.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:06:07.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:06:07.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:06:07.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:06:07.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:06:07.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:06:07.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:06:07.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:06:07.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:06:07.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.670552 -999.00  +22.50  19.04     32   +5.00 1 1 1 1 1   887    0 17.13 -19.94 ----- 19.0 19.0 142.0 27.7 26.2 -26.1 26.4 -25.4 27.7 -24.7 27.9 -25.8
2025-12-24T18:06:07.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:06:07.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:06:07.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.670552
2025-12-24T18:06:07.141 [DEBUG] [Thread-306596] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:06:07.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:06:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:06:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:06:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:06:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:06:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:05:30', tmtdew=20.57, humidity=25.91, cloud=0.0, wind=31.92, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:05:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:06:07.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:06:07.250 [DEBUG] [Thread-306599] [transport.py] [_log()] starting thread (client mode): 0xf03bee00
2025-12-24T18:06:07.250 [DEBUG] [Thread-306599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:06:07.265 [DEBUG] [Thread-306599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:06:07.265 [INFO] [Thread-306599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:06:07.272 [DEBUG] [Thread-306599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:06:07.272 [DEBUG] [Thread-306599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] client lang: <none>
2025-12-24T18:06:07.273 [DEBUG] [Thread-306599] [transport.py] [_log()] server lang: <none>
2025-12-24T18:06:07.274 [DEBUG] [Thread-306599] [transport.py] [_log()] kex follows: False
2025-12-24T18:06:07.274 [DEBUG] [Thread-306599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:06:07.274 [DEBUG] [Thread-306599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:06:07.274 [DEBUG] [Thread-306599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:06:07.274 [DEBUG] [Thread-306599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:06:07.274 [DEBUG] [Thread-306599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:06:07.274 [DEBUG] [Thread-306599] [transport.py] [_log()] Compression: none
2025-12-24T18:06:07.274 [DEBUG] [Thread-306599] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:06:07.331 [DEBUG] [Thread-306599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:06:07.332 [DEBUG] [Thread-306599] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:06:07.332 [DEBUG] [Thread-306599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:06:07.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:06:07.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:06:07.388 [DEBUG] [Thread-306599] [transport.py] [_log()] userauth is OK
2025-12-24T18:06:07.388 [DEBUG] [Thread-306599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:06:07.388 [DEBUG] [Thread-306599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:06:07.388 [DEBUG] [Thread-306599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:06:07.388 [DEBUG] [Thread-306599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:06:07.403 [INFO] [Thread-306599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:06:07.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:06:07.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:06:08.220 [DEBUG] [Thread-306599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:06:08.220 [DEBUG] [Thread-306599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:06:08.267 [DEBUG] [Thread-306599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:06:08.268 [DEBUG] [Thread-306599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:06:08.276 [DEBUG] [Thread-306599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:06:08.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:06:08.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:06:08.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:06:08.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:06:08.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:06:08.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:06:08.309 [DEBUG] [Thread-306599] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:06:16.798 [DEBUG] [Thread-306601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:06:31.987 [DEBUG] [Thread-306602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:06:38.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:06:38.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:06:38.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
2025-12-24T18:06:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 6, 3), 20.54, 25.95, 0.0, 30.3, 22.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:06:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:06:03
2025-12-24T18:06:39.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:06:39.792 [DEBUG] [Thread-306603] [transport.py] [_log()] starting thread (client mode): 0xf03be2f0
2025-12-24T18:06:39.792 [DEBUG] [Thread-306603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:06:39.801 [DEBUG] [Thread-306603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:06:39.801 [INFO] [Thread-306603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:06:39.806 [DEBUG] [Thread-306603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:06:39.806 [DEBUG] [Thread-306603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:06:39.806 [DEBUG] [Thread-306603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:06:39.806 [DEBUG] [Thread-306603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:06:39.806 [DEBUG] [Thread-306603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:06:39.806 [DEBUG] [Thread-306603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:06:39.806 [DEBUG] [Thread-306603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:06:39.806 [DEBUG] [Thread-306603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:06:39.807 [DEBUG] [Thread-306603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:06:39.807 [DEBUG] [Thread-306603] [transport.py] [_log()] client lang: <none>
2025-12-24T18:06:39.807 [DEBUG] [Thread-306603] [transport.py] [_log()] server lang: <none>
2025-12-24T18:06:39.807 [DEBUG] [Thread-306603] [transport.py] [_log()] kex follows: False
2025-12-24T18:06:39.807 [DEBUG] [Thread-306603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:06:39.807 [DEBUG] [Thread-306603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:06:39.808 [DEBUG] [Thread-306603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:06:39.808 [DEBUG] [Thread-306603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:06:39.808 [DEBUG] [Thread-306603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:06:39.808 [DEBUG] [Thread-306603] [transport.py] [_log()] Compression: none
2025-12-24T18:06:39.808 [DEBUG] [Thread-306603] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:06:39.841 [DEBUG] [Thread-306603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:06:39.845 [DEBUG] [Thread-306603] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:06:39.846 [DEBUG] [Thread-306603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:06:39.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:06:39.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:06:39.850 [DEBUG] [Thread-306603] [transport.py] [_log()] userauth is OK
2025-12-24T18:06:39.850 [DEBUG] [Thread-306603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:06:39.850 [DEBUG] [Thread-306603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:06:39.850 [DEBUG] [Thread-306603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:06:39.850 [DEBUG] [Thread-306603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:06:39.869 [INFO] [Thread-306603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:06:39.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:06:40.543 [DEBUG] [Thread-306603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:06:40.543 [DEBUG] [Thread-306603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:06:40.545 [DEBUG] [Thread-306603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:06:40.585 [DEBUG] [Thread-306603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:06:40.585 [DEBUG] [Thread-306603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:06:40.590 [DEBUG] [Thread-306603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:06:40.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:06:40.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:06:40.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:06:40.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:06:40.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:06:40.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:06:40.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:06:40.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:06:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:06:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.670900 -999.00  +22.40  22.87     32   +5.00 1 1 1 1 1   887    0 17.05 -19.73 ----- 22.9 22.9 159.2 28.8 26.1 -26.4 26.4 -25.4 27.8 -24.4 27.8 -26.3
2025-12-24T18:06:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:06:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:06:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.670900
2025-12-24T18:06:40.635 [DEBUG] [Thread-306603] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:06:40.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:06:40.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:06:40.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:06:40.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:06:40.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:06:40.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:06:03', tmtdew=20.54, humidity=25.95, cloud=0.0, wind=30.3, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:06:05.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:06:40.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:06:40.757 [DEBUG] [Thread-306606] [transport.py] [_log()] starting thread (client mode): 0xf03bf2e0
2025-12-24T18:06:40.757 [DEBUG] [Thread-306606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:06:40.771 [DEBUG] [Thread-306606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:06:40.771 [INFO] [Thread-306606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] client lang: <none>
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] server lang: <none>
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] kex follows: False
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] Compression: none
2025-12-24T18:06:40.779 [DEBUG] [Thread-306606] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:06:40.836 [DEBUG] [Thread-306606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:06:40.837 [DEBUG] [Thread-306606] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:06:40.837 [DEBUG] [Thread-306606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:06:40.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:06:40.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:06:40.892 [DEBUG] [Thread-306606] [transport.py] [_log()] userauth is OK
2025-12-24T18:06:40.892 [DEBUG] [Thread-306606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:06:40.892 [DEBUG] [Thread-306606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:06:40.892 [DEBUG] [Thread-306606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:06:40.893 [DEBUG] [Thread-306606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:06:40.908 [INFO] [Thread-306606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:06:40.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:06:40.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:06:41.467 [DEBUG] [Thread-306608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:06:41.693 [DEBUG] [Thread-306606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:06:41.693 [DEBUG] [Thread-306606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:06:41.732 [DEBUG] [Thread-306606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:06:41.732 [DEBUG] [Thread-306606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:06:41.740 [DEBUG] [Thread-306606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:06:41.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:06:41.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:06:41.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:06:41.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:06:41.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:06:41.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:06:41.774 [DEBUG] [Thread-306606] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:06:47.106 [DEBUG] [Thread-306609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:06:48.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:06:48.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:07:02.286 [DEBUG] [Thread-306610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:07:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:07:11.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:07:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:07:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 6, 36), 20.64, 25.55, 0.0, 27.86, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:07:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:06:36
2025-12-24T18:07:13.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:07:13.531 [DEBUG] [Thread-306611] [transport.py] [_log()] starting thread (client mode): 0xf578baf0
2025-12-24T18:07:13.532 [DEBUG] [Thread-306611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:07:13.533 [DEBUG] [Thread-306611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:07:13.533 [INFO] [Thread-306611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] client lang: <none>
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] server lang: <none>
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] kex follows: False
2025-12-24T18:07:13.538 [DEBUG] [Thread-306611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:07:13.539 [DEBUG] [Thread-306611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:07:13.539 [DEBUG] [Thread-306611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:07:13.539 [DEBUG] [Thread-306611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:07:13.539 [DEBUG] [Thread-306611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:07:13.539 [DEBUG] [Thread-306611] [transport.py] [_log()] Compression: none
2025-12-24T18:07:13.539 [DEBUG] [Thread-306611] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:07:13.568 [DEBUG] [Thread-306611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:07:13.572 [DEBUG] [Thread-306611] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:07:13.574 [DEBUG] [Thread-306611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:07:13.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:07:13.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:07:13.578 [DEBUG] [Thread-306611] [transport.py] [_log()] userauth is OK
2025-12-24T18:07:13.578 [DEBUG] [Thread-306611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:07:13.578 [DEBUG] [Thread-306611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:07:13.578 [DEBUG] [Thread-306611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:07:13.578 [DEBUG] [Thread-306611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:07:13.591 [INFO] [Thread-306611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:07:13.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:07:14.213 [DEBUG] [Thread-306611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:07:14.213 [DEBUG] [Thread-306611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:07:14.215 [DEBUG] [Thread-306611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:07:14.254 [DEBUG] [Thread-306611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:07:14.255 [DEBUG] [Thread-306611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:07:14.258 [DEBUG] [Thread-306611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:07:14.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:07:14.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:07:14.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:07:14.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:07:14.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:07:14.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:07:14.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:07:14.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:07:14.281 [DEBUG] [Thread-306611] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:07:14.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:07:14.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.671594 -999.00  +22.50  18.47     32   +5.00 1 1 1 1 1   887    0 17.17 -24.05 ----- 18.5 18.5 141.0 24.2 26.1 -25.6 26.4 -25.4 27.6 -24.0 27.9 -24.8
2025-12-24T18:07:14.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:07:14.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:07:14.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.671594
2025-12-24T18:07:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:07:14.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:07:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:07:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:07:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:07:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:06:36', tmtdew=20.64, humidity=25.55, cloud=0.0, wind=27.86, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:07:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:07:14.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:07:14.413 [DEBUG] [Thread-306614] [transport.py] [_log()] starting thread (client mode): 0xf57507c0
2025-12-24T18:07:14.413 [DEBUG] [Thread-306614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:07:14.428 [DEBUG] [Thread-306614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:07:14.428 [INFO] [Thread-306614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:07:14.435 [DEBUG] [Thread-306614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:07:14.436 [DEBUG] [Thread-306614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:07:14.436 [DEBUG] [Thread-306614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:07:14.436 [DEBUG] [Thread-306614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:07:14.436 [DEBUG] [Thread-306614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:07:14.436 [DEBUG] [Thread-306614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:07:14.436 [DEBUG] [Thread-306614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:07:14.436 [DEBUG] [Thread-306614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:07:14.436 [DEBUG] [Thread-306614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] client lang: <none>
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] server lang: <none>
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] kex follows: False
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] Compression: none
2025-12-24T18:07:14.437 [DEBUG] [Thread-306614] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:07:14.493 [DEBUG] [Thread-306614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:07:14.494 [DEBUG] [Thread-306614] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:07:14.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:07:14.495 [DEBUG] [Thread-306614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:07:14.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:07:14.549 [DEBUG] [Thread-306614] [transport.py] [_log()] userauth is OK
2025-12-24T18:07:14.549 [DEBUG] [Thread-306614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:07:14.549 [DEBUG] [Thread-306614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:07:14.549 [DEBUG] [Thread-306614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:07:14.549 [DEBUG] [Thread-306614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:07:14.568 [INFO] [Thread-306614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:07:14.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:07:14.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:07:15.437 [DEBUG] [Thread-306614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:07:15.438 [DEBUG] [Thread-306614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:07:15.485 [DEBUG] [Thread-306614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:07:15.485 [DEBUG] [Thread-306614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:07:15.493 [DEBUG] [Thread-306614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:07:15.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:07:15.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:07:15.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:07:15.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:07:15.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:07:15.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:07:15.535 [DEBUG] [Thread-306614] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:07:17.388 [DEBUG] [Thread-306616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:07:32.526 [DEBUG] [Thread-306617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:07:41.728 [DEBUG] [Thread-306618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:07:45.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:07:45.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:07: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
2025-12-24T18:07:46.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 7, 9), 20.63, 25.56, 0.0, 26.91, 22.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:07:46.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:07:09
2025-12-24T18:07:46.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:07:46.904 [DEBUG] [Thread-306619] [transport.py] [_log()] starting thread (client mode): 0xf5788460
2025-12-24T18:07:46.905 [DEBUG] [Thread-306619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:07:46.913 [DEBUG] [Thread-306619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:07:46.913 [INFO] [Thread-306619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:07:46.919 [DEBUG] [Thread-306619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:07:46.919 [DEBUG] [Thread-306619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:07:46.919 [DEBUG] [Thread-306619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:07:46.919 [DEBUG] [Thread-306619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:07:46.919 [DEBUG] [Thread-306619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:07:46.919 [DEBUG] [Thread-306619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:07:46.919 [DEBUG] [Thread-306619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:07:46.919 [DEBUG] [Thread-306619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] client lang: <none>
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] server lang: <none>
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] kex follows: False
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:07:46.920 [DEBUG] [Thread-306619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:07:46.921 [DEBUG] [Thread-306619] [transport.py] [_log()] Compression: none
2025-12-24T18:07:46.921 [DEBUG] [Thread-306619] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:07:46.949 [DEBUG] [Thread-306619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:07:46.952 [DEBUG] [Thread-306619] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:07:46.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:07:46.953 [DEBUG] [Thread-306619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:07:46.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:07:46.956 [DEBUG] [Thread-306619] [transport.py] [_log()] userauth is OK
2025-12-24T18:07:46.956 [DEBUG] [Thread-306619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:07:46.956 [DEBUG] [Thread-306619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:07:46.956 [DEBUG] [Thread-306619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:07:46.956 [DEBUG] [Thread-306619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:07:46.973 [INFO] [Thread-306619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:07:46.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:07:47.576 [DEBUG] [Thread-306619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:07:47.576 [DEBUG] [Thread-306619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:07:47.577 [DEBUG] [Thread-306619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:07:47.593 [DEBUG] [Thread-306621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:07:47.616 [DEBUG] [Thread-306619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:07:47.616 [DEBUG] [Thread-306619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:07:47.618 [DEBUG] [Thread-306619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:07:47.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:07:47.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:07:47.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:07:47.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:07:47.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:07:47.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:07:47.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:07:47.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:07:47.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:07:47.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.671941 -999.00  +22.50  18.69     31   +5.00 1 1 1 1 1   887    0 17.19 -24.11 ----- 18.7 18.7 155.8 23.0 26.1 -24.9 26.5 -25.0 27.8 -23.8 27.9 -26.1
2025-12-24T18:07:47.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:07:47.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:07:47.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.671941
2025-12-24T18:07:47.651 [DEBUG] [Thread-306619] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:07:47.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:07:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:07:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:07:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:07:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:07:47.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:07:09', tmtdew=20.63, humidity=25.56, cloud=0.0, wind=26.91, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:07:35.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:07:47.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:07:47.758 [DEBUG] [Thread-306623] [transport.py] [_log()] starting thread (client mode): 0xf5789fc0
2025-12-24T18:07:47.758 [DEBUG] [Thread-306623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:07:47.775 [DEBUG] [Thread-306623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:07:47.775 [INFO] [Thread-306623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] client lang: <none>
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] server lang: <none>
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] kex follows: False
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] Compression: none
2025-12-24T18:07:47.783 [DEBUG] [Thread-306623] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:07:47.838 [DEBUG] [Thread-306623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:07:47.839 [DEBUG] [Thread-306623] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:07:47.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:07:47.839 [DEBUG] [Thread-306623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:07:47.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:07:47.900 [DEBUG] [Thread-306623] [transport.py] [_log()] userauth is OK
2025-12-24T18:07:47.900 [DEBUG] [Thread-306623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:07:47.900 [DEBUG] [Thread-306623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:07:47.900 [DEBUG] [Thread-306623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:07:47.900 [DEBUG] [Thread-306623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:07:47.914 [INFO] [Thread-306623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:07:47.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:07:47.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:07:48.489 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:07:48.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:07:48.753 [DEBUG] [Thread-306623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:07:48.753 [DEBUG] [Thread-306623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:07:48.802 [DEBUG] [Thread-306623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:07:48.803 [DEBUG] [Thread-306623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:07:48.814 [DEBUG] [Thread-306623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:07:48.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:07:48.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:07:48.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:07:48.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:07:48.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:07:48.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:07:48.853 [DEBUG] [Thread-306623] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:08:02.697 [DEBUG] [Thread-306625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:08:17.851 [DEBUG] [Thread-306626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:08:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:08:18.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:08:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:08:19.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 7, 43), 20.59, 25.98, 0.0, 24.12, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:08:19.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:07:43
2025-12-24T18:08:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:08:20.215 [DEBUG] [Thread-306627] [transport.py] [_log()] starting thread (client mode): 0xf5719ed0
2025-12-24T18:08:20.216 [DEBUG] [Thread-306627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:08:20.226 [DEBUG] [Thread-306627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:08:20.226 [INFO] [Thread-306627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] client lang: <none>
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] server lang: <none>
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] kex follows: False
2025-12-24T18:08:20.232 [DEBUG] [Thread-306627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:08:20.233 [DEBUG] [Thread-306627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:08:20.233 [DEBUG] [Thread-306627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:08:20.233 [DEBUG] [Thread-306627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:08:20.233 [DEBUG] [Thread-306627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:08:20.233 [DEBUG] [Thread-306627] [transport.py] [_log()] Compression: none
2025-12-24T18:08:20.233 [DEBUG] [Thread-306627] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:08:20.268 [DEBUG] [Thread-306627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:08:20.271 [DEBUG] [Thread-306627] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:08:20.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:08:20.275 [DEBUG] [Thread-306627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:08:20.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:08:20.277 [DEBUG] [Thread-306627] [transport.py] [_log()] userauth is OK
2025-12-24T18:08:20.277 [DEBUG] [Thread-306627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:08:20.277 [DEBUG] [Thread-306627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:08:20.277 [DEBUG] [Thread-306627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:08:20.277 [DEBUG] [Thread-306627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:08:20.299 [INFO] [Thread-306627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:08:20.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:08:20.973 [DEBUG] [Thread-306627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:08:20.973 [DEBUG] [Thread-306627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:08:20.974 [DEBUG] [Thread-306627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:08:21.014 [DEBUG] [Thread-306627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:08:21.014 [DEBUG] [Thread-306627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:08:21.016 [DEBUG] [Thread-306627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:08:21.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:08:21.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:08:21.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:08:21.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:08:21.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:08:21.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:08:21.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:08:21.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:08:21.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:08:21.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.672289 -999.00  +22.50  14.18     31   +5.00 1 1 1 1 1   887    0 16.93 -26.44 ----- 14.2 14.2 157.8 23.4 26.2 -25.8 26.4 -24.7 27.7 -24.5 27.9 -25.6
2025-12-24T18:08:21.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:08:21.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:08:21.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.672289
2025-12-24T18:08:21.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:08:21.051 [DEBUG] [Thread-306627] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:08:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:08:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:08:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:08:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:08:21.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:07:43', tmtdew=20.59, humidity=25.98, cloud=0.0, wind=24.12, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:08:05.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:08:21.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:08:21.144 [DEBUG] [Thread-306630] [transport.py] [_log()] starting thread (client mode): 0xf03be200
2025-12-24T18:08:21.144 [DEBUG] [Thread-306630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:08:21.158 [DEBUG] [Thread-306630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:08:21.158 [INFO] [Thread-306630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] client lang: <none>
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] server lang: <none>
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] kex follows: False
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] Compression: none
2025-12-24T18:08:21.166 [DEBUG] [Thread-306630] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:08:21.223 [DEBUG] [Thread-306630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:08:21.223 [DEBUG] [Thread-306630] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:08:21.223 [DEBUG] [Thread-306630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:08:21.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:08:21.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:08:21.280 [DEBUG] [Thread-306630] [transport.py] [_log()] userauth is OK
2025-12-24T18:08:21.281 [DEBUG] [Thread-306630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:08:21.281 [DEBUG] [Thread-306630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:08:21.281 [DEBUG] [Thread-306630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:08:21.281 [DEBUG] [Thread-306630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:08:21.299 [INFO] [Thread-306630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:08:21.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:08:21.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:08:22.208 [DEBUG] [Thread-306630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:08:22.208 [DEBUG] [Thread-306630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:08:22.256 [DEBUG] [Thread-306630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:08:22.256 [DEBUG] [Thread-306630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:08:22.265 [DEBUG] [Thread-306630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:08:22.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:08:22.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:08:22.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:08:22.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:08:22.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:08:22.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:08:22.300 [DEBUG] [Thread-306630] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:08:32.993 [DEBUG] [Thread-306632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:08:42.040 [DEBUG] [Thread-306633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:08:48.146 [DEBUG] [Thread-306634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:08:48.633 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:08:48.634 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:08:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:08:52.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:08:52.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:08:53.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 8, 16), 20.69, 25.83, 0.0, 23.5, 22.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:08:53.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:08:16
2025-12-24T18:08:53.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:08:53.848 [DEBUG] [Thread-306635] [transport.py] [_log()] starting thread (client mode): 0xf03bdb70
2025-12-24T18:08:53.849 [DEBUG] [Thread-306635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:08:53.853 [DEBUG] [Thread-306635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:08:53.853 [INFO] [Thread-306635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:08:53.857 [DEBUG] [Thread-306635] [transport.py] [_log()] client lang: <none>
2025-12-24T18:08:53.858 [DEBUG] [Thread-306635] [transport.py] [_log()] server lang: <none>
2025-12-24T18:08:53.858 [DEBUG] [Thread-306635] [transport.py] [_log()] kex follows: False
2025-12-24T18:08:53.858 [DEBUG] [Thread-306635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:08:53.859 [DEBUG] [Thread-306635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:08:53.859 [DEBUG] [Thread-306635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:08:53.860 [DEBUG] [Thread-306635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:08:53.860 [DEBUG] [Thread-306635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:08:53.860 [DEBUG] [Thread-306635] [transport.py] [_log()] Compression: none
2025-12-24T18:08:53.860 [DEBUG] [Thread-306635] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:08:53.892 [DEBUG] [Thread-306635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:08:53.895 [DEBUG] [Thread-306635] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:08:53.896 [DEBUG] [Thread-306635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:08:53.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:08:53.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:08:53.900 [DEBUG] [Thread-306635] [transport.py] [_log()] userauth is OK
2025-12-24T18:08:53.900 [DEBUG] [Thread-306635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:08:53.900 [DEBUG] [Thread-306635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:08:53.900 [DEBUG] [Thread-306635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:08:53.900 [DEBUG] [Thread-306635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:08:53.918 [INFO] [Thread-306635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:08:53.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:08:54.572 [DEBUG] [Thread-306635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:08:54.573 [DEBUG] [Thread-306635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:08:54.574 [DEBUG] [Thread-306635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:08:54.615 [DEBUG] [Thread-306635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:08:54.615 [DEBUG] [Thread-306635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:08:54.619 [DEBUG] [Thread-306635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:08:54.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:08:54.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:08:54.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:08:54.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:08:54.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:08:54.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:08:54.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:08:54.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:08:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:08:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.672636 -999.00  +22.70  17.24     31   +5.00 1 1 1 1 1   887    0 17.11 -30.12 ----- 17.2 17.2 165.2 23.9 26.2 -25.3 26.4 -24.9 27.7 -23.7 27.9 -25.3
2025-12-24T18:08:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:08:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:08:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.672636
2025-12-24T18:08:54.652 [DEBUG] [Thread-306635] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:08:54.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:08:54.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:08:54.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:08:54.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:08:54.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:08:54.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:08:16', tmtdew=20.69, humidity=25.83, cloud=0.0, wind=23.5, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:08:35.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:08:54.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:08:54.771 [DEBUG] [Thread-306638] [transport.py] [_log()] starting thread (client mode): 0xf81f3790
2025-12-24T18:08:54.771 [DEBUG] [Thread-306638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:08:54.787 [DEBUG] [Thread-306638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:08:54.787 [INFO] [Thread-306638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:08:54.794 [DEBUG] [Thread-306638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] client lang: <none>
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] server lang: <none>
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] kex follows: False
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:08:54.795 [DEBUG] [Thread-306638] [transport.py] [_log()] Compression: none
2025-12-24T18:08:54.796 [DEBUG] [Thread-306638] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:08:54.852 [DEBUG] [Thread-306638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:08:54.853 [DEBUG] [Thread-306638] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:08:54.854 [DEBUG] [Thread-306638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:08:54.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:08:54.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:08:54.912 [DEBUG] [Thread-306638] [transport.py] [_log()] userauth is OK
2025-12-24T18:08:54.912 [DEBUG] [Thread-306638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:08:54.912 [DEBUG] [Thread-306638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:08:54.913 [DEBUG] [Thread-306638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:08:54.913 [DEBUG] [Thread-306638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:08:54.937 [INFO] [Thread-306638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:08:54.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:08:54.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:08:55.774 [DEBUG] [Thread-306638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:08:55.774 [DEBUG] [Thread-306638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:08:55.813 [DEBUG] [Thread-306638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:08:55.813 [DEBUG] [Thread-306638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:08:55.822 [DEBUG] [Thread-306638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:08:55.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:08:55.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:08:55.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:08:55.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:08:55.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:08:55.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:08:55.854 [DEBUG] [Thread-306638] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:09:03.234 [DEBUG] [Thread-306640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:09:18.454 [DEBUG] [Thread-306641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:09:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:09:25.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:09:25.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:09:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 8, 50), 20.82, 25.7, 0.0, 23.59, 23.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:09:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:08:50
2025-12-24T18:09:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:09:27.202 [DEBUG] [Thread-306642] [transport.py] [_log()] starting thread (client mode): 0xf81f0400
2025-12-24T18:09:27.203 [DEBUG] [Thread-306642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:09:27.208 [DEBUG] [Thread-306642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:09:27.208 [INFO] [Thread-306642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] client lang: <none>
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] server lang: <none>
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] kex follows: False
2025-12-24T18:09:27.213 [DEBUG] [Thread-306642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:09:27.214 [DEBUG] [Thread-306642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:09:27.214 [DEBUG] [Thread-306642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:09:27.214 [DEBUG] [Thread-306642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:09:27.214 [DEBUG] [Thread-306642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:09:27.214 [DEBUG] [Thread-306642] [transport.py] [_log()] Compression: none
2025-12-24T18:09:27.214 [DEBUG] [Thread-306642] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:09:27.246 [DEBUG] [Thread-306642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:09:27.250 [DEBUG] [Thread-306642] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:09:27.251 [DEBUG] [Thread-306642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:09:27.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:09:27.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:09:27.255 [DEBUG] [Thread-306642] [transport.py] [_log()] userauth is OK
2025-12-24T18:09:27.255 [DEBUG] [Thread-306642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:09:27.255 [DEBUG] [Thread-306642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:09:27.255 [DEBUG] [Thread-306642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:09:27.255 [DEBUG] [Thread-306642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:09:27.289 [INFO] [Thread-306642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:09:27.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:09:27.933 [DEBUG] [Thread-306642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:09:27.934 [DEBUG] [Thread-306642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:09:27.935 [DEBUG] [Thread-306642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:09:27.974 [DEBUG] [Thread-306642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:09:27.974 [DEBUG] [Thread-306642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:09:27.978 [DEBUG] [Thread-306642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:09:27.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:09:27.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:09:27.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:09:27.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:09:28.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:09:28.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:09:28.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:09:28.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:09:28.005 [DEBUG] [Thread-306642] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:09:28.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:09:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.672983 -999.00  +22.50  16.96     31   +5.00 1 1 1 1 1   887    0 16.69 -31.65 ----- 17.0 17.0 148.8 25.8 26.2 -25.4 26.4 -25.4 27.7 -23.4 27.9 -25.7
2025-12-24T18:09:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:09:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:09:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.672983
2025-12-24T18:09:28.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:09:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:09:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:09:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:09:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:09:28.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:08:50', tmtdew=20.82, humidity=25.7, cloud=0.0, wind=23.59, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:09:05.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:09:28.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:09:28.127 [DEBUG] [Thread-306645] [transport.py] [_log()] starting thread (client mode): 0xf03bcbe0
2025-12-24T18:09:28.128 [DEBUG] [Thread-306645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:09:28.142 [DEBUG] [Thread-306645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:09:28.143 [INFO] [Thread-306645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] client lang: <none>
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] server lang: <none>
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] kex follows: False
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] Compression: none
2025-12-24T18:09:28.150 [DEBUG] [Thread-306645] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:09:28.208 [DEBUG] [Thread-306645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:09:28.209 [DEBUG] [Thread-306645] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:09:28.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:09:28.210 [DEBUG] [Thread-306645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:09:28.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:09:28.264 [DEBUG] [Thread-306645] [transport.py] [_log()] userauth is OK
2025-12-24T18:09:28.265 [DEBUG] [Thread-306645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:09:28.265 [DEBUG] [Thread-306645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:09:28.265 [DEBUG] [Thread-306645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:09:28.265 [DEBUG] [Thread-306645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:09:28.285 [INFO] [Thread-306645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:09:28.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:09:28.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:09:29.160 [DEBUG] [Thread-306645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:09:29.160 [DEBUG] [Thread-306645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:09:29.208 [DEBUG] [Thread-306645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:09:29.208 [DEBUG] [Thread-306645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:09:29.217 [DEBUG] [Thread-306645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:09:29.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:09:29.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:09:29.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:09:29.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:09:29.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:09:29.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:09:29.254 [DEBUG] [Thread-306645] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:09:33.575 [DEBUG] [Thread-306647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:09:42.299 [DEBUG] [Thread-306648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:09:48.739 [DEBUG] [Thread-306649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:09:48.775 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:09:48.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:09:59.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:09:59.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:09:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:10:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 9, 23), 20.83, 25.68, 0.0, 22.34, 23.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:10:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:09:23
2025-12-24T18:10:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:10:00.831 [DEBUG] [Thread-306650] [transport.py] [_log()] starting thread (client mode): 0xf03bfc10
2025-12-24T18:10:00.832 [DEBUG] [Thread-306650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:10:00.839 [DEBUG] [Thread-306650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:10:00.839 [INFO] [Thread-306650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] client lang: <none>
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] server lang: <none>
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] kex follows: False
2025-12-24T18:10:00.843 [DEBUG] [Thread-306650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:10:00.844 [DEBUG] [Thread-306650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:10:00.844 [DEBUG] [Thread-306650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:10:00.844 [DEBUG] [Thread-306650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:10:00.844 [DEBUG] [Thread-306650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:10:00.844 [DEBUG] [Thread-306650] [transport.py] [_log()] Compression: none
2025-12-24T18:10:00.844 [DEBUG] [Thread-306650] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:10:00.867 [DEBUG] [Thread-306650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:10:00.871 [DEBUG] [Thread-306650] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:10:00.872 [DEBUG] [Thread-306650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:10:00.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:10:00.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:10:00.875 [DEBUG] [Thread-306650] [transport.py] [_log()] userauth is OK
2025-12-24T18:10:00.875 [DEBUG] [Thread-306650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:10:00.875 [DEBUG] [Thread-306650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:10:00.875 [DEBUG] [Thread-306650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:10:00.875 [DEBUG] [Thread-306650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:10:00.894 [INFO] [Thread-306650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:10:00.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:10:01.552 [DEBUG] [Thread-306650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:10:01.552 [DEBUG] [Thread-306650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:10:01.553 [DEBUG] [Thread-306650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:10:01.593 [DEBUG] [Thread-306650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:10:01.593 [DEBUG] [Thread-306650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:10:01.595 [DEBUG] [Thread-306650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:10:01.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:10:01.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:10:01.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:10:01.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:10:01.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:10:01.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:10:01.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:10:01.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:10:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:10:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.673330 -999.00  +22.50  14.72     32   +5.00 1 1 1 1 1   887    0 17.18 -35.13 ----- 14.7 14.7 173.8 20.2 26.2 -25.6 26.4 -24.7 27.7 -23.8 27.9 -24.9
2025-12-24T18:10:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:10:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:10:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.673330
2025-12-24T18:10:01.621 [DEBUG] [Thread-306650] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:10:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:10:01.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:10:01.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:10:01.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:10:01.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:10:01.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:09:23', tmtdew=20.83, humidity=25.68, cloud=0.0, wind=22.34, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:09:35.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:10:01.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:10:01.722 [DEBUG] [Thread-306653] [transport.py] [_log()] starting thread (client mode): 0xf03bfb20
2025-12-24T18:10:01.722 [DEBUG] [Thread-306653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:10:01.736 [DEBUG] [Thread-306653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:10:01.737 [INFO] [Thread-306653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] client lang: <none>
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] server lang: <none>
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] kex follows: False
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] Compression: none
2025-12-24T18:10:01.746 [DEBUG] [Thread-306653] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:10:01.805 [DEBUG] [Thread-306653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:10:01.806 [DEBUG] [Thread-306653] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:10:01.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:10:01.807 [DEBUG] [Thread-306653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:10:01.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:10:01.861 [DEBUG] [Thread-306653] [transport.py] [_log()] userauth is OK
2025-12-24T18:10:01.861 [DEBUG] [Thread-306653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:10:01.862 [DEBUG] [Thread-306653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:10:01.862 [DEBUG] [Thread-306653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:10:01.862 [DEBUG] [Thread-306653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:10:01.886 [INFO] [Thread-306653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:10:01.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:10:01.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:10:02.710 [DEBUG] [Thread-306653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:10:02.711 [DEBUG] [Thread-306653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:10:02.757 [DEBUG] [Thread-306653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:10:02.758 [DEBUG] [Thread-306653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:10:02.766 [DEBUG] [Thread-306653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:10:02.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:10:02.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:10:02.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:10:02.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:10:02.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:10:02.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:10:02.801 [DEBUG] [Thread-306653] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:10:03.836 [DEBUG] [Thread-306655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:10:18.977 [DEBUG] [Thread-306656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:10:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:10:32.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:10:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:10:34.112 [DEBUG] [Thread-306657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:10:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 9, 57), 20.8, 25.73, 0.0, 21.83, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:10:34.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:09:57
2025-12-24T18:10:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:10:34.696 [DEBUG] [Thread-306658] [transport.py] [_log()] starting thread (client mode): 0xf572c430
2025-12-24T18:10:34.697 [DEBUG] [Thread-306658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:10:34.707 [DEBUG] [Thread-306658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:10:34.707 [INFO] [Thread-306658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] client lang: <none>
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] server lang: <none>
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] kex follows: False
2025-12-24T18:10:34.713 [DEBUG] [Thread-306658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:10:34.714 [DEBUG] [Thread-306658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:10:34.714 [DEBUG] [Thread-306658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:10:34.714 [DEBUG] [Thread-306658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:10:34.714 [DEBUG] [Thread-306658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:10:34.714 [DEBUG] [Thread-306658] [transport.py] [_log()] Compression: none
2025-12-24T18:10:34.714 [DEBUG] [Thread-306658] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:10:34.748 [DEBUG] [Thread-306658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:10:34.752 [DEBUG] [Thread-306658] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:10:34.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:10:34.756 [DEBUG] [Thread-306658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:10:34.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:10:34.760 [DEBUG] [Thread-306658] [transport.py] [_log()] userauth is OK
2025-12-24T18:10:34.760 [DEBUG] [Thread-306658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:10:34.761 [DEBUG] [Thread-306658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:10:34.761 [DEBUG] [Thread-306658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:10:34.761 [DEBUG] [Thread-306658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:10:34.779 [INFO] [Thread-306658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:10:34.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:10:35.395 [DEBUG] [Thread-306658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:10:35.395 [DEBUG] [Thread-306658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:10:35.396 [DEBUG] [Thread-306658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:10:35.437 [DEBUG] [Thread-306658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:10:35.437 [DEBUG] [Thread-306658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:10:35.441 [DEBUG] [Thread-306658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:10:35.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:10:35.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:10:35.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:10:35.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:10:35.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:10:35.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:10:35.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:10:35.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:10:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:10:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.673677 -999.00  +22.60  20.79     31   +5.00 1 1 1 1 1   887    0 16.86 -36.36 ----- 20.8 20.8 178.6 23.1 26.2 -25.4 26.4 -25.8 27.7 -23.8 27.9 -25.3
2025-12-24T18:10:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:10:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:10:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.673677
2025-12-24T18:10:35.473 [DEBUG] [Thread-306658] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:10:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:10:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:10:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:10:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:10:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:10:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:09:57', tmtdew=20.8, humidity=25.73, cloud=0.0, wind=21.83, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:10:05.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:10:35.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:10:35.573 [DEBUG] [Thread-306661] [transport.py] [_log()] starting thread (client mode): 0xf81c0520
2025-12-24T18:10:35.573 [DEBUG] [Thread-306661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:10:35.588 [DEBUG] [Thread-306661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:10:35.588 [INFO] [Thread-306661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] client lang: <none>
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] server lang: <none>
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] kex follows: False
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] Compression: none
2025-12-24T18:10:35.595 [DEBUG] [Thread-306661] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:10:35.650 [DEBUG] [Thread-306661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:10:35.651 [DEBUG] [Thread-306661] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:10:35.651 [DEBUG] [Thread-306661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:10:35.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:10:35.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:10:35.708 [DEBUG] [Thread-306661] [transport.py] [_log()] userauth is OK
2025-12-24T18:10:35.708 [DEBUG] [Thread-306661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:10:35.708 [DEBUG] [Thread-306661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:10:35.708 [DEBUG] [Thread-306661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:10:35.708 [DEBUG] [Thread-306661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:10:35.721 [INFO] [Thread-306661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:10:35.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:10:35.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:10:36.527 [DEBUG] [Thread-306661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:10:36.527 [DEBUG] [Thread-306661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:10:36.574 [DEBUG] [Thread-306661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:10:36.574 [DEBUG] [Thread-306661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:10:36.582 [DEBUG] [Thread-306661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:10:36.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:10:36.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:10:36.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:10:36.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:10:36.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:10:36.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:10:36.615 [DEBUG] [Thread-306661] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:10:42.506 [DEBUG] [Thread-306663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:10:48.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:10:48.918 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:10:49.185 [DEBUG] [Thread-306664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:11:04.357 [DEBUG] [Thread-306665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:11:06.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:11:06.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:11:06.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:11:07.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 10, 30), 20.71, 25.85, 0.0, 19.89, 22.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:11:07.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:10:30
2025-12-24T18:11:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:11:07.928 [DEBUG] [Thread-306666] [transport.py] [_log()] starting thread (client mode): 0xf81f2380
2025-12-24T18:11:07.929 [DEBUG] [Thread-306666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:11:07.942 [DEBUG] [Thread-306666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:11:07.942 [INFO] [Thread-306666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:11:07.946 [DEBUG] [Thread-306666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] client lang: <none>
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] server lang: <none>
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] kex follows: False
2025-12-24T18:11:07.947 [DEBUG] [Thread-306666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:11:07.948 [DEBUG] [Thread-306666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:11:07.948 [DEBUG] [Thread-306666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:11:07.948 [DEBUG] [Thread-306666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:11:07.948 [DEBUG] [Thread-306666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:11:07.948 [DEBUG] [Thread-306666] [transport.py] [_log()] Compression: none
2025-12-24T18:11:07.948 [DEBUG] [Thread-306666] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:11:07.978 [DEBUG] [Thread-306666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:11:07.981 [DEBUG] [Thread-306666] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:11:07.983 [DEBUG] [Thread-306666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:11:07.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:11:07.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:11:07.986 [DEBUG] [Thread-306666] [transport.py] [_log()] userauth is OK
2025-12-24T18:11:07.986 [DEBUG] [Thread-306666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:11:07.986 [DEBUG] [Thread-306666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:11:07.986 [DEBUG] [Thread-306666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:11:07.986 [DEBUG] [Thread-306666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:11:08.007 [INFO] [Thread-306666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:11:08.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:11:08.657 [DEBUG] [Thread-306666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:11:08.658 [DEBUG] [Thread-306666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:11:08.659 [DEBUG] [Thread-306666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:11:08.699 [DEBUG] [Thread-306666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:11:08.699 [DEBUG] [Thread-306666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:11:08.703 [DEBUG] [Thread-306666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:11:08.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:11:08.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:11:08.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:11:08.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:11:08.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:11:08.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:11:08.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:11:08.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:11:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:11:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.674025 -999.00  +22.50  15.33     31   +5.00 1 1 1 1 1   887    0 16.69 -37.35 ----- 15.3 15.3 153.6 25.2 26.2 -25.4 26.4 -24.9 27.7 -23.8 27.9 -25.6
2025-12-24T18:11:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:11:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:11:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.674025
2025-12-24T18:11:08.738 [DEBUG] [Thread-306666] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:11:08.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:11:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:11:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:11:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:11:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:11:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:10:30', tmtdew=20.71, humidity=25.85, cloud=0.0, wind=19.89, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:10:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:11:08.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:11:08.846 [DEBUG] [Thread-306669] [transport.py] [_log()] starting thread (client mode): 0xf81f23e0
2025-12-24T18:11:08.846 [DEBUG] [Thread-306669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:11:08.861 [DEBUG] [Thread-306669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:11:08.861 [INFO] [Thread-306669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:11:08.869 [DEBUG] [Thread-306669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:11:08.869 [DEBUG] [Thread-306669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:11:08.869 [DEBUG] [Thread-306669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] client lang: <none>
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] server lang: <none>
2025-12-24T18:11:08.870 [DEBUG] [Thread-306669] [transport.py] [_log()] kex follows: False
2025-12-24T18:11:08.871 [DEBUG] [Thread-306669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:11:08.871 [DEBUG] [Thread-306669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:11:08.871 [DEBUG] [Thread-306669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:11:08.871 [DEBUG] [Thread-306669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:11:08.871 [DEBUG] [Thread-306669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:11:08.871 [DEBUG] [Thread-306669] [transport.py] [_log()] Compression: none
2025-12-24T18:11:08.871 [DEBUG] [Thread-306669] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:11:08.929 [DEBUG] [Thread-306669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:11:08.929 [DEBUG] [Thread-306669] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:11:08.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:11:08.931 [DEBUG] [Thread-306669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:11:08.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:11:08.984 [DEBUG] [Thread-306669] [transport.py] [_log()] userauth is OK
2025-12-24T18:11:08.985 [DEBUG] [Thread-306669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:11:08.985 [DEBUG] [Thread-306669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:11:08.985 [DEBUG] [Thread-306669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:11:08.985 [DEBUG] [Thread-306669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:11:09.009 [INFO] [Thread-306669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:11:09.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:11:09.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:11:09.845 [DEBUG] [Thread-306669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:11:09.846 [DEBUG] [Thread-306669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:11:09.884 [DEBUG] [Thread-306669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:11:09.884 [DEBUG] [Thread-306669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:11:09.893 [DEBUG] [Thread-306669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:11:09.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:11:09.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:11:09.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:11:09.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:11:09.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:11:09.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:11:09.926 [DEBUG] [Thread-306669] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:11:19.478 [DEBUG] [Thread-306671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:11:34.673 [DEBUG] [Thread-306672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:11:39.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:11:39.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:11:39.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:11:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 11, 4), 20.74, 25.81, 0.0, 21.95, 22.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:11:40.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:11:04
2025-12-24T18:11:41.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:11:41.214 [DEBUG] [Thread-306673] [transport.py] [_log()] starting thread (client mode): 0xf03bed40
2025-12-24T18:11:41.214 [DEBUG] [Thread-306673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:11:41.219 [DEBUG] [Thread-306673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:11:41.219 [INFO] [Thread-306673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] client lang: <none>
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] server lang: <none>
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] kex follows: False
2025-12-24T18:11:41.222 [DEBUG] [Thread-306673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:11:41.223 [DEBUG] [Thread-306673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:11:41.223 [DEBUG] [Thread-306673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:11:41.223 [DEBUG] [Thread-306673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:11:41.223 [DEBUG] [Thread-306673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:11:41.223 [DEBUG] [Thread-306673] [transport.py] [_log()] Compression: none
2025-12-24T18:11:41.223 [DEBUG] [Thread-306673] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:11:41.248 [DEBUG] [Thread-306673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:11:41.250 [DEBUG] [Thread-306673] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:11:41.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:11:41.253 [DEBUG] [Thread-306673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:11:41.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:11:41.255 [DEBUG] [Thread-306673] [transport.py] [_log()] userauth is OK
2025-12-24T18:11:41.255 [DEBUG] [Thread-306673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:11:41.255 [DEBUG] [Thread-306673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:11:41.255 [DEBUG] [Thread-306673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:11:41.255 [DEBUG] [Thread-306673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:11:41.276 [INFO] [Thread-306673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:11:41.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:11:41.895 [DEBUG] [Thread-306673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:11:41.895 [DEBUG] [Thread-306673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:11:41.899 [DEBUG] [Thread-306673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:11:41.936 [DEBUG] [Thread-306673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:11:41.937 [DEBUG] [Thread-306673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:11:41.940 [DEBUG] [Thread-306673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:11:41.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:11:41.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:11:41.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:11:41.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:11:41.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:11:41.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:11:41.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:11:41.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:11:41.965 [DEBUG] [Thread-306673] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:11:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:11:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.674372 -999.00  +22.50  12.26     31   +5.00 1 1 1 1 1   887    0 16.80 -37.21 ----- 12.3 12.3 154.7 18.6 26.2 -25.0 26.4 -24.7 27.7 -23.3 27.9 -24.8
2025-12-24T18:11:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:11:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:11:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.674372
2025-12-24T18:11:41.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:11:41.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:11:41.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:11:41.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:11:41.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:11:41.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:11:04', tmtdew=20.74, humidity=25.81, cloud=0.0, wind=21.95, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:11:05.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:11:42.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:11:42.079 [DEBUG] [Thread-306676] [transport.py] [_log()] starting thread (client mode): 0xf574d4e0
2025-12-24T18:11:42.079 [DEBUG] [Thread-306676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:11:42.094 [DEBUG] [Thread-306676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:11:42.094 [INFO] [Thread-306676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:11:42.101 [DEBUG] [Thread-306676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] client lang: <none>
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] server lang: <none>
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] kex follows: False
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] Compression: none
2025-12-24T18:11:42.102 [DEBUG] [Thread-306676] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:11:42.161 [DEBUG] [Thread-306676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:11:42.162 [DEBUG] [Thread-306676] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:11:42.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:11:42.163 [DEBUG] [Thread-306676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:11:42.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:11:42.217 [DEBUG] [Thread-306676] [transport.py] [_log()] userauth is OK
2025-12-24T18:11:42.217 [DEBUG] [Thread-306676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:11:42.217 [DEBUG] [Thread-306676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:11:42.217 [DEBUG] [Thread-306676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:11:42.218 [DEBUG] [Thread-306676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:11:42.235 [INFO] [Thread-306676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:11:42.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:11:42.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:11:42.851 [DEBUG] [Thread-306678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:11:43.065 [DEBUG] [Thread-306676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:11:43.065 [DEBUG] [Thread-306676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:11:43.112 [DEBUG] [Thread-306676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:11:43.112 [DEBUG] [Thread-306676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:11:43.121 [DEBUG] [Thread-306676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:11:43.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:11:43.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:11:43.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:11:43.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:11:43.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:11:43.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:11:43.161 [DEBUG] [Thread-306676] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:11:49.065 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:11:49.068 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:11:49.801 [DEBUG] [Thread-306679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:12:04.957 [DEBUG] [Thread-306680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:12:13.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:12:13.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:12:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:12:14.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 11, 37), 20.74, 25.6, 0.0, 20.94, 22.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:12:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:11:37
2025-12-24T18:12:14.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:12:15.032 [DEBUG] [Thread-306681] [transport.py] [_log()] starting thread (client mode): 0xf574c250
2025-12-24T18:12:15.033 [DEBUG] [Thread-306681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:12:15.045 [DEBUG] [Thread-306681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:12:15.045 [INFO] [Thread-306681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:12:15.050 [DEBUG] [Thread-306681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:12:15.050 [DEBUG] [Thread-306681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:12:15.050 [DEBUG] [Thread-306681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] client lang: <none>
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] server lang: <none>
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] kex follows: False
2025-12-24T18:12:15.051 [DEBUG] [Thread-306681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:12:15.052 [DEBUG] [Thread-306681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:12:15.052 [DEBUG] [Thread-306681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:12:15.052 [DEBUG] [Thread-306681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:12:15.052 [DEBUG] [Thread-306681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:12:15.052 [DEBUG] [Thread-306681] [transport.py] [_log()] Compression: none
2025-12-24T18:12:15.052 [DEBUG] [Thread-306681] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:12:15.083 [DEBUG] [Thread-306681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:12:15.086 [DEBUG] [Thread-306681] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:12:15.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:12:15.089 [DEBUG] [Thread-306681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:12:15.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:12:15.091 [DEBUG] [Thread-306681] [transport.py] [_log()] userauth is OK
2025-12-24T18:12:15.091 [DEBUG] [Thread-306681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:12:15.091 [DEBUG] [Thread-306681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:12:15.091 [DEBUG] [Thread-306681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:12:15.091 [DEBUG] [Thread-306681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:12:15.110 [INFO] [Thread-306681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:12:15.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:12:15.758 [DEBUG] [Thread-306681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:12:15.759 [DEBUG] [Thread-306681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:12:15.769 [DEBUG] [Thread-306681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:12:15.801 [DEBUG] [Thread-306681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:12:15.801 [DEBUG] [Thread-306681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:12:15.805 [DEBUG] [Thread-306681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:12:15.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:12:15.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:12:15.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:12:15.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:12:15.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:12:15.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:12:15.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:12:15.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:12:15.839 [DEBUG] [Thread-306681] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:12:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:12:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.674719 -999.00  +22.70  15.13     31   +5.00 1 1 1 1 1   887    0 17.03 -36.48 ----- 15.1 15.1 154.8 19.6 26.2 -24.8 26.5 -25.8 27.8 -23.4 28.0 -25.8
2025-12-24T18:12:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:12:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:12:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.674719
2025-12-24T18:12:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:12:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:12:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:12:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:12:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:12:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:11:37', tmtdew=20.74, humidity=25.6, cloud=0.0, wind=20.94, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:11:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:12:15.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:12:15.970 [DEBUG] [Thread-306684] [transport.py] [_log()] starting thread (client mode): 0xf574e710
2025-12-24T18:12:15.970 [DEBUG] [Thread-306684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:12:15.984 [DEBUG] [Thread-306684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:12:15.984 [INFO] [Thread-306684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:12:15.991 [DEBUG] [Thread-306684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:12:15.991 [DEBUG] [Thread-306684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:12:15.991 [DEBUG] [Thread-306684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:12:15.991 [DEBUG] [Thread-306684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:12:15.991 [DEBUG] [Thread-306684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] client lang: <none>
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] server lang: <none>
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] kex follows: False
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] Compression: none
2025-12-24T18:12:15.992 [DEBUG] [Thread-306684] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:12:16.048 [DEBUG] [Thread-306684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:12:16.049 [DEBUG] [Thread-306684] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:12:16.049 [DEBUG] [Thread-306684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:12:16.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:12:16.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:12:16.105 [DEBUG] [Thread-306684] [transport.py] [_log()] userauth is OK
2025-12-24T18:12:16.105 [DEBUG] [Thread-306684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:12:16.106 [DEBUG] [Thread-306684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:12:16.106 [DEBUG] [Thread-306684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:12:16.106 [DEBUG] [Thread-306684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:12:16.126 [INFO] [Thread-306684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:12:16.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:12:16.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:12:16.968 [DEBUG] [Thread-306684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:12:16.969 [DEBUG] [Thread-306684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:12:17.016 [DEBUG] [Thread-306684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:12:17.016 [DEBUG] [Thread-306684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:12:17.025 [DEBUG] [Thread-306684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:12:17.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:12:17.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:12:17.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:12:17.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:12:17.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:12:17.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:12:17.064 [DEBUG] [Thread-306684] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:12:20.043 [DEBUG] [Thread-306686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:12:35.185 [DEBUG] [Thread-306687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:12:43.268 [DEBUG] [Thread-306688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:12:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:12:47.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:12:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:12:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 12, 11), 20.74, 25.58, 0.0, 22.09, 22.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:12:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:12:11
2025-12-24T18:12:48.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:12:48.477 [DEBUG] [Thread-306689] [transport.py] [_log()] starting thread (client mode): 0xf81c0760
2025-12-24T18:12:48.478 [DEBUG] [Thread-306689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:12:48.488 [DEBUG] [Thread-306689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:12:48.488 [INFO] [Thread-306689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:12:48.492 [DEBUG] [Thread-306689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:12:48.492 [DEBUG] [Thread-306689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:12:48.492 [DEBUG] [Thread-306689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:12:48.492 [DEBUG] [Thread-306689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:12:48.492 [DEBUG] [Thread-306689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] client lang: <none>
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] server lang: <none>
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] kex follows: False
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] Compression: none
2025-12-24T18:12:48.493 [DEBUG] [Thread-306689] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:12:48.525 [DEBUG] [Thread-306689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:12:48.529 [DEBUG] [Thread-306689] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:12:48.530 [DEBUG] [Thread-306689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:12:48.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:12:48.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:12:48.534 [DEBUG] [Thread-306689] [transport.py] [_log()] userauth is OK
2025-12-24T18:12:48.534 [DEBUG] [Thread-306689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:12:48.534 [DEBUG] [Thread-306689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:12:48.534 [DEBUG] [Thread-306689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:12:48.534 [DEBUG] [Thread-306689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:12:48.553 [INFO] [Thread-306689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:12:48.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:12:49.163 [DEBUG] [Thread-306689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:12:49.163 [DEBUG] [Thread-306689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:12:49.164 [DEBUG] [Thread-306689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:12:49.204 [DEBUG] [Thread-306689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:12:49.204 [DEBUG] [Thread-306689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:12:49.206 [DEBUG] [Thread-306689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:12:49.212 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:12:49.213 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:12:49.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:12:49.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:12:49.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:12:49.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:12:49.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:12:49.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:12:49.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:12:49.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:12:49.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:12:49.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.675414 -999.00  +22.60  18.83     31   +4.90 1 1 1 1 1   887    0 16.50 -32.40 ----- 18.8 18.8 152.1 23.2 26.2 -25.9 26.4 -25.4 27.7 -24.3 27.9 -25.3
2025-12-24T18:12:49.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:12:49.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:12:49.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.675414
2025-12-24T18:12:49.242 [DEBUG] [Thread-306689] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:12:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:12:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:12:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:12:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:12:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:12:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:12:11', tmtdew=20.74, humidity=25.58, cloud=0.0, wind=22.09, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:12:35.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:12:49.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:12:49.341 [DEBUG] [Thread-306692] [transport.py] [_log()] starting thread (client mode): 0xf5751090
2025-12-24T18:12:49.341 [DEBUG] [Thread-306692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:12:49.355 [DEBUG] [Thread-306692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:12:49.355 [INFO] [Thread-306692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] client lang: <none>
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] server lang: <none>
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] kex follows: False
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] Compression: none
2025-12-24T18:12:49.363 [DEBUG] [Thread-306692] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:12:49.418 [DEBUG] [Thread-306692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:12:49.418 [DEBUG] [Thread-306692] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:12:49.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:12:49.419 [DEBUG] [Thread-306692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:12:49.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:12:49.480 [DEBUG] [Thread-306692] [transport.py] [_log()] userauth is OK
2025-12-24T18:12:49.480 [DEBUG] [Thread-306692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:12:49.480 [DEBUG] [Thread-306692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:12:49.480 [DEBUG] [Thread-306692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:12:49.480 [DEBUG] [Thread-306692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:12:49.494 [INFO] [Thread-306692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:12:49.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:12:49.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:12:50.256 [DEBUG] [Thread-306694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:12:50.340 [DEBUG] [Thread-306692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:12:50.340 [DEBUG] [Thread-306692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:12:50.388 [DEBUG] [Thread-306692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:12:50.388 [DEBUG] [Thread-306692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:12:50.396 [DEBUG] [Thread-306692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:12:50.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:12:50.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:12:50.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:12:50.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:12:50.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:12:50.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:12:50.429 [DEBUG] [Thread-306692] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:13:05.432 [DEBUG] [Thread-306695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:13:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:13:20.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:13:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:13:20.561 [DEBUG] [Thread-306696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:13:21.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 12, 45), 20.67, 25.68, 0.0, 20.98, 22.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:13:21.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:12:45
2025-12-24T18:13:21.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:13:21.993 [DEBUG] [Thread-306697] [transport.py] [_log()] starting thread (client mode): 0xf81c0910
2025-12-24T18:13:21.993 [DEBUG] [Thread-306697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:13:22.006 [DEBUG] [Thread-306697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:13:22.006 [INFO] [Thread-306697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:13:22.010 [DEBUG] [Thread-306697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:13:22.010 [DEBUG] [Thread-306697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:13:22.010 [DEBUG] [Thread-306697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] client lang: <none>
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] server lang: <none>
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] kex follows: False
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:13:22.011 [DEBUG] [Thread-306697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:13:22.012 [DEBUG] [Thread-306697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:13:22.012 [DEBUG] [Thread-306697] [transport.py] [_log()] Compression: none
2025-12-24T18:13:22.012 [DEBUG] [Thread-306697] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:13:22.034 [DEBUG] [Thread-306697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:13:22.038 [DEBUG] [Thread-306697] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:13:22.039 [DEBUG] [Thread-306697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:13:22.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:13:22.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:13:22.042 [DEBUG] [Thread-306697] [transport.py] [_log()] userauth is OK
2025-12-24T18:13:22.042 [DEBUG] [Thread-306697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:13:22.042 [DEBUG] [Thread-306697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:13:22.042 [DEBUG] [Thread-306697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:13:22.042 [DEBUG] [Thread-306697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:13:22.060 [INFO] [Thread-306697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:13:22.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:13:22.725 [DEBUG] [Thread-306697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:13:22.725 [DEBUG] [Thread-306697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:13:22.733 [DEBUG] [Thread-306697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:13:22.839 [DEBUG] [Thread-306697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:13:22.839 [DEBUG] [Thread-306697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:13:22.842 [DEBUG] [Thread-306697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:13:22.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:13:22.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:13:22.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:13:22.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:13:22.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:13:22.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:13:22.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:13:22.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:13:22.881 [DEBUG] [Thread-306697] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:13:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:13:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.675761 -999.00  +22.50  21.10     31   +5.00 1 1 1 1 1   887    0 16.59 -32.95 ----- 21.1 21.1 168.0 29.7 26.1 -26.3 26.3 -25.5 27.7 -24.3 27.8 -25.5
2025-12-24T18:13:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:13:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:13:22.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.675761
2025-12-24T18:13:22.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:13:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:13:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:13:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:13:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:13:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:12:45', tmtdew=20.67, humidity=25.68, cloud=0.0, wind=20.98, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:13:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:13:22.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:13:23.007 [DEBUG] [Thread-306700] [transport.py] [_log()] starting thread (client mode): 0xf81e5d50
2025-12-24T18:13:23.007 [DEBUG] [Thread-306700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:13:23.024 [DEBUG] [Thread-306700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:13:23.024 [INFO] [Thread-306700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:13:23.031 [DEBUG] [Thread-306700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:13:23.031 [DEBUG] [Thread-306700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:13:23.031 [DEBUG] [Thread-306700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:13:23.031 [DEBUG] [Thread-306700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:13:23.031 [DEBUG] [Thread-306700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:13:23.031 [DEBUG] [Thread-306700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] client lang: <none>
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] server lang: <none>
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] kex follows: False
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] Compression: none
2025-12-24T18:13:23.032 [DEBUG] [Thread-306700] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:13:23.086 [DEBUG] [Thread-306700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:13:23.087 [DEBUG] [Thread-306700] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:13:23.087 [DEBUG] [Thread-306700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:13:23.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:13:23.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:13:23.144 [DEBUG] [Thread-306700] [transport.py] [_log()] userauth is OK
2025-12-24T18:13:23.144 [DEBUG] [Thread-306700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:13:23.144 [DEBUG] [Thread-306700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:13:23.144 [DEBUG] [Thread-306700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:13:23.144 [DEBUG] [Thread-306700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:13:23.159 [INFO] [Thread-306700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:13:23.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:13:23.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:13:24.030 [DEBUG] [Thread-306700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:13:24.031 [DEBUG] [Thread-306700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:13:24.079 [DEBUG] [Thread-306700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:13:24.079 [DEBUG] [Thread-306700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:13:24.088 [DEBUG] [Thread-306700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:13:24.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:13:24.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:13:24.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:13:24.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:13:24.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:13:24.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:13:24.125 [DEBUG] [Thread-306700] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:13:35.675 [DEBUG] [Thread-306702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:13:43.631 [DEBUG] [Thread-306703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:13:49.357 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:13:49.359 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:13:50.824 [DEBUG] [Thread-306704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:13:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:13:54.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:13:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:13:55.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 13, 19), 20.59, 25.81, 0.0, 17.91, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:13:55.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:13:19
2025-12-24T18:13:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:13:55.700 [DEBUG] [Thread-306705] [transport.py] [_log()] starting thread (client mode): 0xf81f1540
2025-12-24T18:13:55.700 [DEBUG] [Thread-306705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:13:55.712 [DEBUG] [Thread-306705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:13:55.712 [INFO] [Thread-306705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] client lang: <none>
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] server lang: <none>
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] kex follows: False
2025-12-24T18:13:55.717 [DEBUG] [Thread-306705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:13:55.718 [DEBUG] [Thread-306705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:13:55.718 [DEBUG] [Thread-306705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:13:55.718 [DEBUG] [Thread-306705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:13:55.718 [DEBUG] [Thread-306705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:13:55.718 [DEBUG] [Thread-306705] [transport.py] [_log()] Compression: none
2025-12-24T18:13:55.718 [DEBUG] [Thread-306705] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:13:55.752 [DEBUG] [Thread-306705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:13:55.756 [DEBUG] [Thread-306705] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:13:55.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:13:55.758 [DEBUG] [Thread-306705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:13:55.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:13:55.761 [DEBUG] [Thread-306705] [transport.py] [_log()] userauth is OK
2025-12-24T18:13:55.761 [DEBUG] [Thread-306705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:13:55.761 [DEBUG] [Thread-306705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:13:55.761 [DEBUG] [Thread-306705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:13:55.761 [DEBUG] [Thread-306705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:13:55.784 [INFO] [Thread-306705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:13:55.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:13:56.430 [DEBUG] [Thread-306705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:13:56.431 [DEBUG] [Thread-306705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:13:56.432 [DEBUG] [Thread-306705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:13:56.472 [DEBUG] [Thread-306705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:13:56.472 [DEBUG] [Thread-306705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:13:56.474 [DEBUG] [Thread-306705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:13:56.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:13:56.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:13:56.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:13:56.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:13:56.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:13:56.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:13:56.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:13:56.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:13:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:13:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.676108 -999.00  +22.50  16.22     31   +5.00 1 1 1 1 1   887    0 16.57 -34.62 ----- 16.2 16.2 167.1 23.9 26.2 -25.3 26.4 -24.7 27.6 -23.6 27.8 -24.6
2025-12-24T18:13:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:13:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:13:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.676108
2025-12-24T18:13:56.503 [DEBUG] [Thread-306705] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:13:56.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:13:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:13:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:13:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:13:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:13:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:13:19', tmtdew=20.59, humidity=25.81, cloud=0.0, wind=17.91, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:13:35.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:13:56.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:13:56.603 [DEBUG] [Thread-306708] [transport.py] [_log()] starting thread (client mode): 0xf5751090
2025-12-24T18:13:56.603 [DEBUG] [Thread-306708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:13:56.618 [DEBUG] [Thread-306708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:13:56.618 [INFO] [Thread-306708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] client lang: <none>
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] server lang: <none>
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] kex follows: False
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:13:56.626 [DEBUG] [Thread-306708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:13:56.627 [DEBUG] [Thread-306708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:13:56.627 [DEBUG] [Thread-306708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:13:56.627 [DEBUG] [Thread-306708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:13:56.627 [DEBUG] [Thread-306708] [transport.py] [_log()] Compression: none
2025-12-24T18:13:56.627 [DEBUG] [Thread-306708] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:13:56.683 [DEBUG] [Thread-306708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:13:56.683 [DEBUG] [Thread-306708] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:13:56.683 [DEBUG] [Thread-306708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:13:56.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:13:56.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:13:56.740 [DEBUG] [Thread-306708] [transport.py] [_log()] userauth is OK
2025-12-24T18:13:56.741 [DEBUG] [Thread-306708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:13:56.741 [DEBUG] [Thread-306708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:13:56.741 [DEBUG] [Thread-306708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:13:56.741 [DEBUG] [Thread-306708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:13:56.760 [INFO] [Thread-306708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:13:56.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:13:56.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:13:57.589 [DEBUG] [Thread-306708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:13:57.590 [DEBUG] [Thread-306708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:13:57.637 [DEBUG] [Thread-306708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:13:57.638 [DEBUG] [Thread-306708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:13:57.647 [DEBUG] [Thread-306708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:13:57.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:13:57.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:13:57.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:13:57.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:13:57.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:13:57.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:13:57.681 [DEBUG] [Thread-306708] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:14:05.927 [DEBUG] [Thread-306710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:14:21.112 [DEBUG] [Thread-306711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:14:27.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:14:27.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:14:27.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
2025-12-24T18:14:28.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 13, 52), 20.8, 25.71, 0.0, 17.47, 22.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:14:28.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:13:52
2025-12-24T18:14:29.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:14:29.237 [DEBUG] [Thread-306712] [transport.py] [_log()] starting thread (client mode): 0xf5753d00
2025-12-24T18:14:29.237 [DEBUG] [Thread-306712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:14:29.238 [DEBUG] [Thread-306712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:14:29.238 [INFO] [Thread-306712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] client lang: <none>
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] server lang: <none>
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] kex follows: False
2025-12-24T18:14:29.242 [DEBUG] [Thread-306712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:14:29.243 [DEBUG] [Thread-306712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:14:29.243 [DEBUG] [Thread-306712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:14:29.243 [DEBUG] [Thread-306712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:14:29.243 [DEBUG] [Thread-306712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:14:29.243 [DEBUG] [Thread-306712] [transport.py] [_log()] Compression: none
2025-12-24T18:14:29.243 [DEBUG] [Thread-306712] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:14:29.272 [DEBUG] [Thread-306712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:14:29.275 [DEBUG] [Thread-306712] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:14:29.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:14:29.277 [DEBUG] [Thread-306712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:14:29.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:14:29.279 [DEBUG] [Thread-306712] [transport.py] [_log()] userauth is OK
2025-12-24T18:14:29.279 [DEBUG] [Thread-306712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:14:29.279 [DEBUG] [Thread-306712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:14:29.279 [DEBUG] [Thread-306712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:14:29.279 [DEBUG] [Thread-306712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:14:29.297 [INFO] [Thread-306712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:14:29.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:14:29.957 [DEBUG] [Thread-306712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:14:29.957 [DEBUG] [Thread-306712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:14:29.958 [DEBUG] [Thread-306712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:14:29.998 [DEBUG] [Thread-306712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:14:29.998 [DEBUG] [Thread-306712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:14:30.001 [DEBUG] [Thread-306712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:14:30.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:14:30.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:14:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:14:30.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:14:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:14:30.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:14:30.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:14:30.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:14:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:14:30.030 [DEBUG] [Thread-306712] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:14:30.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.676455 -999.00  +22.50  17.53     31   +4.90 1 1 1 1 1   887    0 16.80 -32.68 ----- 17.5 17.5 160.8 28.8 26.1 -25.5 26.2 -24.9 27.6 -23.5 27.8 -24.1
2025-12-24T18:14:30.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:14:30.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:14:30.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.676455
2025-12-24T18:14:30.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:14:30.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:14:30.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:14:30.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:14:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:14:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:13:52', tmtdew=20.8, humidity=25.71, cloud=0.0, wind=17.47, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:14:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:14:30.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:14:30.155 [DEBUG] [Thread-306715] [transport.py] [_log()] starting thread (client mode): 0xf03bc820
2025-12-24T18:14:30.155 [DEBUG] [Thread-306715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:14:30.170 [DEBUG] [Thread-306715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:14:30.170 [INFO] [Thread-306715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:14:30.178 [DEBUG] [Thread-306715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:14:30.178 [DEBUG] [Thread-306715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:14:30.178 [DEBUG] [Thread-306715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] client lang: <none>
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] server lang: <none>
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] kex follows: False
2025-12-24T18:14:30.179 [DEBUG] [Thread-306715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:14:30.180 [DEBUG] [Thread-306715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:14:30.180 [DEBUG] [Thread-306715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:14:30.180 [DEBUG] [Thread-306715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:14:30.180 [DEBUG] [Thread-306715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:14:30.180 [DEBUG] [Thread-306715] [transport.py] [_log()] Compression: none
2025-12-24T18:14:30.180 [DEBUG] [Thread-306715] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:14:30.237 [DEBUG] [Thread-306715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:14:30.237 [DEBUG] [Thread-306715] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:14:30.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:14:30.238 [DEBUG] [Thread-306715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:14:30.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:14:30.293 [DEBUG] [Thread-306715] [transport.py] [_log()] userauth is OK
2025-12-24T18:14:30.293 [DEBUG] [Thread-306715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:14:30.293 [DEBUG] [Thread-306715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:14:30.293 [DEBUG] [Thread-306715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:14:30.293 [DEBUG] [Thread-306715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:14:30.312 [INFO] [Thread-306715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:14:30.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:14:30.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:14:31.177 [DEBUG] [Thread-306715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:14:31.177 [DEBUG] [Thread-306715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:14:31.216 [DEBUG] [Thread-306715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:14:31.217 [DEBUG] [Thread-306715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:14:31.226 [DEBUG] [Thread-306715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:14:31.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:14:31.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:14:31.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
2025-12-24T18:14:31.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:14:31.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:14:31.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:14:31.264 [DEBUG] [Thread-306715] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:14:36.230 [DEBUG] [Thread-306717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:14:43.993 [DEBUG] [Thread-306718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:14:49.501 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:14:49.504 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:14:51.384 [DEBUG] [Thread-306719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:15:01.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:15:01.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:15:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:15:03.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 14, 26), 20.88, 25.6, 0.0, 19.18, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:15:03.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:14:26
2025-12-24T18:15:03.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:15:03.968 [DEBUG] [Thread-306720] [transport.py] [_log()] starting thread (client mode): 0xf81c0bb0
2025-12-24T18:15:03.969 [DEBUG] [Thread-306720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:15:03.969 [DEBUG] [Thread-306720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:15:03.969 [INFO] [Thread-306720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:15:03.973 [DEBUG] [Thread-306720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:15:03.973 [DEBUG] [Thread-306720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:15:03.973 [DEBUG] [Thread-306720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:15:03.973 [DEBUG] [Thread-306720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:15:03.973 [DEBUG] [Thread-306720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:15:03.973 [DEBUG] [Thread-306720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:15:03.973 [DEBUG] [Thread-306720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] client lang: <none>
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] server lang: <none>
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] kex follows: False
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] Compression: none
2025-12-24T18:15:03.974 [DEBUG] [Thread-306720] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:15:04.006 [DEBUG] [Thread-306720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:15:04.011 [DEBUG] [Thread-306720] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:15:04.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:15:04.015 [DEBUG] [Thread-306720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:15:04.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:15:04.017 [DEBUG] [Thread-306720] [transport.py] [_log()] userauth is OK
2025-12-24T18:15:04.017 [DEBUG] [Thread-306720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:15:04.017 [DEBUG] [Thread-306720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:15:04.017 [DEBUG] [Thread-306720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:15:04.017 [DEBUG] [Thread-306720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:15:04.036 [INFO] [Thread-306720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:15:04.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:15:04.781 [DEBUG] [Thread-306720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:15:04.781 [DEBUG] [Thread-306720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:15:04.782 [DEBUG] [Thread-306720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:15:04.823 [DEBUG] [Thread-306720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:15:04.823 [DEBUG] [Thread-306720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:15:04.826 [DEBUG] [Thread-306720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:15:04.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:15:04.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:15:04.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:15:04.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:15:04.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:15:04.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:15:04.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:15:04.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:15:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:15:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.676802 -999.00  +22.60  15.17     31   +4.90 1 1 1 1 1   887    0 16.91 -32.52 ----- 15.2 15.2 150.7 29.3 26.1 -24.6 26.2 -25.9 27.6 -22.5 27.8 -24.6
2025-12-24T18:15:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:15:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:15:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.676802
2025-12-24T18:15:04.876 [DEBUG] [Thread-306720] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:15:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:15:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:15:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:15:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:15:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:15:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:14:26', tmtdew=20.88, humidity=25.6, cloud=0.0, wind=19.18, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:14:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:15:04.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:15:04.977 [DEBUG] [Thread-306723] [transport.py] [_log()] starting thread (client mode): 0xf81e7970
2025-12-24T18:15:04.977 [DEBUG] [Thread-306723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:15:04.994 [DEBUG] [Thread-306723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:15:04.994 [INFO] [Thread-306723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] client lang: <none>
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] server lang: <none>
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] kex follows: False
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] Compression: none
2025-12-24T18:15:05.001 [DEBUG] [Thread-306723] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:15:05.058 [DEBUG] [Thread-306723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:15:05.059 [DEBUG] [Thread-306723] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:15:05.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:15:05.059 [DEBUG] [Thread-306723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:15:05.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:15:05.123 [DEBUG] [Thread-306723] [transport.py] [_log()] userauth is OK
2025-12-24T18:15:05.123 [DEBUG] [Thread-306723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:15:05.123 [DEBUG] [Thread-306723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:15:05.123 [DEBUG] [Thread-306723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:15:05.123 [DEBUG] [Thread-306723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:15:05.137 [INFO] [Thread-306723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:15:05.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:15:05.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:15:05.995 [DEBUG] [Thread-306723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:15:05.995 [DEBUG] [Thread-306723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:15:06.042 [DEBUG] [Thread-306723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:15:06.042 [DEBUG] [Thread-306723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:15:06.050 [DEBUG] [Thread-306723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:15:06.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:15:06.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:15:06.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:15:06.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:15:06.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:15:06.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:15:06.082 [DEBUG] [Thread-306723] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:15:06.482 [DEBUG] [Thread-306725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:15:21.671 [DEBUG] [Thread-306726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:15:36.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:15:36.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:15:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:15:36.764 [DEBUG] [Thread-306727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:15:37.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 14, 59), 20.98, 25.03, 0.0, 22.6, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:15:37.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:14:59
2025-12-24T18:15:37.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:15:37.459 [DEBUG] [Thread-306728] [transport.py] [_log()] starting thread (client mode): 0xf81e6bf0
2025-12-24T18:15:37.460 [DEBUG] [Thread-306728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:15:37.472 [DEBUG] [Thread-306728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:15:37.473 [INFO] [Thread-306728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:15:37.479 [DEBUG] [Thread-306728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:15:37.479 [DEBUG] [Thread-306728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:15:37.479 [DEBUG] [Thread-306728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:15:37.479 [DEBUG] [Thread-306728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:15:37.479 [DEBUG] [Thread-306728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:15:37.479 [DEBUG] [Thread-306728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:15:37.479 [DEBUG] [Thread-306728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:15:37.480 [DEBUG] [Thread-306728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:15:37.480 [DEBUG] [Thread-306728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:15:37.480 [DEBUG] [Thread-306728] [transport.py] [_log()] client lang: <none>
2025-12-24T18:15:37.480 [DEBUG] [Thread-306728] [transport.py] [_log()] server lang: <none>
2025-12-24T18:15:37.480 [DEBUG] [Thread-306728] [transport.py] [_log()] kex follows: False
2025-12-24T18:15:37.480 [DEBUG] [Thread-306728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:15:37.481 [DEBUG] [Thread-306728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:15:37.481 [DEBUG] [Thread-306728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:15:37.481 [DEBUG] [Thread-306728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:15:37.481 [DEBUG] [Thread-306728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:15:37.481 [DEBUG] [Thread-306728] [transport.py] [_log()] Compression: none
2025-12-24T18:15:37.482 [DEBUG] [Thread-306728] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:15:37.524 [DEBUG] [Thread-306728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:15:37.529 [DEBUG] [Thread-306728] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:15:37.531 [DEBUG] [Thread-306728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:15:37.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:15:37.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:15:37.537 [DEBUG] [Thread-306728] [transport.py] [_log()] userauth is OK
2025-12-24T18:15:37.537 [DEBUG] [Thread-306728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:15:37.537 [DEBUG] [Thread-306728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:15:37.537 [DEBUG] [Thread-306728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:15:37.537 [DEBUG] [Thread-306728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:15:37.560 [INFO] [Thread-306728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:15:37.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:15:38.179 [DEBUG] [Thread-306728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:15:38.179 [DEBUG] [Thread-306728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:15:38.181 [DEBUG] [Thread-306728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:15:38.220 [DEBUG] [Thread-306728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:15:38.220 [DEBUG] [Thread-306728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:15:38.222 [DEBUG] [Thread-306728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:15:38.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:15:38.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:15:38.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:15:38.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:15:38.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:15:38.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:15:38.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:15:38.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:15:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:15:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.677149 -999.00  +22.50  24.70     31   +4.90 1 1 1 1 1   887    0 16.67 -34.17 ----- 24.7 24.7 165.2 27.8 26.1 -25.3 26.3 -25.4 27.6 -22.7 27.8 -24.6
2025-12-24T18:15:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:15:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:15:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.677149
2025-12-24T18:15:38.249 [DEBUG] [Thread-306728] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:15:38.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:15:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:15:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:15:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:15:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:15:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:14:59', tmtdew=20.98, humidity=25.03, cloud=0.0, wind=22.6, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:15:05.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:15:38.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:15:38.346 [DEBUG] [Thread-306731] [transport.py] [_log()] starting thread (client mode): 0xf81c06a0
2025-12-24T18:15:38.346 [DEBUG] [Thread-306731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:15:38.363 [DEBUG] [Thread-306731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:15:38.363 [INFO] [Thread-306731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:15:38.370 [DEBUG] [Thread-306731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] client lang: <none>
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] server lang: <none>
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] kex follows: False
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:15:38.371 [DEBUG] [Thread-306731] [transport.py] [_log()] Compression: none
2025-12-24T18:15:38.372 [DEBUG] [Thread-306731] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:15:38.428 [DEBUG] [Thread-306731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:15:38.429 [DEBUG] [Thread-306731] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:15:38.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:15:38.429 [DEBUG] [Thread-306731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:15:38.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:15:38.488 [DEBUG] [Thread-306731] [transport.py] [_log()] userauth is OK
2025-12-24T18:15:38.488 [DEBUG] [Thread-306731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:15:38.488 [DEBUG] [Thread-306731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:15:38.488 [DEBUG] [Thread-306731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:15:38.488 [DEBUG] [Thread-306731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:15:38.503 [INFO] [Thread-306731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:15:38.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:15:38.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:15:39.370 [DEBUG] [Thread-306731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:15:39.370 [DEBUG] [Thread-306731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:15:39.417 [DEBUG] [Thread-306731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:15:39.417 [DEBUG] [Thread-306731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:15:39.426 [DEBUG] [Thread-306731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:15:39.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:15:39.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:15:39.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:15:39.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:15:39.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:15:39.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:15:39.458 [DEBUG] [Thread-306731] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:15:44.390 [DEBUG] [Thread-306733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:15:49.645 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:15:49.647 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:15:51.850 [DEBUG] [Thread-306734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:16:07.008 [DEBUG] [Thread-306735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:16:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:16:09.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:16:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:16:10.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 15, 33), 21.0, 24.93, 0.0, 22.92, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:16:10.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:15:33
2025-12-24T18:16:10.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:16:10.758 [DEBUG] [Thread-306736] [transport.py] [_log()] starting thread (client mode): 0xf81c2770
2025-12-24T18:16:10.758 [DEBUG] [Thread-306736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:16:10.772 [DEBUG] [Thread-306736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:16:10.773 [INFO] [Thread-306736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] client lang: <none>
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] server lang: <none>
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] kex follows: False
2025-12-24T18:16:10.777 [DEBUG] [Thread-306736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:16:10.778 [DEBUG] [Thread-306736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:16:10.778 [DEBUG] [Thread-306736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:16:10.778 [DEBUG] [Thread-306736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:16:10.778 [DEBUG] [Thread-306736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:16:10.778 [DEBUG] [Thread-306736] [transport.py] [_log()] Compression: none
2025-12-24T18:16:10.778 [DEBUG] [Thread-306736] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:16:10.809 [DEBUG] [Thread-306736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:16:10.812 [DEBUG] [Thread-306736] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:16:10.813 [DEBUG] [Thread-306736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:16:10.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:16:10.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:16:10.816 [DEBUG] [Thread-306736] [transport.py] [_log()] userauth is OK
2025-12-24T18:16:10.816 [DEBUG] [Thread-306736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:16:10.816 [DEBUG] [Thread-306736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:16:10.816 [DEBUG] [Thread-306736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:16:10.816 [DEBUG] [Thread-306736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:16:10.833 [INFO] [Thread-306736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:16:10.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:16:11.430 [DEBUG] [Thread-306736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:16:11.430 [DEBUG] [Thread-306736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:16:11.431 [DEBUG] [Thread-306736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:16:11.472 [DEBUG] [Thread-306736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:16:11.472 [DEBUG] [Thread-306736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:16:11.474 [DEBUG] [Thread-306736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:16:11.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:16:11.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:16:11.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:16:11.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:16:11.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:16:11.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:16:11.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:16:11.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:16:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:16:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.677497 -999.00  +22.50  17.41     31   +5.00 1 1 1 1 1   887    0 16.71 -38.23 ----- 17.4 17.4 169.8 24.0 26.1 -25.4 26.2 -24.2 27.5 -23.2 27.7 -24.8
2025-12-24T18:16:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:16:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:16:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.677497
2025-12-24T18:16:11.500 [DEBUG] [Thread-306736] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:16:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:16:11.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:16:11.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:16:11.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:16:11.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:16:11.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:15:33', tmtdew=21.0, humidity=24.93, cloud=0.0, wind=22.92, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:15:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:16:11.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:16:11.601 [DEBUG] [Thread-306739] [transport.py] [_log()] starting thread (client mode): 0xf5752dd0
2025-12-24T18:16:11.601 [DEBUG] [Thread-306739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:16:11.616 [DEBUG] [Thread-306739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:16:11.616 [INFO] [Thread-306739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] client lang: <none>
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] server lang: <none>
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] kex follows: False
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] Compression: none
2025-12-24T18:16:11.623 [DEBUG] [Thread-306739] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:16:11.680 [DEBUG] [Thread-306739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:16:11.681 [DEBUG] [Thread-306739] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:16:11.681 [DEBUG] [Thread-306739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:16:11.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:16:11.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:16:11.736 [DEBUG] [Thread-306739] [transport.py] [_log()] userauth is OK
2025-12-24T18:16:11.737 [DEBUG] [Thread-306739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:16:11.737 [DEBUG] [Thread-306739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:16:11.737 [DEBUG] [Thread-306739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:16:11.737 [DEBUG] [Thread-306739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:16:11.756 [INFO] [Thread-306739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:16:11.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:16:11.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:16:12.598 [DEBUG] [Thread-306739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:16:12.598 [DEBUG] [Thread-306739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:16:12.644 [DEBUG] [Thread-306739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:16:12.645 [DEBUG] [Thread-306739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:16:12.653 [DEBUG] [Thread-306739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:16:12.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:16:12.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:16:12.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:16:12.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:16:12.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:16:12.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:16:12.689 [DEBUG] [Thread-306739] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:16:22.089 [DEBUG] [Thread-306741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:16:37.294 [DEBUG] [Thread-306742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:16:42.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:16:42.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:16:42.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:16:43.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 16, 6), 20.76, 25.28, 0.0, 19.62, 22.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:16:43.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:16:06
2025-12-24T18:16:43.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:16:44.095 [DEBUG] [Thread-306743] [transport.py] [_log()] starting thread (client mode): 0xf5752c50
2025-12-24T18:16:44.096 [DEBUG] [Thread-306743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:16:44.102 [DEBUG] [Thread-306743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:16:44.102 [INFO] [Thread-306743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:16:44.106 [DEBUG] [Thread-306743] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] client lang: <none>
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] server lang: <none>
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] kex follows: False
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:16:44.107 [DEBUG] [Thread-306743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:16:44.108 [DEBUG] [Thread-306743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:16:44.108 [DEBUG] [Thread-306743] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:16:44.108 [DEBUG] [Thread-306743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:16:44.108 [DEBUG] [Thread-306743] [transport.py] [_log()] Compression: none
2025-12-24T18:16:44.108 [DEBUG] [Thread-306743] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:16:44.140 [DEBUG] [Thread-306743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:16:44.144 [DEBUG] [Thread-306743] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:16:44.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:16:44.147 [DEBUG] [Thread-306743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:16:44.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:16:44.149 [DEBUG] [Thread-306743] [transport.py] [_log()] userauth is OK
2025-12-24T18:16:44.149 [DEBUG] [Thread-306743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:16:44.150 [DEBUG] [Thread-306743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:16:44.150 [DEBUG] [Thread-306743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:16:44.150 [DEBUG] [Thread-306743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:16:44.171 [INFO] [Thread-306743] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:16:44.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:16:44.631 [DEBUG] [Thread-306745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:16:44.819 [DEBUG] [Thread-306743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:16:44.819 [DEBUG] [Thread-306743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:16:44.820 [DEBUG] [Thread-306743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:16:44.861 [DEBUG] [Thread-306743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:16:44.861 [DEBUG] [Thread-306743] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:16:44.865 [DEBUG] [Thread-306743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:16:44.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:16:44.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:16:44.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:16:44.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:16:44.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:16:44.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:16:44.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:16:44.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:16:44.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:16:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.677844 -999.00  +22.60  16.25     31   +5.00 1 1 1 1 1   887    0 16.70 -34.32 ----- 16.2 16.2 174.6 25.1 26.2 -24.8 26.2 -24.0 27.6 -22.8 27.8 -24.2
2025-12-24T18:16:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:16:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:16:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.677844
2025-12-24T18:16:44.898 [DEBUG] [Thread-306743] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:16:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:16:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:16:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:16:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:16:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:16:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:16:06', tmtdew=20.76, humidity=25.28, cloud=0.0, wind=19.62, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:16:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:16:44.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:16:44.999 [DEBUG] [Thread-306747] [transport.py] [_log()] starting thread (client mode): 0xf5729ff0
2025-12-24T18:16:45.000 [DEBUG] [Thread-306747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:16:45.014 [DEBUG] [Thread-306747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:16:45.015 [INFO] [Thread-306747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:16:45.022 [DEBUG] [Thread-306747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:16:45.022 [DEBUG] [Thread-306747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] client lang: <none>
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] server lang: <none>
2025-12-24T18:16:45.023 [DEBUG] [Thread-306747] [transport.py] [_log()] kex follows: False
2025-12-24T18:16:45.024 [DEBUG] [Thread-306747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:16:45.024 [DEBUG] [Thread-306747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:16:45.024 [DEBUG] [Thread-306747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:16:45.024 [DEBUG] [Thread-306747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:16:45.024 [DEBUG] [Thread-306747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:16:45.024 [DEBUG] [Thread-306747] [transport.py] [_log()] Compression: none
2025-12-24T18:16:45.024 [DEBUG] [Thread-306747] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:16:45.081 [DEBUG] [Thread-306747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:16:45.082 [DEBUG] [Thread-306747] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:16:45.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:16:45.084 [DEBUG] [Thread-306747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:16:45.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:16:45.137 [DEBUG] [Thread-306747] [transport.py] [_log()] userauth is OK
2025-12-24T18:16:45.137 [DEBUG] [Thread-306747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:16:45.138 [DEBUG] [Thread-306747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:16:45.138 [DEBUG] [Thread-306747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:16:45.138 [DEBUG] [Thread-306747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:16:45.157 [INFO] [Thread-306747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:16:45.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:16:45.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:16:46.021 [DEBUG] [Thread-306747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:16:46.021 [DEBUG] [Thread-306747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:16:46.069 [DEBUG] [Thread-306747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:16:46.069 [DEBUG] [Thread-306747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:16:46.079 [DEBUG] [Thread-306747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:16:46.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:16:46.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:16:46.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:16:46.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:16:46.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:16:46.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:16:46.122 [DEBUG] [Thread-306747] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:16:49.797 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:16:49.799 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:16:52.414 [DEBUG] [Thread-306749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:17:07.574 [DEBUG] [Thread-306750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:17:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:17:16.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:17:16.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
2025-12-24T18:17:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 16, 39), 20.75, 25.8, 0.0, 25.71, 22.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:17:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:16:39
2025-12-24T18:17:17.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:17:17.479 [DEBUG] [Thread-306751] [transport.py] [_log()] starting thread (client mode): 0xf57289d0
2025-12-24T18:17:17.479 [DEBUG] [Thread-306751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:17:17.480 [DEBUG] [Thread-306751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:17:17.480 [INFO] [Thread-306751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] client lang: <none>
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] server lang: <none>
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] kex follows: False
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:17:17.484 [DEBUG] [Thread-306751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:17:17.485 [DEBUG] [Thread-306751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:17:17.485 [DEBUG] [Thread-306751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:17:17.485 [DEBUG] [Thread-306751] [transport.py] [_log()] Compression: none
2025-12-24T18:17:17.485 [DEBUG] [Thread-306751] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:17:17.514 [DEBUG] [Thread-306751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:17:17.517 [DEBUG] [Thread-306751] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:17:17.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:17:17.520 [DEBUG] [Thread-306751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:17:17.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:17:17.522 [DEBUG] [Thread-306751] [transport.py] [_log()] userauth is OK
2025-12-24T18:17:17.522 [DEBUG] [Thread-306751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:17:17.522 [DEBUG] [Thread-306751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:17:17.522 [DEBUG] [Thread-306751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:17:17.522 [DEBUG] [Thread-306751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:17:17.540 [INFO] [Thread-306751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:17:17.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:17:18.208 [DEBUG] [Thread-306751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:17:18.208 [DEBUG] [Thread-306751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:17:18.210 [DEBUG] [Thread-306751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:17:18.249 [DEBUG] [Thread-306751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:17:18.250 [DEBUG] [Thread-306751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:17:18.253 [DEBUG] [Thread-306751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:17:18.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:17:18.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:17:18.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:17:18.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:17:18.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:17:18.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:17:18.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:17:18.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:17:18.284 [DEBUG] [Thread-306751] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:17:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:17:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.678191 -999.00  +22.60  19.36     31   +5.00 1 1 1 1 1   887    0 16.36 -33.56 ----- 19.4 19.4 178.8 27.8 26.1 -24.7 26.2 -25.8 27.6 -22.7 27.8 -24.2
2025-12-24T18:17:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:17:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:17:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.678191
2025-12-24T18:17:18.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:17:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:17:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:17:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:17:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:17:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:16:39', tmtdew=20.75, humidity=25.8, cloud=0.0, wind=25.71, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:16:35.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:17:18.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:17:18.405 [DEBUG] [Thread-306754] [transport.py] [_log()] starting thread (client mode): 0xf5728c10
2025-12-24T18:17:18.405 [DEBUG] [Thread-306754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:17:18.418 [DEBUG] [Thread-306754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:17:18.419 [INFO] [Thread-306754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:17:18.427 [DEBUG] [Thread-306754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:17:18.427 [DEBUG] [Thread-306754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:17:18.427 [DEBUG] [Thread-306754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:17:18.427 [DEBUG] [Thread-306754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:17:18.427 [DEBUG] [Thread-306754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] client lang: <none>
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] server lang: <none>
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] kex follows: False
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] Compression: none
2025-12-24T18:17:18.428 [DEBUG] [Thread-306754] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:17:18.484 [DEBUG] [Thread-306754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:17:18.485 [DEBUG] [Thread-306754] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:17:18.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:17:18.486 [DEBUG] [Thread-306754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:17:18.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:17:18.541 [DEBUG] [Thread-306754] [transport.py] [_log()] userauth is OK
2025-12-24T18:17:18.541 [DEBUG] [Thread-306754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:17:18.541 [DEBUG] [Thread-306754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:17:18.541 [DEBUG] [Thread-306754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:17:18.541 [DEBUG] [Thread-306754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:17:18.559 [INFO] [Thread-306754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:17:18.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:17:18.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:17:19.389 [DEBUG] [Thread-306754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:17:19.389 [DEBUG] [Thread-306754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:17:19.436 [DEBUG] [Thread-306754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:17:19.437 [DEBUG] [Thread-306754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:17:19.445 [DEBUG] [Thread-306754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:17:19.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:17:19.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:17:19.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:17:19.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:17:19.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:17:19.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:17:19.477 [DEBUG] [Thread-306754] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:17:22.671 [DEBUG] [Thread-306756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:17:37.994 [DEBUG] [Thread-306757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:17:44.958 [DEBUG] [Thread-306758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:17:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:17:49.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:17:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:17:49.944 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:17:49.947 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:17:50.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 17, 13), 20.8, 25.71, 0.0, 30.33, 22.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:17:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:17:13
2025-12-24T18:17:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:17:50.772 [DEBUG] [Thread-306759] [transport.py] [_log()] starting thread (client mode): 0xf572aa70
2025-12-24T18:17:50.772 [DEBUG] [Thread-306759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:17:50.786 [DEBUG] [Thread-306759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:17:50.786 [INFO] [Thread-306759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:17:50.791 [DEBUG] [Thread-306759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] client lang: <none>
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] server lang: <none>
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] kex follows: False
2025-12-24T18:17:50.792 [DEBUG] [Thread-306759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:17:50.793 [DEBUG] [Thread-306759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:17:50.793 [DEBUG] [Thread-306759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:17:50.793 [DEBUG] [Thread-306759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:17:50.793 [DEBUG] [Thread-306759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:17:50.793 [DEBUG] [Thread-306759] [transport.py] [_log()] Compression: none
2025-12-24T18:17:50.793 [DEBUG] [Thread-306759] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:17:50.830 [DEBUG] [Thread-306759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:17:50.834 [DEBUG] [Thread-306759] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:17:50.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:17:50.836 [DEBUG] [Thread-306759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:17:50.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:17:50.839 [DEBUG] [Thread-306759] [transport.py] [_log()] userauth is OK
2025-12-24T18:17:50.839 [DEBUG] [Thread-306759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:17:50.839 [DEBUG] [Thread-306759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:17:50.839 [DEBUG] [Thread-306759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:17:50.839 [DEBUG] [Thread-306759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:17:50.869 [INFO] [Thread-306759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:17:50.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:17:51.525 [DEBUG] [Thread-306759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:17:51.525 [DEBUG] [Thread-306759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:17:51.526 [DEBUG] [Thread-306759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:17:51.565 [DEBUG] [Thread-306759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:17:51.565 [DEBUG] [Thread-306759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:17:51.568 [DEBUG] [Thread-306759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:17:51.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:17:51.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:17:51.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:17:51.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:17:51.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:17:51.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:17:51.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:17:51.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:17:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:17:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.678886 -999.00  +22.70  19.04     31   +5.00 1 1 1 1 1   887    0 16.84 -31.50 ----- 19.0 19.0 178.6 23.1 26.0 -24.8 26.0 -25.7 27.4 -23.2 27.6 -25.3
2025-12-24T18:17:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:17:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:17:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.678886
2025-12-24T18:17:51.596 [DEBUG] [Thread-306759] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:17:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:17:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:17:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:17:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:17:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:17:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:17:13', tmtdew=20.8, humidity=25.71, cloud=0.0, wind=30.33, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:17:35.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:17:51.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:17:53.086 [DEBUG] [Thread-306762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:18:08.307 [DEBUG] [Thread-306763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:18:23.491 [DEBUG] [Thread-306764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:18:38.638 [DEBUG] [Thread-306765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:18:45.206 [DEBUG] [Thread-306766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:18:50.091 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:18:50.093 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:18:53.756 [DEBUG] [Thread-306767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:19:08.852 [DEBUG] [Thread-306768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:19:23.988 [DEBUG] [Thread-306769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:19:39.139 [DEBUG] [Thread-306770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:19:45.421 [DEBUG] [Thread-306771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:19:50.234 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:19:50.236 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:19:54.249 [DEBUG] [Thread-306772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:20:03.952 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T18:20:09.365 [DEBUG] [Thread-306773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:20:24.508 [DEBUG] [Thread-306774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:20:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:20:33.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:20:34.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:20:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 19, 27), 20.8, 25.53, 0.0, 27.86, 23.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:20:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:19:27
2025-12-24T18:20:35.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:20:35.643 [DEBUG] [Thread-306775] [transport.py] [_log()] starting thread (client mode): 0xf5728550
2025-12-24T18:20:35.644 [DEBUG] [Thread-306775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:20:35.656 [DEBUG] [Thread-306775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:20:35.656 [INFO] [Thread-306775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:20:35.676 [DEBUG] [Thread-306775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:20:35.676 [DEBUG] [Thread-306775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] client lang: <none>
2025-12-24T18:20:35.677 [DEBUG] [Thread-306775] [transport.py] [_log()] server lang: <none>
2025-12-24T18:20:35.678 [DEBUG] [Thread-306775] [transport.py] [_log()] kex follows: False
2025-12-24T18:20:35.678 [DEBUG] [Thread-306775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:20:35.679 [DEBUG] [Thread-306775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:20:35.679 [DEBUG] [Thread-306775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:20:35.679 [DEBUG] [Thread-306775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:20:35.679 [DEBUG] [Thread-306775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:20:35.679 [DEBUG] [Thread-306775] [transport.py] [_log()] Compression: none
2025-12-24T18:20:35.680 [DEBUG] [Thread-306775] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:20:35.717 [DEBUG] [Thread-306775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:20:35.721 [DEBUG] [Thread-306775] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:20:35.723 [DEBUG] [Thread-306775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:20:35.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:20:35.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:20:35.729 [DEBUG] [Thread-306775] [transport.py] [_log()] userauth is OK
2025-12-24T18:20:35.730 [DEBUG] [Thread-306775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:20:35.730 [DEBUG] [Thread-306775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:20:35.730 [DEBUG] [Thread-306775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:20:35.730 [DEBUG] [Thread-306775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:20:35.771 [INFO] [Thread-306775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:20:35.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:20:36.422 [DEBUG] [Thread-306775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:20:36.423 [DEBUG] [Thread-306775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:20:36.424 [DEBUG] [Thread-306775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:20:36.464 [DEBUG] [Thread-306775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:20:36.464 [DEBUG] [Thread-306775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:20:36.468 [DEBUG] [Thread-306775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:20:36.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:20:36.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:20:36.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:20:36.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:20:36.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:20:36.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:20:36.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:20:36.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:20:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:20:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.680622 -999.00  +22.50  18.60     32   +5.00 1 1 1 1 1   887    0 17.03 -29.03 ----- 18.6 18.6 175.0 25.6 25.9 -25.7 25.8 -27.5 27.2 -24.3 27.4 -25.9
2025-12-24T18:20:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:20:36.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:20:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.680622
2025-12-24T18:20:36.502 [DEBUG] [Thread-306775] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:20:36.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:20:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:20:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:20:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:20:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:20:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:19:27', tmtdew=20.8, humidity=25.53, cloud=0.0, wind=27.86, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:20:05.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:20:36.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:20:36.604 [DEBUG] [Thread-306778] [transport.py] [_log()] starting thread (client mode): 0xf5728760
2025-12-24T18:20:36.605 [DEBUG] [Thread-306778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:20:36.624 [DEBUG] [Thread-306778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:20:36.624 [INFO] [Thread-306778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:20:36.631 [DEBUG] [Thread-306778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] client lang: <none>
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] server lang: <none>
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] kex follows: False
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] Compression: none
2025-12-24T18:20:36.632 [DEBUG] [Thread-306778] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:20:36.687 [DEBUG] [Thread-306778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:20:36.687 [DEBUG] [Thread-306778] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:20:36.687 [DEBUG] [Thread-306778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:20:36.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:20:36.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:20:36.744 [DEBUG] [Thread-306778] [transport.py] [_log()] userauth is OK
2025-12-24T18:20:36.744 [DEBUG] [Thread-306778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:20:36.744 [DEBUG] [Thread-306778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:20:36.744 [DEBUG] [Thread-306778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:20:36.744 [DEBUG] [Thread-306778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:20:36.758 [INFO] [Thread-306778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:20:36.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:20:36.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:20:37.589 [DEBUG] [Thread-306778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:20:37.589 [DEBUG] [Thread-306778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:20:37.637 [DEBUG] [Thread-306778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:20:37.637 [DEBUG] [Thread-306778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:20:37.645 [DEBUG] [Thread-306778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:20:37.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:20:37.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:20:37.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:20:37.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:20:37.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:20:37.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:20:37.678 [DEBUG] [Thread-306778] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:20:39.603 [DEBUG] [Thread-306780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:20:45.687 [DEBUG] [Thread-306781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:20:50.386 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:20:50.392 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:20:54.790 [DEBUG] [Thread-306782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:21:07.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:21:07.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:21: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
2025-12-24T18:21:09.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 20, 35), 20.56, 25.62, 0.0, 23.34, 22.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:21:09.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:20:35
2025-12-24T18:21:09.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:21:09.464 [DEBUG] [Thread-306783] [transport.py] [_log()] starting thread (client mode): 0xf572b3a0
2025-12-24T18:21:09.465 [DEBUG] [Thread-306783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:21:09.472 [DEBUG] [Thread-306783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:21:09.472 [INFO] [Thread-306783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:21:09.478 [DEBUG] [Thread-306783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] client lang: <none>
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] server lang: <none>
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] kex follows: False
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:21:09.479 [DEBUG] [Thread-306783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:21:09.480 [DEBUG] [Thread-306783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:21:09.480 [DEBUG] [Thread-306783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:21:09.480 [DEBUG] [Thread-306783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:21:09.480 [DEBUG] [Thread-306783] [transport.py] [_log()] Compression: none
2025-12-24T18:21:09.480 [DEBUG] [Thread-306783] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:21:09.514 [DEBUG] [Thread-306783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:21:09.518 [DEBUG] [Thread-306783] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:21:09.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:21:09.521 [DEBUG] [Thread-306783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:21:09.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:21:09.524 [DEBUG] [Thread-306783] [transport.py] [_log()] userauth is OK
2025-12-24T18:21:09.524 [DEBUG] [Thread-306783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:21:09.524 [DEBUG] [Thread-306783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:21:09.524 [DEBUG] [Thread-306783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:21:09.524 [DEBUG] [Thread-306783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:21:09.543 [INFO] [Thread-306783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:21:09.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:21:09.896 [DEBUG] [Thread-306785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:21:10.223 [DEBUG] [Thread-306783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:21:10.223 [DEBUG] [Thread-306783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:21:10.224 [DEBUG] [Thread-306783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:21:10.264 [DEBUG] [Thread-306783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:21:10.264 [DEBUG] [Thread-306783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:21:10.266 [DEBUG] [Thread-306783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:21:10.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:21:10.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:21:10.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:21:10.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:21:10.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:21:10.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:21:10.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:21:10.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:21:10.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:21:10.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.680969 -999.00  +22.40  13.23     32   +5.00 1 1 1 1 1   887    0 16.56 -27.70 ----- 13.2 13.2 179.8 23.3 25.8 -25.6 25.8 -27.6 27.3 -23.6 27.4 -25.5
2025-12-24T18:21:10.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:21:10.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:21:10.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.680969
2025-12-24T18:21:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:21:10.304 [DEBUG] [Thread-306783] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:21:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:21:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:21:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:21:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:21:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:20:35', tmtdew=20.56, humidity=25.62, cloud=0.0, wind=23.34, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:20:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:21:10.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:21:10.394 [DEBUG] [Thread-306787] [transport.py] [_log()] starting thread (client mode): 0xf57285e0
2025-12-24T18:21:10.394 [DEBUG] [Thread-306787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:21:10.410 [DEBUG] [Thread-306787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:21:10.410 [INFO] [Thread-306787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] client lang: <none>
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] server lang: <none>
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] kex follows: False
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] Compression: none
2025-12-24T18:21:10.417 [DEBUG] [Thread-306787] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:21:10.474 [DEBUG] [Thread-306787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:21:10.475 [DEBUG] [Thread-306787] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:21:10.475 [DEBUG] [Thread-306787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:21:10.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:21:10.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:21:10.532 [DEBUG] [Thread-306787] [transport.py] [_log()] userauth is OK
2025-12-24T18:21:10.532 [DEBUG] [Thread-306787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:21:10.532 [DEBUG] [Thread-306787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:21:10.532 [DEBUG] [Thread-306787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:21:10.532 [DEBUG] [Thread-306787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:21:10.546 [INFO] [Thread-306787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:21:10.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:21:10.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:21:11.373 [DEBUG] [Thread-306787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:21:11.373 [DEBUG] [Thread-306787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:21:11.420 [DEBUG] [Thread-306787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:21:11.420 [DEBUG] [Thread-306787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:21:11.428 [DEBUG] [Thread-306787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:21:11.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:21:11.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:21:11.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:21:11.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:21:11.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:21:11.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:21:11.462 [DEBUG] [Thread-306787] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:21:25.036 [DEBUG] [Thread-306789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:21:40.248 [DEBUG] [Thread-306790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:21:41.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:21:41.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:21:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:21:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 21, 8), 20.35, 25.93, 0.0, 23.87, 22.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:21:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:21:08
2025-12-24T18:21:42.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:21:42.766 [DEBUG] [Thread-306791] [transport.py] [_log()] starting thread (client mode): 0xf81e4400
2025-12-24T18:21:42.768 [DEBUG] [Thread-306791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:21:42.769 [DEBUG] [Thread-306791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:21:42.769 [INFO] [Thread-306791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] client lang: <none>
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] server lang: <none>
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] kex follows: False
2025-12-24T18:21:42.774 [DEBUG] [Thread-306791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:21:42.775 [DEBUG] [Thread-306791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:21:42.775 [DEBUG] [Thread-306791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:21:42.775 [DEBUG] [Thread-306791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:21:42.775 [DEBUG] [Thread-306791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:21:42.775 [DEBUG] [Thread-306791] [transport.py] [_log()] Compression: none
2025-12-24T18:21:42.775 [DEBUG] [Thread-306791] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:21:42.811 [DEBUG] [Thread-306791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:21:42.814 [DEBUG] [Thread-306791] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:21:42.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:21:42.817 [DEBUG] [Thread-306791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:21:42.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:21:42.820 [DEBUG] [Thread-306791] [transport.py] [_log()] userauth is OK
2025-12-24T18:21:42.820 [DEBUG] [Thread-306791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:21:42.820 [DEBUG] [Thread-306791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:21:42.820 [DEBUG] [Thread-306791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:21:42.820 [DEBUG] [Thread-306791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:21:42.839 [INFO] [Thread-306791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:21:42.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:21:43.480 [DEBUG] [Thread-306791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:21:43.480 [DEBUG] [Thread-306791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:21:43.480 [DEBUG] [Thread-306791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:21:43.521 [DEBUG] [Thread-306791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:21:43.521 [DEBUG] [Thread-306791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:21:43.524 [DEBUG] [Thread-306791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:21:43.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:21:43.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:21:43.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:21:43.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:21:43.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:21:43.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:21:43.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:21:43.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:21:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:21:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.681316 -999.00  +22.50  13.20     32   +5.10 1 1 1 1 1   887    0 17.33 -27.28 ----- 13.2 13.2 178.4 19.3 25.8 -25.5 25.9 -26.7 27.3 -23.5 27.4 -25.8
2025-12-24T18:21:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:21:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:21:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.681316
2025-12-24T18:21:43.559 [DEBUG] [Thread-306791] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:21:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:21:43.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:21:43.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:21:43.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:21:43.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:21:43.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:21:08', tmtdew=20.35, humidity=25.93, cloud=0.0, wind=23.87, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:21:05.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:21:43.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:21:43.702 [DEBUG] [Thread-306794] [transport.py] [_log()] starting thread (client mode): 0xf574d7e0
2025-12-24T18:21:43.702 [DEBUG] [Thread-306794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:21:43.717 [DEBUG] [Thread-306794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:21:43.717 [INFO] [Thread-306794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:21:43.724 [DEBUG] [Thread-306794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] client lang: <none>
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] server lang: <none>
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] kex follows: False
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] Compression: none
2025-12-24T18:21:43.725 [DEBUG] [Thread-306794] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:21:43.783 [DEBUG] [Thread-306794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:21:43.783 [DEBUG] [Thread-306794] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:21:43.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:21:43.783 [DEBUG] [Thread-306794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:21:43.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:21:43.840 [DEBUG] [Thread-306794] [transport.py] [_log()] userauth is OK
2025-12-24T18:21:43.840 [DEBUG] [Thread-306794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:21:43.840 [DEBUG] [Thread-306794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:21:43.840 [DEBUG] [Thread-306794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:21:43.840 [DEBUG] [Thread-306794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:21:43.854 [INFO] [Thread-306794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:21:43.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:21:43.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:21:44.688 [DEBUG] [Thread-306794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:21:44.688 [DEBUG] [Thread-306794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:21:44.736 [DEBUG] [Thread-306794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:21:44.737 [DEBUG] [Thread-306794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:21:44.745 [DEBUG] [Thread-306794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:21:44.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:21:44.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:21:44.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
2025-12-24T18:21:44.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:21:44.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:21:44.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:21:44.780 [DEBUG] [Thread-306794] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:21:45.923 [DEBUG] [Thread-306796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:21:50.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:21:50.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:21:55.349 [DEBUG] [Thread-306797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:22:10.553 [DEBUG] [Thread-306798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:22:14.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:22:14.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:22:14.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:22:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 21, 40), 20.36, 26.03, 0.0, 25.41, 22.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:22:15.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:21:40
2025-12-24T18:22:15.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:22:16.070 [DEBUG] [Thread-306799] [transport.py] [_log()] starting thread (client mode): 0xf574d690
2025-12-24T18:22:16.071 [DEBUG] [Thread-306799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:22:16.078 [DEBUG] [Thread-306799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:22:16.078 [INFO] [Thread-306799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] client lang: <none>
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] server lang: <none>
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] kex follows: False
2025-12-24T18:22:16.083 [DEBUG] [Thread-306799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:22:16.084 [DEBUG] [Thread-306799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:22:16.084 [DEBUG] [Thread-306799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:22:16.084 [DEBUG] [Thread-306799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:22:16.084 [DEBUG] [Thread-306799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:22:16.084 [DEBUG] [Thread-306799] [transport.py] [_log()] Compression: none
2025-12-24T18:22:16.084 [DEBUG] [Thread-306799] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:22:16.115 [DEBUG] [Thread-306799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:22:16.118 [DEBUG] [Thread-306799] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:22:16.119 [DEBUG] [Thread-306799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:22:16.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:22:16.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:22:16.125 [DEBUG] [Thread-306799] [transport.py] [_log()] userauth is OK
2025-12-24T18:22:16.125 [DEBUG] [Thread-306799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:22:16.125 [DEBUG] [Thread-306799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:22:16.125 [DEBUG] [Thread-306799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:22:16.125 [DEBUG] [Thread-306799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:22:16.142 [INFO] [Thread-306799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:22:16.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:22:16.791 [DEBUG] [Thread-306799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:22:16.791 [DEBUG] [Thread-306799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:22:16.791 [DEBUG] [Thread-306799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:22:16.832 [DEBUG] [Thread-306799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:22:16.832 [DEBUG] [Thread-306799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:22:16.834 [DEBUG] [Thread-306799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:22:16.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:22:16.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:22:16.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:22:16.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:22:16.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:22:16.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:22:16.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:22:16.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:22:16.858 [DEBUG] [Thread-306799] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:22:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:22:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.681663 -999.00  +22.50  15.57     32   +5.00 1 1 1 1 1   887    0 16.89 -29.48 ----- 15.6 15.6 177.6 22.9 25.8 -26.1 25.8 -27.7 27.2 -24.8 27.4 -26.3
2025-12-24T18:22:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:22:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:22:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.681663
2025-12-24T18:22:16.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:22:16.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:22:16.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:22:16.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:22:16.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:22:16.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:21:40', tmtdew=20.36, humidity=26.03, cloud=0.0, wind=25.41, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:21:35.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:22:16.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:22:16.967 [DEBUG] [Thread-306802] [transport.py] [_log()] starting thread (client mode): 0xf572bf10
2025-12-24T18:22:16.967 [DEBUG] [Thread-306802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:22:16.982 [DEBUG] [Thread-306802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:22:16.982 [INFO] [Thread-306802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] client lang: <none>
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] server lang: <none>
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] kex follows: False
2025-12-24T18:22:16.989 [DEBUG] [Thread-306802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:22:16.990 [DEBUG] [Thread-306802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:22:16.990 [DEBUG] [Thread-306802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:22:16.990 [DEBUG] [Thread-306802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:22:16.990 [DEBUG] [Thread-306802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:22:16.990 [DEBUG] [Thread-306802] [transport.py] [_log()] Compression: none
2025-12-24T18:22:16.990 [DEBUG] [Thread-306802] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:22:17.047 [DEBUG] [Thread-306802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:22:17.047 [DEBUG] [Thread-306802] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:22:17.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:22:17.048 [DEBUG] [Thread-306802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:22:17.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:22:17.104 [DEBUG] [Thread-306802] [transport.py] [_log()] userauth is OK
2025-12-24T18:22:17.104 [DEBUG] [Thread-306802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:22:17.104 [DEBUG] [Thread-306802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:22:17.104 [DEBUG] [Thread-306802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:22:17.104 [DEBUG] [Thread-306802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:22:17.122 [INFO] [Thread-306802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:22:17.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:22:17.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:22:17.957 [DEBUG] [Thread-306802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:22:17.957 [DEBUG] [Thread-306802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:22:18.004 [DEBUG] [Thread-306802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:22:18.004 [DEBUG] [Thread-306802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:22:18.013 [DEBUG] [Thread-306802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:22:18.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:22:18.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:22:18.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:22:18.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:22:18.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:22:18.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:22:18.050 [DEBUG] [Thread-306802] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:22:25.729 [DEBUG] [Thread-306804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:22:40.996 [DEBUG] [Thread-306805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:22:46.183 [DEBUG] [Thread-306806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:22:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:22:48.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:22:48.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
2025-12-24T18:22:49.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 22, 14), 20.36, 26.01, 0.0, 25.76, 22.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:22:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:22:14
2025-12-24T18:22:49.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:22:49.611 [DEBUG] [Thread-306807] [transport.py] [_log()] starting thread (client mode): 0xf5728310
2025-12-24T18:22:49.612 [DEBUG] [Thread-306807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:22:49.626 [DEBUG] [Thread-306807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:22:49.626 [INFO] [Thread-306807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] client lang: <none>
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] server lang: <none>
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] kex follows: False
2025-12-24T18:22:49.631 [DEBUG] [Thread-306807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:22:49.632 [DEBUG] [Thread-306807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:22:49.632 [DEBUG] [Thread-306807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:22:49.632 [DEBUG] [Thread-306807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:22:49.632 [DEBUG] [Thread-306807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:22:49.632 [DEBUG] [Thread-306807] [transport.py] [_log()] Compression: none
2025-12-24T18:22:49.632 [DEBUG] [Thread-306807] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:22:49.666 [DEBUG] [Thread-306807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:22:49.670 [DEBUG] [Thread-306807] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:22:49.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:22:49.672 [DEBUG] [Thread-306807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:22:49.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:22:49.676 [DEBUG] [Thread-306807] [transport.py] [_log()] userauth is OK
2025-12-24T18:22:49.676 [DEBUG] [Thread-306807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:22:49.676 [DEBUG] [Thread-306807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:22:49.676 [DEBUG] [Thread-306807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:22:49.676 [DEBUG] [Thread-306807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:22:49.695 [INFO] [Thread-306807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:22:49.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:22:50.356 [DEBUG] [Thread-306807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:22:50.356 [DEBUG] [Thread-306807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:22:50.357 [DEBUG] [Thread-306807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:22:50.397 [DEBUG] [Thread-306807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:22:50.397 [DEBUG] [Thread-306807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:22:50.400 [DEBUG] [Thread-306807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:22:50.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:22:50.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:22:50.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:22:50.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:22:50.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:22:50.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:22:50.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:22:50.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:22:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:22:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.682011 -999.00  +22.50  18.71     32   +5.00 1 1 1 1 1   887    0 16.83 -28.10 ----- 18.7 18.7 164.8 25.5 25.9 -26.0 26.0 -25.1 27.3 -24.0 27.4 -24.9
2025-12-24T18:22:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:22:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:22:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.682011
2025-12-24T18:22:50.434 [DEBUG] [Thread-306807] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:22:50.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:22:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:22:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:22:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:22:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:22:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:22:14', tmtdew=20.36, humidity=26.01, cloud=0.0, wind=25.76, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:22:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:22:50.536 [DEBUG] [Thread-306810] [transport.py] [_log()] starting thread (client mode): 0xf572b160
2025-12-24T18:22:50.536 [DEBUG] [Thread-306810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:22:50.551 [DEBUG] [Thread-306810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:22:50.551 [INFO] [Thread-306810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:22:50.558 [DEBUG] [Thread-306810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:22:50.558 [DEBUG] [Thread-306810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:22:50.558 [DEBUG] [Thread-306810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:22:50.558 [DEBUG] [Thread-306810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:22:50.558 [DEBUG] [Thread-306810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] client lang: <none>
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] server lang: <none>
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] kex follows: False
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] Compression: none
2025-12-24T18:22:50.559 [DEBUG] [Thread-306810] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:22:50.615 [DEBUG] [Thread-306810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:22:50.615 [DEBUG] [Thread-306810] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:22:50.615 [DEBUG] [Thread-306810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:22:50.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:22:50.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:22:50.672 [DEBUG] [Thread-306810] [transport.py] [_log()] userauth is OK
2025-12-24T18:22:50.672 [DEBUG] [Thread-306810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:22:50.672 [DEBUG] [Thread-306810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:22:50.672 [DEBUG] [Thread-306810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:22:50.672 [DEBUG] [Thread-306810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:22:50.677 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:22:50.678 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:22:50.687 [INFO] [Thread-306810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:22:50.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:22:50.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:22:51.553 [DEBUG] [Thread-306810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:22:51.553 [DEBUG] [Thread-306810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:22:51.601 [DEBUG] [Thread-306810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:22:51.601 [DEBUG] [Thread-306810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:22:51.610 [DEBUG] [Thread-306810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:22:51.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:22:51.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:22:51.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:22:51.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:22:51.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:22:51.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:22:51.649 [DEBUG] [Thread-306810] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:22:56.076 [DEBUG] [Thread-306812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:23:11.282 [DEBUG] [Thread-306813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:23:21.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:23:21.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:23:21.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:23:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 22, 47), 20.42, 26.08, 0.0, 22.69, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:23:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:22:47
2025-12-24T18:23:22.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:23:23.231 [DEBUG] [Thread-306814] [transport.py] [_log()] starting thread (client mode): 0xf574ee30
2025-12-24T18:23:23.234 [DEBUG] [Thread-306814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:23:23.236 [DEBUG] [Thread-306814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:23:23.236 [INFO] [Thread-306814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] client lang: <none>
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] server lang: <none>
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] kex follows: False
2025-12-24T18:23:23.242 [DEBUG] [Thread-306814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:23:23.243 [DEBUG] [Thread-306814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:23:23.243 [DEBUG] [Thread-306814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:23:23.243 [DEBUG] [Thread-306814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:23:23.243 [DEBUG] [Thread-306814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:23:23.243 [DEBUG] [Thread-306814] [transport.py] [_log()] Compression: none
2025-12-24T18:23:23.243 [DEBUG] [Thread-306814] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:23:23.300 [DEBUG] [Thread-306814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:23:23.304 [DEBUG] [Thread-306814] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:23:23.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:23:23.308 [DEBUG] [Thread-306814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:23:23.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:23:23.311 [DEBUG] [Thread-306814] [transport.py] [_log()] userauth is OK
2025-12-24T18:23:23.311 [DEBUG] [Thread-306814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:23:23.311 [DEBUG] [Thread-306814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:23:23.311 [DEBUG] [Thread-306814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:23:23.311 [DEBUG] [Thread-306814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:23:23.331 [INFO] [Thread-306814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:23:23.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:23:23.996 [DEBUG] [Thread-306814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:23:23.996 [DEBUG] [Thread-306814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:23:23.997 [DEBUG] [Thread-306814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:23:24.038 [DEBUG] [Thread-306814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:23:24.038 [DEBUG] [Thread-306814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:23:24.041 [DEBUG] [Thread-306814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:23:24.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:23:24.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:23:24.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:23:24.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:23:24.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:23:24.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:23:24.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:23:24.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:23:24.057 [DEBUG] [Thread-306814] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:23:24.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:23:24.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.682705 -999.00  +22.40  23.18     32   +5.10 1 1 1 1 1   887    0 17.23 -24.66 ----- 23.2 23.2 144.0 30.1 25.8 -26.4 25.9 -25.4 27.1 -24.6 27.3 -25.9
2025-12-24T18:23:24.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:23:24.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:23:24.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.682705
2025-12-24T18:23:24.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:23:24.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:23:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:23:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:23:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:23:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:22:47', tmtdew=20.42, humidity=26.08, cloud=0.0, wind=22.69, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:23:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:23:24.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:23:24.203 [DEBUG] [Thread-306817] [transport.py] [_log()] starting thread (client mode): 0xf57507c0
2025-12-24T18:23:24.203 [DEBUG] [Thread-306817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:23:24.217 [DEBUG] [Thread-306817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:23:24.217 [INFO] [Thread-306817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] client lang: <none>
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] server lang: <none>
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] kex follows: False
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] Compression: none
2025-12-24T18:23:24.225 [DEBUG] [Thread-306817] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:23:24.282 [DEBUG] [Thread-306817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:23:24.283 [DEBUG] [Thread-306817] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:23:24.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:23:24.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:23:24.283 [DEBUG] [Thread-306817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:23:24.340 [DEBUG] [Thread-306817] [transport.py] [_log()] userauth is OK
2025-12-24T18:23:24.340 [DEBUG] [Thread-306817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:23:24.340 [DEBUG] [Thread-306817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:23:24.340 [DEBUG] [Thread-306817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:23:24.340 [DEBUG] [Thread-306817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:23:24.354 [INFO] [Thread-306817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:23:24.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:23:24.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:23:25.197 [DEBUG] [Thread-306817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:23:25.197 [DEBUG] [Thread-306817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:23:25.244 [DEBUG] [Thread-306817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:23:25.244 [DEBUG] [Thread-306817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:23:25.254 [DEBUG] [Thread-306817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:23:25.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:23:25.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:23:25.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:23:25.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:23:25.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:23:25.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:23:25.292 [DEBUG] [Thread-306817] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:23:26.407 [DEBUG] [Thread-306819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:23:41.594 [DEBUG] [Thread-306820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:23:46.402 [DEBUG] [Thread-306821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:23:50.839 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:23:50.848 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:23:55.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:23:55.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:23:55.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:23:56.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 23, 20), 20.38, 26.14, 0.0, 28.35, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:23:56.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:23:20
2025-12-24T18:23:56.696 [DEBUG] [Thread-306822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:23:56.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:23:57.031 [DEBUG] [Thread-306823] [transport.py] [_log()] starting thread (client mode): 0xf574ff10
2025-12-24T18:23:57.031 [DEBUG] [Thread-306823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:23:57.043 [DEBUG] [Thread-306823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:23:57.043 [INFO] [Thread-306823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] client lang: <none>
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] server lang: <none>
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] kex follows: False
2025-12-24T18:23:57.047 [DEBUG] [Thread-306823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:23:57.048 [DEBUG] [Thread-306823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:23:57.048 [DEBUG] [Thread-306823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:23:57.048 [DEBUG] [Thread-306823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:23:57.048 [DEBUG] [Thread-306823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:23:57.048 [DEBUG] [Thread-306823] [transport.py] [_log()] Compression: none
2025-12-24T18:23:57.048 [DEBUG] [Thread-306823] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:23:57.081 [DEBUG] [Thread-306823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:23:57.085 [DEBUG] [Thread-306823] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:23:57.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:23:57.087 [DEBUG] [Thread-306823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:23:57.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:23:57.089 [DEBUG] [Thread-306823] [transport.py] [_log()] userauth is OK
2025-12-24T18:23:57.090 [DEBUG] [Thread-306823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:23:57.090 [DEBUG] [Thread-306823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:23:57.090 [DEBUG] [Thread-306823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:23:57.090 [DEBUG] [Thread-306823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:23:57.113 [INFO] [Thread-306823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:23:57.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:23:57.773 [DEBUG] [Thread-306823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:23:57.773 [DEBUG] [Thread-306823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:23:57.774 [DEBUG] [Thread-306823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:23:57.814 [DEBUG] [Thread-306823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:23:57.814 [DEBUG] [Thread-306823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:23:57.817 [DEBUG] [Thread-306823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:23:57.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:23:57.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:23:57.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:23:57.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:23:57.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:23:57.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:23:57.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:23:57.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:23:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:23:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.683052 -999.00  +22.40  18.28     32   +5.10 1 1 1 1 1   887    0 16.86 -26.59 ----- 18.3 18.3 157.8 26.9 25.7 -26.3 25.9 -25.6 27.1 -24.6 27.3 -27.0
2025-12-24T18:23:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:23:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:23:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.683052
2025-12-24T18:23:57.848 [DEBUG] [Thread-306823] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:23:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:23:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:23:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:23:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:23:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:23:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:23:20', tmtdew=20.38, humidity=26.14, cloud=0.0, wind=28.35, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:23:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:23:57.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:23:57.950 [DEBUG] [Thread-306826] [transport.py] [_log()] starting thread (client mode): 0xf5752fe0
2025-12-24T18:23:57.950 [DEBUG] [Thread-306826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:23:57.966 [DEBUG] [Thread-306826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:23:57.966 [INFO] [Thread-306826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] client lang: <none>
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] server lang: <none>
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] kex follows: False
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] Compression: none
2025-12-24T18:23:57.974 [DEBUG] [Thread-306826] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:23:58.031 [DEBUG] [Thread-306826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:23:58.031 [DEBUG] [Thread-306826] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:23:58.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:23:58.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:23:58.031 [DEBUG] [Thread-306826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:23:58.088 [DEBUG] [Thread-306826] [transport.py] [_log()] userauth is OK
2025-12-24T18:23:58.088 [DEBUG] [Thread-306826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:23:58.088 [DEBUG] [Thread-306826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:23:58.088 [DEBUG] [Thread-306826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:23:58.088 [DEBUG] [Thread-306826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:23:58.102 [INFO] [Thread-306826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:23:58.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:23:58.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:23:58.950 [DEBUG] [Thread-306826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:23:58.951 [DEBUG] [Thread-306826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:23:58.998 [DEBUG] [Thread-306826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:23:58.998 [DEBUG] [Thread-306826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:23:59.008 [DEBUG] [Thread-306826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:23:59.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:23:59.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:23:59.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
2025-12-24T18:23:59.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:23:59.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:23:59.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:23:59.044 [DEBUG] [Thread-306826] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:24:11.800 [DEBUG] [Thread-306828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:24:26.969 [DEBUG] [Thread-306829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:24:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:24:29.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:24:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:24:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 23, 54), 20.35, 26.18, 0.0, 29.34, 22.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:24:30.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:23:54
2025-12-24T18:24:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:24:30.382 [DEBUG] [Thread-306830] [transport.py] [_log()] starting thread (client mode): 0xf574c820
2025-12-24T18:24:30.382 [DEBUG] [Thread-306830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:24:30.383 [DEBUG] [Thread-306830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:24:30.383 [INFO] [Thread-306830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] client lang: <none>
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] server lang: <none>
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] kex follows: False
2025-12-24T18:24:30.387 [DEBUG] [Thread-306830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:24:30.388 [DEBUG] [Thread-306830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:24:30.388 [DEBUG] [Thread-306830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:24:30.388 [DEBUG] [Thread-306830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:24:30.388 [DEBUG] [Thread-306830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:24:30.388 [DEBUG] [Thread-306830] [transport.py] [_log()] Compression: none
2025-12-24T18:24:30.388 [DEBUG] [Thread-306830] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:24:30.417 [DEBUG] [Thread-306830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:24:30.420 [DEBUG] [Thread-306830] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:24:30.421 [DEBUG] [Thread-306830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:24:30.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:24:30.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:24:30.425 [DEBUG] [Thread-306830] [transport.py] [_log()] userauth is OK
2025-12-24T18:24:30.425 [DEBUG] [Thread-306830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:24:30.425 [DEBUG] [Thread-306830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:24:30.425 [DEBUG] [Thread-306830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:24:30.425 [DEBUG] [Thread-306830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:24:30.443 [INFO] [Thread-306830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:24:30.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:24:31.054 [DEBUG] [Thread-306830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:24:31.054 [DEBUG] [Thread-306830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:24:31.055 [DEBUG] [Thread-306830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:24:31.095 [DEBUG] [Thread-306830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:24:31.095 [DEBUG] [Thread-306830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:24:31.097 [DEBUG] [Thread-306830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:24:31.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:24:31.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:24:31.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:24:31.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:24:31.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:24:31.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:24:31.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:24:31.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:24:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:24:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.683400 -999.00  +22.40  16.91     32   +5.00 1 1 1 1 1   887    0 16.49 -26.62 ----- 16.9 16.9 158.5 22.0 25.7 -26.0 25.9 -25.4 27.1 -24.3 27.3 -25.4
2025-12-24T18:24:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:24:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:24:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.683400
2025-12-24T18:24:31.125 [DEBUG] [Thread-306830] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:24:31.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:24:31.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:24:31.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:24:31.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:24:31.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:24:31.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:23:54', tmtdew=20.35, humidity=26.18, cloud=0.0, wind=29.34, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:24:05.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:24:31.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:24:31.225 [DEBUG] [Thread-306833] [transport.py] [_log()] starting thread (client mode): 0xf574d990
2025-12-24T18:24:31.225 [DEBUG] [Thread-306833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:24:31.240 [DEBUG] [Thread-306833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:24:31.240 [INFO] [Thread-306833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] client lang: <none>
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] server lang: <none>
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] kex follows: False
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] Compression: none
2025-12-24T18:24:31.248 [DEBUG] [Thread-306833] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:24:31.303 [DEBUG] [Thread-306833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:24:31.303 [DEBUG] [Thread-306833] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:24:31.303 [DEBUG] [Thread-306833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:24:31.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:24:31.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:24:31.360 [DEBUG] [Thread-306833] [transport.py] [_log()] userauth is OK
2025-12-24T18:24:31.360 [DEBUG] [Thread-306833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:24:31.360 [DEBUG] [Thread-306833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:24:31.360 [DEBUG] [Thread-306833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:24:31.360 [DEBUG] [Thread-306833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:24:31.375 [INFO] [Thread-306833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:24:31.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:24:31.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:24:32.228 [DEBUG] [Thread-306833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:24:32.228 [DEBUG] [Thread-306833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:24:32.276 [DEBUG] [Thread-306833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:24:32.276 [DEBUG] [Thread-306833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:24:32.285 [DEBUG] [Thread-306833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:24:32.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:24:32.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')
2025-12-24T18:24:32.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
2025-12-24T18:24:32.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:24:32.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:24:32.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:24:32.317 [DEBUG] [Thread-306833] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:24:42.115 [DEBUG] [Thread-306835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:24:46.583 [DEBUG] [Thread-306836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:24:51.002 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:24:51.004 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:24:57.269 [DEBUG] [Thread-306837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:25:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:25:02.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:25:02.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:25:03.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 24, 27), 20.28, 26.29, 0.0, 24.81, 22.59, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:25:03.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:24:27
2025-12-24T18:25:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:25:03.964 [DEBUG] [Thread-306838] [transport.py] [_log()] starting thread (client mode): 0xf572ba60
2025-12-24T18:25:03.965 [DEBUG] [Thread-306838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:25:03.965 [DEBUG] [Thread-306838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:25:03.965 [INFO] [Thread-306838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:25:03.970 [DEBUG] [Thread-306838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:25:03.970 [DEBUG] [Thread-306838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:25:03.970 [DEBUG] [Thread-306838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:25:03.970 [DEBUG] [Thread-306838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:25:03.970 [DEBUG] [Thread-306838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:25:03.970 [DEBUG] [Thread-306838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:25:03.970 [DEBUG] [Thread-306838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:25:03.970 [DEBUG] [Thread-306838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] client lang: <none>
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] server lang: <none>
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] kex follows: False
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] Compression: none
2025-12-24T18:25:03.971 [DEBUG] [Thread-306838] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:25:04.004 [DEBUG] [Thread-306838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:25:04.009 [DEBUG] [Thread-306838] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:25:04.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:25:04.013 [DEBUG] [Thread-306838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:25:04.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:25:04.016 [DEBUG] [Thread-306838] [transport.py] [_log()] userauth is OK
2025-12-24T18:25:04.016 [DEBUG] [Thread-306838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:25:04.016 [DEBUG] [Thread-306838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:25:04.016 [DEBUG] [Thread-306838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:25:04.016 [DEBUG] [Thread-306838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:25:04.037 [INFO] [Thread-306838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:25:04.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:25:04.847 [DEBUG] [Thread-306838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:25:04.847 [DEBUG] [Thread-306838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:25:04.849 [DEBUG] [Thread-306838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:25:04.889 [DEBUG] [Thread-306838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:25:04.889 [DEBUG] [Thread-306838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:25:04.892 [DEBUG] [Thread-306838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:25:04.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:25:04.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:25:04.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:25:04.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:25:04.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:25:04.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:25:04.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:25:04.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:25:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:25:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.683746 -999.00  +22.40  20.44     32   +5.10 1 1 1 1 1   887    0 17.29 -23.50 ----- 20.4 20.4 152.8 27.5 25.7 -26.1 25.9 -25.7 27.1 -24.3 27.2 -25.6
2025-12-24T18:25:04.967 [DEBUG] [Thread-306838] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:25:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:25:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:25:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.683746
2025-12-24T18:25:04.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:25:04.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:25:04.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:25:04.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:25:04.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:25:04.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:24:27', tmtdew=20.28, humidity=26.29, cloud=0.0, wind=24.81, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:24:35.654', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:25:05.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:25:05.088 [DEBUG] [Thread-306841] [transport.py] [_log()] starting thread (client mode): 0xf572bc40
2025-12-24T18:25:05.088 [DEBUG] [Thread-306841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:25:05.105 [DEBUG] [Thread-306841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:25:05.106 [INFO] [Thread-306841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:25:05.113 [DEBUG] [Thread-306841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:25:05.114 [DEBUG] [Thread-306841] [transport.py] [_log()] client lang: <none>
2025-12-24T18:25:05.115 [DEBUG] [Thread-306841] [transport.py] [_log()] server lang: <none>
2025-12-24T18:25:05.115 [DEBUG] [Thread-306841] [transport.py] [_log()] kex follows: False
2025-12-24T18:25:05.115 [DEBUG] [Thread-306841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:25:05.115 [DEBUG] [Thread-306841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:25:05.115 [DEBUG] [Thread-306841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:25:05.115 [DEBUG] [Thread-306841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:25:05.116 [DEBUG] [Thread-306841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:25:05.116 [DEBUG] [Thread-306841] [transport.py] [_log()] Compression: none
2025-12-24T18:25:05.116 [DEBUG] [Thread-306841] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:25:05.176 [DEBUG] [Thread-306841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:25:05.177 [DEBUG] [Thread-306841] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:25:05.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:25:05.178 [DEBUG] [Thread-306841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:25:05.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:25:05.233 [DEBUG] [Thread-306841] [transport.py] [_log()] userauth is OK
2025-12-24T18:25:05.233 [DEBUG] [Thread-306841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:25:05.234 [DEBUG] [Thread-306841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:25:05.234 [DEBUG] [Thread-306841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:25:05.234 [DEBUG] [Thread-306841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:25:05.252 [INFO] [Thread-306841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:25:05.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:25:05.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:25:06.161 [DEBUG] [Thread-306841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:25:06.162 [DEBUG] [Thread-306841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:25:06.209 [DEBUG] [Thread-306841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:25:06.209 [DEBUG] [Thread-306841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:25:06.218 [DEBUG] [Thread-306841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:25:06.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:25:06.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:25:06.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:25:06.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:25:06.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:25:06.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:25:06.257 [DEBUG] [Thread-306841] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:25:12.377 [DEBUG] [Thread-306843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:25:27.583 [DEBUG] [Thread-306844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:25:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:25:36.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:25:36.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:25:37.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 25), 20.2, 26.69, 0.0, 26.85, 22.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:25:37.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:25:00
2025-12-24T18:25:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:25:37.597 [DEBUG] [Thread-306845] [transport.py] [_log()] starting thread (client mode): 0xf5752cb0
2025-12-24T18:25:37.597 [DEBUG] [Thread-306845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:25:37.608 [DEBUG] [Thread-306845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:25:37.608 [INFO] [Thread-306845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:25:37.612 [DEBUG] [Thread-306845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:25:37.612 [DEBUG] [Thread-306845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] client lang: <none>
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] server lang: <none>
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] kex follows: False
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:25:37.613 [DEBUG] [Thread-306845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:25:37.614 [DEBUG] [Thread-306845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:25:37.614 [DEBUG] [Thread-306845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:25:37.614 [DEBUG] [Thread-306845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:25:37.614 [DEBUG] [Thread-306845] [transport.py] [_log()] Compression: none
2025-12-24T18:25:37.614 [DEBUG] [Thread-306845] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:25:37.646 [DEBUG] [Thread-306845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:25:37.649 [DEBUG] [Thread-306845] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:25:37.650 [DEBUG] [Thread-306845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:25:37.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:25:37.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:25:37.654 [DEBUG] [Thread-306845] [transport.py] [_log()] userauth is OK
2025-12-24T18:25:37.654 [DEBUG] [Thread-306845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:25:37.654 [DEBUG] [Thread-306845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:25:37.654 [DEBUG] [Thread-306845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:25:37.654 [DEBUG] [Thread-306845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:25:37.689 [INFO] [Thread-306845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:25:37.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:25:38.318 [DEBUG] [Thread-306845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:25:38.318 [DEBUG] [Thread-306845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:25:38.321 [DEBUG] [Thread-306845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:25:38.360 [DEBUG] [Thread-306845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:25:38.360 [DEBUG] [Thread-306845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:25:38.364 [DEBUG] [Thread-306845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:25:38.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:25:38.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:25:38.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:25:38.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:25:38.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:25:38.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:25:38.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:25:38.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:25:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:25:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.684094 -999.00  +22.20  14.31     32   +5.00 1 1 1 1 1   887    0 16.80 -21.35 ----- 14.3 14.3 144.4 22.2 25.6 -26.2 25.8 -26.0 26.9 -25.7 27.1 -26.3
2025-12-24T18:25:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:25:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:25:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.684094
2025-12-24T18:25:38.401 [DEBUG] [Thread-306845] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:25:38.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:25:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:25:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:25:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:25:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:25:38.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:25:00', tmtdew=20.2, humidity=26.69, cloud=0.0, wind=26.85, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:25:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:25:38.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:25:38.518 [DEBUG] [Thread-306848] [transport.py] [_log()] starting thread (client mode): 0xf57289a0
2025-12-24T18:25:38.518 [DEBUG] [Thread-306848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:25:38.532 [DEBUG] [Thread-306848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:25:38.532 [INFO] [Thread-306848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:25:38.540 [DEBUG] [Thread-306848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:25:38.540 [DEBUG] [Thread-306848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] client lang: <none>
2025-12-24T18:25:38.541 [DEBUG] [Thread-306848] [transport.py] [_log()] server lang: <none>
2025-12-24T18:25:38.542 [DEBUG] [Thread-306848] [transport.py] [_log()] kex follows: False
2025-12-24T18:25:38.542 [DEBUG] [Thread-306848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:25:38.542 [DEBUG] [Thread-306848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:25:38.542 [DEBUG] [Thread-306848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:25:38.542 [DEBUG] [Thread-306848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:25:38.542 [DEBUG] [Thread-306848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:25:38.542 [DEBUG] [Thread-306848] [transport.py] [_log()] Compression: none
2025-12-24T18:25:38.542 [DEBUG] [Thread-306848] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:25:38.601 [DEBUG] [Thread-306848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:25:38.602 [DEBUG] [Thread-306848] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:25:38.603 [DEBUG] [Thread-306848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:25:38.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:25:38.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:25:38.661 [DEBUG] [Thread-306848] [transport.py] [_log()] userauth is OK
2025-12-24T18:25:38.661 [DEBUG] [Thread-306848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:25:38.661 [DEBUG] [Thread-306848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:25:38.661 [DEBUG] [Thread-306848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:25:38.661 [DEBUG] [Thread-306848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:25:38.680 [INFO] [Thread-306848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:25:38.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:25:38.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:25:39.528 [DEBUG] [Thread-306848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:25:39.528 [DEBUG] [Thread-306848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:25:39.574 [DEBUG] [Thread-306848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:25:39.574 [DEBUG] [Thread-306848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:25:39.583 [DEBUG] [Thread-306848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:25:39.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:25:39.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:25:39.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:25:39.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:25:39.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:25:39.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:25:39.619 [DEBUG] [Thread-306848] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:25:42.732 [DEBUG] [Thread-306850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:25:46.807 [DEBUG] [Thread-306851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:25:51.146 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:25:51.147 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:25:58.147 [DEBUG] [Thread-306852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:26:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:26:09.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:26:09.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:26:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 25, 34), 20.24, 26.19, 0.0, 29.22, 22.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:26:10.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:25:34
2025-12-24T18:26:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:26:11.002 [DEBUG] [Thread-306853] [transport.py] [_log()] starting thread (client mode): 0xf81f2e90
2025-12-24T18:26:11.003 [DEBUG] [Thread-306853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:26:11.012 [DEBUG] [Thread-306853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:26:11.012 [INFO] [Thread-306853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] client lang: <none>
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] server lang: <none>
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] kex follows: False
2025-12-24T18:26:11.017 [DEBUG] [Thread-306853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:26:11.018 [DEBUG] [Thread-306853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:26:11.018 [DEBUG] [Thread-306853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:26:11.018 [DEBUG] [Thread-306853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:26:11.018 [DEBUG] [Thread-306853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:26:11.018 [DEBUG] [Thread-306853] [transport.py] [_log()] Compression: none
2025-12-24T18:26:11.018 [DEBUG] [Thread-306853] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:26:11.051 [DEBUG] [Thread-306853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:26:11.055 [DEBUG] [Thread-306853] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:26:11.056 [DEBUG] [Thread-306853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:26:11.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:26:11.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:26:11.058 [DEBUG] [Thread-306853] [transport.py] [_log()] userauth is OK
2025-12-24T18:26:11.058 [DEBUG] [Thread-306853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:26:11.058 [DEBUG] [Thread-306853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:26:11.058 [DEBUG] [Thread-306853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:26:11.058 [DEBUG] [Thread-306853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:26:11.075 [INFO] [Thread-306853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:26:11.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:26:11.707 [DEBUG] [Thread-306853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:26:11.707 [DEBUG] [Thread-306853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:26:11.718 [DEBUG] [Thread-306853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:26:11.748 [DEBUG] [Thread-306853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:26:11.749 [DEBUG] [Thread-306853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:26:11.752 [DEBUG] [Thread-306853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:26:11.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:26:11.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:26:11.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:26:11.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:26:11.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:26:11.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:26:11.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:26:11.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:26:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:26:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.684441 -999.00  +22.30  17.96     32   +5.00 1 1 1 1 1   887    0 16.75 -23.19 ----- 18.0 18.0 165.4 28.2 25.6 -26.1 25.9 -26.1 26.9 -24.7 27.2 -26.1
2025-12-24T18:26:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:26:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:26:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.684441
2025-12-24T18:26:11.785 [DEBUG] [Thread-306853] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:26:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:26:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:26:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:26:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:26:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:26:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:25:34', tmtdew=20.24, humidity=26.19, cloud=0.0, wind=29.22, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:25:35.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:26:11.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:26:11.902 [DEBUG] [Thread-306856] [transport.py] [_log()] starting thread (client mode): 0xf5719e40
2025-12-24T18:26:11.902 [DEBUG] [Thread-306856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:26:11.917 [DEBUG] [Thread-306856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:26:11.917 [INFO] [Thread-306856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:26:11.925 [DEBUG] [Thread-306856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:26:11.925 [DEBUG] [Thread-306856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:26:11.925 [DEBUG] [Thread-306856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:26:11.925 [DEBUG] [Thread-306856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] client lang: <none>
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] server lang: <none>
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] kex follows: False
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] Compression: none
2025-12-24T18:26:11.926 [DEBUG] [Thread-306856] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:26:11.985 [DEBUG] [Thread-306856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:26:11.985 [DEBUG] [Thread-306856] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:26:11.986 [DEBUG] [Thread-306856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:26:11.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:26:11.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:26:12.041 [DEBUG] [Thread-306856] [transport.py] [_log()] userauth is OK
2025-12-24T18:26:12.041 [DEBUG] [Thread-306856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:26:12.050 [DEBUG] [Thread-306856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:26:12.050 [DEBUG] [Thread-306856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:26:12.051 [DEBUG] [Thread-306856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:26:12.074 [INFO] [Thread-306856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:26:12.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:26:12.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:26:12.903 [DEBUG] [Thread-306856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:26:12.903 [DEBUG] [Thread-306856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:26:12.951 [DEBUG] [Thread-306856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:26:12.951 [DEBUG] [Thread-306856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:26:12.960 [DEBUG] [Thread-306856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:26:12.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:26:12.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:26:12.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
2025-12-24T18:26:12.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:26:12.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:26:12.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:26:12.993 [DEBUG] [Thread-306856] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:26:13.241 [DEBUG] [Thread-306858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:26:28.650 [DEBUG] [Thread-306859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:26:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:26:43.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:26:43.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
2025-12-24T18:26:43.897 [DEBUG] [Thread-306860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:26:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 26, 7), 20.25, 26.18, 0.0, 30.82, 22.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:26:44.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:26:07
2025-12-24T18:26:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:26:45.076 [DEBUG] [Thread-306861] [transport.py] [_log()] starting thread (client mode): 0xf81f3310
2025-12-24T18:26:45.076 [DEBUG] [Thread-306861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:26:45.088 [DEBUG] [Thread-306861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:26:45.088 [INFO] [Thread-306861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:26:45.092 [DEBUG] [Thread-306861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] client lang: <none>
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] server lang: <none>
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] kex follows: False
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:26:45.093 [DEBUG] [Thread-306861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:26:45.094 [DEBUG] [Thread-306861] [transport.py] [_log()] Compression: none
2025-12-24T18:26:45.094 [DEBUG] [Thread-306861] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:26:45.125 [DEBUG] [Thread-306861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:26:45.128 [DEBUG] [Thread-306861] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:26:45.130 [DEBUG] [Thread-306861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:26:45.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:26:45.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:26:45.133 [DEBUG] [Thread-306861] [transport.py] [_log()] userauth is OK
2025-12-24T18:26:45.134 [DEBUG] [Thread-306861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:26:45.134 [DEBUG] [Thread-306861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:26:45.134 [DEBUG] [Thread-306861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:26:45.134 [DEBUG] [Thread-306861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:26:45.152 [INFO] [Thread-306861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:26:45.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:26:45.806 [DEBUG] [Thread-306861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:26:45.806 [DEBUG] [Thread-306861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:26:45.807 [DEBUG] [Thread-306861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:26:45.848 [DEBUG] [Thread-306861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:26:45.848 [DEBUG] [Thread-306861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:26:45.850 [DEBUG] [Thread-306861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:26:45.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:26:45.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:26:45.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:26:45.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:26:45.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:26:45.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:26:45.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:26:45.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:26:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:26:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.684789 -999.00  +22.20  17.94     32   +5.00 1 1 1 1 1   887    0 17.42 -23.62 ----- 17.9 17.9 174.2 28.7 25.5 -26.5 25.5 -28.4 26.9 -25.8 27.1 -25.9
2025-12-24T18:26:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:26:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:26:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.684789
2025-12-24T18:26:45.878 [DEBUG] [Thread-306861] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:26:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:26:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:26:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:26:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:26:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:26:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:26:07', tmtdew=20.25, humidity=26.18, cloud=0.0, wind=30.82, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:26:05.770', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:26:45.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:26:45.970 [DEBUG] [Thread-306864] [transport.py] [_log()] starting thread (client mode): 0xf81f11b0
2025-12-24T18:26:45.970 [DEBUG] [Thread-306864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:26:45.985 [DEBUG] [Thread-306864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:26:45.985 [INFO] [Thread-306864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:26:45.993 [DEBUG] [Thread-306864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:26:45.993 [DEBUG] [Thread-306864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:26:45.993 [DEBUG] [Thread-306864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:26:45.993 [DEBUG] [Thread-306864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:26:45.993 [DEBUG] [Thread-306864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] client lang: <none>
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] server lang: <none>
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] kex follows: False
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] Compression: none
2025-12-24T18:26:45.994 [DEBUG] [Thread-306864] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:26:46.053 [DEBUG] [Thread-306864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:26:46.054 [DEBUG] [Thread-306864] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:26:46.054 [DEBUG] [Thread-306864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:26:46.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:26:46.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:26:46.108 [DEBUG] [Thread-306864] [transport.py] [_log()] userauth is OK
2025-12-24T18:26:46.108 [DEBUG] [Thread-306864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:26:46.108 [DEBUG] [Thread-306864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:26:46.108 [DEBUG] [Thread-306864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:26:46.108 [DEBUG] [Thread-306864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:26:46.126 [INFO] [Thread-306864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:26:46.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:26:46.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:26:46.968 [DEBUG] [Thread-306864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:26:46.969 [DEBUG] [Thread-306864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:26:47.017 [DEBUG] [Thread-306864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:26:47.017 [DEBUG] [Thread-306864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:26:47.025 [DEBUG] [Thread-306864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:26:47.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:26:47.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:26:47.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:26:47.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:26:47.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:26:47.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:26:47.059 [DEBUG] [Thread-306864] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:26:47.067 [DEBUG] [Thread-306866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:26:51.296 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:26:51.300 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:26:59.009 [DEBUG] [Thread-306867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:27:14.138 [DEBUG] [Thread-306868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:27:17.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:27:17.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:27:17.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:27:18.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 26, 41), 20.18, 26.71, 0.0, 20.38, 22.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:27:18.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:26:41
2025-12-24T18:27:18.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:27:18.393 [DEBUG] [Thread-306869] [transport.py] [_log()] starting thread (client mode): 0xf81f1960
2025-12-24T18:27:18.393 [DEBUG] [Thread-306869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:27:18.396 [DEBUG] [Thread-306869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:27:18.396 [INFO] [Thread-306869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] client lang: <none>
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] server lang: <none>
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] kex follows: False
2025-12-24T18:27:18.400 [DEBUG] [Thread-306869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:27:18.401 [DEBUG] [Thread-306869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:27:18.401 [DEBUG] [Thread-306869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:27:18.401 [DEBUG] [Thread-306869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:27:18.402 [DEBUG] [Thread-306869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:27:18.402 [DEBUG] [Thread-306869] [transport.py] [_log()] Compression: none
2025-12-24T18:27:18.402 [DEBUG] [Thread-306869] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:27:18.435 [DEBUG] [Thread-306869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:27:18.438 [DEBUG] [Thread-306869] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:27:18.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:27:18.440 [DEBUG] [Thread-306869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:27:18.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:27:18.478 [DEBUG] [Thread-306869] [transport.py] [_log()] userauth is OK
2025-12-24T18:27:18.478 [DEBUG] [Thread-306869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:27:18.479 [DEBUG] [Thread-306869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:27:18.479 [DEBUG] [Thread-306869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:27:18.479 [DEBUG] [Thread-306869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:27:18.506 [INFO] [Thread-306869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:27:18.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:27:19.167 [DEBUG] [Thread-306869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:27:19.167 [DEBUG] [Thread-306869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:27:19.169 [DEBUG] [Thread-306869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:27:19.208 [DEBUG] [Thread-306869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:27:19.208 [DEBUG] [Thread-306869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:27:19.211 [DEBUG] [Thread-306869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:27:19.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:27:19.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:27:19.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:27:19.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:27:19.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:27:19.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:27:19.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:27:19.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:27:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:27:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.685136 -999.00  +22.20   9.58     32   +5.00 1 1 1 1 1   887    0 16.63 -23.36 ----- 9.6 9.6 173.8 18.5 25.6 -26.2 25.6 -27.0 26.9 -24.6 27.1 -25.8
2025-12-24T18:27:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:27:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:27:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.685136
2025-12-24T18:27:19.242 [DEBUG] [Thread-306869] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:27:19.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:27:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:27:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:27:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:27:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:27:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:26:41', tmtdew=20.18, humidity=26.71, cloud=0.0, wind=20.38, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:26:35.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:27:19.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:27:19.358 [DEBUG] [Thread-306872] [transport.py] [_log()] starting thread (client mode): 0xf81f29e0
2025-12-24T18:27:19.358 [DEBUG] [Thread-306872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:27:19.373 [DEBUG] [Thread-306872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:27:19.373 [INFO] [Thread-306872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] client lang: <none>
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] server lang: <none>
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] kex follows: False
2025-12-24T18:27:19.380 [DEBUG] [Thread-306872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:27:19.381 [DEBUG] [Thread-306872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:27:19.381 [DEBUG] [Thread-306872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:27:19.381 [DEBUG] [Thread-306872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:27:19.381 [DEBUG] [Thread-306872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:27:19.381 [DEBUG] [Thread-306872] [transport.py] [_log()] Compression: none
2025-12-24T18:27:19.381 [DEBUG] [Thread-306872] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:27:19.439 [DEBUG] [Thread-306872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:27:19.439 [DEBUG] [Thread-306872] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:27:19.439 [DEBUG] [Thread-306872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:27:19.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:27:19.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:27:19.496 [DEBUG] [Thread-306872] [transport.py] [_log()] userauth is OK
2025-12-24T18:27:19.496 [DEBUG] [Thread-306872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:27:19.496 [DEBUG] [Thread-306872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:27:19.496 [DEBUG] [Thread-306872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:27:19.496 [DEBUG] [Thread-306872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:27:19.510 [INFO] [Thread-306872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:27:19.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:27:19.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:27:20.332 [DEBUG] [Thread-306872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:27:20.332 [DEBUG] [Thread-306872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:27:20.379 [DEBUG] [Thread-306872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:27:20.379 [DEBUG] [Thread-306872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:27:20.388 [DEBUG] [Thread-306872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:27:20.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:27:20.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:27:20.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:27:20.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:27:20.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:27:20.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:27:20.425 [DEBUG] [Thread-306872] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:27:29.216 [DEBUG] [Thread-306874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:27:44.373 [DEBUG] [Thread-306875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:27:47.313 [DEBUG] [Thread-306876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:27:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:27:50.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:27:50.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:27:51.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:27:51.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:27:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 27, 14), 20.08, 26.86, 0.0, 22.05, 22.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:27:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:27:14
2025-12-24T18:27:51.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:27:51.822 [DEBUG] [Thread-306877] [transport.py] [_log()] starting thread (client mode): 0xf81f05e0
2025-12-24T18:27:51.823 [DEBUG] [Thread-306877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:27:51.832 [DEBUG] [Thread-306877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:27:51.832 [INFO] [Thread-306877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:27:51.836 [DEBUG] [Thread-306877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] client lang: <none>
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] server lang: <none>
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] kex follows: False
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:27:51.837 [DEBUG] [Thread-306877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:27:51.838 [DEBUG] [Thread-306877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:27:51.838 [DEBUG] [Thread-306877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:27:51.838 [DEBUG] [Thread-306877] [transport.py] [_log()] Compression: none
2025-12-24T18:27:51.838 [DEBUG] [Thread-306877] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:27:51.874 [DEBUG] [Thread-306877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:27:51.879 [DEBUG] [Thread-306877] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:27:51.881 [DEBUG] [Thread-306877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:27:51.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:27:51.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:27:51.886 [DEBUG] [Thread-306877] [transport.py] [_log()] userauth is OK
2025-12-24T18:27:51.887 [DEBUG] [Thread-306877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:27:51.887 [DEBUG] [Thread-306877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:27:51.887 [DEBUG] [Thread-306877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:27:51.887 [DEBUG] [Thread-306877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:27:51.914 [INFO] [Thread-306877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:27:51.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:27:52.572 [DEBUG] [Thread-306877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:27:52.572 [DEBUG] [Thread-306877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:27:52.573 [DEBUG] [Thread-306877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:27:52.612 [DEBUG] [Thread-306877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:27:52.612 [DEBUG] [Thread-306877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:27:52.614 [DEBUG] [Thread-306877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:27:52.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:27:52.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:27:52.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:27:52.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:27:52.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:27:52.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:27:52.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:27:52.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:27:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:27:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.685483 -999.00  +22.30  19.14     32   +5.00 1 1 1 1 1   887    0 16.82 -22.53 ----- 19.1 19.1 171.0 22.6 25.6 -25.7 25.7 -25.6 26.8 -24.1 27.1 -25.6
2025-12-24T18:27:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:27:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:27:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.685483
2025-12-24T18:27:52.645 [DEBUG] [Thread-306877] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:27:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:27:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:27:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:27:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:27:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:27:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:27:14', tmtdew=20.08, humidity=26.86, cloud=0.0, wind=22.05, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:27:05.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:27:52.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:27:52.752 [DEBUG] [Thread-306880] [transport.py] [_log()] starting thread (client mode): 0xf57506a0
2025-12-24T18:27:52.752 [DEBUG] [Thread-306880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:27:52.766 [DEBUG] [Thread-306880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:27:52.766 [INFO] [Thread-306880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] client lang: <none>
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] server lang: <none>
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] kex follows: False
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:27:52.773 [DEBUG] [Thread-306880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:27:52.774 [DEBUG] [Thread-306880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:27:52.774 [DEBUG] [Thread-306880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:27:52.774 [DEBUG] [Thread-306880] [transport.py] [_log()] Compression: none
2025-12-24T18:27:52.774 [DEBUG] [Thread-306880] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:27:52.831 [DEBUG] [Thread-306880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:27:52.831 [DEBUG] [Thread-306880] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:27:52.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:27:52.831 [DEBUG] [Thread-306880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:27:52.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:27:52.888 [DEBUG] [Thread-306880] [transport.py] [_log()] userauth is OK
2025-12-24T18:27:52.888 [DEBUG] [Thread-306880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:27:52.888 [DEBUG] [Thread-306880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:27:52.888 [DEBUG] [Thread-306880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:27:52.888 [DEBUG] [Thread-306880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:27:52.905 [INFO] [Thread-306880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:27:52.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:27:52.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:27:53.696 [DEBUG] [Thread-306880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:27:53.696 [DEBUG] [Thread-306880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:27:53.742 [DEBUG] [Thread-306880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:27:53.742 [DEBUG] [Thread-306880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:27:53.751 [DEBUG] [Thread-306880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:27:53.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:27:53.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')
2025-12-24T18:27:53.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:27:53.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:27:53.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:27:53.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:27:53.789 [DEBUG] [Thread-306880] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:27:59.442 [DEBUG] [Thread-306882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:28:14.629 [DEBUG] [Thread-306883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:28:23.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:28:23.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:28:23.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:28:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 27, 47), 20.04, 26.48, 0.0, 26.73, 22.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:28:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:27:47
2025-12-24T18:28:25.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:28:25.437 [DEBUG] [Thread-306884] [transport.py] [_log()] starting thread (client mode): 0xf571b220
2025-12-24T18:28:25.438 [DEBUG] [Thread-306884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:28:25.446 [DEBUG] [Thread-306884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:28:25.446 [INFO] [Thread-306884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:28:25.451 [DEBUG] [Thread-306884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] client lang: <none>
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] server lang: <none>
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] kex follows: False
2025-12-24T18:28:25.452 [DEBUG] [Thread-306884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:28:25.453 [DEBUG] [Thread-306884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:28:25.453 [DEBUG] [Thread-306884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:28:25.453 [DEBUG] [Thread-306884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:28:25.454 [DEBUG] [Thread-306884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:28:25.454 [DEBUG] [Thread-306884] [transport.py] [_log()] Compression: none
2025-12-24T18:28:25.454 [DEBUG] [Thread-306884] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:28:25.491 [DEBUG] [Thread-306884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:28:25.494 [DEBUG] [Thread-306884] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:28:25.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:28:25.496 [DEBUG] [Thread-306884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:28:25.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:28:25.499 [DEBUG] [Thread-306884] [transport.py] [_log()] userauth is OK
2025-12-24T18:28:25.499 [DEBUG] [Thread-306884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:28:25.499 [DEBUG] [Thread-306884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:28:25.499 [DEBUG] [Thread-306884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:28:25.499 [DEBUG] [Thread-306884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:28:25.518 [INFO] [Thread-306884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:28:25.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:28:26.229 [DEBUG] [Thread-306884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:28:26.229 [DEBUG] [Thread-306884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:28:26.230 [DEBUG] [Thread-306884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:28:26.270 [DEBUG] [Thread-306884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:28:26.270 [DEBUG] [Thread-306884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:28:26.274 [DEBUG] [Thread-306884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:28:26.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:28:26.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:28:26.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:28:26.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:28:26.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:28:26.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:28:26.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:28:26.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:28:26.301 [DEBUG] [Thread-306884] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:28:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:28:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.686177 -999.00  +22.30  19.64     32   +5.00 1 1 1 1 1   887    0 17.13 -23.05 ----- 19.6 19.6 162.4 24.5 25.4 -26.5 25.5 -26.2 26.4 -26.1 26.6 -26.6
2025-12-24T18:28:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:28:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:28:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.686177
2025-12-24T18:28:26.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:28:26.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:28:26.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:28:26.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:28:26.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:28:26.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:27:47', tmtdew=20.04, humidity=26.48, cloud=0.0, wind=26.73, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:28:05.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:28:26.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:28:26.425 [DEBUG] [Thread-306887] [transport.py] [_log()] starting thread (client mode): 0xf5750e20
2025-12-24T18:28:26.426 [DEBUG] [Thread-306887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:28:26.440 [DEBUG] [Thread-306887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:28:26.440 [INFO] [Thread-306887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:28:26.448 [DEBUG] [Thread-306887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:28:26.448 [DEBUG] [Thread-306887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:28:26.449 [DEBUG] [Thread-306887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:28:26.449 [DEBUG] [Thread-306887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:28:26.449 [DEBUG] [Thread-306887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:28:26.449 [DEBUG] [Thread-306887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:28:26.449 [DEBUG] [Thread-306887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:28:26.449 [DEBUG] [Thread-306887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:28:26.449 [DEBUG] [Thread-306887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:28:26.449 [DEBUG] [Thread-306887] [transport.py] [_log()] client lang: <none>
2025-12-24T18:28:26.450 [DEBUG] [Thread-306887] [transport.py] [_log()] server lang: <none>
2025-12-24T18:28:26.450 [DEBUG] [Thread-306887] [transport.py] [_log()] kex follows: False
2025-12-24T18:28:26.450 [DEBUG] [Thread-306887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:28:26.450 [DEBUG] [Thread-306887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:28:26.450 [DEBUG] [Thread-306887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:28:26.451 [DEBUG] [Thread-306887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:28:26.451 [DEBUG] [Thread-306887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:28:26.451 [DEBUG] [Thread-306887] [transport.py] [_log()] Compression: none
2025-12-24T18:28:26.451 [DEBUG] [Thread-306887] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:28:26.505 [DEBUG] [Thread-306887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:28:26.506 [DEBUG] [Thread-306887] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:28:26.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:28:26.507 [DEBUG] [Thread-306887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:28:26.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:28:26.564 [DEBUG] [Thread-306887] [transport.py] [_log()] userauth is OK
2025-12-24T18:28:26.565 [DEBUG] [Thread-306887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:28:26.565 [DEBUG] [Thread-306887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:28:26.565 [DEBUG] [Thread-306887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:28:26.565 [DEBUG] [Thread-306887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:28:26.583 [INFO] [Thread-306887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:28:26.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:28:26.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:28:27.452 [DEBUG] [Thread-306887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:28:27.452 [DEBUG] [Thread-306887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:28:27.500 [DEBUG] [Thread-306887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:28:27.500 [DEBUG] [Thread-306887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:28:27.508 [DEBUG] [Thread-306887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:28:27.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:28:27.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')
2025-12-24T18:28:27.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:28:27.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:28:27.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:28:27.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:28:27.543 [DEBUG] [Thread-306887] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:28:29.753 [DEBUG] [Thread-306889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:28:44.976 [DEBUG] [Thread-306890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:28:47.547 [DEBUG] [Thread-306891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:28:51.592 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:28:51.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:28:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:28:57.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:28:57.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
2025-12-24T18:28:58.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 28, 21), 20.0, 26.58, 0.0, 26.8, 22.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:28:58.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:28:21
2025-12-24T18:28:58.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:28:58.880 [DEBUG] [Thread-306892] [transport.py] [_log()] starting thread (client mode): 0xf574f940
2025-12-24T18:28:58.881 [DEBUG] [Thread-306892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:28:58.889 [DEBUG] [Thread-306892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:28:58.889 [INFO] [Thread-306892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:28:58.893 [DEBUG] [Thread-306892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:28:58.893 [DEBUG] [Thread-306892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:28:58.893 [DEBUG] [Thread-306892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:28:58.893 [DEBUG] [Thread-306892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:28:58.893 [DEBUG] [Thread-306892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] client lang: <none>
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] server lang: <none>
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] kex follows: False
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:28:58.894 [DEBUG] [Thread-306892] [transport.py] [_log()] Compression: none
2025-12-24T18:28:58.895 [DEBUG] [Thread-306892] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:28:58.927 [DEBUG] [Thread-306892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:28:58.931 [DEBUG] [Thread-306892] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:28:58.932 [DEBUG] [Thread-306892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:28:58.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:28:58.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:28:58.935 [DEBUG] [Thread-306892] [transport.py] [_log()] userauth is OK
2025-12-24T18:28:58.935 [DEBUG] [Thread-306892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:28:58.935 [DEBUG] [Thread-306892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:28:58.936 [DEBUG] [Thread-306892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:28:58.936 [DEBUG] [Thread-306892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:28:58.966 [INFO] [Thread-306892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:28:58.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:28:59.626 [DEBUG] [Thread-306892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:28:59.626 [DEBUG] [Thread-306892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:28:59.627 [DEBUG] [Thread-306892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:28:59.667 [DEBUG] [Thread-306892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:28:59.667 [DEBUG] [Thread-306892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:28:59.670 [DEBUG] [Thread-306892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:28:59.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:28:59.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:28:59.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:28:59.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:28:59.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:28:59.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:28:59.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:28:59.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:28:59.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:28:59.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.686525 -999.00  +22.30  20.76     32   +5.00 1 1 1 1 1   887    0 16.63 -19.87 ----- 20.8 20.8 156.2 25.0 25.3 -26.3 25.3 -26.4 26.1 -25.5 26.5 -26.0
2025-12-24T18:28:59.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:28:59.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:28:59.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.686525
2025-12-24T18:28:59.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:28:59.707 [DEBUG] [Thread-306892] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:28:59.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:28:21', tmtdew=20.0, humidity=26.58, cloud=0.0, wind=26.8, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:28:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:28:59.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:29:00.070 [DEBUG] [Thread-306895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:29:15.229 [DEBUG] [Thread-306896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:29:30.356 [DEBUG] [Thread-306897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:29:45.483 [DEBUG] [Thread-306898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:29:47.795 [DEBUG] [Thread-306899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:29:51.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:29:51.737 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:30:00.600 [DEBUG] [Thread-306900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:30:15.716 [DEBUG] [Thread-306901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:30:30.843 [DEBUG] [Thread-306902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:30:45.981 [DEBUG] [Thread-306903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:30:48.105 [DEBUG] [Thread-306904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:30:51.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:30:51.886 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:31:01.121 [DEBUG] [Thread-306905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:31:11.606 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T18:31:16.295 [DEBUG] [Thread-306906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:31:31.394 [DEBUG] [Thread-306907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:31:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:31:41.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:31:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:31:42.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 31, 9), 20.1, 26.91, 0.0, 27.65, 22.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:31:42.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:31:09
2025-12-24T18:31:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:31:43.538 [DEBUG] [Thread-306908] [transport.py] [_log()] starting thread (client mode): 0xf574dd20
2025-12-24T18:31:43.539 [DEBUG] [Thread-306908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:31:43.542 [DEBUG] [Thread-306908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:31:43.542 [INFO] [Thread-306908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:31:43.548 [DEBUG] [Thread-306908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] client lang: <none>
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] server lang: <none>
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] kex follows: False
2025-12-24T18:31:43.549 [DEBUG] [Thread-306908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:31:43.550 [DEBUG] [Thread-306908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:31:43.550 [DEBUG] [Thread-306908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:31:43.550 [DEBUG] [Thread-306908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:31:43.551 [DEBUG] [Thread-306908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:31:43.551 [DEBUG] [Thread-306908] [transport.py] [_log()] Compression: none
2025-12-24T18:31:43.551 [DEBUG] [Thread-306908] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:31:43.588 [DEBUG] [Thread-306908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:31:43.593 [DEBUG] [Thread-306908] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:31:43.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:31:43.596 [DEBUG] [Thread-306908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:31:43.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:31:43.599 [DEBUG] [Thread-306908] [transport.py] [_log()] userauth is OK
2025-12-24T18:31:43.599 [DEBUG] [Thread-306908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:31:43.599 [DEBUG] [Thread-306908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:31:43.599 [DEBUG] [Thread-306908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:31:43.599 [DEBUG] [Thread-306908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:31:43.618 [INFO] [Thread-306908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:31:43.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:31:44.233 [DEBUG] [Thread-306908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:31:44.233 [DEBUG] [Thread-306908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:31:44.233 [DEBUG] [Thread-306908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:31:44.275 [DEBUG] [Thread-306908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:31:44.275 [DEBUG] [Thread-306908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:31:44.277 [DEBUG] [Thread-306908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:31:44.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:31:44.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:31:44.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:31:44.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:31:44.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:31:44.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:31:44.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:31:44.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.688261 -999.00  +22.10  21.07     32   +4.90 1 1 1 1 1   887    0 16.61 -23.29 ----- 18.4 21.1 165.8 32.5 25.0 -26.0 25.2 -25.0 26.0 -24.0 26.2 -25.6
2025-12-24T18:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.688261
2025-12-24T18:31:44.308 [DEBUG] [Thread-306908] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:31:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:31:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:31:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:31:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:31:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:31:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:31:09', tmtdew=20.1, humidity=26.91, cloud=0.0, wind=27.65, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:31:05.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:31:44.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:31:44.420 [DEBUG] [Thread-306911] [transport.py] [_log()] starting thread (client mode): 0xf57521a0
2025-12-24T18:31:44.420 [DEBUG] [Thread-306911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:31:44.435 [DEBUG] [Thread-306911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:31:44.435 [INFO] [Thread-306911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] client lang: <none>
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] server lang: <none>
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] kex follows: False
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] Compression: none
2025-12-24T18:31:44.442 [DEBUG] [Thread-306911] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:31:44.499 [DEBUG] [Thread-306911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:31:44.499 [DEBUG] [Thread-306911] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:31:44.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:31:44.500 [DEBUG] [Thread-306911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:31:44.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:31:44.556 [DEBUG] [Thread-306911] [transport.py] [_log()] userauth is OK
2025-12-24T18:31:44.556 [DEBUG] [Thread-306911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:31:44.556 [DEBUG] [Thread-306911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:31:44.556 [DEBUG] [Thread-306911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:31:44.556 [DEBUG] [Thread-306911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:31:44.573 [INFO] [Thread-306911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:31:44.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:31:44.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:31:45.404 [DEBUG] [Thread-306911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:31:45.404 [DEBUG] [Thread-306911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:31:45.452 [DEBUG] [Thread-306911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:31:45.452 [DEBUG] [Thread-306911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:31:45.461 [DEBUG] [Thread-306911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:31:45.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:31:45.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:31:45.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:31:45.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:31:45.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:31:45.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:31:45.495 [DEBUG] [Thread-306911] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:31:46.457 [DEBUG] [Thread-306913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:31:48.321 [DEBUG] [Thread-306914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:31:52.028 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:31:52.029 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:32:01.601 [DEBUG] [Thread-306915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:32:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:32:15.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:32:15.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
2025-12-24T18:32:16.691 [DEBUG] [Thread-306916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:32:16.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 31, 42), 20.11, 26.39, 0.0, 26.4, 22.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:32:17.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:31:42
2025-12-24T18:32:17.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:32:17.345 [DEBUG] [Thread-306917] [transport.py] [_log()] starting thread (client mode): 0xf03bf580
2025-12-24T18:32:17.346 [DEBUG] [Thread-306917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:32:17.360 [DEBUG] [Thread-306917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:32:17.360 [INFO] [Thread-306917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] client lang: <none>
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] server lang: <none>
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] kex follows: False
2025-12-24T18:32:17.364 [DEBUG] [Thread-306917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:32:17.365 [DEBUG] [Thread-306917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:32:17.365 [DEBUG] [Thread-306917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:32:17.365 [DEBUG] [Thread-306917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:32:17.365 [DEBUG] [Thread-306917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:32:17.365 [DEBUG] [Thread-306917] [transport.py] [_log()] Compression: none
2025-12-24T18:32:17.365 [DEBUG] [Thread-306917] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:32:17.399 [DEBUG] [Thread-306917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:32:17.403 [DEBUG] [Thread-306917] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:32:17.404 [DEBUG] [Thread-306917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:32:17.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:32:17.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:32:17.408 [DEBUG] [Thread-306917] [transport.py] [_log()] userauth is OK
2025-12-24T18:32:17.408 [DEBUG] [Thread-306917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:32:17.408 [DEBUG] [Thread-306917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:32:17.408 [DEBUG] [Thread-306917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:32:17.409 [DEBUG] [Thread-306917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:32:17.442 [INFO] [Thread-306917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:32:17.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:32:18.100 [DEBUG] [Thread-306917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:32:18.100 [DEBUG] [Thread-306917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:32:18.100 [DEBUG] [Thread-306917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:32:18.141 [DEBUG] [Thread-306917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:32:18.141 [DEBUG] [Thread-306917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:32:18.143 [DEBUG] [Thread-306917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:32:18.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:32:18.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:32:18.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:32:18.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:32:18.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:32:18.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:32:18.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:32:18.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:32:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:32:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.688608 -999.00  +22.10  20.01     32   +4.90 1 1 1 1 1   887    0 16.41 -24.83 ----- 14.0 20.0 179.2 24.1 25.0 -26.0 25.1 -27.2 26.1 -23.5 26.2 -25.3
2025-12-24T18:32:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:32:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:32:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.688608
2025-12-24T18:32:18.170 [DEBUG] [Thread-306917] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:32:18.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:32:18.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:32:18.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:32:18.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:32:18.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:32:18.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:31:42', tmtdew=20.11, humidity=26.39, cloud=0.0, wind=26.4, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:31:35.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:32:18.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:32:18.270 [DEBUG] [Thread-306920] [transport.py] [_log()] starting thread (client mode): 0xf5718d90
2025-12-24T18:32:18.270 [DEBUG] [Thread-306920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:32:18.285 [DEBUG] [Thread-306920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:32:18.285 [INFO] [Thread-306920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] client lang: <none>
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] server lang: <none>
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] kex follows: False
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] Compression: none
2025-12-24T18:32:18.293 [DEBUG] [Thread-306920] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:32:18.351 [DEBUG] [Thread-306920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:32:18.351 [DEBUG] [Thread-306920] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:32:18.351 [DEBUG] [Thread-306920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:32:18.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:32:18.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:32:18.408 [DEBUG] [Thread-306920] [transport.py] [_log()] userauth is OK
2025-12-24T18:32:18.408 [DEBUG] [Thread-306920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:32:18.408 [DEBUG] [Thread-306920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:32:18.408 [DEBUG] [Thread-306920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:32:18.408 [DEBUG] [Thread-306920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:32:18.422 [INFO] [Thread-306920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:32:18.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:32:18.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:32:19.235 [DEBUG] [Thread-306920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:32:19.235 [DEBUG] [Thread-306920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:32:19.283 [DEBUG] [Thread-306920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:32:19.283 [DEBUG] [Thread-306920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:32:19.291 [DEBUG] [Thread-306920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:32:19.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:32:19.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:32:19.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:32:19.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:32:19.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:32:19.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:32:19.324 [DEBUG] [Thread-306920] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:32:31.807 [DEBUG] [Thread-306922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:32:47.010 [DEBUG] [Thread-306923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:32:48.624 [DEBUG] [Thread-306924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:32:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:32:49.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:32:49.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:32:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 32, 16), 20.05, 26.48, 0.0, 20.36, 22.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:32:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:32:16
2025-12-24T18:32:51.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:32:51.226 [DEBUG] [Thread-306925] [transport.py] [_log()] starting thread (client mode): 0xf574f340
2025-12-24T18:32:51.227 [DEBUG] [Thread-306925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:32:51.238 [DEBUG] [Thread-306925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:32:51.238 [INFO] [Thread-306925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] client lang: <none>
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] server lang: <none>
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] kex follows: False
2025-12-24T18:32:51.242 [DEBUG] [Thread-306925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:32:51.243 [DEBUG] [Thread-306925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:32:51.243 [DEBUG] [Thread-306925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:32:51.243 [DEBUG] [Thread-306925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:32:51.243 [DEBUG] [Thread-306925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:32:51.243 [DEBUG] [Thread-306925] [transport.py] [_log()] Compression: none
2025-12-24T18:32:51.243 [DEBUG] [Thread-306925] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:32:51.266 [DEBUG] [Thread-306925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:32:51.267 [DEBUG] [Thread-306925] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:32:51.269 [DEBUG] [Thread-306925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:32:51.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:32:51.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:32:51.272 [DEBUG] [Thread-306925] [transport.py] [_log()] userauth is OK
2025-12-24T18:32:51.272 [DEBUG] [Thread-306925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:32:51.272 [DEBUG] [Thread-306925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:32:51.272 [DEBUG] [Thread-306925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:32:51.272 [DEBUG] [Thread-306925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:32:51.290 [INFO] [Thread-306925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:32:51.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:32:52.093 [DEBUG] [Thread-306925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:32:52.093 [DEBUG] [Thread-306925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:32:52.093 [DEBUG] [Thread-306925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:32:52.133 [DEBUG] [Thread-306925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:32:52.133 [DEBUG] [Thread-306925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:32:52.135 [DEBUG] [Thread-306925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:32:52.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:32:52.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:32:52.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:32:52.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:32:52.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:32:52.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:32:52.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:32:52.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:32:52.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:32:52.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.688955 -999.00  +22.10  16.15     32   +4.90 1 1 1 1 1   887    0 16.44 -24.53 ----- 9.9 16.1 170.6 19.5 25.0 -25.4 25.1 -24.9 26.1 -23.8 26.2 -25.0
2025-12-24T18:32:52.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:32:52.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:32:52.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.688955
2025-12-24T18:32:52.157 [DEBUG] [Thread-306925] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:32:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:32:52.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:32:52.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:32:52.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:32:52.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:32:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:32:16', tmtdew=20.05, humidity=26.48, cloud=0.0, wind=20.36, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:32:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:32:52.171 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:32:52.172 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:32:52.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:32:52.256 [DEBUG] [Thread-306928] [transport.py] [_log()] starting thread (client mode): 0xf81c22c0
2025-12-24T18:32:52.256 [DEBUG] [Thread-306928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:32:52.271 [DEBUG] [Thread-306928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:32:52.271 [INFO] [Thread-306928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:32:52.278 [DEBUG] [Thread-306928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] client lang: <none>
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] server lang: <none>
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] kex follows: False
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] Compression: none
2025-12-24T18:32:52.279 [DEBUG] [Thread-306928] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:32:52.335 [DEBUG] [Thread-306928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:32:52.335 [DEBUG] [Thread-306928] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:32:52.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:32:52.335 [DEBUG] [Thread-306928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:32:52.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:32:52.392 [DEBUG] [Thread-306928] [transport.py] [_log()] userauth is OK
2025-12-24T18:32:52.392 [DEBUG] [Thread-306928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:32:52.392 [DEBUG] [Thread-306928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:32:52.392 [DEBUG] [Thread-306928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:32:52.392 [DEBUG] [Thread-306928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:32:52.410 [INFO] [Thread-306928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:32:52.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:32:52.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:32:53.283 [DEBUG] [Thread-306928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:32:53.284 [DEBUG] [Thread-306928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:32:53.330 [DEBUG] [Thread-306928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:32:53.331 [DEBUG] [Thread-306928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:32:53.339 [DEBUG] [Thread-306928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:32:53.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:32:53.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:32:53.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:32:53.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:32:53.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:32:53.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:32:53.373 [DEBUG] [Thread-306928] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:33:02.142 [DEBUG] [Thread-306930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:33:17.327 [DEBUG] [Thread-306931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:33:23.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:33:23.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:33:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:33:25.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 32, 49), 19.8, 27.08, 0.0, 20.98, 22.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:33:25.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:32:49
2025-12-24T18:33:25.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:33:25.769 [DEBUG] [Thread-306932] [transport.py] [_log()] starting thread (client mode): 0xf03bf9d0
2025-12-24T18:33:25.770 [DEBUG] [Thread-306932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:33:25.770 [DEBUG] [Thread-306932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:33:25.771 [INFO] [Thread-306932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:33:25.774 [DEBUG] [Thread-306932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:33:25.774 [DEBUG] [Thread-306932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:33:25.774 [DEBUG] [Thread-306932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:33:25.774 [DEBUG] [Thread-306932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:33:25.774 [DEBUG] [Thread-306932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] client lang: <none>
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] server lang: <none>
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] kex follows: False
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:33:25.775 [DEBUG] [Thread-306932] [transport.py] [_log()] Compression: none
2025-12-24T18:33:25.776 [DEBUG] [Thread-306932] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:33:25.803 [DEBUG] [Thread-306932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:33:25.807 [DEBUG] [Thread-306932] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:33:25.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:33:25.810 [DEBUG] [Thread-306932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:33:25.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:33:25.812 [DEBUG] [Thread-306932] [transport.py] [_log()] userauth is OK
2025-12-24T18:33:25.812 [DEBUG] [Thread-306932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:33:25.812 [DEBUG] [Thread-306932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:33:25.812 [DEBUG] [Thread-306932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:33:25.812 [DEBUG] [Thread-306932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:33:25.833 [INFO] [Thread-306932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:33:25.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:33:26.434 [DEBUG] [Thread-306932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:33:26.434 [DEBUG] [Thread-306932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:33:26.435 [DEBUG] [Thread-306932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:33:26.475 [DEBUG] [Thread-306932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:33:26.475 [DEBUG] [Thread-306932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:33:26.479 [DEBUG] [Thread-306932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:33:26.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:33:26.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:33:26.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:33:26.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:33:26.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:33:26.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:33:26.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:33:26.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:33:26.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:33:26.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.689302 -999.00  +22.20   8.83     32   +4.90 1 1 1 1 1   887    0 16.79 -22.66 ----- 9.5 8.8 164.2 16.1 25.1 -25.3 25.3 -25.0 26.3 -23.2 26.4 -24.3
2025-12-24T18:33:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:33:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:33:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.689302
2025-12-24T18:33:26.514 [DEBUG] [Thread-306932] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:33:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:33:26.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:33:26.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:33:26.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:33:26.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:33:26.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:32:49', tmtdew=19.8, humidity=27.08, cloud=0.0, wind=20.98, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:32:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:33:26.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:33:26.619 [DEBUG] [Thread-306935] [transport.py] [_log()] starting thread (client mode): 0xf03bf100
2025-12-24T18:33:26.619 [DEBUG] [Thread-306935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:33:26.639 [DEBUG] [Thread-306935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:33:26.639 [INFO] [Thread-306935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] client lang: <none>
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] server lang: <none>
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] kex follows: False
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:33:26.650 [DEBUG] [Thread-306935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:33:26.651 [DEBUG] [Thread-306935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:33:26.651 [DEBUG] [Thread-306935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:33:26.651 [DEBUG] [Thread-306935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:33:26.651 [DEBUG] [Thread-306935] [transport.py] [_log()] Compression: none
2025-12-24T18:33:26.651 [DEBUG] [Thread-306935] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:33:26.707 [DEBUG] [Thread-306935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:33:26.707 [DEBUG] [Thread-306935] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:33:26.707 [DEBUG] [Thread-306935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:33:26.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:33:26.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:33:26.764 [DEBUG] [Thread-306935] [transport.py] [_log()] userauth is OK
2025-12-24T18:33:26.764 [DEBUG] [Thread-306935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:33:26.764 [DEBUG] [Thread-306935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:33:26.764 [DEBUG] [Thread-306935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:33:26.764 [DEBUG] [Thread-306935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:33:26.778 [INFO] [Thread-306935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:33:26.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:33:26.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:33:27.607 [DEBUG] [Thread-306935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:33:27.607 [DEBUG] [Thread-306935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:33:27.653 [DEBUG] [Thread-306935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:33:27.653 [DEBUG] [Thread-306935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:33:27.661 [DEBUG] [Thread-306935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:33:27.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:33:27.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:33:27.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:33:27.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:33:27.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:33:27.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:33:27.694 [DEBUG] [Thread-306935] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:33:32.452 [DEBUG] [Thread-306937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:33:47.629 [DEBUG] [Thread-306938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:33:48.835 [DEBUG] [Thread-306939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:33:52.321 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:33:52.322 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:33:57.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:33:57.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:33:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:33:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 33, 22), 19.83, 27.03, 0.0, 20.1, 22.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:33:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:33:22
2025-12-24T18:33:59.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:33:59.295 [DEBUG] [Thread-306940] [transport.py] [_log()] starting thread (client mode): 0xf03bf820
2025-12-24T18:33:59.296 [DEBUG] [Thread-306940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:33:59.300 [DEBUG] [Thread-306940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:33:59.300 [INFO] [Thread-306940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] client lang: <none>
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] server lang: <none>
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] kex follows: False
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:33:59.305 [DEBUG] [Thread-306940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:33:59.306 [DEBUG] [Thread-306940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:33:59.306 [DEBUG] [Thread-306940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:33:59.306 [DEBUG] [Thread-306940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:33:59.306 [DEBUG] [Thread-306940] [transport.py] [_log()] Compression: none
2025-12-24T18:33:59.306 [DEBUG] [Thread-306940] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:33:59.338 [DEBUG] [Thread-306940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:33:59.341 [DEBUG] [Thread-306940] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:33:59.342 [DEBUG] [Thread-306940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:33:59.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:33:59.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:33:59.345 [DEBUG] [Thread-306940] [transport.py] [_log()] userauth is OK
2025-12-24T18:33:59.345 [DEBUG] [Thread-306940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:33:59.345 [DEBUG] [Thread-306940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:33:59.345 [DEBUG] [Thread-306940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:33:59.345 [DEBUG] [Thread-306940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:33:59.357 [INFO] [Thread-306940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:33:59.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:33:59.912 [DEBUG] [Thread-306940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:33:59.912 [DEBUG] [Thread-306940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:33:59.913 [DEBUG] [Thread-306940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:33:59.953 [DEBUG] [Thread-306940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:33:59.953 [DEBUG] [Thread-306940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:33:59.955 [DEBUG] [Thread-306940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:33:59.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:33:59.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:33:59.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:33:59.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:33:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:33:59.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:33:59.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:33:59.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:33:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:33:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.689997 -999.00  +22.30  12.66     32   +4.90 1 1 1 1 1   887    0 16.59 -20.79 ----- 14.0 12.7 162.4 15.2 25.1 -25.7 25.3 -25.6 26.2 -23.9 26.4 -25.4
2025-12-24T18:33:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:33:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:33:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.689997
2025-12-24T18:33:59.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:33:59.990 [DEBUG] [Thread-306940] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:33:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:33:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:33:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:33:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:33:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:33:22', tmtdew=19.83, humidity=27.03, cloud=0.0, wind=20.1, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:33:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:34:00.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:34:00.086 [DEBUG] [Thread-306943] [transport.py] [_log()] starting thread (client mode): 0xf03bec20
2025-12-24T18:34:00.087 [DEBUG] [Thread-306943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:34:00.101 [DEBUG] [Thread-306943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:34:00.101 [INFO] [Thread-306943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] client lang: <none>
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] server lang: <none>
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] kex follows: False
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] Compression: none
2025-12-24T18:34:00.109 [DEBUG] [Thread-306943] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:34:00.166 [DEBUG] [Thread-306943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:34:00.166 [DEBUG] [Thread-306943] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:34:00.167 [DEBUG] [Thread-306943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:34:00.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:34:00.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:34:00.224 [DEBUG] [Thread-306943] [transport.py] [_log()] userauth is OK
2025-12-24T18:34:00.224 [DEBUG] [Thread-306943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:34:00.224 [DEBUG] [Thread-306943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:34:00.224 [DEBUG] [Thread-306943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:34:00.224 [DEBUG] [Thread-306943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:34:00.239 [INFO] [Thread-306943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:34:00.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:34:00.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:34:01.099 [DEBUG] [Thread-306943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:34:01.100 [DEBUG] [Thread-306943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:34:01.147 [DEBUG] [Thread-306943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:34:01.147 [DEBUG] [Thread-306943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:34:01.155 [DEBUG] [Thread-306943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:34:01.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:34:01.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:34:01.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:34:01.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:34:01.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:34:01.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:34:01.188 [DEBUG] [Thread-306943] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:34:02.759 [DEBUG] [Thread-306945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:34:18.170 [DEBUG] [Thread-306946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:34:31.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:34:31.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:34:31.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:34:32.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 33, 56), 20.02, 26.88, 0.0, 17.86, 22.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:34:32.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:33:56
2025-12-24T18:34:32.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:34:32.772 [DEBUG] [Thread-306947] [transport.py] [_log()] starting thread (client mode): 0xf571a7a0
2025-12-24T18:34:32.773 [DEBUG] [Thread-306947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:34:32.779 [DEBUG] [Thread-306947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:34:32.779 [INFO] [Thread-306947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:34:32.786 [DEBUG] [Thread-306947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:34:32.787 [DEBUG] [Thread-306947] [transport.py] [_log()] client lang: <none>
2025-12-24T18:34:32.787 [DEBUG] [Thread-306947] [transport.py] [_log()] server lang: <none>
2025-12-24T18:34:32.787 [DEBUG] [Thread-306947] [transport.py] [_log()] kex follows: False
2025-12-24T18:34:32.787 [DEBUG] [Thread-306947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:34:32.788 [DEBUG] [Thread-306947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:34:32.788 [DEBUG] [Thread-306947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:34:32.788 [DEBUG] [Thread-306947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:34:32.789 [DEBUG] [Thread-306947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:34:32.789 [DEBUG] [Thread-306947] [transport.py] [_log()] Compression: none
2025-12-24T18:34:32.789 [DEBUG] [Thread-306947] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:34:32.823 [DEBUG] [Thread-306947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:34:32.828 [DEBUG] [Thread-306947] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:34:32.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:34:32.832 [DEBUG] [Thread-306947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:34:32.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:34:32.834 [DEBUG] [Thread-306947] [transport.py] [_log()] userauth is OK
2025-12-24T18:34:32.834 [DEBUG] [Thread-306947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:34:32.835 [DEBUG] [Thread-306947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:34:32.835 [DEBUG] [Thread-306947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:34:32.835 [DEBUG] [Thread-306947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:34:32.868 [INFO] [Thread-306947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:34:32.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:34:33.361 [DEBUG] [Thread-306949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:34:33.511 [DEBUG] [Thread-306947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:34:33.511 [DEBUG] [Thread-306947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:34:33.511 [DEBUG] [Thread-306947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:34:33.553 [DEBUG] [Thread-306947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:34:33.553 [DEBUG] [Thread-306947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:34:33.555 [DEBUG] [Thread-306947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:34:33.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:34:33.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:34:33.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:34:33.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:34:33.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:34:33.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:34:33.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:34:33.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:34:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:34:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.690344 -999.00  +22.30  14.55     32   +4.90 1 1 1 1 1   887    0 16.82 -20.46 ----- 13.8 14.6 165.1 20.3 25.1 -25.4 25.4 -25.4 26.2 -23.7 26.4 -24.9
2025-12-24T18:34:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:34:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:34:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.690344
2025-12-24T18:34:33.582 [DEBUG] [Thread-306947] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:34:33.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:34:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:34:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:34:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:34:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:34:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:33:56', tmtdew=20.02, humidity=26.88, cloud=0.0, wind=17.86, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:34:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:34:33.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:34:33.693 [DEBUG] [Thread-306951] [transport.py] [_log()] starting thread (client mode): 0xf571a680
2025-12-24T18:34:33.693 [DEBUG] [Thread-306951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:34:33.707 [DEBUG] [Thread-306951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:34:33.707 [INFO] [Thread-306951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] client lang: <none>
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] server lang: <none>
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] kex follows: False
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] Compression: none
2025-12-24T18:34:33.715 [DEBUG] [Thread-306951] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:34:33.770 [DEBUG] [Thread-306951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:34:33.771 [DEBUG] [Thread-306951] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:34:33.771 [DEBUG] [Thread-306951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:34:33.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:34:33.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:34:33.828 [DEBUG] [Thread-306951] [transport.py] [_log()] userauth is OK
2025-12-24T18:34:33.828 [DEBUG] [Thread-306951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:34:33.828 [DEBUG] [Thread-306951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:34:33.828 [DEBUG] [Thread-306951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:34:33.828 [DEBUG] [Thread-306951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:34:33.841 [INFO] [Thread-306951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:34:33.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:34:33.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:34:34.647 [DEBUG] [Thread-306951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:34:34.648 [DEBUG] [Thread-306951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:34:34.695 [DEBUG] [Thread-306951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:34:34.695 [DEBUG] [Thread-306951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:34:34.704 [DEBUG] [Thread-306951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:34:34.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:34:34.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:34:34.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:34:34.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:34:34.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:34:34.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:34:34.741 [DEBUG] [Thread-306951] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:34:48.483 [DEBUG] [Thread-306953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:34:49.051 [DEBUG] [Thread-306954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:34:52.464 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:34:52.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:35:03.708 [DEBUG] [Thread-306955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:35:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:35:04.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:35:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:35:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 34, 30), 20.07, 26.79, 0.0, 20.7, 22.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:35:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:34:30
2025-12-24T18:35:06.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:35:06.392 [DEBUG] [Thread-306956] [transport.py] [_log()] starting thread (client mode): 0xf03bdfc0
2025-12-24T18:35:06.393 [DEBUG] [Thread-306956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:35:06.405 [DEBUG] [Thread-306956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:35:06.405 [INFO] [Thread-306956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] client lang: <none>
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] server lang: <none>
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] kex follows: False
2025-12-24T18:35:06.410 [DEBUG] [Thread-306956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:35:06.411 [DEBUG] [Thread-306956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:35:06.411 [DEBUG] [Thread-306956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:35:06.411 [DEBUG] [Thread-306956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:35:06.411 [DEBUG] [Thread-306956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:35:06.411 [DEBUG] [Thread-306956] [transport.py] [_log()] Compression: none
2025-12-24T18:35:06.411 [DEBUG] [Thread-306956] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:35:06.442 [DEBUG] [Thread-306956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:35:06.446 [DEBUG] [Thread-306956] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:35:06.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:35:06.448 [DEBUG] [Thread-306956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:35:06.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:35:06.451 [DEBUG] [Thread-306956] [transport.py] [_log()] userauth is OK
2025-12-24T18:35:06.451 [DEBUG] [Thread-306956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:35:06.451 [DEBUG] [Thread-306956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:35:06.451 [DEBUG] [Thread-306956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:35:06.451 [DEBUG] [Thread-306956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:35:06.469 [INFO] [Thread-306956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:35:06.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:35:07.155 [DEBUG] [Thread-306956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:35:07.155 [DEBUG] [Thread-306956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:35:07.156 [DEBUG] [Thread-306956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:35:07.196 [DEBUG] [Thread-306956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:35:07.196 [DEBUG] [Thread-306956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:35:07.198 [DEBUG] [Thread-306956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:35:07.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:35:07.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:35:07.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:35:07.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:35:07.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:35:07.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:35:07.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:35:07.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:35:07.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:35:07.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.690691 -999.00  +22.40  10.17     32   +4.90 1 1 1 1 1   887    0 16.88 -17.48 ----- 16.1 10.2 160.6 21.5 25.1 -25.5 25.4 -25.0 26.3 -23.4 26.4 -25.4
2025-12-24T18:35:07.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:35:07.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:35:07.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.690691
2025-12-24T18:35:07.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:35:07.238 [DEBUG] [Thread-306956] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:35:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:35:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:35:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:35:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:35:07.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:34:30', tmtdew=20.07, humidity=26.79, cloud=0.0, wind=20.7, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:34:35.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:35:07.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:35:07.327 [DEBUG] [Thread-306959] [transport.py] [_log()] starting thread (client mode): 0xf81f1090
2025-12-24T18:35:07.327 [DEBUG] [Thread-306959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:35:07.341 [DEBUG] [Thread-306959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:35:07.341 [INFO] [Thread-306959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] client lang: <none>
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] server lang: <none>
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] kex follows: False
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] Compression: none
2025-12-24T18:35:07.349 [DEBUG] [Thread-306959] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:35:07.407 [DEBUG] [Thread-306959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:35:07.407 [DEBUG] [Thread-306959] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:35:07.407 [DEBUG] [Thread-306959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:35:07.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:35:07.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:35:07.464 [DEBUG] [Thread-306959] [transport.py] [_log()] userauth is OK
2025-12-24T18:35:07.464 [DEBUG] [Thread-306959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:35:07.464 [DEBUG] [Thread-306959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:35:07.464 [DEBUG] [Thread-306959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:35:07.464 [DEBUG] [Thread-306959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:35:07.480 [INFO] [Thread-306959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:35:07.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:35:07.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:35:08.326 [DEBUG] [Thread-306959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:35:08.327 [DEBUG] [Thread-306959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:35:08.365 [DEBUG] [Thread-306959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:35:08.366 [DEBUG] [Thread-306959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:35:08.375 [DEBUG] [Thread-306959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:35:08.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:35:08.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:35:08.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:35:08.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:35:08.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:35:08.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:35:08.413 [DEBUG] [Thread-306959] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:35:18.794 [DEBUG] [Thread-306961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:35:34.010 [DEBUG] [Thread-306962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:35:38.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:35:38.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:35:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:35:39.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 35, 3), 20.06, 26.83, 0.0, 18.12, 22.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:35:39.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:35:03
2025-12-24T18:35:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:35:39.779 [DEBUG] [Thread-306963] [transport.py] [_log()] starting thread (client mode): 0xf571a7a0
2025-12-24T18:35:39.779 [DEBUG] [Thread-306963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:35:39.792 [DEBUG] [Thread-306963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:35:39.792 [INFO] [Thread-306963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:35:39.796 [DEBUG] [Thread-306963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:35:39.796 [DEBUG] [Thread-306963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] client lang: <none>
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] server lang: <none>
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] kex follows: False
2025-12-24T18:35:39.797 [DEBUG] [Thread-306963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:35:39.798 [DEBUG] [Thread-306963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:35:39.798 [DEBUG] [Thread-306963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:35:39.798 [DEBUG] [Thread-306963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:35:39.798 [DEBUG] [Thread-306963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:35:39.798 [DEBUG] [Thread-306963] [transport.py] [_log()] Compression: none
2025-12-24T18:35:39.798 [DEBUG] [Thread-306963] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:35:39.833 [DEBUG] [Thread-306963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:35:39.837 [DEBUG] [Thread-306963] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:35:39.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:35:39.839 [DEBUG] [Thread-306963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:35:39.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:35:39.842 [DEBUG] [Thread-306963] [transport.py] [_log()] userauth is OK
2025-12-24T18:35:39.842 [DEBUG] [Thread-306963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:35:39.843 [DEBUG] [Thread-306963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:35:39.843 [DEBUG] [Thread-306963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:35:39.843 [DEBUG] [Thread-306963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:35:39.861 [INFO] [Thread-306963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:35:39.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:35:40.532 [DEBUG] [Thread-306963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:35:40.533 [DEBUG] [Thread-306963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:35:40.534 [DEBUG] [Thread-306963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:35:40.574 [DEBUG] [Thread-306963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:35:40.574 [DEBUG] [Thread-306963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:35:40.578 [DEBUG] [Thread-306963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:35:40.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:35:40.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:35:40.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:35:40.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:35:40.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:35:40.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:35:40.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:35:40.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:35:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:35:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.691038 -999.00  +22.40  13.56     32   +5.00 1 1 1 1 1   887    0 16.28 -16.85 ----- 13.4 13.6 145.4 26.1 25.1 -25.7 25.4 -25.3 26.4 -23.8 26.4 -25.2
2025-12-24T18:35:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:35:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:35:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.691038
2025-12-24T18:35:40.614 [DEBUG] [Thread-306963] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:35:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:35:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:35:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:35:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:35:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:35:40.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:35:03', tmtdew=20.06, humidity=26.83, cloud=0.0, wind=18.12, temperature=22.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:35:05.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:35:40.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:35:40.744 [DEBUG] [Thread-306966] [transport.py] [_log()] starting thread (client mode): 0xf571bac0
2025-12-24T18:35:40.744 [DEBUG] [Thread-306966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:35:40.759 [DEBUG] [Thread-306966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:35:40.759 [INFO] [Thread-306966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:35:40.767 [DEBUG] [Thread-306966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:35:40.767 [DEBUG] [Thread-306966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:35:40.767 [DEBUG] [Thread-306966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:35:40.767 [DEBUG] [Thread-306966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] client lang: <none>
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] server lang: <none>
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] kex follows: False
2025-12-24T18:35:40.768 [DEBUG] [Thread-306966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:35:40.769 [DEBUG] [Thread-306966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:35:40.769 [DEBUG] [Thread-306966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:35:40.769 [DEBUG] [Thread-306966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:35:40.769 [DEBUG] [Thread-306966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:35:40.770 [DEBUG] [Thread-306966] [transport.py] [_log()] Compression: none
2025-12-24T18:35:40.770 [DEBUG] [Thread-306966] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:35:40.825 [DEBUG] [Thread-306966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:35:40.827 [DEBUG] [Thread-306966] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:35:40.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:35:40.828 [DEBUG] [Thread-306966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:35:40.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:35:40.885 [DEBUG] [Thread-306966] [transport.py] [_log()] userauth is OK
2025-12-24T18:35:40.885 [DEBUG] [Thread-306966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:35:40.886 [DEBUG] [Thread-306966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:35:40.886 [DEBUG] [Thread-306966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:35:40.886 [DEBUG] [Thread-306966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:35:40.904 [INFO] [Thread-306966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:35:40.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:35:40.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:35:41.701 [DEBUG] [Thread-306966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:35:41.701 [DEBUG] [Thread-306966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:35:41.739 [DEBUG] [Thread-306966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:35:41.739 [DEBUG] [Thread-306966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:35:41.748 [DEBUG] [Thread-306966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:35:41.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:35:41.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:35:41.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
2025-12-24T18:35:41.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:35:41.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:35:41.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:35:41.782 [DEBUG] [Thread-306966] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:35:49.109 [DEBUG] [Thread-306968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:35:49.291 [DEBUG] [Thread-306969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:35:52.609 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:35:52.610 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:36:04.270 [DEBUG] [Thread-306970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:36:11.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:36:11.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:36:11.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:36:12.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 35, 37), 20.24, 26.19, 0.0, 26.01, 22.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:36:12.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:35:37
2025-12-24T18:36:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:36:13.297 [DEBUG] [Thread-306971] [transport.py] [_log()] starting thread (client mode): 0xf03bc340
2025-12-24T18:36:13.298 [DEBUG] [Thread-306971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:36:13.298 [DEBUG] [Thread-306971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:36:13.298 [INFO] [Thread-306971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] client lang: <none>
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] server lang: <none>
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] kex follows: False
2025-12-24T18:36:13.304 [DEBUG] [Thread-306971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:36:13.305 [DEBUG] [Thread-306971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:36:13.305 [DEBUG] [Thread-306971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:36:13.305 [DEBUG] [Thread-306971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:36:13.305 [DEBUG] [Thread-306971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:36:13.305 [DEBUG] [Thread-306971] [transport.py] [_log()] Compression: none
2025-12-24T18:36:13.305 [DEBUG] [Thread-306971] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:36:13.338 [DEBUG] [Thread-306971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:36:13.342 [DEBUG] [Thread-306971] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:36:13.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:36:13.344 [DEBUG] [Thread-306971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:36:13.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:36:13.348 [DEBUG] [Thread-306971] [transport.py] [_log()] userauth is OK
2025-12-24T18:36:13.348 [DEBUG] [Thread-306971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:36:13.348 [DEBUG] [Thread-306971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:36:13.348 [DEBUG] [Thread-306971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:36:13.348 [DEBUG] [Thread-306971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:36:13.369 [INFO] [Thread-306971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:36:13.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:36:14.016 [DEBUG] [Thread-306971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:36:14.016 [DEBUG] [Thread-306971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:36:14.017 [DEBUG] [Thread-306971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:36:14.058 [DEBUG] [Thread-306971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:36:14.058 [DEBUG] [Thread-306971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:36:14.061 [DEBUG] [Thread-306971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:36:14.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:36:14.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:36:14.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:36:14.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:36:14.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:36:14.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:36:14.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:36:14.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:36:14.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:36:14.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.691386 -999.00  +22.40  17.16     32   +5.00 1 1 1 1 1   887    0 17.30 -17.81 ----- 17.8 17.2 141.0 30.2 25.1 -25.7 25.4 -25.3 26.4 -24.5 26.5 -25.2
2025-12-24T18:36:14.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:36:14.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:36:14.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.691386
2025-12-24T18:36:14.091 [DEBUG] [Thread-306971] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:36:14.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:36:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:36:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:36:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:36:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:36:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:35:37', tmtdew=20.24, humidity=26.19, cloud=0.0, wind=26.01, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:35:35.750', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:36:14.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:36:14.194 [DEBUG] [Thread-306974] [transport.py] [_log()] starting thread (client mode): 0xf81c26e0
2025-12-24T18:36:14.194 [DEBUG] [Thread-306974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:36:14.208 [DEBUG] [Thread-306974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:36:14.208 [INFO] [Thread-306974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] client lang: <none>
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] server lang: <none>
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] kex follows: False
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:36:14.216 [DEBUG] [Thread-306974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:36:14.217 [DEBUG] [Thread-306974] [transport.py] [_log()] Compression: none
2025-12-24T18:36:14.217 [DEBUG] [Thread-306974] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:36:14.271 [DEBUG] [Thread-306974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:36:14.271 [DEBUG] [Thread-306974] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:36:14.271 [DEBUG] [Thread-306974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:36:14.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:36:14.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:36:14.328 [DEBUG] [Thread-306974] [transport.py] [_log()] userauth is OK
2025-12-24T18:36:14.328 [DEBUG] [Thread-306974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:36:14.328 [DEBUG] [Thread-306974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:36:14.328 [DEBUG] [Thread-306974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:36:14.329 [DEBUG] [Thread-306974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:36:14.348 [INFO] [Thread-306974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:36:14.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:36:14.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:36:15.154 [DEBUG] [Thread-306974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:36:15.154 [DEBUG] [Thread-306974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:36:15.201 [DEBUG] [Thread-306974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:36:15.201 [DEBUG] [Thread-306974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:36:15.210 [DEBUG] [Thread-306974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:36:15.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:36:15.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:36:15.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:36:15.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:36:15.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:36:15.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:36:15.245 [DEBUG] [Thread-306974] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:36:19.342 [DEBUG] [Thread-306976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:36:34.516 [DEBUG] [Thread-306977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:36:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:36:45.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:36:45.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:36:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 36, 9), 20.2, 26.24, 0.0, 27.44, 22.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:36:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:36:09
2025-12-24T18:36:46.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:36:46.623 [DEBUG] [Thread-306978] [transport.py] [_log()] starting thread (client mode): 0xf5718b50
2025-12-24T18:36:46.623 [DEBUG] [Thread-306978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:36:46.630 [DEBUG] [Thread-306978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:36:46.630 [INFO] [Thread-306978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] client lang: <none>
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] server lang: <none>
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] kex follows: False
2025-12-24T18:36:46.636 [DEBUG] [Thread-306978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:36:46.637 [DEBUG] [Thread-306978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:36:46.637 [DEBUG] [Thread-306978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:36:46.637 [DEBUG] [Thread-306978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:36:46.637 [DEBUG] [Thread-306978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:36:46.637 [DEBUG] [Thread-306978] [transport.py] [_log()] Compression: none
2025-12-24T18:36:46.637 [DEBUG] [Thread-306978] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:36:46.670 [DEBUG] [Thread-306978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:36:46.674 [DEBUG] [Thread-306978] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:36:46.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:36:46.677 [DEBUG] [Thread-306978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:36:46.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:36:46.679 [DEBUG] [Thread-306978] [transport.py] [_log()] userauth is OK
2025-12-24T18:36:46.679 [DEBUG] [Thread-306978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:36:46.679 [DEBUG] [Thread-306978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:36:46.679 [DEBUG] [Thread-306978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:36:46.679 [DEBUG] [Thread-306978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:36:46.698 [INFO] [Thread-306978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:36:46.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:36:47.319 [DEBUG] [Thread-306978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:36:47.319 [DEBUG] [Thread-306978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:36:47.319 [DEBUG] [Thread-306978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:36:47.360 [DEBUG] [Thread-306978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:36:47.360 [DEBUG] [Thread-306978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:36:47.363 [DEBUG] [Thread-306978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:36:47.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:36:47.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:36:47.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:36:47.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:36:47.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:36:47.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:36:47.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:36:47.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:36:47.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:36:47.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.691733 -999.00  +22.40  18.94     32   +5.00 1 1 1 1 1   887    0 16.76 -16.70 ----- 21.5 18.9 162.4 26.5 25.1 -26.3 25.4 -25.7 26.3 -23.8 26.4 -25.4
2025-12-24T18:36:47.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:36:47.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:36:47.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.691733
2025-12-24T18:36:47.397 [DEBUG] [Thread-306978] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:36:47.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:36:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:36:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:36:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:36:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:36:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:36:09', tmtdew=20.2, humidity=26.24, cloud=0.0, wind=27.44, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:36:05.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:36:47.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:36:47.497 [DEBUG] [Thread-306981] [transport.py] [_log()] starting thread (client mode): 0xf03bf7c0
2025-12-24T18:36:47.497 [DEBUG] [Thread-306981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:36:47.512 [DEBUG] [Thread-306981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:36:47.512 [INFO] [Thread-306981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:36:47.519 [DEBUG] [Thread-306981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:36:47.519 [DEBUG] [Thread-306981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:36:47.519 [DEBUG] [Thread-306981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:36:47.519 [DEBUG] [Thread-306981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:36:47.519 [DEBUG] [Thread-306981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:36:47.519 [DEBUG] [Thread-306981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:36:47.519 [DEBUG] [Thread-306981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:36:47.519 [DEBUG] [Thread-306981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] client lang: <none>
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] server lang: <none>
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] kex follows: False
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] Compression: none
2025-12-24T18:36:47.520 [DEBUG] [Thread-306981] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:36:47.579 [DEBUG] [Thread-306981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:36:47.579 [DEBUG] [Thread-306981] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:36:47.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:36:47.579 [DEBUG] [Thread-306981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:36:47.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:36:47.636 [DEBUG] [Thread-306981] [transport.py] [_log()] userauth is OK
2025-12-24T18:36:47.636 [DEBUG] [Thread-306981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:36:47.636 [DEBUG] [Thread-306981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:36:47.636 [DEBUG] [Thread-306981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:36:47.636 [DEBUG] [Thread-306981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:36:47.650 [INFO] [Thread-306981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:36:47.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:36:47.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:36:48.507 [DEBUG] [Thread-306981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:36:48.507 [DEBUG] [Thread-306981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:36:48.555 [DEBUG] [Thread-306981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:36:48.555 [DEBUG] [Thread-306981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:36:48.564 [DEBUG] [Thread-306981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:36:48.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:36:48.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')
2025-12-24T18:36:48.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:36:48.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:36:48.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:36:48.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:36:48.597 [DEBUG] [Thread-306981] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:36:49.574 [DEBUG] [Thread-306983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:36:49.576 [DEBUG] [Thread-306984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:36:52.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:36:52.753 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:37:04.786 [DEBUG] [Thread-306985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:37:18.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:37:18.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:37:18.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:37:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 36, 43), 20.09, 26.86, 0.0, 27.15, 22.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:37:19.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:36:43
2025-12-24T18:37:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:37:19.888 [DEBUG] [Thread-306986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:37:19.941 [DEBUG] [Thread-306987] [transport.py] [_log()] starting thread (client mode): 0xf81f0310
2025-12-24T18:37:19.941 [DEBUG] [Thread-306987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:37:19.954 [DEBUG] [Thread-306987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:37:19.954 [INFO] [Thread-306987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] client lang: <none>
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] server lang: <none>
2025-12-24T18:37:19.958 [DEBUG] [Thread-306987] [transport.py] [_log()] kex follows: False
2025-12-24T18:37:19.959 [DEBUG] [Thread-306987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:37:19.959 [DEBUG] [Thread-306987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:37:19.959 [DEBUG] [Thread-306987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:37:19.959 [DEBUG] [Thread-306987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:37:19.959 [DEBUG] [Thread-306987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:37:19.959 [DEBUG] [Thread-306987] [transport.py] [_log()] Compression: none
2025-12-24T18:37:19.959 [DEBUG] [Thread-306987] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:37:19.990 [DEBUG] [Thread-306987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:37:19.993 [DEBUG] [Thread-306987] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:37:19.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:37:19.995 [DEBUG] [Thread-306987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:37:19.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:37:19.997 [DEBUG] [Thread-306987] [transport.py] [_log()] userauth is OK
2025-12-24T18:37:19.997 [DEBUG] [Thread-306987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:37:19.998 [DEBUG] [Thread-306987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:37:19.998 [DEBUG] [Thread-306987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:37:19.998 [DEBUG] [Thread-306987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:37:20.017 [INFO] [Thread-306987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:37:20.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:37:20.654 [DEBUG] [Thread-306987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:37:20.655 [DEBUG] [Thread-306987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:37:20.655 [DEBUG] [Thread-306987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:37:20.696 [DEBUG] [Thread-306987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:37:20.697 [DEBUG] [Thread-306987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:37:20.699 [DEBUG] [Thread-306987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:37:20.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:37:20.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:37:20.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:37:20.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:37:20.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:37:20.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:37:20.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:37:20.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:37:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:37:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.692080 -999.00  +22.40  12.12     32   +5.00 1 1 1 1 1   887    0 16.99 -16.94 ----- 14.9 12.1 154.0 27.6 25.1 -25.7 25.3 -27.0 26.3 -23.8 26.4 -25.7
2025-12-24T18:37:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:37:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:37:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.692080
2025-12-24T18:37:20.735 [DEBUG] [Thread-306987] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:37:20.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:37:20.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:37:20.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:37:20.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:37:20.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:37:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:36:43', tmtdew=20.09, humidity=26.86, cloud=0.0, wind=27.15, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:36:35.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:37:20.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:37:20.834 [DEBUG] [Thread-306990] [transport.py] [_log()] starting thread (client mode): 0xf81f0c70
2025-12-24T18:37:20.834 [DEBUG] [Thread-306990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:37:20.848 [DEBUG] [Thread-306990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:37:20.848 [INFO] [Thread-306990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] client lang: <none>
2025-12-24T18:37:20.855 [DEBUG] [Thread-306990] [transport.py] [_log()] server lang: <none>
2025-12-24T18:37:20.856 [DEBUG] [Thread-306990] [transport.py] [_log()] kex follows: False
2025-12-24T18:37:20.856 [DEBUG] [Thread-306990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:37:20.856 [DEBUG] [Thread-306990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:37:20.856 [DEBUG] [Thread-306990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:37:20.856 [DEBUG] [Thread-306990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:37:20.856 [DEBUG] [Thread-306990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:37:20.856 [DEBUG] [Thread-306990] [transport.py] [_log()] Compression: none
2025-12-24T18:37:20.856 [DEBUG] [Thread-306990] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:37:20.911 [DEBUG] [Thread-306990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:37:20.912 [DEBUG] [Thread-306990] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:37:20.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:37:20.913 [DEBUG] [Thread-306990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:37:20.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:37:20.974 [DEBUG] [Thread-306990] [transport.py] [_log()] userauth is OK
2025-12-24T18:37:20.974 [DEBUG] [Thread-306990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:37:20.975 [DEBUG] [Thread-306990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:37:20.975 [DEBUG] [Thread-306990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:37:20.975 [DEBUG] [Thread-306990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:37:20.998 [INFO] [Thread-306990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:37:20.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:37:20.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:37:21.819 [DEBUG] [Thread-306990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:37:21.819 [DEBUG] [Thread-306990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:37:21.867 [DEBUG] [Thread-306990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:37:21.867 [DEBUG] [Thread-306990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:37:21.875 [DEBUG] [Thread-306990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:37:21.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:37: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')
2025-12-24T18:37:21.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:37:21.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:37:21.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:37:21.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:37:21.908 [DEBUG] [Thread-306990] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:37:34.990 [DEBUG] [Thread-306992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:37:49.828 [DEBUG] [Thread-306993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:37:50.116 [DEBUG] [Thread-306994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:37:51.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:37:51.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:37:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:37:52.895 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:37:52.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:37:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 37, 17), 20.07, 26.89, 0.0, 25.78, 22.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:37:52.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:37:17
2025-12-24T18:37:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:37:53.510 [DEBUG] [Thread-306995] [transport.py] [_log()] starting thread (client mode): 0xf03be710
2025-12-24T18:37:53.511 [DEBUG] [Thread-306995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:37:53.522 [DEBUG] [Thread-306995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:37:53.522 [INFO] [Thread-306995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] client lang: <none>
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] server lang: <none>
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] kex follows: False
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:37:53.527 [DEBUG] [Thread-306995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:37:53.528 [DEBUG] [Thread-306995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:37:53.528 [DEBUG] [Thread-306995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:37:53.528 [DEBUG] [Thread-306995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:37:53.528 [DEBUG] [Thread-306995] [transport.py] [_log()] Compression: none
2025-12-24T18:37:53.528 [DEBUG] [Thread-306995] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:37:53.568 [DEBUG] [Thread-306995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:37:53.575 [DEBUG] [Thread-306995] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:37:53.577 [DEBUG] [Thread-306995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:37:53.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:37:53.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:37:53.581 [DEBUG] [Thread-306995] [transport.py] [_log()] userauth is OK
2025-12-24T18:37:53.581 [DEBUG] [Thread-306995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:37:53.581 [DEBUG] [Thread-306995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:37:53.581 [DEBUG] [Thread-306995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:37:53.581 [DEBUG] [Thread-306995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:37:53.613 [INFO] [Thread-306995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:37:53.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:37:54.241 [DEBUG] [Thread-306995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:37:54.241 [DEBUG] [Thread-306995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:37:54.242 [DEBUG] [Thread-306995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:37:54.283 [DEBUG] [Thread-306995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:37:54.283 [DEBUG] [Thread-306995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:37:54.285 [DEBUG] [Thread-306995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:37:54.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:37:54.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:37:54.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:37:54.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:37:54.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:37:54.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:37:54.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:37:54.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:37:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:37:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.692427 -999.00  +22.40  11.26     32   +5.00 1 1 1 1 1   887    0 17.05 -17.48 ----- 11.7 11.3 155.2 21.6 25.1 -26.1 25.4 -25.3 26.4 -23.8 26.4 -25.1
2025-12-24T18:37:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:37:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:37:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.692427
2025-12-24T18:37:54.312 [DEBUG] [Thread-306995] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:37:54.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:37:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:37:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:37:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:37:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:37:54.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:37:17', tmtdew=20.07, humidity=26.89, cloud=0.0, wind=25.78, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:37:05.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:37:54.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:37:54.413 [DEBUG] [Thread-306998] [transport.py] [_log()] starting thread (client mode): 0xf574dc30
2025-12-24T18:37:54.414 [DEBUG] [Thread-306998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:37:54.428 [DEBUG] [Thread-306998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:37:54.428 [INFO] [Thread-306998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:37:54.435 [DEBUG] [Thread-306998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] client lang: <none>
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] server lang: <none>
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] kex follows: False
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] Compression: none
2025-12-24T18:37:54.436 [DEBUG] [Thread-306998] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:37:54.490 [DEBUG] [Thread-306998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:37:54.490 [DEBUG] [Thread-306998] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:37:54.490 [DEBUG] [Thread-306998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:37:54.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:37:54.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:37:54.548 [DEBUG] [Thread-306998] [transport.py] [_log()] userauth is OK
2025-12-24T18:37:54.548 [DEBUG] [Thread-306998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:37:54.548 [DEBUG] [Thread-306998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:37:54.548 [DEBUG] [Thread-306998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:37:54.548 [DEBUG] [Thread-306998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:37:54.565 [INFO] [Thread-306998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:37:54.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:37:54.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:37:55.387 [DEBUG] [Thread-306998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:37:55.387 [DEBUG] [Thread-306998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:37:55.435 [DEBUG] [Thread-306998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:37:55.435 [DEBUG] [Thread-306998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:37:55.444 [DEBUG] [Thread-306998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:37:55.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:37:55.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:37:55.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:37:55.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:37:55.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:37:55.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:37:55.481 [DEBUG] [Thread-306998] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:38:05.208 [DEBUG] [Thread-307000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:38:20.391 [DEBUG] [Thread-307001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:38:25.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:38:25.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:38:25.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:38:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 37, 50), 20.12, 26.39, 0.0, 25.09, 22.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:38:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:37:50
2025-12-24T18:38:26.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:38:26.866 [DEBUG] [Thread-307002] [transport.py] [_log()] starting thread (client mode): 0xf571b220
2025-12-24T18:38:26.867 [DEBUG] [Thread-307002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:38:26.876 [DEBUG] [Thread-307002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:38:26.877 [INFO] [Thread-307002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:38:26.881 [DEBUG] [Thread-307002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] client lang: <none>
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] server lang: <none>
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] kex follows: False
2025-12-24T18:38:26.882 [DEBUG] [Thread-307002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:38:26.883 [DEBUG] [Thread-307002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:38:26.883 [DEBUG] [Thread-307002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:38:26.883 [DEBUG] [Thread-307002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:38:26.883 [DEBUG] [Thread-307002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:38:26.883 [DEBUG] [Thread-307002] [transport.py] [_log()] Compression: none
2025-12-24T18:38:26.883 [DEBUG] [Thread-307002] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:38:26.918 [DEBUG] [Thread-307002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:38:26.922 [DEBUG] [Thread-307002] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:38:26.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:38:26.924 [DEBUG] [Thread-307002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:38:26.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:38:26.928 [DEBUG] [Thread-307002] [transport.py] [_log()] userauth is OK
2025-12-24T18:38:26.928 [DEBUG] [Thread-307002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:38:26.928 [DEBUG] [Thread-307002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:38:26.928 [DEBUG] [Thread-307002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:38:26.928 [DEBUG] [Thread-307002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:38:26.950 [INFO] [Thread-307002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:38:26.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:38:27.619 [DEBUG] [Thread-307002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:38:27.619 [DEBUG] [Thread-307002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:38:27.620 [DEBUG] [Thread-307002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:38:27.661 [DEBUG] [Thread-307002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:38:27.661 [DEBUG] [Thread-307002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:38:27.663 [DEBUG] [Thread-307002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:38:27.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:38:27.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:38:27.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:38:27.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:38:27.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:38:27.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:38:27.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:38:27.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:38:27.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:38:27.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.692775 -999.00  +22.30  18.50     32   +5.00 1 1 1 1 1   887    0 16.69 -17.62 ----- 21.4 18.5 142.0 31.8 25.1 -26.0 25.4 -25.5 26.2 -24.2 26.4 -26.0
2025-12-24T18:38:27.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:38:27.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:38:27.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.692775
2025-12-24T18:38:27.692 [DEBUG] [Thread-307002] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:38:27.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:38:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:38:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:38:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:38:27.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:38:27.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:37:50', tmtdew=20.12, humidity=26.39, cloud=0.0, wind=25.09, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:37:35.760', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:38:27.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:38:27.802 [DEBUG] [Thread-307005] [transport.py] [_log()] starting thread (client mode): 0xf5751a80
2025-12-24T18:38:27.802 [DEBUG] [Thread-307005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:38:27.815 [DEBUG] [Thread-307005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:38:27.815 [INFO] [Thread-307005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] client lang: <none>
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] server lang: <none>
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] kex follows: False
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] Compression: none
2025-12-24T18:38:27.823 [DEBUG] [Thread-307005] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:38:27.883 [DEBUG] [Thread-307005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:38:27.883 [DEBUG] [Thread-307005] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:38:27.883 [DEBUG] [Thread-307005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:38:27.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:38:27.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:38:27.940 [DEBUG] [Thread-307005] [transport.py] [_log()] userauth is OK
2025-12-24T18:38:27.940 [DEBUG] [Thread-307005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:38:27.940 [DEBUG] [Thread-307005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:38:27.940 [DEBUG] [Thread-307005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:38:27.940 [DEBUG] [Thread-307005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:38:27.958 [INFO] [Thread-307005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:38:27.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:38:27.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:38:28.834 [DEBUG] [Thread-307005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:38:28.834 [DEBUG] [Thread-307005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:38:28.885 [DEBUG] [Thread-307005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:38:28.885 [DEBUG] [Thread-307005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:38:28.897 [DEBUG] [Thread-307005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:38:28.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:38:28.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')
2025-12-24T18:38:28.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:38:28.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:38:28.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:38:28.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:38:28.937 [DEBUG] [Thread-307005] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:38:35.510 [DEBUG] [Thread-307007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:38:50.162 [DEBUG] [Thread-307008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:38:50.704 [DEBUG] [Thread-307009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:38:53.038 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:38:53.039 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:38:58.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:38:58.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:38:58.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:38:59.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 38, 23), 20.07, 26.46, 0.0, 24.81, 22.35, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:38:59.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:38:23
2025-12-24T18:39:00.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:39:00.360 [DEBUG] [Thread-307010] [transport.py] [_log()] starting thread (client mode): 0xf57182b0
2025-12-24T18:39:00.361 [DEBUG] [Thread-307010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:39:00.361 [DEBUG] [Thread-307010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:39:00.362 [INFO] [Thread-307010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] client lang: <none>
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] server lang: <none>
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] kex follows: False
2025-12-24T18:39:00.365 [DEBUG] [Thread-307010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:39:00.367 [DEBUG] [Thread-307010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:39:00.367 [DEBUG] [Thread-307010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:39:00.367 [DEBUG] [Thread-307010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:39:00.367 [DEBUG] [Thread-307010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:39:00.367 [DEBUG] [Thread-307010] [transport.py] [_log()] Compression: none
2025-12-24T18:39:00.367 [DEBUG] [Thread-307010] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:39:00.407 [DEBUG] [Thread-307010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:39:00.409 [DEBUG] [Thread-307010] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:39:00.411 [DEBUG] [Thread-307010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:39:00.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:39:00.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:39:00.415 [DEBUG] [Thread-307010] [transport.py] [_log()] userauth is OK
2025-12-24T18:39:00.415 [DEBUG] [Thread-307010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:39:00.415 [DEBUG] [Thread-307010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:39:00.415 [DEBUG] [Thread-307010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:39:00.415 [DEBUG] [Thread-307010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:39:00.435 [INFO] [Thread-307010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:39:00.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:39:01.064 [DEBUG] [Thread-307010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:39:01.064 [DEBUG] [Thread-307010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:39:01.066 [DEBUG] [Thread-307010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:39:01.105 [DEBUG] [Thread-307010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:39:01.105 [DEBUG] [Thread-307010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:39:01.109 [DEBUG] [Thread-307010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:39:01.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:39:01.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:39:01.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:39:01.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:39:01.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:39:01.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:39:01.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:39:01.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:39:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:39:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.693469 -999.00  +22.10  17.54     32   +5.00 1 1 1 1 1   887    0 16.54 -19.70 ----- 27.1 17.5 149.8 28.1 24.9 -26.2 25.2 -26.0 26.0 -25.4 26.2 -26.6
2025-12-24T18:39:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:39:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:39:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.693469
2025-12-24T18:39:01.143 [DEBUG] [Thread-307010] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:39:01.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:39:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:39:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:39:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:39:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:39:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:38:23', tmtdew=20.07, humidity=26.46, cloud=0.0, wind=24.81, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:38:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:39:01.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:39:01.266 [DEBUG] [Thread-307013] [transport.py] [_log()] starting thread (client mode): 0xf03bf3d0
2025-12-24T18:39:01.266 [DEBUG] [Thread-307013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:39:01.281 [DEBUG] [Thread-307013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:39:01.281 [INFO] [Thread-307013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:39:01.289 [DEBUG] [Thread-307013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:39:01.290 [DEBUG] [Thread-307013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:39:01.290 [DEBUG] [Thread-307013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:39:01.290 [DEBUG] [Thread-307013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:39:01.290 [DEBUG] [Thread-307013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:39:01.290 [DEBUG] [Thread-307013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] client lang: <none>
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] server lang: <none>
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] kex follows: False
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] Compression: none
2025-12-24T18:39:01.291 [DEBUG] [Thread-307013] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:39:01.349 [DEBUG] [Thread-307013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:39:01.349 [DEBUG] [Thread-307013] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:39:01.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:39:01.351 [DEBUG] [Thread-307013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:39:01.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:39:01.404 [DEBUG] [Thread-307013] [transport.py] [_log()] userauth is OK
2025-12-24T18:39:01.405 [DEBUG] [Thread-307013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:39:01.405 [DEBUG] [Thread-307013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:39:01.405 [DEBUG] [Thread-307013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:39:01.405 [DEBUG] [Thread-307013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:39:01.423 [INFO] [Thread-307013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:39:01.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:39:01.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:39:02.268 [DEBUG] [Thread-307013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:39:02.269 [DEBUG] [Thread-307013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:39:02.316 [DEBUG] [Thread-307013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:39:02.317 [DEBUG] [Thread-307013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:39:02.326 [DEBUG] [Thread-307013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:39:02.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:39:02.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:39: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
2025-12-24T18:39:02.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:39:02.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:39:02.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:39:02.364 [DEBUG] [Thread-307013] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:39:05.837 [DEBUG] [Thread-307015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:39:21.018 [DEBUG] [Thread-307016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:39:32.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:39:32.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:39:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:39:34.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 38, 57), 19.93, 27.11, 0.0, 27.31, 22.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:39:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:38:57
2025-12-24T18:39:34.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:39:34.555 [DEBUG] [Thread-307017] [transport.py] [_log()] starting thread (client mode): 0xf81c17b0
2025-12-24T18:39:34.556 [DEBUG] [Thread-307017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:39:34.563 [DEBUG] [Thread-307017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:39:34.563 [INFO] [Thread-307017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] client lang: <none>
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] server lang: <none>
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] kex follows: False
2025-12-24T18:39:34.568 [DEBUG] [Thread-307017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:39:34.569 [DEBUG] [Thread-307017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:39:34.569 [DEBUG] [Thread-307017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:39:34.569 [DEBUG] [Thread-307017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:39:34.569 [DEBUG] [Thread-307017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:39:34.569 [DEBUG] [Thread-307017] [transport.py] [_log()] Compression: none
2025-12-24T18:39:34.569 [DEBUG] [Thread-307017] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:39:34.600 [DEBUG] [Thread-307017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:39:34.603 [DEBUG] [Thread-307017] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:39:34.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:39:34.605 [DEBUG] [Thread-307017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:39:34.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:39:34.609 [DEBUG] [Thread-307017] [transport.py] [_log()] userauth is OK
2025-12-24T18:39:34.609 [DEBUG] [Thread-307017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:39:34.609 [DEBUG] [Thread-307017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:39:34.609 [DEBUG] [Thread-307017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:39:34.609 [DEBUG] [Thread-307017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:39:34.627 [INFO] [Thread-307017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:39:34.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:39:35.244 [DEBUG] [Thread-307017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:39:35.245 [DEBUG] [Thread-307017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:39:35.246 [DEBUG] [Thread-307017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:39:35.287 [DEBUG] [Thread-307017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:39:35.287 [DEBUG] [Thread-307017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:39:35.289 [DEBUG] [Thread-307017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:39:35.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:39:35.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:39:35.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:39:35.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:39:35.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:39:35.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:39:35.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:39:35.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:39:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:39:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.693816 -999.00  +22.00  22.34     33   +5.00 1 1 1 1 1   887    0 16.40 -20.70 ----- 21.4 22.3 147.1 31.5 24.8 -26.1 25.1 -26.1 25.9 -24.3 26.1 -26.1
2025-12-24T18:39:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:39:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:39:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.693816
2025-12-24T18:39:35.325 [DEBUG] [Thread-307017] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:39:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:39:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:39:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:39:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:39:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:39:35.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:38:57', tmtdew=19.93, humidity=27.11, cloud=0.0, wind=27.31, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:39:05.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:39:35.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:39:35.443 [DEBUG] [Thread-307020] [transport.py] [_log()] starting thread (client mode): 0xf81f3a00
2025-12-24T18:39:35.444 [DEBUG] [Thread-307020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:39:35.463 [DEBUG] [Thread-307020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:39:35.463 [INFO] [Thread-307020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:39:35.472 [DEBUG] [Thread-307020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:39:35.472 [DEBUG] [Thread-307020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:39:35.472 [DEBUG] [Thread-307020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:39:35.472 [DEBUG] [Thread-307020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:39:35.472 [DEBUG] [Thread-307020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:39:35.472 [DEBUG] [Thread-307020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:39:35.472 [DEBUG] [Thread-307020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] client lang: <none>
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] server lang: <none>
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] kex follows: False
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] Compression: none
2025-12-24T18:39:35.473 [DEBUG] [Thread-307020] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:39:35.528 [DEBUG] [Thread-307020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:39:35.529 [DEBUG] [Thread-307020] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:39:35.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:39:35.530 [DEBUG] [Thread-307020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:39:35.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:39:35.585 [DEBUG] [Thread-307020] [transport.py] [_log()] userauth is OK
2025-12-24T18:39:35.585 [DEBUG] [Thread-307020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:39:35.585 [DEBUG] [Thread-307020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:39:35.585 [DEBUG] [Thread-307020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:39:35.585 [DEBUG] [Thread-307020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:39:35.604 [INFO] [Thread-307020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:39:35.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:39:35.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:39:36.086 [DEBUG] [Thread-307022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:39:36.453 [DEBUG] [Thread-307020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:39:36.454 [DEBUG] [Thread-307020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:39:36.500 [DEBUG] [Thread-307020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:39:36.500 [DEBUG] [Thread-307020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:39:36.510 [DEBUG] [Thread-307020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:39:36.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:39:36.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:39:36.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:39:36.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:39:36.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:39:36.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:39:36.549 [DEBUG] [Thread-307020] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:39:50.530 [DEBUG] [Thread-307023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:39:51.263 [DEBUG] [Thread-307024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:39:53.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:39:53.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:40:06.393 [DEBUG] [Thread-307025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:40:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:40:06.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:40:06.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
2025-12-24T18:40:07.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 39, 30), 19.96, 27.06, 0.0, 25.69, 22.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:40:07.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:39:30
2025-12-24T18:40:07.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:40:07.994 [DEBUG] [Thread-307026] [transport.py] [_log()] starting thread (client mode): 0xf5750250
2025-12-24T18:40:07.995 [DEBUG] [Thread-307026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:40:08.006 [DEBUG] [Thread-307026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:40:08.007 [INFO] [Thread-307026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:40:08.013 [DEBUG] [Thread-307026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:40:08.013 [DEBUG] [Thread-307026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] client lang: <none>
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] server lang: <none>
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] kex follows: False
2025-12-24T18:40:08.014 [DEBUG] [Thread-307026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:40:08.015 [DEBUG] [Thread-307026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:40:08.015 [DEBUG] [Thread-307026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:40:08.015 [DEBUG] [Thread-307026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:40:08.016 [DEBUG] [Thread-307026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:40:08.016 [DEBUG] [Thread-307026] [transport.py] [_log()] Compression: none
2025-12-24T18:40:08.016 [DEBUG] [Thread-307026] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:40:08.056 [DEBUG] [Thread-307026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:40:08.061 [DEBUG] [Thread-307026] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:40:08.062 [DEBUG] [Thread-307026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:40:08.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:40:08.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:40:08.069 [DEBUG] [Thread-307026] [transport.py] [_log()] userauth is OK
2025-12-24T18:40:08.069 [DEBUG] [Thread-307026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:40:08.069 [DEBUG] [Thread-307026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:40:08.069 [DEBUG] [Thread-307026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:40:08.069 [DEBUG] [Thread-307026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:40:08.108 [INFO] [Thread-307026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:40:08.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:40:09.337 [DEBUG] [Thread-307026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:40:09.337 [DEBUG] [Thread-307026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:40:09.338 [DEBUG] [Thread-307026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:40:09.378 [DEBUG] [Thread-307026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:40:09.378 [DEBUG] [Thread-307026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:40:09.381 [DEBUG] [Thread-307026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:40:09.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:40:09.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:40:09.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:40:09.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:40:09.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:40:09.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:40:09.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:40:09.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:40:09.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:40:09.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.694163 -999.00  +21.90  18.82     33   +4.90 1 1 1 1 1   887    0 16.73 -21.96 ----- 19.0 18.8 150.0 31.0 24.7 -26.3 25.0 -26.5 25.8 -25.8 25.9 -26.8
2025-12-24T18:40:09.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:40:09.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:40:09.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.694163
2025-12-24T18:40:09.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:40:09.418 [DEBUG] [Thread-307026] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:40:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:40:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:40:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:40:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:40:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:39:30', tmtdew=19.96, humidity=27.06, cloud=0.0, wind=25.69, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:39:35.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:40:09.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:40:09.509 [DEBUG] [Thread-307029] [transport.py] [_log()] starting thread (client mode): 0xf574e230
2025-12-24T18:40:09.509 [DEBUG] [Thread-307029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:40:09.527 [DEBUG] [Thread-307029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:40:09.527 [INFO] [Thread-307029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] client lang: <none>
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] server lang: <none>
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] kex follows: False
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] Compression: none
2025-12-24T18:40:09.535 [DEBUG] [Thread-307029] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:40:09.590 [DEBUG] [Thread-307029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:40:09.591 [DEBUG] [Thread-307029] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:40:09.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:40:09.591 [DEBUG] [Thread-307029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:40:09.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:40:09.648 [DEBUG] [Thread-307029] [transport.py] [_log()] userauth is OK
2025-12-24T18:40:09.648 [DEBUG] [Thread-307029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:40:09.648 [DEBUG] [Thread-307029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:40:09.648 [DEBUG] [Thread-307029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:40:09.648 [DEBUG] [Thread-307029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:40:09.667 [INFO] [Thread-307029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:40:09.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:40:09.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:40:10.519 [DEBUG] [Thread-307029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:40:10.519 [DEBUG] [Thread-307029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:40:10.566 [DEBUG] [Thread-307029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:40:10.566 [DEBUG] [Thread-307029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:40:10.574 [DEBUG] [Thread-307029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:40:10.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:40:10.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:40:10.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:40:10.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:40:10.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:40:10.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:40:10.607 [DEBUG] [Thread-307029] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:40:21.530 [DEBUG] [Thread-307031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:40:36.680 [DEBUG] [Thread-307032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:40:40.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:40:40.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:40:40.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:40:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 40, 4), 19.99, 27.01, 0.0, 24.86, 22.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:40:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:40:04
2025-12-24T18:40:41.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:40:42.175 [DEBUG] [Thread-307033] [transport.py] [_log()] starting thread (client mode): 0xf571bfa0
2025-12-24T18:40:42.175 [DEBUG] [Thread-307033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:40:42.188 [DEBUG] [Thread-307033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:40:42.188 [INFO] [Thread-307033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:40:42.192 [DEBUG] [Thread-307033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] client lang: <none>
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] server lang: <none>
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] kex follows: False
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:40:42.193 [DEBUG] [Thread-307033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:40:42.194 [DEBUG] [Thread-307033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:40:42.194 [DEBUG] [Thread-307033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:40:42.194 [DEBUG] [Thread-307033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:40:42.194 [DEBUG] [Thread-307033] [transport.py] [_log()] Compression: none
2025-12-24T18:40:42.194 [DEBUG] [Thread-307033] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:40:42.226 [DEBUG] [Thread-307033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:40:42.229 [DEBUG] [Thread-307033] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:40:42.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:40:42.231 [DEBUG] [Thread-307033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:40:42.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:40:42.233 [DEBUG] [Thread-307033] [transport.py] [_log()] userauth is OK
2025-12-24T18:40:42.233 [DEBUG] [Thread-307033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:40:42.233 [DEBUG] [Thread-307033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:40:42.233 [DEBUG] [Thread-307033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:40:42.233 [DEBUG] [Thread-307033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:40:42.251 [INFO] [Thread-307033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:40:42.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:40:42.888 [DEBUG] [Thread-307033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:40:42.888 [DEBUG] [Thread-307033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:40:42.889 [DEBUG] [Thread-307033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:40:42.930 [DEBUG] [Thread-307033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:40:42.930 [DEBUG] [Thread-307033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:40:42.932 [DEBUG] [Thread-307033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:40:42.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:40:42.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:40:42.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:40:42.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:40:42.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:40:42.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:40:42.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:40:42.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:40:42.953 [DEBUG] [Thread-307033] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:40:42.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:40:42.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.694510 -999.00  +21.90  20.61     33   +4.90 1 1 1 1 1   887    0 16.79 -21.69 ----- 14.6 20.6 150.2 26.4 24.6 -26.1 24.8 -25.4 25.6 -24.8 25.7 -26.5
2025-12-24T18:40:42.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:40:42.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:40:42.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.694510
2025-12-24T18:40:42.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:40:42.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:40:42.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:40:42.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:40:42.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:40:42.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:40:04', tmtdew=19.99, humidity=27.01, cloud=0.0, wind=24.86, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:40:05.664', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:40:43.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:40:43.058 [DEBUG] [Thread-307036] [transport.py] [_log()] starting thread (client mode): 0xf81c0dc0
2025-12-24T18:40:43.058 [DEBUG] [Thread-307036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:40:43.072 [DEBUG] [Thread-307036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:40:43.072 [INFO] [Thread-307036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:40:43.079 [DEBUG] [Thread-307036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] client lang: <none>
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] server lang: <none>
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] kex follows: False
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] Compression: none
2025-12-24T18:40:43.080 [DEBUG] [Thread-307036] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:40:43.135 [DEBUG] [Thread-307036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:40:43.135 [DEBUG] [Thread-307036] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:40:43.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:40:43.135 [DEBUG] [Thread-307036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:40:43.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:40:43.196 [DEBUG] [Thread-307036] [transport.py] [_log()] userauth is OK
2025-12-24T18:40:43.196 [DEBUG] [Thread-307036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:40:43.196 [DEBUG] [Thread-307036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:40:43.196 [DEBUG] [Thread-307036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:40:43.196 [DEBUG] [Thread-307036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:40:43.214 [INFO] [Thread-307036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:40:43.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:40:43.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:40:44.054 [DEBUG] [Thread-307036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:40:44.054 [DEBUG] [Thread-307036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:40:44.061 [DEBUG] [Thread-307036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:40:44.061 [DEBUG] [Thread-307036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:40:44.069 [DEBUG] [Thread-307036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:40:44.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:40:44.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:40:44.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:40:44.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:40:44.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:40:44.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:40:44.102 [DEBUG] [Thread-307036] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:40:50.866 [DEBUG] [Thread-307038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:40:51.757 [DEBUG] [Thread-307039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:40:53.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:40:53.552 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:41:06.967 [DEBUG] [Thread-307040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:41:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:41:14.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:41:14.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:41:15.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 40, 37), 20.02, 26.88, 0.0, 28.87, 22.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:41:15.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:40:37
2025-12-24T18:41:15.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:41:15.577 [DEBUG] [Thread-307041] [transport.py] [_log()] starting thread (client mode): 0xf571abf0
2025-12-24T18:41:15.578 [DEBUG] [Thread-307041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:41:15.587 [DEBUG] [Thread-307041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:41:15.587 [INFO] [Thread-307041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:41:15.593 [DEBUG] [Thread-307041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:41:15.593 [DEBUG] [Thread-307041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:41:15.593 [DEBUG] [Thread-307041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:41:15.593 [DEBUG] [Thread-307041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] client lang: <none>
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] server lang: <none>
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] kex follows: False
2025-12-24T18:41:15.594 [DEBUG] [Thread-307041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:41:15.595 [DEBUG] [Thread-307041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:41:15.595 [DEBUG] [Thread-307041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:41:15.595 [DEBUG] [Thread-307041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:41:15.595 [DEBUG] [Thread-307041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:41:15.596 [DEBUG] [Thread-307041] [transport.py] [_log()] Compression: none
2025-12-24T18:41:15.596 [DEBUG] [Thread-307041] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:41:15.632 [DEBUG] [Thread-307041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:41:15.637 [DEBUG] [Thread-307041] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:41:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:41:15.642 [DEBUG] [Thread-307041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:41:15.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:41:15.646 [DEBUG] [Thread-307041] [transport.py] [_log()] userauth is OK
2025-12-24T18:41:15.646 [DEBUG] [Thread-307041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:41:15.646 [DEBUG] [Thread-307041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:41:15.646 [DEBUG] [Thread-307041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:41:15.647 [DEBUG] [Thread-307041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:41:15.688 [INFO] [Thread-307041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:41:15.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:41:16.416 [DEBUG] [Thread-307041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:41:16.417 [DEBUG] [Thread-307041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:41:16.418 [DEBUG] [Thread-307041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:41:16.457 [DEBUG] [Thread-307041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:41:16.458 [DEBUG] [Thread-307041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:41:16.461 [DEBUG] [Thread-307041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:41:16.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:41:16.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:41:16.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:41:16.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:41:16.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:41:16.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:41:16.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:41:16.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:41:16.488 [DEBUG] [Thread-307041] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:41:16.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:41:16.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.694858 -999.00  +22.00  15.76     33   +4.90 1 1 1 1 1   887    0 16.79 -23.48 ----- 20.1 15.8 169.0 18.7 24.6 -25.7 24.9 -25.3 25.6 -23.0 25.7 -24.7
2025-12-24T18:41:16.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:41:16.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:41:16.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.694858
2025-12-24T18:41:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:41:16.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:41:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:41:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:41:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:41:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:40:37', tmtdew=20.02, humidity=26.88, cloud=0.0, wind=28.87, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:40:35.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:41:16.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:41:16.611 [DEBUG] [Thread-307044] [transport.py] [_log()] starting thread (client mode): 0xf5719e40
2025-12-24T18:41:16.611 [DEBUG] [Thread-307044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:41:16.625 [DEBUG] [Thread-307044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:41:16.626 [INFO] [Thread-307044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:41:16.633 [DEBUG] [Thread-307044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] client lang: <none>
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] server lang: <none>
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] kex follows: False
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] Compression: none
2025-12-24T18:41:16.634 [DEBUG] [Thread-307044] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:41:16.692 [DEBUG] [Thread-307044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:41:16.693 [DEBUG] [Thread-307044] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:41:16.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:41:16.694 [DEBUG] [Thread-307044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:41:16.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:41:16.748 [DEBUG] [Thread-307044] [transport.py] [_log()] userauth is OK
2025-12-24T18:41:16.749 [DEBUG] [Thread-307044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:41:16.749 [DEBUG] [Thread-307044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:41:16.749 [DEBUG] [Thread-307044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:41:16.749 [DEBUG] [Thread-307044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:41:16.768 [INFO] [Thread-307044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:41:16.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:41:16.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:41:17.627 [DEBUG] [Thread-307044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:41:17.627 [DEBUG] [Thread-307044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:41:17.674 [DEBUG] [Thread-307044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:41:17.674 [DEBUG] [Thread-307044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:41:17.683 [DEBUG] [Thread-307044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:41:17.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:41:17.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:41:17.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:41:17.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:41:17.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:41:17.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:41:17.721 [DEBUG] [Thread-307044] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:41:22.091 [DEBUG] [Thread-307046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:41:37.293 [DEBUG] [Thread-307047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:41:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:41:47.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:41:47.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
2025-12-24T18:41:48.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 41, 10), 19.99, 26.91, 0.0, 26.47, 22.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:41:48.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:41:10
2025-12-24T18:41:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:41:49.171 [DEBUG] [Thread-307048] [transport.py] [_log()] starting thread (client mode): 0xf81c21d0
2025-12-24T18:41:49.172 [DEBUG] [Thread-307048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:41:49.172 [DEBUG] [Thread-307048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:41:49.172 [INFO] [Thread-307048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:41:49.176 [DEBUG] [Thread-307048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:41:49.176 [DEBUG] [Thread-307048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:41:49.176 [DEBUG] [Thread-307048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:41:49.176 [DEBUG] [Thread-307048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:41:49.176 [DEBUG] [Thread-307048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:41:49.176 [DEBUG] [Thread-307048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] client lang: <none>
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] server lang: <none>
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] kex follows: False
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:41:49.177 [DEBUG] [Thread-307048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:41:49.178 [DEBUG] [Thread-307048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:41:49.178 [DEBUG] [Thread-307048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:41:49.178 [DEBUG] [Thread-307048] [transport.py] [_log()] Compression: none
2025-12-24T18:41:49.178 [DEBUG] [Thread-307048] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:41:49.213 [DEBUG] [Thread-307048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:41:49.217 [DEBUG] [Thread-307048] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:41:49.219 [DEBUG] [Thread-307048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:41:49.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:41:49.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:41:49.224 [DEBUG] [Thread-307048] [transport.py] [_log()] userauth is OK
2025-12-24T18:41:49.224 [DEBUG] [Thread-307048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:41:49.225 [DEBUG] [Thread-307048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:41:49.225 [DEBUG] [Thread-307048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:41:49.225 [DEBUG] [Thread-307048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:41:49.263 [INFO] [Thread-307048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:41:49.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:41:49.921 [DEBUG] [Thread-307048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:41:49.921 [DEBUG] [Thread-307048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:41:49.922 [DEBUG] [Thread-307048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:41:49.962 [DEBUG] [Thread-307048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:41:49.962 [DEBUG] [Thread-307048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:41:49.966 [DEBUG] [Thread-307048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:41:49.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:41:49.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:41:49.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:41:49.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:41:49.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:41:49.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:41:49.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:41:49.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:41:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:41:49.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.695205 -999.00  +22.00  14.98     32   +4.90 1 1 1 1 1   887    0 16.74 -25.70 ----- 21.9 15.0 158.6 27.1 24.6 -25.9 24.9 -25.0 25.7 -23.7 25.8 -24.8
2025-12-24T18:41:49.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:41:49.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:41:49.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.695205
2025-12-24T18:41:50.000 [DEBUG] [Thread-307048] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:41:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:41:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:41:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:41:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:41:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:41:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:41:10', tmtdew=19.99, humidity=26.91, cloud=0.0, wind=26.47, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:41:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:41:50.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:41:50.114 [DEBUG] [Thread-307051] [transport.py] [_log()] starting thread (client mode): 0xf81e41f0
2025-12-24T18:41:50.114 [DEBUG] [Thread-307051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:41:50.128 [DEBUG] [Thread-307051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:41:50.129 [INFO] [Thread-307051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:41:50.136 [DEBUG] [Thread-307051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] client lang: <none>
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] server lang: <none>
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] kex follows: False
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:41:50.137 [DEBUG] [Thread-307051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:41:50.138 [DEBUG] [Thread-307051] [transport.py] [_log()] Compression: none
2025-12-24T18:41:50.138 [DEBUG] [Thread-307051] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:41:50.195 [DEBUG] [Thread-307051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:41:50.196 [DEBUG] [Thread-307051] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:41:50.196 [DEBUG] [Thread-307051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:41:50.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:41:50.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:41:50.252 [DEBUG] [Thread-307051] [transport.py] [_log()] userauth is OK
2025-12-24T18:41:50.252 [DEBUG] [Thread-307051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:41:50.252 [DEBUG] [Thread-307051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:41:50.253 [DEBUG] [Thread-307051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:41:50.253 [DEBUG] [Thread-307051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:41:50.271 [INFO] [Thread-307051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:41:50.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:41:50.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:41:51.102 [DEBUG] [Thread-307051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:41:51.102 [DEBUG] [Thread-307051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:41:51.139 [DEBUG] [Thread-307053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:41:51.149 [DEBUG] [Thread-307051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:41:51.150 [DEBUG] [Thread-307051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:41:51.158 [DEBUG] [Thread-307051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:41:51.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:41:51.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:41:51.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
2025-12-24T18:41:51.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:41:51.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:41:51.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:41:51.190 [DEBUG] [Thread-307051] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:41:52.418 [DEBUG] [Thread-307054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:41:53.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:41:53.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:42:07.618 [DEBUG] [Thread-307055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:42:21.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:42:21.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:42:21.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:42:22.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 41, 44), 19.92, 26.96, 0.0, 25.74, 22.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:42:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:41:44
2025-12-24T18:42:22.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:42:22.779 [DEBUG] [Thread-307056] [transport.py] [_log()] starting thread (client mode): 0xf81e7640
2025-12-24T18:42:22.781 [DEBUG] [Thread-307056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:42:22.781 [DEBUG] [Thread-307056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:42:22.781 [INFO] [Thread-307056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] client lang: <none>
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] server lang: <none>
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] kex follows: False
2025-12-24T18:42:22.798 [DEBUG] [Thread-307056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:42:22.799 [DEBUG] [Thread-307056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:42:22.799 [DEBUG] [Thread-307056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:42:22.799 [DEBUG] [Thread-307056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:42:22.799 [DEBUG] [Thread-307056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:42:22.799 [DEBUG] [Thread-307056] [transport.py] [_log()] Compression: none
2025-12-24T18:42:22.799 [DEBUG] [Thread-307056] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:42:22.890 [DEBUG] [Thread-307056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:42:22.894 [DEBUG] [Thread-307056] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:42:22.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:42:22.898 [DEBUG] [Thread-307056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:42:22.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:42:22.902 [DEBUG] [Thread-307056] [transport.py] [_log()] userauth is OK
2025-12-24T18:42:22.907 [DEBUG] [Thread-307056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:42:22.907 [DEBUG] [Thread-307056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:42:22.907 [DEBUG] [Thread-307056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:42:22.908 [DEBUG] [Thread-307056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:42:22.918 [DEBUG] [Thread-307058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:42:22.937 [INFO] [Thread-307056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:42:22.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:42:23.567 [DEBUG] [Thread-307056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:42:23.567 [DEBUG] [Thread-307056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:42:23.570 [DEBUG] [Thread-307056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:42:23.669 [DEBUG] [Thread-307056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:42:23.669 [DEBUG] [Thread-307056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:42:23.671 [DEBUG] [Thread-307056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:42:23.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:42:23.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:42:23.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:42:23.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:42:23.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:42:23.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:42:23.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:42:23.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:42:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:42:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.695552 -999.00  +22.00  21.06     32   +4.90 1 1 1 1 1   887    0 16.35 -25.30 ----- 17.2 21.1 151.8 26.1 24.6 -26.1 24.9 -25.2 25.7 -23.7 25.8 -25.4
2025-12-24T18:42:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:42:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:42:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.695552
2025-12-24T18:42:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:42:23.701 [DEBUG] [Thread-307056] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:42:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:42:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:42:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:42:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:42:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:41:44', tmtdew=19.92, humidity=26.96, cloud=0.0, wind=25.74, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:41:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:42:23.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:42:23.790 [DEBUG] [Thread-307060] [transport.py] [_log()] starting thread (client mode): 0xf81e7c70
2025-12-24T18:42:23.790 [DEBUG] [Thread-307060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:42:23.805 [DEBUG] [Thread-307060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:42:23.805 [INFO] [Thread-307060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] client lang: <none>
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] server lang: <none>
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] kex follows: False
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:42:23.812 [DEBUG] [Thread-307060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:42:23.813 [DEBUG] [Thread-307060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:42:23.813 [DEBUG] [Thread-307060] [transport.py] [_log()] Compression: none
2025-12-24T18:42:23.813 [DEBUG] [Thread-307060] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:42:23.872 [DEBUG] [Thread-307060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:42:23.872 [DEBUG] [Thread-307060] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:42:23.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:42:23.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:42:23.874 [DEBUG] [Thread-307060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:42:23.928 [DEBUG] [Thread-307060] [transport.py] [_log()] userauth is OK
2025-12-24T18:42:23.928 [DEBUG] [Thread-307060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:42:23.929 [DEBUG] [Thread-307060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:42:23.929 [DEBUG] [Thread-307060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:42:23.929 [DEBUG] [Thread-307060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:42:23.953 [INFO] [Thread-307060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:42:23.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:42:23.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:42:24.785 [DEBUG] [Thread-307060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:42:24.785 [DEBUG] [Thread-307060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:42:24.833 [DEBUG] [Thread-307060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:42:24.833 [DEBUG] [Thread-307060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:42:24.842 [DEBUG] [Thread-307060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:42:24.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:42:24.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:42:24.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:42:24.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:42:24.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:42:24.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:42:24.876 [DEBUG] [Thread-307060] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:42:38.077 [DEBUG] [Thread-307062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:42:51.477 [DEBUG] [Thread-307063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:42:53.256 [DEBUG] [Thread-307064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:42:53.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:42:53.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:42:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:42:54.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:42:54.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
2025-12-24T18:42:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 42, 18), 19.98, 26.86, 0.0, 28.69, 22.11, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:42:55.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:42:18
2025-12-24T18:42:55.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:42:56.183 [DEBUG] [Thread-307065] [transport.py] [_log()] starting thread (client mode): 0xf81f2890
2025-12-24T18:42:56.184 [DEBUG] [Thread-307065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:42:56.193 [DEBUG] [Thread-307065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:42:56.193 [INFO] [Thread-307065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:42:56.197 [DEBUG] [Thread-307065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:42:56.197 [DEBUG] [Thread-307065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:42:56.197 [DEBUG] [Thread-307065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:42:56.197 [DEBUG] [Thread-307065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:42:56.197 [DEBUG] [Thread-307065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:42:56.197 [DEBUG] [Thread-307065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] client lang: <none>
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] server lang: <none>
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] kex follows: False
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] Compression: none
2025-12-24T18:42:56.198 [DEBUG] [Thread-307065] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:42:56.230 [DEBUG] [Thread-307065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:42:56.234 [DEBUG] [Thread-307065] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:42:56.236 [DEBUG] [Thread-307065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:42:56.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:42:56.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:42:56.240 [DEBUG] [Thread-307065] [transport.py] [_log()] userauth is OK
2025-12-24T18:42:56.240 [DEBUG] [Thread-307065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:42:56.241 [DEBUG] [Thread-307065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:42:56.241 [DEBUG] [Thread-307065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:42:56.241 [DEBUG] [Thread-307065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:42:56.272 [INFO] [Thread-307065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:42:56.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:42:56.895 [DEBUG] [Thread-307065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:42:56.895 [DEBUG] [Thread-307065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:42:56.896 [DEBUG] [Thread-307065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:42:56.937 [DEBUG] [Thread-307065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:42:56.937 [DEBUG] [Thread-307065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:42:56.940 [DEBUG] [Thread-307065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:42:56.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:42:56.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:42:56.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:42:56.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:42:56.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:42:56.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:42:56.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:42:56.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:42:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:42:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.695899 -999.00  +22.00  21.76     32   +4.90 1 1 1 1 1   887    0 16.80 -26.46 ----- 18.0 21.8 154.6 30.4 24.6 -26.0 24.9 -25.2 25.7 -24.2 25.8 -25.2
2025-12-24T18:42:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:42:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:42:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.695899
2025-12-24T18:42:56.970 [DEBUG] [Thread-307065] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:42:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:42:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:42:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:42:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:42:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:42:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:42:18', tmtdew=19.98, humidity=26.86, cloud=0.0, wind=28.69, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:42:05.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:42:57.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:42:57.073 [DEBUG] [Thread-307068] [transport.py] [_log()] starting thread (client mode): 0xf81c14b0
2025-12-24T18:42:57.073 [DEBUG] [Thread-307068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:42:57.087 [DEBUG] [Thread-307068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:42:57.087 [INFO] [Thread-307068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] client lang: <none>
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] server lang: <none>
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] kex follows: False
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:42:57.095 [DEBUG] [Thread-307068] [transport.py] [_log()] Compression: none
2025-12-24T18:42:57.096 [DEBUG] [Thread-307068] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:42:57.155 [DEBUG] [Thread-307068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:42:57.155 [DEBUG] [Thread-307068] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:42:57.155 [DEBUG] [Thread-307068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:42:57.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:42:57.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:42:57.212 [DEBUG] [Thread-307068] [transport.py] [_log()] userauth is OK
2025-12-24T18:42:57.212 [DEBUG] [Thread-307068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:42:57.212 [DEBUG] [Thread-307068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:42:57.212 [DEBUG] [Thread-307068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:42:57.212 [DEBUG] [Thread-307068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:42:57.226 [INFO] [Thread-307068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:42:57.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:42:57.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:42:58.038 [DEBUG] [Thread-307068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:42:58.038 [DEBUG] [Thread-307068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:42:58.086 [DEBUG] [Thread-307068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:42:58.086 [DEBUG] [Thread-307068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:42:58.093 [DEBUG] [Thread-307068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:42:58.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:42:58.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')
2025-12-24T18:42:58.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:42:58.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:42:58.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:42:58.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:42:58.126 [DEBUG] [Thread-307068] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:43:08.392 [DEBUG] [Thread-307070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:43:23.708 [DEBUG] [Thread-307071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:43:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:43:28.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:43:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:43:29.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 42, 52), 20.02, 26.93, 0.0, 29.96, 22.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:43:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:42:52
2025-12-24T18:43:29.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:43:29.551 [DEBUG] [Thread-307072] [transport.py] [_log()] starting thread (client mode): 0xf03bc220
2025-12-24T18:43:29.552 [DEBUG] [Thread-307072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:43:29.562 [DEBUG] [Thread-307072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:43:29.562 [INFO] [Thread-307072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] client lang: <none>
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] server lang: <none>
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] kex follows: False
2025-12-24T18:43:29.566 [DEBUG] [Thread-307072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:43:29.567 [DEBUG] [Thread-307072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:43:29.567 [DEBUG] [Thread-307072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:43:29.567 [DEBUG] [Thread-307072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:43:29.567 [DEBUG] [Thread-307072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:43:29.567 [DEBUG] [Thread-307072] [transport.py] [_log()] Compression: none
2025-12-24T18:43:29.567 [DEBUG] [Thread-307072] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:43:29.598 [DEBUG] [Thread-307072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:43:29.601 [DEBUG] [Thread-307072] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:43:29.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:43:29.604 [DEBUG] [Thread-307072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:43:29.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:43:29.606 [DEBUG] [Thread-307072] [transport.py] [_log()] userauth is OK
2025-12-24T18:43:29.606 [DEBUG] [Thread-307072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:43:29.606 [DEBUG] [Thread-307072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:43:29.606 [DEBUG] [Thread-307072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:43:29.606 [DEBUG] [Thread-307072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:43:29.626 [INFO] [Thread-307072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:43:29.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:43:30.305 [DEBUG] [Thread-307072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:43:30.305 [DEBUG] [Thread-307072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:43:30.306 [DEBUG] [Thread-307072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:43:30.346 [DEBUG] [Thread-307072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:43:30.346 [DEBUG] [Thread-307072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:43:30.350 [DEBUG] [Thread-307072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:43:30.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:43:30.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:43:30.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:43:30.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:43:30.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:43:30.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:43:30.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:43:30.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:43:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:43:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.696247 -999.00  +21.90  23.70     32   +4.90 1 1 1 1 1   887    0 16.68 -25.94 ----- 21.0 23.7 146.6 29.7 24.5 -26.1 24.9 -25.4 25.7 -23.9 25.8 -25.8
2025-12-24T18:43:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:43:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:43:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.696247
2025-12-24T18:43:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:43:30.390 [DEBUG] [Thread-307072] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:43:30.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:43:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:43:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:43:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:43:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:42:52', tmtdew=20.02, humidity=26.93, cloud=0.0, wind=29.96, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:42:35.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:43:30.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:43:30.496 [DEBUG] [Thread-307075] [transport.py] [_log()] starting thread (client mode): 0xf03bfcd0
2025-12-24T18:43:30.497 [DEBUG] [Thread-307075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:43:30.515 [DEBUG] [Thread-307075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:43:30.515 [INFO] [Thread-307075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:43:30.523 [DEBUG] [Thread-307075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:43:30.523 [DEBUG] [Thread-307075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] client lang: <none>
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] server lang: <none>
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] kex follows: False
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:43:30.524 [DEBUG] [Thread-307075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:43:30.525 [DEBUG] [Thread-307075] [transport.py] [_log()] Compression: none
2025-12-24T18:43:30.525 [DEBUG] [Thread-307075] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:43:30.579 [DEBUG] [Thread-307075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:43:30.579 [DEBUG] [Thread-307075] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:43:30.580 [DEBUG] [Thread-307075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:43:30.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:43:30.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:43:30.636 [DEBUG] [Thread-307075] [transport.py] [_log()] userauth is OK
2025-12-24T18:43:30.636 [DEBUG] [Thread-307075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:43:30.636 [DEBUG] [Thread-307075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:43:30.636 [DEBUG] [Thread-307075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:43:30.637 [DEBUG] [Thread-307075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:43:30.655 [INFO] [Thread-307075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:43:30.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:43:30.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:43:31.489 [DEBUG] [Thread-307075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:43:31.489 [DEBUG] [Thread-307075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:43:31.529 [DEBUG] [Thread-307075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:43:31.529 [DEBUG] [Thread-307075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:43:31.538 [DEBUG] [Thread-307075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:43:31.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:43:31.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:43:31.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:43:31.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:43:31.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:43:31.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:43:31.577 [DEBUG] [Thread-307075] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:43:38.848 [DEBUG] [Thread-307077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:43:51.861 [DEBUG] [Thread-307078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:43:54.060 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:43:54.067 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:43:54.090 [DEBUG] [Thread-307079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:44:01.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:44:01.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:44:01.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:44:02.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 43, 26), 19.85, 27.22, 0.0, 29.66, 22.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:44:02.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:43:26
2025-12-24T18:44:03.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:44:03.425 [DEBUG] [Thread-307080] [transport.py] [_log()] starting thread (client mode): 0xf81e68c0
2025-12-24T18:44:03.427 [DEBUG] [Thread-307080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:44:03.433 [DEBUG] [Thread-307080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:44:03.434 [INFO] [Thread-307080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:44:03.439 [DEBUG] [Thread-307080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:44:03.439 [DEBUG] [Thread-307080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:44:03.439 [DEBUG] [Thread-307080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] client lang: <none>
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] server lang: <none>
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] kex follows: False
2025-12-24T18:44:03.440 [DEBUG] [Thread-307080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:44:03.441 [DEBUG] [Thread-307080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:44:03.441 [DEBUG] [Thread-307080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:44:03.441 [DEBUG] [Thread-307080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:44:03.441 [DEBUG] [Thread-307080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:44:03.441 [DEBUG] [Thread-307080] [transport.py] [_log()] Compression: none
2025-12-24T18:44:03.441 [DEBUG] [Thread-307080] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:44:03.475 [DEBUG] [Thread-307080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:44:03.480 [DEBUG] [Thread-307080] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:44:03.482 [DEBUG] [Thread-307080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:44:03.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:44:03.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:44:03.486 [DEBUG] [Thread-307080] [transport.py] [_log()] userauth is OK
2025-12-24T18:44:03.486 [DEBUG] [Thread-307080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:44:03.486 [DEBUG] [Thread-307080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:44:03.486 [DEBUG] [Thread-307080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:44:03.486 [DEBUG] [Thread-307080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:44:03.506 [INFO] [Thread-307080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:44:03.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:44:04.148 [DEBUG] [Thread-307080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:44:04.149 [DEBUG] [Thread-307080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:44:04.151 [DEBUG] [Thread-307080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:44:04.189 [DEBUG] [Thread-307080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:44:04.190 [DEBUG] [Thread-307080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:44:04.193 [DEBUG] [Thread-307080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:44:04.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:44:04.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:44:04.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:44:04.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:44:04.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:44:04.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:44:04.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:44:04.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:44:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:44:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.696594 -999.00  +21.90  15.83     33   +4.90 1 1 1 1 1   887    0 16.15 -27.73 ----- 23.8 15.8 157.4 29.3 24.5 -25.7 24.8 -25.7 25.7 -24.3 25.8 -25.7
2025-12-24T18:44:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:44:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:44:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.696594
2025-12-24T18:44:04.227 [DEBUG] [Thread-307080] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:44:04.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:44:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:44:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:44:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:44:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:44:04.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:43:26', tmtdew=19.85, humidity=27.22, cloud=0.0, wind=29.66, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:43:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:44:04.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:44:04.342 [DEBUG] [Thread-307083] [transport.py] [_log()] starting thread (client mode): 0xf81c3100
2025-12-24T18:44:04.342 [DEBUG] [Thread-307083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:44:04.357 [DEBUG] [Thread-307083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:44:04.357 [INFO] [Thread-307083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] client lang: <none>
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] server lang: <none>
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] kex follows: False
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:44:04.365 [DEBUG] [Thread-307083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:44:04.366 [DEBUG] [Thread-307083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:44:04.366 [DEBUG] [Thread-307083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:44:04.366 [DEBUG] [Thread-307083] [transport.py] [_log()] Compression: none
2025-12-24T18:44:04.366 [DEBUG] [Thread-307083] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:44:04.424 [DEBUG] [Thread-307083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:44:04.424 [DEBUG] [Thread-307083] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:44:04.425 [DEBUG] [Thread-307083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:44:04.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:44:04.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:44:04.480 [DEBUG] [Thread-307083] [transport.py] [_log()] userauth is OK
2025-12-24T18:44:04.480 [DEBUG] [Thread-307083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:44:04.480 [DEBUG] [Thread-307083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:44:04.480 [DEBUG] [Thread-307083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:44:04.481 [DEBUG] [Thread-307083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:44:04.499 [INFO] [Thread-307083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:44:04.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:44:04.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:44:05.362 [DEBUG] [Thread-307083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:44:05.362 [DEBUG] [Thread-307083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:44:05.410 [DEBUG] [Thread-307083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:44:05.410 [DEBUG] [Thread-307083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:44:05.419 [DEBUG] [Thread-307083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:44:05.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:44:05.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:44:05.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:44:05.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:44:05.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:44:05.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:44:05.458 [DEBUG] [Thread-307083] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:44:09.151 [DEBUG] [Thread-307085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:44:24.319 [DEBUG] [Thread-307086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:44:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:44:35.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:44:35.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:44:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 43, 59), 19.78, 27.34, 0.0, 31.55, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:44:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:43:59
2025-12-24T18:44:36.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:44:36.848 [DEBUG] [Thread-307087] [transport.py] [_log()] starting thread (client mode): 0xf81e7580
2025-12-24T18:44:36.849 [DEBUG] [Thread-307087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:44:36.864 [DEBUG] [Thread-307087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:44:36.865 [INFO] [Thread-307087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:44:36.868 [DEBUG] [Thread-307087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] client lang: <none>
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] server lang: <none>
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] kex follows: False
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] Compression: none
2025-12-24T18:44:36.869 [DEBUG] [Thread-307087] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:44:36.897 [DEBUG] [Thread-307087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:44:36.900 [DEBUG] [Thread-307087] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:44:36.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:44:36.902 [DEBUG] [Thread-307087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:44:36.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:44:36.904 [DEBUG] [Thread-307087] [transport.py] [_log()] userauth is OK
2025-12-24T18:44:36.904 [DEBUG] [Thread-307087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:44:36.904 [DEBUG] [Thread-307087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:44:36.904 [DEBUG] [Thread-307087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:44:36.904 [DEBUG] [Thread-307087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:44:36.922 [INFO] [Thread-307087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:44:36.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:44:37.534 [DEBUG] [Thread-307087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:44:37.535 [DEBUG] [Thread-307087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:44:37.536 [DEBUG] [Thread-307087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:44:37.577 [DEBUG] [Thread-307087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:44:37.577 [DEBUG] [Thread-307087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:44:37.581 [DEBUG] [Thread-307087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:44:37.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:44:37.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:44:37.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:44:37.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:44:37.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:44:37.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:44:37.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:44:37.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:44:37.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:44:37.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.697288 -999.00  +21.70  27.14     33   +4.90 1 1 1 1 1   887    0 16.05 -27.43 ----- 19.5 27.1 146.0 33.7 24.3 -26.0 24.6 -25.6 25.2 -24.9 25.4 -26.6
2025-12-24T18:44:37.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:44:37.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:44:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.697288
2025-12-24T18:44:37.615 [DEBUG] [Thread-307087] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:44:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:44:37.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:44:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:44:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:44:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:44:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:43:59', tmtdew=19.78, humidity=27.34, cloud=0.0, wind=31.55, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:44:05.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:44:37.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:44:37.734 [DEBUG] [Thread-307090] [transport.py] [_log()] starting thread (client mode): 0xf81e6950
2025-12-24T18:44:37.734 [DEBUG] [Thread-307090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:44:37.749 [DEBUG] [Thread-307090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:44:37.749 [INFO] [Thread-307090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] client lang: <none>
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] server lang: <none>
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] kex follows: False
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] Compression: none
2025-12-24T18:44:37.757 [DEBUG] [Thread-307090] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:44:37.815 [DEBUG] [Thread-307090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:44:37.815 [DEBUG] [Thread-307090] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:44:37.815 [DEBUG] [Thread-307090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:44:37.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:44:37.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:44:37.872 [DEBUG] [Thread-307090] [transport.py] [_log()] userauth is OK
2025-12-24T18:44:37.872 [DEBUG] [Thread-307090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:44:37.872 [DEBUG] [Thread-307090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:44:37.872 [DEBUG] [Thread-307090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:44:37.872 [DEBUG] [Thread-307090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:44:37.891 [INFO] [Thread-307090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:44:37.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:44:37.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:44:38.730 [DEBUG] [Thread-307090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:44:38.731 [DEBUG] [Thread-307090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:44:38.778 [DEBUG] [Thread-307090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:44:38.778 [DEBUG] [Thread-307090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:44:38.788 [DEBUG] [Thread-307090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:44:38.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:44:38.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:44:38.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
2025-12-24T18:44:38.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:44:38.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:44:38.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:44:38.827 [DEBUG] [Thread-307090] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:44:39.443 [DEBUG] [Thread-307092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:44:52.115 [DEBUG] [Thread-307093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:44:54.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:44:54.211 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:44:54.577 [DEBUG] [Thread-307094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:45:08.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:45:08.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:45:08.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
2025-12-24T18:45:09.635 [DEBUG] [Thread-307095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:45:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 44, 33), 19.52, 27.36, 0.0, 28.85, 21.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:45:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:44:33
2025-12-24T18:45:09.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:45:10.117 [DEBUG] [Thread-307096] [transport.py] [_log()] starting thread (client mode): 0xf81e60b0
2025-12-24T18:45:10.118 [DEBUG] [Thread-307096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:45:10.130 [DEBUG] [Thread-307096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:45:10.130 [INFO] [Thread-307096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] client lang: <none>
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] server lang: <none>
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] kex follows: False
2025-12-24T18:45:10.134 [DEBUG] [Thread-307096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:45:10.135 [DEBUG] [Thread-307096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:45:10.135 [DEBUG] [Thread-307096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:45:10.135 [DEBUG] [Thread-307096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:45:10.135 [DEBUG] [Thread-307096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:45:10.135 [DEBUG] [Thread-307096] [transport.py] [_log()] Compression: none
2025-12-24T18:45:10.135 [DEBUG] [Thread-307096] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:45:10.165 [DEBUG] [Thread-307096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:45:10.168 [DEBUG] [Thread-307096] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:45:10.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:45:10.170 [DEBUG] [Thread-307096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:45:10.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:45:10.172 [DEBUG] [Thread-307096] [transport.py] [_log()] userauth is OK
2025-12-24T18:45:10.172 [DEBUG] [Thread-307096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:45:10.172 [DEBUG] [Thread-307096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:45:10.172 [DEBUG] [Thread-307096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:45:10.172 [DEBUG] [Thread-307096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:45:10.189 [INFO] [Thread-307096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:45:10.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:45:11.021 [DEBUG] [Thread-307096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:45:11.021 [DEBUG] [Thread-307096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:45:11.021 [DEBUG] [Thread-307096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:45:11.062 [DEBUG] [Thread-307096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:45:11.062 [DEBUG] [Thread-307096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:45:11.064 [DEBUG] [Thread-307096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:45:11.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:45:11.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:45:11.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:45:11.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:45:11.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:45:11.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:45:11.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:45:11.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:45:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:45:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.697635 -999.00  +21.70  16.94     33   +4.90 1 1 1 1 1   887    0 16.14 -31.66 ----- 18.0 16.9 161.1 25.6 24.2 -26.1 24.5 -25.4 25.1 -24.4 25.3 -25.9
2025-12-24T18:45:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:45:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:45:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.697635
2025-12-24T18:45:11.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:45:11.105 [DEBUG] [Thread-307096] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:45:11.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:45:11.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:45:11.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:45:11.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:45:11.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:44:33', tmtdew=19.52, humidity=27.36, cloud=0.0, wind=28.85, temperature=21.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:44:35.664', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:45:11.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:45:11.195 [DEBUG] [Thread-307099] [transport.py] [_log()] starting thread (client mode): 0xf572a170
2025-12-24T18:45:11.195 [DEBUG] [Thread-307099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:45:11.210 [DEBUG] [Thread-307099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:45:11.210 [INFO] [Thread-307099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:45:11.217 [DEBUG] [Thread-307099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] client lang: <none>
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] server lang: <none>
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] kex follows: False
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] Compression: none
2025-12-24T18:45:11.218 [DEBUG] [Thread-307099] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:45:11.274 [DEBUG] [Thread-307099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:45:11.274 [DEBUG] [Thread-307099] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:45:11.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:45:11.275 [DEBUG] [Thread-307099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:45:11.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:45:11.331 [DEBUG] [Thread-307099] [transport.py] [_log()] userauth is OK
2025-12-24T18:45:11.332 [DEBUG] [Thread-307099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:45:11.332 [DEBUG] [Thread-307099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:45:11.332 [DEBUG] [Thread-307099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:45:11.332 [DEBUG] [Thread-307099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:45:11.345 [INFO] [Thread-307099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:45:11.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:45:11.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:45:12.135 [DEBUG] [Thread-307099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:45:12.135 [DEBUG] [Thread-307099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:45:12.143 [DEBUG] [Thread-307099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:45:12.144 [DEBUG] [Thread-307099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:45:12.154 [DEBUG] [Thread-307099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:45:12.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:45:12.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:45:12.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:45:12.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:45:12.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:45:12.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:45:12.197 [DEBUG] [Thread-307099] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:45:24.728 [DEBUG] [Thread-307101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:45:39.911 [DEBUG] [Thread-307102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:45:42.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:45:42.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:45:42.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:45:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 45, 6), 19.49, 27.41, 0.0, 30.3, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:45:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:45:06
2025-12-24T18:45:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:45:43.802 [DEBUG] [Thread-307103] [transport.py] [_log()] starting thread (client mode): 0xf572a7d0
2025-12-24T18:45:43.804 [DEBUG] [Thread-307103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:45:43.811 [DEBUG] [Thread-307103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:45:43.813 [INFO] [Thread-307103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] client lang: <none>
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] server lang: <none>
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] kex follows: False
2025-12-24T18:45:43.828 [DEBUG] [Thread-307103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:45:43.829 [DEBUG] [Thread-307103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:45:43.829 [DEBUG] [Thread-307103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:45:43.829 [DEBUG] [Thread-307103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:45:43.829 [DEBUG] [Thread-307103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:45:43.829 [DEBUG] [Thread-307103] [transport.py] [_log()] Compression: none
2025-12-24T18:45:43.829 [DEBUG] [Thread-307103] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:45:43.876 [DEBUG] [Thread-307103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:45:43.880 [DEBUG] [Thread-307103] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:45:43.880 [DEBUG] [Thread-307103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:45:43.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:45:43.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:45:43.896 [DEBUG] [Thread-307103] [transport.py] [_log()] userauth is OK
2025-12-24T18:45:43.897 [DEBUG] [Thread-307103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:45:43.897 [DEBUG] [Thread-307103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:45:43.897 [DEBUG] [Thread-307103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:45:43.897 [DEBUG] [Thread-307103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:45:43.915 [INFO] [Thread-307103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:45:43.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:45:44.494 [DEBUG] [Thread-307103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:45:44.495 [DEBUG] [Thread-307103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:45:44.496 [DEBUG] [Thread-307103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:45:44.536 [DEBUG] [Thread-307103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:45:44.536 [DEBUG] [Thread-307103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:45:44.539 [DEBUG] [Thread-307103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:45:44.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:45:44.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:45:44.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:45:44.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:45:44.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:45:44.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:45:44.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:45:44.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:45:44.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:45:44.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.697982 -999.00  +21.70  19.90     33   +4.90 1 1 1 1 1   887    0 16.20 -30.70 ----- 23.0 19.9 152.6 27.9 24.2 -25.9 24.5 -26.2 25.1 -23.7 25.2 -25.3
2025-12-24T18:45:44.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:45:44.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:45:44.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.697982
2025-12-24T18:45:44.575 [DEBUG] [Thread-307103] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:45:44.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:45:44.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:45:44.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:45:44.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:45:44.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:45:44.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:45:06', tmtdew=19.49, humidity=27.41, cloud=0.0, wind=30.3, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:45:05.645', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:45:44.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:45:44.696 [DEBUG] [Thread-307106] [transport.py] [_log()] starting thread (client mode): 0xf572b0a0
2025-12-24T18:45:44.696 [DEBUG] [Thread-307106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:45:44.711 [DEBUG] [Thread-307106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:45:44.711 [INFO] [Thread-307106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] client lang: <none>
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] server lang: <none>
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] kex follows: False
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:45:44.719 [DEBUG] [Thread-307106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:45:44.720 [DEBUG] [Thread-307106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:45:44.720 [DEBUG] [Thread-307106] [transport.py] [_log()] Compression: none
2025-12-24T18:45:44.720 [DEBUG] [Thread-307106] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:45:44.776 [DEBUG] [Thread-307106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:45:44.777 [DEBUG] [Thread-307106] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:45:44.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:45:44.779 [DEBUG] [Thread-307106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:45:44.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:45:44.832 [DEBUG] [Thread-307106] [transport.py] [_log()] userauth is OK
2025-12-24T18:45:44.832 [DEBUG] [Thread-307106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:45:44.833 [DEBUG] [Thread-307106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:45:44.833 [DEBUG] [Thread-307106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:45:44.833 [DEBUG] [Thread-307106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:45:44.852 [INFO] [Thread-307106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:45:44.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:45:44.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:45:45.644 [DEBUG] [Thread-307106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:45:45.644 [DEBUG] [Thread-307106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:45:45.692 [DEBUG] [Thread-307106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:45:45.692 [DEBUG] [Thread-307106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:45:45.701 [DEBUG] [Thread-307106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:45:45.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:45:45.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:45:45.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:45:45.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:45:45.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:45:45.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:45:45.739 [DEBUG] [Thread-307106] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:45:52.373 [DEBUG] [Thread-307108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:45:54.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:45:54.350 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:45:55.000 [DEBUG] [Thread-307109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:46:10.155 [DEBUG] [Thread-307110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:46:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:46:15.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:46:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:46:16.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 45, 39), 19.54, 27.41, 0.0, 28.65, 21.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:46:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:45:39
2025-12-24T18:46:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:46:17.107 [DEBUG] [Thread-307111] [transport.py] [_log()] starting thread (client mode): 0xf572a710
2025-12-24T18:46:17.107 [DEBUG] [Thread-307111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:46:17.121 [DEBUG] [Thread-307111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:46:17.121 [INFO] [Thread-307111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:46:17.125 [DEBUG] [Thread-307111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] client lang: <none>
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] server lang: <none>
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] kex follows: False
2025-12-24T18:46:17.126 [DEBUG] [Thread-307111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:46:17.127 [DEBUG] [Thread-307111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:46:17.127 [DEBUG] [Thread-307111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:46:17.128 [DEBUG] [Thread-307111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:46:17.128 [DEBUG] [Thread-307111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:46:17.128 [DEBUG] [Thread-307111] [transport.py] [_log()] Compression: none
2025-12-24T18:46:17.128 [DEBUG] [Thread-307111] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:46:17.166 [DEBUG] [Thread-307111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:46:17.171 [DEBUG] [Thread-307111] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:46:17.174 [DEBUG] [Thread-307111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:46:17.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:46:17.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:46:17.179 [DEBUG] [Thread-307111] [transport.py] [_log()] userauth is OK
2025-12-24T18:46:17.179 [DEBUG] [Thread-307111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:46:17.179 [DEBUG] [Thread-307111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:46:17.179 [DEBUG] [Thread-307111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:46:17.180 [DEBUG] [Thread-307111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:46:17.219 [INFO] [Thread-307111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:46:17.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:46:17.853 [DEBUG] [Thread-307111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:46:17.854 [DEBUG] [Thread-307111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:46:17.864 [DEBUG] [Thread-307111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:46:17.896 [DEBUG] [Thread-307111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:46:17.896 [DEBUG] [Thread-307111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:46:17.900 [DEBUG] [Thread-307111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:46:17.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:46:17.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:46:17.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:46:17.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:46:17.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:46:17.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:46:17.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:46:17.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:46:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:46:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.698330 -999.00  +21.70  20.54     33   +4.90 1 1 1 1 1   887    0 16.47 -34.92 ----- 15.9 20.5 146.2 29.7 24.2 -25.9 24.5 -25.2 25.2 -23.7 25.3 -25.5
2025-12-24T18:46:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:46:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:46:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.698330
2025-12-24T18:46:17.935 [DEBUG] [Thread-307111] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:46:17.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:46:17.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:46:17.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:46:17.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:46:17.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:46:17.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:45:39', tmtdew=19.54, humidity=27.41, cloud=0.0, wind=28.65, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:45:35.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:46:18.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:46:18.052 [DEBUG] [Thread-307114] [transport.py] [_log()] starting thread (client mode): 0xf5728910
2025-12-24T18:46:18.052 [DEBUG] [Thread-307114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:46:18.066 [DEBUG] [Thread-307114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:46:18.066 [INFO] [Thread-307114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] client lang: <none>
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] server lang: <none>
2025-12-24T18:46:18.074 [DEBUG] [Thread-307114] [transport.py] [_log()] kex follows: False
2025-12-24T18:46:18.075 [DEBUG] [Thread-307114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:46:18.075 [DEBUG] [Thread-307114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:46:18.075 [DEBUG] [Thread-307114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:46:18.075 [DEBUG] [Thread-307114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:46:18.076 [DEBUG] [Thread-307114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:46:18.076 [DEBUG] [Thread-307114] [transport.py] [_log()] Compression: none
2025-12-24T18:46:18.076 [DEBUG] [Thread-307114] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:46:18.132 [DEBUG] [Thread-307114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:46:18.133 [DEBUG] [Thread-307114] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:46:18.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:46:18.134 [DEBUG] [Thread-307114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:46:18.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:46:18.188 [DEBUG] [Thread-307114] [transport.py] [_log()] userauth is OK
2025-12-24T18:46:18.189 [DEBUG] [Thread-307114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:46:18.189 [DEBUG] [Thread-307114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:46:18.189 [DEBUG] [Thread-307114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:46:18.189 [DEBUG] [Thread-307114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:46:18.208 [INFO] [Thread-307114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:46:18.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:46:18.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:46:19.001 [DEBUG] [Thread-307114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:46:19.001 [DEBUG] [Thread-307114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:46:19.049 [DEBUG] [Thread-307114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:46:19.049 [DEBUG] [Thread-307114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:46:19.059 [DEBUG] [Thread-307114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:46:19.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:46:19.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:46:19.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:46:19.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:46:19.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:46:19.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:46:19.097 [DEBUG] [Thread-307114] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:46:25.245 [DEBUG] [Thread-307116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:46:40.413 [DEBUG] [Thread-307117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:46:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:46:49.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:46:49.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:46:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 46, 13), 19.53, 27.41, 0.0, 25.74, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:46:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:46:13
2025-12-24T18:46:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:46:50.421 [DEBUG] [Thread-307118] [transport.py] [_log()] starting thread (client mode): 0xf572bf10
2025-12-24T18:46:50.421 [DEBUG] [Thread-307118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:46:50.430 [DEBUG] [Thread-307118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:46:50.430 [INFO] [Thread-307118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] client lang: <none>
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] server lang: <none>
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] kex follows: False
2025-12-24T18:46:50.435 [DEBUG] [Thread-307118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:46:50.436 [DEBUG] [Thread-307118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:46:50.436 [DEBUG] [Thread-307118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:46:50.436 [DEBUG] [Thread-307118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:46:50.436 [DEBUG] [Thread-307118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:46:50.436 [DEBUG] [Thread-307118] [transport.py] [_log()] Compression: none
2025-12-24T18:46:50.436 [DEBUG] [Thread-307118] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:46:50.473 [DEBUG] [Thread-307118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:46:50.476 [DEBUG] [Thread-307118] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:46:50.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:46:50.478 [DEBUG] [Thread-307118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:46:50.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:46:50.481 [DEBUG] [Thread-307118] [transport.py] [_log()] userauth is OK
2025-12-24T18:46:50.483 [DEBUG] [Thread-307118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:46:50.484 [DEBUG] [Thread-307118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:46:50.484 [DEBUG] [Thread-307118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:46:50.484 [DEBUG] [Thread-307118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:46:50.502 [INFO] [Thread-307118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:46:50.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:46:51.147 [DEBUG] [Thread-307118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:46:51.148 [DEBUG] [Thread-307118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:46:51.149 [DEBUG] [Thread-307118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:46:51.190 [DEBUG] [Thread-307118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:46:51.190 [DEBUG] [Thread-307118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:46:51.193 [DEBUG] [Thread-307118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:46:51.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:46:51.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:46:51.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:46:51.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:46:51.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:46:51.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:46:51.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:46:51.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:46:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:46:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.698677 -999.00  +21.70  18.81     33   +4.90 1 1 1 1 1   887    0 16.29 -32.12 ----- 21.0 18.8 164.5 25.6 24.1 -25.9 24.4 -25.0 25.1 -23.7 25.2 -25.3
2025-12-24T18:46:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:46:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:46:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.698677
2025-12-24T18:46:51.229 [DEBUG] [Thread-307118] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:46:51.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:46:51.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:46:51.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:46:51.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:46:51.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:46:51.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:46:13', tmtdew=19.53, humidity=27.41, cloud=0.0, wind=25.74, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:46:05.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:46:51.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:46:51.349 [DEBUG] [Thread-307121] [transport.py] [_log()] starting thread (client mode): 0xf572ab00
2025-12-24T18:46:51.349 [DEBUG] [Thread-307121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:46:51.363 [DEBUG] [Thread-307121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:46:51.363 [INFO] [Thread-307121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:46:51.370 [DEBUG] [Thread-307121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:46:51.370 [DEBUG] [Thread-307121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] client lang: <none>
2025-12-24T18:46:51.371 [DEBUG] [Thread-307121] [transport.py] [_log()] server lang: <none>
2025-12-24T18:46:51.372 [DEBUG] [Thread-307121] [transport.py] [_log()] kex follows: False
2025-12-24T18:46:51.372 [DEBUG] [Thread-307121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:46:51.372 [DEBUG] [Thread-307121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:46:51.372 [DEBUG] [Thread-307121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:46:51.372 [DEBUG] [Thread-307121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:46:51.372 [DEBUG] [Thread-307121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:46:51.373 [DEBUG] [Thread-307121] [transport.py] [_log()] Compression: none
2025-12-24T18:46:51.373 [DEBUG] [Thread-307121] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:46:51.428 [DEBUG] [Thread-307121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:46:51.428 [DEBUG] [Thread-307121] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:46:51.429 [DEBUG] [Thread-307121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:46:51.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:46:51.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:46:51.484 [DEBUG] [Thread-307121] [transport.py] [_log()] userauth is OK
2025-12-24T18:46:51.484 [DEBUG] [Thread-307121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:46:51.485 [DEBUG] [Thread-307121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:46:51.485 [DEBUG] [Thread-307121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:46:51.485 [DEBUG] [Thread-307121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:46:51.503 [INFO] [Thread-307121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:46:51.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:46:51.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:46:52.323 [DEBUG] [Thread-307121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:46:52.323 [DEBUG] [Thread-307121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:46:52.362 [DEBUG] [Thread-307121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:46:52.362 [DEBUG] [Thread-307121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:46:52.370 [DEBUG] [Thread-307121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:46:52.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:46:52.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:46:52.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
2025-12-24T18:46:52.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:46:52.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:46:52.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:46:52.403 [DEBUG] [Thread-307121] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:46:52.601 [DEBUG] [Thread-307123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:46:54.519 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:46:54.520 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:46:55.511 [DEBUG] [Thread-307124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:47:10.714 [DEBUG] [Thread-307125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:47:22.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:47:22.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:47:22.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:47:23.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 46, 46), 19.58, 27.34, 0.0, 23.82, 21.78, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:47:23.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:46:46
2025-12-24T18:47:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:47:24.247 [DEBUG] [Thread-307126] [transport.py] [_log()] starting thread (client mode): 0xf5728fa0
2025-12-24T18:47:24.249 [DEBUG] [Thread-307126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:47:24.256 [DEBUG] [Thread-307126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:47:24.256 [INFO] [Thread-307126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] client lang: <none>
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] server lang: <none>
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] kex follows: False
2025-12-24T18:47:24.261 [DEBUG] [Thread-307126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:47:24.262 [DEBUG] [Thread-307126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:47:24.262 [DEBUG] [Thread-307126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:47:24.263 [DEBUG] [Thread-307126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:47:24.263 [DEBUG] [Thread-307126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:47:24.263 [DEBUG] [Thread-307126] [transport.py] [_log()] Compression: none
2025-12-24T18:47:24.263 [DEBUG] [Thread-307126] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:47:24.294 [DEBUG] [Thread-307126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:47:24.298 [DEBUG] [Thread-307126] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:47:24.299 [DEBUG] [Thread-307126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:47:24.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:47:24.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:47:24.302 [DEBUG] [Thread-307126] [transport.py] [_log()] userauth is OK
2025-12-24T18:47:24.302 [DEBUG] [Thread-307126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:47:24.302 [DEBUG] [Thread-307126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:47:24.302 [DEBUG] [Thread-307126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:47:24.302 [DEBUG] [Thread-307126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:47:24.320 [INFO] [Thread-307126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:47:24.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:47:24.993 [DEBUG] [Thread-307126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:47:24.993 [DEBUG] [Thread-307126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:47:24.994 [DEBUG] [Thread-307126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:47:25.034 [DEBUG] [Thread-307126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:47:25.034 [DEBUG] [Thread-307126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:47:25.036 [DEBUG] [Thread-307126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:47:25.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:47:25.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:47:25.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:47:25.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:47:25.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:47:25.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:47:25.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:47:25.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:47:25.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:47:25.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.699024 -999.00  +21.70  13.69     33   +4.90 1 1 1 1 1   887    0 16.26 -32.64 ----- 19.6 13.7 140.4 29.6 24.1 -25.4 24.4 -24.7 25.0 -23.6 25.1 -25.4
2025-12-24T18:47:25.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:47:25.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:47:25.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.699024
2025-12-24T18:47:25.065 [DEBUG] [Thread-307126] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:47:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:47:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:47:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:47:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:47:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:47:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:46:46', tmtdew=19.58, humidity=27.34, cloud=0.0, wind=23.82, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:46:35.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:47:25.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:47:25.170 [DEBUG] [Thread-307129] [transport.py] [_log()] starting thread (client mode): 0xf572afb0
2025-12-24T18:47:25.170 [DEBUG] [Thread-307129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:47:25.185 [DEBUG] [Thread-307129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:47:25.185 [INFO] [Thread-307129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] client lang: <none>
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] server lang: <none>
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] kex follows: False
2025-12-24T18:47:25.192 [DEBUG] [Thread-307129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:47:25.193 [DEBUG] [Thread-307129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:47:25.193 [DEBUG] [Thread-307129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:47:25.193 [DEBUG] [Thread-307129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:47:25.193 [DEBUG] [Thread-307129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:47:25.193 [DEBUG] [Thread-307129] [transport.py] [_log()] Compression: none
2025-12-24T18:47:25.193 [DEBUG] [Thread-307129] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:47:25.250 [DEBUG] [Thread-307129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:47:25.251 [DEBUG] [Thread-307129] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:47:25.251 [DEBUG] [Thread-307129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:47:25.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:47:25.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:47:25.307 [DEBUG] [Thread-307129] [transport.py] [_log()] userauth is OK
2025-12-24T18:47:25.307 [DEBUG] [Thread-307129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:47:25.307 [DEBUG] [Thread-307129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:47:25.308 [DEBUG] [Thread-307129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:47:25.308 [DEBUG] [Thread-307129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:47:25.324 [INFO] [Thread-307129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:47:25.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:47:25.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:47:25.813 [DEBUG] [Thread-307131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:47:26.174 [DEBUG] [Thread-307129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:47:26.175 [DEBUG] [Thread-307129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:47:26.222 [DEBUG] [Thread-307129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:47:26.222 [DEBUG] [Thread-307129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:47:26.231 [DEBUG] [Thread-307129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:47:26.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:47:26.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')
2025-12-24T18:47:26.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
2025-12-24T18:47:26.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:47:26.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:47:26.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:47:26.270 [DEBUG] [Thread-307129] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:47:41.116 [DEBUG] [Thread-307132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:47:52.913 [DEBUG] [Thread-307134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:47:54.662 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:47:54.663 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:47:56.213 [DEBUG] [Thread-307135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:47:56.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:47:56.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:47:56.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:47:57.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 47, 19), 19.62, 27.27, 0.0, 22.92, 21.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:47:57.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:47:19
2025-12-24T18:47:57.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:47:57.646 [DEBUG] [Thread-307136] [transport.py] [_log()] starting thread (client mode): 0xf5728490
2025-12-24T18:47:57.648 [DEBUG] [Thread-307136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:47:57.653 [DEBUG] [Thread-307136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:47:57.653 [INFO] [Thread-307136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] client lang: <none>
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] server lang: <none>
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] kex follows: False
2025-12-24T18:47:57.660 [DEBUG] [Thread-307136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:47:57.661 [DEBUG] [Thread-307136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:47:57.661 [DEBUG] [Thread-307136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:47:57.661 [DEBUG] [Thread-307136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:47:57.661 [DEBUG] [Thread-307136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:47:57.661 [DEBUG] [Thread-307136] [transport.py] [_log()] Compression: none
2025-12-24T18:47:57.661 [DEBUG] [Thread-307136] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:47:57.697 [DEBUG] [Thread-307136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:47:57.701 [DEBUG] [Thread-307136] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:47:57.703 [DEBUG] [Thread-307136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:47:57.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:47:57.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:47:57.709 [DEBUG] [Thread-307136] [transport.py] [_log()] userauth is OK
2025-12-24T18:47:57.709 [DEBUG] [Thread-307136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:47:57.709 [DEBUG] [Thread-307136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:47:57.709 [DEBUG] [Thread-307136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:47:57.709 [DEBUG] [Thread-307136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:47:57.749 [INFO] [Thread-307136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:47:57.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:47:58.412 [DEBUG] [Thread-307136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:47:58.412 [DEBUG] [Thread-307136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:47:58.422 [DEBUG] [Thread-307136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:47:58.454 [DEBUG] [Thread-307136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:47:58.454 [DEBUG] [Thread-307136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:47:58.457 [DEBUG] [Thread-307136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:47:58.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:47:58.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:47:58.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:47:58.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:47:58.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:47:58.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:47:58.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:47:58.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:47:58.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:47:58.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.699372 -999.00  +21.80  20.28     33   +4.90 1 1 1 1 1   887    0 16.18 -33.15 ----- 23.0 20.3 162.2 29.7 24.1 -26.1 24.4 -25.4 25.1 -24.0 25.2 -24.9
2025-12-24T18:47:58.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:47:58.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:47:58.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.699372
2025-12-24T18:47:58.488 [DEBUG] [Thread-307136] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:47:58.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:47:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:47:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:47:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:47:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:47:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:47:19', tmtdew=19.62, humidity=27.27, cloud=0.0, wind=22.92, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:47:05.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:47:58.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:47:58.584 [DEBUG] [Thread-307139] [transport.py] [_log()] starting thread (client mode): 0xf5729690
2025-12-24T18:47:58.584 [DEBUG] [Thread-307139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:47:58.599 [DEBUG] [Thread-307139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:47:58.599 [INFO] [Thread-307139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] client lang: <none>
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] server lang: <none>
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] kex follows: False
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:47:58.607 [DEBUG] [Thread-307139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:47:58.608 [DEBUG] [Thread-307139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:47:58.608 [DEBUG] [Thread-307139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:47:58.608 [DEBUG] [Thread-307139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:47:58.608 [DEBUG] [Thread-307139] [transport.py] [_log()] Compression: none
2025-12-24T18:47:58.608 [DEBUG] [Thread-307139] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:47:58.668 [DEBUG] [Thread-307139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:47:58.669 [DEBUG] [Thread-307139] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:47:58.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:47:58.670 [DEBUG] [Thread-307139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:47:58.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:47:58.724 [DEBUG] [Thread-307139] [transport.py] [_log()] userauth is OK
2025-12-24T18:47:58.724 [DEBUG] [Thread-307139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:47:58.724 [DEBUG] [Thread-307139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:47:58.724 [DEBUG] [Thread-307139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:47:58.724 [DEBUG] [Thread-307139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:47:58.742 [INFO] [Thread-307139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:47:58.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:47:58.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:47:59.571 [DEBUG] [Thread-307139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:47:59.572 [DEBUG] [Thread-307139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:47:59.619 [DEBUG] [Thread-307139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:47:59.619 [DEBUG] [Thread-307139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:47:59.628 [DEBUG] [Thread-307139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:47:59.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:47:59.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:47:59.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:47:59.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:47:59.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:47:59.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:47:59.666 [DEBUG] [Thread-307139] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:48:11.300 [DEBUG] [Thread-307141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:48:26.490 [DEBUG] [Thread-307142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:48:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:48:29.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:48:29.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:48:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 47, 53), 19.81, 27.21, 0.0, 26.98, 21.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:48:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:47:53
2025-12-24T18:48:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:48:31.066 [DEBUG] [Thread-307143] [transport.py] [_log()] starting thread (client mode): 0xf5728940
2025-12-24T18:48:31.067 [DEBUG] [Thread-307143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:48:31.081 [DEBUG] [Thread-307143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:48:31.081 [INFO] [Thread-307143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:48:31.086 [DEBUG] [Thread-307143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:48:31.086 [DEBUG] [Thread-307143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:48:31.086 [DEBUG] [Thread-307143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] client lang: <none>
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] server lang: <none>
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] kex follows: False
2025-12-24T18:48:31.087 [DEBUG] [Thread-307143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:48:31.088 [DEBUG] [Thread-307143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:48:31.088 [DEBUG] [Thread-307143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:48:31.088 [DEBUG] [Thread-307143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:48:31.088 [DEBUG] [Thread-307143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:48:31.089 [DEBUG] [Thread-307143] [transport.py] [_log()] Compression: none
2025-12-24T18:48:31.089 [DEBUG] [Thread-307143] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:48:31.128 [DEBUG] [Thread-307143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:48:31.132 [DEBUG] [Thread-307143] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:48:31.134 [DEBUG] [Thread-307143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:48:31.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:48:31.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:48:31.139 [DEBUG] [Thread-307143] [transport.py] [_log()] userauth is OK
2025-12-24T18:48:31.139 [DEBUG] [Thread-307143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:48:31.140 [DEBUG] [Thread-307143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:48:31.140 [DEBUG] [Thread-307143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:48:31.140 [DEBUG] [Thread-307143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:48:31.167 [INFO] [Thread-307143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:48:31.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:48:31.930 [DEBUG] [Thread-307143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:48:31.931 [DEBUG] [Thread-307143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:48:31.932 [DEBUG] [Thread-307143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:48:31.971 [DEBUG] [Thread-307143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:48:31.971 [DEBUG] [Thread-307143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:48:31.974 [DEBUG] [Thread-307143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:48:31.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:48:31.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:48:31.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:48:31.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:48:31.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:48:32.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:48:32.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:48:32.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:48:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:48:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.699719 -999.00  +21.80  21.23     33   +4.90 1 1 1 1 1   887    0 16.22 -32.63 ----- 15.3 21.2 168.6 30.5 24.1 -25.9 24.4 -25.1 25.0 -23.2 25.1 -24.9
2025-12-24T18:48:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:48:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:48:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.699719
2025-12-24T18:48:32.008 [DEBUG] [Thread-307143] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:48:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:48:32.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:48:32.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:48:32.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:48:32.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:48:32.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:47:53', tmtdew=19.81, humidity=27.21, cloud=0.0, wind=26.98, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:47:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:48:32.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:48:41.654 [DEBUG] [Thread-307146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:48:53.457 [DEBUG] [Thread-307147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:48:54.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:48:54.809 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:48:56.814 [DEBUG] [Thread-307148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:49:11.971 [DEBUG] [Thread-307149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:49:27.115 [DEBUG] [Thread-307150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:49:42.261 [DEBUG] [Thread-307151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:49:53.928 [DEBUG] [Thread-307152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:49:54.953 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:49:54.954 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:49:57.368 [DEBUG] [Thread-307153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:50:12.503 [DEBUG] [Thread-307154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:50:27.624 [DEBUG] [Thread-307155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:50:42.733 [DEBUG] [Thread-307156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:50:47.158 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T18:50:54.207 [DEBUG] [Thread-307157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:50:55.097 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:50:55.098 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:50:57.807 [DEBUG] [Thread-307158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:51:12.930 [DEBUG] [Thread-307159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:51:17.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:51:17.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:51:17.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:51:18.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 50, 41), 19.87, 27.03, 0.0, 23.26, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:51:18.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:50:41
2025-12-24T18:51:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:51:18.524 [DEBUG] [Thread-307160] [transport.py] [_log()] starting thread (client mode): 0xf5729720
2025-12-24T18:51:18.525 [DEBUG] [Thread-307160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:51:18.537 [DEBUG] [Thread-307160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:51:18.537 [INFO] [Thread-307160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] client lang: <none>
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] server lang: <none>
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] kex follows: False
2025-12-24T18:51:18.541 [DEBUG] [Thread-307160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:51:18.542 [DEBUG] [Thread-307160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:51:18.542 [DEBUG] [Thread-307160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:51:18.542 [DEBUG] [Thread-307160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:51:18.542 [DEBUG] [Thread-307160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:51:18.542 [DEBUG] [Thread-307160] [transport.py] [_log()] Compression: none
2025-12-24T18:51:18.542 [DEBUG] [Thread-307160] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:51:18.575 [DEBUG] [Thread-307160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:51:18.579 [DEBUG] [Thread-307160] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:51:18.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:51:18.581 [DEBUG] [Thread-307160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:51:18.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:51:18.584 [DEBUG] [Thread-307160] [transport.py] [_log()] userauth is OK
2025-12-24T18:51:18.584 [DEBUG] [Thread-307160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:51:18.584 [DEBUG] [Thread-307160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:51:18.584 [DEBUG] [Thread-307160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:51:18.585 [DEBUG] [Thread-307160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:51:18.619 [INFO] [Thread-307160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:51:18.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:51:19.266 [DEBUG] [Thread-307160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:51:19.266 [DEBUG] [Thread-307160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:51:19.268 [DEBUG] [Thread-307160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:51:19.307 [DEBUG] [Thread-307160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:51:19.307 [DEBUG] [Thread-307160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:51:19.310 [DEBUG] [Thread-307160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:51:19.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:51:19.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:51:19.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:51:19.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:51:19.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:51:19.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:51:19.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:51:19.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:51:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:51:19.339 [DEBUG] [Thread-307160] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:51:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.701802 -999.00  +21.90  16.62     33   +5.00 1 1 1 1 1   887    0 16.51 -25.81 ----- 14.8 16.6 166.8 23.5 24.1 -25.3 24.4 -24.6 25.3 -22.9 25.4 -24.7
2025-12-24T18:51:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:51:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:51:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.701802
2025-12-24T18:51:19.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:51:19.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:51:19.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:51:19.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:51:19.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:51:19.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:50:41', tmtdew=19.87, humidity=27.03, cloud=0.0, wind=23.26, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:50:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:51:19.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:51:19.453 [DEBUG] [Thread-307163] [transport.py] [_log()] starting thread (client mode): 0xf5728b50
2025-12-24T18:51:19.454 [DEBUG] [Thread-307163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:51:19.467 [DEBUG] [Thread-307163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:51:19.467 [INFO] [Thread-307163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:51:19.475 [DEBUG] [Thread-307163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] client lang: <none>
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] server lang: <none>
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] kex follows: False
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] Compression: none
2025-12-24T18:51:19.476 [DEBUG] [Thread-307163] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:51:19.530 [DEBUG] [Thread-307163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:51:19.530 [DEBUG] [Thread-307163] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:51:19.530 [DEBUG] [Thread-307163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:51:19.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:51:19.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:51:19.587 [DEBUG] [Thread-307163] [transport.py] [_log()] userauth is OK
2025-12-24T18:51:19.587 [DEBUG] [Thread-307163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:51:19.587 [DEBUG] [Thread-307163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:51:19.587 [DEBUG] [Thread-307163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:51:19.587 [DEBUG] [Thread-307163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:51:19.601 [INFO] [Thread-307163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:51:19.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:51:19.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:51:20.426 [DEBUG] [Thread-307163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:51:20.427 [DEBUG] [Thread-307163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:51:20.473 [DEBUG] [Thread-307163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:51:20.474 [DEBUG] [Thread-307163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:51:20.482 [DEBUG] [Thread-307163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:51:20.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:51: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')
2025-12-24T18:51:20.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:51:20.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:51:20.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:51:20.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:51:20.518 [DEBUG] [Thread-307163] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:51:28.072 [DEBUG] [Thread-307165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:51:43.371 [DEBUG] [Thread-307166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:51:50.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:51:50.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:51:50.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:51:51.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 51, 15), 19.78, 27.21, 0.0, 25.39, 22.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:51:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:51:15
2025-12-24T18:51:51.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:51:51.978 [DEBUG] [Thread-307167] [transport.py] [_log()] starting thread (client mode): 0xf572aaa0
2025-12-24T18:51:51.979 [DEBUG] [Thread-307167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:51:51.987 [DEBUG] [Thread-307167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:51:51.987 [INFO] [Thread-307167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] client lang: <none>
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] server lang: <none>
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] kex follows: False
2025-12-24T18:51:51.991 [DEBUG] [Thread-307167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:51:51.992 [DEBUG] [Thread-307167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:51:51.992 [DEBUG] [Thread-307167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:51:51.992 [DEBUG] [Thread-307167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:51:51.992 [DEBUG] [Thread-307167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:51:51.992 [DEBUG] [Thread-307167] [transport.py] [_log()] Compression: none
2025-12-24T18:51:51.992 [DEBUG] [Thread-307167] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:51:52.026 [DEBUG] [Thread-307167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:51:52.030 [DEBUG] [Thread-307167] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:51:52.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:51:52.033 [DEBUG] [Thread-307167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:51:52.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:51:52.035 [DEBUG] [Thread-307167] [transport.py] [_log()] userauth is OK
2025-12-24T18:51:52.035 [DEBUG] [Thread-307167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:51:52.035 [DEBUG] [Thread-307167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:51:52.035 [DEBUG] [Thread-307167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:51:52.035 [DEBUG] [Thread-307167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:51:52.056 [INFO] [Thread-307167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:51:52.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:51:52.807 [DEBUG] [Thread-307167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:51:52.807 [DEBUG] [Thread-307167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:51:52.808 [DEBUG] [Thread-307167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:51:52.847 [DEBUG] [Thread-307167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:51:52.847 [DEBUG] [Thread-307167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:51:52.849 [DEBUG] [Thread-307167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:51:52.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:51:52.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:51:52.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:51:52.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:51:52.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:51:52.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:51:52.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:51:52.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:51:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:51:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.702149 -999.00  +21.90  21.66     34   +5.70 1 1 1 1 1   887    0 16.22 -27.56 ----- 15.7 21.7 188.4 29.3 24.1 -25.7 24.4 -26.9 25.2 -24.0 25.4 -25.1
2025-12-24T18:51:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:51:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:51:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.702149
2025-12-24T18:51:52.878 [DEBUG] [Thread-307167] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:51:52.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:51:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:51:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:51:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:51:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:51:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:51:15', tmtdew=19.78, humidity=27.21, cloud=0.0, wind=25.39, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:51:05.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:51:52.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:51:52.988 [DEBUG] [Thread-307170] [transport.py] [_log()] starting thread (client mode): 0xf5788b80
2025-12-24T18:51:52.989 [DEBUG] [Thread-307170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:51:53.002 [DEBUG] [Thread-307170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:51:53.002 [INFO] [Thread-307170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:51:53.042 [DEBUG] [Thread-307170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] client lang: <none>
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] server lang: <none>
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] kex follows: False
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] Compression: none
2025-12-24T18:51:53.043 [DEBUG] [Thread-307170] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:51:53.106 [DEBUG] [Thread-307170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:51:53.106 [DEBUG] [Thread-307170] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:51:53.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:51:53.106 [DEBUG] [Thread-307170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:51:53.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:51:53.163 [DEBUG] [Thread-307170] [transport.py] [_log()] userauth is OK
2025-12-24T18:51:53.163 [DEBUG] [Thread-307170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:51:53.163 [DEBUG] [Thread-307170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:51:53.163 [DEBUG] [Thread-307170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:51:53.163 [DEBUG] [Thread-307170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:51:53.238 [INFO] [Thread-307170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:51:53.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:51:53.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:51:54.074 [DEBUG] [Thread-307170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:51:54.074 [DEBUG] [Thread-307170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:51:54.122 [DEBUG] [Thread-307170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:51:54.122 [DEBUG] [Thread-307170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:51:54.130 [DEBUG] [Thread-307170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:51:54.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:51:54.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:51:54.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
2025-12-24T18:51:54.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:51:54.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:51:54.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:51:54.164 [DEBUG] [Thread-307170] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:51:54.508 [DEBUG] [Thread-307172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:51:55.239 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:51:55.240 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:51:58.448 [DEBUG] [Thread-307173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:52:13.619 [DEBUG] [Thread-307174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:52:24.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:52:24.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:52:24.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
2025-12-24T18:52:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 51, 48), 18.59, 29.54, 0.0, 25.74, 21.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:52:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:51:48
2025-12-24T18:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:52:25.717 [DEBUG] [Thread-307175] [transport.py] [_log()] starting thread (client mode): 0xf5728820
2025-12-24T18:52:25.718 [DEBUG] [Thread-307175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:52:25.727 [DEBUG] [Thread-307175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:52:25.727 [INFO] [Thread-307175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] client lang: <none>
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] server lang: <none>
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] kex follows: False
2025-12-24T18:52:25.732 [DEBUG] [Thread-307175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:52:25.733 [DEBUG] [Thread-307175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:52:25.733 [DEBUG] [Thread-307175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:52:25.733 [DEBUG] [Thread-307175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:52:25.733 [DEBUG] [Thread-307175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:52:25.733 [DEBUG] [Thread-307175] [transport.py] [_log()] Compression: none
2025-12-24T18:52:25.733 [DEBUG] [Thread-307175] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:52:25.764 [DEBUG] [Thread-307175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:52:25.768 [DEBUG] [Thread-307175] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:52:25.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:52:25.771 [DEBUG] [Thread-307175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:52:25.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:52:25.773 [DEBUG] [Thread-307175] [transport.py] [_log()] userauth is OK
2025-12-24T18:52:25.773 [DEBUG] [Thread-307175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:52:25.773 [DEBUG] [Thread-307175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:52:25.773 [DEBUG] [Thread-307175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:52:25.773 [DEBUG] [Thread-307175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:52:25.803 [INFO] [Thread-307175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:52:25.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:52:26.433 [DEBUG] [Thread-307175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:52:26.434 [DEBUG] [Thread-307175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:52:26.435 [DEBUG] [Thread-307175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:52:26.474 [DEBUG] [Thread-307175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:52:26.474 [DEBUG] [Thread-307175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:52:26.479 [DEBUG] [Thread-307175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:52:26.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:52:26.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:52:26.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:52:26.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:52:26.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:52:26.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:52:26.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:52:26.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:52:26.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:52:26.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.702496 -999.00  +21.80  19.41     35   +6.00 1 1 1 1 1   887    0 16.26 -30.31 ----- 16.9 19.4 180.4 27.4 24.1 -25.7 24.3 -26.9 25.2 -24.0 25.3 -25.3
2025-12-24T18:52:26.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:52:26.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:52:26.507 [DEBUG] [Thread-307175] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:52:26.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.702496
2025-12-24T18:52:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:52:26.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:52:26.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:52:26.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:52:26.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:52:26.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:51:48', tmtdew=18.59, humidity=29.54, cloud=0.0, wind=25.74, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:51:35.654', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:52:26.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:52:26.620 [DEBUG] [Thread-307178] [transport.py] [_log()] starting thread (client mode): 0xf572a3e0
2025-12-24T18:52:26.620 [DEBUG] [Thread-307178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:52:26.634 [DEBUG] [Thread-307178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:52:26.634 [INFO] [Thread-307178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:52:26.641 [DEBUG] [Thread-307178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] client lang: <none>
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] server lang: <none>
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] kex follows: False
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:52:26.642 [DEBUG] [Thread-307178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:52:26.643 [DEBUG] [Thread-307178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:52:26.643 [DEBUG] [Thread-307178] [transport.py] [_log()] Compression: none
2025-12-24T18:52:26.643 [DEBUG] [Thread-307178] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:52:26.699 [DEBUG] [Thread-307178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:52:26.700 [DEBUG] [Thread-307178] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:52:26.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:52:26.701 [DEBUG] [Thread-307178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:52:26.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:52:26.756 [DEBUG] [Thread-307178] [transport.py] [_log()] userauth is OK
2025-12-24T18:52:26.756 [DEBUG] [Thread-307178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:52:26.756 [DEBUG] [Thread-307178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:52:26.756 [DEBUG] [Thread-307178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:52:26.756 [DEBUG] [Thread-307178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:52:26.780 [INFO] [Thread-307178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:52:26.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:52:26.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:52:27.634 [DEBUG] [Thread-307178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:52:27.634 [DEBUG] [Thread-307178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:52:27.673 [DEBUG] [Thread-307178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:52:27.673 [DEBUG] [Thread-307178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:52:27.682 [DEBUG] [Thread-307178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:52:27.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:52:27.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:52:27.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:52:27.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:52:27.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:52:27.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:52:27.719 [DEBUG] [Thread-307178] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:52:28.771 [DEBUG] [Thread-307180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:52:43.943 [DEBUG] [Thread-307181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:52:54.825 [DEBUG] [Thread-307182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:52:55.380 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:52:55.381 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:52:57.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:52:57.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:52:57.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:52:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 52, 21), 18.52, 29.67, 0.0, 27.91, 21.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:52:58.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:52:21
2025-12-24T18:52:58.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:52:59.057 [DEBUG] [Thread-307183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:52:59.091 [DEBUG] [Thread-307184] [transport.py] [_log()] starting thread (client mode): 0xf572bac0
2025-12-24T18:52:59.091 [DEBUG] [Thread-307184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:52:59.104 [DEBUG] [Thread-307184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:52:59.104 [INFO] [Thread-307184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] client lang: <none>
2025-12-24T18:52:59.107 [DEBUG] [Thread-307184] [transport.py] [_log()] server lang: <none>
2025-12-24T18:52:59.108 [DEBUG] [Thread-307184] [transport.py] [_log()] kex follows: False
2025-12-24T18:52:59.108 [DEBUG] [Thread-307184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:52:59.108 [DEBUG] [Thread-307184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:52:59.108 [DEBUG] [Thread-307184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:52:59.109 [DEBUG] [Thread-307184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:52:59.109 [DEBUG] [Thread-307184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:52:59.109 [DEBUG] [Thread-307184] [transport.py] [_log()] Compression: none
2025-12-24T18:52:59.109 [DEBUG] [Thread-307184] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:52:59.139 [DEBUG] [Thread-307184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:52:59.141 [DEBUG] [Thread-307184] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:52:59.143 [DEBUG] [Thread-307184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:52:59.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:52:59.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:52:59.146 [DEBUG] [Thread-307184] [transport.py] [_log()] userauth is OK
2025-12-24T18:52:59.146 [DEBUG] [Thread-307184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:52:59.146 [DEBUG] [Thread-307184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:52:59.146 [DEBUG] [Thread-307184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:52:59.146 [DEBUG] [Thread-307184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:52:59.158 [INFO] [Thread-307184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:52:59.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:52:59.820 [DEBUG] [Thread-307184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:52:59.821 [DEBUG] [Thread-307184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:52:59.822 [DEBUG] [Thread-307184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:52:59.862 [DEBUG] [Thread-307184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:52:59.862 [DEBUG] [Thread-307184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:52:59.866 [DEBUG] [Thread-307184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:52:59.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:52:59.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:52:59.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:52:59.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:52:59.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:52:59.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:52:59.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:52:59.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:52:59.896 [DEBUG] [Thread-307184] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:52:59.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:52:59.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.702959 -999.00  +21.70  22.90     36   +6.00 1 1 1 1 1   887    0 15.90 -38.42 ----- 26.9 22.9 185.8 29.5 24.1 -25.7 24.2 -26.0 25.1 -23.6 25.2 -25.9
2025-12-24T18:52:59.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:52:59.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:52:59.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.702959
2025-12-24T18:52:59.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:52:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:52:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:52:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:52:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:52:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:52:21', tmtdew=18.52, humidity=29.67, cloud=0.0, wind=27.91, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:52:15.658', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:53:00.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:53:00.016 [DEBUG] [Thread-307187] [transport.py] [_log()] starting thread (client mode): 0xf572be20
2025-12-24T18:53:00.016 [DEBUG] [Thread-307187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:53:00.031 [DEBUG] [Thread-307187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:53:00.031 [INFO] [Thread-307187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:53:00.038 [DEBUG] [Thread-307187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] client lang: <none>
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] server lang: <none>
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] kex follows: False
2025-12-24T18:53:00.039 [DEBUG] [Thread-307187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:53:00.040 [DEBUG] [Thread-307187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:53:00.040 [DEBUG] [Thread-307187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:53:00.040 [DEBUG] [Thread-307187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:53:00.040 [DEBUG] [Thread-307187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:53:00.040 [DEBUG] [Thread-307187] [transport.py] [_log()] Compression: none
2025-12-24T18:53:00.040 [DEBUG] [Thread-307187] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:53:00.094 [DEBUG] [Thread-307187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:53:00.095 [DEBUG] [Thread-307187] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:53:00.095 [DEBUG] [Thread-307187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:53:00.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:53:00.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:53:00.151 [DEBUG] [Thread-307187] [transport.py] [_log()] userauth is OK
2025-12-24T18:53:00.152 [DEBUG] [Thread-307187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:53:00.152 [DEBUG] [Thread-307187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:53:00.152 [DEBUG] [Thread-307187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:53:00.152 [DEBUG] [Thread-307187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:53:00.175 [INFO] [Thread-307187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:53:00.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:53:00.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:53:01.011 [DEBUG] [Thread-307187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:53:01.011 [DEBUG] [Thread-307187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:53:01.059 [DEBUG] [Thread-307187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:53:01.059 [DEBUG] [Thread-307187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:53:01.067 [DEBUG] [Thread-307187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:53:01.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:53:01.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:53:01.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:53:01.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:53:01.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:53:01.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:53:01.103 [DEBUG] [Thread-307187] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:53:14.173 [DEBUG] [Thread-307189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:53:29.371 [DEBUG] [Thread-307190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:53:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:53:31.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:53:31.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:53:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 52, 55), 18.44, 29.95, 0.0, 27.52, 21.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:53:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:52:55
2025-12-24T18:53:32.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:53:32.518 [DEBUG] [Thread-307191] [transport.py] [_log()] starting thread (client mode): 0xf5789e10
2025-12-24T18:53:32.519 [DEBUG] [Thread-307191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:53:32.532 [DEBUG] [Thread-307191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:53:32.532 [INFO] [Thread-307191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] client lang: <none>
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] server lang: <none>
2025-12-24T18:53:32.536 [DEBUG] [Thread-307191] [transport.py] [_log()] kex follows: False
2025-12-24T18:53:32.537 [DEBUG] [Thread-307191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:53:32.537 [DEBUG] [Thread-307191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:53:32.537 [DEBUG] [Thread-307191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:53:32.538 [DEBUG] [Thread-307191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:53:32.538 [DEBUG] [Thread-307191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:53:32.538 [DEBUG] [Thread-307191] [transport.py] [_log()] Compression: none
2025-12-24T18:53:32.538 [DEBUG] [Thread-307191] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:53:32.572 [DEBUG] [Thread-307191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:53:32.576 [DEBUG] [Thread-307191] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:53:32.577 [DEBUG] [Thread-307191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:53:32.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:53:32.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:53:32.581 [DEBUG] [Thread-307191] [transport.py] [_log()] userauth is OK
2025-12-24T18:53:32.581 [DEBUG] [Thread-307191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:53:32.581 [DEBUG] [Thread-307191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:53:32.581 [DEBUG] [Thread-307191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:53:32.581 [DEBUG] [Thread-307191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:53:32.599 [INFO] [Thread-307191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:53:32.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:53:33.260 [DEBUG] [Thread-307191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:53:33.260 [DEBUG] [Thread-307191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:53:33.261 [DEBUG] [Thread-307191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:53:33.301 [DEBUG] [Thread-307191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:53:33.301 [DEBUG] [Thread-307191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:53:33.303 [DEBUG] [Thread-307191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:53:33.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:53:33.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:53:33.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:53:33.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:53:33.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:53:33.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:53:33.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:53:33.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:53:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:53:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.703191 -999.00  +21.70  16.68     35   +5.80 1 1 1 1 1   887    0 15.68 -36.35 ----- 19.4 16.7 186.2 30.9 24.0 -25.6 24.2 -26.1 25.1 -23.5 25.1 -25.8
2025-12-24T18:53:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:53:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:53:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.703191
2025-12-24T18:53:33.356 [DEBUG] [Thread-307191] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:53:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:53:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:53:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:53:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:53:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:53:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:52:55', tmtdew=18.44, humidity=29.95, cloud=0.0, wind=27.52, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:52:35.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:53:33.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:53:33.464 [DEBUG] [Thread-307194] [transport.py] [_log()] starting thread (client mode): 0xf578be20
2025-12-24T18:53:33.464 [DEBUG] [Thread-307194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:53:33.483 [DEBUG] [Thread-307194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:53:33.483 [INFO] [Thread-307194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] client lang: <none>
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] server lang: <none>
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] kex follows: False
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] Compression: none
2025-12-24T18:53:33.490 [DEBUG] [Thread-307194] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:53:33.546 [DEBUG] [Thread-307194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:53:33.546 [DEBUG] [Thread-307194] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:53:33.546 [DEBUG] [Thread-307194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:53:33.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:53:33.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:53:33.603 [DEBUG] [Thread-307194] [transport.py] [_log()] userauth is OK
2025-12-24T18:53:33.603 [DEBUG] [Thread-307194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:53:33.603 [DEBUG] [Thread-307194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:53:33.603 [DEBUG] [Thread-307194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:53:33.604 [DEBUG] [Thread-307194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:53:33.618 [INFO] [Thread-307194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:53:33.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:53:33.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:53:34.417 [DEBUG] [Thread-307194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:53:34.417 [DEBUG] [Thread-307194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:53:34.465 [DEBUG] [Thread-307194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:53:34.465 [DEBUG] [Thread-307194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:53:34.473 [DEBUG] [Thread-307194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:53:34.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:53:34.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:53:34.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:53:34.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:53:34.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:53:34.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:53:34.506 [DEBUG] [Thread-307194] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:53:44.522 [DEBUG] [Thread-307196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:53:55.072 [DEBUG] [Thread-307197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:53:55.524 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:53:55.525 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:53:59.694 [DEBUG] [Thread-307198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:54:04.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:54:04.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:54:04.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:54:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 53, 29), 17.99, 30.83, 0.0, 29.01, 21.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:54:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:53:29
2025-12-24T18:54:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:54:06.056 [DEBUG] [Thread-307199] [transport.py] [_log()] starting thread (client mode): 0xf572ada0
2025-12-24T18:54:06.057 [DEBUG] [Thread-307199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:54:06.066 [DEBUG] [Thread-307199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:54:06.066 [INFO] [Thread-307199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] client lang: <none>
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] server lang: <none>
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] kex follows: False
2025-12-24T18:54:06.071 [DEBUG] [Thread-307199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:54:06.072 [DEBUG] [Thread-307199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:54:06.072 [DEBUG] [Thread-307199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:54:06.072 [DEBUG] [Thread-307199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:54:06.072 [DEBUG] [Thread-307199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:54:06.072 [DEBUG] [Thread-307199] [transport.py] [_log()] Compression: none
2025-12-24T18:54:06.072 [DEBUG] [Thread-307199] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:54:06.104 [DEBUG] [Thread-307199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:54:06.108 [DEBUG] [Thread-307199] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:54:06.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:54:06.111 [DEBUG] [Thread-307199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:54:06.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:54:06.113 [DEBUG] [Thread-307199] [transport.py] [_log()] userauth is OK
2025-12-24T18:54:06.113 [DEBUG] [Thread-307199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:54:06.114 [DEBUG] [Thread-307199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:54:06.114 [DEBUG] [Thread-307199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:54:06.114 [DEBUG] [Thread-307199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:54:06.136 [INFO] [Thread-307199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:54:06.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:54:06.743 [DEBUG] [Thread-307199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:54:06.743 [DEBUG] [Thread-307199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:54:06.744 [DEBUG] [Thread-307199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:54:06.784 [DEBUG] [Thread-307199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:54:06.784 [DEBUG] [Thread-307199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:54:06.786 [DEBUG] [Thread-307199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:54:06.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:54:06.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:54:06.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:54:06.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:54:06.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:54:06.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:54:06.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:54:06.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:54:06.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:54:06.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.703538 -999.00  +21.80  21.18     35   +5.90 1 1 1 1 1   887    0 15.80 -41.78 ----- 23.7 21.2 160.6 29.0 24.1 -25.7 24.3 -24.7 25.1 -23.4 25.2 -24.9
2025-12-24T18:54:06.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:54:06.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:54:06.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.703538
2025-12-24T18:54:06.815 [DEBUG] [Thread-307199] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:54:06.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:54:06.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:53:29', tmtdew=17.99, humidity=30.83, cloud=0.0, wind=29.01, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:53:05.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:54:06.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:54:06.913 [DEBUG] [Thread-307202] [transport.py] [_log()] starting thread (client mode): 0xf5729240
2025-12-24T18:54:06.913 [DEBUG] [Thread-307202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:54:06.926 [DEBUG] [Thread-307202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:54:06.927 [INFO] [Thread-307202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] client lang: <none>
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] server lang: <none>
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] kex follows: False
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] Compression: none
2025-12-24T18:54:06.934 [DEBUG] [Thread-307202] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:54:06.990 [DEBUG] [Thread-307202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:54:06.991 [DEBUG] [Thread-307202] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:54:06.991 [DEBUG] [Thread-307202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:54:06.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:54:06.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:54:07.047 [DEBUG] [Thread-307202] [transport.py] [_log()] userauth is OK
2025-12-24T18:54:07.047 [DEBUG] [Thread-307202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:54:07.047 [DEBUG] [Thread-307202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:54:07.047 [DEBUG] [Thread-307202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:54:07.047 [DEBUG] [Thread-307202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:54:07.061 [INFO] [Thread-307202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:54:07.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:54:07.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:54:07.937 [DEBUG] [Thread-307202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:54:07.937 [DEBUG] [Thread-307202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:54:07.985 [DEBUG] [Thread-307202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:54:07.985 [DEBUG] [Thread-307202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:54:07.993 [DEBUG] [Thread-307202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:54:08.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:54:08.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:54:08.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:54:08.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:54:08.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:54:08.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:54:08.027 [DEBUG] [Thread-307202] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:54:14.783 [DEBUG] [Thread-307204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:54:29.924 [DEBUG] [Thread-307205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:54:38.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:54:38.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:54:38.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:54:39.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 54, 2), 17.84, 31.11, 0.0, 29.94, 21.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:54:39.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:54:02
2025-12-24T18:54:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:54:39.434 [DEBUG] [Thread-307206] [transport.py] [_log()] starting thread (client mode): 0xf572b130
2025-12-24T18:54:39.435 [DEBUG] [Thread-307206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:54:39.444 [DEBUG] [Thread-307206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:54:39.444 [INFO] [Thread-307206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] client lang: <none>
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] server lang: <none>
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] kex follows: False
2025-12-24T18:54:39.447 [DEBUG] [Thread-307206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:54:39.448 [DEBUG] [Thread-307206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:54:39.448 [DEBUG] [Thread-307206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:54:39.448 [DEBUG] [Thread-307206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:54:39.448 [DEBUG] [Thread-307206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:54:39.448 [DEBUG] [Thread-307206] [transport.py] [_log()] Compression: none
2025-12-24T18:54:39.448 [DEBUG] [Thread-307206] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:54:39.480 [DEBUG] [Thread-307206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:54:39.483 [DEBUG] [Thread-307206] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:54:39.485 [DEBUG] [Thread-307206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:54:39.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:54:39.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:54:39.487 [DEBUG] [Thread-307206] [transport.py] [_log()] userauth is OK
2025-12-24T18:54:39.487 [DEBUG] [Thread-307206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:54:39.488 [DEBUG] [Thread-307206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:54:39.488 [DEBUG] [Thread-307206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:54:39.488 [DEBUG] [Thread-307206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:54:39.503 [INFO] [Thread-307206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:54:39.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:54:40.071 [DEBUG] [Thread-307206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:54:40.072 [DEBUG] [Thread-307206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:54:40.073 [DEBUG] [Thread-307206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:54:40.113 [DEBUG] [Thread-307206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:54:40.113 [DEBUG] [Thread-307206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:54:40.116 [DEBUG] [Thread-307206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:54:40.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:54:40.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:54:40.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:54:40.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:54:40.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:54:40.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:54:40.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:54:40.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:54:40.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:54:40.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.704580 -999.00  +21.30  26.42     37   +6.20 1 1 1 1 1   887    0 15.10 -55.67 ----- 21.8 26.4 162.6 34.8 23.8 -25.6 24.1 -25.6 24.8 -24.0 24.9 -25.9
2025-12-24T18:54:40.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:54:40.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:54:40.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.704580
2025-12-24T18:54:40.155 [DEBUG] [Thread-307206] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:54:40.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:54:40.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:54:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:54:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:54:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:54:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:54:02', tmtdew=17.84, humidity=31.11, cloud=0.0, wind=29.94, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:54:35.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:54:40.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:54:40.297 [DEBUG] [Thread-307209] [transport.py] [_log()] starting thread (client mode): 0xf5729b70
2025-12-24T18:54:40.298 [DEBUG] [Thread-307209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:54:40.312 [DEBUG] [Thread-307209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:54:40.313 [INFO] [Thread-307209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:54:40.320 [DEBUG] [Thread-307209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:54:40.320 [DEBUG] [Thread-307209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] client lang: <none>
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] server lang: <none>
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] kex follows: False
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] Compression: none
2025-12-24T18:54:40.321 [DEBUG] [Thread-307209] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:54:40.380 [DEBUG] [Thread-307209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:54:40.390 [DEBUG] [Thread-307209] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:54:40.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:54:40.392 [DEBUG] [Thread-307209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:54:40.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:54:40.440 [DEBUG] [Thread-307209] [transport.py] [_log()] userauth is OK
2025-12-24T18:54:40.440 [DEBUG] [Thread-307209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:54:40.440 [DEBUG] [Thread-307209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:54:40.440 [DEBUG] [Thread-307209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:54:40.440 [DEBUG] [Thread-307209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:54:40.465 [INFO] [Thread-307209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:54:40.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:54:40.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:54:41.281 [DEBUG] [Thread-307209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:54:41.282 [DEBUG] [Thread-307209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:54:41.319 [DEBUG] [Thread-307209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:54:41.320 [DEBUG] [Thread-307209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:54:41.328 [DEBUG] [Thread-307209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:54:41.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:54:41.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:54:41.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:54:41.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:54:41.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:54:41.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:54:41.364 [DEBUG] [Thread-307209] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:54:45.020 [DEBUG] [Thread-307211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:54:55.358 [DEBUG] [Thread-307212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:54:55.664 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:54:55.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:55:00.200 [DEBUG] [Thread-307213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:55:11.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:55:11.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:55:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:55:12.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 54, 35), 17.58, 31.33, 0.0, 36.58, 21.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:55:12.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:54:35
2025-12-24T18:55:12.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:55:12.956 [DEBUG] [Thread-307214] [transport.py] [_log()] starting thread (client mode): 0xf578a8c0
2025-12-24T18:55:12.957 [DEBUG] [Thread-307214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:55:12.958 [DEBUG] [Thread-307214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:55:12.958 [INFO] [Thread-307214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] client lang: <none>
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] server lang: <none>
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] kex follows: False
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:55:12.969 [DEBUG] [Thread-307214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:55:12.970 [DEBUG] [Thread-307214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:55:12.970 [DEBUG] [Thread-307214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:55:12.971 [DEBUG] [Thread-307214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:55:12.971 [DEBUG] [Thread-307214] [transport.py] [_log()] Compression: none
2025-12-24T18:55:12.971 [DEBUG] [Thread-307214] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:55:13.014 [DEBUG] [Thread-307214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:55:13.018 [DEBUG] [Thread-307214] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:55:13.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:55:13.021 [DEBUG] [Thread-307214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:55:13.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:55:13.023 [DEBUG] [Thread-307214] [transport.py] [_log()] userauth is OK
2025-12-24T18:55:13.023 [DEBUG] [Thread-307214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:55:13.023 [DEBUG] [Thread-307214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:55:13.023 [DEBUG] [Thread-307214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:55:13.023 [DEBUG] [Thread-307214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:55:13.053 [INFO] [Thread-307214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:55:13.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:55:13.672 [DEBUG] [Thread-307214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:55:13.673 [DEBUG] [Thread-307214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:55:13.674 [DEBUG] [Thread-307214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:55:13.713 [DEBUG] [Thread-307214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:55:13.713 [DEBUG] [Thread-307214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:55:13.715 [DEBUG] [Thread-307214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:55:13.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:55:13.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:55:13.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:55:13.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:55:13.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:55:13.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:55:13.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:55:13.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:55:13.878 [DEBUG] [Thread-307214] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:55:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:55:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.704927 -999.00  +21.40  21.33     37   +6.20 1 1 1 1 1   887    0 15.15 -63.84 ----- 14.1 21.3 162.2 28.1 23.8 -25.2 24.0 -25.1 24.8 -23.4 24.9 -24.7
2025-12-24T18:55:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:55:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:55:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.704927
2025-12-24T18:55:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:55:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:55:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:55:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:55:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:55:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:54:35', tmtdew=17.58, humidity=31.33, cloud=0.0, wind=36.58, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:55:05.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:55:13.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:55:13.994 [DEBUG] [Thread-307217] [transport.py] [_log()] starting thread (client mode): 0xf578b4f0
2025-12-24T18:55:13.994 [DEBUG] [Thread-307217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:55:14.009 [DEBUG] [Thread-307217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:55:14.009 [INFO] [Thread-307217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:55:14.016 [DEBUG] [Thread-307217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] client lang: <none>
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] server lang: <none>
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] kex follows: False
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] Compression: none
2025-12-24T18:55:14.017 [DEBUG] [Thread-307217] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:55:14.076 [DEBUG] [Thread-307217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:55:14.077 [DEBUG] [Thread-307217] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:55:14.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:55:14.078 [DEBUG] [Thread-307217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:55:14.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:55:14.131 [DEBUG] [Thread-307217] [transport.py] [_log()] userauth is OK
2025-12-24T18:55:14.131 [DEBUG] [Thread-307217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:55:14.131 [DEBUG] [Thread-307217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:55:14.131 [DEBUG] [Thread-307217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:55:14.131 [DEBUG] [Thread-307217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:55:14.145 [INFO] [Thread-307217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:55:14.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:55:14.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:55:14.955 [DEBUG] [Thread-307217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:55:14.956 [DEBUG] [Thread-307217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:55:15.003 [DEBUG] [Thread-307217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:55:15.003 [DEBUG] [Thread-307217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:55:15.012 [DEBUG] [Thread-307217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:55:15.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:55:15.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:55:15.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:55:15.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:55:15.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:55:15.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:55:15.047 [DEBUG] [Thread-307217] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:55:15.308 [DEBUG] [Thread-307219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:55:30.526 [DEBUG] [Thread-307220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:55:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:55:45.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:55:45.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
2025-12-24T18:55:45.606 [DEBUG] [Thread-307221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:55:46.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 55, 9), 17.59, 31.29, 0.0, 36.07, 21.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:55:46.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:55:09
2025-12-24T18:55:46.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:55:46.481 [DEBUG] [Thread-307222] [transport.py] [_log()] starting thread (client mode): 0xf578b1c0
2025-12-24T18:55:46.481 [DEBUG] [Thread-307222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:55:46.494 [DEBUG] [Thread-307222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:55:46.494 [INFO] [Thread-307222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] client lang: <none>
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] server lang: <none>
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] kex follows: False
2025-12-24T18:55:46.499 [DEBUG] [Thread-307222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:55:46.500 [DEBUG] [Thread-307222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:55:46.500 [DEBUG] [Thread-307222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:55:46.501 [DEBUG] [Thread-307222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:55:46.501 [DEBUG] [Thread-307222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:55:46.501 [DEBUG] [Thread-307222] [transport.py] [_log()] Compression: none
2025-12-24T18:55:46.501 [DEBUG] [Thread-307222] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:55:46.532 [DEBUG] [Thread-307222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:55:46.536 [DEBUG] [Thread-307222] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:55:46.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:55:46.539 [DEBUG] [Thread-307222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:55:46.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:55:46.541 [DEBUG] [Thread-307222] [transport.py] [_log()] userauth is OK
2025-12-24T18:55:46.541 [DEBUG] [Thread-307222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:55:46.541 [DEBUG] [Thread-307222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:55:46.541 [DEBUG] [Thread-307222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:55:46.541 [DEBUG] [Thread-307222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:55:46.563 [INFO] [Thread-307222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:55:46.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:55:47.148 [DEBUG] [Thread-307222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:55:47.148 [DEBUG] [Thread-307222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:55:47.149 [DEBUG] [Thread-307222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:55:47.189 [DEBUG] [Thread-307222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:55:47.189 [DEBUG] [Thread-307222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:55:47.191 [DEBUG] [Thread-307222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:55:47.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:55:47.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:55:47.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:55:47.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:55:47.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:55:47.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:55:47.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:55:47.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:55:47.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:55:47.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.705274 -999.00  +21.40  22.13     37   +6.10 1 1 1 1 1   887    0 14.85 -67.09 ----- 20.2 22.1 162.0 27.5 23.7 -25.4 24.1 -24.9 -999.0 -999.0 24.9 -24.9
2025-12-24T18:55:47.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:55:47.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:55:47.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.705274
2025-12-24T18:55:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:55:47.226 [DEBUG] [Thread-307222] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:55:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:55:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:55:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:55:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:55:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:55:09', tmtdew=17.59, humidity=31.29, cloud=0.0, wind=36.07, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:55:35.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:55:47.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:55:47.315 [DEBUG] [Thread-307225] [transport.py] [_log()] starting thread (client mode): 0xf572b9a0
2025-12-24T18:55:47.315 [DEBUG] [Thread-307225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:55:47.329 [DEBUG] [Thread-307225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:55:47.329 [INFO] [Thread-307225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] client lang: <none>
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] server lang: <none>
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] kex follows: False
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] Compression: none
2025-12-24T18:55:47.337 [DEBUG] [Thread-307225] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:55:47.395 [DEBUG] [Thread-307225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:55:47.396 [DEBUG] [Thread-307225] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:55:47.397 [DEBUG] [Thread-307225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:55:47.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:55:47.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:55:47.452 [DEBUG] [Thread-307225] [transport.py] [_log()] userauth is OK
2025-12-24T18:55:47.452 [DEBUG] [Thread-307225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:55:47.452 [DEBUG] [Thread-307225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:55:47.452 [DEBUG] [Thread-307225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:55:47.452 [DEBUG] [Thread-307225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:55:47.471 [INFO] [Thread-307225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:55:47.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:55:47.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:55:48.310 [DEBUG] [Thread-307225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:55:48.310 [DEBUG] [Thread-307225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:55:48.358 [DEBUG] [Thread-307225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:55:48.358 [DEBUG] [Thread-307225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:55:48.367 [DEBUG] [Thread-307225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:55:48.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:55:48.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:55:48.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:55:48.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:55:48.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:55:48.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:55:48.401 [DEBUG] [Thread-307225] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:55:55.648 [DEBUG] [Thread-307227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:55:55.806 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:55:55.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:56:00.697 [DEBUG] [Thread-307228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:56:15.877 [DEBUG] [Thread-307229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:56:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:56:18.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:56:18.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:56:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 55, 42), 17.61, 31.65, 0.0, 34.35, 21.45, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:56:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:55:42
2025-12-24T18:56:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:56:19.778 [DEBUG] [Thread-307230] [transport.py] [_log()] starting thread (client mode): 0xf572af80
2025-12-24T18:56:19.779 [DEBUG] [Thread-307230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:56:19.785 [DEBUG] [Thread-307230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:56:19.785 [INFO] [Thread-307230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] client lang: <none>
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] server lang: <none>
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] kex follows: False
2025-12-24T18:56:19.797 [DEBUG] [Thread-307230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:56:19.798 [DEBUG] [Thread-307230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:56:19.798 [DEBUG] [Thread-307230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:56:19.798 [DEBUG] [Thread-307230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:56:19.798 [DEBUG] [Thread-307230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:56:19.798 [DEBUG] [Thread-307230] [transport.py] [_log()] Compression: none
2025-12-24T18:56:19.798 [DEBUG] [Thread-307230] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:56:19.828 [DEBUG] [Thread-307230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:56:19.831 [DEBUG] [Thread-307230] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:56:19.833 [DEBUG] [Thread-307230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:56:19.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:56:19.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:56:19.836 [DEBUG] [Thread-307230] [transport.py] [_log()] userauth is OK
2025-12-24T18:56:19.836 [DEBUG] [Thread-307230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:56:19.836 [DEBUG] [Thread-307230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:56:19.836 [DEBUG] [Thread-307230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:56:19.836 [DEBUG] [Thread-307230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:56:19.851 [INFO] [Thread-307230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:56:19.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:56:20.430 [DEBUG] [Thread-307230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:56:20.430 [DEBUG] [Thread-307230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:56:20.431 [DEBUG] [Thread-307230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:56:20.471 [DEBUG] [Thread-307230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:56:20.471 [DEBUG] [Thread-307230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:56:20.473 [DEBUG] [Thread-307230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:56:20.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:56:20.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:56:20.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:56:20.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:56:20.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:56:20.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:56:20.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:56:20.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:56:20.495 [DEBUG] [Thread-307230] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:56:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:56:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.705622 -999.00  +21.40  25.14     36   +6.00 1 1 1 1 1   887    0 14.58 -72.51 ----- 28.1 25.1 162.4 34.5 23.7 -25.5 23.9 -25.5 24.7 -23.8 24.9 -25.3
2025-12-24T18:56:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:56:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:56:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.705622
2025-12-24T18:56:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:56:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:56:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:56:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:56:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:56:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:55:42', tmtdew=17.61, humidity=31.65, cloud=0.0, wind=34.35, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:56:05.741', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:56:20.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:56:20.607 [DEBUG] [Thread-307233] [transport.py] [_log()] starting thread (client mode): 0xf8189db0
2025-12-24T18:56:20.607 [DEBUG] [Thread-307233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:56:20.622 [DEBUG] [Thread-307233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:56:20.622 [INFO] [Thread-307233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:56:20.629 [DEBUG] [Thread-307233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:56:20.629 [DEBUG] [Thread-307233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:56:20.629 [DEBUG] [Thread-307233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] client lang: <none>
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] server lang: <none>
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] kex follows: False
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] Compression: none
2025-12-24T18:56:20.630 [DEBUG] [Thread-307233] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:56:20.687 [DEBUG] [Thread-307233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:56:20.687 [DEBUG] [Thread-307233] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:56:20.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:56:20.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:56:20.688 [DEBUG] [Thread-307233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:56:20.743 [DEBUG] [Thread-307233] [transport.py] [_log()] userauth is OK
2025-12-24T18:56:20.743 [DEBUG] [Thread-307233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:56:20.743 [DEBUG] [Thread-307233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:56:20.743 [DEBUG] [Thread-307233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:56:20.743 [DEBUG] [Thread-307233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:56:20.761 [INFO] [Thread-307233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:56:20.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:56:20.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:56:21.575 [DEBUG] [Thread-307233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:56:21.575 [DEBUG] [Thread-307233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:56:21.623 [DEBUG] [Thread-307233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:56:21.623 [DEBUG] [Thread-307233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:56:21.631 [DEBUG] [Thread-307233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:56:21.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:56:21.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:56:21.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:56:21.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:56:21.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:56:21.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:56:21.668 [DEBUG] [Thread-307233] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:56:31.053 [DEBUG] [Thread-307235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:56:46.274 [DEBUG] [Thread-307236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:56:51.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:56:51.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:56:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:56:52.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 56, 16), 17.68, 31.51, 0.0, 35.36, 21.47, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:56:52.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:56:16
2025-12-24T18:56:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:56:53.091 [DEBUG] [Thread-307237] [transport.py] [_log()] starting thread (client mode): 0xf81889d0
2025-12-24T18:56:53.092 [DEBUG] [Thread-307237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:56:53.103 [DEBUG] [Thread-307237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:56:53.103 [INFO] [Thread-307237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] client lang: <none>
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] server lang: <none>
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] kex follows: False
2025-12-24T18:56:53.108 [DEBUG] [Thread-307237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:56:53.109 [DEBUG] [Thread-307237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:56:53.109 [DEBUG] [Thread-307237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:56:53.109 [DEBUG] [Thread-307237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:56:53.110 [DEBUG] [Thread-307237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:56:53.110 [DEBUG] [Thread-307237] [transport.py] [_log()] Compression: none
2025-12-24T18:56:53.110 [DEBUG] [Thread-307237] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:56:53.150 [DEBUG] [Thread-307237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:56:53.154 [DEBUG] [Thread-307237] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:56:53.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:56:53.159 [DEBUG] [Thread-307237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:56:53.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:56:53.162 [DEBUG] [Thread-307237] [transport.py] [_log()] userauth is OK
2025-12-24T18:56:53.162 [DEBUG] [Thread-307237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:56:53.163 [DEBUG] [Thread-307237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:56:53.163 [DEBUG] [Thread-307237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:56:53.163 [DEBUG] [Thread-307237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:56:53.184 [INFO] [Thread-307237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:56:53.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:56:53.836 [DEBUG] [Thread-307237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:56:53.836 [DEBUG] [Thread-307237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:56:53.837 [DEBUG] [Thread-307237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:56:53.863 [DEBUG] [Thread-307237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:56:53.863 [DEBUG] [Thread-307237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:56:53.865 [DEBUG] [Thread-307237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:56:53.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:56:53.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:56:53.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:56:53.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:56:53.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:56:53.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:56:53.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:56:53.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:56:53.895 [DEBUG] [Thread-307237] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:56:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:56:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.705969 -999.00  +21.30  20.87     37   +6.10 1 1 1 1 1   887    0 14.61 -76.25 ----- 24.2 20.9 152.6 32.1 23.7 -25.5 23.9 -25.5 24.6 -23.5 24.8 -25.1
2025-12-24T18:56:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:56:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:56:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.705969
2025-12-24T18:56:53.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:56:53.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:56:53.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:56:53.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:56:53.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:56:53.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:56:16', tmtdew=17.68, humidity=31.51, cloud=0.0, wind=35.36, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:56:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:56:53.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:56:54.004 [DEBUG] [Thread-307240] [transport.py] [_log()] starting thread (client mode): 0xf5729b40
2025-12-24T18:56:54.004 [DEBUG] [Thread-307240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:56:54.019 [DEBUG] [Thread-307240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:56:54.019 [INFO] [Thread-307240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:56:54.026 [DEBUG] [Thread-307240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] client lang: <none>
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] server lang: <none>
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] kex follows: False
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] Compression: none
2025-12-24T18:56:54.027 [DEBUG] [Thread-307240] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:56:54.082 [DEBUG] [Thread-307240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:56:54.083 [DEBUG] [Thread-307240] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:56:54.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:56:54.083 [DEBUG] [Thread-307240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:56:54.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:56:54.139 [DEBUG] [Thread-307240] [transport.py] [_log()] userauth is OK
2025-12-24T18:56:54.139 [DEBUG] [Thread-307240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:56:54.139 [DEBUG] [Thread-307240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:56:54.139 [DEBUG] [Thread-307240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:56:54.139 [DEBUG] [Thread-307240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:56:54.154 [INFO] [Thread-307240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:56:54.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:56:54.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:56:55.001 [DEBUG] [Thread-307240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:56:55.002 [DEBUG] [Thread-307240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:56:55.048 [DEBUG] [Thread-307240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:56:55.048 [DEBUG] [Thread-307240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:56:55.057 [DEBUG] [Thread-307240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:56:55.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:56: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')
2025-12-24T18:56:55.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:56:55.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:56:55.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:56:55.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:56:55.094 [DEBUG] [Thread-307240] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:56:55.948 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:56:55.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:56:55.960 [DEBUG] [Thread-307242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:57:01.361 [DEBUG] [Thread-307243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:57:16.528 [DEBUG] [Thread-307244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:57:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:57:25.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:57:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:57:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 56, 49), 17.78, 30.9, 0.0, 33.51, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:57:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:56:49
2025-12-24T18:57:26.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:57:26.475 [DEBUG] [Thread-307245] [transport.py] [_log()] starting thread (client mode): 0xf572b9a0
2025-12-24T18:57:26.475 [DEBUG] [Thread-307245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:57:26.486 [DEBUG] [Thread-307245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:57:26.486 [INFO] [Thread-307245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:57:26.489 [DEBUG] [Thread-307245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:57:26.489 [DEBUG] [Thread-307245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] client lang: <none>
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] server lang: <none>
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] kex follows: False
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:57:26.490 [DEBUG] [Thread-307245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:57:26.491 [DEBUG] [Thread-307245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:57:26.491 [DEBUG] [Thread-307245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:57:26.491 [DEBUG] [Thread-307245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:57:26.491 [DEBUG] [Thread-307245] [transport.py] [_log()] Compression: none
2025-12-24T18:57:26.491 [DEBUG] [Thread-307245] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:57:26.515 [DEBUG] [Thread-307245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:57:26.518 [DEBUG] [Thread-307245] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:57:26.519 [DEBUG] [Thread-307245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:57:26.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:57:26.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:57:26.522 [DEBUG] [Thread-307245] [transport.py] [_log()] userauth is OK
2025-12-24T18:57:26.522 [DEBUG] [Thread-307245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:57:26.522 [DEBUG] [Thread-307245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:57:26.522 [DEBUG] [Thread-307245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:57:26.522 [DEBUG] [Thread-307245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:57:26.534 [INFO] [Thread-307245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:57:26.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:57:27.112 [DEBUG] [Thread-307245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:57:27.113 [DEBUG] [Thread-307245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:57:27.114 [DEBUG] [Thread-307245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:57:27.154 [DEBUG] [Thread-307245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:57:27.154 [DEBUG] [Thread-307245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:57:27.157 [DEBUG] [Thread-307245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:57:27.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:57:27.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:57:27.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:57:27.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:57:27.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:57:27.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:57:27.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:57:27.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:57:27.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:57:27.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.706316 -999.00  +21.30  26.88     37   +6.10 1 1 1 1 1   887    0 14.26 -85.56 ----- 31.5 26.9 169.2 32.0 23.6 -25.5 23.9 -25.1 24.6 -24.0 24.7 -25.0
2025-12-24T18:57:27.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:57:27.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:57:27.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.706316
2025-12-24T18:57:27.190 [DEBUG] [Thread-307245] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:57:27.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:57:27.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:57:27.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:57:27.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:57:27.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:57:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:56:49', tmtdew=17.78, humidity=30.9, cloud=0.0, wind=33.51, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:57:05.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:57:27.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:57:27.307 [DEBUG] [Thread-307248] [transport.py] [_log()] starting thread (client mode): 0xf57290c0
2025-12-24T18:57:27.307 [DEBUG] [Thread-307248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:57:27.322 [DEBUG] [Thread-307248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:57:27.322 [INFO] [Thread-307248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] client lang: <none>
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] server lang: <none>
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] kex follows: False
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] Compression: none
2025-12-24T18:57:27.330 [DEBUG] [Thread-307248] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:57:27.385 [DEBUG] [Thread-307248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:57:27.386 [DEBUG] [Thread-307248] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:57:27.386 [DEBUG] [Thread-307248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:57:27.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:57:27.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:57:27.443 [DEBUG] [Thread-307248] [transport.py] [_log()] userauth is OK
2025-12-24T18:57:27.443 [DEBUG] [Thread-307248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:57:27.443 [DEBUG] [Thread-307248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:57:27.443 [DEBUG] [Thread-307248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:57:27.443 [DEBUG] [Thread-307248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:57:27.458 [INFO] [Thread-307248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:57:27.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:57:27.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:57:28.331 [DEBUG] [Thread-307248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:57:28.331 [DEBUG] [Thread-307248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:57:28.370 [DEBUG] [Thread-307248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:57:28.370 [DEBUG] [Thread-307248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:57:28.379 [DEBUG] [Thread-307248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:57:28.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:57:28.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:57:28.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:57:28.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:57:28.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:57:28.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:57:28.412 [DEBUG] [Thread-307248] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:57:31.631 [DEBUG] [Thread-307250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:57:46.930 [DEBUG] [Thread-307251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:57:56.108 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:57:56.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:57:56.254 [DEBUG] [Thread-307252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:57:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:57:58.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:57:58.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:57:59.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 57, 22), 17.72, 31.0, 0.0, 34.65, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:57:59.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:57:22
2025-12-24T18:57:59.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:57:59.800 [DEBUG] [Thread-307253] [transport.py] [_log()] starting thread (client mode): 0xf818a680
2025-12-24T18:57:59.800 [DEBUG] [Thread-307253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:57:59.811 [DEBUG] [Thread-307253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:57:59.811 [INFO] [Thread-307253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] client lang: <none>
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] server lang: <none>
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] kex follows: False
2025-12-24T18:57:59.815 [DEBUG] [Thread-307253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:57:59.816 [DEBUG] [Thread-307253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:57:59.816 [DEBUG] [Thread-307253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:57:59.816 [DEBUG] [Thread-307253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:57:59.816 [DEBUG] [Thread-307253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:57:59.816 [DEBUG] [Thread-307253] [transport.py] [_log()] Compression: none
2025-12-24T18:57:59.816 [DEBUG] [Thread-307253] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:57:59.848 [DEBUG] [Thread-307253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:57:59.852 [DEBUG] [Thread-307253] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:57:59.853 [DEBUG] [Thread-307253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:57:59.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:57:59.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:57:59.856 [DEBUG] [Thread-307253] [transport.py] [_log()] userauth is OK
2025-12-24T18:57:59.856 [DEBUG] [Thread-307253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:57:59.856 [DEBUG] [Thread-307253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:57:59.856 [DEBUG] [Thread-307253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:57:59.856 [DEBUG] [Thread-307253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:57:59.868 [INFO] [Thread-307253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:57:59.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:58:00.441 [DEBUG] [Thread-307253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:58:00.441 [DEBUG] [Thread-307253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:58:00.442 [DEBUG] [Thread-307253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:58:00.482 [DEBUG] [Thread-307253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:58:00.482 [DEBUG] [Thread-307253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:58:00.488 [DEBUG] [Thread-307253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:58:00.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:58:00.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:58:00.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:58:00.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:58:00.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:58:00.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:58:00.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:58:00.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:58:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:58:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.706663 -999.00  +21.20  24.18     37   +6.10 1 1 1 1 1   887    0 13.72 -94.84 ----- 22.6 24.2 154.0 45.4 23.5 -25.5 23.8 -25.0 24.4 -23.6 24.6 -24.9
2025-12-24T18:58:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:58:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:58:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.706663
2025-12-24T18:58:00.544 [DEBUG] [Thread-307253] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:58:00.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:58:00.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:58:00.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:58:00.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:58:00.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:58:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:57:22', tmtdew=17.72, humidity=31.0, cloud=0.0, wind=34.65, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:57:35.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:58:00.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:58:00.657 [DEBUG] [Thread-307256] [transport.py] [_log()] starting thread (client mode): 0xf572ba00
2025-12-24T18:58:00.657 [DEBUG] [Thread-307256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:58:00.672 [DEBUG] [Thread-307256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:58:00.672 [INFO] [Thread-307256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] client lang: <none>
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] server lang: <none>
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] kex follows: False
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] Compression: none
2025-12-24T18:58:00.680 [DEBUG] [Thread-307256] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:58:00.738 [DEBUG] [Thread-307256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:58:00.738 [DEBUG] [Thread-307256] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:58:00.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:58:00.738 [DEBUG] [Thread-307256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:58:00.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:58:00.795 [DEBUG] [Thread-307256] [transport.py] [_log()] userauth is OK
2025-12-24T18:58:00.795 [DEBUG] [Thread-307256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:58:00.795 [DEBUG] [Thread-307256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:58:00.795 [DEBUG] [Thread-307256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:58:00.795 [DEBUG] [Thread-307256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:58:00.809 [INFO] [Thread-307256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:58:00.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:58:00.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:58:01.645 [DEBUG] [Thread-307256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:58:01.646 [DEBUG] [Thread-307256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:58:01.693 [DEBUG] [Thread-307256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:58:01.693 [DEBUG] [Thread-307256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:58:01.703 [DEBUG] [Thread-307256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:58:01.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:58:01.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:58:01.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:58:01.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:58:01.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:58:01.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:58:01.741 [DEBUG] [Thread-307256] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:58:02.072 [DEBUG] [Thread-307258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:58:17.273 [DEBUG] [Thread-307259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:58:31.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:58:31.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:58:31.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
2025-12-24T18:58:32.375 [DEBUG] [Thread-307260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:58:32.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 57, 56), 17.44, 31.99, 0.0, 37.58, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:58:32.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:57:56
2025-12-24T18:58:33.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:58:33.279 [DEBUG] [Thread-307261] [transport.py] [_log()] starting thread (client mode): 0xf5728df0
2025-12-24T18:58:33.280 [DEBUG] [Thread-307261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:58:33.288 [DEBUG] [Thread-307261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:58:33.289 [INFO] [Thread-307261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:58:33.301 [DEBUG] [Thread-307261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] client lang: <none>
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] server lang: <none>
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] kex follows: False
2025-12-24T18:58:33.302 [DEBUG] [Thread-307261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:58:33.303 [DEBUG] [Thread-307261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:58:33.303 [DEBUG] [Thread-307261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:58:33.303 [DEBUG] [Thread-307261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:58:33.303 [DEBUG] [Thread-307261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:58:33.303 [DEBUG] [Thread-307261] [transport.py] [_log()] Compression: none
2025-12-24T18:58:33.303 [DEBUG] [Thread-307261] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:58:33.358 [DEBUG] [Thread-307261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:58:33.362 [DEBUG] [Thread-307261] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:58:33.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:58:33.364 [DEBUG] [Thread-307261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:58:33.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:58:33.367 [DEBUG] [Thread-307261] [transport.py] [_log()] userauth is OK
2025-12-24T18:58:33.367 [DEBUG] [Thread-307261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:58:33.368 [DEBUG] [Thread-307261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:58:33.368 [DEBUG] [Thread-307261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:58:33.368 [DEBUG] [Thread-307261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:58:33.387 [INFO] [Thread-307261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:58:33.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:58:33.971 [DEBUG] [Thread-307261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:58:33.971 [DEBUG] [Thread-307261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:58:33.972 [DEBUG] [Thread-307261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:58:34.011 [DEBUG] [Thread-307261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:58:34.011 [DEBUG] [Thread-307261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:58:34.015 [DEBUG] [Thread-307261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:58:34.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:58:34.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:58:34.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:58:34.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:58:34.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:58:34.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:58:34.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:58:34.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:58:34.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:58:34.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.707010 -999.00  +21.10  26.63     38   +6.30 1 1 1 1 1   887    0 13.69 -100.17 ----- 26.6 26.6 163.4 36.1 23.5 -25.3 23.7 -25.0 24.4 -23.9 24.6 -25.1
2025-12-24T18:58:34.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:58:34.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:58:34.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.707010
2025-12-24T18:58:34.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:58:34.048 [DEBUG] [Thread-307261] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:58:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:58:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:58:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:58:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:58:34.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:57:56', tmtdew=17.44, humidity=31.99, cloud=0.0, wind=37.58, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:58:05.664', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:58:34.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:58:34.167 [DEBUG] [Thread-307264] [transport.py] [_log()] starting thread (client mode): 0xf572b040
2025-12-24T18:58:34.168 [DEBUG] [Thread-307264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:58:34.182 [DEBUG] [Thread-307264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:58:34.182 [INFO] [Thread-307264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] client lang: <none>
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] server lang: <none>
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] kex follows: False
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:58:34.189 [DEBUG] [Thread-307264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:58:34.190 [DEBUG] [Thread-307264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:58:34.190 [DEBUG] [Thread-307264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:58:34.190 [DEBUG] [Thread-307264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:58:34.190 [DEBUG] [Thread-307264] [transport.py] [_log()] Compression: none
2025-12-24T18:58:34.190 [DEBUG] [Thread-307264] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:58:34.246 [DEBUG] [Thread-307264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:58:34.246 [DEBUG] [Thread-307264] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:58:34.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:58:34.247 [DEBUG] [Thread-307264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:58:34.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:58:34.303 [DEBUG] [Thread-307264] [transport.py] [_log()] userauth is OK
2025-12-24T18:58:34.303 [DEBUG] [Thread-307264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:58:34.303 [DEBUG] [Thread-307264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:58:34.303 [DEBUG] [Thread-307264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:58:34.303 [DEBUG] [Thread-307264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:58:34.317 [INFO] [Thread-307264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:58:34.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:58:34.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:58:35.153 [DEBUG] [Thread-307264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:58:35.153 [DEBUG] [Thread-307264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:58:35.205 [DEBUG] [Thread-307264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:58:35.205 [DEBUG] [Thread-307264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:58:35.213 [DEBUG] [Thread-307264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:58:35.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:58:35.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:58:35.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:58:35.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:58:35.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:58:35.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:58:35.246 [DEBUG] [Thread-307264] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:58:47.487 [DEBUG] [Thread-307266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:58:56.283 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:58:56.298 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:58:56.532 [DEBUG] [Thread-307267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:59:02.619 [DEBUG] [Thread-307268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:59:05.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:59:05.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:59:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:59:06.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 58, 29), 17.37, 32.16, 0.0, 35.25, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:59:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:58:29
2025-12-24T18:59:06.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:59:06.684 [DEBUG] [Thread-307269] [transport.py] [_log()] starting thread (client mode): 0xf57291b0
2025-12-24T18:59:06.685 [DEBUG] [Thread-307269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:59:06.697 [DEBUG] [Thread-307269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:59:06.697 [INFO] [Thread-307269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] client lang: <none>
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] server lang: <none>
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] kex follows: False
2025-12-24T18:59:06.702 [DEBUG] [Thread-307269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:59:06.703 [DEBUG] [Thread-307269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:59:06.703 [DEBUG] [Thread-307269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:59:06.703 [DEBUG] [Thread-307269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:59:06.703 [DEBUG] [Thread-307269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:59:06.703 [DEBUG] [Thread-307269] [transport.py] [_log()] Compression: none
2025-12-24T18:59:06.703 [DEBUG] [Thread-307269] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:59:06.734 [DEBUG] [Thread-307269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:59:06.737 [DEBUG] [Thread-307269] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:59:06.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:59:06.739 [DEBUG] [Thread-307269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:59:06.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:59:06.742 [DEBUG] [Thread-307269] [transport.py] [_log()] userauth is OK
2025-12-24T18:59:06.742 [DEBUG] [Thread-307269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:59:06.742 [DEBUG] [Thread-307269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:59:06.742 [DEBUG] [Thread-307269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:59:06.742 [DEBUG] [Thread-307269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:59:06.760 [INFO] [Thread-307269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:59:06.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:59:07.406 [DEBUG] [Thread-307269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:59:07.406 [DEBUG] [Thread-307269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:59:07.410 [DEBUG] [Thread-307269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:59:07.447 [DEBUG] [Thread-307269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:59:07.447 [DEBUG] [Thread-307269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:59:07.450 [DEBUG] [Thread-307269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:59:07.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:59:07.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:59:07.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:59:07.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:59:07.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:59:07.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:59:07.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:59:07.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:59:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:59:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.707358 -999.00  +21.10  28.38     38   +6.30 1 1 1 1 1   887    0 13.21 -105.73 ----- 26.2 28.4 165.6 40.3 23.4 -25.3 23.6 -24.3 24.3 -23.6 24.4 -25.2
2025-12-24T18:59:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:59:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:59:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.707358
2025-12-24T18:59:07.492 [DEBUG] [Thread-307269] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:59:07.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:59:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:59:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:59:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:59:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:59:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:58:29', tmtdew=17.37, humidity=32.16, cloud=0.0, wind=35.25, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:58:35.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:59:07.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:59:07.597 [DEBUG] [Thread-307272] [transport.py] [_log()] starting thread (client mode): 0xf572b340
2025-12-24T18:59:07.597 [DEBUG] [Thread-307272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:59:07.611 [DEBUG] [Thread-307272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:59:07.611 [INFO] [Thread-307272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:59:07.618 [DEBUG] [Thread-307272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:59:07.618 [DEBUG] [Thread-307272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:59:07.618 [DEBUG] [Thread-307272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] client lang: <none>
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] server lang: <none>
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] kex follows: False
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] Compression: none
2025-12-24T18:59:07.619 [DEBUG] [Thread-307272] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:59:07.675 [DEBUG] [Thread-307272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:59:07.676 [DEBUG] [Thread-307272] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:59:07.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:59:07.677 [DEBUG] [Thread-307272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:59:07.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:59:07.731 [DEBUG] [Thread-307272] [transport.py] [_log()] userauth is OK
2025-12-24T18:59:07.731 [DEBUG] [Thread-307272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:59:07.732 [DEBUG] [Thread-307272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:59:07.732 [DEBUG] [Thread-307272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:59:07.732 [DEBUG] [Thread-307272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:59:07.751 [INFO] [Thread-307272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:59:07.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:59:07.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:59:08.588 [DEBUG] [Thread-307272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:59:08.588 [DEBUG] [Thread-307272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:59:08.627 [DEBUG] [Thread-307272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:59:08.628 [DEBUG] [Thread-307272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:59:08.637 [DEBUG] [Thread-307272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:59:08.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:59:08.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:59:08.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:59:08.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:59:08.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:59:08.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:59:08.675 [DEBUG] [Thread-307272] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:59:17.720 [DEBUG] [Thread-307274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:59:32.914 [DEBUG] [Thread-307275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:59:38.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T18:59:38.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T18:59:38.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T18:59:39.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 59, 2), 17.39, 32.13, 0.0, 33.9, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T18:59:39.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:59:02
2025-12-24T18:59:39.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T18:59:40.042 [DEBUG] [Thread-307276] [transport.py] [_log()] starting thread (client mode): 0xf8189ed0
2025-12-24T18:59:40.043 [DEBUG] [Thread-307276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:59:40.048 [DEBUG] [Thread-307276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T18:59:40.048 [INFO] [Thread-307276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] client lang: <none>
2025-12-24T18:59:40.052 [DEBUG] [Thread-307276] [transport.py] [_log()] server lang: <none>
2025-12-24T18:59:40.053 [DEBUG] [Thread-307276] [transport.py] [_log()] kex follows: False
2025-12-24T18:59:40.053 [DEBUG] [Thread-307276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:59:40.053 [DEBUG] [Thread-307276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:59:40.053 [DEBUG] [Thread-307276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:59:40.053 [DEBUG] [Thread-307276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:59:40.053 [DEBUG] [Thread-307276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:59:40.053 [DEBUG] [Thread-307276] [transport.py] [_log()] Compression: none
2025-12-24T18:59:40.053 [DEBUG] [Thread-307276] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:59:40.084 [DEBUG] [Thread-307276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:59:40.088 [DEBUG] [Thread-307276] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:59:40.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T18:59:40.091 [DEBUG] [Thread-307276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T18:59:40.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:59:40.093 [DEBUG] [Thread-307276] [transport.py] [_log()] userauth is OK
2025-12-24T18:59:40.093 [DEBUG] [Thread-307276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:59:40.093 [DEBUG] [Thread-307276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:59:40.093 [DEBUG] [Thread-307276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T18:59:40.093 [DEBUG] [Thread-307276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:59:40.124 [INFO] [Thread-307276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:59:40.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:59:40.692 [DEBUG] [Thread-307276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:59:40.693 [DEBUG] [Thread-307276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:59:40.694 [DEBUG] [Thread-307276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T18:59:40.733 [DEBUG] [Thread-307276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:59:40.733 [DEBUG] [Thread-307276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:59:40.737 [DEBUG] [Thread-307276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:59:40.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:59:40.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T18:59:40.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T18:59:40.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T18:59:40.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:59:40.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T18:59:40.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:59:40.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:59:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T18:59:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.707705 -999.00  +21.10  27.20     38   +6.50 1 1 1 1 1   887    0 13.19 -117.70 ----- 20.2 27.2 167.0 40.3 23.4 -25.2 23.6 -24.8 24.2 -23.7 24.4 -24.4
2025-12-24T18:59:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T18:59:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T18:59:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.707705
2025-12-24T18:59:40.774 [DEBUG] [Thread-307276] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:59:40.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T18:59:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T18:59:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T18:59:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T18:59:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T18:59:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:59:02', tmtdew=17.39, humidity=32.13, cloud=0.0, wind=33.9, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T16:59:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T18:59:40.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T18:59:40.894 [DEBUG] [Thread-307279] [transport.py] [_log()] starting thread (client mode): 0xf818a980
2025-12-24T18:59:40.894 [DEBUG] [Thread-307279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T18:59:40.909 [DEBUG] [Thread-307279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T18:59:40.909 [INFO] [Thread-307279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T18:59:40.916 [DEBUG] [Thread-307279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T18:59:40.916 [DEBUG] [Thread-307279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T18:59:40.916 [DEBUG] [Thread-307279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] client lang: <none>
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] server lang: <none>
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] kex follows: False
2025-12-24T18:59:40.917 [DEBUG] [Thread-307279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T18:59:40.918 [DEBUG] [Thread-307279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T18:59:40.918 [DEBUG] [Thread-307279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T18:59:40.918 [DEBUG] [Thread-307279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T18:59:40.918 [DEBUG] [Thread-307279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T18:59:40.918 [DEBUG] [Thread-307279] [transport.py] [_log()] Compression: none
2025-12-24T18:59:40.918 [DEBUG] [Thread-307279] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T18:59:40.980 [DEBUG] [Thread-307279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T18:59:40.981 [DEBUG] [Thread-307279] [transport.py] [_log()] Switch to new keys ...
2025-12-24T18:59:40.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T18:59:40.983 [DEBUG] [Thread-307279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T18:59:40.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T18:59:41.039 [DEBUG] [Thread-307279] [transport.py] [_log()] userauth is OK
2025-12-24T18:59:41.040 [DEBUG] [Thread-307279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T18:59:41.040 [DEBUG] [Thread-307279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T18:59:41.040 [DEBUG] [Thread-307279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T18:59:41.040 [DEBUG] [Thread-307279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T18:59:41.059 [INFO] [Thread-307279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T18:59:41.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T18:59:41.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T18:59:41.918 [DEBUG] [Thread-307279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T18:59:41.919 [DEBUG] [Thread-307279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T18:59:41.957 [DEBUG] [Thread-307279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T18:59:41.957 [DEBUG] [Thread-307279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T18:59:41.966 [DEBUG] [Thread-307279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T18:59:41.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T18:59:41.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T18:59:41.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T18:59:41.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T18:59:41.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T18:59:41.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T18:59:42.004 [DEBUG] [Thread-307279] [transport.py] [_log()] EOF in transport thread
2025-12-24T18:59:48.072 [DEBUG] [Thread-307281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:59:56.444 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:59:56.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T18:59:56.767 [DEBUG] [Thread-307282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:00:03.215 [DEBUG] [Thread-307283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:00:12.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:00:12.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:00:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:00:13.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 18, 59, 36), 16.88, 32.86, 0.0, 35.48, 21.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:00:13.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 18:59:36
2025-12-24T19:00:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:00:13.730 [DEBUG] [Thread-307284] [transport.py] [_log()] starting thread (client mode): 0xf5728670
2025-12-24T19:00:13.731 [DEBUG] [Thread-307284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:00:13.736 [DEBUG] [Thread-307284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:00:13.737 [INFO] [Thread-307284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:00:13.742 [DEBUG] [Thread-307284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:00:13.742 [DEBUG] [Thread-307284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:00:13.742 [DEBUG] [Thread-307284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:00:13.742 [DEBUG] [Thread-307284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:00:13.742 [DEBUG] [Thread-307284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:00:13.743 [DEBUG] [Thread-307284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:00:13.743 [DEBUG] [Thread-307284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:00:13.743 [DEBUG] [Thread-307284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:00:13.743 [DEBUG] [Thread-307284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:00:13.743 [DEBUG] [Thread-307284] [transport.py] [_log()] client lang: <none>
2025-12-24T19:00:13.743 [DEBUG] [Thread-307284] [transport.py] [_log()] server lang: <none>
2025-12-24T19:00:13.743 [DEBUG] [Thread-307284] [transport.py] [_log()] kex follows: False
2025-12-24T19:00:13.743 [DEBUG] [Thread-307284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:00:13.744 [DEBUG] [Thread-307284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:00:13.744 [DEBUG] [Thread-307284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:00:13.744 [DEBUG] [Thread-307284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:00:13.744 [DEBUG] [Thread-307284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:00:13.744 [DEBUG] [Thread-307284] [transport.py] [_log()] Compression: none
2025-12-24T19:00:13.744 [DEBUG] [Thread-307284] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:00:13.780 [DEBUG] [Thread-307284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:00:13.785 [DEBUG] [Thread-307284] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:00:13.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:00:13.789 [DEBUG] [Thread-307284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:00:13.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:00:13.795 [DEBUG] [Thread-307284] [transport.py] [_log()] userauth is OK
2025-12-24T19:00:13.795 [DEBUG] [Thread-307284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:00:13.795 [DEBUG] [Thread-307284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:00:13.795 [DEBUG] [Thread-307284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:00:13.795 [DEBUG] [Thread-307284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:00:13.833 [INFO] [Thread-307284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:00:13.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:00:14.443 [DEBUG] [Thread-307284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:00:14.443 [DEBUG] [Thread-307284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:00:14.444 [DEBUG] [Thread-307284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:00:14.444 [DEBUG] [Thread-307284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:00:14.444 [DEBUG] [Thread-307284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:00:14.446 [DEBUG] [Thread-307284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:00:14.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:00:14.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:00:14.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:00:14.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:00:14.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:00:14.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:00:14.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:00:14.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:00:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:00:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.708399 -999.00  +21.00  24.62     38   +6.50 1 1 1 1 1   887    0 11.81 -152.70 ----- 24.1 24.6 169.2 31.9 23.3 -25.2 23.5 -24.6 24.2 -23.7 24.4 -25.2
2025-12-24T19:00:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:00:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:00:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.708399
2025-12-24T19:00:14.470 [DEBUG] [Thread-307284] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:00:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:00:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:00:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:00:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:00:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:00:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T18:59:36', tmtdew=16.88, humidity=32.86, cloud=0.0, wind=35.48, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:00:05.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:00:14.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:00:14.577 [DEBUG] [Thread-307287] [transport.py] [_log()] starting thread (client mode): 0xf5729540
2025-12-24T19:00:14.577 [DEBUG] [Thread-307287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:00:14.592 [DEBUG] [Thread-307287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:00:14.592 [INFO] [Thread-307287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] client lang: <none>
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] server lang: <none>
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] kex follows: False
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:00:14.599 [DEBUG] [Thread-307287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:00:14.600 [DEBUG] [Thread-307287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:00:14.600 [DEBUG] [Thread-307287] [transport.py] [_log()] Compression: none
2025-12-24T19:00:14.600 [DEBUG] [Thread-307287] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:00:14.659 [DEBUG] [Thread-307287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:00:14.660 [DEBUG] [Thread-307287] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:00:14.661 [DEBUG] [Thread-307287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:00:14.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:00:14.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:00:14.715 [DEBUG] [Thread-307287] [transport.py] [_log()] userauth is OK
2025-12-24T19:00:14.715 [DEBUG] [Thread-307287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:00:14.715 [DEBUG] [Thread-307287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:00:14.715 [DEBUG] [Thread-307287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:00:14.715 [DEBUG] [Thread-307287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:00:14.731 [INFO] [Thread-307287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:00:14.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:00:14.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:00:15.560 [DEBUG] [Thread-307287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:00:15.561 [DEBUG] [Thread-307287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:00:15.608 [DEBUG] [Thread-307287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:00:15.608 [DEBUG] [Thread-307287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:00:15.617 [DEBUG] [Thread-307287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:00:15.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:00:15.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:00:15.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:00:15.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:00:15.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:00:15.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:00:15.654 [DEBUG] [Thread-307287] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:00:18.423 [DEBUG] [Thread-307289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:00:33.624 [DEBUG] [Thread-307290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:00:45.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:00:45.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:00:45.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:00:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 0, 10), 16.8, 33.02, 0.0, 35.55, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:00:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:00:10
2025-12-24T19:00:47.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:00:47.298 [DEBUG] [Thread-307291] [transport.py] [_log()] starting thread (client mode): 0xf5728220
2025-12-24T19:00:47.299 [DEBUG] [Thread-307291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:00:47.305 [DEBUG] [Thread-307291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:00:47.305 [INFO] [Thread-307291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] client lang: <none>
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] server lang: <none>
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] kex follows: False
2025-12-24T19:00:47.318 [DEBUG] [Thread-307291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:00:47.319 [DEBUG] [Thread-307291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:00:47.319 [DEBUG] [Thread-307291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:00:47.319 [DEBUG] [Thread-307291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:00:47.319 [DEBUG] [Thread-307291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:00:47.319 [DEBUG] [Thread-307291] [transport.py] [_log()] Compression: none
2025-12-24T19:00:47.319 [DEBUG] [Thread-307291] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:00:47.351 [DEBUG] [Thread-307291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:00:47.354 [DEBUG] [Thread-307291] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:00:47.355 [DEBUG] [Thread-307291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:00:47.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:00:47.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:00:47.358 [DEBUG] [Thread-307291] [transport.py] [_log()] userauth is OK
2025-12-24T19:00:47.358 [DEBUG] [Thread-307291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:00:47.359 [DEBUG] [Thread-307291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:00:47.359 [DEBUG] [Thread-307291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:00:47.359 [DEBUG] [Thread-307291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:00:47.377 [INFO] [Thread-307291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:00:47.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:00:48.019 [DEBUG] [Thread-307291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:00:48.019 [DEBUG] [Thread-307291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:00:48.020 [DEBUG] [Thread-307291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:00:48.060 [DEBUG] [Thread-307291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:00:48.060 [DEBUG] [Thread-307291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:00:48.062 [DEBUG] [Thread-307291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:00:48.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:00:48.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:00:48.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:00:48.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:00:48.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:00:48.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:00:48.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:00:48.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:00:48.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:00:48.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.708746 -999.00  +20.90  28.95     39   +6.60 1 1 1 1 1   887    0 11.81 -142.72 ----- 20.8 28.9 151.2 37.8 23.2 -25.2 23.4 -24.5 24.1 -23.4 24.2 -25.0
2025-12-24T19:00:48.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:00:48.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:00:48.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.708746
2025-12-24T19:00:48.092 [DEBUG] [Thread-307291] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:00:48.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:00:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:00:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:00:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:00:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:00:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:00:10', tmtdew=16.8, humidity=33.02, cloud=0.0, wind=35.55, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:00:35.654', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:00:48.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:00:48.190 [DEBUG] [Thread-307294] [transport.py] [_log()] starting thread (client mode): 0xf5729360
2025-12-24T19:00:48.190 [DEBUG] [Thread-307294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:00:48.204 [DEBUG] [Thread-307294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:00:48.204 [INFO] [Thread-307294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] client lang: <none>
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] server lang: <none>
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] kex follows: False
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] Compression: none
2025-12-24T19:00:48.212 [DEBUG] [Thread-307294] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:00:48.270 [DEBUG] [Thread-307294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:00:48.270 [DEBUG] [Thread-307294] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:00:48.270 [DEBUG] [Thread-307294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:00:48.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:00:48.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:00:48.327 [DEBUG] [Thread-307294] [transport.py] [_log()] userauth is OK
2025-12-24T19:00:48.327 [DEBUG] [Thread-307294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:00:48.327 [DEBUG] [Thread-307294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:00:48.327 [DEBUG] [Thread-307294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:00:48.327 [DEBUG] [Thread-307294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:00:48.345 [INFO] [Thread-307294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:00:48.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:00:48.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:00:48.698 [DEBUG] [Thread-307296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:00:49.214 [DEBUG] [Thread-307294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:00:49.214 [DEBUG] [Thread-307294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:00:49.261 [DEBUG] [Thread-307294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:00:49.261 [DEBUG] [Thread-307294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:00:49.270 [DEBUG] [Thread-307294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:00:49.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:00:49.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:00:49.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
2025-12-24T19:00:49.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:00:49.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:00:49.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:00:49.303 [DEBUG] [Thread-307294] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:00:56.600 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:00:56.613 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:00:57.023 [DEBUG] [Thread-307297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:01:03.917 [DEBUG] [Thread-307298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:01:19.065 [DEBUG] [Thread-307299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:01:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:01:19.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:01:19.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:01:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 0, 43), 16.82, 33.09, 0.0, 34.37, 21.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:01:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:00:43
2025-12-24T19:01:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:01:21.019 [DEBUG] [Thread-307300] [transport.py] [_log()] starting thread (client mode): 0xf818a230
2025-12-24T19:01:21.020 [DEBUG] [Thread-307300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:01:21.029 [DEBUG] [Thread-307300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:01:21.029 [INFO] [Thread-307300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:01:21.034 [DEBUG] [Thread-307300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:01:21.035 [DEBUG] [Thread-307300] [transport.py] [_log()] client lang: <none>
2025-12-24T19:01:21.035 [DEBUG] [Thread-307300] [transport.py] [_log()] server lang: <none>
2025-12-24T19:01:21.035 [DEBUG] [Thread-307300] [transport.py] [_log()] kex follows: False
2025-12-24T19:01:21.035 [DEBUG] [Thread-307300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:01:21.035 [DEBUG] [Thread-307300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:01:21.035 [DEBUG] [Thread-307300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:01:21.035 [DEBUG] [Thread-307300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:01:21.036 [DEBUG] [Thread-307300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:01:21.036 [DEBUG] [Thread-307300] [transport.py] [_log()] Compression: none
2025-12-24T19:01:21.036 [DEBUG] [Thread-307300] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:01:21.069 [DEBUG] [Thread-307300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:01:21.073 [DEBUG] [Thread-307300] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:01:21.075 [DEBUG] [Thread-307300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:01:21.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:01:21.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:01:21.078 [DEBUG] [Thread-307300] [transport.py] [_log()] userauth is OK
2025-12-24T19:01:21.078 [DEBUG] [Thread-307300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:01:21.079 [DEBUG] [Thread-307300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:01:21.079 [DEBUG] [Thread-307300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:01:21.079 [DEBUG] [Thread-307300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:01:21.091 [INFO] [Thread-307300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:01:21.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:01:21.695 [DEBUG] [Thread-307300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:01:21.695 [DEBUG] [Thread-307300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:01:21.696 [DEBUG] [Thread-307300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:01:21.737 [DEBUG] [Thread-307300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:01:21.737 [DEBUG] [Thread-307300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:01:21.739 [DEBUG] [Thread-307300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:01:21.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:01:21.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:01:21.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:01:21.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:01:21.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:01:21.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:01:21.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:01:21.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:01:21.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:01:21.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.709094 -999.00  +20.90  25.23     39   +6.60 1 1 1 1 1   887    0 12.32 -139.97 ----- 23.0 25.2 166.2 29.9 23.2 -24.9 -999.0 -999.0 24.0 -23.4 24.1 -25.0
2025-12-24T19:01:21.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:01:21.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:01:21.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.709094
2025-12-24T19:01:21.767 [DEBUG] [Thread-307300] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:01:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:01:21.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:01:21.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:01:21.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:01:21.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:01:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:00:43', tmtdew=16.82, humidity=33.09, cloud=0.0, wind=34.37, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:01:05.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:01:21.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:01:21.869 [DEBUG] [Thread-307303] [transport.py] [_log()] starting thread (client mode): 0xf818a200
2025-12-24T19:01:21.869 [DEBUG] [Thread-307303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:01:21.884 [DEBUG] [Thread-307303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:01:21.884 [INFO] [Thread-307303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:01:21.891 [DEBUG] [Thread-307303] [transport.py] [_log()] client lang: <none>
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] server lang: <none>
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] kex follows: False
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] Compression: none
2025-12-24T19:01:21.892 [DEBUG] [Thread-307303] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:01:21.950 [DEBUG] [Thread-307303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:01:21.950 [DEBUG] [Thread-307303] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:01:21.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:01:21.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:01:21.950 [DEBUG] [Thread-307303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:01:22.007 [DEBUG] [Thread-307303] [transport.py] [_log()] userauth is OK
2025-12-24T19:01:22.007 [DEBUG] [Thread-307303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:01:22.007 [DEBUG] [Thread-307303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:01:22.007 [DEBUG] [Thread-307303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:01:22.007 [DEBUG] [Thread-307303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:01:22.021 [INFO] [Thread-307303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:01:22.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:01:22.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:01:22.847 [DEBUG] [Thread-307303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:01:22.847 [DEBUG] [Thread-307303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:01:22.895 [DEBUG] [Thread-307303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:01:22.895 [DEBUG] [Thread-307303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:01:22.904 [DEBUG] [Thread-307303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:01:22.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:01:22.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:01:22.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:01:22.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:01:22.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:01:22.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:01:22.937 [DEBUG] [Thread-307303] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:01:34.207 [DEBUG] [Thread-307305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:01:49.372 [DEBUG] [Thread-307306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:01:53.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:01:53.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:01:53.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:01:55.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 1, 18), 16.75, 33.24, 0.0, 31.67, 21.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:01:55.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:01:18
2025-12-24T19:01:55.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:01:55.715 [DEBUG] [Thread-307307] [transport.py] [_log()] starting thread (client mode): 0xf8188700
2025-12-24T19:01:55.715 [DEBUG] [Thread-307307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:01:55.728 [DEBUG] [Thread-307307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:01:55.728 [INFO] [Thread-307307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:01:55.731 [DEBUG] [Thread-307307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:01:55.731 [DEBUG] [Thread-307307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:01:55.731 [DEBUG] [Thread-307307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:01:55.731 [DEBUG] [Thread-307307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:01:55.731 [DEBUG] [Thread-307307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:01:55.731 [DEBUG] [Thread-307307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:01:55.731 [DEBUG] [Thread-307307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:01:55.731 [DEBUG] [Thread-307307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:01:55.732 [DEBUG] [Thread-307307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:01:55.732 [DEBUG] [Thread-307307] [transport.py] [_log()] client lang: <none>
2025-12-24T19:01:55.732 [DEBUG] [Thread-307307] [transport.py] [_log()] server lang: <none>
2025-12-24T19:01:55.732 [DEBUG] [Thread-307307] [transport.py] [_log()] kex follows: False
2025-12-24T19:01:55.732 [DEBUG] [Thread-307307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:01:55.732 [DEBUG] [Thread-307307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:01:55.733 [DEBUG] [Thread-307307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:01:55.733 [DEBUG] [Thread-307307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:01:55.733 [DEBUG] [Thread-307307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:01:55.733 [DEBUG] [Thread-307307] [transport.py] [_log()] Compression: none
2025-12-24T19:01:55.733 [DEBUG] [Thread-307307] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:01:55.763 [DEBUG] [Thread-307307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:01:55.766 [DEBUG] [Thread-307307] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:01:55.767 [DEBUG] [Thread-307307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:01:55.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:01:55.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:01:55.770 [DEBUG] [Thread-307307] [transport.py] [_log()] userauth is OK
2025-12-24T19:01:55.770 [DEBUG] [Thread-307307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:01:55.770 [DEBUG] [Thread-307307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:01:55.770 [DEBUG] [Thread-307307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:01:55.770 [DEBUG] [Thread-307307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:01:55.788 [INFO] [Thread-307307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:01:55.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:01:56.444 [DEBUG] [Thread-307307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:01:56.444 [DEBUG] [Thread-307307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:01:56.445 [DEBUG] [Thread-307307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:01:56.484 [DEBUG] [Thread-307307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:01:56.485 [DEBUG] [Thread-307307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:01:56.487 [DEBUG] [Thread-307307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:01:56.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:01:56.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:01:56.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:01:56.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:01:56.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:01:56.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:01:56.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:01:56.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:01:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:01:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.709441 -999.00  +20.80  29.95     39   +6.60 1 1 1 1 1   887    0 11.30 -160.99 ----- 22.9 29.9 168.0 36.1 23.1 -24.6 23.3 -24.3 23.9 -23.5 24.1 -25.1
2025-12-24T19:01:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:01:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:01:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.709441
2025-12-24T19:01:56.513 [DEBUG] [Thread-307307] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:01:56.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:01:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:01:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:01:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:01:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:01:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:01:18', tmtdew=16.75, humidity=33.24, cloud=0.0, wind=31.67, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:01:35.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:01:56.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:01:56.619 [DEBUG] [Thread-307310] [transport.py] [_log()] starting thread (client mode): 0xf818a920
2025-12-24T19:01:56.619 [DEBUG] [Thread-307310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:01:56.634 [DEBUG] [Thread-307310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:01:56.634 [INFO] [Thread-307310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:01:56.641 [DEBUG] [Thread-307310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:01:56.641 [DEBUG] [Thread-307310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:01:56.641 [DEBUG] [Thread-307310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] client lang: <none>
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] server lang: <none>
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] kex follows: False
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] Compression: none
2025-12-24T19:01:56.642 [DEBUG] [Thread-307310] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:01:56.701 [DEBUG] [Thread-307310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:01:56.701 [DEBUG] [Thread-307310] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:01:56.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:01:56.701 [DEBUG] [Thread-307310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:01:56.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:01:56.755 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:01:56.757 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:01:56.759 [DEBUG] [Thread-307310] [transport.py] [_log()] userauth is OK
2025-12-24T19:01:56.759 [DEBUG] [Thread-307310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:01:56.759 [DEBUG] [Thread-307310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:01:56.759 [DEBUG] [Thread-307310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:01:56.759 [DEBUG] [Thread-307310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:01:56.779 [INFO] [Thread-307310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:01:56.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:01:56.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:01:57.329 [DEBUG] [Thread-307312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:01:57.627 [DEBUG] [Thread-307310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:01:57.627 [DEBUG] [Thread-307310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:01:57.675 [DEBUG] [Thread-307310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:01:57.675 [DEBUG] [Thread-307310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:01:57.684 [DEBUG] [Thread-307310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:01:57.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:01:57.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:01:57.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:01:57.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:01:57.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:01:57.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:01:57.721 [DEBUG] [Thread-307310] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:02:04.471 [DEBUG] [Thread-307313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:02:19.679 [DEBUG] [Thread-307314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:02:27.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:02:27.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:02:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:02:28.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 1, 51), 16.63, 33.79, 0.0, 32.69, 21.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:02:28.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:01:51
2025-12-24T19:02:29.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:02:29.279 [DEBUG] [Thread-307315] [transport.py] [_log()] starting thread (client mode): 0xf5728970
2025-12-24T19:02:29.280 [DEBUG] [Thread-307315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:02:29.288 [DEBUG] [Thread-307315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:02:29.288 [INFO] [Thread-307315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] client lang: <none>
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] server lang: <none>
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] kex follows: False
2025-12-24T19:02:29.294 [DEBUG] [Thread-307315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:02:29.295 [DEBUG] [Thread-307315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:02:29.295 [DEBUG] [Thread-307315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:02:29.295 [DEBUG] [Thread-307315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:02:29.295 [DEBUG] [Thread-307315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:02:29.295 [DEBUG] [Thread-307315] [transport.py] [_log()] Compression: none
2025-12-24T19:02:29.295 [DEBUG] [Thread-307315] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:02:29.325 [DEBUG] [Thread-307315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:02:29.329 [DEBUG] [Thread-307315] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:02:29.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:02:29.331 [DEBUG] [Thread-307315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:02:29.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:02:29.333 [DEBUG] [Thread-307315] [transport.py] [_log()] userauth is OK
2025-12-24T19:02:29.334 [DEBUG] [Thread-307315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:02:29.334 [DEBUG] [Thread-307315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:02:29.334 [DEBUG] [Thread-307315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:02:29.334 [DEBUG] [Thread-307315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:02:29.353 [INFO] [Thread-307315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:02:29.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:02:29.970 [DEBUG] [Thread-307315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:02:29.970 [DEBUG] [Thread-307315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:02:29.971 [DEBUG] [Thread-307315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:02:30.011 [DEBUG] [Thread-307315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:02:30.012 [DEBUG] [Thread-307315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:02:30.016 [DEBUG] [Thread-307315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:02:30.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:02:30.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:02:30.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:02:30.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:02:30.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:02:30.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:02:30.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:02:30.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:02:30.040 [DEBUG] [Thread-307315] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:02:30.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:02:30.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.709788 -999.00  +20.80  28.45     39   +6.60 1 1 1 1 1   887    0 10.97 -177.89 ----- 23.6 28.4 173.2 39.6 23.1 -24.6 23.1 -24.6 23.9 -22.8 24.0 -25.1
2025-12-24T19:02:30.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:02:30.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:02:30.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.709788
2025-12-24T19:02:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:02:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:02:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:02:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:02:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:02:30.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:01:51', tmtdew=16.63, humidity=33.79, cloud=0.0, wind=32.69, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:02:05.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:02:30.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:02:30.153 [DEBUG] [Thread-307318] [transport.py] [_log()] starting thread (client mode): 0xf818ae60
2025-12-24T19:02:30.153 [DEBUG] [Thread-307318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:02:30.170 [DEBUG] [Thread-307318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:02:30.171 [INFO] [Thread-307318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] client lang: <none>
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] server lang: <none>
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] kex follows: False
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] Compression: none
2025-12-24T19:02:30.178 [DEBUG] [Thread-307318] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:02:30.239 [DEBUG] [Thread-307318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:02:30.240 [DEBUG] [Thread-307318] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:02:30.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:02:30.241 [DEBUG] [Thread-307318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:02:30.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:02:30.295 [DEBUG] [Thread-307318] [transport.py] [_log()] userauth is OK
2025-12-24T19:02:30.295 [DEBUG] [Thread-307318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:02:30.296 [DEBUG] [Thread-307318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:02:30.296 [DEBUG] [Thread-307318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:02:30.296 [DEBUG] [Thread-307318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:02:30.315 [INFO] [Thread-307318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:02:30.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:02:30.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:02:31.177 [DEBUG] [Thread-307318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:02:31.177 [DEBUG] [Thread-307318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:02:31.223 [DEBUG] [Thread-307318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:02:31.223 [DEBUG] [Thread-307318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:02:31.232 [DEBUG] [Thread-307318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:02:31.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:02:31.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:02:31.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:02:31.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:02:31.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:02:31.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:02:31.265 [DEBUG] [Thread-307318] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:02:34.794 [DEBUG] [Thread-307320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:02:49.946 [DEBUG] [Thread-307321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:02:56.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:02:56.901 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:02:57.602 [DEBUG] [Thread-307322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:03:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:03:01.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:03: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
2025-12-24T19:03:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 2, 26), 16.51, 34.04, 0.0, 31.81, 21.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:03:03.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:02:26
2025-12-24T19:03:03.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:03:04.001 [DEBUG] [Thread-307323] [transport.py] [_log()] starting thread (client mode): 0xf818b190
2025-12-24T19:03:04.002 [DEBUG] [Thread-307323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:03:04.004 [DEBUG] [Thread-307323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:03:04.005 [INFO] [Thread-307323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] client lang: <none>
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] server lang: <none>
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] kex follows: False
2025-12-24T19:03:04.010 [DEBUG] [Thread-307323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:03:04.011 [DEBUG] [Thread-307323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:03:04.011 [DEBUG] [Thread-307323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:03:04.011 [DEBUG] [Thread-307323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:03:04.011 [DEBUG] [Thread-307323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:03:04.011 [DEBUG] [Thread-307323] [transport.py] [_log()] Compression: none
2025-12-24T19:03:04.011 [DEBUG] [Thread-307323] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:03:04.048 [DEBUG] [Thread-307323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:03:04.054 [DEBUG] [Thread-307323] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:03:04.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:03:04.057 [DEBUG] [Thread-307323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:03:04.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:03:04.061 [DEBUG] [Thread-307323] [transport.py] [_log()] userauth is OK
2025-12-24T19:03:04.061 [DEBUG] [Thread-307323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:03:04.061 [DEBUG] [Thread-307323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:03:04.061 [DEBUG] [Thread-307323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:03:04.061 [DEBUG] [Thread-307323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:03:04.093 [INFO] [Thread-307323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:03:04.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:03:04.696 [DEBUG] [Thread-307323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:03:04.696 [DEBUG] [Thread-307323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:03:04.697 [DEBUG] [Thread-307323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:03:04.737 [DEBUG] [Thread-307323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:03:04.738 [DEBUG] [Thread-307323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:03:04.805 [DEBUG] [Thread-307323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:03:04.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:03:04.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:03:04.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:03:04.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:03:04.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:03:04.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:03:04.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:03:04.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:03:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:03:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.710135 -999.00  +20.80  29.28     39   +6.70 1 1 1 1 1   887    0 10.64 -179.11 ----- 38.1 29.3 177.6 43.0 23.0 -24.7 23.1 -25.5 23.9 -23.3 24.0 -25.3
2025-12-24T19:03:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:03:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:03:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.710135
2025-12-24T19:03:04.833 [DEBUG] [Thread-307323] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:03:04.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:03:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:03:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:03:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:03:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:03:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:02:26', tmtdew=16.51, humidity=34.04, cloud=0.0, wind=31.81, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:02:35.664', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:03:04.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:03:04.944 [DEBUG] [Thread-307326] [transport.py] [_log()] starting thread (client mode): 0xf818bdc0
2025-12-24T19:03:04.944 [DEBUG] [Thread-307326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:03:04.958 [DEBUG] [Thread-307326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:03:04.958 [INFO] [Thread-307326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:03:04.965 [DEBUG] [Thread-307326] [transport.py] [_log()] client lang: <none>
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] server lang: <none>
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] kex follows: False
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] Compression: none
2025-12-24T19:03:04.966 [DEBUG] [Thread-307326] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:03:05.023 [DEBUG] [Thread-307326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:03:05.026 [DEBUG] [Thread-307326] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:03:05.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:03:05.027 [DEBUG] [Thread-307326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:03:05.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:03:05.038 [DEBUG] [Thread-307328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:03:05.079 [DEBUG] [Thread-307326] [transport.py] [_log()] userauth is OK
2025-12-24T19:03:05.079 [DEBUG] [Thread-307326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:03:05.079 [DEBUG] [Thread-307326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:03:05.079 [DEBUG] [Thread-307326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:03:05.079 [DEBUG] [Thread-307326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:03:05.098 [INFO] [Thread-307326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:03:05.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:03:05.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:03:05.967 [DEBUG] [Thread-307326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:03:05.967 [DEBUG] [Thread-307326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:03:05.974 [DEBUG] [Thread-307326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:03:05.974 [DEBUG] [Thread-307326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:03:05.983 [DEBUG] [Thread-307326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:03:05.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:03:05.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:03:06.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:03:06.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:03:06.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:03:06.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:03:06.019 [DEBUG] [Thread-307326] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:03:20.274 [DEBUG] [Thread-307329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:03:35.392 [DEBUG] [Thread-307330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:03:36.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:03:36.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:03:36.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:03:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 2, 59), 16.37, 34.12, 0.0, 31.69, 21.04, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:03:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:02:59
2025-12-24T19:03:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:03:37.430 [DEBUG] [Thread-307331] [transport.py] [_log()] starting thread (client mode): 0xf5729360
2025-12-24T19:03:37.431 [DEBUG] [Thread-307331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:03:37.443 [DEBUG] [Thread-307331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:03:37.443 [INFO] [Thread-307331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] client lang: <none>
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] server lang: <none>
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] kex follows: False
2025-12-24T19:03:37.452 [DEBUG] [Thread-307331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:03:37.453 [DEBUG] [Thread-307331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:03:37.453 [DEBUG] [Thread-307331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:03:37.453 [DEBUG] [Thread-307331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:03:37.453 [DEBUG] [Thread-307331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:03:37.453 [DEBUG] [Thread-307331] [transport.py] [_log()] Compression: none
2025-12-24T19:03:37.453 [DEBUG] [Thread-307331] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:03:37.484 [DEBUG] [Thread-307331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:03:37.487 [DEBUG] [Thread-307331] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:03:37.488 [DEBUG] [Thread-307331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:03:37.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:03:37.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:03:37.492 [DEBUG] [Thread-307331] [transport.py] [_log()] userauth is OK
2025-12-24T19:03:37.492 [DEBUG] [Thread-307331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:03:37.492 [DEBUG] [Thread-307331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:03:37.492 [DEBUG] [Thread-307331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:03:37.492 [DEBUG] [Thread-307331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:03:37.509 [INFO] [Thread-307331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:03:37.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:03:38.149 [DEBUG] [Thread-307331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:03:38.150 [DEBUG] [Thread-307331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:03:38.151 [DEBUG] [Thread-307331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:03:38.191 [DEBUG] [Thread-307331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:03:38.191 [DEBUG] [Thread-307331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:03:38.195 [DEBUG] [Thread-307331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:03:38.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:03:38.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:03:38.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:03:38.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:03:38.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:03:38.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:03:38.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:03:38.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:03:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:03:38.224 [DEBUG] [Thread-307331] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:03:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.710483 -999.00  +20.70  31.02     40   +6.60 1 1 2 1 1   887    0 9.99 -196.23 ----- 27.2 31.0 172.0 45.9 23.0 -24.9 23.0 -24.6 23.7 -23.0 23.8 -24.8
2025-12-24T19:03:38.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:03:38.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:03:38.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.710483
2025-12-24T19:03:38.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:03:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:03:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:03:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:03:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:03:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:02:59', tmtdew=16.37, humidity=34.12, cloud=0.0, wind=31.69, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:03:05.731', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:03:38.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:03:38.330 [DEBUG] [Thread-307334] [transport.py] [_log()] starting thread (client mode): 0xf818a080
2025-12-24T19:03:38.330 [DEBUG] [Thread-307334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:03:38.344 [DEBUG] [Thread-307334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:03:38.345 [INFO] [Thread-307334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] client lang: <none>
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] server lang: <none>
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] kex follows: False
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:03:38.352 [DEBUG] [Thread-307334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:03:38.353 [DEBUG] [Thread-307334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:03:38.353 [DEBUG] [Thread-307334] [transport.py] [_log()] Compression: none
2025-12-24T19:03:38.353 [DEBUG] [Thread-307334] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:03:38.412 [DEBUG] [Thread-307334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:03:38.413 [DEBUG] [Thread-307334] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:03:38.414 [DEBUG] [Thread-307334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:03:38.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:03:38.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:03:38.467 [DEBUG] [Thread-307334] [transport.py] [_log()] userauth is OK
2025-12-24T19:03:38.468 [DEBUG] [Thread-307334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:03:38.468 [DEBUG] [Thread-307334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:03:38.468 [DEBUG] [Thread-307334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:03:38.468 [DEBUG] [Thread-307334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:03:38.487 [INFO] [Thread-307334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:03:38.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:03:38.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:03:39.320 [DEBUG] [Thread-307334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:03:39.321 [DEBUG] [Thread-307334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:03:39.369 [DEBUG] [Thread-307334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:03:39.369 [DEBUG] [Thread-307334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:03:39.378 [DEBUG] [Thread-307334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:03:39.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:03:39.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:03:39.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:03:39.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:03:39.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:03:39.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:03:39.415 [DEBUG] [Thread-307334] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:03:50.525 [DEBUG] [Thread-307336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:03:57.058 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:03:57.071 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:03:57.901 [DEBUG] [Thread-307337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:04:05.745 [DEBUG] [Thread-307338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:04:09.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:04:09.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:04:09.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
2025-12-24T19:04:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 3, 34), 16.28, 34.6, 0.0, 33.12, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:04:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:03:34
2025-12-24T19:04:10.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:04:11.002 [DEBUG] [Thread-307339] [transport.py] [_log()] starting thread (client mode): 0xf578b370
2025-12-24T19:04:11.002 [DEBUG] [Thread-307339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:04:11.016 [DEBUG] [Thread-307339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:04:11.016 [INFO] [Thread-307339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] client lang: <none>
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] server lang: <none>
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] kex follows: False
2025-12-24T19:04:11.021 [DEBUG] [Thread-307339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:04:11.022 [DEBUG] [Thread-307339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:04:11.022 [DEBUG] [Thread-307339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:04:11.022 [DEBUG] [Thread-307339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:04:11.022 [DEBUG] [Thread-307339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:04:11.022 [DEBUG] [Thread-307339] [transport.py] [_log()] Compression: none
2025-12-24T19:04:11.022 [DEBUG] [Thread-307339] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:04:11.057 [DEBUG] [Thread-307339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:04:11.061 [DEBUG] [Thread-307339] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:04:11.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:04:11.064 [DEBUG] [Thread-307339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:04:11.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:04:11.066 [DEBUG] [Thread-307339] [transport.py] [_log()] userauth is OK
2025-12-24T19:04:11.066 [DEBUG] [Thread-307339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:04:11.066 [DEBUG] [Thread-307339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:04:11.066 [DEBUG] [Thread-307339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:04:11.066 [DEBUG] [Thread-307339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:04:11.087 [INFO] [Thread-307339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:04:11.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:04:11.721 [DEBUG] [Thread-307339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:04:11.721 [DEBUG] [Thread-307339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:04:11.732 [DEBUG] [Thread-307339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:04:11.762 [DEBUG] [Thread-307339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:04:11.762 [DEBUG] [Thread-307339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:04:11.765 [DEBUG] [Thread-307339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:04:11.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:04:11.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:04:11.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:04:11.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:04:11.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:04:11.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:04:11.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:04:11.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:04:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:04:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.710830 -999.00  +20.70  23.52     40   +6.70 1 1 1 1 1   887    0 9.90 -193.07 ----- 20.4 23.5 169.2 36.5 22.9 -24.5 23.1 -24.1 23.8 -22.8 23.9 -24.7
2025-12-24T19:04:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:04:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:04:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.710830
2025-12-24T19:04:11.797 [DEBUG] [Thread-307339] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:04:11.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:04:11.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:04:11.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:04:11.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:04:11.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:04:11.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:03:34', tmtdew=16.28, humidity=34.6, cloud=0.0, wind=33.12, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:03:35.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:04:11.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:04:11.909 [DEBUG] [Thread-307342] [transport.py] [_log()] starting thread (client mode): 0xf578aa10
2025-12-24T19:04:11.910 [DEBUG] [Thread-307342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:04:11.924 [DEBUG] [Thread-307342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:04:11.924 [INFO] [Thread-307342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:04:11.931 [DEBUG] [Thread-307342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] client lang: <none>
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] server lang: <none>
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] kex follows: False
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:04:11.932 [DEBUG] [Thread-307342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:04:11.933 [DEBUG] [Thread-307342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:04:11.933 [DEBUG] [Thread-307342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:04:11.933 [DEBUG] [Thread-307342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:04:11.933 [DEBUG] [Thread-307342] [transport.py] [_log()] Compression: none
2025-12-24T19:04:11.933 [DEBUG] [Thread-307342] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:04:11.991 [DEBUG] [Thread-307342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:04:11.992 [DEBUG] [Thread-307342] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:04:11.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:04:11.996 [DEBUG] [Thread-307342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:04:11.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:04:12.048 [DEBUG] [Thread-307342] [transport.py] [_log()] userauth is OK
2025-12-24T19:04:12.048 [DEBUG] [Thread-307342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:04:12.048 [DEBUG] [Thread-307342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:04:12.048 [DEBUG] [Thread-307342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:04:12.048 [DEBUG] [Thread-307342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:04:12.068 [INFO] [Thread-307342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:04:12.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:04:12.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:04:12.896 [DEBUG] [Thread-307342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:04:12.896 [DEBUG] [Thread-307342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:04:12.944 [DEBUG] [Thread-307342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:04:12.945 [DEBUG] [Thread-307342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:04:12.953 [DEBUG] [Thread-307342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:04:12.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:04:12.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:04:12.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:04:12.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:04:12.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:04:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:04:12.987 [DEBUG] [Thread-307342] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:04:20.857 [DEBUG] [Thread-307344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:04:36.013 [DEBUG] [Thread-307345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:04:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:04:43.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:04:43.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:04:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 4, 7), 16.28, 34.6, 0.0, 33.12, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:04:44.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:04:07
2025-12-24T19:04:45.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:04:45.258 [DEBUG] [Thread-307346] [transport.py] [_log()] starting thread (client mode): 0xf578a4d0
2025-12-24T19:04:45.259 [DEBUG] [Thread-307346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:04:45.272 [DEBUG] [Thread-307346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:04:45.272 [INFO] [Thread-307346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] client lang: <none>
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] server lang: <none>
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] kex follows: False
2025-12-24T19:04:45.276 [DEBUG] [Thread-307346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:04:45.277 [DEBUG] [Thread-307346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:04:45.277 [DEBUG] [Thread-307346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:04:45.277 [DEBUG] [Thread-307346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:04:45.277 [DEBUG] [Thread-307346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:04:45.277 [DEBUG] [Thread-307346] [transport.py] [_log()] Compression: none
2025-12-24T19:04:45.277 [DEBUG] [Thread-307346] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:04:45.311 [DEBUG] [Thread-307346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:04:45.314 [DEBUG] [Thread-307346] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:04:45.315 [DEBUG] [Thread-307346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:04:45.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:04:45.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:04:45.318 [DEBUG] [Thread-307346] [transport.py] [_log()] userauth is OK
2025-12-24T19:04:45.318 [DEBUG] [Thread-307346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:04:45.318 [DEBUG] [Thread-307346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:04:45.318 [DEBUG] [Thread-307346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:04:45.319 [DEBUG] [Thread-307346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:04:45.349 [INFO] [Thread-307346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:04:45.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:04:46.007 [DEBUG] [Thread-307346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:04:46.008 [DEBUG] [Thread-307346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:04:46.010 [DEBUG] [Thread-307346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:04:46.050 [DEBUG] [Thread-307346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:04:46.050 [DEBUG] [Thread-307346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:04:46.054 [DEBUG] [Thread-307346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:04:46.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:04:46.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:04:46.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:04:46.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:04:46.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:04:46.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:04:46.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:04:46.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:04:46.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:04:46.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.711177 -999.00  +20.70  27.22     39   +6.60 1 1 1 1 1   887    0 9.72 -200.47 ----- 27.8 27.2 177.6 32.2 22.9 -25.0 23.1 -25.3 23.8 -22.9 23.8 -24.1
2025-12-24T19:04:46.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:04:46.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:04:46.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.711177
2025-12-24T19:04:46.089 [DEBUG] [Thread-307346] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:04:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:04:46.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:04:46.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:04:46.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:04:46.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:04:46.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:04:07', tmtdew=16.28, humidity=34.6, cloud=0.0, wind=33.12, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:04:05.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:04:46.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:04:46.189 [DEBUG] [Thread-307349] [transport.py] [_log()] starting thread (client mode): 0xf5789120
2025-12-24T19:04:46.189 [DEBUG] [Thread-307349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:04:46.203 [DEBUG] [Thread-307349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:04:46.203 [INFO] [Thread-307349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] client lang: <none>
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] server lang: <none>
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] kex follows: False
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] Compression: none
2025-12-24T19:04:46.211 [DEBUG] [Thread-307349] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:04:46.266 [DEBUG] [Thread-307349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:04:46.266 [DEBUG] [Thread-307349] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:04:46.267 [DEBUG] [Thread-307349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:04:46.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:04:46.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:04:46.323 [DEBUG] [Thread-307349] [transport.py] [_log()] userauth is OK
2025-12-24T19:04:46.324 [DEBUG] [Thread-307349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:04:46.324 [DEBUG] [Thread-307349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:04:46.324 [DEBUG] [Thread-307349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:04:46.324 [DEBUG] [Thread-307349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:04:46.342 [INFO] [Thread-307349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:04:46.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:04:46.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:04:47.216 [DEBUG] [Thread-307349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:04:47.217 [DEBUG] [Thread-307349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:04:47.264 [DEBUG] [Thread-307349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:04:47.265 [DEBUG] [Thread-307349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:04:47.273 [DEBUG] [Thread-307349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:04:47.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:04:47.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:04:47.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
2025-12-24T19:04:47.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:04:47.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:04:47.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:04:47.305 [DEBUG] [Thread-307349] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:04:51.103 [DEBUG] [Thread-307351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:04:57.212 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:04:57.214 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:04:58.192 [DEBUG] [Thread-307352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:05:06.285 [DEBUG] [Thread-307353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:05:17.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:05:17.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:05:17.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:05:18.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 4, 40), 16.33, 34.1, 0.0, 31.32, 21.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:05:18.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:04:40
2025-12-24T19:05:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:05:18.695 [DEBUG] [Thread-307354] [transport.py] [_log()] starting thread (client mode): 0xf578a680
2025-12-24T19:05:18.695 [DEBUG] [Thread-307354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:05:18.706 [DEBUG] [Thread-307354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:05:18.706 [INFO] [Thread-307354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] client lang: <none>
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] server lang: <none>
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] kex follows: False
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] Compression: none
2025-12-24T19:05:18.712 [DEBUG] [Thread-307354] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:05:18.743 [DEBUG] [Thread-307354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:05:18.746 [DEBUG] [Thread-307354] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:05:18.747 [DEBUG] [Thread-307354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:05:18.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:05:18.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:05:18.750 [DEBUG] [Thread-307354] [transport.py] [_log()] userauth is OK
2025-12-24T19:05:18.750 [DEBUG] [Thread-307354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:05:18.751 [DEBUG] [Thread-307354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:05:18.751 [DEBUG] [Thread-307354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:05:18.751 [DEBUG] [Thread-307354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:05:18.768 [INFO] [Thread-307354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:05:18.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:05:19.404 [DEBUG] [Thread-307354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:05:19.404 [DEBUG] [Thread-307354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:05:19.405 [DEBUG] [Thread-307354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:05:19.446 [DEBUG] [Thread-307354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:05:19.446 [DEBUG] [Thread-307354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:05:19.448 [DEBUG] [Thread-307354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:05:19.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:05:19.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:05:19.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:05:19.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:05:19.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:05:19.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:05:19.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:05:19.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:05:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:05:19.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.711871 -999.00  +20.70  30.03     40   +6.60 1 1 2 1 1   887    0 10.00 -193.40 ----- 28.0 30.0 179.2 38.0 22.7 -24.6 22.8 -26.5 23.5 -23.6 23.6 -24.6
2025-12-24T19:05:19.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:05:19.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:05:19.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.711871
2025-12-24T19:05:19.480 [DEBUG] [Thread-307354] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:05:19.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:05:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:05:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:05:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:05:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:05:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:04:40', tmtdew=16.33, humidity=34.1, cloud=0.0, wind=31.32, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:05:05.654', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:05:19.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:05:19.584 [DEBUG] [Thread-307357] [transport.py] [_log()] starting thread (client mode): 0xf8189f90
2025-12-24T19:05:19.584 [DEBUG] [Thread-307357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:05:19.598 [DEBUG] [Thread-307357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:05:19.598 [INFO] [Thread-307357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:05:19.605 [DEBUG] [Thread-307357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:05:19.605 [DEBUG] [Thread-307357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:05:19.605 [DEBUG] [Thread-307357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:05:19.605 [DEBUG] [Thread-307357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:05:19.605 [DEBUG] [Thread-307357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:05:19.605 [DEBUG] [Thread-307357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:05:19.605 [DEBUG] [Thread-307357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] client lang: <none>
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] server lang: <none>
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] kex follows: False
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] Compression: none
2025-12-24T19:05:19.606 [DEBUG] [Thread-307357] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:05:19.666 [DEBUG] [Thread-307357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:05:19.666 [DEBUG] [Thread-307357] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:05:19.666 [DEBUG] [Thread-307357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:05:19.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:05:19.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:05:19.723 [DEBUG] [Thread-307357] [transport.py] [_log()] userauth is OK
2025-12-24T19:05:19.723 [DEBUG] [Thread-307357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:05:19.723 [DEBUG] [Thread-307357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:05:19.723 [DEBUG] [Thread-307357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:05:19.723 [DEBUG] [Thread-307357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:05:19.737 [INFO] [Thread-307357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:05:19.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:05:19.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:05:20.540 [DEBUG] [Thread-307357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:05:20.540 [DEBUG] [Thread-307357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:05:20.588 [DEBUG] [Thread-307357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:05:20.588 [DEBUG] [Thread-307357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:05:20.596 [DEBUG] [Thread-307357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:05:20.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:05:20.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:05:20.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:05:20.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:05:20.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:05:20.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:05:20.629 [DEBUG] [Thread-307357] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:05:21.376 [DEBUG] [Thread-307359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:05:36.646 [DEBUG] [Thread-307360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:05:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:05:50.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:05:50.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
2025-12-24T19:05:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 5, 15), 16.33, 34.1, 0.0, 32.77, 21.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:05:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:05:15
2025-12-24T19:05:51.727 [DEBUG] [Thread-307361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:05:51.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:05:51.989 [DEBUG] [Thread-307362] [transport.py] [_log()] starting thread (client mode): 0xf818a260
2025-12-24T19:05:51.989 [DEBUG] [Thread-307362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:05:52.003 [DEBUG] [Thread-307362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:05:52.003 [INFO] [Thread-307362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:05:52.009 [DEBUG] [Thread-307362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:05:52.009 [DEBUG] [Thread-307362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:05:52.009 [DEBUG] [Thread-307362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:05:52.009 [DEBUG] [Thread-307362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] client lang: <none>
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] server lang: <none>
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] kex follows: False
2025-12-24T19:05:52.010 [DEBUG] [Thread-307362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:05:52.011 [DEBUG] [Thread-307362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:05:52.011 [DEBUG] [Thread-307362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:05:52.011 [DEBUG] [Thread-307362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:05:52.011 [DEBUG] [Thread-307362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:05:52.011 [DEBUG] [Thread-307362] [transport.py] [_log()] Compression: none
2025-12-24T19:05:52.011 [DEBUG] [Thread-307362] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:05:52.047 [DEBUG] [Thread-307362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:05:52.051 [DEBUG] [Thread-307362] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:05:52.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:05:52.055 [DEBUG] [Thread-307362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:05:52.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:05:52.059 [DEBUG] [Thread-307362] [transport.py] [_log()] userauth is OK
2025-12-24T19:05:52.059 [DEBUG] [Thread-307362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:05:52.060 [DEBUG] [Thread-307362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:05:52.060 [DEBUG] [Thread-307362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:05:52.060 [DEBUG] [Thread-307362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:05:52.085 [INFO] [Thread-307362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:05:52.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:05:52.721 [DEBUG] [Thread-307362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:05:52.721 [DEBUG] [Thread-307362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:05:52.722 [DEBUG] [Thread-307362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:05:52.762 [DEBUG] [Thread-307362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:05:52.762 [DEBUG] [Thread-307362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:05:52.765 [DEBUG] [Thread-307362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:05:52.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:05:52.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:05:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:05:52.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:05:52.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:05:52.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:05:52.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:05:52.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:05:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:05:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.712219 -999.00  +20.70  24.81     40   +6.70 1 1 1 1 1   887    0 9.68 -196.53 ----- 32.9 24.8 187.2 35.4 22.7 -25.0 22.8 -24.9 23.4 -23.0 23.6 -24.4
2025-12-24T19:05:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:05:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:05:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.712219
2025-12-24T19:05:52.802 [DEBUG] [Thread-307362] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:05:52.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:05:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:05:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:05:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:05:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:05:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:05:15', tmtdew=16.33, humidity=34.1, cloud=0.0, wind=32.77, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:05:35.722', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:05:52.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:05:52.912 [DEBUG] [Thread-307365] [transport.py] [_log()] starting thread (client mode): 0xf5729ff0
2025-12-24T19:05:52.912 [DEBUG] [Thread-307365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:05:52.926 [DEBUG] [Thread-307365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:05:52.926 [INFO] [Thread-307365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:05:52.933 [DEBUG] [Thread-307365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:05:52.933 [DEBUG] [Thread-307365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] client lang: <none>
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] server lang: <none>
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] kex follows: False
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] Compression: none
2025-12-24T19:05:52.934 [DEBUG] [Thread-307365] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:05:52.989 [DEBUG] [Thread-307365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:05:52.990 [DEBUG] [Thread-307365] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:05:52.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:05:52.990 [DEBUG] [Thread-307365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:05:52.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:05:53.047 [DEBUG] [Thread-307365] [transport.py] [_log()] userauth is OK
2025-12-24T19:05:53.047 [DEBUG] [Thread-307365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:05:53.047 [DEBUG] [Thread-307365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:05:53.047 [DEBUG] [Thread-307365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:05:53.047 [DEBUG] [Thread-307365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:05:53.062 [INFO] [Thread-307365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:05:53.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:05:53.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:05:53.879 [DEBUG] [Thread-307365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:05:53.880 [DEBUG] [Thread-307365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:05:53.927 [DEBUG] [Thread-307365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:05:53.927 [DEBUG] [Thread-307365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:05:53.935 [DEBUG] [Thread-307365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:05:53.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:05:53.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:05:53.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:05:53.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:05:53.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:05:53.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:05:53.968 [DEBUG] [Thread-307365] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:05:57.356 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:05:57.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:05:58.408 [DEBUG] [Thread-307367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:06:06.866 [DEBUG] [Thread-307368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:06:22.043 [DEBUG] [Thread-307369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:06:23.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:06:23.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:06:24.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:06:26.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 5, 48), 16.1, 34.88, 0.0, 38.16, 20.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:06:26.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:05:48
2025-12-24T19:06:26.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:06:26.429 [DEBUG] [Thread-307370] [transport.py] [_log()] starting thread (client mode): 0xf57885b0
2025-12-24T19:06:26.430 [DEBUG] [Thread-307370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:06:26.440 [DEBUG] [Thread-307370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:06:26.440 [INFO] [Thread-307370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] client lang: <none>
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] server lang: <none>
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] kex follows: False
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] Compression: none
2025-12-24T19:06:26.451 [DEBUG] [Thread-307370] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:06:26.478 [DEBUG] [Thread-307370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:06:26.481 [DEBUG] [Thread-307370] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:06:26.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:06:26.482 [DEBUG] [Thread-307370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:06:26.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:06:26.484 [DEBUG] [Thread-307370] [transport.py] [_log()] userauth is OK
2025-12-24T19:06:26.484 [DEBUG] [Thread-307370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:06:26.484 [DEBUG] [Thread-307370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:06:26.484 [DEBUG] [Thread-307370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:06:26.484 [DEBUG] [Thread-307370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:06:26.496 [INFO] [Thread-307370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:06:26.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:06:27.124 [DEBUG] [Thread-307370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:06:27.124 [DEBUG] [Thread-307370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:06:27.125 [DEBUG] [Thread-307370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:06:27.166 [DEBUG] [Thread-307370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:06:27.166 [DEBUG] [Thread-307370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:06:27.170 [DEBUG] [Thread-307370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:06:27.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:06:27.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:06:27.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:06:27.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:06:27.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:06:27.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:06:27.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:06:27.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:06:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:06:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.712566 -999.00  +20.70  27.31     40   +6.80 1 1 1 1 1   887    0 9.92 -186.10 ----- 26.8 27.3 181.4 39.0 22.6 -24.8 22.7 -25.9 23.3 -23.9 23.5 -24.5
2025-12-24T19:06:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:06:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:06:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.712566
2025-12-24T19:06:27.208 [DEBUG] [Thread-307370] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:06:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:06:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:06:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:06:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:06:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:06:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:05:48', tmtdew=16.1, humidity=34.88, cloud=0.0, wind=38.16, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:06:05.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:06:27.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:06:27.321 [DEBUG] [Thread-307373] [transport.py] [_log()] starting thread (client mode): 0xf5789e70
2025-12-24T19:06:27.322 [DEBUG] [Thread-307373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:06:27.336 [DEBUG] [Thread-307373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:06:27.336 [INFO] [Thread-307373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:06:27.344 [DEBUG] [Thread-307373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] client lang: <none>
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] server lang: <none>
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] kex follows: False
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] Compression: none
2025-12-24T19:06:27.345 [DEBUG] [Thread-307373] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:06:27.404 [DEBUG] [Thread-307373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:06:27.405 [DEBUG] [Thread-307373] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:06:27.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:06:27.406 [DEBUG] [Thread-307373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:06:27.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:06:27.460 [DEBUG] [Thread-307373] [transport.py] [_log()] userauth is OK
2025-12-24T19:06:27.460 [DEBUG] [Thread-307373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:06:27.460 [DEBUG] [Thread-307373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:06:27.461 [DEBUG] [Thread-307373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:06:27.461 [DEBUG] [Thread-307373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:06:27.480 [INFO] [Thread-307373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:06:27.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:06:27.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:06:28.324 [DEBUG] [Thread-307373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:06:28.324 [DEBUG] [Thread-307373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:06:28.373 [DEBUG] [Thread-307373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:06:28.373 [DEBUG] [Thread-307373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:06:28.382 [DEBUG] [Thread-307373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:06:28.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:06:28.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')
2025-12-24T19:06:28.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:06:28.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:06:28.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:06:28.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:06:28.419 [DEBUG] [Thread-307373] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:06:37.142 [DEBUG] [Thread-307375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:06:52.341 [DEBUG] [Thread-307376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:06:57.504 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:06:57.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:06:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:06:58.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:06:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:06:58.660 [DEBUG] [Thread-307377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:06:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 6, 21), 16.03, 35.03, 0.0, 37.49, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:06:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:06:21
2025-12-24T19:06:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:06:59.930 [DEBUG] [Thread-307378] [transport.py] [_log()] starting thread (client mode): 0xf5788f10
2025-12-24T19:06:59.931 [DEBUG] [Thread-307378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:06:59.944 [DEBUG] [Thread-307378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:06:59.944 [INFO] [Thread-307378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:06:59.948 [DEBUG] [Thread-307378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] client lang: <none>
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] server lang: <none>
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] kex follows: False
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:06:59.949 [DEBUG] [Thread-307378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:06:59.950 [DEBUG] [Thread-307378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:06:59.950 [DEBUG] [Thread-307378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:06:59.950 [DEBUG] [Thread-307378] [transport.py] [_log()] Compression: none
2025-12-24T19:06:59.950 [DEBUG] [Thread-307378] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:06:59.983 [DEBUG] [Thread-307378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:06:59.987 [DEBUG] [Thread-307378] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:06:59.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:06:59.989 [DEBUG] [Thread-307378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:06:59.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:06:59.992 [DEBUG] [Thread-307378] [transport.py] [_log()] userauth is OK
2025-12-24T19:06:59.992 [DEBUG] [Thread-307378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:06:59.992 [DEBUG] [Thread-307378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:06:59.992 [DEBUG] [Thread-307378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:06:59.992 [DEBUG] [Thread-307378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:07:00.014 [INFO] [Thread-307378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:07:00.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:07:00.631 [DEBUG] [Thread-307378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:07:00.631 [DEBUG] [Thread-307378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:07:00.632 [DEBUG] [Thread-307378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:07:00.673 [DEBUG] [Thread-307378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:07:00.673 [DEBUG] [Thread-307378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:07:00.676 [DEBUG] [Thread-307378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:07:00.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:07:00.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:07:00.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:07:00.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:07:00.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:07:00.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:07:00.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:07:00.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:07:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:07:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.712913 -999.00  +20.70  29.79     40   +6.80 1 1 1 1 1   887    0 10.20 -183.51 ----- 23.7 29.8 158.8 43.9 22.6 -24.2 22.7 -24.0 23.2 -22.8 23.4 -23.9
2025-12-24T19:07:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:07:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:07:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.712913
2025-12-24T19:07:00.703 [DEBUG] [Thread-307378] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:07:00.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:07:00.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:07:00.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:07:00.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:07:00.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:07:00.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:06:21', tmtdew=16.03, humidity=35.03, cloud=0.0, wind=37.49, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:06:35.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:07:00.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:07:00.810 [DEBUG] [Thread-307381] [transport.py] [_log()] starting thread (client mode): 0xf5788910
2025-12-24T19:07:00.810 [DEBUG] [Thread-307381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:07:00.824 [DEBUG] [Thread-307381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:07:00.824 [INFO] [Thread-307381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:07:00.831 [DEBUG] [Thread-307381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] client lang: <none>
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] server lang: <none>
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] kex follows: False
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] Compression: none
2025-12-24T19:07:00.832 [DEBUG] [Thread-307381] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:07:00.889 [DEBUG] [Thread-307381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:07:00.890 [DEBUG] [Thread-307381] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:07:00.890 [DEBUG] [Thread-307381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:07:00.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:07:00.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:07:00.947 [DEBUG] [Thread-307381] [transport.py] [_log()] userauth is OK
2025-12-24T19:07:00.947 [DEBUG] [Thread-307381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:07:00.947 [DEBUG] [Thread-307381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:07:00.947 [DEBUG] [Thread-307381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:07:00.947 [DEBUG] [Thread-307381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:07:00.962 [INFO] [Thread-307381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:07:00.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:07:00.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:07:01.785 [DEBUG] [Thread-307381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:07:01.786 [DEBUG] [Thread-307381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:07:01.834 [DEBUG] [Thread-307381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:07:01.834 [DEBUG] [Thread-307381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:07:01.842 [DEBUG] [Thread-307381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:07:01.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:07:01.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:07:01.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:07:01.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:07:01.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:07:01.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:07:01.875 [DEBUG] [Thread-307381] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:07:07.462 [DEBUG] [Thread-307383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:07:22.611 [DEBUG] [Thread-307384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:07:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:07:31.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:07:31.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:07:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 6, 56), 16.07, 35.07, 0.0, 35.78, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:07:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:06:56
2025-12-24T19:07:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:07:33.226 [DEBUG] [Thread-307385] [transport.py] [_log()] starting thread (client mode): 0xf8188ca0
2025-12-24T19:07:33.227 [DEBUG] [Thread-307385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:07:33.230 [DEBUG] [Thread-307385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:07:33.230 [INFO] [Thread-307385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] client lang: <none>
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] server lang: <none>
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] kex follows: False
2025-12-24T19:07:33.246 [DEBUG] [Thread-307385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:07:33.248 [DEBUG] [Thread-307385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:07:33.248 [DEBUG] [Thread-307385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:07:33.248 [DEBUG] [Thread-307385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:07:33.248 [DEBUG] [Thread-307385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:07:33.248 [DEBUG] [Thread-307385] [transport.py] [_log()] Compression: none
2025-12-24T19:07:33.248 [DEBUG] [Thread-307385] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:07:33.301 [DEBUG] [Thread-307385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:07:33.305 [DEBUG] [Thread-307385] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:07:33.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:07:33.308 [DEBUG] [Thread-307385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:07:33.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:07:33.310 [DEBUG] [Thread-307385] [transport.py] [_log()] userauth is OK
2025-12-24T19:07:33.310 [DEBUG] [Thread-307385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:07:33.311 [DEBUG] [Thread-307385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:07:33.311 [DEBUG] [Thread-307385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:07:33.311 [DEBUG] [Thread-307385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:07:33.330 [INFO] [Thread-307385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:07:33.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:07:33.979 [DEBUG] [Thread-307385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:07:33.979 [DEBUG] [Thread-307385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:07:33.980 [DEBUG] [Thread-307385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:07:34.021 [DEBUG] [Thread-307385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:07:34.021 [DEBUG] [Thread-307385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:07:34.024 [DEBUG] [Thread-307385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:07:34.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:07:34.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:07:34.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:07:34.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:07:34.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:07:34.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:07:34.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:07:34.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:07:34.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:07:34.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.713260 -999.00  +20.70  28.61     40   +6.70 1 1 1 1 1   887    0 9.69 -182.71 ----- 18.4 28.6 163.4 39.1 22.6 -24.3 22.7 -23.8 23.2 -22.6 23.4 -24.0
2025-12-24T19:07:34.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:07:34.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:07:34.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.713260
2025-12-24T19:07:34.065 [DEBUG] [Thread-307385] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:07:34.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:07:34.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:07:34.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:07:34.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:07:34.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:07:34.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:06:56', tmtdew=16.07, humidity=35.07, cloud=0.0, wind=35.78, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:07:05.664', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:07:34.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:07:34.169 [DEBUG] [Thread-307388] [transport.py] [_log()] starting thread (client mode): 0xf81e51e0
2025-12-24T19:07:34.169 [DEBUG] [Thread-307388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:07:34.184 [DEBUG] [Thread-307388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:07:34.184 [INFO] [Thread-307388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:07:34.204 [DEBUG] [Thread-307388] [transport.py] [_log()] client lang: <none>
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] server lang: <none>
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] kex follows: False
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] Compression: none
2025-12-24T19:07:34.205 [DEBUG] [Thread-307388] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:07:34.269 [DEBUG] [Thread-307388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:07:34.270 [DEBUG] [Thread-307388] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:07:34.270 [DEBUG] [Thread-307388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:07:34.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:07:34.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:07:34.327 [DEBUG] [Thread-307388] [transport.py] [_log()] userauth is OK
2025-12-24T19:07:34.327 [DEBUG] [Thread-307388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:07:34.327 [DEBUG] [Thread-307388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:07:34.327 [DEBUG] [Thread-307388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:07:34.327 [DEBUG] [Thread-307388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:07:34.341 [INFO] [Thread-307388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:07:34.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:07:34.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:07:35.139 [DEBUG] [Thread-307388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:07:35.139 [DEBUG] [Thread-307388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:07:35.187 [DEBUG] [Thread-307388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:07:35.187 [DEBUG] [Thread-307388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:07:35.196 [DEBUG] [Thread-307388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:07:35.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:07:35.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')
2025-12-24T19:07:35.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:07:35.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:07:35.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:07:35.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:07:35.229 [DEBUG] [Thread-307388] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:07:37.709 [DEBUG] [Thread-307390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:07:52.875 [DEBUG] [Thread-307391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:07:57.655 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:07:57.657 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:07:58.886 [DEBUG] [Thread-307392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:08:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:08:05.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:08:05.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:08:06.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 7, 30), 16.08, 35.03, 0.0, 33.63, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:08:06.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:07:30
2025-12-24T19:08:06.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:08:06.649 [DEBUG] [Thread-307393] [transport.py] [_log()] starting thread (client mode): 0xf5789c90
2025-12-24T19:08:06.650 [DEBUG] [Thread-307393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:08:06.657 [DEBUG] [Thread-307393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:08:06.657 [INFO] [Thread-307393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] client lang: <none>
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] server lang: <none>
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] kex follows: False
2025-12-24T19:08:06.661 [DEBUG] [Thread-307393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:08:06.662 [DEBUG] [Thread-307393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:08:06.662 [DEBUG] [Thread-307393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:08:06.662 [DEBUG] [Thread-307393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:08:06.662 [DEBUG] [Thread-307393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:08:06.662 [DEBUG] [Thread-307393] [transport.py] [_log()] Compression: none
2025-12-24T19:08:06.662 [DEBUG] [Thread-307393] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:08:06.694 [DEBUG] [Thread-307393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:08:06.698 [DEBUG] [Thread-307393] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:08:06.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:08:06.700 [DEBUG] [Thread-307393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:08:06.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:08:06.703 [DEBUG] [Thread-307393] [transport.py] [_log()] userauth is OK
2025-12-24T19:08:06.704 [DEBUG] [Thread-307393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:08:06.704 [DEBUG] [Thread-307393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:08:06.704 [DEBUG] [Thread-307393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:08:06.704 [DEBUG] [Thread-307393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:08:06.723 [INFO] [Thread-307393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:08:06.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:08:07.355 [DEBUG] [Thread-307393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:08:07.355 [DEBUG] [Thread-307393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:08:07.357 [DEBUG] [Thread-307393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:08:07.396 [DEBUG] [Thread-307393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:08:07.396 [DEBUG] [Thread-307393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:08:07.398 [DEBUG] [Thread-307393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:08:07.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:08:07.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:08:07.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:08:07.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:08:07.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:08:07.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:08:07.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:08:07.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:08:07.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:08:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.713607 -999.00  +20.70  27.68     40   +6.70 1 1 1 1 1   887    0 9.64 -198.34 ----- 28.0 27.7 171.4 34.9 22.5 -24.5 22.6 -24.9 23.2 -22.9 23.4 -23.8
2025-12-24T19:08:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:08:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:08:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.713607
2025-12-24T19:08:07.432 [DEBUG] [Thread-307393] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:08:07.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:08:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:08:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:08:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:08:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:08:07.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:07:30', tmtdew=16.08, humidity=35.03, cloud=0.0, wind=33.63, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:07:35.645', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:08:07.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:08:07.542 [DEBUG] [Thread-307396] [transport.py] [_log()] starting thread (client mode): 0xf578af80
2025-12-24T19:08:07.544 [DEBUG] [Thread-307396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:08:07.556 [DEBUG] [Thread-307396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:08:07.556 [INFO] [Thread-307396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:08:07.564 [DEBUG] [Thread-307396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:08:07.565 [DEBUG] [Thread-307396] [transport.py] [_log()] client lang: <none>
2025-12-24T19:08:07.565 [DEBUG] [Thread-307396] [transport.py] [_log()] server lang: <none>
2025-12-24T19:08:07.565 [DEBUG] [Thread-307396] [transport.py] [_log()] kex follows: False
2025-12-24T19:08:07.565 [DEBUG] [Thread-307396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:08:07.565 [DEBUG] [Thread-307396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:08:07.565 [DEBUG] [Thread-307396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:08:07.565 [DEBUG] [Thread-307396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:08:07.565 [DEBUG] [Thread-307396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:08:07.566 [DEBUG] [Thread-307396] [transport.py] [_log()] Compression: none
2025-12-24T19:08:07.566 [DEBUG] [Thread-307396] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:08:07.623 [DEBUG] [Thread-307396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:08:07.623 [DEBUG] [Thread-307396] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:08:07.623 [DEBUG] [Thread-307396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:08:07.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:08:07.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:08:07.679 [DEBUG] [Thread-307396] [transport.py] [_log()] userauth is OK
2025-12-24T19:08:07.679 [DEBUG] [Thread-307396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:08:07.680 [DEBUG] [Thread-307396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:08:07.680 [DEBUG] [Thread-307396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:08:07.680 [DEBUG] [Thread-307396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:08:07.704 [INFO] [Thread-307396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:08:07.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:08:07.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:08:07.994 [DEBUG] [Thread-307398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:08:08.563 [DEBUG] [Thread-307396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:08:08.563 [DEBUG] [Thread-307396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:08:08.610 [DEBUG] [Thread-307396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:08:08.610 [DEBUG] [Thread-307396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:08:08.621 [DEBUG] [Thread-307396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:08:08.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:08:08.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:08:08.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:08:08.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:08:08.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:08:08.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:08:08.655 [DEBUG] [Thread-307396] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:08:23.558 [DEBUG] [Thread-307399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:08:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:08:38.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:08:38.706 [DEBUG] [Thread-307400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:08:38.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
2025-12-24T19:08:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 8, 3), 16.11, 34.95, 0.0, 34.18, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:08:39.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:08:03
2025-12-24T19:08:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:08:40.042 [DEBUG] [Thread-307401] [transport.py] [_log()] starting thread (client mode): 0xf572a590
2025-12-24T19:08:40.043 [DEBUG] [Thread-307401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:08:40.058 [DEBUG] [Thread-307401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:08:40.058 [INFO] [Thread-307401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] client lang: <none>
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] server lang: <none>
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] kex follows: False
2025-12-24T19:08:40.063 [DEBUG] [Thread-307401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:08:40.064 [DEBUG] [Thread-307401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:08:40.064 [DEBUG] [Thread-307401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:08:40.064 [DEBUG] [Thread-307401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:08:40.064 [DEBUG] [Thread-307401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:08:40.064 [DEBUG] [Thread-307401] [transport.py] [_log()] Compression: none
2025-12-24T19:08:40.064 [DEBUG] [Thread-307401] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:08:40.094 [DEBUG] [Thread-307401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:08:40.097 [DEBUG] [Thread-307401] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:08:40.098 [DEBUG] [Thread-307401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:08:40.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:08:40.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:08:40.101 [DEBUG] [Thread-307401] [transport.py] [_log()] userauth is OK
2025-12-24T19:08:40.101 [DEBUG] [Thread-307401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:08:40.101 [DEBUG] [Thread-307401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:08:40.101 [DEBUG] [Thread-307401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:08:40.101 [DEBUG] [Thread-307401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:08:40.119 [INFO] [Thread-307401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:08:40.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:08:40.748 [DEBUG] [Thread-307401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:08:40.748 [DEBUG] [Thread-307401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:08:40.749 [DEBUG] [Thread-307401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:08:40.789 [DEBUG] [Thread-307401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:08:40.789 [DEBUG] [Thread-307401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:08:40.793 [DEBUG] [Thread-307401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:08:40.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:08:40.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:08:40.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:08:40.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:08:40.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:08:40.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:08:40.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:08:40.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:08:40.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:08:40.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.713955 -999.00  +20.70  34.06     40   +6.70 1 1 2 1 1   887    0 9.35 -199.02 ----- 29.3 34.1 181.6 41.3 22.5 -24.8 22.6 -25.8 23.1 -23.7 23.2 -24.0
2025-12-24T19:08:40.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:08:40.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:08:40.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.713955
2025-12-24T19:08:40.829 [DEBUG] [Thread-307401] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:08:40.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:08:40.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:08:03', tmtdew=16.11, humidity=34.95, cloud=0.0, wind=34.18, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:08:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:08:40.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:08:40.937 [DEBUG] [Thread-307404] [transport.py] [_log()] starting thread (client mode): 0xf81e7550
2025-12-24T19:08:40.938 [DEBUG] [Thread-307404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:08:40.953 [DEBUG] [Thread-307404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:08:40.954 [INFO] [Thread-307404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] client lang: <none>
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] server lang: <none>
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] kex follows: False
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:08:40.961 [DEBUG] [Thread-307404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:08:40.962 [DEBUG] [Thread-307404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:08:40.962 [DEBUG] [Thread-307404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:08:40.962 [DEBUG] [Thread-307404] [transport.py] [_log()] Compression: none
2025-12-24T19:08:40.962 [DEBUG] [Thread-307404] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:08:41.024 [DEBUG] [Thread-307404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:08:41.024 [DEBUG] [Thread-307404] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:08:41.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:08:41.026 [DEBUG] [Thread-307404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:08:41.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:08:41.079 [DEBUG] [Thread-307404] [transport.py] [_log()] userauth is OK
2025-12-24T19:08:41.080 [DEBUG] [Thread-307404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:08:41.080 [DEBUG] [Thread-307404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:08:41.080 [DEBUG] [Thread-307404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:08:41.080 [DEBUG] [Thread-307404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:08:41.099 [INFO] [Thread-307404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:08:41.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:08:41.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:08:41.947 [DEBUG] [Thread-307404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:08:41.947 [DEBUG] [Thread-307404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:08:41.995 [DEBUG] [Thread-307404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:08:41.996 [DEBUG] [Thread-307404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:08:42.005 [DEBUG] [Thread-307404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:08:42.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:08:42.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:08:42.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:08:42.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:08:42.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:08:42.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:08:42.043 [DEBUG] [Thread-307404] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:08:53.859 [DEBUG] [Thread-307406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:08:57.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:08:57.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:08:59.136 [DEBUG] [Thread-307407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:09:09.085 [DEBUG] [Thread-307408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:09:12.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:09:12.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:09:12.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
2025-12-24T19:09:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 8, 36), 16.15, 34.87, 0.0, 32.34, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:09:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:08:36
2025-12-24T19:09:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:09:13.582 [DEBUG] [Thread-307409] [transport.py] [_log()] starting thread (client mode): 0xf818bac0
2025-12-24T19:09:13.602 [DEBUG] [Thread-307409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:09:13.602 [DEBUG] [Thread-307409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:09:13.602 [INFO] [Thread-307409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] client lang: <none>
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] server lang: <none>
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] kex follows: False
2025-12-24T19:09:13.606 [DEBUG] [Thread-307409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:09:13.607 [DEBUG] [Thread-307409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:09:13.607 [DEBUG] [Thread-307409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:09:13.607 [DEBUG] [Thread-307409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:09:13.607 [DEBUG] [Thread-307409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:09:13.607 [DEBUG] [Thread-307409] [transport.py] [_log()] Compression: none
2025-12-24T19:09:13.607 [DEBUG] [Thread-307409] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:09:13.643 [DEBUG] [Thread-307409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:09:13.656 [DEBUG] [Thread-307409] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:09:13.662 [DEBUG] [Thread-307409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:09:13.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:09:13.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:09:13.669 [DEBUG] [Thread-307409] [transport.py] [_log()] userauth is OK
2025-12-24T19:09:13.669 [DEBUG] [Thread-307409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:09:13.669 [DEBUG] [Thread-307409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:09:13.669 [DEBUG] [Thread-307409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:09:13.669 [DEBUG] [Thread-307409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:09:13.858 [INFO] [Thread-307409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:09:13.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:09:14.505 [DEBUG] [Thread-307409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:09:14.505 [DEBUG] [Thread-307409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:09:14.505 [DEBUG] [Thread-307409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:09:14.545 [DEBUG] [Thread-307409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:09:14.545 [DEBUG] [Thread-307409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:09:14.548 [DEBUG] [Thread-307409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:09:14.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:09:14.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:09:14.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:09:14.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:09:14.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:09:14.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:09:14.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:09:14.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:09:14.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:09:14.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.714302 -999.00  +20.70  23.91     40   +6.70 1 1 1 1 1   887    0 9.69 -187.19 ----- 19.9 23.9 180.8 41.5 22.5 -24.4 22.5 -25.2 23.1 -23.2 23.2 -24.1
2025-12-24T19:09:14.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:09:14.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:09:14.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.714302
2025-12-24T19:09:14.577 [DEBUG] [Thread-307409] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:09:14.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:09:14.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:09:14.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:09:14.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:09:14.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:09:14.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:08:36', tmtdew=16.15, humidity=34.87, cloud=0.0, wind=32.34, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:08:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:09:14.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:09:14.677 [DEBUG] [Thread-307412] [transport.py] [_log()] starting thread (client mode): 0xf81e5570
2025-12-24T19:09:14.677 [DEBUG] [Thread-307412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:09:14.692 [DEBUG] [Thread-307412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:09:14.692 [INFO] [Thread-307412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] client lang: <none>
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] server lang: <none>
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] kex follows: False
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] Compression: none
2025-12-24T19:09:14.699 [DEBUG] [Thread-307412] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:09:14.759 [DEBUG] [Thread-307412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:09:14.760 [DEBUG] [Thread-307412] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:09:14.760 [DEBUG] [Thread-307412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:09:14.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:09:14.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:09:14.815 [DEBUG] [Thread-307412] [transport.py] [_log()] userauth is OK
2025-12-24T19:09:14.816 [DEBUG] [Thread-307412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:09:14.816 [DEBUG] [Thread-307412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:09:14.816 [DEBUG] [Thread-307412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:09:14.816 [DEBUG] [Thread-307412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:09:14.835 [INFO] [Thread-307412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:09:14.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:09:14.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:09:15.680 [DEBUG] [Thread-307412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:09:15.680 [DEBUG] [Thread-307412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:09:15.732 [DEBUG] [Thread-307412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:09:15.732 [DEBUG] [Thread-307412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:09:15.744 [DEBUG] [Thread-307412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:09:15.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:09: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')
2025-12-24T19:09:15.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:09:15.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:09:15.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:09:15.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:09:15.789 [DEBUG] [Thread-307412] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:09:24.232 [DEBUG] [Thread-307414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:09:39.566 [DEBUG] [Thread-307415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:09:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:09:45.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:09:45.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:09:46.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 9, 9), 16.17, 34.82, 0.0, 30.54, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:09:46.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:09:09
2025-12-24T19:09:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:09:47.176 [DEBUG] [Thread-307416] [transport.py] [_log()] starting thread (client mode): 0xf81e5600
2025-12-24T19:09:47.177 [DEBUG] [Thread-307416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:09:47.177 [DEBUG] [Thread-307416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:09:47.177 [INFO] [Thread-307416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] client lang: <none>
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] server lang: <none>
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] kex follows: False
2025-12-24T19:09:47.182 [DEBUG] [Thread-307416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:09:47.183 [DEBUG] [Thread-307416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:09:47.183 [DEBUG] [Thread-307416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:09:47.183 [DEBUG] [Thread-307416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:09:47.183 [DEBUG] [Thread-307416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:09:47.183 [DEBUG] [Thread-307416] [transport.py] [_log()] Compression: none
2025-12-24T19:09:47.183 [DEBUG] [Thread-307416] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:09:47.219 [DEBUG] [Thread-307416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:09:47.223 [DEBUG] [Thread-307416] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:09:47.224 [DEBUG] [Thread-307416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:09:47.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:09:47.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:09:47.229 [DEBUG] [Thread-307416] [transport.py] [_log()] userauth is OK
2025-12-24T19:09:47.229 [DEBUG] [Thread-307416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:09:47.229 [DEBUG] [Thread-307416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:09:47.229 [DEBUG] [Thread-307416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:09:47.230 [DEBUG] [Thread-307416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:09:47.252 [INFO] [Thread-307416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:09:47.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:09:47.871 [DEBUG] [Thread-307416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:09:47.871 [DEBUG] [Thread-307416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:09:47.872 [DEBUG] [Thread-307416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:09:47.913 [DEBUG] [Thread-307416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:09:47.913 [DEBUG] [Thread-307416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:09:47.916 [DEBUG] [Thread-307416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:09:47.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:09:47.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:09:47.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:09:47.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:09:47.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:09:47.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:09:47.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:09:47.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:09:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:09:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.714649 -999.00  +20.60  30.85     40   +6.70 1 1 2 1 1   887    0 9.69 -190.34 ----- 29.4 30.9 177.4 37.3 22.4 -24.4 22.4 -25.3 23.0 -23.3 23.1 -24.3
2025-12-24T19:09:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:09:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:09:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.714649
2025-12-24T19:09:47.953 [DEBUG] [Thread-307416] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:09:47.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:09:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:09:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:09:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:09:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:09:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:09:09', tmtdew=16.17, humidity=34.82, cloud=0.0, wind=30.54, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:09:05.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:09:48.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:09:48.056 [DEBUG] [Thread-307419] [transport.py] [_log()] starting thread (client mode): 0xf81e55d0
2025-12-24T19:09:48.056 [DEBUG] [Thread-307419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:09:48.070 [DEBUG] [Thread-307419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:09:48.070 [INFO] [Thread-307419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:09:48.078 [DEBUG] [Thread-307419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:09:48.078 [DEBUG] [Thread-307419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:09:48.078 [DEBUG] [Thread-307419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:09:48.078 [DEBUG] [Thread-307419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:09:48.078 [DEBUG] [Thread-307419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:09:48.078 [DEBUG] [Thread-307419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:09:48.078 [DEBUG] [Thread-307419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:09:48.078 [DEBUG] [Thread-307419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] client lang: <none>
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] server lang: <none>
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] kex follows: False
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:09:48.079 [DEBUG] [Thread-307419] [transport.py] [_log()] Compression: none
2025-12-24T19:09:48.080 [DEBUG] [Thread-307419] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:09:48.136 [DEBUG] [Thread-307419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:09:48.136 [DEBUG] [Thread-307419] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:09:48.137 [DEBUG] [Thread-307419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:09:48.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:09:48.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:09:48.191 [DEBUG] [Thread-307419] [transport.py] [_log()] userauth is OK
2025-12-24T19:09:48.192 [DEBUG] [Thread-307419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:09:48.192 [DEBUG] [Thread-307419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:09:48.192 [DEBUG] [Thread-307419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:09:48.192 [DEBUG] [Thread-307419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:09:48.214 [INFO] [Thread-307419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:09:48.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:09:48.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:09:49.076 [DEBUG] [Thread-307419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:09:49.076 [DEBUG] [Thread-307419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:09:49.124 [DEBUG] [Thread-307419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:09:49.124 [DEBUG] [Thread-307419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:09:49.134 [DEBUG] [Thread-307419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:09:49.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:09:49.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:09: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
2025-12-24T19:09:49.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:09:49.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:09:49.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:09:49.171 [DEBUG] [Thread-307419] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:09:54.714 [DEBUG] [Thread-307421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:09:57.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:09:57.974 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:09:59.340 [DEBUG] [Thread-307422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:10:09.868 [DEBUG] [Thread-307423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:10:19.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:10:19.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:10:19.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:10:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 9, 43), 16.24, 34.65, 0.0, 32.27, 20.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:10:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:09:43
2025-12-24T19:10:20.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:10:20.678 [DEBUG] [Thread-307424] [transport.py] [_log()] starting thread (client mode): 0xf81e79a0
2025-12-24T19:10:20.679 [DEBUG] [Thread-307424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:10:20.689 [DEBUG] [Thread-307424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:10:20.689 [INFO] [Thread-307424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:10:20.692 [DEBUG] [Thread-307424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:10:20.692 [DEBUG] [Thread-307424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:10:20.692 [DEBUG] [Thread-307424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:10:20.692 [DEBUG] [Thread-307424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:10:20.692 [DEBUG] [Thread-307424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:10:20.692 [DEBUG] [Thread-307424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:10:20.692 [DEBUG] [Thread-307424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:10:20.693 [DEBUG] [Thread-307424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:10:20.693 [DEBUG] [Thread-307424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:10:20.693 [DEBUG] [Thread-307424] [transport.py] [_log()] client lang: <none>
2025-12-24T19:10:20.693 [DEBUG] [Thread-307424] [transport.py] [_log()] server lang: <none>
2025-12-24T19:10:20.693 [DEBUG] [Thread-307424] [transport.py] [_log()] kex follows: False
2025-12-24T19:10:20.693 [DEBUG] [Thread-307424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:10:20.693 [DEBUG] [Thread-307424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:10:20.693 [DEBUG] [Thread-307424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:10:20.694 [DEBUG] [Thread-307424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:10:20.694 [DEBUG] [Thread-307424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:10:20.694 [DEBUG] [Thread-307424] [transport.py] [_log()] Compression: none
2025-12-24T19:10:20.694 [DEBUG] [Thread-307424] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:10:20.726 [DEBUG] [Thread-307424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:10:20.729 [DEBUG] [Thread-307424] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:10:20.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:10:20.731 [DEBUG] [Thread-307424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:10:20.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:10:20.768 [DEBUG] [Thread-307424] [transport.py] [_log()] userauth is OK
2025-12-24T19:10:20.769 [DEBUG] [Thread-307424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:10:20.769 [DEBUG] [Thread-307424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:10:20.769 [DEBUG] [Thread-307424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:10:20.769 [DEBUG] [Thread-307424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:10:20.789 [INFO] [Thread-307424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:10:20.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:10:21.417 [DEBUG] [Thread-307424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:10:21.417 [DEBUG] [Thread-307424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:10:21.417 [DEBUG] [Thread-307424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:10:21.457 [DEBUG] [Thread-307424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:10:21.458 [DEBUG] [Thread-307424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:10:21.460 [DEBUG] [Thread-307424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:10:21.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:10:21.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:10:21.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:10:21.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:10:21.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:10:21.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:10:21.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:10:21.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:10:21.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:10:21.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.714996 -999.00  +20.60  24.85     40   +6.70 1 1 1 1 1   887    0 9.71 -192.03 ----- 27.2 24.9 172.2 37.3 22.4 -24.4 22.4 -24.7 22.9 -22.7 23.1 -24.1
2025-12-24T19:10:21.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:10:21.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:10:21.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.714996
2025-12-24T19:10:21.493 [DEBUG] [Thread-307424] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:10:21.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:10:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:10:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:10:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:10:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:10:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:09:43', tmtdew=16.24, humidity=34.65, cloud=0.0, wind=32.27, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:09:35.654', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:10:21.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:10:21.601 [DEBUG] [Thread-307427] [transport.py] [_log()] starting thread (client mode): 0xf81e55d0
2025-12-24T19:10:21.601 [DEBUG] [Thread-307427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:10:21.617 [DEBUG] [Thread-307427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:10:21.617 [INFO] [Thread-307427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] client lang: <none>
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] server lang: <none>
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] kex follows: False
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] Compression: none
2025-12-24T19:10:21.625 [DEBUG] [Thread-307427] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:10:21.682 [DEBUG] [Thread-307427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:10:21.682 [DEBUG] [Thread-307427] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:10:21.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:10:21.683 [DEBUG] [Thread-307427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:10:21.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:10:21.739 [DEBUG] [Thread-307427] [transport.py] [_log()] userauth is OK
2025-12-24T19:10:21.739 [DEBUG] [Thread-307427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:10:21.739 [DEBUG] [Thread-307427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:10:21.739 [DEBUG] [Thread-307427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:10:21.739 [DEBUG] [Thread-307427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:10:21.753 [INFO] [Thread-307427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:10:21.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:10:21.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:10:22.618 [DEBUG] [Thread-307427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:10:22.618 [DEBUG] [Thread-307427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:10:22.671 [DEBUG] [Thread-307427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:10:22.671 [DEBUG] [Thread-307427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:10:22.683 [DEBUG] [Thread-307427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:10:22.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:10:22.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:10:22.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:10:22.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:10:22.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:10:22.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:10:22.723 [DEBUG] [Thread-307427] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:10:24.938 [DEBUG] [Thread-307429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:10:40.144 [DEBUG] [Thread-307430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:10:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:10:52.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:10:52.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:10:54.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 10, 16), 16.21, 34.74, 0.0, 31.55, 20.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:10:54.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:10:16
2025-12-24T19:10:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:10:54.380 [DEBUG] [Thread-307431] [transport.py] [_log()] starting thread (client mode): 0xf578ab60
2025-12-24T19:10:54.382 [DEBUG] [Thread-307431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:10:54.382 [DEBUG] [Thread-307431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:10:54.382 [INFO] [Thread-307431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:10:54.387 [DEBUG] [Thread-307431] [transport.py] [_log()] client lang: <none>
2025-12-24T19:10:54.388 [DEBUG] [Thread-307431] [transport.py] [_log()] server lang: <none>
2025-12-24T19:10:54.388 [DEBUG] [Thread-307431] [transport.py] [_log()] kex follows: False
2025-12-24T19:10:54.388 [DEBUG] [Thread-307431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:10:54.388 [DEBUG] [Thread-307431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:10:54.388 [DEBUG] [Thread-307431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:10:54.388 [DEBUG] [Thread-307431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:10:54.388 [DEBUG] [Thread-307431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:10:54.389 [DEBUG] [Thread-307431] [transport.py] [_log()] Compression: none
2025-12-24T19:10:54.389 [DEBUG] [Thread-307431] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:10:54.416 [DEBUG] [Thread-307431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:10:54.420 [DEBUG] [Thread-307431] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:10:54.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:10:54.422 [DEBUG] [Thread-307431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:10:54.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:10:54.424 [DEBUG] [Thread-307431] [transport.py] [_log()] userauth is OK
2025-12-24T19:10:54.424 [DEBUG] [Thread-307431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:10:54.424 [DEBUG] [Thread-307431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:10:54.424 [DEBUG] [Thread-307431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:10:54.424 [DEBUG] [Thread-307431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:10:54.436 [INFO] [Thread-307431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:10:54.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:10:55.081 [DEBUG] [Thread-307431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:10:55.081 [DEBUG] [Thread-307431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:10:55.083 [DEBUG] [Thread-307431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:10:55.122 [DEBUG] [Thread-307431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:10:55.122 [DEBUG] [Thread-307431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:10:55.126 [DEBUG] [Thread-307431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:10:55.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:10:55.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:10:55.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:10:55.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:10:55.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:10:55.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:10:55.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:10:55.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:10:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:10:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.715691 -999.00  +20.60  29.12     40   +6.60 1 1 1 1 1   887    0 8.85 -213.57 ----- 23.0 29.1 177.4 38.2 22.3 -24.3 22.3 -25.6 22.9 -23.3 23.0 -24.4
2025-12-24T19:10:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:10:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:10:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.715691
2025-12-24T19:10:55.161 [DEBUG] [Thread-307431] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:10:55.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:10:55.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:10:55.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:10:55.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:10:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:10:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:10:16', tmtdew=16.21, humidity=34.74, cloud=0.0, wind=31.55, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:10:35.702', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:10:55.242 [DEBUG] [Thread-307434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:10:55.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:10:55.281 [DEBUG] [Thread-307435] [transport.py] [_log()] starting thread (client mode): 0xf578ba90
2025-12-24T19:10:55.281 [DEBUG] [Thread-307435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:10:55.296 [DEBUG] [Thread-307435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:10:55.296 [INFO] [Thread-307435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:10:55.304 [DEBUG] [Thread-307435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:10:55.304 [DEBUG] [Thread-307435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:10:55.304 [DEBUG] [Thread-307435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:10:55.304 [DEBUG] [Thread-307435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:10:55.304 [DEBUG] [Thread-307435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:10:55.304 [DEBUG] [Thread-307435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:10:55.304 [DEBUG] [Thread-307435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:10:55.305 [DEBUG] [Thread-307435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:10:55.305 [DEBUG] [Thread-307435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:10:55.305 [DEBUG] [Thread-307435] [transport.py] [_log()] client lang: <none>
2025-12-24T19:10:55.305 [DEBUG] [Thread-307435] [transport.py] [_log()] server lang: <none>
2025-12-24T19:10:55.305 [DEBUG] [Thread-307435] [transport.py] [_log()] kex follows: False
2025-12-24T19:10:55.305 [DEBUG] [Thread-307435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:10:55.305 [DEBUG] [Thread-307435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:10:55.306 [DEBUG] [Thread-307435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:10:55.306 [DEBUG] [Thread-307435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:10:55.306 [DEBUG] [Thread-307435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:10:55.306 [DEBUG] [Thread-307435] [transport.py] [_log()] Compression: none
2025-12-24T19:10:55.306 [DEBUG] [Thread-307435] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:10:55.364 [DEBUG] [Thread-307435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:10:55.365 [DEBUG] [Thread-307435] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:10:55.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:10:55.366 [DEBUG] [Thread-307435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:10:55.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:10:55.419 [DEBUG] [Thread-307435] [transport.py] [_log()] userauth is OK
2025-12-24T19:10:55.419 [DEBUG] [Thread-307435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:10:55.419 [DEBUG] [Thread-307435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:10:55.420 [DEBUG] [Thread-307435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:10:55.420 [DEBUG] [Thread-307435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:10:55.443 [INFO] [Thread-307435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:10:55.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:10:55.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:10:56.249 [DEBUG] [Thread-307435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:10:56.250 [DEBUG] [Thread-307435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:10:56.297 [DEBUG] [Thread-307435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:10:56.297 [DEBUG] [Thread-307435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:10:56.305 [DEBUG] [Thread-307435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:10:56.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:10:56.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:10:56.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:10:56.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:10:56.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:10:56.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:10:56.344 [DEBUG] [Thread-307435] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:10:58.113 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:10:58.114 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:10:59.644 [DEBUG] [Thread-307437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:11:10.509 [DEBUG] [Thread-307438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:11:25.638 [DEBUG] [Thread-307439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:11:26.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:11:26.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:11:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:11:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 10, 50), 16.1, 34.98, 0.0, 35.54, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:11:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:10:50
2025-12-24T19:11:27.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:11:27.641 [DEBUG] [Thread-307440] [transport.py] [_log()] starting thread (client mode): 0xf5789cf0
2025-12-24T19:11:27.642 [DEBUG] [Thread-307440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:11:27.655 [DEBUG] [Thread-307440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:11:27.655 [INFO] [Thread-307440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:11:27.659 [DEBUG] [Thread-307440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] client lang: <none>
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] server lang: <none>
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] kex follows: False
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:11:27.660 [DEBUG] [Thread-307440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:11:27.661 [DEBUG] [Thread-307440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:11:27.661 [DEBUG] [Thread-307440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:11:27.661 [DEBUG] [Thread-307440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:11:27.661 [DEBUG] [Thread-307440] [transport.py] [_log()] Compression: none
2025-12-24T19:11:27.661 [DEBUG] [Thread-307440] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:11:27.687 [DEBUG] [Thread-307440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:11:27.691 [DEBUG] [Thread-307440] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:11:27.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:11:27.692 [DEBUG] [Thread-307440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:11:27.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:11:27.694 [DEBUG] [Thread-307440] [transport.py] [_log()] userauth is OK
2025-12-24T19:11:27.694 [DEBUG] [Thread-307440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:11:27.694 [DEBUG] [Thread-307440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:11:27.694 [DEBUG] [Thread-307440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:11:27.694 [DEBUG] [Thread-307440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:11:27.706 [INFO] [Thread-307440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:11:27.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:11:28.349 [DEBUG] [Thread-307440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:11:28.349 [DEBUG] [Thread-307440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:11:28.352 [DEBUG] [Thread-307440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:11:28.390 [DEBUG] [Thread-307440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:11:28.390 [DEBUG] [Thread-307440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:11:28.394 [DEBUG] [Thread-307440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:11:28.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:11:28.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:11:28.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:11:28.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:11:28.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:11:28.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:11:28.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:11:28.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:11:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:11:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.716038 -999.00  +20.60  21.71     40   +6.70 1 1 1 1 1   887    0 9.27 -200.96 ----- 24.8 21.7 175.8 36.8 22.3 -24.5 22.3 -24.8 22.8 -23.4 23.0 -24.1
2025-12-24T19:11:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:11:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:11:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.716038
2025-12-24T19:11:28.436 [DEBUG] [Thread-307440] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:11:28.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:11:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:11:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:11:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:11:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:11:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:10:50', tmtdew=16.1, humidity=34.98, cloud=0.0, wind=35.54, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:11:05.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:11:28.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:11:28.545 [DEBUG] [Thread-307443] [transport.py] [_log()] starting thread (client mode): 0xf5788a00
2025-12-24T19:11:28.545 [DEBUG] [Thread-307443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:11:28.560 [DEBUG] [Thread-307443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:11:28.560 [INFO] [Thread-307443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:11:28.567 [DEBUG] [Thread-307443] [transport.py] [_log()] client lang: <none>
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] server lang: <none>
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] kex follows: False
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] Compression: none
2025-12-24T19:11:28.568 [DEBUG] [Thread-307443] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:11:28.631 [DEBUG] [Thread-307443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:11:28.632 [DEBUG] [Thread-307443] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:11:28.633 [DEBUG] [Thread-307443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:11:28.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:11:28.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:11:28.691 [DEBUG] [Thread-307443] [transport.py] [_log()] userauth is OK
2025-12-24T19:11:28.691 [DEBUG] [Thread-307443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:11:28.691 [DEBUG] [Thread-307443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:11:28.691 [DEBUG] [Thread-307443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:11:28.691 [DEBUG] [Thread-307443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:11:28.706 [INFO] [Thread-307443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:11:28.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:11:28.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:11:29.520 [DEBUG] [Thread-307443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:11:29.520 [DEBUG] [Thread-307443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:11:29.568 [DEBUG] [Thread-307443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:11:29.568 [DEBUG] [Thread-307443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:11:29.577 [DEBUG] [Thread-307443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:11:29.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:11:29.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')
2025-12-24T19:11:29.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:11:29.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:11:29.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:11:29.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:11:29.616 [DEBUG] [Thread-307443] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:11:40.779 [DEBUG] [Thread-307445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:11:55.989 [DEBUG] [Thread-307446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:11:58.256 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:11:58.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:11:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:11:59.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:11:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:11:59.892 [DEBUG] [Thread-307447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:12:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 11, 24), 16.09, 35.0, 0.0, 36.06, 20.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:12:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:11:24
2025-12-24T19:12:01.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:12:01.195 [DEBUG] [Thread-307448] [transport.py] [_log()] starting thread (client mode): 0xf81e4cd0
2025-12-24T19:12:01.196 [DEBUG] [Thread-307448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:12:01.211 [DEBUG] [Thread-307448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:12:01.211 [INFO] [Thread-307448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] client lang: <none>
2025-12-24T19:12:01.214 [DEBUG] [Thread-307448] [transport.py] [_log()] server lang: <none>
2025-12-24T19:12:01.215 [DEBUG] [Thread-307448] [transport.py] [_log()] kex follows: False
2025-12-24T19:12:01.215 [DEBUG] [Thread-307448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:12:01.215 [DEBUG] [Thread-307448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:12:01.215 [DEBUG] [Thread-307448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:12:01.215 [DEBUG] [Thread-307448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:12:01.215 [DEBUG] [Thread-307448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:12:01.215 [DEBUG] [Thread-307448] [transport.py] [_log()] Compression: none
2025-12-24T19:12:01.215 [DEBUG] [Thread-307448] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:12:01.248 [DEBUG] [Thread-307448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:12:01.252 [DEBUG] [Thread-307448] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:12:01.253 [DEBUG] [Thread-307448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:12:01.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:12:01.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:12:01.293 [DEBUG] [Thread-307448] [transport.py] [_log()] userauth is OK
2025-12-24T19:12:01.293 [DEBUG] [Thread-307448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:12:01.293 [DEBUG] [Thread-307448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:12:01.293 [DEBUG] [Thread-307448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:12:01.293 [DEBUG] [Thread-307448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:12:01.320 [INFO] [Thread-307448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:12:01.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:12:01.959 [DEBUG] [Thread-307448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:12:01.959 [DEBUG] [Thread-307448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:12:01.997 [DEBUG] [Thread-307448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:12:01.997 [DEBUG] [Thread-307448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:12:01.997 [DEBUG] [Thread-307448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:12:01.999 [DEBUG] [Thread-307448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:12:02.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:12:02.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:12:02.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:12:02.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:12:02.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:12:02.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:12:02.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:12:02.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:12:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:12:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.716385 -999.00  +20.60  27.45     40   +6.60 1 1 1 1 1   887    0 9.26 -201.70 ----- 29.8 27.4 183.2 35.0 22.2 -24.3 22.2 -25.3 22.8 -22.5 22.9 -24.4
2025-12-24T19:12:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:12:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:12:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.716385
2025-12-24T19:12:02.340 [DEBUG] [Thread-307448] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:12:02.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:12:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:12:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:12:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:12:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:12:02.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:11:24', tmtdew=16.09, humidity=35.0, cloud=0.0, wind=36.06, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:11:35.664', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:12:02.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:12:02.459 [DEBUG] [Thread-307451] [transport.py] [_log()] starting thread (client mode): 0xf81e6a40
2025-12-24T19:12:02.459 [DEBUG] [Thread-307451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:12:02.473 [DEBUG] [Thread-307451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:12:02.474 [INFO] [Thread-307451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:12:02.481 [DEBUG] [Thread-307451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:12:02.481 [DEBUG] [Thread-307451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:12:02.481 [DEBUG] [Thread-307451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:12:02.481 [DEBUG] [Thread-307451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:12:02.481 [DEBUG] [Thread-307451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] client lang: <none>
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] server lang: <none>
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] kex follows: False
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] Compression: none
2025-12-24T19:12:02.482 [DEBUG] [Thread-307451] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:12:02.539 [DEBUG] [Thread-307451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:12:02.540 [DEBUG] [Thread-307451] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:12:02.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:12:02.541 [DEBUG] [Thread-307451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:12:02.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:12:02.597 [DEBUG] [Thread-307451] [transport.py] [_log()] userauth is OK
2025-12-24T19:12:02.597 [DEBUG] [Thread-307451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:12:02.597 [DEBUG] [Thread-307451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:12:02.597 [DEBUG] [Thread-307451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:12:02.597 [DEBUG] [Thread-307451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:12:02.614 [INFO] [Thread-307451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:12:02.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:12:02.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:12:03.472 [DEBUG] [Thread-307451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:12:03.472 [DEBUG] [Thread-307451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:12:03.520 [DEBUG] [Thread-307451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:12:03.520 [DEBUG] [Thread-307451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:12:03.528 [DEBUG] [Thread-307451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:12:03.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:12:03.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:12:03.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:12:03.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:12:03.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:12:03.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:12:03.560 [DEBUG] [Thread-307451] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:12:11.076 [DEBUG] [Thread-307453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:12:26.278 [DEBUG] [Thread-307454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:12:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:12:33.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:12:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:12:35.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 11, 57), 16.09, 34.88, 0.0, 28.74, 20.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:12:35.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:11:57
2025-12-24T19:12:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:12:35.614 [DEBUG] [Thread-307455] [transport.py] [_log()] starting thread (client mode): 0xf578bb80
2025-12-24T19:12:35.615 [DEBUG] [Thread-307455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:12:35.624 [DEBUG] [Thread-307455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:12:35.624 [INFO] [Thread-307455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] client lang: <none>
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] server lang: <none>
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] kex follows: False
2025-12-24T19:12:35.629 [DEBUG] [Thread-307455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:12:35.630 [DEBUG] [Thread-307455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:12:35.630 [DEBUG] [Thread-307455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:12:35.630 [DEBUG] [Thread-307455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:12:35.630 [DEBUG] [Thread-307455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:12:35.630 [DEBUG] [Thread-307455] [transport.py] [_log()] Compression: none
2025-12-24T19:12:35.630 [DEBUG] [Thread-307455] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:12:35.666 [DEBUG] [Thread-307455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:12:35.670 [DEBUG] [Thread-307455] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:12:35.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:12:35.673 [DEBUG] [Thread-307455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:12:35.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:12:35.675 [DEBUG] [Thread-307455] [transport.py] [_log()] userauth is OK
2025-12-24T19:12:35.675 [DEBUG] [Thread-307455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:12:35.675 [DEBUG] [Thread-307455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:12:35.675 [DEBUG] [Thread-307455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:12:35.675 [DEBUG] [Thread-307455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:12:35.710 [INFO] [Thread-307455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:12:35.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:12:36.372 [DEBUG] [Thread-307455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:12:36.372 [DEBUG] [Thread-307455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:12:36.372 [DEBUG] [Thread-307455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:12:36.413 [DEBUG] [Thread-307455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:12:36.413 [DEBUG] [Thread-307455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:12:36.416 [DEBUG] [Thread-307455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:12:36.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:12:36.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:12:36.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:12:36.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:12:36.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:12:36.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:12:36.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:12:36.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:12:36.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:12:36.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.716732 -999.00  +20.60  20.65     40   +6.60 1 1 1 1 1   887    0 8.94 -201.95 ----- 21.5 20.6 183.2 35.9 22.2 -24.0 22.2 -24.9 22.8 -22.6 22.9 -23.9
2025-12-24T19:12:36.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:12:36.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:12:36.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.716732
2025-12-24T19:12:36.446 [DEBUG] [Thread-307455] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:12:36.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:12:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:12:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:12:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:12:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:12:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:11:57', tmtdew=16.09, humidity=34.88, cloud=0.0, wind=28.74, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:12:05.645', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:12:36.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:12:36.547 [DEBUG] [Thread-307458] [transport.py] [_log()] starting thread (client mode): 0xf5789b10
2025-12-24T19:12:36.547 [DEBUG] [Thread-307458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:12:36.562 [DEBUG] [Thread-307458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:12:36.562 [INFO] [Thread-307458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:12:36.569 [DEBUG] [Thread-307458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] client lang: <none>
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] server lang: <none>
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] kex follows: False
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] Compression: none
2025-12-24T19:12:36.570 [DEBUG] [Thread-307458] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:12:36.629 [DEBUG] [Thread-307458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:12:36.630 [DEBUG] [Thread-307458] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:12:36.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:12:36.630 [DEBUG] [Thread-307458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:12:36.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:12:36.687 [DEBUG] [Thread-307458] [transport.py] [_log()] userauth is OK
2025-12-24T19:12:36.687 [DEBUG] [Thread-307458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:12:36.687 [DEBUG] [Thread-307458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:12:36.687 [DEBUG] [Thread-307458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:12:36.687 [DEBUG] [Thread-307458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:12:36.704 [INFO] [Thread-307458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:12:36.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:12:36.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:12:37.561 [DEBUG] [Thread-307458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:12:37.561 [DEBUG] [Thread-307458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:12:37.609 [DEBUG] [Thread-307458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:12:37.609 [DEBUG] [Thread-307458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:12:37.618 [DEBUG] [Thread-307458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:12:37.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:12:37.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:12:37.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:12:37.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:12:37.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:12:37.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:12:37.650 [DEBUG] [Thread-307458] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:12:41.390 [DEBUG] [Thread-307460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:12:56.569 [DEBUG] [Thread-307461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:12:58.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:12:58.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:13:00.171 [DEBUG] [Thread-307462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:13:07.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:13:07.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:13:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:13:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 12, 30), 16.12, 34.82, 0.0, 31.53, 20.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:13:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:12:30
2025-12-24T19:13:08.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:13:08.974 [DEBUG] [Thread-307463] [transport.py] [_log()] starting thread (client mode): 0xf81e5810
2025-12-24T19:13:08.974 [DEBUG] [Thread-307463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:13:08.984 [DEBUG] [Thread-307463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:13:08.984 [INFO] [Thread-307463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:13:08.989 [DEBUG] [Thread-307463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:13:08.989 [DEBUG] [Thread-307463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:13:08.989 [DEBUG] [Thread-307463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] client lang: <none>
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] server lang: <none>
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] kex follows: False
2025-12-24T19:13:08.990 [DEBUG] [Thread-307463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:13:08.991 [DEBUG] [Thread-307463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:13:08.991 [DEBUG] [Thread-307463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:13:08.991 [DEBUG] [Thread-307463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:13:08.991 [DEBUG] [Thread-307463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:13:08.991 [DEBUG] [Thread-307463] [transport.py] [_log()] Compression: none
2025-12-24T19:13:08.991 [DEBUG] [Thread-307463] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:13:09.020 [DEBUG] [Thread-307463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:13:09.025 [DEBUG] [Thread-307463] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:13:09.026 [DEBUG] [Thread-307463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:13:09.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:13:09.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:13:09.032 [DEBUG] [Thread-307463] [transport.py] [_log()] userauth is OK
2025-12-24T19:13:09.032 [DEBUG] [Thread-307463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:13:09.032 [DEBUG] [Thread-307463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:13:09.032 [DEBUG] [Thread-307463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:13:09.032 [DEBUG] [Thread-307463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:13:09.061 [INFO] [Thread-307463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:13:09.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:13:09.727 [DEBUG] [Thread-307463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:13:09.727 [DEBUG] [Thread-307463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:13:09.729 [DEBUG] [Thread-307463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:13:09.768 [DEBUG] [Thread-307463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:13:09.768 [DEBUG] [Thread-307463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:13:09.772 [DEBUG] [Thread-307463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:13:09.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:13:09.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:13:09.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:13:09.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:13:09.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:13:09.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:13:09.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:13:09.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:13:09.801 [DEBUG] [Thread-307463] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:13:09.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:13:09.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.717080 -999.00  +20.60  26.96     40   +6.60 1 1 1 1 1   887    0 9.02 -193.66 ----- 18.8 27.0 174.2 31.5 22.2 -23.9 22.3 -23.8 22.8 -22.6 22.9 -23.5
2025-12-24T19:13:09.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:13:09.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:13:09.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.717080
2025-12-24T19:13:09.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:13:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:13:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:13:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:13:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:13:09.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:12:30', tmtdew=16.12, humidity=34.82, cloud=0.0, wind=31.53, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:12:35.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:13:09.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:13:09.929 [DEBUG] [Thread-307466] [transport.py] [_log()] starting thread (client mode): 0xf81e4910
2025-12-24T19:13:09.930 [DEBUG] [Thread-307466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:13:09.944 [DEBUG] [Thread-307466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:13:09.944 [INFO] [Thread-307466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] client lang: <none>
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] server lang: <none>
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] kex follows: False
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:13:09.952 [DEBUG] [Thread-307466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:13:09.953 [DEBUG] [Thread-307466] [transport.py] [_log()] Compression: none
2025-12-24T19:13:09.953 [DEBUG] [Thread-307466] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:13:10.011 [DEBUG] [Thread-307466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:13:10.012 [DEBUG] [Thread-307466] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:13:10.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:13:10.014 [DEBUG] [Thread-307466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:13:10.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:13:10.070 [DEBUG] [Thread-307466] [transport.py] [_log()] userauth is OK
2025-12-24T19:13:10.070 [DEBUG] [Thread-307466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:13:10.070 [DEBUG] [Thread-307466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:13:10.070 [DEBUG] [Thread-307466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:13:10.070 [DEBUG] [Thread-307466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:13:10.088 [INFO] [Thread-307466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:13:10.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:13:10.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:13:10.897 [DEBUG] [Thread-307466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:13:10.898 [DEBUG] [Thread-307466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:13:10.944 [DEBUG] [Thread-307466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:13:10.944 [DEBUG] [Thread-307466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:13:10.952 [DEBUG] [Thread-307466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:13:10.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:13:10.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:13:10.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:13:10.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:13:10.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:13:10.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:13:10.985 [DEBUG] [Thread-307466] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:13:11.687 [DEBUG] [Thread-307468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:13:26.898 [DEBUG] [Thread-307469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:13:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:13:41.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:13:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:13:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 13, 5), 16.11, 34.84, 0.0, 34.09, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:13:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:13:05
2025-12-24T19:13:42.015 [DEBUG] [Thread-307470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:13:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:13:42.282 [DEBUG] [Thread-307471] [transport.py] [_log()] starting thread (client mode): 0xf81e4a00
2025-12-24T19:13:42.283 [DEBUG] [Thread-307471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:13:42.297 [DEBUG] [Thread-307471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:13:42.297 [INFO] [Thread-307471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:13:42.308 [DEBUG] [Thread-307471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] client lang: <none>
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] server lang: <none>
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] kex follows: False
2025-12-24T19:13:42.309 [DEBUG] [Thread-307471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:13:42.310 [DEBUG] [Thread-307471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:13:42.310 [DEBUG] [Thread-307471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:13:42.310 [DEBUG] [Thread-307471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:13:42.311 [DEBUG] [Thread-307471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:13:42.311 [DEBUG] [Thread-307471] [transport.py] [_log()] Compression: none
2025-12-24T19:13:42.311 [DEBUG] [Thread-307471] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:13:42.347 [DEBUG] [Thread-307471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:13:42.350 [DEBUG] [Thread-307471] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:13:42.352 [DEBUG] [Thread-307471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:13:42.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:13:42.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:13:42.356 [DEBUG] [Thread-307471] [transport.py] [_log()] userauth is OK
2025-12-24T19:13:42.357 [DEBUG] [Thread-307471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:13:42.357 [DEBUG] [Thread-307471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:13:42.357 [DEBUG] [Thread-307471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:13:42.357 [DEBUG] [Thread-307471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:13:42.383 [INFO] [Thread-307471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:13:42.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:13:42.997 [DEBUG] [Thread-307471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:13:42.997 [DEBUG] [Thread-307471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:13:42.998 [DEBUG] [Thread-307471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:13:43.039 [DEBUG] [Thread-307471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:13:43.039 [DEBUG] [Thread-307471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:13:43.042 [DEBUG] [Thread-307471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:13:43.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:13:43.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:13:43.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:13:43.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:13:43.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:13:43.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:13:43.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:13:43.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:13:43.074 [DEBUG] [Thread-307471] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:13:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:13:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.717426 -999.00  +20.70  18.92     40   +6.70 1 1 1 1 1   887    0 8.88 -201.74 ----- 22.3 18.9 184.0 28.6 22.3 -24.4 22.3 -24.8 22.8 -22.2 22.9 -23.8
2025-12-24T19:13:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:13:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:13:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.717426
2025-12-24T19:13:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:13:43.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:13:43.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:13:43.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:13:43.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:13:43.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:13:05', tmtdew=16.11, humidity=34.84, cloud=0.0, wind=34.09, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:13:05.606', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:13:43.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:13:43.399 [DEBUG] [Thread-307474] [transport.py] [_log()] starting thread (client mode): 0xf81e74c0
2025-12-24T19:13:43.399 [DEBUG] [Thread-307474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:13:43.413 [DEBUG] [Thread-307474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:13:43.413 [INFO] [Thread-307474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] client lang: <none>
2025-12-24T19:13:43.421 [DEBUG] [Thread-307474] [transport.py] [_log()] server lang: <none>
2025-12-24T19:13:43.422 [DEBUG] [Thread-307474] [transport.py] [_log()] kex follows: False
2025-12-24T19:13:43.422 [DEBUG] [Thread-307474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:13:43.422 [DEBUG] [Thread-307474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:13:43.422 [DEBUG] [Thread-307474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:13:43.422 [DEBUG] [Thread-307474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:13:43.422 [DEBUG] [Thread-307474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:13:43.422 [DEBUG] [Thread-307474] [transport.py] [_log()] Compression: none
2025-12-24T19:13:43.422 [DEBUG] [Thread-307474] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:13:43.478 [DEBUG] [Thread-307474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:13:43.479 [DEBUG] [Thread-307474] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:13:43.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:13:43.480 [DEBUG] [Thread-307474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:13:43.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:13:43.535 [DEBUG] [Thread-307474] [transport.py] [_log()] userauth is OK
2025-12-24T19:13:43.536 [DEBUG] [Thread-307474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:13:43.536 [DEBUG] [Thread-307474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:13:43.536 [DEBUG] [Thread-307474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:13:43.536 [DEBUG] [Thread-307474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:13:43.554 [INFO] [Thread-307474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:13:43.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:13:43.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:13:44.375 [DEBUG] [Thread-307474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:13:44.375 [DEBUG] [Thread-307474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:13:44.423 [DEBUG] [Thread-307474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:13:44.423 [DEBUG] [Thread-307474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:13:44.432 [DEBUG] [Thread-307474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:13:44.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:13:44.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:13:44.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:13:44.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:13:44.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:13:44.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:13:44.469 [DEBUG] [Thread-307474] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:13:57.092 [DEBUG] [Thread-307476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:13:58.548 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:13:58.550 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:14:00.901 [DEBUG] [Thread-307477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:14:12.237 [DEBUG] [Thread-307478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:14:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:14:14.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:14:14.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:14:15.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 13, 38), 16.01, 34.95, 0.0, 31.21, 20.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:14:15.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:13:38
2025-12-24T19:14:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:14:15.808 [DEBUG] [Thread-307479] [transport.py] [_log()] starting thread (client mode): 0xf572af20
2025-12-24T19:14:15.809 [DEBUG] [Thread-307479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:14:15.819 [DEBUG] [Thread-307479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:14:15.819 [INFO] [Thread-307479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:14:15.823 [DEBUG] [Thread-307479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] client lang: <none>
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] server lang: <none>
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] kex follows: False
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:14:15.824 [DEBUG] [Thread-307479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:14:15.825 [DEBUG] [Thread-307479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:14:15.825 [DEBUG] [Thread-307479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:14:15.825 [DEBUG] [Thread-307479] [transport.py] [_log()] Compression: none
2025-12-24T19:14:15.825 [DEBUG] [Thread-307479] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:14:15.857 [DEBUG] [Thread-307479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:14:15.861 [DEBUG] [Thread-307479] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:14:15.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:14:15.862 [DEBUG] [Thread-307479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:14:15.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:14:15.865 [DEBUG] [Thread-307479] [transport.py] [_log()] userauth is OK
2025-12-24T19:14:15.865 [DEBUG] [Thread-307479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:14:15.865 [DEBUG] [Thread-307479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:14:15.865 [DEBUG] [Thread-307479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:14:15.865 [DEBUG] [Thread-307479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:14:15.895 [INFO] [Thread-307479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:14:15.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:14:16.497 [DEBUG] [Thread-307479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:14:16.497 [DEBUG] [Thread-307479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:14:16.498 [DEBUG] [Thread-307479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:14:16.538 [DEBUG] [Thread-307479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:14:16.538 [DEBUG] [Thread-307479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:14:16.542 [DEBUG] [Thread-307479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:14:16.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:14:16.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:14:16.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:14:16.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:14:16.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:14:16.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:14:16.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:14:16.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:14:16.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:14:16.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.717774 -999.00  +20.60  24.29     40   +6.70 1 1 1 1 1   887    0 8.97 -195.68 ----- 27.5 24.3 166.4 34.1 22.2 -24.3 22.2 -25.3 22.6 -23.0 22.9 -24.1
2025-12-24T19:14:16.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:14:16.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:14:16.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.717774
2025-12-24T19:14:16.579 [DEBUG] [Thread-307479] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:14:16.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:14:16.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:14:16.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:14:16.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:14:16.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:14:16.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:13:38', tmtdew=16.01, humidity=34.95, cloud=0.0, wind=31.21, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:13:35.674', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:14:16.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:14:16.695 [DEBUG] [Thread-307482] [transport.py] [_log()] starting thread (client mode): 0xf5789ba0
2025-12-24T19:14:16.695 [DEBUG] [Thread-307482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:14:16.710 [DEBUG] [Thread-307482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:14:16.710 [INFO] [Thread-307482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:14:16.718 [DEBUG] [Thread-307482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:14:16.718 [DEBUG] [Thread-307482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] client lang: <none>
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] server lang: <none>
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] kex follows: False
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] Compression: none
2025-12-24T19:14:16.719 [DEBUG] [Thread-307482] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:14:16.780 [DEBUG] [Thread-307482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:14:16.780 [DEBUG] [Thread-307482] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:14:16.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:14:16.781 [DEBUG] [Thread-307482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:14:16.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:14:16.835 [DEBUG] [Thread-307482] [transport.py] [_log()] userauth is OK
2025-12-24T19:14:16.836 [DEBUG] [Thread-307482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:14:16.836 [DEBUG] [Thread-307482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:14:16.836 [DEBUG] [Thread-307482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:14:16.836 [DEBUG] [Thread-307482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:14:16.855 [INFO] [Thread-307482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:14:16.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:14:16.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:14:17.699 [DEBUG] [Thread-307482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:14:17.700 [DEBUG] [Thread-307482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:14:17.746 [DEBUG] [Thread-307482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:14:17.747 [DEBUG] [Thread-307482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:14:17.755 [DEBUG] [Thread-307482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:14:17.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:14:17.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:14:17.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:14:17.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:14:17.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:14:17.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:14:17.788 [DEBUG] [Thread-307482] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:14:27.372 [DEBUG] [Thread-307484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:14:42.607 [DEBUG] [Thread-307485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:14:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:14:47.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:14:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:14:49.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 14, 11), 16.02, 34.92, 0.0, 29.24, 20.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:14:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:14:11
2025-12-24T19:14:49.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:14:49.415 [DEBUG] [Thread-307486] [transport.py] [_log()] starting thread (client mode): 0xf5788160
2025-12-24T19:14:49.417 [DEBUG] [Thread-307486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:14:49.428 [DEBUG] [Thread-307486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:14:49.428 [INFO] [Thread-307486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] client lang: <none>
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] server lang: <none>
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] kex follows: False
2025-12-24T19:14:49.432 [DEBUG] [Thread-307486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:14:49.433 [DEBUG] [Thread-307486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:14:49.433 [DEBUG] [Thread-307486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:14:49.433 [DEBUG] [Thread-307486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:14:49.433 [DEBUG] [Thread-307486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:14:49.433 [DEBUG] [Thread-307486] [transport.py] [_log()] Compression: none
2025-12-24T19:14:49.433 [DEBUG] [Thread-307486] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:14:49.459 [DEBUG] [Thread-307486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:14:49.462 [DEBUG] [Thread-307486] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:14:49.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:14:49.465 [DEBUG] [Thread-307486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:14:49.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:14:49.467 [DEBUG] [Thread-307486] [transport.py] [_log()] userauth is OK
2025-12-24T19:14:49.467 [DEBUG] [Thread-307486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:14:49.468 [DEBUG] [Thread-307486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:14:49.468 [DEBUG] [Thread-307486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:14:49.468 [DEBUG] [Thread-307486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:14:49.480 [INFO] [Thread-307486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:14:49.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:14:50.056 [DEBUG] [Thread-307486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:14:50.056 [DEBUG] [Thread-307486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:14:50.057 [DEBUG] [Thread-307486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:14:50.099 [DEBUG] [Thread-307486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:14:50.099 [DEBUG] [Thread-307486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:14:50.101 [DEBUG] [Thread-307486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:14:50.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:14:50.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:14:50.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:14:50.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:14:50.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:14:50.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:14:50.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:14:50.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:14:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:14:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.718121 -999.00  +20.50  19.66     40   +6.70 1 2 1 1 1   887    0 9.04 -189.95 ----- 26.6 19.7 167.0 33.0 22.2 -23.9 22.2 -23.9 22.7 -22.0 22.8 -23.4
2025-12-24T19:14:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:14:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:14:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.718121
2025-12-24T19:14:50.129 [DEBUG] [Thread-307486] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:14:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:14:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:14:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:14:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:14:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:14:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:14:11', tmtdew=16.02, humidity=34.92, cloud=0.0, wind=29.24, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:14:05.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:14:50.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:14:50.234 [DEBUG] [Thread-307489] [transport.py] [_log()] starting thread (client mode): 0xf578bd00
2025-12-24T19:14:50.234 [DEBUG] [Thread-307489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:14:50.248 [DEBUG] [Thread-307489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:14:50.248 [INFO] [Thread-307489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] client lang: <none>
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] server lang: <none>
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] kex follows: False
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:14:50.255 [DEBUG] [Thread-307489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:14:50.256 [DEBUG] [Thread-307489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:14:50.256 [DEBUG] [Thread-307489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:14:50.256 [DEBUG] [Thread-307489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:14:50.256 [DEBUG] [Thread-307489] [transport.py] [_log()] Compression: none
2025-12-24T19:14:50.256 [DEBUG] [Thread-307489] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:14:50.313 [DEBUG] [Thread-307489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:14:50.314 [DEBUG] [Thread-307489] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:14:50.314 [DEBUG] [Thread-307489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:14:50.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:14:50.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:14:50.371 [DEBUG] [Thread-307489] [transport.py] [_log()] userauth is OK
2025-12-24T19:14:50.371 [DEBUG] [Thread-307489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:14:50.371 [DEBUG] [Thread-307489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:14:50.371 [DEBUG] [Thread-307489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:14:50.371 [DEBUG] [Thread-307489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:14:50.385 [INFO] [Thread-307489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:14:50.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:14:50.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:14:51.215 [DEBUG] [Thread-307489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:14:51.215 [DEBUG] [Thread-307489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:14:51.262 [DEBUG] [Thread-307489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:14:51.262 [DEBUG] [Thread-307489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:14:51.271 [DEBUG] [Thread-307489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:14:51.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:14:51.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:14:51.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:14:51.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:14:51.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:14:51.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:14:51.304 [DEBUG] [Thread-307489] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:14:57.734 [DEBUG] [Thread-307491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:14:58.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:14:58.696 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:15:01.224 [DEBUG] [Thread-307492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:15:12.971 [DEBUG] [Thread-307493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:15:21.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:15:21.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:15:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:15:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 14, 46), 15.99, 34.98, 0.0, 27.56, 20.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:15:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:14:46
2025-12-24T19:15:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:15:22.787 [DEBUG] [Thread-307494] [transport.py] [_log()] starting thread (client mode): 0xf81e78b0
2025-12-24T19:15:22.790 [DEBUG] [Thread-307494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:15:22.792 [DEBUG] [Thread-307494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:15:22.792 [INFO] [Thread-307494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:15:22.803 [DEBUG] [Thread-307494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] client lang: <none>
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] server lang: <none>
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] kex follows: False
2025-12-24T19:15:22.804 [DEBUG] [Thread-307494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:15:22.806 [DEBUG] [Thread-307494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:15:22.807 [DEBUG] [Thread-307494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:15:22.807 [DEBUG] [Thread-307494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:15:22.807 [DEBUG] [Thread-307494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:15:22.807 [DEBUG] [Thread-307494] [transport.py] [_log()] Compression: none
2025-12-24T19:15:22.807 [DEBUG] [Thread-307494] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:15:22.888 [DEBUG] [Thread-307494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:15:22.897 [DEBUG] [Thread-307494] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:15:22.898 [DEBUG] [Thread-307494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:15:22.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:15:22.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:15:22.905 [DEBUG] [Thread-307494] [transport.py] [_log()] userauth is OK
2025-12-24T19:15:22.905 [DEBUG] [Thread-307494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:15:22.906 [DEBUG] [Thread-307494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:15:22.906 [DEBUG] [Thread-307494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:15:22.906 [DEBUG] [Thread-307494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:15:22.944 [INFO] [Thread-307494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:15:22.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:15:23.636 [DEBUG] [Thread-307494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:15:23.638 [DEBUG] [Thread-307494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:15:23.638 [DEBUG] [Thread-307494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:15:23.678 [DEBUG] [Thread-307494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:15:23.679 [DEBUG] [Thread-307494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:15:23.681 [DEBUG] [Thread-307494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:15:23.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:15:23.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:15:23.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:15:23.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:15:23.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:15:23.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:15:23.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:15:23.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:15:23.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:15:23.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.718468 -999.00  +20.50  26.32     40   +6.60 1 1 1 1 1   887    0 9.22 -187.36 ----- 22.6 26.3 163.8 30.7 22.1 -23.9 22.3 -23.8 22.6 -22.8 22.8 -23.4
2025-12-24T19:15:23.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:15:23.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:15:23.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.718468
2025-12-24T19:15:23.710 [DEBUG] [Thread-307494] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:15:23.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:15:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:15:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:15:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:15:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:15:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:14:46', tmtdew=15.99, humidity=34.98, cloud=0.0, wind=27.56, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:14:35.635', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:15:23.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:15:23.815 [DEBUG] [Thread-307497] [transport.py] [_log()] starting thread (client mode): 0xf81e75b0
2025-12-24T19:15:23.815 [DEBUG] [Thread-307497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:15:23.832 [DEBUG] [Thread-307497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:15:23.832 [INFO] [Thread-307497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] client lang: <none>
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] server lang: <none>
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] kex follows: False
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:15:23.840 [DEBUG] [Thread-307497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:15:23.841 [DEBUG] [Thread-307497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:15:23.841 [DEBUG] [Thread-307497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:15:23.841 [DEBUG] [Thread-307497] [transport.py] [_log()] Compression: none
2025-12-24T19:15:23.841 [DEBUG] [Thread-307497] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:15:23.898 [DEBUG] [Thread-307497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:15:24.036 [DEBUG] [Thread-307497] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:15:24.036 [DEBUG] [Thread-307497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:15:24.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:15:24.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:15:24.044 [DEBUG] [Thread-307497] [transport.py] [_log()] userauth is OK
2025-12-24T19:15:24.044 [DEBUG] [Thread-307497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:15:24.044 [DEBUG] [Thread-307497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:15:24.044 [DEBUG] [Thread-307497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:15:24.045 [DEBUG] [Thread-307497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:15:24.058 [INFO] [Thread-307497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:15:24.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:15:24.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:15:24.880 [DEBUG] [Thread-307497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:15:24.880 [DEBUG] [Thread-307497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:15:24.928 [DEBUG] [Thread-307497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:15:24.928 [DEBUG] [Thread-307497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:15:24.938 [DEBUG] [Thread-307497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:15:24.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:15:24.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')
2025-12-24T19:15:24.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:15:24.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:15:24.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:15:24.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:15:24.977 [DEBUG] [Thread-307497] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:15:28.091 [DEBUG] [Thread-307499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:15:43.575 [DEBUG] [Thread-307500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:15:54.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:15:54.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:15:55.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:15:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 15, 19), 15.98, 35.02, 0.0, 28.39, 20.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:15:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:15:19
2025-12-24T19:15:56.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:15:56.468 [DEBUG] [Thread-307501] [transport.py] [_log()] starting thread (client mode): 0xf572a1d0
2025-12-24T19:15:56.469 [DEBUG] [Thread-307501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:15:56.469 [DEBUG] [Thread-307501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:15:56.469 [INFO] [Thread-307501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] client lang: <none>
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] server lang: <none>
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] kex follows: False
2025-12-24T19:15:56.474 [DEBUG] [Thread-307501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:15:56.475 [DEBUG] [Thread-307501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:15:56.475 [DEBUG] [Thread-307501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:15:56.475 [DEBUG] [Thread-307501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:15:56.475 [DEBUG] [Thread-307501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:15:56.475 [DEBUG] [Thread-307501] [transport.py] [_log()] Compression: none
2025-12-24T19:15:56.475 [DEBUG] [Thread-307501] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:15:56.507 [DEBUG] [Thread-307501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:15:56.510 [DEBUG] [Thread-307501] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:15:56.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:15:56.512 [DEBUG] [Thread-307501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:15:56.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:15:56.515 [DEBUG] [Thread-307501] [transport.py] [_log()] userauth is OK
2025-12-24T19:15:56.515 [DEBUG] [Thread-307501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:15:56.515 [DEBUG] [Thread-307501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:15:56.515 [DEBUG] [Thread-307501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:15:56.515 [DEBUG] [Thread-307501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:15:56.527 [INFO] [Thread-307501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:15:56.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:15:57.356 [DEBUG] [Thread-307501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:15:57.356 [DEBUG] [Thread-307501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:15:57.358 [DEBUG] [Thread-307501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:15:57.395 [DEBUG] [Thread-307501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:15:57.396 [DEBUG] [Thread-307501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:15:57.399 [DEBUG] [Thread-307501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:15:57.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:15:57.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:15:57.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:15:57.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:15:57.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:15:57.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:15:57.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:15:57.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:15:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:15:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.719163 -999.00  +20.50  20.99     40   +6.60 1 1 1 1 1   887    0 9.44 -181.54 ----- 24.8 21.0 173.0 30.2 22.1 -23.9 22.2 -24.1 22.6 -22.7 22.8 -23.4
2025-12-24T19:15:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:15:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:15:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.719163
2025-12-24T19:15:57.436 [DEBUG] [Thread-307501] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:15:57.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:15:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:15:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:15:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:15:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:15:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:15:19', tmtdew=15.98, humidity=35.02, cloud=0.0, wind=28.39, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:15:35.683', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:15:57.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:15:57.565 [DEBUG] [Thread-307504] [transport.py] [_log()] starting thread (client mode): 0xf5729a20
2025-12-24T19:15:57.565 [DEBUG] [Thread-307504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:15:57.579 [DEBUG] [Thread-307504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:15:57.579 [INFO] [Thread-307504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:15:57.586 [DEBUG] [Thread-307504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] client lang: <none>
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] server lang: <none>
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] kex follows: False
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:15:57.587 [DEBUG] [Thread-307504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:15:57.588 [DEBUG] [Thread-307504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:15:57.588 [DEBUG] [Thread-307504] [transport.py] [_log()] Compression: none
2025-12-24T19:15:57.588 [DEBUG] [Thread-307504] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:15:57.643 [DEBUG] [Thread-307504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:15:57.644 [DEBUG] [Thread-307504] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:15:57.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:15:57.645 [DEBUG] [Thread-307504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:15:57.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:15:57.699 [DEBUG] [Thread-307504] [transport.py] [_log()] userauth is OK
2025-12-24T19:15:57.700 [DEBUG] [Thread-307504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:15:57.700 [DEBUG] [Thread-307504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:15:57.700 [DEBUG] [Thread-307504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:15:57.700 [DEBUG] [Thread-307504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:15:57.718 [INFO] [Thread-307504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:15:57.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:15:57.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:15:58.551 [DEBUG] [Thread-307504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:15:58.551 [DEBUG] [Thread-307504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:15:58.600 [DEBUG] [Thread-307504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:15:58.600 [DEBUG] [Thread-307504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:15:58.609 [DEBUG] [Thread-307504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:15:58.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:15: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')
2025-12-24T19:15: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
2025-12-24T19:15:58.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:15:58.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:15:58.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:15:58.646 [DEBUG] [Thread-307504] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:15:58.702 [DEBUG] [Thread-307506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:15:58.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:15:58.837 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:16:01.503 [DEBUG] [Thread-307507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:16:13.991 [DEBUG] [Thread-307508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:16:28.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:16:28.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:16:28.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:16:29.102 [DEBUG] [Thread-307509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:16:29.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 15, 52), 16.02, 35.15, 0.0, 33.79, 20.64, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:16:29.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:15:52
2025-12-24T19:16:29.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:16:30.016 [DEBUG] [Thread-307510] [transport.py] [_log()] starting thread (client mode): 0xf57298a0
2025-12-24T19:16:30.017 [DEBUG] [Thread-307510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:16:30.031 [DEBUG] [Thread-307510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:16:30.031 [INFO] [Thread-307510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] client lang: <none>
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] server lang: <none>
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] kex follows: False
2025-12-24T19:16:30.039 [DEBUG] [Thread-307510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:16:30.040 [DEBUG] [Thread-307510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:16:30.040 [DEBUG] [Thread-307510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:16:30.040 [DEBUG] [Thread-307510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:16:30.040 [DEBUG] [Thread-307510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:16:30.040 [DEBUG] [Thread-307510] [transport.py] [_log()] Compression: none
2025-12-24T19:16:30.040 [DEBUG] [Thread-307510] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:16:30.070 [DEBUG] [Thread-307510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:16:30.073 [DEBUG] [Thread-307510] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:16:30.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:16:30.074 [DEBUG] [Thread-307510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:16:30.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:16:30.076 [DEBUG] [Thread-307510] [transport.py] [_log()] userauth is OK
2025-12-24T19:16:30.076 [DEBUG] [Thread-307510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:16:30.076 [DEBUG] [Thread-307510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:16:30.076 [DEBUG] [Thread-307510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:16:30.076 [DEBUG] [Thread-307510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:16:30.094 [INFO] [Thread-307510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:16:30.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:16:30.696 [DEBUG] [Thread-307510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:16:30.696 [DEBUG] [Thread-307510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:16:30.698 [DEBUG] [Thread-307510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:16:30.737 [DEBUG] [Thread-307510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:16:30.738 [DEBUG] [Thread-307510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:16:30.741 [DEBUG] [Thread-307510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:16:30.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:16:30.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:16:30.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:16:30.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:16:30.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:16:30.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:16:30.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:16:30.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:16:30.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:16:30.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.719510 -999.00  +20.40  30.23     40   +6.60 1 1 2 1 1   887    0 9.99 -163.21 ----- 34.6 30.2 161.4 39.1 22.1 -24.3 22.1 -23.8 22.4 -22.8 22.6 -23.7
2025-12-24T19:16:30.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:16:30.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:16:30.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.719510
2025-12-24T19:16:30.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:16:30.776 [DEBUG] [Thread-307510] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:16:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:16:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:16:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:16:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:16:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:15:52', tmtdew=16.02, humidity=35.15, cloud=0.0, wind=33.79, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:16:05.664', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:16:30.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:16:30.879 [DEBUG] [Thread-307513] [transport.py] [_log()] starting thread (client mode): 0xf572bc70
2025-12-24T19:16:30.880 [DEBUG] [Thread-307513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:16:30.894 [DEBUG] [Thread-307513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:16:30.894 [INFO] [Thread-307513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] client lang: <none>
2025-12-24T19:16:30.902 [DEBUG] [Thread-307513] [transport.py] [_log()] server lang: <none>
2025-12-24T19:16:30.903 [DEBUG] [Thread-307513] [transport.py] [_log()] kex follows: False
2025-12-24T19:16:30.903 [DEBUG] [Thread-307513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:16:30.903 [DEBUG] [Thread-307513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:16:30.903 [DEBUG] [Thread-307513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:16:30.903 [DEBUG] [Thread-307513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:16:30.903 [DEBUG] [Thread-307513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:16:30.903 [DEBUG] [Thread-307513] [transport.py] [_log()] Compression: none
2025-12-24T19:16:30.903 [DEBUG] [Thread-307513] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:16:30.958 [DEBUG] [Thread-307513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:16:30.958 [DEBUG] [Thread-307513] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:16:30.959 [DEBUG] [Thread-307513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:16:30.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:16:30.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:16:31.016 [DEBUG] [Thread-307513] [transport.py] [_log()] userauth is OK
2025-12-24T19:16:31.016 [DEBUG] [Thread-307513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:16:31.016 [DEBUG] [Thread-307513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:16:31.016 [DEBUG] [Thread-307513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:16:31.016 [DEBUG] [Thread-307513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:16:31.035 [INFO] [Thread-307513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:16:31.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:16:31.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:16:31.874 [DEBUG] [Thread-307513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:16:31.874 [DEBUG] [Thread-307513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:16:31.913 [DEBUG] [Thread-307513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:16:31.914 [DEBUG] [Thread-307513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:16:31.922 [DEBUG] [Thread-307513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:16:31.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:16:31.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:16:31.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:16:31.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:16:31.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:16:31.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:16:31.956 [DEBUG] [Thread-307513] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:16:44.237 [DEBUG] [Thread-307515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:16:58.996 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:16:59.010 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:16:59.378 [DEBUG] [Thread-307516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:17:01.745 [DEBUG] [Thread-307517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:17:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:17:02.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:17:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:17:06.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 16, 26), 16.02, 35.13, 0.0, 31.41, 20.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:17:06.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:16:26
2025-12-24T19:17:06.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:17:06.389 [DEBUG] [Thread-307518] [transport.py] [_log()] starting thread (client mode): 0xf8189d50
2025-12-24T19:17:06.390 [DEBUG] [Thread-307518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:17:06.397 [DEBUG] [Thread-307518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:17:06.397 [INFO] [Thread-307518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] client lang: <none>
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] server lang: <none>
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] kex follows: False
2025-12-24T19:17:06.402 [DEBUG] [Thread-307518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:17:06.403 [DEBUG] [Thread-307518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:17:06.403 [DEBUG] [Thread-307518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:17:06.403 [DEBUG] [Thread-307518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:17:06.403 [DEBUG] [Thread-307518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:17:06.403 [DEBUG] [Thread-307518] [transport.py] [_log()] Compression: none
2025-12-24T19:17:06.403 [DEBUG] [Thread-307518] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:17:06.437 [DEBUG] [Thread-307518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:17:06.441 [DEBUG] [Thread-307518] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:17:06.442 [DEBUG] [Thread-307518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:17:06.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:17:06.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:17:06.445 [DEBUG] [Thread-307518] [transport.py] [_log()] userauth is OK
2025-12-24T19:17:06.445 [DEBUG] [Thread-307518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:17:06.445 [DEBUG] [Thread-307518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:17:06.445 [DEBUG] [Thread-307518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:17:06.445 [DEBUG] [Thread-307518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:17:06.467 [INFO] [Thread-307518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:17:06.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:17:07.147 [DEBUG] [Thread-307518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:17:07.147 [DEBUG] [Thread-307518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:17:07.148 [DEBUG] [Thread-307518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:17:07.189 [DEBUG] [Thread-307518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:17:07.189 [DEBUG] [Thread-307518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:17:07.191 [DEBUG] [Thread-307518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:17:07.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:17:07.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:17:07.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:17:07.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:17:07.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:17:07.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:17:07.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:17:07.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:17:07.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:17:07.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.719857 -999.00  +20.40  20.01     40   +6.60 1 1 1 1 1   887    0 9.66 -158.96 ----- 26.3 20.0 173.0 37.6 22.1 -24.3 22.0 -23.7 22.3 -22.5 22.5 -23.5
2025-12-24T19:17:07.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:17:07.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:17:07.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.719857
2025-12-24T19:17:07.225 [DEBUG] [Thread-307518] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:17:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:17:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:17:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:17:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:17:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:17:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:16:26', tmtdew=16.02, humidity=35.13, cloud=0.0, wind=31.41, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:16:35.645', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:17:07.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:17:07.327 [DEBUG] [Thread-307521] [transport.py] [_log()] starting thread (client mode): 0xf578ad70
2025-12-24T19:17:07.327 [DEBUG] [Thread-307521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:17:07.341 [DEBUG] [Thread-307521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:17:07.341 [INFO] [Thread-307521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] client lang: <none>
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] server lang: <none>
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] kex follows: False
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:17:07.349 [DEBUG] [Thread-307521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:17:07.350 [DEBUG] [Thread-307521] [transport.py] [_log()] Compression: none
2025-12-24T19:17:07.350 [DEBUG] [Thread-307521] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:17:07.406 [DEBUG] [Thread-307521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:17:07.406 [DEBUG] [Thread-307521] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:17:07.406 [DEBUG] [Thread-307521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:17:07.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:17:07.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:17:07.463 [DEBUG] [Thread-307521] [transport.py] [_log()] userauth is OK
2025-12-24T19:17:07.463 [DEBUG] [Thread-307521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:17:07.463 [DEBUG] [Thread-307521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:17:07.463 [DEBUG] [Thread-307521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:17:07.463 [DEBUG] [Thread-307521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:17:07.479 [INFO] [Thread-307521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:17:07.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:17:07.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:17:08.334 [DEBUG] [Thread-307521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:17:08.334 [DEBUG] [Thread-307521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:17:08.381 [DEBUG] [Thread-307521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:17:08.381 [DEBUG] [Thread-307521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:17:08.390 [DEBUG] [Thread-307521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:17:08.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:17:08.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:17:08.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:17:08.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:17:08.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:17:08.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:17:08.424 [DEBUG] [Thread-307521] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:17:14.488 [DEBUG] [Thread-307523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:17:29.672 [DEBUG] [Thread-307524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:17:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:17:38.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:17:38.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:17:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 16, 59), 16.03, 35.22, 0.0, 27.47, 20.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:17:39.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:16:59
2025-12-24T19:17:39.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:17:39.784 [DEBUG] [Thread-307525] [transport.py] [_log()] starting thread (client mode): 0xf5789e40
2025-12-24T19:17:39.785 [DEBUG] [Thread-307525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:17:39.800 [DEBUG] [Thread-307525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:17:39.800 [INFO] [Thread-307525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:17:39.803 [DEBUG] [Thread-307525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:17:39.803 [DEBUG] [Thread-307525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] client lang: <none>
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] server lang: <none>
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] kex follows: False
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:17:39.804 [DEBUG] [Thread-307525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:17:39.805 [DEBUG] [Thread-307525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:17:39.805 [DEBUG] [Thread-307525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:17:39.805 [DEBUG] [Thread-307525] [transport.py] [_log()] Compression: none
2025-12-24T19:17:39.805 [DEBUG] [Thread-307525] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:17:39.834 [DEBUG] [Thread-307525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:17:39.838 [DEBUG] [Thread-307525] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:17:39.839 [DEBUG] [Thread-307525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:17:39.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:17:39.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:17:39.843 [DEBUG] [Thread-307525] [transport.py] [_log()] userauth is OK
2025-12-24T19:17:39.843 [DEBUG] [Thread-307525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:17:39.844 [DEBUG] [Thread-307525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:17:39.844 [DEBUG] [Thread-307525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:17:39.844 [DEBUG] [Thread-307525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:17:39.862 [INFO] [Thread-307525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:17:39.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:17:40.481 [DEBUG] [Thread-307525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:17:40.481 [DEBUG] [Thread-307525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:17:40.492 [DEBUG] [Thread-307525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:17:40.522 [DEBUG] [Thread-307525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:17:40.522 [DEBUG] [Thread-307525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:17:40.527 [DEBUG] [Thread-307525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:17:40.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:17:40.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:17:40.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:17:40.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:17:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:17:40.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:17:40.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:17:40.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:17:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:17:40.557 [DEBUG] [Thread-307525] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:17:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.720205 -999.00  +20.40  27.12     40   +6.60 1 1 1 1 1   887    0 9.91 -146.32 ----- 32.3 27.1 168.7 39.2 22.0 -24.0 22.0 -23.5 22.2 -22.7 22.5 -23.3
2025-12-24T19:17:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:17:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:17:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.720205
2025-12-24T19:17:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:17:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:17:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:17:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:17:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:17:40.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:16:59', tmtdew=16.03, humidity=35.22, cloud=0.0, wind=27.47, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:17:05.712', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:17:40.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:17:40.676 [DEBUG] [Thread-307528] [transport.py] [_log()] starting thread (client mode): 0xf578bd30
2025-12-24T19:17:40.676 [DEBUG] [Thread-307528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:17:40.691 [DEBUG] [Thread-307528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:17:40.691 [INFO] [Thread-307528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:17:40.698 [DEBUG] [Thread-307528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:17:40.698 [DEBUG] [Thread-307528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:17:40.698 [DEBUG] [Thread-307528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:17:40.698 [DEBUG] [Thread-307528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:17:40.698 [DEBUG] [Thread-307528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:17:40.698 [DEBUG] [Thread-307528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:17:40.698 [DEBUG] [Thread-307528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:17:40.698 [DEBUG] [Thread-307528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] client lang: <none>
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] server lang: <none>
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] kex follows: False
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] Compression: none
2025-12-24T19:17:40.699 [DEBUG] [Thread-307528] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:17:40.756 [DEBUG] [Thread-307528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:17:40.756 [DEBUG] [Thread-307528] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:17:40.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:17:40.757 [DEBUG] [Thread-307528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:17:40.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:17:40.811 [DEBUG] [Thread-307528] [transport.py] [_log()] userauth is OK
2025-12-24T19:17:40.812 [DEBUG] [Thread-307528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:17:40.812 [DEBUG] [Thread-307528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:17:40.812 [DEBUG] [Thread-307528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:17:40.812 [DEBUG] [Thread-307528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:17:40.832 [INFO] [Thread-307528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:17:40.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:17:40.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:17:41.655 [DEBUG] [Thread-307528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:17:41.655 [DEBUG] [Thread-307528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:17:41.702 [DEBUG] [Thread-307528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:17:41.702 [DEBUG] [Thread-307528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:17:41.710 [DEBUG] [Thread-307528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:17:41.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:17:41.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:17:41.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
2025-12-24T19:17:41.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:17:41.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:17:41.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:17:41.743 [DEBUG] [Thread-307528] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:17:44.774 [DEBUG] [Thread-307530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:17:59.175 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:17:59.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:17:59.994 [DEBUG] [Thread-307531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:18:01.978 [DEBUG] [Thread-307532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:18:11.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:18:11.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:18:11.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:18:12.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 17, 36), 15.97, 35.25, 0.0, 34.23, 20.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:18:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:17:36
2025-12-24T19:18:13.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:18:13.358 [DEBUG] [Thread-307533] [transport.py] [_log()] starting thread (client mode): 0xf5728850
2025-12-24T19:18:13.359 [DEBUG] [Thread-307533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:18:13.360 [DEBUG] [Thread-307533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:18:13.360 [INFO] [Thread-307533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] client lang: <none>
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] server lang: <none>
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] kex follows: False
2025-12-24T19:18:13.366 [DEBUG] [Thread-307533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:18:13.367 [DEBUG] [Thread-307533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:18:13.367 [DEBUG] [Thread-307533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:18:13.367 [DEBUG] [Thread-307533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:18:13.367 [DEBUG] [Thread-307533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:18:13.367 [DEBUG] [Thread-307533] [transport.py] [_log()] Compression: none
2025-12-24T19:18:13.367 [DEBUG] [Thread-307533] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:18:13.410 [DEBUG] [Thread-307533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:18:13.415 [DEBUG] [Thread-307533] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:18:13.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:18:13.418 [DEBUG] [Thread-307533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:18:13.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:18:13.420 [DEBUG] [Thread-307533] [transport.py] [_log()] userauth is OK
2025-12-24T19:18:13.420 [DEBUG] [Thread-307533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:18:13.421 [DEBUG] [Thread-307533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:18:13.421 [DEBUG] [Thread-307533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:18:13.421 [DEBUG] [Thread-307533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:18:13.439 [INFO] [Thread-307533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:18:13.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:18:14.036 [DEBUG] [Thread-307533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:18:14.036 [DEBUG] [Thread-307533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:18:14.037 [DEBUG] [Thread-307533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:18:14.077 [DEBUG] [Thread-307533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:18:14.077 [DEBUG] [Thread-307533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:18:14.080 [DEBUG] [Thread-307533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:18:14.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:18:14.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:18:14.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:18:14.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:18:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:18:14.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:18:14.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:18:14.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:18:14.112 [DEBUG] [Thread-307533] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:18:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:18:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.720552 -999.00  +20.40  17.80     40   +6.50 1 1 1 1 1   887    0 10.30 -137.24 ----- 21.8 17.8 177.8 37.4 21.9 -24.0 21.9 -24.2 22.1 -22.9 22.4 -23.8
2025-12-24T19:18:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:18:14.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:18:14.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.720552
2025-12-24T19:18:14.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:18:14.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:18:14.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:18:14.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:18:14.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T19:18:14.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:17:36', tmtdew=15.97, humidity=35.25, cloud=0.0, wind=34.23, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:17:35.693', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:18:14.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:18:14.233 [DEBUG] [Thread-307536] [transport.py] [_log()] starting thread (client mode): 0xf81e74f0
2025-12-24T19:18:14.233 [DEBUG] [Thread-307536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:18:14.248 [DEBUG] [Thread-307536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:18:14.248 [INFO] [Thread-307536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] client lang: <none>
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] server lang: <none>
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] kex follows: False
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:18:14.255 [DEBUG] [Thread-307536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:18:14.256 [DEBUG] [Thread-307536] [transport.py] [_log()] Compression: none
2025-12-24T19:18:14.256 [DEBUG] [Thread-307536] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:18:14.314 [DEBUG] [Thread-307536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:18:14.314 [DEBUG] [Thread-307536] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:18:14.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:18:14.314 [DEBUG] [Thread-307536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:18:14.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:18:14.371 [DEBUG] [Thread-307536] [transport.py] [_log()] userauth is OK
2025-12-24T19:18:14.372 [DEBUG] [Thread-307536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:18:14.372 [DEBUG] [Thread-307536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:18:14.372 [DEBUG] [Thread-307536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:18:14.372 [DEBUG] [Thread-307536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:18:14.390 [INFO] [Thread-307536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:18:14.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:18:14.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:18:15.108 [DEBUG] [Thread-307538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:18:15.236 [DEBUG] [Thread-307536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:18:15.237 [DEBUG] [Thread-307536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:18:15.284 [DEBUG] [Thread-307536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:18:15.284 [DEBUG] [Thread-307536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:18:15.293 [DEBUG] [Thread-307536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:18:15.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:18:15.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')
2025-12-24T19:18:15.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:18:15.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:18:15.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:18:15.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:18:15.330 [DEBUG] [Thread-307536] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:18:30.352 [DEBUG] [Thread-307539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:18:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:18:45.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:18:45.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:18:45.462 [DEBUG] [Thread-307540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:18:46.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 18, 9), 16.03, 35.1, 0.0, 34.46, 20.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:18:46.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:18:09
2025-12-24T19:18:46.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:18:46.766 [DEBUG] [Thread-307541] [transport.py] [_log()] starting thread (client mode): 0xf572b850
2025-12-24T19:18:46.766 [DEBUG] [Thread-307541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:18:46.779 [DEBUG] [Thread-307541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:18:46.780 [INFO] [Thread-307541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:18:46.784 [DEBUG] [Thread-307541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] client lang: <none>
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] server lang: <none>
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] kex follows: False
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] Compression: none
2025-12-24T19:18:46.785 [DEBUG] [Thread-307541] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:18:46.818 [DEBUG] [Thread-307541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:18:46.822 [DEBUG] [Thread-307541] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:18:46.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:18:46.824 [DEBUG] [Thread-307541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:18:46.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:18:46.826 [DEBUG] [Thread-307541] [transport.py] [_log()] userauth is OK
2025-12-24T19:18:46.826 [DEBUG] [Thread-307541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:18:46.826 [DEBUG] [Thread-307541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:18:46.826 [DEBUG] [Thread-307541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:18:46.827 [DEBUG] [Thread-307541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:18:46.846 [INFO] [Thread-307541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:18:46.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:18:47.466 [DEBUG] [Thread-307541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:18:47.466 [DEBUG] [Thread-307541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:18:47.468 [DEBUG] [Thread-307541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:18:47.506 [DEBUG] [Thread-307541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:18:47.507 [DEBUG] [Thread-307541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:18:47.509 [DEBUG] [Thread-307541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:18:47.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:18:47.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:18:47.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:18:47.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:18:47.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:18:47.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:18:47.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:18:47.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:18:47.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:18:47.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.720899 -999.00  +20.40  19.85     40   +6.60 1 2 1 1 1   887    0 10.32 -132.40 ----- 25.5 19.9 154.5 27.5 21.9 -24.0 21.9 -23.3 22.1 -22.1 22.3 -23.4
2025-12-24T19:18:47.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:18:47.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:18:47.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.720899
2025-12-24T19:18:47.538 [DEBUG] [Thread-307541] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:18:47.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:18:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:18:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:18:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:18:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:18:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:18:09', tmtdew=16.03, humidity=35.1, cloud=0.0, wind=34.46, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:18:05.674', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:18:47.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:18:47.642 [DEBUG] [Thread-307544] [transport.py] [_log()] starting thread (client mode): 0xf818bd60
2025-12-24T19:18:47.642 [DEBUG] [Thread-307544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:18:47.659 [DEBUG] [Thread-307544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:18:47.659 [INFO] [Thread-307544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:18:47.666 [DEBUG] [Thread-307544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:18:47.666 [DEBUG] [Thread-307544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:18:47.666 [DEBUG] [Thread-307544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:18:47.666 [DEBUG] [Thread-307544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:18:47.666 [DEBUG] [Thread-307544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] client lang: <none>
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] server lang: <none>
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] kex follows: False
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:18:47.667 [DEBUG] [Thread-307544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:18:47.668 [DEBUG] [Thread-307544] [transport.py] [_log()] Compression: none
2025-12-24T19:18:47.668 [DEBUG] [Thread-307544] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:18:47.722 [DEBUG] [Thread-307544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:18:47.722 [DEBUG] [Thread-307544] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:18:47.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:18:47.722 [DEBUG] [Thread-307544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:18:47.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:18:47.779 [DEBUG] [Thread-307544] [transport.py] [_log()] userauth is OK
2025-12-24T19:18:47.780 [DEBUG] [Thread-307544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:18:47.780 [DEBUG] [Thread-307544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:18:47.780 [DEBUG] [Thread-307544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:18:47.780 [DEBUG] [Thread-307544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:18:47.803 [INFO] [Thread-307544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:18:47.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:18:47.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:18:48.649 [DEBUG] [Thread-307544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:18:48.650 [DEBUG] [Thread-307544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:18:48.698 [DEBUG] [Thread-307544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:18:48.698 [DEBUG] [Thread-307544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:18:48.706 [DEBUG] [Thread-307544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:18:48.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:18:48.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:18:48.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
2025-12-24T19:18:48.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:18:48.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:18:48.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:18:48.739 [DEBUG] [Thread-307544] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:18:59.342 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:18:59.356 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:19:00.568 [DEBUG] [Thread-307546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:19:02.203 [DEBUG] [Thread-307547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:19:15.733 [DEBUG] [Thread-307548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:19:18.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:19:18.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:19:18.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:19:19.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 18, 43), 15.89, 35.32, 0.0, 29.36, 20.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:19:19.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:18:43
2025-12-24T19:19:19.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:19:20.122 [DEBUG] [Thread-307549] [transport.py] [_log()] starting thread (client mode): 0xf578bd60
2025-12-24T19:19:20.123 [DEBUG] [Thread-307549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:19:20.130 [DEBUG] [Thread-307549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:19:20.133 [INFO] [Thread-307549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:19:20.153 [DEBUG] [Thread-307549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] client lang: <none>
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] server lang: <none>
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] kex follows: False
2025-12-24T19:19:20.154 [DEBUG] [Thread-307549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:19:20.155 [DEBUG] [Thread-307549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:19:20.155 [DEBUG] [Thread-307549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:19:20.155 [DEBUG] [Thread-307549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:19:20.155 [DEBUG] [Thread-307549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:19:20.155 [DEBUG] [Thread-307549] [transport.py] [_log()] Compression: none
2025-12-24T19:19:20.155 [DEBUG] [Thread-307549] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:19:20.186 [DEBUG] [Thread-307549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:19:20.189 [DEBUG] [Thread-307549] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:19:20.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:19:20.191 [DEBUG] [Thread-307549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:19:20.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:19:20.193 [DEBUG] [Thread-307549] [transport.py] [_log()] userauth is OK
2025-12-24T19:19:20.193 [DEBUG] [Thread-307549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:19:20.193 [DEBUG] [Thread-307549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:19:20.193 [DEBUG] [Thread-307549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:19:20.193 [DEBUG] [Thread-307549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:19:20.212 [INFO] [Thread-307549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:19:20.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:19:20.842 [DEBUG] [Thread-307549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:19:20.842 [DEBUG] [Thread-307549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:19:20.842 [DEBUG] [Thread-307549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:19:20.884 [DEBUG] [Thread-307549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:19:20.884 [DEBUG] [Thread-307549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:19:20.886 [DEBUG] [Thread-307549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:19:20.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:19:20.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:19:20.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:19:20.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:19:20.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:19:20.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:19:20.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:19:20.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:19:20.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:19:20.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.721246 -999.00  +20.30  22.08     41   +6.70 1 2 1 1 1   887    0 10.24 -141.47 ----- 19.8 22.1 159.2 29.4 21.9 -23.8 21.9 -23.6 21.9 -22.4 22.2 -23.4
2025-12-24T19:19:20.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:19:20.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:19:20.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.721246
2025-12-24T19:19:20.913 [DEBUG] [Thread-307549] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:19:20.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:19:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:19:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:19:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:19:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:19:20.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:18:43', tmtdew=15.89, humidity=35.32, cloud=0.0, wind=29.36, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:18:35.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:19:21.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:19:21.013 [DEBUG] [Thread-307552] [transport.py] [_log()] starting thread (client mode): 0xf8188e20
2025-12-24T19:19:21.013 [DEBUG] [Thread-307552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:19:21.027 [DEBUG] [Thread-307552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:19:21.027 [INFO] [Thread-307552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] client lang: <none>
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] server lang: <none>
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] kex follows: False
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] Compression: none
2025-12-24T19:19:21.035 [DEBUG] [Thread-307552] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:19:21.089 [DEBUG] [Thread-307552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:19:21.089 [DEBUG] [Thread-307552] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:19:21.089 [DEBUG] [Thread-307552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:19:21.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:19:21.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:19:21.147 [DEBUG] [Thread-307552] [transport.py] [_log()] userauth is OK
2025-12-24T19:19:21.147 [DEBUG] [Thread-307552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:19:21.147 [DEBUG] [Thread-307552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:19:21.147 [DEBUG] [Thread-307552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:19:21.147 [DEBUG] [Thread-307552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:19:21.161 [INFO] [Thread-307552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:19:21.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:19:21.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:19:21.995 [DEBUG] [Thread-307552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:19:21.996 [DEBUG] [Thread-307552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:19:22.043 [DEBUG] [Thread-307552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:19:22.044 [DEBUG] [Thread-307552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:19:22.053 [DEBUG] [Thread-307552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:19:22.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:19:22.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:19:22.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:19:22.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:19:22.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:19:22.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:19:22.091 [DEBUG] [Thread-307552] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:19:30.852 [DEBUG] [Thread-307554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:19:46.057 [DEBUG] [Thread-307555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:19:52.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:19:52.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:19:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:19:53.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 19, 16), 15.81, 35.48, 0.0, 28.05, 20.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:19:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:19:16
2025-12-24T19:19:53.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:19:54.096 [DEBUG] [Thread-307556] [transport.py] [_log()] starting thread (client mode): 0xf8189300
2025-12-24T19:19:54.097 [DEBUG] [Thread-307556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:19:54.098 [DEBUG] [Thread-307556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:19:54.098 [INFO] [Thread-307556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] client lang: <none>
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] server lang: <none>
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] kex follows: False
2025-12-24T19:19:54.103 [DEBUG] [Thread-307556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:19:54.104 [DEBUG] [Thread-307556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:19:54.104 [DEBUG] [Thread-307556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:19:54.104 [DEBUG] [Thread-307556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:19:54.104 [DEBUG] [Thread-307556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:19:54.104 [DEBUG] [Thread-307556] [transport.py] [_log()] Compression: none
2025-12-24T19:19:54.104 [DEBUG] [Thread-307556] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:19:54.139 [DEBUG] [Thread-307556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:19:54.143 [DEBUG] [Thread-307556] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:19:54.144 [DEBUG] [Thread-307556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:19:54.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:19:54.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:19:54.148 [DEBUG] [Thread-307556] [transport.py] [_log()] userauth is OK
2025-12-24T19:19:54.148 [DEBUG] [Thread-307556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:19:54.148 [DEBUG] [Thread-307556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:19:54.148 [DEBUG] [Thread-307556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:19:54.148 [DEBUG] [Thread-307556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:19:54.169 [INFO] [Thread-307556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:19:54.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:19:54.798 [DEBUG] [Thread-307556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:19:54.798 [DEBUG] [Thread-307556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:19:54.799 [DEBUG] [Thread-307556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:19:54.839 [DEBUG] [Thread-307556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:19:54.839 [DEBUG] [Thread-307556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:19:54.842 [DEBUG] [Thread-307556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:19:54.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:19:54.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:19:54.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:19:54.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:19:54.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:19:54.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:19:54.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:19:54.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:19:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:19:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.721593 -999.00  +20.30  24.06     41   +6.90 1 2 1 1 1   887    0 10.31 -136.86 ----- 25.1 24.1 168.6 32.6 21.8 -23.8 21.8 -23.2 21.9 -22.1 22.1 -23.0
2025-12-24T19:19:54.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:19:54.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:19:54.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.721593
2025-12-24T19:19:54.869 [DEBUG] [Thread-307556] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:19:54.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:19:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:19:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:19:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:19:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:19:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:19:16', tmtdew=15.81, humidity=35.48, cloud=0.0, wind=28.05, temperature=20.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:19:05.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:19:54.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:19:54.977 [DEBUG] [Thread-307559] [transport.py] [_log()] starting thread (client mode): 0xf818b940
2025-12-24T19:19:54.978 [DEBUG] [Thread-307559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:19:54.993 [DEBUG] [Thread-307559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:19:54.993 [INFO] [Thread-307559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:19:55.001 [DEBUG] [Thread-307559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:19:55.001 [DEBUG] [Thread-307559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:19:55.001 [DEBUG] [Thread-307559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:19:55.001 [DEBUG] [Thread-307559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:19:55.001 [DEBUG] [Thread-307559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:19:55.001 [DEBUG] [Thread-307559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:19:55.001 [DEBUG] [Thread-307559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] client lang: <none>
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] server lang: <none>
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] kex follows: False
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:19:55.002 [DEBUG] [Thread-307559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:19:55.003 [DEBUG] [Thread-307559] [transport.py] [_log()] Compression: none
2025-12-24T19:19:55.003 [DEBUG] [Thread-307559] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:19:55.058 [DEBUG] [Thread-307559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:19:55.059 [DEBUG] [Thread-307559] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:19:55.060 [DEBUG] [Thread-307559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:19:55.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:19:55.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:19:55.115 [DEBUG] [Thread-307559] [transport.py] [_log()] userauth is OK
2025-12-24T19:19:55.115 [DEBUG] [Thread-307559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:19:55.115 [DEBUG] [Thread-307559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:19:55.116 [DEBUG] [Thread-307559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:19:55.116 [DEBUG] [Thread-307559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:19:55.137 [INFO] [Thread-307559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:19:55.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:19:55.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:19:55.951 [DEBUG] [Thread-307559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:19:55.952 [DEBUG] [Thread-307559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:19:56.001 [DEBUG] [Thread-307559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:19:56.002 [DEBUG] [Thread-307559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:19:56.011 [DEBUG] [Thread-307559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:19:56.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:19:56.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:19:56.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
2025-12-24T19:19:56.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:19:56.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:19:56.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:19:56.052 [DEBUG] [Thread-307559] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:19:59.499 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:19:59.501 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:20:01.156 [DEBUG] [Thread-307561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:20:02.444 [DEBUG] [Thread-307562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:20:16.352 [DEBUG] [Thread-307563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:20:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:20:26.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:20:26.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:20:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 19, 49), 15.65, 35.76, 0.0, 32.8, 20.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:20:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:19:49
2025-12-24T19:20:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:20:27.471 [DEBUG] [Thread-307564] [transport.py] [_log()] starting thread (client mode): 0xf572e830
2025-12-24T19:20:27.471 [DEBUG] [Thread-307564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:20:27.482 [DEBUG] [Thread-307564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:20:27.482 [INFO] [Thread-307564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:20:27.485 [DEBUG] [Thread-307564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:20:27.485 [DEBUG] [Thread-307564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:20:27.485 [DEBUG] [Thread-307564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:20:27.485 [DEBUG] [Thread-307564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:20:27.485 [DEBUG] [Thread-307564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:20:27.485 [DEBUG] [Thread-307564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:20:27.485 [DEBUG] [Thread-307564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] client lang: <none>
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] server lang: <none>
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] kex follows: False
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:20:27.486 [DEBUG] [Thread-307564] [transport.py] [_log()] Compression: none
2025-12-24T19:20:27.487 [DEBUG] [Thread-307564] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:20:27.518 [DEBUG] [Thread-307564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:20:27.521 [DEBUG] [Thread-307564] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:20:27.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:20:27.523 [DEBUG] [Thread-307564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:20:27.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:20:27.561 [DEBUG] [Thread-307564] [transport.py] [_log()] userauth is OK
2025-12-24T19:20:27.561 [DEBUG] [Thread-307564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:20:27.561 [DEBUG] [Thread-307564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:20:27.561 [DEBUG] [Thread-307564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:20:27.561 [DEBUG] [Thread-307564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:20:27.583 [INFO] [Thread-307564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:20:27.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:20:28.235 [DEBUG] [Thread-307564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:20:28.235 [DEBUG] [Thread-307564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:20:28.238 [DEBUG] [Thread-307564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:20:28.276 [DEBUG] [Thread-307564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:20:28.277 [DEBUG] [Thread-307564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:20:28.281 [DEBUG] [Thread-307564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:20:28.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:20:28.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:20:28.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:20:28.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:20:28.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:20:28.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:20:28.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:20:28.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:20:28.309 [DEBUG] [Thread-307564] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:20:28.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:20:28.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.721941 -999.00  +20.30  20.54     41   +6.90 1 2 1 1 1   887    0 10.97 -115.27 ----- 21.1 20.5 161.8 34.5 21.8 -23.7 21.7 -23.6 21.8 -22.2 22.1 -23.0
2025-12-24T19:20:28.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:20:28.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:20:28.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.721941
2025-12-24T19:20:28.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:20:28.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:20:28.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:20:28.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:20:28.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:20:28.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:19:49', tmtdew=15.65, humidity=35.76, cloud=0.0, wind=32.8, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:19:35.702', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:20:28.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:20:28.432 [DEBUG] [Thread-307567] [transport.py] [_log()] starting thread (client mode): 0xf572ccd0
2025-12-24T19:20:28.432 [DEBUG] [Thread-307567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:20:28.447 [DEBUG] [Thread-307567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:20:28.447 [INFO] [Thread-307567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:20:28.454 [DEBUG] [Thread-307567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] client lang: <none>
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] server lang: <none>
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] kex follows: False
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] Compression: none
2025-12-24T19:20:28.455 [DEBUG] [Thread-307567] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:20:28.511 [DEBUG] [Thread-307567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:20:28.512 [DEBUG] [Thread-307567] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:20:28.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:20:28.513 [DEBUG] [Thread-307567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:20:28.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:20:28.568 [DEBUG] [Thread-307567] [transport.py] [_log()] userauth is OK
2025-12-24T19:20:28.568 [DEBUG] [Thread-307567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:20:28.568 [DEBUG] [Thread-307567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:20:28.569 [DEBUG] [Thread-307567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:20:28.569 [DEBUG] [Thread-307567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:20:28.593 [INFO] [Thread-307567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:20:28.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:20:28.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:20:29.430 [DEBUG] [Thread-307567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:20:29.430 [DEBUG] [Thread-307567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:20:29.477 [DEBUG] [Thread-307567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:20:29.477 [DEBUG] [Thread-307567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:20:29.486 [DEBUG] [Thread-307567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:20:29.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:20:29.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')
2025-12-24T19:20:29.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:20:29.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:20:29.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:20:29.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:20:29.525 [DEBUG] [Thread-307567] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:20:31.479 [DEBUG] [Thread-307569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:20:46.645 [DEBUG] [Thread-307570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:20:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:20:59.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:20:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:20:59.650 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:20:59.653 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:21:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 20, 23), 15.57, 35.96, 0.0, 30.65, 20.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:21:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:20:23
2025-12-24T19:21:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:21:00.953 [DEBUG] [Thread-307571] [transport.py] [_log()] starting thread (client mode): 0xf572dea0
2025-12-24T19:21:00.954 [DEBUG] [Thread-307571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:21:00.960 [DEBUG] [Thread-307571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:21:00.960 [INFO] [Thread-307571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:21:00.963 [DEBUG] [Thread-307571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] client lang: <none>
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] server lang: <none>
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] kex follows: False
2025-12-24T19:21:00.964 [DEBUG] [Thread-307571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:21:00.965 [DEBUG] [Thread-307571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:21:00.965 [DEBUG] [Thread-307571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:21:00.965 [DEBUG] [Thread-307571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:21:00.965 [DEBUG] [Thread-307571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:21:00.965 [DEBUG] [Thread-307571] [transport.py] [_log()] Compression: none
2025-12-24T19:21:00.965 [DEBUG] [Thread-307571] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:21:00.996 [DEBUG] [Thread-307571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:21:00.999 [DEBUG] [Thread-307571] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:21:01.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:21:01.000 [DEBUG] [Thread-307571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:21:01.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:21:01.003 [DEBUG] [Thread-307571] [transport.py] [_log()] userauth is OK
2025-12-24T19:21:01.003 [DEBUG] [Thread-307571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:21:01.003 [DEBUG] [Thread-307571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:21:01.003 [DEBUG] [Thread-307571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:21:01.003 [DEBUG] [Thread-307571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:21:01.021 [INFO] [Thread-307571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:21:01.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:21:01.770 [DEBUG] [Thread-307573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:21:01.828 [DEBUG] [Thread-307571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:21:01.828 [DEBUG] [Thread-307571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:21:01.830 [DEBUG] [Thread-307571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:21:01.869 [DEBUG] [Thread-307571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:21:01.869 [DEBUG] [Thread-307571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:21:01.873 [DEBUG] [Thread-307571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:21:01.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:21:01.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:21:01.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:21:01.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:21:01.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:21:01.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:21:01.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:21:01.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:21:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:21:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.722288 -999.00  +20.30  21.89     42   +7.00 1 2 1 1 1   887    0 10.83 -111.54 ----- 24.2 21.9 158.4 32.2 21.8 -23.8 21.7 -23.2 21.8 -21.9 22.0 -22.9
2025-12-24T19:21:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:21:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:21:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.722288
2025-12-24T19:21:01.914 [DEBUG] [Thread-307571] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:21:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:21:01.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:21:01.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:21:01.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:21:01.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:21:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:20:23', tmtdew=15.57, humidity=35.96, cloud=0.0, wind=30.65, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:20:05.683', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:21:02.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:21:02.028 [DEBUG] [Thread-307575] [transport.py] [_log()] starting thread (client mode): 0xf572bc70
2025-12-24T19:21:02.028 [DEBUG] [Thread-307575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:21:02.042 [DEBUG] [Thread-307575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:21:02.043 [INFO] [Thread-307575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:21:02.050 [DEBUG] [Thread-307575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:21:02.051 [DEBUG] [Thread-307575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:21:02.051 [DEBUG] [Thread-307575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:21:02.051 [DEBUG] [Thread-307575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:21:02.051 [DEBUG] [Thread-307575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:21:02.051 [DEBUG] [Thread-307575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] client lang: <none>
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] server lang: <none>
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] kex follows: False
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] Compression: none
2025-12-24T19:21:02.052 [DEBUG] [Thread-307575] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:21:02.110 [DEBUG] [Thread-307575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:21:02.110 [DEBUG] [Thread-307575] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:21:02.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:21:02.111 [DEBUG] [Thread-307575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:21:02.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:21:02.167 [DEBUG] [Thread-307575] [transport.py] [_log()] userauth is OK
2025-12-24T19:21:02.168 [DEBUG] [Thread-307575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:21:02.168 [DEBUG] [Thread-307575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:21:02.168 [DEBUG] [Thread-307575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:21:02.168 [DEBUG] [Thread-307575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:21:02.192 [INFO] [Thread-307575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:21:02.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:21:02.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:21:02.797 [DEBUG] [Thread-307577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:21:03.066 [DEBUG] [Thread-307575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:21:03.066 [DEBUG] [Thread-307575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:21:03.113 [DEBUG] [Thread-307575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:21:03.113 [DEBUG] [Thread-307575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:21:03.122 [DEBUG] [Thread-307575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:21:03.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:21:03.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:21:03.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:21:03.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:21:03.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:21:03.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:21:03.189 [DEBUG] [Thread-307575] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:21:16.937 [DEBUG] [Thread-307578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:21:32.158 [DEBUG] [Thread-307579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:21:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:21:33.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:21:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:21:34.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 20, 57), 15.24, 37.03, 0.0, 35.78, 20.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:21:34.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:20:57
2025-12-24T19:21:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:21:34.945 [DEBUG] [Thread-307580] [transport.py] [_log()] starting thread (client mode): 0xf572efe0
2025-12-24T19:21:34.946 [DEBUG] [Thread-307580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:21:34.958 [DEBUG] [Thread-307580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:21:34.958 [INFO] [Thread-307580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:21:34.963 [DEBUG] [Thread-307580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:21:34.963 [DEBUG] [Thread-307580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:21:34.963 [DEBUG] [Thread-307580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:21:34.963 [DEBUG] [Thread-307580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:21:34.963 [DEBUG] [Thread-307580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:21:34.963 [DEBUG] [Thread-307580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:21:34.963 [DEBUG] [Thread-307580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:21:34.963 [DEBUG] [Thread-307580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] client lang: <none>
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] server lang: <none>
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] kex follows: False
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] Compression: none
2025-12-24T19:21:34.964 [DEBUG] [Thread-307580] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:21:34.998 [DEBUG] [Thread-307580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:21:35.002 [DEBUG] [Thread-307580] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:21:35.004 [DEBUG] [Thread-307580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:21:35.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:21:35.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:21:35.009 [DEBUG] [Thread-307580] [transport.py] [_log()] userauth is OK
2025-12-24T19:21:35.009 [DEBUG] [Thread-307580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:21:35.009 [DEBUG] [Thread-307580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:21:35.009 [DEBUG] [Thread-307580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:21:35.009 [DEBUG] [Thread-307580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:21:35.035 [INFO] [Thread-307580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:21:35.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:21:35.675 [DEBUG] [Thread-307580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:21:35.676 [DEBUG] [Thread-307580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:21:35.676 [DEBUG] [Thread-307580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:21:35.716 [DEBUG] [Thread-307580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:21:35.716 [DEBUG] [Thread-307580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:21:35.719 [DEBUG] [Thread-307580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:21:35.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:21:35.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:21:35.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:21:35.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:21:35.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:21:35.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:21:35.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:21:35.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:21:35.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:21:35.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.722982 -999.00  +20.20  22.05     42   +7.00 1 2 1 1 1   887    0 11.28 -104.21 ----- 22.8 22.1 166.7 28.3 21.7 -23.6 21.6 -23.5 21.6 -21.9 21.9 -22.9
2025-12-24T19:21:35.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:21:35.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:21:35.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.722982
2025-12-24T19:21:35.751 [DEBUG] [Thread-307580] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:21:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:21:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:21:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:21:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:21:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:21:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:20:57', tmtdew=15.24, humidity=37.03, cloud=0.0, wind=35.78, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:21:05.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:21:35.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:21:35.851 [DEBUG] [Thread-307583] [transport.py] [_log()] starting thread (client mode): 0xf572e230
2025-12-24T19:21:35.851 [DEBUG] [Thread-307583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:21:35.866 [DEBUG] [Thread-307583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:21:35.866 [INFO] [Thread-307583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] client lang: <none>
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] server lang: <none>
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] kex follows: False
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] Compression: none
2025-12-24T19:21:35.874 [DEBUG] [Thread-307583] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:21:35.931 [DEBUG] [Thread-307583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:21:35.931 [DEBUG] [Thread-307583] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:21:35.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:21:35.932 [DEBUG] [Thread-307583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:21:35.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:21:35.987 [DEBUG] [Thread-307583] [transport.py] [_log()] userauth is OK
2025-12-24T19:21:35.988 [DEBUG] [Thread-307583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:21:35.988 [DEBUG] [Thread-307583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:21:35.988 [DEBUG] [Thread-307583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:21:35.988 [DEBUG] [Thread-307583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:21:36.012 [INFO] [Thread-307583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:21:36.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:21:36.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:21:36.831 [DEBUG] [Thread-307583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:21:36.831 [DEBUG] [Thread-307583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:21:36.878 [DEBUG] [Thread-307583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:21:36.878 [DEBUG] [Thread-307583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:21:36.887 [DEBUG] [Thread-307583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:21:36.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:21:36.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:21:36.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
2025-12-24T19:21:36.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:21:36.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:21:36.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:21:36.925 [DEBUG] [Thread-307583] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:21:47.264 [DEBUG] [Thread-307585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:21:59.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:21:59.829 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:22:02.456 [DEBUG] [Thread-307586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:22:03.076 [DEBUG] [Thread-307587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:22:06.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:22:06.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:22:06.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:22:07.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 21, 30), 15.18, 37.18, 0.0, 35.13, 20.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:22:07.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:21:30
2025-12-24T19:22:08.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:22:08.269 [DEBUG] [Thread-307588] [transport.py] [_log()] starting thread (client mode): 0xf572fb20
2025-12-24T19:22:08.269 [DEBUG] [Thread-307588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:22:08.281 [DEBUG] [Thread-307588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:22:08.281 [INFO] [Thread-307588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:22:08.285 [DEBUG] [Thread-307588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] client lang: <none>
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] server lang: <none>
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] kex follows: False
2025-12-24T19:22:08.286 [DEBUG] [Thread-307588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:22:08.288 [DEBUG] [Thread-307588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:22:08.288 [DEBUG] [Thread-307588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:22:08.288 [DEBUG] [Thread-307588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:22:08.288 [DEBUG] [Thread-307588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:22:08.288 [DEBUG] [Thread-307588] [transport.py] [_log()] Compression: none
2025-12-24T19:22:08.288 [DEBUG] [Thread-307588] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:22:08.319 [DEBUG] [Thread-307588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:22:08.323 [DEBUG] [Thread-307588] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:22:08.324 [DEBUG] [Thread-307588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:22:08.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:22:08.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:22:08.329 [DEBUG] [Thread-307588] [transport.py] [_log()] userauth is OK
2025-12-24T19:22:08.329 [DEBUG] [Thread-307588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:22:08.329 [DEBUG] [Thread-307588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:22:08.329 [DEBUG] [Thread-307588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:22:08.329 [DEBUG] [Thread-307588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:22:08.355 [INFO] [Thread-307588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:22:08.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:22:09.201 [DEBUG] [Thread-307588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:22:09.201 [DEBUG] [Thread-307588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:22:09.202 [DEBUG] [Thread-307588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:22:09.243 [DEBUG] [Thread-307588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:22:09.243 [DEBUG] [Thread-307588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:22:09.245 [DEBUG] [Thread-307588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:22:09.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:22:09.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:22:09.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:22:09.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:22:09.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:22:09.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:22:09.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:22:09.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:22:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:22:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.723330 -999.00  +20.20  26.55     42   +6.90 1 2 1 1 1   887    0 11.33 -96.14 ----- 24.8 26.6 166.6 33.4 21.6 -23.8 21.6 -23.0 21.6 -22.1 21.9 -23.2
2025-12-24T19:22:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:22:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:22:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.723330
2025-12-24T19:22:09.272 [DEBUG] [Thread-307588] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:22:09.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:22:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:22:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:22:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:22:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:22:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:21:30', tmtdew=15.18, humidity=37.18, cloud=0.0, wind=35.13, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:21:35.712', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:22:09.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:22:09.376 [DEBUG] [Thread-307591] [transport.py] [_log()] starting thread (client mode): 0xf572fc70
2025-12-24T19:22:09.376 [DEBUG] [Thread-307591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:22:09.391 [DEBUG] [Thread-307591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:22:09.391 [INFO] [Thread-307591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] client lang: <none>
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] server lang: <none>
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] kex follows: False
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] Compression: none
2025-12-24T19:22:09.399 [DEBUG] [Thread-307591] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:22:09.453 [DEBUG] [Thread-307591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:22:09.453 [DEBUG] [Thread-307591] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:22:09.453 [DEBUG] [Thread-307591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:22:09.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:22:09.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:22:09.511 [DEBUG] [Thread-307591] [transport.py] [_log()] userauth is OK
2025-12-24T19:22:09.511 [DEBUG] [Thread-307591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:22:09.511 [DEBUG] [Thread-307591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:22:09.511 [DEBUG] [Thread-307591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:22:09.511 [DEBUG] [Thread-307591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:22:09.525 [INFO] [Thread-307591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:22:09.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:22:09.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:22:10.333 [DEBUG] [Thread-307591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:22:10.333 [DEBUG] [Thread-307591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:22:10.380 [DEBUG] [Thread-307591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:22:10.381 [DEBUG] [Thread-307591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:22:10.389 [DEBUG] [Thread-307591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:22:10.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:22: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')
2025-12-24T19:22: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
2025-12-24T19:22:10.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:22:10.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:22:10.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:22:10.421 [DEBUG] [Thread-307591] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:22:17.550 [DEBUG] [Thread-307593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:22:32.785 [DEBUG] [Thread-307594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:22:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:22:40.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:22:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:22:41.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 22, 4), 15.16, 37.21, 0.0, 31.57, 20.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:22:41.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:22:04
2025-12-24T19:22:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:22:41.718 [DEBUG] [Thread-307595] [transport.py] [_log()] starting thread (client mode): 0xf572f4f0
2025-12-24T19:22:41.719 [DEBUG] [Thread-307595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:22:41.728 [DEBUG] [Thread-307595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:22:41.728 [INFO] [Thread-307595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] client lang: <none>
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] server lang: <none>
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] kex follows: False
2025-12-24T19:22:41.733 [DEBUG] [Thread-307595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:22:41.734 [DEBUG] [Thread-307595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:22:41.734 [DEBUG] [Thread-307595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:22:41.735 [DEBUG] [Thread-307595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:22:41.735 [DEBUG] [Thread-307595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:22:41.735 [DEBUG] [Thread-307595] [transport.py] [_log()] Compression: none
2025-12-24T19:22:41.735 [DEBUG] [Thread-307595] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:22:41.776 [DEBUG] [Thread-307595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:22:41.781 [DEBUG] [Thread-307595] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:22:41.783 [DEBUG] [Thread-307595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:22:41.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:22:41.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:22:41.788 [DEBUG] [Thread-307595] [transport.py] [_log()] userauth is OK
2025-12-24T19:22:41.789 [DEBUG] [Thread-307595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:22:41.789 [DEBUG] [Thread-307595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:22:41.789 [DEBUG] [Thread-307595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:22:41.789 [DEBUG] [Thread-307595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:22:41.827 [INFO] [Thread-307595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:22:41.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:22:42.481 [DEBUG] [Thread-307595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:22:42.481 [DEBUG] [Thread-307595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:22:42.483 [DEBUG] [Thread-307595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:22:42.522 [DEBUG] [Thread-307595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:22:42.522 [DEBUG] [Thread-307595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:22:42.525 [DEBUG] [Thread-307595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:22:42.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:22:42.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:22:42.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:22:42.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:22:42.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:22:42.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:22:42.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:22:42.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:22:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:22:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.723677 -999.00  +20.20  22.56     42   +6.90 1 2 1 1 1   887    0 11.14 -100.36 ----- 17.6 22.6 168.0 30.9 21.6 -23.6 21.6 -22.9 21.6 -21.6 21.8 -22.7
2025-12-24T19:22:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:22:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:22:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.723677
2025-12-24T19:22:42.559 [DEBUG] [Thread-307595] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:22:42.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:22:42.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:22:42.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:22:42.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:22:42.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:22:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:22:04', tmtdew=15.16, humidity=37.21, cloud=0.0, wind=31.57, temperature=20.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:22:05.693', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:22:42.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:22:42.658 [DEBUG] [Thread-307598] [transport.py] [_log()] starting thread (client mode): 0xf572a260
2025-12-24T19:22:42.658 [DEBUG] [Thread-307598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:22:42.673 [DEBUG] [Thread-307598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:22:42.673 [INFO] [Thread-307598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:22:42.680 [DEBUG] [Thread-307598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] client lang: <none>
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] server lang: <none>
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] kex follows: False
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:22:42.681 [DEBUG] [Thread-307598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:22:42.682 [DEBUG] [Thread-307598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:22:42.682 [DEBUG] [Thread-307598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:22:42.682 [DEBUG] [Thread-307598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:22:42.682 [DEBUG] [Thread-307598] [transport.py] [_log()] Compression: none
2025-12-24T19:22:42.682 [DEBUG] [Thread-307598] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:22:42.742 [DEBUG] [Thread-307598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:22:42.743 [DEBUG] [Thread-307598] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:22:42.743 [DEBUG] [Thread-307598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:22:42.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:22:42.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:22:42.799 [DEBUG] [Thread-307598] [transport.py] [_log()] userauth is OK
2025-12-24T19:22:42.799 [DEBUG] [Thread-307598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:22:42.799 [DEBUG] [Thread-307598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:22:42.799 [DEBUG] [Thread-307598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:22:42.799 [DEBUG] [Thread-307598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:22:42.813 [INFO] [Thread-307598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:22:42.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:22:42.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:22:43.681 [DEBUG] [Thread-307598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:22:43.681 [DEBUG] [Thread-307598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:22:43.729 [DEBUG] [Thread-307598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:22:43.729 [DEBUG] [Thread-307598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:22:43.737 [DEBUG] [Thread-307598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:22:43.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:22:43.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:22:43.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:22:43.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:22:43.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:22:43.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:22:43.773 [DEBUG] [Thread-307598] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:22:47.887 [DEBUG] [Thread-307600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:22:59.987 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:23:00.001 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:23:03.082 [DEBUG] [Thread-307601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:23:03.548 [DEBUG] [Thread-307602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:23:13.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:23:13.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:23:13.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:23:15.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 22, 37), 15.23, 36.66, 0.0, 34.53, 20.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:23:15.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:22:37
2025-12-24T19:23:15.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:23:15.589 [DEBUG] [Thread-307603] [transport.py] [_log()] starting thread (client mode): 0xf572ed70
2025-12-24T19:23:15.591 [DEBUG] [Thread-307603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:23:15.598 [DEBUG] [Thread-307603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:23:15.598 [INFO] [Thread-307603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] client lang: <none>
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] server lang: <none>
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] kex follows: False
2025-12-24T19:23:15.603 [DEBUG] [Thread-307603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:23:15.604 [DEBUG] [Thread-307603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:23:15.604 [DEBUG] [Thread-307603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:23:15.604 [DEBUG] [Thread-307603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:23:15.604 [DEBUG] [Thread-307603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:23:15.604 [DEBUG] [Thread-307603] [transport.py] [_log()] Compression: none
2025-12-24T19:23:15.604 [DEBUG] [Thread-307603] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:23:15.633 [DEBUG] [Thread-307603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:23:15.636 [DEBUG] [Thread-307603] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:23:15.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:23:15.639 [DEBUG] [Thread-307603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:23:15.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:23:15.641 [DEBUG] [Thread-307603] [transport.py] [_log()] userauth is OK
2025-12-24T19:23:15.641 [DEBUG] [Thread-307603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:23:15.641 [DEBUG] [Thread-307603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:23:15.641 [DEBUG] [Thread-307603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:23:15.641 [DEBUG] [Thread-307603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:23:15.657 [INFO] [Thread-307603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:23:15.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:23:16.289 [DEBUG] [Thread-307603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:23:16.290 [DEBUG] [Thread-307603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:23:16.291 [DEBUG] [Thread-307603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:23:16.330 [DEBUG] [Thread-307603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:23:16.331 [DEBUG] [Thread-307603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:23:16.333 [DEBUG] [Thread-307603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:23:16.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:23:16.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:23:16.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:23:16.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:23:16.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:23:16.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:23:16.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:23:16.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:23:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:23:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.724024 -999.00  +20.20  24.49     42   +6.90 1 2 1 1 1   887    0 11.01 -97.39 ----- 25.0 24.5 162.3 29.2 21.6 -23.6 21.5 -22.9 21.6 -22.1 21.8 -23.2
2025-12-24T19:23:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:23:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:23:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.724024
2025-12-24T19:23:16.367 [DEBUG] [Thread-307603] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:23:16.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:23:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:23:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:23:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:23:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:23:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:22:37', tmtdew=15.23, humidity=36.66, cloud=0.0, wind=34.53, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:22:35.674', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:23:16.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:23:16.483 [DEBUG] [Thread-307606] [transport.py] [_log()] starting thread (client mode): 0xf572f490
2025-12-24T19:23:16.483 [DEBUG] [Thread-307606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:23:16.497 [DEBUG] [Thread-307606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:23:16.497 [INFO] [Thread-307606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] client lang: <none>
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] server lang: <none>
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] kex follows: False
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:23:16.504 [DEBUG] [Thread-307606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:23:16.505 [DEBUG] [Thread-307606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:23:16.505 [DEBUG] [Thread-307606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:23:16.505 [DEBUG] [Thread-307606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:23:16.505 [DEBUG] [Thread-307606] [transport.py] [_log()] Compression: none
2025-12-24T19:23:16.505 [DEBUG] [Thread-307606] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:23:16.562 [DEBUG] [Thread-307606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:23:16.562 [DEBUG] [Thread-307606] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:23:16.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:23:16.562 [DEBUG] [Thread-307606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:23:16.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:23:16.619 [DEBUG] [Thread-307606] [transport.py] [_log()] userauth is OK
2025-12-24T19:23:16.619 [DEBUG] [Thread-307606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:23:16.619 [DEBUG] [Thread-307606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:23:16.619 [DEBUG] [Thread-307606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:23:16.620 [DEBUG] [Thread-307606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:23:16.640 [INFO] [Thread-307606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:23:16.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:23:16.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:23:17.464 [DEBUG] [Thread-307606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:23:17.465 [DEBUG] [Thread-307606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:23:17.516 [DEBUG] [Thread-307606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:23:17.516 [DEBUG] [Thread-307606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:23:17.524 [DEBUG] [Thread-307606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:23:17.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:23:17.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:23:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:23:17.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:23:17.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:23:17.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:23:17.559 [DEBUG] [Thread-307606] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:23:18.204 [DEBUG] [Thread-307608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:23:33.594 [DEBUG] [Thread-307609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:23:47.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:23:47.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:23:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:23:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 23, 10), 15.25, 36.61, 0.0, 32.69, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:23:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:23:10
2025-12-24T19:23:48.724 [DEBUG] [Thread-307610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:23:48.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:23:49.055 [DEBUG] [Thread-307611] [transport.py] [_log()] starting thread (client mode): 0xf572e050
2025-12-24T19:23:49.055 [DEBUG] [Thread-307611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:23:49.072 [DEBUG] [Thread-307611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:23:49.072 [INFO] [Thread-307611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] client lang: <none>
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] server lang: <none>
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] kex follows: False
2025-12-24T19:23:49.084 [DEBUG] [Thread-307611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:23:49.085 [DEBUG] [Thread-307611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:23:49.085 [DEBUG] [Thread-307611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:23:49.085 [DEBUG] [Thread-307611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:23:49.085 [DEBUG] [Thread-307611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:23:49.085 [DEBUG] [Thread-307611] [transport.py] [_log()] Compression: none
2025-12-24T19:23:49.085 [DEBUG] [Thread-307611] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:23:49.113 [DEBUG] [Thread-307611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:23:49.116 [DEBUG] [Thread-307611] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:23:49.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:23:49.118 [DEBUG] [Thread-307611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:23:49.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:23:49.120 [DEBUG] [Thread-307611] [transport.py] [_log()] userauth is OK
2025-12-24T19:23:49.120 [DEBUG] [Thread-307611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:23:49.120 [DEBUG] [Thread-307611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:23:49.120 [DEBUG] [Thread-307611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:23:49.120 [DEBUG] [Thread-307611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:23:49.137 [INFO] [Thread-307611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:23:49.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:23:49.792 [DEBUG] [Thread-307611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:23:49.792 [DEBUG] [Thread-307611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:23:49.794 [DEBUG] [Thread-307611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:23:49.833 [DEBUG] [Thread-307611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:23:49.834 [DEBUG] [Thread-307611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:23:49.837 [DEBUG] [Thread-307611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:23:49.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:23:49.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:23:49.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:23:49.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:23:49.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:23:49.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:23:49.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:23:49.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:23:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:23:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.724371 -999.00  +20.10  26.01     42   +6.90 1 2 1 1 1   887    0 11.43 -90.98 ----- 28.2 26.0 173.0 33.9 21.6 -23.5 21.5 -23.3 21.6 -21.8 21.8 -22.8
2025-12-24T19:23:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:23:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:23:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.724371
2025-12-24T19:23:49.869 [DEBUG] [Thread-307611] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:23:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:23:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:23:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:23:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:23:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:23:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:23:10', tmtdew=15.25, humidity=36.61, cloud=0.0, wind=32.69, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:23:05.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:23:49.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:23:49.980 [DEBUG] [Thread-307614] [transport.py] [_log()] starting thread (client mode): 0xf572e140
2025-12-24T19:23:49.980 [DEBUG] [Thread-307614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:23:49.995 [DEBUG] [Thread-307614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:23:49.995 [INFO] [Thread-307614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] client lang: <none>
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] server lang: <none>
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] kex follows: False
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:23:50.002 [DEBUG] [Thread-307614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:23:50.003 [DEBUG] [Thread-307614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:23:50.003 [DEBUG] [Thread-307614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:23:50.003 [DEBUG] [Thread-307614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:23:50.003 [DEBUG] [Thread-307614] [transport.py] [_log()] Compression: none
2025-12-24T19:23:50.003 [DEBUG] [Thread-307614] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:23:50.063 [DEBUG] [Thread-307614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:23:50.064 [DEBUG] [Thread-307614] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:23:50.065 [DEBUG] [Thread-307614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:23:50.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:23:50.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:23:50.119 [DEBUG] [Thread-307614] [transport.py] [_log()] userauth is OK
2025-12-24T19:23:50.119 [DEBUG] [Thread-307614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:23:50.119 [DEBUG] [Thread-307614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:23:50.119 [DEBUG] [Thread-307614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:23:50.120 [DEBUG] [Thread-307614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:23:50.138 [INFO] [Thread-307614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:23:50.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:23:50.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:23:50.966 [DEBUG] [Thread-307614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:23:50.966 [DEBUG] [Thread-307614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:23:51.014 [DEBUG] [Thread-307614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:23:51.015 [DEBUG] [Thread-307614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:23:51.024 [DEBUG] [Thread-307614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:23:51.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:23:51.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:23: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
2025-12-24T19:23:51.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:23:51.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:23:51.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:23:51.062 [DEBUG] [Thread-307614] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:24:00.163 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:24:00.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:24:03.816 [DEBUG] [Thread-307616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:24:03.889 [DEBUG] [Thread-307617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:24:18.961 [DEBUG] [Thread-307618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:24:21.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:24:21.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:24:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:24:22.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 23, 45), 15.13, 37.16, 0.0, 31.71, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:24:22.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:23:45
2025-12-24T19:24:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:24:22.643 [DEBUG] [Thread-307619] [transport.py] [_log()] starting thread (client mode): 0xf8188820
2025-12-24T19:24:22.644 [DEBUG] [Thread-307619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:24:22.651 [DEBUG] [Thread-307619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:24:22.651 [INFO] [Thread-307619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] client lang: <none>
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] server lang: <none>
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] kex follows: False
2025-12-24T19:24:22.658 [DEBUG] [Thread-307619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:24:22.659 [DEBUG] [Thread-307619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:24:22.660 [DEBUG] [Thread-307619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:24:22.660 [DEBUG] [Thread-307619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:24:22.660 [DEBUG] [Thread-307619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:24:22.660 [DEBUG] [Thread-307619] [transport.py] [_log()] Compression: none
2025-12-24T19:24:22.660 [DEBUG] [Thread-307619] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:24:22.693 [DEBUG] [Thread-307619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:24:22.700 [DEBUG] [Thread-307619] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:24:22.701 [DEBUG] [Thread-307619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:24:22.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:24:22.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:24:22.706 [DEBUG] [Thread-307619] [transport.py] [_log()] userauth is OK
2025-12-24T19:24:22.706 [DEBUG] [Thread-307619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:24:22.706 [DEBUG] [Thread-307619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:24:22.706 [DEBUG] [Thread-307619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:24:22.706 [DEBUG] [Thread-307619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:24:22.726 [INFO] [Thread-307619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:24:22.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:24:23.369 [DEBUG] [Thread-307619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:24:23.370 [DEBUG] [Thread-307619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:24:23.372 [DEBUG] [Thread-307619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:24:23.411 [DEBUG] [Thread-307619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:24:23.412 [DEBUG] [Thread-307619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:24:23.416 [DEBUG] [Thread-307619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:24:23.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:24:23.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:24:23.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:24:23.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:24:23.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:24:23.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:24:23.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:24:23.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:24:23.453 [DEBUG] [Thread-307619] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:24:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:24:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.724718 -999.00  +20.10  25.23     42   +6.90 1 2 1 1 1   887    0 11.43 -83.60 ----- 19.1 25.2 168.2 34.4 21.5 -23.6 21.4 -22.9 21.6 -21.7 21.8 -22.8
2025-12-24T19:24:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:24:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:24:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.724718
2025-12-24T19:24:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:24:23.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:24:23.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:24:23.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:24:23.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:24:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:23:45', tmtdew=15.13, humidity=37.16, cloud=0.0, wind=31.71, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:23:35.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:24:23.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:24:23.575 [DEBUG] [Thread-307622] [transport.py] [_log()] starting thread (client mode): 0xf818b790
2025-12-24T19:24:23.576 [DEBUG] [Thread-307622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:24:23.592 [DEBUG] [Thread-307622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:24:23.592 [INFO] [Thread-307622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] client lang: <none>
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] server lang: <none>
2025-12-24T19:24:23.599 [DEBUG] [Thread-307622] [transport.py] [_log()] kex follows: False
2025-12-24T19:24:23.600 [DEBUG] [Thread-307622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:24:23.600 [DEBUG] [Thread-307622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:24:23.600 [DEBUG] [Thread-307622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:24:23.600 [DEBUG] [Thread-307622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:24:23.600 [DEBUG] [Thread-307622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:24:23.600 [DEBUG] [Thread-307622] [transport.py] [_log()] Compression: none
2025-12-24T19:24:23.600 [DEBUG] [Thread-307622] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:24:23.658 [DEBUG] [Thread-307622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:24:23.658 [DEBUG] [Thread-307622] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:24:23.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:24:23.659 [DEBUG] [Thread-307622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:24:23.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:24:23.716 [DEBUG] [Thread-307622] [transport.py] [_log()] userauth is OK
2025-12-24T19:24:23.716 [DEBUG] [Thread-307622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:24:23.717 [DEBUG] [Thread-307622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:24:23.717 [DEBUG] [Thread-307622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:24:23.717 [DEBUG] [Thread-307622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:24:23.733 [INFO] [Thread-307622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:24:23.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:24:23.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:24:24.580 [DEBUG] [Thread-307622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:24:24.580 [DEBUG] [Thread-307622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:24:24.627 [DEBUG] [Thread-307622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:24:24.628 [DEBUG] [Thread-307622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:24:24.638 [DEBUG] [Thread-307622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:24:24.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:24:24.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:24:24.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
2025-12-24T19:24:24.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:24:24.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:24:24.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:24:24.681 [DEBUG] [Thread-307622] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:24:34.075 [DEBUG] [Thread-307624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:24:49.230 [DEBUG] [Thread-307625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:24:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:24:54.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:24:54.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:24:55.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 24, 18), 15.17, 37.06, 0.0, 33.91, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:24:55.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:24:18
2025-12-24T19:24:55.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:24:56.093 [DEBUG] [Thread-307626] [transport.py] [_log()] starting thread (client mode): 0xf8189360
2025-12-24T19:24:56.094 [DEBUG] [Thread-307626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:24:56.105 [DEBUG] [Thread-307626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:24:56.105 [INFO] [Thread-307626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:24:56.108 [DEBUG] [Thread-307626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] client lang: <none>
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] server lang: <none>
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] kex follows: False
2025-12-24T19:24:56.109 [DEBUG] [Thread-307626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:24:56.110 [DEBUG] [Thread-307626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:24:56.110 [DEBUG] [Thread-307626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:24:56.110 [DEBUG] [Thread-307626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:24:56.110 [DEBUG] [Thread-307626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:24:56.110 [DEBUG] [Thread-307626] [transport.py] [_log()] Compression: none
2025-12-24T19:24:56.110 [DEBUG] [Thread-307626] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:24:56.142 [DEBUG] [Thread-307626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:24:56.145 [DEBUG] [Thread-307626] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:24:56.147 [DEBUG] [Thread-307626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:24:56.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:24:56.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:24:56.150 [DEBUG] [Thread-307626] [transport.py] [_log()] userauth is OK
2025-12-24T19:24:56.150 [DEBUG] [Thread-307626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:24:56.150 [DEBUG] [Thread-307626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:24:56.150 [DEBUG] [Thread-307626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:24:56.150 [DEBUG] [Thread-307626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:24:56.169 [INFO] [Thread-307626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:24:56.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:24:56.813 [DEBUG] [Thread-307626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:24:56.813 [DEBUG] [Thread-307626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:24:56.814 [DEBUG] [Thread-307626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:24:56.855 [DEBUG] [Thread-307626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:24:56.855 [DEBUG] [Thread-307626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:24:56.858 [DEBUG] [Thread-307626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:24:56.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:24:56.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:24:56.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:24:56.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:24:56.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:24:56.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:24:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:24:56.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:24:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:24:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.725066 -999.00  +20.10  22.77     42   +7.00 1 2 1 1 1   887    0 11.65 -80.20 ----- 22.4 22.8 179.2 28.6 21.5 -23.5 21.4 -24.0 21.5 -21.7 21.8 -22.9
2025-12-24T19:24:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:24:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:24:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.725066
2025-12-24T19:24:56.888 [DEBUG] [Thread-307626] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:24:56.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:24:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:24:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:24:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:24:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:24:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:24:18', tmtdew=15.17, humidity=37.06, cloud=0.0, wind=33.91, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:24:05.702', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:24:56.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:24:57.004 [DEBUG] [Thread-307629] [transport.py] [_log()] starting thread (client mode): 0xf8189a80
2025-12-24T19:24:57.004 [DEBUG] [Thread-307629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:24:57.018 [DEBUG] [Thread-307629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:24:57.019 [INFO] [Thread-307629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:24:57.026 [DEBUG] [Thread-307629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:24:57.026 [DEBUG] [Thread-307629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:24:57.026 [DEBUG] [Thread-307629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:24:57.026 [DEBUG] [Thread-307629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:24:57.026 [DEBUG] [Thread-307629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:24:57.026 [DEBUG] [Thread-307629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:24:57.026 [DEBUG] [Thread-307629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:24:57.026 [DEBUG] [Thread-307629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] client lang: <none>
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] server lang: <none>
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] kex follows: False
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] Compression: none
2025-12-24T19:24:57.027 [DEBUG] [Thread-307629] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:24:57.084 [DEBUG] [Thread-307629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:24:57.084 [DEBUG] [Thread-307629] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:24:57.085 [DEBUG] [Thread-307629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:24:57.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:24:57.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:24:57.140 [DEBUG] [Thread-307629] [transport.py] [_log()] userauth is OK
2025-12-24T19:24:57.140 [DEBUG] [Thread-307629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:24:57.140 [DEBUG] [Thread-307629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:24:57.140 [DEBUG] [Thread-307629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:24:57.140 [DEBUG] [Thread-307629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:24:57.165 [INFO] [Thread-307629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:24:57.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:24:57.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:24:57.972 [DEBUG] [Thread-307629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:24:57.972 [DEBUG] [Thread-307629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:24:58.019 [DEBUG] [Thread-307629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:24:58.019 [DEBUG] [Thread-307629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:24:58.028 [DEBUG] [Thread-307629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:24:58.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:24:58.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:24:58.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:24:58.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:24:58.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:24:58.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:24:58.066 [DEBUG] [Thread-307629] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:25:00.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:25:00.327 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:25:04.328 [DEBUG] [Thread-307631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:25:04.331 [DEBUG] [Thread-307632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:25:19.741 [DEBUG] [Thread-307633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:25:28.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:25:28.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:25:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:25:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 24, 53), 15.13, 37.16, 0.0, 31.6, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:25:29.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:24:53
2025-12-24T19:25:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:25:29.550 [DEBUG] [Thread-307634] [transport.py] [_log()] starting thread (client mode): 0xf572d150
2025-12-24T19:25:29.551 [DEBUG] [Thread-307634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:25:29.560 [DEBUG] [Thread-307634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:25:29.560 [INFO] [Thread-307634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] client lang: <none>
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] server lang: <none>
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] kex follows: False
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:25:29.565 [DEBUG] [Thread-307634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:25:29.566 [DEBUG] [Thread-307634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:25:29.566 [DEBUG] [Thread-307634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:25:29.566 [DEBUG] [Thread-307634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:25:29.566 [DEBUG] [Thread-307634] [transport.py] [_log()] Compression: none
2025-12-24T19:25:29.566 [DEBUG] [Thread-307634] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:25:29.598 [DEBUG] [Thread-307634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:25:29.601 [DEBUG] [Thread-307634] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:25:29.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:25:29.604 [DEBUG] [Thread-307634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:25:29.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:25:29.606 [DEBUG] [Thread-307634] [transport.py] [_log()] userauth is OK
2025-12-24T19:25:29.606 [DEBUG] [Thread-307634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:25:29.606 [DEBUG] [Thread-307634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:25:29.606 [DEBUG] [Thread-307634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:25:29.606 [DEBUG] [Thread-307634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:25:29.624 [INFO] [Thread-307634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:25:29.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:25:30.287 [DEBUG] [Thread-307634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:25:30.287 [DEBUG] [Thread-307634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:25:30.288 [DEBUG] [Thread-307634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:25:30.329 [DEBUG] [Thread-307634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:25:30.329 [DEBUG] [Thread-307634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:25:30.332 [DEBUG] [Thread-307634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:25:30.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:25:30.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:25:30.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:25:30.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:25:30.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:25:30.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:25:30.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:25:30.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:25:30.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:25:30.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.725413 -999.00  +20.10  22.75     42   +7.00 1 2 1 1 1   887    0 11.47 -79.79 ----- 17.8 22.8 158.0 32.1 21.4 -23.3 21.4 -23.1 21.6 -21.4 21.8 -22.7
2025-12-24T19:25:30.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:25:30.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:25:30.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.725413
2025-12-24T19:25:30.376 [DEBUG] [Thread-307634] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:25:30.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:25:30.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:25:30.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:25:30.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:25:30.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:25:30.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:24:53', tmtdew=15.13, humidity=37.16, cloud=0.0, wind=31.6, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:24:35.683', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:25:30.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:25:30.476 [DEBUG] [Thread-307637] [transport.py] [_log()] starting thread (client mode): 0xf572d000
2025-12-24T19:25:30.476 [DEBUG] [Thread-307637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:25:30.491 [DEBUG] [Thread-307637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:25:30.491 [INFO] [Thread-307637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] client lang: <none>
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] server lang: <none>
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] kex follows: False
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] Compression: none
2025-12-24T19:25:30.499 [DEBUG] [Thread-307637] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:25:30.562 [DEBUG] [Thread-307637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:25:30.562 [DEBUG] [Thread-307637] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:25:30.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:25:30.562 [DEBUG] [Thread-307637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:25:30.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:25:30.619 [DEBUG] [Thread-307637] [transport.py] [_log()] userauth is OK
2025-12-24T19:25:30.619 [DEBUG] [Thread-307637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:25:30.619 [DEBUG] [Thread-307637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:25:30.619 [DEBUG] [Thread-307637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:25:30.619 [DEBUG] [Thread-307637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:25:30.633 [INFO] [Thread-307637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:25:30.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:25:30.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:25:31.447 [DEBUG] [Thread-307637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:25:31.448 [DEBUG] [Thread-307637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:25:31.493 [DEBUG] [Thread-307637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:25:31.493 [DEBUG] [Thread-307637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:25:31.502 [DEBUG] [Thread-307637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:25:31.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:25:31.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')
2025-12-24T19:25:31.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
2025-12-24T19:25:31.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:25:31.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:25:31.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:25:31.536 [DEBUG] [Thread-307637] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:25:34.872 [DEBUG] [Thread-307639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:25:50.119 [DEBUG] [Thread-307640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:26:00.500 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:26:00.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:26:01.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:26:01.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:26:01.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:26:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 25, 26), 15.12, 37.19, 0.0, 32.41, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:26:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:25:26
2025-12-24T19:26:04.846 [DEBUG] [Thread-307641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:26:05.301 [DEBUG] [Thread-307642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:26:05.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:26:06.126 [DEBUG] [Thread-307643] [transport.py] [_log()] starting thread (client mode): 0xf8189510
2025-12-24T19:26:06.127 [DEBUG] [Thread-307643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:26:06.136 [DEBUG] [Thread-307643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:26:06.137 [INFO] [Thread-307643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:26:06.145 [DEBUG] [Thread-307643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] client lang: <none>
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] server lang: <none>
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] kex follows: False
2025-12-24T19:26:06.146 [DEBUG] [Thread-307643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:26:06.147 [DEBUG] [Thread-307643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:26:06.147 [DEBUG] [Thread-307643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:26:06.147 [DEBUG] [Thread-307643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:26:06.147 [DEBUG] [Thread-307643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:26:06.147 [DEBUG] [Thread-307643] [transport.py] [_log()] Compression: none
2025-12-24T19:26:06.147 [DEBUG] [Thread-307643] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:26:06.187 [DEBUG] [Thread-307643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:26:06.230 [DEBUG] [Thread-307643] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:26:06.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:26:06.233 [DEBUG] [Thread-307643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:26:06.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:26:06.236 [DEBUG] [Thread-307643] [transport.py] [_log()] userauth is OK
2025-12-24T19:26:06.236 [DEBUG] [Thread-307643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:26:06.236 [DEBUG] [Thread-307643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:26:06.236 [DEBUG] [Thread-307643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:26:06.236 [DEBUG] [Thread-307643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:26:06.256 [INFO] [Thread-307643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:26:06.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:26:07.010 [DEBUG] [Thread-307643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:26:07.010 [DEBUG] [Thread-307643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:26:07.019 [DEBUG] [Thread-307643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:26:07.051 [DEBUG] [Thread-307643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:26:07.052 [DEBUG] [Thread-307643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:26:07.054 [DEBUG] [Thread-307643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:26:07.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:26:07.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:26:07.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:26:07.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:26:07.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:26:07.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:26:07.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:26:07.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:26:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:26:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.725760 -999.00  +20.10  21.25     42   +7.00 1 2 1 1 1   887    0 11.53 -78.11 ----- 16.5 21.2 170.4 30.1 21.4 -23.3 21.4 -23.1 21.6 -21.4 21.7 -22.7
2025-12-24T19:26:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:26:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:26:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.725760
2025-12-24T19:26:07.083 [DEBUG] [Thread-307643] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:26:07.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:26:07.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:26:07.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:26:07.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:26:07.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:26:07.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:25:26', tmtdew=15.12, humidity=37.19, cloud=0.0, wind=32.41, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:25:05.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:26:07.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:26:07.186 [DEBUG] [Thread-307646] [transport.py] [_log()] starting thread (client mode): 0xf8189360
2025-12-24T19:26:07.186 [DEBUG] [Thread-307646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:26:07.200 [DEBUG] [Thread-307646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:26:07.201 [INFO] [Thread-307646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] client lang: <none>
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] server lang: <none>
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] kex follows: False
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] Compression: none
2025-12-24T19:26:07.208 [DEBUG] [Thread-307646] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:26:07.266 [DEBUG] [Thread-307646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:26:07.267 [DEBUG] [Thread-307646] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:26:07.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:26:07.268 [DEBUG] [Thread-307646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:26:07.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:26:07.323 [DEBUG] [Thread-307646] [transport.py] [_log()] userauth is OK
2025-12-24T19:26:07.323 [DEBUG] [Thread-307646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:26:07.323 [DEBUG] [Thread-307646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:26:07.323 [DEBUG] [Thread-307646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:26:07.323 [DEBUG] [Thread-307646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:26:07.337 [INFO] [Thread-307646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:26:07.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:26:07.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:26:08.211 [DEBUG] [Thread-307646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:26:08.211 [DEBUG] [Thread-307646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:26:08.259 [DEBUG] [Thread-307646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:26:08.259 [DEBUG] [Thread-307646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:26:08.267 [DEBUG] [Thread-307646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:26:08.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:26:08.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:26:08.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:26:08.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:26:08.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:26:08.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:26:08.302 [DEBUG] [Thread-307646] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:26:20.470 [DEBUG] [Thread-307648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:26:35.662 [DEBUG] [Thread-307649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:26:38.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:26:38.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:26:38.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:26:39.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 25, 26), 15.17, 37.19, 0.0, 30.61, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:26:39.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:25:26
2025-12-24T19:26:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:26:39.676 [DEBUG] [Thread-307650] [transport.py] [_log()] starting thread (client mode): 0xf818bd60
2025-12-24T19:26:39.676 [DEBUG] [Thread-307650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:26:39.688 [DEBUG] [Thread-307650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:26:39.688 [INFO] [Thread-307650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] client lang: <none>
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] server lang: <none>
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] kex follows: False
2025-12-24T19:26:39.699 [DEBUG] [Thread-307650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:26:39.700 [DEBUG] [Thread-307650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:26:39.700 [DEBUG] [Thread-307650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:26:39.700 [DEBUG] [Thread-307650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:26:39.700 [DEBUG] [Thread-307650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:26:39.700 [DEBUG] [Thread-307650] [transport.py] [_log()] Compression: none
2025-12-24T19:26:39.700 [DEBUG] [Thread-307650] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:26:39.723 [DEBUG] [Thread-307650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:26:39.725 [DEBUG] [Thread-307650] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:26:39.726 [DEBUG] [Thread-307650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:26:39.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:26:39.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:26:39.729 [DEBUG] [Thread-307650] [transport.py] [_log()] userauth is OK
2025-12-24T19:26:39.729 [DEBUG] [Thread-307650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:26:39.729 [DEBUG] [Thread-307650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:26:39.729 [DEBUG] [Thread-307650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:26:39.729 [DEBUG] [Thread-307650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:26:39.758 [INFO] [Thread-307650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:26:39.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:26:40.365 [DEBUG] [Thread-307650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:26:40.365 [DEBUG] [Thread-307650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:26:40.366 [DEBUG] [Thread-307650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:26:40.406 [DEBUG] [Thread-307650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:26:40.406 [DEBUG] [Thread-307650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:26:40.408 [DEBUG] [Thread-307650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:26:40.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:26:40.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:26:40.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:26:40.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:26:40.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:26:40.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:26:40.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:26:40.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:26:40.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:26:40.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.726454 -999.00  +20.20  26.22     42   +7.00 1 2 1 1 1   887    0 12.04 -68.95 ----- 27.0 26.2 172.2 32.6 21.4 -23.5 21.4 -23.1 21.6 -21.6 21.8 -22.7
2025-12-24T19:26:40.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:26:40.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:26:40.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.726454
2025-12-24T19:26:40.439 [DEBUG] [Thread-307650] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:26:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:26:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:26:40.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:26:40.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:26:40.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:26:40.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:25:26', tmtdew=15.17, humidity=37.19, cloud=0.0, wind=30.61, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:26:05.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:26:40.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:26:40.541 [DEBUG] [Thread-307653] [transport.py] [_log()] starting thread (client mode): 0xf818a470
2025-12-24T19:26:40.541 [DEBUG] [Thread-307653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:26:40.558 [DEBUG] [Thread-307653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:26:40.558 [INFO] [Thread-307653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:26:40.565 [DEBUG] [Thread-307653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] client lang: <none>
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] server lang: <none>
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] kex follows: False
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] Compression: none
2025-12-24T19:26:40.566 [DEBUG] [Thread-307653] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:26:40.623 [DEBUG] [Thread-307653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:26:40.623 [DEBUG] [Thread-307653] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:26:40.624 [DEBUG] [Thread-307653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:26:40.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:26:40.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:26:40.679 [DEBUG] [Thread-307653] [transport.py] [_log()] userauth is OK
2025-12-24T19:26:40.679 [DEBUG] [Thread-307653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:26:40.679 [DEBUG] [Thread-307653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:26:40.679 [DEBUG] [Thread-307653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:26:40.679 [DEBUG] [Thread-307653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:26:40.694 [INFO] [Thread-307653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:26:40.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:26:40.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:26:41.576 [DEBUG] [Thread-307653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:26:41.576 [DEBUG] [Thread-307653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:26:41.623 [DEBUG] [Thread-307653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:26:41.624 [DEBUG] [Thread-307653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:26:41.632 [DEBUG] [Thread-307653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:26:41.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:26:41.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:26:41.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:26:41.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:26:41.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:26:41.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:26:41.668 [DEBUG] [Thread-307653] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:26:50.833 [DEBUG] [Thread-307655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:27:00.671 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:27:00.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:27:05.577 [DEBUG] [Thread-307656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:27:05.993 [DEBUG] [Thread-307657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:27:11.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:27:11.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:27:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:27:13.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 26, 37), 15.24, 37.14, 0.0, 36.06, 20.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:27:13.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:26:37
2025-12-24T19:27:13.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:27:14.218 [DEBUG] [Thread-307658] [transport.py] [_log()] starting thread (client mode): 0xf818b370
2025-12-24T19:27:14.219 [DEBUG] [Thread-307658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:27:14.219 [DEBUG] [Thread-307658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:27:14.220 [INFO] [Thread-307658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] client lang: <none>
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] server lang: <none>
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] kex follows: False
2025-12-24T19:27:14.225 [DEBUG] [Thread-307658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:27:14.226 [DEBUG] [Thread-307658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:27:14.226 [DEBUG] [Thread-307658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:27:14.226 [DEBUG] [Thread-307658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:27:14.226 [DEBUG] [Thread-307658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:27:14.226 [DEBUG] [Thread-307658] [transport.py] [_log()] Compression: none
2025-12-24T19:27:14.227 [DEBUG] [Thread-307658] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:27:14.260 [DEBUG] [Thread-307658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:27:14.265 [DEBUG] [Thread-307658] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:27:14.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:27:14.268 [DEBUG] [Thread-307658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:27:14.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:27:14.270 [DEBUG] [Thread-307658] [transport.py] [_log()] userauth is OK
2025-12-24T19:27:14.270 [DEBUG] [Thread-307658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:27:14.270 [DEBUG] [Thread-307658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:27:14.270 [DEBUG] [Thread-307658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:27:14.270 [DEBUG] [Thread-307658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:27:14.302 [INFO] [Thread-307658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:27:14.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:27:15.039 [DEBUG] [Thread-307658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:27:15.040 [DEBUG] [Thread-307658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:27:15.040 [DEBUG] [Thread-307658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:27:15.081 [DEBUG] [Thread-307658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:27:15.081 [DEBUG] [Thread-307658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:27:15.111 [DEBUG] [Thread-307658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:27:15.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:27:15.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:27:15.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:27:15.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:27:15.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:27:15.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:27:15.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:27:15.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:27:15.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:27:15.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.726802 -999.00  +20.10  19.98     42   +6.90 1 2 1 1 1   887    0 11.95 -67.31 ----- 25.1 20.0 169.2 36.3 21.4 -23.7 21.4 -23.1 21.6 -22.0 21.8 -22.6
2025-12-24T19:27:15.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:27:15.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:27:15.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.726802
2025-12-24T19:27:15.159 [DEBUG] [Thread-307658] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:27:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:27:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:27:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:27:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:27:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:27:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:26:37', tmtdew=15.24, humidity=37.14, cloud=0.0, wind=36.06, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:26:35.693', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:27:15.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:27:15.306 [DEBUG] [Thread-307661] [transport.py] [_log()] starting thread (client mode): 0xf572d750
2025-12-24T19:27:15.307 [DEBUG] [Thread-307661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:27:15.322 [DEBUG] [Thread-307661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:27:15.322 [INFO] [Thread-307661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] client lang: <none>
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] server lang: <none>
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] kex follows: False
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] Compression: none
2025-12-24T19:27:15.329 [DEBUG] [Thread-307661] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:27:15.386 [DEBUG] [Thread-307661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:27:15.386 [DEBUG] [Thread-307661] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:27:15.386 [DEBUG] [Thread-307661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:27:15.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:27:15.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:27:15.443 [DEBUG] [Thread-307661] [transport.py] [_log()] userauth is OK
2025-12-24T19:27:15.443 [DEBUG] [Thread-307661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:27:15.443 [DEBUG] [Thread-307661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:27:15.444 [DEBUG] [Thread-307661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:27:15.444 [DEBUG] [Thread-307661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:27:15.457 [INFO] [Thread-307661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:27:15.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:27:15.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:27:16.277 [DEBUG] [Thread-307661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:27:16.277 [DEBUG] [Thread-307661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:27:16.325 [DEBUG] [Thread-307661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:27:16.325 [DEBUG] [Thread-307661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:27:16.333 [DEBUG] [Thread-307661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:27:16.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:27:16.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:27:16.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:27:16.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:27:16.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:27:16.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:27:16.368 [DEBUG] [Thread-307661] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:27:21.120 [DEBUG] [Thread-307663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:27:36.311 [DEBUG] [Thread-307664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:27:46.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:27:46.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:27:46.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:27:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 27, 10), 15.22, 37.18, 0.0, 35.38, 20.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:27:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:27:10
2025-12-24T19:27:48.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:27:48.481 [DEBUG] [Thread-307665] [transport.py] [_log()] starting thread (client mode): 0xf572bc70
2025-12-24T19:27:48.481 [DEBUG] [Thread-307665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:27:48.494 [DEBUG] [Thread-307665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:27:48.494 [INFO] [Thread-307665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] client lang: <none>
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] server lang: <none>
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] kex follows: False
2025-12-24T19:27:48.497 [DEBUG] [Thread-307665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:27:48.498 [DEBUG] [Thread-307665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:27:48.498 [DEBUG] [Thread-307665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:27:48.498 [DEBUG] [Thread-307665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:27:48.498 [DEBUG] [Thread-307665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:27:48.498 [DEBUG] [Thread-307665] [transport.py] [_log()] Compression: none
2025-12-24T19:27:48.498 [DEBUG] [Thread-307665] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:27:48.529 [DEBUG] [Thread-307665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:27:48.533 [DEBUG] [Thread-307665] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:27:48.534 [DEBUG] [Thread-307665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:27:48.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:27:48.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:27:48.538 [DEBUG] [Thread-307665] [transport.py] [_log()] userauth is OK
2025-12-24T19:27:48.538 [DEBUG] [Thread-307665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:27:48.538 [DEBUG] [Thread-307665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:27:48.538 [DEBUG] [Thread-307665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:27:48.538 [DEBUG] [Thread-307665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:27:48.557 [INFO] [Thread-307665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:27:48.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:27:49.139 [DEBUG] [Thread-307665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:27:49.139 [DEBUG] [Thread-307665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:27:49.140 [DEBUG] [Thread-307665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:27:49.181 [DEBUG] [Thread-307665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:27:49.181 [DEBUG] [Thread-307665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:27:49.184 [DEBUG] [Thread-307665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:27:49.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:27:49.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:27:49.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:27:49.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:27:49.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:27:49.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:27:49.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:27:49.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:27:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:27:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.727496 -999.00  +20.10  26.15     42   +6.90 1 2 1 1 1   887    0 11.98 -62.16 ----- 23.0 26.1 171.8 34.6 21.4 -23.4 21.4 -23.0 21.6 -21.5 21.7 -22.7
2025-12-24T19:27:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:27:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:27:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.727496
2025-12-24T19:27:49.218 [DEBUG] [Thread-307665] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:27:49.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:27:49.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:27:49.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:27:49.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:27:49.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:27:49.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:27:10', tmtdew=15.22, humidity=37.18, cloud=0.0, wind=35.38, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:27:35.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:27:49.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:27:49.319 [DEBUG] [Thread-307668] [transport.py] [_log()] starting thread (client mode): 0xf578ba00
2025-12-24T19:27:49.319 [DEBUG] [Thread-307668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:27:49.335 [DEBUG] [Thread-307668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:27:49.335 [INFO] [Thread-307668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] client lang: <none>
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] server lang: <none>
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] kex follows: False
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:27:49.342 [DEBUG] [Thread-307668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:27:49.343 [DEBUG] [Thread-307668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:27:49.343 [DEBUG] [Thread-307668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:27:49.343 [DEBUG] [Thread-307668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:27:49.343 [DEBUG] [Thread-307668] [transport.py] [_log()] Compression: none
2025-12-24T19:27:49.343 [DEBUG] [Thread-307668] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:27:49.397 [DEBUG] [Thread-307668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:27:49.398 [DEBUG] [Thread-307668] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:27:49.398 [DEBUG] [Thread-307668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:27:49.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:27:49.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:27:49.455 [DEBUG] [Thread-307668] [transport.py] [_log()] userauth is OK
2025-12-24T19:27:49.455 [DEBUG] [Thread-307668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:27:49.455 [DEBUG] [Thread-307668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:27:49.455 [DEBUG] [Thread-307668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:27:49.455 [DEBUG] [Thread-307668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:27:49.469 [INFO] [Thread-307668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:27:49.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:27:49.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:27:50.335 [DEBUG] [Thread-307668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:27:50.335 [DEBUG] [Thread-307668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:27:50.382 [DEBUG] [Thread-307668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:27:50.383 [DEBUG] [Thread-307668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:27:50.392 [DEBUG] [Thread-307668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:27:50.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:27:50.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:27:50.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:27:50.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:27:50.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:27:50.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:27:50.428 [DEBUG] [Thread-307668] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:27:51.415 [DEBUG] [Thread-307670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:28:00.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:28:00.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:28:05.842 [DEBUG] [Thread-307671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:28:06.542 [DEBUG] [Thread-307672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:28:20.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:28:20.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:28:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:28:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 27, 45), 15.13, 37.16, 0.0, 33.59, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:28:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:27:45
2025-12-24T19:28:21.661 [DEBUG] [Thread-307673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:28:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:28:21.947 [DEBUG] [Thread-307674] [transport.py] [_log()] starting thread (client mode): 0xf572ece0
2025-12-24T19:28:21.961 [DEBUG] [Thread-307674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:28:21.962 [DEBUG] [Thread-307674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:28:21.963 [INFO] [Thread-307674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:28:21.970 [DEBUG] [Thread-307674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:28:21.970 [DEBUG] [Thread-307674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:28:21.970 [DEBUG] [Thread-307674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:28:21.970 [DEBUG] [Thread-307674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:28:21.970 [DEBUG] [Thread-307674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:28:21.970 [DEBUG] [Thread-307674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] client lang: <none>
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] server lang: <none>
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] kex follows: False
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:28:21.971 [DEBUG] [Thread-307674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:28:21.972 [DEBUG] [Thread-307674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:28:21.972 [DEBUG] [Thread-307674] [transport.py] [_log()] Compression: none
2025-12-24T19:28:21.972 [DEBUG] [Thread-307674] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:28:22.003 [DEBUG] [Thread-307674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:28:22.007 [DEBUG] [Thread-307674] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:28:22.008 [DEBUG] [Thread-307674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:28:22.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:28:22.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:28:22.016 [DEBUG] [Thread-307674] [transport.py] [_log()] userauth is OK
2025-12-24T19:28:22.016 [DEBUG] [Thread-307674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:28:22.016 [DEBUG] [Thread-307674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:28:22.016 [DEBUG] [Thread-307674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:28:22.016 [DEBUG] [Thread-307674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:28:22.035 [INFO] [Thread-307674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:28:22.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:28:22.656 [DEBUG] [Thread-307674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:28:22.656 [DEBUG] [Thread-307674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:28:22.656 [DEBUG] [Thread-307674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:28:22.697 [DEBUG] [Thread-307674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:28:22.697 [DEBUG] [Thread-307674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:28:22.699 [DEBUG] [Thread-307674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:28:22.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:28:22.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:28:22.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:28:22.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:28:22.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:28:22.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:28:22.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:28:22.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:28:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:28:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.727843 -999.00  +20.10  19.42     42   +6.90 1 2 1 1 1   887    0 12.06 -57.28 ----- 26.5 19.4 168.0 33.0 21.3 -23.1 21.4 -23.0 21.6 -21.7 21.7 -22.8
2025-12-24T19:28:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:28:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:28:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.727843
2025-12-24T19:28:22.725 [DEBUG] [Thread-307674] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:28:22.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:28:22.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:28:22.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:28:22.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:28:22.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:28:22.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:27:45', tmtdew=15.13, humidity=37.16, cloud=0.0, wind=33.59, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:28:05.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:28:22.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:28:22.832 [DEBUG] [Thread-307677] [transport.py] [_log()] starting thread (client mode): 0xf572af20
2025-12-24T19:28:22.832 [DEBUG] [Thread-307677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:28:22.847 [DEBUG] [Thread-307677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:28:22.847 [INFO] [Thread-307677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:28:22.854 [DEBUG] [Thread-307677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:28:22.854 [DEBUG] [Thread-307677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:28:22.854 [DEBUG] [Thread-307677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:28:22.854 [DEBUG] [Thread-307677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:28:22.854 [DEBUG] [Thread-307677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:28:22.854 [DEBUG] [Thread-307677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] client lang: <none>
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] server lang: <none>
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] kex follows: False
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] Compression: none
2025-12-24T19:28:22.855 [DEBUG] [Thread-307677] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:28:22.917 [DEBUG] [Thread-307677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:28:22.917 [DEBUG] [Thread-307677] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:28:22.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:28:22.917 [DEBUG] [Thread-307677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:28:22.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:28:22.975 [DEBUG] [Thread-307677] [transport.py] [_log()] userauth is OK
2025-12-24T19:28:22.975 [DEBUG] [Thread-307677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:28:22.975 [DEBUG] [Thread-307677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:28:22.975 [DEBUG] [Thread-307677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:28:22.975 [DEBUG] [Thread-307677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:28:22.989 [INFO] [Thread-307677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:28:22.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:28:22.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:28:23.818 [DEBUG] [Thread-307677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:28:23.818 [DEBUG] [Thread-307677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:28:23.866 [DEBUG] [Thread-307677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:28:23.866 [DEBUG] [Thread-307677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:28:23.875 [DEBUG] [Thread-307677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:28:23.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:28:23.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:28:23.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:28:23.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:28:23.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:28:23.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:28:23.911 [DEBUG] [Thread-307677] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:28:36.785 [DEBUG] [Thread-307679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:28:51.964 [DEBUG] [Thread-307680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:28:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:28:53.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:28:53.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:28:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 28, 19), 15.13, 37.14, 0.0, 35.53, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:28:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:28:19
2025-12-24T19:28:55.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:28:55.366 [DEBUG] [Thread-307681] [transport.py] [_log()] starting thread (client mode): 0xf5789420
2025-12-24T19:28:55.367 [DEBUG] [Thread-307681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:28:55.376 [DEBUG] [Thread-307681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:28:55.376 [INFO] [Thread-307681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] client lang: <none>
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] server lang: <none>
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] kex follows: False
2025-12-24T19:28:55.381 [DEBUG] [Thread-307681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:28:55.382 [DEBUG] [Thread-307681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:28:55.382 [DEBUG] [Thread-307681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:28:55.382 [DEBUG] [Thread-307681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:28:55.382 [DEBUG] [Thread-307681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:28:55.382 [DEBUG] [Thread-307681] [transport.py] [_log()] Compression: none
2025-12-24T19:28:55.382 [DEBUG] [Thread-307681] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:28:55.415 [DEBUG] [Thread-307681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:28:55.418 [DEBUG] [Thread-307681] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:28:55.420 [DEBUG] [Thread-307681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:28:55.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:28:55.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:28:55.423 [DEBUG] [Thread-307681] [transport.py] [_log()] userauth is OK
2025-12-24T19:28:55.423 [DEBUG] [Thread-307681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:28:55.423 [DEBUG] [Thread-307681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:28:55.423 [DEBUG] [Thread-307681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:28:55.423 [DEBUG] [Thread-307681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:28:55.441 [INFO] [Thread-307681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:28:55.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:28:56.052 [DEBUG] [Thread-307681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:28:56.052 [DEBUG] [Thread-307681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:28:56.053 [DEBUG] [Thread-307681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:28:56.094 [DEBUG] [Thread-307681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:28:56.094 [DEBUG] [Thread-307681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:28:56.096 [DEBUG] [Thread-307681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:28:56.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:28:56.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:28:56.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:28:56.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:28:56.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:28:56.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:28:56.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:28:56.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:28:56.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:28:56.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.728190 -999.00  +20.10  21.92     42   +6.90 1 2 1 1 1   887    0 11.89 -57.18 ----- 21.2 21.9 163.1 32.6 21.4 -23.2 21.4 -23.9 21.5 -21.9 21.7 -22.6
2025-12-24T19:28:56.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:28:56.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:28:56.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.728190
2025-12-24T19:28:56.135 [DEBUG] [Thread-307681] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:28:56.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:28:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:28:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:28:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:28:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:28:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:28:19', tmtdew=15.13, humidity=37.14, cloud=0.0, wind=35.53, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:28:35.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:28:56.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:28:56.247 [DEBUG] [Thread-307684] [transport.py] [_log()] starting thread (client mode): 0xf578bf40
2025-12-24T19:28:56.247 [DEBUG] [Thread-307684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:28:56.261 [DEBUG] [Thread-307684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:28:56.261 [INFO] [Thread-307684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] client lang: <none>
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] server lang: <none>
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] kex follows: False
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] Compression: none
2025-12-24T19:28:56.269 [DEBUG] [Thread-307684] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:28:56.326 [DEBUG] [Thread-307684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:28:56.326 [DEBUG] [Thread-307684] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:28:56.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:28:56.326 [DEBUG] [Thread-307684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:28:56.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:28:56.383 [DEBUG] [Thread-307684] [transport.py] [_log()] userauth is OK
2025-12-24T19:28:56.383 [DEBUG] [Thread-307684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:28:56.383 [DEBUG] [Thread-307684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:28:56.383 [DEBUG] [Thread-307684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:28:56.383 [DEBUG] [Thread-307684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:28:56.397 [INFO] [Thread-307684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:28:56.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:28:56.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:28:57.195 [DEBUG] [Thread-307684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:28:57.195 [DEBUG] [Thread-307684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:28:57.242 [DEBUG] [Thread-307684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:28:57.243 [DEBUG] [Thread-307684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:28:57.252 [DEBUG] [Thread-307684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:28:57.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:28:57.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:28:57.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:28:57.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:28:57.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:28:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:28:57.291 [DEBUG] [Thread-307684] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:29:01.003 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:29:01.005 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:29:06.115 [DEBUG] [Thread-307686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:29:07.077 [DEBUG] [Thread-307687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:29:22.314 [DEBUG] [Thread-307688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:29:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:29:27.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:29:27.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:29:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 28, 52), 15.23, 36.66, 0.0, 27.95, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:29:28.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:28:52
2025-12-24T19:29:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:29:28.733 [DEBUG] [Thread-307689] [transport.py] [_log()] starting thread (client mode): 0xf572d750
2025-12-24T19:29:28.734 [DEBUG] [Thread-307689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:29:28.746 [DEBUG] [Thread-307689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:29:28.746 [INFO] [Thread-307689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] client lang: <none>
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] server lang: <none>
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] kex follows: False
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:29:28.756 [DEBUG] [Thread-307689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:29:28.757 [DEBUG] [Thread-307689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:29:28.757 [DEBUG] [Thread-307689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:29:28.757 [DEBUG] [Thread-307689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:29:28.757 [DEBUG] [Thread-307689] [transport.py] [_log()] Compression: none
2025-12-24T19:29:28.757 [DEBUG] [Thread-307689] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:29:28.781 [DEBUG] [Thread-307689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:29:28.784 [DEBUG] [Thread-307689] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:29:28.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:29:28.786 [DEBUG] [Thread-307689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:29:28.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:29:28.788 [DEBUG] [Thread-307689] [transport.py] [_log()] userauth is OK
2025-12-24T19:29:28.788 [DEBUG] [Thread-307689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:29:28.788 [DEBUG] [Thread-307689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:29:28.788 [DEBUG] [Thread-307689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:29:28.789 [DEBUG] [Thread-307689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:29:28.805 [INFO] [Thread-307689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:29:28.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:29:29.425 [DEBUG] [Thread-307689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:29:29.425 [DEBUG] [Thread-307689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:29:29.425 [DEBUG] [Thread-307689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:29:29.466 [DEBUG] [Thread-307689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:29:29.466 [DEBUG] [Thread-307689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:29:29.468 [DEBUG] [Thread-307689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:29:29.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:29:29.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:29:29.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:29:29.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:29:29.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:29:29.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:29:29.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:29:29.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:29:29.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:29:29.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.728538 -999.00  +20.10  19.85     42   +6.90 1 2 1 1 1   887    0 11.83 -54.95 ----- 22.6 19.9 155.0 31.3 21.3 -23.4 21.3 -22.7 21.5 -21.5 -999.0 -999.0
2025-12-24T19:29:29.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:29:29.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:29:29.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.728538
2025-12-24T19:29:29.501 [DEBUG] [Thread-307689] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:29:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:29:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:29:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:29:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:29:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:29:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:28:52', tmtdew=15.23, humidity=36.66, cloud=0.0, wind=27.95, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:29:05.683', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:29:29.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:29:29.599 [DEBUG] [Thread-307692] [transport.py] [_log()] starting thread (client mode): 0xf572d870
2025-12-24T19:29:29.599 [DEBUG] [Thread-307692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:29:29.614 [DEBUG] [Thread-307692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:29:29.614 [INFO] [Thread-307692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] client lang: <none>
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] server lang: <none>
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] kex follows: False
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] Compression: none
2025-12-24T19:29:29.621 [DEBUG] [Thread-307692] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:29:29.684 [DEBUG] [Thread-307692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:29:29.684 [DEBUG] [Thread-307692] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:29:29.684 [DEBUG] [Thread-307692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:29:29.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:29:29.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:29:29.739 [DEBUG] [Thread-307692] [transport.py] [_log()] userauth is OK
2025-12-24T19:29:29.739 [DEBUG] [Thread-307692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:29:29.739 [DEBUG] [Thread-307692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:29:29.739 [DEBUG] [Thread-307692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:29:29.739 [DEBUG] [Thread-307692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:29:29.753 [INFO] [Thread-307692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:29:29.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:29:29.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:29:30.622 [DEBUG] [Thread-307692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:29:30.622 [DEBUG] [Thread-307692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:29:30.669 [DEBUG] [Thread-307692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:29:30.669 [DEBUG] [Thread-307692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:29:30.677 [DEBUG] [Thread-307692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:29:30.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:29:30.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:29:30.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:29:30.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:29:30.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:29:30.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:29:30.709 [DEBUG] [Thread-307692] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:29:37.399 [DEBUG] [Thread-307694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:29:52.583 [DEBUG] [Thread-307695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:30:00.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:30:00.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:30:00.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
2025-12-24T19:30:01.149 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:30:01.151 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:30:05.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 29, 26), 15.22, 36.66, 0.0, 27.38, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:30:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:29:26
2025-12-24T19:30:06.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:30:06.800 [DEBUG] [Thread-307696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:30:07.082 [DEBUG] [Thread-307697] [transport.py] [_log()] starting thread (client mode): 0xf818b4f0
2025-12-24T19:30:07.083 [DEBUG] [Thread-307697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:30:07.090 [DEBUG] [Thread-307697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:30:07.090 [INFO] [Thread-307697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:30:07.094 [DEBUG] [Thread-307697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] client lang: <none>
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] server lang: <none>
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] kex follows: False
2025-12-24T19:30:07.095 [DEBUG] [Thread-307697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:30:07.096 [DEBUG] [Thread-307697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:30:07.096 [DEBUG] [Thread-307697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:30:07.096 [DEBUG] [Thread-307697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:30:07.096 [DEBUG] [Thread-307697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:30:07.096 [DEBUG] [Thread-307697] [transport.py] [_log()] Compression: none
2025-12-24T19:30:07.096 [DEBUG] [Thread-307697] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:30:07.235 [DEBUG] [Thread-307697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:30:07.238 [DEBUG] [Thread-307697] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:30:07.240 [DEBUG] [Thread-307697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:30:07.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:30:07.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:30:07.243 [DEBUG] [Thread-307697] [transport.py] [_log()] userauth is OK
2025-12-24T19:30:07.243 [DEBUG] [Thread-307697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:30:07.243 [DEBUG] [Thread-307697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:30:07.243 [DEBUG] [Thread-307697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:30:07.243 [DEBUG] [Thread-307697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:30:07.273 [INFO] [Thread-307697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:30:07.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:30:07.731 [DEBUG] [Thread-307699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:30:07.877 [DEBUG] [Thread-307697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:30:07.877 [DEBUG] [Thread-307697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:30:07.898 [DEBUG] [Thread-307697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:30:07.917 [DEBUG] [Thread-307697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:30:07.918 [DEBUG] [Thread-307697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:30:07.952 [DEBUG] [Thread-307697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:30:07.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:30:07.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:30:07.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:30:07.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:30:07.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:30:07.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:30:07.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:30:07.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:30:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:30:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.728885 -999.00  +20.10  23.09     42   +6.90 1 2 1 1 1   887    0 11.98 -52.39 ----- 16.5 23.1 170.6 34.9 21.3 -23.3 21.2 -23.5 21.5 -21.8 21.6 -22.7
2025-12-24T19:30:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:30:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:30:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.728885
2025-12-24T19:30:08.009 [DEBUG] [Thread-307697] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:30:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:30:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:30:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:30:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:30:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:30:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:29:26', tmtdew=15.22, humidity=36.66, cloud=0.0, wind=27.38, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:29:35.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:30:08.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:30:08.130 [DEBUG] [Thread-307701] [transport.py] [_log()] starting thread (client mode): 0xf81e4df0
2025-12-24T19:30:08.130 [DEBUG] [Thread-307701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:30:08.144 [DEBUG] [Thread-307701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:30:08.144 [INFO] [Thread-307701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:30:08.151 [DEBUG] [Thread-307701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:30:08.151 [DEBUG] [Thread-307701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:30:08.151 [DEBUG] [Thread-307701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:30:08.151 [DEBUG] [Thread-307701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:30:08.151 [DEBUG] [Thread-307701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] client lang: <none>
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] server lang: <none>
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] kex follows: False
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:30:08.152 [DEBUG] [Thread-307701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:30:08.369 [DEBUG] [Thread-307701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:30:08.369 [DEBUG] [Thread-307701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:30:08.369 [DEBUG] [Thread-307701] [transport.py] [_log()] Compression: none
2025-12-24T19:30:08.369 [DEBUG] [Thread-307701] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:30:08.384 [DEBUG] [Thread-307701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:30:08.384 [DEBUG] [Thread-307701] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:30:08.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:30:08.385 [DEBUG] [Thread-307701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:30:08.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:30:08.447 [DEBUG] [Thread-307701] [transport.py] [_log()] userauth is OK
2025-12-24T19:30:08.447 [DEBUG] [Thread-307701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:30:08.447 [DEBUG] [Thread-307701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:30:08.447 [DEBUG] [Thread-307701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:30:08.447 [DEBUG] [Thread-307701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:30:08.461 [INFO] [Thread-307701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:30:08.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:30:08.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:30:09.319 [DEBUG] [Thread-307701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:30:09.319 [DEBUG] [Thread-307701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:30:09.366 [DEBUG] [Thread-307701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:30:09.366 [DEBUG] [Thread-307701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:30:09.375 [DEBUG] [Thread-307701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:30:09.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:30:09.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:30:09.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:30:09.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:30:09.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:30:09.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:30:09.548 [DEBUG] [Thread-307701] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:30:23.015 [DEBUG] [Thread-307703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:30:38.245 [DEBUG] [Thread-307704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:30:39.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:30:39.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:30:39.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:30:40.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 29, 59), 15.18, 37.14, 0.0, 33.79, 20.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:30:40.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:29:59
2025-12-24T19:30:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:30:41.306 [DEBUG] [Thread-307705] [transport.py] [_log()] starting thread (client mode): 0xf81e4850
2025-12-24T19:30:41.307 [DEBUG] [Thread-307705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:30:41.321 [DEBUG] [Thread-307705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:30:41.321 [INFO] [Thread-307705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] client lang: <none>
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] server lang: <none>
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] kex follows: False
2025-12-24T19:30:41.324 [DEBUG] [Thread-307705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:30:41.325 [DEBUG] [Thread-307705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:30:41.325 [DEBUG] [Thread-307705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:30:41.325 [DEBUG] [Thread-307705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:30:41.325 [DEBUG] [Thread-307705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:30:41.325 [DEBUG] [Thread-307705] [transport.py] [_log()] Compression: none
2025-12-24T19:30:41.325 [DEBUG] [Thread-307705] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:30:41.353 [DEBUG] [Thread-307705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:30:41.356 [DEBUG] [Thread-307705] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:30:41.357 [DEBUG] [Thread-307705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:30:41.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:30:41.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:30:41.360 [DEBUG] [Thread-307705] [transport.py] [_log()] userauth is OK
2025-12-24T19:30:41.360 [DEBUG] [Thread-307705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:30:41.360 [DEBUG] [Thread-307705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:30:41.360 [DEBUG] [Thread-307705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:30:41.360 [DEBUG] [Thread-307705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:30:41.379 [INFO] [Thread-307705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:30:41.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:30:42.005 [DEBUG] [Thread-307705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:30:42.005 [DEBUG] [Thread-307705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:30:42.006 [DEBUG] [Thread-307705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:30:42.046 [DEBUG] [Thread-307705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:30:42.046 [DEBUG] [Thread-307705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:30:42.048 [DEBUG] [Thread-307705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:30:42.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:30:42.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:30:42.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:30:42.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:30:42.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:30:42.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:30:42.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:30:42.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:30:42.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:30:42.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.729232 -999.00  +20.00  30.56     42   +6.80 1 2 2 1 1   887    0 12.16 -50.24 ----- 26.1 30.6 180.2 36.3 21.2 -23.5 21.2 -23.7 21.4 -21.8 21.6 -22.8
2025-12-24T19:30:42.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:30:42.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:30:42.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.729232
2025-12-24T19:30:42.075 [DEBUG] [Thread-307705] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:30:42.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:30:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:30:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:30:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:30:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:30:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:29:59', tmtdew=15.18, humidity=37.14, cloud=0.0, wind=33.79, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:30:05.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:30:42.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:30:42.177 [DEBUG] [Thread-307708] [transport.py] [_log()] starting thread (client mode): 0xf81e7dc0
2025-12-24T19:30:42.177 [DEBUG] [Thread-307708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:30:42.191 [DEBUG] [Thread-307708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:30:42.191 [INFO] [Thread-307708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] client lang: <none>
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] server lang: <none>
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] kex follows: False
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] Compression: none
2025-12-24T19:30:42.198 [DEBUG] [Thread-307708] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:30:42.255 [DEBUG] [Thread-307708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:30:42.255 [DEBUG] [Thread-307708] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:30:42.255 [DEBUG] [Thread-307708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:30:42.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:30:42.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:30:42.312 [DEBUG] [Thread-307708] [transport.py] [_log()] userauth is OK
2025-12-24T19:30:42.312 [DEBUG] [Thread-307708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:30:42.312 [DEBUG] [Thread-307708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:30:42.312 [DEBUG] [Thread-307708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:30:42.312 [DEBUG] [Thread-307708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:30:42.326 [INFO] [Thread-307708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:30:42.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:30:42.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:30:43.172 [DEBUG] [Thread-307708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:30:43.172 [DEBUG] [Thread-307708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:30:43.219 [DEBUG] [Thread-307708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:30:43.219 [DEBUG] [Thread-307708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:30:43.227 [DEBUG] [Thread-307708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:30:43.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:30:43.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:30: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') -> 00000000
2025-12-24T19:30:43.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:30:43.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:30:43.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:30:43.260 [DEBUG] [Thread-307708] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:30:53.403 [DEBUG] [Thread-307710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:31:01.360 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:31:01.376 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:31:07.100 [DEBUG] [Thread-307711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:31:08.734 [DEBUG] [Thread-307712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:31:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:31:13.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:31:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:31:15.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 30, 40), 15.09, 37.23, 0.0, 31.09, 20.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:31:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:30:40
2025-12-24T19:31:15.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:31:16.041 [DEBUG] [Thread-307713] [transport.py] [_log()] starting thread (client mode): 0xf57a8550
2025-12-24T19:31:16.041 [DEBUG] [Thread-307713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:31:16.055 [DEBUG] [Thread-307713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:31:16.055 [INFO] [Thread-307713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] client lang: <none>
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] server lang: <none>
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] kex follows: False
2025-12-24T19:31:16.059 [DEBUG] [Thread-307713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:31:16.060 [DEBUG] [Thread-307713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:31:16.060 [DEBUG] [Thread-307713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:31:16.060 [DEBUG] [Thread-307713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:31:16.060 [DEBUG] [Thread-307713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:31:16.060 [DEBUG] [Thread-307713] [transport.py] [_log()] Compression: none
2025-12-24T19:31:16.060 [DEBUG] [Thread-307713] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:31:16.091 [DEBUG] [Thread-307713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:31:16.094 [DEBUG] [Thread-307713] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:31:16.095 [DEBUG] [Thread-307713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:31:16.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:31:16.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:31:16.099 [DEBUG] [Thread-307713] [transport.py] [_log()] userauth is OK
2025-12-24T19:31:16.099 [DEBUG] [Thread-307713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:31:16.099 [DEBUG] [Thread-307713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:31:16.099 [DEBUG] [Thread-307713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:31:16.099 [DEBUG] [Thread-307713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:31:16.117 [INFO] [Thread-307713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:31:16.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:31:16.732 [DEBUG] [Thread-307713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:31:16.732 [DEBUG] [Thread-307713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:31:16.733 [DEBUG] [Thread-307713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:31:16.773 [DEBUG] [Thread-307713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:31:16.773 [DEBUG] [Thread-307713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:31:16.775 [DEBUG] [Thread-307713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:31:16.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:31:16.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:31:16.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:31:16.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:31:16.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:31:16.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:31:16.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:31:16.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:31:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:31:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.729579 -999.00  +20.00  24.90     42   +6.90 1 2 1 1 1   887    0 11.82 -50.39 ----- 25.4 24.9 185.0 32.7 -999.0 -999.0 21.1 -23.9 21.4 -21.7 21.6 -22.8
2025-12-24T19:31:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:31:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:31:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.729579
2025-12-24T19:31:16.804 [DEBUG] [Thread-307713] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:31:16.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:31:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:31:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:31:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:31:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:31:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:30:40', tmtdew=15.09, humidity=37.23, cloud=0.0, wind=31.09, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:30:35.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:31:16.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:31:16.903 [DEBUG] [Thread-307716] [transport.py] [_log()] starting thread (client mode): 0xf57a9630
2025-12-24T19:31:16.903 [DEBUG] [Thread-307716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:31:16.918 [DEBUG] [Thread-307716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:31:16.918 [INFO] [Thread-307716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] client lang: <none>
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] server lang: <none>
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] kex follows: False
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] Compression: none
2025-12-24T19:31:16.925 [DEBUG] [Thread-307716] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:31:16.990 [DEBUG] [Thread-307716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:31:16.990 [DEBUG] [Thread-307716] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:31:16.990 [DEBUG] [Thread-307716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:31:16.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:31:16.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:31:17.047 [DEBUG] [Thread-307716] [transport.py] [_log()] userauth is OK
2025-12-24T19:31:17.047 [DEBUG] [Thread-307716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:31:17.047 [DEBUG] [Thread-307716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:31:17.047 [DEBUG] [Thread-307716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:31:17.047 [DEBUG] [Thread-307716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:31:17.061 [INFO] [Thread-307716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:31:17.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:31:17.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:31:17.891 [DEBUG] [Thread-307716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:31:17.891 [DEBUG] [Thread-307716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:31:17.939 [DEBUG] [Thread-307716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:31:17.939 [DEBUG] [Thread-307716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:31:17.948 [DEBUG] [Thread-307716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:31:17.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:31:17.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:31:17.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:31:17.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:31:17.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:31:17.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:31:17.986 [DEBUG] [Thread-307716] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:31:23.867 [DEBUG] [Thread-307718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:31:39.176 [DEBUG] [Thread-307719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:31:48.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:31:48.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:31: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
2025-12-24T19:31:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 31, 13), 15.09, 37.24, 0.0, 29.54, 20.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:31:49.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:31:13
2025-12-24T19:31:49.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:31:49.488 [DEBUG] [Thread-307720] [transport.py] [_log()] starting thread (client mode): 0xf81e5fc0
2025-12-24T19:31:49.489 [DEBUG] [Thread-307720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:31:49.497 [DEBUG] [Thread-307720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:31:49.497 [INFO] [Thread-307720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] client lang: <none>
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] server lang: <none>
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] kex follows: False
2025-12-24T19:31:49.502 [DEBUG] [Thread-307720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:31:49.503 [DEBUG] [Thread-307720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:31:49.503 [DEBUG] [Thread-307720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:31:49.503 [DEBUG] [Thread-307720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:31:49.503 [DEBUG] [Thread-307720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:31:49.503 [DEBUG] [Thread-307720] [transport.py] [_log()] Compression: none
2025-12-24T19:31:49.503 [DEBUG] [Thread-307720] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:31:49.537 [DEBUG] [Thread-307720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:31:49.542 [DEBUG] [Thread-307720] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:31:49.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:31:49.546 [DEBUG] [Thread-307720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:31:49.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:31:49.549 [DEBUG] [Thread-307720] [transport.py] [_log()] userauth is OK
2025-12-24T19:31:49.549 [DEBUG] [Thread-307720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:31:49.549 [DEBUG] [Thread-307720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:31:49.549 [DEBUG] [Thread-307720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:31:49.549 [DEBUG] [Thread-307720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:31:49.568 [INFO] [Thread-307720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:31:49.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:31:50.209 [DEBUG] [Thread-307720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:31:50.209 [DEBUG] [Thread-307720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:31:50.210 [DEBUG] [Thread-307720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:31:50.251 [DEBUG] [Thread-307720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:31:50.251 [DEBUG] [Thread-307720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:31:50.253 [DEBUG] [Thread-307720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:31:50.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:31:50.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:31:50.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:31:50.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:31:50.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:31:50.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:31:50.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:31:50.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:31:50.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:31:50.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.730274 -999.00  +20.00  28.68     42   +6.80 1 2 1 1 1   886    0 12.38 -49.10 ----- 29.9 28.7 170.0 35.5 21.2 -23.3 21.2 -22.9 21.4 -21.7 21.6 -22.5
2025-12-24T19:31:50.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:31:50.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:31:50.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.730274
2025-12-24T19:31:50.285 [DEBUG] [Thread-307720] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:31:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:31:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:31:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:31:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:31:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:31:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:31:13', tmtdew=15.09, humidity=37.24, cloud=0.0, wind=29.54, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:31:35.674', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:31:50.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:31:54.309 [DEBUG] [Thread-307723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:32:01.574 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:32:01.576 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:32:07.413 [DEBUG] [Thread-307724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:32:09.774 [DEBUG] [Thread-307725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:32:24.902 [DEBUG] [Thread-307726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:32:40.062 [DEBUG] [Thread-307727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:32:55.204 [DEBUG] [Thread-307728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:33:01.789 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:33:01.799 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:33:07.749 [DEBUG] [Thread-307729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:33:10.302 [DEBUG] [Thread-307730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:33:25.434 [DEBUG] [Thread-307731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:33:40.551 [DEBUG] [Thread-307732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:33:55.682 [DEBUG] [Thread-307733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:34:02.012 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:34:02.020 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:34:04.023 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T19:34:07.962 [DEBUG] [Thread-307734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:34:10.797 [DEBUG] [Thread-307735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:34:25.926 [DEBUG] [Thread-307736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:34:34.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:34:34.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:34:34.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:34:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 34, 1), 15.08, 37.24, 0.0, 33.58, 20.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:34:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:34:01
2025-12-24T19:34:35.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:34:35.895 [DEBUG] [Thread-307737] [transport.py] [_log()] starting thread (client mode): 0xf81e54b0
2025-12-24T19:34:35.896 [DEBUG] [Thread-307737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:34:35.904 [DEBUG] [Thread-307737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:34:35.905 [INFO] [Thread-307737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:34:35.909 [DEBUG] [Thread-307737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:34:35.909 [DEBUG] [Thread-307737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] client lang: <none>
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] server lang: <none>
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] kex follows: False
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:34:35.910 [DEBUG] [Thread-307737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:34:35.911 [DEBUG] [Thread-307737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:34:35.911 [DEBUG] [Thread-307737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:34:35.911 [DEBUG] [Thread-307737] [transport.py] [_log()] Compression: none
2025-12-24T19:34:35.911 [DEBUG] [Thread-307737] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:34:35.947 [DEBUG] [Thread-307737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:34:35.952 [DEBUG] [Thread-307737] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:34:35.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:34:35.955 [DEBUG] [Thread-307737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:34:35.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:34:35.960 [DEBUG] [Thread-307737] [transport.py] [_log()] userauth is OK
2025-12-24T19:34:35.960 [DEBUG] [Thread-307737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:34:35.961 [DEBUG] [Thread-307737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:34:35.961 [DEBUG] [Thread-307737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:34:35.961 [DEBUG] [Thread-307737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:34:36.000 [INFO] [Thread-307737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:34:36.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:34:36.673 [DEBUG] [Thread-307737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:34:36.674 [DEBUG] [Thread-307737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:34:36.675 [DEBUG] [Thread-307737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:34:36.715 [DEBUG] [Thread-307737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:34:36.715 [DEBUG] [Thread-307737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:34:36.717 [DEBUG] [Thread-307737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:34:36.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:34:36.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:34:36.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:34:36.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:34:36.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:34:36.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:34:36.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:34:36.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:34:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:34:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.732010 -999.00  +20.00  17.17     42   +6.90 1 2 1 1 1   886    0 11.75 -55.43 ----- 17.5 17.2 166.0 32.1 21.1 -23.3 21.0 -22.5 21.1 -21.4 21.4 -22.2
2025-12-24T19:34:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:34:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:34:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.732010
2025-12-24T19:34:36.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:34:36.757 [DEBUG] [Thread-307737] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:34:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:34:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:34:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:34:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:34:36.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:34:01', tmtdew=15.08, humidity=37.24, cloud=0.0, wind=33.58, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:34:05.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:34:36.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:34:36.849 [DEBUG] [Thread-307740] [transport.py] [_log()] starting thread (client mode): 0xf578b220
2025-12-24T19:34:36.849 [DEBUG] [Thread-307740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:34:36.862 [DEBUG] [Thread-307740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:34:36.862 [INFO] [Thread-307740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] client lang: <none>
2025-12-24T19:34:36.869 [DEBUG] [Thread-307740] [transport.py] [_log()] server lang: <none>
2025-12-24T19:34:36.870 [DEBUG] [Thread-307740] [transport.py] [_log()] kex follows: False
2025-12-24T19:34:36.870 [DEBUG] [Thread-307740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:34:36.870 [DEBUG] [Thread-307740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:34:36.870 [DEBUG] [Thread-307740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:34:36.870 [DEBUG] [Thread-307740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:34:36.870 [DEBUG] [Thread-307740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:34:36.870 [DEBUG] [Thread-307740] [transport.py] [_log()] Compression: none
2025-12-24T19:34:36.870 [DEBUG] [Thread-307740] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:34:36.930 [DEBUG] [Thread-307740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:34:36.931 [DEBUG] [Thread-307740] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:34:36.931 [DEBUG] [Thread-307740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:34:36.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:34:36.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:34:36.987 [DEBUG] [Thread-307740] [transport.py] [_log()] userauth is OK
2025-12-24T19:34:36.987 [DEBUG] [Thread-307740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:34:36.987 [DEBUG] [Thread-307740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:34:36.987 [DEBUG] [Thread-307740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:34:36.987 [DEBUG] [Thread-307740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:34:37.002 [INFO] [Thread-307740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:34:37.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:34:37.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:34:37.802 [DEBUG] [Thread-307740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:34:37.802 [DEBUG] [Thread-307740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:34:37.850 [DEBUG] [Thread-307740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:34:37.851 [DEBUG] [Thread-307740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:34:37.859 [DEBUG] [Thread-307740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:34:37.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:34:37.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:34:37.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:34:37.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:34:37.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:34:37.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:34:37.892 [DEBUG] [Thread-307740] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:34:41.028 [DEBUG] [Thread-307742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:34:56.283 [DEBUG] [Thread-307743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:35:02.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:35:02.198 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:35:07.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:35:07.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:35:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:35:08.238 [DEBUG] [Thread-307744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:35:09.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 34, 36), 15.06, 37.33, 0.0, 32.1, 20.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:35:09.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:34:36
2025-12-24T19:35:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:35:09.728 [DEBUG] [Thread-307745] [transport.py] [_log()] starting thread (client mode): 0xf81e5660
2025-12-24T19:35:09.728 [DEBUG] [Thread-307745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:35:09.743 [DEBUG] [Thread-307745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:35:09.744 [INFO] [Thread-307745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:35:09.747 [DEBUG] [Thread-307745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] client lang: <none>
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] server lang: <none>
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] kex follows: False
2025-12-24T19:35:09.748 [DEBUG] [Thread-307745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:35:09.749 [DEBUG] [Thread-307745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:35:09.749 [DEBUG] [Thread-307745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:35:09.749 [DEBUG] [Thread-307745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:35:09.749 [DEBUG] [Thread-307745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:35:09.749 [DEBUG] [Thread-307745] [transport.py] [_log()] Compression: none
2025-12-24T19:35:09.749 [DEBUG] [Thread-307745] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:35:09.783 [DEBUG] [Thread-307745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:35:09.786 [DEBUG] [Thread-307745] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:35:09.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:35:09.789 [DEBUG] [Thread-307745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:35:09.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:35:09.791 [DEBUG] [Thread-307745] [transport.py] [_log()] userauth is OK
2025-12-24T19:35:09.791 [DEBUG] [Thread-307745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:35:09.791 [DEBUG] [Thread-307745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:35:09.791 [DEBUG] [Thread-307745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:35:09.791 [DEBUG] [Thread-307745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:35:09.809 [INFO] [Thread-307745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:35:09.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:35:10.719 [DEBUG] [Thread-307745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:35:10.719 [DEBUG] [Thread-307745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:35:10.719 [DEBUG] [Thread-307745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:35:10.760 [DEBUG] [Thread-307745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:35:10.760 [DEBUG] [Thread-307745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:35:10.762 [DEBUG] [Thread-307745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:35:10.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:35:10.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:35:10.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:35:10.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:35:10.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:35:10.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:35:10.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:35:10.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:35:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:35:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.732357 -999.00  +20.00  25.67     42   +6.90 1 2 1 1 1   885    0 11.51 -58.81 ----- 29.8 25.7 163.6 35.3 21.1 -22.9 21.1 -23.3 21.0 -21.6 21.4 -22.7
2025-12-24T19:35:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:35:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:35:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.732357
2025-12-24T19:35:10.797 [DEBUG] [Thread-307745] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:35:10.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:35:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:35:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:35:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:35:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:35:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:34:36', tmtdew=15.06, humidity=37.33, cloud=0.0, wind=32.1, temperature=20.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:34:35.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:35:10.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:35:10.901 [DEBUG] [Thread-307748] [transport.py] [_log()] starting thread (client mode): 0xf81e4850
2025-12-24T19:35:10.901 [DEBUG] [Thread-307748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:35:10.916 [DEBUG] [Thread-307748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:35:10.916 [INFO] [Thread-307748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] client lang: <none>
2025-12-24T19:35:10.924 [DEBUG] [Thread-307748] [transport.py] [_log()] server lang: <none>
2025-12-24T19:35:10.925 [DEBUG] [Thread-307748] [transport.py] [_log()] kex follows: False
2025-12-24T19:35:10.925 [DEBUG] [Thread-307748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:35:10.925 [DEBUG] [Thread-307748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:35:10.925 [DEBUG] [Thread-307748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:35:10.925 [DEBUG] [Thread-307748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:35:10.925 [DEBUG] [Thread-307748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:35:10.925 [DEBUG] [Thread-307748] [transport.py] [_log()] Compression: none
2025-12-24T19:35:10.925 [DEBUG] [Thread-307748] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:35:10.982 [DEBUG] [Thread-307748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:35:10.982 [DEBUG] [Thread-307748] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:35:10.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:35:10.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:35:10.983 [DEBUG] [Thread-307748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:35:11.043 [DEBUG] [Thread-307748] [transport.py] [_log()] userauth is OK
2025-12-24T19:35:11.043 [DEBUG] [Thread-307748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:35:11.043 [DEBUG] [Thread-307748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:35:11.043 [DEBUG] [Thread-307748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:35:11.043 [DEBUG] [Thread-307748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:35:11.058 [INFO] [Thread-307748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:35:11.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:35:11.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:35:11.385 [DEBUG] [Thread-307750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:35:11.880 [DEBUG] [Thread-307748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:35:11.880 [DEBUG] [Thread-307748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:35:11.927 [DEBUG] [Thread-307748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:35:11.927 [DEBUG] [Thread-307748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:35:11.935 [DEBUG] [Thread-307748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:35:11.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:35:11.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:35:11.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:35:11.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:35:11.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:35:11.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:35:11.969 [DEBUG] [Thread-307748] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:35:26.599 [DEBUG] [Thread-307751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:35:41.742 [DEBUG] [Thread-307752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:35:41.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:35:41.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:35:42.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:35:43.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 35, 8), 15.07, 37.28, 0.0, 30.79, 20.06, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:35:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:35:08
2025-12-24T19:35:43.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:35:43.988 [DEBUG] [Thread-307753] [transport.py] [_log()] starting thread (client mode): 0xf818a2f0
2025-12-24T19:35:43.989 [DEBUG] [Thread-307753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:35:43.992 [DEBUG] [Thread-307753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:35:43.992 [INFO] [Thread-307753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:35:43.997 [DEBUG] [Thread-307753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:35:43.997 [DEBUG] [Thread-307753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] client lang: <none>
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] server lang: <none>
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] kex follows: False
2025-12-24T19:35:43.998 [DEBUG] [Thread-307753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:35:43.999 [DEBUG] [Thread-307753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:35:43.999 [DEBUG] [Thread-307753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:35:43.999 [DEBUG] [Thread-307753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:35:43.999 [DEBUG] [Thread-307753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:35:43.999 [DEBUG] [Thread-307753] [transport.py] [_log()] Compression: none
2025-12-24T19:35:43.999 [DEBUG] [Thread-307753] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:35:44.035 [DEBUG] [Thread-307753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:35:44.045 [DEBUG] [Thread-307753] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:35:44.046 [DEBUG] [Thread-307753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:35:44.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:35:44.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:35:44.049 [DEBUG] [Thread-307753] [transport.py] [_log()] userauth is OK
2025-12-24T19:35:44.049 [DEBUG] [Thread-307753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:35:44.049 [DEBUG] [Thread-307753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:35:44.049 [DEBUG] [Thread-307753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:35:44.049 [DEBUG] [Thread-307753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:35:44.079 [INFO] [Thread-307753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:35:44.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:35:44.731 [DEBUG] [Thread-307753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:35:44.731 [DEBUG] [Thread-307753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:35:44.731 [DEBUG] [Thread-307753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:35:44.772 [DEBUG] [Thread-307753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:35:44.772 [DEBUG] [Thread-307753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:35:44.774 [DEBUG] [Thread-307753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:35:44.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:35:44.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:35:44.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:35:44.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:35:44.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:35:44.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:35:44.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:35:44.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:35:44.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:35:44.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.732704 -999.00  +20.00  27.40     42   +6.90 1 2 1 1 1   885    0 11.68 -55.35 ----- 16.0 27.4 171.8 34.0 21.1 -23.0 21.0 -22.8 21.0 -21.6 21.3 -22.4
2025-12-24T19:35:44.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:35:44.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:35:44.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.732704
2025-12-24T19:35:44.801 [DEBUG] [Thread-307753] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:35:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:35:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:35:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:35:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:35:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:35:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:35:08', tmtdew=15.07, humidity=37.28, cloud=0.0, wind=30.79, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:35:05.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:35:44.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:35:44.905 [DEBUG] [Thread-307756] [transport.py] [_log()] starting thread (client mode): 0xf81e5cf0
2025-12-24T19:35:44.905 [DEBUG] [Thread-307756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:35:44.919 [DEBUG] [Thread-307756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:35:44.919 [INFO] [Thread-307756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] client lang: <none>
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] server lang: <none>
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] kex follows: False
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] Compression: none
2025-12-24T19:35:44.927 [DEBUG] [Thread-307756] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:35:44.982 [DEBUG] [Thread-307756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:35:44.982 [DEBUG] [Thread-307756] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:35:44.982 [DEBUG] [Thread-307756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:35:44.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:35:44.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:35:45.039 [DEBUG] [Thread-307756] [transport.py] [_log()] userauth is OK
2025-12-24T19:35:45.039 [DEBUG] [Thread-307756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:35:45.039 [DEBUG] [Thread-307756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:35:45.039 [DEBUG] [Thread-307756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:35:45.039 [DEBUG] [Thread-307756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:35:45.056 [INFO] [Thread-307756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:35:45.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:35:45.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:35:45.886 [DEBUG] [Thread-307756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:35:45.887 [DEBUG] [Thread-307756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:35:45.934 [DEBUG] [Thread-307756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:35:45.934 [DEBUG] [Thread-307756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:35:45.944 [DEBUG] [Thread-307756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:35:45.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:35:45.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:35:45.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:35:45.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:35:45.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:35:45.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:35:45.982 [DEBUG] [Thread-307756] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:35:56.877 [DEBUG] [Thread-307758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:36:02.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:36:02.359 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:36:08.496 [DEBUG] [Thread-307759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:36:12.059 [DEBUG] [Thread-307760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:36:16.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:36:16.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:36:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:36:16.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 35, 41), 15.01, 37.33, 0.0, 34.78, 20.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:36:16.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:35:41
2025-12-24T19:36:17.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:36:17.424 [DEBUG] [Thread-307761] [transport.py] [_log()] starting thread (client mode): 0xf8189e40
2025-12-24T19:36:17.425 [DEBUG] [Thread-307761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:36:17.436 [DEBUG] [Thread-307761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:36:17.436 [INFO] [Thread-307761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] client lang: <none>
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] server lang: <none>
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] kex follows: False
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:36:17.440 [DEBUG] [Thread-307761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:36:17.441 [DEBUG] [Thread-307761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:36:17.441 [DEBUG] [Thread-307761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:36:17.441 [DEBUG] [Thread-307761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:36:17.441 [DEBUG] [Thread-307761] [transport.py] [_log()] Compression: none
2025-12-24T19:36:17.441 [DEBUG] [Thread-307761] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:36:17.477 [DEBUG] [Thread-307761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:36:17.480 [DEBUG] [Thread-307761] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:36:17.481 [DEBUG] [Thread-307761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:36:17.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:36:17.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:36:17.486 [DEBUG] [Thread-307761] [transport.py] [_log()] userauth is OK
2025-12-24T19:36:17.486 [DEBUG] [Thread-307761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:36:17.487 [DEBUG] [Thread-307761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:36:17.487 [DEBUG] [Thread-307761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:36:17.487 [DEBUG] [Thread-307761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:36:17.506 [INFO] [Thread-307761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:36:17.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:36:18.150 [DEBUG] [Thread-307761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:36:18.150 [DEBUG] [Thread-307761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:36:18.151 [DEBUG] [Thread-307761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:36:18.191 [DEBUG] [Thread-307761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:36:18.191 [DEBUG] [Thread-307761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:36:18.195 [DEBUG] [Thread-307761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:36:18.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:36:18.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:36:18.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:36:18.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:36:18.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:36:18.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:36:18.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:36:18.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:36:18.224 [DEBUG] [Thread-307761] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:36:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:36:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.733052 -999.00  +19.90  23.42     42   +6.90 1 2 1 1 1   885    0 11.75 -56.39 ----- 28.6 23.4 166.8 34.0 21.1 -23.1 21.0 -22.8 20.9 -21.6 21.2 -22.4
2025-12-24T19:36:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:36:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:36:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.733052
2025-12-24T19:36:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:36:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:36:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:36:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:36:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:36:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:35:41', tmtdew=15.01, humidity=37.33, cloud=0.0, wind=34.78, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:35:35.693', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:36:18.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:36:18.332 [DEBUG] [Thread-307764] [transport.py] [_log()] starting thread (client mode): 0xf578b7f0
2025-12-24T19:36:18.332 [DEBUG] [Thread-307764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:36:18.350 [DEBUG] [Thread-307764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:36:18.350 [INFO] [Thread-307764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] client lang: <none>
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] server lang: <none>
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] kex follows: False
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] Compression: none
2025-12-24T19:36:18.358 [DEBUG] [Thread-307764] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:36:18.414 [DEBUG] [Thread-307764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:36:18.414 [DEBUG] [Thread-307764] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:36:18.414 [DEBUG] [Thread-307764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:36:18.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:36:18.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:36:18.471 [DEBUG] [Thread-307764] [transport.py] [_log()] userauth is OK
2025-12-24T19:36:18.471 [DEBUG] [Thread-307764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:36:18.471 [DEBUG] [Thread-307764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:36:18.471 [DEBUG] [Thread-307764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:36:18.471 [DEBUG] [Thread-307764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:36:18.486 [INFO] [Thread-307764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:36:18.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:36:18.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:36:19.327 [DEBUG] [Thread-307764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:36:19.327 [DEBUG] [Thread-307764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:36:19.375 [DEBUG] [Thread-307764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:36:19.375 [DEBUG] [Thread-307764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:36:19.384 [DEBUG] [Thread-307764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:36:19.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:36:19.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:36:19.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:36:19.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:36:19.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:36:19.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:36:19.420 [DEBUG] [Thread-307764] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:36:27.180 [DEBUG] [Thread-307766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:36:42.415 [DEBUG] [Thread-307767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:36:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:36:49.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:36:49.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:36:50.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 36, 15), 14.99, 37.36, 0.0, 33.05, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:36:50.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:36:15
2025-12-24T19:36:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:36:51.102 [DEBUG] [Thread-307768] [transport.py] [_log()] starting thread (client mode): 0xf5789f60
2025-12-24T19:36:51.103 [DEBUG] [Thread-307768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:36:51.114 [DEBUG] [Thread-307768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:36:51.114 [INFO] [Thread-307768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] client lang: <none>
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] server lang: <none>
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] kex follows: False
2025-12-24T19:36:51.118 [DEBUG] [Thread-307768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:36:51.119 [DEBUG] [Thread-307768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:36:51.119 [DEBUG] [Thread-307768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:36:51.119 [DEBUG] [Thread-307768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:36:51.119 [DEBUG] [Thread-307768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:36:51.119 [DEBUG] [Thread-307768] [transport.py] [_log()] Compression: none
2025-12-24T19:36:51.119 [DEBUG] [Thread-307768] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:36:51.150 [DEBUG] [Thread-307768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:36:51.153 [DEBUG] [Thread-307768] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:36:51.154 [DEBUG] [Thread-307768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:36:51.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:36:51.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:36:51.193 [DEBUG] [Thread-307768] [transport.py] [_log()] userauth is OK
2025-12-24T19:36:51.193 [DEBUG] [Thread-307768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:36:51.193 [DEBUG] [Thread-307768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:36:51.193 [DEBUG] [Thread-307768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:36:51.193 [DEBUG] [Thread-307768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:36:51.227 [INFO] [Thread-307768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:36:51.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:36:51.830 [DEBUG] [Thread-307768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:36:51.830 [DEBUG] [Thread-307768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:36:51.831 [DEBUG] [Thread-307768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:36:51.871 [DEBUG] [Thread-307768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:36:51.871 [DEBUG] [Thread-307768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:36:51.873 [DEBUG] [Thread-307768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:36:51.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:36:51.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:36:51.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:36:51.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:36:51.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:36:51.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:36:51.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:36:51.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:36:51.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:36:51.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.733399 -999.00  +19.90  26.07     42   +6.90 1 2 1 1 1   885    0 11.73 -59.66 ----- 24.7 26.1 176.8 34.2 21.0 -23.2 20.9 -22.9 20.9 -21.5 21.2 -22.3
2025-12-24T19:36:51.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:36:51.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:36:51.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.733399
2025-12-24T19:36:51.900 [DEBUG] [Thread-307768] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:36:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:36:51.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:36:51.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:36:51.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:36:51.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:36:51.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:36:15', tmtdew=14.99, humidity=37.36, cloud=0.0, wind=33.05, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:36:05.674', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:36:51.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:36:51.999 [DEBUG] [Thread-307771] [transport.py] [_log()] starting thread (client mode): 0xf578b160
2025-12-24T19:36:51.999 [DEBUG] [Thread-307771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:36:52.013 [DEBUG] [Thread-307771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:36:52.013 [INFO] [Thread-307771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] client lang: <none>
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] server lang: <none>
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] kex follows: False
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:36:52.021 [DEBUG] [Thread-307771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:36:52.022 [DEBUG] [Thread-307771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:36:52.022 [DEBUG] [Thread-307771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:36:52.022 [DEBUG] [Thread-307771] [transport.py] [_log()] Compression: none
2025-12-24T19:36:52.022 [DEBUG] [Thread-307771] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:36:52.078 [DEBUG] [Thread-307771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:36:52.078 [DEBUG] [Thread-307771] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:36:52.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:36:52.079 [DEBUG] [Thread-307771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:36:52.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:36:52.135 [DEBUG] [Thread-307771] [transport.py] [_log()] userauth is OK
2025-12-24T19:36:52.135 [DEBUG] [Thread-307771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:36:52.135 [DEBUG] [Thread-307771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:36:52.135 [DEBUG] [Thread-307771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:36:52.135 [DEBUG] [Thread-307771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:36:52.150 [INFO] [Thread-307771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:36:52.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:36:52.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:36:52.981 [DEBUG] [Thread-307771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:36:52.981 [DEBUG] [Thread-307771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:36:53.029 [DEBUG] [Thread-307771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:36:53.029 [DEBUG] [Thread-307771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:36:53.038 [DEBUG] [Thread-307771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:36:53.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:36:53.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:36:53.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:36:53.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:36:53.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:36:53.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:36:53.173 [DEBUG] [Thread-307771] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:36:57.501 [DEBUG] [Thread-307773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:37:02.500 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:37:02.501 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:37:08.735 [DEBUG] [Thread-307774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:37:12.641 [DEBUG] [Thread-307775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:37:23.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:37:23.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:37:23.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:37:25.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 36, 48), 15.0, 37.33, 0.0, 29.89, 20.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:37:25.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:36:48
2025-12-24T19:37:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:37:25.494 [DEBUG] [Thread-307776] [transport.py] [_log()] starting thread (client mode): 0xf818bd60
2025-12-24T19:37:25.495 [DEBUG] [Thread-307776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:37:25.501 [DEBUG] [Thread-307776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:37:25.501 [INFO] [Thread-307776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] client lang: <none>
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] server lang: <none>
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] kex follows: False
2025-12-24T19:37:25.506 [DEBUG] [Thread-307776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:37:25.507 [DEBUG] [Thread-307776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:37:25.507 [DEBUG] [Thread-307776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:37:25.507 [DEBUG] [Thread-307776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:37:25.507 [DEBUG] [Thread-307776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:37:25.507 [DEBUG] [Thread-307776] [transport.py] [_log()] Compression: none
2025-12-24T19:37:25.507 [DEBUG] [Thread-307776] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:37:25.537 [DEBUG] [Thread-307776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:37:25.541 [DEBUG] [Thread-307776] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:37:25.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:37:25.543 [DEBUG] [Thread-307776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:37:25.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:37:25.545 [DEBUG] [Thread-307776] [transport.py] [_log()] userauth is OK
2025-12-24T19:37:25.545 [DEBUG] [Thread-307776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:37:25.546 [DEBUG] [Thread-307776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:37:25.546 [DEBUG] [Thread-307776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:37:25.546 [DEBUG] [Thread-307776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:37:25.575 [INFO] [Thread-307776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:37:25.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:37:26.226 [DEBUG] [Thread-307776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:37:26.227 [DEBUG] [Thread-307776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:37:26.228 [DEBUG] [Thread-307776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:37:26.268 [DEBUG] [Thread-307776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:37:26.268 [DEBUG] [Thread-307776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:37:26.270 [DEBUG] [Thread-307776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:37:26.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:37:26.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:37:26.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:37:26.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:37:26.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:37:26.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:37:26.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:37:26.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:37:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:37:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.734093 -999.00  +19.90  22.77     42   +6.80 1 2 1 1 1   884    0 11.55 -58.22 ----- 22.1 22.8 175.2 35.5 21.0 -23.0 20.8 -23.0 20.9 -21.3 21.1 -22.3
2025-12-24T19:37:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:37:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:37:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.734093
2025-12-24T19:37:26.298 [DEBUG] [Thread-307776] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:37:26.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:37:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:37:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:37:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:37:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:37:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:36:48', tmtdew=15.0, humidity=37.33, cloud=0.0, wind=29.89, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:37:05.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:37:26.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:37:26.404 [DEBUG] [Thread-307779] [transport.py] [_log()] starting thread (client mode): 0xf81887c0
2025-12-24T19:37:26.404 [DEBUG] [Thread-307779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:37:26.419 [DEBUG] [Thread-307779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:37:26.419 [INFO] [Thread-307779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] client lang: <none>
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] server lang: <none>
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] kex follows: False
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] Compression: none
2025-12-24T19:37:26.427 [DEBUG] [Thread-307779] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:37:26.486 [DEBUG] [Thread-307779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:37:26.486 [DEBUG] [Thread-307779] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:37:26.486 [DEBUG] [Thread-307779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:37:26.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:37:26.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:37:26.543 [DEBUG] [Thread-307779] [transport.py] [_log()] userauth is OK
2025-12-24T19:37:26.543 [DEBUG] [Thread-307779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:37:26.543 [DEBUG] [Thread-307779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:37:26.543 [DEBUG] [Thread-307779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:37:26.543 [DEBUG] [Thread-307779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:37:26.562 [INFO] [Thread-307779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:37:26.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:37:26.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:37:27.407 [DEBUG] [Thread-307779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:37:27.407 [DEBUG] [Thread-307779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:37:27.455 [DEBUG] [Thread-307779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:37:27.455 [DEBUG] [Thread-307779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:37:27.464 [DEBUG] [Thread-307779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:37:27.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:37:27.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')
2025-12-24T19:37:27.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
2025-12-24T19:37:27.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:37:27.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:37:27.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:37:27.507 [DEBUG] [Thread-307779] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:37:27.722 [DEBUG] [Thread-307781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:37:42.945 [DEBUG] [Thread-307782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:37:57.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:37:57.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:37:57.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
2025-12-24T19:37:58.068 [DEBUG] [Thread-307783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:37:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 37, 21), 15.0, 37.34, 0.0, 29.32, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:37:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:37:21
2025-12-24T19:37:58.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:37:58.971 [DEBUG] [Thread-307784] [transport.py] [_log()] starting thread (client mode): 0xf81e6920
2025-12-24T19:37:58.972 [DEBUG] [Thread-307784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:37:58.985 [DEBUG] [Thread-307784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:37:58.985 [INFO] [Thread-307784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] client lang: <none>
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] server lang: <none>
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] kex follows: False
2025-12-24T19:37:58.990 [DEBUG] [Thread-307784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:37:58.991 [DEBUG] [Thread-307784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:37:58.991 [DEBUG] [Thread-307784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:37:58.991 [DEBUG] [Thread-307784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:37:58.991 [DEBUG] [Thread-307784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:37:58.991 [DEBUG] [Thread-307784] [transport.py] [_log()] Compression: none
2025-12-24T19:37:58.992 [DEBUG] [Thread-307784] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:37:59.023 [DEBUG] [Thread-307784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:37:59.026 [DEBUG] [Thread-307784] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:37:59.027 [DEBUG] [Thread-307784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:37:59.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:37:59.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:37:59.031 [DEBUG] [Thread-307784] [transport.py] [_log()] userauth is OK
2025-12-24T19:37:59.031 [DEBUG] [Thread-307784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:37:59.031 [DEBUG] [Thread-307784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:37:59.031 [DEBUG] [Thread-307784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:37:59.031 [DEBUG] [Thread-307784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:37:59.054 [INFO] [Thread-307784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:37:59.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:37:59.706 [DEBUG] [Thread-307784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:37:59.706 [DEBUG] [Thread-307784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:37:59.707 [DEBUG] [Thread-307784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:37:59.748 [DEBUG] [Thread-307784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:37:59.748 [DEBUG] [Thread-307784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:37:59.752 [DEBUG] [Thread-307784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:37:59.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:37:59.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:37:59.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:37:59.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:37:59.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:37:59.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:37:59.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:37:59.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:37:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:37:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.734440 -999.00  +19.90  22.53     42   +6.80 1 2 1 1 1   884    0 11.62 -59.81 ----- 29.6 22.5 173.1 33.6 20.9 -23.0 20.8 -22.9 20.8 -21.4 21.1 -22.3
2025-12-24T19:37:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:37:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:37:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.734440
2025-12-24T19:37:59.787 [DEBUG] [Thread-307784] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:37:59.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:37:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:37:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:37:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:37:59.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:37:59.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:37:21', tmtdew=15.0, humidity=37.34, cloud=0.0, wind=29.32, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:37:35.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:37:59.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:37:59.901 [DEBUG] [Thread-307787] [transport.py] [_log()] starting thread (client mode): 0xf818a200
2025-12-24T19:37:59.901 [DEBUG] [Thread-307787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:37:59.915 [DEBUG] [Thread-307787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:37:59.915 [INFO] [Thread-307787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:37:59.923 [DEBUG] [Thread-307787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:37:59.923 [DEBUG] [Thread-307787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:37:59.923 [DEBUG] [Thread-307787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:37:59.923 [DEBUG] [Thread-307787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] client lang: <none>
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] server lang: <none>
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] kex follows: False
2025-12-24T19:37:59.924 [DEBUG] [Thread-307787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:37:59.925 [DEBUG] [Thread-307787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:37:59.925 [DEBUG] [Thread-307787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:37:59.925 [DEBUG] [Thread-307787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:37:59.925 [DEBUG] [Thread-307787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:37:59.925 [DEBUG] [Thread-307787] [transport.py] [_log()] Compression: none
2025-12-24T19:37:59.925 [DEBUG] [Thread-307787] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:37:59.983 [DEBUG] [Thread-307787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:37:59.984 [DEBUG] [Thread-307787] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:37:59.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:37:59.985 [DEBUG] [Thread-307787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:37:59.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:38:00.039 [DEBUG] [Thread-307787] [transport.py] [_log()] userauth is OK
2025-12-24T19:38:00.039 [DEBUG] [Thread-307787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:38:00.040 [DEBUG] [Thread-307787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:38:00.040 [DEBUG] [Thread-307787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:38:00.040 [DEBUG] [Thread-307787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:38:00.057 [INFO] [Thread-307787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:38:00.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:38:00.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:38:00.899 [DEBUG] [Thread-307787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:38:00.899 [DEBUG] [Thread-307787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:38:00.944 [DEBUG] [Thread-307787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:38:00.944 [DEBUG] [Thread-307787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:38:00.953 [DEBUG] [Thread-307787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:38:00.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:38:00.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:38:00.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:38:00.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:38:00.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:38:00.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:38:00.986 [DEBUG] [Thread-307787] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:38:02.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:38:02.649 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:38:08.999 [DEBUG] [Thread-307789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:38:13.181 [DEBUG] [Thread-307790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:38:28.629 [DEBUG] [Thread-307791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:38:31.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:38:31.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:38:31.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:38:31.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 37, 56), 15.01, 37.29, 0.0, 27.4, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:38:31.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:37:56
2025-12-24T19:38:32.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:38:32.304 [DEBUG] [Thread-307792] [transport.py] [_log()] starting thread (client mode): 0xf57882b0
2025-12-24T19:38:32.304 [DEBUG] [Thread-307792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:38:32.315 [DEBUG] [Thread-307792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:38:32.315 [INFO] [Thread-307792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] client lang: <none>
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] server lang: <none>
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] kex follows: False
2025-12-24T19:38:32.326 [DEBUG] [Thread-307792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:38:32.327 [DEBUG] [Thread-307792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:38:32.327 [DEBUG] [Thread-307792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:38:32.327 [DEBUG] [Thread-307792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:38:32.327 [DEBUG] [Thread-307792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:38:32.327 [DEBUG] [Thread-307792] [transport.py] [_log()] Compression: none
2025-12-24T19:38:32.327 [DEBUG] [Thread-307792] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:38:32.357 [DEBUG] [Thread-307792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:38:32.360 [DEBUG] [Thread-307792] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:38:32.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:38:32.362 [DEBUG] [Thread-307792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:38:32.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:38:32.364 [DEBUG] [Thread-307792] [transport.py] [_log()] userauth is OK
2025-12-24T19:38:32.364 [DEBUG] [Thread-307792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:38:32.364 [DEBUG] [Thread-307792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:38:32.364 [DEBUG] [Thread-307792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:38:32.364 [DEBUG] [Thread-307792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:38:32.382 [INFO] [Thread-307792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:38:32.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:38:32.992 [DEBUG] [Thread-307792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:38:32.992 [DEBUG] [Thread-307792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:38:32.993 [DEBUG] [Thread-307792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:38:33.033 [DEBUG] [Thread-307792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:38:33.033 [DEBUG] [Thread-307792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:38:33.036 [DEBUG] [Thread-307792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:38:33.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:38:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:38:33.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:38:33.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:38:33.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:38:33.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:38:33.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:38:33.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:38:33.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:38:33.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.734788 -999.00  +19.90  26.69     42   +6.80 1 2 1 1 1   884    0 11.76 -55.49 ----- 17.6 26.7 166.4 32.6 20.9 -23.0 20.9 -22.8 20.7 -21.3 21.0 -22.2
2025-12-24T19:38:33.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:38:33.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:38:33.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.734788
2025-12-24T19:38:33.064 [DEBUG] [Thread-307792] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:38:33.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:38:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:38:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:38:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:38:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:38:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:37:56', tmtdew=15.01, humidity=37.29, cloud=0.0, wind=27.4, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:38:05.683', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:38:33.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:38:33.183 [DEBUG] [Thread-307795] [transport.py] [_log()] starting thread (client mode): 0xf81889d0
2025-12-24T19:38:33.183 [DEBUG] [Thread-307795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:38:33.198 [DEBUG] [Thread-307795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:38:33.198 [INFO] [Thread-307795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] client lang: <none>
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] server lang: <none>
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] kex follows: False
2025-12-24T19:38:33.206 [DEBUG] [Thread-307795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:38:33.207 [DEBUG] [Thread-307795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:38:33.207 [DEBUG] [Thread-307795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:38:33.207 [DEBUG] [Thread-307795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:38:33.207 [DEBUG] [Thread-307795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:38:33.207 [DEBUG] [Thread-307795] [transport.py] [_log()] Compression: none
2025-12-24T19:38:33.207 [DEBUG] [Thread-307795] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:38:33.262 [DEBUG] [Thread-307795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:38:33.263 [DEBUG] [Thread-307795] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:38:33.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:38:33.264 [DEBUG] [Thread-307795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:38:33.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:38:33.322 [DEBUG] [Thread-307795] [transport.py] [_log()] userauth is OK
2025-12-24T19:38:33.322 [DEBUG] [Thread-307795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:38:33.323 [DEBUG] [Thread-307795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:38:33.323 [DEBUG] [Thread-307795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:38:33.323 [DEBUG] [Thread-307795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:38:33.349 [INFO] [Thread-307795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:38:33.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:38:33.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:38:34.196 [DEBUG] [Thread-307795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:38:34.196 [DEBUG] [Thread-307795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:38:34.244 [DEBUG] [Thread-307795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:38:34.245 [DEBUG] [Thread-307795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:38:34.253 [DEBUG] [Thread-307795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:38:34.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:38:34.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:38:34.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:38:34.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:38:34.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:38:34.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:38:34.288 [DEBUG] [Thread-307795] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:38:43.787 [DEBUG] [Thread-307797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:38:58.992 [DEBUG] [Thread-307798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:39:02.792 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:39:02.793 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:39:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:39:04.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:39:04.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:39:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 38, 29), 15.02, 37.28, 0.0, 32.45, 20.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:39:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:38:29
2025-12-24T19:39:05.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:39:06.101 [DEBUG] [Thread-307799] [transport.py] [_log()] starting thread (client mode): 0xf572c5e0
2025-12-24T19:39:06.102 [DEBUG] [Thread-307799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:39:06.112 [DEBUG] [Thread-307799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:39:06.112 [INFO] [Thread-307799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] client lang: <none>
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] server lang: <none>
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] kex follows: False
2025-12-24T19:39:06.117 [DEBUG] [Thread-307799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:39:06.118 [DEBUG] [Thread-307799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:39:06.118 [DEBUG] [Thread-307799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:39:06.118 [DEBUG] [Thread-307799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:39:06.118 [DEBUG] [Thread-307799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:39:06.118 [DEBUG] [Thread-307799] [transport.py] [_log()] Compression: none
2025-12-24T19:39:06.118 [DEBUG] [Thread-307799] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:39:06.150 [DEBUG] [Thread-307799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:39:06.153 [DEBUG] [Thread-307799] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:39:06.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:39:06.156 [DEBUG] [Thread-307799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:39:06.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:39:06.158 [DEBUG] [Thread-307799] [transport.py] [_log()] userauth is OK
2025-12-24T19:39:06.158 [DEBUG] [Thread-307799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:39:06.159 [DEBUG] [Thread-307799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:39:06.159 [DEBUG] [Thread-307799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:39:06.159 [DEBUG] [Thread-307799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:39:06.191 [INFO] [Thread-307799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:39:06.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:39:06.841 [DEBUG] [Thread-307799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:39:06.841 [DEBUG] [Thread-307799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:39:06.842 [DEBUG] [Thread-307799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:39:06.882 [DEBUG] [Thread-307799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:39:06.882 [DEBUG] [Thread-307799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:39:06.884 [DEBUG] [Thread-307799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:39:06.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:39:06.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:39:06.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:39:06.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:39:06.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:39:06.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:39:06.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:39:06.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:39:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:39:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.735135 -999.00  +19.90  21.16     42   +6.80 1 2 1 1 1   883    0 11.90 -59.17 ----- 21.1 21.2 177.4 28.9 20.9 -22.8 20.8 -23.1 20.7 -21.2 21.0 -22.1
2025-12-24T19:39:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:39:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:39:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.735135
2025-12-24T19:39:06.923 [DEBUG] [Thread-307799] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:39:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:39:06.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:39:06.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:39:06.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:39:06.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:39:06.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:38:29', tmtdew=15.02, humidity=37.28, cloud=0.0, wind=32.45, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:38:35.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:39:07.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:39:07.028 [DEBUG] [Thread-307802] [transport.py] [_log()] starting thread (client mode): 0xf578ad70
2025-12-24T19:39:07.028 [DEBUG] [Thread-307802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:39:07.043 [DEBUG] [Thread-307802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:39:07.043 [INFO] [Thread-307802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] client lang: <none>
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] server lang: <none>
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] kex follows: False
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] Compression: none
2025-12-24T19:39:07.053 [DEBUG] [Thread-307802] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:39:07.110 [DEBUG] [Thread-307802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:39:07.110 [DEBUG] [Thread-307802] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:39:07.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:39:07.110 [DEBUG] [Thread-307802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:39:07.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:39:07.167 [DEBUG] [Thread-307802] [transport.py] [_log()] userauth is OK
2025-12-24T19:39:07.167 [DEBUG] [Thread-307802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:39:07.167 [DEBUG] [Thread-307802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:39:07.167 [DEBUG] [Thread-307802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:39:07.167 [DEBUG] [Thread-307802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:39:07.181 [INFO] [Thread-307802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:39:07.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:39:07.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:39:07.997 [DEBUG] [Thread-307802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:39:07.997 [DEBUG] [Thread-307802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:39:08.045 [DEBUG] [Thread-307802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:39:08.045 [DEBUG] [Thread-307802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:39:08.054 [DEBUG] [Thread-307802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:39:08.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:39:08.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:39:08.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:39:08.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:39:08.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:39:08.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:39:08.091 [DEBUG] [Thread-307802] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:39:09.226 [DEBUG] [Thread-307804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:39:14.080 [DEBUG] [Thread-307805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:39:29.324 [DEBUG] [Thread-307806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:39:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:39:38.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:39:38.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
2025-12-24T19:39:39.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 39, 2), 15.05, 37.2, 0.0, 34.3, 19.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:39:39.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:39:02
2025-12-24T19:39:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:39:39.537 [DEBUG] [Thread-307807] [transport.py] [_log()] starting thread (client mode): 0xf5728eb0
2025-12-24T19:39:39.538 [DEBUG] [Thread-307807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:39:39.554 [DEBUG] [Thread-307807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:39:39.554 [INFO] [Thread-307807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] client lang: <none>
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] server lang: <none>
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] kex follows: False
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:39:39.558 [DEBUG] [Thread-307807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:39:39.559 [DEBUG] [Thread-307807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:39:39.559 [DEBUG] [Thread-307807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:39:39.559 [DEBUG] [Thread-307807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:39:39.559 [DEBUG] [Thread-307807] [transport.py] [_log()] Compression: none
2025-12-24T19:39:39.559 [DEBUG] [Thread-307807] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:39:39.590 [DEBUG] [Thread-307807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:39:39.592 [DEBUG] [Thread-307807] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:39:39.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:39:39.594 [DEBUG] [Thread-307807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:39:39.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:39:39.596 [DEBUG] [Thread-307807] [transport.py] [_log()] userauth is OK
2025-12-24T19:39:39.597 [DEBUG] [Thread-307807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:39:39.597 [DEBUG] [Thread-307807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:39:39.597 [DEBUG] [Thread-307807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:39:39.597 [DEBUG] [Thread-307807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:39:39.627 [INFO] [Thread-307807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:39:39.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:39:40.300 [DEBUG] [Thread-307807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:39:40.300 [DEBUG] [Thread-307807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:39:40.301 [DEBUG] [Thread-307807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:39:40.342 [DEBUG] [Thread-307807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:39:40.342 [DEBUG] [Thread-307807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:39:40.345 [DEBUG] [Thread-307807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:39:40.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:39:40.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:39:40.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:39:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:39:40.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:39:40.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:39:40.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:39:40.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:39:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:39:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.735482 -999.00  +19.90  26.19     42   +6.80 1 2 1 1 1   883    0 12.01 -55.24 ----- 18.2 26.2 175.8 31.0 20.9 -22.8 20.8 -23.1 20.6 -21.1 21.0 -22.1
2025-12-24T19:39:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:39:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:39:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.735482
2025-12-24T19:39:40.374 [DEBUG] [Thread-307807] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:39:40.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:39:40.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:39:40.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:39:40.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:39:40.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:39:40.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:39:02', tmtdew=15.05, humidity=37.2, cloud=0.0, wind=34.3, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:39:05.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:39:40.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:39:40.475 [DEBUG] [Thread-307810] [transport.py] [_log()] starting thread (client mode): 0xf572b220
2025-12-24T19:39:40.475 [DEBUG] [Thread-307810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:39:40.493 [DEBUG] [Thread-307810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:39:40.493 [INFO] [Thread-307810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] client lang: <none>
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] server lang: <none>
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] kex follows: False
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:39:40.501 [DEBUG] [Thread-307810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:39:40.502 [DEBUG] [Thread-307810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:39:40.502 [DEBUG] [Thread-307810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:39:40.502 [DEBUG] [Thread-307810] [transport.py] [_log()] Compression: none
2025-12-24T19:39:40.502 [DEBUG] [Thread-307810] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:39:40.559 [DEBUG] [Thread-307810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:39:40.560 [DEBUG] [Thread-307810] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:39:40.560 [DEBUG] [Thread-307810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:39:40.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:39:40.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:39:40.615 [DEBUG] [Thread-307810] [transport.py] [_log()] userauth is OK
2025-12-24T19:39:40.616 [DEBUG] [Thread-307810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:39:40.616 [DEBUG] [Thread-307810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:39:40.616 [DEBUG] [Thread-307810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:39:40.616 [DEBUG] [Thread-307810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:39:40.640 [INFO] [Thread-307810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:39:40.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:39:40.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:39:41.465 [DEBUG] [Thread-307810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:39:41.465 [DEBUG] [Thread-307810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:39:41.513 [DEBUG] [Thread-307810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:39:41.513 [DEBUG] [Thread-307810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:39:41.522 [DEBUG] [Thread-307810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:39:41.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:39: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')
2025-12-24T19:39: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
2025-12-24T19:39:41.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:39:41.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:39:41.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:39:41.561 [DEBUG] [Thread-307810] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:39:44.428 [DEBUG] [Thread-307812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:39:59.631 [DEBUG] [Thread-307813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:40:02.934 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:40:02.935 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:40:09.564 [DEBUG] [Thread-307814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:40:11.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:40:11.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:40:11.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:40:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 39, 36), 15.07, 37.25, 0.0, 28.57, 19.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:40:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:39:36
2025-12-24T19:40:13.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:40:13.633 [DEBUG] [Thread-307815] [transport.py] [_log()] starting thread (client mode): 0xf572fa30
2025-12-24T19:40:13.634 [DEBUG] [Thread-307815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:40:13.644 [DEBUG] [Thread-307815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:40:13.644 [INFO] [Thread-307815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] client lang: <none>
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] server lang: <none>
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] kex follows: False
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:40:13.652 [DEBUG] [Thread-307815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:40:13.653 [DEBUG] [Thread-307815] [transport.py] [_log()] Compression: none
2025-12-24T19:40:13.653 [DEBUG] [Thread-307815] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:40:13.685 [DEBUG] [Thread-307815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:40:13.691 [DEBUG] [Thread-307815] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:40:13.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:40:13.694 [DEBUG] [Thread-307815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:40:13.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:40:13.696 [DEBUG] [Thread-307815] [transport.py] [_log()] userauth is OK
2025-12-24T19:40:13.696 [DEBUG] [Thread-307815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:40:13.696 [DEBUG] [Thread-307815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:40:13.696 [DEBUG] [Thread-307815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:40:13.696 [DEBUG] [Thread-307815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:40:13.714 [INFO] [Thread-307815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:40:13.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:40:14.701 [DEBUG] [Thread-307815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:40:14.701 [DEBUG] [Thread-307815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:40:14.702 [DEBUG] [Thread-307815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:40:14.742 [DEBUG] [Thread-307815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:40:14.742 [DEBUG] [Thread-307815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:40:14.745 [DEBUG] [Thread-307815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:40:14.751 [DEBUG] [Thread-307817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:40:14.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:40:14.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:40:14.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:40:14.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:40:14.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:40:14.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:40:14.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:40:14.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:40:14.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:40:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.735829 -999.00  +19.90  16.75     42   +6.80 1 2 1 1 1   882    0 11.80 -53.45 ----- 23.5 16.8 171.9 25.0 20.9 -22.8 20.8 -22.5 20.6 -21.2 20.9 -22.1
2025-12-24T19:40:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:40:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:40:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.735829
2025-12-24T19:40:14.781 [DEBUG] [Thread-307815] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:40:14.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:40:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:40:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:40:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:40:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:40:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:39:36', tmtdew=15.07, humidity=37.25, cloud=0.0, wind=28.57, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:39:35.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:40:14.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:40:14.901 [DEBUG] [Thread-307819] [transport.py] [_log()] starting thread (client mode): 0xf818a3b0
2025-12-24T19:40:14.901 [DEBUG] [Thread-307819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:40:14.916 [DEBUG] [Thread-307819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:40:14.916 [INFO] [Thread-307819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] client lang: <none>
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] server lang: <none>
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] kex follows: False
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] Compression: none
2025-12-24T19:40:14.924 [DEBUG] [Thread-307819] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:40:14.982 [DEBUG] [Thread-307819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:40:14.982 [DEBUG] [Thread-307819] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:40:14.982 [DEBUG] [Thread-307819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:40:14.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:40:14.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:40:15.039 [DEBUG] [Thread-307819] [transport.py] [_log()] userauth is OK
2025-12-24T19:40:15.039 [DEBUG] [Thread-307819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:40:15.039 [DEBUG] [Thread-307819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:40:15.039 [DEBUG] [Thread-307819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:40:15.039 [DEBUG] [Thread-307819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:40:15.056 [INFO] [Thread-307819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:40:15.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:40:15.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:40:15.868 [DEBUG] [Thread-307819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:40:15.868 [DEBUG] [Thread-307819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:40:15.915 [DEBUG] [Thread-307819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:40:15.915 [DEBUG] [Thread-307819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:40:15.925 [DEBUG] [Thread-307819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:40:15.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:40:15.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:40:15.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:40:15.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:40:15.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:40:15.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:40:15.968 [DEBUG] [Thread-307819] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:40:29.920 [DEBUG] [Thread-307821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:40:45.128 [DEBUG] [Thread-307822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:40:45.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:40:45.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:40:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:40:46.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 40, 9), 15.06, 37.3, 0.0, 29.47, 20.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:40:46.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:40:09
2025-12-24T19:40:47.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:40:47.323 [DEBUG] [Thread-307823] [transport.py] [_log()] starting thread (client mode): 0xf818b7f0
2025-12-24T19:40:47.324 [DEBUG] [Thread-307823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:40:47.337 [DEBUG] [Thread-307823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:40:47.337 [INFO] [Thread-307823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:40:47.341 [DEBUG] [Thread-307823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] client lang: <none>
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] server lang: <none>
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] kex follows: False
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] Compression: none
2025-12-24T19:40:47.342 [DEBUG] [Thread-307823] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:40:47.372 [DEBUG] [Thread-307823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:40:47.375 [DEBUG] [Thread-307823] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:40:47.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:40:47.376 [DEBUG] [Thread-307823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:40:47.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:40:47.379 [DEBUG] [Thread-307823] [transport.py] [_log()] userauth is OK
2025-12-24T19:40:47.379 [DEBUG] [Thread-307823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:40:47.379 [DEBUG] [Thread-307823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:40:47.379 [DEBUG] [Thread-307823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:40:47.379 [DEBUG] [Thread-307823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:40:47.409 [INFO] [Thread-307823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:40:47.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:40:48.053 [DEBUG] [Thread-307823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:40:48.053 [DEBUG] [Thread-307823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:40:48.055 [DEBUG] [Thread-307823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:40:48.094 [DEBUG] [Thread-307823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:40:48.094 [DEBUG] [Thread-307823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:40:48.097 [DEBUG] [Thread-307823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:40:48.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:40:48.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:40:48.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:40:48.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:40:48.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:40:48.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:40:48.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:40:48.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:40:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:40:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.736176 -999.00  +19.90  27.80     42   +6.80 1 2 1 1 1   882    0 11.78 -47.61 ----- 20.3 27.8 175.8 37.5 20.9 -22.7 20.7 -22.4 20.6 -21.2 20.9 -22.1
2025-12-24T19:40:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:40:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:40:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.736176
2025-12-24T19:40:48.130 [DEBUG] [Thread-307823] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:40:48.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:40:48.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:40:48.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:40:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:40:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:40:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:40:09', tmtdew=15.06, humidity=37.3, cloud=0.0, wind=29.47, temperature=20.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:40:05.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:40:48.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:40:48.243 [DEBUG] [Thread-307826] [transport.py] [_log()] starting thread (client mode): 0xf578b520
2025-12-24T19:40:48.243 [DEBUG] [Thread-307826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:40:48.257 [DEBUG] [Thread-307826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:40:48.257 [INFO] [Thread-307826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:40:48.264 [DEBUG] [Thread-307826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:40:48.264 [DEBUG] [Thread-307826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:40:48.264 [DEBUG] [Thread-307826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:40:48.264 [DEBUG] [Thread-307826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:40:48.264 [DEBUG] [Thread-307826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:40:48.264 [DEBUG] [Thread-307826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:40:48.264 [DEBUG] [Thread-307826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:40:48.264 [DEBUG] [Thread-307826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] client lang: <none>
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] server lang: <none>
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] kex follows: False
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] Compression: none
2025-12-24T19:40:48.265 [DEBUG] [Thread-307826] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:40:48.323 [DEBUG] [Thread-307826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:40:48.324 [DEBUG] [Thread-307826] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:40:48.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:40:48.325 [DEBUG] [Thread-307826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:40:48.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:40:48.380 [DEBUG] [Thread-307826] [transport.py] [_log()] userauth is OK
2025-12-24T19:40:48.380 [DEBUG] [Thread-307826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:40:48.380 [DEBUG] [Thread-307826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:40:48.380 [DEBUG] [Thread-307826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:40:48.380 [DEBUG] [Thread-307826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:40:48.399 [INFO] [Thread-307826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:40:48.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:40:48.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:40:49.261 [DEBUG] [Thread-307826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:40:49.261 [DEBUG] [Thread-307826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:40:49.308 [DEBUG] [Thread-307826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:40:49.308 [DEBUG] [Thread-307826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:40:49.316 [DEBUG] [Thread-307826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:40:49.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:40:49.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')
2025-12-24T19:40:49.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:40:49.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:40:49.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:40:49.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:40:49.349 [DEBUG] [Thread-307826] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:41:00.256 [DEBUG] [Thread-307828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:41:03.081 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:41:03.084 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:41:09.904 [DEBUG] [Thread-307829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:41:15.409 [DEBUG] [Thread-307830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:41:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:41:19.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:41:19.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:41:20.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 40, 44), 15.05, 37.31, 0.0, 33.06, 19.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:41:20.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:40:44
2025-12-24T19:41:20.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:41:20.737 [DEBUG] [Thread-307831] [transport.py] [_log()] starting thread (client mode): 0xf5788ee0
2025-12-24T19:41:20.738 [DEBUG] [Thread-307831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:41:20.749 [DEBUG] [Thread-307831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:41:20.750 [INFO] [Thread-307831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] client lang: <none>
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] server lang: <none>
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] kex follows: False
2025-12-24T19:41:20.753 [DEBUG] [Thread-307831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:41:20.754 [DEBUG] [Thread-307831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:41:20.754 [DEBUG] [Thread-307831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:41:20.754 [DEBUG] [Thread-307831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:41:20.754 [DEBUG] [Thread-307831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:41:20.754 [DEBUG] [Thread-307831] [transport.py] [_log()] Compression: none
2025-12-24T19:41:20.754 [DEBUG] [Thread-307831] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:41:20.788 [DEBUG] [Thread-307831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:41:20.792 [DEBUG] [Thread-307831] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:41:20.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:41:20.794 [DEBUG] [Thread-307831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:41:20.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:41:20.796 [DEBUG] [Thread-307831] [transport.py] [_log()] userauth is OK
2025-12-24T19:41:20.796 [DEBUG] [Thread-307831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:41:20.797 [DEBUG] [Thread-307831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:41:20.797 [DEBUG] [Thread-307831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:41:20.801 [DEBUG] [Thread-307831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:41:20.813 [INFO] [Thread-307831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:41:20.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:41:21.597 [DEBUG] [Thread-307831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:41:21.597 [DEBUG] [Thread-307831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:41:21.598 [DEBUG] [Thread-307831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:41:21.639 [DEBUG] [Thread-307831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:41:21.639 [DEBUG] [Thread-307831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:41:21.642 [DEBUG] [Thread-307831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:41:21.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:41:21.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:41:21.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:41:21.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:41:21.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:41:21.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:41:21.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:41:21.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:41:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:41:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.736524 -999.00  +19.90  23.35     42   +6.80 1 2 1 1 1   881    0 11.87 -43.13 ----- 17.3 23.4 168.4 28.3 20.9 -22.8 20.7 -22.8 20.6 -21.1 20.9 -21.8
2025-12-24T19:41:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:41:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:41:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.736524
2025-12-24T19:41:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:41:21.683 [DEBUG] [Thread-307831] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:41:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:41:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:41:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:41:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:41:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:40:44', tmtdew=15.05, humidity=37.31, cloud=0.0, wind=33.06, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:40:35.674', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:41:21.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:41:21.771 [DEBUG] [Thread-307834] [transport.py] [_log()] starting thread (client mode): 0xf578a770
2025-12-24T19:41:21.772 [DEBUG] [Thread-307834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:41:21.786 [DEBUG] [Thread-307834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:41:21.786 [INFO] [Thread-307834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] client lang: <none>
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] server lang: <none>
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] kex follows: False
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] Compression: none
2025-12-24T19:41:21.793 [DEBUG] [Thread-307834] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:41:21.849 [DEBUG] [Thread-307834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:41:21.849 [DEBUG] [Thread-307834] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:41:21.849 [DEBUG] [Thread-307834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:41:21.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:41:21.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:41:21.907 [DEBUG] [Thread-307834] [transport.py] [_log()] userauth is OK
2025-12-24T19:41:21.907 [DEBUG] [Thread-307834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:41:21.907 [DEBUG] [Thread-307834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:41:21.907 [DEBUG] [Thread-307834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:41:21.907 [DEBUG] [Thread-307834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:41:21.921 [INFO] [Thread-307834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:41:21.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:41:21.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:41:22.759 [DEBUG] [Thread-307834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:41:22.759 [DEBUG] [Thread-307834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:41:22.806 [DEBUG] [Thread-307834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:41:22.806 [DEBUG] [Thread-307834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:41:22.814 [DEBUG] [Thread-307834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:41:22.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:41:22.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:41:22.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:41:22.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:41:22.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:41:22.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:41:22.849 [DEBUG] [Thread-307834] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:41:30.516 [DEBUG] [Thread-307836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:41:45.736 [DEBUG] [Thread-307837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:41:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:41:52.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:41:52.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:41:55.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 41, 17), 15.04, 37.33, 0.0, 32.08, 19.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:41:55.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:41:17
2025-12-24T19:41:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:41:55.561 [DEBUG] [Thread-307838] [transport.py] [_log()] starting thread (client mode): 0xf8188ca0
2025-12-24T19:41:55.561 [DEBUG] [Thread-307838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:41:55.567 [DEBUG] [Thread-307838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:41:55.568 [INFO] [Thread-307838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] client lang: <none>
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] server lang: <none>
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] kex follows: False
2025-12-24T19:41:55.572 [DEBUG] [Thread-307838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:41:55.573 [DEBUG] [Thread-307838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:41:55.573 [DEBUG] [Thread-307838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:41:55.573 [DEBUG] [Thread-307838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:41:55.573 [DEBUG] [Thread-307838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:41:55.573 [DEBUG] [Thread-307838] [transport.py] [_log()] Compression: none
2025-12-24T19:41:55.573 [DEBUG] [Thread-307838] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:41:55.611 [DEBUG] [Thread-307838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:41:55.616 [DEBUG] [Thread-307838] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:41:55.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:41:55.619 [DEBUG] [Thread-307838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:41:55.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:41:55.623 [DEBUG] [Thread-307838] [transport.py] [_log()] userauth is OK
2025-12-24T19:41:55.623 [DEBUG] [Thread-307838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:41:55.623 [DEBUG] [Thread-307838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:41:55.623 [DEBUG] [Thread-307838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:41:55.623 [DEBUG] [Thread-307838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:41:55.655 [INFO] [Thread-307838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:41:55.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:41:56.282 [DEBUG] [Thread-307838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:41:56.282 [DEBUG] [Thread-307838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:41:56.284 [DEBUG] [Thread-307838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:41:56.324 [DEBUG] [Thread-307838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:41:56.324 [DEBUG] [Thread-307838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:41:56.328 [DEBUG] [Thread-307838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:41:56.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:41:56.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:41:56.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:41:56.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:41:56.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:41:56.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:41:56.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:41:56.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:41:56.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:41:56.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.736871 -999.00  +19.90  17.16     42   +6.80 1 2 1 1 1   881    0 11.97 -39.89 ----- 17.9 17.2 152.6 28.0 20.8 -22.8 20.7 -22.7 20.6 -20.9 20.9 -21.9
2025-12-24T19:41:56.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:41:56.358 [DEBUG] [Thread-307838] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:41:56.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:41:56.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.736871
2025-12-24T19:41:56.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:41:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:41:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:41:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:41:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:41:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:41:17', tmtdew=15.04, humidity=37.33, cloud=0.0, wind=32.08, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:41:05.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:41:56.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:41:56.485 [DEBUG] [Thread-307841] [transport.py] [_log()] starting thread (client mode): 0xf572d030
2025-12-24T19:41:56.486 [DEBUG] [Thread-307841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:41:56.499 [DEBUG] [Thread-307841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:41:56.500 [INFO] [Thread-307841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:41:56.507 [DEBUG] [Thread-307841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:41:56.507 [DEBUG] [Thread-307841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:41:56.507 [DEBUG] [Thread-307841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:41:56.507 [DEBUG] [Thread-307841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:41:56.507 [DEBUG] [Thread-307841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:41:56.507 [DEBUG] [Thread-307841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:41:56.507 [DEBUG] [Thread-307841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] client lang: <none>
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] server lang: <none>
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] kex follows: False
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] Compression: none
2025-12-24T19:41:56.508 [DEBUG] [Thread-307841] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:41:56.576 [DEBUG] [Thread-307841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:41:56.576 [DEBUG] [Thread-307841] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:41:56.577 [DEBUG] [Thread-307841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:41:56.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:41:56.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:41:56.632 [DEBUG] [Thread-307841] [transport.py] [_log()] userauth is OK
2025-12-24T19:41:56.632 [DEBUG] [Thread-307841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:41:56.632 [DEBUG] [Thread-307841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:41:56.632 [DEBUG] [Thread-307841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:41:56.632 [DEBUG] [Thread-307841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:41:56.651 [INFO] [Thread-307841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:41:56.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:41:56.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:41:57.449 [DEBUG] [Thread-307841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:41:57.449 [DEBUG] [Thread-307841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:41:57.497 [DEBUG] [Thread-307841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:41:57.497 [DEBUG] [Thread-307841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:41:57.505 [DEBUG] [Thread-307841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:41:57.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:41:57.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:41:57.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:41:57.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:41:57.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:41:57.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:41:57.539 [DEBUG] [Thread-307841] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:42:00.840 [DEBUG] [Thread-307843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:42:09.388 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:42:09.398 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:42:10.188 [DEBUG] [Thread-307844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:42:16.028 [DEBUG] [Thread-307845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:42:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:42:27.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:42:27.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:42:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 41, 50), 15.04, 37.33, 0.0, 31.64, 19.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:42:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:41:50
2025-12-24T19:42:28.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:42:28.923 [DEBUG] [Thread-307846] [transport.py] [_log()] starting thread (client mode): 0xf572f250
2025-12-24T19:42:28.924 [DEBUG] [Thread-307846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:42:28.939 [DEBUG] [Thread-307846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:42:28.939 [INFO] [Thread-307846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:42:28.943 [DEBUG] [Thread-307846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:42:28.943 [DEBUG] [Thread-307846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:42:28.943 [DEBUG] [Thread-307846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] client lang: <none>
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] server lang: <none>
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] kex follows: False
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:42:28.944 [DEBUG] [Thread-307846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:42:28.945 [DEBUG] [Thread-307846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:42:28.945 [DEBUG] [Thread-307846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:42:28.945 [DEBUG] [Thread-307846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:42:28.945 [DEBUG] [Thread-307846] [transport.py] [_log()] Compression: none
2025-12-24T19:42:28.945 [DEBUG] [Thread-307846] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:42:28.975 [DEBUG] [Thread-307846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:42:28.979 [DEBUG] [Thread-307846] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:42:28.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:42:28.981 [DEBUG] [Thread-307846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:42:28.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:42:28.983 [DEBUG] [Thread-307846] [transport.py] [_log()] userauth is OK
2025-12-24T19:42:28.983 [DEBUG] [Thread-307846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:42:28.984 [DEBUG] [Thread-307846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:42:28.984 [DEBUG] [Thread-307846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:42:28.984 [DEBUG] [Thread-307846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:42:29.003 [INFO] [Thread-307846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:42:29.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:42:29.666 [DEBUG] [Thread-307846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:42:29.666 [DEBUG] [Thread-307846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:42:29.668 [DEBUG] [Thread-307846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:42:29.707 [DEBUG] [Thread-307846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:42:29.707 [DEBUG] [Thread-307846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:42:29.710 [DEBUG] [Thread-307846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:42:29.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:42:29.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:42:29.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:42:29.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:42:29.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:42:29.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:42:29.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:42:29.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:42:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:42:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.737565 -999.00  +19.90  29.82     42   +6.70 1 2 1 1 1   879    0 12.17 -35.61 ----- 28.0 29.8 172.6 33.3 20.8 -22.9 20.7 -22.5 20.5 -21.2 20.8 -22.2
2025-12-24T19:42:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:42:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:42:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.737565
2025-12-24T19:42:29.749 [DEBUG] [Thread-307846] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:42:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:42:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:42:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:42:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:42:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:42:29.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:41:50', tmtdew=15.04, humidity=37.33, cloud=0.0, wind=31.64, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:42:05.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:42:29.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:42:29.854 [DEBUG] [Thread-307849] [transport.py] [_log()] starting thread (client mode): 0xf572b220
2025-12-24T19:42:29.854 [DEBUG] [Thread-307849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:42:29.868 [DEBUG] [Thread-307849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:42:29.868 [INFO] [Thread-307849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:42:29.876 [DEBUG] [Thread-307849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:42:29.876 [DEBUG] [Thread-307849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:42:29.876 [DEBUG] [Thread-307849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:42:29.876 [DEBUG] [Thread-307849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:42:29.876 [DEBUG] [Thread-307849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:42:29.876 [DEBUG] [Thread-307849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] client lang: <none>
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] server lang: <none>
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] kex follows: False
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:42:29.877 [DEBUG] [Thread-307849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:42:29.878 [DEBUG] [Thread-307849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:42:29.878 [DEBUG] [Thread-307849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:42:29.878 [DEBUG] [Thread-307849] [transport.py] [_log()] Compression: none
2025-12-24T19:42:29.878 [DEBUG] [Thread-307849] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:42:29.936 [DEBUG] [Thread-307849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:42:29.936 [DEBUG] [Thread-307849] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:42:29.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:42:29.937 [DEBUG] [Thread-307849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:42:29.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:42:29.991 [DEBUG] [Thread-307849] [transport.py] [_log()] userauth is OK
2025-12-24T19:42:29.992 [DEBUG] [Thread-307849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:42:29.992 [DEBUG] [Thread-307849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:42:29.992 [DEBUG] [Thread-307849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:42:29.992 [DEBUG] [Thread-307849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:42:30.014 [INFO] [Thread-307849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:42:30.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:42:30.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:42:30.843 [DEBUG] [Thread-307849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:42:30.843 [DEBUG] [Thread-307849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:42:30.890 [DEBUG] [Thread-307849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:42:30.890 [DEBUG] [Thread-307849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:42:30.898 [DEBUG] [Thread-307849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:42:30.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:42:30.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')
2025-12-24T19:42:30.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
2025-12-24T19:42:30.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:42:30.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:42:30.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:42:30.932 [DEBUG] [Thread-307849] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:42:31.137 [DEBUG] [Thread-307851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:42:46.371 [DEBUG] [Thread-307852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:43:00.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:43:00.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:43:01.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
2025-12-24T19:43:01.494 [DEBUG] [Thread-307853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:43:02.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 42, 25), 15.07, 37.26, 0.0, 32.22, 20.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:43:02.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:42:25
2025-12-24T19:43:02.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:43:02.938 [DEBUG] [Thread-307854] [transport.py] [_log()] starting thread (client mode): 0xf572f670
2025-12-24T19:43:02.939 [DEBUG] [Thread-307854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:43:02.950 [DEBUG] [Thread-307854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:43:02.950 [INFO] [Thread-307854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] client lang: <none>
2025-12-24T19:43:02.963 [DEBUG] [Thread-307854] [transport.py] [_log()] server lang: <none>
2025-12-24T19:43:02.964 [DEBUG] [Thread-307854] [transport.py] [_log()] kex follows: False
2025-12-24T19:43:02.964 [DEBUG] [Thread-307854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:43:02.964 [DEBUG] [Thread-307854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:43:02.964 [DEBUG] [Thread-307854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:43:02.964 [DEBUG] [Thread-307854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:43:02.964 [DEBUG] [Thread-307854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:43:02.964 [DEBUG] [Thread-307854] [transport.py] [_log()] Compression: none
2025-12-24T19:43:02.964 [DEBUG] [Thread-307854] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:43:03.001 [DEBUG] [Thread-307854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:43:03.006 [DEBUG] [Thread-307854] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:43:03.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:43:03.009 [DEBUG] [Thread-307854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:43:03.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:43:03.012 [DEBUG] [Thread-307854] [transport.py] [_log()] userauth is OK
2025-12-24T19:43:03.012 [DEBUG] [Thread-307854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:43:03.012 [DEBUG] [Thread-307854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:43:03.012 [DEBUG] [Thread-307854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:43:03.012 [DEBUG] [Thread-307854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:43:03.035 [INFO] [Thread-307854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:43:03.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:43:03.660 [DEBUG] [Thread-307854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:43:03.660 [DEBUG] [Thread-307854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:43:03.660 [DEBUG] [Thread-307854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:43:03.700 [DEBUG] [Thread-307854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:43:03.701 [DEBUG] [Thread-307854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:43:03.702 [DEBUG] [Thread-307854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:43:03.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:43:03.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:43:03.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:43:03.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:43:03.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:43:03.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:43:03.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:43:03.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:43:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:43:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.737913 -999.00  +19.90  20.81     42   +6.80 1 2 1 1 1   878    0 12.30 -37.16 ----- 26.6 20.8 176.7 35.9 20.8 -22.8 20.7 -23.0 20.5 -21.3 20.8 -22.1
2025-12-24T19:43:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:43:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:43:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.737913
2025-12-24T19:43:03.880 [DEBUG] [Thread-307854] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:43:03.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:43:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:43:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:43:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:43:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:43:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:42:25', tmtdew=15.07, humidity=37.26, cloud=0.0, wind=32.22, temperature=20.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:42:35.683', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:43:03.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:43:03.982 [DEBUG] [Thread-307857] [transport.py] [_log()] starting thread (client mode): 0xf572a5f0
2025-12-24T19:43:03.982 [DEBUG] [Thread-307857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:43:03.996 [DEBUG] [Thread-307857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:43:03.996 [INFO] [Thread-307857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:43:04.003 [DEBUG] [Thread-307857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:43:04.003 [DEBUG] [Thread-307857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] client lang: <none>
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] server lang: <none>
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] kex follows: False
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] Compression: none
2025-12-24T19:43:04.004 [DEBUG] [Thread-307857] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:43:04.061 [DEBUG] [Thread-307857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:43:04.062 [DEBUG] [Thread-307857] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:43:04.062 [DEBUG] [Thread-307857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:43:04.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:43:04.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:43:04.121 [DEBUG] [Thread-307857] [transport.py] [_log()] userauth is OK
2025-12-24T19:43:04.121 [DEBUG] [Thread-307857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:43:04.121 [DEBUG] [Thread-307857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:43:04.121 [DEBUG] [Thread-307857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:43:04.121 [DEBUG] [Thread-307857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:43:04.135 [INFO] [Thread-307857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:43:04.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:43:04.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:43:04.971 [DEBUG] [Thread-307857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:43:04.971 [DEBUG] [Thread-307857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:43:05.019 [DEBUG] [Thread-307857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:43:05.019 [DEBUG] [Thread-307857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:43:05.030 [DEBUG] [Thread-307857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:43:05.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:43:05.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:43:05.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:43:05.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:43:05.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:43:05.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:43:05.070 [DEBUG] [Thread-307857] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:43:10.432 [DEBUG] [Thread-307859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:43:16.607 [DEBUG] [Thread-307860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:43:17.005 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:43:17.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:43:31.772 [DEBUG] [Thread-307861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:43:35.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:43:35.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:43:35.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:43:36.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 42, 58), 15.11, 37.3, 0.0, 31.23, 19.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:43:36.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:42:58
2025-12-24T19:43:36.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:43:36.493 [DEBUG] [Thread-307862] [transport.py] [_log()] starting thread (client mode): 0xf57abac0
2025-12-24T19:43:36.494 [DEBUG] [Thread-307862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:43:36.502 [DEBUG] [Thread-307862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:43:36.502 [INFO] [Thread-307862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:43:36.506 [DEBUG] [Thread-307862] [transport.py] [_log()] client lang: <none>
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] server lang: <none>
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] kex follows: False
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] Compression: none
2025-12-24T19:43:36.507 [DEBUG] [Thread-307862] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:43:36.543 [DEBUG] [Thread-307862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:43:36.547 [DEBUG] [Thread-307862] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:43:36.549 [DEBUG] [Thread-307862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:43:36.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:43:36.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:43:36.562 [DEBUG] [Thread-307862] [transport.py] [_log()] userauth is OK
2025-12-24T19:43:36.563 [DEBUG] [Thread-307862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:43:36.563 [DEBUG] [Thread-307862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:43:36.563 [DEBUG] [Thread-307862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:43:36.563 [DEBUG] [Thread-307862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:43:36.596 [INFO] [Thread-307862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:43:36.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:43:37.247 [DEBUG] [Thread-307862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:43:37.247 [DEBUG] [Thread-307862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:43:37.248 [DEBUG] [Thread-307862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:43:37.288 [DEBUG] [Thread-307862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:43:37.288 [DEBUG] [Thread-307862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:43:37.291 [DEBUG] [Thread-307862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:43:37.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:43:37.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:43:37.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:43:37.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:43:37.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:43:37.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:43:37.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:43:37.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:43:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:43:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.738260 -999.00  +19.80  23.59     42   +6.70 1 2 1 1 1   877    0 12.26 -32.58 ----- 22.2 23.6 171.0 36.1 20.7 -23.0 20.6 -22.7 20.4 -21.3 20.8 -22.1
2025-12-24T19:43:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:43:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:43:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.738260
2025-12-24T19:43:37.318 [DEBUG] [Thread-307862] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:43:37.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:43:37.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:43:37.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:43:37.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:43:37.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:43:37.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:42:58', tmtdew=15.11, humidity=37.3, cloud=0.0, wind=31.23, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:43:05.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:43:37.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:43:37.423 [DEBUG] [Thread-307865] [transport.py] [_log()] starting thread (client mode): 0xf578b160
2025-12-24T19:43:37.423 [DEBUG] [Thread-307865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:43:37.437 [DEBUG] [Thread-307865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:43:37.437 [INFO] [Thread-307865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] client lang: <none>
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] server lang: <none>
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] kex follows: False
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:43:37.445 [DEBUG] [Thread-307865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:43:37.446 [DEBUG] [Thread-307865] [transport.py] [_log()] Compression: none
2025-12-24T19:43:37.446 [DEBUG] [Thread-307865] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:43:37.502 [DEBUG] [Thread-307865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:43:37.502 [DEBUG] [Thread-307865] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:43:37.502 [DEBUG] [Thread-307865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:43:37.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:43:37.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:43:37.559 [DEBUG] [Thread-307865] [transport.py] [_log()] userauth is OK
2025-12-24T19:43:37.559 [DEBUG] [Thread-307865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:43:37.559 [DEBUG] [Thread-307865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:43:37.559 [DEBUG] [Thread-307865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:43:37.559 [DEBUG] [Thread-307865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:43:37.573 [INFO] [Thread-307865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:43:37.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:43:37.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:43:38.381 [DEBUG] [Thread-307865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:43:38.381 [DEBUG] [Thread-307865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:43:38.429 [DEBUG] [Thread-307865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:43:38.429 [DEBUG] [Thread-307865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:43:38.437 [DEBUG] [Thread-307865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:43:38.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:43:38.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:43:38.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:43:38.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:43:38.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:43:38.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:43:38.470 [DEBUG] [Thread-307865] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:43:46.871 [DEBUG] [Thread-307867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:44:02.069 [DEBUG] [Thread-307868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:44:08.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:44:08.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:44:08.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:44:09.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 43, 32), 15.08, 37.36, 0.0, 34.25, 19.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:44:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:43:32
2025-12-24T19:44:09.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:44:09.861 [DEBUG] [Thread-307869] [transport.py] [_log()] starting thread (client mode): 0xf57896f0
2025-12-24T19:44:09.862 [DEBUG] [Thread-307869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:44:09.874 [DEBUG] [Thread-307869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:44:09.874 [INFO] [Thread-307869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:44:09.877 [DEBUG] [Thread-307869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:44:09.877 [DEBUG] [Thread-307869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:44:09.877 [DEBUG] [Thread-307869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:44:09.877 [DEBUG] [Thread-307869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:44:09.877 [DEBUG] [Thread-307869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] client lang: <none>
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] server lang: <none>
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] kex follows: False
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] Compression: none
2025-12-24T19:44:09.878 [DEBUG] [Thread-307869] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:44:09.908 [DEBUG] [Thread-307869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:44:09.911 [DEBUG] [Thread-307869] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:44:09.912 [DEBUG] [Thread-307869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:44:09.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:44:09.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:44:09.915 [DEBUG] [Thread-307869] [transport.py] [_log()] userauth is OK
2025-12-24T19:44:09.916 [DEBUG] [Thread-307869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:44:09.916 [DEBUG] [Thread-307869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:44:09.916 [DEBUG] [Thread-307869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:44:09.916 [DEBUG] [Thread-307869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:44:09.936 [INFO] [Thread-307869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:44:09.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:44:10.528 [DEBUG] [Thread-307869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:44:10.528 [DEBUG] [Thread-307869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:44:10.529 [DEBUG] [Thread-307869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:44:10.569 [DEBUG] [Thread-307869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:44:10.569 [DEBUG] [Thread-307869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:44:10.574 [DEBUG] [Thread-307869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:44:10.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:44:10.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:44:10.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:44:10.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:44:10.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:44:10.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:44:10.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:44:10.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:44:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:44:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.738607 -999.00  +19.80  25.47     42   +6.70 1 2 1 1 1   877    0 12.36 -29.58 ----- 23.4 25.5 164.0 37.5 20.7 -23.1 20.6 -22.9 20.4 -21.3 20.8 -22.1
2025-12-24T19:44:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:44:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:44:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.738607
2025-12-24T19:44:10.620 [DEBUG] [Thread-307869] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:44:10.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:44:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:44:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:44:10.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:44:10.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:44:10.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:43:32', tmtdew=15.08, humidity=37.36, cloud=0.0, wind=34.25, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:43:35.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:44:10.715 [DEBUG] [Thread-307872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:44:10.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:44:10.732 [DEBUG] [Thread-307873] [transport.py] [_log()] starting thread (client mode): 0xf578b7c0
2025-12-24T19:44:10.732 [DEBUG] [Thread-307873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:44:10.747 [DEBUG] [Thread-307873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:44:10.747 [INFO] [Thread-307873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] client lang: <none>
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] server lang: <none>
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] kex follows: False
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] Compression: none
2025-12-24T19:44:10.755 [DEBUG] [Thread-307873] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:44:10.810 [DEBUG] [Thread-307873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:44:10.810 [DEBUG] [Thread-307873] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:44:10.810 [DEBUG] [Thread-307873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:44:10.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:44:10.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:44:10.867 [DEBUG] [Thread-307873] [transport.py] [_log()] userauth is OK
2025-12-24T19:44:10.867 [DEBUG] [Thread-307873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:44:10.867 [DEBUG] [Thread-307873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:44:10.867 [DEBUG] [Thread-307873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:44:10.867 [DEBUG] [Thread-307873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:44:10.881 [INFO] [Thread-307873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:44:10.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:44:10.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:44:11.713 [DEBUG] [Thread-307873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:44:11.714 [DEBUG] [Thread-307873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:44:11.761 [DEBUG] [Thread-307873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:44:11.761 [DEBUG] [Thread-307873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:44:11.770 [DEBUG] [Thread-307873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:44:11.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:44:11.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:44:11.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:44:11.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:44:11.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:44:11.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:44:11.810 [DEBUG] [Thread-307873] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:44:17.198 [DEBUG] [Thread-307875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:44:24.303 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:44:24.314 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:44:32.393 [DEBUG] [Thread-307876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:44:41.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:44:41.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:44:41.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:44:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 44, 6), 15.06, 37.4, 0.0, 34.0, 19.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:44:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:44:06
2025-12-24T19:44:43.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:44:43.519 [DEBUG] [Thread-307877] [transport.py] [_log()] starting thread (client mode): 0xf572c5b0
2025-12-24T19:44:43.519 [DEBUG] [Thread-307877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:44:43.524 [DEBUG] [Thread-307877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:44:43.524 [INFO] [Thread-307877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:44:43.530 [DEBUG] [Thread-307877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:44:43.530 [DEBUG] [Thread-307877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:44:43.530 [DEBUG] [Thread-307877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:44:43.530 [DEBUG] [Thread-307877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:44:43.530 [DEBUG] [Thread-307877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:44:43.530 [DEBUG] [Thread-307877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] client lang: <none>
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] server lang: <none>
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] kex follows: False
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] Compression: none
2025-12-24T19:44:43.531 [DEBUG] [Thread-307877] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:44:43.570 [DEBUG] [Thread-307877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:44:43.625 [DEBUG] [Thread-307877] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:44:43.627 [DEBUG] [Thread-307877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:44:43.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:44:43.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:44:43.631 [DEBUG] [Thread-307877] [transport.py] [_log()] userauth is OK
2025-12-24T19:44:43.631 [DEBUG] [Thread-307877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:44:43.631 [DEBUG] [Thread-307877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:44:43.631 [DEBUG] [Thread-307877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:44:43.631 [DEBUG] [Thread-307877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:44:43.650 [INFO] [Thread-307877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:44:43.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:44:44.305 [DEBUG] [Thread-307877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:44:44.305 [DEBUG] [Thread-307877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:44:44.306 [DEBUG] [Thread-307877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:44:44.346 [DEBUG] [Thread-307877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:44:44.346 [DEBUG] [Thread-307877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:44:44.349 [DEBUG] [Thread-307877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:44:44.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:44:44.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:44:44.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:44:44.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:44:44.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:44:44.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:44:44.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:44:44.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:44:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:44:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.738954 -999.00  +19.80  23.85     42   +6.70 1 2 1 1 1   875    0 12.41 -29.63 ----- 24.9 23.9 170.6 30.2 20.7 -23.0 20.5 -22.7 20.4 -21.2 20.7 -22.0
2025-12-24T19:44:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:44:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:44:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.738954
2025-12-24T19:44:44.384 [DEBUG] [Thread-307877] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:44:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:44:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:44:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:44:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:44:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:44:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:44:06', tmtdew=15.06, humidity=37.4, cloud=0.0, wind=34.0, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:44:05.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:44:44.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:44:44.488 [DEBUG] [Thread-307880] [transport.py] [_log()] starting thread (client mode): 0xf81e4d30
2025-12-24T19:44:44.488 [DEBUG] [Thread-307880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:44:44.502 [DEBUG] [Thread-307880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:44:44.502 [INFO] [Thread-307880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] client lang: <none>
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] server lang: <none>
2025-12-24T19:44:44.509 [DEBUG] [Thread-307880] [transport.py] [_log()] kex follows: False
2025-12-24T19:44:44.510 [DEBUG] [Thread-307880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:44:44.510 [DEBUG] [Thread-307880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:44:44.510 [DEBUG] [Thread-307880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:44:44.510 [DEBUG] [Thread-307880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:44:44.510 [DEBUG] [Thread-307880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:44:44.510 [DEBUG] [Thread-307880] [transport.py] [_log()] Compression: none
2025-12-24T19:44:44.510 [DEBUG] [Thread-307880] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:44:44.576 [DEBUG] [Thread-307880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:44:44.577 [DEBUG] [Thread-307880] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:44:44.578 [DEBUG] [Thread-307880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:44:44.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:44:44.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:44:44.631 [DEBUG] [Thread-307880] [transport.py] [_log()] userauth is OK
2025-12-24T19:44:44.631 [DEBUG] [Thread-307880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:44:44.631 [DEBUG] [Thread-307880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:44:44.631 [DEBUG] [Thread-307880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:44:44.631 [DEBUG] [Thread-307880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:44:44.647 [INFO] [Thread-307880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:44:44.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:44:44.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:44:45.479 [DEBUG] [Thread-307880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:44:45.479 [DEBUG] [Thread-307880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:44:45.526 [DEBUG] [Thread-307880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:44:45.527 [DEBUG] [Thread-307880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:44:45.535 [DEBUG] [Thread-307880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:44:45.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:44: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')
2025-12-24T19:44:45.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
2025-12-24T19:44:45.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:44:45.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:44:45.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:44:45.571 [DEBUG] [Thread-307880] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:44:47.501 [DEBUG] [Thread-307882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:45:03.237 [DEBUG] [Thread-307883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:45:11.001 [DEBUG] [Thread-307884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:45:15.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:45:15.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:45:15.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:45:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 44, 39), 14.94, 37.44, 0.0, 31.65, 19.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:45:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:44:39
2025-12-24T19:45:16.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:45:16.895 [DEBUG] [Thread-307885] [transport.py] [_log()] starting thread (client mode): 0xf57a9240
2025-12-24T19:45:16.896 [DEBUG] [Thread-307885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:45:16.909 [DEBUG] [Thread-307885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:45:16.910 [INFO] [Thread-307885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] client lang: <none>
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] server lang: <none>
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] kex follows: False
2025-12-24T19:45:16.914 [DEBUG] [Thread-307885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:45:16.915 [DEBUG] [Thread-307885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:45:16.916 [DEBUG] [Thread-307885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:45:16.916 [DEBUG] [Thread-307885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:45:16.916 [DEBUG] [Thread-307885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:45:16.916 [DEBUG] [Thread-307885] [transport.py] [_log()] Compression: none
2025-12-24T19:45:16.916 [DEBUG] [Thread-307885] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:45:16.950 [DEBUG] [Thread-307885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:45:16.953 [DEBUG] [Thread-307885] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:45:16.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:45:16.956 [DEBUG] [Thread-307885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:45:16.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:45:16.958 [DEBUG] [Thread-307885] [transport.py] [_log()] userauth is OK
2025-12-24T19:45:16.958 [DEBUG] [Thread-307885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:45:16.958 [DEBUG] [Thread-307885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:45:16.958 [DEBUG] [Thread-307885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:45:16.958 [DEBUG] [Thread-307885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:45:16.988 [INFO] [Thread-307885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:45:16.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:45:17.737 [DEBUG] [Thread-307885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:45:17.737 [DEBUG] [Thread-307885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:45:17.738 [DEBUG] [Thread-307885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:45:17.777 [DEBUG] [Thread-307885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:45:17.778 [DEBUG] [Thread-307885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:45:17.780 [DEBUG] [Thread-307885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:45:17.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:45:17.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:45:17.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:45:17.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:45:17.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:45:17.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:45:17.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:45:17.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:45:17.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:45:17.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.739301 -999.00  +19.80  20.24     42   +6.80 1 2 1 1 1   874    0 12.25 -29.58 ----- 18.0 20.2 172.0 33.3 20.6 -23.0 20.5 -22.4 20.4 -20.9 20.6 -22.1
2025-12-24T19:45:17.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:45:17.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:45:17.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.739301
2025-12-24T19:45:17.807 [DEBUG] [Thread-307885] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:45:17.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:45:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:45:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:45:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:45:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:45:17.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:44:39', tmtdew=14.94, humidity=37.44, cloud=0.0, wind=31.65, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:44:35.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:45:17.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:45:17.908 [DEBUG] [Thread-307888] [transport.py] [_log()] starting thread (client mode): 0xf57a9270
2025-12-24T19:45:17.908 [DEBUG] [Thread-307888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:45:17.923 [DEBUG] [Thread-307888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:45:17.923 [INFO] [Thread-307888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] client lang: <none>
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] server lang: <none>
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] kex follows: False
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] Compression: none
2025-12-24T19:45:17.931 [DEBUG] [Thread-307888] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:45:17.986 [DEBUG] [Thread-307888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:45:17.986 [DEBUG] [Thread-307888] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:45:17.986 [DEBUG] [Thread-307888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:45:17.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:45:17.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:45:18.043 [DEBUG] [Thread-307888] [transport.py] [_log()] userauth is OK
2025-12-24T19:45:18.043 [DEBUG] [Thread-307888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:45:18.043 [DEBUG] [Thread-307888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:45:18.043 [DEBUG] [Thread-307888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:45:18.043 [DEBUG] [Thread-307888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:45:18.062 [INFO] [Thread-307888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:45:18.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:45:18.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:45:18.624 [DEBUG] [Thread-307890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:45:18.874 [DEBUG] [Thread-307888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:45:18.874 [DEBUG] [Thread-307888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:45:18.922 [DEBUG] [Thread-307888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:45:18.922 [DEBUG] [Thread-307888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:45:18.932 [DEBUG] [Thread-307888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:45:18.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:45:18.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:45:18.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:45:18.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:45:18.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:45:18.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:45:18.968 [DEBUG] [Thread-307888] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:45:30.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:45:30.212 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:45:33.830 [DEBUG] [Thread-307891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:45:48.955 [DEBUG] [Thread-307892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:45:48.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:45:48.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:45:49.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:45:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 45, 13), 14.93, 37.48, 0.0, 34.67, 19.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:45:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:45:13
2025-12-24T19:45:50.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:45:50.419 [DEBUG] [Thread-307893] [transport.py] [_log()] starting thread (client mode): 0xf57a98d0
2025-12-24T19:45:50.419 [DEBUG] [Thread-307893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:45:50.433 [DEBUG] [Thread-307893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:45:50.433 [INFO] [Thread-307893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] client lang: <none>
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] server lang: <none>
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] kex follows: False
2025-12-24T19:45:50.445 [DEBUG] [Thread-307893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:45:50.446 [DEBUG] [Thread-307893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:45:50.446 [DEBUG] [Thread-307893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:45:50.446 [DEBUG] [Thread-307893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:45:50.446 [DEBUG] [Thread-307893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:45:50.446 [DEBUG] [Thread-307893] [transport.py] [_log()] Compression: none
2025-12-24T19:45:50.446 [DEBUG] [Thread-307893] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:45:50.476 [DEBUG] [Thread-307893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:45:50.479 [DEBUG] [Thread-307893] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:45:50.480 [DEBUG] [Thread-307893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:45:50.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:45:50.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:45:50.483 [DEBUG] [Thread-307893] [transport.py] [_log()] userauth is OK
2025-12-24T19:45:50.483 [DEBUG] [Thread-307893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:45:50.483 [DEBUG] [Thread-307893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:45:50.483 [DEBUG] [Thread-307893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:45:50.483 [DEBUG] [Thread-307893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:45:50.514 [INFO] [Thread-307893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:45:50.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:45:51.176 [DEBUG] [Thread-307893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:45:51.177 [DEBUG] [Thread-307893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:45:51.178 [DEBUG] [Thread-307893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:45:51.217 [DEBUG] [Thread-307893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:45:51.217 [DEBUG] [Thread-307893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:45:51.222 [DEBUG] [Thread-307893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:45:51.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:45:51.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:45:51.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:45:51.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:45:51.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:45:51.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:45:51.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:45:51.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:45:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:45:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.739648 -999.00  +19.80  31.08     42   +6.80 1 2 2 1 1   873    0 12.40 -27.15 ----- 27.5 31.1 167.0 37.9 20.6 -22.8 20.5 -22.6 20.3 -21.0 20.7 -22.0
2025-12-24T19:45:51.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:45:51.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:45:51.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.739648
2025-12-24T19:45:51.254 [DEBUG] [Thread-307893] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:45:51.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:45:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:45:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:45:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:45:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:45:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:45:13', tmtdew=14.93, humidity=37.48, cloud=0.0, wind=34.67, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:45:05.587', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:45:51.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:45:51.385 [DEBUG] [Thread-307896] [transport.py] [_log()] starting thread (client mode): 0xf572bd60
2025-12-24T19:45:51.385 [DEBUG] [Thread-307896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:45:51.399 [DEBUG] [Thread-307896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:45:51.399 [INFO] [Thread-307896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] client lang: <none>
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] server lang: <none>
2025-12-24T19:45:51.409 [DEBUG] [Thread-307896] [transport.py] [_log()] kex follows: False
2025-12-24T19:45:51.410 [DEBUG] [Thread-307896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:45:51.410 [DEBUG] [Thread-307896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:45:51.410 [DEBUG] [Thread-307896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:45:51.410 [DEBUG] [Thread-307896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:45:51.410 [DEBUG] [Thread-307896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:45:51.410 [DEBUG] [Thread-307896] [transport.py] [_log()] Compression: none
2025-12-24T19:45:51.410 [DEBUG] [Thread-307896] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:45:51.468 [DEBUG] [Thread-307896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:45:51.468 [DEBUG] [Thread-307896] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:45:51.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:45:51.469 [DEBUG] [Thread-307896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:45:51.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:45:51.527 [DEBUG] [Thread-307896] [transport.py] [_log()] userauth is OK
2025-12-24T19:45:51.527 [DEBUG] [Thread-307896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:45:51.527 [DEBUG] [Thread-307896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:45:51.527 [DEBUG] [Thread-307896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:45:51.527 [DEBUG] [Thread-307896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:45:51.541 [INFO] [Thread-307896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:45:51.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:45:51.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:45:52.340 [DEBUG] [Thread-307896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:45:52.340 [DEBUG] [Thread-307896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:45:52.388 [DEBUG] [Thread-307896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:45:52.388 [DEBUG] [Thread-307896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:45:52.396 [DEBUG] [Thread-307896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:45:52.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:45:52.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:45:52.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:45:52.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:45:52.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:45:52.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:45:52.429 [DEBUG] [Thread-307896] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:46:04.116 [DEBUG] [Thread-307898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:46:11.402 [DEBUG] [Thread-307899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:46:19.348 [DEBUG] [Thread-307900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:46:22.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:46:22.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:46:22.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:46:23.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 45, 46), 14.91, 37.53, 0.0, 35.91, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:46:23.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:45:46
2025-12-24T19:46:24.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:46:24.249 [DEBUG] [Thread-307901] [transport.py] [_log()] starting thread (client mode): 0xf57abe80
2025-12-24T19:46:24.250 [DEBUG] [Thread-307901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:46:24.261 [DEBUG] [Thread-307901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:46:24.261 [INFO] [Thread-307901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] client lang: <none>
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] server lang: <none>
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] kex follows: False
2025-12-24T19:46:24.266 [DEBUG] [Thread-307901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:46:24.267 [DEBUG] [Thread-307901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:46:24.267 [DEBUG] [Thread-307901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:46:24.267 [DEBUG] [Thread-307901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:46:24.268 [DEBUG] [Thread-307901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:46:24.268 [DEBUG] [Thread-307901] [transport.py] [_log()] Compression: none
2025-12-24T19:46:24.268 [DEBUG] [Thread-307901] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:46:24.300 [DEBUG] [Thread-307901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:46:24.303 [DEBUG] [Thread-307901] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:46:24.304 [DEBUG] [Thread-307901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:46:24.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:46:24.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:46:24.308 [DEBUG] [Thread-307901] [transport.py] [_log()] userauth is OK
2025-12-24T19:46:24.308 [DEBUG] [Thread-307901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:46:24.308 [DEBUG] [Thread-307901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:46:24.308 [DEBUG] [Thread-307901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:46:24.308 [DEBUG] [Thread-307901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:46:24.327 [INFO] [Thread-307901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:46:24.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:46:24.988 [DEBUG] [Thread-307901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:46:24.989 [DEBUG] [Thread-307901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:46:24.990 [DEBUG] [Thread-307901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:46:25.029 [DEBUG] [Thread-307901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:46:25.029 [DEBUG] [Thread-307901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:46:25.032 [DEBUG] [Thread-307901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:46:25.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:46:25.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:46:25.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:46:25.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:46:25.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:46:25.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:46:25.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:46:25.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:46:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:46:25.063 [DEBUG] [Thread-307901] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:46:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.739996 -999.00  +19.70  22.85     42   +6.70 1 2 1 1 1   872    0 12.43 -30.34 ----- 27.0 22.9 165.6 38.7 20.6 -23.0 20.5 -22.5 20.3 -21.1 20.6 -22.0
2025-12-24T19:46:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:46:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:46:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.739996
2025-12-24T19:46:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:46:25.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:46:25.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:46:25.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:46:25.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:46:25.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:45:46', tmtdew=14.91, humidity=37.53, cloud=0.0, wind=35.91, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:45:35.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:46:25.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:46:25.186 [DEBUG] [Thread-307904] [transport.py] [_log()] starting thread (client mode): 0xf57aaec0
2025-12-24T19:46:25.186 [DEBUG] [Thread-307904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:46:25.201 [DEBUG] [Thread-307904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:46:25.201 [INFO] [Thread-307904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:46:25.209 [DEBUG] [Thread-307904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:46:25.209 [DEBUG] [Thread-307904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:46:25.209 [DEBUG] [Thread-307904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:46:25.209 [DEBUG] [Thread-307904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:46:25.209 [DEBUG] [Thread-307904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:46:25.209 [DEBUG] [Thread-307904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] client lang: <none>
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] server lang: <none>
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] kex follows: False
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] Compression: none
2025-12-24T19:46:25.210 [DEBUG] [Thread-307904] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:46:25.274 [DEBUG] [Thread-307904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:46:25.275 [DEBUG] [Thread-307904] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:46:25.275 [DEBUG] [Thread-307904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:46:25.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:46:25.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:46:25.332 [DEBUG] [Thread-307904] [transport.py] [_log()] userauth is OK
2025-12-24T19:46:25.332 [DEBUG] [Thread-307904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:46:25.332 [DEBUG] [Thread-307904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:46:25.332 [DEBUG] [Thread-307904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:46:25.332 [DEBUG] [Thread-307904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:46:25.356 [INFO] [Thread-307904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:46:25.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:46:25.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:46:26.185 [DEBUG] [Thread-307904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:46:26.185 [DEBUG] [Thread-307904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:46:26.233 [DEBUG] [Thread-307904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:46:26.233 [DEBUG] [Thread-307904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:46:26.242 [DEBUG] [Thread-307904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:46:26.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:46:26.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:46:26.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:46:26.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:46:26.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:46:26.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:46:26.280 [DEBUG] [Thread-307904] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:46:34.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:46:34.264 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:46:34.438 [DEBUG] [Thread-307906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:46:49.626 [DEBUG] [Thread-307907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:46:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:46:56.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:46:56.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:46:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 46, 20), 14.91, 37.51, 0.0, 31.74, 19.79, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:46:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:46:20
2025-12-24T19:46:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:46:57.617 [DEBUG] [Thread-307908] [transport.py] [_log()] starting thread (client mode): 0xf8188d90
2025-12-24T19:46:57.618 [DEBUG] [Thread-307908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:46:57.633 [DEBUG] [Thread-307908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:46:57.633 [INFO] [Thread-307908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] client lang: <none>
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] server lang: <none>
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] kex follows: False
2025-12-24T19:46:57.636 [DEBUG] [Thread-307908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:46:57.637 [DEBUG] [Thread-307908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:46:57.637 [DEBUG] [Thread-307908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:46:57.637 [DEBUG] [Thread-307908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:46:57.637 [DEBUG] [Thread-307908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:46:57.637 [DEBUG] [Thread-307908] [transport.py] [_log()] Compression: none
2025-12-24T19:46:57.637 [DEBUG] [Thread-307908] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:46:57.667 [DEBUG] [Thread-307908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:46:57.671 [DEBUG] [Thread-307908] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:46:57.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:46:57.673 [DEBUG] [Thread-307908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:46:57.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:46:57.675 [DEBUG] [Thread-307908] [transport.py] [_log()] userauth is OK
2025-12-24T19:46:57.675 [DEBUG] [Thread-307908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:46:57.675 [DEBUG] [Thread-307908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:46:57.675 [DEBUG] [Thread-307908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:46:57.675 [DEBUG] [Thread-307908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:46:57.705 [INFO] [Thread-307908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:46:57.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:46:58.397 [DEBUG] [Thread-307908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:46:58.398 [DEBUG] [Thread-307908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:46:58.399 [DEBUG] [Thread-307908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:46:58.437 [DEBUG] [Thread-307908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:46:58.437 [DEBUG] [Thread-307908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:46:58.440 [DEBUG] [Thread-307908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:46:58.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:46:58.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:46:58.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:46:58.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:46:58.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:46:58.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:46:58.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:46:58.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:46:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:46:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.740343 -999.00  +19.70  24.66     42   +6.70 1 2 1 1 1   870    0 12.17 -27.13 ----- 25.1 24.7 164.4 35.5 20.6 -22.8 20.5 -22.5 20.3 -21.0 20.6 -22.0
2025-12-24T19:46:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:46:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:46:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.740343
2025-12-24T19:46:58.466 [DEBUG] [Thread-307908] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:46:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:46:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:46:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:46:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:46:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:46:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:46:20', tmtdew=14.91, humidity=37.51, cloud=0.0, wind=31.74, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:46:05.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:46:58.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:46:58.596 [DEBUG] [Thread-307911] [transport.py] [_log()] starting thread (client mode): 0xf8189870
2025-12-24T19:46:58.596 [DEBUG] [Thread-307911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:46:58.611 [DEBUG] [Thread-307911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:46:58.611 [INFO] [Thread-307911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] client lang: <none>
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] server lang: <none>
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] kex follows: False
2025-12-24T19:46:58.619 [DEBUG] [Thread-307911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:46:58.620 [DEBUG] [Thread-307911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:46:58.620 [DEBUG] [Thread-307911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:46:58.620 [DEBUG] [Thread-307911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:46:58.620 [DEBUG] [Thread-307911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:46:58.620 [DEBUG] [Thread-307911] [transport.py] [_log()] Compression: none
2025-12-24T19:46:58.620 [DEBUG] [Thread-307911] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:46:58.679 [DEBUG] [Thread-307911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:46:58.679 [DEBUG] [Thread-307911] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:46:58.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:46:58.680 [DEBUG] [Thread-307911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:46:58.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:46:58.735 [DEBUG] [Thread-307911] [transport.py] [_log()] userauth is OK
2025-12-24T19:46:58.735 [DEBUG] [Thread-307911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:46:58.735 [DEBUG] [Thread-307911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:46:58.735 [DEBUG] [Thread-307911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:46:58.736 [DEBUG] [Thread-307911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:46:58.755 [INFO] [Thread-307911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:46:58.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:46:58.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:46:59.582 [DEBUG] [Thread-307911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:46:59.583 [DEBUG] [Thread-307911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:46:59.630 [DEBUG] [Thread-307911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:46:59.631 [DEBUG] [Thread-307911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:46:59.639 [DEBUG] [Thread-307911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:46:59.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:46:59.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:46:59.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:46:59.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:46:59.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:46:59.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:46:59.677 [DEBUG] [Thread-307911] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:47:04.753 [DEBUG] [Thread-307913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:47:11.767 [DEBUG] [Thread-307914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:47:19.932 [DEBUG] [Thread-307915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:47:29.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:47:29.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:47:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:47:30.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 46, 54), 14.91, 37.53, 0.0, 31.37, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:47:30.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:46:54
2025-12-24T19:47:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:47:31.053 [DEBUG] [Thread-307916] [transport.py] [_log()] starting thread (client mode): 0xf57ab490
2025-12-24T19:47:31.053 [DEBUG] [Thread-307916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:47:31.061 [DEBUG] [Thread-307916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:47:31.061 [INFO] [Thread-307916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:47:31.066 [DEBUG] [Thread-307916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] client lang: <none>
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] server lang: <none>
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] kex follows: False
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:47:31.067 [DEBUG] [Thread-307916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:47:31.068 [DEBUG] [Thread-307916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:47:31.068 [DEBUG] [Thread-307916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:47:31.068 [DEBUG] [Thread-307916] [transport.py] [_log()] Compression: none
2025-12-24T19:47:31.068 [DEBUG] [Thread-307916] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:47:31.100 [DEBUG] [Thread-307916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:47:31.103 [DEBUG] [Thread-307916] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:47:31.105 [DEBUG] [Thread-307916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:47:31.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:47:31.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:47:31.108 [DEBUG] [Thread-307916] [transport.py] [_log()] userauth is OK
2025-12-24T19:47:31.108 [DEBUG] [Thread-307916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:47:31.108 [DEBUG] [Thread-307916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:47:31.108 [DEBUG] [Thread-307916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:47:31.108 [DEBUG] [Thread-307916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:47:31.127 [INFO] [Thread-307916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:47:31.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:47:31.947 [DEBUG] [Thread-307916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:47:31.948 [DEBUG] [Thread-307916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:47:31.949 [DEBUG] [Thread-307916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:47:31.988 [DEBUG] [Thread-307916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:47:31.988 [DEBUG] [Thread-307916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:47:31.991 [DEBUG] [Thread-307916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:47:32.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:47:32.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:47:32.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:47:32.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:47:32.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:47:32.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:47:32.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:47:32.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:47:32.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:47:32.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.740690 -999.00  +19.70  24.84     42   +6.70 1 2 1 1 1   869    0 12.26 -25.13 ----- 30.3 24.8 162.6 33.2 20.6 -22.9 20.4 -22.6 20.3 -21.1 20.6 -22.0
2025-12-24T19:47:32.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:47:32.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:47:32.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.740690
2025-12-24T19:47:32.029 [DEBUG] [Thread-307916] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:47:32.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:47:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:47:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:47:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:47:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:47:32.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:46:54', tmtdew=14.91, humidity=37.53, cloud=0.0, wind=31.37, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:46:35.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:47:32.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:47:32.149 [DEBUG] [Thread-307919] [transport.py] [_log()] starting thread (client mode): 0xf5729ed0
2025-12-24T19:47:32.149 [DEBUG] [Thread-307919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:47:32.164 [DEBUG] [Thread-307919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:47:32.164 [INFO] [Thread-307919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:47:32.172 [DEBUG] [Thread-307919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:47:32.172 [DEBUG] [Thread-307919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:47:32.172 [DEBUG] [Thread-307919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:47:32.172 [DEBUG] [Thread-307919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:47:32.172 [DEBUG] [Thread-307919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] client lang: <none>
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] server lang: <none>
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] kex follows: False
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:47:32.173 [DEBUG] [Thread-307919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:47:32.174 [DEBUG] [Thread-307919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:47:32.174 [DEBUG] [Thread-307919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:47:32.174 [DEBUG] [Thread-307919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:47:32.174 [DEBUG] [Thread-307919] [transport.py] [_log()] Compression: none
2025-12-24T19:47:32.174 [DEBUG] [Thread-307919] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:47:32.236 [DEBUG] [Thread-307919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:47:32.237 [DEBUG] [Thread-307919] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:47:32.238 [DEBUG] [Thread-307919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:47:32.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:47:32.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:47:32.296 [DEBUG] [Thread-307919] [transport.py] [_log()] userauth is OK
2025-12-24T19:47:32.297 [DEBUG] [Thread-307919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:47:32.297 [DEBUG] [Thread-307919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:47:32.298 [DEBUG] [Thread-307919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:47:32.298 [DEBUG] [Thread-307919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:47:32.319 [INFO] [Thread-307919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:47:32.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:47:32.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:47:33.120 [DEBUG] [Thread-307919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:47:33.120 [DEBUG] [Thread-307919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:47:33.167 [DEBUG] [Thread-307919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:47:33.167 [DEBUG] [Thread-307919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:47:33.175 [DEBUG] [Thread-307919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:47:33.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:47:33.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:47: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') -> 00000000
2025-12-24T19:47:33.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:47:33.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:47:33.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:47:33.212 [DEBUG] [Thread-307919] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:47:35.037 [DEBUG] [Thread-307921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:47:40.069 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:47:40.070 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:47:50.206 [DEBUG] [Thread-307922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:48:03.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:48:03.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:48:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:48:05.278 [DEBUG] [Thread-307923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:48:06.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 47, 27), 14.88, 37.58, 0.0, 32.11, 19.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:48:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:47:27
2025-12-24T19:48:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:48:07.033 [DEBUG] [Thread-307924] [transport.py] [_log()] starting thread (client mode): 0xf572a8f0
2025-12-24T19:48:07.034 [DEBUG] [Thread-307924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:48:07.042 [DEBUG] [Thread-307924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:48:07.042 [INFO] [Thread-307924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] client lang: <none>
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] server lang: <none>
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] kex follows: False
2025-12-24T19:48:07.047 [DEBUG] [Thread-307924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:48:07.048 [DEBUG] [Thread-307924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:48:07.048 [DEBUG] [Thread-307924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:48:07.048 [DEBUG] [Thread-307924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:48:07.048 [DEBUG] [Thread-307924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:48:07.048 [DEBUG] [Thread-307924] [transport.py] [_log()] Compression: none
2025-12-24T19:48:07.048 [DEBUG] [Thread-307924] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:48:07.077 [DEBUG] [Thread-307924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:48:07.082 [DEBUG] [Thread-307924] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:48:07.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:48:07.085 [DEBUG] [Thread-307924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:48:07.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:48:07.088 [DEBUG] [Thread-307924] [transport.py] [_log()] userauth is OK
2025-12-24T19:48:07.088 [DEBUG] [Thread-307924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:48:07.088 [DEBUG] [Thread-307924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:48:07.088 [DEBUG] [Thread-307924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:48:07.088 [DEBUG] [Thread-307924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:48:07.107 [INFO] [Thread-307924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:48:07.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:48:07.762 [DEBUG] [Thread-307924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:48:07.762 [DEBUG] [Thread-307924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:48:07.763 [DEBUG] [Thread-307924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:48:07.803 [DEBUG] [Thread-307924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:48:07.803 [DEBUG] [Thread-307924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:48:07.805 [DEBUG] [Thread-307924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:48:07.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:48:07.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:48:07.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:48:07.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:48:07.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:48:07.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:48:07.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:48:07.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:48:07.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:48:07.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.741385 -999.00  +19.70  26.96     42   +6.70 1 2 1 1 1   865    0 12.59 -19.91 ----- 25.0 27.0 158.8 32.6 20.5 -22.8 20.4 -22.3 20.2 -21.0 20.6 -21.8
2025-12-24T19:48:07.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:48:07.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:48:07.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.741385
2025-12-24T19:48:07.845 [DEBUG] [Thread-307924] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:48:07.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:48:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:48:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:48:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:48:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:48:07.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:47:27', tmtdew=14.88, humidity=37.58, cloud=0.0, wind=32.11, temperature=19.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:47:35.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:48:07.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:48:07.978 [DEBUG] [Thread-307927] [transport.py] [_log()] starting thread (client mode): 0xf81884f0
2025-12-24T19:48:07.979 [DEBUG] [Thread-307927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:48:07.993 [DEBUG] [Thread-307927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:48:07.993 [INFO] [Thread-307927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:48:08.001 [DEBUG] [Thread-307927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] client lang: <none>
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] server lang: <none>
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] kex follows: False
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] Compression: none
2025-12-24T19:48:08.002 [DEBUG] [Thread-307927] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:48:08.059 [DEBUG] [Thread-307927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:48:08.059 [DEBUG] [Thread-307927] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:48:08.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:48:08.061 [DEBUG] [Thread-307927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:48:08.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:48:08.115 [DEBUG] [Thread-307927] [transport.py] [_log()] userauth is OK
2025-12-24T19:48:08.115 [DEBUG] [Thread-307927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:48:08.115 [DEBUG] [Thread-307927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:48:08.116 [DEBUG] [Thread-307927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:48:08.116 [DEBUG] [Thread-307927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:48:08.139 [INFO] [Thread-307927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:48:08.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:48:08.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:48:09.046 [DEBUG] [Thread-307927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:48:09.047 [DEBUG] [Thread-307927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:48:09.095 [DEBUG] [Thread-307927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:48:09.095 [DEBUG] [Thread-307927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:48:09.103 [DEBUG] [Thread-307927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:48:09.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:48:09.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:48:09.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
2025-12-24T19:48:09.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:48:09.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:48:09.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:48:09.138 [DEBUG] [Thread-307927] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:48:12.016 [DEBUG] [Thread-307929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:48:20.397 [DEBUG] [Thread-307930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:48:35.634 [DEBUG] [Thread-307931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:48:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:48:39.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:48:39.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:48:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 48), 14.89, 37.54, 0.0, 33.45, 19.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:48:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:48:00
2025-12-24T19:48:40.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:48:40.686 [DEBUG] [Thread-307932] [transport.py] [_log()] starting thread (client mode): 0xf57aa680
2025-12-24T19:48:40.686 [DEBUG] [Thread-307932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:48:40.699 [DEBUG] [Thread-307932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:48:40.699 [INFO] [Thread-307932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:48:40.709 [DEBUG] [Thread-307932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] client lang: <none>
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] server lang: <none>
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] kex follows: False
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:48:40.710 [DEBUG] [Thread-307932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:48:40.711 [DEBUG] [Thread-307932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:48:40.711 [DEBUG] [Thread-307932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:48:40.711 [DEBUG] [Thread-307932] [transport.py] [_log()] Compression: none
2025-12-24T19:48:40.711 [DEBUG] [Thread-307932] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:48:40.740 [DEBUG] [Thread-307932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:48:40.743 [DEBUG] [Thread-307932] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:48:40.744 [DEBUG] [Thread-307932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:48:40.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:48:40.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:48:40.748 [DEBUG] [Thread-307932] [transport.py] [_log()] userauth is OK
2025-12-24T19:48:40.748 [DEBUG] [Thread-307932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:48:40.748 [DEBUG] [Thread-307932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:48:40.748 [DEBUG] [Thread-307932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:48:40.748 [DEBUG] [Thread-307932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:48:40.765 [INFO] [Thread-307932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:48:40.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:48:41.417 [DEBUG] [Thread-307932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:48:41.417 [DEBUG] [Thread-307932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:48:41.419 [DEBUG] [Thread-307932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:48:41.458 [DEBUG] [Thread-307932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:48:41.458 [DEBUG] [Thread-307932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:48:41.462 [DEBUG] [Thread-307932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:48:41.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:48:41.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:48:41.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:48:41.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:48:41.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:48:41.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:48:41.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:48:41.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:48:41.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:48:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.741732 -999.00  +19.60  25.11     42   +6.70 1 2 1 1 1   863    0 12.31 -18.57 ----- 19.2 25.1 168.7 33.2 20.5 -22.8 20.4 -22.3 20.2 -20.8 20.5 -21.8
2025-12-24T19:48:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:48:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:48:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.741732
2025-12-24T19:48:41.502 [DEBUG] [Thread-307932] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:48:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:48:41.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:48:41.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:48:41.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:48:41.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:48:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:48:00', tmtdew=14.89, humidity=37.54, cloud=0.0, wind=33.45, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:48:05.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:48:41.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:48:41.608 [DEBUG] [Thread-307935] [transport.py] [_log()] starting thread (client mode): 0xf818a6b0
2025-12-24T19:48:41.608 [DEBUG] [Thread-307935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:48:41.624 [DEBUG] [Thread-307935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:48:41.624 [INFO] [Thread-307935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:48:41.631 [DEBUG] [Thread-307935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:48:41.631 [DEBUG] [Thread-307935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:48:41.631 [DEBUG] [Thread-307935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:48:41.631 [DEBUG] [Thread-307935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] client lang: <none>
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] server lang: <none>
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] kex follows: False
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] Compression: none
2025-12-24T19:48:41.632 [DEBUG] [Thread-307935] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:48:41.690 [DEBUG] [Thread-307935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:48:41.690 [DEBUG] [Thread-307935] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:48:41.690 [DEBUG] [Thread-307935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:48:41.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:48:41.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:48:41.748 [DEBUG] [Thread-307935] [transport.py] [_log()] userauth is OK
2025-12-24T19:48:41.748 [DEBUG] [Thread-307935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:48:41.748 [DEBUG] [Thread-307935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:48:41.748 [DEBUG] [Thread-307935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:48:41.748 [DEBUG] [Thread-307935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:48:41.761 [INFO] [Thread-307935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:48:41.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:48:41.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:48:42.640 [DEBUG] [Thread-307935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:48:42.640 [DEBUG] [Thread-307935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:48:42.688 [DEBUG] [Thread-307935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:48:42.688 [DEBUG] [Thread-307935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:48:42.698 [DEBUG] [Thread-307935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:48:42.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:48:42.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:48:42.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:48:42.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:48:42.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:48:42.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:48:42.733 [DEBUG] [Thread-307935] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:48:47.357 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:48:47.370 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:48:50.753 [DEBUG] [Thread-307937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:49:06.027 [DEBUG] [Thread-307938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:49:12.224 [DEBUG] [Thread-307939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:49:12.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:49:12.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:49:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:49:16.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 48, 37), 14.92, 37.48, 0.0, 30.19, 19.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:49:16.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:48:37
2025-12-24T19:49:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:49:16.629 [DEBUG] [Thread-307940] [transport.py] [_log()] starting thread (client mode): 0xf57abeb0
2025-12-24T19:49:16.629 [DEBUG] [Thread-307940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:49:16.637 [DEBUG] [Thread-307940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:49:16.638 [INFO] [Thread-307940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:49:16.642 [DEBUG] [Thread-307940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:49:16.642 [DEBUG] [Thread-307940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] client lang: <none>
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] server lang: <none>
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] kex follows: False
2025-12-24T19:49:16.643 [DEBUG] [Thread-307940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:49:16.644 [DEBUG] [Thread-307940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:49:16.644 [DEBUG] [Thread-307940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:49:16.644 [DEBUG] [Thread-307940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:49:16.644 [DEBUG] [Thread-307940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:49:16.644 [DEBUG] [Thread-307940] [transport.py] [_log()] Compression: none
2025-12-24T19:49:16.644 [DEBUG] [Thread-307940] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:49:16.667 [DEBUG] [Thread-307940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:49:16.671 [DEBUG] [Thread-307940] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:49:16.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:49:16.673 [DEBUG] [Thread-307940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:49:16.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:49:16.675 [DEBUG] [Thread-307940] [transport.py] [_log()] userauth is OK
2025-12-24T19:49:16.675 [DEBUG] [Thread-307940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:49:16.675 [DEBUG] [Thread-307940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:49:16.676 [DEBUG] [Thread-307940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:49:16.676 [DEBUG] [Thread-307940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:49:16.694 [INFO] [Thread-307940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:49:16.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:49:17.507 [DEBUG] [Thread-307940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:49:17.507 [DEBUG] [Thread-307940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:49:17.508 [DEBUG] [Thread-307940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:49:17.549 [DEBUG] [Thread-307940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:49:17.549 [DEBUG] [Thread-307940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:49:17.554 [DEBUG] [Thread-307940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:49:17.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:49:17.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:49:17.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:49:17.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:49:17.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:49:17.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:49:17.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:49:17.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:49:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:49:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.742079 -999.00  +19.60  20.12     42   +6.70 1 2 1 1 1   860    0 12.59 -16.49 ----- 22.0 20.1 170.8 30.9 20.4 -22.7 20.3 -22.4 20.2 -20.8 20.5 -21.8
2025-12-24T19:49:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:49:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:49:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.742079
2025-12-24T19:49:17.590 [DEBUG] [Thread-307940] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:49:17.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:49:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:49:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:49:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:49:17.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:49:17.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:48:37', tmtdew=14.92, humidity=37.48, cloud=0.0, wind=30.19, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:48:35.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:49:17.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:49:17.709 [DEBUG] [Thread-307943] [transport.py] [_log()] starting thread (client mode): 0xf57a8400
2025-12-24T19:49:17.709 [DEBUG] [Thread-307943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:49:17.723 [DEBUG] [Thread-307943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:49:17.723 [INFO] [Thread-307943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:49:17.731 [DEBUG] [Thread-307943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:49:17.731 [DEBUG] [Thread-307943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:49:17.731 [DEBUG] [Thread-307943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:49:17.731 [DEBUG] [Thread-307943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:49:17.731 [DEBUG] [Thread-307943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:49:17.731 [DEBUG] [Thread-307943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:49:17.731 [DEBUG] [Thread-307943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:49:17.731 [DEBUG] [Thread-307943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] client lang: <none>
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] server lang: <none>
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] kex follows: False
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] Compression: none
2025-12-24T19:49:17.732 [DEBUG] [Thread-307943] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:49:17.791 [DEBUG] [Thread-307943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:49:17.792 [DEBUG] [Thread-307943] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:49:17.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:49:17.793 [DEBUG] [Thread-307943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:49:17.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:49:17.848 [DEBUG] [Thread-307943] [transport.py] [_log()] userauth is OK
2025-12-24T19:49:17.848 [DEBUG] [Thread-307943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:49:17.848 [DEBUG] [Thread-307943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:49:17.848 [DEBUG] [Thread-307943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:49:17.848 [DEBUG] [Thread-307943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:49:17.867 [INFO] [Thread-307943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:49:17.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:49:17.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:49:18.693 [DEBUG] [Thread-307943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:49:18.693 [DEBUG] [Thread-307943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:49:18.741 [DEBUG] [Thread-307943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:49:18.741 [DEBUG] [Thread-307943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:49:18.751 [DEBUG] [Thread-307943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:49:18.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:49: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')
2025-12-24T19:49:18.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:49:18.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:49:18.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:49:18.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:49:18.790 [DEBUG] [Thread-307943] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:49:21.156 [DEBUG] [Thread-307945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:49:36.391 [DEBUG] [Thread-307946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:49:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:49:48.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:49:48.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:49:50.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 49, 10), 14.88, 37.58, 0.0, 29.34, 19.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:49:50.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:49:10
2025-12-24T19:49:50.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:49:50.577 [DEBUG] [Thread-307947] [transport.py] [_log()] starting thread (client mode): 0xf81e75b0
2025-12-24T19:49:50.577 [DEBUG] [Thread-307947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:49:50.587 [DEBUG] [Thread-307947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:49:50.587 [INFO] [Thread-307947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:49:50.590 [DEBUG] [Thread-307947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] client lang: <none>
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] server lang: <none>
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] kex follows: False
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] Compression: none
2025-12-24T19:49:50.591 [DEBUG] [Thread-307947] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:49:50.622 [DEBUG] [Thread-307947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:49:50.624 [DEBUG] [Thread-307947] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:49:50.625 [DEBUG] [Thread-307947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:49:50.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:49:50.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:49:50.665 [DEBUG] [Thread-307947] [transport.py] [_log()] userauth is OK
2025-12-24T19:49:50.665 [DEBUG] [Thread-307947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:49:50.665 [DEBUG] [Thread-307947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:49:50.665 [DEBUG] [Thread-307947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:49:50.665 [DEBUG] [Thread-307947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:49:50.694 [INFO] [Thread-307947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:49:50.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:49:51.368 [DEBUG] [Thread-307947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:49:51.368 [DEBUG] [Thread-307947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:49:51.369 [DEBUG] [Thread-307947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:49:51.410 [DEBUG] [Thread-307947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:49:51.410 [DEBUG] [Thread-307947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:49:51.414 [DEBUG] [Thread-307947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:49:51.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:49:51.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:49:51.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:49:51.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:49:51.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:49:51.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:49:51.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:49:51.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:49:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:49:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.742426 -999.00  +19.60  25.82     43   +6.70 1 2 1 1 1   858    0 12.51 -16.17 ----- 33.9 25.8 165.8 32.7 20.4 -22.7 20.3 -22.7 20.2 -21.0 20.5 -21.8
2025-12-24T19:49:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:49:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:49:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.742426
2025-12-24T19:49:51.455 [DEBUG] [Thread-307947] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:49:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:49:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:49:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:49:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:49:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:49:51.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:49:10', tmtdew=14.88, humidity=37.58, cloud=0.0, wind=29.34, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:49:05.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:49:51.480 [DEBUG] [Thread-307950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:49:51.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:49:51.561 [DEBUG] [Thread-307951] [transport.py] [_log()] starting thread (client mode): 0xf81e7100
2025-12-24T19:49:51.561 [DEBUG] [Thread-307951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:49:51.575 [DEBUG] [Thread-307951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:49:51.575 [INFO] [Thread-307951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] client lang: <none>
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] server lang: <none>
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] kex follows: False
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:49:51.582 [DEBUG] [Thread-307951] [transport.py] [_log()] Compression: none
2025-12-24T19:49:51.583 [DEBUG] [Thread-307951] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:49:51.642 [DEBUG] [Thread-307951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:49:51.642 [DEBUG] [Thread-307951] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:49:51.643 [DEBUG] [Thread-307951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:49:51.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:49:51.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:49:51.699 [DEBUG] [Thread-307951] [transport.py] [_log()] userauth is OK
2025-12-24T19:49:51.699 [DEBUG] [Thread-307951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:49:51.699 [DEBUG] [Thread-307951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:49:51.699 [DEBUG] [Thread-307951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:49:51.699 [DEBUG] [Thread-307951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:49:51.718 [INFO] [Thread-307951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:49:51.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:49:51.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:49:52.581 [DEBUG] [Thread-307951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:49:52.581 [DEBUG] [Thread-307951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:49:52.629 [DEBUG] [Thread-307951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:49:52.629 [DEBUG] [Thread-307951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:49:52.638 [DEBUG] [Thread-307951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:49:52.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:49:52.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:49:52.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:49:52.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:49:52.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:49:52.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:49:52.671 [DEBUG] [Thread-307951] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:49:53.849 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:49:53.851 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:50:06.661 [DEBUG] [Thread-307953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:50:12.545 [DEBUG] [Thread-307954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:50:21.754 [DEBUG] [Thread-307955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:50:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:50:23.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:50: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
2025-12-24T19:50:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 49, 46), 14.89, 37.56, 0.0, 30.9, 19.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:50:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:49:46
2025-12-24T19:50:26.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:50:26.542 [DEBUG] [Thread-307956] [transport.py] [_log()] starting thread (client mode): 0xf57a8910
2025-12-24T19:50:26.543 [DEBUG] [Thread-307956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:50:26.547 [DEBUG] [Thread-307956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:50:26.547 [INFO] [Thread-307956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] client lang: <none>
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] server lang: <none>
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] kex follows: False
2025-12-24T19:50:26.552 [DEBUG] [Thread-307956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:50:26.553 [DEBUG] [Thread-307956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:50:26.553 [DEBUG] [Thread-307956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:50:26.553 [DEBUG] [Thread-307956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:50:26.553 [DEBUG] [Thread-307956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:50:26.553 [DEBUG] [Thread-307956] [transport.py] [_log()] Compression: none
2025-12-24T19:50:26.553 [DEBUG] [Thread-307956] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:50:26.579 [DEBUG] [Thread-307956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:50:26.582 [DEBUG] [Thread-307956] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:50:26.584 [DEBUG] [Thread-307956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:50:26.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:50:26.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:50:26.587 [DEBUG] [Thread-307956] [transport.py] [_log()] userauth is OK
2025-12-24T19:50:26.587 [DEBUG] [Thread-307956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:50:26.587 [DEBUG] [Thread-307956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:50:26.587 [DEBUG] [Thread-307956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:50:26.587 [DEBUG] [Thread-307956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:50:26.606 [INFO] [Thread-307956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:50:26.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:50:27.224 [DEBUG] [Thread-307956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:50:27.224 [DEBUG] [Thread-307956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:50:27.225 [DEBUG] [Thread-307956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:50:27.265 [DEBUG] [Thread-307956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:50:27.266 [DEBUG] [Thread-307956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:50:27.267 [DEBUG] [Thread-307956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:50:27.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:50:27.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:50:27.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:50:27.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:50:27.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:50:27.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:50:27.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:50:27.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:50:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:50:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.743120 -999.00  +19.60  23.39     43   +6.70 1 2 1 1 1   852    0 12.78 -15.80 ----- 21.9 23.4 161.4 38.0 20.4 -22.7 20.3 -22.4 20.1 -20.7 20.4 -21.8
2025-12-24T19:50:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:50:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:50:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.743120
2025-12-24T19:50:27.290 [DEBUG] [Thread-307956] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:50:27.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:50:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:50:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:50:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:50:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:50:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:49:46', tmtdew=14.89, humidity=37.56, cloud=0.0, wind=30.9, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:50:05.568', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:50:27.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:50:27.394 [DEBUG] [Thread-307959] [transport.py] [_log()] starting thread (client mode): 0xf57ab130
2025-12-24T19:50:27.394 [DEBUG] [Thread-307959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:50:27.408 [DEBUG] [Thread-307959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:50:27.408 [INFO] [Thread-307959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:50:27.415 [DEBUG] [Thread-307959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:50:27.415 [DEBUG] [Thread-307959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] client lang: <none>
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] server lang: <none>
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] kex follows: False
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] Compression: none
2025-12-24T19:50:27.416 [DEBUG] [Thread-307959] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:50:27.474 [DEBUG] [Thread-307959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:50:27.474 [DEBUG] [Thread-307959] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:50:27.474 [DEBUG] [Thread-307959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:50:27.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:50:27.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:50:27.532 [DEBUG] [Thread-307959] [transport.py] [_log()] userauth is OK
2025-12-24T19:50:27.532 [DEBUG] [Thread-307959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:50:27.532 [DEBUG] [Thread-307959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:50:27.532 [DEBUG] [Thread-307959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:50:27.532 [DEBUG] [Thread-307959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:50:27.546 [INFO] [Thread-307959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:50:27.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:50:27.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:50:28.401 [DEBUG] [Thread-307959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:50:28.401 [DEBUG] [Thread-307959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:50:28.449 [DEBUG] [Thread-307959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:50:28.449 [DEBUG] [Thread-307959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:50:28.458 [DEBUG] [Thread-307959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:50:28.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:50:28.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:50:28.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:50:28.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:50:28.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:50:28.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:50:28.491 [DEBUG] [Thread-307959] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:50:36.840 [DEBUG] [Thread-307961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:50:52.020 [DEBUG] [Thread-307962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:50:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:50:58.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:50:58.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:50:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 50, 20), 14.87, 37.59, 0.0, 31.0, 19.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:50:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:50:20
2025-12-24T19:50:59.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:50:59.880 [DEBUG] [Thread-307963] [transport.py] [_log()] starting thread (client mode): 0xf57aafe0
2025-12-24T19:50:59.881 [DEBUG] [Thread-307963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:50:59.889 [DEBUG] [Thread-307963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:50:59.889 [INFO] [Thread-307963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] client lang: <none>
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] server lang: <none>
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] kex follows: False
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:50:59.893 [DEBUG] [Thread-307963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:50:59.894 [DEBUG] [Thread-307963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:50:59.894 [DEBUG] [Thread-307963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:50:59.894 [DEBUG] [Thread-307963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:50:59.894 [DEBUG] [Thread-307963] [transport.py] [_log()] Compression: none
2025-12-24T19:50:59.894 [DEBUG] [Thread-307963] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:50:59.922 [DEBUG] [Thread-307963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:50:59.926 [DEBUG] [Thread-307963] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:50:59.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:50:59.927 [DEBUG] [Thread-307963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:50:59.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:50:59.930 [DEBUG] [Thread-307963] [transport.py] [_log()] userauth is OK
2025-12-24T19:50:59.930 [DEBUG] [Thread-307963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:50:59.930 [DEBUG] [Thread-307963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:50:59.930 [DEBUG] [Thread-307963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:50:59.930 [DEBUG] [Thread-307963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:50:59.943 [INFO] [Thread-307963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:50:59.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:51:00.532 [DEBUG] [Thread-307963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:51:00.532 [DEBUG] [Thread-307963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:51:00.533 [DEBUG] [Thread-307963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:51:00.573 [DEBUG] [Thread-307963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:51:00.573 [DEBUG] [Thread-307963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:51:00.576 [DEBUG] [Thread-307963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:51:00.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:51:00.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:51:00.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:51:00.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:51:00.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:51:00.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:51:00.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:51:00.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:51:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:51:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.743468 -999.00  +19.60  20.63     43   +6.80 1 2 1 1 1   849    0 12.62 -15.35 ----- 21.8 20.6 174.2 30.2 20.4 -22.6 20.2 -22.5 20.1 -20.7 20.4 -21.8
2025-12-24T19:51:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:51:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:51:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.743468
2025-12-24T19:51:00.604 [DEBUG] [Thread-307963] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:51:00.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:51:00.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:51:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:51:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:51:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:51:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:50:20', tmtdew=14.87, humidity=37.59, cloud=0.0, wind=31.0, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:50:35.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:51:00.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:51:00.705 [DEBUG] [Thread-307966] [transport.py] [_log()] starting thread (client mode): 0xf81e7100
2025-12-24T19:51:00.705 [DEBUG] [Thread-307966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:51:00.720 [DEBUG] [Thread-307966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:51:00.720 [INFO] [Thread-307966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] client lang: <none>
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] server lang: <none>
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] kex follows: False
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] Compression: none
2025-12-24T19:51:00.728 [DEBUG] [Thread-307966] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:51:00.786 [DEBUG] [Thread-307966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:51:00.787 [DEBUG] [Thread-307966] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:51:00.787 [DEBUG] [Thread-307966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:51:00.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:51:00.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:51:00.843 [DEBUG] [Thread-307966] [transport.py] [_log()] userauth is OK
2025-12-24T19:51:00.843 [DEBUG] [Thread-307966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:51:00.843 [DEBUG] [Thread-307966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:51:00.843 [DEBUG] [Thread-307966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:51:00.843 [DEBUG] [Thread-307966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:51:00.863 [INFO] [Thread-307966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:51:00.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:51:00.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:51:01.762 [DEBUG] [Thread-307966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:51:01.762 [DEBUG] [Thread-307966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:51:01.763 [DEBUG] [Thread-307966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:51:01.763 [DEBUG] [Thread-307966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:51:01.772 [DEBUG] [Thread-307966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:51:01.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:51:01.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:51:01.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:51:01.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:51:01.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:51:01.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:51:01.808 [DEBUG] [Thread-307966] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:51:03.796 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:51:03.800 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:51:07.112 [DEBUG] [Thread-307968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:51:12.865 [DEBUG] [Thread-307969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:51:22.294 [DEBUG] [Thread-307970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:51:31.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:51:31.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:51:31.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
2025-12-24T19:51:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 50, 56), 14.82, 37.61, 0.0, 26.77, 19.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:51:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:50:56
2025-12-24T19:51:33.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:51:33.388 [DEBUG] [Thread-307971] [transport.py] [_log()] starting thread (client mode): 0xf81e68c0
2025-12-24T19:51:33.389 [DEBUG] [Thread-307971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:51:33.390 [DEBUG] [Thread-307971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:51:33.391 [INFO] [Thread-307971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:51:33.404 [DEBUG] [Thread-307971] [transport.py] [_log()] client lang: <none>
2025-12-24T19:51:33.405 [DEBUG] [Thread-307971] [transport.py] [_log()] server lang: <none>
2025-12-24T19:51:33.405 [DEBUG] [Thread-307971] [transport.py] [_log()] kex follows: False
2025-12-24T19:51:33.405 [DEBUG] [Thread-307971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:51:33.405 [DEBUG] [Thread-307971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:51:33.405 [DEBUG] [Thread-307971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:51:33.405 [DEBUG] [Thread-307971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:51:33.406 [DEBUG] [Thread-307971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:51:33.406 [DEBUG] [Thread-307971] [transport.py] [_log()] Compression: none
2025-12-24T19:51:33.406 [DEBUG] [Thread-307971] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:51:33.434 [DEBUG] [Thread-307971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:51:33.437 [DEBUG] [Thread-307971] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:51:33.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:51:33.441 [DEBUG] [Thread-307971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:51:33.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:51:33.446 [DEBUG] [Thread-307971] [transport.py] [_log()] userauth is OK
2025-12-24T19:51:33.446 [DEBUG] [Thread-307971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:51:33.446 [DEBUG] [Thread-307971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:51:33.446 [DEBUG] [Thread-307971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:51:33.446 [DEBUG] [Thread-307971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:51:33.468 [INFO] [Thread-307971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:51:33.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:51:34.071 [DEBUG] [Thread-307971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:51:34.071 [DEBUG] [Thread-307971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:51:34.071 [DEBUG] [Thread-307971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:51:34.113 [DEBUG] [Thread-307971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:51:34.113 [DEBUG] [Thread-307971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:51:34.115 [DEBUG] [Thread-307971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:51:34.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:51:34.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:51:34.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:51:34.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:51:34.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:51:34.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:51:34.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:51:34.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:51:34.138 [DEBUG] [Thread-307971] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:51:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:51:34.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.743815 -999.00  +19.60  26.04     43   +6.80 1 2 1 1 1   845    0 12.47 -16.42 ----- 34.5 26.0 173.0 30.9 20.4 -22.7 20.2 -22.6 20.1 -21.0 20.4 -21.8
2025-12-24T19:51:34.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:51:34.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:51:34.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.743815
2025-12-24T19:51:34.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:51:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:51:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:51:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:51:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:51:34.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:50:56', tmtdew=14.82, humidity=37.61, cloud=0.0, wind=26.77, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:51:05.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:51:34.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:51:34.251 [DEBUG] [Thread-307974] [transport.py] [_log()] starting thread (client mode): 0xf57a8550
2025-12-24T19:51:34.251 [DEBUG] [Thread-307974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:51:34.267 [DEBUG] [Thread-307974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:51:34.267 [INFO] [Thread-307974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] client lang: <none>
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] server lang: <none>
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] kex follows: False
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] Compression: none
2025-12-24T19:51:34.275 [DEBUG] [Thread-307974] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:51:34.329 [DEBUG] [Thread-307974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:51:34.330 [DEBUG] [Thread-307974] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:51:34.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:51:34.330 [DEBUG] [Thread-307974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:51:34.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:51:34.387 [DEBUG] [Thread-307974] [transport.py] [_log()] userauth is OK
2025-12-24T19:51:34.387 [DEBUG] [Thread-307974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:51:34.387 [DEBUG] [Thread-307974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:51:34.387 [DEBUG] [Thread-307974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:51:34.387 [DEBUG] [Thread-307974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:51:34.402 [INFO] [Thread-307974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:51:34.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:51:34.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:51:35.232 [DEBUG] [Thread-307974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:51:35.232 [DEBUG] [Thread-307974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:51:35.280 [DEBUG] [Thread-307974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:51:35.280 [DEBUG] [Thread-307974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:51:35.290 [DEBUG] [Thread-307974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:51:35.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:51:35.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:51:35.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') -> 00000000
2025-12-24T19:51:35.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:51:35.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:51:35.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:51:35.328 [DEBUG] [Thread-307974] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:51:37.426 [DEBUG] [Thread-307976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:51:52.595 [DEBUG] [Thread-307977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:52:05.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:52:05.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:52:05.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:52:06.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 51, 29), 14.81, 37.63, 0.0, 27.05, 19.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:52:06.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:51:29
2025-12-24T19:52:06.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:52:06.911 [DEBUG] [Thread-307978] [transport.py] [_log()] starting thread (client mode): 0xf572f0d0
2025-12-24T19:52:06.912 [DEBUG] [Thread-307978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:52:06.918 [DEBUG] [Thread-307978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:52:06.918 [INFO] [Thread-307978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] client lang: <none>
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] server lang: <none>
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] kex follows: False
2025-12-24T19:52:06.923 [DEBUG] [Thread-307978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:52:06.924 [DEBUG] [Thread-307978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:52:06.924 [DEBUG] [Thread-307978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:52:06.924 [DEBUG] [Thread-307978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:52:06.924 [DEBUG] [Thread-307978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:52:06.924 [DEBUG] [Thread-307978] [transport.py] [_log()] Compression: none
2025-12-24T19:52:06.924 [DEBUG] [Thread-307978] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:52:06.955 [DEBUG] [Thread-307978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:52:06.958 [DEBUG] [Thread-307978] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:52:06.959 [DEBUG] [Thread-307978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:52:06.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:52:06.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:52:06.962 [DEBUG] [Thread-307978] [transport.py] [_log()] userauth is OK
2025-12-24T19:52:06.962 [DEBUG] [Thread-307978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:52:06.962 [DEBUG] [Thread-307978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:52:06.962 [DEBUG] [Thread-307978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:52:06.962 [DEBUG] [Thread-307978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:52:06.980 [INFO] [Thread-307978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:52:06.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:52:07.575 [DEBUG] [Thread-307978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:52:07.575 [DEBUG] [Thread-307978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:52:07.576 [DEBUG] [Thread-307978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:52:07.617 [DEBUG] [Thread-307978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:52:07.617 [DEBUG] [Thread-307978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:52:07.619 [DEBUG] [Thread-307978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:52:07.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:52:07.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:52:07.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:52:07.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:52:07.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:52:07.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:52:07.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:52:07.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:52:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:52:07.639 [DEBUG] [Thread-307978] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:52:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.744162 -999.00  +19.60  27.40     43   +6.80 1 2 1 1 1   841    0 12.88 -16.85 ----- 27.5 27.4 184.4 40.7 20.3 -22.6 20.2 -22.6 20.1 -20.9 20.3 -21.8
2025-12-24T19:52:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:52:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:52:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.744162
2025-12-24T19:52:07.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:52:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:52:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:52:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:52:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:52:07.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:51:29', tmtdew=14.81, humidity=37.63, cloud=0.0, wind=27.05, temperature=19.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:51:35.597', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:52:07.676 [DEBUG] [Thread-307981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:52:07.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:52:07.751 [DEBUG] [Thread-307982] [transport.py] [_log()] starting thread (client mode): 0xf818ae00
2025-12-24T19:52:07.751 [DEBUG] [Thread-307982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:52:07.768 [DEBUG] [Thread-307982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:52:07.768 [INFO] [Thread-307982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] client lang: <none>
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] server lang: <none>
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] kex follows: False
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] Compression: none
2025-12-24T19:52:07.776 [DEBUG] [Thread-307982] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:52:07.834 [DEBUG] [Thread-307982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:52:07.835 [DEBUG] [Thread-307982] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:52:07.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:52:07.835 [DEBUG] [Thread-307982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:52:07.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:52:07.891 [DEBUG] [Thread-307982] [transport.py] [_log()] userauth is OK
2025-12-24T19:52:07.891 [DEBUG] [Thread-307982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:52:07.891 [DEBUG] [Thread-307982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:52:07.891 [DEBUG] [Thread-307982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:52:07.891 [DEBUG] [Thread-307982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:52:07.909 [INFO] [Thread-307982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:52:07.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:52:07.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:52:08.727 [DEBUG] [Thread-307982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:52:08.727 [DEBUG] [Thread-307982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:52:08.775 [DEBUG] [Thread-307982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:52:08.776 [DEBUG] [Thread-307982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:52:08.785 [DEBUG] [Thread-307982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:52:08.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:52:08.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:52:08.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:52:08.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:52:08.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:52:08.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:52:08.823 [DEBUG] [Thread-307982] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:52:08.908 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:52:08.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:52:13.445 [DEBUG] [Thread-307984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:52:22.912 [DEBUG] [Thread-307985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:52:38.037 [DEBUG] [Thread-307986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:52:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:52:38.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:52:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:52:39.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 52, 4), 14.8, 37.66, 0.0, 25.9, 19.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:52:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:52:04
2025-12-24T19:52:39.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:52:40.156 [DEBUG] [Thread-307987] [transport.py] [_log()] starting thread (client mode): 0xf5789360
2025-12-24T19:52:40.157 [DEBUG] [Thread-307987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:52:40.170 [DEBUG] [Thread-307987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:52:40.170 [INFO] [Thread-307987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:52:40.173 [DEBUG] [Thread-307987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:52:40.173 [DEBUG] [Thread-307987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] client lang: <none>
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] server lang: <none>
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] kex follows: False
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] Compression: none
2025-12-24T19:52:40.174 [DEBUG] [Thread-307987] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:52:40.197 [DEBUG] [Thread-307987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:52:40.200 [DEBUG] [Thread-307987] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:52:40.201 [DEBUG] [Thread-307987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:52:40.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:52:40.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:52:40.245 [DEBUG] [Thread-307987] [transport.py] [_log()] userauth is OK
2025-12-24T19:52:40.245 [DEBUG] [Thread-307987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:52:40.245 [DEBUG] [Thread-307987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:52:40.245 [DEBUG] [Thread-307987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:52:40.245 [DEBUG] [Thread-307987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:52:40.263 [INFO] [Thread-307987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:52:40.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:52:40.831 [DEBUG] [Thread-307987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:52:40.831 [DEBUG] [Thread-307987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:52:40.831 [DEBUG] [Thread-307987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:52:40.872 [DEBUG] [Thread-307987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:52:40.872 [DEBUG] [Thread-307987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:52:40.875 [DEBUG] [Thread-307987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:52:40.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:52:40.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:52:40.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:52:40.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:52:40.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:52:40.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:52:40.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:52:40.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:52:40.896 [DEBUG] [Thread-307987] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:52:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:52:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.744857 -999.00  +19.60  19.27     43   +6.80 1 2 1 1 1   833    0 12.34 -16.75 ----- 24.8 19.3 175.4 36.4 20.3 -22.5 20.2 -22.1 20.0 -20.7 20.4 -21.6
2025-12-24T19:52:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:52:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:52:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.744857
2025-12-24T19:52:40.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:52:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:52:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:52:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:52:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:52:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:52:04', tmtdew=14.8, humidity=37.66, cloud=0.0, wind=25.9, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:52:35.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:52:40.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:52:41.000 [DEBUG] [Thread-307990] [transport.py] [_log()] starting thread (client mode): 0xf578ae90
2025-12-24T19:52:41.000 [DEBUG] [Thread-307990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:52:41.014 [DEBUG] [Thread-307990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:52:41.015 [INFO] [Thread-307990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] client lang: <none>
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] server lang: <none>
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] kex follows: False
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] Compression: none
2025-12-24T19:52:41.022 [DEBUG] [Thread-307990] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:52:41.078 [DEBUG] [Thread-307990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:52:41.078 [DEBUG] [Thread-307990] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:52:41.078 [DEBUG] [Thread-307990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:52:41.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:52:41.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:52:41.135 [DEBUG] [Thread-307990] [transport.py] [_log()] userauth is OK
2025-12-24T19:52:41.135 [DEBUG] [Thread-307990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:52:41.135 [DEBUG] [Thread-307990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:52:41.135 [DEBUG] [Thread-307990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:52:41.136 [DEBUG] [Thread-307990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:52:41.151 [INFO] [Thread-307990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:52:41.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:52:41.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:52:41.964 [DEBUG] [Thread-307990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:52:41.964 [DEBUG] [Thread-307990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:52:42.011 [DEBUG] [Thread-307990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:52:42.011 [DEBUG] [Thread-307990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:52:42.019 [DEBUG] [Thread-307990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:52:42.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:52:42.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:52:42.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:52:42.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:52:42.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:52:42.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:52:42.052 [DEBUG] [Thread-307990] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:52:53.322 [DEBUG] [Thread-307992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:53:08.582 [DEBUG] [Thread-307993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:53:12.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:53:12.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:53:12.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:53:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 52, 37), 14.65, 38.28, 0.0, 35.32, 19.69, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:53:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:52:37
2025-12-24T19:53:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:53:13.671 [DEBUG] [Thread-307994] [transport.py] [_log()] starting thread (client mode): 0xf57ab850
2025-12-24T19:53:13.672 [DEBUG] [Thread-307994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:53:13.672 [DEBUG] [Thread-307994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:53:13.673 [INFO] [Thread-307994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:53:13.678 [DEBUG] [Thread-307994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:53:13.679 [DEBUG] [Thread-307994] [transport.py] [_log()] client lang: <none>
2025-12-24T19:53:13.679 [DEBUG] [Thread-307994] [transport.py] [_log()] server lang: <none>
2025-12-24T19:53:13.679 [DEBUG] [Thread-307994] [transport.py] [_log()] kex follows: False
2025-12-24T19:53:13.679 [DEBUG] [Thread-307994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:53:13.680 [DEBUG] [Thread-307994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:53:13.680 [DEBUG] [Thread-307994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:53:13.680 [DEBUG] [Thread-307994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:53:13.680 [DEBUG] [Thread-307994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:53:13.680 [DEBUG] [Thread-307994] [transport.py] [_log()] Compression: none
2025-12-24T19:53:13.680 [DEBUG] [Thread-307994] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:53:13.705 [DEBUG] [Thread-307994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:53:13.710 [DEBUG] [Thread-307994] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:53:13.711 [DEBUG] [Thread-307994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:53:13.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:53:13.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:53:13.715 [DEBUG] [Thread-307994] [transport.py] [_log()] userauth is OK
2025-12-24T19:53:13.715 [DEBUG] [Thread-307994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:53:13.715 [DEBUG] [Thread-307994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:53:13.715 [DEBUG] [Thread-307994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:53:13.715 [DEBUG] [Thread-307994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:53:13.729 [INFO] [Thread-307994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:53:13.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:53:13.806 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:53:13.809 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:53:13.890 [DEBUG] [Thread-307996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:53:14.325 [DEBUG] [Thread-307994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:53:14.325 [DEBUG] [Thread-307994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:53:14.326 [DEBUG] [Thread-307994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:53:14.365 [DEBUG] [Thread-307994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:53:14.365 [DEBUG] [Thread-307994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:53:14.368 [DEBUG] [Thread-307994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:53:14.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:53:14.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:53:14.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:53:14.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:53:14.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:53:14.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:53:14.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:53:14.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:53:14.389 [DEBUG] [Thread-307994] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:53:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:53:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.745204 -999.00  +19.60  21.02     43   +6.80 1 2 1 1 1   828    0 12.47 -16.79 ----- 18.0 21.0 174.2 33.1 20.3 -22.5 20.2 -22.5 20.0 -20.6 20.3 -21.5
2025-12-24T19:53:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:53:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:53:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.745204
2025-12-24T19:53:14.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:53:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:53:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:53:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:53:14.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:53:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:52:37', tmtdew=14.65, humidity=38.28, cloud=0.0, wind=35.32, temperature=19.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:53:05.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:53:14.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:53:23.703 [DEBUG] [Thread-307998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:53:39.093 [DEBUG] [Thread-307999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:53:54.263 [DEBUG] [Thread-308000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:54:09.398 [DEBUG] [Thread-308001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:54:14.577 [DEBUG] [Thread-308002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:54:18.743 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:54:18.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:54:24.546 [DEBUG] [Thread-308003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:54:39.661 [DEBUG] [Thread-308004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:54:54.772 [DEBUG] [Thread-308005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:55:09.904 [DEBUG] [Thread-308006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:55:14.934 [DEBUG] [Thread-308007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:55:24.195 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:55:24.208 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:55:25.020 [DEBUG] [Thread-308008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:55:26.061 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T19:55:40.149 [DEBUG] [Thread-308009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:55:55.305 [DEBUG] [Thread-308010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:55:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:55:56.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:55:56.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:55:57.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 55, 24), 14.58, 38.46, 0.0, 31.04, 19.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:55:57.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:55:24
2025-12-24T19:55:57.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:55:57.834 [DEBUG] [Thread-308011] [transport.py] [_log()] starting thread (client mode): 0xf578a260
2025-12-24T19:55:57.835 [DEBUG] [Thread-308011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:55:57.835 [DEBUG] [Thread-308011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:55:57.835 [INFO] [Thread-308011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:55:57.838 [DEBUG] [Thread-308011] [transport.py] [_log()] client lang: <none>
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] server lang: <none>
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] kex follows: False
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] Compression: none
2025-12-24T19:55:57.839 [DEBUG] [Thread-308011] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:55:57.866 [DEBUG] [Thread-308011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:55:57.869 [DEBUG] [Thread-308011] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:55:57.871 [DEBUG] [Thread-308011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:55:57.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:55:57.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:55:57.877 [DEBUG] [Thread-308011] [transport.py] [_log()] userauth is OK
2025-12-24T19:55:57.877 [DEBUG] [Thread-308011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:55:57.877 [DEBUG] [Thread-308011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:55:57.877 [DEBUG] [Thread-308011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:55:57.877 [DEBUG] [Thread-308011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:55:57.905 [INFO] [Thread-308011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:55:57.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:55:58.527 [DEBUG] [Thread-308011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:55:58.527 [DEBUG] [Thread-308011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:55:58.528 [DEBUG] [Thread-308011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:55:58.570 [DEBUG] [Thread-308011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:55:58.570 [DEBUG] [Thread-308011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:55:58.572 [DEBUG] [Thread-308011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:55:58.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:55:58.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:55:58.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:55:58.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:55:58.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:55:58.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:55:58.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:55:58.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:55:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:55:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.746940 -999.00  +19.60  18.84     43   +6.90 1 2 1 1 1   797    0 12.39 -21.47 ----- 17.0 18.8 166.3 29.6 20.2 -22.5 20.1 -22.1 20.0 -20.7 20.2 -21.5
2025-12-24T19:55:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:55:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:55:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.746940
2025-12-24T19:55:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:55:58.609 [DEBUG] [Thread-308011] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:55:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:55:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:55:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:55:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:55:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:55:24', tmtdew=14.58, humidity=38.46, cloud=0.0, wind=31.04, temperature=19.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:55:35.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:55:58.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:55:58.697 [DEBUG] [Thread-308014] [transport.py] [_log()] starting thread (client mode): 0xf572dbd0
2025-12-24T19:55:58.698 [DEBUG] [Thread-308014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:55:58.713 [DEBUG] [Thread-308014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:55:58.713 [INFO] [Thread-308014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] client lang: <none>
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] server lang: <none>
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] kex follows: False
2025-12-24T19:55:58.720 [DEBUG] [Thread-308014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:55:58.721 [DEBUG] [Thread-308014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:55:58.721 [DEBUG] [Thread-308014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:55:58.721 [DEBUG] [Thread-308014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:55:58.721 [DEBUG] [Thread-308014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:55:58.721 [DEBUG] [Thread-308014] [transport.py] [_log()] Compression: none
2025-12-24T19:55:58.721 [DEBUG] [Thread-308014] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:55:58.777 [DEBUG] [Thread-308014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:55:58.777 [DEBUG] [Thread-308014] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:55:58.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:55:58.778 [DEBUG] [Thread-308014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:55:58.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:55:58.835 [DEBUG] [Thread-308014] [transport.py] [_log()] userauth is OK
2025-12-24T19:55:58.835 [DEBUG] [Thread-308014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:55:58.835 [DEBUG] [Thread-308014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:55:58.835 [DEBUG] [Thread-308014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:55:58.835 [DEBUG] [Thread-308014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:55:58.849 [INFO] [Thread-308014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:55:58.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:55:58.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:55:59.669 [DEBUG] [Thread-308014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:55:59.669 [DEBUG] [Thread-308014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:55:59.717 [DEBUG] [Thread-308014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:55:59.717 [DEBUG] [Thread-308014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:55:59.726 [DEBUG] [Thread-308014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:55:59.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:55:59.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:55:59.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:55:59.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:55:59.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:55:59.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:55:59.759 [DEBUG] [Thread-308014] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:56:10.465 [DEBUG] [Thread-308016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:56:15.239 [DEBUG] [Thread-308017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:56:25.655 [DEBUG] [Thread-308018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:56:29.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:56:29.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:56:29.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:56:30.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 55, 57), 14.62, 38.36, 0.0, 34.97, 19.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:56:30.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:55:57
2025-12-24T19:56:30.858 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:56:30.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:56:30.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:56:31.092 [DEBUG] [Thread-308019] [transport.py] [_log()] starting thread (client mode): 0xf5788c10
2025-12-24T19:56:31.092 [DEBUG] [Thread-308019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:56:31.107 [DEBUG] [Thread-308019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:56:31.107 [INFO] [Thread-308019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] client lang: <none>
2025-12-24T19:56:31.110 [DEBUG] [Thread-308019] [transport.py] [_log()] server lang: <none>
2025-12-24T19:56:31.111 [DEBUG] [Thread-308019] [transport.py] [_log()] kex follows: False
2025-12-24T19:56:31.111 [DEBUG] [Thread-308019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:56:31.111 [DEBUG] [Thread-308019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:56:31.111 [DEBUG] [Thread-308019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:56:31.111 [DEBUG] [Thread-308019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:56:31.111 [DEBUG] [Thread-308019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:56:31.111 [DEBUG] [Thread-308019] [transport.py] [_log()] Compression: none
2025-12-24T19:56:31.111 [DEBUG] [Thread-308019] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:56:31.133 [DEBUG] [Thread-308019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:56:31.137 [DEBUG] [Thread-308019] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:56:31.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:56:31.140 [DEBUG] [Thread-308019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:56:31.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:56:31.142 [DEBUG] [Thread-308019] [transport.py] [_log()] userauth is OK
2025-12-24T19:56:31.142 [DEBUG] [Thread-308019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:56:31.142 [DEBUG] [Thread-308019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:56:31.142 [DEBUG] [Thread-308019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:56:31.142 [DEBUG] [Thread-308019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:56:31.163 [INFO] [Thread-308019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:56:31.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:56:31.755 [DEBUG] [Thread-308019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:56:31.755 [DEBUG] [Thread-308019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:56:31.756 [DEBUG] [Thread-308019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:56:31.796 [DEBUG] [Thread-308019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:56:31.796 [DEBUG] [Thread-308019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:56:31.798 [DEBUG] [Thread-308019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:56:31.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:56:31.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:56:31.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:56:31.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:56:31.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:56:31.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:56:31.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:56:31.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:56:31.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:56:31.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.747288 -999.00  +19.60  26.45     43   +6.80 1 2 1 1 1   789    0 12.52 -23.05 ----- 28.0 26.4 170.6 34.1 20.2 -22.6 20.1 -22.4 20.0 -20.7 20.2 -21.5
2025-12-24T19:56:31.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:56:31.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:56:31.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.747288
2025-12-24T19:56:31.824 [DEBUG] [Thread-308019] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:56:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:56:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:56:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:56:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:56:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:56:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:55:57', tmtdew=14.62, humidity=38.36, cloud=0.0, wind=34.97, temperature=19.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:56:05.683', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:56:31.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:56:31.927 [DEBUG] [Thread-308022] [transport.py] [_log()] starting thread (client mode): 0xf5789240
2025-12-24T19:56:31.928 [DEBUG] [Thread-308022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:56:31.942 [DEBUG] [Thread-308022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:56:31.942 [INFO] [Thread-308022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:56:31.949 [DEBUG] [Thread-308022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] client lang: <none>
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] server lang: <none>
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] kex follows: False
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] Compression: none
2025-12-24T19:56:31.950 [DEBUG] [Thread-308022] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:56:32.006 [DEBUG] [Thread-308022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:56:32.006 [DEBUG] [Thread-308022] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:56:32.006 [DEBUG] [Thread-308022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:56:32.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:56:32.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:56:32.063 [DEBUG] [Thread-308022] [transport.py] [_log()] userauth is OK
2025-12-24T19:56:32.063 [DEBUG] [Thread-308022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:56:32.063 [DEBUG] [Thread-308022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:56:32.063 [DEBUG] [Thread-308022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:56:32.063 [DEBUG] [Thread-308022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:56:32.077 [INFO] [Thread-308022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:56:32.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:56:32.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:56:32.893 [DEBUG] [Thread-308022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:56:32.893 [DEBUG] [Thread-308022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:56:32.940 [DEBUG] [Thread-308022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:56:32.940 [DEBUG] [Thread-308022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:56:32.948 [DEBUG] [Thread-308022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:56:32.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:56:32.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')
2025-12-24T19:56:32.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:56:32.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:56:32.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:56:32.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:56:32.983 [DEBUG] [Thread-308022] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:56:40.774 [DEBUG] [Thread-308024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:56:56.003 [DEBUG] [Thread-308025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:57:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:57:03.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:57:03.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:57:04.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 56, 30), 14.61, 38.38, 0.0, 37.62, 19.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:57:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:56:30
2025-12-24T19:57:05.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:57:05.323 [DEBUG] [Thread-308026] [transport.py] [_log()] starting thread (client mode): 0xf57a80d0
2025-12-24T19:57:05.324 [DEBUG] [Thread-308026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:57:05.338 [DEBUG] [Thread-308026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:57:05.339 [INFO] [Thread-308026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] client lang: <none>
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] server lang: <none>
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] kex follows: False
2025-12-24T19:57:05.342 [DEBUG] [Thread-308026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:57:05.343 [DEBUG] [Thread-308026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:57:05.343 [DEBUG] [Thread-308026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:57:05.343 [DEBUG] [Thread-308026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:57:05.343 [DEBUG] [Thread-308026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:57:05.343 [DEBUG] [Thread-308026] [transport.py] [_log()] Compression: none
2025-12-24T19:57:05.343 [DEBUG] [Thread-308026] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:57:05.373 [DEBUG] [Thread-308026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:57:05.376 [DEBUG] [Thread-308026] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:57:05.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:57:05.378 [DEBUG] [Thread-308026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:57:05.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:57:05.380 [DEBUG] [Thread-308026] [transport.py] [_log()] userauth is OK
2025-12-24T19:57:05.380 [DEBUG] [Thread-308026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:57:05.380 [DEBUG] [Thread-308026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:57:05.380 [DEBUG] [Thread-308026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:57:05.380 [DEBUG] [Thread-308026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:57:05.409 [INFO] [Thread-308026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:57:05.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:57:05.997 [DEBUG] [Thread-308026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:57:05.997 [DEBUG] [Thread-308026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:57:05.998 [DEBUG] [Thread-308026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:57:06.038 [DEBUG] [Thread-308026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:57:06.039 [DEBUG] [Thread-308026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:57:06.041 [DEBUG] [Thread-308026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:57:06.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:57:06.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:57:06.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:57:06.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:57:06.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:57:06.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:57:06.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:57:06.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:57:06.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:57:06.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.747635 -999.00  +19.60  27.68     43   +6.80 1 2 1 1 1   781    0 12.31 -22.88 ----- 26.2 27.7 167.6 37.8 20.2 -22.5 20.1 -22.2 19.9 -20.7 20.2 -21.5
2025-12-24T19:57:06.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:57:06.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:57:06.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.747635
2025-12-24T19:57:06.074 [DEBUG] [Thread-308026] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:57:06.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:57:06.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:57:06.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:57:06.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:57:06.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:57:06.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:56:30', tmtdew=14.61, humidity=38.38, cloud=0.0, wind=37.62, temperature=19.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:56:35.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:57:06.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:57:06.176 [DEBUG] [Thread-308029] [transport.py] [_log()] starting thread (client mode): 0xf572c1c0
2025-12-24T19:57:06.177 [DEBUG] [Thread-308029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:57:06.191 [DEBUG] [Thread-308029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:57:06.191 [INFO] [Thread-308029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] client lang: <none>
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] server lang: <none>
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] kex follows: False
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:57:06.198 [DEBUG] [Thread-308029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:57:06.199 [DEBUG] [Thread-308029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:57:06.199 [DEBUG] [Thread-308029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:57:06.199 [DEBUG] [Thread-308029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:57:06.199 [DEBUG] [Thread-308029] [transport.py] [_log()] Compression: none
2025-12-24T19:57:06.199 [DEBUG] [Thread-308029] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:57:06.254 [DEBUG] [Thread-308029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:57:06.254 [DEBUG] [Thread-308029] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:57:06.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:57:06.254 [DEBUG] [Thread-308029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:57:06.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:57:06.311 [DEBUG] [Thread-308029] [transport.py] [_log()] userauth is OK
2025-12-24T19:57:06.311 [DEBUG] [Thread-308029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:57:06.311 [DEBUG] [Thread-308029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:57:06.311 [DEBUG] [Thread-308029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:57:06.311 [DEBUG] [Thread-308029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:57:06.329 [INFO] [Thread-308029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:57:06.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:57:06.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:57:07.157 [DEBUG] [Thread-308029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:57:07.158 [DEBUG] [Thread-308029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:57:07.206 [DEBUG] [Thread-308029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:57:07.206 [DEBUG] [Thread-308029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:57:07.214 [DEBUG] [Thread-308029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:57:07.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:57:07.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:57:07.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
2025-12-24T19:57:07.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:57:07.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:57:07.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:57:07.249 [DEBUG] [Thread-308029] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:57:11.112 [DEBUG] [Thread-308031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:57:15.525 [DEBUG] [Thread-308032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:57:26.288 [DEBUG] [Thread-308033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:57:36.159 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:57:36.160 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:57:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:57:37.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:57:37.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:57:38.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 57, 3), 14.62, 38.36, 0.0, 38.52, 19.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:57:38.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:57:03
2025-12-24T19:57:38.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:57:38.977 [DEBUG] [Thread-308034] [transport.py] [_log()] starting thread (client mode): 0xf5729e10
2025-12-24T19:57:38.978 [DEBUG] [Thread-308034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:57:38.984 [DEBUG] [Thread-308034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:57:38.984 [INFO] [Thread-308034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] client lang: <none>
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] server lang: <none>
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] kex follows: False
2025-12-24T19:57:38.988 [DEBUG] [Thread-308034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:57:38.989 [DEBUG] [Thread-308034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:57:38.989 [DEBUG] [Thread-308034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:57:38.989 [DEBUG] [Thread-308034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:57:38.989 [DEBUG] [Thread-308034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:57:38.989 [DEBUG] [Thread-308034] [transport.py] [_log()] Compression: none
2025-12-24T19:57:38.989 [DEBUG] [Thread-308034] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:57:39.018 [DEBUG] [Thread-308034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:57:39.021 [DEBUG] [Thread-308034] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:57:39.023 [DEBUG] [Thread-308034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:57:39.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:57:39.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:57:39.026 [DEBUG] [Thread-308034] [transport.py] [_log()] userauth is OK
2025-12-24T19:57:39.026 [DEBUG] [Thread-308034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:57:39.027 [DEBUG] [Thread-308034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:57:39.027 [DEBUG] [Thread-308034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:57:39.027 [DEBUG] [Thread-308034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:57:39.040 [INFO] [Thread-308034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:57:39.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:57:39.669 [DEBUG] [Thread-308034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:57:39.669 [DEBUG] [Thread-308034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:57:39.670 [DEBUG] [Thread-308034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:57:39.712 [DEBUG] [Thread-308034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:57:39.712 [DEBUG] [Thread-308034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:57:39.714 [DEBUG] [Thread-308034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:57:39.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:57:39.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:57:39.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:57:39.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:57:39.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:57:39.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:57:39.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:57:39.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:57:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:57:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.747982 -999.00  +19.50  28.12     43   +6.80 1 2 1 1 1   772    0 12.16 -23.75 ----- 29.5 28.1 168.6 33.9 20.2 -22.5 20.1 -22.0 19.9 -20.7 20.2 -21.5
2025-12-24T19:57:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:57:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:57:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.747982
2025-12-24T19:57:39.743 [DEBUG] [Thread-308034] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:57:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:57:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:57:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:57:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:57:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:57:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:57:03', tmtdew=14.62, humidity=38.36, cloud=0.0, wind=38.52, temperature=19.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:57:05.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:57:39.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:57:39.843 [DEBUG] [Thread-308037] [transport.py] [_log()] starting thread (client mode): 0xf57a8160
2025-12-24T19:57:39.843 [DEBUG] [Thread-308037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:57:39.857 [DEBUG] [Thread-308037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:57:39.857 [INFO] [Thread-308037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] client lang: <none>
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] server lang: <none>
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] kex follows: False
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] Compression: none
2025-12-24T19:57:39.865 [DEBUG] [Thread-308037] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:57:39.922 [DEBUG] [Thread-308037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:57:39.922 [DEBUG] [Thread-308037] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:57:39.922 [DEBUG] [Thread-308037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:57:39.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:57:39.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:57:39.979 [DEBUG] [Thread-308037] [transport.py] [_log()] userauth is OK
2025-12-24T19:57:39.980 [DEBUG] [Thread-308037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:57:39.980 [DEBUG] [Thread-308037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:57:39.980 [DEBUG] [Thread-308037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:57:39.980 [DEBUG] [Thread-308037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:57:40.000 [INFO] [Thread-308037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:57:40.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:57:40.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:57:40.807 [DEBUG] [Thread-308037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:57:40.808 [DEBUG] [Thread-308037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:57:40.858 [DEBUG] [Thread-308037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:57:40.858 [DEBUG] [Thread-308037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:57:40.868 [DEBUG] [Thread-308037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:57:40.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:57:40.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:57:40.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:57:40.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:57:40.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:57:40.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:57:40.905 [DEBUG] [Thread-308037] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:57:41.411 [DEBUG] [Thread-308039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:57:56.584 [DEBUG] [Thread-308040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:58:10.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:58:10.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:58:10.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
2025-12-24T19:58:11.698 [DEBUG] [Thread-308041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:58:12.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 57, 36), 14.67, 37.84, 0.0, 37.02, 19.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:58:12.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:57:36
2025-12-24T19:58:12.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:58:12.398 [DEBUG] [Thread-308042] [transport.py] [_log()] starting thread (client mode): 0xf8188d90
2025-12-24T19:58:12.398 [DEBUG] [Thread-308042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:58:12.410 [DEBUG] [Thread-308042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:58:12.410 [INFO] [Thread-308042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] client lang: <none>
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] server lang: <none>
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] kex follows: False
2025-12-24T19:58:12.414 [DEBUG] [Thread-308042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:58:12.415 [DEBUG] [Thread-308042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:58:12.415 [DEBUG] [Thread-308042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:58:12.415 [DEBUG] [Thread-308042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:58:12.415 [DEBUG] [Thread-308042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:58:12.415 [DEBUG] [Thread-308042] [transport.py] [_log()] Compression: none
2025-12-24T19:58:12.415 [DEBUG] [Thread-308042] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:58:12.444 [DEBUG] [Thread-308042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:58:12.446 [DEBUG] [Thread-308042] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:58:12.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:58:12.448 [DEBUG] [Thread-308042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:58:12.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:58:12.449 [DEBUG] [Thread-308042] [transport.py] [_log()] userauth is OK
2025-12-24T19:58:12.449 [DEBUG] [Thread-308042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:58:12.450 [DEBUG] [Thread-308042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:58:12.450 [DEBUG] [Thread-308042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:58:12.450 [DEBUG] [Thread-308042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:58:12.463 [INFO] [Thread-308042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:58:12.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:58:13.059 [DEBUG] [Thread-308042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:58:13.059 [DEBUG] [Thread-308042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:58:13.060 [DEBUG] [Thread-308042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:58:13.099 [DEBUG] [Thread-308042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:58:13.100 [DEBUG] [Thread-308042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:58:13.102 [DEBUG] [Thread-308042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:58:13.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:58:13.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:58:13.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:58:13.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:58:13.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:58:13.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:58:13.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:58:13.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:58:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:58:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.748676 -999.00  +19.50  18.68     43   +6.80 1 2 1 1 1   752    0 12.18 -25.81 ----- 19.2 18.7 165.8 34.7 20.2 -22.4 20.0 -22.0 19.9 -20.7 20.1 -21.6
2025-12-24T19:58:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:58:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:58:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.748676
2025-12-24T19:58:13.121 [DEBUG] [Thread-308042] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:58:13.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:58:13.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:58:13.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:58:13.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:58:13.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:58:13.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:57:36', tmtdew=14.67, humidity=37.84, cloud=0.0, wind=37.02, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:58:05.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:58:13.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:58:13.226 [DEBUG] [Thread-308045] [transport.py] [_log()] starting thread (client mode): 0xf8188580
2025-12-24T19:58:13.226 [DEBUG] [Thread-308045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:58:13.241 [DEBUG] [Thread-308045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:58:13.241 [INFO] [Thread-308045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] client lang: <none>
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] server lang: <none>
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] kex follows: False
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] Compression: none
2025-12-24T19:58:13.248 [DEBUG] [Thread-308045] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:58:13.305 [DEBUG] [Thread-308045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:58:13.305 [DEBUG] [Thread-308045] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:58:13.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:58:13.306 [DEBUG] [Thread-308045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:58:13.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:58:13.367 [DEBUG] [Thread-308045] [transport.py] [_log()] userauth is OK
2025-12-24T19:58:13.367 [DEBUG] [Thread-308045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:58:13.367 [DEBUG] [Thread-308045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:58:13.367 [DEBUG] [Thread-308045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:58:13.367 [DEBUG] [Thread-308045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:58:13.381 [INFO] [Thread-308045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:58:13.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:58:13.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:58:14.229 [DEBUG] [Thread-308045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:58:14.229 [DEBUG] [Thread-308045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:58:14.242 [DEBUG] [Thread-308045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:58:14.242 [DEBUG] [Thread-308045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:58:14.250 [DEBUG] [Thread-308045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:58:14.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:58:14.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:58:14.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:58:14.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:58:14.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:58:14.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:58:14.283 [DEBUG] [Thread-308045] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:58:15.838 [DEBUG] [Thread-308047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:58:26.821 [DEBUG] [Thread-308048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:58:41.970 [DEBUG] [Thread-308049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:58:42.779 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:58:42.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:58:44.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:58:44.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:58:44.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:58:46.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 58, 9), 14.64, 37.91, 0.0, 39.03, 19.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:58:46.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:58:09
2025-12-24T19:58:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:58:46.751 [DEBUG] [Thread-308050] [transport.py] [_log()] starting thread (client mode): 0xf81e5ae0
2025-12-24T19:58:46.751 [DEBUG] [Thread-308050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:58:46.754 [DEBUG] [Thread-308050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:58:46.755 [INFO] [Thread-308050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:58:46.758 [DEBUG] [Thread-308050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:58:46.758 [DEBUG] [Thread-308050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:58:46.758 [DEBUG] [Thread-308050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:58:46.758 [DEBUG] [Thread-308050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:58:46.758 [DEBUG] [Thread-308050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] client lang: <none>
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] server lang: <none>
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] kex follows: False
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:58:46.759 [DEBUG] [Thread-308050] [transport.py] [_log()] Compression: none
2025-12-24T19:58:46.760 [DEBUG] [Thread-308050] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:58:46.799 [DEBUG] [Thread-308050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:58:46.802 [DEBUG] [Thread-308050] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:58:46.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:58:46.805 [DEBUG] [Thread-308050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:58:46.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:58:46.808 [DEBUG] [Thread-308050] [transport.py] [_log()] userauth is OK
2025-12-24T19:58:46.808 [DEBUG] [Thread-308050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:58:46.808 [DEBUG] [Thread-308050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:58:46.808 [DEBUG] [Thread-308050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:58:46.808 [DEBUG] [Thread-308050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:58:46.828 [INFO] [Thread-308050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:58:46.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:58:47.441 [DEBUG] [Thread-308050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:58:47.441 [DEBUG] [Thread-308050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:58:47.442 [DEBUG] [Thread-308050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:58:47.482 [DEBUG] [Thread-308050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:58:47.482 [DEBUG] [Thread-308050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:58:47.484 [DEBUG] [Thread-308050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:58:47.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:58:47.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:58:47.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:58:47.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:58:47.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:58:47.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:58:47.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:58:47.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:58:47.506 [DEBUG] [Thread-308050] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:58:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:58:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.749023 -999.00  +19.50  28.27     43   +6.80 1 2 1 1 1   741    0 11.98 -27.36 ----- 25.5 28.3 170.2 31.2 20.1 -22.6 20.1 -22.4 19.9 -20.8 20.1 -21.7
2025-12-24T19:58:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:58:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:58:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.749023
2025-12-24T19:58:47.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:58:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:58:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:58:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:58:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:58:47.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:58:09', tmtdew=14.64, humidity=37.91, cloud=0.0, wind=39.03, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:58:35.587', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:58:47.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:58:47.627 [DEBUG] [Thread-308053] [transport.py] [_log()] starting thread (client mode): 0xf5771ba0
2025-12-24T19:58:47.627 [DEBUG] [Thread-308053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:58:47.642 [DEBUG] [Thread-308053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:58:47.642 [INFO] [Thread-308053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] client lang: <none>
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] server lang: <none>
2025-12-24T19:58:47.649 [DEBUG] [Thread-308053] [transport.py] [_log()] kex follows: False
2025-12-24T19:58:47.650 [DEBUG] [Thread-308053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:58:47.650 [DEBUG] [Thread-308053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:58:47.650 [DEBUG] [Thread-308053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:58:47.650 [DEBUG] [Thread-308053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:58:47.650 [DEBUG] [Thread-308053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:58:47.650 [DEBUG] [Thread-308053] [transport.py] [_log()] Compression: none
2025-12-24T19:58:47.650 [DEBUG] [Thread-308053] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:58:47.707 [DEBUG] [Thread-308053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:58:47.707 [DEBUG] [Thread-308053] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:58:47.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:58:47.708 [DEBUG] [Thread-308053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:58:47.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:58:47.767 [DEBUG] [Thread-308053] [transport.py] [_log()] userauth is OK
2025-12-24T19:58:47.767 [DEBUG] [Thread-308053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:58:47.767 [DEBUG] [Thread-308053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:58:47.767 [DEBUG] [Thread-308053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:58:47.767 [DEBUG] [Thread-308053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:58:47.781 [INFO] [Thread-308053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:58:47.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:58:47.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:58:48.617 [DEBUG] [Thread-308053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:58:48.617 [DEBUG] [Thread-308053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:58:48.664 [DEBUG] [Thread-308053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:58:48.664 [DEBUG] [Thread-308053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:58:48.673 [DEBUG] [Thread-308053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:58:48.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:58:48.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:58:48.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:58:48.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:58:48.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:58:48.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:58:48.706 [DEBUG] [Thread-308053] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:58:57.072 [DEBUG] [Thread-308055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:59:12.209 [DEBUG] [Thread-308056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:59:16.047 [DEBUG] [Thread-308057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:59:18.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:59:18.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:59:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:59:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 58, 43), 14.64, 38.43, 0.0, 35.43, 19.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:59:20.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:58:43
2025-12-24T19:59:20.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:59:20.765 [DEBUG] [Thread-308058] [transport.py] [_log()] starting thread (client mode): 0xf5773190
2025-12-24T19:59:20.766 [DEBUG] [Thread-308058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:59:20.774 [DEBUG] [Thread-308058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:59:20.774 [INFO] [Thread-308058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] client lang: <none>
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] server lang: <none>
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] kex follows: False
2025-12-24T19:59:20.789 [DEBUG] [Thread-308058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:59:20.792 [DEBUG] [Thread-308058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:59:20.792 [DEBUG] [Thread-308058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:59:20.792 [DEBUG] [Thread-308058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:59:20.792 [DEBUG] [Thread-308058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:59:20.792 [DEBUG] [Thread-308058] [transport.py] [_log()] Compression: none
2025-12-24T19:59:20.792 [DEBUG] [Thread-308058] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:59:20.838 [DEBUG] [Thread-308058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:59:20.842 [DEBUG] [Thread-308058] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:59:20.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:59:20.844 [DEBUG] [Thread-308058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:59:20.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:59:20.852 [DEBUG] [Thread-308058] [transport.py] [_log()] userauth is OK
2025-12-24T19:59:20.852 [DEBUG] [Thread-308058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:59:20.852 [DEBUG] [Thread-308058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:59:20.852 [DEBUG] [Thread-308058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:59:20.852 [DEBUG] [Thread-308058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:59:20.873 [INFO] [Thread-308058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:59:20.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:59:21.511 [DEBUG] [Thread-308058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:59:21.511 [DEBUG] [Thread-308058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:59:21.513 [DEBUG] [Thread-308058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:59:21.553 [DEBUG] [Thread-308058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:59:21.553 [DEBUG] [Thread-308058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:59:21.556 [DEBUG] [Thread-308058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:59:21.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:59:21.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:59:21.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:59:21.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:59:21.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:59:21.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:59:21.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:59:21.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:59:21.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:59:21.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.749371 -999.00  +19.50  19.94     43   +6.80 1 2 1 1 1   730    0 11.81 -30.31 ----- 20.8 19.9 160.2 43.2 20.2 -22.7 20.1 -22.2 19.9 -20.7 -999.0 -999.0
2025-12-24T19:59:21.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:59:21.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:59:21.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.749371
2025-12-24T19:59:21.615 [DEBUG] [Thread-308058] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:59:21.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:59:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:59:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:59:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:59:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:59:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:58:43', tmtdew=14.64, humidity=38.43, cloud=0.0, wind=35.43, temperature=19.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:59:05.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:59:21.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:59:21.717 [DEBUG] [Thread-308061] [transport.py] [_log()] starting thread (client mode): 0xf57714e0
2025-12-24T19:59:21.771 [DEBUG] [Thread-308061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:59:21.771 [DEBUG] [Thread-308061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:59:21.771 [INFO] [Thread-308061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] client lang: <none>
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] server lang: <none>
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] kex follows: False
2025-12-24T19:59:21.780 [DEBUG] [Thread-308061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:59:21.781 [DEBUG] [Thread-308061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:59:21.781 [DEBUG] [Thread-308061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:59:21.781 [DEBUG] [Thread-308061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:59:21.781 [DEBUG] [Thread-308061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:59:21.781 [DEBUG] [Thread-308061] [transport.py] [_log()] Compression: none
2025-12-24T19:59:21.784 [DEBUG] [Thread-308061] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:59:21.842 [DEBUG] [Thread-308061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:59:21.842 [DEBUG] [Thread-308061] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:59:21.842 [DEBUG] [Thread-308061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:59:21.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:59:21.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:59:21.899 [DEBUG] [Thread-308061] [transport.py] [_log()] userauth is OK
2025-12-24T19:59:21.899 [DEBUG] [Thread-308061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:59:21.899 [DEBUG] [Thread-308061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:59:21.899 [DEBUG] [Thread-308061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:59:21.899 [DEBUG] [Thread-308061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:59:21.913 [INFO] [Thread-308061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:59:21.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:59:21.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:59:22.730 [DEBUG] [Thread-308061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:59:22.730 [DEBUG] [Thread-308061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:59:22.777 [DEBUG] [Thread-308061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:59:22.777 [DEBUG] [Thread-308061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:59:22.785 [DEBUG] [Thread-308061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:59:22.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:59:22.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:59:22.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:59:22.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:59:22.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:59:22.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:59:22.824 [DEBUG] [Thread-308061] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:59:27.313 [DEBUG] [Thread-308063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:59:42.524 [DEBUG] [Thread-308064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:59:50.110 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:59:50.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:59:52.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T19:59:52.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T19:59:53.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T19:59:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 59, 17), 14.61, 38.49, 0.0, 35.98, 19.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T19:59:55.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:59:17
2025-12-24T19:59:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T19:59:55.860 [DEBUG] [Thread-308065] [transport.py] [_log()] starting thread (client mode): 0xf5771a50
2025-12-24T19:59:55.861 [DEBUG] [Thread-308065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:59:55.871 [DEBUG] [Thread-308065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T19:59:55.871 [INFO] [Thread-308065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] client lang: <none>
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] server lang: <none>
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] kex follows: False
2025-12-24T19:59:55.875 [DEBUG] [Thread-308065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:59:55.876 [DEBUG] [Thread-308065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:59:55.876 [DEBUG] [Thread-308065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:59:55.876 [DEBUG] [Thread-308065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:59:55.876 [DEBUG] [Thread-308065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:59:55.876 [DEBUG] [Thread-308065] [transport.py] [_log()] Compression: none
2025-12-24T19:59:55.876 [DEBUG] [Thread-308065] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:59:55.903 [DEBUG] [Thread-308065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:59:55.907 [DEBUG] [Thread-308065] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:59:55.908 [DEBUG] [Thread-308065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T19:59:55.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T19:59:55.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:59:55.911 [DEBUG] [Thread-308065] [transport.py] [_log()] userauth is OK
2025-12-24T19:59:55.911 [DEBUG] [Thread-308065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:59:55.911 [DEBUG] [Thread-308065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:59:55.911 [DEBUG] [Thread-308065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T19:59:55.911 [DEBUG] [Thread-308065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:59:55.929 [INFO] [Thread-308065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:59:55.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:59:56.496 [DEBUG] [Thread-308065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:59:56.496 [DEBUG] [Thread-308065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:59:56.497 [DEBUG] [Thread-308065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T19:59:56.538 [DEBUG] [Thread-308065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:59:56.538 [DEBUG] [Thread-308065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:59:56.541 [DEBUG] [Thread-308065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:59:56.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:59:56.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T19:59:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T19:59:56.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T19:59:56.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:59:56.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T19:59:56.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:59:56.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:59:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T19:59:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.749717 -999.00  +19.50  23.67     43   +6.80 1 2 1 1 1   718    0 12.30 -29.68 ----- 26.5 23.7 165.4 32.8 20.2 -22.6 20.0 -22.2 19.9 -20.7 20.1 -21.6
2025-12-24T19:59:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T19:59:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T19:59:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.749717
2025-12-24T19:59:56.583 [DEBUG] [Thread-308065] [transport.py] [_log()] EOF in transport thread
2025-12-24T19:59:56.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T19:59:56.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T19:59:56.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T19:59:56.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T19:59:56.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T19:59:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:59:17', tmtdew=14.61, humidity=38.49, cloud=0.0, wind=35.98, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T17:59:35.549', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T19:59:56.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T19:59:56.683 [DEBUG] [Thread-308068] [transport.py] [_log()] starting thread (client mode): 0xf57734c0
2025-12-24T19:59:56.683 [DEBUG] [Thread-308068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T19:59:56.698 [DEBUG] [Thread-308068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T19:59:56.698 [INFO] [Thread-308068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T19:59:56.706 [DEBUG] [Thread-308068] [transport.py] [_log()] client lang: <none>
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] server lang: <none>
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] kex follows: False
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] Compression: none
2025-12-24T19:59:56.707 [DEBUG] [Thread-308068] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T19:59:56.762 [DEBUG] [Thread-308068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T19:59:56.762 [DEBUG] [Thread-308068] [transport.py] [_log()] Switch to new keys ...
2025-12-24T19:59:56.762 [DEBUG] [Thread-308068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T19:59:56.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T19:59:56.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T19:59:56.819 [DEBUG] [Thread-308068] [transport.py] [_log()] userauth is OK
2025-12-24T19:59:56.819 [DEBUG] [Thread-308068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T19:59:56.820 [DEBUG] [Thread-308068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T19:59:56.820 [DEBUG] [Thread-308068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T19:59:56.820 [DEBUG] [Thread-308068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T19:59:56.839 [INFO] [Thread-308068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T19:59:56.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T19:59:56.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T19:59:57.663 [DEBUG] [Thread-308070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T19:59:57.684 [DEBUG] [Thread-308068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T19:59:57.684 [DEBUG] [Thread-308068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T19:59:57.732 [DEBUG] [Thread-308068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T19:59:57.732 [DEBUG] [Thread-308068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T19:59:57.741 [DEBUG] [Thread-308068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T19:59:57.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T19:59:57.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T19:59:57.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T19:59:57.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T19:59:57.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T19:59:57.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T19:59:57.777 [DEBUG] [Thread-308068] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:00:13.022 [DEBUG] [Thread-308071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:00:16.318 [DEBUG] [Thread-308072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:00:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:00:27.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:00:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:00:28.179 [DEBUG] [Thread-308073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:00:28.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 19, 59, 51), 14.52, 38.48, 0.0, 33.49, 19.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:00:28.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 19:59:51
2025-12-24T20:00:29.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:00:29.314 [DEBUG] [Thread-308074] [transport.py] [_log()] starting thread (client mode): 0xf5772ad0
2025-12-24T20:00:29.314 [DEBUG] [Thread-308074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:00:29.327 [DEBUG] [Thread-308074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:00:29.327 [INFO] [Thread-308074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:00:29.331 [DEBUG] [Thread-308074] [transport.py] [_log()] client lang: <none>
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] server lang: <none>
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] kex follows: False
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] Compression: none
2025-12-24T20:00:29.332 [DEBUG] [Thread-308074] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:00:29.370 [DEBUG] [Thread-308074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:00:29.373 [DEBUG] [Thread-308074] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:00:29.375 [DEBUG] [Thread-308074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:00:29.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:00:29.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:00:29.378 [DEBUG] [Thread-308074] [transport.py] [_log()] userauth is OK
2025-12-24T20:00:29.378 [DEBUG] [Thread-308074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:00:29.378 [DEBUG] [Thread-308074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:00:29.378 [DEBUG] [Thread-308074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:00:29.378 [DEBUG] [Thread-308074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:00:29.400 [INFO] [Thread-308074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:00:29.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:00:30.048 [DEBUG] [Thread-308074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:00:30.048 [DEBUG] [Thread-308074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:00:30.049 [DEBUG] [Thread-308074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:00:30.089 [DEBUG] [Thread-308074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:00:30.089 [DEBUG] [Thread-308074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:00:30.091 [DEBUG] [Thread-308074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:00:30.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:00:30.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:00:30.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:00:30.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:00:30.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:00:30.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:00:30.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:00:30.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:00:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:00:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.750065 -999.00  +19.50  24.81     43   +6.70 1 2 1 1 1   705    0 12.13 -31.60 ----- 23.7 24.8 167.6 36.9 20.1 -22.5 20.0 -22.1 19.9 -20.7 20.1 -21.6
2025-12-24T20:00:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:00:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:00:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.750065
2025-12-24T20:00:30.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:00:30.131 [DEBUG] [Thread-308074] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:00:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:00:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:00:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:00:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:00:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T19:59:51', tmtdew=14.52, humidity=38.48, cloud=0.0, wind=33.49, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:00:05.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:00:30.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:00:30.218 [DEBUG] [Thread-308077] [transport.py] [_log()] starting thread (client mode): 0xf5789ba0
2025-12-24T20:00:30.218 [DEBUG] [Thread-308077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:00:30.233 [DEBUG] [Thread-308077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:00:30.233 [INFO] [Thread-308077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:00:30.240 [DEBUG] [Thread-308077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:00:30.241 [DEBUG] [Thread-308077] [transport.py] [_log()] client lang: <none>
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] server lang: <none>
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] kex follows: False
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] Compression: none
2025-12-24T20:00:30.242 [DEBUG] [Thread-308077] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:00:30.300 [DEBUG] [Thread-308077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:00:30.301 [DEBUG] [Thread-308077] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:00:30.302 [DEBUG] [Thread-308077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:00:30.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:00:30.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:00:30.359 [DEBUG] [Thread-308077] [transport.py] [_log()] userauth is OK
2025-12-24T20:00:30.360 [DEBUG] [Thread-308077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:00:30.360 [DEBUG] [Thread-308077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:00:30.360 [DEBUG] [Thread-308077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:00:30.360 [DEBUG] [Thread-308077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:00:30.380 [INFO] [Thread-308077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:00:30.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:00:30.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:00:31.289 [DEBUG] [Thread-308077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:00:31.289 [DEBUG] [Thread-308077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:00:31.337 [DEBUG] [Thread-308077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:00:31.338 [DEBUG] [Thread-308077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:00:31.346 [DEBUG] [Thread-308077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:00:31.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:00:31.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:00:31.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:00:31.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:00:31.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:00:31.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:00:31.381 [DEBUG] [Thread-308077] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:00:43.325 [DEBUG] [Thread-308079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:00:55.585 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:00:55.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:00:58.509 [DEBUG] [Thread-308080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:01:01.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:01:01.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:01:01.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:01:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 0, 26), 14.52, 38.46, 0.0, 34.72, 19.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:01:03.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:00:26
2025-12-24T20:01:04.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:01:04.357 [DEBUG] [Thread-308081] [transport.py] [_log()] starting thread (client mode): 0xf578ad70
2025-12-24T20:01:04.358 [DEBUG] [Thread-308081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:01:04.361 [DEBUG] [Thread-308081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:01:04.361 [INFO] [Thread-308081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:01:04.367 [DEBUG] [Thread-308081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] client lang: <none>
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] server lang: <none>
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] kex follows: False
2025-12-24T20:01:04.368 [DEBUG] [Thread-308081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:01:04.369 [DEBUG] [Thread-308081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:01:04.369 [DEBUG] [Thread-308081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:01:04.369 [DEBUG] [Thread-308081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:01:04.369 [DEBUG] [Thread-308081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:01:04.369 [DEBUG] [Thread-308081] [transport.py] [_log()] Compression: none
2025-12-24T20:01:04.369 [DEBUG] [Thread-308081] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:01:04.406 [DEBUG] [Thread-308081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:01:04.411 [DEBUG] [Thread-308081] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:01:04.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:01:04.416 [DEBUG] [Thread-308081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:01:04.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:01:04.419 [DEBUG] [Thread-308081] [transport.py] [_log()] userauth is OK
2025-12-24T20:01:04.420 [DEBUG] [Thread-308081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:01:04.420 [DEBUG] [Thread-308081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:01:04.420 [DEBUG] [Thread-308081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:01:04.420 [DEBUG] [Thread-308081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:01:04.452 [INFO] [Thread-308081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:01:04.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:01:05.082 [DEBUG] [Thread-308081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:01:05.082 [DEBUG] [Thread-308081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:01:05.083 [DEBUG] [Thread-308081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:01:05.124 [DEBUG] [Thread-308081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:01:05.124 [DEBUG] [Thread-308081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:01:05.126 [DEBUG] [Thread-308081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:01:05.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:01:05.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:01:05.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:01:05.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:01:05.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:01:05.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:01:05.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:01:05.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:01:05.153 [DEBUG] [Thread-308081] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:01:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:01:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.750412 -999.00  +19.50  25.31     43   +6.70 1 2 1 1 1   692    0 12.04 -30.64 ----- 24.5 25.3 159.4 37.5 20.1 -22.6 20.0 -22.0 19.9 -20.7 20.1 -21.7
2025-12-24T20:01:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:01:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:01:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.750412
2025-12-24T20:01:05.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:01:05.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:01:05.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:01:05.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:01:05.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:01:05.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:00:26', tmtdew=14.52, humidity=38.46, cloud=0.0, wind=34.72, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:00:35.597', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:01:05.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:01:05.275 [DEBUG] [Thread-308084] [transport.py] [_log()] starting thread (client mode): 0xf5773730
2025-12-24T20:01:05.276 [DEBUG] [Thread-308084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:01:05.294 [DEBUG] [Thread-308084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:01:05.294 [INFO] [Thread-308084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] client lang: <none>
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] server lang: <none>
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] kex follows: False
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:01:05.301 [DEBUG] [Thread-308084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:01:05.302 [DEBUG] [Thread-308084] [transport.py] [_log()] Compression: none
2025-12-24T20:01:05.302 [DEBUG] [Thread-308084] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:01:05.358 [DEBUG] [Thread-308084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:01:05.358 [DEBUG] [Thread-308084] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:01:05.396 [DEBUG] [Thread-308084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:01:05.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:01:05.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:01:05.415 [DEBUG] [Thread-308084] [transport.py] [_log()] userauth is OK
2025-12-24T20:01:05.415 [DEBUG] [Thread-308084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:01:05.415 [DEBUG] [Thread-308084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:01:05.415 [DEBUG] [Thread-308084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:01:05.415 [DEBUG] [Thread-308084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:01:05.429 [INFO] [Thread-308084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:01:05.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:01:05.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:01:06.285 [DEBUG] [Thread-308084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:01:06.285 [DEBUG] [Thread-308084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:01:06.332 [DEBUG] [Thread-308084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:01:06.332 [DEBUG] [Thread-308084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:01:06.340 [DEBUG] [Thread-308084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:01:06.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:01:06.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:01:06.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:01:06.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:01:06.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:01:06.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:01:06.373 [DEBUG] [Thread-308084] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:01:13.610 [DEBUG] [Thread-308086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:01:16.672 [DEBUG] [Thread-308087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:01:28.944 [DEBUG] [Thread-308088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:01:36.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:01:36.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:01:36.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:01:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 0, 59), 14.56, 38.49, 0.0, 29.87, 19.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:01:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:00:59
2025-12-24T20:01:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:01:37.810 [DEBUG] [Thread-308089] [transport.py] [_log()] starting thread (client mode): 0xf81e4bb0
2025-12-24T20:01:37.810 [DEBUG] [Thread-308089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:01:37.822 [DEBUG] [Thread-308089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:01:37.823 [INFO] [Thread-308089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] client lang: <none>
2025-12-24T20:01:37.826 [DEBUG] [Thread-308089] [transport.py] [_log()] server lang: <none>
2025-12-24T20:01:37.827 [DEBUG] [Thread-308089] [transport.py] [_log()] kex follows: False
2025-12-24T20:01:37.827 [DEBUG] [Thread-308089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:01:37.827 [DEBUG] [Thread-308089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:01:37.827 [DEBUG] [Thread-308089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:01:37.827 [DEBUG] [Thread-308089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:01:37.827 [DEBUG] [Thread-308089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:01:37.827 [DEBUG] [Thread-308089] [transport.py] [_log()] Compression: none
2025-12-24T20:01:37.827 [DEBUG] [Thread-308089] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:01:37.858 [DEBUG] [Thread-308089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:01:37.861 [DEBUG] [Thread-308089] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:01:37.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:01:37.864 [DEBUG] [Thread-308089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:01:37.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:01:37.866 [DEBUG] [Thread-308089] [transport.py] [_log()] userauth is OK
2025-12-24T20:01:37.866 [DEBUG] [Thread-308089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:01:37.866 [DEBUG] [Thread-308089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:01:37.866 [DEBUG] [Thread-308089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:01:37.866 [DEBUG] [Thread-308089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:01:37.884 [INFO] [Thread-308089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:01:37.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:01:38.500 [DEBUG] [Thread-308089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:01:38.500 [DEBUG] [Thread-308089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:01:38.501 [DEBUG] [Thread-308089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:01:38.542 [DEBUG] [Thread-308089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:01:38.542 [DEBUG] [Thread-308089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:01:38.546 [DEBUG] [Thread-308089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:01:38.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:01:38.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:01:38.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:01:38.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:01:38.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:01:38.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:01:38.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:01:38.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:01:38.573 [DEBUG] [Thread-308089] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:01:38.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:01:38.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.750760 -999.00  +19.40  35.32     43   +6.80 1 2 2 1 1   677    0 12.17 -30.20 ----- 32.1 35.3 164.4 37.9 20.1 -22.5 20.0 -22.1 19.8 -20.7 20.1 -21.7
2025-12-24T20:01:38.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:01:38.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:01:38.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.750760
2025-12-24T20:01:38.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:01:38.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:01:38.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:01:38.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:01:38.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:01:38.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:00:59', tmtdew=14.56, humidity=38.49, cloud=0.0, wind=29.87, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:01:05.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:01:38.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:01:38.695 [DEBUG] [Thread-308092] [transport.py] [_log()] starting thread (client mode): 0xf572c220
2025-12-24T20:01:38.695 [DEBUG] [Thread-308092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:01:38.709 [DEBUG] [Thread-308092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:01:38.709 [INFO] [Thread-308092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] client lang: <none>
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] server lang: <none>
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] kex follows: False
2025-12-24T20:01:38.717 [DEBUG] [Thread-308092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:01:38.718 [DEBUG] [Thread-308092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:01:38.718 [DEBUG] [Thread-308092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:01:38.718 [DEBUG] [Thread-308092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:01:38.718 [DEBUG] [Thread-308092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:01:38.718 [DEBUG] [Thread-308092] [transport.py] [_log()] Compression: none
2025-12-24T20:01:38.718 [DEBUG] [Thread-308092] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:01:38.775 [DEBUG] [Thread-308092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:01:38.776 [DEBUG] [Thread-308092] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:01:38.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:01:38.778 [DEBUG] [Thread-308092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:01:38.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:01:38.835 [DEBUG] [Thread-308092] [transport.py] [_log()] userauth is OK
2025-12-24T20:01:38.836 [DEBUG] [Thread-308092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:01:38.836 [DEBUG] [Thread-308092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:01:38.836 [DEBUG] [Thread-308092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:01:38.836 [DEBUG] [Thread-308092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:01:38.857 [INFO] [Thread-308092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:01:38.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:01:38.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:01:39.670 [DEBUG] [Thread-308092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:01:39.670 [DEBUG] [Thread-308092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:01:39.717 [DEBUG] [Thread-308092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:01:39.718 [DEBUG] [Thread-308092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:01:39.726 [DEBUG] [Thread-308092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:01:39.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:01:39.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:01:39.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:01:39.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:01:39.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:01:39.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:01:39.760 [DEBUG] [Thread-308092] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:01:44.031 [DEBUG] [Thread-308094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:01:59.301 [DEBUG] [Thread-308095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:02:01.240 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:02:01.242 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:02:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:02:09.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:02:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:02:10.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 1, 34), 14.55, 38.53, 0.0, 33.86, 19.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:02:10.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:01:34
2025-12-24T20:02:10.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:02:11.159 [DEBUG] [Thread-308096] [transport.py] [_log()] starting thread (client mode): 0xf5771ba0
2025-12-24T20:02:11.160 [DEBUG] [Thread-308096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:02:11.168 [DEBUG] [Thread-308096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:02:11.169 [INFO] [Thread-308096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:02:11.173 [DEBUG] [Thread-308096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:02:11.173 [DEBUG] [Thread-308096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:02:11.173 [DEBUG] [Thread-308096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:02:11.173 [DEBUG] [Thread-308096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:02:11.173 [DEBUG] [Thread-308096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:02:11.173 [DEBUG] [Thread-308096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:02:11.173 [DEBUG] [Thread-308096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:02:11.173 [DEBUG] [Thread-308096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] client lang: <none>
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] server lang: <none>
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] kex follows: False
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] Compression: none
2025-12-24T20:02:11.174 [DEBUG] [Thread-308096] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:02:11.206 [DEBUG] [Thread-308096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:02:11.210 [DEBUG] [Thread-308096] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:02:11.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:02:11.212 [DEBUG] [Thread-308096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:02:11.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:02:11.214 [DEBUG] [Thread-308096] [transport.py] [_log()] userauth is OK
2025-12-24T20:02:11.215 [DEBUG] [Thread-308096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:02:11.215 [DEBUG] [Thread-308096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:02:11.215 [DEBUG] [Thread-308096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:02:11.215 [DEBUG] [Thread-308096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:02:11.237 [INFO] [Thread-308096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:02:11.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:02:11.878 [DEBUG] [Thread-308096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:02:11.878 [DEBUG] [Thread-308096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:02:11.880 [DEBUG] [Thread-308096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:02:11.919 [DEBUG] [Thread-308096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:02:11.920 [DEBUG] [Thread-308096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:02:11.923 [DEBUG] [Thread-308096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:02:11.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:02:11.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:02:11.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:02:11.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:02:11.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:02:11.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:02:11.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:02:11.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:02:11.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:02:11.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.751107 -999.00  +19.40  19.32     43   +6.80 1 2 1 1 1   663    0 12.06 -31.74 ----- 24.2 19.3 164.2 37.4 20.1 -22.5 19.9 -22.0 19.8 -20.8 20.1 -21.7
2025-12-24T20:02:11.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:02:11.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:02:11.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.751107
2025-12-24T20:02:11.961 [DEBUG] [Thread-308096] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:02:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:02:11.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:02:11.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:02:11.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:02:11.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:02:11.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:01:34', tmtdew=14.55, humidity=38.53, cloud=0.0, wind=33.86, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:01:35.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:02:12.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:02:12.070 [DEBUG] [Thread-308099] [transport.py] [_log()] starting thread (client mode): 0xf57733d0
2025-12-24T20:02:12.071 [DEBUG] [Thread-308099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:02:12.086 [DEBUG] [Thread-308099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:02:12.086 [INFO] [Thread-308099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:02:12.093 [DEBUG] [Thread-308099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:02:12.093 [DEBUG] [Thread-308099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] client lang: <none>
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] server lang: <none>
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] kex follows: False
2025-12-24T20:02:12.094 [DEBUG] [Thread-308099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:02:12.095 [DEBUG] [Thread-308099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:02:12.095 [DEBUG] [Thread-308099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:02:12.095 [DEBUG] [Thread-308099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:02:12.095 [DEBUG] [Thread-308099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:02:12.095 [DEBUG] [Thread-308099] [transport.py] [_log()] Compression: none
2025-12-24T20:02:12.099 [DEBUG] [Thread-308099] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:02:12.151 [DEBUG] [Thread-308099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:02:12.151 [DEBUG] [Thread-308099] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:02:12.151 [DEBUG] [Thread-308099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:02:12.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:02:12.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:02:12.208 [DEBUG] [Thread-308099] [transport.py] [_log()] userauth is OK
2025-12-24T20:02:12.208 [DEBUG] [Thread-308099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:02:12.208 [DEBUG] [Thread-308099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:02:12.209 [DEBUG] [Thread-308099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:02:12.209 [DEBUG] [Thread-308099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:02:12.232 [INFO] [Thread-308099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:02:12.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:02:12.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:02:13.037 [DEBUG] [Thread-308099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:02:13.037 [DEBUG] [Thread-308099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:02:13.080 [DEBUG] [Thread-308099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:02:13.080 [DEBUG] [Thread-308099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:02:13.089 [DEBUG] [Thread-308099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:02:13.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:02:13.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:02:13.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:02:13.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:02:13.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:02:13.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:02:13.122 [DEBUG] [Thread-308099] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:02:14.412 [DEBUG] [Thread-308101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:02:16.919 [DEBUG] [Thread-308102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:02:29.582 [DEBUG] [Thread-308103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:02:43.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:02:43.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:02:43.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:02:44.661 [DEBUG] [Thread-308104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:02:44.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 2, 8), 14.56, 38.51, 0.0, 30.61, 19.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:02:44.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:02:08
2025-12-24T20:02:45.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:02:45.214 [DEBUG] [Thread-308105] [transport.py] [_log()] starting thread (client mode): 0xf572c6a0
2025-12-24T20:02:45.215 [DEBUG] [Thread-308105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:02:45.228 [DEBUG] [Thread-308105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:02:45.228 [INFO] [Thread-308105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] client lang: <none>
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] server lang: <none>
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] kex follows: False
2025-12-24T20:02:45.232 [DEBUG] [Thread-308105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:02:45.233 [DEBUG] [Thread-308105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:02:45.233 [DEBUG] [Thread-308105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:02:45.233 [DEBUG] [Thread-308105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:02:45.233 [DEBUG] [Thread-308105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:02:45.233 [DEBUG] [Thread-308105] [transport.py] [_log()] Compression: none
2025-12-24T20:02:45.233 [DEBUG] [Thread-308105] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:02:45.266 [DEBUG] [Thread-308105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:02:45.269 [DEBUG] [Thread-308105] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:02:45.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:02:45.271 [DEBUG] [Thread-308105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:02:45.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:02:45.274 [DEBUG] [Thread-308105] [transport.py] [_log()] userauth is OK
2025-12-24T20:02:45.274 [DEBUG] [Thread-308105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:02:45.274 [DEBUG] [Thread-308105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:02:45.274 [DEBUG] [Thread-308105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:02:45.274 [DEBUG] [Thread-308105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:02:45.295 [INFO] [Thread-308105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:02:45.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:02:45.956 [DEBUG] [Thread-308105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:02:45.957 [DEBUG] [Thread-308105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:02:45.967 [DEBUG] [Thread-308105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:02:45.997 [DEBUG] [Thread-308105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:02:45.997 [DEBUG] [Thread-308105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:02:46.001 [DEBUG] [Thread-308105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:02:46.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:02:46.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:02:46.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:02:46.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:02:46.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:02:46.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:02:46.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:02:46.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:02:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:02:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.751454 -999.00  +19.40  26.29     43   +6.80 1 2 1 1 1   647    0 12.07 -30.70 ----- 21.9 26.3 164.2 34.0 20.0 -22.4 19.9 -22.1 19.8 -20.7 20.1 -21.5
2025-12-24T20:02:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:02:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:02:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.751454
2025-12-24T20:02:46.037 [DEBUG] [Thread-308105] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:02:46.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:02:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:02:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:02:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:02:46.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:02:46.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:02:08', tmtdew=14.56, humidity=38.51, cloud=0.0, wind=30.61, temperature=19.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:02:05.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:02:46.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:02:46.142 [DEBUG] [Thread-308108] [transport.py] [_log()] starting thread (client mode): 0xf572c490
2025-12-24T20:02:46.142 [DEBUG] [Thread-308108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:02:46.157 [DEBUG] [Thread-308108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:02:46.157 [INFO] [Thread-308108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:02:46.164 [DEBUG] [Thread-308108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:02:46.164 [DEBUG] [Thread-308108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:02:46.164 [DEBUG] [Thread-308108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] client lang: <none>
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] server lang: <none>
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] kex follows: False
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] Compression: none
2025-12-24T20:02:46.165 [DEBUG] [Thread-308108] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:02:46.224 [DEBUG] [Thread-308108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:02:46.225 [DEBUG] [Thread-308108] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:02:46.226 [DEBUG] [Thread-308108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:02:46.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:02:46.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:02:46.283 [DEBUG] [Thread-308108] [transport.py] [_log()] userauth is OK
2025-12-24T20:02:46.283 [DEBUG] [Thread-308108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:02:46.283 [DEBUG] [Thread-308108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:02:46.283 [DEBUG] [Thread-308108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:02:46.283 [DEBUG] [Thread-308108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:02:46.297 [INFO] [Thread-308108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:02:46.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:02:46.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:02:47.148 [DEBUG] [Thread-308108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:02:47.148 [DEBUG] [Thread-308108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:02:47.196 [DEBUG] [Thread-308108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:02:47.196 [DEBUG] [Thread-308108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:02:47.205 [DEBUG] [Thread-308108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:02:47.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:02:47.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:02:47.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:02:47.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:02:47.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:02:47.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:02:47.241 [DEBUG] [Thread-308108] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:02:59.774 [DEBUG] [Thread-308110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:03:06.503 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:03:06.511 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:03:14.930 [DEBUG] [Thread-308111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:03:17.166 [DEBUG] [Thread-308112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:03:17.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:03:17.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:03:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:03:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 2, 41), 14.56, 38.49, 0.0, 30.56, 19.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:03:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:02:41
2025-12-24T20:03:18.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:03:18.634 [DEBUG] [Thread-308113] [transport.py] [_log()] starting thread (client mode): 0xf5788ca0
2025-12-24T20:03:18.634 [DEBUG] [Thread-308113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:03:18.646 [DEBUG] [Thread-308113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:03:18.647 [INFO] [Thread-308113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:03:18.650 [DEBUG] [Thread-308113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:03:18.650 [DEBUG] [Thread-308113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:03:18.650 [DEBUG] [Thread-308113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:03:18.650 [DEBUG] [Thread-308113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:03:18.650 [DEBUG] [Thread-308113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:03:18.650 [DEBUG] [Thread-308113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:03:18.650 [DEBUG] [Thread-308113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:03:18.650 [DEBUG] [Thread-308113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] client lang: <none>
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] server lang: <none>
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] kex follows: False
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] Compression: none
2025-12-24T20:03:18.651 [DEBUG] [Thread-308113] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:03:18.691 [DEBUG] [Thread-308113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:03:18.694 [DEBUG] [Thread-308113] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:03:18.695 [DEBUG] [Thread-308113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:03:18.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:03:18.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:03:18.728 [DEBUG] [Thread-308113] [transport.py] [_log()] userauth is OK
2025-12-24T20:03:18.729 [DEBUG] [Thread-308113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:03:18.729 [DEBUG] [Thread-308113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:03:18.729 [DEBUG] [Thread-308113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:03:18.729 [DEBUG] [Thread-308113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:03:18.759 [INFO] [Thread-308113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:03:18.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:03:19.404 [DEBUG] [Thread-308113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:03:19.405 [DEBUG] [Thread-308113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:03:19.405 [DEBUG] [Thread-308113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:03:19.447 [DEBUG] [Thread-308113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:03:19.447 [DEBUG] [Thread-308113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:03:19.449 [DEBUG] [Thread-308113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:03:19.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:03:19.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:03:19.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:03:19.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:03:19.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:03:19.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:03:19.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:03:19.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:03:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:03:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.752149 -999.00  +19.40  21.91     44   +6.80 1 2 1 1 1   614    0 11.95 -31.80 ----- 22.1 21.9 168.4 33.4 20.0 -22.5 19.9 -22.1 19.8 -20.8 20.1 -21.6
2025-12-24T20:03:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:03:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:03:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.752149
2025-12-24T20:03:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:03:19.484 [DEBUG] [Thread-308113] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:03:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:03:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:03:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:03:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:03:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:02:41', tmtdew=14.56, humidity=38.49, cloud=0.0, wind=30.56, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:03:05.674', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:03:19.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:03:19.579 [DEBUG] [Thread-308116] [transport.py] [_log()] starting thread (client mode): 0xf572b5b0
2025-12-24T20:03:19.579 [DEBUG] [Thread-308116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:03:19.594 [DEBUG] [Thread-308116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:03:19.594 [INFO] [Thread-308116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:03:19.601 [DEBUG] [Thread-308116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] client lang: <none>
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] server lang: <none>
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] kex follows: False
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] Compression: none
2025-12-24T20:03:19.602 [DEBUG] [Thread-308116] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:03:19.658 [DEBUG] [Thread-308116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:03:19.658 [DEBUG] [Thread-308116] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:03:19.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:03:19.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:03:19.659 [DEBUG] [Thread-308116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:03:19.720 [DEBUG] [Thread-308116] [transport.py] [_log()] userauth is OK
2025-12-24T20:03:19.720 [DEBUG] [Thread-308116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:03:19.720 [DEBUG] [Thread-308116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:03:19.720 [DEBUG] [Thread-308116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:03:19.720 [DEBUG] [Thread-308116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:03:19.737 [INFO] [Thread-308116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:03:19.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:03:19.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:03:20.627 [DEBUG] [Thread-308116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:03:20.627 [DEBUG] [Thread-308116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:03:20.674 [DEBUG] [Thread-308116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:03:20.674 [DEBUG] [Thread-308116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:03:20.683 [DEBUG] [Thread-308116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:03:20.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:03: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')
2025-12-24T20:03: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
2025-12-24T20:03:20.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:03:20.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:03:20.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:03:20.717 [DEBUG] [Thread-308116] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:03:30.052 [DEBUG] [Thread-308118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:03:45.221 [DEBUG] [Thread-308119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:03:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:03:50.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:03:50.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:03:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 3, 15), 14.55, 38.51, 0.0, 30.65, 19.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:03:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:03:15
2025-12-24T20:03:52.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:03:52.185 [DEBUG] [Thread-308120] [transport.py] [_log()] starting thread (client mode): 0xf57882e0
2025-12-24T20:03:52.186 [DEBUG] [Thread-308120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:03:52.198 [DEBUG] [Thread-308120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:03:52.198 [INFO] [Thread-308120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:03:52.204 [DEBUG] [Thread-308120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:03:52.204 [DEBUG] [Thread-308120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:03:52.204 [DEBUG] [Thread-308120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:03:52.204 [DEBUG] [Thread-308120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:03:52.204 [DEBUG] [Thread-308120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:03:52.205 [DEBUG] [Thread-308120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:03:52.205 [DEBUG] [Thread-308120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:03:52.205 [DEBUG] [Thread-308120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:03:52.205 [DEBUG] [Thread-308120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:03:52.205 [DEBUG] [Thread-308120] [transport.py] [_log()] client lang: <none>
2025-12-24T20:03:52.205 [DEBUG] [Thread-308120] [transport.py] [_log()] server lang: <none>
2025-12-24T20:03:52.205 [DEBUG] [Thread-308120] [transport.py] [_log()] kex follows: False
2025-12-24T20:03:52.205 [DEBUG] [Thread-308120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:03:52.206 [DEBUG] [Thread-308120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:03:52.206 [DEBUG] [Thread-308120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:03:52.206 [DEBUG] [Thread-308120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:03:52.206 [DEBUG] [Thread-308120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:03:52.206 [DEBUG] [Thread-308120] [transport.py] [_log()] Compression: none
2025-12-24T20:03:52.207 [DEBUG] [Thread-308120] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:03:52.247 [DEBUG] [Thread-308120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:03:52.252 [DEBUG] [Thread-308120] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:03:52.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:03:52.255 [DEBUG] [Thread-308120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:03:52.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:03:52.258 [DEBUG] [Thread-308120] [transport.py] [_log()] userauth is OK
2025-12-24T20:03:52.259 [DEBUG] [Thread-308120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:03:52.259 [DEBUG] [Thread-308120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:03:52.259 [DEBUG] [Thread-308120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:03:52.259 [DEBUG] [Thread-308120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:03:52.285 [INFO] [Thread-308120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:03:52.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:03:52.945 [DEBUG] [Thread-308120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:03:52.945 [DEBUG] [Thread-308120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:03:52.946 [DEBUG] [Thread-308120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:03:52.986 [DEBUG] [Thread-308120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:03:52.986 [DEBUG] [Thread-308120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:03:52.990 [DEBUG] [Thread-308120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:03:53.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:03:53.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:03:53.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:03:53.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:03:53.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:03:53.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:03:53.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:03:53.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:03:53.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:03:53.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.752496 -999.00  +19.40  24.56     43   +6.80 1 2 1 1 1   597    0 11.94 -32.45 ----- 22.1 24.6 172.2 31.3 20.1 -22.4 19.9 -22.0 19.8 -20.6 20.0 -21.5
2025-12-24T20:03:53.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:03:53.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:03:53.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.752496
2025-12-24T20:03:53.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:03:53.040 [DEBUG] [Thread-308120] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:03:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:03:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:03:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:03:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:03:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:03:15', tmtdew=14.55, humidity=38.51, cloud=0.0, wind=30.65, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:03:35.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:03:53.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:03:53.133 [DEBUG] [Thread-308123] [transport.py] [_log()] starting thread (client mode): 0xf5729390
2025-12-24T20:03:53.133 [DEBUG] [Thread-308123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:03:53.147 [DEBUG] [Thread-308123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:03:53.147 [INFO] [Thread-308123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] client lang: <none>
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] server lang: <none>
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] kex follows: False
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] Compression: none
2025-12-24T20:03:53.155 [DEBUG] [Thread-308123] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:03:53.214 [DEBUG] [Thread-308123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:03:53.214 [DEBUG] [Thread-308123] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:03:53.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:03:53.214 [DEBUG] [Thread-308123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:03:53.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:03:53.271 [DEBUG] [Thread-308123] [transport.py] [_log()] userauth is OK
2025-12-24T20:03:53.271 [DEBUG] [Thread-308123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:03:53.271 [DEBUG] [Thread-308123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:03:53.271 [DEBUG] [Thread-308123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:03:53.271 [DEBUG] [Thread-308123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:03:53.290 [INFO] [Thread-308123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:03:53.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:03:53.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:03:54.090 [DEBUG] [Thread-308123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:03:54.091 [DEBUG] [Thread-308123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:03:54.137 [DEBUG] [Thread-308123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:03:54.137 [DEBUG] [Thread-308123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:03:54.146 [DEBUG] [Thread-308123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:03:54.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:03:54.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:03:54.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:03:54.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:03:54.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:03:54.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:03:54.180 [DEBUG] [Thread-308123] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:04:00.692 [DEBUG] [Thread-308125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:04:15.897 [DEBUG] [Thread-308126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:04:17.172 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:04:17.174 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:04:17.438 [DEBUG] [Thread-308127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:04:24.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:04:24.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:04:24.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:04:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 3, 48), 14.51, 38.49, 0.0, 35.18, 19.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:04:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:03:48
2025-12-24T20:04:26.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:04:26.537 [DEBUG] [Thread-308128] [transport.py] [_log()] starting thread (client mode): 0xf57a86a0
2025-12-24T20:04:26.538 [DEBUG] [Thread-308128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:04:26.550 [DEBUG] [Thread-308128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:04:26.550 [INFO] [Thread-308128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] client lang: <none>
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] server lang: <none>
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] kex follows: False
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:04:26.554 [DEBUG] [Thread-308128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:04:26.555 [DEBUG] [Thread-308128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:04:26.555 [DEBUG] [Thread-308128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:04:26.555 [DEBUG] [Thread-308128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:04:26.555 [DEBUG] [Thread-308128] [transport.py] [_log()] Compression: none
2025-12-24T20:04:26.555 [DEBUG] [Thread-308128] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:04:26.585 [DEBUG] [Thread-308128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:04:26.588 [DEBUG] [Thread-308128] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:04:26.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:04:26.591 [DEBUG] [Thread-308128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:04:26.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:04:26.593 [DEBUG] [Thread-308128] [transport.py] [_log()] userauth is OK
2025-12-24T20:04:26.593 [DEBUG] [Thread-308128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:04:26.593 [DEBUG] [Thread-308128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:04:26.593 [DEBUG] [Thread-308128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:04:26.593 [DEBUG] [Thread-308128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:04:26.613 [INFO] [Thread-308128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:04:26.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:04:27.243 [DEBUG] [Thread-308128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:04:27.244 [DEBUG] [Thread-308128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:04:27.244 [DEBUG] [Thread-308128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:04:27.285 [DEBUG] [Thread-308128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:04:27.285 [DEBUG] [Thread-308128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:04:27.288 [DEBUG] [Thread-308128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:04:27.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:04:27.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:04:27.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:04:27.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:04:27.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:04:27.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:04:27.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:04:27.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:04:27.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:04:27.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.752843 -999.00  +19.40  14.46     44   +6.90 1 2 1 1 1   579    0 11.89 -31.50 ----- 21.1 14.5 169.0 28.4 20.0 -22.4 19.9 -22.0 19.6 -20.6 20.0 -21.6
2025-12-24T20:04:27.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:04:27.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:04:27.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.752843
2025-12-24T20:04:27.317 [DEBUG] [Thread-308128] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:04:27.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:04:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:04:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:04:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:04:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:04:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:03:48', tmtdew=14.51, humidity=38.49, cloud=0.0, wind=35.18, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:04:05.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:04:27.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:04:27.419 [DEBUG] [Thread-308131] [transport.py] [_log()] starting thread (client mode): 0xf57a8e20
2025-12-24T20:04:27.419 [DEBUG] [Thread-308131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:04:27.434 [DEBUG] [Thread-308131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:04:27.434 [INFO] [Thread-308131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] client lang: <none>
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] server lang: <none>
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] kex follows: False
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:04:27.442 [DEBUG] [Thread-308131] [transport.py] [_log()] Compression: none
2025-12-24T20:04:27.443 [DEBUG] [Thread-308131] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:04:27.498 [DEBUG] [Thread-308131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:04:27.498 [DEBUG] [Thread-308131] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:04:27.498 [DEBUG] [Thread-308131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:04:27.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:04:27.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:04:27.556 [DEBUG] [Thread-308131] [transport.py] [_log()] userauth is OK
2025-12-24T20:04:27.556 [DEBUG] [Thread-308131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:04:27.556 [DEBUG] [Thread-308131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:04:27.556 [DEBUG] [Thread-308131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:04:27.556 [DEBUG] [Thread-308131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:04:27.575 [INFO] [Thread-308131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:04:27.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:04:27.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:04:28.410 [DEBUG] [Thread-308131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:04:28.410 [DEBUG] [Thread-308131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:04:28.458 [DEBUG] [Thread-308131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:04:28.458 [DEBUG] [Thread-308131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:04:28.467 [DEBUG] [Thread-308131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:04:28.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:04:28.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:04:28.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:04:28.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:04:28.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:04:28.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:04:28.501 [DEBUG] [Thread-308131] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:04:30.999 [DEBUG] [Thread-308133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:04:46.195 [DEBUG] [Thread-308134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:04:58.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:04:58.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:04:58.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:04:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 4, 21), 14.5, 38.51, 0.0, 35.66, 19.52, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:04:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:04:21
2025-12-24T20:04:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:05:00.094 [DEBUG] [Thread-308135] [transport.py] [_log()] starting thread (client mode): 0xf5770580
2025-12-24T20:05:00.095 [DEBUG] [Thread-308135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:05:00.103 [DEBUG] [Thread-308135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:05:00.103 [INFO] [Thread-308135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:05:00.108 [DEBUG] [Thread-308135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] client lang: <none>
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] server lang: <none>
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] kex follows: False
2025-12-24T20:05:00.109 [DEBUG] [Thread-308135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:05:00.110 [DEBUG] [Thread-308135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:05:00.110 [DEBUG] [Thread-308135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:05:00.110 [DEBUG] [Thread-308135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:05:00.110 [DEBUG] [Thread-308135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:05:00.110 [DEBUG] [Thread-308135] [transport.py] [_log()] Compression: none
2025-12-24T20:05:00.110 [DEBUG] [Thread-308135] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:05:00.152 [DEBUG] [Thread-308135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:05:00.156 [DEBUG] [Thread-308135] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:05:00.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:05:00.159 [DEBUG] [Thread-308135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:05:00.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:05:00.161 [DEBUG] [Thread-308135] [transport.py] [_log()] userauth is OK
2025-12-24T20:05:00.161 [DEBUG] [Thread-308135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:05:00.161 [DEBUG] [Thread-308135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:05:00.161 [DEBUG] [Thread-308135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:05:00.161 [DEBUG] [Thread-308135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:05:00.190 [INFO] [Thread-308135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:05:00.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:05:00.840 [DEBUG] [Thread-308135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:05:00.841 [DEBUG] [Thread-308135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:05:00.841 [DEBUG] [Thread-308135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:05:00.882 [DEBUG] [Thread-308135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:05:00.882 [DEBUG] [Thread-308135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:05:00.884 [DEBUG] [Thread-308135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:05:00.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:05:00.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:05:00.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:05:00.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:05:00.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:05:00.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:05:00.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:05:00.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:05:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:05:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.753190 -999.00  +19.40  22.99     44   +6.80 1 2 1 1 1   560    0 11.89 -30.30 ----- 24.1 23.0 151.1 28.8 20.0 -22.4 19.9 -22.0 19.7 -20.7 20.0 -21.6
2025-12-24T20:05:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:05:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:05:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.753190
2025-12-24T20:05:00.913 [DEBUG] [Thread-308135] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:05:00.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:05:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:05:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:05:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:05:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:05:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:04:21', tmtdew=14.5, humidity=38.51, cloud=0.0, wind=35.66, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:04:35.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:05:01.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:05:01.017 [DEBUG] [Thread-308138] [transport.py] [_log()] starting thread (client mode): 0xf572edd0
2025-12-24T20:05:01.017 [DEBUG] [Thread-308138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:05:01.032 [DEBUG] [Thread-308138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:05:01.032 [INFO] [Thread-308138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:05:01.039 [DEBUG] [Thread-308138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:05:01.039 [DEBUG] [Thread-308138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:05:01.039 [DEBUG] [Thread-308138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:05:01.039 [DEBUG] [Thread-308138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:05:01.039 [DEBUG] [Thread-308138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:05:01.039 [DEBUG] [Thread-308138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:05:01.039 [DEBUG] [Thread-308138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:05:01.039 [DEBUG] [Thread-308138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] client lang: <none>
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] server lang: <none>
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] kex follows: False
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:05:01.040 [DEBUG] [Thread-308138] [transport.py] [_log()] Compression: none
2025-12-24T20:05:01.042 [DEBUG] [Thread-308138] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:05:01.099 [DEBUG] [Thread-308138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:05:01.100 [DEBUG] [Thread-308138] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:05:01.100 [DEBUG] [Thread-308138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:05:01.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:05:01.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:05:01.155 [DEBUG] [Thread-308138] [transport.py] [_log()] userauth is OK
2025-12-24T20:05:01.156 [DEBUG] [Thread-308138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:05:01.156 [DEBUG] [Thread-308138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:05:01.156 [DEBUG] [Thread-308138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:05:01.156 [DEBUG] [Thread-308138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:05:01.175 [INFO] [Thread-308138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:05:01.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:05:01.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:05:01.315 [DEBUG] [Thread-308140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:05:02.298 [DEBUG] [Thread-308138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:05:02.298 [DEBUG] [Thread-308138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:05:02.299 [DEBUG] [Thread-308138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:05:02.299 [DEBUG] [Thread-308138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:05:02.308 [DEBUG] [Thread-308138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:05:02.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:05:02.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:05: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') -> 00000000
2025-12-24T20:05:02.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:05:02.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:05:02.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:05:02.347 [DEBUG] [Thread-308138] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:05:16.528 [DEBUG] [Thread-308141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:05:17.700 [DEBUG] [Thread-308142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:05:25.738 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:05:25.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:05:31.663 [DEBUG] [Thread-308143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:05:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:05:32.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:05:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:05:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 4, 56), 14.44, 38.53, 0.0, 25.39, 19.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:05:34.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:04:56
2025-12-24T20:05:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:05:35.563 [DEBUG] [Thread-308144] [transport.py] [_log()] starting thread (client mode): 0xf57ab610
2025-12-24T20:05:35.565 [DEBUG] [Thread-308144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:05:35.571 [DEBUG] [Thread-308144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:05:35.571 [INFO] [Thread-308144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:05:35.578 [DEBUG] [Thread-308144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:05:35.578 [DEBUG] [Thread-308144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] client lang: <none>
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] server lang: <none>
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] kex follows: False
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:05:35.579 [DEBUG] [Thread-308144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:05:35.580 [DEBUG] [Thread-308144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:05:35.580 [DEBUG] [Thread-308144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:05:35.580 [DEBUG] [Thread-308144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:05:35.580 [DEBUG] [Thread-308144] [transport.py] [_log()] Compression: none
2025-12-24T20:05:35.580 [DEBUG] [Thread-308144] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:05:35.619 [DEBUG] [Thread-308144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:05:35.625 [DEBUG] [Thread-308144] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:05:35.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:05:35.630 [DEBUG] [Thread-308144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:05:35.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:05:35.632 [DEBUG] [Thread-308144] [transport.py] [_log()] userauth is OK
2025-12-24T20:05:35.633 [DEBUG] [Thread-308144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:05:35.633 [DEBUG] [Thread-308144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:05:35.633 [DEBUG] [Thread-308144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:05:35.633 [DEBUG] [Thread-308144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:05:35.652 [INFO] [Thread-308144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:05:35.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:05:36.315 [DEBUG] [Thread-308144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:05:36.316 [DEBUG] [Thread-308144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:05:36.317 [DEBUG] [Thread-308144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:05:36.356 [DEBUG] [Thread-308144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:05:36.356 [DEBUG] [Thread-308144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:05:36.359 [DEBUG] [Thread-308144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:05:36.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:05:36.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:05:36.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:05:36.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:05:36.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:05:36.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:05:36.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:05:36.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:05:36.383 [DEBUG] [Thread-308144] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:05:36.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:05:36.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.753537 -999.00  +19.40  27.00     44   +6.80 1 2 1 1 1   542    0 11.88 -30.59 ----- 20.5 27.0 166.6 32.1 20.0 -22.4 19.9 -22.2 19.7 -20.6 20.0 -21.6
2025-12-24T20:05:36.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:05:36.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:05:36.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.753537
2025-12-24T20:05:36.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:05:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:05:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:05:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:05:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:05:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:04:56', tmtdew=14.44, humidity=38.53, cloud=0.0, wind=25.39, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:05:05.597', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:05:36.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:05:36.492 [DEBUG] [Thread-308147] [transport.py] [_log()] starting thread (client mode): 0xf578bc10
2025-12-24T20:05:36.492 [DEBUG] [Thread-308147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:05:36.507 [DEBUG] [Thread-308147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:05:36.507 [INFO] [Thread-308147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:05:36.514 [DEBUG] [Thread-308147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] client lang: <none>
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] server lang: <none>
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] kex follows: False
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] Compression: none
2025-12-24T20:05:36.515 [DEBUG] [Thread-308147] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:05:36.570 [DEBUG] [Thread-308147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:05:36.570 [DEBUG] [Thread-308147] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:05:36.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:05:36.571 [DEBUG] [Thread-308147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:05:36.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:05:36.627 [DEBUG] [Thread-308147] [transport.py] [_log()] userauth is OK
2025-12-24T20:05:36.627 [DEBUG] [Thread-308147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:05:36.627 [DEBUG] [Thread-308147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:05:36.627 [DEBUG] [Thread-308147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:05:36.627 [DEBUG] [Thread-308147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:05:36.644 [INFO] [Thread-308147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:05:36.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:05:36.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:05:37.451 [DEBUG] [Thread-308147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:05:37.451 [DEBUG] [Thread-308147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:05:37.499 [DEBUG] [Thread-308147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:05:37.499 [DEBUG] [Thread-308147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:05:37.507 [DEBUG] [Thread-308147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:05:37.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:05:37.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:05:37.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:05:37.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:05:37.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:05:37.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:05:37.540 [DEBUG] [Thread-308147] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:05:46.775 [DEBUG] [Thread-308149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:06:01.960 [DEBUG] [Thread-308150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:06:07.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:06:07.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:06:07.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:06:08.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 5, 30), 14.39, 38.66, 0.0, 25.85, 19.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:06:08.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:05:30
2025-12-24T20:06:08.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:06:09.061 [DEBUG] [Thread-308151] [transport.py] [_log()] starting thread (client mode): 0xf578bbe0
2025-12-24T20:06:09.062 [DEBUG] [Thread-308151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:06:09.066 [DEBUG] [Thread-308151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:06:09.066 [INFO] [Thread-308151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:06:09.070 [DEBUG] [Thread-308151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] client lang: <none>
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] server lang: <none>
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] kex follows: False
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:06:09.071 [DEBUG] [Thread-308151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:06:09.072 [DEBUG] [Thread-308151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:06:09.072 [DEBUG] [Thread-308151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:06:09.072 [DEBUG] [Thread-308151] [transport.py] [_log()] Compression: none
2025-12-24T20:06:09.072 [DEBUG] [Thread-308151] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:06:09.107 [DEBUG] [Thread-308151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:06:09.111 [DEBUG] [Thread-308151] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:06:09.112 [DEBUG] [Thread-308151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:06:09.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:06:09.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:06:09.115 [DEBUG] [Thread-308151] [transport.py] [_log()] userauth is OK
2025-12-24T20:06:09.115 [DEBUG] [Thread-308151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:06:09.115 [DEBUG] [Thread-308151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:06:09.115 [DEBUG] [Thread-308151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:06:09.115 [DEBUG] [Thread-308151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:06:09.136 [INFO] [Thread-308151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:06:09.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:06:09.788 [DEBUG] [Thread-308151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:06:09.788 [DEBUG] [Thread-308151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:06:09.789 [DEBUG] [Thread-308151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:06:09.830 [DEBUG] [Thread-308151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:06:09.830 [DEBUG] [Thread-308151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:06:09.834 [DEBUG] [Thread-308151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:06:09.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:06:09.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:06:09.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:06:09.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:06:09.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:06:09.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:06:09.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:06:09.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:06:09.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:06:09.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.753885 -999.00  +19.40  18.81     44   +6.80 1 2 1 1 1   522    0 12.05 -29.58 ----- 27.6 18.8 176.5 27.8 20.0 -22.5 19.8 -22.1 19.6 -20.7 19.9 -21.5
2025-12-24T20:06:09.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:06:09.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:06:09.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.753885
2025-12-24T20:06:09.867 [DEBUG] [Thread-308151] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:06:09.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:06:09.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:06:09.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:06:09.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:06:09.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:06:09.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:05:30', tmtdew=14.39, humidity=38.66, cloud=0.0, wind=25.85, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:05:35.664', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:06:09.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:06:09.968 [DEBUG] [Thread-308154] [transport.py] [_log()] starting thread (client mode): 0xf57ab610
2025-12-24T20:06:09.968 [DEBUG] [Thread-308154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:06:09.982 [DEBUG] [Thread-308154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:06:09.982 [INFO] [Thread-308154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] client lang: <none>
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] server lang: <none>
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] kex follows: False
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] Compression: none
2025-12-24T20:06:09.990 [DEBUG] [Thread-308154] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:06:10.045 [DEBUG] [Thread-308154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:06:10.046 [DEBUG] [Thread-308154] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:06:10.046 [DEBUG] [Thread-308154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:06:10.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:06:10.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:06:10.103 [DEBUG] [Thread-308154] [transport.py] [_log()] userauth is OK
2025-12-24T20:06:10.103 [DEBUG] [Thread-308154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:06:10.103 [DEBUG] [Thread-308154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:06:10.103 [DEBUG] [Thread-308154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:06:10.103 [DEBUG] [Thread-308154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:06:10.118 [INFO] [Thread-308154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:06:10.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:06:10.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:06:10.916 [DEBUG] [Thread-308154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:06:10.916 [DEBUG] [Thread-308154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:06:10.964 [DEBUG] [Thread-308154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:06:10.964 [DEBUG] [Thread-308154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:06:10.973 [DEBUG] [Thread-308154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:06:10.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:06: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')
2025-12-24T20:06:10.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:06:10.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:06:10.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:06:10.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:06:11.007 [DEBUG] [Thread-308154] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:06:17.075 [DEBUG] [Thread-308156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:06:18.003 [DEBUG] [Thread-308157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:06:32.285 [DEBUG] [Thread-308158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:06:34.188 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:06:34.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:06:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:06:41.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:06:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:06:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 6, 6), 14.35, 38.78, 0.0, 28.07, 19.46, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:06:42.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:06:06
2025-12-24T20:06:42.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:06:42.602 [DEBUG] [Thread-308159] [transport.py] [_log()] starting thread (client mode): 0xf5770940
2025-12-24T20:06:42.602 [DEBUG] [Thread-308159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:06:42.605 [DEBUG] [Thread-308159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:06:42.605 [INFO] [Thread-308159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] client lang: <none>
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] server lang: <none>
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] kex follows: False
2025-12-24T20:06:42.609 [DEBUG] [Thread-308159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:06:42.610 [DEBUG] [Thread-308159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:06:42.610 [DEBUG] [Thread-308159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:06:42.610 [DEBUG] [Thread-308159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:06:42.610 [DEBUG] [Thread-308159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:06:42.610 [DEBUG] [Thread-308159] [transport.py] [_log()] Compression: none
2025-12-24T20:06:42.610 [DEBUG] [Thread-308159] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:06:42.637 [DEBUG] [Thread-308159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:06:42.641 [DEBUG] [Thread-308159] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:06:42.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:06:42.643 [DEBUG] [Thread-308159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:06:42.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:06:42.646 [DEBUG] [Thread-308159] [transport.py] [_log()] userauth is OK
2025-12-24T20:06:42.646 [DEBUG] [Thread-308159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:06:42.647 [DEBUG] [Thread-308159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:06:42.647 [DEBUG] [Thread-308159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:06:42.647 [DEBUG] [Thread-308159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:06:42.666 [INFO] [Thread-308159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:06:42.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:06:43.306 [DEBUG] [Thread-308159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:06:43.307 [DEBUG] [Thread-308159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:06:43.308 [DEBUG] [Thread-308159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:06:43.348 [DEBUG] [Thread-308159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:06:43.348 [DEBUG] [Thread-308159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:06:43.350 [DEBUG] [Thread-308159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:06:43.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:06:43.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:06:43.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:06:43.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:06:43.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:06:43.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:06:43.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:06:43.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:06:43.378 [DEBUG] [Thread-308159] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:06:43.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:06:43.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.754232 -999.00  +19.30  27.51     44   +6.80 1 2 1 1 1   503    0 11.97 -28.68 ----- 22.7 27.5 170.8 41.4 -999.0 -999.0 19.9 -22.0 19.7 -20.6 20.0 -21.4
2025-12-24T20:06:43.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:06:43.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:06:43.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.754232
2025-12-24T20:06:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:06:43.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:06:43.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:06:43.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:06:43.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:06:43.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:06:06', tmtdew=14.35, humidity=38.78, cloud=0.0, wind=28.07, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:06:05.645', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:06:43.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:06:43.642 [DEBUG] [Thread-308162] [transport.py] [_log()] starting thread (client mode): 0xf5770340
2025-12-24T20:06:43.642 [DEBUG] [Thread-308162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:06:43.642 [DEBUG] [Thread-308162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:06:43.642 [INFO] [Thread-308162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] client lang: <none>
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] server lang: <none>
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] kex follows: False
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] Compression: none
2025-12-24T20:06:43.651 [DEBUG] [Thread-308162] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:06:43.714 [DEBUG] [Thread-308162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:06:43.714 [DEBUG] [Thread-308162] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:06:43.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:06:43.715 [DEBUG] [Thread-308162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:06:43.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:06:43.771 [DEBUG] [Thread-308162] [transport.py] [_log()] userauth is OK
2025-12-24T20:06:43.771 [DEBUG] [Thread-308162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:06:43.771 [DEBUG] [Thread-308162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:06:43.771 [DEBUG] [Thread-308162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:06:43.771 [DEBUG] [Thread-308162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:06:43.786 [INFO] [Thread-308162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:06:43.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:06:43.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:06:44.621 [DEBUG] [Thread-308162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:06:44.621 [DEBUG] [Thread-308162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:06:44.668 [DEBUG] [Thread-308162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:06:44.668 [DEBUG] [Thread-308162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:06:44.677 [DEBUG] [Thread-308162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:06:44.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:06:44.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:06: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') -> 00000000
2025-12-24T20:06:44.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:06:44.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:06:44.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:06:44.712 [DEBUG] [Thread-308162] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:06:47.380 [DEBUG] [Thread-308164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:07:02.565 [DEBUG] [Thread-308165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:07:14.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:07:14.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:07:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:07:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 6, 39), 14.31, 38.88, 0.0, 34.48, 19.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:07:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:06:39
2025-12-24T20:07:16.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:07:16.524 [DEBUG] [Thread-308166] [transport.py] [_log()] starting thread (client mode): 0xf5728b50
2025-12-24T20:07:16.525 [DEBUG] [Thread-308166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:07:16.540 [DEBUG] [Thread-308166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:07:16.540 [INFO] [Thread-308166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] client lang: <none>
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] server lang: <none>
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] kex follows: False
2025-12-24T20:07:16.544 [DEBUG] [Thread-308166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:07:16.545 [DEBUG] [Thread-308166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:07:16.545 [DEBUG] [Thread-308166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:07:16.545 [DEBUG] [Thread-308166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:07:16.545 [DEBUG] [Thread-308166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:07:16.545 [DEBUG] [Thread-308166] [transport.py] [_log()] Compression: none
2025-12-24T20:07:16.545 [DEBUG] [Thread-308166] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:07:16.578 [DEBUG] [Thread-308166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:07:16.581 [DEBUG] [Thread-308166] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:07:16.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:07:16.583 [DEBUG] [Thread-308166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:07:16.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:07:16.585 [DEBUG] [Thread-308166] [transport.py] [_log()] userauth is OK
2025-12-24T20:07:16.585 [DEBUG] [Thread-308166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:07:16.585 [DEBUG] [Thread-308166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:07:16.585 [DEBUG] [Thread-308166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:07:16.585 [DEBUG] [Thread-308166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:07:16.617 [INFO] [Thread-308166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:07:16.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:07:17.284 [DEBUG] [Thread-308166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:07:17.284 [DEBUG] [Thread-308166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:07:17.285 [DEBUG] [Thread-308166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:07:17.326 [DEBUG] [Thread-308166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:07:17.326 [DEBUG] [Thread-308166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:07:17.328 [DEBUG] [Thread-308166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:07:17.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:07:17.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:07:17.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:07:17.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:07:17.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:07:17.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:07:17.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:07:17.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:07:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:07:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.754579 -999.00  +19.30  15.52     44   +6.80 1 2 1 1 1   483    0 12.03 -28.22 ----- 21.5 15.5 165.8 29.9 19.9 -22.3 19.9 -22.0 19.6 -20.6 20.0 -21.4
2025-12-24T20:07:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:07:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:07:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.754579
2025-12-24T20:07:17.355 [DEBUG] [Thread-308166] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:07:17.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:07:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:07:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:07:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:07:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:07:17.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:06:39', tmtdew=14.31, humidity=38.88, cloud=0.0, wind=34.48, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:06:35.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:07:17.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:07:17.462 [DEBUG] [Thread-308169] [transport.py] [_log()] starting thread (client mode): 0xf818aaa0
2025-12-24T20:07:17.462 [DEBUG] [Thread-308169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:07:17.481 [DEBUG] [Thread-308169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:07:17.481 [INFO] [Thread-308169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] client lang: <none>
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] server lang: <none>
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] kex follows: False
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] Compression: none
2025-12-24T20:07:17.488 [DEBUG] [Thread-308169] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:07:17.546 [DEBUG] [Thread-308169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:07:17.546 [DEBUG] [Thread-308169] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:07:17.546 [DEBUG] [Thread-308169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:07:17.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:07:17.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:07:17.603 [DEBUG] [Thread-308169] [transport.py] [_log()] userauth is OK
2025-12-24T20:07:17.603 [DEBUG] [Thread-308169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:07:17.603 [DEBUG] [Thread-308169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:07:17.603 [DEBUG] [Thread-308169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:07:17.603 [DEBUG] [Thread-308169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:07:17.617 [INFO] [Thread-308169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:07:17.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:07:17.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:07:17.674 [DEBUG] [Thread-308171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:07:18.293 [DEBUG] [Thread-308172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:07:18.445 [DEBUG] [Thread-308169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:07:18.446 [DEBUG] [Thread-308169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:07:18.484 [DEBUG] [Thread-308169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:07:18.485 [DEBUG] [Thread-308169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:07:18.494 [DEBUG] [Thread-308169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:07:18.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:07:18.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:07:18.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:07:18.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:07:18.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:07:18.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:07:18.533 [DEBUG] [Thread-308169] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:07:32.878 [DEBUG] [Thread-308173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:07:38.520 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:07:38.525 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:07:48.023 [DEBUG] [Thread-308174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:07:48.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:07:48.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:07:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:07:49.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 7, 14), 14.31, 38.89, 0.0, 35.38, 19.44, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:07:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:07:14
2025-12-24T20:07:50.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:07:50.235 [DEBUG] [Thread-308175] [transport.py] [_log()] starting thread (client mode): 0xf5773520
2025-12-24T20:07:50.238 [DEBUG] [Thread-308175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:07:50.238 [DEBUG] [Thread-308175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:07:50.238 [INFO] [Thread-308175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] client lang: <none>
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] server lang: <none>
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] kex follows: False
2025-12-24T20:07:50.245 [DEBUG] [Thread-308175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:07:50.246 [DEBUG] [Thread-308175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:07:50.246 [DEBUG] [Thread-308175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:07:50.246 [DEBUG] [Thread-308175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:07:50.246 [DEBUG] [Thread-308175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:07:50.246 [DEBUG] [Thread-308175] [transport.py] [_log()] Compression: none
2025-12-24T20:07:50.246 [DEBUG] [Thread-308175] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:07:50.281 [DEBUG] [Thread-308175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:07:50.284 [DEBUG] [Thread-308175] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:07:50.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:07:50.286 [DEBUG] [Thread-308175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:07:50.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:07:50.289 [DEBUG] [Thread-308175] [transport.py] [_log()] userauth is OK
2025-12-24T20:07:50.289 [DEBUG] [Thread-308175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:07:50.289 [DEBUG] [Thread-308175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:07:50.289 [DEBUG] [Thread-308175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:07:50.289 [DEBUG] [Thread-308175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:07:50.301 [INFO] [Thread-308175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:07:50.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:07:50.894 [DEBUG] [Thread-308175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:07:50.894 [DEBUG] [Thread-308175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:07:50.895 [DEBUG] [Thread-308175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:07:50.935 [DEBUG] [Thread-308175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:07:50.935 [DEBUG] [Thread-308175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:07:50.936 [DEBUG] [Thread-308175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:07:50.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:07:50.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:07:50.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:07:50.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:07:50.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:07:50.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:07:50.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:07:50.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:07:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:07:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.754926 -999.00  +19.30  25.86     44   +6.90 1 2 1 1 1   463    0 12.01 -26.03 ----- 27.3 25.9 172.7 34.2 19.9 -22.4 19.9 -22.2 19.6 -20.4 19.9 -21.5
2025-12-24T20:07:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:07:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:07:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.754926
2025-12-24T20:07:50.965 [DEBUG] [Thread-308175] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:07:50.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:07:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:07:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:07:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:07:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:07:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:07:14', tmtdew=14.31, humidity=38.89, cloud=0.0, wind=35.38, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:07:05.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:07:51.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:07:51.074 [DEBUG] [Thread-308178] [transport.py] [_log()] starting thread (client mode): 0xf5788850
2025-12-24T20:07:51.074 [DEBUG] [Thread-308178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:07:51.088 [DEBUG] [Thread-308178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:07:51.088 [INFO] [Thread-308178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] client lang: <none>
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] server lang: <none>
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] kex follows: False
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:07:51.096 [DEBUG] [Thread-308178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:07:51.097 [DEBUG] [Thread-308178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:07:51.097 [DEBUG] [Thread-308178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:07:51.097 [DEBUG] [Thread-308178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:07:51.097 [DEBUG] [Thread-308178] [transport.py] [_log()] Compression: none
2025-12-24T20:07:51.099 [DEBUG] [Thread-308178] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:07:51.154 [DEBUG] [Thread-308178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:07:51.155 [DEBUG] [Thread-308178] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:07:51.155 [DEBUG] [Thread-308178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:07:51.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:07:51.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:07:51.211 [DEBUG] [Thread-308178] [transport.py] [_log()] userauth is OK
2025-12-24T20:07:51.211 [DEBUG] [Thread-308178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:07:51.211 [DEBUG] [Thread-308178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:07:51.211 [DEBUG] [Thread-308178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:07:51.211 [DEBUG] [Thread-308178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:07:51.225 [INFO] [Thread-308178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:07:51.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:07:51.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:07:52.079 [DEBUG] [Thread-308178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:07:52.079 [DEBUG] [Thread-308178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:07:52.126 [DEBUG] [Thread-308178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:07:52.127 [DEBUG] [Thread-308178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:07:52.135 [DEBUG] [Thread-308178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:07:52.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:07:52.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:07:52.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:07:52.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:07:52.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:07:52.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:07:52.169 [DEBUG] [Thread-308178] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:08:03.319 [DEBUG] [Thread-308180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:08:18.524 [DEBUG] [Thread-308181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:08:18.625 [DEBUG] [Thread-308182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:08:22.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:08:22.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:08:22.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:08:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 7, 47), 14.25, 38.91, 0.0, 29.04, 19.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:08:25.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:07:47
2025-12-24T20:08:26.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:08:26.240 [DEBUG] [Thread-308183] [transport.py] [_log()] starting thread (client mode): 0xf818b700
2025-12-24T20:08:26.241 [DEBUG] [Thread-308183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:08:26.249 [DEBUG] [Thread-308183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:08:26.249 [INFO] [Thread-308183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] client lang: <none>
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] server lang: <none>
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] kex follows: False
2025-12-24T20:08:26.255 [DEBUG] [Thread-308183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:08:26.256 [DEBUG] [Thread-308183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:08:26.256 [DEBUG] [Thread-308183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:08:26.256 [DEBUG] [Thread-308183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:08:26.256 [DEBUG] [Thread-308183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:08:26.256 [DEBUG] [Thread-308183] [transport.py] [_log()] Compression: none
2025-12-24T20:08:26.256 [DEBUG] [Thread-308183] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:08:26.291 [DEBUG] [Thread-308183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:08:26.295 [DEBUG] [Thread-308183] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:08:26.296 [DEBUG] [Thread-308183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:08:26.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:08:26.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:08:26.301 [DEBUG] [Thread-308183] [transport.py] [_log()] userauth is OK
2025-12-24T20:08:26.301 [DEBUG] [Thread-308183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:08:26.301 [DEBUG] [Thread-308183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:08:26.301 [DEBUG] [Thread-308183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:08:26.301 [DEBUG] [Thread-308183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:08:26.321 [INFO] [Thread-308183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:08:26.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:08:26.939 [DEBUG] [Thread-308183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:08:26.939 [DEBUG] [Thread-308183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:08:26.940 [DEBUG] [Thread-308183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:08:26.981 [DEBUG] [Thread-308183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:08:26.981 [DEBUG] [Thread-308183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:08:26.984 [DEBUG] [Thread-308183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:08:26.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:08:26.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:08:27.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:08:27.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:08:27.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:08:27.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:08:27.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:08:27.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:08:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:08:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.755273 -999.00  +19.30  18.81     44   +6.90 1 2 1 1 1   444    0 12.03 -28.40 ----- 23.2 18.8 170.6 38.4 19.9 -22.4 19.8 -22.1 19.6 -20.5 19.9 -21.5
2025-12-24T20:08:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:08:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:08:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.755273
2025-12-24T20:08:27.020 [DEBUG] [Thread-308183] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:08:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:08:27.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:08:27.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:08:27.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:08:27.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:08:27.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:07:47', tmtdew=14.25, humidity=38.91, cloud=0.0, wind=29.04, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:07:35.587', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:08:27.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:08:27.119 [DEBUG] [Thread-308186] [transport.py] [_log()] starting thread (client mode): 0xf5773df0
2025-12-24T20:08:27.119 [DEBUG] [Thread-308186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:08:27.133 [DEBUG] [Thread-308186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:08:27.133 [INFO] [Thread-308186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] client lang: <none>
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] server lang: <none>
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] kex follows: False
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] Compression: none
2025-12-24T20:08:27.141 [DEBUG] [Thread-308186] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:08:27.198 [DEBUG] [Thread-308186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:08:27.198 [DEBUG] [Thread-308186] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:08:27.198 [DEBUG] [Thread-308186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:08:27.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:08:27.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:08:27.256 [DEBUG] [Thread-308186] [transport.py] [_log()] userauth is OK
2025-12-24T20:08:27.256 [DEBUG] [Thread-308186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:08:27.256 [DEBUG] [Thread-308186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:08:27.256 [DEBUG] [Thread-308186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:08:27.256 [DEBUG] [Thread-308186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:08:27.270 [INFO] [Thread-308186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:08:27.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:08:27.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:08:28.121 [DEBUG] [Thread-308186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:08:28.121 [DEBUG] [Thread-308186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:08:28.172 [DEBUG] [Thread-308186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:08:28.172 [DEBUG] [Thread-308186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:08:28.181 [DEBUG] [Thread-308186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:08:28.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:08:28.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:08:28.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:08:28.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:08:28.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:08:28.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:08:28.217 [DEBUG] [Thread-308186] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:08:33.626 [DEBUG] [Thread-308188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:08:44.388 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:08:44.399 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:08:48.818 [DEBUG] [Thread-308189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:08:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:08:58.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:08: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
2025-12-24T20:08:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 8, 20), 14.24, 38.93, 0.0, 29.64, 19.41, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:08:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:08:20
2025-12-24T20:08:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:08:59.897 [DEBUG] [Thread-308190] [transport.py] [_log()] starting thread (client mode): 0xf818aa70
2025-12-24T20:08:59.898 [DEBUG] [Thread-308190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:08:59.906 [DEBUG] [Thread-308190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:08:59.906 [INFO] [Thread-308190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] client lang: <none>
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] server lang: <none>
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] kex follows: False
2025-12-24T20:08:59.912 [DEBUG] [Thread-308190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:08:59.913 [DEBUG] [Thread-308190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:08:59.913 [DEBUG] [Thread-308190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:08:59.913 [DEBUG] [Thread-308190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:08:59.913 [DEBUG] [Thread-308190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:08:59.913 [DEBUG] [Thread-308190] [transport.py] [_log()] Compression: none
2025-12-24T20:08:59.913 [DEBUG] [Thread-308190] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:08:59.946 [DEBUG] [Thread-308190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:08:59.949 [DEBUG] [Thread-308190] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:08:59.950 [DEBUG] [Thread-308190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:08:59.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:08:59.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:08:59.953 [DEBUG] [Thread-308190] [transport.py] [_log()] userauth is OK
2025-12-24T20:08:59.953 [DEBUG] [Thread-308190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:08:59.953 [DEBUG] [Thread-308190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:08:59.953 [DEBUG] [Thread-308190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:08:59.953 [DEBUG] [Thread-308190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:08:59.972 [INFO] [Thread-308190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:08:59.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:09:00.643 [DEBUG] [Thread-308190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:09:00.643 [DEBUG] [Thread-308190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:09:00.644 [DEBUG] [Thread-308190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:09:00.683 [DEBUG] [Thread-308190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:09:00.683 [DEBUG] [Thread-308190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:09:00.686 [DEBUG] [Thread-308190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:09:00.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:09:00.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:09:00.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:09:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:09:00.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:09:00.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:09:00.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:09:00.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:09:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:09:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.755968 -999.00  +19.30  26.29     44   +6.90 1 2 1 1 1   404    0 11.54 -33.20 ----- 32.5 26.3 182.0 35.1 19.9 -22.3 19.8 -21.8 19.6 -20.5 19.9 -21.5
2025-12-24T20:09:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:09:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:09:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.755968
2025-12-24T20:09:00.712 [DEBUG] [Thread-308190] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:09:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:09:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:09:00.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:09:00.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:09:00.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:09:00.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:08:20', tmtdew=14.24, humidity=38.93, cloud=0.0, wind=29.64, temperature=19.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:08:35.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:09:00.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:09:00.814 [DEBUG] [Thread-308193] [transport.py] [_log()] starting thread (client mode): 0xf818aad0
2025-12-24T20:09:00.814 [DEBUG] [Thread-308193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:09:00.828 [DEBUG] [Thread-308193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:09:00.828 [INFO] [Thread-308193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] client lang: <none>
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] server lang: <none>
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] kex follows: False
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] Compression: none
2025-12-24T20:09:00.836 [DEBUG] [Thread-308193] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:09:00.897 [DEBUG] [Thread-308193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:09:00.897 [DEBUG] [Thread-308193] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:09:00.897 [DEBUG] [Thread-308193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:09:00.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:09:00.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:09:00.955 [DEBUG] [Thread-308193] [transport.py] [_log()] userauth is OK
2025-12-24T20:09:00.955 [DEBUG] [Thread-308193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:09:00.955 [DEBUG] [Thread-308193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:09:00.955 [DEBUG] [Thread-308193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:09:00.955 [DEBUG] [Thread-308193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:09:00.969 [INFO] [Thread-308193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:09:00.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:09:00.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:09:01.894 [DEBUG] [Thread-308193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:09:01.964 [DEBUG] [Thread-308193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:09:01.965 [DEBUG] [Thread-308193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:09:01.965 [DEBUG] [Thread-308193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:09:01.973 [DEBUG] [Thread-308193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:09:01.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:09:01.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:09:01.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:09:02.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:09:02.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:09:02.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:09:02.008 [DEBUG] [Thread-308193] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:09:03.892 [DEBUG] [Thread-308195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:09:19.014 [DEBUG] [Thread-308196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:09:19.063 [DEBUG] [Thread-308197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:09:32.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:09:32.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:09:32.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:09:34.192 [DEBUG] [Thread-308198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:09:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 8, 57), 14.19, 39.43, 0.0, 36.65, 19.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:09:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:08:57
2025-12-24T20:09:35.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:09:35.358 [DEBUG] [Thread-308199] [transport.py] [_log()] starting thread (client mode): 0xf57a9d50
2025-12-24T20:09:35.359 [DEBUG] [Thread-308199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:09:35.372 [DEBUG] [Thread-308199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:09:35.372 [INFO] [Thread-308199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:09:35.377 [DEBUG] [Thread-308199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] client lang: <none>
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] server lang: <none>
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] kex follows: False
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:09:35.378 [DEBUG] [Thread-308199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:09:35.379 [DEBUG] [Thread-308199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:09:35.379 [DEBUG] [Thread-308199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:09:35.379 [DEBUG] [Thread-308199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:09:35.379 [DEBUG] [Thread-308199] [transport.py] [_log()] Compression: none
2025-12-24T20:09:35.379 [DEBUG] [Thread-308199] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:09:35.411 [DEBUG] [Thread-308199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:09:35.415 [DEBUG] [Thread-308199] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:09:35.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:09:35.418 [DEBUG] [Thread-308199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:09:35.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:09:35.420 [DEBUG] [Thread-308199] [transport.py] [_log()] userauth is OK
2025-12-24T20:09:35.420 [DEBUG] [Thread-308199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:09:35.420 [DEBUG] [Thread-308199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:09:35.420 [DEBUG] [Thread-308199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:09:35.420 [DEBUG] [Thread-308199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:09:35.454 [INFO] [Thread-308199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:09:35.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:09:36.084 [DEBUG] [Thread-308199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:09:36.084 [DEBUG] [Thread-308199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:09:36.085 [DEBUG] [Thread-308199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:09:36.125 [DEBUG] [Thread-308199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:09:36.125 [DEBUG] [Thread-308199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:09:36.127 [DEBUG] [Thread-308199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:09:36.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:09:36.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:09:36.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:09:36.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:09:36.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:09:36.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:09:36.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:09:36.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:09:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:09:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.756315 -999.00  +19.30  25.52     44   +6.90 1 2 1 1 1   384    0 11.54 -32.82 ----- 24.8 25.5 175.2 36.9 19.9 -22.3 19.8 -22.2 19.6 -20.6 19.9 -21.5
2025-12-24T20:09:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:09:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:09:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.756315
2025-12-24T20:09:36.157 [DEBUG] [Thread-308199] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:09:36.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:09:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:09:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:09:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:09:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:09:36.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:08:57', tmtdew=14.19, humidity=39.43, cloud=0.0, wind=36.65, temperature=19.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:09:05.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:09:36.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:09:36.262 [DEBUG] [Thread-308202] [transport.py] [_log()] starting thread (client mode): 0xfabc4b20
2025-12-24T20:09:36.262 [DEBUG] [Thread-308202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:09:36.277 [DEBUG] [Thread-308202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:09:36.277 [INFO] [Thread-308202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] client lang: <none>
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] server lang: <none>
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] kex follows: False
2025-12-24T20:09:36.284 [DEBUG] [Thread-308202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:09:36.285 [DEBUG] [Thread-308202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:09:36.285 [DEBUG] [Thread-308202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:09:36.285 [DEBUG] [Thread-308202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:09:36.285 [DEBUG] [Thread-308202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:09:36.285 [DEBUG] [Thread-308202] [transport.py] [_log()] Compression: none
2025-12-24T20:09:36.285 [DEBUG] [Thread-308202] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:09:36.344 [DEBUG] [Thread-308202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:09:36.345 [DEBUG] [Thread-308202] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:09:36.345 [DEBUG] [Thread-308202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:09:36.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:09:36.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:09:36.403 [DEBUG] [Thread-308202] [transport.py] [_log()] userauth is OK
2025-12-24T20:09:36.403 [DEBUG] [Thread-308202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:09:36.404 [DEBUG] [Thread-308202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:09:36.404 [DEBUG] [Thread-308202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:09:36.404 [DEBUG] [Thread-308202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:09:36.421 [INFO] [Thread-308202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:09:36.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:09:36.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:09:37.237 [DEBUG] [Thread-308202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:09:37.237 [DEBUG] [Thread-308202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:09:37.284 [DEBUG] [Thread-308202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:09:37.284 [DEBUG] [Thread-308202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:09:37.293 [DEBUG] [Thread-308202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:09:37.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:09:37.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:09:37.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:09:37.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:09:37.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:09:37.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:09:37.329 [DEBUG] [Thread-308202] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:09:49.359 [DEBUG] [Thread-308204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:09:51.015 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:09:51.017 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:10:04.572 [DEBUG] [Thread-308205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:10:07.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:10:07.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:10:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:10:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 9, 30), 14.19, 39.43, 0.0, 34.04, 19.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:10:08.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:09:30
2025-12-24T20:10:08.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:10:08.722 [DEBUG] [Thread-308206] [transport.py] [_log()] starting thread (client mode): 0xfabc72b0
2025-12-24T20:10:08.723 [DEBUG] [Thread-308206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:10:08.737 [DEBUG] [Thread-308206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:10:08.737 [INFO] [Thread-308206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] client lang: <none>
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] server lang: <none>
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] kex follows: False
2025-12-24T20:10:08.740 [DEBUG] [Thread-308206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:10:08.741 [DEBUG] [Thread-308206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:10:08.741 [DEBUG] [Thread-308206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:10:08.741 [DEBUG] [Thread-308206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:10:08.741 [DEBUG] [Thread-308206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:10:08.741 [DEBUG] [Thread-308206] [transport.py] [_log()] Compression: none
2025-12-24T20:10:08.741 [DEBUG] [Thread-308206] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:10:08.763 [DEBUG] [Thread-308206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:10:08.765 [DEBUG] [Thread-308206] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:10:08.767 [DEBUG] [Thread-308206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:10:08.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:10:08.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:10:08.770 [DEBUG] [Thread-308206] [transport.py] [_log()] userauth is OK
2025-12-24T20:10:08.770 [DEBUG] [Thread-308206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:10:08.770 [DEBUG] [Thread-308206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:10:08.771 [DEBUG] [Thread-308206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:10:08.771 [DEBUG] [Thread-308206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:10:08.792 [INFO] [Thread-308206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:10:08.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:10:09.501 [DEBUG] [Thread-308206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:10:09.501 [DEBUG] [Thread-308206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:10:09.502 [DEBUG] [Thread-308206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:10:09.542 [DEBUG] [Thread-308206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:10:09.543 [DEBUG] [Thread-308206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:10:09.546 [DEBUG] [Thread-308206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:10:09.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:10:09.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:10:09.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:10:09.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:10:09.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:10:09.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:10:09.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:10:09.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:10:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:10:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.756662 -999.00  +19.30  23.85     44   +6.90 1 2 1 1 1   365    0 11.96 -33.15 ----- 22.4 23.9 170.2 29.4 19.9 -22.3 19.8 -21.9 19.6 -20.6 19.9 -21.4
2025-12-24T20:10:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:10:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:10:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.756662
2025-12-24T20:10:09.582 [DEBUG] [Thread-308206] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:10:09.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:10:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:10:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:10:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:10:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:10:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:09:30', tmtdew=14.19, humidity=39.43, cloud=0.0, wind=34.04, temperature=19.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:09:35.597', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:10:09.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:10:09.677 [DEBUG] [Thread-308209] [transport.py] [_log()] starting thread (client mode): 0xfabc69b0
2025-12-24T20:10:09.677 [DEBUG] [Thread-308209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:10:09.692 [DEBUG] [Thread-308209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:10:09.692 [INFO] [Thread-308209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:10:09.699 [DEBUG] [Thread-308209] [transport.py] [_log()] client lang: <none>
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] server lang: <none>
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] kex follows: False
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] Compression: none
2025-12-24T20:10:09.700 [DEBUG] [Thread-308209] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:10:09.754 [DEBUG] [Thread-308209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:10:09.754 [DEBUG] [Thread-308209] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:10:09.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:10:09.754 [DEBUG] [Thread-308209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:10:09.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:10:09.811 [DEBUG] [Thread-308209] [transport.py] [_log()] userauth is OK
2025-12-24T20:10:09.811 [DEBUG] [Thread-308209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:10:09.811 [DEBUG] [Thread-308209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:10:09.811 [DEBUG] [Thread-308209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:10:09.811 [DEBUG] [Thread-308209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:10:09.828 [INFO] [Thread-308209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:10:09.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:10:09.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:10:10.644 [DEBUG] [Thread-308209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:10:10.644 [DEBUG] [Thread-308209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:10:10.692 [DEBUG] [Thread-308209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:10:10.692 [DEBUG] [Thread-308209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:10:10.701 [DEBUG] [Thread-308209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:10:10.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:10:10.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:10:10.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:10:10.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:10:10.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:10:10.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:10:10.733 [DEBUG] [Thread-308209] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:10:19.337 [DEBUG] [Thread-308211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:10:19.721 [DEBUG] [Thread-308212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:10:34.900 [DEBUG] [Thread-308213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:10:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:10:40.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:10:40.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:10:41.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 10, 5), 14.15, 39.54, 0.0, 36.14, 19.38, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:10:41.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:10:05
2025-12-24T20:10:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:10:42.142 [DEBUG] [Thread-308214] [transport.py] [_log()] starting thread (client mode): 0xfabc5c00
2025-12-24T20:10:42.143 [DEBUG] [Thread-308214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:10:42.155 [DEBUG] [Thread-308214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:10:42.155 [INFO] [Thread-308214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] client lang: <none>
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] server lang: <none>
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] kex follows: False
2025-12-24T20:10:42.160 [DEBUG] [Thread-308214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:10:42.161 [DEBUG] [Thread-308214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:10:42.161 [DEBUG] [Thread-308214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:10:42.161 [DEBUG] [Thread-308214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:10:42.161 [DEBUG] [Thread-308214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:10:42.161 [DEBUG] [Thread-308214] [transport.py] [_log()] Compression: none
2025-12-24T20:10:42.161 [DEBUG] [Thread-308214] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:10:42.192 [DEBUG] [Thread-308214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:10:42.195 [DEBUG] [Thread-308214] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:10:42.196 [DEBUG] [Thread-308214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:10:42.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:10:42.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:10:42.199 [DEBUG] [Thread-308214] [transport.py] [_log()] userauth is OK
2025-12-24T20:10:42.199 [DEBUG] [Thread-308214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:10:42.199 [DEBUG] [Thread-308214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:10:42.199 [DEBUG] [Thread-308214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:10:42.199 [DEBUG] [Thread-308214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:10:42.219 [INFO] [Thread-308214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:10:42.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:10:42.882 [DEBUG] [Thread-308214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:10:42.882 [DEBUG] [Thread-308214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:10:42.883 [DEBUG] [Thread-308214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:10:42.923 [DEBUG] [Thread-308214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:10:42.923 [DEBUG] [Thread-308214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:10:42.925 [DEBUG] [Thread-308214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:10:42.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:10:42.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:10:42.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:10:42.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:10:42.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:10:42.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:10:42.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:10:42.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:10:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:10:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.757009 -999.00  +19.30  23.98     44   +6.90 1 2 1 1 1   346    0 11.46 -35.11 ----- 16.6 24.0 179.0 30.1 19.9 -22.4 19.8 -22.1 19.6 -20.5 19.9 -21.4
2025-12-24T20:10:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:10:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:10:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.757009
2025-12-24T20:10:42.956 [DEBUG] [Thread-308214] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:10:42.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:10:42.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:10:42.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:10:42.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:10:42.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:10:42.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:10:05', tmtdew=14.15, humidity=39.54, cloud=0.0, wind=36.14, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:10:05.578', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:10:43.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:10:50.052 [DEBUG] [Thread-308217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:10:56.087 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:10:56.091 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:11:05.215 [DEBUG] [Thread-308218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:11:19.693 [DEBUG] [Thread-308219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:11:20.312 [DEBUG] [Thread-308220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:11:35.428 [DEBUG] [Thread-308221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:11:50.537 [DEBUG] [Thread-308222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:12:02.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:12:02.796 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:12:05.618 [DEBUG] [Thread-308223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:12:20.079 [DEBUG] [Thread-308224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:12:20.713 [DEBUG] [Thread-308225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:12:35.821 [DEBUG] [Thread-308226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:12:50.952 [DEBUG] [Thread-308227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:12:54.639 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T20:13:06.093 [DEBUG] [Thread-308228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:13:08.268 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:13:08.270 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:13:20.415 [DEBUG] [Thread-308229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:13:21.204 [DEBUG] [Thread-308230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:13:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:13:24.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:13:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 12, 56), 14.06, 39.62, 0.0, 30.58, 19.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:13:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:12:56
2025-12-24T20:13:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:13:26.097 [DEBUG] [Thread-308231] [transport.py] [_log()] starting thread (client mode): 0xf818b190
2025-12-24T20:13:26.098 [DEBUG] [Thread-308231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:13:26.099 [DEBUG] [Thread-308231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:13:26.100 [INFO] [Thread-308231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:13:26.103 [DEBUG] [Thread-308231] [transport.py] [_log()] client lang: <none>
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] server lang: <none>
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] kex follows: False
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] Compression: none
2025-12-24T20:13:26.104 [DEBUG] [Thread-308231] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:13:26.134 [DEBUG] [Thread-308231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:13:26.137 [DEBUG] [Thread-308231] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:13:26.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:13:26.140 [DEBUG] [Thread-308231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:13:26.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:13:26.142 [DEBUG] [Thread-308231] [transport.py] [_log()] userauth is OK
2025-12-24T20:13:26.142 [DEBUG] [Thread-308231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:13:26.142 [DEBUG] [Thread-308231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:13:26.142 [DEBUG] [Thread-308231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:13:26.142 [DEBUG] [Thread-308231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:13:26.161 [INFO] [Thread-308231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:13:26.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:13:26.790 [DEBUG] [Thread-308231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:13:26.790 [DEBUG] [Thread-308231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:13:26.792 [DEBUG] [Thread-308231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:13:26.830 [DEBUG] [Thread-308231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:13:26.830 [DEBUG] [Thread-308231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:13:26.834 [DEBUG] [Thread-308231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:13:26.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:13:26.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:13:26.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:13:26.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:13:26.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:13:26.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:13:26.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:13:26.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:13:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:13:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.758745 -999.00  +19.20  27.36     44   +6.90 1 2 1 1 1   257    0 11.77 -33.52 ----- 22.6 27.4 171.8 36.7 19.8 -22.3 19.7 -22.1 19.5 -20.5 19.8 -21.4
2025-12-24T20:13:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:13:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:13:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.758745
2025-12-24T20:13:26.871 [DEBUG] [Thread-308231] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:13:26.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:13:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:13:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:13:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:13:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:13:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:12:56', tmtdew=14.06, humidity=39.62, cloud=0.0, wind=30.58, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:12:35.568', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:13:26.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:13:26.972 [DEBUG] [Thread-308234] [transport.py] [_log()] starting thread (client mode): 0xf8189630
2025-12-24T20:13:26.972 [DEBUG] [Thread-308234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:13:26.987 [DEBUG] [Thread-308234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:13:26.987 [INFO] [Thread-308234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] client lang: <none>
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] server lang: <none>
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] kex follows: False
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:13:26.995 [DEBUG] [Thread-308234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:13:26.996 [DEBUG] [Thread-308234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:13:26.996 [DEBUG] [Thread-308234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:13:26.996 [DEBUG] [Thread-308234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:13:26.996 [DEBUG] [Thread-308234] [transport.py] [_log()] Compression: none
2025-12-24T20:13:26.996 [DEBUG] [Thread-308234] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:13:27.051 [DEBUG] [Thread-308234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:13:27.052 [DEBUG] [Thread-308234] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:13:27.053 [DEBUG] [Thread-308234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:13:27.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:13:27.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:13:27.107 [DEBUG] [Thread-308234] [transport.py] [_log()] userauth is OK
2025-12-24T20:13:27.108 [DEBUG] [Thread-308234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:13:27.108 [DEBUG] [Thread-308234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:13:27.108 [DEBUG] [Thread-308234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:13:27.108 [DEBUG] [Thread-308234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:13:27.124 [INFO] [Thread-308234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:13:27.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:13:27.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:13:27.959 [DEBUG] [Thread-308234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:13:27.959 [DEBUG] [Thread-308234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:13:28.007 [DEBUG] [Thread-308234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:13:28.008 [DEBUG] [Thread-308234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:13:28.017 [DEBUG] [Thread-308234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:13:28.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:13:28.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:13:28.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:13:28.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:13:28.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:13:28.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:13:28.057 [DEBUG] [Thread-308234] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:13:36.337 [DEBUG] [Thread-308236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:13:51.524 [DEBUG] [Thread-308237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:13:58.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:13:58.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:13:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:13:59.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 13, 30), 14.06, 39.62, 0.0, 31.58, 19.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:13:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:13:30
2025-12-24T20:13:59.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:13:59.800 [DEBUG] [Thread-308238] [transport.py] [_log()] starting thread (client mode): 0xf81897e0
2025-12-24T20:13:59.801 [DEBUG] [Thread-308238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:13:59.813 [DEBUG] [Thread-308238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:13:59.813 [INFO] [Thread-308238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] client lang: <none>
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] server lang: <none>
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] kex follows: False
2025-12-24T20:13:59.818 [DEBUG] [Thread-308238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:13:59.819 [DEBUG] [Thread-308238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:13:59.819 [DEBUG] [Thread-308238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:13:59.819 [DEBUG] [Thread-308238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:13:59.820 [DEBUG] [Thread-308238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:13:59.820 [DEBUG] [Thread-308238] [transport.py] [_log()] Compression: none
2025-12-24T20:13:59.820 [DEBUG] [Thread-308238] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:13:59.855 [DEBUG] [Thread-308238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:13:59.859 [DEBUG] [Thread-308238] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:13:59.860 [DEBUG] [Thread-308238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:13:59.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:13:59.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:13:59.866 [DEBUG] [Thread-308238] [transport.py] [_log()] userauth is OK
2025-12-24T20:13:59.866 [DEBUG] [Thread-308238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:13:59.866 [DEBUG] [Thread-308238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:13:59.866 [DEBUG] [Thread-308238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:13:59.866 [DEBUG] [Thread-308238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:13:59.904 [INFO] [Thread-308238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:13:59.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:14:00.595 [DEBUG] [Thread-308238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:14:00.595 [DEBUG] [Thread-308238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:14:00.596 [DEBUG] [Thread-308238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:14:00.636 [DEBUG] [Thread-308238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:14:00.636 [DEBUG] [Thread-308238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:14:00.640 [DEBUG] [Thread-308238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:14:00.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:14:00.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:14:00.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:14:00.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:14:00.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:14:00.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:14:00.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:14:00.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:14:00.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:14:00.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.759093 -999.00  +19.20  18.45     44   +6.90 1 2 1 1 1   241    0 11.68 -32.05 ----- 21.8 18.4 160.8 31.7 19.8 -22.3 19.7 -22.1 19.5 -20.6 19.8 -21.5
2025-12-24T20:14:00.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:14:00.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:14:00.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.759093
2025-12-24T20:14:00.677 [DEBUG] [Thread-308238] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:14:00.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:14:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:14:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:14:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:14:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:14:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:13:30', tmtdew=14.06, humidity=39.62, cloud=0.0, wind=31.58, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:13:05.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:14:00.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:14:00.781 [DEBUG] [Thread-308241] [transport.py] [_log()] starting thread (client mode): 0xfabc5750
2025-12-24T20:14:00.781 [DEBUG] [Thread-308241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:14:00.796 [DEBUG] [Thread-308241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:14:00.796 [INFO] [Thread-308241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] client lang: <none>
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] server lang: <none>
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] kex follows: False
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] Compression: none
2025-12-24T20:14:00.803 [DEBUG] [Thread-308241] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:14:00.862 [DEBUG] [Thread-308241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:14:00.862 [DEBUG] [Thread-308241] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:14:00.863 [DEBUG] [Thread-308241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:14:00.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:14:00.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:14:00.919 [DEBUG] [Thread-308241] [transport.py] [_log()] userauth is OK
2025-12-24T20:14:00.920 [DEBUG] [Thread-308241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:14:00.920 [DEBUG] [Thread-308241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:14:00.920 [DEBUG] [Thread-308241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:14:00.920 [DEBUG] [Thread-308241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:14:00.939 [INFO] [Thread-308241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:14:00.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:14:00.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:14:01.798 [DEBUG] [Thread-308241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:14:01.799 [DEBUG] [Thread-308241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:14:01.846 [DEBUG] [Thread-308241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:14:01.846 [DEBUG] [Thread-308241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:14:01.855 [DEBUG] [Thread-308241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:14:01.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:14:01.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:14:01.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:14:01.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:14:01.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:14:01.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:14:01.894 [DEBUG] [Thread-308241] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:14:06.667 [DEBUG] [Thread-308243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:14:13.356 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:14:13.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:14:20.727 [DEBUG] [Thread-308244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:14:21.836 [DEBUG] [Thread-308245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:14:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:14:31.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:14:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:14:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 14, 4), 14.06, 39.62, 0.0, 31.23, 19.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:14:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:14:04
2025-12-24T20:14:35.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:14:35.476 [DEBUG] [Thread-308246] [transport.py] [_log()] starting thread (client mode): 0xf57a8e20
2025-12-24T20:14:35.476 [DEBUG] [Thread-308246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:14:35.488 [DEBUG] [Thread-308246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:14:35.488 [INFO] [Thread-308246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:14:35.492 [DEBUG] [Thread-308246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] client lang: <none>
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] server lang: <none>
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] kex follows: False
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:14:35.493 [DEBUG] [Thread-308246] [transport.py] [_log()] Compression: none
2025-12-24T20:14:35.494 [DEBUG] [Thread-308246] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:14:35.525 [DEBUG] [Thread-308246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:14:35.529 [DEBUG] [Thread-308246] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:14:35.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:14:35.531 [DEBUG] [Thread-308246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:14:35.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:14:35.534 [DEBUG] [Thread-308246] [transport.py] [_log()] userauth is OK
2025-12-24T20:14:35.534 [DEBUG] [Thread-308246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:14:35.534 [DEBUG] [Thread-308246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:14:35.534 [DEBUG] [Thread-308246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:14:35.534 [DEBUG] [Thread-308246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:14:35.569 [INFO] [Thread-308246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:14:35.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:14:36.197 [DEBUG] [Thread-308246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:14:36.197 [DEBUG] [Thread-308246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:14:36.199 [DEBUG] [Thread-308246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:14:36.238 [DEBUG] [Thread-308246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:14:36.238 [DEBUG] [Thread-308246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:14:36.241 [DEBUG] [Thread-308246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:14:36.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:14:36.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:14:36.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:14:36.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:14:36.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:14:36.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:14:36.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:14:36.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:14:36.272 [DEBUG] [Thread-308246] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:14:36.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:14:36.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.759787 -999.00  +19.20  28.21     45   +7.00 1 2 1 1 1   212    0 11.43 -31.49 ----- 21.8 28.2 178.4 31.3 19.8 -22.3 19.6 -22.2 19.4 -20.6 19.8 -21.3
2025-12-24T20:14:36.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:14:36.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:14:36.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.759787
2025-12-24T20:14:36.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:14:36.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:14:36.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:14:36.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:14:36.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:14:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:14:04', tmtdew=14.06, humidity=39.62, cloud=0.0, wind=31.23, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:14:05.597', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:14:36.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:14:36.403 [DEBUG] [Thread-308249] [transport.py] [_log()] starting thread (client mode): 0xf57a8e80
2025-12-24T20:14:36.403 [DEBUG] [Thread-308249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:14:36.417 [DEBUG] [Thread-308249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:14:36.418 [INFO] [Thread-308249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:14:36.425 [DEBUG] [Thread-308249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:14:36.425 [DEBUG] [Thread-308249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:14:36.425 [DEBUG] [Thread-308249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:14:36.425 [DEBUG] [Thread-308249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:14:36.425 [DEBUG] [Thread-308249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:14:36.425 [DEBUG] [Thread-308249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] client lang: <none>
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] server lang: <none>
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] kex follows: False
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:14:36.426 [DEBUG] [Thread-308249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:14:36.427 [DEBUG] [Thread-308249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:14:36.427 [DEBUG] [Thread-308249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:14:36.427 [DEBUG] [Thread-308249] [transport.py] [_log()] Compression: none
2025-12-24T20:14:36.427 [DEBUG] [Thread-308249] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:14:36.482 [DEBUG] [Thread-308249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:14:36.483 [DEBUG] [Thread-308249] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:14:36.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:14:36.484 [DEBUG] [Thread-308249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:14:36.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:14:36.539 [DEBUG] [Thread-308249] [transport.py] [_log()] userauth is OK
2025-12-24T20:14:36.539 [DEBUG] [Thread-308249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:14:36.539 [DEBUG] [Thread-308249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:14:36.539 [DEBUG] [Thread-308249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:14:36.539 [DEBUG] [Thread-308249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:14:36.557 [INFO] [Thread-308249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:14:36.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:14:36.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:14:36.932 [DEBUG] [Thread-308251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:14:37.393 [DEBUG] [Thread-308249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:14:37.393 [DEBUG] [Thread-308249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:14:37.432 [DEBUG] [Thread-308249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:14:37.432 [DEBUG] [Thread-308249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:14:37.442 [DEBUG] [Thread-308249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:14:37.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:14:37.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:14:37.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:14:37.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:14:37.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:14:37.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:14:37.481 [DEBUG] [Thread-308249] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:14:52.082 [DEBUG] [Thread-308252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:15:07.211 [DEBUG] [Thread-308253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:15:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:15:07.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:15:07.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
2025-12-24T20:15:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 14, 37), 14.07, 39.61, 0.0, 30.89, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:15:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:14:37
2025-12-24T20:15:09.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:15:09.304 [DEBUG] [Thread-308254] [transport.py] [_log()] starting thread (client mode): 0xfabc7940
2025-12-24T20:15:09.304 [DEBUG] [Thread-308254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:15:09.317 [DEBUG] [Thread-308254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:15:09.317 [INFO] [Thread-308254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:15:09.323 [DEBUG] [Thread-308254] [transport.py] [_log()] client lang: <none>
2025-12-24T20:15:09.324 [DEBUG] [Thread-308254] [transport.py] [_log()] server lang: <none>
2025-12-24T20:15:09.324 [DEBUG] [Thread-308254] [transport.py] [_log()] kex follows: False
2025-12-24T20:15:09.324 [DEBUG] [Thread-308254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:15:09.324 [DEBUG] [Thread-308254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:15:09.325 [DEBUG] [Thread-308254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:15:09.325 [DEBUG] [Thread-308254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:15:09.325 [DEBUG] [Thread-308254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:15:09.325 [DEBUG] [Thread-308254] [transport.py] [_log()] Compression: none
2025-12-24T20:15:09.325 [DEBUG] [Thread-308254] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:15:09.362 [DEBUG] [Thread-308254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:15:09.367 [DEBUG] [Thread-308254] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:15:09.368 [DEBUG] [Thread-308254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:15:09.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:15:09.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:15:09.374 [DEBUG] [Thread-308254] [transport.py] [_log()] userauth is OK
2025-12-24T20:15:09.374 [DEBUG] [Thread-308254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:15:09.374 [DEBUG] [Thread-308254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:15:09.374 [DEBUG] [Thread-308254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:15:09.374 [DEBUG] [Thread-308254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:15:09.402 [INFO] [Thread-308254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:15:09.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:15:10.587 [DEBUG] [Thread-308254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:15:10.588 [DEBUG] [Thread-308254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:15:10.589 [DEBUG] [Thread-308254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:15:10.629 [DEBUG] [Thread-308254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:15:10.629 [DEBUG] [Thread-308254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:15:10.632 [DEBUG] [Thread-308254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:15:10.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:15:10.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:15:10.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:15:10.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:15:10.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:15:10.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:15:10.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:15:10.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:15:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:15:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.760134 -999.00  +19.20  29.35     44   +6.90 1 2 1 1 1   198    0 11.86 -33.98 ----- 27.5 29.4 165.8 41.2 19.8 -22.3 19.6 -22.0 19.5 -20.5 19.8 -21.3
2025-12-24T20:15:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:15:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:15:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.760134
2025-12-24T20:15:10.670 [DEBUG] [Thread-308254] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:15:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:15:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:15:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:15:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:15:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:15:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:14:37', tmtdew=14.07, humidity=39.61, cloud=0.0, wind=30.89, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:14:35.578', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:15:10.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:15:10.772 [DEBUG] [Thread-308257] [transport.py] [_log()] starting thread (client mode): 0xfabc6bf0
2025-12-24T20:15:10.773 [DEBUG] [Thread-308257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:15:10.793 [DEBUG] [Thread-308257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:15:10.793 [INFO] [Thread-308257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] client lang: <none>
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] server lang: <none>
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] kex follows: False
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] Compression: none
2025-12-24T20:15:10.801 [DEBUG] [Thread-308257] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:15:10.862 [DEBUG] [Thread-308257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:15:10.862 [DEBUG] [Thread-308257] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:15:10.862 [DEBUG] [Thread-308257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:15:10.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:15:10.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:15:10.920 [DEBUG] [Thread-308257] [transport.py] [_log()] userauth is OK
2025-12-24T20:15:10.920 [DEBUG] [Thread-308257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:15:10.920 [DEBUG] [Thread-308257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:15:10.920 [DEBUG] [Thread-308257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:15:10.920 [DEBUG] [Thread-308257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:15:10.939 [INFO] [Thread-308257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:15:10.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:15:10.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:15:11.820 [DEBUG] [Thread-308257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:15:11.820 [DEBUG] [Thread-308257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:15:11.867 [DEBUG] [Thread-308257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:15:11.867 [DEBUG] [Thread-308257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:15:11.875 [DEBUG] [Thread-308257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:15:11.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:15:11.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:15: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') -> 00000000
2025-12-24T20:15:11.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:15:11.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:15:11.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:15:11.909 [DEBUG] [Thread-308257] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:15:19.111 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:15:19.131 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:15:20.970 [DEBUG] [Thread-308259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:15:22.318 [DEBUG] [Thread-308260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:15:37.511 [DEBUG] [Thread-308261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:15:41.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:15:41.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:15:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:15:42.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 15, 10), 14.06, 39.62, 0.0, 30.28, 19.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:15:42.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:15:10
2025-12-24T20:15:43.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:15:43.303 [DEBUG] [Thread-308262] [transport.py] [_log()] starting thread (client mode): 0xfabc4be0
2025-12-24T20:15:43.304 [DEBUG] [Thread-308262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:15:43.311 [DEBUG] [Thread-308262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:15:43.312 [INFO] [Thread-308262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:15:43.318 [DEBUG] [Thread-308262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:15:43.318 [DEBUG] [Thread-308262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:15:43.318 [DEBUG] [Thread-308262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:15:43.318 [DEBUG] [Thread-308262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:15:43.318 [DEBUG] [Thread-308262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:15:43.318 [DEBUG] [Thread-308262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:15:43.319 [DEBUG] [Thread-308262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:15:43.319 [DEBUG] [Thread-308262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:15:43.319 [DEBUG] [Thread-308262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:15:43.319 [DEBUG] [Thread-308262] [transport.py] [_log()] client lang: <none>
2025-12-24T20:15:43.319 [DEBUG] [Thread-308262] [transport.py] [_log()] server lang: <none>
2025-12-24T20:15:43.319 [DEBUG] [Thread-308262] [transport.py] [_log()] kex follows: False
2025-12-24T20:15:43.319 [DEBUG] [Thread-308262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:15:43.320 [DEBUG] [Thread-308262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:15:43.320 [DEBUG] [Thread-308262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:15:43.320 [DEBUG] [Thread-308262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:15:43.320 [DEBUG] [Thread-308262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:15:43.320 [DEBUG] [Thread-308262] [transport.py] [_log()] Compression: none
2025-12-24T20:15:43.320 [DEBUG] [Thread-308262] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:15:43.356 [DEBUG] [Thread-308262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:15:43.361 [DEBUG] [Thread-308262] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:15:43.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:15:43.364 [DEBUG] [Thread-308262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:15:43.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:15:43.367 [DEBUG] [Thread-308262] [transport.py] [_log()] userauth is OK
2025-12-24T20:15:43.367 [DEBUG] [Thread-308262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:15:43.367 [DEBUG] [Thread-308262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:15:43.367 [DEBUG] [Thread-308262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:15:43.367 [DEBUG] [Thread-308262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:15:43.400 [INFO] [Thread-308262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:15:43.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:15:44.056 [DEBUG] [Thread-308262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:15:44.056 [DEBUG] [Thread-308262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:15:44.057 [DEBUG] [Thread-308262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:15:44.098 [DEBUG] [Thread-308262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:15:44.099 [DEBUG] [Thread-308262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:15:44.101 [DEBUG] [Thread-308262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:15:44.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:15:44.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:15:44.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:15:44.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:15:44.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:15:44.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:15:44.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:15:44.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:15:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:15:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.760481 -999.00  +19.20  27.83     44   +6.90 1 2 1 1 1   184    0 11.50 -33.71 ----- 16.5 27.8 166.2 36.1 19.8 -22.3 19.6 -22.1 19.5 -20.4 19.7 -21.4
2025-12-24T20:15:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:15:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:15:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.760481
2025-12-24T20:15:44.132 [DEBUG] [Thread-308262] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:15:44.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:15:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:15:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:15:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:15:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:15:44.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:15:10', tmtdew=14.06, humidity=39.62, cloud=0.0, wind=30.28, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:15:05.558', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:15:44.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:15:44.254 [DEBUG] [Thread-308265] [transport.py] [_log()] starting thread (client mode): 0xfabc5780
2025-12-24T20:15:44.254 [DEBUG] [Thread-308265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:15:44.273 [DEBUG] [Thread-308265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:15:44.273 [INFO] [Thread-308265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] client lang: <none>
2025-12-24T20:15:44.280 [DEBUG] [Thread-308265] [transport.py] [_log()] server lang: <none>
2025-12-24T20:15:44.281 [DEBUG] [Thread-308265] [transport.py] [_log()] kex follows: False
2025-12-24T20:15:44.281 [DEBUG] [Thread-308265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:15:44.281 [DEBUG] [Thread-308265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:15:44.282 [DEBUG] [Thread-308265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:15:44.282 [DEBUG] [Thread-308265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:15:44.282 [DEBUG] [Thread-308265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:15:44.282 [DEBUG] [Thread-308265] [transport.py] [_log()] Compression: none
2025-12-24T20:15:44.282 [DEBUG] [Thread-308265] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:15:44.341 [DEBUG] [Thread-308265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:15:44.343 [DEBUG] [Thread-308265] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:15:44.343 [DEBUG] [Thread-308265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:15:44.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:15:44.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:15:44.399 [DEBUG] [Thread-308265] [transport.py] [_log()] userauth is OK
2025-12-24T20:15:44.399 [DEBUG] [Thread-308265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:15:44.399 [DEBUG] [Thread-308265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:15:44.399 [DEBUG] [Thread-308265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:15:44.399 [DEBUG] [Thread-308265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:15:44.415 [INFO] [Thread-308265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:15:44.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:15:44.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:15:45.252 [DEBUG] [Thread-308265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:15:45.253 [DEBUG] [Thread-308265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:15:45.300 [DEBUG] [Thread-308265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:15:45.300 [DEBUG] [Thread-308265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:15:45.308 [DEBUG] [Thread-308265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:15:45.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:15: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')
2025-12-24T20:15:45.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:15:45.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:15:45.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:15:45.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:15:45.342 [DEBUG] [Thread-308265] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:15:52.607 [DEBUG] [Thread-308267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:16:07.833 [DEBUG] [Thread-308268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:16:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:16:15.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:16:15.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:16:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 15, 45), 14.12, 39.61, 0.0, 31.0, 19.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:16:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:15:45
2025-12-24T20:16:16.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:16:17.142 [DEBUG] [Thread-308269] [transport.py] [_log()] starting thread (client mode): 0xf8188eb0
2025-12-24T20:16:17.143 [DEBUG] [Thread-308269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:16:17.146 [DEBUG] [Thread-308269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:16:17.146 [INFO] [Thread-308269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:16:17.151 [DEBUG] [Thread-308269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:16:17.152 [DEBUG] [Thread-308269] [transport.py] [_log()] client lang: <none>
2025-12-24T20:16:17.152 [DEBUG] [Thread-308269] [transport.py] [_log()] server lang: <none>
2025-12-24T20:16:17.152 [DEBUG] [Thread-308269] [transport.py] [_log()] kex follows: False
2025-12-24T20:16:17.152 [DEBUG] [Thread-308269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:16:17.152 [DEBUG] [Thread-308269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:16:17.152 [DEBUG] [Thread-308269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:16:17.152 [DEBUG] [Thread-308269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:16:17.153 [DEBUG] [Thread-308269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:16:17.161 [DEBUG] [Thread-308269] [transport.py] [_log()] Compression: none
2025-12-24T20:16:17.161 [DEBUG] [Thread-308269] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:16:17.196 [DEBUG] [Thread-308269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:16:17.201 [DEBUG] [Thread-308269] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:16:17.203 [DEBUG] [Thread-308269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:16:17.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:16:17.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:16:17.208 [DEBUG] [Thread-308269] [transport.py] [_log()] userauth is OK
2025-12-24T20:16:17.208 [DEBUG] [Thread-308269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:16:17.209 [DEBUG] [Thread-308269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:16:17.209 [DEBUG] [Thread-308269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:16:17.209 [DEBUG] [Thread-308269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:16:17.235 [INFO] [Thread-308269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:16:17.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:16:17.873 [DEBUG] [Thread-308269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:16:17.874 [DEBUG] [Thread-308269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:16:17.875 [DEBUG] [Thread-308269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:16:17.915 [DEBUG] [Thread-308269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:16:17.915 [DEBUG] [Thread-308269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:16:17.917 [DEBUG] [Thread-308269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:16:17.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:16:17.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:16:17.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:16:17.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:16:17.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:16:17.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:16:17.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:16:17.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:16:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:16:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.760829 -999.00  +19.20  24.75     44   +6.90 1 2 1 1 1   172    0 11.60 -30.09 ----- 23.1 24.8 183.4 39.5 19.8 -22.3 19.6 -22.1 19.4 -20.5 19.7 -21.4
2025-12-24T20:16:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:16:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:16:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.760829
2025-12-24T20:16:17.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:16:17.954 [DEBUG] [Thread-308269] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:16:17.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:16:17.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:16:17.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:16:17.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:16:17.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:15:45', tmtdew=14.12, humidity=39.61, cloud=0.0, wind=31.0, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:15:35.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:16:18.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:16:18.045 [DEBUG] [Thread-308272] [transport.py] [_log()] starting thread (client mode): 0xf5728670
2025-12-24T20:16:18.045 [DEBUG] [Thread-308272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:16:18.065 [DEBUG] [Thread-308272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:16:18.065 [INFO] [Thread-308272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:16:18.072 [DEBUG] [Thread-308272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:16:18.073 [DEBUG] [Thread-308272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:16:18.073 [DEBUG] [Thread-308272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:16:18.073 [DEBUG] [Thread-308272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:16:18.073 [DEBUG] [Thread-308272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:16:18.073 [DEBUG] [Thread-308272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:16:18.073 [DEBUG] [Thread-308272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:16:18.073 [DEBUG] [Thread-308272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:16:18.073 [DEBUG] [Thread-308272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:16:18.074 [DEBUG] [Thread-308272] [transport.py] [_log()] client lang: <none>
2025-12-24T20:16:18.074 [DEBUG] [Thread-308272] [transport.py] [_log()] server lang: <none>
2025-12-24T20:16:18.074 [DEBUG] [Thread-308272] [transport.py] [_log()] kex follows: False
2025-12-24T20:16:18.074 [DEBUG] [Thread-308272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:16:18.074 [DEBUG] [Thread-308272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:16:18.075 [DEBUG] [Thread-308272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:16:18.075 [DEBUG] [Thread-308272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:16:18.075 [DEBUG] [Thread-308272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:16:18.075 [DEBUG] [Thread-308272] [transport.py] [_log()] Compression: none
2025-12-24T20:16:18.075 [DEBUG] [Thread-308272] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:16:18.130 [DEBUG] [Thread-308272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:16:18.130 [DEBUG] [Thread-308272] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:16:18.130 [DEBUG] [Thread-308272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:16:18.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:16:18.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:16:18.187 [DEBUG] [Thread-308272] [transport.py] [_log()] userauth is OK
2025-12-24T20:16:18.187 [DEBUG] [Thread-308272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:16:18.187 [DEBUG] [Thread-308272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:16:18.187 [DEBUG] [Thread-308272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:16:18.187 [DEBUG] [Thread-308272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:16:18.202 [INFO] [Thread-308272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:16:18.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:16:18.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:16:19.051 [DEBUG] [Thread-308272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:16:19.051 [DEBUG] [Thread-308272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:16:19.099 [DEBUG] [Thread-308272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:16:19.099 [DEBUG] [Thread-308272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:16:19.108 [DEBUG] [Thread-308272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:16:19.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:16:19.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:16:19.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:16:19.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:16:19.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:16:19.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:16:19.144 [DEBUG] [Thread-308272] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:16:21.295 [DEBUG] [Thread-308274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:16:22.926 [DEBUG] [Thread-308275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:16:24.362 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:16:24.364 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:16:38.222 [DEBUG] [Thread-308276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:16:49.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:16:49.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:16:49.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:16:50.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 16, 18), 14.12, 39.61, 0.0, 31.2, 19.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:16:50.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:16:18
2025-12-24T20:16:50.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:16:51.136 [DEBUG] [Thread-308277] [transport.py] [_log()] starting thread (client mode): 0xf8188430
2025-12-24T20:16:51.137 [DEBUG] [Thread-308277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:16:51.144 [DEBUG] [Thread-308277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:16:51.145 [INFO] [Thread-308277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] client lang: <none>
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] server lang: <none>
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] kex follows: False
2025-12-24T20:16:51.150 [DEBUG] [Thread-308277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:16:51.151 [DEBUG] [Thread-308277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:16:51.151 [DEBUG] [Thread-308277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:16:51.151 [DEBUG] [Thread-308277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:16:51.151 [DEBUG] [Thread-308277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:16:51.151 [DEBUG] [Thread-308277] [transport.py] [_log()] Compression: none
2025-12-24T20:16:51.151 [DEBUG] [Thread-308277] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:16:51.185 [DEBUG] [Thread-308277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:16:51.189 [DEBUG] [Thread-308277] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:16:51.191 [DEBUG] [Thread-308277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:16:51.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:16:51.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:16:51.194 [DEBUG] [Thread-308277] [transport.py] [_log()] userauth is OK
2025-12-24T20:16:51.194 [DEBUG] [Thread-308277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:16:51.195 [DEBUG] [Thread-308277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:16:51.195 [DEBUG] [Thread-308277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:16:51.195 [DEBUG] [Thread-308277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:16:51.224 [INFO] [Thread-308277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:16:51.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:16:51.839 [DEBUG] [Thread-308277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:16:51.840 [DEBUG] [Thread-308277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:16:51.841 [DEBUG] [Thread-308277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:16:51.881 [DEBUG] [Thread-308277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:16:51.881 [DEBUG] [Thread-308277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:16:51.884 [DEBUG] [Thread-308277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:16:51.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:16:51.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:16:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:16:51.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:16:51.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:16:51.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:16:51.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:16:51.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:16:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:16:51.909 [DEBUG] [Thread-308277] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:16:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.761176 -999.00  +19.20  19.74     44   +6.90 1 2 1 1 1   160    0 11.73 -29.86 ----- 26.3 19.7 166.8 28.4 19.7 -22.2 19.6 -22.0 19.4 -20.4 19.7 -21.4
2025-12-24T20:16:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:16:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:16:51.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.761176
2025-12-24T20:16:51.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:16:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:16:51.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:16:51.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:16:51.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:16:51.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:16:18', tmtdew=14.12, humidity=39.61, cloud=0.0, wind=31.2, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:16:05.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:16:52.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:16:52.036 [DEBUG] [Thread-308280] [transport.py] [_log()] starting thread (client mode): 0xf57a8070
2025-12-24T20:16:52.036 [DEBUG] [Thread-308280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:16:52.049 [DEBUG] [Thread-308280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:16:52.049 [INFO] [Thread-308280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] client lang: <none>
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] server lang: <none>
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] kex follows: False
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:16:52.057 [DEBUG] [Thread-308280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:16:52.058 [DEBUG] [Thread-308280] [transport.py] [_log()] Compression: none
2025-12-24T20:16:52.058 [DEBUG] [Thread-308280] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:16:52.115 [DEBUG] [Thread-308280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:16:52.116 [DEBUG] [Thread-308280] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:16:52.116 [DEBUG] [Thread-308280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:16:52.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:16:52.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:16:52.171 [DEBUG] [Thread-308280] [transport.py] [_log()] userauth is OK
2025-12-24T20:16:52.171 [DEBUG] [Thread-308280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:16:52.171 [DEBUG] [Thread-308280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:16:52.172 [DEBUG] [Thread-308280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:16:52.172 [DEBUG] [Thread-308280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:16:52.190 [INFO] [Thread-308280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:16:52.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:16:52.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:16:52.981 [DEBUG] [Thread-308280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:16:52.981 [DEBUG] [Thread-308280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:16:53.028 [DEBUG] [Thread-308280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:16:53.028 [DEBUG] [Thread-308280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:16:53.037 [DEBUG] [Thread-308280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:16:53.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:16:53.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:16:53.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:16:53.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:16:53.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:16:53.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:16:53.069 [DEBUG] [Thread-308280] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:16:53.546 [DEBUG] [Thread-308282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:17:08.760 [DEBUG] [Thread-308283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:17:21.693 [DEBUG] [Thread-308284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:17:23.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:17:23.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:17:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:17:23.883 [DEBUG] [Thread-308285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:17:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 16, 52), 14.06, 39.63, 0.0, 32.41, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:17:25.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:16:52
2025-12-24T20:17:25.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:17:26.067 [DEBUG] [Thread-308286] [transport.py] [_log()] starting thread (client mode): 0xf5788550
2025-12-24T20:17:26.068 [DEBUG] [Thread-308286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:17:26.081 [DEBUG] [Thread-308286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:17:26.081 [INFO] [Thread-308286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] client lang: <none>
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] server lang: <none>
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] kex follows: False
2025-12-24T20:17:26.085 [DEBUG] [Thread-308286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:17:26.086 [DEBUG] [Thread-308286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:17:26.086 [DEBUG] [Thread-308286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:17:26.086 [DEBUG] [Thread-308286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:17:26.086 [DEBUG] [Thread-308286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:17:26.086 [DEBUG] [Thread-308286] [transport.py] [_log()] Compression: none
2025-12-24T20:17:26.086 [DEBUG] [Thread-308286] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:17:26.115 [DEBUG] [Thread-308286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:17:26.118 [DEBUG] [Thread-308286] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:17:26.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:17:26.120 [DEBUG] [Thread-308286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:17:26.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:17:26.123 [DEBUG] [Thread-308286] [transport.py] [_log()] userauth is OK
2025-12-24T20:17:26.123 [DEBUG] [Thread-308286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:17:26.123 [DEBUG] [Thread-308286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:17:26.123 [DEBUG] [Thread-308286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:17:26.123 [DEBUG] [Thread-308286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:17:26.143 [INFO] [Thread-308286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:17:26.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:17:26.734 [DEBUG] [Thread-308286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:17:26.734 [DEBUG] [Thread-308286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:17:26.745 [DEBUG] [Thread-308286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:17:26.775 [DEBUG] [Thread-308286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:17:26.775 [DEBUG] [Thread-308286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:17:26.779 [DEBUG] [Thread-308286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:17:26.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:17:26.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:17:26.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:17:26.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:17:26.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:17:26.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:17:26.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:17:26.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:17:26.808 [DEBUG] [Thread-308286] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:17:26.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:17:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.761523 -999.00  +19.20  24.59     45   +6.90 1 2 1 1 1   148    0 11.80 -29.87 ----- 24.5 24.6 162.4 37.1 19.7 -22.3 19.6 -21.9 19.4 -20.5 19.8 -21.3
2025-12-24T20:17:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:17:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:17:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.761523
2025-12-24T20:17:26.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:17:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:17:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:17:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:17:26.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:17:26.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:16:52', tmtdew=14.06, humidity=39.63, cloud=0.0, wind=32.41, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:16:35.587', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:17:26.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:17:26.916 [DEBUG] [Thread-308289] [transport.py] [_log()] starting thread (client mode): 0xf5789e70
2025-12-24T20:17:26.916 [DEBUG] [Thread-308289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:17:26.931 [DEBUG] [Thread-308289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:17:26.931 [INFO] [Thread-308289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:17:26.938 [DEBUG] [Thread-308289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:17:26.938 [DEBUG] [Thread-308289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] client lang: <none>
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] server lang: <none>
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] kex follows: False
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:17:26.939 [DEBUG] [Thread-308289] [transport.py] [_log()] Compression: none
2025-12-24T20:17:26.940 [DEBUG] [Thread-308289] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:17:26.994 [DEBUG] [Thread-308289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:17:26.994 [DEBUG] [Thread-308289] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:17:26.994 [DEBUG] [Thread-308289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:17:26.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:17:26.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:17:27.055 [DEBUG] [Thread-308289] [transport.py] [_log()] userauth is OK
2025-12-24T20:17:27.055 [DEBUG] [Thread-308289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:17:27.056 [DEBUG] [Thread-308289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:17:27.056 [DEBUG] [Thread-308289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:17:27.056 [DEBUG] [Thread-308289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:17:27.070 [INFO] [Thread-308289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:17:27.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:17:27.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:17:27.955 [DEBUG] [Thread-308289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:17:27.955 [DEBUG] [Thread-308289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:17:28.003 [DEBUG] [Thread-308289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:17:28.003 [DEBUG] [Thread-308289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:17:28.011 [DEBUG] [Thread-308289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:17:28.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:17:28.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:17:28.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:17:28.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:17:28.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:17:28.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:17:28.044 [DEBUG] [Thread-308289] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:17:29.940 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:17:29.943 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:17:39.078 [DEBUG] [Thread-308291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:17:54.271 [DEBUG] [Thread-308292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:17:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:17:58.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:17:58.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
2025-12-24T20:17:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 17, 26), 14.05, 39.66, 0.0, 29.55, 19.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:17:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:17:26
2025-12-24T20:17:59.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:17:59.463 [DEBUG] [Thread-308293] [transport.py] [_log()] starting thread (client mode): 0xf57a9600
2025-12-24T20:17:59.464 [DEBUG] [Thread-308293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:17:59.473 [DEBUG] [Thread-308293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:17:59.474 [INFO] [Thread-308293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:17:59.477 [DEBUG] [Thread-308293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] client lang: <none>
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] server lang: <none>
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] kex follows: False
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] Compression: none
2025-12-24T20:17:59.478 [DEBUG] [Thread-308293] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:17:59.509 [DEBUG] [Thread-308293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:17:59.512 [DEBUG] [Thread-308293] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:17:59.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:17:59.514 [DEBUG] [Thread-308293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:17:59.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:17:59.517 [DEBUG] [Thread-308293] [transport.py] [_log()] userauth is OK
2025-12-24T20:17:59.517 [DEBUG] [Thread-308293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:17:59.517 [DEBUG] [Thread-308293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:17:59.518 [DEBUG] [Thread-308293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:17:59.518 [DEBUG] [Thread-308293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:17:59.538 [INFO] [Thread-308293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:17:59.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:18:00.200 [DEBUG] [Thread-308293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:18:00.200 [DEBUG] [Thread-308293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:18:00.201 [DEBUG] [Thread-308293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:18:00.241 [DEBUG] [Thread-308293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:18:00.241 [DEBUG] [Thread-308293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:18:00.244 [DEBUG] [Thread-308293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:18:00.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:18:00.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:18:00.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:18:00.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:18:00.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:18:00.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:18:00.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:18:00.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:18:00.556 [DEBUG] [Thread-308293] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:18:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:18:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.761871 -999.00  +19.20  20.54     45   +6.90 1 2 1 1 1   138    0 11.73 -29.45 ----- 16.9 20.5 180.0 29.3 19.8 -22.3 19.6 -22.2 19.4 -20.5 19.7 -21.3
2025-12-24T20:18:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:18:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:18:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.761871
2025-12-24T20:18:00.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:18:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:18:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:18:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:18:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:18:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:17:26', tmtdew=14.05, humidity=39.66, cloud=0.0, wind=29.55, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:17:05.654', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:18:00.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:18:00.672 [DEBUG] [Thread-308296] [transport.py] [_log()] starting thread (client mode): 0xf57a8d90
2025-12-24T20:18:00.672 [DEBUG] [Thread-308296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:18:00.686 [DEBUG] [Thread-308296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:18:00.687 [INFO] [Thread-308296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] client lang: <none>
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] server lang: <none>
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] kex follows: False
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:18:00.694 [DEBUG] [Thread-308296] [transport.py] [_log()] Compression: none
2025-12-24T20:18:00.701 [DEBUG] [Thread-308296] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:18:00.750 [DEBUG] [Thread-308296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:18:00.750 [DEBUG] [Thread-308296] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:18:00.750 [DEBUG] [Thread-308296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:18:00.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:18:00.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:18:00.807 [DEBUG] [Thread-308296] [transport.py] [_log()] userauth is OK
2025-12-24T20:18:00.807 [DEBUG] [Thread-308296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:18:00.807 [DEBUG] [Thread-308296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:18:00.807 [DEBUG] [Thread-308296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:18:00.807 [DEBUG] [Thread-308296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:18:00.821 [INFO] [Thread-308296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:18:00.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:18:00.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:18:01.631 [DEBUG] [Thread-308296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:18:01.631 [DEBUG] [Thread-308296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:18:01.678 [DEBUG] [Thread-308296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:18:01.678 [DEBUG] [Thread-308296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:18:01.687 [DEBUG] [Thread-308296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:18:01.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:18:01.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:18: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
2025-12-24T20:18:01.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:18:01.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:18:01.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:18:01.724 [DEBUG] [Thread-308296] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:18:09.383 [DEBUG] [Thread-308298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:18:22.050 [DEBUG] [Thread-308299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:18:24.554 [DEBUG] [Thread-308300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:18:31.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:18:31.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:18:31.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:18:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 17, 59), 14.0, 39.64, 0.0, 32.66, 19.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:18:33.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:17:59
2025-12-24T20:18:33.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:18:34.086 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:18:34.089 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:18:34.110 [DEBUG] [Thread-308301] [transport.py] [_log()] starting thread (client mode): 0xf57ab100
2025-12-24T20:18:34.111 [DEBUG] [Thread-308301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:18:34.113 [DEBUG] [Thread-308301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:18:34.113 [INFO] [Thread-308301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:18:34.118 [DEBUG] [Thread-308301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] client lang: <none>
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] server lang: <none>
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] kex follows: False
2025-12-24T20:18:34.119 [DEBUG] [Thread-308301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:18:34.120 [DEBUG] [Thread-308301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:18:34.121 [DEBUG] [Thread-308301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:18:34.121 [DEBUG] [Thread-308301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:18:34.121 [DEBUG] [Thread-308301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:18:34.121 [DEBUG] [Thread-308301] [transport.py] [_log()] Compression: none
2025-12-24T20:18:34.121 [DEBUG] [Thread-308301] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:18:34.157 [DEBUG] [Thread-308301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:18:34.160 [DEBUG] [Thread-308301] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:18:34.162 [DEBUG] [Thread-308301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:18:34.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:18:34.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:18:34.164 [DEBUG] [Thread-308301] [transport.py] [_log()] userauth is OK
2025-12-24T20:18:34.165 [DEBUG] [Thread-308301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:18:34.165 [DEBUG] [Thread-308301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:18:34.165 [DEBUG] [Thread-308301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:18:34.165 [DEBUG] [Thread-308301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:18:34.193 [INFO] [Thread-308301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:18:34.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:18:34.816 [DEBUG] [Thread-308301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:18:34.816 [DEBUG] [Thread-308301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:18:34.817 [DEBUG] [Thread-308301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:18:34.857 [DEBUG] [Thread-308301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:18:34.857 [DEBUG] [Thread-308301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:18:34.860 [DEBUG] [Thread-308301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:18:34.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:18:34.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:18:34.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:18:34.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:18:34.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:18:34.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:18:34.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:18:34.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:18:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:18:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.762218 -999.00  +19.20  16.31     44   +6.90 1 2 1 1 1   128    0 11.76 -28.61 ----- 20.3 16.3 174.2 27.4 19.7 -22.2 19.6 -22.0 19.4 -20.5 19.7 -21.4
2025-12-24T20:18:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:18:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:18:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.762218
2025-12-24T20:18:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:18:34.900 [DEBUG] [Thread-308301] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:18:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:18:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:18:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:18:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:18:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:17:59', tmtdew=14.0, humidity=39.64, cloud=0.0, wind=32.66, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:17:35.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:18:34.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:18:34.985 [DEBUG] [Thread-308304] [transport.py] [_log()] starting thread (client mode): 0xf572ded0
2025-12-24T20:18:34.985 [DEBUG] [Thread-308304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:18:34.999 [DEBUG] [Thread-308304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:18:34.999 [INFO] [Thread-308304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] client lang: <none>
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] server lang: <none>
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] kex follows: False
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] Compression: none
2025-12-24T20:18:35.007 [DEBUG] [Thread-308304] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:18:35.064 [DEBUG] [Thread-308304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:18:35.065 [DEBUG] [Thread-308304] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:18:35.065 [DEBUG] [Thread-308304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:18:35.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:18:35.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:18:35.119 [DEBUG] [Thread-308304] [transport.py] [_log()] userauth is OK
2025-12-24T20:18:35.120 [DEBUG] [Thread-308304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:18:35.120 [DEBUG] [Thread-308304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:18:35.120 [DEBUG] [Thread-308304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:18:35.120 [DEBUG] [Thread-308304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:18:35.144 [INFO] [Thread-308304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:18:35.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:18:35.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:18:35.994 [DEBUG] [Thread-308304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:18:35.994 [DEBUG] [Thread-308304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:18:36.041 [DEBUG] [Thread-308304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:18:36.041 [DEBUG] [Thread-308304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:18:36.049 [DEBUG] [Thread-308304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:18:36.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:18:36.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:18:36.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:18:36.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:18:36.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:18:36.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:18:36.084 [DEBUG] [Thread-308304] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:18:39.755 [DEBUG] [Thread-308306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:18:54.952 [DEBUG] [Thread-308307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:19:06.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:19:06.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:19:06.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:19:07.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 18, 35), 14.0, 39.66, 0.0, 35.36, 19.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:19:07.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:18:35
2025-12-24T20:19:07.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:19:07.832 [DEBUG] [Thread-308308] [transport.py] [_log()] starting thread (client mode): 0xf572fa30
2025-12-24T20:19:07.833 [DEBUG] [Thread-308308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:19:07.844 [DEBUG] [Thread-308308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:19:07.844 [INFO] [Thread-308308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] client lang: <none>
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] server lang: <none>
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] kex follows: False
2025-12-24T20:19:07.850 [DEBUG] [Thread-308308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:19:07.851 [DEBUG] [Thread-308308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:19:07.851 [DEBUG] [Thread-308308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:19:07.851 [DEBUG] [Thread-308308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:19:07.851 [DEBUG] [Thread-308308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:19:07.851 [DEBUG] [Thread-308308] [transport.py] [_log()] Compression: none
2025-12-24T20:19:07.851 [DEBUG] [Thread-308308] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:19:07.895 [DEBUG] [Thread-308308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:19:07.898 [DEBUG] [Thread-308308] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:19:07.899 [DEBUG] [Thread-308308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:19:07.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:19:07.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:19:07.902 [DEBUG] [Thread-308308] [transport.py] [_log()] userauth is OK
2025-12-24T20:19:07.902 [DEBUG] [Thread-308308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:19:07.902 [DEBUG] [Thread-308308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:19:07.902 [DEBUG] [Thread-308308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:19:07.902 [DEBUG] [Thread-308308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:19:07.920 [INFO] [Thread-308308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:19:07.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:19:08.684 [DEBUG] [Thread-308308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:19:08.684 [DEBUG] [Thread-308308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:19:08.685 [DEBUG] [Thread-308308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:19:08.725 [DEBUG] [Thread-308308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:19:08.725 [DEBUG] [Thread-308308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:19:08.727 [DEBUG] [Thread-308308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:19:08.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:19:08.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:19:08.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:19:08.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:19:08.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:19:08.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:19:08.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:19:08.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:19:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:19:08.751 [DEBUG] [Thread-308308] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:19:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.762565 -999.00  +19.20  25.42     45   +6.90 1 2 1 1 1   118    0 11.78 -27.60 ----- 18.4 25.4 179.4 34.9 19.7 -22.3 19.6 -22.1 19.4 -20.5 19.7 -21.3
2025-12-24T20:19:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:19:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:19:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.762565
2025-12-24T20:19:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:19:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:19:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:19:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:19:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:19:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:18:35', tmtdew=14.0, humidity=39.66, cloud=0.0, wind=35.36, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:18:05.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:19:08.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:19:08.864 [DEBUG] [Thread-308311] [transport.py] [_log()] starting thread (client mode): 0xf57282e0
2025-12-24T20:19:08.864 [DEBUG] [Thread-308311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:19:08.879 [DEBUG] [Thread-308311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:19:08.879 [INFO] [Thread-308311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:19:08.886 [DEBUG] [Thread-308311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:19:08.886 [DEBUG] [Thread-308311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:19:08.886 [DEBUG] [Thread-308311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:19:08.886 [DEBUG] [Thread-308311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:19:08.886 [DEBUG] [Thread-308311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:19:08.886 [DEBUG] [Thread-308311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:19:08.886 [DEBUG] [Thread-308311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] client lang: <none>
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] server lang: <none>
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] kex follows: False
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] Compression: none
2025-12-24T20:19:08.887 [DEBUG] [Thread-308311] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:19:08.943 [DEBUG] [Thread-308311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:19:08.944 [DEBUG] [Thread-308311] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:19:08.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:19:08.945 [DEBUG] [Thread-308311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:19:08.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:19:08.999 [DEBUG] [Thread-308311] [transport.py] [_log()] userauth is OK
2025-12-24T20:19:08.999 [DEBUG] [Thread-308311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:19:08.999 [DEBUG] [Thread-308311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:19:08.999 [DEBUG] [Thread-308311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:19:08.999 [DEBUG] [Thread-308311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:19:09.014 [INFO] [Thread-308311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:19:09.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:19:09.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:19:09.810 [DEBUG] [Thread-308311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:19:09.810 [DEBUG] [Thread-308311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:19:09.857 [DEBUG] [Thread-308311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:19:09.857 [DEBUG] [Thread-308311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:19:09.865 [DEBUG] [Thread-308311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:19:09.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:19:09.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:19:09.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:19:09.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:19:09.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:19:09.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:19:09.898 [DEBUG] [Thread-308311] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:19:10.051 [DEBUG] [Thread-308313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:19:22.403 [DEBUG] [Thread-308314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:19:25.204 [DEBUG] [Thread-308315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:19:39.503 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:19:39.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:19:39.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:19:39.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:19:39.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:19:40.353 [DEBUG] [Thread-308316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:19:40.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 19, 8), 14.01, 39.63, 0.0, 35.52, 19.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:19:40.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:19:08
2025-12-24T20:19:40.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:19:41.121 [DEBUG] [Thread-308317] [transport.py] [_log()] starting thread (client mode): 0xf57a8940
2025-12-24T20:19:41.122 [DEBUG] [Thread-308317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:19:41.137 [DEBUG] [Thread-308317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:19:41.137 [INFO] [Thread-308317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:19:41.142 [DEBUG] [Thread-308317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:19:41.142 [DEBUG] [Thread-308317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] client lang: <none>
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] server lang: <none>
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] kex follows: False
2025-12-24T20:19:41.143 [DEBUG] [Thread-308317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:19:41.144 [DEBUG] [Thread-308317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:19:41.144 [DEBUG] [Thread-308317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:19:41.144 [DEBUG] [Thread-308317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:19:41.144 [DEBUG] [Thread-308317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:19:41.145 [DEBUG] [Thread-308317] [transport.py] [_log()] Compression: none
2025-12-24T20:19:41.145 [DEBUG] [Thread-308317] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:19:41.177 [DEBUG] [Thread-308317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:19:41.180 [DEBUG] [Thread-308317] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:19:41.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:19:41.182 [DEBUG] [Thread-308317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:19:41.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:19:41.185 [DEBUG] [Thread-308317] [transport.py] [_log()] userauth is OK
2025-12-24T20:19:41.185 [DEBUG] [Thread-308317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:19:41.185 [DEBUG] [Thread-308317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:19:41.185 [DEBUG] [Thread-308317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:19:41.186 [DEBUG] [Thread-308317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:19:41.209 [INFO] [Thread-308317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:19:41.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:19:41.870 [DEBUG] [Thread-308317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:19:41.871 [DEBUG] [Thread-308317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:19:41.872 [DEBUG] [Thread-308317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:19:41.912 [DEBUG] [Thread-308317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:19:41.912 [DEBUG] [Thread-308317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:19:41.915 [DEBUG] [Thread-308317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:19:41.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:19:41.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:19:41.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:19:41.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:19:41.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:19:41.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:19:41.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:19:41.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:19:41.942 [DEBUG] [Thread-308317] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:19:41.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:19:41.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.763259 -999.00  +19.20  24.39     45   +6.90 1 2 1 1 1   101    0 11.66 -28.56 ----- 19.5 24.4 176.2 34.9 19.7 -22.3 19.5 -22.2 19.4 -20.5 19.6 -21.4
2025-12-24T20:19:41.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:19:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:19:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.763259
2025-12-24T20:19:41.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:19:41.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:19:41.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:19:41.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:19:41.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:19:41.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:19:08', tmtdew=14.01, humidity=39.63, cloud=0.0, wind=35.52, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:19:05.578', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:19:42.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:19:42.049 [DEBUG] [Thread-308320] [transport.py] [_log()] starting thread (client mode): 0xf8188850
2025-12-24T20:19:42.049 [DEBUG] [Thread-308320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:19:42.064 [DEBUG] [Thread-308320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:19:42.064 [INFO] [Thread-308320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] client lang: <none>
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] server lang: <none>
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] kex follows: False
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:19:42.071 [DEBUG] [Thread-308320] [transport.py] [_log()] Compression: none
2025-12-24T20:19:42.072 [DEBUG] [Thread-308320] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:19:42.130 [DEBUG] [Thread-308320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:19:42.130 [DEBUG] [Thread-308320] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:19:42.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:19:42.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:19:42.131 [DEBUG] [Thread-308320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:19:42.187 [DEBUG] [Thread-308320] [transport.py] [_log()] userauth is OK
2025-12-24T20:19:42.187 [DEBUG] [Thread-308320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:19:42.187 [DEBUG] [Thread-308320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:19:42.187 [DEBUG] [Thread-308320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:19:42.187 [DEBUG] [Thread-308320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:19:42.202 [INFO] [Thread-308320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:19:42.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:19:42.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:19:43.035 [DEBUG] [Thread-308320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:19:43.035 [DEBUG] [Thread-308320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:19:43.082 [DEBUG] [Thread-308320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:19:43.082 [DEBUG] [Thread-308320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:19:43.091 [DEBUG] [Thread-308320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:19:43.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:19:43.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:19:43.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:19:43.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:19:43.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:19:43.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:19:43.129 [DEBUG] [Thread-308320] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:19:55.438 [DEBUG] [Thread-308322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:20:10.613 [DEBUG] [Thread-308323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:20:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:20:13.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:20:13.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:20:15.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 19, 41), 14.0, 39.64, 0.0, 32.64, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:20:15.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:19:41
2025-12-24T20:20:15.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:20:15.980 [DEBUG] [Thread-308324] [transport.py] [_log()] starting thread (client mode): 0xf57aa6b0
2025-12-24T20:20:15.981 [DEBUG] [Thread-308324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:20:15.995 [DEBUG] [Thread-308324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:20:15.995 [INFO] [Thread-308324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:20:15.998 [DEBUG] [Thread-308324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:20:15.998 [DEBUG] [Thread-308324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:20:15.998 [DEBUG] [Thread-308324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:20:15.998 [DEBUG] [Thread-308324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] client lang: <none>
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] server lang: <none>
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] kex follows: False
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:20:15.999 [DEBUG] [Thread-308324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:20:16.000 [DEBUG] [Thread-308324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:20:16.000 [DEBUG] [Thread-308324] [transport.py] [_log()] Compression: none
2025-12-24T20:20:16.000 [DEBUG] [Thread-308324] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:20:16.038 [DEBUG] [Thread-308324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:20:16.043 [DEBUG] [Thread-308324] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:20:16.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:20:16.047 [DEBUG] [Thread-308324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:20:16.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:20:16.051 [DEBUG] [Thread-308324] [transport.py] [_log()] userauth is OK
2025-12-24T20:20:16.051 [DEBUG] [Thread-308324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:20:16.052 [DEBUG] [Thread-308324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:20:16.052 [DEBUG] [Thread-308324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:20:16.052 [DEBUG] [Thread-308324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:20:16.088 [INFO] [Thread-308324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:20:16.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:20:16.657 [DEBUG] [Thread-308324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:20:16.657 [DEBUG] [Thread-308324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:20:16.658 [DEBUG] [Thread-308324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:20:16.699 [DEBUG] [Thread-308324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:20:16.699 [DEBUG] [Thread-308324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:20:16.701 [DEBUG] [Thread-308324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:20:16.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:20:16.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:20:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:20:16.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:20:16.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:20:16.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:20:16.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:20:16.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:20:16.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:20:16.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.763954 -999.00  +19.10  28.15     44   +6.90 1 2 1 1 1    87    0 11.55 -26.39 ----- 29.4 28.1 174.2 34.2 19.7 -22.3 19.6 -21.9 19.3 -20.3 19.6 -21.3
2025-12-24T20:20:16.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:20:16.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:20:16.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.763954
2025-12-24T20:20:16.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:20:16.743 [DEBUG] [Thread-308324] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:20:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:20:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:20:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:20:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:20:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:19:41', tmtdew=14.0, humidity=39.64, cloud=0.0, wind=32.64, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:20:05.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:20:16.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:20:16.831 [DEBUG] [Thread-308327] [transport.py] [_log()] starting thread (client mode): 0xf578b160
2025-12-24T20:20:16.831 [DEBUG] [Thread-308327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:20:16.846 [DEBUG] [Thread-308327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:20:16.846 [INFO] [Thread-308327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] client lang: <none>
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] server lang: <none>
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] kex follows: False
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] Compression: none
2025-12-24T20:20:16.854 [DEBUG] [Thread-308327] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:20:16.910 [DEBUG] [Thread-308327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:20:16.911 [DEBUG] [Thread-308327] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:20:16.911 [DEBUG] [Thread-308327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:20:16.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:20:16.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:20:16.967 [DEBUG] [Thread-308327] [transport.py] [_log()] userauth is OK
2025-12-24T20:20:16.967 [DEBUG] [Thread-308327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:20:16.967 [DEBUG] [Thread-308327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:20:16.967 [DEBUG] [Thread-308327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:20:16.967 [DEBUG] [Thread-308327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:20:16.981 [INFO] [Thread-308327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:20:16.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:20:16.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:20:17.790 [DEBUG] [Thread-308327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:20:17.790 [DEBUG] [Thread-308327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:20:17.838 [DEBUG] [Thread-308327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:20:17.838 [DEBUG] [Thread-308327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:20:17.847 [DEBUG] [Thread-308327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:20:17.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:20:17.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')
2025-12-24T20:20:17.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:20:17.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:20:17.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:20:17.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:20:17.879 [DEBUG] [Thread-308327] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:20:22.794 [DEBUG] [Thread-308329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:20:25.705 [DEBUG] [Thread-308330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:20:40.993 [DEBUG] [Thread-308331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:20:47.238 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:20:47.242 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:20:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:20:47.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:20:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:20:49.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 20, 15), 14.0, 39.63, 0.0, 34.58, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:20:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:20:15
2025-12-24T20:20:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:20:50.010 [DEBUG] [Thread-308332] [transport.py] [_log()] starting thread (client mode): 0xf572b4c0
2025-12-24T20:20:50.011 [DEBUG] [Thread-308332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:20:50.016 [DEBUG] [Thread-308332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:20:50.017 [INFO] [Thread-308332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] client lang: <none>
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] server lang: <none>
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] kex follows: False
2025-12-24T20:20:50.021 [DEBUG] [Thread-308332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:20:50.022 [DEBUG] [Thread-308332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:20:50.022 [DEBUG] [Thread-308332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:20:50.022 [DEBUG] [Thread-308332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:20:50.022 [DEBUG] [Thread-308332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:20:50.022 [DEBUG] [Thread-308332] [transport.py] [_log()] Compression: none
2025-12-24T20:20:50.022 [DEBUG] [Thread-308332] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:20:50.046 [DEBUG] [Thread-308332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:20:50.049 [DEBUG] [Thread-308332] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:20:50.050 [DEBUG] [Thread-308332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:20:50.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:20:50.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:20:50.053 [DEBUG] [Thread-308332] [transport.py] [_log()] userauth is OK
2025-12-24T20:20:50.053 [DEBUG] [Thread-308332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:20:50.053 [DEBUG] [Thread-308332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:20:50.053 [DEBUG] [Thread-308332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:20:50.053 [DEBUG] [Thread-308332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:20:50.065 [INFO] [Thread-308332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:20:50.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:20:50.654 [DEBUG] [Thread-308332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:20:50.654 [DEBUG] [Thread-308332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:20:50.654 [DEBUG] [Thread-308332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:20:50.695 [DEBUG] [Thread-308332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:20:50.695 [DEBUG] [Thread-308332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:20:50.697 [DEBUG] [Thread-308332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:20:50.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:20:50.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:20:50.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:20:50.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:20:50.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:20:50.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:20:50.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:20:50.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:20:50.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:20:50.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.764301 -999.00  +19.10  24.18     44   +6.90 1 2 1 1 1    80    0 11.51 -29.66 ----- 24.7 24.2 170.2 35.2 19.6 -22.2 19.5 -21.8 19.3 -20.3 19.7 -21.3
2025-12-24T20:20:50.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:20:50.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:20:50.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.764301
2025-12-24T20:20:50.720 [DEBUG] [Thread-308332] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:20:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:20:50.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:20:50.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:20:50.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:20:50.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:20:50.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:20:15', tmtdew=14.0, humidity=39.63, cloud=0.0, wind=34.58, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:20:35.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:20:50.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:20:50.818 [DEBUG] [Thread-308335] [transport.py] [_log()] starting thread (client mode): 0xf578bd90
2025-12-24T20:20:50.819 [DEBUG] [Thread-308335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:20:50.833 [DEBUG] [Thread-308335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:20:50.833 [INFO] [Thread-308335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:20:50.840 [DEBUG] [Thread-308335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] client lang: <none>
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] server lang: <none>
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] kex follows: False
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:20:50.841 [DEBUG] [Thread-308335] [transport.py] [_log()] Compression: none
2025-12-24T20:20:50.843 [DEBUG] [Thread-308335] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:20:50.898 [DEBUG] [Thread-308335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:20:50.898 [DEBUG] [Thread-308335] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:20:50.898 [DEBUG] [Thread-308335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:20:50.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:20:50.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:20:50.956 [DEBUG] [Thread-308335] [transport.py] [_log()] userauth is OK
2025-12-24T20:20:50.956 [DEBUG] [Thread-308335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:20:50.956 [DEBUG] [Thread-308335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:20:50.956 [DEBUG] [Thread-308335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:20:50.956 [DEBUG] [Thread-308335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:20:50.970 [INFO] [Thread-308335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:20:50.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:20:50.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:20:51.792 [DEBUG] [Thread-308335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:20:51.792 [DEBUG] [Thread-308335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:20:51.840 [DEBUG] [Thread-308335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:20:51.840 [DEBUG] [Thread-308335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:20:51.849 [DEBUG] [Thread-308335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:20:51.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:20:51.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')
2025-12-24T20:20: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
2025-12-24T20:20:51.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:20:51.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:20:51.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:20:51.881 [DEBUG] [Thread-308335] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:20:56.108 [DEBUG] [Thread-308337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:21:11.305 [DEBUG] [Thread-308338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:21:21.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:21:21.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:21:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:21:24.175 [DEBUG] [Thread-308339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:21:25.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 20, 48), 14.06, 39.63, 0.0, 33.12, 19.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:21:25.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:20:48
2025-12-24T20:21:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:21:25.714 [DEBUG] [Thread-308340] [transport.py] [_log()] starting thread (client mode): 0xf8188c70
2025-12-24T20:21:25.715 [DEBUG] [Thread-308340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:21:25.727 [DEBUG] [Thread-308340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:21:25.727 [INFO] [Thread-308340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] client lang: <none>
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] server lang: <none>
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] kex follows: False
2025-12-24T20:21:25.732 [DEBUG] [Thread-308340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:21:25.733 [DEBUG] [Thread-308340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:21:25.733 [DEBUG] [Thread-308340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:21:25.733 [DEBUG] [Thread-308340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:21:25.733 [DEBUG] [Thread-308340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:21:25.733 [DEBUG] [Thread-308340] [transport.py] [_log()] Compression: none
2025-12-24T20:21:25.733 [DEBUG] [Thread-308340] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:21:25.765 [DEBUG] [Thread-308340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:21:25.769 [DEBUG] [Thread-308340] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:21:25.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:21:25.771 [DEBUG] [Thread-308340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:21:25.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:21:25.773 [DEBUG] [Thread-308340] [transport.py] [_log()] userauth is OK
2025-12-24T20:21:25.773 [DEBUG] [Thread-308340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:21:25.773 [DEBUG] [Thread-308340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:21:25.773 [DEBUG] [Thread-308340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:21:25.774 [DEBUG] [Thread-308340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:21:25.791 [INFO] [Thread-308340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:21:25.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:21:26.400 [DEBUG] [Thread-308342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:21:26.407 [DEBUG] [Thread-308340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:21:26.407 [DEBUG] [Thread-308340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:21:26.407 [DEBUG] [Thread-308340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:21:26.448 [DEBUG] [Thread-308340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:21:26.448 [DEBUG] [Thread-308340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:21:26.451 [DEBUG] [Thread-308340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:21:26.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:21:26.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:21:26.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:21:26.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:21:26.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:21:26.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:21:26.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:21:26.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:21:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:21:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.764648 -999.00  +19.10  21.02     44   +6.90 1 2 1 1 1    74    0 11.77 -28.71 ----- 30.5 21.0 174.0 37.6 19.7 -22.2 19.6 -22.1 19.3 -20.4 19.7 -21.2
2025-12-24T20:21:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:21:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:21:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.764648
2025-12-24T20:21:26.479 [DEBUG] [Thread-308340] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:21:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:21:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:21:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:21:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:21:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:21:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:20:48', tmtdew=14.06, humidity=39.63, cloud=0.0, wind=33.12, temperature=19.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:21:05.587', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:21:26.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:21:26.577 [DEBUG] [Thread-308344] [transport.py] [_log()] starting thread (client mode): 0xf572ac20
2025-12-24T20:21:26.577 [DEBUG] [Thread-308344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:21:26.591 [DEBUG] [Thread-308344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:21:26.591 [INFO] [Thread-308344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] client lang: <none>
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] server lang: <none>
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] kex follows: False
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] Compression: none
2025-12-24T20:21:26.599 [DEBUG] [Thread-308344] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:21:26.654 [DEBUG] [Thread-308344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:21:26.654 [DEBUG] [Thread-308344] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:21:26.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:21:26.654 [DEBUG] [Thread-308344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:21:26.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:21:26.711 [DEBUG] [Thread-308344] [transport.py] [_log()] userauth is OK
2025-12-24T20:21:26.711 [DEBUG] [Thread-308344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:21:26.711 [DEBUG] [Thread-308344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:21:26.711 [DEBUG] [Thread-308344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:21:26.711 [DEBUG] [Thread-308344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:21:26.729 [INFO] [Thread-308344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:21:26.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:21:26.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:21:27.594 [DEBUG] [Thread-308344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:21:27.594 [DEBUG] [Thread-308344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:21:27.642 [DEBUG] [Thread-308344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:21:27.642 [DEBUG] [Thread-308344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:21:27.651 [DEBUG] [Thread-308344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:21:27.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:21:27.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:21:27.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:21:27.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:21:27.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:21:27.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:21:27.684 [DEBUG] [Thread-308344] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:21:41.529 [DEBUG] [Thread-308346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:21:56.723 [DEBUG] [Thread-308347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:21:57.603 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:21:57.605 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:21:57.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:21:57.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:21:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:21:58.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 21, 21), 14.05, 39.66, 0.0, 34.37, 19.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:21:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:21:21
2025-12-24T20:21:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:21:59.059 [DEBUG] [Thread-308348] [transport.py] [_log()] starting thread (client mode): 0xf572b4c0
2025-12-24T20:21:59.059 [DEBUG] [Thread-308348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:21:59.072 [DEBUG] [Thread-308348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:21:59.073 [INFO] [Thread-308348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:21:59.077 [DEBUG] [Thread-308348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:21:59.077 [DEBUG] [Thread-308348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:21:59.077 [DEBUG] [Thread-308348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:21:59.077 [DEBUG] [Thread-308348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:21:59.077 [DEBUG] [Thread-308348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:21:59.077 [DEBUG] [Thread-308348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:21:59.077 [DEBUG] [Thread-308348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:21:59.077 [DEBUG] [Thread-308348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:21:59.078 [DEBUG] [Thread-308348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:21:59.078 [DEBUG] [Thread-308348] [transport.py] [_log()] client lang: <none>
2025-12-24T20:21:59.078 [DEBUG] [Thread-308348] [transport.py] [_log()] server lang: <none>
2025-12-24T20:21:59.078 [DEBUG] [Thread-308348] [transport.py] [_log()] kex follows: False
2025-12-24T20:21:59.078 [DEBUG] [Thread-308348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:21:59.078 [DEBUG] [Thread-308348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:21:59.079 [DEBUG] [Thread-308348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:21:59.079 [DEBUG] [Thread-308348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:21:59.079 [DEBUG] [Thread-308348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:21:59.079 [DEBUG] [Thread-308348] [transport.py] [_log()] Compression: none
2025-12-24T20:21:59.079 [DEBUG] [Thread-308348] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:21:59.110 [DEBUG] [Thread-308348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:21:59.114 [DEBUG] [Thread-308348] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:21:59.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:21:59.115 [DEBUG] [Thread-308348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:21:59.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:21:59.117 [DEBUG] [Thread-308348] [transport.py] [_log()] userauth is OK
2025-12-24T20:21:59.117 [DEBUG] [Thread-308348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:21:59.117 [DEBUG] [Thread-308348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:21:59.117 [DEBUG] [Thread-308348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:21:59.117 [DEBUG] [Thread-308348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:21:59.136 [INFO] [Thread-308348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:21:59.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:21:59.780 [DEBUG] [Thread-308348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:21:59.780 [DEBUG] [Thread-308348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:21:59.781 [DEBUG] [Thread-308348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:21:59.821 [DEBUG] [Thread-308348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:21:59.821 [DEBUG] [Thread-308348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:21:59.823 [DEBUG] [Thread-308348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:21:59.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:21:59.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:21:59.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:21:59.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:21:59.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:21:59.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:21:59.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:21:59.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:21:59.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:21:59.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.764995 -999.00  +19.10  24.03     44   +6.90 1 2 1 1 1    68    0 11.50 -30.48 ----- 25.3 24.0 181.2 37.5 19.6 -22.2 19.6 -21.9 19.3 -20.4 19.6 -21.4
2025-12-24T20:21:59.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:21:59.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:21:59.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.764995
2025-12-24T20:21:59.853 [DEBUG] [Thread-308348] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:21:59.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:21:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:21:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:21:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:21:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:21:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:21:21', tmtdew=14.05, humidity=39.66, cloud=0.0, wind=34.37, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:21:35.568', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:21:59.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:21:59.955 [DEBUG] [Thread-308351] [transport.py] [_log()] starting thread (client mode): 0xf572cca0
2025-12-24T20:21:59.955 [DEBUG] [Thread-308351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:21:59.970 [DEBUG] [Thread-308351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:21:59.970 [INFO] [Thread-308351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] client lang: <none>
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] server lang: <none>
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] kex follows: False
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] Compression: none
2025-12-24T20:21:59.978 [DEBUG] [Thread-308351] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:22:00.033 [DEBUG] [Thread-308351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:22:00.034 [DEBUG] [Thread-308351] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:22:00.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:22:00.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:22:00.034 [DEBUG] [Thread-308351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:22:00.091 [DEBUG] [Thread-308351] [transport.py] [_log()] userauth is OK
2025-12-24T20:22:00.091 [DEBUG] [Thread-308351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:22:00.091 [DEBUG] [Thread-308351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:22:00.091 [DEBUG] [Thread-308351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:22:00.091 [DEBUG] [Thread-308351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:22:00.109 [INFO] [Thread-308351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:22:00.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:22:00.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:22:00.922 [DEBUG] [Thread-308351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:22:00.922 [DEBUG] [Thread-308351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:22:00.969 [DEBUG] [Thread-308351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:22:00.969 [DEBUG] [Thread-308351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:22:00.978 [DEBUG] [Thread-308351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:22:00.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:22:00.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:22:00.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:22:01.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:22:01.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:22:01.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:22:01.011 [DEBUG] [Thread-308351] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:22:11.880 [DEBUG] [Thread-308353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:22:24.853 [DEBUG] [Thread-308354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:22:27.061 [DEBUG] [Thread-308355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:22:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:22:31.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:22:31.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:22:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 21, 56), 14.05, 39.64, 0.0, 32.47, 19.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:22:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:21:56
2025-12-24T20:22:32.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:22:32.612 [DEBUG] [Thread-308356] [transport.py] [_log()] starting thread (client mode): 0xf57700d0
2025-12-24T20:22:32.612 [DEBUG] [Thread-308356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:22:32.624 [DEBUG] [Thread-308356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:22:32.624 [INFO] [Thread-308356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] client lang: <none>
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] server lang: <none>
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] kex follows: False
2025-12-24T20:22:32.629 [DEBUG] [Thread-308356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:22:32.630 [DEBUG] [Thread-308356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:22:32.630 [DEBUG] [Thread-308356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:22:32.630 [DEBUG] [Thread-308356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:22:32.630 [DEBUG] [Thread-308356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:22:32.630 [DEBUG] [Thread-308356] [transport.py] [_log()] Compression: none
2025-12-24T20:22:32.630 [DEBUG] [Thread-308356] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:22:32.666 [DEBUG] [Thread-308356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:22:32.671 [DEBUG] [Thread-308356] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:22:32.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:22:32.673 [DEBUG] [Thread-308356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:22:32.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:22:32.677 [DEBUG] [Thread-308356] [transport.py] [_log()] userauth is OK
2025-12-24T20:22:32.677 [DEBUG] [Thread-308356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:22:32.677 [DEBUG] [Thread-308356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:22:32.677 [DEBUG] [Thread-308356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:22:32.677 [DEBUG] [Thread-308356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:22:32.697 [INFO] [Thread-308356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:22:32.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:22:33.320 [DEBUG] [Thread-308356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:22:33.320 [DEBUG] [Thread-308356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:22:33.321 [DEBUG] [Thread-308356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:22:33.361 [DEBUG] [Thread-308356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:22:33.361 [DEBUG] [Thread-308356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:22:33.363 [DEBUG] [Thread-308356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:22:33.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:22:33.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:22:33.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:22:33.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:22:33.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:22:33.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:22:33.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:22:33.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:22:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:22:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.765343 -999.00  +19.10  14.93     44   +6.80 1 2 1 1 1    63    0 11.53 -30.01 ----- 17.9 14.9 182.0 29.1 19.6 -22.2 19.6 -22.1 19.4 -20.4 19.6 -21.2
2025-12-24T20:22:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:22:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:22:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.765343
2025-12-24T20:22:33.397 [DEBUG] [Thread-308356] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:22:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:22:33.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:22:33.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:22:33.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:22:33.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:22:33.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:21:56', tmtdew=14.05, humidity=39.64, cloud=0.0, wind=32.47, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:22:05.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:22:33.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:22:33.730 [DEBUG] [Thread-308359] [transport.py] [_log()] starting thread (client mode): 0xf578a200
2025-12-24T20:22:33.730 [DEBUG] [Thread-308359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:22:33.745 [DEBUG] [Thread-308359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:22:33.745 [INFO] [Thread-308359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] client lang: <none>
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] server lang: <none>
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] kex follows: False
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:22:33.753 [DEBUG] [Thread-308359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:22:33.754 [DEBUG] [Thread-308359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:22:33.754 [DEBUG] [Thread-308359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:22:33.754 [DEBUG] [Thread-308359] [transport.py] [_log()] Compression: none
2025-12-24T20:22:33.754 [DEBUG] [Thread-308359] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:22:33.813 [DEBUG] [Thread-308359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:22:33.813 [DEBUG] [Thread-308359] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:22:33.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:22:33.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:22:33.814 [DEBUG] [Thread-308359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:22:33.871 [DEBUG] [Thread-308359] [transport.py] [_log()] userauth is OK
2025-12-24T20:22:33.871 [DEBUG] [Thread-308359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:22:33.871 [DEBUG] [Thread-308359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:22:33.871 [DEBUG] [Thread-308359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:22:33.871 [DEBUG] [Thread-308359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:22:33.887 [INFO] [Thread-308359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:22:33.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:22:33.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:22:34.860 [DEBUG] [Thread-308359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:22:34.860 [DEBUG] [Thread-308359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:22:34.860 [DEBUG] [Thread-308359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:22:34.860 [DEBUG] [Thread-308359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:22:34.868 [DEBUG] [Thread-308359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:22:34.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:22: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')
2025-12-24T20:22:34.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:22:34.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:22:34.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:22:34.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:22:34.906 [DEBUG] [Thread-308359] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:22:42.173 [DEBUG] [Thread-308361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:22:57.380 [DEBUG] [Thread-308362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:23:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:23:04.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:23:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:23:05.525 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:23:05.527 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:23:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 22, 29), 14.07, 39.61, 0.0, 35.08, 19.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:23:06.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:22:29
2025-12-24T20:23:06.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:23:07.063 [DEBUG] [Thread-308363] [transport.py] [_log()] starting thread (client mode): 0xf572dae0
2025-12-24T20:23:07.064 [DEBUG] [Thread-308363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:23:07.075 [DEBUG] [Thread-308363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:23:07.075 [INFO] [Thread-308363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:23:07.078 [DEBUG] [Thread-308363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] client lang: <none>
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] server lang: <none>
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] kex follows: False
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] Compression: none
2025-12-24T20:23:07.079 [DEBUG] [Thread-308363] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:23:07.109 [DEBUG] [Thread-308363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:23:07.112 [DEBUG] [Thread-308363] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:23:07.113 [DEBUG] [Thread-308363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:23:07.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:23:07.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:23:07.116 [DEBUG] [Thread-308363] [transport.py] [_log()] userauth is OK
2025-12-24T20:23:07.116 [DEBUG] [Thread-308363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:23:07.116 [DEBUG] [Thread-308363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:23:07.116 [DEBUG] [Thread-308363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:23:07.116 [DEBUG] [Thread-308363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:23:07.134 [INFO] [Thread-308363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:23:07.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:23:07.734 [DEBUG] [Thread-308363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:23:07.734 [DEBUG] [Thread-308363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:23:07.735 [DEBUG] [Thread-308363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:23:07.774 [DEBUG] [Thread-308363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:23:07.774 [DEBUG] [Thread-308363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:23:07.777 [DEBUG] [Thread-308363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:23:07.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:23:07.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:23:07.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:23:07.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:23:07.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:23:07.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:23:07.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:23:07.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:23:07.796 [DEBUG] [Thread-308363] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:23:07.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:23:07.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.765690 -999.00  +19.10  25.66     44   +6.90 1 2 1 1 1    58    0 11.64 -27.83 ----- 26.7 25.7 164.0 34.9 19.6 -22.2 19.5 -22.0 19.4 -20.4 19.6 -21.3
2025-12-24T20:23:07.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:23:07.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:23:07.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.765690
2025-12-24T20:23:07.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:23:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:23:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:23:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:23:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:23:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:22:29', tmtdew=14.07, humidity=39.61, cloud=0.0, wind=35.08, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:22:35.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:23:07.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:23:07.906 [DEBUG] [Thread-308366] [transport.py] [_log()] starting thread (client mode): 0xf5788580
2025-12-24T20:23:07.906 [DEBUG] [Thread-308366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:23:07.921 [DEBUG] [Thread-308366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:23:07.921 [INFO] [Thread-308366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] client lang: <none>
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] server lang: <none>
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] kex follows: False
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] Compression: none
2025-12-24T20:23:07.929 [DEBUG] [Thread-308366] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:23:07.990 [DEBUG] [Thread-308366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:23:07.990 [DEBUG] [Thread-308366] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:23:07.990 [DEBUG] [Thread-308366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:23:07.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:23:07.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:23:08.047 [DEBUG] [Thread-308366] [transport.py] [_log()] userauth is OK
2025-12-24T20:23:08.047 [DEBUG] [Thread-308366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:23:08.047 [DEBUG] [Thread-308366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:23:08.047 [DEBUG] [Thread-308366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:23:08.047 [DEBUG] [Thread-308366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:23:08.065 [INFO] [Thread-308366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:23:08.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:23:08.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:23:08.909 [DEBUG] [Thread-308366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:23:08.909 [DEBUG] [Thread-308366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:23:08.958 [DEBUG] [Thread-308366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:23:08.958 [DEBUG] [Thread-308366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:23:08.967 [DEBUG] [Thread-308366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:23:08.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:23:08.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:23: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') -> 00000000
2025-12-24T20:23:08.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:23:08.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:23:08.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:23:09.001 [DEBUG] [Thread-308366] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:23:12.487 [DEBUG] [Thread-308368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:23:25.231 [DEBUG] [Thread-308369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:23:27.676 [DEBUG] [Thread-308370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:23:39.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:23:39.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:23:39.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:23:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 23, 5), 14.07, 39.59, 0.0, 31.07, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:23:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:23:05
2025-12-24T20:23:40.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:23:40.882 [DEBUG] [Thread-308371] [transport.py] [_log()] starting thread (client mode): 0xf57295a0
2025-12-24T20:23:40.884 [DEBUG] [Thread-308371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:23:40.889 [DEBUG] [Thread-308371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:23:40.889 [INFO] [Thread-308371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] client lang: <none>
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] server lang: <none>
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] kex follows: False
2025-12-24T20:23:40.893 [DEBUG] [Thread-308371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:23:40.894 [DEBUG] [Thread-308371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:23:40.894 [DEBUG] [Thread-308371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:23:40.894 [DEBUG] [Thread-308371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:23:40.894 [DEBUG] [Thread-308371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:23:40.894 [DEBUG] [Thread-308371] [transport.py] [_log()] Compression: none
2025-12-24T20:23:40.894 [DEBUG] [Thread-308371] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:23:40.922 [DEBUG] [Thread-308371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:23:40.927 [DEBUG] [Thread-308371] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:23:40.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:23:40.932 [DEBUG] [Thread-308371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:23:40.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:23:40.933 [DEBUG] [Thread-308371] [transport.py] [_log()] userauth is OK
2025-12-24T20:23:40.934 [DEBUG] [Thread-308371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:23:40.934 [DEBUG] [Thread-308371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:23:40.934 [DEBUG] [Thread-308371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:23:40.934 [DEBUG] [Thread-308371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:23:40.951 [INFO] [Thread-308371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:23:40.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:23:41.567 [DEBUG] [Thread-308371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:23:41.567 [DEBUG] [Thread-308371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:23:41.568 [DEBUG] [Thread-308371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:23:41.609 [DEBUG] [Thread-308371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:23:41.609 [DEBUG] [Thread-308371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:23:41.611 [DEBUG] [Thread-308371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:23:41.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:23:41.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:23:41.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:23:41.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:23:41.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:23:41.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:23:41.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:23:41.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:23:41.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:23:41.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.766038 -999.00  +19.10  24.79     44   +6.90 1 2 1 1 1    53    0 11.65 -27.61 ----- 26.3 24.8 173.4 39.5 19.6 -22.3 19.6 -21.9 19.3 -20.5 19.6 -21.3
2025-12-24T20:23:41.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:23:41.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:23:41.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.766038
2025-12-24T20:23:41.642 [DEBUG] [Thread-308371] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:23:41.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:23:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:23:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:23:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:23:41.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:23:41.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:23:05', tmtdew=14.07, humidity=39.59, cloud=0.0, wind=31.07, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:23:05.683', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:23:41.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:23:41.746 [DEBUG] [Thread-308374] [transport.py] [_log()] starting thread (client mode): 0xfabc7700
2025-12-24T20:23:41.747 [DEBUG] [Thread-308374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:23:41.760 [DEBUG] [Thread-308374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:23:41.760 [INFO] [Thread-308374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] client lang: <none>
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] server lang: <none>
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] kex follows: False
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:23:41.768 [DEBUG] [Thread-308374] [transport.py] [_log()] Compression: none
2025-12-24T20:23:41.774 [DEBUG] [Thread-308374] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:23:41.826 [DEBUG] [Thread-308374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:23:41.826 [DEBUG] [Thread-308374] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:23:41.827 [DEBUG] [Thread-308374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:23:41.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:23:41.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:23:41.883 [DEBUG] [Thread-308374] [transport.py] [_log()] userauth is OK
2025-12-24T20:23:41.883 [DEBUG] [Thread-308374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:23:41.884 [DEBUG] [Thread-308374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:23:41.884 [DEBUG] [Thread-308374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:23:41.884 [DEBUG] [Thread-308374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:23:41.899 [INFO] [Thread-308374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:23:41.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:23:41.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:23:42.660 [DEBUG] [Thread-308374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:23:42.660 [DEBUG] [Thread-308374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:23:42.707 [DEBUG] [Thread-308374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:23:42.708 [DEBUG] [Thread-308374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:23:42.719 [DEBUG] [Thread-308374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:23:42.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:23:42.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:23:42.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:23:42.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:23:42.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:23:42.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:23:42.756 [DEBUG] [Thread-308374] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:23:42.780 [DEBUG] [Thread-308376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:23:58.035 [DEBUG] [Thread-308377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:24:12.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:24:12.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:24:12.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:24:12.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:24:12.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:24:13.183 [DEBUG] [Thread-308378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:24:17.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 23, 38), 14.07, 39.61, 0.0, 30.98, 19.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:24:17.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:23:38
2025-12-24T20:24:17.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:24:17.621 [DEBUG] [Thread-308379] [transport.py] [_log()] starting thread (client mode): 0xf8189630
2025-12-24T20:24:17.622 [DEBUG] [Thread-308379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:24:17.623 [DEBUG] [Thread-308379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:24:17.624 [INFO] [Thread-308379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:24:17.629 [DEBUG] [Thread-308379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:24:17.630 [DEBUG] [Thread-308379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:24:17.630 [DEBUG] [Thread-308379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:24:17.630 [DEBUG] [Thread-308379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:24:17.630 [DEBUG] [Thread-308379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:24:17.631 [DEBUG] [Thread-308379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:24:17.631 [DEBUG] [Thread-308379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:24:17.631 [DEBUG] [Thread-308379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:24:17.631 [DEBUG] [Thread-308379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:24:17.631 [DEBUG] [Thread-308379] [transport.py] [_log()] client lang: <none>
2025-12-24T20:24:17.631 [DEBUG] [Thread-308379] [transport.py] [_log()] server lang: <none>
2025-12-24T20:24:17.631 [DEBUG] [Thread-308379] [transport.py] [_log()] kex follows: False
2025-12-24T20:24:17.631 [DEBUG] [Thread-308379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:24:17.632 [DEBUG] [Thread-308379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:24:17.632 [DEBUG] [Thread-308379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:24:17.632 [DEBUG] [Thread-308379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:24:17.632 [DEBUG] [Thread-308379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:24:17.632 [DEBUG] [Thread-308379] [transport.py] [_log()] Compression: none
2025-12-24T20:24:17.632 [DEBUG] [Thread-308379] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:24:17.670 [DEBUG] [Thread-308379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:24:17.675 [DEBUG] [Thread-308379] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:24:17.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:24:17.679 [DEBUG] [Thread-308379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:24:17.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:24:17.683 [DEBUG] [Thread-308379] [transport.py] [_log()] userauth is OK
2025-12-24T20:24:17.683 [DEBUG] [Thread-308379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:24:17.683 [DEBUG] [Thread-308379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:24:17.683 [DEBUG] [Thread-308379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:24:17.683 [DEBUG] [Thread-308379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:24:17.706 [INFO] [Thread-308379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:24:17.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:24:18.365 [DEBUG] [Thread-308379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:24:18.365 [DEBUG] [Thread-308379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:24:18.365 [DEBUG] [Thread-308379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:24:18.407 [DEBUG] [Thread-308379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:24:18.407 [DEBUG] [Thread-308379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:24:18.410 [DEBUG] [Thread-308379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:24:18.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:24:18.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:24:18.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:24:18.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:24:18.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:24:18.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:24:18.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:24:18.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:24:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:24:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.766384 -999.00  +19.10  23.88     44   +6.90 1 2 1 1 1    49    0 11.84 -28.61 ----- 18.8 23.9 176.4 37.7 19.6 -22.2 19.5 -22.1 19.3 -20.5 19.6 -21.3
2025-12-24T20:24:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:24:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:24:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.766384
2025-12-24T20:24:18.450 [DEBUG] [Thread-308379] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:24:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:24:18.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:24:18.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:24:18.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:24:18.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:24:18.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:23:38', tmtdew=14.07, humidity=39.61, cloud=0.0, wind=30.98, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:23:35.578', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:24:18.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:24:18.553 [DEBUG] [Thread-308382] [transport.py] [_log()] starting thread (client mode): 0xf57296c0
2025-12-24T20:24:18.553 [DEBUG] [Thread-308382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:24:18.573 [DEBUG] [Thread-308382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:24:18.573 [INFO] [Thread-308382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:24:18.580 [DEBUG] [Thread-308382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] client lang: <none>
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] server lang: <none>
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] kex follows: False
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] Compression: none
2025-12-24T20:24:18.581 [DEBUG] [Thread-308382] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:24:18.638 [DEBUG] [Thread-308382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:24:18.638 [DEBUG] [Thread-308382] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:24:18.638 [DEBUG] [Thread-308382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:24:18.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:24:18.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:24:18.695 [DEBUG] [Thread-308382] [transport.py] [_log()] userauth is OK
2025-12-24T20:24:18.696 [DEBUG] [Thread-308382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:24:18.696 [DEBUG] [Thread-308382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:24:18.696 [DEBUG] [Thread-308382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:24:18.696 [DEBUG] [Thread-308382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:24:18.710 [INFO] [Thread-308382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:24:18.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:24:18.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:24:19.505 [DEBUG] [Thread-308382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:24:19.505 [DEBUG] [Thread-308382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:24:19.553 [DEBUG] [Thread-308382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:24:19.553 [DEBUG] [Thread-308382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:24:19.561 [DEBUG] [Thread-308382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:24:19.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:24:19.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:24:19.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:24:19.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:24:19.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:24:19.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:24:19.594 [DEBUG] [Thread-308382] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:24:25.892 [DEBUG] [Thread-308384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:24:28.495 [DEBUG] [Thread-308385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:24:43.955 [DEBUG] [Thread-308386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:24:49.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:24:49.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:24:49.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:24:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 24, 11), 14.05, 39.63, 0.0, 31.6, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:24:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:24:11
2025-12-24T20:24:51.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:24:51.192 [DEBUG] [Thread-308387] [transport.py] [_log()] starting thread (client mode): 0xf8189420
2025-12-24T20:24:51.193 [DEBUG] [Thread-308387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:24:51.203 [DEBUG] [Thread-308387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:24:51.203 [INFO] [Thread-308387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] client lang: <none>
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] server lang: <none>
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] kex follows: False
2025-12-24T20:24:51.208 [DEBUG] [Thread-308387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:24:51.209 [DEBUG] [Thread-308387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:24:51.209 [DEBUG] [Thread-308387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:24:51.209 [DEBUG] [Thread-308387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:24:51.209 [DEBUG] [Thread-308387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:24:51.209 [DEBUG] [Thread-308387] [transport.py] [_log()] Compression: none
2025-12-24T20:24:51.209 [DEBUG] [Thread-308387] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:24:51.246 [DEBUG] [Thread-308387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:24:51.249 [DEBUG] [Thread-308387] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:24:51.250 [DEBUG] [Thread-308387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:24:51.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:24:51.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:24:51.254 [DEBUG] [Thread-308387] [transport.py] [_log()] userauth is OK
2025-12-24T20:24:51.254 [DEBUG] [Thread-308387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:24:51.254 [DEBUG] [Thread-308387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:24:51.254 [DEBUG] [Thread-308387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:24:51.254 [DEBUG] [Thread-308387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:24:51.286 [INFO] [Thread-308387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:24:51.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:24:51.923 [DEBUG] [Thread-308387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:24:51.923 [DEBUG] [Thread-308387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:24:51.924 [DEBUG] [Thread-308387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:24:51.965 [DEBUG] [Thread-308387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:24:51.965 [DEBUG] [Thread-308387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:24:51.967 [DEBUG] [Thread-308387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:24:51.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:24:51.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:24:51.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:24:51.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:24:51.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:24:51.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:24:51.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:24:51.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.767079 -999.00  +19.10  24.14     45   +6.90 1 2 1 1 1    41    0 11.58 -31.59 ----- 18.1 24.1 169.4 31.6 19.6 -22.3 19.5 -22.0 19.4 -20.4 19.6 -21.3
2025-12-24T20:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.767079
2025-12-24T20:24:51.995 [DEBUG] [Thread-308387] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:24:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:24:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:24:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:24:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:24:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:24:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:24:11', tmtdew=14.05, humidity=39.63, cloud=0.0, wind=31.6, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:24:35.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:24:52.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:24:52.093 [DEBUG] [Thread-308390] [transport.py] [_log()] starting thread (client mode): 0xf818a860
2025-12-24T20:24:52.093 [DEBUG] [Thread-308390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:24:52.107 [DEBUG] [Thread-308390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:24:52.107 [INFO] [Thread-308390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] client lang: <none>
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] server lang: <none>
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] kex follows: False
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] Compression: none
2025-12-24T20:24:52.115 [DEBUG] [Thread-308390] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:24:52.171 [DEBUG] [Thread-308390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:24:52.171 [DEBUG] [Thread-308390] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:24:52.172 [DEBUG] [Thread-308390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:24:52.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:24:52.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:24:52.227 [DEBUG] [Thread-308390] [transport.py] [_log()] userauth is OK
2025-12-24T20:24:52.228 [DEBUG] [Thread-308390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:24:52.228 [DEBUG] [Thread-308390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:24:52.228 [DEBUG] [Thread-308390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:24:52.228 [DEBUG] [Thread-308390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:24:52.251 [INFO] [Thread-308390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:24:52.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:24:52.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:24:53.059 [DEBUG] [Thread-308390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:24:53.059 [DEBUG] [Thread-308390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:24:53.106 [DEBUG] [Thread-308390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:24:53.107 [DEBUG] [Thread-308390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:24:53.115 [DEBUG] [Thread-308390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:24:53.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:24:53.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:24:53.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:24:53.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:24:53.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:24:53.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:24:53.149 [DEBUG] [Thread-308390] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:24:59.073 [DEBUG] [Thread-308392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:25:14.251 [DEBUG] [Thread-308393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:25:17.730 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:25:17.740 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:25:23.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:25:23.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:25:23.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
2025-12-24T20:25:26.182 [DEBUG] [Thread-308394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:25:26.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 24, 48), 14.03, 39.71, 0.0, 30.61, 19.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:25:26.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:24:48
2025-12-24T20:25:26.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:25:26.762 [DEBUG] [Thread-308395] [transport.py] [_log()] starting thread (client mode): 0xf818a4d0
2025-12-24T20:25:26.762 [DEBUG] [Thread-308395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:25:26.774 [DEBUG] [Thread-308395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:25:26.774 [INFO] [Thread-308395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] client lang: <none>
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] server lang: <none>
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] kex follows: False
2025-12-24T20:25:26.779 [DEBUG] [Thread-308395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:25:26.780 [DEBUG] [Thread-308395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:25:26.780 [DEBUG] [Thread-308395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:25:26.780 [DEBUG] [Thread-308395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:25:26.780 [DEBUG] [Thread-308395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:25:26.780 [DEBUG] [Thread-308395] [transport.py] [_log()] Compression: none
2025-12-24T20:25:26.780 [DEBUG] [Thread-308395] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:25:26.815 [DEBUG] [Thread-308395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:25:26.818 [DEBUG] [Thread-308395] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:25:26.819 [DEBUG] [Thread-308395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:25:26.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:25:26.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:25:26.822 [DEBUG] [Thread-308395] [transport.py] [_log()] userauth is OK
2025-12-24T20:25:26.822 [DEBUG] [Thread-308395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:25:26.823 [DEBUG] [Thread-308395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:25:26.823 [DEBUG] [Thread-308395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:25:26.823 [DEBUG] [Thread-308395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:25:26.841 [INFO] [Thread-308395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:25:26.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:25:27.465 [DEBUG] [Thread-308395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:25:27.465 [DEBUG] [Thread-308395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:25:27.466 [DEBUG] [Thread-308395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:25:27.507 [DEBUG] [Thread-308395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:25:27.507 [DEBUG] [Thread-308395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:25:27.509 [DEBUG] [Thread-308395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:25:27.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:25:27.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:25:27.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:25:27.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:25:27.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:25:27.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:25:27.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:25:27.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:25:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:25:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.767426 -999.00  +19.10  16.50     44   +6.90 1 2 1 1 1    38    0 11.46 -30.52 ----- 19.7 16.5 163.4 26.6 19.6 -22.3 19.5 -22.0 19.3 -20.4 19.6 -21.4
2025-12-24T20:25:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:25:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:25:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.767426
2025-12-24T20:25:27.541 [DEBUG] [Thread-308395] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:25:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:25:27.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:25:27.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:25:27.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:25:27.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:25:27.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:24:48', tmtdew=14.03, humidity=39.71, cloud=0.0, wind=30.61, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:25:05.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:25:27.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:25:27.645 [DEBUG] [Thread-308398] [transport.py] [_log()] starting thread (client mode): 0xf57712d0
2025-12-24T20:25:27.646 [DEBUG] [Thread-308398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:25:27.660 [DEBUG] [Thread-308398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:25:27.660 [INFO] [Thread-308398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] client lang: <none>
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] server lang: <none>
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] kex follows: False
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:25:27.668 [DEBUG] [Thread-308398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:25:27.669 [DEBUG] [Thread-308398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:25:27.669 [DEBUG] [Thread-308398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:25:27.669 [DEBUG] [Thread-308398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:25:27.669 [DEBUG] [Thread-308398] [transport.py] [_log()] Compression: none
2025-12-24T20:25:27.669 [DEBUG] [Thread-308398] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:25:27.724 [DEBUG] [Thread-308398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:25:27.724 [DEBUG] [Thread-308398] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:25:27.724 [DEBUG] [Thread-308398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:25:27.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:25:27.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:25:27.781 [DEBUG] [Thread-308398] [transport.py] [_log()] userauth is OK
2025-12-24T20:25:27.781 [DEBUG] [Thread-308398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:25:27.781 [DEBUG] [Thread-308398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:25:27.781 [DEBUG] [Thread-308398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:25:27.781 [DEBUG] [Thread-308398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:25:27.795 [INFO] [Thread-308398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:25:27.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:25:27.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:25:28.661 [DEBUG] [Thread-308398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:25:28.661 [DEBUG] [Thread-308398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:25:28.709 [DEBUG] [Thread-308398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:25:28.709 [DEBUG] [Thread-308398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:25:28.718 [DEBUG] [Thread-308398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:25:28.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:25:28.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:25:28.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:25:28.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:25:28.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:25:28.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:25:28.755 [DEBUG] [Thread-308398] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:25:29.353 [DEBUG] [Thread-308400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:25:44.558 [DEBUG] [Thread-308401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:25:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:25:58.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:25:58.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
2025-12-24T20:25:59.658 [DEBUG] [Thread-308402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:25:59.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 25, 21), 14.03, 39.69, 0.0, 33.52, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:25:59.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:25:21
2025-12-24T20:25:59.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:26:00.166 [DEBUG] [Thread-308403] [transport.py] [_log()] starting thread (client mode): 0xf572e200
2025-12-24T20:26:00.167 [DEBUG] [Thread-308403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:26:00.176 [DEBUG] [Thread-308403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:26:00.176 [INFO] [Thread-308403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:26:00.179 [DEBUG] [Thread-308403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:26:00.179 [DEBUG] [Thread-308403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:26:00.179 [DEBUG] [Thread-308403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] client lang: <none>
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] server lang: <none>
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] kex follows: False
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:26:00.180 [DEBUG] [Thread-308403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:26:00.181 [DEBUG] [Thread-308403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:26:00.181 [DEBUG] [Thread-308403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:26:00.181 [DEBUG] [Thread-308403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:26:00.181 [DEBUG] [Thread-308403] [transport.py] [_log()] Compression: none
2025-12-24T20:26:00.181 [DEBUG] [Thread-308403] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:26:00.216 [DEBUG] [Thread-308403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:26:00.220 [DEBUG] [Thread-308403] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:26:00.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:26:00.222 [DEBUG] [Thread-308403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:26:00.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:26:00.224 [DEBUG] [Thread-308403] [transport.py] [_log()] userauth is OK
2025-12-24T20:26:00.224 [DEBUG] [Thread-308403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:26:00.224 [DEBUG] [Thread-308403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:26:00.224 [DEBUG] [Thread-308403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:26:00.224 [DEBUG] [Thread-308403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:26:00.242 [INFO] [Thread-308403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:26:00.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:26:00.899 [DEBUG] [Thread-308403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:26:00.950 [DEBUG] [Thread-308403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:26:00.957 [DEBUG] [Thread-308403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:26:00.957 [DEBUG] [Thread-308403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:26:00.957 [DEBUG] [Thread-308403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:26:00.959 [DEBUG] [Thread-308403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:26:00.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:26:00.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:26:00.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:26:00.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:26:00.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:26:00.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:26:00.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:26:00.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:26:00.983 [DEBUG] [Thread-308403] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:26:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:26:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.767773 -999.00  +19.10  29.20     45   +6.90 1 2 1 1 1    35    0 11.55 -29.90 ----- 25.2 29.2 169.4 32.8 19.6 -22.3 19.5 -22.0 19.3 -20.5 19.6 -21.3
2025-12-24T20:26:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:26:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:26:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.767773
2025-12-24T20:26:01.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:26:01.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:26:01.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:26:01.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:26:01.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:26:01.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:25:21', tmtdew=14.03, humidity=39.69, cloud=0.0, wind=33.52, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:25:35.587', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:26:01.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:26:01.105 [DEBUG] [Thread-308406] [transport.py] [_log()] starting thread (client mode): 0xf572ddb0
2025-12-24T20:26:01.105 [DEBUG] [Thread-308406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:26:01.120 [DEBUG] [Thread-308406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:26:01.120 [INFO] [Thread-308406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] client lang: <none>
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] server lang: <none>
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] kex follows: False
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:26:01.128 [DEBUG] [Thread-308406] [transport.py] [_log()] Compression: none
2025-12-24T20:26:01.129 [DEBUG] [Thread-308406] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:26:01.186 [DEBUG] [Thread-308406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:26:01.186 [DEBUG] [Thread-308406] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:26:01.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:26:01.187 [DEBUG] [Thread-308406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:26:01.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:26:01.243 [DEBUG] [Thread-308406] [transport.py] [_log()] userauth is OK
2025-12-24T20:26:01.243 [DEBUG] [Thread-308406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:26:01.243 [DEBUG] [Thread-308406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:26:01.243 [DEBUG] [Thread-308406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:26:01.243 [DEBUG] [Thread-308406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:26:01.257 [INFO] [Thread-308406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:26:01.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:26:01.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:26:02.086 [DEBUG] [Thread-308406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:26:02.087 [DEBUG] [Thread-308406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:26:02.135 [DEBUG] [Thread-308406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:26:02.135 [DEBUG] [Thread-308406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:26:02.143 [DEBUG] [Thread-308406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:26:02.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:26:02.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:26:02.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:26:02.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:26:02.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:26:02.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:26:02.176 [DEBUG] [Thread-308406] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:26:14.759 [DEBUG] [Thread-308408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:26:23.830 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:26:23.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:26:26.451 [DEBUG] [Thread-308409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:26:29.922 [DEBUG] [Thread-308410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:26:32.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:26:32.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:26:32.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
2025-12-24T20:26:33.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 25, 57), 14.05, 39.64, 0.0, 31.26, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:26:33.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:25:57
2025-12-24T20:26:34.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:26:34.511 [DEBUG] [Thread-308411] [transport.py] [_log()] starting thread (client mode): 0xf5770fd0
2025-12-24T20:26:34.512 [DEBUG] [Thread-308411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:26:34.521 [DEBUG] [Thread-308411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:26:34.521 [INFO] [Thread-308411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:26:34.527 [DEBUG] [Thread-308411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:26:34.527 [DEBUG] [Thread-308411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:26:34.527 [DEBUG] [Thread-308411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] client lang: <none>
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] server lang: <none>
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] kex follows: False
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:26:34.528 [DEBUG] [Thread-308411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:26:34.529 [DEBUG] [Thread-308411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:26:34.529 [DEBUG] [Thread-308411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:26:34.529 [DEBUG] [Thread-308411] [transport.py] [_log()] Compression: none
2025-12-24T20:26:34.529 [DEBUG] [Thread-308411] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:26:34.577 [DEBUG] [Thread-308411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:26:34.581 [DEBUG] [Thread-308411] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:26:34.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:26:34.585 [DEBUG] [Thread-308411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:26:34.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:26:34.588 [DEBUG] [Thread-308411] [transport.py] [_log()] userauth is OK
2025-12-24T20:26:34.588 [DEBUG] [Thread-308411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:26:34.589 [DEBUG] [Thread-308411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:26:34.589 [DEBUG] [Thread-308411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:26:34.589 [DEBUG] [Thread-308411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:26:34.623 [INFO] [Thread-308411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:26:34.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:26:35.275 [DEBUG] [Thread-308411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:26:35.275 [DEBUG] [Thread-308411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:26:35.276 [DEBUG] [Thread-308411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:26:35.316 [DEBUG] [Thread-308411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:26:35.316 [DEBUG] [Thread-308411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:26:35.318 [DEBUG] [Thread-308411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:26:35.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:26:35.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:26:35.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:26:35.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:26:35.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:26:35.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:26:35.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:26:35.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:26:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:26:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.768120 -999.00  +19.10  24.85     45   +6.90 1 2 1 1 1    32    0 11.44 -28.97 ----- 22.1 24.9 178.0 32.5 19.6 -22.3 19.5 -22.0 19.3 -20.4 19.6 -21.4
2025-12-24T20:26:35.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:26:35.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:26:35.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.768120
2025-12-24T20:26:35.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:26:35.357 [DEBUG] [Thread-308411] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:26:35.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:26:35.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:26:35.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:26:35.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:26:35.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:25:57', tmtdew=14.05, humidity=39.64, cloud=0.0, wind=31.26, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:26:05.568', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:26:35.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:26:35.453 [DEBUG] [Thread-308414] [transport.py] [_log()] starting thread (client mode): 0xf81883a0
2025-12-24T20:26:35.453 [DEBUG] [Thread-308414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:26:35.468 [DEBUG] [Thread-308414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:26:35.468 [INFO] [Thread-308414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:26:35.475 [DEBUG] [Thread-308414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:26:35.475 [DEBUG] [Thread-308414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:26:35.475 [DEBUG] [Thread-308414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:26:35.475 [DEBUG] [Thread-308414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:26:35.475 [DEBUG] [Thread-308414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:26:35.475 [DEBUG] [Thread-308414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:26:35.475 [DEBUG] [Thread-308414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:26:35.475 [DEBUG] [Thread-308414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] client lang: <none>
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] server lang: <none>
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] kex follows: False
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:26:35.476 [DEBUG] [Thread-308414] [transport.py] [_log()] Compression: none
2025-12-24T20:26:35.478 [DEBUG] [Thread-308414] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:26:35.532 [DEBUG] [Thread-308414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:26:35.532 [DEBUG] [Thread-308414] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:26:35.532 [DEBUG] [Thread-308414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:26:35.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:26:35.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:26:35.589 [DEBUG] [Thread-308414] [transport.py] [_log()] userauth is OK
2025-12-24T20:26:35.589 [DEBUG] [Thread-308414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:26:35.589 [DEBUG] [Thread-308414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:26:35.589 [DEBUG] [Thread-308414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:26:35.589 [DEBUG] [Thread-308414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:26:35.604 [INFO] [Thread-308414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:26:35.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:26:35.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:26:36.443 [DEBUG] [Thread-308414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:26:36.443 [DEBUG] [Thread-308414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:26:36.491 [DEBUG] [Thread-308414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:26:36.491 [DEBUG] [Thread-308414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:26:36.500 [DEBUG] [Thread-308414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:26:36.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:26:36.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:26:36.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:26:36.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:26:36.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:26:36.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:26:36.535 [DEBUG] [Thread-308414] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:26:45.029 [DEBUG] [Thread-308416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:27:00.194 [DEBUG] [Thread-308417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:27:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:27:06.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:27:06.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
2025-12-24T20:27:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 26, 30), 14.05, 39.63, 0.0, 26.73, 19.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:27:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:26:30
2025-12-24T20:27:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:27:08.063 [DEBUG] [Thread-308418] [transport.py] [_log()] starting thread (client mode): 0xf572b220
2025-12-24T20:27:08.064 [DEBUG] [Thread-308418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:27:08.071 [DEBUG] [Thread-308418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:27:08.071 [INFO] [Thread-308418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] client lang: <none>
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] server lang: <none>
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] kex follows: False
2025-12-24T20:27:08.076 [DEBUG] [Thread-308418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:27:08.077 [DEBUG] [Thread-308418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:27:08.077 [DEBUG] [Thread-308418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:27:08.077 [DEBUG] [Thread-308418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:27:08.077 [DEBUG] [Thread-308418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:27:08.077 [DEBUG] [Thread-308418] [transport.py] [_log()] Compression: none
2025-12-24T20:27:08.077 [DEBUG] [Thread-308418] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:27:08.108 [DEBUG] [Thread-308418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:27:08.111 [DEBUG] [Thread-308418] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:27:08.113 [DEBUG] [Thread-308418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:27:08.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:27:08.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:27:08.116 [DEBUG] [Thread-308418] [transport.py] [_log()] userauth is OK
2025-12-24T20:27:08.116 [DEBUG] [Thread-308418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:27:08.116 [DEBUG] [Thread-308418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:27:08.116 [DEBUG] [Thread-308418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:27:08.116 [DEBUG] [Thread-308418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:27:08.135 [INFO] [Thread-308418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:27:08.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:27:08.753 [DEBUG] [Thread-308418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:27:08.753 [DEBUG] [Thread-308418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:27:08.755 [DEBUG] [Thread-308418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:27:08.794 [DEBUG] [Thread-308418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:27:08.794 [DEBUG] [Thread-308418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:27:08.798 [DEBUG] [Thread-308418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:27:08.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:27:08.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:27:08.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:27:08.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:27:08.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:27:08.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:27:08.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:27:08.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:27:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:27:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.768467 -999.00  +19.10  19.81     45   +6.90 1 2 1 1 1    29    0 11.59 -27.40 ----- 15.9 19.8 173.8 29.3 19.6 -22.2 19.5 -21.9 19.3 -20.4 19.5 -21.3
2025-12-24T20:27:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:27:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:27:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.768467
2025-12-24T20:27:08.835 [DEBUG] [Thread-308418] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:27:08.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:27:08.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:27:08.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:27:08.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:27:08.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:27:08.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:26:30', tmtdew=14.05, humidity=39.63, cloud=0.0, wind=26.73, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:26:35.549', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:27:08.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:27:08.944 [DEBUG] [Thread-308421] [transport.py] [_log()] starting thread (client mode): 0xf578b580
2025-12-24T20:27:08.944 [DEBUG] [Thread-308421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:27:08.958 [DEBUG] [Thread-308421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:27:08.959 [INFO] [Thread-308421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:27:08.966 [DEBUG] [Thread-308421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] client lang: <none>
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] server lang: <none>
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] kex follows: False
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:27:08.967 [DEBUG] [Thread-308421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:27:08.968 [DEBUG] [Thread-308421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:27:08.968 [DEBUG] [Thread-308421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:27:08.968 [DEBUG] [Thread-308421] [transport.py] [_log()] Compression: none
2025-12-24T20:27:08.968 [DEBUG] [Thread-308421] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:27:09.028 [DEBUG] [Thread-308421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:27:09.028 [DEBUG] [Thread-308421] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:27:09.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:27:09.029 [DEBUG] [Thread-308421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:27:09.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:27:09.083 [DEBUG] [Thread-308421] [transport.py] [_log()] userauth is OK
2025-12-24T20:27:09.084 [DEBUG] [Thread-308421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:27:09.084 [DEBUG] [Thread-308421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:27:09.084 [DEBUG] [Thread-308421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:27:09.084 [DEBUG] [Thread-308421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:27:09.103 [INFO] [Thread-308421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:27:09.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:27:09.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:27:09.932 [DEBUG] [Thread-308421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:27:09.933 [DEBUG] [Thread-308421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:27:09.980 [DEBUG] [Thread-308421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:27:09.980 [DEBUG] [Thread-308421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:27:09.989 [DEBUG] [Thread-308421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:27:09.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:27:09.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:27:10.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
2025-12-24T20:27:10.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:27:10.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:27:10.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:27:10.030 [DEBUG] [Thread-308421] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:27:15.322 [DEBUG] [Thread-308423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:27:26.786 [DEBUG] [Thread-308424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:27:27.981 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:27:27.982 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:27:30.470 [DEBUG] [Thread-308425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:27:40.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:27:40.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:27:40.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:27:41.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 27, 5), 14.04, 39.68, 0.0, 24.72, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:27:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:27:05
2025-12-24T20:27:41.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:27:41.516 [DEBUG] [Thread-308426] [transport.py] [_log()] starting thread (client mode): 0xf572dbd0
2025-12-24T20:27:41.517 [DEBUG] [Thread-308426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:27:41.524 [DEBUG] [Thread-308426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:27:41.524 [INFO] [Thread-308426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:27:41.528 [DEBUG] [Thread-308426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] client lang: <none>
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] server lang: <none>
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] kex follows: False
2025-12-24T20:27:41.529 [DEBUG] [Thread-308426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:27:41.530 [DEBUG] [Thread-308426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:27:41.530 [DEBUG] [Thread-308426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:27:41.530 [DEBUG] [Thread-308426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:27:41.530 [DEBUG] [Thread-308426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:27:41.530 [DEBUG] [Thread-308426] [transport.py] [_log()] Compression: none
2025-12-24T20:27:41.530 [DEBUG] [Thread-308426] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:27:41.571 [DEBUG] [Thread-308426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:27:41.573 [DEBUG] [Thread-308426] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:27:41.574 [DEBUG] [Thread-308426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:27:41.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:27:41.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:27:41.577 [DEBUG] [Thread-308426] [transport.py] [_log()] userauth is OK
2025-12-24T20:27:41.577 [DEBUG] [Thread-308426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:27:41.578 [DEBUG] [Thread-308426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:27:41.578 [DEBUG] [Thread-308426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:27:41.578 [DEBUG] [Thread-308426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:27:41.610 [INFO] [Thread-308426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:27:41.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:27:42.264 [DEBUG] [Thread-308426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:27:42.264 [DEBUG] [Thread-308426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:27:42.266 [DEBUG] [Thread-308426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:27:42.305 [DEBUG] [Thread-308426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:27:42.306 [DEBUG] [Thread-308426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:27:42.308 [DEBUG] [Thread-308426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:27:42.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:27:42.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:27:42.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:27:42.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:27:42.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:27:42.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:27:42.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:27:42.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:27:42.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:27:42.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.768815 -999.00  +19.10  16.45     45   +6.90 1 2 1 1 1    27    0 11.42 -28.21 ----- 20.3 16.4 164.0 24.7 19.6 -22.3 19.5 -21.9 19.3 -20.4 19.6 -21.4
2025-12-24T20:27:42.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:27:42.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:27:42.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.768815
2025-12-24T20:27:42.344 [DEBUG] [Thread-308426] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:27:42.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:27:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:27:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:27:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:27:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:27:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:27:05', tmtdew=14.04, humidity=39.68, cloud=0.0, wind=24.72, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:27:05.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:27:42.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:27:42.451 [DEBUG] [Thread-308429] [transport.py] [_log()] starting thread (client mode): 0xf572c1c0
2025-12-24T20:27:42.451 [DEBUG] [Thread-308429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:27:42.465 [DEBUG] [Thread-308429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:27:42.466 [INFO] [Thread-308429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] client lang: <none>
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] server lang: <none>
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] kex follows: False
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:27:42.474 [DEBUG] [Thread-308429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:27:42.475 [DEBUG] [Thread-308429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:27:42.475 [DEBUG] [Thread-308429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:27:42.475 [DEBUG] [Thread-308429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:27:42.475 [DEBUG] [Thread-308429] [transport.py] [_log()] Compression: none
2025-12-24T20:27:42.475 [DEBUG] [Thread-308429] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:27:42.531 [DEBUG] [Thread-308429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:27:42.532 [DEBUG] [Thread-308429] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:27:42.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:27:42.532 [DEBUG] [Thread-308429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:27:42.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:27:42.589 [DEBUG] [Thread-308429] [transport.py] [_log()] userauth is OK
2025-12-24T20:27:42.589 [DEBUG] [Thread-308429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:27:42.589 [DEBUG] [Thread-308429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:27:42.589 [DEBUG] [Thread-308429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:27:42.589 [DEBUG] [Thread-308429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:27:42.607 [INFO] [Thread-308429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:27:42.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:27:42.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:27:43.445 [DEBUG] [Thread-308429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:27:43.446 [DEBUG] [Thread-308429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:27:43.484 [DEBUG] [Thread-308429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:27:43.484 [DEBUG] [Thread-308429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:27:43.492 [DEBUG] [Thread-308429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:27:43.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:27:43.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:27:43.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:27:43.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:27:43.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:27:43.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:27:43.524 [DEBUG] [Thread-308429] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:27:45.574 [DEBUG] [Thread-308431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:28:00.783 [DEBUG] [Thread-308432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:28:13.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:28:13.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:28:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:28:15.905 [DEBUG] [Thread-308433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:28:15.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 27, 38), 14.02, 39.73, 0.0, 27.91, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:28:15.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:27:38
2025-12-24T20:28:16.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:28:16.343 [DEBUG] [Thread-308434] [transport.py] [_log()] starting thread (client mode): 0xf572edd0
2025-12-24T20:28:16.344 [DEBUG] [Thread-308434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:28:16.358 [DEBUG] [Thread-308434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:28:16.358 [INFO] [Thread-308434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:28:16.362 [DEBUG] [Thread-308434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] client lang: <none>
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] server lang: <none>
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] kex follows: False
2025-12-24T20:28:16.363 [DEBUG] [Thread-308434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:28:16.364 [DEBUG] [Thread-308434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:28:16.364 [DEBUG] [Thread-308434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:28:16.364 [DEBUG] [Thread-308434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:28:16.364 [DEBUG] [Thread-308434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:28:16.364 [DEBUG] [Thread-308434] [transport.py] [_log()] Compression: none
2025-12-24T20:28:16.364 [DEBUG] [Thread-308434] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:28:16.395 [DEBUG] [Thread-308434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:28:16.398 [DEBUG] [Thread-308434] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:28:16.399 [DEBUG] [Thread-308434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:28:16.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:28:16.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:28:16.402 [DEBUG] [Thread-308434] [transport.py] [_log()] userauth is OK
2025-12-24T20:28:16.402 [DEBUG] [Thread-308434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:28:16.402 [DEBUG] [Thread-308434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:28:16.402 [DEBUG] [Thread-308434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:28:16.402 [DEBUG] [Thread-308434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:28:16.420 [INFO] [Thread-308434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:28:16.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:28:17.075 [DEBUG] [Thread-308434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:28:17.075 [DEBUG] [Thread-308434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:28:17.076 [DEBUG] [Thread-308434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:28:17.116 [DEBUG] [Thread-308434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:28:17.116 [DEBUG] [Thread-308434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:28:17.120 [DEBUG] [Thread-308434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:28:17.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:28:17.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:28:17.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:28:17.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:28:17.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:28:17.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:28:17.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:28:17.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:28:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:28:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.769163 -999.00  +19.10  26.91     45   +6.90 1 2 1 1 1    25    0 11.27 -27.30 ----- 25.6 26.9 177.2 31.4 19.6 -22.3 19.4 -21.9 19.2 -20.4 19.6 -21.4
2025-12-24T20:28:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:28:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:28:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.769163
2025-12-24T20:28:17.153 [DEBUG] [Thread-308434] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:28:17.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:28:17.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:28:17.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:28:17.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:28:17.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:28:17.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:27:38', tmtdew=14.02, humidity=39.73, cloud=0.0, wind=27.91, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:27:35.683', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:28:17.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:28:17.269 [DEBUG] [Thread-308437] [transport.py] [_log()] starting thread (client mode): 0xf818bca0
2025-12-24T20:28:17.269 [DEBUG] [Thread-308437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:28:17.283 [DEBUG] [Thread-308437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:28:17.284 [INFO] [Thread-308437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:28:17.291 [DEBUG] [Thread-308437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:28:17.292 [DEBUG] [Thread-308437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:28:17.292 [DEBUG] [Thread-308437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:28:17.292 [DEBUG] [Thread-308437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:28:17.292 [DEBUG] [Thread-308437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:28:17.292 [DEBUG] [Thread-308437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] client lang: <none>
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] server lang: <none>
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] kex follows: False
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] Compression: none
2025-12-24T20:28:17.293 [DEBUG] [Thread-308437] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:28:17.351 [DEBUG] [Thread-308437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:28:17.352 [DEBUG] [Thread-308437] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:28:17.352 [DEBUG] [Thread-308437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:28:17.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:28:17.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:28:17.407 [DEBUG] [Thread-308437] [transport.py] [_log()] userauth is OK
2025-12-24T20:28:17.407 [DEBUG] [Thread-308437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:28:17.407 [DEBUG] [Thread-308437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:28:17.407 [DEBUG] [Thread-308437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:28:17.407 [DEBUG] [Thread-308437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:28:17.426 [INFO] [Thread-308437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:28:17.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:28:17.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:28:18.244 [DEBUG] [Thread-308437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:28:18.244 [DEBUG] [Thread-308437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:28:18.291 [DEBUG] [Thread-308437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:28:18.291 [DEBUG] [Thread-308437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:28:18.300 [DEBUG] [Thread-308437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:28:18.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:28:18.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:28:18.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
2025-12-24T20:28:18.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:28:18.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:28:18.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:28:18.340 [DEBUG] [Thread-308437] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:28:27.076 [DEBUG] [Thread-308439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:28:30.997 [DEBUG] [Thread-308440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:28:32.923 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:28:32.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:28:46.217 [DEBUG] [Thread-308441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:28:48.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:28:48.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:28:48.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:28:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 28, 11), 14.02, 39.73, 0.0, 30.7, 19.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:28:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:28:11
2025-12-24T20:28:49.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:28:49.744 [DEBUG] [Thread-308442] [transport.py] [_log()] starting thread (client mode): 0xf81e5c90
2025-12-24T20:28:49.745 [DEBUG] [Thread-308442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:28:49.757 [DEBUG] [Thread-308442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:28:49.757 [INFO] [Thread-308442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] client lang: <none>
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] server lang: <none>
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] kex follows: False
2025-12-24T20:28:49.761 [DEBUG] [Thread-308442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:28:49.762 [DEBUG] [Thread-308442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:28:49.762 [DEBUG] [Thread-308442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:28:49.762 [DEBUG] [Thread-308442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:28:49.762 [DEBUG] [Thread-308442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:28:49.762 [DEBUG] [Thread-308442] [transport.py] [_log()] Compression: none
2025-12-24T20:28:49.762 [DEBUG] [Thread-308442] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:28:49.784 [DEBUG] [Thread-308442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:28:49.787 [DEBUG] [Thread-308442] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:28:49.788 [DEBUG] [Thread-308442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:28:49.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:28:49.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:28:49.791 [DEBUG] [Thread-308442] [transport.py] [_log()] userauth is OK
2025-12-24T20:28:49.791 [DEBUG] [Thread-308442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:28:49.791 [DEBUG] [Thread-308442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:28:49.791 [DEBUG] [Thread-308442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:28:49.791 [DEBUG] [Thread-308442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:28:49.809 [INFO] [Thread-308442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:28:49.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:28:50.587 [DEBUG] [Thread-308442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:28:50.587 [DEBUG] [Thread-308442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:28:50.588 [DEBUG] [Thread-308442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:28:50.628 [DEBUG] [Thread-308442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:28:50.629 [DEBUG] [Thread-308442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:28:50.632 [DEBUG] [Thread-308442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:28:50.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:28:50.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:28:50.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:28:50.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:28:50.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:28:50.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:28:50.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:28:50.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:28:50.655 [DEBUG] [Thread-308442] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:28:50.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:28:50.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.769509 -999.00  +19.10  21.59     45   +6.90 1 2 1 1 1    23    0 11.57 -27.71 ----- 19.8 21.6 178.6 27.9 19.6 -22.3 19.5 -22.0 19.2 -20.4 19.6 -21.3
2025-12-24T20:28:50.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:28:50.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:28:50.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.769509
2025-12-24T20:28:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:28:50.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:28:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:28:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:28:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:28:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:28:11', tmtdew=14.02, humidity=39.73, cloud=0.0, wind=30.7, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:28:05.578', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:28:50.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:28:50.767 [DEBUG] [Thread-308445] [transport.py] [_log()] starting thread (client mode): 0xfabc6d40
2025-12-24T20:28:50.767 [DEBUG] [Thread-308445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:28:50.782 [DEBUG] [Thread-308445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:28:50.782 [INFO] [Thread-308445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:28:50.789 [DEBUG] [Thread-308445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:28:50.789 [DEBUG] [Thread-308445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] client lang: <none>
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] server lang: <none>
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] kex follows: False
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] Compression: none
2025-12-24T20:28:50.790 [DEBUG] [Thread-308445] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:28:50.850 [DEBUG] [Thread-308445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:28:50.851 [DEBUG] [Thread-308445] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:28:50.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:28:50.853 [DEBUG] [Thread-308445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:28:50.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:28:50.908 [DEBUG] [Thread-308445] [transport.py] [_log()] userauth is OK
2025-12-24T20:28:50.909 [DEBUG] [Thread-308445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:28:50.909 [DEBUG] [Thread-308445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:28:50.910 [DEBUG] [Thread-308445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:28:50.910 [DEBUG] [Thread-308445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:28:50.930 [INFO] [Thread-308445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:28:50.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:28:50.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:28:51.785 [DEBUG] [Thread-308445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:28:51.785 [DEBUG] [Thread-308445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:28:51.832 [DEBUG] [Thread-308445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:28:51.832 [DEBUG] [Thread-308445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:28:51.841 [DEBUG] [Thread-308445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:28:51.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:28:51.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:28:51.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:28:51.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:28:51.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:28:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:28:51.874 [DEBUG] [Thread-308445] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:29:01.357 [DEBUG] [Thread-308447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:29:16.540 [DEBUG] [Thread-308448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:29:21.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:29:21.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:29:21.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:29:25.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 28, 46), 14.0, 39.76, 0.0, 30.9, 19.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:29:25.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:28:46
2025-12-24T20:29:25.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:29:25.804 [DEBUG] [Thread-308449] [transport.py] [_log()] starting thread (client mode): 0xfabc5bd0
2025-12-24T20:29:25.805 [DEBUG] [Thread-308449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:29:25.805 [DEBUG] [Thread-308449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:29:25.805 [INFO] [Thread-308449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:29:25.810 [DEBUG] [Thread-308449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] client lang: <none>
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] server lang: <none>
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] kex follows: False
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:29:25.811 [DEBUG] [Thread-308449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:29:25.812 [DEBUG] [Thread-308449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:29:25.812 [DEBUG] [Thread-308449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:29:25.812 [DEBUG] [Thread-308449] [transport.py] [_log()] Compression: none
2025-12-24T20:29:25.812 [DEBUG] [Thread-308449] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:29:25.858 [DEBUG] [Thread-308449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:29:25.861 [DEBUG] [Thread-308449] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:29:25.862 [DEBUG] [Thread-308449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:29:25.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:29:25.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:29:25.918 [DEBUG] [Thread-308449] [transport.py] [_log()] userauth is OK
2025-12-24T20:29:25.918 [DEBUG] [Thread-308449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:29:25.918 [DEBUG] [Thread-308449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:29:25.918 [DEBUG] [Thread-308449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:29:25.919 [DEBUG] [Thread-308449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:29:25.952 [INFO] [Thread-308449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:29:25.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:29:26.549 [DEBUG] [Thread-308449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:29:26.550 [DEBUG] [Thread-308449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:29:26.551 [DEBUG] [Thread-308449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:29:26.591 [DEBUG] [Thread-308449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:29:26.591 [DEBUG] [Thread-308449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:29:26.594 [DEBUG] [Thread-308449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:29:26.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:29:26.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:29:26.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:29:26.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:29:26.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:29:26.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:29:26.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:29:26.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:29:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:29:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.769856 -999.00  +19.10  25.07     45   +6.90 1 2 1 1 1    21    0 11.47 -27.71 ----- 18.8 25.1 160.8 34.7 19.6 -22.3 19.4 -21.8 19.2 -20.3 19.5 -21.3
2025-12-24T20:29:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:29:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:29:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.769856
2025-12-24T20:29:26.626 [DEBUG] [Thread-308449] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:29:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:29:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:29:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:29:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:29:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:29:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:28:46', tmtdew=14.0, humidity=39.76, cloud=0.0, wind=30.9, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:28:35.558', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:29:26.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:29:26.744 [DEBUG] [Thread-308452] [transport.py] [_log()] starting thread (client mode): 0xf572c6d0
2025-12-24T20:29:26.744 [DEBUG] [Thread-308452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:29:26.750 [DEBUG] [Thread-308452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:29:26.750 [INFO] [Thread-308452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:29:27.085 [DEBUG] [Thread-308452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:29:27.085 [DEBUG] [Thread-308452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:29:27.085 [DEBUG] [Thread-308452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:29:27.085 [DEBUG] [Thread-308452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] client lang: <none>
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] server lang: <none>
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] kex follows: False
2025-12-24T20:29:27.086 [DEBUG] [Thread-308452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:29:27.087 [DEBUG] [Thread-308452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:29:27.087 [DEBUG] [Thread-308452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:29:27.087 [DEBUG] [Thread-308452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:29:27.087 [DEBUG] [Thread-308452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:29:27.087 [DEBUG] [Thread-308452] [transport.py] [_log()] Compression: none
2025-12-24T20:29:27.091 [DEBUG] [Thread-308452] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:29:27.124 [DEBUG] [Thread-308452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:29:27.125 [DEBUG] [Thread-308452] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:29:27.125 [DEBUG] [Thread-308452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:29:27.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:29:27.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:29:27.181 [DEBUG] [Thread-308452] [transport.py] [_log()] userauth is OK
2025-12-24T20:29:27.182 [DEBUG] [Thread-308452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:29:27.182 [DEBUG] [Thread-308452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:29:27.182 [DEBUG] [Thread-308452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:29:27.182 [DEBUG] [Thread-308452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:29:27.197 [INFO] [Thread-308452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:29:27.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:29:27.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:29:27.399 [DEBUG] [Thread-308454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:29:28.021 [DEBUG] [Thread-308452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:29:28.021 [DEBUG] [Thread-308452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:29:28.068 [DEBUG] [Thread-308452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:29:28.069 [DEBUG] [Thread-308452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:29:28.077 [DEBUG] [Thread-308452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:29:28.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:29: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')
2025-12-24T20:29:28.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:29:28.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:29:28.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:29:28.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:29:28.113 [DEBUG] [Thread-308452] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:29:31.633 [DEBUG] [Thread-308455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:29:39.025 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:29:39.043 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:29:46.824 [DEBUG] [Thread-308456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:29:58.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:29:58.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:29:58.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:29:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 29, 19), 14.01, 39.76, 0.0, 27.83, 19.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:29:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:29:19
2025-12-24T20:29:59.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:29:59.708 [DEBUG] [Thread-308457] [transport.py] [_log()] starting thread (client mode): 0xf572cf40
2025-12-24T20:29:59.709 [DEBUG] [Thread-308457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:29:59.716 [DEBUG] [Thread-308457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:29:59.716 [INFO] [Thread-308457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] client lang: <none>
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] server lang: <none>
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] kex follows: False
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:29:59.721 [DEBUG] [Thread-308457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:29:59.722 [DEBUG] [Thread-308457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:29:59.722 [DEBUG] [Thread-308457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:29:59.722 [DEBUG] [Thread-308457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:29:59.722 [DEBUG] [Thread-308457] [transport.py] [_log()] Compression: none
2025-12-24T20:29:59.722 [DEBUG] [Thread-308457] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:29:59.753 [DEBUG] [Thread-308457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:29:59.756 [DEBUG] [Thread-308457] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:29:59.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:29:59.758 [DEBUG] [Thread-308457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:29:59.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:29:59.760 [DEBUG] [Thread-308457] [transport.py] [_log()] userauth is OK
2025-12-24T20:29:59.760 [DEBUG] [Thread-308457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:29:59.760 [DEBUG] [Thread-308457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:29:59.760 [DEBUG] [Thread-308457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:29:59.760 [DEBUG] [Thread-308457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:29:59.790 [INFO] [Thread-308457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:29:59.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:30:00.452 [DEBUG] [Thread-308457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:30:00.452 [DEBUG] [Thread-308457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:30:00.453 [DEBUG] [Thread-308457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:30:00.494 [DEBUG] [Thread-308457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:30:00.494 [DEBUG] [Thread-308457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:30:00.496 [DEBUG] [Thread-308457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:30:00.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:30:00.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:30:00.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:30:00.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:30:00.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:30:00.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:30:00.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:30:00.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:30:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:30:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.770204 -999.00  +19.00  27.11     45   +6.90 1 2 1 1 1    19    0 11.68 -26.81 ----- 21.7 27.1 167.0 35.1 19.5 -22.2 19.5 -21.9 19.2 -20.4 19.5 -21.3
2025-12-24T20:30:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:30:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:30:00.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.770204
2025-12-24T20:30:00.526 [DEBUG] [Thread-308457] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:30:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:30:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:30:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:30:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:30:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:30:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:29:19', tmtdew=14.01, humidity=39.76, cloud=0.0, wind=27.83, temperature=19.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:29:05.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:30:00.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:30:00.629 [DEBUG] [Thread-308460] [transport.py] [_log()] starting thread (client mode): 0xfabc7df0
2025-12-24T20:30:00.629 [DEBUG] [Thread-308460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:30:00.644 [DEBUG] [Thread-308460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:30:00.644 [INFO] [Thread-308460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] client lang: <none>
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] server lang: <none>
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] kex follows: False
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:30:00.651 [DEBUG] [Thread-308460] [transport.py] [_log()] Compression: none
2025-12-24T20:30:00.652 [DEBUG] [Thread-308460] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:30:00.710 [DEBUG] [Thread-308460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:30:00.710 [DEBUG] [Thread-308460] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:30:00.710 [DEBUG] [Thread-308460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:30:00.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:30:00.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:30:00.767 [DEBUG] [Thread-308460] [transport.py] [_log()] userauth is OK
2025-12-24T20:30:00.767 [DEBUG] [Thread-308460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:30:00.767 [DEBUG] [Thread-308460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:30:00.767 [DEBUG] [Thread-308460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:30:00.767 [DEBUG] [Thread-308460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:30:00.782 [INFO] [Thread-308460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:30:00.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:30:00.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:30:01.611 [DEBUG] [Thread-308460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:30:01.612 [DEBUG] [Thread-308460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:30:01.658 [DEBUG] [Thread-308460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:30:01.658 [DEBUG] [Thread-308460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:30:01.666 [DEBUG] [Thread-308460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:30:01.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:30:01.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:30:01.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
2025-12-24T20:30:01.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:30:01.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:30:01.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:30:01.862 [DEBUG] [Thread-308460] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:30:01.927 [DEBUG] [Thread-308462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:30:17.227 [DEBUG] [Thread-308463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:30:27.775 [DEBUG] [Thread-308464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:30:31.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:30:31.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:30:31.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:30:32.326 [DEBUG] [Thread-308465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:30:35.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 29, 57), 13.96, 39.73, 0.0, 32.4, 19.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:30:35.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:29:57
2025-12-24T20:30:36.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:30:36.329 [DEBUG] [Thread-308466] [transport.py] [_log()] starting thread (client mode): 0xf818a860
2025-12-24T20:30:36.330 [DEBUG] [Thread-308466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:30:36.336 [DEBUG] [Thread-308466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:30:36.337 [INFO] [Thread-308466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] client lang: <none>
2025-12-24T20:30:36.341 [DEBUG] [Thread-308466] [transport.py] [_log()] server lang: <none>
2025-12-24T20:30:36.342 [DEBUG] [Thread-308466] [transport.py] [_log()] kex follows: False
2025-12-24T20:30:36.342 [DEBUG] [Thread-308466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:30:36.342 [DEBUG] [Thread-308466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:30:36.342 [DEBUG] [Thread-308466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:30:36.342 [DEBUG] [Thread-308466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:30:36.342 [DEBUG] [Thread-308466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:30:36.342 [DEBUG] [Thread-308466] [transport.py] [_log()] Compression: none
2025-12-24T20:30:36.342 [DEBUG] [Thread-308466] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:30:36.378 [DEBUG] [Thread-308466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:30:36.381 [DEBUG] [Thread-308466] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:30:36.382 [DEBUG] [Thread-308466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:30:36.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:30:36.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:30:36.386 [DEBUG] [Thread-308466] [transport.py] [_log()] userauth is OK
2025-12-24T20:30:36.386 [DEBUG] [Thread-308466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:30:36.386 [DEBUG] [Thread-308466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:30:36.386 [DEBUG] [Thread-308466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:30:36.386 [DEBUG] [Thread-308466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:30:36.405 [INFO] [Thread-308466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:30:36.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:30:37.287 [DEBUG] [Thread-308466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:30:37.287 [DEBUG] [Thread-308466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:30:37.288 [DEBUG] [Thread-308466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:30:37.328 [DEBUG] [Thread-308466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:30:37.328 [DEBUG] [Thread-308466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:30:37.331 [DEBUG] [Thread-308466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:30:37.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:30:37.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:30:37.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:30:37.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:30:37.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:30:37.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:30:37.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:30:37.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:30:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:30:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.770898 -999.00  +19.00  21.11     45   +6.90 1 2 1 1 1    16    0 11.41 -25.45 ----- 21.3 21.1 157.7 28.6 19.5 -22.2 19.4 -21.8 19.2 -20.3 19.5 -21.2
2025-12-24T20:30:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:30:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:30:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.770898
2025-12-24T20:30:37.358 [DEBUG] [Thread-308466] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:30:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:30:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:30:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:30:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:30:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:30:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:29:57', tmtdew=13.96, humidity=39.73, cloud=0.0, wind=32.4, temperature=19.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:30:05.587', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:30:37.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:30:37.460 [DEBUG] [Thread-308469] [transport.py] [_log()] starting thread (client mode): 0xf5788ee0
2025-12-24T20:30:37.460 [DEBUG] [Thread-308469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:30:37.475 [DEBUG] [Thread-308469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:30:37.475 [INFO] [Thread-308469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] client lang: <none>
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] server lang: <none>
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] kex follows: False
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] Compression: none
2025-12-24T20:30:37.482 [DEBUG] [Thread-308469] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:30:37.538 [DEBUG] [Thread-308469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:30:37.539 [DEBUG] [Thread-308469] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:30:37.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:30:37.539 [DEBUG] [Thread-308469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:30:37.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:30:37.596 [DEBUG] [Thread-308469] [transport.py] [_log()] userauth is OK
2025-12-24T20:30:37.596 [DEBUG] [Thread-308469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:30:37.596 [DEBUG] [Thread-308469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:30:37.596 [DEBUG] [Thread-308469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:30:37.596 [DEBUG] [Thread-308469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:30:37.612 [INFO] [Thread-308469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:30:37.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:30:37.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:30:38.438 [DEBUG] [Thread-308469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:30:38.438 [DEBUG] [Thread-308469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:30:38.485 [DEBUG] [Thread-308469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:30:38.486 [DEBUG] [Thread-308469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:30:38.494 [DEBUG] [Thread-308469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:30:38.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:30:38.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:30:38.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:30:38.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:30:38.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:30:38.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:30:38.527 [DEBUG] [Thread-308469] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:30:45.344 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:30:45.347 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:30:47.407 [DEBUG] [Thread-308471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:31:02.572 [DEBUG] [Thread-308472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:31:08.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:31:08.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:31:08.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
2025-12-24T20:31:09.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 30, 34), 13.95, 39.76, 0.0, 27.19, 19.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:31:09.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:30:34
2025-12-24T20:31:09.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:31:09.921 [DEBUG] [Thread-308473] [transport.py] [_log()] starting thread (client mode): 0xf57735e0
2025-12-24T20:31:09.922 [DEBUG] [Thread-308473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:31:09.929 [DEBUG] [Thread-308473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:31:09.930 [INFO] [Thread-308473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:31:09.935 [DEBUG] [Thread-308473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] client lang: <none>
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] server lang: <none>
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] kex follows: False
2025-12-24T20:31:09.936 [DEBUG] [Thread-308473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:31:09.937 [DEBUG] [Thread-308473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:31:09.937 [DEBUG] [Thread-308473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:31:09.937 [DEBUG] [Thread-308473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:31:09.937 [DEBUG] [Thread-308473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:31:09.937 [DEBUG] [Thread-308473] [transport.py] [_log()] Compression: none
2025-12-24T20:31:09.937 [DEBUG] [Thread-308473] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:31:09.969 [DEBUG] [Thread-308473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:31:09.973 [DEBUG] [Thread-308473] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:31:09.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:31:09.976 [DEBUG] [Thread-308473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:31:09.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:31:09.978 [DEBUG] [Thread-308473] [transport.py] [_log()] userauth is OK
2025-12-24T20:31:09.978 [DEBUG] [Thread-308473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:31:09.978 [DEBUG] [Thread-308473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:31:09.978 [DEBUG] [Thread-308473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:31:09.978 [DEBUG] [Thread-308473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:31:09.997 [INFO] [Thread-308473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:31:10.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:31:10.629 [DEBUG] [Thread-308473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:31:10.630 [DEBUG] [Thread-308473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:31:10.630 [DEBUG] [Thread-308473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:31:10.670 [DEBUG] [Thread-308473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:31:10.671 [DEBUG] [Thread-308473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:31:10.672 [DEBUG] [Thread-308473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:31:10.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:31:10.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:31:10.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:31:10.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:31:10.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:31:10.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:31:10.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:31:10.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:31:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:31:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.771245 -999.00  +19.00  31.02     45   +6.90 1 2 2 1 1    15    0 11.50 -23.04 ----- 22.9 31.0 174.8 38.6 19.5 -22.2 19.4 -21.7 19.2 -20.3 19.5 -21.2
2025-12-24T20:31:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:31:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:31:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.771245
2025-12-24T20:31:10.704 [DEBUG] [Thread-308473] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:31:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:31:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:30:34', tmtdew=13.95, humidity=39.76, cloud=0.0, wind=27.19, temperature=19.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:30:35.568', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:31:10.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:31:10.813 [DEBUG] [Thread-308476] [transport.py] [_log()] starting thread (client mode): 0xf57720e0
2025-12-24T20:31:10.813 [DEBUG] [Thread-308476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:31:10.827 [DEBUG] [Thread-308476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:31:10.827 [INFO] [Thread-308476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] client lang: <none>
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] server lang: <none>
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] kex follows: False
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] Compression: none
2025-12-24T20:31:10.835 [DEBUG] [Thread-308476] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:31:10.892 [DEBUG] [Thread-308476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:31:10.893 [DEBUG] [Thread-308476] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:31:10.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:31:10.893 [DEBUG] [Thread-308476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:31:10.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:31:10.949 [DEBUG] [Thread-308476] [transport.py] [_log()] userauth is OK
2025-12-24T20:31:10.949 [DEBUG] [Thread-308476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:31:10.949 [DEBUG] [Thread-308476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:31:10.949 [DEBUG] [Thread-308476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:31:10.949 [DEBUG] [Thread-308476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:31:10.964 [INFO] [Thread-308476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:31:10.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:31:10.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:31:11.775 [DEBUG] [Thread-308476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:31:11.775 [DEBUG] [Thread-308476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:31:11.823 [DEBUG] [Thread-308476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:31:11.823 [DEBUG] [Thread-308476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:31:11.831 [DEBUG] [Thread-308476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:31:11.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:31:11.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:31:11.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') -> 00000000
2025-12-24T20:31:11.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:31:11.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:31:11.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:31:11.867 [DEBUG] [Thread-308476] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:31:17.710 [DEBUG] [Thread-308478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:31:28.051 [DEBUG] [Thread-308479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:31:32.892 [DEBUG] [Thread-308480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:31:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:31:41.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:31:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:31:45.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 31, 8), 13.94, 39.79, 0.0, 29.91, 19.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:31:45.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:31:08
2025-12-24T20:31:46.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:31:46.648 [DEBUG] [Thread-308481] [transport.py] [_log()] starting thread (client mode): 0xf818bca0
2025-12-24T20:31:46.649 [DEBUG] [Thread-308481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:31:46.658 [DEBUG] [Thread-308481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:31:46.658 [INFO] [Thread-308481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] client lang: <none>
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] server lang: <none>
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] kex follows: False
2025-12-24T20:31:46.662 [DEBUG] [Thread-308481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:31:46.663 [DEBUG] [Thread-308481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:31:46.663 [DEBUG] [Thread-308481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:31:46.663 [DEBUG] [Thread-308481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:31:46.663 [DEBUG] [Thread-308481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:31:46.663 [DEBUG] [Thread-308481] [transport.py] [_log()] Compression: none
2025-12-24T20:31:46.663 [DEBUG] [Thread-308481] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:31:46.691 [DEBUG] [Thread-308481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:31:46.694 [DEBUG] [Thread-308481] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:31:46.695 [DEBUG] [Thread-308481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:31:46.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:31:46.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:31:46.732 [DEBUG] [Thread-308481] [transport.py] [_log()] userauth is OK
2025-12-24T20:31:46.733 [DEBUG] [Thread-308481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:31:46.733 [DEBUG] [Thread-308481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:31:46.733 [DEBUG] [Thread-308481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:31:46.733 [DEBUG] [Thread-308481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:31:46.752 [INFO] [Thread-308481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:31:46.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:31:47.411 [DEBUG] [Thread-308481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:31:47.411 [DEBUG] [Thread-308481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:31:47.412 [DEBUG] [Thread-308481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:31:47.452 [DEBUG] [Thread-308481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:31:47.452 [DEBUG] [Thread-308481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:31:47.455 [DEBUG] [Thread-308481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:31:47.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:31:47.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:31:47.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:31:47.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:31:47.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:31:47.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:31:47.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:31:47.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:31:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:31:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.771593 -999.00  +19.00  19.88     45   +6.90 1 2 1 1 1    14    0 11.42 -22.32 ----- 27.6 19.9 173.6 26.1 19.5 -22.1 19.4 -21.9 19.2 -20.4 19.5 -21.1
2025-12-24T20:31:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:31:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:31:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.771593
2025-12-24T20:31:47.482 [DEBUG] [Thread-308481] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:31:47.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:31:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:31:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:31:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:31:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:31:47.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:31:08', tmtdew=13.94, humidity=39.79, cloud=0.0, wind=29.91, temperature=19.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:31:05.635', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:31:47.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:31:47.590 [DEBUG] [Thread-308484] [transport.py] [_log()] starting thread (client mode): 0xf5770520
2025-12-24T20:31:47.590 [DEBUG] [Thread-308484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:31:47.605 [DEBUG] [Thread-308484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:31:47.605 [INFO] [Thread-308484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] client lang: <none>
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] server lang: <none>
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] kex follows: False
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:31:47.617 [DEBUG] [Thread-308484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:31:47.618 [DEBUG] [Thread-308484] [transport.py] [_log()] Compression: none
2025-12-24T20:31:47.618 [DEBUG] [Thread-308484] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:31:47.669 [DEBUG] [Thread-308484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:31:47.669 [DEBUG] [Thread-308484] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:31:47.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:31:47.670 [DEBUG] [Thread-308484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:31:47.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:31:47.805 [DEBUG] [Thread-308484] [transport.py] [_log()] userauth is OK
2025-12-24T20:31:47.805 [DEBUG] [Thread-308484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:31:47.805 [DEBUG] [Thread-308484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:31:47.805 [DEBUG] [Thread-308484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:31:47.805 [DEBUG] [Thread-308484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:31:47.821 [INFO] [Thread-308484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:31:47.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:31:47.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:31:48.061 [DEBUG] [Thread-308486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:31:48.727 [DEBUG] [Thread-308484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:31:48.727 [DEBUG] [Thread-308484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:31:48.732 [DEBUG] [Thread-308484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:31:48.732 [DEBUG] [Thread-308484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:31:48.740 [DEBUG] [Thread-308484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:31:48.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:31:48.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:31:48.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:31:48.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:31:48.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:31:48.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:31:48.775 [DEBUG] [Thread-308484] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:31:50.002 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:31:50.003 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:32:03.543 [DEBUG] [Thread-308487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:32:18.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:32:18.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:32:18.863 [DEBUG] [Thread-308488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:32:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:32:20.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 31, 41), 13.94, 39.79, 0.0, 32.48, 19.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:32:20.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:31:41
2025-12-24T20:32:21.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:32:21.286 [DEBUG] [Thread-308489] [transport.py] [_log()] starting thread (client mode): 0xf57286a0
2025-12-24T20:32:21.287 [DEBUG] [Thread-308489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:32:21.300 [DEBUG] [Thread-308489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:32:21.300 [INFO] [Thread-308489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] client lang: <none>
2025-12-24T20:32:21.305 [DEBUG] [Thread-308489] [transport.py] [_log()] server lang: <none>
2025-12-24T20:32:21.306 [DEBUG] [Thread-308489] [transport.py] [_log()] kex follows: False
2025-12-24T20:32:21.306 [DEBUG] [Thread-308489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:32:21.306 [DEBUG] [Thread-308489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:32:21.306 [DEBUG] [Thread-308489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:32:21.306 [DEBUG] [Thread-308489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:32:21.306 [DEBUG] [Thread-308489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:32:21.306 [DEBUG] [Thread-308489] [transport.py] [_log()] Compression: none
2025-12-24T20:32:21.306 [DEBUG] [Thread-308489] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:32:21.339 [DEBUG] [Thread-308489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:32:21.342 [DEBUG] [Thread-308489] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:32:21.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:32:21.345 [DEBUG] [Thread-308489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:32:21.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:32:21.347 [DEBUG] [Thread-308489] [transport.py] [_log()] userauth is OK
2025-12-24T20:32:21.347 [DEBUG] [Thread-308489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:32:21.347 [DEBUG] [Thread-308489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:32:21.347 [DEBUG] [Thread-308489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:32:21.347 [DEBUG] [Thread-308489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:32:21.360 [INFO] [Thread-308489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:32:21.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:32:22.149 [DEBUG] [Thread-308489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:32:22.149 [DEBUG] [Thread-308489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:32:22.150 [DEBUG] [Thread-308489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:32:22.190 [DEBUG] [Thread-308489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:32:22.190 [DEBUG] [Thread-308489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:32:22.192 [DEBUG] [Thread-308489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:32:22.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:32:22.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:32:22.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:32:22.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:32:22.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:32:22.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:32:22.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:32:22.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:32:22.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:32:22.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.771940 -999.00  +19.00  23.36     45   +6.90 1 2 1 1 1    12    0 11.65 -22.57 ----- 28.6 23.4 185.8 37.1 19.5 -22.2 19.4 -21.8 19.2 -20.3 19.5 -21.1
2025-12-24T20:32:22.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:32:22.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:32:22.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.771940
2025-12-24T20:32:22.215 [DEBUG] [Thread-308489] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:32:22.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:32:22.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:32:22.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:32:22.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:32:22.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:32:22.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:31:41', tmtdew=13.94, humidity=39.79, cloud=0.0, wind=32.48, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:31:35.616', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:32:22.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:32:22.315 [DEBUG] [Thread-308492] [transport.py] [_log()] starting thread (client mode): 0xfabc7760
2025-12-24T20:32:22.315 [DEBUG] [Thread-308492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:32:22.329 [DEBUG] [Thread-308492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:32:22.329 [INFO] [Thread-308492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:32:22.337 [DEBUG] [Thread-308492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:32:22.337 [DEBUG] [Thread-308492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:32:22.337 [DEBUG] [Thread-308492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:32:22.337 [DEBUG] [Thread-308492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:32:22.337 [DEBUG] [Thread-308492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:32:22.337 [DEBUG] [Thread-308492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:32:22.337 [DEBUG] [Thread-308492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:32:22.337 [DEBUG] [Thread-308492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] client lang: <none>
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] server lang: <none>
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] kex follows: False
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:32:22.338 [DEBUG] [Thread-308492] [transport.py] [_log()] Compression: none
2025-12-24T20:32:22.339 [DEBUG] [Thread-308492] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:32:22.395 [DEBUG] [Thread-308492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:32:22.395 [DEBUG] [Thread-308492] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:32:22.395 [DEBUG] [Thread-308492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:32:22.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:32:22.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:32:22.452 [DEBUG] [Thread-308492] [transport.py] [_log()] userauth is OK
2025-12-24T20:32:22.452 [DEBUG] [Thread-308492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:32:22.452 [DEBUG] [Thread-308492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:32:22.452 [DEBUG] [Thread-308492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:32:22.452 [DEBUG] [Thread-308492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:32:22.466 [INFO] [Thread-308492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:32:22.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:32:22.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:32:23.291 [DEBUG] [Thread-308492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:32:23.291 [DEBUG] [Thread-308492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:32:23.338 [DEBUG] [Thread-308492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:32:23.338 [DEBUG] [Thread-308492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:32:23.346 [DEBUG] [Thread-308492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:32:23.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:32:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:32:23.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:32:23.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:32:23.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:32:23.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:32:23.379 [DEBUG] [Thread-308492] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:32:28.315 [DEBUG] [Thread-308494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:32:34.156 [DEBUG] [Thread-308495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:32:49.373 [DEBUG] [Thread-308496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:32:53.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:32:53.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:32:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:32:55.242 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:32:55.244 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:32:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 32, 19), 13.93, 39.83, 0.0, 28.41, 19.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:32:58.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:32:19
2025-12-24T20:32:58.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:32:58.837 [DEBUG] [Thread-308497] [transport.py] [_log()] starting thread (client mode): 0xf57a8160
2025-12-24T20:32:58.838 [DEBUG] [Thread-308497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:32:58.847 [DEBUG] [Thread-308497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:32:58.848 [INFO] [Thread-308497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:32:58.852 [DEBUG] [Thread-308497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:32:58.852 [DEBUG] [Thread-308497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:32:58.852 [DEBUG] [Thread-308497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:32:58.852 [DEBUG] [Thread-308497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] client lang: <none>
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] server lang: <none>
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] kex follows: False
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:32:58.853 [DEBUG] [Thread-308497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:32:58.854 [DEBUG] [Thread-308497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:32:58.854 [DEBUG] [Thread-308497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:32:58.854 [DEBUG] [Thread-308497] [transport.py] [_log()] Compression: none
2025-12-24T20:32:58.854 [DEBUG] [Thread-308497] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:32:58.884 [DEBUG] [Thread-308497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:32:58.889 [DEBUG] [Thread-308497] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:32:58.890 [DEBUG] [Thread-308497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:32:58.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:32:58.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:32:58.896 [DEBUG] [Thread-308497] [transport.py] [_log()] userauth is OK
2025-12-24T20:32:58.896 [DEBUG] [Thread-308497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:32:58.896 [DEBUG] [Thread-308497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:32:58.896 [DEBUG] [Thread-308497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:32:58.896 [DEBUG] [Thread-308497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:32:58.913 [INFO] [Thread-308497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:32:58.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:32:59.470 [DEBUG] [Thread-308497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:32:59.470 [DEBUG] [Thread-308497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:32:59.472 [DEBUG] [Thread-308497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:32:59.512 [DEBUG] [Thread-308497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:32:59.512 [DEBUG] [Thread-308497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:32:59.514 [DEBUG] [Thread-308497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:32:59.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:32:59.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:32:59.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:32:59.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:32:59.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:32:59.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:32:59.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:32:59.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:32:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:32:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.772634 -999.00  +19.00  21.30     45   +6.90 1 2 1 1 1    10    0 11.50 -21.36 ----- 22.5 21.3 176.8 35.8 19.5 -22.0 19.4 -21.9 19.1 -20.2 19.5 -21.2
2025-12-24T20:32:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:32:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:32:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.772634
2025-12-24T20:32:59.546 [DEBUG] [Thread-308497] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:32:59.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:32:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:32:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:32:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:32:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:32:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:32:19', tmtdew=13.93, humidity=39.83, cloud=0.0, wind=28.41, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-23T21:23:21', seeing=1.93, atlas_timestamp='2025-12-24T18:32:35.578', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:32:59.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:32:59.650 [DEBUG] [Thread-308500] [transport.py] [_log()] starting thread (client mode): 0xf5771450
2025-12-24T20:32:59.650 [DEBUG] [Thread-308500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:32:59.664 [DEBUG] [Thread-308500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:32:59.664 [INFO] [Thread-308500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] client lang: <none>
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] server lang: <none>
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] kex follows: False
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] Compression: none
2025-12-24T20:32:59.672 [DEBUG] [Thread-308500] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:32:59.728 [DEBUG] [Thread-308500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:32:59.728 [DEBUG] [Thread-308500] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:32:59.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:32:59.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:32:59.728 [DEBUG] [Thread-308500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:32:59.785 [DEBUG] [Thread-308500] [transport.py] [_log()] userauth is OK
2025-12-24T20:32:59.785 [DEBUG] [Thread-308500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:32:59.785 [DEBUG] [Thread-308500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:32:59.785 [DEBUG] [Thread-308500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:32:59.785 [DEBUG] [Thread-308500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:32:59.799 [INFO] [Thread-308500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:32:59.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:32:59.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:33:00.645 [DEBUG] [Thread-308500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:33:00.645 [DEBUG] [Thread-308500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:33:00.645 [DEBUG] [Thread-308500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:33:00.645 [DEBUG] [Thread-308500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:33:00.653 [DEBUG] [Thread-308500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:33:00.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:33:00.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:33:00.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:33:00.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:33:00.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:33:00.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:33:00.686 [DEBUG] [Thread-308500] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:33:04.634 [DEBUG] [Thread-308502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:33:19.938 [DEBUG] [Thread-308503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:33:28.629 [DEBUG] [Thread-308504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:33:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:33:30.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:33:30.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:33:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 32, 52), 13.93, 39.83, 0.0, 30.42, 19.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:33:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:32:52
2025-12-24T20:33:32.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:33:32.248 [DEBUG] [Thread-308505] [transport.py] [_log()] starting thread (client mode): 0xf57a98a0
2025-12-24T20:33:32.250 [DEBUG] [Thread-308505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:33:32.258 [DEBUG] [Thread-308505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:33:32.259 [INFO] [Thread-308505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] client lang: <none>
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] server lang: <none>
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] kex follows: False
2025-12-24T20:33:32.264 [DEBUG] [Thread-308505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:33:32.266 [DEBUG] [Thread-308505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:33:32.266 [DEBUG] [Thread-308505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:33:32.266 [DEBUG] [Thread-308505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:33:32.266 [DEBUG] [Thread-308505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:33:32.266 [DEBUG] [Thread-308505] [transport.py] [_log()] Compression: none
2025-12-24T20:33:32.266 [DEBUG] [Thread-308505] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:33:32.304 [DEBUG] [Thread-308505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:33:32.306 [DEBUG] [Thread-308505] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:33:32.307 [DEBUG] [Thread-308505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:33:32.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:33:32.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:33:32.310 [DEBUG] [Thread-308505] [transport.py] [_log()] userauth is OK
2025-12-24T20:33:32.310 [DEBUG] [Thread-308505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:33:32.310 [DEBUG] [Thread-308505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:33:32.310 [DEBUG] [Thread-308505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:33:32.310 [DEBUG] [Thread-308505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:33:32.321 [INFO] [Thread-308505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:33:32.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:33:32.917 [DEBUG] [Thread-308505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:33:33.000 [DEBUG] [Thread-308505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:33:33.001 [DEBUG] [Thread-308505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:33:33.002 [DEBUG] [Thread-308505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:33:33.002 [DEBUG] [Thread-308505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:33:33.004 [DEBUG] [Thread-308505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:33:33.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:33:33.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:33:33.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:33:33.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:33:33.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:33:33.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:33:33.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:33:33.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:33:33.029 [DEBUG] [Thread-308505] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:33:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:33:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.772981 -999.00  +19.00  22.10     45   +6.90 1 2 1 1 1     9    0 11.63 -20.78 ----- 24.6 22.1 177.0 31.6 19.5 -22.1 19.4 -21.8 19.2 -20.3 19.5 -21.1
2025-12-24T20:33:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:33:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:33:33.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.772981
2025-12-24T20:33:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:33:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:33:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:33:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:33:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:33:33.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:32:52', tmtdew=13.93, humidity=39.83, cloud=0.0, wind=30.42, temperature=19.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:33:30', seeing=1.76, atlas_timestamp='2025-12-24T18:33:05.558', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:33:33.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:33:33.153 [DEBUG] [Thread-308508] [transport.py] [_log()] starting thread (client mode): 0xf57a8a00
2025-12-24T20:33:33.153 [DEBUG] [Thread-308508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:33:33.168 [DEBUG] [Thread-308508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:33:33.168 [INFO] [Thread-308508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:33:33.177 [DEBUG] [Thread-308508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] client lang: <none>
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] server lang: <none>
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] kex follows: False
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] Compression: none
2025-12-24T20:33:33.178 [DEBUG] [Thread-308508] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:33:33.233 [DEBUG] [Thread-308508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:33:33.322 [DEBUG] [Thread-308508] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:33:33.322 [DEBUG] [Thread-308508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:33:33.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:33:33.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:33:33.331 [DEBUG] [Thread-308508] [transport.py] [_log()] userauth is OK
2025-12-24T20:33:33.331 [DEBUG] [Thread-308508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:33:33.331 [DEBUG] [Thread-308508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:33:33.331 [DEBUG] [Thread-308508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:33:33.331 [DEBUG] [Thread-308508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:33:33.345 [INFO] [Thread-308508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:33:33.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:33:33.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:33:34.164 [DEBUG] [Thread-308508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:33:34.165 [DEBUG] [Thread-308508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:33:34.213 [DEBUG] [Thread-308508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:33:34.213 [DEBUG] [Thread-308508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:33:34.221 [DEBUG] [Thread-308508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:33:34.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:33:34.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:33:34.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:33:34.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:33:34.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:33:34.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:33:34.260 [DEBUG] [Thread-308508] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:33:35.190 [DEBUG] [Thread-308510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:33:50.559 [DEBUG] [Thread-308511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:34:03.301 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:34:03.328 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:34:04.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:34:04.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:34:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:34:05.674 [DEBUG] [Thread-308512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:34:09.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 33, 29), 13.91, 39.86, 0.0, 30.17, 19.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:34:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:33:29
2025-12-24T20:34:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:34:10.578 [DEBUG] [Thread-308513] [transport.py] [_log()] starting thread (client mode): 0xf572a890
2025-12-24T20:34:10.578 [DEBUG] [Thread-308513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:34:10.584 [DEBUG] [Thread-308513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:34:10.584 [INFO] [Thread-308513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:34:10.588 [DEBUG] [Thread-308513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] client lang: <none>
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] server lang: <none>
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] kex follows: False
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:34:10.589 [DEBUG] [Thread-308513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:34:10.590 [DEBUG] [Thread-308513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:34:10.590 [DEBUG] [Thread-308513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:34:10.590 [DEBUG] [Thread-308513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:34:10.590 [DEBUG] [Thread-308513] [transport.py] [_log()] Compression: none
2025-12-24T20:34:10.590 [DEBUG] [Thread-308513] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:34:10.623 [DEBUG] [Thread-308513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:34:10.627 [DEBUG] [Thread-308513] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:34:10.628 [DEBUG] [Thread-308513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:34:10.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:34:10.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:34:10.631 [DEBUG] [Thread-308513] [transport.py] [_log()] userauth is OK
2025-12-24T20:34:10.631 [DEBUG] [Thread-308513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:34:10.632 [DEBUG] [Thread-308513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:34:10.632 [DEBUG] [Thread-308513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:34:10.632 [DEBUG] [Thread-308513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:34:10.661 [INFO] [Thread-308513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:34:10.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:34:11.325 [DEBUG] [Thread-308513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:34:11.404 [DEBUG] [Thread-308513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:34:11.407 [DEBUG] [Thread-308513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:34:11.408 [DEBUG] [Thread-308513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:34:11.408 [DEBUG] [Thread-308513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:34:11.410 [DEBUG] [Thread-308513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:34:11.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:34:11.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:34:11.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:34:11.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:34:11.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:34:11.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:34:11.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:34:11.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:34:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:34:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.773329 -999.00  +19.00  18.36     45   +6.90 1 2 1 1 1     9    0 12.01 -20.13 ----- 24.9 18.4 168.4 37.9 19.4 -22.0 19.4 -21.8 19.2 -20.3 19.5 -21.1
2025-12-24T20:34:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:34:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:34:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.773329
2025-12-24T20:34:11.453 [DEBUG] [Thread-308513] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:34:11.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:34:11.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:34:11.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:34:11.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:34:11.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:34:11.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:33:29', tmtdew=13.91, humidity=39.86, cloud=0.0, wind=30.17, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:33:30', seeing=1.76, atlas_timestamp='2025-12-24T18:33:35.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:34:11.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:34:11.567 [DEBUG] [Thread-308516] [transport.py] [_log()] starting thread (client mode): 0xf5772b00
2025-12-24T20:34:11.567 [DEBUG] [Thread-308516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:34:11.584 [DEBUG] [Thread-308516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:34:11.584 [INFO] [Thread-308516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] client lang: <none>
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] server lang: <none>
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] kex follows: False
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:34:11.593 [DEBUG] [Thread-308516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:34:11.594 [DEBUG] [Thread-308516] [transport.py] [_log()] Compression: none
2025-12-24T20:34:11.594 [DEBUG] [Thread-308516] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:34:11.652 [DEBUG] [Thread-308516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:34:11.652 [DEBUG] [Thread-308516] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:34:11.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:34:11.652 [DEBUG] [Thread-308516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:34:11.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:34:11.716 [DEBUG] [Thread-308516] [transport.py] [_log()] userauth is OK
2025-12-24T20:34:11.716 [DEBUG] [Thread-308516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:34:11.716 [DEBUG] [Thread-308516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:34:11.716 [DEBUG] [Thread-308516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:34:11.716 [DEBUG] [Thread-308516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:34:11.732 [INFO] [Thread-308516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:34:11.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:34:11.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:34:12.621 [DEBUG] [Thread-308516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:34:12.621 [DEBUG] [Thread-308516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:34:12.621 [DEBUG] [Thread-308516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:34:12.621 [DEBUG] [Thread-308516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:34:12.629 [DEBUG] [Thread-308516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:34:12.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:34:12.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:34:12.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:34:12.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:34:12.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:34:12.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:34:12.663 [DEBUG] [Thread-308516] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:34:21.109 [DEBUG] [Thread-308518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:34:29.009 [DEBUG] [Thread-308519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:34:36.651 [DEBUG] [Thread-308520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:34:42.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:34:42.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:34:43.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:34:47.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 34, 5), 13.9, 39.91, 0.0, 31.58, 19.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:34:47.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:34:05
2025-12-24T20:34:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:34:48.397 [DEBUG] [Thread-308521] [transport.py] [_log()] starting thread (client mode): 0xf572a890
2025-12-24T20:34:48.398 [DEBUG] [Thread-308521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:34:48.408 [DEBUG] [Thread-308521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:34:48.408 [INFO] [Thread-308521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] client lang: <none>
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] server lang: <none>
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] kex follows: False
2025-12-24T20:34:48.412 [DEBUG] [Thread-308521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:34:48.413 [DEBUG] [Thread-308521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:34:48.413 [DEBUG] [Thread-308521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:34:48.413 [DEBUG] [Thread-308521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:34:48.413 [DEBUG] [Thread-308521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:34:48.413 [DEBUG] [Thread-308521] [transport.py] [_log()] Compression: none
2025-12-24T20:34:48.413 [DEBUG] [Thread-308521] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:34:48.444 [DEBUG] [Thread-308521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:34:48.448 [DEBUG] [Thread-308521] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:34:48.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:34:48.450 [DEBUG] [Thread-308521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:34:48.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:34:48.452 [DEBUG] [Thread-308521] [transport.py] [_log()] userauth is OK
2025-12-24T20:34:48.452 [DEBUG] [Thread-308521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:34:48.452 [DEBUG] [Thread-308521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:34:48.452 [DEBUG] [Thread-308521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:34:48.452 [DEBUG] [Thread-308521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:34:48.474 [INFO] [Thread-308521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:34:48.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:34:49.097 [DEBUG] [Thread-308521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:34:49.097 [DEBUG] [Thread-308521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:34:49.099 [DEBUG] [Thread-308521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:34:49.138 [DEBUG] [Thread-308521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:34:49.138 [DEBUG] [Thread-308521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:34:49.139 [DEBUG] [Thread-308521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:34:49.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:34:49.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:34:49.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:34:49.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:34:49.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:34:49.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:34:49.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:34:49.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:34:49.160 [DEBUG] [Thread-308521] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:34:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:34:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.773676 -999.00  +19.00  20.14     45   +6.90 1 2 1 1 1     8    0 11.87 -20.81 ----- 21.5 20.1 178.8 32.8 19.4 -22.1 19.4 -21.7 19.2 -20.1 19.5 -21.0
2025-12-24T20:34:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:34:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:34:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.773676
2025-12-24T20:34:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:34:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:34:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:34:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:34:49.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:34:49.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:34:05', tmtdew=13.9, humidity=39.91, cloud=0.0, wind=31.58, temperature=19.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:34:06', seeing=1.6, atlas_timestamp='2025-12-24T18:34:05.606', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:34:49.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:34:49.282 [DEBUG] [Thread-308524] [transport.py] [_log()] starting thread (client mode): 0xf5741e40
2025-12-24T20:34:49.282 [DEBUG] [Thread-308524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:34:49.299 [DEBUG] [Thread-308524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:34:49.299 [INFO] [Thread-308524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] client lang: <none>
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] server lang: <none>
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] kex follows: False
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] Compression: none
2025-12-24T20:34:49.307 [DEBUG] [Thread-308524] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:34:49.367 [DEBUG] [Thread-308524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:34:49.392 [DEBUG] [Thread-308524] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:34:49.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:34:49.397 [DEBUG] [Thread-308524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:34:49.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:34:49.424 [DEBUG] [Thread-308524] [transport.py] [_log()] userauth is OK
2025-12-24T20:34:49.424 [DEBUG] [Thread-308524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:34:49.424 [DEBUG] [Thread-308524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:34:49.424 [DEBUG] [Thread-308524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:34:49.424 [DEBUG] [Thread-308524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:34:49.439 [INFO] [Thread-308524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:34:49.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:34:49.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:34:50.396 [DEBUG] [Thread-308524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:34:50.396 [DEBUG] [Thread-308524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:34:50.408 [DEBUG] [Thread-308524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:34:50.408 [DEBUG] [Thread-308524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:34:50.417 [DEBUG] [Thread-308524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:34:50.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:34:50.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:34:50.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:34:50.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:34:50.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:34:50.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:34:50.462 [DEBUG] [Thread-308524] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:34:51.889 [DEBUG] [Thread-308526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:35:07.267 [DEBUG] [Thread-308527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:35:09.173 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:35:09.174 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:35:20.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:35:20.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:35:20.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:35:22.762 [DEBUG] [Thread-308528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:35:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 34, 44), 13.91, 39.88, 0.0, 27.93, 19.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:35:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:34:44
2025-12-24T20:35:28.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:35:28.667 [DEBUG] [Thread-308529] [transport.py] [_log()] starting thread (client mode): 0xf5788ee0
2025-12-24T20:35:28.668 [DEBUG] [Thread-308529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:35:28.674 [DEBUG] [Thread-308529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:35:28.675 [INFO] [Thread-308529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] client lang: <none>
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] server lang: <none>
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] kex follows: False
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:35:28.680 [DEBUG] [Thread-308529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:35:28.681 [DEBUG] [Thread-308529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:35:28.681 [DEBUG] [Thread-308529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:35:28.681 [DEBUG] [Thread-308529] [transport.py] [_log()] Compression: none
2025-12-24T20:35:28.681 [DEBUG] [Thread-308529] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:35:28.719 [DEBUG] [Thread-308529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:35:28.724 [DEBUG] [Thread-308529] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:35:28.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:35:28.728 [DEBUG] [Thread-308529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:35:28.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:35:28.730 [DEBUG] [Thread-308529] [transport.py] [_log()] userauth is OK
2025-12-24T20:35:28.730 [DEBUG] [Thread-308529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:35:28.730 [DEBUG] [Thread-308529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:35:28.730 [DEBUG] [Thread-308529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:35:28.730 [DEBUG] [Thread-308529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:35:28.761 [INFO] [Thread-308529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:35:28.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:35:29.412 [DEBUG] [Thread-308531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:35:29.561 [DEBUG] [Thread-308529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:35:29.561 [DEBUG] [Thread-308529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:35:29.594 [DEBUG] [Thread-308529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:35:29.602 [DEBUG] [Thread-308529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:35:29.602 [DEBUG] [Thread-308529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:35:29.604 [DEBUG] [Thread-308529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:35:29.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:35:29.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:35:29.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:35:29.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:35:29.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:35:29.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:35:29.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:35:29.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:35:29.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:35:29.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.774370 -999.00  +19.00  15.88     45   +6.90 1 2 1 1 1     7    0 11.70 -19.03 ----- 16.4 15.9 185.8 27.2 19.4 -22.0 19.4 -21.7 -999.0 -999.0 19.4 -21.1
2025-12-24T20:35:29.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:35:29.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:35:29.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.774370
2025-12-24T20:35:29.749 [DEBUG] [Thread-308529] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:35:29.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:35:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:35:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:35:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:35:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:35:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:34:44', tmtdew=13.91, humidity=39.88, cloud=0.0, wind=27.93, temperature=19.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:34:45', seeing=1.71, atlas_timestamp='2025-12-24T18:35:05.568', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:35:29.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:35:29.853 [DEBUG] [Thread-308533] [transport.py] [_log()] starting thread (client mode): 0xf5770190
2025-12-24T20:35:29.854 [DEBUG] [Thread-308533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:35:29.868 [DEBUG] [Thread-308533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:35:29.868 [INFO] [Thread-308533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:35:29.875 [DEBUG] [Thread-308533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] client lang: <none>
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] server lang: <none>
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] kex follows: False
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:35:29.876 [DEBUG] [Thread-308533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:35:29.878 [DEBUG] [Thread-308533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:35:30.037 [DEBUG] [Thread-308533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:35:30.037 [DEBUG] [Thread-308533] [transport.py] [_log()] Compression: none
2025-12-24T20:35:30.037 [DEBUG] [Thread-308533] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:35:30.053 [DEBUG] [Thread-308533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:35:30.053 [DEBUG] [Thread-308533] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:35:30.053 [DEBUG] [Thread-308533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:35:30.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:35:30.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:35:30.109 [DEBUG] [Thread-308533] [transport.py] [_log()] userauth is OK
2025-12-24T20:35:30.109 [DEBUG] [Thread-308533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:35:30.109 [DEBUG] [Thread-308533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:35:30.109 [DEBUG] [Thread-308533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:35:30.109 [DEBUG] [Thread-308533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:35:30.123 [INFO] [Thread-308533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:35:30.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:35:30.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:35:30.939 [DEBUG] [Thread-308533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:35:30.939 [DEBUG] [Thread-308533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:35:30.987 [DEBUG] [Thread-308533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:35:30.987 [DEBUG] [Thread-308533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:35:30.997 [DEBUG] [Thread-308533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:35:31.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:35:31.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:35:31.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:35:31.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:35:31.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:35:31.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:35:31.044 [DEBUG] [Thread-308533] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:35:38.032 [DEBUG] [Thread-308535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:35:53.469 [DEBUG] [Thread-308536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:36:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:36:01.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:36:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:36:09.049 [DEBUG] [Thread-308537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:36:09.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 35, 21), 13.9, 39.91, 0.0, 29.1, 19.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:36:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:35:21
2025-12-24T20:36:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:36:09.906 [DEBUG] [Thread-308538] [transport.py] [_log()] starting thread (client mode): 0xf5740cd0
2025-12-24T20:36:09.907 [DEBUG] [Thread-308538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:36:09.915 [DEBUG] [Thread-308538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:36:09.915 [INFO] [Thread-308538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:36:09.921 [DEBUG] [Thread-308538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] client lang: <none>
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] server lang: <none>
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] kex follows: False
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:36:09.922 [DEBUG] [Thread-308538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:36:09.923 [DEBUG] [Thread-308538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:36:09.923 [DEBUG] [Thread-308538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:36:09.923 [DEBUG] [Thread-308538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:36:09.923 [DEBUG] [Thread-308538] [transport.py] [_log()] Compression: none
2025-12-24T20:36:09.923 [DEBUG] [Thread-308538] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:36:09.962 [DEBUG] [Thread-308538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:36:09.967 [DEBUG] [Thread-308538] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:36:09.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:36:09.970 [DEBUG] [Thread-308538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:36:09.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:36:09.973 [DEBUG] [Thread-308538] [transport.py] [_log()] userauth is OK
2025-12-24T20:36:09.973 [DEBUG] [Thread-308538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:36:09.973 [DEBUG] [Thread-308538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:36:09.973 [DEBUG] [Thread-308538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:36:09.973 [DEBUG] [Thread-308538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:36:09.992 [INFO] [Thread-308538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:36:09.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:36:10.646 [DEBUG] [Thread-308538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:36:10.646 [DEBUG] [Thread-308538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:36:10.647 [DEBUG] [Thread-308538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:36:10.687 [DEBUG] [Thread-308538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:36:10.687 [DEBUG] [Thread-308538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:36:10.690 [DEBUG] [Thread-308538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:36:10.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:36:10.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:36:10.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:36:10.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:36:10.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:36:10.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:36:10.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:36:10.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:36:10.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:36:10.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.774717 -999.00  +19.00  19.26     45   +6.90 1 2 1 1 1     6    0 11.57 -18.29 ----- 20.9 19.3 180.4 25.9 19.4 -22.0 19.4 -21.7 19.1 -20.2 19.4 -21.1
2025-12-24T20:36:10.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:36:10.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:36:10.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.774717
2025-12-24T20:36:10.788 [DEBUG] [Thread-308538] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:36:10.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:36:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:36:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:36:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:36:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:36:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:35:21', tmtdew=13.9, humidity=39.91, cloud=0.0, wind=29.1, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:35:22', seeing=1.81, atlas_timestamp='2025-12-24T18:35:35.549', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T02:35:00')
2025-12-24T20:36:10.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:36:10.922 [DEBUG] [Thread-308541] [transport.py] [_log()] starting thread (client mode): 0xf57429b0
2025-12-24T20:36:10.922 [DEBUG] [Thread-308541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:36:10.940 [DEBUG] [Thread-308541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:36:10.940 [INFO] [Thread-308541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] client lang: <none>
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] server lang: <none>
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] kex follows: False
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] Compression: none
2025-12-24T20:36:10.948 [DEBUG] [Thread-308541] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:36:11.005 [DEBUG] [Thread-308541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:36:11.006 [DEBUG] [Thread-308541] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:36:11.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:36:11.006 [DEBUG] [Thread-308541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:36:11.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:36:11.062 [DEBUG] [Thread-308541] [transport.py] [_log()] userauth is OK
2025-12-24T20:36:11.062 [DEBUG] [Thread-308541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:36:11.062 [DEBUG] [Thread-308541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:36:11.062 [DEBUG] [Thread-308541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:36:11.062 [DEBUG] [Thread-308541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:36:11.076 [INFO] [Thread-308541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:36:11.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:36:11.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:36:11.897 [DEBUG] [Thread-308541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:36:11.897 [DEBUG] [Thread-308541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:36:11.946 [DEBUG] [Thread-308541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:36:11.946 [DEBUG] [Thread-308541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:36:11.954 [DEBUG] [Thread-308541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:36:11.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:36:11.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')
2025-12-24T20:36:11.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
2025-12-24T20:36:11.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:36:11.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:36:11.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:36:11.989 [DEBUG] [Thread-308541] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:36:13.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:36:13.816 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:36:24.352 [DEBUG] [Thread-308543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:36:29.878 [DEBUG] [Thread-308544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:36:39.731 [DEBUG] [Thread-308545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:36:42.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:36:42.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:36:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:36:51.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 36, 2), 13.87, 39.98, 0.0, 27.37, 19.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:36:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:36:02
2025-12-24T20:36:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:36:54.668 [DEBUG] [Thread-308546] [transport.py] [_log()] starting thread (client mode): 0xf5740970
2025-12-24T20:36:54.670 [DEBUG] [Thread-308546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:36:54.671 [DEBUG] [Thread-308546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:36:54.671 [INFO] [Thread-308546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] client lang: <none>
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] server lang: <none>
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] kex follows: False
2025-12-24T20:36:54.680 [DEBUG] [Thread-308546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:36:54.681 [DEBUG] [Thread-308546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:36:54.681 [DEBUG] [Thread-308546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:36:54.681 [DEBUG] [Thread-308546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:36:54.681 [DEBUG] [Thread-308546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:36:54.681 [DEBUG] [Thread-308546] [transport.py] [_log()] Compression: none
2025-12-24T20:36:54.681 [DEBUG] [Thread-308546] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:36:54.730 [DEBUG] [Thread-308546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:36:54.759 [DEBUG] [Thread-308546] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:36:54.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:36:54.763 [DEBUG] [Thread-308546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:36:54.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:36:54.765 [DEBUG] [Thread-308546] [transport.py] [_log()] userauth is OK
2025-12-24T20:36:54.766 [DEBUG] [Thread-308546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:36:54.766 [DEBUG] [Thread-308546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:36:54.766 [DEBUG] [Thread-308546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:36:54.766 [DEBUG] [Thread-308546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:36:54.787 [INFO] [Thread-308546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:36:54.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:36:54.884 [DEBUG] [Thread-308548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:36:55.397 [DEBUG] [Thread-308546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:36:55.397 [DEBUG] [Thread-308546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:36:55.439 [DEBUG] [Thread-308546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:36:55.440 [DEBUG] [Thread-308546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:36:55.440 [DEBUG] [Thread-308546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:36:55.441 [DEBUG] [Thread-308546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:36:55.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:36:55.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:36:55.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:36:55.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:36:55.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:36:55.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:36:55.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:36:55.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:36:55.460 [DEBUG] [Thread-308546] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:36:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:36:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.775412 -999.00  +18.90  28.53     46   +7.10 1 2 1 1 1     5    0 11.70 -19.02 ZNE.. 20.9 28.5 170.8 39.3 19.4 -22.0 19.3 -21.7 19.1 -20.3 19.4 -21.2
2025-12-24T20:36:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:36:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:36:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.775412
2025-12-24T20:36:55.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:36:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:36:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:36:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:36:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:36:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:36:02', tmtdew=13.87, humidity=39.98, cloud=0.0, wind=27.37, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:36:03', seeing=1.71, atlas_timestamp='2025-12-24T18:36:35.597', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:36:00')
2025-12-24T20:36:55.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:36:55.659 [DEBUG] [Thread-308550] [transport.py] [_log()] starting thread (client mode): 0xf57aa2f0
2025-12-24T20:36:55.659 [DEBUG] [Thread-308550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:36:55.673 [DEBUG] [Thread-308550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:36:55.673 [INFO] [Thread-308550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:36:55.680 [DEBUG] [Thread-308550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:36:55.680 [DEBUG] [Thread-308550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:36:55.680 [DEBUG] [Thread-308550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:36:55.680 [DEBUG] [Thread-308550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:36:55.680 [DEBUG] [Thread-308550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:36:55.680 [DEBUG] [Thread-308550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] client lang: <none>
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] server lang: <none>
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] kex follows: False
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] Compression: none
2025-12-24T20:36:55.681 [DEBUG] [Thread-308550] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:36:55.738 [DEBUG] [Thread-308550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:36:55.738 [DEBUG] [Thread-308550] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:36:55.738 [DEBUG] [Thread-308550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:36:55.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:36:55.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:36:55.795 [DEBUG] [Thread-308550] [transport.py] [_log()] userauth is OK
2025-12-24T20:36:55.795 [DEBUG] [Thread-308550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:36:55.795 [DEBUG] [Thread-308550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:36:55.795 [DEBUG] [Thread-308550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:36:55.795 [DEBUG] [Thread-308550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:36:55.810 [INFO] [Thread-308550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:36:55.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:36:55.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:36:56.640 [DEBUG] [Thread-308550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:36:56.640 [DEBUG] [Thread-308550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:36:56.686 [DEBUG] [Thread-308550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:36:56.687 [DEBUG] [Thread-308550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:36:56.695 [DEBUG] [Thread-308550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:36:56.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:36:56.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')
2025-12-24T20:36:56.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
2025-12-24T20:36:56.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:36:56.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:36:56.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:36:56.729 [DEBUG] [Thread-308550] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:37:10.319 [DEBUG] [Thread-308552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:37:21.010 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:37:21.039 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:37:25.714 [DEBUG] [Thread-308553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:37:26.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:37:26.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:37:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:37:30.561 [DEBUG] [Thread-308554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:37:30.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 36, 42), 13.73, 40.59, 0.0, 37.28, 19.07, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:37:30.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:36:42
2025-12-24T20:37:31.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:37:31.277 [DEBUG] [Thread-308555] [transport.py] [_log()] starting thread (client mode): 0xf57a86a0
2025-12-24T20:37:31.278 [DEBUG] [Thread-308555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:37:31.288 [DEBUG] [Thread-308555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:37:31.289 [INFO] [Thread-308555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:37:31.294 [DEBUG] [Thread-308555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:37:31.294 [DEBUG] [Thread-308555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:37:31.294 [DEBUG] [Thread-308555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:37:31.294 [DEBUG] [Thread-308555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] client lang: <none>
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] server lang: <none>
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] kex follows: False
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:37:31.295 [DEBUG] [Thread-308555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:37:31.296 [DEBUG] [Thread-308555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:37:31.296 [DEBUG] [Thread-308555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:37:31.296 [DEBUG] [Thread-308555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:37:31.296 [DEBUG] [Thread-308555] [transport.py] [_log()] Compression: none
2025-12-24T20:37:31.296 [DEBUG] [Thread-308555] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:37:31.365 [DEBUG] [Thread-308555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:37:31.379 [DEBUG] [Thread-308555] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:37:31.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:37:31.381 [DEBUG] [Thread-308555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:37:31.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:37:31.384 [DEBUG] [Thread-308555] [transport.py] [_log()] userauth is OK
2025-12-24T20:37:31.384 [DEBUG] [Thread-308555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:37:31.384 [DEBUG] [Thread-308555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:37:31.384 [DEBUG] [Thread-308555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:37:31.384 [DEBUG] [Thread-308555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:37:31.407 [INFO] [Thread-308555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:37:31.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:37:32.064 [DEBUG] [Thread-308555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:37:32.065 [DEBUG] [Thread-308555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:37:32.066 [DEBUG] [Thread-308555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:37:32.106 [DEBUG] [Thread-308555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:37:32.106 [DEBUG] [Thread-308555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:37:32.108 [DEBUG] [Thread-308555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:37:32.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:37:32.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:37:32.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:37:32.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:37:32.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:37:32.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:37:32.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:37:32.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:37:32.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:37:32.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.775759 -999.00  +18.90  37.96     46   +7.20 1 2 2 1 1     5    0 11.68 -21.35 ZNE.. 32.3 38.0 169.2 43.3 19.4 -22.1 19.3 -21.9 19.1 -20.2 19.4 -21.0
2025-12-24T20:37:32.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:37:32.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:37:32.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.775759
2025-12-24T20:37:32.139 [DEBUG] [Thread-308555] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:37:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:37:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:37:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:37:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:37:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:37:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:36:42', tmtdew=13.73, humidity=40.59, cloud=0.0, wind=37.28, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:36:42', seeing=1.65, atlas_timestamp='2025-12-24T18:37:05.578', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:36:00')
2025-12-24T20:37:32.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:37:32.252 [DEBUG] [Thread-308558] [transport.py] [_log()] starting thread (client mode): 0xf5741090
2025-12-24T20:37:32.252 [DEBUG] [Thread-308558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:37:32.267 [DEBUG] [Thread-308558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:37:32.267 [INFO] [Thread-308558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:37:32.274 [DEBUG] [Thread-308558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:37:32.274 [DEBUG] [Thread-308558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:37:32.274 [DEBUG] [Thread-308558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:37:32.274 [DEBUG] [Thread-308558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:37:32.274 [DEBUG] [Thread-308558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] client lang: <none>
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] server lang: <none>
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] kex follows: False
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] Compression: none
2025-12-24T20:37:32.275 [DEBUG] [Thread-308558] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:37:32.331 [DEBUG] [Thread-308558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:37:32.331 [DEBUG] [Thread-308558] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:37:32.331 [DEBUG] [Thread-308558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:37:32.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:37:32.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:37:32.388 [DEBUG] [Thread-308558] [transport.py] [_log()] userauth is OK
2025-12-24T20:37:32.388 [DEBUG] [Thread-308558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:37:32.388 [DEBUG] [Thread-308558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:37:32.388 [DEBUG] [Thread-308558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:37:32.388 [DEBUG] [Thread-308558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:37:32.410 [INFO] [Thread-308558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:37:32.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:37:32.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:37:33.229 [DEBUG] [Thread-308558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:37:33.229 [DEBUG] [Thread-308558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:37:33.274 [DEBUG] [Thread-308558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:37:33.274 [DEBUG] [Thread-308558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:37:33.283 [DEBUG] [Thread-308558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:37:33.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:37:33.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:37:33.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:37:33.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:37:33.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:37:33.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:37:33.329 [DEBUG] [Thread-308558] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:37:41.103 [DEBUG] [Thread-308560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:37:56.784 [DEBUG] [Thread-308561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:38:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:38:03.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:38:03.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:38:07.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 37, 33), 13.48, 41.37, 0.0, 35.08, 19.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:38:07.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:37:33
2025-12-24T20:38:08.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:38:09.191 [DEBUG] [Thread-308562] [transport.py] [_log()] starting thread (client mode): 0xf572dea0
2025-12-24T20:38:09.192 [DEBUG] [Thread-308562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:38:09.201 [DEBUG] [Thread-308562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:38:09.201 [INFO] [Thread-308562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] client lang: <none>
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] server lang: <none>
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] kex follows: False
2025-12-24T20:38:09.205 [DEBUG] [Thread-308562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:38:09.206 [DEBUG] [Thread-308562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:38:09.206 [DEBUG] [Thread-308562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:38:09.206 [DEBUG] [Thread-308562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:38:09.206 [DEBUG] [Thread-308562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:38:09.206 [DEBUG] [Thread-308562] [transport.py] [_log()] Compression: none
2025-12-24T20:38:09.206 [DEBUG] [Thread-308562] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:38:09.241 [DEBUG] [Thread-308562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:38:09.249 [DEBUG] [Thread-308562] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:38:09.251 [DEBUG] [Thread-308562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:38:09.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:38:09.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:38:09.255 [DEBUG] [Thread-308562] [transport.py] [_log()] userauth is OK
2025-12-24T20:38:09.256 [DEBUG] [Thread-308562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:38:09.256 [DEBUG] [Thread-308562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:38:09.256 [DEBUG] [Thread-308562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:38:09.256 [DEBUG] [Thread-308562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:38:09.274 [INFO] [Thread-308562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:38:09.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:38:09.864 [DEBUG] [Thread-308562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:38:09.864 [DEBUG] [Thread-308562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:38:09.865 [DEBUG] [Thread-308562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:38:09.905 [DEBUG] [Thread-308562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:38:09.905 [DEBUG] [Thread-308562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:38:09.907 [DEBUG] [Thread-308562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:38:09.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:38:09.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:38:09.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:38:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:38:09.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:38:09.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:38:09.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:38:09.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:38:09.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:38:09.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.776106 -999.00  +18.90  21.92     46   +7.10 1 2 1 1 1     4    0 11.34 -24.99 ZNE.. 21.2 21.9 163.0 41.3 19.4 -22.2 19.3 -21.7 19.1 -20.1 19.4 -21.1
2025-12-24T20:38:09.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:38:09.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:38:09.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.776106
2025-12-24T20:38:09.948 [DEBUG] [Thread-308562] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:38:09.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:38:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:38:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:38:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:38:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:38:09.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:37:33', tmtdew=13.48, humidity=41.37, cloud=0.0, wind=35.08, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:37:34', seeing=2.12, atlas_timestamp='2025-12-24T18:37:35.558', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:36:00')
2025-12-24T20:38:10.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:38:10.068 [DEBUG] [Thread-308565] [transport.py] [_log()] starting thread (client mode): 0xf572dba0
2025-12-24T20:38:10.069 [DEBUG] [Thread-308565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:38:10.083 [DEBUG] [Thread-308565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:38:10.083 [INFO] [Thread-308565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] client lang: <none>
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] server lang: <none>
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] kex follows: False
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:38:10.090 [DEBUG] [Thread-308565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:38:10.091 [DEBUG] [Thread-308565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:38:10.091 [DEBUG] [Thread-308565] [transport.py] [_log()] Compression: none
2025-12-24T20:38:10.091 [DEBUG] [Thread-308565] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:38:10.147 [DEBUG] [Thread-308565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:38:10.147 [DEBUG] [Thread-308565] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:38:10.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:38:10.147 [DEBUG] [Thread-308565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:38:10.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:38:10.205 [DEBUG] [Thread-308565] [transport.py] [_log()] userauth is OK
2025-12-24T20:38:10.205 [DEBUG] [Thread-308565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:38:10.205 [DEBUG] [Thread-308565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:38:10.205 [DEBUG] [Thread-308565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:38:10.205 [DEBUG] [Thread-308565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:38:10.223 [INFO] [Thread-308565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:38:10.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:38:10.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:38:11.127 [DEBUG] [Thread-308565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:38:11.127 [DEBUG] [Thread-308565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:38:11.176 [DEBUG] [Thread-308565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:38:11.176 [DEBUG] [Thread-308565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:38:11.184 [DEBUG] [Thread-308565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:38:11.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:38: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')
2025-12-24T20:38:11.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:38:11.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:38:11.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:38:11.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:38:11.218 [DEBUG] [Thread-308565] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:38:12.108 [DEBUG] [Thread-308567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:38:21.248 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:38:21.262 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:38:27.537 [DEBUG] [Thread-308568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:38:30.982 [DEBUG] [Thread-308569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:38:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:38:41.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:38:41.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:38:43.102 [DEBUG] [Thread-308570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:38:47.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 38, 15), 13.46, 41.42, 0.0, 32.48, 19.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:38:47.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:38:15
2025-12-24T20:38:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:38:49.164 [DEBUG] [Thread-308571] [transport.py] [_log()] starting thread (client mode): 0xf572c820
2025-12-24T20:38:49.166 [DEBUG] [Thread-308571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:38:49.167 [DEBUG] [Thread-308571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:38:49.167 [INFO] [Thread-308571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] client lang: <none>
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] server lang: <none>
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] kex follows: False
2025-12-24T20:38:49.173 [DEBUG] [Thread-308571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:38:49.174 [DEBUG] [Thread-308571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:38:49.174 [DEBUG] [Thread-308571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:38:49.174 [DEBUG] [Thread-308571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:38:49.174 [DEBUG] [Thread-308571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:38:49.174 [DEBUG] [Thread-308571] [transport.py] [_log()] Compression: none
2025-12-24T20:38:49.174 [DEBUG] [Thread-308571] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:38:49.213 [DEBUG] [Thread-308571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:38:49.219 [DEBUG] [Thread-308571] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:38:49.221 [DEBUG] [Thread-308571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:38:49.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:38:49.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:38:49.225 [DEBUG] [Thread-308571] [transport.py] [_log()] userauth is OK
2025-12-24T20:38:49.225 [DEBUG] [Thread-308571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:38:49.226 [DEBUG] [Thread-308571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:38:49.226 [DEBUG] [Thread-308571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:38:49.226 [DEBUG] [Thread-308571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:38:49.248 [INFO] [Thread-308571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:38:49.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:38:49.848 [DEBUG] [Thread-308571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:38:49.849 [DEBUG] [Thread-308571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:38:49.849 [DEBUG] [Thread-308571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:38:49.890 [DEBUG] [Thread-308571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:38:49.890 [DEBUG] [Thread-308571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:38:49.892 [DEBUG] [Thread-308571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:38:49.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:38:49.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:38:49.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:38:49.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:38:49.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:38:49.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:38:49.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:38:49.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:38:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:38:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.776454 -999.00  +18.90  20.84     46   +7.10 1 2 1 1 1     4    0 11.50 -24.96 ZNE.. 21.0 20.8 163.6 28.7 19.4 -22.0 19.3 -21.7 19.1 -20.2 19.4 -21.0
2025-12-24T20:38:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:38:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:38:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.776454
2025-12-24T20:38:49.921 [DEBUG] [Thread-308571] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:38:49.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:38:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:38:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:38:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:38:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:38:49.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:38:15', tmtdew=13.46, humidity=41.42, cloud=0.0, wind=32.48, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:38:16', seeing=2.02, atlas_timestamp='2025-12-24T18:38:05.626', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:36:00')
2025-12-24T20:38:50.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:38:50.027 [DEBUG] [Thread-308574] [transport.py] [_log()] starting thread (client mode): 0xf572e110
2025-12-24T20:38:50.028 [DEBUG] [Thread-308574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:38:50.043 [DEBUG] [Thread-308574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:38:50.043 [INFO] [Thread-308574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:38:50.050 [DEBUG] [Thread-308574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] client lang: <none>
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] server lang: <none>
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] kex follows: False
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:38:50.051 [DEBUG] [Thread-308574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:38:50.052 [DEBUG] [Thread-308574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:38:50.052 [DEBUG] [Thread-308574] [transport.py] [_log()] Compression: none
2025-12-24T20:38:50.055 [DEBUG] [Thread-308574] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:38:50.113 [DEBUG] [Thread-308574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:38:50.114 [DEBUG] [Thread-308574] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:38:50.115 [DEBUG] [Thread-308574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:38:50.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:38:50.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:38:50.172 [DEBUG] [Thread-308574] [transport.py] [_log()] userauth is OK
2025-12-24T20:38:50.172 [DEBUG] [Thread-308574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:38:50.172 [DEBUG] [Thread-308574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:38:50.172 [DEBUG] [Thread-308574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:38:50.172 [DEBUG] [Thread-308574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:38:50.191 [INFO] [Thread-308574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:38:50.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:38:50.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:38:51.053 [DEBUG] [Thread-308574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:38:51.053 [DEBUG] [Thread-308574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:38:51.100 [DEBUG] [Thread-308574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:38:51.100 [DEBUG] [Thread-308574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:38:51.109 [DEBUG] [Thread-308574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:38:51.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:38:51.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:38:51.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:38:51.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:38:51.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:38:51.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:38:51.144 [DEBUG] [Thread-308574] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:38:58.372 [DEBUG] [Thread-308576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:39:13.777 [DEBUG] [Thread-308577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:39:21.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:39:21.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:39:21.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:39:21.473 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:39:21.482 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:39:27.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 38, 58), 13.42, 41.52, 0.0, 36.52, 18.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:39:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:38:58
2025-12-24T20:39:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:39:28.219 [DEBUG] [Thread-308578] [transport.py] [_log()] starting thread (client mode): 0xf57aa2c0
2025-12-24T20:39:28.220 [DEBUG] [Thread-308578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:39:28.223 [DEBUG] [Thread-308578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:39:28.223 [INFO] [Thread-308578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] client lang: <none>
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] server lang: <none>
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] kex follows: False
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:39:28.232 [DEBUG] [Thread-308578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:39:28.233 [DEBUG] [Thread-308578] [transport.py] [_log()] Compression: none
2025-12-24T20:39:28.233 [DEBUG] [Thread-308578] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:39:28.271 [DEBUG] [Thread-308578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:39:28.277 [DEBUG] [Thread-308578] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:39:28.278 [DEBUG] [Thread-308578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:39:28.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:39:28.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:39:28.285 [DEBUG] [Thread-308578] [transport.py] [_log()] userauth is OK
2025-12-24T20:39:28.285 [DEBUG] [Thread-308578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:39:28.285 [DEBUG] [Thread-308578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:39:28.285 [DEBUG] [Thread-308578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:39:28.285 [DEBUG] [Thread-308578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:39:28.304 [INFO] [Thread-308578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:39:28.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:39:29.100 [DEBUG] [Thread-308578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:39:29.100 [DEBUG] [Thread-308578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:39:29.103 [DEBUG] [Thread-308578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:39:29.142 [DEBUG] [Thread-308578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:39:29.142 [DEBUG] [Thread-308578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:39:29.159 [DEBUG] [Thread-308578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:39:29.238 [DEBUG] [Thread-308580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:39:29.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:39:29.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:39:29.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:39:29.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:39:29.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:39:29.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:39:29.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:39:29.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:39:29.377 [DEBUG] [Thread-308578] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:39:29.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:39:29.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.777148 -999.00  +18.80  30.79     46   +7.20 1 2 2 1 1     3    0 11.34 -30.69 ZNES. 31.1 30.8 165.0 37.1 19.4 -22.0 19.2 -21.6 19.1 -20.2 19.4 -21.2
2025-12-24T20:39:29.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:39:29.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:39:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.777148
2025-12-24T20:39:29.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:39:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:39:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:39:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:39:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:39:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:38:58', tmtdew=13.42, humidity=41.52, cloud=0.0, wind=36.52, temperature=18.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:38:58', seeing=1.62, atlas_timestamp='2025-12-24T18:39:05.587', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:36:00')
2025-12-24T20:39:29.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:39:29.518 [DEBUG] [Thread-308582] [transport.py] [_log()] starting thread (client mode): 0xf572c3a0
2025-12-24T20:39:29.518 [DEBUG] [Thread-308582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:39:29.532 [DEBUG] [Thread-308582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:39:29.533 [INFO] [Thread-308582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:39:29.540 [DEBUG] [Thread-308582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] client lang: <none>
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] server lang: <none>
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] kex follows: False
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] Compression: none
2025-12-24T20:39:29.541 [DEBUG] [Thread-308582] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:39:29.602 [DEBUG] [Thread-308582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:39:29.603 [DEBUG] [Thread-308582] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:39:29.603 [DEBUG] [Thread-308582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:39:29.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:39:29.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:39:29.659 [DEBUG] [Thread-308582] [transport.py] [_log()] userauth is OK
2025-12-24T20:39:29.659 [DEBUG] [Thread-308582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:39:29.659 [DEBUG] [Thread-308582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:39:29.659 [DEBUG] [Thread-308582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:39:29.659 [DEBUG] [Thread-308582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:39:29.674 [INFO] [Thread-308582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:39:29.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:39:29.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:39:30.502 [DEBUG] [Thread-308582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:39:30.502 [DEBUG] [Thread-308582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:39:30.550 [DEBUG] [Thread-308582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:39:30.550 [DEBUG] [Thread-308582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:39:30.559 [DEBUG] [Thread-308582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:39:30.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:39:30.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:39:30.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:39:30.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:39:30.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:39:30.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:39:30.592 [DEBUG] [Thread-308582] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:39:31.559 [DEBUG] [Thread-308584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:39:44.605 [DEBUG] [Thread-308585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:40:00.193 [DEBUG] [Thread-308586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:40:00.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:40:00.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:40:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:40:07.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 39, 38), 13.27, 41.8, 0.0, 34.85, 18.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:40:07.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:39:38
2025-12-24T20:40:07.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:40:08.387 [DEBUG] [Thread-308587] [transport.py] [_log()] starting thread (client mode): 0xf5741090
2025-12-24T20:40:08.388 [DEBUG] [Thread-308587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:40:08.390 [DEBUG] [Thread-308587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:40:08.391 [INFO] [Thread-308587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:40:08.397 [DEBUG] [Thread-308587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:40:08.397 [DEBUG] [Thread-308587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:40:08.397 [DEBUG] [Thread-308587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:40:08.397 [DEBUG] [Thread-308587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:40:08.397 [DEBUG] [Thread-308587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:40:08.397 [DEBUG] [Thread-308587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:40:08.397 [DEBUG] [Thread-308587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:40:08.398 [DEBUG] [Thread-308587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:40:08.398 [DEBUG] [Thread-308587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:40:08.398 [DEBUG] [Thread-308587] [transport.py] [_log()] client lang: <none>
2025-12-24T20:40:08.398 [DEBUG] [Thread-308587] [transport.py] [_log()] server lang: <none>
2025-12-24T20:40:08.398 [DEBUG] [Thread-308587] [transport.py] [_log()] kex follows: False
2025-12-24T20:40:08.398 [DEBUG] [Thread-308587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:40:08.398 [DEBUG] [Thread-308587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:40:08.399 [DEBUG] [Thread-308587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:40:08.399 [DEBUG] [Thread-308587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:40:08.399 [DEBUG] [Thread-308587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:40:08.399 [DEBUG] [Thread-308587] [transport.py] [_log()] Compression: none
2025-12-24T20:40:08.399 [DEBUG] [Thread-308587] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:40:08.444 [DEBUG] [Thread-308587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:40:08.447 [DEBUG] [Thread-308587] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:40:08.449 [DEBUG] [Thread-308587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:40:08.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:40:08.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:40:08.452 [DEBUG] [Thread-308587] [transport.py] [_log()] userauth is OK
2025-12-24T20:40:08.452 [DEBUG] [Thread-308587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:40:08.452 [DEBUG] [Thread-308587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:40:08.452 [DEBUG] [Thread-308587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:40:08.452 [DEBUG] [Thread-308587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:40:08.470 [INFO] [Thread-308587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:40:08.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:40:09.479 [DEBUG] [Thread-308587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:40:09.479 [DEBUG] [Thread-308587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:40:09.481 [DEBUG] [Thread-308587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:40:09.520 [DEBUG] [Thread-308587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:40:09.520 [DEBUG] [Thread-308587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:40:09.523 [DEBUG] [Thread-308587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:40:09.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:40:09.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:40:09.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:40:09.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:40:09.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:40:09.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:40:09.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:40:09.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:40:09.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:40:09.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.777495 -999.00  +18.80  27.66     46   +7.20 1 2 1 1 1     3    0 11.38 -32.46 ZNES. 23.4 27.7 174.0 36.7 19.4 -22.2 19.3 -21.8 19.0 -20.2 19.4 -21.1
2025-12-24T20:40:09.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:40:09.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:40:09.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.777495
2025-12-24T20:40:09.605 [DEBUG] [Thread-308587] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:40:09.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:40:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:40:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:40:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:40:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-24T20:40:09.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:39:38', tmtdew=13.27, humidity=41.8, cloud=0.0, wind=34.85, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:39:38', seeing=1.57, atlas_timestamp='2025-12-24T18:39:35.568', atlas_cloud=2, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:38:00')
2025-12-24T20:40:09.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:40:09.733 [DEBUG] [Thread-308590] [transport.py] [_log()] starting thread (client mode): 0xf57295a0
2025-12-24T20:40:09.733 [DEBUG] [Thread-308590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:40:09.747 [DEBUG] [Thread-308590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:40:09.747 [INFO] [Thread-308590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] client lang: <none>
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] server lang: <none>
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] kex follows: False
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] Compression: none
2025-12-24T20:40:09.755 [DEBUG] [Thread-308590] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:40:09.810 [DEBUG] [Thread-308590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:40:09.810 [DEBUG] [Thread-308590] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:40:09.810 [DEBUG] [Thread-308590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:40:09.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:40:09.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:40:09.867 [DEBUG] [Thread-308590] [transport.py] [_log()] userauth is OK
2025-12-24T20:40:09.867 [DEBUG] [Thread-308590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:40:09.867 [DEBUG] [Thread-308590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:40:09.867 [DEBUG] [Thread-308590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:40:09.867 [DEBUG] [Thread-308590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:40:09.881 [INFO] [Thread-308590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:40:09.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:40:09.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:40:10.679 [DEBUG] [Thread-308590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:40:10.679 [DEBUG] [Thread-308590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:40:10.723 [DEBUG] [Thread-308590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:40:10.723 [DEBUG] [Thread-308590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:40:10.732 [DEBUG] [Thread-308590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:40:10.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:40:10.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:40: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
2025-12-24T20:40:10.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:40:10.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:40:10.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:40:10.772 [DEBUG] [Thread-308590] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:40:15.455 [DEBUG] [Thread-308592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:40:21.687 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:40:21.689 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:40:30.733 [DEBUG] [Thread-308593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:40:32.141 [DEBUG] [Thread-308594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:40:40.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:40:40.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:40:40.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:40:46.052 [DEBUG] [Thread-308595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:40:46.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 40, 19), 13.32, 41.65, 0.0, 36.2, 18.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:40:46.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:40:19
2025-12-24T20:40:47.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:40:47.257 [DEBUG] [Thread-308596] [transport.py] [_log()] starting thread (client mode): 0xf5743af0
2025-12-24T20:40:47.258 [DEBUG] [Thread-308596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:40:47.266 [DEBUG] [Thread-308596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:40:47.266 [INFO] [Thread-308596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] client lang: <none>
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] server lang: <none>
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] kex follows: False
2025-12-24T20:40:47.276 [DEBUG] [Thread-308596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:40:47.277 [DEBUG] [Thread-308596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:40:47.277 [DEBUG] [Thread-308596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:40:47.277 [DEBUG] [Thread-308596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:40:47.277 [DEBUG] [Thread-308596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:40:47.277 [DEBUG] [Thread-308596] [transport.py] [_log()] Compression: none
2025-12-24T20:40:47.277 [DEBUG] [Thread-308596] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:40:47.319 [DEBUG] [Thread-308596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:40:47.325 [DEBUG] [Thread-308596] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:40:47.327 [DEBUG] [Thread-308596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:40:47.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:40:47.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:40:47.332 [DEBUG] [Thread-308596] [transport.py] [_log()] userauth is OK
2025-12-24T20:40:47.332 [DEBUG] [Thread-308596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:40:47.332 [DEBUG] [Thread-308596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:40:47.332 [DEBUG] [Thread-308596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:40:47.332 [DEBUG] [Thread-308596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:40:47.354 [INFO] [Thread-308596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:40:47.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:40:47.995 [DEBUG] [Thread-308596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:40:47.995 [DEBUG] [Thread-308596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:40:48.008 [DEBUG] [Thread-308596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:40:48.037 [DEBUG] [Thread-308596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:40:48.037 [DEBUG] [Thread-308596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:40:48.043 [DEBUG] [Thread-308596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:40:48.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:40:48.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:40:48.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:40:48.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:40:48.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:40:48.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:40:48.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:40:48.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:40:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:40:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.777842 -999.00  +18.80  29.64     47   +7.30 1 1 1 1 1     3    0 11.07 -33.97 ZNESW 22.8 29.6 163.6 38.8 19.4 -22.0 19.3 -21.6 19.0 -20.2 19.4 -21.2
2025-12-24T20:40:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:40:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:40:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.777842
2025-12-24T20:40:48.174 [DEBUG] [Thread-308596] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:40:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:40:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:40:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:40:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:40:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:40:48.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:40:19', tmtdew=13.32, humidity=41.65, cloud=0.0, wind=36.2, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:40:20', seeing=1.42, atlas_timestamp='2025-12-24T18:40:05.549', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:38:00')
2025-12-24T20:40:48.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:40:48.356 [DEBUG] [Thread-308599] [transport.py] [_log()] starting thread (client mode): 0xf57427d0
2025-12-24T20:40:48.356 [DEBUG] [Thread-308599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:40:48.371 [DEBUG] [Thread-308599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:40:48.371 [INFO] [Thread-308599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] client lang: <none>
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] server lang: <none>
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] kex follows: False
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:40:48.378 [DEBUG] [Thread-308599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:40:48.379 [DEBUG] [Thread-308599] [transport.py] [_log()] Compression: none
2025-12-24T20:40:48.379 [DEBUG] [Thread-308599] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:40:48.438 [DEBUG] [Thread-308599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:40:48.438 [DEBUG] [Thread-308599] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:40:48.439 [DEBUG] [Thread-308599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:40:48.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:40:48.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:40:48.495 [DEBUG] [Thread-308599] [transport.py] [_log()] userauth is OK
2025-12-24T20:40:48.496 [DEBUG] [Thread-308599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:40:48.496 [DEBUG] [Thread-308599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:40:48.496 [DEBUG] [Thread-308599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:40:48.496 [DEBUG] [Thread-308599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:40:48.510 [INFO] [Thread-308599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:40:48.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:40:48.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:40:49.357 [DEBUG] [Thread-308599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:40:49.357 [DEBUG] [Thread-308599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:40:49.404 [DEBUG] [Thread-308599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:40:49.404 [DEBUG] [Thread-308599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:40:49.416 [DEBUG] [Thread-308599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:40:49.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:40: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')
2025-12-24T20:40:49.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:40:49.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:40:49.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:40:49.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:40:49.453 [DEBUG] [Thread-308599] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:41:01.303 [DEBUG] [Thread-308601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:41:16.574 [DEBUG] [Thread-308602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:41:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:41:19.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:41:19.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:41:21.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:41:21.923 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:41:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 41, 7), 13.29, 41.74, 0.0, 35.5, 18.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:41:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:41:07
2025-12-24T20:41:23.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:41:23.920 [DEBUG] [Thread-308603] [transport.py] [_log()] starting thread (client mode): 0xf57a9690
2025-12-24T20:41:23.922 [DEBUG] [Thread-308603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:41:23.927 [DEBUG] [Thread-308603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:41:23.927 [INFO] [Thread-308603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] client lang: <none>
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] server lang: <none>
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] kex follows: False
2025-12-24T20:41:23.932 [DEBUG] [Thread-308603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:41:23.933 [DEBUG] [Thread-308603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:41:23.933 [DEBUG] [Thread-308603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:41:23.934 [DEBUG] [Thread-308603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:41:23.934 [DEBUG] [Thread-308603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:41:23.934 [DEBUG] [Thread-308603] [transport.py] [_log()] Compression: none
2025-12-24T20:41:23.934 [DEBUG] [Thread-308603] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:41:23.979 [DEBUG] [Thread-308603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:41:23.985 [DEBUG] [Thread-308603] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:41:23.986 [DEBUG] [Thread-308603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:41:23.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:41:23.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:41:23.991 [DEBUG] [Thread-308603] [transport.py] [_log()] userauth is OK
2025-12-24T20:41:23.991 [DEBUG] [Thread-308603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:41:23.991 [DEBUG] [Thread-308603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:41:23.991 [DEBUG] [Thread-308603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:41:23.991 [DEBUG] [Thread-308603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:41:24.011 [INFO] [Thread-308603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:41:24.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:41:24.689 [DEBUG] [Thread-308603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:41:24.689 [DEBUG] [Thread-308603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:41:24.704 [DEBUG] [Thread-308603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:41:24.730 [DEBUG] [Thread-308603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:41:24.730 [DEBUG] [Thread-308603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:41:24.733 [DEBUG] [Thread-308603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:41:24.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:41:24.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:41:24.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:41:24.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:41:24.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:41:24.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:41:24.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:41:24.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:41:24.759 [DEBUG] [Thread-308603] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:41:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:41:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.778190 -999.00  +18.80  23.80     47   +7.30 1 1 1 1 1     2    0 10.95 -36.17 ZNESW 23.3 23.8 161.4 31.6 19.3 -22.0 19.2 -21.7 19.1 -20.3 19.3 -21.1
2025-12-24T20:41:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:41:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:41:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.778190
2025-12-24T20:41:24.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:41:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:41:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:41:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:41:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:41:24.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:41:07', tmtdew=13.29, humidity=41.74, cloud=0.0, wind=35.5, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:41:09', seeing=1.39, atlas_timestamp='2025-12-24T18:40:35.616', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:38:00')
2025-12-24T20:41:24.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:41:24.882 [DEBUG] [Thread-308606] [transport.py] [_log()] starting thread (client mode): 0xf5773490
2025-12-24T20:41:24.882 [DEBUG] [Thread-308606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:41:24.899 [DEBUG] [Thread-308606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:41:24.899 [INFO] [Thread-308606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:41:24.909 [DEBUG] [Thread-308606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] client lang: <none>
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] server lang: <none>
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] kex follows: False
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] Compression: none
2025-12-24T20:41:24.910 [DEBUG] [Thread-308606] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:41:24.963 [DEBUG] [Thread-308606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:41:24.963 [DEBUG] [Thread-308606] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:41:24.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:41:24.963 [DEBUG] [Thread-308606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:41:24.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:41:25.020 [DEBUG] [Thread-308606] [transport.py] [_log()] userauth is OK
2025-12-24T20:41:25.020 [DEBUG] [Thread-308606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:41:25.020 [DEBUG] [Thread-308606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:41:25.021 [DEBUG] [Thread-308606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:41:25.021 [DEBUG] [Thread-308606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:41:25.038 [INFO] [Thread-308606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:41:25.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:41:25.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:41:25.891 [DEBUG] [Thread-308606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:41:25.891 [DEBUG] [Thread-308606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:41:25.937 [DEBUG] [Thread-308606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:41:25.937 [DEBUG] [Thread-308606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:41:26.085 [DEBUG] [Thread-308606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:41:26.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:41:26.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:41: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') -> 00000000
2025-12-24T20:41:26.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:41:26.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:41:26.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:41:26.126 [DEBUG] [Thread-308606] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:41:31.756 [DEBUG] [Thread-308608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:41:32.647 [DEBUG] [Thread-308609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:41:47.056 [DEBUG] [Thread-308610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:41:56.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:41:56.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:41:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:42:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 41, 7), 13.29, 41.74, 0.0, 35.5, 18.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:42:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:41:07
2025-12-24T20:42:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:42:03.015 [DEBUG] [Thread-308611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:42:03.289 [DEBUG] [Thread-308612] [transport.py] [_log()] starting thread (client mode): 0xf572c0a0
2025-12-24T20:42:03.290 [DEBUG] [Thread-308612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:42:03.300 [DEBUG] [Thread-308612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:42:03.301 [INFO] [Thread-308612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] client lang: <none>
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] server lang: <none>
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] kex follows: False
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:42:03.310 [DEBUG] [Thread-308612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:42:03.311 [DEBUG] [Thread-308612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:42:03.311 [DEBUG] [Thread-308612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:42:03.311 [DEBUG] [Thread-308612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:42:03.311 [DEBUG] [Thread-308612] [transport.py] [_log()] Compression: none
2025-12-24T20:42:03.311 [DEBUG] [Thread-308612] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:42:03.353 [DEBUG] [Thread-308612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:42:03.365 [DEBUG] [Thread-308612] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:42:03.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:42:03.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:42:03.370 [DEBUG] [Thread-308612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:42:03.371 [DEBUG] [Thread-308612] [transport.py] [_log()] userauth is OK
2025-12-24T20:42:03.371 [DEBUG] [Thread-308612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:42:03.371 [DEBUG] [Thread-308612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:42:03.371 [DEBUG] [Thread-308612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:42:03.371 [DEBUG] [Thread-308612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:42:03.408 [INFO] [Thread-308612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:42:03.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:42:04.058 [DEBUG] [Thread-308612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:42:04.058 [DEBUG] [Thread-308612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:42:04.059 [DEBUG] [Thread-308612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:42:04.100 [DEBUG] [Thread-308612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:42:04.101 [DEBUG] [Thread-308612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:42:04.106 [DEBUG] [Thread-308612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:42:04.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:42:04.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:42:04.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:42:04.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:42:04.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:42:04.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:42:04.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:42:04.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:42:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:42:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.778537 -999.00  +18.80  21.74     47   +7.20 1 1 1 1 1     2    0 10.95 -39.70 ZNESW 22.5 21.7 165.0 29.6 19.3 -22.1 19.2 -21.8 19.0 -20.1 19.3 -21.1
2025-12-24T20:42:04.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:42:04.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:42:04.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.778537
2025-12-24T20:42:04.131 [DEBUG] [Thread-308612] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:42:04.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:42:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:42:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:42:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:42:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:42:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:41:07', tmtdew=13.29, humidity=41.74, cloud=0.0, wind=35.5, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:41:47', seeing=1.34, atlas_timestamp='2025-12-24T18:41:05.597', atlas_cloud=1, atlas_rain=1, zp_data=[1.60175, nan, -0.2597499999999986, 1.7794999999999996, 1.5895000000000001, nan, nan, nan, nan, nan, 1.6982499999999998, 1.508, 1.4269999999999996, 1.4202499999999993, 1.6229999999999993, nan, nan, nan, nan, 1.3877499999999987, 1.209999999999999, 1.1607499999999984, 1.330750000000001, 1.9797500000000001, nan, nan, nan, nan, 0.8955000000000002, 0.6415000000000006, 1.035000000000001, nan, nan], zp_timestamp='2025-12-24T18:38:00')
2025-12-24T20:42:04.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:42:04.340 [DEBUG] [Thread-308615] [transport.py] [_log()] starting thread (client mode): 0xf572ded0
2025-12-24T20:42:04.340 [DEBUG] [Thread-308615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:42:04.355 [DEBUG] [Thread-308615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:42:04.355 [INFO] [Thread-308615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] client lang: <none>
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] server lang: <none>
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] kex follows: False
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:42:04.362 [DEBUG] [Thread-308615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:42:04.364 [DEBUG] [Thread-308615] [transport.py] [_log()] Compression: none
2025-12-24T20:42:04.366 [DEBUG] [Thread-308615] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:42:04.420 [DEBUG] [Thread-308615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:42:04.420 [DEBUG] [Thread-308615] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:42:04.420 [DEBUG] [Thread-308615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:42:04.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:42:04.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:42:04.477 [DEBUG] [Thread-308615] [transport.py] [_log()] userauth is OK
2025-12-24T20:42:04.477 [DEBUG] [Thread-308615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:42:04.477 [DEBUG] [Thread-308615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:42:04.477 [DEBUG] [Thread-308615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:42:04.477 [DEBUG] [Thread-308615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:42:04.491 [INFO] [Thread-308615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:42:04.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:42:04.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:42:05.318 [DEBUG] [Thread-308615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:42:05.318 [DEBUG] [Thread-308615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:42:05.366 [DEBUG] [Thread-308615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:42:05.367 [DEBUG] [Thread-308615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:42:05.375 [DEBUG] [Thread-308615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:42:05.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:42:05.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:42:05.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:42:05.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:42:05.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:42:05.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:42:05.479 [DEBUG] [Thread-308615] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:42:18.792 [DEBUG] [Thread-308617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:42:22.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:42:22.133 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:42:34.096 [DEBUG] [Thread-308619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:42:34.093 [DEBUG] [Thread-308618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:42:35.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:42:35.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:42:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:42:41.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 41, 46), 13.25, 41.7, 0.0, 34.46, 18.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:42:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:41:46
2025-12-24T20:42:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:42:41.930 [DEBUG] [Thread-308620] [transport.py] [_log()] starting thread (client mode): 0xf5789150
2025-12-24T20:42:41.995 [DEBUG] [Thread-308620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:42:41.997 [DEBUG] [Thread-308620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:42:41.997 [INFO] [Thread-308620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:42:42.005 [DEBUG] [Thread-308620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] client lang: <none>
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] server lang: <none>
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] kex follows: False
2025-12-24T20:42:42.006 [DEBUG] [Thread-308620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:42:42.007 [DEBUG] [Thread-308620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:42:42.007 [DEBUG] [Thread-308620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:42:42.007 [DEBUG] [Thread-308620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:42:42.007 [DEBUG] [Thread-308620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:42:42.007 [DEBUG] [Thread-308620] [transport.py] [_log()] Compression: none
2025-12-24T20:42:42.007 [DEBUG] [Thread-308620] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:42:42.056 [DEBUG] [Thread-308620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:42:42.062 [DEBUG] [Thread-308620] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:42:42.063 [DEBUG] [Thread-308620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:42:42.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:42:42.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:42:42.069 [DEBUG] [Thread-308620] [transport.py] [_log()] userauth is OK
2025-12-24T20:42:42.069 [DEBUG] [Thread-308620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:42:42.070 [DEBUG] [Thread-308620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:42:42.070 [DEBUG] [Thread-308620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:42:42.070 [DEBUG] [Thread-308620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:42:42.092 [INFO] [Thread-308620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:42:42.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:42:42.705 [DEBUG] [Thread-308620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:42:42.705 [DEBUG] [Thread-308620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:42:42.708 [DEBUG] [Thread-308620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:42:42.748 [DEBUG] [Thread-308620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:42:42.748 [DEBUG] [Thread-308620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:42:42.782 [DEBUG] [Thread-308620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:42:42.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:42:42.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:42:42.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:42:42.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:42:42.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:42:42.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:42:42.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:42:42.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:42:42.811 [DEBUG] [Thread-308620] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:42:42.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:42:42.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.779578 -999.00  +18.80  17.85     47   +7.30 1 1 1 1 1     2    0 10.75 -51.99 ZNESW 20.9 17.9 166.3 31.5 19.3 -22.0 19.2 -21.7 18.9 -20.2 19.3 -20.9
2025-12-24T20:42:42.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:42:42.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:42:42.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.779578
2025-12-24T20:42:42.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:42:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:42:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:42:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:42:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:42:42.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:41:46', tmtdew=13.25, humidity=41.7, cloud=0.0, wind=34.46, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:42:32', seeing=1.5, atlas_timestamp='2025-12-24T18:42:35.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.06925000000000026, 0.008250000000000313, 0.17925000000000146, 0.09049999999999869, 0.20650000000000013, 0.1302500000000002, 0.01699999999999946, 0.17825000000000202, 0.1144999999999996, 0.10099999999999909, 0.16225000000000023, 0.08200000000000074, 0.054999999999999716, 0.17724999999999902, 0.06449999999999889, 0.0730000000000004, 0.12924999999999898, 0.13949999999999996, 0.08099999999999952, 0.04724999999999824, 0.13099999999999845, 0.16774999999999807, 0.05925000000000047, 0.12875000000000014, 0.08699999999999797, 0.09750000000000014, 0.14775000000000027, 0.1974999999999998, 0.10150000000000148, 0.22900000000000098, 0.15249999999999986, 0.10000000000000142, 0.1477499999999985], zp_timestamp='2025-12-24T18:41:00')
2025-12-24T20:42:42.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:42:43.067 [DEBUG] [Thread-308623] [transport.py] [_log()] starting thread (client mode): 0xf5770310
2025-12-24T20:42:43.067 [DEBUG] [Thread-308623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:42:43.067 [DEBUG] [Thread-308623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:42:43.067 [INFO] [Thread-308623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] client lang: <none>
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] server lang: <none>
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] kex follows: False
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] Compression: none
2025-12-24T20:42:43.127 [DEBUG] [Thread-308623] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:42:43.193 [DEBUG] [Thread-308623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:42:43.195 [DEBUG] [Thread-308623] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:42:43.196 [DEBUG] [Thread-308623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:42:43.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:42:43.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:42:43.249 [DEBUG] [Thread-308623] [transport.py] [_log()] userauth is OK
2025-12-24T20:42:43.249 [DEBUG] [Thread-308623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:42:43.249 [DEBUG] [Thread-308623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:42:43.250 [DEBUG] [Thread-308623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:42:43.250 [DEBUG] [Thread-308623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:42:43.265 [INFO] [Thread-308623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:42:43.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:42:43.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:42:44.147 [DEBUG] [Thread-308623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:42:44.147 [DEBUG] [Thread-308623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:42:44.148 [DEBUG] [Thread-308623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:42:44.148 [DEBUG] [Thread-308623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:42:44.156 [DEBUG] [Thread-308623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:42:44.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:42:44.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:42:44.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:42:44.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:42:44.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:42:44.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:42:44.191 [DEBUG] [Thread-308623] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:42:50.000 [DEBUG] [Thread-308625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:43:05.406 [DEBUG] [Thread-308626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:43:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:43:14.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:43:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:43:18.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 42, 31), 13.19, 41.9, 0.0, 38.46, 18.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:43:18.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:42:31
2025-12-24T20:43:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:43:18.617 [DEBUG] [Thread-308627] [transport.py] [_log()] starting thread (client mode): 0xf5771f90
2025-12-24T20:43:18.618 [DEBUG] [Thread-308627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:43:18.620 [DEBUG] [Thread-308627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:43:18.620 [INFO] [Thread-308627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] client lang: <none>
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] server lang: <none>
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] kex follows: False
2025-12-24T20:43:18.627 [DEBUG] [Thread-308627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:43:18.628 [DEBUG] [Thread-308627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:43:18.628 [DEBUG] [Thread-308627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:43:18.628 [DEBUG] [Thread-308627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:43:18.628 [DEBUG] [Thread-308627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:43:18.628 [DEBUG] [Thread-308627] [transport.py] [_log()] Compression: none
2025-12-24T20:43:18.628 [DEBUG] [Thread-308627] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:43:18.664 [DEBUG] [Thread-308627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:43:18.670 [DEBUG] [Thread-308627] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:43:18.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:43:18.674 [DEBUG] [Thread-308627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:43:18.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:43:18.676 [DEBUG] [Thread-308627] [transport.py] [_log()] userauth is OK
2025-12-24T20:43:18.676 [DEBUG] [Thread-308627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:43:18.676 [DEBUG] [Thread-308627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:43:18.676 [DEBUG] [Thread-308627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:43:18.676 [DEBUG] [Thread-308627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:43:18.693 [INFO] [Thread-308627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:43:18.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:43:19.251 [DEBUG] [Thread-308627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:43:19.251 [DEBUG] [Thread-308627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:43:19.252 [DEBUG] [Thread-308627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:43:19.291 [DEBUG] [Thread-308627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:43:19.292 [DEBUG] [Thread-308627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:43:19.294 [DEBUG] [Thread-308627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:43:19.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:43:19.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:43:19.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:43:19.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:43:19.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:43:19.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:43:19.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:43:19.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:43:19.324 [DEBUG] [Thread-308627] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:43:19.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:43:19.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.779926 -999.00  +18.80  30.79     47   +7.40 1 1 2 1 1     1    0 10.06 -50.80 ZNESW 25.2 30.8 156.8 35.1 19.3 -22.1 19.2 -21.7 18.9 -20.2 19.3 -21.2
2025-12-24T20:43:19.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:43:19.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:43:19.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.779926
2025-12-24T20:43:19.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:43:19.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:43:19.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:43:19.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:43:19.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:43:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:42:31', tmtdew=13.19, humidity=41.9, cloud=0.0, wind=38.46, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:42:32', seeing=1.5, atlas_timestamp='2025-12-24T18:43:05.606', atlas_cloud=1, atlas_rain=1, zp_data=[0.06925000000000026, 0.008250000000000313, 0.17925000000000146, 0.09049999999999869, 0.20650000000000013, 0.1302500000000002, 0.01699999999999946, 0.17825000000000202, 0.1144999999999996, 0.10099999999999909, 0.16225000000000023, 0.08200000000000074, 0.054999999999999716, 0.17724999999999902, 0.06449999999999889, 0.0730000000000004, 0.12924999999999898, 0.13949999999999996, 0.08099999999999952, 0.04724999999999824, 0.13099999999999845, 0.16774999999999807, 0.05925000000000047, 0.12875000000000014, 0.08699999999999797, 0.09750000000000014, 0.14775000000000027, 0.1974999999999998, 0.10150000000000148, 0.22900000000000098, 0.15249999999999986, 0.10000000000000142, 0.1477499999999985], zp_timestamp='2025-12-24T18:41:00')
2025-12-24T20:43:19.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:43:19.447 [DEBUG] [Thread-308630] [transport.py] [_log()] starting thread (client mode): 0xf5742170
2025-12-24T20:43:19.447 [DEBUG] [Thread-308630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:43:19.462 [DEBUG] [Thread-308630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:43:19.462 [INFO] [Thread-308630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] client lang: <none>
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] server lang: <none>
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] kex follows: False
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] Compression: none
2025-12-24T20:43:19.470 [DEBUG] [Thread-308630] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:43:19.525 [DEBUG] [Thread-308630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:43:19.525 [DEBUG] [Thread-308630] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:43:19.525 [DEBUG] [Thread-308630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:43:19.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:43:19.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:43:19.582 [DEBUG] [Thread-308630] [transport.py] [_log()] userauth is OK
2025-12-24T20:43:19.583 [DEBUG] [Thread-308630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:43:19.645 [DEBUG] [Thread-308630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:43:19.645 [DEBUG] [Thread-308630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:43:19.645 [DEBUG] [Thread-308630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:43:19.659 [INFO] [Thread-308630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:43:19.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:43:19.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:43:20.532 [DEBUG] [Thread-308630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:43:20.536 [DEBUG] [Thread-308630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:43:20.537 [DEBUG] [Thread-308630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:43:20.537 [DEBUG] [Thread-308630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:43:20.547 [DEBUG] [Thread-308630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:43:20.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:43:20.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:43:20.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
2025-12-24T20:43:20.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:43:20.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:43:20.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:43:20.604 [DEBUG] [Thread-308632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:43:20.604 [DEBUG] [Thread-308630] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:43:22.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:43:22.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:43:35.127 [DEBUG] [Thread-308633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:43:36.233 [DEBUG] [Thread-308634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:43:50.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:43:50.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:43:50.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:43:51.463 [DEBUG] [Thread-308635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:43:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 43, 17), 13.1, 42.15, 0.0, 37.76, 18.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:43:58.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:43:17
2025-12-24T20:43:59.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:43:59.819 [DEBUG] [Thread-308636] [transport.py] [_log()] starting thread (client mode): 0xf572e890
2025-12-24T20:43:59.820 [DEBUG] [Thread-308636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:43:59.822 [DEBUG] [Thread-308636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:43:59.822 [INFO] [Thread-308636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:43:59.832 [DEBUG] [Thread-308636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] client lang: <none>
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] server lang: <none>
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] kex follows: False
2025-12-24T20:43:59.833 [DEBUG] [Thread-308636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:43:59.835 [DEBUG] [Thread-308636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:43:59.835 [DEBUG] [Thread-308636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:43:59.835 [DEBUG] [Thread-308636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:43:59.835 [DEBUG] [Thread-308636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:43:59.835 [DEBUG] [Thread-308636] [transport.py] [_log()] Compression: none
2025-12-24T20:43:59.835 [DEBUG] [Thread-308636] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:43:59.987 [DEBUG] [Thread-308636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:43:59.994 [DEBUG] [Thread-308636] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:43:59.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:43:59.997 [DEBUG] [Thread-308636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:43:59.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:44:00.002 [DEBUG] [Thread-308636] [transport.py] [_log()] userauth is OK
2025-12-24T20:44:00.002 [DEBUG] [Thread-308636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:44:00.002 [DEBUG] [Thread-308636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:44:00.002 [DEBUG] [Thread-308636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:44:00.002 [DEBUG] [Thread-308636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:44:00.038 [INFO] [Thread-308636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:44:00.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:44:00.694 [DEBUG] [Thread-308636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:44:00.694 [DEBUG] [Thread-308636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:44:00.713 [DEBUG] [Thread-308636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:44:00.736 [DEBUG] [Thread-308636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:44:00.736 [DEBUG] [Thread-308636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:44:00.812 [DEBUG] [Thread-308636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:44:00.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:44:00.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:44:00.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:44:00.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:44:00.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:44:00.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:44:00.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:44:00.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:44:00.871 [DEBUG] [Thread-308636] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:44:00.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:44:00.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.780273 -999.00  +18.70  29.23     47   +7.30 1 1 1 1 1     1    0 10.25 -51.69 ZNESW 22.8 29.2 165.8 42.2 19.3 -22.1 19.1 -21.7 19.0 -20.2 19.2 -21.1
2025-12-24T20:44:00.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:44:00.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:44:00.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.780273
2025-12-24T20:44:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:44:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:44:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:44:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:44:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:44:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:43:17', tmtdew=13.1, humidity=42.15, cloud=0.0, wind=37.76, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:43:18', seeing=1.37, atlas_timestamp='2025-12-24T18:43:35.587', atlas_cloud=1, atlas_rain=1, zp_data=[0.06925000000000026, 0.008250000000000313, 0.17925000000000146, 0.09049999999999869, 0.20650000000000013, 0.1302500000000002, 0.01699999999999946, 0.17825000000000202, 0.1144999999999996, 0.10099999999999909, 0.16225000000000023, 0.08200000000000074, 0.054999999999999716, 0.17724999999999902, 0.06449999999999889, 0.0730000000000004, 0.12924999999999898, 0.13949999999999996, 0.08099999999999952, 0.04724999999999824, 0.13099999999999845, 0.16774999999999807, 0.05925000000000047, 0.12875000000000014, 0.08699999999999797, 0.09750000000000014, 0.14775000000000027, 0.1974999999999998, 0.10150000000000148, 0.22900000000000098, 0.15249999999999986, 0.10000000000000142, 0.1477499999999985], zp_timestamp='2025-12-24T18:41:00')
2025-12-24T20:44:01.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:44:01.047 [DEBUG] [Thread-308639] [transport.py] [_log()] starting thread (client mode): 0xf578bcd0
2025-12-24T20:44:01.048 [DEBUG] [Thread-308639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:44:01.061 [DEBUG] [Thread-308639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:44:01.061 [INFO] [Thread-308639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:44:01.068 [DEBUG] [Thread-308639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:44:01.068 [DEBUG] [Thread-308639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:44:01.068 [DEBUG] [Thread-308639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] client lang: <none>
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] server lang: <none>
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] kex follows: False
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] Compression: none
2025-12-24T20:44:01.069 [DEBUG] [Thread-308639] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:44:01.131 [DEBUG] [Thread-308639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:44:01.132 [DEBUG] [Thread-308639] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:44:01.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:44:01.186 [DEBUG] [Thread-308639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:44:01.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:44:01.195 [DEBUG] [Thread-308639] [transport.py] [_log()] userauth is OK
2025-12-24T20:44:01.195 [DEBUG] [Thread-308639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:44:01.195 [DEBUG] [Thread-308639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:44:01.195 [DEBUG] [Thread-308639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:44:01.195 [DEBUG] [Thread-308639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:44:01.209 [INFO] [Thread-308639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:44:01.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:44:01.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:44:02.115 [DEBUG] [Thread-308639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:44:02.116 [DEBUG] [Thread-308639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:44:02.122 [DEBUG] [Thread-308639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:44:02.122 [DEBUG] [Thread-308639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:44:02.131 [DEBUG] [Thread-308639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:44:02.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:44:02.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:44:02.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:44:02.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:44:02.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:44:02.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:44:02.168 [DEBUG] [Thread-308639] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:44:06.766 [DEBUG] [Thread-308641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:44:22.035 [DEBUG] [Thread-308642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:44:22.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:44:22.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:44:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:44:32.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:44:32.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:44:36.240 [DEBUG] [Thread-308643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:44:37.339 [DEBUG] [Thread-308644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:44:39.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 43, 57), 13.01, 42.6, 0.0, 40.04, 18.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:44:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:43:57
2025-12-24T20:44:40.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:44:40.611 [DEBUG] [Thread-308645] [transport.py] [_log()] starting thread (client mode): 0xf578bcd0
2025-12-24T20:44:40.613 [DEBUG] [Thread-308645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:44:40.619 [DEBUG] [Thread-308645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:44:40.619 [INFO] [Thread-308645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:44:40.623 [DEBUG] [Thread-308645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:44:40.623 [DEBUG] [Thread-308645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:44:40.623 [DEBUG] [Thread-308645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:44:40.623 [DEBUG] [Thread-308645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:44:40.623 [DEBUG] [Thread-308645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:44:40.623 [DEBUG] [Thread-308645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:44:40.623 [DEBUG] [Thread-308645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:44:40.624 [DEBUG] [Thread-308645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:44:40.624 [DEBUG] [Thread-308645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:44:40.624 [DEBUG] [Thread-308645] [transport.py] [_log()] client lang: <none>
2025-12-24T20:44:40.624 [DEBUG] [Thread-308645] [transport.py] [_log()] server lang: <none>
2025-12-24T20:44:40.624 [DEBUG] [Thread-308645] [transport.py] [_log()] kex follows: False
2025-12-24T20:44:40.624 [DEBUG] [Thread-308645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:44:40.626 [DEBUG] [Thread-308645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:44:40.626 [DEBUG] [Thread-308645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:44:40.626 [DEBUG] [Thread-308645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:44:40.626 [DEBUG] [Thread-308645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:44:40.626 [DEBUG] [Thread-308645] [transport.py] [_log()] Compression: none
2025-12-24T20:44:40.626 [DEBUG] [Thread-308645] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:44:40.673 [DEBUG] [Thread-308645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:44:40.680 [DEBUG] [Thread-308645] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:44:40.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:44:40.687 [DEBUG] [Thread-308645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:44:40.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:44:40.690 [DEBUG] [Thread-308645] [transport.py] [_log()] userauth is OK
2025-12-24T20:44:40.690 [DEBUG] [Thread-308645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:44:40.690 [DEBUG] [Thread-308645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:44:40.690 [DEBUG] [Thread-308645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:44:40.690 [DEBUG] [Thread-308645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:44:40.727 [INFO] [Thread-308645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:44:40.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:44:41.391 [DEBUG] [Thread-308645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:44:41.391 [DEBUG] [Thread-308645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:44:41.392 [DEBUG] [Thread-308645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:44:41.432 [DEBUG] [Thread-308645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:44:41.432 [DEBUG] [Thread-308645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:44:41.435 [DEBUG] [Thread-308645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:44:41.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:44:41.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:44:41.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:44:41.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:44:41.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:44:41.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:44:41.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:44:41.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:44:41.459 [DEBUG] [Thread-308645] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:44:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:44:41.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.780620 -999.00  +18.70  34.48     48   +7.50 1 1 2 1 1     1    0 10.31 -59.05 ZNESW 31.5 34.5 169.0 44.0 19.3 -22.2 19.1 -21.9 18.9 -20.3 19.2 -21.2
2025-12-24T20:44:41.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:44:41.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:44:41.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.780620
2025-12-24T20:44:41.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:44:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:44:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:44:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:44:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:44:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:43:57', tmtdew=13.01, humidity=42.6, cloud=0.0, wind=40.04, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:43:58', seeing=1.56, atlas_timestamp='2025-12-24T18:44:05.568', atlas_cloud=1, atlas_rain=1, zp_data=[0.06925000000000026, 0.008250000000000313, 0.17925000000000146, 0.09049999999999869, 0.20650000000000013, 0.1302500000000002, 0.01699999999999946, 0.17825000000000202, 0.1144999999999996, 0.10099999999999909, 0.16225000000000023, 0.08200000000000074, 0.054999999999999716, 0.17724999999999902, 0.06449999999999889, 0.0730000000000004, 0.12924999999999898, 0.13949999999999996, 0.08099999999999952, 0.04724999999999824, 0.13099999999999845, 0.16774999999999807, 0.05925000000000047, 0.12875000000000014, 0.08699999999999797, 0.09750000000000014, 0.14775000000000027, 0.1974999999999998, 0.10150000000000148, 0.22900000000000098, 0.15249999999999986, 0.10000000000000142, 0.1477499999999985], zp_timestamp='2025-12-24T18:41:00')
2025-12-24T20:44:41.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:44:41.583 [DEBUG] [Thread-308648] [transport.py] [_log()] starting thread (client mode): 0xf5771ba0
2025-12-24T20:44:41.584 [DEBUG] [Thread-308648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:44:41.598 [DEBUG] [Thread-308648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:44:41.598 [INFO] [Thread-308648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] client lang: <none>
2025-12-24T20:44:41.605 [DEBUG] [Thread-308648] [transport.py] [_log()] server lang: <none>
2025-12-24T20:44:41.606 [DEBUG] [Thread-308648] [transport.py] [_log()] kex follows: False
2025-12-24T20:44:41.606 [DEBUG] [Thread-308648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:44:41.606 [DEBUG] [Thread-308648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:44:41.606 [DEBUG] [Thread-308648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:44:41.606 [DEBUG] [Thread-308648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:44:41.606 [DEBUG] [Thread-308648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:44:41.606 [DEBUG] [Thread-308648] [transport.py] [_log()] Compression: none
2025-12-24T20:44:41.606 [DEBUG] [Thread-308648] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:44:41.662 [DEBUG] [Thread-308648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:44:41.662 [DEBUG] [Thread-308648] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:44:41.663 [DEBUG] [Thread-308648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:44:41.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:44:41.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:44:41.719 [DEBUG] [Thread-308648] [transport.py] [_log()] userauth is OK
2025-12-24T20:44:41.720 [DEBUG] [Thread-308648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:44:41.720 [DEBUG] [Thread-308648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:44:41.720 [DEBUG] [Thread-308648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:44:41.720 [DEBUG] [Thread-308648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:44:41.739 [INFO] [Thread-308648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:44:41.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:44:41.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:44:42.586 [DEBUG] [Thread-308648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:44:42.588 [DEBUG] [Thread-308648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:44:42.629 [DEBUG] [Thread-308648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:44:42.630 [DEBUG] [Thread-308648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:44:42.638 [DEBUG] [Thread-308648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:44:42.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:44:42.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:44:42.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
2025-12-24T20:44:42.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:44:42.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:44:42.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:44:42.734 [DEBUG] [Thread-308648] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:44:53.088 [DEBUG] [Thread-308650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:45:09.078 [DEBUG] [Thread-308651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:45:12.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:45:13.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:45:13.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:45:23.028 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:45:23.074 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:45:24.623 [DEBUG] [Thread-308652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:45:29.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 43, 57), 13.01, 42.6, 0.0, 40.04, 18.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:45:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:43:57
2025-12-24T20:45:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:45:33.034 [DEBUG] [Thread-308653] [transport.py] [_log()] starting thread (client mode): 0xf5771600
2025-12-24T20:45:33.036 [DEBUG] [Thread-308653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:45:33.038 [DEBUG] [Thread-308653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:45:33.038 [INFO] [Thread-308653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] client lang: <none>
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] server lang: <none>
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] kex follows: False
2025-12-24T20:45:33.045 [DEBUG] [Thread-308653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:45:33.046 [DEBUG] [Thread-308653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:45:33.047 [DEBUG] [Thread-308653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:45:33.047 [DEBUG] [Thread-308653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:45:33.047 [DEBUG] [Thread-308653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:45:33.047 [DEBUG] [Thread-308653] [transport.py] [_log()] Compression: none
2025-12-24T20:45:33.047 [DEBUG] [Thread-308653] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:45:33.197 [DEBUG] [Thread-308653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:45:33.210 [DEBUG] [Thread-308653] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:45:33.212 [DEBUG] [Thread-308653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:45:33.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:45:33.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:45:33.223 [DEBUG] [Thread-308653] [transport.py] [_log()] userauth is OK
2025-12-24T20:45:33.225 [DEBUG] [Thread-308653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:45:33.225 [DEBUG] [Thread-308653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:45:33.225 [DEBUG] [Thread-308653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:45:33.225 [DEBUG] [Thread-308653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:45:33.258 [INFO] [Thread-308653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:45:33.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:45:33.931 [DEBUG] [Thread-308653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:45:34.032 [DEBUG] [Thread-308653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:45:34.041 [DEBUG] [Thread-308653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:45:34.041 [DEBUG] [Thread-308653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:45:34.041 [DEBUG] [Thread-308653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:45:34.044 [DEBUG] [Thread-308653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:45:34.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:45:34.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:45:34.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:45:34.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:45:34.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:45:34.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:45:34.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:45:34.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:45:34.069 [DEBUG] [Thread-308653] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:45:34.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:45:34.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.780967 -999.00  +18.70  29.99     48   +7.50 1 1 1 1 1     1    0 10.40 -54.90 ZNESW 27.7 30.0 155.4 39.6 19.2 -22.1 19.1 -21.7 18.9 -20.2 19.2 -21.1
2025-12-24T20:45:34.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:45:34.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:45:34.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.780967
2025-12-24T20:45:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:45:34.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:45:34.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:45:34.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:45:34.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:45:34.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:43:57', tmtdew=13.01, humidity=42.6, cloud=0.0, wind=40.04, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:44:44', seeing=1.49, atlas_timestamp='2025-12-24T18:44:35.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.06925000000000026, 0.008250000000000313, 0.17925000000000146, 0.09049999999999869, 0.20650000000000013, 0.1302500000000002, 0.01699999999999946, 0.17825000000000202, 0.1144999999999996, 0.10099999999999909, 0.16225000000000023, 0.08200000000000074, 0.054999999999999716, 0.17724999999999902, 0.06449999999999889, 0.0730000000000004, 0.12924999999999898, 0.13949999999999996, 0.08099999999999952, 0.04724999999999824, 0.13099999999999845, 0.16774999999999807, 0.05925000000000047, 0.12875000000000014, 0.08699999999999797, 0.09750000000000014, 0.14775000000000027, 0.1974999999999998, 0.10150000000000148, 0.22900000000000098, 0.15249999999999986, 0.10000000000000142, 0.1477499999999985], zp_timestamp='2025-12-24T18:41:00')
2025-12-24T20:45:34.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:45:34.216 [DEBUG] [Thread-308656] [transport.py] [_log()] starting thread (client mode): 0xf5742110
2025-12-24T20:45:34.216 [DEBUG] [Thread-308656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:45:34.228 [DEBUG] [Thread-308656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:45:34.228 [INFO] [Thread-308656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] client lang: <none>
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] server lang: <none>
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] kex follows: False
2025-12-24T20:45:34.236 [DEBUG] [Thread-308656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:45:34.237 [DEBUG] [Thread-308656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:45:34.237 [DEBUG] [Thread-308656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:45:34.237 [DEBUG] [Thread-308656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:45:34.237 [DEBUG] [Thread-308656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:45:34.237 [DEBUG] [Thread-308656] [transport.py] [_log()] Compression: none
2025-12-24T20:45:34.411 [DEBUG] [Thread-308656] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:45:34.430 [DEBUG] [Thread-308656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:45:34.432 [DEBUG] [Thread-308656] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:45:34.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:45:34.433 [DEBUG] [Thread-308656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:45:34.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:45:34.488 [DEBUG] [Thread-308656] [transport.py] [_log()] userauth is OK
2025-12-24T20:45:34.488 [DEBUG] [Thread-308656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:45:34.488 [DEBUG] [Thread-308656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:45:34.488 [DEBUG] [Thread-308656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:45:34.488 [DEBUG] [Thread-308656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:45:34.504 [INFO] [Thread-308656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:45:34.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:45:34.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:45:35.329 [DEBUG] [Thread-308656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:45:35.329 [DEBUG] [Thread-308656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:45:35.592 [DEBUG] [Thread-308656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:45:35.592 [DEBUG] [Thread-308656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:45:35.601 [DEBUG] [Thread-308656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:45:35.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:45:35.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:45:35.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:45:35.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:45:35.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:45:35.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:45:35.682 [DEBUG] [Thread-308656] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:45:37.810 [DEBUG] [Thread-308658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:45:40.023 [DEBUG] [Thread-308659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:45:56.044 [DEBUG] [Thread-308660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:46:05.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:46:05.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:46: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
2025-12-24T20:46:11.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 44, 43), 12.84, 42.69, 0.0, 38.92, 18.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:46:11.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:44:43
2025-12-24T20:46:11.482 [DEBUG] [Thread-308661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:46:11.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:46:11.836 [DEBUG] [Thread-308662] [transport.py] [_log()] starting thread (client mode): 0xf57aad40
2025-12-24T20:46:11.836 [DEBUG] [Thread-308662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:46:11.837 [DEBUG] [Thread-308662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:46:11.838 [INFO] [Thread-308662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:46:11.843 [DEBUG] [Thread-308662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:46:11.843 [DEBUG] [Thread-308662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] client lang: <none>
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] server lang: <none>
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] kex follows: False
2025-12-24T20:46:11.844 [DEBUG] [Thread-308662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:46:11.845 [DEBUG] [Thread-308662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:46:11.845 [DEBUG] [Thread-308662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:46:11.845 [DEBUG] [Thread-308662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:46:11.845 [DEBUG] [Thread-308662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:46:11.845 [DEBUG] [Thread-308662] [transport.py] [_log()] Compression: none
2025-12-24T20:46:11.845 [DEBUG] [Thread-308662] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:46:11.884 [DEBUG] [Thread-308662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:46:11.890 [DEBUG] [Thread-308662] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:46:11.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:46:11.893 [DEBUG] [Thread-308662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:46:11.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:46:11.900 [DEBUG] [Thread-308662] [transport.py] [_log()] userauth is OK
2025-12-24T20:46:11.900 [DEBUG] [Thread-308662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:46:11.900 [DEBUG] [Thread-308662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:46:11.900 [DEBUG] [Thread-308662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:46:11.900 [DEBUG] [Thread-308662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:46:11.941 [INFO] [Thread-308662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:46:11.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:46:12.550 [DEBUG] [Thread-308662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:46:12.551 [DEBUG] [Thread-308662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:46:12.552 [DEBUG] [Thread-308662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:46:12.592 [DEBUG] [Thread-308662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:46:12.592 [DEBUG] [Thread-308662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:46:12.597 [DEBUG] [Thread-308662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:46:12.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:46:12.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:46:12.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:46:12.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:46:12.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:46:12.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:46:12.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:46:12.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:46:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:46:12.627 [DEBUG] [Thread-308662] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:46:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.782009 -999.00  +18.60  22.47     48   +7.50 1 1 1 1 1     1    0 10.17 -57.16 ZNESW 30.5 22.5 170.2 34.2 19.1 -22.0 19.1 -21.8 18.9 -20.1 19.2 -21.0
2025-12-24T20:46:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:46:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:46:12.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.782009
2025-12-24T20:46:12.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:46:12.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:46:12.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:46:12.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:46:12.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:46:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:44:43', tmtdew=12.84, humidity=42.69, cloud=0.0, wind=38.92, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:45:56', seeing=1.36, atlas_timestamp='2025-12-24T18:46:05.578', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:43:00')
2025-12-24T20:46:12.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:46:12.750 [DEBUG] [Thread-308665] [transport.py] [_log()] starting thread (client mode): 0xf572e170
2025-12-24T20:46:12.750 [DEBUG] [Thread-308665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:46:12.764 [DEBUG] [Thread-308665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:46:12.765 [INFO] [Thread-308665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:46:12.772 [DEBUG] [Thread-308665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] client lang: <none>
2025-12-24T20:46:12.773 [DEBUG] [Thread-308665] [transport.py] [_log()] server lang: <none>
2025-12-24T20:46:12.774 [DEBUG] [Thread-308665] [transport.py] [_log()] kex follows: False
2025-12-24T20:46:12.774 [DEBUG] [Thread-308665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:46:12.774 [DEBUG] [Thread-308665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:46:12.774 [DEBUG] [Thread-308665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:46:12.774 [DEBUG] [Thread-308665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:46:12.774 [DEBUG] [Thread-308665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:46:12.774 [DEBUG] [Thread-308665] [transport.py] [_log()] Compression: none
2025-12-24T20:46:12.774 [DEBUG] [Thread-308665] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:46:12.832 [DEBUG] [Thread-308665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:46:12.832 [DEBUG] [Thread-308665] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:46:12.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:46:12.833 [DEBUG] [Thread-308665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:46:12.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:46:12.889 [DEBUG] [Thread-308665] [transport.py] [_log()] userauth is OK
2025-12-24T20:46:12.889 [DEBUG] [Thread-308665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:46:12.889 [DEBUG] [Thread-308665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:46:12.889 [DEBUG] [Thread-308665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:46:12.889 [DEBUG] [Thread-308665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:46:12.903 [INFO] [Thread-308665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:46:12.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:46:12.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:46:13.690 [DEBUG] [Thread-308665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:46:13.690 [DEBUG] [Thread-308665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:46:13.737 [DEBUG] [Thread-308665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:46:13.737 [DEBUG] [Thread-308665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:46:13.746 [DEBUG] [Thread-308665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:46:13.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:46:13.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:46:13.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:46:13.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:46:13.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:46:13.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:46:13.780 [DEBUG] [Thread-308665] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:46:23.386 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:46:23.418 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:46:26.712 [DEBUG] [Thread-308667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:46:38.207 [DEBUG] [Thread-308668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:46:42.170 [DEBUG] [Thread-308669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:46:43.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:46:43.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:46:44.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:46:49.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 45, 55), 12.81, 43.23, 0.0, 35.69, 18.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:46:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:45:55
2025-12-24T20:46:49.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:46:49.904 [DEBUG] [Thread-308670] [transport.py] [_log()] starting thread (client mode): 0xf5772170
2025-12-24T20:46:49.905 [DEBUG] [Thread-308670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:46:49.906 [DEBUG] [Thread-308670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:46:49.906 [INFO] [Thread-308670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] client lang: <none>
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] server lang: <none>
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] kex follows: False
2025-12-24T20:46:49.913 [DEBUG] [Thread-308670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:46:49.914 [DEBUG] [Thread-308670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:46:49.914 [DEBUG] [Thread-308670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:46:49.914 [DEBUG] [Thread-308670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:46:49.914 [DEBUG] [Thread-308670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:46:49.914 [DEBUG] [Thread-308670] [transport.py] [_log()] Compression: none
2025-12-24T20:46:49.914 [DEBUG] [Thread-308670] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:46:49.965 [DEBUG] [Thread-308670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:46:49.970 [DEBUG] [Thread-308670] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:46:49.972 [DEBUG] [Thread-308670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:46:49.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:46:49.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:46:49.976 [DEBUG] [Thread-308670] [transport.py] [_log()] userauth is OK
2025-12-24T20:46:49.977 [DEBUG] [Thread-308670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:46:49.977 [DEBUG] [Thread-308670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:46:49.977 [DEBUG] [Thread-308670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:46:49.977 [DEBUG] [Thread-308670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:46:49.997 [INFO] [Thread-308670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:46:50.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:46:50.652 [DEBUG] [Thread-308670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:46:50.652 [DEBUG] [Thread-308670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:46:50.697 [DEBUG] [Thread-308670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:46:50.697 [DEBUG] [Thread-308670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:46:50.698 [DEBUG] [Thread-308670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:46:50.701 [DEBUG] [Thread-308670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:46:50.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:46:50.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:46:50.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:46:50.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:46:50.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:46:50.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:46:50.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:46:50.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:46:50.731 [DEBUG] [Thread-308670] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:46:50.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:46:50.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.782356 -999.00  +18.60  22.95     48   +7.50 1 1 1 1 1     1    0 10.23 -59.39 ZNESW 22.7 22.9 167.4 34.0 19.2 -21.9 19.1 -21.9 18.9 -20.1 19.1 -20.9
2025-12-24T20:46:50.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:46:50.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:46:50.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.782356
2025-12-24T20:46:50.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:46:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:46:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:46:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:46:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:46:50.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:45:55', tmtdew=12.81, humidity=43.23, cloud=0.0, wind=35.69, temperature=18.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:46:42', seeing=1.37, atlas_timestamp='2025-12-24T18:46:35.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:43:00')
2025-12-24T20:46:50.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:46:50.924 [DEBUG] [Thread-308673] [transport.py] [_log()] starting thread (client mode): 0xfabc56f0
2025-12-24T20:46:50.924 [DEBUG] [Thread-308673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:46:50.942 [DEBUG] [Thread-308673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:46:50.942 [INFO] [Thread-308673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:46:50.950 [DEBUG] [Thread-308673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:46:50.950 [DEBUG] [Thread-308673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] client lang: <none>
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] server lang: <none>
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] kex follows: False
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] Compression: none
2025-12-24T20:46:50.951 [DEBUG] [Thread-308673] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:46:51.008 [DEBUG] [Thread-308673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:46:51.008 [DEBUG] [Thread-308673] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:46:51.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:46:51.008 [DEBUG] [Thread-308673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:46:51.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:46:51.068 [DEBUG] [Thread-308673] [transport.py] [_log()] userauth is OK
2025-12-24T20:46:51.068 [DEBUG] [Thread-308673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:46:51.068 [DEBUG] [Thread-308673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:46:51.068 [DEBUG] [Thread-308673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:46:51.068 [DEBUG] [Thread-308673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:46:51.082 [INFO] [Thread-308673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:46:51.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:46:51.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:46:51.875 [DEBUG] [Thread-308673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:46:51.875 [DEBUG] [Thread-308673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:46:51.923 [DEBUG] [Thread-308673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:46:51.923 [DEBUG] [Thread-308673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:46:51.932 [DEBUG] [Thread-308673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:46:51.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:46:51.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:46:51.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:46:51.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:46:51.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:46:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:46:51.969 [DEBUG] [Thread-308673] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:46:57.304 [DEBUG] [Thread-308675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:47:12.582 [DEBUG] [Thread-308676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:47:22.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:47:22.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:47:22.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:47:23.639 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:47:23.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:47:27.882 [DEBUG] [Thread-308677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:47:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 46, 41), 12.76, 43.4, 0.0, 39.68, 18.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:47:34.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:46:41
2025-12-24T20:47:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:47:37.408 [DEBUG] [Thread-308678] [transport.py] [_log()] starting thread (client mode): 0xf572dba0
2025-12-24T20:47:37.410 [DEBUG] [Thread-308678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:47:37.413 [DEBUG] [Thread-308678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:47:37.413 [INFO] [Thread-308678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:47:37.425 [DEBUG] [Thread-308678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:47:37.425 [DEBUG] [Thread-308678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:47:37.425 [DEBUG] [Thread-308678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:47:37.425 [DEBUG] [Thread-308678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] client lang: <none>
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] server lang: <none>
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] kex follows: False
2025-12-24T20:47:37.426 [DEBUG] [Thread-308678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:47:37.428 [DEBUG] [Thread-308678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:47:37.428 [DEBUG] [Thread-308678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:47:37.429 [DEBUG] [Thread-308678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:47:37.429 [DEBUG] [Thread-308678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:47:37.429 [DEBUG] [Thread-308678] [transport.py] [_log()] Compression: none
2025-12-24T20:47:37.429 [DEBUG] [Thread-308678] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:47:37.543 [DEBUG] [Thread-308678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:47:37.553 [DEBUG] [Thread-308678] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:47:37.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:47:37.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:47:37.566 [DEBUG] [Thread-308678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:47:37.567 [DEBUG] [Thread-308678] [transport.py] [_log()] userauth is OK
2025-12-24T20:47:37.568 [DEBUG] [Thread-308678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:47:37.568 [DEBUG] [Thread-308678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:47:37.568 [DEBUG] [Thread-308678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:47:37.568 [DEBUG] [Thread-308678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:47:37.600 [INFO] [Thread-308678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:47:37.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:47:38.239 [DEBUG] [Thread-308678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:47:38.239 [DEBUG] [Thread-308678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:47:38.240 [DEBUG] [Thread-308678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:47:38.281 [DEBUG] [Thread-308678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:47:38.281 [DEBUG] [Thread-308678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:47:38.283 [DEBUG] [Thread-308678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:47:38.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:47:38.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:47:38.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:47:38.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:47:38.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:47:38.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:47:38.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:47:38.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:47:38.310 [DEBUG] [Thread-308678] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:47:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:47:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.782703 -999.00  +18.60  23.22     48   +7.50 1 1 1 1 1     0    0 10.17 -56.86 ZNESW 24.0 23.2 167.4 28.9 19.1 -22.1 19.1 -21.5 18.9 -20.1 19.2 -21.1
2025-12-24T20:47:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:47:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:47:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.782703
2025-12-24T20:47:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:47:38.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:47:38.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:47:38.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:47:38.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:47:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:46:41', tmtdew=12.76, humidity=43.4, cloud=0.0, wind=39.68, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:46:42', seeing=1.37, atlas_timestamp='2025-12-24T18:47:05.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:43:00')
2025-12-24T20:47:38.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:47:38.911 [DEBUG] [Thread-308681] [transport.py] [_log()] starting thread (client mode): 0xf572d8d0
2025-12-24T20:47:38.912 [DEBUG] [Thread-308681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:47:38.913 [DEBUG] [Thread-308681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:47:38.913 [INFO] [Thread-308681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] client lang: <none>
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] server lang: <none>
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] kex follows: False
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:47:38.921 [DEBUG] [Thread-308681] [transport.py] [_log()] Compression: none
2025-12-24T20:47:38.922 [DEBUG] [Thread-308681] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:47:38.985 [DEBUG] [Thread-308681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:47:38.987 [DEBUG] [Thread-308681] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:47:38.987 [DEBUG] [Thread-308681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:47:38.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:47:38.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:47:39.042 [DEBUG] [Thread-308681] [transport.py] [_log()] userauth is OK
2025-12-24T20:47:39.042 [DEBUG] [Thread-308681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:47:39.042 [DEBUG] [Thread-308681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:47:39.042 [DEBUG] [Thread-308681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:47:39.042 [DEBUG] [Thread-308681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:47:39.058 [INFO] [Thread-308681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:47:39.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:47:39.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:47:39.122 [DEBUG] [Thread-308683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:47:39.901 [DEBUG] [Thread-308681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:47:39.901 [DEBUG] [Thread-308681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:47:39.949 [DEBUG] [Thread-308681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:47:39.949 [DEBUG] [Thread-308681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:47:39.958 [DEBUG] [Thread-308681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:47:39.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:47:39.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:47:39.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:47:39.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:47:39.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:47:39.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:47:40.095 [DEBUG] [Thread-308681] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:47:43.320 [DEBUG] [Thread-308684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:47:58.875 [DEBUG] [Thread-308685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:48:10.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:48:10.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:48:10.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:48:14.205 [DEBUG] [Thread-308686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:48:14.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 47, 21), 12.74, 43.45, 0.0, 36.79, 18.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:48:14.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:47:21
2025-12-24T20:48:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:48:17.344 [DEBUG] [Thread-308687] [transport.py] [_log()] starting thread (client mode): 0xf57400a0
2025-12-24T20:48:17.346 [DEBUG] [Thread-308687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:48:17.347 [DEBUG] [Thread-308687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:48:17.349 [INFO] [Thread-308687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:48:17.355 [DEBUG] [Thread-308687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:48:17.355 [DEBUG] [Thread-308687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:48:17.355 [DEBUG] [Thread-308687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:48:17.355 [DEBUG] [Thread-308687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] client lang: <none>
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] server lang: <none>
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] kex follows: False
2025-12-24T20:48:17.356 [DEBUG] [Thread-308687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:48:17.357 [DEBUG] [Thread-308687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:48:17.357 [DEBUG] [Thread-308687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:48:17.357 [DEBUG] [Thread-308687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:48:17.357 [DEBUG] [Thread-308687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:48:17.357 [DEBUG] [Thread-308687] [transport.py] [_log()] Compression: none
2025-12-24T20:48:17.357 [DEBUG] [Thread-308687] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:48:17.406 [DEBUG] [Thread-308687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:48:17.414 [DEBUG] [Thread-308687] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:48:17.416 [DEBUG] [Thread-308687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:48:17.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:48:17.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:48:17.423 [DEBUG] [Thread-308687] [transport.py] [_log()] userauth is OK
2025-12-24T20:48:17.424 [DEBUG] [Thread-308687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:48:17.424 [DEBUG] [Thread-308687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:48:17.424 [DEBUG] [Thread-308687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:48:17.424 [DEBUG] [Thread-308687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:48:17.448 [INFO] [Thread-308687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:48:17.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:48:18.083 [DEBUG] [Thread-308687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:48:18.083 [DEBUG] [Thread-308687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:48:18.084 [DEBUG] [Thread-308687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:48:18.084 [DEBUG] [Thread-308687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:48:18.084 [DEBUG] [Thread-308687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:48:18.086 [DEBUG] [Thread-308687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:48:18.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:48:18.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:48:18.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:48:18.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:48:18.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:48:18.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:48:18.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:48:18.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:48:18.115 [DEBUG] [Thread-308687] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:48:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:48:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.783051 -999.00  +18.60  19.66     48   +7.50 1 1 1 1 1     0    0 10.07 -58.89 ZNESW 23.8 19.7 163.8 31.2 19.2 -22.0 19.0 -21.6 18.8 -20.2 19.2 -21.1
2025-12-24T20:48:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:48:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:48:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.783051
2025-12-24T20:48:18.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:48:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:48:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:48:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:48:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:48:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:47:21', tmtdew=12.74, humidity=43.45, cloud=0.0, wind=36.79, temperature=18.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:47:23', seeing=1.28, atlas_timestamp='2025-12-24T18:47:35.606', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:43:00')
2025-12-24T20:48:18.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:48:18.409 [DEBUG] [Thread-308690] [transport.py] [_log()] starting thread (client mode): 0xf57bc940
2025-12-24T20:48:18.410 [DEBUG] [Thread-308690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:48:18.424 [DEBUG] [Thread-308690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:48:18.424 [INFO] [Thread-308690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:48:18.431 [DEBUG] [Thread-308690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:48:18.431 [DEBUG] [Thread-308690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:48:18.431 [DEBUG] [Thread-308690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:48:18.431 [DEBUG] [Thread-308690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:48:18.431 [DEBUG] [Thread-308690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:48:18.431 [DEBUG] [Thread-308690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] client lang: <none>
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] server lang: <none>
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] kex follows: False
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] Compression: none
2025-12-24T20:48:18.432 [DEBUG] [Thread-308690] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:48:18.489 [DEBUG] [Thread-308690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:48:18.489 [DEBUG] [Thread-308690] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:48:18.489 [DEBUG] [Thread-308690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:48:18.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:48:18.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:48:18.546 [DEBUG] [Thread-308690] [transport.py] [_log()] userauth is OK
2025-12-24T20:48:18.547 [DEBUG] [Thread-308690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:48:18.547 [DEBUG] [Thread-308690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:48:18.547 [DEBUG] [Thread-308690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:48:18.547 [DEBUG] [Thread-308690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:48:18.560 [INFO] [Thread-308690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:48:18.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:48:18.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:48:19.385 [DEBUG] [Thread-308690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:48:19.386 [DEBUG] [Thread-308690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:48:19.433 [DEBUG] [Thread-308690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:48:19.433 [DEBUG] [Thread-308690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:48:19.441 [DEBUG] [Thread-308690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:48:19.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:48:19.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')
2025-12-24T20:48:19.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:48:19.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:48:19.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:48:19.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:48:19.485 [DEBUG] [Thread-308690] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:48:23.855 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:48:23.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:48:29.668 [DEBUG] [Thread-308692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:48:39.629 [DEBUG] [Thread-308693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:48:45.174 [DEBUG] [Thread-308694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:48:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:48:49.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:48:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:48:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 48, 19), 12.7, 43.57, 0.0, 36.65, 18.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:48:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:48:19
2025-12-24T20:48:52.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:48:52.606 [DEBUG] [Thread-308695] [transport.py] [_log()] starting thread (client mode): 0xf57bdab0
2025-12-24T20:48:52.608 [DEBUG] [Thread-308695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:48:52.608 [DEBUG] [Thread-308695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:48:52.608 [INFO] [Thread-308695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] client lang: <none>
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] server lang: <none>
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] kex follows: False
2025-12-24T20:48:52.616 [DEBUG] [Thread-308695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:48:52.617 [DEBUG] [Thread-308695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:48:52.617 [DEBUG] [Thread-308695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:48:52.617 [DEBUG] [Thread-308695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:48:52.617 [DEBUG] [Thread-308695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:48:52.617 [DEBUG] [Thread-308695] [transport.py] [_log()] Compression: none
2025-12-24T20:48:52.617 [DEBUG] [Thread-308695] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:48:52.695 [DEBUG] [Thread-308695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:48:52.741 [DEBUG] [Thread-308695] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:48:52.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:48:52.749 [DEBUG] [Thread-308695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:48:52.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:48:52.759 [DEBUG] [Thread-308695] [transport.py] [_log()] userauth is OK
2025-12-24T20:48:52.760 [DEBUG] [Thread-308695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:48:52.760 [DEBUG] [Thread-308695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:48:52.760 [DEBUG] [Thread-308695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:48:52.760 [DEBUG] [Thread-308695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:48:52.790 [INFO] [Thread-308695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:48:52.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:48:53.467 [DEBUG] [Thread-308695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:48:53.590 [DEBUG] [Thread-308695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:48:53.591 [DEBUG] [Thread-308695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:48:53.591 [DEBUG] [Thread-308695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:48:53.591 [DEBUG] [Thread-308695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:48:53.594 [DEBUG] [Thread-308695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:48:53.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:48:53.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:48:53.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:48:53.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:48:53.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:48:53.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:48:53.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:48:53.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:48:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:48:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.783398 -999.00  +18.60  27.72     48   +7.50 1 1 1 1 1     0    0 10.03 -59.94 ZNESW 22.0 27.7 172.6 35.2 19.1 -22.1 19.0 -21.8 18.9 -20.2 19.1 -20.9
2025-12-24T20:48:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:48:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:48:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.783398
2025-12-24T20:48:53.629 [DEBUG] [Thread-308695] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:48:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:48:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:48:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:48:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:48:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:48:53.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:48:19', tmtdew=12.7, humidity=43.57, cloud=0.0, wind=36.65, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:48:20', seeing=1.17, atlas_timestamp='2025-12-24T18:48:05.587', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:47:00')
2025-12-24T20:48:53.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:48:53.758 [DEBUG] [Thread-308698] [transport.py] [_log()] starting thread (client mode): 0xf5772e90
2025-12-24T20:48:53.758 [DEBUG] [Thread-308698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:48:53.773 [DEBUG] [Thread-308698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:48:53.773 [INFO] [Thread-308698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:48:53.780 [DEBUG] [Thread-308698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:48:53.780 [DEBUG] [Thread-308698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:48:53.780 [DEBUG] [Thread-308698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:48:53.780 [DEBUG] [Thread-308698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] client lang: <none>
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] server lang: <none>
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] kex follows: False
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:48:53.781 [DEBUG] [Thread-308698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:48:53.796 [DEBUG] [Thread-308698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:48:53.796 [DEBUG] [Thread-308698] [transport.py] [_log()] Compression: none
2025-12-24T20:48:53.796 [DEBUG] [Thread-308698] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:48:54.025 [DEBUG] [Thread-308698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:48:54.029 [DEBUG] [Thread-308698] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:48:54.030 [DEBUG] [Thread-308698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:48:54.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:48:54.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:48:54.083 [DEBUG] [Thread-308698] [transport.py] [_log()] userauth is OK
2025-12-24T20:48:54.083 [DEBUG] [Thread-308698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:48:54.083 [DEBUG] [Thread-308698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:48:54.083 [DEBUG] [Thread-308698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:48:54.083 [DEBUG] [Thread-308698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:48:54.101 [INFO] [Thread-308698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:48:54.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:48:54.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:48:55.026 [DEBUG] [Thread-308698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:48:55.026 [DEBUG] [Thread-308698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:48:55.027 [DEBUG] [Thread-308698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:48:55.027 [DEBUG] [Thread-308698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:48:55.036 [DEBUG] [Thread-308698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:48:55.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:48:55.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:48:55.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:48:55.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:48:55.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:48:55.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:48:55.078 [DEBUG] [Thread-308698] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:49:00.309 [DEBUG] [Thread-308700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:49:16.224 [DEBUG] [Thread-308701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:49:24.077 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:49:24.088 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:49:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:49:25.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:49:25.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:49:28.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 49, 5), 12.64, 43.73, 0.0, 39.79, 18.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:49:28.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:49:05
2025-12-24T20:49:28.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:49:28.735 [DEBUG] [Thread-308702] [transport.py] [_log()] starting thread (client mode): 0xf5773130
2025-12-24T20:49:28.736 [DEBUG] [Thread-308702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:49:28.746 [DEBUG] [Thread-308702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:49:28.746 [INFO] [Thread-308702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] client lang: <none>
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] server lang: <none>
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] kex follows: False
2025-12-24T20:49:28.753 [DEBUG] [Thread-308702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:49:28.754 [DEBUG] [Thread-308702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:49:28.754 [DEBUG] [Thread-308702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:49:28.754 [DEBUG] [Thread-308702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:49:28.754 [DEBUG] [Thread-308702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:49:28.754 [DEBUG] [Thread-308702] [transport.py] [_log()] Compression: none
2025-12-24T20:49:28.754 [DEBUG] [Thread-308702] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:49:28.781 [DEBUG] [Thread-308702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:49:28.784 [DEBUG] [Thread-308702] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:49:28.785 [DEBUG] [Thread-308702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:49:28.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:49:28.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:49:28.788 [DEBUG] [Thread-308702] [transport.py] [_log()] userauth is OK
2025-12-24T20:49:28.788 [DEBUG] [Thread-308702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:49:28.789 [DEBUG] [Thread-308702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:49:28.789 [DEBUG] [Thread-308702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:49:28.789 [DEBUG] [Thread-308702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:49:28.818 [INFO] [Thread-308702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:49:28.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:49:29.444 [DEBUG] [Thread-308702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:49:29.444 [DEBUG] [Thread-308702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:49:29.476 [DEBUG] [Thread-308702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:49:29.487 [DEBUG] [Thread-308702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:49:29.487 [DEBUG] [Thread-308702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:49:29.489 [DEBUG] [Thread-308702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:49:29.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:49:29.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:49:29.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:49:29.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:49:29.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:49:29.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:49:29.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:49:29.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:49:29.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:49:29.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.783745 -999.00  +18.60  22.05     48   +7.60 1 1 1 1 1     0    0 9.70 -68.24 ZNESW 23.3 22.1 155.8 31.2 19.1 -22.1 19.0 -21.6 18.8 -20.2 19.1 -21.1
2025-12-24T20:49:29.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:49:29.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:49:29.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.783745
2025-12-24T20:49:29.564 [DEBUG] [Thread-308702] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:49:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:49:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:49:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:49:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:49:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:49:29.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:49:05', tmtdew=12.64, humidity=43.73, cloud=0.0, wind=39.79, temperature=18.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:49:06', seeing=1.33, atlas_timestamp='2025-12-24T18:48:35.568', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:47:00')
2025-12-24T20:49:29.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:49:29.678 [DEBUG] [Thread-308705] [transport.py] [_log()] starting thread (client mode): 0xfabc5810
2025-12-24T20:49:29.678 [DEBUG] [Thread-308705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:49:29.693 [DEBUG] [Thread-308705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:49:29.693 [INFO] [Thread-308705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] client lang: <none>
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] server lang: <none>
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] kex follows: False
2025-12-24T20:49:29.700 [DEBUG] [Thread-308705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:49:29.701 [DEBUG] [Thread-308705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:49:29.701 [DEBUG] [Thread-308705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:49:29.701 [DEBUG] [Thread-308705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:49:29.701 [DEBUG] [Thread-308705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:49:29.701 [DEBUG] [Thread-308705] [transport.py] [_log()] Compression: none
2025-12-24T20:49:29.701 [DEBUG] [Thread-308705] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:49:29.758 [DEBUG] [Thread-308705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:49:29.759 [DEBUG] [Thread-308705] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:49:29.759 [DEBUG] [Thread-308705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:49:29.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:49:29.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:49:29.815 [DEBUG] [Thread-308705] [transport.py] [_log()] userauth is OK
2025-12-24T20:49:29.815 [DEBUG] [Thread-308705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:49:29.815 [DEBUG] [Thread-308705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:49:29.815 [DEBUG] [Thread-308705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:49:29.815 [DEBUG] [Thread-308705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:49:29.829 [INFO] [Thread-308705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:49:29.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:49:29.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:49:30.711 [DEBUG] [Thread-308705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:49:30.711 [DEBUG] [Thread-308705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:49:30.758 [DEBUG] [Thread-308705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:49:30.758 [DEBUG] [Thread-308705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:49:30.766 [DEBUG] [Thread-308705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:49:30.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:49:30.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:49:30.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:49:30.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:49:30.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:49:30.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:49:30.799 [DEBUG] [Thread-308705] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:49:31.440 [DEBUG] [Thread-308707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:49:40.117 [DEBUG] [Thread-308708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:49:46.631 [DEBUG] [Thread-308709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:50:00.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:50:00.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:50:00.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:50:01.843 [DEBUG] [Thread-308710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:50:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 49, 41), 12.53, 43.77, 0.0, 33.26, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:50:07.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:49:41
2025-12-24T20:50:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:50:08.106 [DEBUG] [Thread-308711] [transport.py] [_log()] starting thread (client mode): 0xfabc59c0
2025-12-24T20:50:08.107 [DEBUG] [Thread-308711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:50:08.111 [DEBUG] [Thread-308711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:50:08.111 [INFO] [Thread-308711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:50:08.116 [DEBUG] [Thread-308711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:50:08.116 [DEBUG] [Thread-308711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] client lang: <none>
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] server lang: <none>
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] kex follows: False
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:50:08.117 [DEBUG] [Thread-308711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:50:08.118 [DEBUG] [Thread-308711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:50:08.118 [DEBUG] [Thread-308711] [transport.py] [_log()] Compression: none
2025-12-24T20:50:08.118 [DEBUG] [Thread-308711] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:50:08.159 [DEBUG] [Thread-308711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:50:08.162 [DEBUG] [Thread-308711] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:50:08.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:50:08.164 [DEBUG] [Thread-308711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:50:08.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:50:08.165 [DEBUG] [Thread-308711] [transport.py] [_log()] userauth is OK
2025-12-24T20:50:08.165 [DEBUG] [Thread-308711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:50:08.165 [DEBUG] [Thread-308711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:50:08.165 [DEBUG] [Thread-308711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:50:08.165 [DEBUG] [Thread-308711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:50:08.185 [INFO] [Thread-308711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:50:08.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:50:09.145 [DEBUG] [Thread-308711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:50:09.145 [DEBUG] [Thread-308711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:50:09.146 [DEBUG] [Thread-308711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:50:09.185 [DEBUG] [Thread-308711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:50:09.189 [DEBUG] [Thread-308711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:50:09.191 [DEBUG] [Thread-308711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:50:09.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:50:09.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:50:09.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:50:09.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:50:09.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:50:09.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:50:09.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:50:09.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:50:09.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:50:09.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.784092 -999.00  +18.50  30.72     49   +7.60 1 1 2 1 1     0    0 9.78 -67.04 ZNESW 22.7 30.7 173.2 37.8 19.1 -22.0 19.0 -21.7 18.8 -20.2 19.1 -21.0
2025-12-24T20:50:09.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:50:09.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:50:09.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.784092
2025-12-24T20:50:09.503 [DEBUG] [Thread-308711] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:50:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:50:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:50:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:50:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:50:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:50:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:49:41', tmtdew=12.53, humidity=43.77, cloud=0.0, wind=33.26, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:49:42', seeing=1.11, atlas_timestamp='2025-12-24T18:49:05.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:47:00')
2025-12-24T20:50:09.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:50:09.618 [DEBUG] [Thread-308714] [transport.py] [_log()] starting thread (client mode): 0xf578b580
2025-12-24T20:50:09.619 [DEBUG] [Thread-308714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:50:09.636 [DEBUG] [Thread-308714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:50:09.636 [INFO] [Thread-308714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:50:09.642 [DEBUG] [Thread-308714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] client lang: <none>
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] server lang: <none>
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] kex follows: False
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] Compression: none
2025-12-24T20:50:09.643 [DEBUG] [Thread-308714] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:50:09.699 [DEBUG] [Thread-308714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:50:09.699 [DEBUG] [Thread-308714] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:50:09.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:50:09.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:50:09.700 [DEBUG] [Thread-308714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:50:09.756 [DEBUG] [Thread-308714] [transport.py] [_log()] userauth is OK
2025-12-24T20:50:09.756 [DEBUG] [Thread-308714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:50:09.756 [DEBUG] [Thread-308714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:50:09.760 [DEBUG] [Thread-308714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:50:09.760 [DEBUG] [Thread-308714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:50:09.775 [INFO] [Thread-308714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:50:09.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:50:09.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:50:10.619 [DEBUG] [Thread-308714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:50:10.619 [DEBUG] [Thread-308714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:50:10.679 [DEBUG] [Thread-308714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:50:10.679 [DEBUG] [Thread-308714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:50:10.688 [DEBUG] [Thread-308714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:50:10.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:50:10.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:50:10.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:50:10.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:50:10.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:50:10.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:50:10.721 [DEBUG] [Thread-308714] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:50:17.073 [DEBUG] [Thread-308716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:50:24.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:50:24.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:50:32.875 [DEBUG] [Thread-308717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:50:40.540 [DEBUG] [Thread-308718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:50:40.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:50:40.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:50:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:50:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 50, 21), 12.56, 43.68, 0.0, 29.66, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:50:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:50:21
2025-12-24T20:50:47.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:50:47.502 [DEBUG] [Thread-308719] [transport.py] [_log()] starting thread (client mode): 0xf8189ba0
2025-12-24T20:50:47.506 [DEBUG] [Thread-308719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:50:47.507 [DEBUG] [Thread-308719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:50:47.507 [INFO] [Thread-308719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] client lang: <none>
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] server lang: <none>
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] kex follows: False
2025-12-24T20:50:47.540 [DEBUG] [Thread-308719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:50:47.541 [DEBUG] [Thread-308719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:50:47.541 [DEBUG] [Thread-308719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:50:47.541 [DEBUG] [Thread-308719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:50:47.542 [DEBUG] [Thread-308719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:50:47.542 [DEBUG] [Thread-308719] [transport.py] [_log()] Compression: none
2025-12-24T20:50:47.542 [DEBUG] [Thread-308719] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:50:47.710 [DEBUG] [Thread-308719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:50:47.716 [DEBUG] [Thread-308719] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:50:47.717 [DEBUG] [Thread-308719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:50:47.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:50:47.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:50:47.723 [DEBUG] [Thread-308719] [transport.py] [_log()] userauth is OK
2025-12-24T20:50:47.723 [DEBUG] [Thread-308719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:50:47.723 [DEBUG] [Thread-308719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:50:47.724 [DEBUG] [Thread-308719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:50:47.724 [DEBUG] [Thread-308719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:50:47.762 [INFO] [Thread-308719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:50:47.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:50:48.101 [DEBUG] [Thread-308721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:50:48.388 [DEBUG] [Thread-308719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:50:48.388 [DEBUG] [Thread-308719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:50:48.389 [DEBUG] [Thread-308719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:50:48.474 [DEBUG] [Thread-308719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:50:48.474 [DEBUG] [Thread-308719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:50:48.492 [DEBUG] [Thread-308719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:50:48.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:50:48.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:50:48.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:50:48.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:50:48.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:50:48.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:50:48.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:50:48.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:50:48.510 [DEBUG] [Thread-308719] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:50:48.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:50:48.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.784786 -999.00  +18.50  17.42     48   +7.60 1 1 1 1 1     0    0 9.32 -74.05 ZNESW 22.7 17.4 168.9 26.7 19.1 -22.1 19.0 -21.7 18.8 -20.1 19.1 -20.9
2025-12-24T20:50:48.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:50:48.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:50:48.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.784786
2025-12-24T20:50:48.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:50:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:50:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:50:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:50:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:50:48.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:50:21', tmtdew=12.56, humidity=43.68, cloud=0.0, wind=29.66, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:50:22', seeing=1.25, atlas_timestamp='2025-12-24T18:50:05.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:47:00')
2025-12-24T20:50:48.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:50:48.904 [DEBUG] [Thread-308723] [transport.py] [_log()] starting thread (client mode): 0xf818b190
2025-12-24T20:50:48.904 [DEBUG] [Thread-308723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:50:48.914 [DEBUG] [Thread-308723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:50:48.914 [INFO] [Thread-308723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] client lang: <none>
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] server lang: <none>
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] kex follows: False
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] Compression: none
2025-12-24T20:50:48.922 [DEBUG] [Thread-308723] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:50:48.979 [DEBUG] [Thread-308723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:50:48.980 [DEBUG] [Thread-308723] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:50:48.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:50:49.058 [DEBUG] [Thread-308723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:50:49.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:50:49.066 [DEBUG] [Thread-308723] [transport.py] [_log()] userauth is OK
2025-12-24T20:50:49.066 [DEBUG] [Thread-308723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:50:49.066 [DEBUG] [Thread-308723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:50:49.066 [DEBUG] [Thread-308723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:50:49.066 [DEBUG] [Thread-308723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:50:49.080 [INFO] [Thread-308723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:50:49.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:50:49.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:50:49.914 [DEBUG] [Thread-308723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:50:49.914 [DEBUG] [Thread-308723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:50:49.960 [DEBUG] [Thread-308723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:50:49.961 [DEBUG] [Thread-308723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:50:49.969 [DEBUG] [Thread-308723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:50:49.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:50:49.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')
2025-12-24T20:50:49.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:50:50.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:50:50.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:50:50.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:50:50.161 [DEBUG] [Thread-308723] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:51:03.427 [DEBUG] [Thread-308725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:51:19.138 [DEBUG] [Thread-308726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:51:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:51:20.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:51:20.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:51:24.564 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:51:24.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:51:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 51, 2), 12.53, 43.77, 0.0, 31.78, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:51:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:51:02
2025-12-24T20:51:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:51:31.272 [DEBUG] [Thread-308727] [transport.py] [_log()] starting thread (client mode): 0xf572e170
2025-12-24T20:51:31.275 [DEBUG] [Thread-308727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:51:31.277 [DEBUG] [Thread-308727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:51:31.277 [INFO] [Thread-308727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] client lang: <none>
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] server lang: <none>
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] kex follows: False
2025-12-24T20:51:31.338 [DEBUG] [Thread-308727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:51:31.339 [DEBUG] [Thread-308727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:51:31.339 [DEBUG] [Thread-308727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:51:31.339 [DEBUG] [Thread-308727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:51:31.339 [DEBUG] [Thread-308727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:51:31.339 [DEBUG] [Thread-308727] [transport.py] [_log()] Compression: none
2025-12-24T20:51:31.339 [DEBUG] [Thread-308727] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:51:31.365 [DEBUG] [Thread-308727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:51:31.368 [DEBUG] [Thread-308727] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:51:31.370 [DEBUG] [Thread-308727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:51:31.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:51:31.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:51:31.373 [DEBUG] [Thread-308727] [transport.py] [_log()] userauth is OK
2025-12-24T20:51:31.373 [DEBUG] [Thread-308727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:51:31.374 [DEBUG] [Thread-308727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:51:31.374 [DEBUG] [Thread-308727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:51:31.374 [DEBUG] [Thread-308727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:51:31.392 [INFO] [Thread-308727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:51:31.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:51:31.986 [DEBUG] [Thread-308727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:51:31.987 [DEBUG] [Thread-308727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:51:32.032 [DEBUG] [Thread-308727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:51:32.032 [DEBUG] [Thread-308727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:51:32.032 [DEBUG] [Thread-308727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:51:32.054 [DEBUG] [Thread-308727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:51:32.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:51:32.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:51:32.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:51:32.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:51:32.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:51:32.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:51:32.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:51:32.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:51:32.088 [DEBUG] [Thread-308727] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:51:32.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:51:32.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.785481 -999.00  +18.50  20.17     49   +7.60 1 1 1 1 1     0    0 9.38 -77.46 ZNESW 18.9 20.2 171.8 29.4 19.1 -22.0 19.0 -21.7 18.8 -20.3 19.1 -21.0
2025-12-24T20:51:32.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:51:32.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:51:32.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.785481
2025-12-24T20:51:32.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:51:32.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:51:32.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:51:32.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:51:32.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:51:32.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:51:02', tmtdew=12.53, humidity=43.77, cloud=0.0, wind=31.78, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:51:03', seeing=1.28, atlas_timestamp='2025-12-24T18:51:05.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, 0.0012500000000006395, 0.1922499999999996, 0.023499999999998522, 0.09849999999999959, 0.08975000000000222, 0.04800000000000004, 0.09025000000000105, 0.09450000000000003, 0.10699999999999932, 0.06174999999999997, 0.04349999999999987, 0.11949999999999861, 0.18524999999999991, 0.05749999999999922, 0.1039999999999992, 0.17324999999999946, 0.12950000000000017, 0.0884999999999998, 0.09374999999999822, 0.1324999999999985, 0.11024999999999885, 0.09725000000000072, 0.15775000000000006, 0.10099999999999909, 0.15750000000000064, 0.13375000000000092, 0.16350000000000087, 0.2560000000000002, 0.24650000000000105, 0.16100000000000136, 0.16100000000000136, 0.20374999999999943], zp_timestamp='2025-12-24T18:47:00')
2025-12-24T20:51:32.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:51:32.249 [DEBUG] [Thread-308730] [transport.py] [_log()] starting thread (client mode): 0xf818b100
2025-12-24T20:51:32.249 [DEBUG] [Thread-308730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:51:32.262 [DEBUG] [Thread-308730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:51:32.263 [INFO] [Thread-308730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] client lang: <none>
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] server lang: <none>
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] kex follows: False
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] Compression: none
2025-12-24T20:51:32.270 [DEBUG] [Thread-308730] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:51:32.327 [DEBUG] [Thread-308730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:51:32.327 [DEBUG] [Thread-308730] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:51:32.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:51:32.328 [DEBUG] [Thread-308730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:51:32.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:51:32.389 [DEBUG] [Thread-308730] [transport.py] [_log()] userauth is OK
2025-12-24T20:51:32.389 [DEBUG] [Thread-308730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:51:32.389 [DEBUG] [Thread-308730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:51:32.389 [DEBUG] [Thread-308730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:51:32.389 [DEBUG] [Thread-308730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:51:32.406 [INFO] [Thread-308730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:51:32.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:51:32.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:51:33.227 [DEBUG] [Thread-308730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:51:33.227 [DEBUG] [Thread-308730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:51:33.274 [DEBUG] [Thread-308730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:51:33.274 [DEBUG] [Thread-308730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:51:33.283 [DEBUG] [Thread-308730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:51:33.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:51:33.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')
2025-12-24T20:51:33.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:51:33.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:51:33.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:51:33.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:51:33.327 [DEBUG] [Thread-308730] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:51:34.513 [DEBUG] [Thread-308732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:51:40.871 [DEBUG] [Thread-308733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:51:50.552 [DEBUG] [Thread-308734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:52:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:52:03.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:52:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:52:06.283 [DEBUG] [Thread-308735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:52:09.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 51, 2), 12.53, 43.77, 0.0, 31.78, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:52:09.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:51:02
2025-12-24T20:52:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:52:09.748 [DEBUG] [Thread-308736] [transport.py] [_log()] starting thread (client mode): 0xf5788a60
2025-12-24T20:52:09.749 [DEBUG] [Thread-308736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:52:09.754 [DEBUG] [Thread-308736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:52:09.754 [INFO] [Thread-308736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] client lang: <none>
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] server lang: <none>
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] kex follows: False
2025-12-24T20:52:09.760 [DEBUG] [Thread-308736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:52:09.761 [DEBUG] [Thread-308736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:52:09.761 [DEBUG] [Thread-308736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:52:09.761 [DEBUG] [Thread-308736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:52:09.761 [DEBUG] [Thread-308736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:52:09.761 [DEBUG] [Thread-308736] [transport.py] [_log()] Compression: none
2025-12-24T20:52:09.761 [DEBUG] [Thread-308736] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:52:09.914 [DEBUG] [Thread-308736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:52:09.919 [DEBUG] [Thread-308736] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:52:09.921 [DEBUG] [Thread-308736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:52:09.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:52:09.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:52:09.925 [DEBUG] [Thread-308736] [transport.py] [_log()] userauth is OK
2025-12-24T20:52:09.925 [DEBUG] [Thread-308736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:52:09.925 [DEBUG] [Thread-308736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:52:09.925 [DEBUG] [Thread-308736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:52:09.925 [DEBUG] [Thread-308736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:52:09.944 [INFO] [Thread-308736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:52:09.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:52:10.587 [DEBUG] [Thread-308736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:52:10.587 [DEBUG] [Thread-308736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:52:10.590 [DEBUG] [Thread-308736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:52:10.628 [DEBUG] [Thread-308736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:52:10.628 [DEBUG] [Thread-308736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:52:10.632 [DEBUG] [Thread-308736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:52:10.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:52:10.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:52:10.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:52:10.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:52:10.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:52:10.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:52:10.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:52:10.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:52:10.668 [DEBUG] [Thread-308736] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:52:10.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:52:10.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.785828 -999.00  +18.50  22.88     49   +7.60 1 1 1 1 1     0    0 9.14 -85.28 ZNESW 27.7 22.9 167.4 28.8 19.1 -22.0 18.9 -21.7 18.7 -20.1 19.0 -21.0
2025-12-24T20:52:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:52:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:52:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.785828
2025-12-24T20:52:10.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:52:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:52:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:52:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:52:10.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:52:10.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:51:02', tmtdew=12.53, humidity=43.77, cloud=0.0, wind=31.78, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:51:42', seeing=1.43, atlas_timestamp='2025-12-24T18:51:35.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, -0.019249999999999545, 0.17525000000000013, 0.02949999999999875, 0.08800000000000097, 0.06125000000000114, 0.05149999999999899, 0.10275000000000034, 0.08549999999999969, 0.07200000000000095, 0.09074999999999989, -0.009999999999999787, 0.12349999999999994, 0.11674999999999969, 0.0649999999999995, 0.054999999999999716, 0.10224999999999973, 0.10949999999999882, 0.1064999999999987, 0.08024999999999949, -0.03700000000000081, 0.07924999999999827, 0.08025000000000126, 0.11875000000000036, 0.08699999999999797, 0.11749999999999972, 0.10074999999999967, 0.09600000000000009, 0.1875, 0.24700000000000077, 0.11000000000000121, 0.11950000000000216, 0.09574999999999889], zp_timestamp='2025-12-24T18:49:00')
2025-12-24T20:52:10.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:52:10.817 [DEBUG] [Thread-308739] [transport.py] [_log()] starting thread (client mode): 0xf572fca0
2025-12-24T20:52:10.817 [DEBUG] [Thread-308739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:52:10.836 [DEBUG] [Thread-308739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:52:10.836 [INFO] [Thread-308739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:52:10.887 [DEBUG] [Thread-308739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:52:10.887 [DEBUG] [Thread-308739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:52:10.887 [DEBUG] [Thread-308739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:52:10.887 [DEBUG] [Thread-308739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:52:10.887 [DEBUG] [Thread-308739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:52:10.887 [DEBUG] [Thread-308739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] client lang: <none>
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] server lang: <none>
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] kex follows: False
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:52:10.888 [DEBUG] [Thread-308739] [transport.py] [_log()] Compression: none
2025-12-24T20:52:10.898 [DEBUG] [Thread-308739] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:52:10.952 [DEBUG] [Thread-308739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:52:10.952 [DEBUG] [Thread-308739] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:52:10.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:52:10.997 [DEBUG] [Thread-308739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:52:10.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:52:11.009 [DEBUG] [Thread-308739] [transport.py] [_log()] userauth is OK
2025-12-24T20:52:11.009 [DEBUG] [Thread-308739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:52:11.009 [DEBUG] [Thread-308739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:52:11.009 [DEBUG] [Thread-308739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:52:11.009 [DEBUG] [Thread-308739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:52:11.027 [INFO] [Thread-308739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:52:11.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:52:11.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:52:11.852 [DEBUG] [Thread-308739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:52:11.852 [DEBUG] [Thread-308739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:52:11.901 [DEBUG] [Thread-308739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:52:11.901 [DEBUG] [Thread-308739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:52:11.910 [DEBUG] [Thread-308739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:52:11.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:52:11.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')
2025-12-24T20:52: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') -> 00000000
2025-12-24T20:52:11.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:52:11.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:52:11.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:52:11.953 [DEBUG] [Thread-308739] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:52:21.561 [DEBUG] [Thread-308741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:52:24.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:52:24.795 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:52:37.059 [DEBUG] [Thread-308742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:52:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:52:42.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:52:42.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:52:52.420 [DEBUG] [Thread-308743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:52:56.819 [DEBUG] [Thread-308744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:52:59.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 51, 41), 12.52, 43.78, 0.0, 31.28, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:52:59.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:51:41
2025-12-24T20:53:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:53:05.145 [DEBUG] [Thread-308745] [transport.py] [_log()] starting thread (client mode): 0xf572ae00
2025-12-24T20:53:05.147 [DEBUG] [Thread-308745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:53:05.148 [DEBUG] [Thread-308745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:53:05.148 [INFO] [Thread-308745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] client lang: <none>
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] server lang: <none>
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] kex follows: False
2025-12-24T20:53:05.157 [DEBUG] [Thread-308745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:53:05.158 [DEBUG] [Thread-308745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:53:05.158 [DEBUG] [Thread-308745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:53:05.158 [DEBUG] [Thread-308745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:53:05.159 [DEBUG] [Thread-308745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:53:05.159 [DEBUG] [Thread-308745] [transport.py] [_log()] Compression: none
2025-12-24T20:53:05.159 [DEBUG] [Thread-308745] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:53:05.190 [DEBUG] [Thread-308745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:53:05.194 [DEBUG] [Thread-308745] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:53:05.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:53:05.197 [DEBUG] [Thread-308745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:53:05.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:53:05.199 [DEBUG] [Thread-308745] [transport.py] [_log()] userauth is OK
2025-12-24T20:53:05.199 [DEBUG] [Thread-308745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:53:05.200 [DEBUG] [Thread-308745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:53:05.200 [DEBUG] [Thread-308745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:53:05.200 [DEBUG] [Thread-308745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:53:05.395 [INFO] [Thread-308745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:53:05.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:53:06.147 [DEBUG] [Thread-308745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:53:06.147 [DEBUG] [Thread-308745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:53:06.194 [DEBUG] [Thread-308745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:53:06.194 [DEBUG] [Thread-308745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:53:06.194 [DEBUG] [Thread-308745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:53:06.196 [DEBUG] [Thread-308745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:53:06.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:53:06.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:53:06.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:53:06.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:53:06.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:53:06.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:53:06.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:53:06.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:53:06.329 [DEBUG] [Thread-308745] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:53:06.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:53:06.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.786176 -999.00  +18.50  31.85     49   +7.70 1 1 2 1 1     0    0 9.10 -86.80 ZNESW 25.2 31.9 179.4 36.8 19.1 -22.0 18.9 -21.8 18.7 -20.2 19.0 -21.0
2025-12-24T20:53:06.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:53:06.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:53:06.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.786176
2025-12-24T20:53:06.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:53:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:53:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:53:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:53:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:53:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:51:41', tmtdew=12.52, humidity=43.78, cloud=0.0, wind=31.28, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:52:40', seeing=1.37, atlas_timestamp='2025-12-24T18:52:05.606', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, -0.019249999999999545, 0.17525000000000013, 0.02949999999999875, 0.08800000000000097, 0.06125000000000114, 0.05149999999999899, 0.10275000000000034, 0.08549999999999969, 0.07200000000000095, 0.09074999999999989, -0.009999999999999787, 0.12349999999999994, 0.11674999999999969, 0.0649999999999995, 0.054999999999999716, 0.10224999999999973, 0.10949999999999882, 0.1064999999999987, 0.08024999999999949, -0.03700000000000081, 0.07924999999999827, 0.08025000000000126, 0.11875000000000036, 0.08699999999999797, 0.11749999999999972, 0.10074999999999967, 0.09600000000000009, 0.1875, 0.24700000000000077, 0.11000000000000121, 0.11950000000000216, 0.09574999999999889], zp_timestamp='2025-12-24T18:49:00')
2025-12-24T20:53:06.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:53:06.581 [DEBUG] [Thread-308748] [transport.py] [_log()] starting thread (client mode): 0xfabc7f70
2025-12-24T20:53:06.581 [DEBUG] [Thread-308748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:53:06.595 [DEBUG] [Thread-308748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:53:06.595 [INFO] [Thread-308748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] client lang: <none>
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] server lang: <none>
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] kex follows: False
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:53:06.603 [DEBUG] [Thread-308748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:53:06.604 [DEBUG] [Thread-308748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:53:06.604 [DEBUG] [Thread-308748] [transport.py] [_log()] Compression: none
2025-12-24T20:53:06.604 [DEBUG] [Thread-308748] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:53:06.660 [DEBUG] [Thread-308748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:53:06.730 [DEBUG] [Thread-308748] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:53:06.730 [DEBUG] [Thread-308748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:53:06.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:53:06.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:53:06.740 [DEBUG] [Thread-308748] [transport.py] [_log()] userauth is OK
2025-12-24T20:53:06.740 [DEBUG] [Thread-308748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:53:06.740 [DEBUG] [Thread-308748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:53:06.740 [DEBUG] [Thread-308748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:53:06.740 [DEBUG] [Thread-308748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:53:06.762 [INFO] [Thread-308748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:53:06.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:53:06.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:53:07.705 [DEBUG] [Thread-308748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:53:07.707 [DEBUG] [Thread-308748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:53:07.707 [DEBUG] [Thread-308748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:53:07.707 [DEBUG] [Thread-308748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:53:07.718 [DEBUG] [Thread-308748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:53:07.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:53:07.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:53:07.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:53:07.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:53:07.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:53:07.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:53:07.752 [DEBUG] [Thread-308748] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:53:07.779 [DEBUG] [Thread-308750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:53:23.469 [DEBUG] [Thread-308751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:53:25.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:53:25.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:53:37.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:53:37.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:53:37.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:53:38.819 [DEBUG] [Thread-308752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:53:40.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 52, 39), 12.5, 43.85, 0.0, 26.57, 18.57, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:53:40.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:52:39
2025-12-24T20:53:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:53:40.714 [DEBUG] [Thread-308753] [transport.py] [_log()] starting thread (client mode): 0xf578bc40
2025-12-24T20:53:40.715 [DEBUG] [Thread-308753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:53:40.724 [DEBUG] [Thread-308753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:53:40.725 [INFO] [Thread-308753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] client lang: <none>
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] server lang: <none>
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] kex follows: False
2025-12-24T20:53:40.730 [DEBUG] [Thread-308753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:53:40.731 [DEBUG] [Thread-308753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:53:40.731 [DEBUG] [Thread-308753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:53:40.731 [DEBUG] [Thread-308753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:53:40.731 [DEBUG] [Thread-308753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:53:40.731 [DEBUG] [Thread-308753] [transport.py] [_log()] Compression: none
2025-12-24T20:53:40.731 [DEBUG] [Thread-308753] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:53:40.777 [DEBUG] [Thread-308753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:53:40.780 [DEBUG] [Thread-308753] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:53:40.781 [DEBUG] [Thread-308753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:53:40.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:53:40.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:53:40.784 [DEBUG] [Thread-308753] [transport.py] [_log()] userauth is OK
2025-12-24T20:53:40.784 [DEBUG] [Thread-308753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:53:40.785 [DEBUG] [Thread-308753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:53:40.785 [DEBUG] [Thread-308753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:53:40.785 [DEBUG] [Thread-308753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:53:40.804 [INFO] [Thread-308753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:53:40.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:53:41.440 [DEBUG] [Thread-308753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:53:41.440 [DEBUG] [Thread-308753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:53:41.440 [DEBUG] [Thread-308753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:53:41.480 [DEBUG] [Thread-308753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:53:41.480 [DEBUG] [Thread-308753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:53:41.483 [DEBUG] [Thread-308753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:53:41.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:53:41.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:53:41.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:53:41.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:53:41.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:53:41.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:53:41.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:53:41.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:53:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:53:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.786523 -999.00  +18.50  23.54     49   +7.60 1 1 1 1 1     0    0 8.92 -87.90 ZNESW 18.9 23.5 176.4 32.3 19.1 -21.9 18.9 -21.6 18.7 -20.2 18.9 -20.9
2025-12-24T20:53:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:53:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:53:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.786523
2025-12-24T20:53:41.514 [DEBUG] [Thread-308753] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:53:41.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:53:41.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:53:41.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:53:41.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:53:41.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:53:41.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:52:39', tmtdew=12.5, humidity=43.85, cloud=0.0, wind=26.57, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:52:40', seeing=1.37, atlas_timestamp='2025-12-24T18:52:35.587', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, -0.019249999999999545, 0.17525000000000013, 0.02949999999999875, 0.08800000000000097, 0.06125000000000114, 0.05149999999999899, 0.10275000000000034, 0.08549999999999969, 0.07200000000000095, 0.09074999999999989, -0.009999999999999787, 0.12349999999999994, 0.11674999999999969, 0.0649999999999995, 0.054999999999999716, 0.10224999999999973, 0.10949999999999882, 0.1064999999999987, 0.08024999999999949, -0.03700000000000081, 0.07924999999999827, 0.08025000000000126, 0.11875000000000036, 0.08699999999999797, 0.11749999999999972, 0.10074999999999967, 0.09600000000000009, 0.1875, 0.24700000000000077, 0.11000000000000121, 0.11950000000000216, 0.09574999999999889], zp_timestamp='2025-12-24T18:49:00')
2025-12-24T20:53:41.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:53:41.624 [DEBUG] [Thread-308756] [transport.py] [_log()] starting thread (client mode): 0xf818a860
2025-12-24T20:53:41.624 [DEBUG] [Thread-308756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:53:41.638 [DEBUG] [Thread-308756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:53:41.638 [INFO] [Thread-308756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] client lang: <none>
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] server lang: <none>
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] kex follows: False
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] Compression: none
2025-12-24T20:53:41.646 [DEBUG] [Thread-308756] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:53:41.701 [DEBUG] [Thread-308756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:53:41.701 [DEBUG] [Thread-308756] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:53:41.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:53:41.701 [DEBUG] [Thread-308756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:53:41.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:53:41.758 [DEBUG] [Thread-308756] [transport.py] [_log()] userauth is OK
2025-12-24T20:53:41.758 [DEBUG] [Thread-308756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:53:41.758 [DEBUG] [Thread-308756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:53:41.758 [DEBUG] [Thread-308756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:53:41.758 [DEBUG] [Thread-308756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:53:41.772 [INFO] [Thread-308756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:53:41.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:53:41.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:53:42.630 [DEBUG] [Thread-308756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:53:42.630 [DEBUG] [Thread-308756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:53:42.677 [DEBUG] [Thread-308756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:53:42.677 [DEBUG] [Thread-308756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:53:42.686 [DEBUG] [Thread-308756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:53:42.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:53:42.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')
2025-12-24T20:53:42.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:53:42.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:53:42.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:53:42.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:53:42.900 [DEBUG] [Thread-308756] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:53:54.258 [DEBUG] [Thread-308758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:53:58.035 [DEBUG] [Thread-308759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:54:10.110 [DEBUG] [Thread-308760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:54:12.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:54:13.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:54:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:54:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 53, 48), 12.36, 44.46, 0.0, 33.01, 18.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:54:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:53:48
2025-12-24T20:54:25.275 [DEBUG] [Thread-308761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:54:25.322 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:54:25.323 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:54:25.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:54:25.761 [DEBUG] [Thread-308762] [transport.py] [_log()] starting thread (client mode): 0xf5743d60
2025-12-24T20:54:25.762 [DEBUG] [Thread-308762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:54:25.764 [DEBUG] [Thread-308762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:54:25.764 [INFO] [Thread-308762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] client lang: <none>
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] server lang: <none>
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] kex follows: False
2025-12-24T20:54:25.772 [DEBUG] [Thread-308762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:54:25.773 [DEBUG] [Thread-308762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:54:25.773 [DEBUG] [Thread-308762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:54:25.774 [DEBUG] [Thread-308762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:54:25.774 [DEBUG] [Thread-308762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:54:25.774 [DEBUG] [Thread-308762] [transport.py] [_log()] Compression: none
2025-12-24T20:54:25.774 [DEBUG] [Thread-308762] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:54:26.341 [DEBUG] [Thread-308762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:54:26.348 [DEBUG] [Thread-308762] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:54:26.350 [DEBUG] [Thread-308762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:54:26.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:54:26.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:54:26.355 [DEBUG] [Thread-308762] [transport.py] [_log()] userauth is OK
2025-12-24T20:54:26.355 [DEBUG] [Thread-308762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:54:26.355 [DEBUG] [Thread-308762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:54:26.355 [DEBUG] [Thread-308762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:54:26.355 [DEBUG] [Thread-308762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:54:26.377 [INFO] [Thread-308762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:54:26.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:54:27.027 [DEBUG] [Thread-308762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:54:27.028 [DEBUG] [Thread-308762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:54:27.029 [DEBUG] [Thread-308762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:54:27.029 [DEBUG] [Thread-308762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:54:27.029 [DEBUG] [Thread-308762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:54:27.031 [DEBUG] [Thread-308762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:54:27.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:54:27.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:54:27.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:54:27.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:54:27.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:54:27.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:54:27.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:54:27.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:54:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:54:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.787564 -999.00  +18.40  24.80     49   +7.70 1 1 1 1 1     0    0 8.18 -101.79 ZNESW 24.3 24.8 165.6 32.5 19.0 -22.0 18.9 -21.5 18.7 -20.2 19.0 -21.0
2025-12-24T20:54:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:54:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:54:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.787564
2025-12-24T20:54:27.065 [DEBUG] [Thread-308762] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:54:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:54:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:54:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:54:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:54:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:54:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:53:48', tmtdew=12.36, humidity=44.46, cloud=0.0, wind=33.01, temperature=18.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:53:49', seeing=1.23, atlas_timestamp='2025-12-24T18:54:05.530', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, -0.019249999999999545, 0.17525000000000013, 0.02949999999999875, 0.08800000000000097, 0.06125000000000114, 0.05149999999999899, 0.10275000000000034, 0.08549999999999969, 0.07200000000000095, 0.09074999999999989, -0.009999999999999787, 0.12349999999999994, 0.11674999999999969, 0.0649999999999995, 0.054999999999999716, 0.10224999999999973, 0.10949999999999882, 0.1064999999999987, 0.08024999999999949, -0.03700000000000081, 0.07924999999999827, 0.08025000000000126, 0.11875000000000036, 0.08699999999999797, 0.11749999999999972, 0.10074999999999967, 0.09600000000000009, 0.1875, 0.24700000000000077, 0.11000000000000121, 0.11950000000000216, 0.09574999999999889], zp_timestamp='2025-12-24T18:49:00')
2025-12-24T20:54:27.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:54:27.283 [DEBUG] [Thread-308765] [transport.py] [_log()] starting thread (client mode): 0xf5741210
2025-12-24T20:54:27.283 [DEBUG] [Thread-308765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:54:27.294 [DEBUG] [Thread-308765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:54:27.294 [INFO] [Thread-308765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:54:27.301 [DEBUG] [Thread-308765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:54:27.301 [DEBUG] [Thread-308765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] client lang: <none>
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] server lang: <none>
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] kex follows: False
2025-12-24T20:54:27.408 [DEBUG] [Thread-308765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:54:27.410 [DEBUG] [Thread-308765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:54:27.410 [DEBUG] [Thread-308765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:54:27.410 [DEBUG] [Thread-308765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:54:27.410 [DEBUG] [Thread-308765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:54:27.410 [DEBUG] [Thread-308765] [transport.py] [_log()] Compression: none
2025-12-24T20:54:27.410 [DEBUG] [Thread-308765] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:54:27.439 [DEBUG] [Thread-308765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:54:27.442 [DEBUG] [Thread-308765] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:54:27.443 [DEBUG] [Thread-308765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:54:27.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:54:27.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:54:27.497 [DEBUG] [Thread-308765] [transport.py] [_log()] userauth is OK
2025-12-24T20:54:27.497 [DEBUG] [Thread-308765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:54:27.497 [DEBUG] [Thread-308765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:54:27.497 [DEBUG] [Thread-308765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:54:27.497 [DEBUG] [Thread-308765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:54:27.518 [INFO] [Thread-308765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:54:27.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:54:27.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:54:28.450 [DEBUG] [Thread-308765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:54:28.456 [DEBUG] [Thread-308765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:54:28.478 [DEBUG] [Thread-308765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:54:28.478 [DEBUG] [Thread-308765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:54:28.489 [DEBUG] [Thread-308765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:54:28.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:54:28.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:54:28.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:54:28.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:54:28.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:54:28.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:54:28.535 [DEBUG] [Thread-308765] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:54:40.891 [DEBUG] [Thread-308767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:54:56.328 [DEBUG] [Thread-308768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:54:58.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:54:58.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:54:59.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
2025-12-24T20:54:59.518 [DEBUG] [Thread-308769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:55:12.211 [DEBUG] [Thread-308770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:55:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 53, 48), 12.36, 44.46, 0.0, 33.01, 18.54, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:55:13.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:53:48
2025-12-24T20:55:15.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:55:16.472 [DEBUG] [Thread-308771] [transport.py] [_log()] starting thread (client mode): 0xf5770d30
2025-12-24T20:55:16.474 [DEBUG] [Thread-308771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:55:16.476 [DEBUG] [Thread-308771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:55:16.476 [INFO] [Thread-308771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] client lang: <none>
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] server lang: <none>
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] kex follows: False
2025-12-24T20:55:16.482 [DEBUG] [Thread-308771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:55:16.565 [DEBUG] [Thread-308771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:55:16.566 [DEBUG] [Thread-308771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:55:16.566 [DEBUG] [Thread-308771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:55:16.566 [DEBUG] [Thread-308771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:55:16.566 [DEBUG] [Thread-308771] [transport.py] [_log()] Compression: none
2025-12-24T20:55:16.566 [DEBUG] [Thread-308771] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:55:16.609 [DEBUG] [Thread-308771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:55:16.616 [DEBUG] [Thread-308771] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:55:16.618 [DEBUG] [Thread-308771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:55:16.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:55:16.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:55:16.623 [DEBUG] [Thread-308771] [transport.py] [_log()] userauth is OK
2025-12-24T20:55:16.623 [DEBUG] [Thread-308771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:55:16.624 [DEBUG] [Thread-308771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:55:16.624 [DEBUG] [Thread-308771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:55:16.624 [DEBUG] [Thread-308771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:55:16.761 [INFO] [Thread-308771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:55:16.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:55:17.501 [DEBUG] [Thread-308771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:55:17.501 [DEBUG] [Thread-308771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:55:17.502 [DEBUG] [Thread-308771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:55:17.542 [DEBUG] [Thread-308771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:55:17.542 [DEBUG] [Thread-308771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:55:17.545 [DEBUG] [Thread-308771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:55:17.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:55:17.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:55:17.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:55:17.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:55:17.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:55:17.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:55:17.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:55:17.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:55:17.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:55:17.584 [DEBUG] [Thread-308771] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:55:17.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.787912 -999.00  +18.40  19.81     49   +7.70 1 1 1 1 1     0    0 8.28 -103.56 ZNESW 20.7 19.8 185.0 34.1 19.0 -22.1 18.9 -21.6 18.7 -20.3 18.9 -21.0
2025-12-24T20:55:17.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:55:17.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:55:17.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.787912
2025-12-24T20:55:18.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:55:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:55:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:55:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:55:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:55:18.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:53:48', tmtdew=12.36, humidity=44.46, cloud=0.0, wind=33.01, temperature=18.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:54:40', seeing=1.58, atlas_timestamp='2025-12-24T18:54:35.597', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, -0.019249999999999545, 0.17525000000000013, 0.02949999999999875, 0.08800000000000097, 0.06125000000000114, 0.05149999999999899, 0.10275000000000034, 0.08549999999999969, 0.07200000000000095, 0.09074999999999989, -0.009999999999999787, 0.12349999999999994, 0.11674999999999969, 0.0649999999999995, 0.054999999999999716, 0.10224999999999973, 0.10949999999999882, 0.1064999999999987, 0.08024999999999949, -0.03700000000000081, 0.07924999999999827, 0.08025000000000126, 0.11875000000000036, 0.08699999999999797, 0.11749999999999972, 0.10074999999999967, 0.09600000000000009, 0.1875, 0.24700000000000077, 0.11000000000000121, 0.11950000000000216, 0.09574999999999889], zp_timestamp='2025-12-24T18:53:00')
2025-12-24T20:55:18.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:55:18.192 [DEBUG] [Thread-308774] [transport.py] [_log()] starting thread (client mode): 0xfabc7490
2025-12-24T20:55:18.192 [DEBUG] [Thread-308774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:55:18.206 [DEBUG] [Thread-308774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:55:18.206 [INFO] [Thread-308774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] client lang: <none>
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] server lang: <none>
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] kex follows: False
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:55:18.213 [DEBUG] [Thread-308774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:55:18.214 [DEBUG] [Thread-308774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:55:18.214 [DEBUG] [Thread-308774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:55:18.214 [DEBUG] [Thread-308774] [transport.py] [_log()] Compression: none
2025-12-24T20:55:18.214 [DEBUG] [Thread-308774] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:55:18.270 [DEBUG] [Thread-308774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:55:18.270 [DEBUG] [Thread-308774] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:55:18.270 [DEBUG] [Thread-308774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:55:18.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:55:18.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:55:18.403 [DEBUG] [Thread-308774] [transport.py] [_log()] userauth is OK
2025-12-24T20:55:18.403 [DEBUG] [Thread-308774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:55:18.403 [DEBUG] [Thread-308774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:55:18.403 [DEBUG] [Thread-308774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:55:18.403 [DEBUG] [Thread-308774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:55:18.420 [INFO] [Thread-308774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:55:18.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:55:18.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:55:19.229 [DEBUG] [Thread-308774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:55:19.229 [DEBUG] [Thread-308774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:55:19.275 [DEBUG] [Thread-308774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:55:19.275 [DEBUG] [Thread-308774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:55:19.284 [DEBUG] [Thread-308774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:55:19.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:55:19.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')
2025-12-24T20:55:19.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:55:19.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:55:19.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:55:19.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:55:19.408 [DEBUG] [Thread-308774] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:55:25.546 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:55:25.548 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:55:27.372 [DEBUG] [Thread-308776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:55:43.429 [DEBUG] [Thread-308777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:55:49.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:55:49.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:55:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:55:58.836 [DEBUG] [Thread-308778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:56:00.932 [DEBUG] [Thread-308779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:56:07.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 54, 39), 12.33, 44.53, 0.0, 31.46, 18.47, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:56:07.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:54:39
2025-12-24T20:56:10.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:56:11.785 [DEBUG] [Thread-308780] [transport.py] [_log()] starting thread (client mode): 0xf57aa650
2025-12-24T20:56:11.788 [DEBUG] [Thread-308780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:56:11.789 [DEBUG] [Thread-308780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:56:11.789 [INFO] [Thread-308780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] client lang: <none>
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] server lang: <none>
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] kex follows: False
2025-12-24T20:56:12.296 [DEBUG] [Thread-308780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:56:12.297 [DEBUG] [Thread-308780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:56:12.298 [DEBUG] [Thread-308780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:56:12.298 [DEBUG] [Thread-308780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:56:12.298 [DEBUG] [Thread-308780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:56:12.298 [DEBUG] [Thread-308780] [transport.py] [_log()] Compression: none
2025-12-24T20:56:12.298 [DEBUG] [Thread-308780] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:56:12.463 [DEBUG] [Thread-308780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:56:12.470 [DEBUG] [Thread-308780] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:56:12.472 [DEBUG] [Thread-308780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:56:12.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:56:12.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:56:12.478 [DEBUG] [Thread-308780] [transport.py] [_log()] userauth is OK
2025-12-24T20:56:12.478 [DEBUG] [Thread-308780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:56:12.478 [DEBUG] [Thread-308780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:56:12.478 [DEBUG] [Thread-308780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:56:12.478 [DEBUG] [Thread-308780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:56:12.496 [INFO] [Thread-308780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:56:12.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:56:13.106 [DEBUG] [Thread-308780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:56:13.106 [DEBUG] [Thread-308780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:56:13.107 [DEBUG] [Thread-308780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:56:13.147 [DEBUG] [Thread-308780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:56:13.148 [DEBUG] [Thread-308780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:56:13.149 [DEBUG] [Thread-308780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:56:13.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:56:13.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:56:13.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:56:13.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:56:13.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:56:13.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:56:13.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:56:13.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:56:13.171 [DEBUG] [Thread-308780] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:56:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:56:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.788606 -999.00  +18.40  20.48     49   +7.60 1 1 1 1 1     0    0 8.35 -104.20 ZNESW 19.8 20.5 169.4 25.9 19.0 -22.1 18.9 -21.7 18.6 -20.2 18.9 -21.2
2025-12-24T20:56:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:56:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:56:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.788606
2025-12-24T20:56:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:56:13.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:56:13.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:56:13.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:56:13.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:56:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:54:39', tmtdew=12.33, humidity=44.53, cloud=0.0, wind=31.46, temperature=18.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:55:39', seeing=1.23, atlas_timestamp='2025-12-24T18:55:35.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, -0.019249999999999545, 0.17525000000000013, 0.02949999999999875, 0.08800000000000097, 0.06125000000000114, 0.05149999999999899, 0.10275000000000034, 0.08549999999999969, 0.07200000000000095, 0.09074999999999989, -0.009999999999999787, 0.12349999999999994, 0.11674999999999969, 0.0649999999999995, 0.054999999999999716, 0.10224999999999973, 0.10949999999999882, 0.1064999999999987, 0.08024999999999949, -0.03700000000000081, 0.07924999999999827, 0.08025000000000126, 0.11875000000000036, 0.08699999999999797, 0.11749999999999972, 0.10074999999999967, 0.09600000000000009, 0.1875, 0.24700000000000077, 0.11000000000000121, 0.11950000000000216, 0.09574999999999889], zp_timestamp='2025-12-24T18:53:00')
2025-12-24T20:56:13.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:56:13.443 [DEBUG] [Thread-308783] [transport.py] [_log()] starting thread (client mode): 0xf5728940
2025-12-24T20:56:13.444 [DEBUG] [Thread-308783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:56:13.457 [DEBUG] [Thread-308783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:56:13.457 [INFO] [Thread-308783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:56:13.464 [DEBUG] [Thread-308783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] client lang: <none>
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] server lang: <none>
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] kex follows: False
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:56:13.465 [DEBUG] [Thread-308783] [transport.py] [_log()] Compression: none
2025-12-24T20:56:13.468 [DEBUG] [Thread-308783] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:56:13.628 [DEBUG] [Thread-308783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:56:13.631 [DEBUG] [Thread-308783] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:56:13.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:56:13.636 [DEBUG] [Thread-308783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:56:13.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:56:13.741 [DEBUG] [Thread-308783] [transport.py] [_log()] userauth is OK
2025-12-24T20:56:13.741 [DEBUG] [Thread-308783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:56:13.741 [DEBUG] [Thread-308783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:56:13.741 [DEBUG] [Thread-308783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:56:13.741 [DEBUG] [Thread-308783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:56:13.759 [INFO] [Thread-308783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:56:13.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:56:13.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:56:14.465 [DEBUG] [Thread-308785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:56:14.610 [DEBUG] [Thread-308783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:56:14.610 [DEBUG] [Thread-308783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:56:14.635 [DEBUG] [Thread-308783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:56:14.635 [DEBUG] [Thread-308783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:56:14.645 [DEBUG] [Thread-308783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:56:14.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:56:14.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:56:14.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:56:14.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:56:14.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:56:14.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:56:14.782 [DEBUG] [Thread-308783] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:56:25.763 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:56:25.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:56:31.166 [DEBUG] [Thread-308786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:56:44.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:56:44.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:56:45.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:56:46.564 [DEBUG] [Thread-308787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:57:02.257 [DEBUG] [Thread-308788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:57:06.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 55, 38), 12.37, 44.56, 0.0, 25.78, 18.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:57:06.765 [DEBUG] [Thread-308789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:57:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:55:38
2025-12-24T20:57:09.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:57:09.716 [DEBUG] [Thread-308790] [transport.py] [_log()] starting thread (client mode): 0xfabc7910
2025-12-24T20:57:09.718 [DEBUG] [Thread-308790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:57:09.786 [DEBUG] [Thread-308790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:57:09.786 [INFO] [Thread-308790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:57:09.792 [DEBUG] [Thread-308790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:57:09.792 [DEBUG] [Thread-308790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:57:09.792 [DEBUG] [Thread-308790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:57:09.792 [DEBUG] [Thread-308790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] client lang: <none>
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] server lang: <none>
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] kex follows: False
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:57:09.793 [DEBUG] [Thread-308790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:57:09.794 [DEBUG] [Thread-308790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:57:09.794 [DEBUG] [Thread-308790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:57:09.794 [DEBUG] [Thread-308790] [transport.py] [_log()] Compression: none
2025-12-24T20:57:09.794 [DEBUG] [Thread-308790] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:57:09.835 [DEBUG] [Thread-308790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:57:09.922 [DEBUG] [Thread-308790] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:57:09.924 [DEBUG] [Thread-308790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:57:09.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:57:09.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:57:09.929 [DEBUG] [Thread-308790] [transport.py] [_log()] userauth is OK
2025-12-24T20:57:09.930 [DEBUG] [Thread-308790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:57:09.930 [DEBUG] [Thread-308790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:57:09.930 [DEBUG] [Thread-308790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:57:09.930 [DEBUG] [Thread-308790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:57:09.961 [INFO] [Thread-308790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:57:09.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:57:10.604 [DEBUG] [Thread-308790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:57:10.604 [DEBUG] [Thread-308790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:57:10.606 [DEBUG] [Thread-308790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:57:10.646 [DEBUG] [Thread-308790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:57:10.646 [DEBUG] [Thread-308790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:57:10.648 [DEBUG] [Thread-308790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:57:10.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:57:10.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:57:10.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:57:10.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:57:10.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:57:10.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:57:10.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:57:10.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:57:10.836 [DEBUG] [Thread-308790] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:57:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:57:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.788953 -999.00  +18.40  23.21     49   +7.60 1 1 1 1 1     0    0 8.62 -106.21 ZNESW 22.4 23.2 179.0 31.9 19.0 -21.9 18.8 -21.8 18.7 -20.2 18.9 -21.1
2025-12-24T20:57:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:57:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:57:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.788953
2025-12-24T20:57:10.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:57:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:57:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:57:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:57:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:57:10.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:55:38', tmtdew=12.37, humidity=44.56, cloud=0.0, wind=25.78, temperature=18.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:56:42', seeing=1.54, atlas_timestamp='2025-12-24T18:56:05.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, -0.019249999999999545, 0.17525000000000013, 0.02949999999999875, 0.08800000000000097, 0.06125000000000114, 0.05149999999999899, 0.10275000000000034, 0.08549999999999969, 0.07200000000000095, 0.09074999999999989, -0.009999999999999787, 0.12349999999999994, 0.11674999999999969, 0.0649999999999995, 0.054999999999999716, 0.10224999999999973, 0.10949999999999882, 0.1064999999999987, 0.08024999999999949, -0.03700000000000081, 0.07924999999999827, 0.08025000000000126, 0.11875000000000036, 0.08699999999999797, 0.11749999999999972, 0.10074999999999967, 0.09600000000000009, 0.1875, 0.24700000000000077, 0.11000000000000121, 0.11950000000000216, 0.09574999999999889], zp_timestamp='2025-12-24T18:53:00')
2025-12-24T20:57:10.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:57:10.974 [DEBUG] [Thread-308793] [transport.py] [_log()] starting thread (client mode): 0xf57aa650
2025-12-24T20:57:10.974 [DEBUG] [Thread-308793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:57:10.989 [DEBUG] [Thread-308793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:57:10.989 [INFO] [Thread-308793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:57:10.996 [DEBUG] [Thread-308793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:57:10.996 [DEBUG] [Thread-308793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:57:10.996 [DEBUG] [Thread-308793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:57:10.996 [DEBUG] [Thread-308793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:57:10.996 [DEBUG] [Thread-308793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:57:10.996 [DEBUG] [Thread-308793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:57:10.996 [DEBUG] [Thread-308793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:57:10.996 [DEBUG] [Thread-308793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] client lang: <none>
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] server lang: <none>
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] kex follows: False
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] Compression: none
2025-12-24T20:57:10.997 [DEBUG] [Thread-308793] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:57:11.059 [DEBUG] [Thread-308793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:57:11.059 [DEBUG] [Thread-308793] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:57:11.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:57:11.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:57:11.060 [DEBUG] [Thread-308793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:57:11.120 [DEBUG] [Thread-308793] [transport.py] [_log()] userauth is OK
2025-12-24T20:57:11.121 [DEBUG] [Thread-308793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:57:11.121 [DEBUG] [Thread-308793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:57:11.121 [DEBUG] [Thread-308793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:57:11.121 [DEBUG] [Thread-308793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:57:11.163 [INFO] [Thread-308793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:57:11.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:57:11.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:57:12.004 [DEBUG] [Thread-308793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:57:12.004 [DEBUG] [Thread-308793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:57:12.012 [DEBUG] [Thread-308793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:57:12.012 [DEBUG] [Thread-308793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:57:12.021 [DEBUG] [Thread-308793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:57:12.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:57:12.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:57:12.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:57:12.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:57:12.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:57:12.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:57:12.054 [DEBUG] [Thread-308793] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:57:19.141 [DEBUG] [Thread-308795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:57:26.080 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:57:26.087 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:57:34.855 [DEBUG] [Thread-308796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:57:42.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:57:42.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:57: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
2025-12-24T20:57:48.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 56, 40), 12.36, 44.61, 0.0, 26.66, 18.49, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:57:48.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:56:40
2025-12-24T20:57:50.451 [DEBUG] [Thread-308797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:57:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:57:51.898 [DEBUG] [Thread-308798] [transport.py] [_log()] starting thread (client mode): 0xf578bcd0
2025-12-24T20:57:51.899 [DEBUG] [Thread-308798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:57:51.910 [DEBUG] [Thread-308798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:57:51.910 [INFO] [Thread-308798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:57:51.915 [DEBUG] [Thread-308798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] client lang: <none>
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] server lang: <none>
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] kex follows: False
2025-12-24T20:57:51.916 [DEBUG] [Thread-308798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:57:51.917 [DEBUG] [Thread-308798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:57:51.917 [DEBUG] [Thread-308798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:57:51.917 [DEBUG] [Thread-308798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:57:51.917 [DEBUG] [Thread-308798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:57:51.917 [DEBUG] [Thread-308798] [transport.py] [_log()] Compression: none
2025-12-24T20:57:51.917 [DEBUG] [Thread-308798] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:57:52.006 [DEBUG] [Thread-308798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:57:52.010 [DEBUG] [Thread-308798] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:57:52.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:57:52.013 [DEBUG] [Thread-308798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:57:52.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:57:52.015 [DEBUG] [Thread-308798] [transport.py] [_log()] userauth is OK
2025-12-24T20:57:52.015 [DEBUG] [Thread-308798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:57:52.015 [DEBUG] [Thread-308798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:57:52.015 [DEBUG] [Thread-308798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:57:52.015 [DEBUG] [Thread-308798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:57:52.339 [INFO] [Thread-308798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:57:52.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:57:52.701 [DEBUG] [Thread-308798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:57:52.738 [DEBUG] [Thread-308798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:57:52.740 [DEBUG] [Thread-308798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:57:52.740 [DEBUG] [Thread-308798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:57:52.740 [DEBUG] [Thread-308798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:57:52.742 [DEBUG] [Thread-308798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:57:52.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:57:52.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:57:52.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:57:52.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:57:52.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:57:52.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:57:52.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:57:52.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:57:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:57:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.789995 -999.00  +18.40  20.78     49   +7.70 1 1 1 1 1     0    0 8.08 -106.52 ZNESW 24.4 20.8 163.2 33.8 19.0 -22.0 18.8 -21.6 18.6 -20.3 18.9 -21.0
2025-12-24T20:57:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:57:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:57:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.789995
2025-12-24T20:57:52.775 [DEBUG] [Thread-308798] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:57:52.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:57:52.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:57:52.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:57:52.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:57:52.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:57:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:56:40', tmtdew=12.36, humidity=44.61, cloud=0.0, wind=26.66, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:56:42', seeing=1.54, atlas_timestamp='2025-12-24T18:57:35.568', atlas_cloud=1, atlas_rain=1, zp_data=[0.05874999999999986, -0.019249999999999545, 0.17525000000000013, 0.02949999999999875, 0.08800000000000097, 0.06125000000000114, 0.05149999999999899, 0.10275000000000034, 0.08549999999999969, 0.07200000000000095, 0.09074999999999989, -0.009999999999999787, 0.12349999999999994, 0.11674999999999969, 0.0649999999999995, 0.054999999999999716, 0.10224999999999973, 0.10949999999999882, 0.1064999999999987, 0.08024999999999949, -0.03700000000000081, 0.07924999999999827, 0.08025000000000126, 0.11875000000000036, 0.08699999999999797, 0.11749999999999972, 0.10074999999999967, 0.09600000000000009, 0.1875, 0.24700000000000077, 0.11000000000000121, 0.11950000000000216, 0.09574999999999889], zp_timestamp='2025-12-24T18:53:00')
2025-12-24T20:57:52.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:57:52.984 [DEBUG] [Thread-308801] [transport.py] [_log()] starting thread (client mode): 0xfabc5990
2025-12-24T20:57:52.984 [DEBUG] [Thread-308801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:57:52.998 [DEBUG] [Thread-308801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:57:52.998 [INFO] [Thread-308801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] client lang: <none>
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] server lang: <none>
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] kex follows: False
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:57:53.006 [DEBUG] [Thread-308801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:57:53.007 [DEBUG] [Thread-308801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:57:53.007 [DEBUG] [Thread-308801] [transport.py] [_log()] Compression: none
2025-12-24T20:57:53.007 [DEBUG] [Thread-308801] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:57:53.067 [DEBUG] [Thread-308801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:57:53.068 [DEBUG] [Thread-308801] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:57:53.068 [DEBUG] [Thread-308801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:57:53.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:57:53.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:57:53.125 [DEBUG] [Thread-308801] [transport.py] [_log()] userauth is OK
2025-12-24T20:57:53.125 [DEBUG] [Thread-308801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:57:53.125 [DEBUG] [Thread-308801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:57:53.125 [DEBUG] [Thread-308801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:57:53.125 [DEBUG] [Thread-308801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:57:53.139 [INFO] [Thread-308801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:57:53.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:57:53.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:57:53.958 [DEBUG] [Thread-308801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:57:53.959 [DEBUG] [Thread-308801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:57:54.005 [DEBUG] [Thread-308801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:57:54.005 [DEBUG] [Thread-308801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:57:54.013 [DEBUG] [Thread-308801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:57:54.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:57:54.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:57:54.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
2025-12-24T20:57:54.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:57:54.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:57:54.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:57:54.118 [DEBUG] [Thread-308801] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:58:05.716 [DEBUG] [Thread-308803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:58:08.395 [DEBUG] [Thread-308804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:58:21.256 [DEBUG] [Thread-308805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:58:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:58:24.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:58:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:58:26.296 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:58:26.300 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:58:28.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 57, 49), 12.32, 44.58, 0.0, 25.2, 18.47, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:58:28.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:57:49
2025-12-24T20:58:29.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:58:29.805 [DEBUG] [Thread-308806] [transport.py] [_log()] starting thread (client mode): 0xf57415d0
2025-12-24T20:58:29.806 [DEBUG] [Thread-308806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:58:29.816 [DEBUG] [Thread-308806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:58:29.816 [INFO] [Thread-308806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:58:29.820 [DEBUG] [Thread-308806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] client lang: <none>
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] server lang: <none>
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] kex follows: False
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:58:29.821 [DEBUG] [Thread-308806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:58:29.822 [DEBUG] [Thread-308806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:58:29.822 [DEBUG] [Thread-308806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:58:29.822 [DEBUG] [Thread-308806] [transport.py] [_log()] Compression: none
2025-12-24T20:58:29.822 [DEBUG] [Thread-308806] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:58:29.852 [DEBUG] [Thread-308806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:58:29.856 [DEBUG] [Thread-308806] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:58:29.857 [DEBUG] [Thread-308806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:58:29.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:58:29.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:58:29.861 [DEBUG] [Thread-308806] [transport.py] [_log()] userauth is OK
2025-12-24T20:58:29.861 [DEBUG] [Thread-308806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:58:29.861 [DEBUG] [Thread-308806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:58:29.861 [DEBUG] [Thread-308806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:58:29.861 [DEBUG] [Thread-308806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:58:29.892 [INFO] [Thread-308806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:58:29.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:58:30.526 [DEBUG] [Thread-308806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:58:30.526 [DEBUG] [Thread-308806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:58:30.526 [DEBUG] [Thread-308806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:58:30.567 [DEBUG] [Thread-308806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:58:30.567 [DEBUG] [Thread-308806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:58:30.569 [DEBUG] [Thread-308806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:58:30.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:58:30.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:58:30.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:58:30.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:58:30.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:58:30.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:58:30.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:58:30.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:58:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:58:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.790342 -999.00  +18.40  21.66     49   +7.70 1 1 1 1 1     0    0 8.08 -101.28 ZNESW 16.0 21.7 179.8 28.1 18.9 -22.0 18.8 -21.7 18.6 -20.1 18.9 -21.1
2025-12-24T20:58:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:58:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:58:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.790342
2025-12-24T20:58:30.595 [DEBUG] [Thread-308806] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:58:30.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:58:30.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:58:30.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:58:30.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:58:30.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:58:30.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:57:49', tmtdew=12.32, humidity=44.58, cloud=0.0, wind=25.2, temperature=18.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:57:51', seeing=1.47, atlas_timestamp='2025-12-24T18:58:05.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.07924999999999827, 0.05525000000000091, 0.18425000000000047, 0.059499999999999886, 0.1255000000000006, 0.043250000000000455, 0.0389999999999997, 0.07925000000000182, 0.08499999999999908, 0.07049999999999912, 0.07525000000000048, -0.034000000000000696, 0.09499999999999886, 0.14124999999999943, 0.08150000000000013, 0.05299999999999905, 0.07925000000000004, 0.11950000000000038, 0.07399999999999984, 0.023249999999999105, 0.1059999999999981, 0.07124999999999915, 0.0547500000000003, 0.11374999999999957, 0.10749999999999993, 0.09849999999999959, 0.13375000000000092, 0.15499999999999936, 0.21600000000000108, 0.17300000000000182, 0.08950000000000102, 0.07200000000000095, 0.1347499999999986], zp_timestamp='2025-12-24T18:57:00')
2025-12-24T20:58:30.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:58:30.709 [DEBUG] [Thread-308809] [transport.py] [_log()] starting thread (client mode): 0xf5741b40
2025-12-24T20:58:30.709 [DEBUG] [Thread-308809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:58:30.723 [DEBUG] [Thread-308809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:58:30.723 [INFO] [Thread-308809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] client lang: <none>
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] server lang: <none>
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] kex follows: False
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] Compression: none
2025-12-24T20:58:30.825 [DEBUG] [Thread-308809] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:58:30.841 [DEBUG] [Thread-308809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:58:30.842 [DEBUG] [Thread-308809] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:58:30.842 [DEBUG] [Thread-308809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:58:30.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:58:30.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:58:30.897 [DEBUG] [Thread-308809] [transport.py] [_log()] userauth is OK
2025-12-24T20:58:30.897 [DEBUG] [Thread-308809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:58:30.897 [DEBUG] [Thread-308809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:58:30.897 [DEBUG] [Thread-308809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:58:30.897 [DEBUG] [Thread-308809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:58:30.914 [INFO] [Thread-308809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:58:30.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:58:30.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:58:31.785 [DEBUG] [Thread-308809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:58:31.785 [DEBUG] [Thread-308809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:58:31.836 [DEBUG] [Thread-308809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:58:31.836 [DEBUG] [Thread-308809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:58:31.845 [DEBUG] [Thread-308809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:58:31.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:58:31.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')
2025-12-24T20:58:31.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
2025-12-24T20:58:31.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:58:31.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:58:31.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:58:31.885 [DEBUG] [Thread-308809] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:58:36.515 [DEBUG] [Thread-308811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:58:51.860 [DEBUG] [Thread-308812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:59:02.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:59:02.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:59:02.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:59:07.209 [DEBUG] [Thread-308813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:59:09.165 [DEBUG] [Thread-308814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:59:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 57, 49), 12.32, 44.58, 0.0, 25.2, 18.47, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:59:11.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:57:49
2025-12-24T20:59:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:59:12.488 [DEBUG] [Thread-308815] [transport.py] [_log()] starting thread (client mode): 0xf57bee30
2025-12-24T20:59:12.489 [DEBUG] [Thread-308815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:59:12.497 [DEBUG] [Thread-308815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:59:12.497 [INFO] [Thread-308815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:59:12.500 [DEBUG] [Thread-308815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:59:12.500 [DEBUG] [Thread-308815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] client lang: <none>
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] server lang: <none>
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] kex follows: False
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] Compression: none
2025-12-24T20:59:12.501 [DEBUG] [Thread-308815] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:59:12.526 [DEBUG] [Thread-308815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:59:12.530 [DEBUG] [Thread-308815] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:59:12.532 [DEBUG] [Thread-308815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:59:12.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:59:12.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:59:12.568 [DEBUG] [Thread-308815] [transport.py] [_log()] userauth is OK
2025-12-24T20:59:12.568 [DEBUG] [Thread-308815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:59:12.568 [DEBUG] [Thread-308815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:59:12.568 [DEBUG] [Thread-308815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:59:12.568 [DEBUG] [Thread-308815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:59:12.587 [INFO] [Thread-308815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:59:12.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:59:13.198 [DEBUG] [Thread-308815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:59:13.198 [DEBUG] [Thread-308815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:59:13.238 [DEBUG] [Thread-308815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:59:13.239 [DEBUG] [Thread-308815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:59:13.239 [DEBUG] [Thread-308815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:59:13.241 [DEBUG] [Thread-308815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:59:13.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:59:13.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:59:13.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:59:13.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:59:13.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:59:13.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:59:13.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:59:13.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:59:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:59:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.790689 -999.00  +18.40  19.90     49   +7.70 1 1 1 1 1     0    0 8.04 -109.30 ZNESW 21.8 19.9 166.7 24.8 18.9 -21.9 18.8 -21.8 18.6 -20.1 18.9 -21.0
2025-12-24T20:59:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:59:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:59:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.790689
2025-12-24T20:59:13.303 [DEBUG] [Thread-308815] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:59:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:59:13.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:59:13.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:59:13.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:59:13.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:59:13.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:57:49', tmtdew=12.32, humidity=44.58, cloud=0.0, wind=25.2, temperature=18.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:58:40', seeing=1.47, atlas_timestamp='2025-12-24T18:58:35.530', atlas_cloud=1, atlas_rain=1, zp_data=[0.07924999999999827, 0.05525000000000091, 0.18425000000000047, 0.059499999999999886, 0.1255000000000006, 0.043250000000000455, 0.0389999999999997, 0.07925000000000182, 0.08499999999999908, 0.07049999999999912, 0.07525000000000048, -0.034000000000000696, 0.09499999999999886, 0.14124999999999943, 0.08150000000000013, 0.05299999999999905, 0.07925000000000004, 0.11950000000000038, 0.07399999999999984, 0.023249999999999105, 0.1059999999999981, 0.07124999999999915, 0.0547500000000003, 0.11374999999999957, 0.10749999999999993, 0.09849999999999959, 0.13375000000000092, 0.15499999999999936, 0.21600000000000108, 0.17300000000000182, 0.08950000000000102, 0.07200000000000095, 0.1347499999999986], zp_timestamp='2025-12-24T18:57:00')
2025-12-24T20:59:13.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:59:13.452 [DEBUG] [Thread-308818] [transport.py] [_log()] starting thread (client mode): 0xf57bf550
2025-12-24T20:59:13.452 [DEBUG] [Thread-308818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:59:13.466 [DEBUG] [Thread-308818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:59:13.466 [INFO] [Thread-308818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] client lang: <none>
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] server lang: <none>
2025-12-24T20:59:13.473 [DEBUG] [Thread-308818] [transport.py] [_log()] kex follows: False
2025-12-24T20:59:13.474 [DEBUG] [Thread-308818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:59:13.474 [DEBUG] [Thread-308818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:59:13.474 [DEBUG] [Thread-308818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:59:13.474 [DEBUG] [Thread-308818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:59:13.474 [DEBUG] [Thread-308818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:59:13.474 [DEBUG] [Thread-308818] [transport.py] [_log()] Compression: none
2025-12-24T20:59:13.474 [DEBUG] [Thread-308818] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:59:13.528 [DEBUG] [Thread-308818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:59:13.528 [DEBUG] [Thread-308818] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:59:13.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:59:13.529 [DEBUG] [Thread-308818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:59:13.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:59:13.585 [DEBUG] [Thread-308818] [transport.py] [_log()] userauth is OK
2025-12-24T20:59:13.586 [DEBUG] [Thread-308818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:59:13.586 [DEBUG] [Thread-308818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:59:13.586 [DEBUG] [Thread-308818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:59:13.586 [DEBUG] [Thread-308818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:59:13.603 [INFO] [Thread-308818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:59:13.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:59:13.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:59:14.496 [DEBUG] [Thread-308818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:59:14.497 [DEBUG] [Thread-308818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:59:14.497 [DEBUG] [Thread-308818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:59:14.497 [DEBUG] [Thread-308818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:59:14.506 [DEBUG] [Thread-308818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:59:14.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:59:14.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:59:14.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
2025-12-24T20:59:14.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:59:14.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:59:14.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:59:14.809 [DEBUG] [Thread-308818] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:59:22.971 [DEBUG] [Thread-308820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:59:26.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:59:26.792 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:59:39.478 [DEBUG] [Thread-308821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T20:59:44.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T20:59:44.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T20:59:44.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T20:59:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 59, 35), 12.19, 44.66, 0.0, 29.08, 18.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T20:59:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:59:35
2025-12-24T20:59:48.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T20:59:48.975 [DEBUG] [Thread-308822] [transport.py] [_log()] starting thread (client mode): 0xf57be080
2025-12-24T20:59:48.975 [DEBUG] [Thread-308822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:59:48.984 [DEBUG] [Thread-308822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T20:59:48.984 [INFO] [Thread-308822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] client lang: <none>
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] server lang: <none>
2025-12-24T20:59:48.989 [DEBUG] [Thread-308822] [transport.py] [_log()] kex follows: False
2025-12-24T20:59:48.990 [DEBUG] [Thread-308822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:59:48.990 [DEBUG] [Thread-308822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:59:48.990 [DEBUG] [Thread-308822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:59:48.990 [DEBUG] [Thread-308822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:59:48.990 [DEBUG] [Thread-308822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:59:48.990 [DEBUG] [Thread-308822] [transport.py] [_log()] Compression: none
2025-12-24T20:59:48.990 [DEBUG] [Thread-308822] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:59:49.023 [DEBUG] [Thread-308822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:59:49.026 [DEBUG] [Thread-308822] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:59:49.027 [DEBUG] [Thread-308822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T20:59:49.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T20:59:49.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:59:49.031 [DEBUG] [Thread-308822] [transport.py] [_log()] userauth is OK
2025-12-24T20:59:49.031 [DEBUG] [Thread-308822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:59:49.031 [DEBUG] [Thread-308822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:59:49.031 [DEBUG] [Thread-308822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T20:59:49.031 [DEBUG] [Thread-308822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:59:49.061 [INFO] [Thread-308822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:59:49.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:59:49.686 [DEBUG] [Thread-308822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:59:49.686 [DEBUG] [Thread-308822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:59:49.687 [DEBUG] [Thread-308822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T20:59:49.728 [DEBUG] [Thread-308822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:59:49.728 [DEBUG] [Thread-308822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:59:49.730 [DEBUG] [Thread-308822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:59:49.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:59:49.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T20:59:49.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T20:59:49.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T20:59:49.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:59:49.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T20:59:49.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:59:49.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:59:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T20:59:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.791037 -999.00  +18.40  19.70     50   +7.70 1 1 1 1 1     0    0 7.86 -105.17 ZNESW 26.9 19.7 184.8 32.8 18.9 -22.0 18.8 -21.8 18.6 -20.2 18.9 -20.9
2025-12-24T20:59:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T20:59:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T20:59:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.791037
2025-12-24T20:59:49.758 [DEBUG] [Thread-308822] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:59:49.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T20:59:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T20:59:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T20:59:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T20:59:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T20:59:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:59:35', tmtdew=12.19, humidity=44.66, cloud=0.0, wind=29.08, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T20:59:36', seeing=1.41, atlas_timestamp='2025-12-24T18:59:05.597', atlas_cloud=1, atlas_rain=1, zp_data=[0.07924999999999827, 0.05525000000000091, 0.18425000000000047, 0.059499999999999886, 0.1255000000000006, 0.043250000000000455, 0.0389999999999997, 0.07925000000000182, 0.08499999999999908, 0.07049999999999912, 0.07525000000000048, -0.034000000000000696, 0.09499999999999886, 0.14124999999999943, 0.08150000000000013, 0.05299999999999905, 0.07925000000000004, 0.11950000000000038, 0.07399999999999984, 0.023249999999999105, 0.1059999999999981, 0.07124999999999915, 0.0547500000000003, 0.11374999999999957, 0.10749999999999993, 0.09849999999999959, 0.13375000000000092, 0.15499999999999936, 0.21600000000000108, 0.17300000000000182, 0.08950000000000102, 0.07200000000000095, 0.1347499999999986], zp_timestamp='2025-12-24T18:57:00')
2025-12-24T20:59:49.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T20:59:49.862 [DEBUG] [Thread-308825] [transport.py] [_log()] starting thread (client mode): 0xf5743c10
2025-12-24T20:59:49.862 [DEBUG] [Thread-308825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T20:59:49.877 [DEBUG] [Thread-308825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T20:59:49.877 [INFO] [Thread-308825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] client lang: <none>
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] server lang: <none>
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] kex follows: False
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T20:59:49.884 [DEBUG] [Thread-308825] [transport.py] [_log()] Compression: none
2025-12-24T20:59:49.886 [DEBUG] [Thread-308825] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T20:59:49.945 [DEBUG] [Thread-308825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T20:59:49.945 [DEBUG] [Thread-308825] [transport.py] [_log()] Switch to new keys ...
2025-12-24T20:59:49.945 [DEBUG] [Thread-308825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T20:59:49.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T20:59:49.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T20:59:50.002 [DEBUG] [Thread-308825] [transport.py] [_log()] userauth is OK
2025-12-24T20:59:50.002 [DEBUG] [Thread-308825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T20:59:50.002 [DEBUG] [Thread-308825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T20:59:50.002 [DEBUG] [Thread-308825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T20:59:50.002 [DEBUG] [Thread-308825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T20:59:50.020 [INFO] [Thread-308825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T20:59:50.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T20:59:50.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T20:59:50.831 [DEBUG] [Thread-308825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T20:59:50.831 [DEBUG] [Thread-308825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T20:59:50.878 [DEBUG] [Thread-308825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T20:59:50.879 [DEBUG] [Thread-308825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T20:59:50.887 [DEBUG] [Thread-308825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T20:59:50.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T20:59:50.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T20:59:50.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T20:59:50.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T20:59:50.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T20:59:50.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T20:59:50.921 [DEBUG] [Thread-308825] [transport.py] [_log()] EOF in transport thread
2025-12-24T20:59:54.669 [DEBUG] [Thread-308827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:00:10.108 [DEBUG] [Thread-308828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:00:10.132 [DEBUG] [Thread-308829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:00:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:00:21.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:00:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:00:25.713 [DEBUG] [Thread-308830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:00:27.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:00:27.047 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:00:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 20, 59, 35), 12.19, 44.66, 0.0, 29.08, 18.39, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:00:38.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 20:59:35
2025-12-24T21:00:41.262 [DEBUG] [Thread-308831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:00:43.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:00:44.173 [DEBUG] [Thread-308832] [transport.py] [_log()] starting thread (client mode): 0xfabc56f0
2025-12-24T21:00:44.174 [DEBUG] [Thread-308832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:00:44.175 [DEBUG] [Thread-308832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:00:44.175 [INFO] [Thread-308832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] client lang: <none>
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] server lang: <none>
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] kex follows: False
2025-12-24T21:00:44.183 [DEBUG] [Thread-308832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:00:44.184 [DEBUG] [Thread-308832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:00:44.184 [DEBUG] [Thread-308832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:00:44.184 [DEBUG] [Thread-308832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:00:44.184 [DEBUG] [Thread-308832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:00:44.184 [DEBUG] [Thread-308832] [transport.py] [_log()] Compression: none
2025-12-24T21:00:44.184 [DEBUG] [Thread-308832] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:00:44.543 [DEBUG] [Thread-308832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:00:44.554 [DEBUG] [Thread-308832] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:00:44.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:00:44.726 [DEBUG] [Thread-308832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:00:44.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:00:44.729 [DEBUG] [Thread-308832] [transport.py] [_log()] userauth is OK
2025-12-24T21:00:44.729 [DEBUG] [Thread-308832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:00:44.730 [DEBUG] [Thread-308832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:00:44.730 [DEBUG] [Thread-308832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:00:44.730 [DEBUG] [Thread-308832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:00:44.745 [INFO] [Thread-308832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:00:44.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:00:45.422 [DEBUG] [Thread-308832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:00:45.422 [DEBUG] [Thread-308832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:00:45.423 [DEBUG] [Thread-308832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:00:45.465 [DEBUG] [Thread-308832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:00:45.465 [DEBUG] [Thread-308832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:00:45.468 [DEBUG] [Thread-308832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:00:45.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:00:45.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:00:45.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:00:45.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:00:45.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:00:45.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:00:45.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:00:45.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:00:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:00:45.534 [DEBUG] [Thread-308832] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:00:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.792078 -999.00  +18.30  26.91     50   +7.80 1 1 1 1 1     0    0 8.41 -95.21 ZNESW 22.6 26.9 180.0 36.1 18.9 -22.0 18.7 -21.7 18.5 -20.2 18.9 -21.1
2025-12-24T21:00:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:00:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:00:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.792078
2025-12-24T21:00:45.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:00:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:00:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:00:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:00:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:00:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T20:59:35', tmtdew=12.19, humidity=44.66, cloud=0.0, wind=29.08, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:00:11', seeing=1.41, atlas_timestamp='2025-12-24T19:00:35.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.07924999999999827, 0.05525000000000091, 0.18425000000000047, 0.059499999999999886, 0.1255000000000006, 0.043250000000000455, 0.0389999999999997, 0.07925000000000182, 0.08499999999999908, 0.07049999999999912, 0.07525000000000048, -0.034000000000000696, 0.09499999999999886, 0.14124999999999943, 0.08150000000000013, 0.05299999999999905, 0.07925000000000004, 0.11950000000000038, 0.07399999999999984, 0.023249999999999105, 0.1059999999999981, 0.07124999999999915, 0.0547500000000003, 0.11374999999999957, 0.10749999999999993, 0.09849999999999959, 0.13375000000000092, 0.15499999999999936, 0.21600000000000108, 0.17300000000000182, 0.08950000000000102, 0.07200000000000095, 0.1347499999999986], zp_timestamp='2025-12-24T18:57:00')
2025-12-24T21:00:45.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:00:45.713 [DEBUG] [Thread-308835] [transport.py] [_log()] starting thread (client mode): 0xf5743d60
2025-12-24T21:00:45.713 [DEBUG] [Thread-308835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:00:45.713 [DEBUG] [Thread-308835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:00:45.713 [INFO] [Thread-308835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] client lang: <none>
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] server lang: <none>
2025-12-24T21:00:45.722 [DEBUG] [Thread-308835] [transport.py] [_log()] kex follows: False
2025-12-24T21:00:45.723 [DEBUG] [Thread-308835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:00:45.723 [DEBUG] [Thread-308835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:00:45.723 [DEBUG] [Thread-308835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:00:45.723 [DEBUG] [Thread-308835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:00:45.723 [DEBUG] [Thread-308835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:00:45.724 [DEBUG] [Thread-308835] [transport.py] [_log()] Compression: none
2025-12-24T21:00:45.724 [DEBUG] [Thread-308835] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:00:45.789 [DEBUG] [Thread-308835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:00:45.790 [DEBUG] [Thread-308835] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:00:45.790 [DEBUG] [Thread-308835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:00:45.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:00:45.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:00:45.847 [DEBUG] [Thread-308835] [transport.py] [_log()] userauth is OK
2025-12-24T21:00:45.847 [DEBUG] [Thread-308835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:00:45.847 [DEBUG] [Thread-308835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:00:45.847 [DEBUG] [Thread-308835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:00:45.847 [DEBUG] [Thread-308835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:00:45.864 [INFO] [Thread-308835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:00:45.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:00:45.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:00:46.705 [DEBUG] [Thread-308835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:00:46.705 [DEBUG] [Thread-308835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:00:46.753 [DEBUG] [Thread-308835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:00:46.753 [DEBUG] [Thread-308835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:00:46.764 [DEBUG] [Thread-308835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:00:46.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:00:46.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:00:46.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
2025-12-24T21:00:46.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:00:46.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:00:46.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:00:46.944 [DEBUG] [Thread-308835] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:00:57.304 [DEBUG] [Thread-308837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:01:11.242 [DEBUG] [Thread-308838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:01:13.008 [DEBUG] [Thread-308839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:01:17.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:01:17.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:01:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:01:27.275 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:01:27.298 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:01:28.609 [DEBUG] [Thread-308840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:01:29.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 0, 10), 12.19, 44.66, 0.0, 33.88, 18.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:01:29.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:00:10
2025-12-24T21:01:31.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:01:32.217 [DEBUG] [Thread-308841] [transport.py] [_log()] starting thread (client mode): 0xf5742260
2025-12-24T21:01:32.217 [DEBUG] [Thread-308841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:01:32.225 [DEBUG] [Thread-308841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:01:32.225 [INFO] [Thread-308841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:01:32.230 [DEBUG] [Thread-308841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] client lang: <none>
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] server lang: <none>
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] kex follows: False
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] Compression: none
2025-12-24T21:01:32.231 [DEBUG] [Thread-308841] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:01:32.279 [DEBUG] [Thread-308841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:01:32.286 [DEBUG] [Thread-308841] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:01:32.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:01:32.288 [DEBUG] [Thread-308841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:01:32.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:01:32.291 [DEBUG] [Thread-308841] [transport.py] [_log()] userauth is OK
2025-12-24T21:01:32.291 [DEBUG] [Thread-308841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:01:32.291 [DEBUG] [Thread-308841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:01:32.291 [DEBUG] [Thread-308841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:01:32.291 [DEBUG] [Thread-308841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:01:32.310 [INFO] [Thread-308841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:01:32.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:01:33.120 [DEBUG] [Thread-308841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:01:33.120 [DEBUG] [Thread-308841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:01:33.121 [DEBUG] [Thread-308841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:01:33.266 [DEBUG] [Thread-308841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:01:33.266 [DEBUG] [Thread-308841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:01:33.268 [DEBUG] [Thread-308841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:01:33.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:01:33.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:01:33.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:01:33.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:01:33.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:01:33.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:01:33.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:01:33.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:01:33.285 [DEBUG] [Thread-308841] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:01:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:01:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.792426 -999.00  +18.30  23.72     50   +7.80 1 1 1 1 1     0    0 7.87 -104.12 ZNESW 17.5 23.7 175.6 30.0 18.9 -22.0 18.8 -21.6 18.5 -20.2 18.8 -21.0
2025-12-24T21:01:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:01:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:01:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.792426
2025-12-24T21:01:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:01:33.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:01:33.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:01:33.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:01:33.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:01:33.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:00:10', tmtdew=12.19, humidity=44.66, cloud=0.0, wind=33.88, temperature=18.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:00:11', seeing=1.41, atlas_timestamp='2025-12-24T19:01:05.606', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T18:59:00')
2025-12-24T21:01:33.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:01:33.396 [DEBUG] [Thread-308844] [transport.py] [_log()] starting thread (client mode): 0xf81e6b60
2025-12-24T21:01:33.396 [DEBUG] [Thread-308844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:01:33.411 [DEBUG] [Thread-308844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:01:33.411 [INFO] [Thread-308844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] client lang: <none>
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] server lang: <none>
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] kex follows: False
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] Compression: none
2025-12-24T21:01:33.418 [DEBUG] [Thread-308844] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:01:33.473 [DEBUG] [Thread-308844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:01:33.473 [DEBUG] [Thread-308844] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:01:33.474 [DEBUG] [Thread-308844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:01:33.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:01:33.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:01:33.530 [DEBUG] [Thread-308844] [transport.py] [_log()] userauth is OK
2025-12-24T21:01:33.531 [DEBUG] [Thread-308844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:01:33.531 [DEBUG] [Thread-308844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:01:33.531 [DEBUG] [Thread-308844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:01:33.531 [DEBUG] [Thread-308844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:01:33.545 [INFO] [Thread-308844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:01:33.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:01:33.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:01:34.539 [DEBUG] [Thread-308844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:01:34.539 [DEBUG] [Thread-308844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:01:34.539 [DEBUG] [Thread-308844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:01:34.539 [DEBUG] [Thread-308844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:01:34.548 [DEBUG] [Thread-308844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:01:34.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:01:34.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:01:34.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:01:34.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:01:34.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:01:34.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:01:34.678 [DEBUG] [Thread-308844] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:01:43.887 [DEBUG] [Thread-308846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:01:59.350 [DEBUG] [Thread-308847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:02:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:02:04.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:02:04.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
2025-12-24T21:02:08.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 1, 29), 12.13, 44.83, 0.0, 32.15, 18.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:02:08.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:01:29
2025-12-24T21:02:08.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:02:08.707 [DEBUG] [Thread-308848] [transport.py] [_log()] starting thread (client mode): 0xf57be8f0
2025-12-24T21:02:08.708 [DEBUG] [Thread-308848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:02:08.718 [DEBUG] [Thread-308848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:02:08.718 [INFO] [Thread-308848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:02:08.721 [DEBUG] [Thread-308848] [transport.py] [_log()] client lang: <none>
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] server lang: <none>
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] kex follows: False
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] Compression: none
2025-12-24T21:02:08.722 [DEBUG] [Thread-308848] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:02:08.751 [DEBUG] [Thread-308848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:02:08.755 [DEBUG] [Thread-308848] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:02:08.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:02:08.756 [DEBUG] [Thread-308848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:02:08.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:02:08.759 [DEBUG] [Thread-308848] [transport.py] [_log()] userauth is OK
2025-12-24T21:02:08.759 [DEBUG] [Thread-308848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:02:08.759 [DEBUG] [Thread-308848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:02:08.759 [DEBUG] [Thread-308848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:02:08.759 [DEBUG] [Thread-308848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:02:08.778 [INFO] [Thread-308848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:02:08.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:02:09.406 [DEBUG] [Thread-308848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:02:09.406 [DEBUG] [Thread-308848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:02:09.408 [DEBUG] [Thread-308848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:02:09.446 [DEBUG] [Thread-308848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:02:09.446 [DEBUG] [Thread-308848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:02:09.448 [DEBUG] [Thread-308848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:02:09.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:02:09.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:02:09.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:02:09.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:02:09.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:02:09.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:02:09.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:02:09.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:02:09.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:02:09.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.792773 -999.00  +18.30  22.91     50   +7.80 1 1 1 1 1     0    0 7.93 -100.27 ZNESW 27.9 22.9 178.6 30.9 18.9 -22.0 18.7 -21.8 18.6 -20.2 18.8 -20.9
2025-12-24T21:02:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:02:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:02:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.792773
2025-12-24T21:02:09.474 [DEBUG] [Thread-308848] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:02:09.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:02:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:02:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:02:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:02:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:02:09.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:01:29', tmtdew=12.13, humidity=44.83, cloud=0.0, wind=32.15, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:01:30', seeing=1.41, atlas_timestamp='2025-12-24T19:01:35.587', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T18:59:00')
2025-12-24T21:02:09.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:02:09.577 [DEBUG] [Thread-308851] [transport.py] [_log()] starting thread (client mode): 0xf57bedd0
2025-12-24T21:02:09.577 [DEBUG] [Thread-308851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:02:09.592 [DEBUG] [Thread-308851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:02:09.592 [INFO] [Thread-308851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] client lang: <none>
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] server lang: <none>
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] kex follows: False
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:02:09.599 [DEBUG] [Thread-308851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:02:09.600 [DEBUG] [Thread-308851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:02:09.600 [DEBUG] [Thread-308851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:02:09.600 [DEBUG] [Thread-308851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:02:09.600 [DEBUG] [Thread-308851] [transport.py] [_log()] Compression: none
2025-12-24T21:02:09.600 [DEBUG] [Thread-308851] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:02:09.654 [DEBUG] [Thread-308851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:02:09.654 [DEBUG] [Thread-308851] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:02:09.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:02:09.655 [DEBUG] [Thread-308851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:02:09.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:02:09.711 [DEBUG] [Thread-308851] [transport.py] [_log()] userauth is OK
2025-12-24T21:02:09.711 [DEBUG] [Thread-308851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:02:09.711 [DEBUG] [Thread-308851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:02:09.711 [DEBUG] [Thread-308851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:02:09.711 [DEBUG] [Thread-308851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:02:09.729 [INFO] [Thread-308851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:02:09.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:02:09.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:02:10.568 [DEBUG] [Thread-308851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:02:10.568 [DEBUG] [Thread-308851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:02:10.616 [DEBUG] [Thread-308851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:02:10.616 [DEBUG] [Thread-308851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:02:10.629 [DEBUG] [Thread-308851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:02:10.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:02:10.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:02:10.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:02:10.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:02:10.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:02:10.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:02:10.667 [DEBUG] [Thread-308851] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:02:11.547 [DEBUG] [Thread-308853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:02:14.458 [DEBUG] [Thread-308854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:02:27.518 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:02:27.529 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:02:29.820 [DEBUG] [Thread-308855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:02:40.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:02:40.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:02:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:02:42.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 2, 16), 12.09, 44.96, 0.0, 34.46, 18.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:02:42.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:02:16
2025-12-24T21:02:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:02:42.646 [DEBUG] [Thread-308856] [transport.py] [_log()] starting thread (client mode): 0xf57739a0
2025-12-24T21:02:42.647 [DEBUG] [Thread-308856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:02:42.658 [DEBUG] [Thread-308856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:02:42.658 [INFO] [Thread-308856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] client lang: <none>
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] server lang: <none>
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] kex follows: False
2025-12-24T21:02:42.670 [DEBUG] [Thread-308856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:02:42.671 [DEBUG] [Thread-308856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:02:42.671 [DEBUG] [Thread-308856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:02:42.671 [DEBUG] [Thread-308856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:02:42.671 [DEBUG] [Thread-308856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:02:42.671 [DEBUG] [Thread-308856] [transport.py] [_log()] Compression: none
2025-12-24T21:02:42.671 [DEBUG] [Thread-308856] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:02:42.848 [DEBUG] [Thread-308856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:02:42.858 [DEBUG] [Thread-308856] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:02:42.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:02:42.863 [DEBUG] [Thread-308856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:02:42.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:02:42.870 [DEBUG] [Thread-308856] [transport.py] [_log()] userauth is OK
2025-12-24T21:02:42.870 [DEBUG] [Thread-308856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:02:42.871 [DEBUG] [Thread-308856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:02:42.871 [DEBUG] [Thread-308856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:02:42.871 [DEBUG] [Thread-308856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:02:42.891 [INFO] [Thread-308856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:02:42.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:02:43.578 [DEBUG] [Thread-308856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:02:43.578 [DEBUG] [Thread-308856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:02:43.579 [DEBUG] [Thread-308856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:02:43.620 [DEBUG] [Thread-308856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:02:43.620 [DEBUG] [Thread-308856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:02:43.622 [DEBUG] [Thread-308856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:02:43.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:02:43.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:02:43.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:02:43.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:02:43.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:02:43.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:02:43.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:02:43.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:02:43.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:02:43.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.793120 -999.00  +18.30  24.99     50   +7.80 1 1 1 1 1     0    0 8.53 -90.85 ZNESW 18.7 25.0 176.8 34.0 18.9 -21.9 18.7 -21.8 18.6 -20.0 18.8 -20.9
2025-12-24T21:02:43.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:02:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:02:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.793120
2025-12-24T21:02:43.664 [DEBUG] [Thread-308856] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:02:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:02:43.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:02:43.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:02:43.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:02:43.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:02:43.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:02:16', tmtdew=12.09, humidity=44.96, cloud=0.0, wind=34.46, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:02:17', seeing=1.41, atlas_timestamp='2025-12-24T19:02:05.568', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T18:59:00')
2025-12-24T21:02:43.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:02:43.766 [DEBUG] [Thread-308859] [transport.py] [_log()] starting thread (client mode): 0xf57bd900
2025-12-24T21:02:43.766 [DEBUG] [Thread-308859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:02:43.780 [DEBUG] [Thread-308859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:02:43.780 [INFO] [Thread-308859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] client lang: <none>
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] server lang: <none>
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] kex follows: False
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] Compression: none
2025-12-24T21:02:43.788 [DEBUG] [Thread-308859] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:02:43.846 [DEBUG] [Thread-308859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:02:43.847 [DEBUG] [Thread-308859] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:02:43.847 [DEBUG] [Thread-308859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:02:43.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:02:43.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:02:43.903 [DEBUG] [Thread-308859] [transport.py] [_log()] userauth is OK
2025-12-24T21:02:43.903 [DEBUG] [Thread-308859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:02:43.904 [DEBUG] [Thread-308859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:02:43.904 [DEBUG] [Thread-308859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:02:43.904 [DEBUG] [Thread-308859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:02:43.921 [INFO] [Thread-308859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:02:43.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:02:43.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:02:44.750 [DEBUG] [Thread-308859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:02:44.750 [DEBUG] [Thread-308859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:02:44.796 [DEBUG] [Thread-308859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:02:44.796 [DEBUG] [Thread-308859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:02:44.806 [DEBUG] [Thread-308859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:02:44.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:02:44.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:02:44.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:02:44.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:02:44.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:02:44.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:02:44.842 [DEBUG] [Thread-308859] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:02:45.128 [DEBUG] [Thread-308861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:03:00.493 [DEBUG] [Thread-308862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:03:11.870 [DEBUG] [Thread-308863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:03:14.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:03:14.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:03:15.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:03:15.732 [DEBUG] [Thread-308864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:03:17.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 2, 55), 11.97, 45.53, 0.0, 30.44, 18.34, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:03:17.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:02:55
2025-12-24T21:03:17.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:03:17.797 [DEBUG] [Thread-308865] [transport.py] [_log()] starting thread (client mode): 0xfabc6680
2025-12-24T21:03:17.797 [DEBUG] [Thread-308865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:03:17.812 [DEBUG] [Thread-308865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:03:17.812 [INFO] [Thread-308865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:03:17.815 [DEBUG] [Thread-308865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] client lang: <none>
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] server lang: <none>
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] kex follows: False
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:03:17.816 [DEBUG] [Thread-308865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:03:17.817 [DEBUG] [Thread-308865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:03:17.817 [DEBUG] [Thread-308865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:03:17.817 [DEBUG] [Thread-308865] [transport.py] [_log()] Compression: none
2025-12-24T21:03:17.817 [DEBUG] [Thread-308865] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:03:17.847 [DEBUG] [Thread-308865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:03:17.851 [DEBUG] [Thread-308865] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:03:17.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:03:17.854 [DEBUG] [Thread-308865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:03:17.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:03:17.856 [DEBUG] [Thread-308865] [transport.py] [_log()] userauth is OK
2025-12-24T21:03:17.856 [DEBUG] [Thread-308865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:03:17.857 [DEBUG] [Thread-308865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:03:17.857 [DEBUG] [Thread-308865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:03:17.857 [DEBUG] [Thread-308865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:03:17.876 [INFO] [Thread-308865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:03:17.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:03:18.720 [DEBUG] [Thread-308865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:03:18.720 [DEBUG] [Thread-308865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:03:18.721 [DEBUG] [Thread-308865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:03:18.760 [DEBUG] [Thread-308865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:03:18.760 [DEBUG] [Thread-308865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:03:18.762 [DEBUG] [Thread-308865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:03:18.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:03:18.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:03:18.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:03:18.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:03:18.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:03:18.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:03:18.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:03:18.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:03:18.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:03:18.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.793467 -999.00  +18.30  29.02     50   +7.90 1 1 1 1 1     0    0 8.48 -90.18 ZNESW 31.9 29.0 178.4 45.4 18.8 -21.9 18.7 -21.6 18.5 -20.2 18.8 -20.9
2025-12-24T21:03:18.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:03:18.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:03:18.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.793467
2025-12-24T21:03:18.788 [DEBUG] [Thread-308865] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:03:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:03:18.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:03:18.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:03:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:03:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:03:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:02:55', tmtdew=11.97, humidity=45.53, cloud=0.0, wind=30.44, temperature=18.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:02:56', seeing=1.47, atlas_timestamp='2025-12-24T19:02:35.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T18:59:00')
2025-12-24T21:03:18.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:03:18.888 [DEBUG] [Thread-308868] [transport.py] [_log()] starting thread (client mode): 0xf57be0b0
2025-12-24T21:03:18.888 [DEBUG] [Thread-308868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:03:18.904 [DEBUG] [Thread-308868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:03:18.905 [INFO] [Thread-308868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] client lang: <none>
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] server lang: <none>
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] kex follows: False
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:03:18.913 [DEBUG] [Thread-308868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:03:18.914 [DEBUG] [Thread-308868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:03:18.914 [DEBUG] [Thread-308868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:03:18.914 [DEBUG] [Thread-308868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:03:18.921 [DEBUG] [Thread-308868] [transport.py] [_log()] Compression: none
2025-12-24T21:03:18.921 [DEBUG] [Thread-308868] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:03:18.975 [DEBUG] [Thread-308868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:03:18.978 [DEBUG] [Thread-308868] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:03:18.978 [DEBUG] [Thread-308868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:03:18.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:03:18.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:03:19.032 [DEBUG] [Thread-308868] [transport.py] [_log()] userauth is OK
2025-12-24T21:03:19.032 [DEBUG] [Thread-308868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:03:19.032 [DEBUG] [Thread-308868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:03:19.032 [DEBUG] [Thread-308868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:03:19.032 [DEBUG] [Thread-308868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:03:19.131 [INFO] [Thread-308868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:03:19.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:03:19.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:03:20.113 [DEBUG] [Thread-308868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:03:20.113 [DEBUG] [Thread-308868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:03:20.114 [DEBUG] [Thread-308868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:03:20.114 [DEBUG] [Thread-308868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:03:20.122 [DEBUG] [Thread-308868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:03:20.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:03:20.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:03:20.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:03:20.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:03:20.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:03:20.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:03:20.157 [DEBUG] [Thread-308868] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:03:27.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:03:27.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:03:30.850 [DEBUG] [Thread-308870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:03:46.140 [DEBUG] [Thread-308871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:03:50.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:03:50.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:03:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:03:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 3, 31), 11.96, 45.53, 0.0, 28.23, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:03:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:03:31
2025-12-24T21:03:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:03:52.247 [DEBUG] [Thread-308872] [transport.py] [_log()] starting thread (client mode): 0xf57427a0
2025-12-24T21:03:52.248 [DEBUG] [Thread-308872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:03:52.253 [DEBUG] [Thread-308872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:03:52.253 [INFO] [Thread-308872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] client lang: <none>
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] server lang: <none>
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] kex follows: False
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:03:52.257 [DEBUG] [Thread-308872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:03:52.258 [DEBUG] [Thread-308872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:03:52.258 [DEBUG] [Thread-308872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:03:52.258 [DEBUG] [Thread-308872] [transport.py] [_log()] Compression: none
2025-12-24T21:03:52.258 [DEBUG] [Thread-308872] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:03:52.278 [DEBUG] [Thread-308872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:03:52.281 [DEBUG] [Thread-308872] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:03:52.283 [DEBUG] [Thread-308872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:03:52.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:03:52.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:03:52.287 [DEBUG] [Thread-308872] [transport.py] [_log()] userauth is OK
2025-12-24T21:03:52.287 [DEBUG] [Thread-308872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:03:52.287 [DEBUG] [Thread-308872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:03:52.287 [DEBUG] [Thread-308872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:03:52.287 [DEBUG] [Thread-308872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:03:52.300 [INFO] [Thread-308872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:03:52.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:03:52.964 [DEBUG] [Thread-308872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:03:52.965 [DEBUG] [Thread-308872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:03:52.965 [DEBUG] [Thread-308872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:03:53.006 [DEBUG] [Thread-308872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:03:53.006 [DEBUG] [Thread-308872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:03:53.008 [DEBUG] [Thread-308872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:03:53.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:03:53.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:03:53.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:03:53.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:03:53.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:03:53.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:03:53.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:03:53.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:03:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:03:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.793814 -999.00  +18.20  31.97     50   +7.90 1 1 2 1 1     0    0 8.00 -98.24 ZNESW 25.9 32.0 175.6 38.1 18.8 -21.9 18.7 -21.5 18.5 -20.2 18.8 -20.8
2025-12-24T21:03:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:03:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:03:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.793814
2025-12-24T21:03:53.043 [DEBUG] [Thread-308872] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:03:53.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:03:53.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:03:53.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:03:53.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:03:53.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:03:53.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:03:31', tmtdew=11.96, humidity=45.53, cloud=0.0, wind=28.23, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:03:32', seeing=1.35, atlas_timestamp='2025-12-24T19:03:05.530', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T18:59:00')
2025-12-24T21:03:53.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:03:53.275 [DEBUG] [Thread-308875] [transport.py] [_log()] starting thread (client mode): 0xf57411b0
2025-12-24T21:03:53.275 [DEBUG] [Thread-308875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:03:53.275 [DEBUG] [Thread-308875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:03:53.275 [INFO] [Thread-308875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] client lang: <none>
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] server lang: <none>
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] kex follows: False
2025-12-24T21:03:53.284 [DEBUG] [Thread-308875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:03:53.285 [DEBUG] [Thread-308875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:03:53.285 [DEBUG] [Thread-308875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:03:53.285 [DEBUG] [Thread-308875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:03:53.285 [DEBUG] [Thread-308875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:03:53.285 [DEBUG] [Thread-308875] [transport.py] [_log()] Compression: none
2025-12-24T21:03:53.285 [DEBUG] [Thread-308875] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:03:53.347 [DEBUG] [Thread-308875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:03:53.347 [DEBUG] [Thread-308875] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:03:53.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:03:53.348 [DEBUG] [Thread-308875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:03:53.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:03:53.404 [DEBUG] [Thread-308875] [transport.py] [_log()] userauth is OK
2025-12-24T21:03:53.404 [DEBUG] [Thread-308875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:03:53.404 [DEBUG] [Thread-308875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:03:53.404 [DEBUG] [Thread-308875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:03:53.404 [DEBUG] [Thread-308875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:03:53.470 [INFO] [Thread-308875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:03:53.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:03:53.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:03:54.321 [DEBUG] [Thread-308875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:03:54.321 [DEBUG] [Thread-308875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:03:54.335 [DEBUG] [Thread-308875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:03:54.335 [DEBUG] [Thread-308875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:03:54.343 [DEBUG] [Thread-308875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:03:54.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:03:54.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:03:54.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:03:54.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:03:54.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:03:54.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:03:54.381 [DEBUG] [Thread-308875] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:04:02.018 [DEBUG] [Thread-308877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:04:12.256 [DEBUG] [Thread-308878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:04:17.200 [DEBUG] [Thread-308879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:04:24.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:04:24.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:04:24.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:04:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 4, 9), 11.97, 45.51, 0.0, 28.39, 18.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:04:27.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:04:09
2025-12-24T21:04:27.963 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:04:27.971 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:04:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:04:28.257 [DEBUG] [Thread-308880] [transport.py] [_log()] starting thread (client mode): 0xfabc73a0
2025-12-24T21:04:28.257 [DEBUG] [Thread-308880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:04:28.267 [DEBUG] [Thread-308880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:04:28.267 [INFO] [Thread-308880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] client lang: <none>
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] server lang: <none>
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] kex follows: False
2025-12-24T21:04:28.271 [DEBUG] [Thread-308880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:04:28.272 [DEBUG] [Thread-308880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:04:28.272 [DEBUG] [Thread-308880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:04:28.272 [DEBUG] [Thread-308880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:04:28.272 [DEBUG] [Thread-308880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:04:28.272 [DEBUG] [Thread-308880] [transport.py] [_log()] Compression: none
2025-12-24T21:04:28.272 [DEBUG] [Thread-308880] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:04:28.336 [DEBUG] [Thread-308880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:04:28.339 [DEBUG] [Thread-308880] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:04:28.340 [DEBUG] [Thread-308880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:04:28.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:04:28.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:04:28.342 [DEBUG] [Thread-308880] [transport.py] [_log()] userauth is OK
2025-12-24T21:04:28.343 [DEBUG] [Thread-308880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:04:28.343 [DEBUG] [Thread-308880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:04:28.343 [DEBUG] [Thread-308880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:04:28.343 [DEBUG] [Thread-308880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:04:28.361 [INFO] [Thread-308880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:04:28.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:04:29.009 [DEBUG] [Thread-308880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:04:29.009 [DEBUG] [Thread-308880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:04:29.010 [DEBUG] [Thread-308880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:04:29.050 [DEBUG] [Thread-308880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:04:29.050 [DEBUG] [Thread-308880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:04:29.052 [DEBUG] [Thread-308880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:04:29.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:04:29.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:04:29.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:04:29.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:04:29.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:04:29.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:04:29.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:04:29.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:04:29.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:04:29.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.794509 -999.00  +18.20  23.39     50   +7.90 1 1 1 1 1     0    0 8.10 -94.94 ZNESW 21.9 23.4 167.4 35.7 18.8 -21.9 18.7 -21.5 18.5 -20.0 18.8 -20.9
2025-12-24T21:04:29.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:04:29.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:04:29.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.794509
2025-12-24T21:04:29.082 [DEBUG] [Thread-308880] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:04:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:04:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:04:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:04:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:04:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:04:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:04:09', tmtdew=11.97, humidity=45.51, cloud=0.0, wind=28.39, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:04:10', seeing=2.04, atlas_timestamp='2025-12-24T19:04:05.578', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T19:03:00')
2025-12-24T21:04:29.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:04:29.183 [DEBUG] [Thread-308883] [transport.py] [_log()] starting thread (client mode): 0xfabc6a70
2025-12-24T21:04:29.183 [DEBUG] [Thread-308883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:04:29.199 [DEBUG] [Thread-308883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:04:29.199 [INFO] [Thread-308883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] client lang: <none>
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] server lang: <none>
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] kex follows: False
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:04:29.208 [DEBUG] [Thread-308883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:04:29.209 [DEBUG] [Thread-308883] [transport.py] [_log()] Compression: none
2025-12-24T21:04:29.209 [DEBUG] [Thread-308883] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:04:29.263 [DEBUG] [Thread-308883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:04:29.263 [DEBUG] [Thread-308883] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:04:29.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:04:29.263 [DEBUG] [Thread-308883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:04:29.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:04:29.324 [DEBUG] [Thread-308883] [transport.py] [_log()] userauth is OK
2025-12-24T21:04:29.324 [DEBUG] [Thread-308883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:04:29.324 [DEBUG] [Thread-308883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:04:29.324 [DEBUG] [Thread-308883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:04:29.325 [DEBUG] [Thread-308883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:04:29.338 [INFO] [Thread-308883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:04:29.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:04:29.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:04:30.157 [DEBUG] [Thread-308883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:04:30.157 [DEBUG] [Thread-308883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:04:30.205 [DEBUG] [Thread-308883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:04:30.205 [DEBUG] [Thread-308883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:04:30.213 [DEBUG] [Thread-308883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:04:30.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:04:30.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:04:30.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:04:30.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:04:30.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:04:30.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:04:30.246 [DEBUG] [Thread-308883] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:04:32.357 [DEBUG] [Thread-308885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:04:47.993 [DEBUG] [Thread-308886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:05:00.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:05:00.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:05:00.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:05:03.333 [DEBUG] [Thread-308887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:05:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 4, 48), 11.87, 45.66, 0.0, 33.15, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:05:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:04:48
2025-12-24T21:05:08.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:05:08.270 [DEBUG] [Thread-308888] [transport.py] [_log()] starting thread (client mode): 0xf572b220
2025-12-24T21:05:08.271 [DEBUG] [Thread-308888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:05:08.280 [DEBUG] [Thread-308888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:05:08.281 [INFO] [Thread-308888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:05:08.285 [DEBUG] [Thread-308888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:05:08.285 [DEBUG] [Thread-308888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:05:08.285 [DEBUG] [Thread-308888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] client lang: <none>
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] server lang: <none>
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] kex follows: False
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:05:08.286 [DEBUG] [Thread-308888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:05:08.287 [DEBUG] [Thread-308888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:05:08.287 [DEBUG] [Thread-308888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:05:08.287 [DEBUG] [Thread-308888] [transport.py] [_log()] Compression: none
2025-12-24T21:05:08.287 [DEBUG] [Thread-308888] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:05:08.326 [DEBUG] [Thread-308888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:05:08.331 [DEBUG] [Thread-308888] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:05:08.333 [DEBUG] [Thread-308888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:05:08.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:05:08.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:05:08.337 [DEBUG] [Thread-308888] [transport.py] [_log()] userauth is OK
2025-12-24T21:05:08.337 [DEBUG] [Thread-308888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:05:08.337 [DEBUG] [Thread-308888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:05:08.337 [DEBUG] [Thread-308888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:05:08.337 [DEBUG] [Thread-308888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:05:08.358 [INFO] [Thread-308888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:05:08.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:05:08.984 [DEBUG] [Thread-308888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:05:08.984 [DEBUG] [Thread-308888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:05:08.985 [DEBUG] [Thread-308888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:05:09.025 [DEBUG] [Thread-308888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:05:09.025 [DEBUG] [Thread-308888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:05:09.027 [DEBUG] [Thread-308888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:05:09.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:05:09.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:05:09.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:05:09.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:05:09.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:05:09.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:05:09.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:05:09.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:05:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:05:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.794856 -999.00  +18.20  26.78     50   +7.90 1 1 1 1 1     0    0 8.23 -90.75 ZNESW 25.1 26.8 169.4 32.4 18.8 -21.9 18.7 -21.5 18.5 -20.0 18.8 -21.1
2025-12-24T21:05:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:05:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:05:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.794856
2025-12-24T21:05:09.058 [DEBUG] [Thread-308888] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:05:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:05:09.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:05:09.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:05:09.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:05:09.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:05:09.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:04:48', tmtdew=11.87, humidity=45.66, cloud=0.0, wind=33.15, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:04:49', seeing=1.71, atlas_timestamp='2025-12-24T19:04:35.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T19:03:00')
2025-12-24T21:05:09.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:05:09.165 [DEBUG] [Thread-308891] [transport.py] [_log()] starting thread (client mode): 0xf57412d0
2025-12-24T21:05:09.165 [DEBUG] [Thread-308891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:05:09.180 [DEBUG] [Thread-308891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:05:09.180 [INFO] [Thread-308891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] client lang: <none>
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] server lang: <none>
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] kex follows: False
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] Compression: none
2025-12-24T21:05:09.188 [DEBUG] [Thread-308891] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:05:09.244 [DEBUG] [Thread-308891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:05:09.244 [DEBUG] [Thread-308891] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:05:09.244 [DEBUG] [Thread-308891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:05:09.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:05:09.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:05:09.301 [DEBUG] [Thread-308891] [transport.py] [_log()] userauth is OK
2025-12-24T21:05:09.301 [DEBUG] [Thread-308891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:05:09.301 [DEBUG] [Thread-308891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:05:09.302 [DEBUG] [Thread-308891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:05:09.302 [DEBUG] [Thread-308891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:05:09.316 [INFO] [Thread-308891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:05:09.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:05:09.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:05:10.159 [DEBUG] [Thread-308891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:05:10.159 [DEBUG] [Thread-308891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:05:10.207 [DEBUG] [Thread-308891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:05:10.207 [DEBUG] [Thread-308891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:05:10.215 [DEBUG] [Thread-308891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:05:10.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:05:10.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:05:10.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
2025-12-24T21:05:10.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:05:10.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:05:10.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:05:10.248 [DEBUG] [Thread-308891] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:05:12.567 [DEBUG] [Thread-308893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:05:18.940 [DEBUG] [Thread-308894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:05:28.207 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:05:28.236 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:05:34.271 [DEBUG] [Thread-308895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:05:40.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:05:40.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:05:40.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:05:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 5, 27), 11.86, 45.71, 0.0, 31.14, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:05:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:05:27
2025-12-24T21:05:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:05:48.958 [DEBUG] [Thread-308896] [transport.py] [_log()] starting thread (client mode): 0xf57295a0
2025-12-24T21:05:48.959 [DEBUG] [Thread-308896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:05:48.963 [DEBUG] [Thread-308896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:05:48.964 [INFO] [Thread-308896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] client lang: <none>
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] server lang: <none>
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] kex follows: False
2025-12-24T21:05:48.969 [DEBUG] [Thread-308896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:05:48.970 [DEBUG] [Thread-308896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:05:48.970 [DEBUG] [Thread-308896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:05:48.970 [DEBUG] [Thread-308896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:05:48.970 [DEBUG] [Thread-308896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:05:48.970 [DEBUG] [Thread-308896] [transport.py] [_log()] Compression: none
2025-12-24T21:05:48.970 [DEBUG] [Thread-308896] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:05:49.009 [DEBUG] [Thread-308896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:05:49.017 [DEBUG] [Thread-308896] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:05:49.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:05:49.024 [DEBUG] [Thread-308896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:05:49.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:05:49.029 [DEBUG] [Thread-308896] [transport.py] [_log()] userauth is OK
2025-12-24T21:05:49.029 [DEBUG] [Thread-308896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:05:49.029 [DEBUG] [Thread-308896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:05:49.029 [DEBUG] [Thread-308896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:05:49.029 [DEBUG] [Thread-308896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:05:49.064 [INFO] [Thread-308896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:05:49.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:05:49.453 [DEBUG] [Thread-308898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:05:49.710 [DEBUG] [Thread-308896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:05:49.710 [DEBUG] [Thread-308896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:05:49.713 [DEBUG] [Thread-308896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:05:49.752 [DEBUG] [Thread-308896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:05:49.752 [DEBUG] [Thread-308896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:05:49.755 [DEBUG] [Thread-308896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:05:49.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:05:49.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:05:49.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:05:49.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:05:49.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:05:49.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:05:49.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:05:49.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:05:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:05:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.795203 -999.00  +18.20  17.99     50   +7.90 1 1 1 1 1     0    0 7.97 -97.84 ZNESW 22.7 18.0 171.6 28.8 18.8 -21.9 18.7 -21.7 18.5 -20.1 18.8 -20.8
2025-12-24T21:05:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:05:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:05:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.795203
2025-12-24T21:05:49.821 [DEBUG] [Thread-308896] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:05:49.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:05:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:05:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:05:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:05:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:05:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:05:27', tmtdew=11.86, humidity=45.71, cloud=0.0, wind=31.14, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:05:28', seeing=2.78, atlas_timestamp='2025-12-24T19:05:05.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T19:03:00')
2025-12-24T21:05:49.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:05:49.947 [DEBUG] [Thread-308900] [transport.py] [_log()] starting thread (client mode): 0xf8189180
2025-12-24T21:05:49.947 [DEBUG] [Thread-308900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:05:49.962 [DEBUG] [Thread-308900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:05:49.962 [INFO] [Thread-308900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:05:49.969 [DEBUG] [Thread-308900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] client lang: <none>
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] server lang: <none>
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] kex follows: False
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] Compression: none
2025-12-24T21:05:49.970 [DEBUG] [Thread-308900] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:05:50.029 [DEBUG] [Thread-308900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:05:50.029 [DEBUG] [Thread-308900] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:05:50.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:05:50.029 [DEBUG] [Thread-308900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:05:50.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:05:50.085 [DEBUG] [Thread-308900] [transport.py] [_log()] userauth is OK
2025-12-24T21:05:50.085 [DEBUG] [Thread-308900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:05:50.085 [DEBUG] [Thread-308900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:05:50.085 [DEBUG] [Thread-308900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:05:50.085 [DEBUG] [Thread-308900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:05:50.099 [INFO] [Thread-308900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:05:50.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:05:50.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:05:50.933 [DEBUG] [Thread-308900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:05:50.934 [DEBUG] [Thread-308900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:05:50.978 [DEBUG] [Thread-308900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:05:50.978 [DEBUG] [Thread-308900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:05:50.987 [DEBUG] [Thread-308900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:05:50.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:05:50.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:05:51.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:05:51.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:05:51.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:05:51.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:05:51.020 [DEBUG] [Thread-308900] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:06:04.846 [DEBUG] [Thread-308902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:06:13.847 [DEBUG] [Thread-308903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:06:20.119 [DEBUG] [Thread-308904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:06:21.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:06:21.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:06:21.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:06:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 5, 27), 11.86, 45.71, 0.0, 31.14, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:06:28.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:05:27
2025-12-24T21:06:28.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:06:28.449 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:06:28.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:06:28.869 [DEBUG] [Thread-308905] [transport.py] [_log()] starting thread (client mode): 0xf57beb90
2025-12-24T21:06:28.870 [DEBUG] [Thread-308905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:06:28.878 [DEBUG] [Thread-308905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:06:28.878 [INFO] [Thread-308905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:06:28.883 [DEBUG] [Thread-308905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] client lang: <none>
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] server lang: <none>
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] kex follows: False
2025-12-24T21:06:28.884 [DEBUG] [Thread-308905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:06:28.885 [DEBUG] [Thread-308905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:06:28.885 [DEBUG] [Thread-308905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:06:28.885 [DEBUG] [Thread-308905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:06:28.885 [DEBUG] [Thread-308905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:06:28.885 [DEBUG] [Thread-308905] [transport.py] [_log()] Compression: none
2025-12-24T21:06:28.885 [DEBUG] [Thread-308905] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:06:28.924 [DEBUG] [Thread-308905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:06:28.929 [DEBUG] [Thread-308905] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:06:28.931 [DEBUG] [Thread-308905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:06:28.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:06:28.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:06:28.935 [DEBUG] [Thread-308905] [transport.py] [_log()] userauth is OK
2025-12-24T21:06:28.935 [DEBUG] [Thread-308905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:06:28.935 [DEBUG] [Thread-308905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:06:28.935 [DEBUG] [Thread-308905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:06:28.935 [DEBUG] [Thread-308905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:06:28.967 [INFO] [Thread-308905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:06:28.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:06:29.641 [DEBUG] [Thread-308905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:06:29.641 [DEBUG] [Thread-308905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:06:29.642 [DEBUG] [Thread-308905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:06:29.682 [DEBUG] [Thread-308905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:06:29.682 [DEBUG] [Thread-308905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:06:29.684 [DEBUG] [Thread-308905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:06:29.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:06:29.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:06:29.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:06:29.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:06:29.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:06:29.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:06:29.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:06:29.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:06:29.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:06:29.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.795550 -999.00  +18.20  21.77     50   +7.90 1 1 1 1 1     0    0 8.17 -94.10 ZNESW 19.9 21.8 176.8 27.4 18.8 -22.0 18.7 -21.5 18.4 -20.0 18.8 -20.9
2025-12-24T21:06:29.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:06:29.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:06:29.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.795550
2025-12-24T21:06:29.737 [DEBUG] [Thread-308905] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:06:29.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:06:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:06:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:06:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:06:29.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:06:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:05:27', tmtdew=11.86, humidity=45.71, cloud=0.0, wind=31.14, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:06:09', seeing=1.48, atlas_timestamp='2025-12-24T19:05:35.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T19:03:00')
2025-12-24T21:06:29.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:06:29.900 [DEBUG] [Thread-308908] [transport.py] [_log()] starting thread (client mode): 0xf5743130
2025-12-24T21:06:29.900 [DEBUG] [Thread-308908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:06:29.914 [DEBUG] [Thread-308908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:06:29.914 [INFO] [Thread-308908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] client lang: <none>
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] server lang: <none>
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] kex follows: False
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:06:29.925 [DEBUG] [Thread-308908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:06:29.926 [DEBUG] [Thread-308908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:06:29.926 [DEBUG] [Thread-308908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:06:29.926 [DEBUG] [Thread-308908] [transport.py] [_log()] Compression: none
2025-12-24T21:06:29.928 [DEBUG] [Thread-308908] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:06:29.981 [DEBUG] [Thread-308908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:06:29.981 [DEBUG] [Thread-308908] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:06:29.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:06:29.982 [DEBUG] [Thread-308908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:06:29.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:06:30.038 [DEBUG] [Thread-308908] [transport.py] [_log()] userauth is OK
2025-12-24T21:06:30.038 [DEBUG] [Thread-308908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:06:30.038 [DEBUG] [Thread-308908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:06:30.038 [DEBUG] [Thread-308908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:06:30.038 [DEBUG] [Thread-308908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:06:30.054 [INFO] [Thread-308908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:06:30.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:06:30.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:06:30.903 [DEBUG] [Thread-308908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:06:30.903 [DEBUG] [Thread-308908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:06:30.954 [DEBUG] [Thread-308908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:06:30.954 [DEBUG] [Thread-308908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:06:30.966 [DEBUG] [Thread-308908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:06:30.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:06:30.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:06:30.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:06:30.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:06:30.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:06:30.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:06:30.999 [DEBUG] [Thread-308908] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:06:35.311 [DEBUG] [Thread-308910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:06:50.846 [DEBUG] [Thread-308911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:07:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:07:01.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:07:01.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:07:06.071 [DEBUG] [Thread-308912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:07:15.631 [DEBUG] [Thread-308913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:07:16.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 6, 8), 11.83, 45.79, 0.0, 34.35, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:07:16.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:06:08
2025-12-24T21:07:20.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:07:21.104 [DEBUG] [Thread-308914] [transport.py] [_log()] starting thread (client mode): 0xf818bca0
2025-12-24T21:07:21.166 [DEBUG] [Thread-308914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:07:21.167 [DEBUG] [Thread-308914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:07:21.168 [INFO] [Thread-308914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:07:21.178 [DEBUG] [Thread-308914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:07:21.178 [DEBUG] [Thread-308914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:07:21.178 [DEBUG] [Thread-308914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:07:21.178 [DEBUG] [Thread-308914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:07:21.178 [DEBUG] [Thread-308914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:07:21.178 [DEBUG] [Thread-308914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:07:21.178 [DEBUG] [Thread-308914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:07:21.178 [DEBUG] [Thread-308914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:07:21.179 [DEBUG] [Thread-308914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:07:21.179 [DEBUG] [Thread-308914] [transport.py] [_log()] client lang: <none>
2025-12-24T21:07:21.179 [DEBUG] [Thread-308914] [transport.py] [_log()] server lang: <none>
2025-12-24T21:07:21.179 [DEBUG] [Thread-308914] [transport.py] [_log()] kex follows: False
2025-12-24T21:07:21.179 [DEBUG] [Thread-308914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:07:21.180 [DEBUG] [Thread-308914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:07:21.181 [DEBUG] [Thread-308914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:07:21.181 [DEBUG] [Thread-308914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:07:21.181 [DEBUG] [Thread-308914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:07:21.181 [DEBUG] [Thread-308914] [transport.py] [_log()] Compression: none
2025-12-24T21:07:21.181 [DEBUG] [Thread-308914] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:07:21.231 [DEBUG] [Thread-308914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:07:21.250 [DEBUG] [Thread-308914] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:07:21.258 [DEBUG] [Thread-308914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:07:21.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:07:21.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:07:21.273 [DEBUG] [Thread-308914] [transport.py] [_log()] userauth is OK
2025-12-24T21:07:21.273 [DEBUG] [Thread-308914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:07:21.275 [DEBUG] [Thread-308914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:07:21.275 [DEBUG] [Thread-308914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:07:21.275 [DEBUG] [Thread-308914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:07:21.389 [INFO] [Thread-308914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:07:21.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:07:21.515 [DEBUG] [Thread-308916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:07:22.050 [DEBUG] [Thread-308914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:07:22.050 [DEBUG] [Thread-308914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:07:22.170 [DEBUG] [Thread-308914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:07:22.171 [DEBUG] [Thread-308914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:07:22.171 [DEBUG] [Thread-308914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:07:22.173 [DEBUG] [Thread-308914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:07:22.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:07:22.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:07:22.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:07:22.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:07:22.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:07:22.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:07:22.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:07:22.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:07:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:07:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.796245 -999.00  +18.20  16.27     51   +7.90 1 1 1 1 1     0    0 8.54 -79.46 ZNESW 17.0 16.3 173.6 26.7 18.8 -21.9 18.7 -21.7 18.4 -20.0 18.7 -21.0
2025-12-24T21:07:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:07:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:07:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.796245
2025-12-24T21:07:22.224 [DEBUG] [Thread-308914] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:07:22.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:07:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:07:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:07:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:07:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:07:22.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:06:08', tmtdew=11.83, humidity=45.79, cloud=0.0, wind=34.35, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:06:57', seeing=2.02, atlas_timestamp='2025-12-24T19:06:35.568', atlas_cloud=1, atlas_rain=1, zp_data=[0.0677500000000002, 0.04725000000000179, 0.1302500000000002, 0.06149999999999878, 0.12399999999999878, 0.07475000000000165, 0.09299999999999997, 0.07125000000000092, 0.08150000000000013, 0.09299999999999997, 0.08825000000000038, 0.005000000000000782, 0.09499999999999886, 0.056250000000000355, 0.05649999999999977, 0.0389999999999997, 0.06325000000000003, 0.0965000000000007, 0.10299999999999976, 0.06124999999999936, 0.07699999999999818, 0.098749999999999, 0.07075000000000031, 0.08474999999999966, 0.07899999999999885, 0.06850000000000023, 0.1582499999999989, 0.11500000000000021, 0.15499999999999936, 0.13000000000000078, 0.06900000000000084, 0.05450000000000088, 0.08774999999999977], zp_timestamp='2025-12-24T19:03:00')
2025-12-24T21:07:22.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:07:22.556 [DEBUG] [Thread-308918] [transport.py] [_log()] starting thread (client mode): 0xfabc74f0
2025-12-24T21:07:22.556 [DEBUG] [Thread-308918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:07:22.570 [DEBUG] [Thread-308918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:07:22.570 [INFO] [Thread-308918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] client lang: <none>
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] server lang: <none>
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] kex follows: False
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] Compression: none
2025-12-24T21:07:22.578 [DEBUG] [Thread-308918] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:07:22.637 [DEBUG] [Thread-308918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:07:22.893 [DEBUG] [Thread-308918] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:07:22.894 [DEBUG] [Thread-308918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:07:22.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:07:22.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:07:22.902 [DEBUG] [Thread-308918] [transport.py] [_log()] userauth is OK
2025-12-24T21:07:22.902 [DEBUG] [Thread-308918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:07:22.902 [DEBUG] [Thread-308918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:07:22.902 [DEBUG] [Thread-308918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:07:22.902 [DEBUG] [Thread-308918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:07:22.915 [INFO] [Thread-308918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:07:22.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:07:22.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:07:23.786 [DEBUG] [Thread-308918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:07:23.786 [DEBUG] [Thread-308918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:07:23.833 [DEBUG] [Thread-308918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:07:23.833 [DEBUG] [Thread-308918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:07:23.841 [DEBUG] [Thread-308918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:07:23.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:07:23.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:07:23.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:07:23.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:07:23.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:07:23.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:07:23.924 [DEBUG] [Thread-308918] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:07:28.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:07:28.912 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:07:37.079 [DEBUG] [Thread-308920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:07:52.745 [DEBUG] [Thread-308921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:07:53.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:07:53.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:07:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:07:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 6, 53), 11.81, 45.86, 0.0, 32.69, 18.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:07:58.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:06:53
2025-12-24T21:07:59.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:07:59.616 [DEBUG] [Thread-308922] [transport.py] [_log()] starting thread (client mode): 0xf57bf670
2025-12-24T21:07:59.617 [DEBUG] [Thread-308922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:07:59.618 [DEBUG] [Thread-308922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:07:59.618 [INFO] [Thread-308922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:07:59.626 [DEBUG] [Thread-308922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:07:59.626 [DEBUG] [Thread-308922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:07:59.626 [DEBUG] [Thread-308922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:07:59.626 [DEBUG] [Thread-308922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:07:59.626 [DEBUG] [Thread-308922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] client lang: <none>
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] server lang: <none>
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] kex follows: False
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:07:59.627 [DEBUG] [Thread-308922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:07:59.628 [DEBUG] [Thread-308922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:07:59.628 [DEBUG] [Thread-308922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:07:59.628 [DEBUG] [Thread-308922] [transport.py] [_log()] Compression: none
2025-12-24T21:07:59.628 [DEBUG] [Thread-308922] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:07:59.681 [DEBUG] [Thread-308922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:07:59.687 [DEBUG] [Thread-308922] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:07:59.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:07:59.691 [DEBUG] [Thread-308922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:07:59.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:07:59.695 [DEBUG] [Thread-308922] [transport.py] [_log()] userauth is OK
2025-12-24T21:07:59.695 [DEBUG] [Thread-308922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:07:59.695 [DEBUG] [Thread-308922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:07:59.695 [DEBUG] [Thread-308922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:07:59.695 [DEBUG] [Thread-308922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:07:59.720 [INFO] [Thread-308922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:07:59.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:08:00.486 [DEBUG] [Thread-308922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:08:00.486 [DEBUG] [Thread-308922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:08:00.584 [DEBUG] [Thread-308922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:08:00.585 [DEBUG] [Thread-308922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:08:00.585 [DEBUG] [Thread-308922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:08:00.587 [DEBUG] [Thread-308922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:08:00.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:08:00.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:08:00.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:08:00.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:08:00.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:08:00.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:08:00.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:08:00.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:08:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:08:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.796939 -999.00  +18.20  24.39     51   +7.90 1 1 1 1 1     0    0 8.64 -79.44 ZNESW 27.3 24.4 166.6 37.7 18.8 -21.9 18.6 -21.6 18.4 -20.1 18.7 -20.9
2025-12-24T21:08:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:08:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:08:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.796939
2025-12-24T21:08:00.748 [DEBUG] [Thread-308922] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:08:00.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:08:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:08:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:08:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:08:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:08:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:06:53', tmtdew=11.81, humidity=45.86, cloud=0.0, wind=32.69, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:06:57', seeing=2.02, atlas_timestamp='2025-12-24T19:07:35.530', atlas_cloud=1, atlas_rain=1, zp_data=[0.048749999999998295, 0.04225000000000101, 0.11325000000000074, 0.08999999999999986, 0.10999999999999943, 0.07125000000000092, 0.0389999999999997, 0.0677500000000002, 0.07850000000000001, 0.07600000000000051, 0.06925000000000026, -0.019999999999999574, 0.08900000000000041, 0.062249999999998806, 0.045999999999999375, 0.016500000000000625, 0.05524999999999913, 0.08249999999999957, 0.07699999999999996, 0.07124999999999915, 0.07949999999999946, 0.09074999999999811, 0.00575000000000081, 0.07824999999999882, 0.07599999999999874, 0.06750000000000078, 0.13974999999999937, 0.1485000000000003, 0.16249999999999964, 0.0940000000000012, 0.0730000000000004, 0.061500000000000554, 0.05874999999999986], zp_timestamp='2025-12-24T19:06:00')
2025-12-24T21:08:00.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:08:00.874 [DEBUG] [Thread-308925] [transport.py] [_log()] starting thread (client mode): 0xf57a9600
2025-12-24T21:08:00.874 [DEBUG] [Thread-308925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:08:00.889 [DEBUG] [Thread-308925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:08:00.889 [INFO] [Thread-308925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:08:00.896 [DEBUG] [Thread-308925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:08:00.896 [DEBUG] [Thread-308925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:08:00.896 [DEBUG] [Thread-308925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:08:00.896 [DEBUG] [Thread-308925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:08:00.896 [DEBUG] [Thread-308925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:08:00.896 [DEBUG] [Thread-308925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] client lang: <none>
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] server lang: <none>
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] kex follows: False
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:08:00.897 [DEBUG] [Thread-308925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:08:00.901 [DEBUG] [Thread-308925] [transport.py] [_log()] Compression: none
2025-12-24T21:08:00.901 [DEBUG] [Thread-308925] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:08:00.953 [DEBUG] [Thread-308925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:08:00.953 [DEBUG] [Thread-308925] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:08:00.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:08:00.953 [DEBUG] [Thread-308925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:08:00.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:08:01.010 [DEBUG] [Thread-308925] [transport.py] [_log()] userauth is OK
2025-12-24T21:08:01.010 [DEBUG] [Thread-308925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:08:01.010 [DEBUG] [Thread-308925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:08:01.010 [DEBUG] [Thread-308925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:08:01.010 [DEBUG] [Thread-308925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:08:01.028 [INFO] [Thread-308925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:08:01.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:08:01.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:08:01.908 [DEBUG] [Thread-308925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:08:01.908 [DEBUG] [Thread-308925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:08:01.930 [DEBUG] [Thread-308925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:08:01.930 [DEBUG] [Thread-308925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:08:01.938 [DEBUG] [Thread-308925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:08:02.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:08: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')
2025-12-24T21:08:02.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:08:02.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:08:02.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:08:02.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:08:02.058 [DEBUG] [Thread-308925] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:08:08.149 [DEBUG] [Thread-308927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:08:16.527 [DEBUG] [Thread-308928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:08:23.681 [DEBUG] [Thread-308929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:08:29.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:08:29.144 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:08:32.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:08:32.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:08:32.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:08:39.241 [DEBUG] [Thread-308930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:08:40.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 8), 11.82, 45.83, 0.0, 31.95, 18.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:08:40.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:08:00
2025-12-24T21:08:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:08:41.686 [DEBUG] [Thread-308931] [transport.py] [_log()] starting thread (client mode): 0xf57a8c10
2025-12-24T21:08:41.687 [DEBUG] [Thread-308931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:08:41.696 [DEBUG] [Thread-308931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:08:41.697 [INFO] [Thread-308931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] client lang: <none>
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] server lang: <none>
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] kex follows: False
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] Compression: none
2025-12-24T21:08:41.705 [DEBUG] [Thread-308931] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:08:41.744 [DEBUG] [Thread-308931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:08:41.752 [DEBUG] [Thread-308931] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:08:41.754 [DEBUG] [Thread-308931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:08:41.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:08:41.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:08:41.759 [DEBUG] [Thread-308931] [transport.py] [_log()] userauth is OK
2025-12-24T21:08:41.759 [DEBUG] [Thread-308931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:08:41.760 [DEBUG] [Thread-308931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:08:41.760 [DEBUG] [Thread-308931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:08:41.760 [DEBUG] [Thread-308931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:08:41.790 [INFO] [Thread-308931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:08:41.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:08:42.456 [DEBUG] [Thread-308931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:08:42.457 [DEBUG] [Thread-308931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:08:42.457 [DEBUG] [Thread-308931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:08:42.498 [DEBUG] [Thread-308931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:08:42.498 [DEBUG] [Thread-308931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:08:42.501 [DEBUG] [Thread-308931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:08:42.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:08:42.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:08:42.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:08:42.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:08:42.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:08:42.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:08:42.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:08:42.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:08:42.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:08:42.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.797286 -999.00  +18.20  19.23     51   +7.90 1 1 1 1 1     0    0 8.36 -76.53 ZNESW 22.4 19.2 174.0 33.2 18.8 -21.9 18.6 -21.6 18.4 -20.1 18.7 -20.9
2025-12-24T21:08:42.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:08:42.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:08:42.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.797286
2025-12-24T21:08:42.531 [DEBUG] [Thread-308931] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:08:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:08:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:08:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:08:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:08:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:08:42.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:08:00', tmtdew=11.82, humidity=45.83, cloud=0.0, wind=31.95, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:08:02', seeing=1.86, atlas_timestamp='2025-12-24T19:08:05.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.048749999999998295, 0.04225000000000101, 0.11325000000000074, 0.08999999999999986, 0.10999999999999943, 0.07125000000000092, 0.0389999999999997, 0.0677500000000002, 0.07850000000000001, 0.07600000000000051, 0.06925000000000026, -0.019999999999999574, 0.08900000000000041, 0.062249999999998806, 0.045999999999999375, 0.016500000000000625, 0.05524999999999913, 0.08249999999999957, 0.07699999999999996, 0.07124999999999915, 0.07949999999999946, 0.09074999999999811, 0.00575000000000081, 0.07824999999999882, 0.07599999999999874, 0.06750000000000078, 0.13974999999999937, 0.1485000000000003, 0.16249999999999964, 0.0940000000000012, 0.0730000000000004, 0.061500000000000554, 0.05874999999999986], zp_timestamp='2025-12-24T19:06:00')
2025-12-24T21:08:42.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:08:42.636 [DEBUG] [Thread-308934] [transport.py] [_log()] starting thread (client mode): 0xfabc4fa0
2025-12-24T21:08:42.636 [DEBUG] [Thread-308934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:08:42.650 [DEBUG] [Thread-308934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:08:42.650 [INFO] [Thread-308934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:08:42.658 [DEBUG] [Thread-308934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:08:42.658 [DEBUG] [Thread-308934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] client lang: <none>
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] server lang: <none>
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] kex follows: False
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] Compression: none
2025-12-24T21:08:42.660 [DEBUG] [Thread-308934] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:08:42.717 [DEBUG] [Thread-308934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:08:42.718 [DEBUG] [Thread-308934] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:08:42.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:08:42.718 [DEBUG] [Thread-308934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:08:42.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:08:42.778 [DEBUG] [Thread-308934] [transport.py] [_log()] userauth is OK
2025-12-24T21:08:42.778 [DEBUG] [Thread-308934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:08:42.778 [DEBUG] [Thread-308934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:08:42.778 [DEBUG] [Thread-308934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:08:42.778 [DEBUG] [Thread-308934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:08:43.026 [INFO] [Thread-308934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:08:43.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:08:43.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:08:43.841 [DEBUG] [Thread-308934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:08:43.841 [DEBUG] [Thread-308934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:08:43.886 [DEBUG] [Thread-308934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:08:43.886 [DEBUG] [Thread-308934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:08:43.895 [DEBUG] [Thread-308934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:08:43.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:08: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')
2025-12-24T21:08:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:08:44.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:08:44.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:08:44.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:08:44.023 [DEBUG] [Thread-308934] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:08:54.675 [DEBUG] [Thread-308936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:09:10.104 [DEBUG] [Thread-308937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:09:14.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:09:14.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:09:14.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
2025-12-24T21:09:18.477 [DEBUG] [Thread-308938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:09:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 8, 42), 11.75, 45.88, 0.0, 28.81, 18.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:09:24.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:08:42
2025-12-24T21:09:25.285 [DEBUG] [Thread-308939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:09:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:09:26.776 [DEBUG] [Thread-308940] [transport.py] [_log()] starting thread (client mode): 0xf572ead0
2025-12-24T21:09:26.777 [DEBUG] [Thread-308940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:09:26.784 [DEBUG] [Thread-308940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:09:26.784 [INFO] [Thread-308940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:09:26.794 [DEBUG] [Thread-308940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:09:26.794 [DEBUG] [Thread-308940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] client lang: <none>
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] server lang: <none>
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] kex follows: False
2025-12-24T21:09:26.795 [DEBUG] [Thread-308940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:09:26.797 [DEBUG] [Thread-308940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:09:26.797 [DEBUG] [Thread-308940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:09:26.797 [DEBUG] [Thread-308940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:09:26.797 [DEBUG] [Thread-308940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:09:26.797 [DEBUG] [Thread-308940] [transport.py] [_log()] Compression: none
2025-12-24T21:09:26.797 [DEBUG] [Thread-308940] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:09:26.851 [DEBUG] [Thread-308940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:09:27.005 [DEBUG] [Thread-308940] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:09:27.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:09:27.010 [DEBUG] [Thread-308940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:09:27.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:09:27.013 [DEBUG] [Thread-308940] [transport.py] [_log()] userauth is OK
2025-12-24T21:09:27.013 [DEBUG] [Thread-308940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:09:27.014 [DEBUG] [Thread-308940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:09:27.014 [DEBUG] [Thread-308940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:09:27.014 [DEBUG] [Thread-308940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:09:27.030 [INFO] [Thread-308940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:09:27.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:09:27.602 [DEBUG] [Thread-308940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:09:27.646 [DEBUG] [Thread-308940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:09:27.649 [DEBUG] [Thread-308940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:09:27.650 [DEBUG] [Thread-308940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:09:27.650 [DEBUG] [Thread-308940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:09:27.652 [DEBUG] [Thread-308940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:09:27.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:09:27.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:09:27.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:09:27.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:09:27.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:09:27.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:09:27.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:09:27.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:09:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:09:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.797981 -999.00  +18.20  29.29     51   +7.90 1 1 1 1 1     0    0 8.46 -75.38 ZNESW 23.9 29.3 175.4 34.7 18.7 -21.9 18.6 -21.3 18.4 -20.1 18.7 -21.0
2025-12-24T21:09:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:09:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:09:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.797981
2025-12-24T21:09:27.675 [DEBUG] [Thread-308940] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:09:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:09:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:09:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:09:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:09:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:09:27.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:08:42', tmtdew=11.75, humidity=45.88, cloud=0.0, wind=28.81, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:08:44', seeing=2.14, atlas_timestamp='2025-12-24T19:09:05.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.048749999999998295, 0.04225000000000101, 0.11325000000000074, 0.08999999999999986, 0.10999999999999943, 0.07125000000000092, 0.0389999999999997, 0.0677500000000002, 0.07850000000000001, 0.07600000000000051, 0.06925000000000026, -0.019999999999999574, 0.08900000000000041, 0.062249999999998806, 0.045999999999999375, 0.016500000000000625, 0.05524999999999913, 0.08249999999999957, 0.07699999999999996, 0.07124999999999915, 0.07949999999999946, 0.09074999999999811, 0.00575000000000081, 0.07824999999999882, 0.07599999999999874, 0.06750000000000078, 0.13974999999999937, 0.1485000000000003, 0.16249999999999964, 0.0940000000000012, 0.0730000000000004, 0.061500000000000554, 0.05874999999999986], zp_timestamp='2025-12-24T19:06:00')
2025-12-24T21:09:27.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:09:27.777 [DEBUG] [Thread-308943] [transport.py] [_log()] starting thread (client mode): 0xf572fca0
2025-12-24T21:09:27.778 [DEBUG] [Thread-308943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:09:27.792 [DEBUG] [Thread-308943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:09:27.793 [INFO] [Thread-308943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] client lang: <none>
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] server lang: <none>
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] kex follows: False
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] Compression: none
2025-12-24T21:09:27.800 [DEBUG] [Thread-308943] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:09:27.858 [DEBUG] [Thread-308943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:09:27.858 [DEBUG] [Thread-308943] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:09:27.858 [DEBUG] [Thread-308943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:09:27.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:09:28.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:09:28.144 [DEBUG] [Thread-308943] [transport.py] [_log()] userauth is OK
2025-12-24T21:09:28.144 [DEBUG] [Thread-308943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:09:28.144 [DEBUG] [Thread-308943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:09:28.144 [DEBUG] [Thread-308943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:09:28.144 [DEBUG] [Thread-308943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:09:28.159 [INFO] [Thread-308943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:09:28.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:09:28.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:09:28.987 [DEBUG] [Thread-308943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:09:28.988 [DEBUG] [Thread-308943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:09:29.035 [DEBUG] [Thread-308943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:09:29.036 [DEBUG] [Thread-308943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:09:29.044 [DEBUG] [Thread-308943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:09:29.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:09:29.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:09:29.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:09:29.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:09:29.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:09:29.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:09:29.079 [DEBUG] [Thread-308943] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:09:29.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:09:29.351 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:09:40.576 [DEBUG] [Thread-308945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:09:56.197 [DEBUG] [Thread-308946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:09:59.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:09:59.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:09:59.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:10:11.934 [DEBUG] [Thread-308947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:10:13.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 9, 30), 11.76, 45.84, 0.0, 29.15, 18.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:10:13.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:09:30
2025-12-24T21:10:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:10:15.717 [DEBUG] [Thread-308948] [transport.py] [_log()] starting thread (client mode): 0xf57bfeb0
2025-12-24T21:10:15.719 [DEBUG] [Thread-308948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:10:15.725 [DEBUG] [Thread-308948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:10:15.725 [INFO] [Thread-308948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] client lang: <none>
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] server lang: <none>
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] kex follows: False
2025-12-24T21:10:15.733 [DEBUG] [Thread-308948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:10:15.734 [DEBUG] [Thread-308948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:10:15.734 [DEBUG] [Thread-308948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:10:15.734 [DEBUG] [Thread-308948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:10:15.734 [DEBUG] [Thread-308948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:10:15.734 [DEBUG] [Thread-308948] [transport.py] [_log()] Compression: none
2025-12-24T21:10:15.734 [DEBUG] [Thread-308948] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:10:15.775 [DEBUG] [Thread-308948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:10:15.779 [DEBUG] [Thread-308948] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:10:15.782 [DEBUG] [Thread-308948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:10:15.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:10:15.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:10:15.787 [DEBUG] [Thread-308948] [transport.py] [_log()] userauth is OK
2025-12-24T21:10:15.787 [DEBUG] [Thread-308948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:10:15.787 [DEBUG] [Thread-308948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:10:15.787 [DEBUG] [Thread-308948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:10:15.787 [DEBUG] [Thread-308948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:10:15.960 [INFO] [Thread-308948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:10:15.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:10:16.591 [DEBUG] [Thread-308948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:10:16.591 [DEBUG] [Thread-308948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:10:16.621 [DEBUG] [Thread-308948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:10:16.633 [DEBUG] [Thread-308948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:10:16.633 [DEBUG] [Thread-308948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:10:16.635 [DEBUG] [Thread-308948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:10:16.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:10:16.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:10:16.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:10:16.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:10:16.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:10:16.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:10:16.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:10:16.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:10:16.661 [DEBUG] [Thread-308948] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:10:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:10:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.798328 -999.00  +18.10  29.79     51   +7.90 1 1 1 1 1     0    0 8.14 -76.44 ZNESW 26.7 29.8 171.0 37.8 18.7 -21.9 18.6 -21.6 18.4 -20.1 18.7 -21.0
2025-12-24T21:10:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:10:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:10:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.798328
2025-12-24T21:10:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:10:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:10:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:10:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:10:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:10:16.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:09:30', tmtdew=11.76, humidity=45.84, cloud=0.0, wind=29.15, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:09:32', seeing=2.27, atlas_timestamp='2025-12-24T19:09:35.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.048749999999998295, 0.04225000000000101, 0.11325000000000074, 0.08999999999999986, 0.10999999999999943, 0.07125000000000092, 0.0389999999999997, 0.0677500000000002, 0.07850000000000001, 0.07600000000000051, 0.06925000000000026, -0.019999999999999574, 0.08900000000000041, 0.062249999999998806, 0.045999999999999375, 0.016500000000000625, 0.05524999999999913, 0.08249999999999957, 0.07699999999999996, 0.07124999999999915, 0.07949999999999946, 0.09074999999999811, 0.00575000000000081, 0.07824999999999882, 0.07599999999999874, 0.06750000000000078, 0.13974999999999937, 0.1485000000000003, 0.16249999999999964, 0.0940000000000012, 0.0730000000000004, 0.061500000000000554, 0.05874999999999986], zp_timestamp='2025-12-24T19:06:00')
2025-12-24T21:10:16.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:10:16.777 [DEBUG] [Thread-308951] [transport.py] [_log()] starting thread (client mode): 0xf57be440
2025-12-24T21:10:16.777 [DEBUG] [Thread-308951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:10:16.790 [DEBUG] [Thread-308951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:10:16.790 [INFO] [Thread-308951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] client lang: <none>
2025-12-24T21:10:16.799 [DEBUG] [Thread-308951] [transport.py] [_log()] server lang: <none>
2025-12-24T21:10:16.800 [DEBUG] [Thread-308951] [transport.py] [_log()] kex follows: False
2025-12-24T21:10:16.800 [DEBUG] [Thread-308951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:10:16.800 [DEBUG] [Thread-308951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:10:16.800 [DEBUG] [Thread-308951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:10:16.800 [DEBUG] [Thread-308951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:10:16.800 [DEBUG] [Thread-308951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:10:16.800 [DEBUG] [Thread-308951] [transport.py] [_log()] Compression: none
2025-12-24T21:10:17.001 [DEBUG] [Thread-308951] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:10:17.017 [DEBUG] [Thread-308951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:10:17.130 [DEBUG] [Thread-308951] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:10:17.131 [DEBUG] [Thread-308951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:10:17.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:10:17.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:10:17.139 [DEBUG] [Thread-308951] [transport.py] [_log()] userauth is OK
2025-12-24T21:10:17.139 [DEBUG] [Thread-308951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:10:17.139 [DEBUG] [Thread-308951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:10:17.139 [DEBUG] [Thread-308951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:10:17.139 [DEBUG] [Thread-308951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:10:17.156 [INFO] [Thread-308951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:10:17.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:10:17.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:10:17.975 [DEBUG] [Thread-308951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:10:17.975 [DEBUG] [Thread-308951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:10:18.023 [DEBUG] [Thread-308951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:10:18.023 [DEBUG] [Thread-308951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:10:18.031 [DEBUG] [Thread-308951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:10:18.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:10:18.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:10:18.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:10:18.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:10:18.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:10:18.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:10:18.124 [DEBUG] [Thread-308951] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:10:23.698 [DEBUG] [Thread-308953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:10:27.118 [DEBUG] [Thread-308954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:10:29.908 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:10:29.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:10:42.864 [DEBUG] [Thread-308955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:10:48.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:10:48.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:10:48.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:10:58.304 [DEBUG] [Thread-308956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:11:08.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 9, 30), 11.76, 45.84, 0.0, 29.15, 18.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:11:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:09:30
2025-12-24T21:11:13.927 [DEBUG] [Thread-308957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:11:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:11:14.732 [DEBUG] [Thread-308958] [transport.py] [_log()] starting thread (client mode): 0xf5770550
2025-12-24T21:11:14.733 [DEBUG] [Thread-308958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:11:14.733 [DEBUG] [Thread-308958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:11:14.733 [INFO] [Thread-308958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] client lang: <none>
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] server lang: <none>
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] kex follows: False
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:11:14.737 [DEBUG] [Thread-308958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:11:14.738 [DEBUG] [Thread-308958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:11:14.738 [DEBUG] [Thread-308958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:11:14.738 [DEBUG] [Thread-308958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:11:14.738 [DEBUG] [Thread-308958] [transport.py] [_log()] Compression: none
2025-12-24T21:11:14.738 [DEBUG] [Thread-308958] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:11:14.766 [DEBUG] [Thread-308958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:11:14.773 [DEBUG] [Thread-308958] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:11:14.774 [DEBUG] [Thread-308958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:11:14.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:11:14.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:11:14.777 [DEBUG] [Thread-308958] [transport.py] [_log()] userauth is OK
2025-12-24T21:11:14.777 [DEBUG] [Thread-308958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:11:14.777 [DEBUG] [Thread-308958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:11:14.778 [DEBUG] [Thread-308958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:11:14.778 [DEBUG] [Thread-308958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:11:14.803 [INFO] [Thread-308958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:11:14.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:11:15.467 [DEBUG] [Thread-308958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:11:15.467 [DEBUG] [Thread-308958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:11:15.550 [DEBUG] [Thread-308958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:11:15.550 [DEBUG] [Thread-308958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:11:15.550 [DEBUG] [Thread-308958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:11:15.553 [DEBUG] [Thread-308958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:11:15.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:11:15.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:11:15.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:11:15.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:11:15.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:11:15.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:11:15.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:11:15.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:11:15.587 [DEBUG] [Thread-308958] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:11:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:11:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.799370 -999.00  +18.10  19.75     51   +7.90 1 1 1 1 1     0    0 8.40 -69.61 ZNESW 23.5 19.8 167.1 38.3 18.7 -21.9 18.6 -21.6 18.4 -20.1 18.6 -21.0
2025-12-24T21:11:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:11:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:11:15.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.799370
2025-12-24T21:11:15.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:11:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:11:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:11:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:11:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:11:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:09:30', tmtdew=11.76, humidity=45.84, cloud=0.0, wind=29.15, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:10:29', seeing=1.69, atlas_timestamp='2025-12-24T19:11:05.568', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.07925000000000004, 0.13375000000000092, 0.0909999999999993, 0.1515000000000004, 0.1252500000000012, 0.10299999999999976, 0.07125000000000092, 0.0625, 0.1225000000000005, 0.13424999999999976, 0.013999999999999346, 0.12849999999999895, 0.13424999999999976, 0.08399999999999963, 0.041999999999999815, 0.07574999999999932, 0.11849999999999916, 0.1120000000000001, 0.10424999999999862, 0.12049999999999805, 0.06674999999999898, 0.0912500000000005, 0.07675000000000054, 0.10099999999999909, 0.10899999999999999, 0.16324999999999967, 0.11749999999999972, 0.136000000000001, 0.14200000000000124, 0.120000000000001, 0.0779999999999994, 0.12674999999999947], zp_timestamp='2025-12-24T19:09:00')
2025-12-24T21:11:15.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:11:15.889 [DEBUG] [Thread-308961] [transport.py] [_log()] starting thread (client mode): 0xf5770d30
2025-12-24T21:11:15.889 [DEBUG] [Thread-308961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:11:15.903 [DEBUG] [Thread-308961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:11:15.904 [INFO] [Thread-308961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] client lang: <none>
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] server lang: <none>
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] kex follows: False
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] Compression: none
2025-12-24T21:11:15.911 [DEBUG] [Thread-308961] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:11:16.087 [DEBUG] [Thread-308961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:11:16.087 [DEBUG] [Thread-308961] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:11:16.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:11:16.087 [DEBUG] [Thread-308961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:11:16.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:11:16.144 [DEBUG] [Thread-308961] [transport.py] [_log()] userauth is OK
2025-12-24T21:11:16.144 [DEBUG] [Thread-308961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:11:16.144 [DEBUG] [Thread-308961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:11:16.144 [DEBUG] [Thread-308961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:11:16.144 [DEBUG] [Thread-308961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:11:16.162 [INFO] [Thread-308961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:11:16.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:11:16.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:11:17.037 [DEBUG] [Thread-308961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:11:17.038 [DEBUG] [Thread-308961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:11:17.038 [DEBUG] [Thread-308961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:11:17.038 [DEBUG] [Thread-308961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:11:17.046 [DEBUG] [Thread-308961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:11:17.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:11:17.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:11:17.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:11:17.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:11:17.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:11:17.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:11:17.080 [DEBUG] [Thread-308961] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:11:24.284 [DEBUG] [Thread-308963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:11:29.330 [DEBUG] [Thread-308964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:11:30.110 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:11:30.111 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:11:45.097 [DEBUG] [Thread-308965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:11:47.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:11:47.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:11:47.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:11:55.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 10, 27), 11.74, 45.91, 0.0, 30.03, 18.26, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:11:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:10:27
2025-12-24T21:11:56.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:11:56.917 [DEBUG] [Thread-308966] [transport.py] [_log()] starting thread (client mode): 0xf57bf520
2025-12-24T21:11:56.918 [DEBUG] [Thread-308966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:11:56.918 [DEBUG] [Thread-308966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:11:56.919 [INFO] [Thread-308966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] client lang: <none>
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] server lang: <none>
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] kex follows: False
2025-12-24T21:11:56.927 [DEBUG] [Thread-308966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:11:56.928 [DEBUG] [Thread-308966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:11:56.928 [DEBUG] [Thread-308966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:11:56.928 [DEBUG] [Thread-308966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:11:56.928 [DEBUG] [Thread-308966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:11:56.928 [DEBUG] [Thread-308966] [transport.py] [_log()] Compression: none
2025-12-24T21:11:56.928 [DEBUG] [Thread-308966] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:11:57.087 [DEBUG] [Thread-308966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:11:57.113 [DEBUG] [Thread-308966] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:11:57.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:11:57.207 [DEBUG] [Thread-308966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:11:57.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:11:57.209 [DEBUG] [Thread-308966] [transport.py] [_log()] userauth is OK
2025-12-24T21:11:57.209 [DEBUG] [Thread-308966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:11:57.210 [DEBUG] [Thread-308966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:11:57.210 [DEBUG] [Thread-308966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:11:57.210 [DEBUG] [Thread-308966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:11:57.229 [INFO] [Thread-308966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:11:57.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:11:57.832 [DEBUG] [Thread-308966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:11:57.832 [DEBUG] [Thread-308966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:11:57.838 [DEBUG] [Thread-308966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:11:57.874 [DEBUG] [Thread-308966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:11:57.874 [DEBUG] [Thread-308966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:11:57.877 [DEBUG] [Thread-308966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:11:58.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:11:58.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:11:58.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:11:58.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:11:58.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:11:58.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:11:58.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:11:58.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:11:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:11:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.799717 -999.00  +18.10  22.51     51   +7.90 1 1 1 1 1     0    0 8.28 -74.55 ZNESW 20.8 22.5 190.0 26.2 18.7 -22.0 18.6 -21.6 18.4 -20.1 18.7 -21.0
2025-12-24T21:11:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:11:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:11:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.799717
2025-12-24T21:11:58.391 [DEBUG] [Thread-308966] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:11:58.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:11:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:11:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:11:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:11:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:11:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:10:27', tmtdew=11.74, humidity=45.91, cloud=0.0, wind=30.03, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:10:29', seeing=1.69, atlas_timestamp='2025-12-24T19:11:35.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.07925000000000004, 0.13375000000000092, 0.0909999999999993, 0.1515000000000004, 0.1252500000000012, 0.10299999999999976, 0.07125000000000092, 0.0625, 0.1225000000000005, 0.13424999999999976, 0.013999999999999346, 0.12849999999999895, 0.13424999999999976, 0.08399999999999963, 0.041999999999999815, 0.07574999999999932, 0.11849999999999916, 0.1120000000000001, 0.10424999999999862, 0.12049999999999805, 0.06674999999999898, 0.0912500000000005, 0.07675000000000054, 0.10099999999999909, 0.10899999999999999, 0.16324999999999967, 0.11749999999999972, 0.136000000000001, 0.14200000000000124, 0.120000000000001, 0.0779999999999994, 0.12674999999999947], zp_timestamp='2025-12-24T19:09:00')
2025-12-24T21:11:58.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:11:58.712 [DEBUG] [Thread-308969] [transport.py] [_log()] starting thread (client mode): 0xf57ab310
2025-12-24T21:11:58.712 [DEBUG] [Thread-308969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:11:58.807 [DEBUG] [Thread-308969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:11:58.807 [INFO] [Thread-308969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] client lang: <none>
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] server lang: <none>
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] kex follows: False
2025-12-24T21:11:58.808 [DEBUG] [Thread-308969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:11:58.809 [DEBUG] [Thread-308969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:11:58.809 [DEBUG] [Thread-308969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:11:58.809 [DEBUG] [Thread-308969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:11:58.809 [DEBUG] [Thread-308969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:11:58.809 [DEBUG] [Thread-308969] [transport.py] [_log()] Compression: none
2025-12-24T21:11:58.809 [DEBUG] [Thread-308969] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:11:58.879 [DEBUG] [Thread-308969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:11:58.881 [DEBUG] [Thread-308969] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:11:58.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:11:58.883 [DEBUG] [Thread-308969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:11:58.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:11:59.002 [DEBUG] [Thread-308969] [transport.py] [_log()] userauth is OK
2025-12-24T21:11:59.002 [DEBUG] [Thread-308969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:11:59.002 [DEBUG] [Thread-308969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:11:59.002 [DEBUG] [Thread-308969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:11:59.002 [DEBUG] [Thread-308969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:11:59.017 [INFO] [Thread-308969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:11:59.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:11:59.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:11:59.825 [DEBUG] [Thread-308969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:11:59.826 [DEBUG] [Thread-308969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:11:59.935 [DEBUG] [Thread-308969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:11:59.935 [DEBUG] [Thread-308969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:11:59.945 [DEBUG] [Thread-308969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:11:59.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:11: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')
2025-12-24T21:11:59.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:12:00.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:12:00.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:12:00.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:12:00.115 [DEBUG] [Thread-308969] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:12:00.460 [DEBUG] [Thread-308971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:12:16.441 [DEBUG] [Thread-308972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:12:25.425 [DEBUG] [Thread-308973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:12:30.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:12:30.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:12:30.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:12:30.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:12:30.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:12:31.772 [DEBUG] [Thread-308974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:12:40.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 11, 47), 11.67, 46.44, 0.0, 34.51, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:12:40.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:11:47
2025-12-24T21:12:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:12:42.044 [DEBUG] [Thread-308975] [transport.py] [_log()] starting thread (client mode): 0xf5773940
2025-12-24T21:12:42.045 [DEBUG] [Thread-308975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:12:42.045 [DEBUG] [Thread-308975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:12:42.045 [INFO] [Thread-308975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:12:42.050 [DEBUG] [Thread-308975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:12:42.050 [DEBUG] [Thread-308975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:12:42.050 [DEBUG] [Thread-308975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] client lang: <none>
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] server lang: <none>
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] kex follows: False
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] Compression: none
2025-12-24T21:12:42.051 [DEBUG] [Thread-308975] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:12:42.088 [DEBUG] [Thread-308975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:12:42.093 [DEBUG] [Thread-308975] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:12:42.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:12:42.096 [DEBUG] [Thread-308975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:12:42.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:12:42.101 [DEBUG] [Thread-308975] [transport.py] [_log()] userauth is OK
2025-12-24T21:12:42.101 [DEBUG] [Thread-308975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:12:42.101 [DEBUG] [Thread-308975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:12:42.101 [DEBUG] [Thread-308975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:12:42.101 [DEBUG] [Thread-308975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:12:42.131 [INFO] [Thread-308975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:12:42.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:12:42.733 [DEBUG] [Thread-308975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:12:42.733 [DEBUG] [Thread-308975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:12:42.734 [DEBUG] [Thread-308975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:12:42.775 [DEBUG] [Thread-308975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:12:42.775 [DEBUG] [Thread-308975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:12:42.778 [DEBUG] [Thread-308975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:12:42.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:12:42.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:12:42.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:12:42.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:12:42.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:12:42.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:12:42.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:12:42.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:12:42.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:12:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.800064 -999.00  +18.10  23.51     51   +7.90 1 1 1 1 1     0    0 8.53 -69.06 ZNESW 25.6 23.5 179.2 32.2 18.7 -21.9 18.6 -21.7 18.4 -20.1 18.6 -20.9
2025-12-24T21:12:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:12:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:12:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.800064
2025-12-24T21:12:42.816 [DEBUG] [Thread-308975] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:12:42.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:12:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:12:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:12:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:12:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:12:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:11:47', tmtdew=11.67, humidity=46.44, cloud=0.0, wind=34.51, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:11:48', seeing=2.16, atlas_timestamp='2025-12-24T19:12:05.530', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.07925000000000004, 0.13375000000000092, 0.0909999999999993, 0.1515000000000004, 0.1252500000000012, 0.10299999999999976, 0.07125000000000092, 0.0625, 0.1225000000000005, 0.13424999999999976, 0.013999999999999346, 0.12849999999999895, 0.13424999999999976, 0.08399999999999963, 0.041999999999999815, 0.07574999999999932, 0.11849999999999916, 0.1120000000000001, 0.10424999999999862, 0.12049999999999805, 0.06674999999999898, 0.0912500000000005, 0.07675000000000054, 0.10099999999999909, 0.10899999999999999, 0.16324999999999967, 0.11749999999999972, 0.136000000000001, 0.14200000000000124, 0.120000000000001, 0.0779999999999994, 0.12674999999999947], zp_timestamp='2025-12-24T19:09:00')
2025-12-24T21:12:43.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:12:43.071 [DEBUG] [Thread-308978] [transport.py] [_log()] starting thread (client mode): 0xf5773f40
2025-12-24T21:12:43.071 [DEBUG] [Thread-308978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:12:43.086 [DEBUG] [Thread-308978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:12:43.086 [INFO] [Thread-308978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] client lang: <none>
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] server lang: <none>
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] kex follows: False
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] Compression: none
2025-12-24T21:12:43.094 [DEBUG] [Thread-308978] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:12:43.152 [DEBUG] [Thread-308978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:12:43.152 [DEBUG] [Thread-308978] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:12:43.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:12:43.152 [DEBUG] [Thread-308978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:12:43.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:12:43.209 [DEBUG] [Thread-308978] [transport.py] [_log()] userauth is OK
2025-12-24T21:12:43.209 [DEBUG] [Thread-308978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:12:43.209 [DEBUG] [Thread-308978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:12:43.209 [DEBUG] [Thread-308978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:12:43.209 [DEBUG] [Thread-308978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:12:43.225 [INFO] [Thread-308978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:12:43.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:12:43.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:12:44.035 [DEBUG] [Thread-308978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:12:44.036 [DEBUG] [Thread-308978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:12:44.083 [DEBUG] [Thread-308978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:12:44.083 [DEBUG] [Thread-308978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:12:44.093 [DEBUG] [Thread-308978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:12:44.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:12:44.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:12:44.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
2025-12-24T21:12:44.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:12:44.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:12:44.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:12:44.188 [DEBUG] [Thread-308978] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:12:47.086 [DEBUG] [Thread-308980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:13:02.595 [DEBUG] [Thread-308981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:13:14.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:13:14.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:13:14.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
2025-12-24T21:13:17.847 [DEBUG] [Thread-308982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:13:26.519 [DEBUG] [Thread-308983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:13:26.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 12, 52), 11.63, 46.61, 0.0, 33.77, 18.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:13:26.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:12:52
2025-12-24T21:13:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:13:29.499 [DEBUG] [Thread-308984] [transport.py] [_log()] starting thread (client mode): 0xf572b220
2025-12-24T21:13:29.501 [DEBUG] [Thread-308984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:13:29.503 [DEBUG] [Thread-308984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:13:29.504 [INFO] [Thread-308984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:13:29.681 [DEBUG] [Thread-308984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] client lang: <none>
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] server lang: <none>
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] kex follows: False
2025-12-24T21:13:29.682 [DEBUG] [Thread-308984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:13:29.683 [DEBUG] [Thread-308984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:13:29.683 [DEBUG] [Thread-308984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:13:29.684 [DEBUG] [Thread-308984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:13:29.684 [DEBUG] [Thread-308984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:13:29.684 [DEBUG] [Thread-308984] [transport.py] [_log()] Compression: none
2025-12-24T21:13:29.684 [DEBUG] [Thread-308984] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:13:29.820 [DEBUG] [Thread-308984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:13:29.825 [DEBUG] [Thread-308984] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:13:29.827 [DEBUG] [Thread-308984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:13:29.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:13:29.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:13:29.831 [DEBUG] [Thread-308984] [transport.py] [_log()] userauth is OK
2025-12-24T21:13:29.831 [DEBUG] [Thread-308984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:13:29.831 [DEBUG] [Thread-308984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:13:29.831 [DEBUG] [Thread-308984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:13:29.831 [DEBUG] [Thread-308984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:13:29.851 [INFO] [Thread-308984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:13:29.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:13:30.433 [DEBUG] [Thread-308984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:13:30.433 [DEBUG] [Thread-308984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:13:30.434 [DEBUG] [Thread-308984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:13:30.474 [DEBUG] [Thread-308984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:13:30.475 [DEBUG] [Thread-308984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:13:30.477 [DEBUG] [Thread-308984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:13:30.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:13:30.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:13:30.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:13:30.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:13:30.701 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:13:30.705 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:13:30.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:13:30.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:13:30.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:13:30.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:13:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:13:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.800411 -999.00  +18.10  27.12     51   +7.90 1 1 1 1 1     0    0 8.39 -68.78 ZNESW 25.8 27.1 178.6 35.8 18.6 -21.9 18.5 -21.6 18.4 -20.0 18.6 -20.9
2025-12-24T21:13:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:13:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:13:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.800411
2025-12-24T21:13:30.722 [DEBUG] [Thread-308984] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:13:30.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:13:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:13:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:13:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:13:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:13:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:12:52', tmtdew=11.63, humidity=46.61, cloud=0.0, wind=33.77, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:12:54', seeing=1.52, atlas_timestamp='2025-12-24T19:12:35.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.07925000000000004, 0.13375000000000092, 0.0909999999999993, 0.1515000000000004, 0.1252500000000012, 0.10299999999999976, 0.07125000000000092, 0.0625, 0.1225000000000005, 0.13424999999999976, 0.013999999999999346, 0.12849999999999895, 0.13424999999999976, 0.08399999999999963, 0.041999999999999815, 0.07574999999999932, 0.11849999999999916, 0.1120000000000001, 0.10424999999999862, 0.12049999999999805, 0.06674999999999898, 0.0912500000000005, 0.07675000000000054, 0.10099999999999909, 0.10899999999999999, 0.16324999999999967, 0.11749999999999972, 0.136000000000001, 0.14200000000000124, 0.120000000000001, 0.0779999999999994, 0.12674999999999947], zp_timestamp='2025-12-24T19:09:00')
2025-12-24T21:13:30.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:13:30.830 [DEBUG] [Thread-308987] [transport.py] [_log()] starting thread (client mode): 0xf57bf190
2025-12-24T21:13:30.830 [DEBUG] [Thread-308987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:13:30.843 [DEBUG] [Thread-308987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:13:30.843 [INFO] [Thread-308987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:13:30.854 [DEBUG] [Thread-308987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:13:30.854 [DEBUG] [Thread-308987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:13:30.854 [DEBUG] [Thread-308987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:13:30.854 [DEBUG] [Thread-308987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:13:30.854 [DEBUG] [Thread-308987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] client lang: <none>
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] server lang: <none>
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] kex follows: False
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:13:31.011 [DEBUG] [Thread-308987] [transport.py] [_log()] Compression: none
2025-12-24T21:13:31.012 [DEBUG] [Thread-308987] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:13:31.026 [DEBUG] [Thread-308987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:13:31.026 [DEBUG] [Thread-308987] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:13:31.026 [DEBUG] [Thread-308987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:13:31.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:13:31.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:13:31.133 [DEBUG] [Thread-308987] [transport.py] [_log()] userauth is OK
2025-12-24T21:13:31.133 [DEBUG] [Thread-308987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:13:31.134 [DEBUG] [Thread-308987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:13:31.134 [DEBUG] [Thread-308987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:13:31.134 [DEBUG] [Thread-308987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:13:31.150 [INFO] [Thread-308987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:13:31.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:13:31.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:13:31.999 [DEBUG] [Thread-308987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:13:31.999 [DEBUG] [Thread-308987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:13:32.012 [DEBUG] [Thread-308987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:13:32.012 [DEBUG] [Thread-308987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:13:32.021 [DEBUG] [Thread-308987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:13:32.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:13:32.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:13:32.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:13:32.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:13:32.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:13:32.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:13:32.154 [DEBUG] [Thread-308987] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:13:33.119 [DEBUG] [Thread-308989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:13:49.037 [DEBUG] [Thread-308990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:14:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:14:04.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:14:05.079 [DEBUG] [Thread-308991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:14:05.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
2025-12-24T21:14:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 12, 52), 11.63, 46.61, 0.0, 33.77, 18.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:14:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:12:52
2025-12-24T21:14:21.911 [DEBUG] [Thread-308992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:14:23.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:14:23.925 [DEBUG] [Thread-308993] [transport.py] [_log()] starting thread (client mode): 0xf57bc760
2025-12-24T21:14:23.926 [DEBUG] [Thread-308993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:14:23.928 [DEBUG] [Thread-308993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:14:23.929 [INFO] [Thread-308993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] client lang: <none>
2025-12-24T21:14:23.937 [DEBUG] [Thread-308993] [transport.py] [_log()] server lang: <none>
2025-12-24T21:14:23.939 [DEBUG] [Thread-308993] [transport.py] [_log()] kex follows: False
2025-12-24T21:14:23.939 [DEBUG] [Thread-308993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:14:23.940 [DEBUG] [Thread-308993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:14:23.940 [DEBUG] [Thread-308993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:14:23.940 [DEBUG] [Thread-308993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:14:23.940 [DEBUG] [Thread-308993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:14:23.941 [DEBUG] [Thread-308993] [transport.py] [_log()] Compression: none
2025-12-24T21:14:23.941 [DEBUG] [Thread-308993] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:14:23.987 [DEBUG] [Thread-308993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:14:24.549 [DEBUG] [Thread-308993] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:14:24.550 [DEBUG] [Thread-308993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:14:24.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:14:24.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:14:24.553 [DEBUG] [Thread-308993] [transport.py] [_log()] userauth is OK
2025-12-24T21:14:24.553 [DEBUG] [Thread-308993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:14:24.553 [DEBUG] [Thread-308993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:14:24.554 [DEBUG] [Thread-308993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:14:24.554 [DEBUG] [Thread-308993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:14:24.572 [INFO] [Thread-308993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:14:24.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:14:25.198 [DEBUG] [Thread-308993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:14:25.198 [DEBUG] [Thread-308993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:14:25.218 [DEBUG] [Thread-308993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:14:25.240 [DEBUG] [Thread-308993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:14:25.240 [DEBUG] [Thread-308993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:14:25.243 [DEBUG] [Thread-308993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:14:25.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:14:25.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:14:25.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:14:25.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:14:25.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:14:25.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:14:25.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:14:25.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:14:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:14:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.801106 -999.00  +18.10  20.04     51   +7.90 1 1 1 1 1     0    0 8.51 -61.46 ZNESW 27.1 20.0 174.5 34.9 18.6 -21.8 18.5 -21.6 18.3 -20.1 18.6 -20.9
2025-12-24T21:14:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:14:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:14:25.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.801106
2025-12-24T21:14:25.275 [DEBUG] [Thread-308993] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:14:25.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:14:25.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:14:25.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:14:25.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:14:25.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:14:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:12:52', tmtdew=11.63, humidity=46.61, cloud=0.0, wind=33.77, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:13:41', seeing=1.69, atlas_timestamp='2025-12-24T19:13:35.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.07925000000000004, 0.13375000000000092, 0.0909999999999993, 0.1515000000000004, 0.1252500000000012, 0.10299999999999976, 0.07125000000000092, 0.0625, 0.1225000000000005, 0.13424999999999976, 0.013999999999999346, 0.12849999999999895, 0.13424999999999976, 0.08399999999999963, 0.041999999999999815, 0.07574999999999932, 0.11849999999999916, 0.1120000000000001, 0.10424999999999862, 0.12049999999999805, 0.06674999999999898, 0.0912500000000005, 0.07675000000000054, 0.10099999999999909, 0.10899999999999999, 0.16324999999999967, 0.11749999999999972, 0.136000000000001, 0.14200000000000124, 0.120000000000001, 0.0779999999999994, 0.12674999999999947], zp_timestamp='2025-12-24T19:12:00')
2025-12-24T21:14:25.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:14:25.401 [DEBUG] [Thread-308996] [transport.py] [_log()] starting thread (client mode): 0xf572fa90
2025-12-24T21:14:25.402 [DEBUG] [Thread-308996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:14:25.416 [DEBUG] [Thread-308996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:14:25.596 [INFO] [Thread-308996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] client lang: <none>
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] server lang: <none>
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] kex follows: False
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:14:25.596 [DEBUG] [Thread-308996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:14:25.597 [DEBUG] [Thread-308996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:14:25.597 [DEBUG] [Thread-308996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:14:25.597 [DEBUG] [Thread-308996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:14:25.597 [DEBUG] [Thread-308996] [transport.py] [_log()] Compression: none
2025-12-24T21:14:25.606 [DEBUG] [Thread-308996] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:14:25.665 [DEBUG] [Thread-308996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:14:25.666 [DEBUG] [Thread-308996] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:14:25.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:14:25.666 [DEBUG] [Thread-308996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:14:25.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:14:25.722 [DEBUG] [Thread-308996] [transport.py] [_log()] userauth is OK
2025-12-24T21:14:25.722 [DEBUG] [Thread-308996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:14:25.722 [DEBUG] [Thread-308996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:14:25.722 [DEBUG] [Thread-308996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:14:25.722 [DEBUG] [Thread-308996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:14:25.740 [INFO] [Thread-308996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:14:25.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:14:25.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:14:26.869 [DEBUG] [Thread-308996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:14:26.870 [DEBUG] [Thread-308996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:14:26.870 [DEBUG] [Thread-308996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:14:26.870 [DEBUG] [Thread-308996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:14:26.879 [DEBUG] [Thread-308996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:14:26.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:14:26.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')
2025-12-24T21:14:26.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:14:26.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:14:26.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:14:26.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:14:26.911 [DEBUG] [Thread-308996] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:14:28.251 [DEBUG] [Thread-308998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:14:30.927 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:14:30.947 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:14:37.436 [DEBUG] [Thread-308999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:14:53.241 [DEBUG] [Thread-309000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:14:56.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:14:56.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:14:57.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:15:08.806 [DEBUG] [Thread-309001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:15:24.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 13, 39), 11.59, 46.56, 0.0, 30.1, 18.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:15:25.030 [DEBUG] [Thread-309002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:15:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:13:39
2025-12-24T21:15:31.148 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:15:31.151 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:15:37.127 [DEBUG] [Thread-309003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:15:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:15:39.579 [DEBUG] [Thread-309004] [transport.py] [_log()] starting thread (client mode): 0xfabc4fa0
2025-12-24T21:15:39.581 [DEBUG] [Thread-309004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:15:39.705 [DEBUG] [Thread-309004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:15:39.706 [INFO] [Thread-309004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:15:39.713 [DEBUG] [Thread-309004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:15:39.713 [DEBUG] [Thread-309004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:15:39.713 [DEBUG] [Thread-309004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:15:39.713 [DEBUG] [Thread-309004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:15:39.713 [DEBUG] [Thread-309004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:15:39.713 [DEBUG] [Thread-309004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:15:39.713 [DEBUG] [Thread-309004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:15:39.713 [DEBUG] [Thread-309004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:15:39.714 [DEBUG] [Thread-309004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:15:39.714 [DEBUG] [Thread-309004] [transport.py] [_log()] client lang: <none>
2025-12-24T21:15:39.714 [DEBUG] [Thread-309004] [transport.py] [_log()] server lang: <none>
2025-12-24T21:15:39.714 [DEBUG] [Thread-309004] [transport.py] [_log()] kex follows: False
2025-12-24T21:15:39.714 [DEBUG] [Thread-309004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:15:39.715 [DEBUG] [Thread-309004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:15:39.715 [DEBUG] [Thread-309004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:15:39.715 [DEBUG] [Thread-309004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:15:39.715 [DEBUG] [Thread-309004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:15:39.715 [DEBUG] [Thread-309004] [transport.py] [_log()] Compression: none
2025-12-24T21:15:39.715 [DEBUG] [Thread-309004] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:15:39.750 [DEBUG] [Thread-309004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:15:39.757 [DEBUG] [Thread-309004] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:15:39.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:15:39.759 [DEBUG] [Thread-309004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:15:39.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:15:39.762 [DEBUG] [Thread-309004] [transport.py] [_log()] userauth is OK
2025-12-24T21:15:39.762 [DEBUG] [Thread-309004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:15:39.762 [DEBUG] [Thread-309004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:15:39.762 [DEBUG] [Thread-309004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:15:39.762 [DEBUG] [Thread-309004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:15:39.942 [INFO] [Thread-309004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:15:39.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:15:40.436 [DEBUG] [Thread-309004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:15:40.615 [DEBUG] [Thread-309004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:15:40.618 [DEBUG] [Thread-309004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:15:40.618 [DEBUG] [Thread-309004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:15:40.618 [DEBUG] [Thread-309004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:15:40.621 [DEBUG] [Thread-309004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:15:40.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:15:40.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:15:40.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:15:40.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:15:40.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:15:40.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:15:40.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:15:40.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:15:40.644 [DEBUG] [Thread-309007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:15:40.645 [DEBUG] [Thread-309004] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:15:40.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:15:40.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.802147 -999.00  +18.00  16.83     51   +7.90 1 1 1 1 1     0    0 8.81 -60.33 ZNESW 19.3 16.8 179.4 29.1 18.6 -21.8 18.5 -21.5 18.3 -19.9 18.6 -20.9
2025-12-24T21:15:40.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:15:40.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:15:40.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.802147
2025-12-24T21:15:40.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:15:41.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:15:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:15:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:15:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:15:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:13:39', tmtdew=11.59, humidity=46.56, cloud=0.0, wind=30.1, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:14:54', seeing=1.37, atlas_timestamp='2025-12-24T19:15:05.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.07925000000000004, 0.13375000000000092, 0.0909999999999993, 0.1515000000000004, 0.1252500000000012, 0.10299999999999976, 0.07125000000000092, 0.0625, 0.1225000000000005, 0.13424999999999976, 0.013999999999999346, 0.12849999999999895, 0.13424999999999976, 0.08399999999999963, 0.041999999999999815, 0.07574999999999932, 0.11849999999999916, 0.1120000000000001, 0.10424999999999862, 0.12049999999999805, 0.06674999999999898, 0.0912500000000005, 0.07675000000000054, 0.10099999999999909, 0.10899999999999999, 0.16324999999999967, 0.11749999999999972, 0.136000000000001, 0.14200000000000124, 0.120000000000001, 0.0779999999999994, 0.12674999999999947], zp_timestamp='2025-12-24T19:12:00')
2025-12-24T21:15:41.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:15:41.498 [DEBUG] [Thread-309008] [transport.py] [_log()] starting thread (client mode): 0xf57bd2a0
2025-12-24T21:15:41.498 [DEBUG] [Thread-309008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:15:41.511 [DEBUG] [Thread-309008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:15:41.511 [INFO] [Thread-309008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:15:41.520 [DEBUG] [Thread-309008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] client lang: <none>
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] server lang: <none>
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] kex follows: False
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:15:41.521 [DEBUG] [Thread-309008] [transport.py] [_log()] Compression: none
2025-12-24T21:15:41.522 [DEBUG] [Thread-309008] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:15:41.584 [DEBUG] [Thread-309008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:15:41.586 [DEBUG] [Thread-309008] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:15:41.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:15:41.587 [DEBUG] [Thread-309008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:15:41.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:15:41.717 [DEBUG] [Thread-309008] [transport.py] [_log()] userauth is OK
2025-12-24T21:15:41.718 [DEBUG] [Thread-309008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:15:41.718 [DEBUG] [Thread-309008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:15:41.718 [DEBUG] [Thread-309008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:15:41.718 [DEBUG] [Thread-309008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:15:41.735 [INFO] [Thread-309008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:15:41.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:15:41.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:15:42.680 [DEBUG] [Thread-309008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:15:42.680 [DEBUG] [Thread-309008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:15:42.682 [DEBUG] [Thread-309008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:15:42.682 [DEBUG] [Thread-309008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:15:42.691 [DEBUG] [Thread-309008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:15:42.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:15:42.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:15:42.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:15:42.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:15:42.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:15:42.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:15:42.740 [DEBUG] [Thread-309008] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:15:56.833 [DEBUG] [Thread-309010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:16:12.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:16:12.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:16:13.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:16:13.647 [DEBUG] [Thread-309011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:16:28.925 [DEBUG] [Thread-309012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:16:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 13, 39), 11.59, 46.56, 0.0, 30.1, 18.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:16:30.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:13:39
2025-12-24T21:16:31.354 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:16:31.356 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:16:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:16:32.582 [DEBUG] [Thread-309013] [transport.py] [_log()] starting thread (client mode): 0xf575f8b0
2025-12-24T21:16:32.583 [DEBUG] [Thread-309013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:16:32.584 [DEBUG] [Thread-309013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:16:32.584 [INFO] [Thread-309013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:16:32.590 [DEBUG] [Thread-309013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:16:32.590 [DEBUG] [Thread-309013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:16:32.590 [DEBUG] [Thread-309013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:16:32.590 [DEBUG] [Thread-309013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:16:32.590 [DEBUG] [Thread-309013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:16:32.590 [DEBUG] [Thread-309013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:16:32.591 [DEBUG] [Thread-309013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:16:32.591 [DEBUG] [Thread-309013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:16:32.591 [DEBUG] [Thread-309013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:16:32.591 [DEBUG] [Thread-309013] [transport.py] [_log()] client lang: <none>
2025-12-24T21:16:32.591 [DEBUG] [Thread-309013] [transport.py] [_log()] server lang: <none>
2025-12-24T21:16:32.591 [DEBUG] [Thread-309013] [transport.py] [_log()] kex follows: False
2025-12-24T21:16:32.591 [DEBUG] [Thread-309013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:16:32.591 [DEBUG] [Thread-309013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:16:32.592 [DEBUG] [Thread-309013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:16:32.592 [DEBUG] [Thread-309013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:16:32.592 [DEBUG] [Thread-309013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:16:32.592 [DEBUG] [Thread-309013] [transport.py] [_log()] Compression: none
2025-12-24T21:16:32.592 [DEBUG] [Thread-309013] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:16:32.720 [DEBUG] [Thread-309013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:16:32.725 [DEBUG] [Thread-309013] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:16:32.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:16:32.727 [DEBUG] [Thread-309013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:16:32.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:16:32.730 [DEBUG] [Thread-309013] [transport.py] [_log()] userauth is OK
2025-12-24T21:16:32.730 [DEBUG] [Thread-309013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:16:32.730 [DEBUG] [Thread-309013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:16:32.730 [DEBUG] [Thread-309013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:16:32.730 [DEBUG] [Thread-309013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:16:32.749 [INFO] [Thread-309013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:16:32.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:16:33.427 [DEBUG] [Thread-309013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:16:33.427 [DEBUG] [Thread-309013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:16:33.427 [DEBUG] [Thread-309013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:16:33.469 [DEBUG] [Thread-309013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:16:33.469 [DEBUG] [Thread-309013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:16:33.471 [DEBUG] [Thread-309013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:16:33.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:16:33.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:16:33.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:16:33.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:16:33.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:16:33.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:16:33.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:16:33.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:16:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:16:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.802842 -999.00  +18.00  26.08     51   +8.00 1 1 1 1 1     0    0 8.66 -53.52 ZNESW 18.1 26.1 180.8 36.8 18.6 -21.8 18.5 -21.5 18.3 -20.1 18.5 -20.8
2025-12-24T21:16:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:16:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:16:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.802842
2025-12-24T21:16:33.504 [DEBUG] [Thread-309013] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:16:33.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:16:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:16:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:16:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:16:33.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:16:33.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:13:39', tmtdew=11.59, humidity=46.56, cloud=0.0, wind=30.1, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:14:54', seeing=1.37, atlas_timestamp='2025-12-24T19:16:05.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.07925000000000004, 0.13375000000000092, 0.0909999999999993, 0.1515000000000004, 0.1252500000000012, 0.10299999999999976, 0.07125000000000092, 0.0625, 0.1225000000000005, 0.13424999999999976, 0.013999999999999346, 0.12849999999999895, 0.13424999999999976, 0.08399999999999963, 0.041999999999999815, 0.07574999999999932, 0.11849999999999916, 0.1120000000000001, 0.10424999999999862, 0.12049999999999805, 0.06674999999999898, 0.0912500000000005, 0.07675000000000054, 0.10099999999999909, 0.10899999999999999, 0.16324999999999967, 0.11749999999999972, 0.136000000000001, 0.14200000000000124, 0.120000000000001, 0.0779999999999994, 0.12674999999999947], zp_timestamp='2025-12-24T19:12:00')
2025-12-24T21:16:33.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:16:33.767 [DEBUG] [Thread-309016] [transport.py] [_log()] starting thread (client mode): 0xf572dae0
2025-12-24T21:16:33.767 [DEBUG] [Thread-309016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:16:33.779 [DEBUG] [Thread-309016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:16:33.779 [INFO] [Thread-309016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:16:33.786 [DEBUG] [Thread-309016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] client lang: <none>
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] server lang: <none>
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] kex follows: False
2025-12-24T21:16:33.787 [DEBUG] [Thread-309016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:16:33.788 [DEBUG] [Thread-309016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:16:33.788 [DEBUG] [Thread-309016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:16:33.788 [DEBUG] [Thread-309016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:16:33.788 [DEBUG] [Thread-309016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:16:33.788 [DEBUG] [Thread-309016] [transport.py] [_log()] Compression: none
2025-12-24T21:16:33.788 [DEBUG] [Thread-309016] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:16:33.845 [DEBUG] [Thread-309016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:16:33.846 [DEBUG] [Thread-309016] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:16:33.846 [DEBUG] [Thread-309016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:16:33.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:16:33.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:16:33.903 [DEBUG] [Thread-309016] [transport.py] [_log()] userauth is OK
2025-12-24T21:16:33.903 [DEBUG] [Thread-309016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:16:33.903 [DEBUG] [Thread-309016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:16:33.903 [DEBUG] [Thread-309016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:16:33.903 [DEBUG] [Thread-309016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:16:34.144 [INFO] [Thread-309016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:16:34.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:16:34.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:16:34.946 [DEBUG] [Thread-309016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:16:34.946 [DEBUG] [Thread-309016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:16:35.084 [DEBUG] [Thread-309016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:16:35.084 [DEBUG] [Thread-309016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:16:35.093 [DEBUG] [Thread-309016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:16:35.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:16:35.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:16:35.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
2025-12-24T21:16:35.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:16:35.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:16:35.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:16:35.421 [DEBUG] [Thread-309016] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:16:38.101 [DEBUG] [Thread-309018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:16:44.242 [DEBUG] [Thread-309019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:17:01.058 [DEBUG] [Thread-309020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:17:08.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:17:08.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:17:13.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:17:19.186 [DEBUG] [Thread-309021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:17:31.578 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:17:31.598 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:17:34.746 [DEBUG] [Thread-309022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:17:41.171 [DEBUG] [Thread-309023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:17:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 14, 51), 11.54, 46.73, 0.0, 30.17, 18.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:17:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:14:51
2025-12-24T21:17:50.044 [DEBUG] [Thread-309024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:17:58.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:17:59.514 [DEBUG] [Thread-309025] [transport.py] [_log()] starting thread (client mode): 0xf572eaa0
2025-12-24T21:17:59.515 [DEBUG] [Thread-309025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:17:59.672 [DEBUG] [Thread-309025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:17:59.673 [INFO] [Thread-309025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:17:59.680 [DEBUG] [Thread-309025] [transport.py] [_log()] client lang: <none>
2025-12-24T21:17:59.681 [DEBUG] [Thread-309025] [transport.py] [_log()] server lang: <none>
2025-12-24T21:17:59.681 [DEBUG] [Thread-309025] [transport.py] [_log()] kex follows: False
2025-12-24T21:17:59.681 [DEBUG] [Thread-309025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:17:59.683 [DEBUG] [Thread-309025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:17:59.683 [DEBUG] [Thread-309025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:17:59.683 [DEBUG] [Thread-309025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:17:59.683 [DEBUG] [Thread-309025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:17:59.683 [DEBUG] [Thread-309025] [transport.py] [_log()] Compression: none
2025-12-24T21:17:59.683 [DEBUG] [Thread-309025] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:17:59.723 [DEBUG] [Thread-309025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:17:59.730 [DEBUG] [Thread-309025] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:17:59.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:17:59.735 [DEBUG] [Thread-309025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:17:59.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:17:59.739 [DEBUG] [Thread-309025] [transport.py] [_log()] userauth is OK
2025-12-24T21:17:59.739 [DEBUG] [Thread-309025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:17:59.740 [DEBUG] [Thread-309025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:17:59.740 [DEBUG] [Thread-309025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:17:59.740 [DEBUG] [Thread-309025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:17:59.760 [INFO] [Thread-309025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:17:59.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:18:00.598 [DEBUG] [Thread-309025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:18:00.615 [DEBUG] [Thread-309025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:18:00.616 [DEBUG] [Thread-309025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:18:00.640 [DEBUG] [Thread-309025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:18:00.640 [DEBUG] [Thread-309025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:18:00.642 [DEBUG] [Thread-309025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:18:00.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:18:00.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:18:00.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:18:00.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:18:00.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:18:00.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:18:00.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:18:00.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:18:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:18:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.803536 -999.00  +18.00  21.04     51   +8.00 1 1 1 1 1     0    0 8.54 -57.32 ZNESW 18.6 21.0 188.0 27.5 18.6 -21.9 18.4 -21.5 18.2 -20.0 18.6 -21.0
2025-12-24T21:18:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:18:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:18:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.803536
2025-12-24T21:18:00.863 [DEBUG] [Thread-309025] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:18:00.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:18:01.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:18:01.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:18:01.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:18:01.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:18:01.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:14:51', tmtdew=11.54, humidity=46.73, cloud=0.0, wind=30.17, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:16:48', seeing=1.39, atlas_timestamp='2025-12-24T19:17:05.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.07925000000000004, 0.13375000000000092, 0.0909999999999993, 0.1515000000000004, 0.1252500000000012, 0.10299999999999976, 0.07125000000000092, 0.0625, 0.1225000000000005, 0.13424999999999976, 0.013999999999999346, 0.12849999999999895, 0.13424999999999976, 0.08399999999999963, 0.041999999999999815, 0.07574999999999932, 0.11849999999999916, 0.1120000000000001, 0.10424999999999862, 0.12049999999999805, 0.06674999999999898, 0.0912500000000005, 0.07675000000000054, 0.10099999999999909, 0.10899999999999999, 0.16324999999999967, 0.11749999999999972, 0.136000000000001, 0.14200000000000124, 0.120000000000001, 0.0779999999999994, 0.12674999999999947], zp_timestamp='2025-12-24T19:12:00')
2025-12-24T21:18:01.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:18:01.192 [DEBUG] [Thread-309028] [transport.py] [_log()] starting thread (client mode): 0xf575edd0
2025-12-24T21:18:01.193 [DEBUG] [Thread-309028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:18:01.205 [DEBUG] [Thread-309028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:18:01.205 [INFO] [Thread-309028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] client lang: <none>
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] server lang: <none>
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] kex follows: False
2025-12-24T21:18:01.530 [DEBUG] [Thread-309028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:18:01.532 [DEBUG] [Thread-309028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:18:01.532 [DEBUG] [Thread-309028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:18:01.532 [DEBUG] [Thread-309028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:18:01.532 [DEBUG] [Thread-309028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:18:01.532 [DEBUG] [Thread-309028] [transport.py] [_log()] Compression: none
2025-12-24T21:18:01.532 [DEBUG] [Thread-309028] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:18:02.006 [DEBUG] [Thread-309028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:18:04.043 [DEBUG] [Thread-309028] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:18:04.046 [DEBUG] [Thread-309028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:18:04.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:18:05.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:18:06.471 [DEBUG] [Thread-309028] [transport.py] [_log()] userauth is OK
2025-12-24T21:18:06.471 [DEBUG] [Thread-309028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:18:06.471 [DEBUG] [Thread-309028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:18:06.471 [DEBUG] [Thread-309028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:18:06.471 [DEBUG] [Thread-309028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:18:11.402 [DEBUG] [Thread-309030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:18:11.423 [INFO] [Thread-309028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:18:11.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:18:11.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:18:12.284 [DEBUG] [Thread-309028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:18:12.284 [DEBUG] [Thread-309028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:18:12.284 [DEBUG] [Thread-309028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:18:12.284 [DEBUG] [Thread-309028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:18:12.293 [DEBUG] [Thread-309028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:18:12.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:18:12.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')
2025-12-24T21:18: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
2025-12-24T21:18:12.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:18:12.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:18:12.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:18:12.360 [DEBUG] [Thread-309028] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:18:27.858 [DEBUG] [Thread-309031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:18:31.824 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:18:31.827 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:18:42.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:18:42.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:18:42.559 [DEBUG] [Thread-309032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:18:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:18:43.210 [DEBUG] [Thread-309033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:18:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 16, 46), 11.5, 46.83, 0.0, 30.93, 18.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:18:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:16:46
2025-12-24T21:18:54.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:18:54.706 [DEBUG] [Thread-309034] [transport.py] [_log()] starting thread (client mode): 0xf572c1c0
2025-12-24T21:18:54.707 [DEBUG] [Thread-309034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:18:54.708 [DEBUG] [Thread-309034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:18:54.708 [INFO] [Thread-309034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] client lang: <none>
2025-12-24T21:18:54.712 [DEBUG] [Thread-309034] [transport.py] [_log()] server lang: <none>
2025-12-24T21:18:54.713 [DEBUG] [Thread-309034] [transport.py] [_log()] kex follows: False
2025-12-24T21:18:54.713 [DEBUG] [Thread-309034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:18:54.714 [DEBUG] [Thread-309034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:18:54.715 [DEBUG] [Thread-309034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:18:54.715 [DEBUG] [Thread-309034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:18:54.715 [DEBUG] [Thread-309034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:18:54.715 [DEBUG] [Thread-309034] [transport.py] [_log()] Compression: none
2025-12-24T21:18:54.715 [DEBUG] [Thread-309034] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:18:54.878 [DEBUG] [Thread-309034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:18:54.883 [DEBUG] [Thread-309034] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:18:54.884 [DEBUG] [Thread-309034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:18:54.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:18:54.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:18:54.889 [DEBUG] [Thread-309034] [transport.py] [_log()] userauth is OK
2025-12-24T21:18:54.889 [DEBUG] [Thread-309034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:18:54.889 [DEBUG] [Thread-309034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:18:54.889 [DEBUG] [Thread-309034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:18:54.889 [DEBUG] [Thread-309034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:18:54.954 [INFO] [Thread-309034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:18:54.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:18:55.557 [DEBUG] [Thread-309034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:18:55.557 [DEBUG] [Thread-309034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:18:55.558 [DEBUG] [Thread-309034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:18:55.558 [DEBUG] [Thread-309034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:18:55.558 [DEBUG] [Thread-309034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:18:55.561 [DEBUG] [Thread-309034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:18:55.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:18:55.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:18:55.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:18:55.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:18:55.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:18:55.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:18:55.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:18:55.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:18:55.687 [DEBUG] [Thread-309034] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:18:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:18:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.804578 -999.00  +17.90  22.16     52   +8.00 1 1 1 1 1     0    0 8.36 -62.09 ZNESW 23.2 22.2 181.8 29.8 18.6 -21.9 18.4 -21.5 18.2 -20.0 18.5 -20.9
2025-12-24T21:18:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:18:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:18:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.804578
2025-12-24T21:18:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:18:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:18:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:18:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:18:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:18:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:16:46', tmtdew=11.5, humidity=46.83, cloud=0.0, wind=30.93, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:16:48', seeing=1.39, atlas_timestamp='2025-12-24T19:18:35.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.043250000000000455, 0.13874999999999993, 0.13649999999999984, 0.12349999999999994, 0.10025000000000084, 0.11899999999999977, 0.10474999999999923, 0.06199999999999939, 0.10100000000000087, 0.10224999999999973, 0.04699999999999882, 0.16699999999999982, 0.12175000000000047, 0.08599999999999852, 0.06700000000000017, 0.06925000000000026, 0.14349999999999952, 0.10899999999999999, 0.08724999999999916, 0.15499999999999936, 0.09074999999999811, 0.08325000000000138, 0.07474999999999987, 0.10499999999999865, 0.10500000000000043, 0.14175000000000004, 0.13049999999999962, 0.11899999999999977, 0.14200000000000124, 0.11700000000000088, 0.10850000000000115, 0.13374999999999915], zp_timestamp='2025-12-24T19:16:00')
2025-12-24T21:18:55.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:18:55.846 [DEBUG] [Thread-309037] [transport.py] [_log()] starting thread (client mode): 0xf57bd570
2025-12-24T21:18:55.847 [DEBUG] [Thread-309037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:18:55.861 [DEBUG] [Thread-309037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:18:55.861 [INFO] [Thread-309037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] client lang: <none>
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] server lang: <none>
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] kex follows: False
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:18:55.869 [DEBUG] [Thread-309037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:18:55.870 [DEBUG] [Thread-309037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:18:55.870 [DEBUG] [Thread-309037] [transport.py] [_log()] Compression: none
2025-12-24T21:18:55.870 [DEBUG] [Thread-309037] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:18:56.029 [DEBUG] [Thread-309037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:18:56.032 [DEBUG] [Thread-309037] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:18:56.032 [DEBUG] [Thread-309037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:18:56.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:18:56.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:18:56.084 [DEBUG] [Thread-309037] [transport.py] [_log()] userauth is OK
2025-12-24T21:18:56.084 [DEBUG] [Thread-309037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:18:56.084 [DEBUG] [Thread-309037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:18:56.084 [DEBUG] [Thread-309037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:18:56.084 [DEBUG] [Thread-309037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:18:56.101 [INFO] [Thread-309037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:18:56.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:18:56.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:18:56.911 [DEBUG] [Thread-309037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:18:56.911 [DEBUG] [Thread-309037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:18:56.919 [DEBUG] [Thread-309037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:18:56.919 [DEBUG] [Thread-309037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:18:56.927 [DEBUG] [Thread-309037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:18:56.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:18:56.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:18:56.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:18:56.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:18:56.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:18:56.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:18:56.967 [DEBUG] [Thread-309037] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:18:58.872 [DEBUG] [Thread-309039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:19:14.276 [DEBUG] [Thread-309040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:19:26.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:19:27.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:19: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
2025-12-24T21:19:29.648 [DEBUG] [Thread-309041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:19:32.031 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:19:32.037 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:19:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 16, 46), 11.5, 46.83, 0.0, 30.93, 18.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:19:38.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:16:46
2025-12-24T21:19:40.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:19:40.818 [DEBUG] [Thread-309042] [transport.py] [_log()] starting thread (client mode): 0xf5773130
2025-12-24T21:19:40.819 [DEBUG] [Thread-309042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:19:40.821 [DEBUG] [Thread-309042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:19:40.821 [INFO] [Thread-309042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] client lang: <none>
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] server lang: <none>
2025-12-24T21:19:40.829 [DEBUG] [Thread-309042] [transport.py] [_log()] kex follows: False
2025-12-24T21:19:40.830 [DEBUG] [Thread-309042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:19:40.831 [DEBUG] [Thread-309042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:19:40.831 [DEBUG] [Thread-309042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:19:40.831 [DEBUG] [Thread-309042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:19:40.831 [DEBUG] [Thread-309042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:19:40.831 [DEBUG] [Thread-309042] [transport.py] [_log()] Compression: none
2025-12-24T21:19:40.831 [DEBUG] [Thread-309042] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:19:40.877 [DEBUG] [Thread-309042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:19:40.881 [DEBUG] [Thread-309042] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:19:40.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:19:40.884 [DEBUG] [Thread-309042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:19:40.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:19:40.886 [DEBUG] [Thread-309042] [transport.py] [_log()] userauth is OK
2025-12-24T21:19:40.886 [DEBUG] [Thread-309042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:19:40.886 [DEBUG] [Thread-309042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:19:40.886 [DEBUG] [Thread-309042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:19:40.886 [DEBUG] [Thread-309042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:19:40.907 [INFO] [Thread-309042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:19:40.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:19:41.549 [DEBUG] [Thread-309042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:19:41.550 [DEBUG] [Thread-309042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:19:41.591 [DEBUG] [Thread-309042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:19:41.591 [DEBUG] [Thread-309042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:19:41.591 [DEBUG] [Thread-309042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:19:41.593 [DEBUG] [Thread-309042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:19:41.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:19:41.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:19:41.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:19:41.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:19:41.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:19:41.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:19:41.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:19:41.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:19:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:19:41.623 [DEBUG] [Thread-309042] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:19:41.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.804925 -999.00  +17.90  22.01     52   +8.00 1 1 1 1 1     0    0 8.55 -55.83 ZNESW 24.8 22.0 188.0 26.4 18.5 -21.8 18.4 -21.7 18.2 -20.0 18.5 -20.9
2025-12-24T21:19:41.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:19:41.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:19:41.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.804925
2025-12-24T21:19:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:19:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:19:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:19:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:19:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:19:41.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:16:46', tmtdew=11.5, humidity=46.83, cloud=0.0, wind=30.93, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:18:57', seeing=1.38, atlas_timestamp='2025-12-24T19:19:05.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.043250000000000455, 0.13874999999999993, 0.13649999999999984, 0.12349999999999994, 0.10025000000000084, 0.11899999999999977, 0.10474999999999923, 0.06199999999999939, 0.10100000000000087, 0.10224999999999973, 0.04699999999999882, 0.16699999999999982, 0.12175000000000047, 0.08599999999999852, 0.06700000000000017, 0.06925000000000026, 0.14349999999999952, 0.10899999999999999, 0.08724999999999916, 0.15499999999999936, 0.09074999999999811, 0.08325000000000138, 0.07474999999999987, 0.10499999999999865, 0.10500000000000043, 0.14175000000000004, 0.13049999999999962, 0.11899999999999977, 0.14200000000000124, 0.11700000000000088, 0.10850000000000115, 0.13374999999999915], zp_timestamp='2025-12-24T19:16:00')
2025-12-24T21:19:42.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:19:42.034 [DEBUG] [Thread-309045] [transport.py] [_log()] starting thread (client mode): 0xf575dae0
2025-12-24T21:19:42.034 [DEBUG] [Thread-309045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:19:42.048 [DEBUG] [Thread-309045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:19:42.048 [INFO] [Thread-309045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:19:42.056 [DEBUG] [Thread-309045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:19:42.056 [DEBUG] [Thread-309045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:19:42.056 [DEBUG] [Thread-309045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:19:42.056 [DEBUG] [Thread-309045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:19:42.056 [DEBUG] [Thread-309045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:19:42.056 [DEBUG] [Thread-309045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:19:42.056 [DEBUG] [Thread-309045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:19:42.056 [DEBUG] [Thread-309045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] client lang: <none>
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] server lang: <none>
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] kex follows: False
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:19:42.057 [DEBUG] [Thread-309045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:19:42.075 [DEBUG] [Thread-309045] [transport.py] [_log()] Compression: none
2025-12-24T21:19:42.075 [DEBUG] [Thread-309045] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:19:42.111 [DEBUG] [Thread-309045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:19:42.111 [DEBUG] [Thread-309045] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:19:42.111 [DEBUG] [Thread-309045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:19:42.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:19:42.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:19:42.260 [DEBUG] [Thread-309045] [transport.py] [_log()] userauth is OK
2025-12-24T21:19:42.260 [DEBUG] [Thread-309045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:19:42.260 [DEBUG] [Thread-309045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:19:42.260 [DEBUG] [Thread-309045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:19:42.260 [DEBUG] [Thread-309045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:19:42.275 [INFO] [Thread-309045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:19:42.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:19:42.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:19:43.520 [DEBUG] [Thread-309045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:19:43.520 [DEBUG] [Thread-309045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:19:43.520 [DEBUG] [Thread-309045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:19:43.520 [DEBUG] [Thread-309045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:19:43.529 [DEBUG] [Thread-309045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:19:43.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:19:43.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')
2025-12-24T21:19:43.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:19:43.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:19:43.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:19:43.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:19:43.563 [DEBUG] [Thread-309045] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:19:44.406 [DEBUG] [Thread-309047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:19:45.122 [DEBUG] [Thread-309048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:20:01.198 [DEBUG] [Thread-309049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:20:13.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:20:13.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:20:13.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:20:16.381 [DEBUG] [Thread-309050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:20:20.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 18, 56), 11.4, 47.33, 0.0, 28.55, 18.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:20:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:18:56
2025-12-24T21:20:22.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:20:22.364 [DEBUG] [Thread-309051] [transport.py] [_log()] starting thread (client mode): 0xf5773940
2025-12-24T21:20:22.365 [DEBUG] [Thread-309051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:20:22.365 [DEBUG] [Thread-309051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:20:22.365 [INFO] [Thread-309051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] client lang: <none>
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] server lang: <none>
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] kex follows: False
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:20:22.369 [DEBUG] [Thread-309051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:20:22.370 [DEBUG] [Thread-309051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:20:22.370 [DEBUG] [Thread-309051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:20:22.370 [DEBUG] [Thread-309051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:20:22.370 [DEBUG] [Thread-309051] [transport.py] [_log()] Compression: none
2025-12-24T21:20:22.370 [DEBUG] [Thread-309051] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:20:22.403 [DEBUG] [Thread-309051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:20:22.407 [DEBUG] [Thread-309051] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:20:22.408 [DEBUG] [Thread-309051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:20:22.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:20:22.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:20:22.412 [DEBUG] [Thread-309051] [transport.py] [_log()] userauth is OK
2025-12-24T21:20:22.412 [DEBUG] [Thread-309051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:20:22.413 [DEBUG] [Thread-309051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:20:22.413 [DEBUG] [Thread-309051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:20:22.413 [DEBUG] [Thread-309051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:20:22.442 [INFO] [Thread-309051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:20:22.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:20:23.141 [DEBUG] [Thread-309051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:20:23.431 [DEBUG] [Thread-309051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:20:23.432 [DEBUG] [Thread-309051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:20:23.432 [DEBUG] [Thread-309051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:20:23.432 [DEBUG] [Thread-309051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:20:23.434 [DEBUG] [Thread-309051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:20:23.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:20:23.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:20:23.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:20:23.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:20:23.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:20:23.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:20:23.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:20:23.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:20:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:20:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.805272 -999.00  +17.90  21.49     52   +8.00 1 1 1 1 1     0    0 9.04 -50.68 ZNESW 21.5 21.5 179.0 30.0 18.5 -21.8 18.4 -21.4 18.2 -20.0 18.5 -20.9
2025-12-24T21:20:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:20:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:20:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.805272
2025-12-24T21:20:23.562 [DEBUG] [Thread-309051] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:20:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:20:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:20:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:20:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:20:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:20:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:18:56', tmtdew=11.4, humidity=47.33, cloud=0.0, wind=28.55, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:20:06', seeing=1.46, atlas_timestamp='2025-12-24T19:19:35.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.043250000000000455, 0.13874999999999993, 0.13649999999999984, 0.12349999999999994, 0.10025000000000084, 0.11899999999999977, 0.10474999999999923, 0.06199999999999939, 0.10100000000000087, 0.10224999999999973, 0.04699999999999882, 0.16699999999999982, 0.12175000000000047, 0.08599999999999852, 0.06700000000000017, 0.06925000000000026, 0.14349999999999952, 0.10899999999999999, 0.08724999999999916, 0.15499999999999936, 0.09074999999999811, 0.08325000000000138, 0.07474999999999987, 0.10499999999999865, 0.10500000000000043, 0.14175000000000004, 0.13049999999999962, 0.11899999999999977, 0.14200000000000124, 0.11700000000000088, 0.10850000000000115, 0.13374999999999915], zp_timestamp='2025-12-24T19:16:00')
2025-12-24T21:20:24.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:20:24.022 [DEBUG] [Thread-309054] [transport.py] [_log()] starting thread (client mode): 0xf5773670
2025-12-24T21:20:24.023 [DEBUG] [Thread-309054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:20:24.035 [DEBUG] [Thread-309054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:20:24.035 [INFO] [Thread-309054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] client lang: <none>
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] server lang: <none>
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] kex follows: False
2025-12-24T21:20:24.044 [DEBUG] [Thread-309054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:20:24.046 [DEBUG] [Thread-309054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:20:24.046 [DEBUG] [Thread-309054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:20:24.046 [DEBUG] [Thread-309054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:20:24.046 [DEBUG] [Thread-309054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:20:24.046 [DEBUG] [Thread-309054] [transport.py] [_log()] Compression: none
2025-12-24T21:20:24.046 [DEBUG] [Thread-309054] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:20:24.101 [DEBUG] [Thread-309054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:20:24.104 [DEBUG] [Thread-309054] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:20:24.104 [DEBUG] [Thread-309054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:20:24.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:20:24.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:20:24.157 [DEBUG] [Thread-309054] [transport.py] [_log()] userauth is OK
2025-12-24T21:20:24.157 [DEBUG] [Thread-309054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:20:24.157 [DEBUG] [Thread-309054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:20:24.157 [DEBUG] [Thread-309054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:20:24.157 [DEBUG] [Thread-309054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:20:24.386 [INFO] [Thread-309054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:20:24.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:20:24.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:20:25.226 [DEBUG] [Thread-309054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:20:25.226 [DEBUG] [Thread-309054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:20:25.271 [DEBUG] [Thread-309054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:20:25.271 [DEBUG] [Thread-309054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:20:25.282 [DEBUG] [Thread-309054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:20:25.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:20:25.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:20:25.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:20:25.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:20:25.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:20:25.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:20:25.393 [DEBUG] [Thread-309054] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:20:31.891 [DEBUG] [Thread-309056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:20:32.238 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:20:32.240 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:20:44.791 [DEBUG] [Thread-309057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:20:47.385 [DEBUG] [Thread-309058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:20:55.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:20:55.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:20:55.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:21:04.579 [DEBUG] [Thread-309059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:21:13.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 20, 5), 11.34, 47.52, 0.0, 31.14, 18.01, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:21:13.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:20:05
2025-12-24T21:21:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:21:17.596 [DEBUG] [Thread-309060] [transport.py] [_log()] starting thread (client mode): 0xf572b220
2025-12-24T21:21:17.597 [DEBUG] [Thread-309060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:21:17.599 [DEBUG] [Thread-309060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:21:17.599 [INFO] [Thread-309060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] client lang: <none>
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] server lang: <none>
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] kex follows: False
2025-12-24T21:21:17.610 [DEBUG] [Thread-309060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:21:17.613 [DEBUG] [Thread-309060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:21:17.613 [DEBUG] [Thread-309060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:21:17.613 [DEBUG] [Thread-309060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:21:17.613 [DEBUG] [Thread-309060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:21:17.613 [DEBUG] [Thread-309060] [transport.py] [_log()] Compression: none
2025-12-24T21:21:17.613 [DEBUG] [Thread-309060] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:21:17.914 [DEBUG] [Thread-309060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:21:17.919 [DEBUG] [Thread-309060] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:21:17.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:21:17.924 [DEBUG] [Thread-309060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:21:17.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:21:17.926 [DEBUG] [Thread-309060] [transport.py] [_log()] userauth is OK
2025-12-24T21:21:17.926 [DEBUG] [Thread-309060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:21:17.927 [DEBUG] [Thread-309060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:21:17.927 [DEBUG] [Thread-309060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:21:17.927 [DEBUG] [Thread-309060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:21:17.947 [INFO] [Thread-309060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:21:17.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:21:18.605 [DEBUG] [Thread-309060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:21:18.605 [DEBUG] [Thread-309060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:21:18.606 [DEBUG] [Thread-309060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:21:18.780 [DEBUG] [Thread-309060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:21:18.780 [DEBUG] [Thread-309060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:21:18.783 [DEBUG] [Thread-309060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:21:18.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:21:18.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:21:18.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:21:18.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:21:18.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:21:18.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:21:18.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:21:18.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:21:18.812 [DEBUG] [Thread-309060] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:21:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:21:18.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.805967 -999.00  +17.90  21.83     53   +8.20 1 1 1 1 1     0    0 8.78 -50.86 ZNESW 25.9 21.8 154.4 38.8 18.5 -21.8 18.4 -21.5 18.2 -20.1 18.5 -20.9
2025-12-24T21:21:18.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:21:18.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:21:18.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.805967
2025-12-24T21:21:18.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:21:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:21:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:21:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:21:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:21:18.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:20:05', tmtdew=11.34, humidity=47.52, cloud=0.0, wind=31.14, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:20:50', seeing=1.4, atlas_timestamp='2025-12-24T19:20:35.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.07324999999999982, 0.13625000000000043, 0.08899999999999864, 0.10050000000000026, 0.13725000000000165, 0.10599999999999987, 0.13225000000000087, 0.06849999999999845, 0.08399999999999963, 0.09924999999999962, 0.0015000000000000568, 0.129999999999999, 0.10374999999999979, 0.08899999999999864, 0.04099999999999859, 0.06124999999999936, 0.11399999999999899, 0.08899999999999864, 0.057749999999998636, 0.11299999999999955, 0.0747499999999981, 0.09725000000000072, 0.05925000000000047, 0.067499999999999, 0.0754999999999999, 0.12575000000000003, 0.12700000000000067, 0.05799999999999983, 0.1670000000000016, 0.11800000000000033, 0.08549999999999969, 0.08674999999999855], zp_timestamp='2025-12-24T19:19:00')
2025-12-24T21:21:19.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:21:19.146 [DEBUG] [Thread-309063] [transport.py] [_log()] starting thread (client mode): 0xf572f670
2025-12-24T21:21:19.146 [DEBUG] [Thread-309063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:21:19.304 [DEBUG] [Thread-309063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:21:19.304 [INFO] [Thread-309063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] client lang: <none>
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] server lang: <none>
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] kex follows: False
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:21:19.305 [DEBUG] [Thread-309063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:21:19.306 [DEBUG] [Thread-309063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:21:19.306 [DEBUG] [Thread-309063] [transport.py] [_log()] Compression: none
2025-12-24T21:21:19.306 [DEBUG] [Thread-309063] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:21:19.473 [DEBUG] [Thread-309063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:21:19.480 [DEBUG] [Thread-309063] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:21:19.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:21:19.482 [DEBUG] [Thread-309063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:21:19.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:21:19.602 [DEBUG] [Thread-309063] [transport.py] [_log()] userauth is OK
2025-12-24T21:21:19.602 [DEBUG] [Thread-309063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:21:19.602 [DEBUG] [Thread-309063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:21:19.602 [DEBUG] [Thread-309063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:21:19.602 [DEBUG] [Thread-309063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:21:19.622 [INFO] [Thread-309063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:21:19.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:21:19.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:21:20.359 [DEBUG] [Thread-309065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:21:20.963 [DEBUG] [Thread-309063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:21:20.963 [DEBUG] [Thread-309063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:21:20.964 [DEBUG] [Thread-309063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:21:20.964 [DEBUG] [Thread-309063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:21:20.974 [DEBUG] [Thread-309063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:21:20.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:21:20.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:21:21.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:21:21.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:21:21.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:21:21.984 [DEBUG] [Thread-309063] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:21:21.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:21:32.537 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:21:32.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:21:36.261 [DEBUG] [Thread-309066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:21:45.733 [DEBUG] [Thread-309067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:21:51.697 [DEBUG] [Thread-309068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:21:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:21:52.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:21:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:22:07.965 [DEBUG] [Thread-309069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:22:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 20, 49), 10.97, 48.53, 0.0, 37.37, 17.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:22:09.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:20:49
2025-12-24T21:22:14.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:22:15.524 [DEBUG] [Thread-309070] [transport.py] [_log()] starting thread (client mode): 0xf5788730
2025-12-24T21:22:15.524 [DEBUG] [Thread-309070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:22:15.525 [DEBUG] [Thread-309070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:22:15.526 [INFO] [Thread-309070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] client lang: <none>
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] server lang: <none>
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] kex follows: False
2025-12-24T21:22:15.532 [DEBUG] [Thread-309070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:22:15.533 [DEBUG] [Thread-309070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:22:15.533 [DEBUG] [Thread-309070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:22:15.533 [DEBUG] [Thread-309070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:22:15.533 [DEBUG] [Thread-309070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:22:15.533 [DEBUG] [Thread-309070] [transport.py] [_log()] Compression: none
2025-12-24T21:22:15.533 [DEBUG] [Thread-309070] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:22:15.559 [DEBUG] [Thread-309070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:22:15.565 [DEBUG] [Thread-309070] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:22:15.567 [DEBUG] [Thread-309070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:22:15.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:22:15.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:22:15.728 [DEBUG] [Thread-309070] [transport.py] [_log()] userauth is OK
2025-12-24T21:22:15.728 [DEBUG] [Thread-309070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:22:15.729 [DEBUG] [Thread-309070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:22:15.729 [DEBUG] [Thread-309070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:22:15.729 [DEBUG] [Thread-309070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:22:15.750 [INFO] [Thread-309070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:22:15.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:22:16.363 [DEBUG] [Thread-309070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:22:16.364 [DEBUG] [Thread-309070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:22:16.366 [DEBUG] [Thread-309070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:22:16.403 [DEBUG] [Thread-309070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:22:16.403 [DEBUG] [Thread-309070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:22:16.405 [DEBUG] [Thread-309070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:22:16.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:22:16.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:22:16.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:22:16.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:22:16.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:22:16.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:22:16.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:22:16.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:22:16.428 [DEBUG] [Thread-309070] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:22:16.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:22:16.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.807008 -999.00  +17.70  27.72     54   +8.50 1 1 1 1 1     0    0 8.56 -56.82 ZNESW 26.8 27.7 164.8 38.8 18.4 -21.9 18.3 -21.5 18.1 -20.0 18.4 -20.9
2025-12-24T21:22:16.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:22:16.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:22:16.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.807008
2025-12-24T21:22:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:22:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:22:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:22:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:22:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:22:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:20:49', tmtdew=10.97, humidity=48.53, cloud=0.0, wind=37.37, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:20:50', seeing=1.4, atlas_timestamp='2025-12-24T19:22:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.07324999999999982, 0.13625000000000043, 0.08899999999999864, 0.10050000000000026, 0.13725000000000165, 0.10599999999999987, 0.13225000000000087, 0.06849999999999845, 0.08399999999999963, 0.09924999999999962, 0.0015000000000000568, 0.129999999999999, 0.10374999999999979, 0.08899999999999864, 0.04099999999999859, 0.06124999999999936, 0.11399999999999899, 0.08899999999999864, 0.057749999999998636, 0.11299999999999955, 0.0747499999999981, 0.09725000000000072, 0.05925000000000047, 0.067499999999999, 0.0754999999999999, 0.12575000000000003, 0.12700000000000067, 0.05799999999999983, 0.1670000000000016, 0.11800000000000033, 0.08549999999999969, 0.08674999999999855], zp_timestamp='2025-12-24T19:19:00')
2025-12-24T21:22:16.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:22:16.595 [DEBUG] [Thread-309073] [transport.py] [_log()] starting thread (client mode): 0xf575ef80
2025-12-24T21:22:16.595 [DEBUG] [Thread-309073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:22:16.608 [DEBUG] [Thread-309073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:22:16.608 [INFO] [Thread-309073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:22:16.616 [DEBUG] [Thread-309073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:22:16.616 [DEBUG] [Thread-309073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:22:16.616 [DEBUG] [Thread-309073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:22:16.616 [DEBUG] [Thread-309073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:22:16.616 [DEBUG] [Thread-309073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:22:16.616 [DEBUG] [Thread-309073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] client lang: <none>
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] server lang: <none>
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] kex follows: False
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] Compression: none
2025-12-24T21:22:16.617 [DEBUG] [Thread-309073] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:22:16.679 [DEBUG] [Thread-309073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:22:16.680 [DEBUG] [Thread-309073] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:22:16.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:22:16.680 [DEBUG] [Thread-309073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:22:16.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:22:16.744 [DEBUG] [Thread-309073] [transport.py] [_log()] userauth is OK
2025-12-24T21:22:16.744 [DEBUG] [Thread-309073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:22:16.744 [DEBUG] [Thread-309073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:22:16.744 [DEBUG] [Thread-309073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:22:16.744 [DEBUG] [Thread-309073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:22:16.759 [INFO] [Thread-309073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:22:16.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:22:16.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:22:17.560 [DEBUG] [Thread-309073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:22:17.560 [DEBUG] [Thread-309073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:22:17.609 [DEBUG] [Thread-309073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:22:17.609 [DEBUG] [Thread-309073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:22:17.617 [DEBUG] [Thread-309073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:22:17.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:22:17.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:22:17.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:22:17.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:22:17.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:22:17.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:22:17.656 [DEBUG] [Thread-309073] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:22:23.561 [DEBUG] [Thread-309075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:22:32.815 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:22:32.838 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:22:39.640 [DEBUG] [Thread-309076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:22:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:22:47.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:22:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:22:51.022 [DEBUG] [Thread-309077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:22:55.933 [DEBUG] [Thread-309078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:23:14.613 [DEBUG] [Thread-309079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:23:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 20, 49), 10.97, 48.53, 0.0, 37.37, 17.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:23:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:20:49
2025-12-24T21:23:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:23:22.990 [DEBUG] [Thread-309080] [transport.py] [_log()] starting thread (client mode): 0xf81881c0
2025-12-24T21:23:22.991 [DEBUG] [Thread-309080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:23:22.991 [DEBUG] [Thread-309080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:23:22.991 [INFO] [Thread-309080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:23:23.033 [DEBUG] [Thread-309080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:23:23.033 [DEBUG] [Thread-309080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:23:23.033 [DEBUG] [Thread-309080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:23:23.033 [DEBUG] [Thread-309080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] client lang: <none>
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] server lang: <none>
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] kex follows: False
2025-12-24T21:23:23.034 [DEBUG] [Thread-309080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:23:23.035 [DEBUG] [Thread-309080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:23:23.035 [DEBUG] [Thread-309080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:23:23.035 [DEBUG] [Thread-309080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:23:23.035 [DEBUG] [Thread-309080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:23:23.035 [DEBUG] [Thread-309080] [transport.py] [_log()] Compression: none
2025-12-24T21:23:23.035 [DEBUG] [Thread-309080] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:23:23.069 [DEBUG] [Thread-309080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:23:23.072 [DEBUG] [Thread-309080] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:23:23.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:23:23.074 [DEBUG] [Thread-309080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:23:23.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:23:23.076 [DEBUG] [Thread-309080] [transport.py] [_log()] userauth is OK
2025-12-24T21:23:23.076 [DEBUG] [Thread-309080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:23:23.076 [DEBUG] [Thread-309080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:23:23.076 [DEBUG] [Thread-309080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:23:23.076 [DEBUG] [Thread-309080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:23:23.167 [INFO] [Thread-309080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:23:23.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:23:23.744 [DEBUG] [Thread-309080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:23:23.756 [DEBUG] [Thread-309080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:23:23.758 [DEBUG] [Thread-309080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:23:23.759 [DEBUG] [Thread-309080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:23:23.759 [DEBUG] [Thread-309080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:23:23.760 [DEBUG] [Thread-309080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:23:23.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:23:23.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:23:23.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:23:23.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:23:23.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:23:23.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:23:23.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:23:23.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:23:23.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:23:23.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.807356 -999.00  +17.70  18.52     54   +8.50 1 1 1 1 1     0    0 8.67 -56.85 ZNESW 24.9 18.5 165.4 27.1 18.4 -21.9 18.3 -21.5 18.1 -20.1 18.4 -20.9
2025-12-24T21:23:23.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:23:23.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:23:23.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.807356
2025-12-24T21:23:23.904 [DEBUG] [Thread-309080] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:23:23.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:23:23.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:23:23.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:23:23.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:23:23.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:23:23.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:20:49', tmtdew=10.97, humidity=48.53, cloud=0.0, wind=37.37, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:22:07', seeing=1.85, atlas_timestamp='2025-12-24T19:22:35.558', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.07324999999999982, 0.13625000000000043, 0.08899999999999864, 0.10050000000000026, 0.13725000000000165, 0.10599999999999987, 0.13225000000000087, 0.06849999999999845, 0.08399999999999963, 0.09924999999999962, 0.0015000000000000568, 0.129999999999999, 0.10374999999999979, 0.08899999999999864, 0.04099999999999859, 0.06124999999999936, 0.11399999999999899, 0.08899999999999864, 0.057749999999998636, 0.11299999999999955, 0.0747499999999981, 0.09725000000000072, 0.05925000000000047, 0.067499999999999, 0.0754999999999999, 0.12575000000000003, 0.12700000000000067, 0.05799999999999983, 0.1670000000000016, 0.11800000000000033, 0.08549999999999969, 0.08674999999999855], zp_timestamp='2025-12-24T19:19:00')
2025-12-24T21:23:23.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:23:24.010 [DEBUG] [Thread-309083] [transport.py] [_log()] starting thread (client mode): 0xf575c4f0
2025-12-24T21:23:24.010 [DEBUG] [Thread-309083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:23:24.025 [DEBUG] [Thread-309083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:23:24.025 [INFO] [Thread-309083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] client lang: <none>
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] server lang: <none>
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] kex follows: False
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:23:24.032 [DEBUG] [Thread-309083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:23:24.033 [DEBUG] [Thread-309083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:23:24.033 [DEBUG] [Thread-309083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:23:24.033 [DEBUG] [Thread-309083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:23:24.033 [DEBUG] [Thread-309083] [transport.py] [_log()] Compression: none
2025-12-24T21:23:24.033 [DEBUG] [Thread-309083] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:23:24.089 [DEBUG] [Thread-309083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:23:24.114 [DEBUG] [Thread-309083] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:23:24.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:23:24.114 [DEBUG] [Thread-309083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:23:24.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:23:24.146 [DEBUG] [Thread-309083] [transport.py] [_log()] userauth is OK
2025-12-24T21:23:24.147 [DEBUG] [Thread-309083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:23:24.147 [DEBUG] [Thread-309083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:23:24.147 [DEBUG] [Thread-309083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:23:24.147 [DEBUG] [Thread-309083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:23:24.165 [INFO] [Thread-309083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:23:24.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:23:24.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:23:25.286 [DEBUG] [Thread-309083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:23:25.286 [DEBUG] [Thread-309083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:23:25.286 [DEBUG] [Thread-309083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:23:25.286 [DEBUG] [Thread-309083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:23:25.294 [DEBUG] [Thread-309083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:23:25.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:23:25.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:23:25.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
2025-12-24T21:23:25.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:23:25.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:23:25.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:23:25.330 [DEBUG] [Thread-309083] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:23:29.821 [DEBUG] [Thread-309085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:23:33.049 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:23:33.057 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:23:43.912 [DEBUG] [Thread-309086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:23:45.219 [DEBUG] [Thread-309087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:23:53.593 [DEBUG] [Thread-309088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:23:55.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:23:55.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:23:55.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
2025-12-24T21:24:00.419 [DEBUG] [Thread-309089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:24:16.238 [DEBUG] [Thread-309090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:24:27.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 22, 5), 10.86, 48.92, 0.0, 33.93, 17.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:24:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:22:05
2025-12-24T21:24:29.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:24:30.024 [DEBUG] [Thread-309091] [transport.py] [_log()] starting thread (client mode): 0xf575e650
2025-12-24T21:24:30.025 [DEBUG] [Thread-309091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:24:30.028 [DEBUG] [Thread-309091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:24:30.028 [INFO] [Thread-309091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] client lang: <none>
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] server lang: <none>
2025-12-24T21:24:30.034 [DEBUG] [Thread-309091] [transport.py] [_log()] kex follows: False
2025-12-24T21:24:30.035 [DEBUG] [Thread-309091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:24:30.035 [DEBUG] [Thread-309091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:24:30.035 [DEBUG] [Thread-309091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:24:30.035 [DEBUG] [Thread-309091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:24:30.035 [DEBUG] [Thread-309091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:24:30.035 [DEBUG] [Thread-309091] [transport.py] [_log()] Compression: none
2025-12-24T21:24:30.035 [DEBUG] [Thread-309091] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:24:30.075 [DEBUG] [Thread-309091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:24:30.079 [DEBUG] [Thread-309091] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:24:30.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:24:30.082 [DEBUG] [Thread-309091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:24:30.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:24:30.085 [DEBUG] [Thread-309091] [transport.py] [_log()] userauth is OK
2025-12-24T21:24:30.085 [DEBUG] [Thread-309091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:24:30.085 [DEBUG] [Thread-309091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:24:30.085 [DEBUG] [Thread-309091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:24:30.085 [DEBUG] [Thread-309091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:24:30.141 [INFO] [Thread-309091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:24:30.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:24:30.779 [DEBUG] [Thread-309091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:24:30.780 [DEBUG] [Thread-309091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:24:30.781 [DEBUG] [Thread-309091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:24:30.821 [DEBUG] [Thread-309091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:24:30.821 [DEBUG] [Thread-309091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:24:30.823 [DEBUG] [Thread-309091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:24:30.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:24:30.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:24:30.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:24:30.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:24:30.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:24:30.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:24:30.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:24:30.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:24:30.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:24:30.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.808050 -999.00  +17.70  33.37     55   +8.60 1 1 2 1 1     0    0 8.09 -66.33 ZNESW 19.9 33.4 162.8 37.9 18.4 -21.9 18.2 -21.6 18.1 -20.2 18.3 -21.0
2025-12-24T21:24:30.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:24:30.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:24:30.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.808050
2025-12-24T21:24:31.010 [DEBUG] [Thread-309091] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:24:31.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:24:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:24:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:24:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:24:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:24:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:22:05', tmtdew=10.86, humidity=48.92, cloud=0.0, wind=33.93, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:23:24', seeing=1.96, atlas_timestamp='2025-12-24T19:23:35.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.07324999999999982, 0.13625000000000043, 0.08899999999999864, 0.10050000000000026, 0.13725000000000165, 0.10599999999999987, 0.13225000000000087, 0.06849999999999845, 0.08399999999999963, 0.09924999999999962, 0.0015000000000000568, 0.129999999999999, 0.10374999999999979, 0.08899999999999864, 0.04099999999999859, 0.06124999999999936, 0.11399999999999899, 0.08899999999999864, 0.057749999999998636, 0.11299999999999955, 0.0747499999999981, 0.09725000000000072, 0.05925000000000047, 0.067499999999999, 0.0754999999999999, 0.12575000000000003, 0.12700000000000067, 0.05799999999999983, 0.1670000000000016, 0.11800000000000033, 0.08549999999999969, 0.08674999999999855], zp_timestamp='2025-12-24T19:21:00')
2025-12-24T21:24:31.348 [DEBUG] [Thread-309094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:24:31.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:24:31.407 [DEBUG] [Thread-309095] [transport.py] [_log()] starting thread (client mode): 0xf57723e0
2025-12-24T21:24:31.407 [DEBUG] [Thread-309095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:24:31.421 [DEBUG] [Thread-309095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:24:31.421 [INFO] [Thread-309095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] client lang: <none>
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] server lang: <none>
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] kex follows: False
2025-12-24T21:24:31.496 [DEBUG] [Thread-309095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:24:31.497 [DEBUG] [Thread-309095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:24:31.497 [DEBUG] [Thread-309095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:24:31.497 [DEBUG] [Thread-309095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:24:31.497 [DEBUG] [Thread-309095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:24:31.497 [DEBUG] [Thread-309095] [transport.py] [_log()] Compression: none
2025-12-24T21:24:31.497 [DEBUG] [Thread-309095] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:24:31.632 [DEBUG] [Thread-309095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:24:31.635 [DEBUG] [Thread-309095] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:24:31.635 [DEBUG] [Thread-309095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:24:31.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:24:31.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:24:31.779 [DEBUG] [Thread-309095] [transport.py] [_log()] userauth is OK
2025-12-24T21:24:31.779 [DEBUG] [Thread-309095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:24:31.779 [DEBUG] [Thread-309095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:24:31.779 [DEBUG] [Thread-309095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:24:31.779 [DEBUG] [Thread-309095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:24:31.798 [INFO] [Thread-309095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:24:31.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:24:31.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:24:32.616 [DEBUG] [Thread-309095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:24:32.616 [DEBUG] [Thread-309095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:24:32.739 [DEBUG] [Thread-309095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:24:32.739 [DEBUG] [Thread-309095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:24:32.747 [DEBUG] [Thread-309095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:24:32.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:24:32.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:24:32.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
2025-12-24T21:24:32.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:24:32.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:24:32.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:24:32.785 [DEBUG] [Thread-309095] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:24:33.428 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:24:33.429 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:24:46.794 [DEBUG] [Thread-309097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:24:54.602 [DEBUG] [Thread-309098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:25:02.216 [DEBUG] [Thread-309099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:25:02.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:25:02.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:25:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:25:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 23, 23), 10.74, 49.31, 0.0, 33.26, 17.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:25:13.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:23:23
2025-12-24T21:25:16.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:25:16.860 [DEBUG] [Thread-309100] [transport.py] [_log()] starting thread (client mode): 0xf57a85b0
2025-12-24T21:25:16.861 [DEBUG] [Thread-309100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:25:16.861 [DEBUG] [Thread-309100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:25:16.862 [INFO] [Thread-309100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] client lang: <none>
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] server lang: <none>
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] kex follows: False
2025-12-24T21:25:16.869 [DEBUG] [Thread-309100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:25:16.870 [DEBUG] [Thread-309100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:25:16.871 [DEBUG] [Thread-309100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:25:16.871 [DEBUG] [Thread-309100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:25:16.871 [DEBUG] [Thread-309100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:25:16.871 [DEBUG] [Thread-309100] [transport.py] [_log()] Compression: none
2025-12-24T21:25:16.871 [DEBUG] [Thread-309100] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:25:16.943 [DEBUG] [Thread-309100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:25:17.009 [DEBUG] [Thread-309100] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:25:17.012 [DEBUG] [Thread-309100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:25:17.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:25:17.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:25:17.021 [DEBUG] [Thread-309100] [transport.py] [_log()] userauth is OK
2025-12-24T21:25:17.022 [DEBUG] [Thread-309100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:25:17.022 [DEBUG] [Thread-309100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:25:17.022 [DEBUG] [Thread-309100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:25:17.022 [DEBUG] [Thread-309100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:25:17.070 [INFO] [Thread-309100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:25:17.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:25:17.504 [DEBUG] [Thread-309102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:25:17.721 [DEBUG] [Thread-309100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:25:17.721 [DEBUG] [Thread-309100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:25:17.835 [DEBUG] [Thread-309100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:25:17.835 [DEBUG] [Thread-309100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:25:17.836 [DEBUG] [Thread-309100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:25:17.838 [DEBUG] [Thread-309100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:25:17.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:25:17.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:25:17.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:25:17.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:25:17.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:25:17.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:25:17.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:25:17.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:25:17.876 [DEBUG] [Thread-309100] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:25:17.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:25:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.808744 -999.00  +17.60  17.59     55   +8.50 1 1 1 1 1     0    0 8.02 -71.74 ZNESW 24.5 17.6 165.5 30.2 18.3 -21.8 18.2 -21.6 18.0 -19.9 18.3 -20.9
2025-12-24T21:25:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:25:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:25:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.808744
2025-12-24T21:25:18.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:25:18.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:25:18.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:25:18.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:25:18.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:25:18.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:23:23', tmtdew=10.74, humidity=49.31, cloud=0.0, wind=33.26, temperature=17.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:24:56', seeing=2.88, atlas_timestamp='2025-12-24T19:24:35.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.07324999999999982, 0.13625000000000043, 0.08899999999999864, 0.10050000000000026, 0.13725000000000165, 0.10599999999999987, 0.13225000000000087, 0.06849999999999845, 0.08399999999999963, 0.09924999999999962, 0.0015000000000000568, 0.129999999999999, 0.10374999999999979, 0.08899999999999864, 0.04099999999999859, 0.06124999999999936, 0.11399999999999899, 0.08899999999999864, 0.057749999999998636, 0.11299999999999955, 0.0747499999999981, 0.09725000000000072, 0.05925000000000047, 0.067499999999999, 0.0754999999999999, 0.12575000000000003, 0.12700000000000067, 0.05799999999999983, 0.1670000000000016, 0.11800000000000033, 0.08549999999999969, 0.08674999999999855], zp_timestamp='2025-12-24T19:21:00')
2025-12-24T21:25:18.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:25:18.382 [DEBUG] [Thread-309104] [transport.py] [_log()] starting thread (client mode): 0xf57aad40
2025-12-24T21:25:18.382 [DEBUG] [Thread-309104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:25:18.395 [DEBUG] [Thread-309104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:25:18.395 [INFO] [Thread-309104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:25:18.402 [DEBUG] [Thread-309104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] client lang: <none>
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] server lang: <none>
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] kex follows: False
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] Compression: none
2025-12-24T21:25:18.403 [DEBUG] [Thread-309104] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:25:18.458 [DEBUG] [Thread-309104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:25:18.459 [DEBUG] [Thread-309104] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:25:18.459 [DEBUG] [Thread-309104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:25:18.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:25:18.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:25:18.520 [DEBUG] [Thread-309104] [transport.py] [_log()] userauth is OK
2025-12-24T21:25:18.520 [DEBUG] [Thread-309104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:25:18.520 [DEBUG] [Thread-309104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:25:18.520 [DEBUG] [Thread-309104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:25:18.520 [DEBUG] [Thread-309104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:25:18.534 [INFO] [Thread-309104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:25:18.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:25:18.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:25:19.336 [DEBUG] [Thread-309104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:25:19.336 [DEBUG] [Thread-309104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:25:19.440 [DEBUG] [Thread-309104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:25:19.440 [DEBUG] [Thread-309104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:25:19.449 [DEBUG] [Thread-309104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:25:19.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:25:19.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')
2025-12-24T21:25:19.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
2025-12-24T21:25:19.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:25:19.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:25:19.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:25:19.484 [DEBUG] [Thread-309104] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:25:33.327 [DEBUG] [Thread-309106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:25:33.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:25:33.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:25:49.430 [DEBUG] [Thread-309107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:25:49.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:25:49.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:25:50.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
2025-12-24T21:25:56.391 [DEBUG] [Thread-309108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:26:07.786 [DEBUG] [Thread-309109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:26:16.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 24, 55), 10.18, 51.36, 0.0, 36.56, 17.63, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:26:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:24:55
2025-12-24T21:26:23.590 [DEBUG] [Thread-309110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:26:23.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:26:24.047 [DEBUG] [Thread-309111] [transport.py] [_log()] starting thread (client mode): 0xf578bc10
2025-12-24T21:26:24.048 [DEBUG] [Thread-309111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:26:24.057 [DEBUG] [Thread-309111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:26:24.057 [INFO] [Thread-309111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:26:24.064 [DEBUG] [Thread-309111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] client lang: <none>
2025-12-24T21:26:24.331 [DEBUG] [Thread-309111] [transport.py] [_log()] server lang: <none>
2025-12-24T21:26:24.332 [DEBUG] [Thread-309111] [transport.py] [_log()] kex follows: False
2025-12-24T21:26:24.332 [DEBUG] [Thread-309111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:26:24.332 [DEBUG] [Thread-309111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:26:24.332 [DEBUG] [Thread-309111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:26:24.332 [DEBUG] [Thread-309111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:26:24.332 [DEBUG] [Thread-309111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:26:24.332 [DEBUG] [Thread-309111] [transport.py] [_log()] Compression: none
2025-12-24T21:26:24.332 [DEBUG] [Thread-309111] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:26:24.559 [DEBUG] [Thread-309111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:26:24.564 [DEBUG] [Thread-309111] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:26:24.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:26:24.571 [DEBUG] [Thread-309111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:26:24.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:26:24.584 [DEBUG] [Thread-309111] [transport.py] [_log()] userauth is OK
2025-12-24T21:26:24.586 [DEBUG] [Thread-309111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:26:24.586 [DEBUG] [Thread-309111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:26:24.586 [DEBUG] [Thread-309111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:26:24.586 [DEBUG] [Thread-309111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:26:25.220 [INFO] [Thread-309111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:26:25.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:26:25.420 [DEBUG] [Thread-309111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:26:25.420 [DEBUG] [Thread-309111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:26:25.420 [DEBUG] [Thread-309111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:26:25.421 [DEBUG] [Thread-309111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:26:25.421 [DEBUG] [Thread-309111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:26:25.422 [DEBUG] [Thread-309111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:26:25.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:26:25.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:26:25.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:26:25.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:26:25.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:26:25.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:26:25.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:26:25.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:26:25.558 [DEBUG] [Thread-309111] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:26:25.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:26:25.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.809786 -999.00  +17.50  21.30     56   +8.70 1 1 1 1 1     0    0 7.79 -76.34 ZNESW 19.4 21.3 137.2 31.6 18.2 -21.9 18.1 -21.4 17.9 -20.1 18.3 -21.0
2025-12-24T21:26:25.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:26:25.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:26:25.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.809786
2025-12-24T21:26:25.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:26:25.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:26:25.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:26:25.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:26:25.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:26:25.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:24:55', tmtdew=10.18, humidity=51.36, cloud=0.0, wind=36.56, temperature=17.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:25:38', seeing=2.67, atlas_timestamp='2025-12-24T19:26:05.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.07324999999999982, 0.13625000000000043, 0.08899999999999864, 0.10050000000000026, 0.13725000000000165, 0.10599999999999987, 0.13225000000000087, 0.06849999999999845, 0.08399999999999963, 0.09924999999999962, 0.0015000000000000568, 0.129999999999999, 0.10374999999999979, 0.08899999999999864, 0.04099999999999859, 0.06124999999999936, 0.11399999999999899, 0.08899999999999864, 0.057749999999998636, 0.11299999999999955, 0.0747499999999981, 0.09725000000000072, 0.05925000000000047, 0.067499999999999, 0.0754999999999999, 0.12575000000000003, 0.12700000000000067, 0.05799999999999983, 0.1670000000000016, 0.11800000000000033, 0.08549999999999969, 0.08674999999999855], zp_timestamp='2025-12-24T19:21:00')
2025-12-24T21:26:25.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:26:25.919 [DEBUG] [Thread-309114] [transport.py] [_log()] starting thread (client mode): 0xf57427d0
2025-12-24T21:26:25.919 [DEBUG] [Thread-309114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:26:25.935 [DEBUG] [Thread-309114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:26:25.935 [INFO] [Thread-309114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] client lang: <none>
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] server lang: <none>
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] kex follows: False
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:26:25.942 [DEBUG] [Thread-309114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:26:25.943 [DEBUG] [Thread-309114] [transport.py] [_log()] Compression: none
2025-12-24T21:26:25.943 [DEBUG] [Thread-309114] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:26:25.999 [DEBUG] [Thread-309114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:26:26.177 [DEBUG] [Thread-309114] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:26:26.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:26:26.177 [DEBUG] [Thread-309114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:26:26.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:26:26.185 [DEBUG] [Thread-309114] [transport.py] [_log()] userauth is OK
2025-12-24T21:26:26.185 [DEBUG] [Thread-309114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:26:26.185 [DEBUG] [Thread-309114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:26:26.185 [DEBUG] [Thread-309114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:26:26.185 [DEBUG] [Thread-309114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:26:26.203 [INFO] [Thread-309114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:26:26.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:26:26.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:26:27.050 [DEBUG] [Thread-309114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:26:27.050 [DEBUG] [Thread-309114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:26:27.075 [DEBUG] [Thread-309114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:26:27.075 [DEBUG] [Thread-309114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:26:27.083 [DEBUG] [Thread-309114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:26:27.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:26:27.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:26:27.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:26:27.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:26:27.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:26:27.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:26:27.455 [DEBUG] [Thread-309114] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:26:33.973 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:26:33.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:26:38.918 [DEBUG] [Thread-309116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:26:55.072 [DEBUG] [Thread-309117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:26:56.345 [DEBUG] [Thread-307133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:26:57.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:26:57.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:26:58.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:26:59.541 [DEBUG] [Thread-307133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:01.896 [DEBUG] [Thread-309118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:04.584 [DEBUG] [Thread-307133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:09.958 [DEBUG] [Thread-307133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:11.783 [DEBUG] [Thread-309119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:27.410 [DEBUG] [Thread-309120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:34.200 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:34.217 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:41.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 25, 37), 10.09, 51.49, 0.0, 33.1, 17.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:27:42.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:25:37
2025-12-24T21:27:42.928 [DEBUG] [Thread-309121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:49.477 [DEBUG] [Thread-307133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:50.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:27:50.730 [DEBUG] [Thread-309122] [transport.py] [_log()] starting thread (client mode): 0xf5772bc0
2025-12-24T21:27:50.731 [DEBUG] [Thread-309122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:27:50.734 [DEBUG] [Thread-309122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:27:50.735 [INFO] [Thread-309122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:27:50.739 [DEBUG] [Thread-309122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:27:50.739 [DEBUG] [Thread-309122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:27:50.739 [DEBUG] [Thread-309122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] client lang: <none>
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] server lang: <none>
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] kex follows: False
2025-12-24T21:27:50.740 [DEBUG] [Thread-309122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:27:50.741 [DEBUG] [Thread-309122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:27:50.741 [DEBUG] [Thread-309122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:27:50.741 [DEBUG] [Thread-309122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:27:50.741 [DEBUG] [Thread-309122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:27:50.741 [DEBUG] [Thread-309122] [transport.py] [_log()] Compression: none
2025-12-24T21:27:50.741 [DEBUG] [Thread-309122] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:27:50.778 [DEBUG] [Thread-309122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:27:50.783 [DEBUG] [Thread-309122] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:27:50.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:27:50.787 [DEBUG] [Thread-309122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:27:50.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:27:50.789 [DEBUG] [Thread-309122] [transport.py] [_log()] userauth is OK
2025-12-24T21:27:50.789 [DEBUG] [Thread-309122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:27:50.789 [DEBUG] [Thread-309122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:27:50.789 [DEBUG] [Thread-309122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:27:50.789 [DEBUG] [Thread-309122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:27:50.888 [INFO] [Thread-309122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:27:50.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:27:51.440 [DEBUG] [Thread-309122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:27:51.440 [DEBUG] [Thread-309122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:27:51.441 [DEBUG] [Thread-309122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:27:51.441 [DEBUG] [Thread-309122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:27:51.441 [DEBUG] [Thread-309122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:27:51.443 [DEBUG] [Thread-309122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:27:51.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:27:51.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:27:51.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:27:51.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:27:51.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:27:51.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:27:51.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:27:51.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:27:51.471 [DEBUG] [Thread-309122] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:27:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:27:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.810480 -999.00  +17.40  24.77     57   +8.90 1 1 1 1 1     0    0 7.58 -76.23 ZNESW 32.6 24.8 153.6 32.5 18.2 -22.1 18.1 -21.5 17.9 -20.3 18.1 -21.0
2025-12-24T21:27:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:27:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:27:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.810480
2025-12-24T21:27:51.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:27:51.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:27:51.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:27:51.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:27:51.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:27:51.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:25:37', tmtdew=10.09, humidity=51.49, cloud=0.0, wind=33.1, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:25:38', seeing=2.67, atlas_timestamp='2025-12-24T19:27:05.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.08924999999999983, 0.0832499999999996, 0.0912500000000005, 0.10849999999999937, 0.14750000000000085, 0.1252500000000012, 0.129999999999999, 0.08525000000000027, 0.08199999999999896, 0.10200000000000031, 0.11324999999999896, 0.0045000000000001705, 0.12650000000000006, 0.12624999999999886, 0.053999999999998494, 0.04800000000000004, 0.08424999999999905, 0.1255000000000006, 0.09600000000000009, 0.05974999999999753, 0.1034999999999986, 0.1247499999999988, 0.08375000000000199, 0.06225000000000058, 0.09499999999999886, 0.09950000000000081, 0.13175000000000026, 0.11050000000000004, 0.17249999999999943, 0.1960000000000015, 0.05500000000000149, 0.09000000000000163, 0.07174999999999798], zp_timestamp='2025-12-24T19:25:00')
2025-12-24T21:27:51.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:27:51.786 [DEBUG] [Thread-309125] [transport.py] [_log()] starting thread (client mode): 0xf5740e20
2025-12-24T21:27:51.786 [DEBUG] [Thread-309125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:27:51.980 [DEBUG] [Thread-309125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:27:51.981 [INFO] [Thread-309125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] client lang: <none>
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] server lang: <none>
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] kex follows: False
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:27:51.981 [DEBUG] [Thread-309125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:27:51.982 [DEBUG] [Thread-309125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:27:51.982 [DEBUG] [Thread-309125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:27:51.982 [DEBUG] [Thread-309125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:27:51.982 [DEBUG] [Thread-309125] [transport.py] [_log()] Compression: none
2025-12-24T21:27:51.982 [DEBUG] [Thread-309125] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:27:52.135 [DEBUG] [Thread-309125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:27:52.138 [DEBUG] [Thread-309125] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:27:52.138 [DEBUG] [Thread-309125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:27:52.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:27:52.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:27:52.318 [DEBUG] [Thread-309125] [transport.py] [_log()] userauth is OK
2025-12-24T21:27:52.318 [DEBUG] [Thread-309125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:27:52.319 [DEBUG] [Thread-309125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:27:52.319 [DEBUG] [Thread-309125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:27:52.319 [DEBUG] [Thread-309125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:27:52.337 [INFO] [Thread-309125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:27:52.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:27:52.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:27:53.243 [DEBUG] [Thread-309125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:27:53.244 [DEBUG] [Thread-309125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:27:53.244 [DEBUG] [Thread-309125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:27:53.244 [DEBUG] [Thread-309125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:27:53.252 [DEBUG] [Thread-309125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:27:53.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:27:53.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:27:53.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:27:53.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:27:53.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:27:53.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:27:53.480 [DEBUG] [Thread-309125] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:27:54.756 [DEBUG] [Thread-307133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:27:58.944 [DEBUG] [Thread-309127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:28:26.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:28:28.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:28:32.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:28:42.731 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:28:42.735 [DEBUG] [Thread-307133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:28:45.538 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:28:45.538 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:28:45.570 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:28:46.018 [DEBUG] [Thread-309130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:28:48.561 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:29:23.873 [DEBUG] [Thread-309131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:29:24.924 [DEBUG] [Thread-309132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:29:38.343 [DEBUG] [Thread-309133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:29:41.152 [DEBUG] [Thread-309134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:29:44.922 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:29:44.931 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:29:59.939 [DEBUG] [Thread-309135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:30:17.387 [DEBUG] [Thread-309136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:30:45.878 [DEBUG] [Thread-309137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:30:45.872 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:30:48.028 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:30:48.756 [DEBUG] [Thread-309138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:31:05.441 [DEBUG] [Thread-309139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:31:11.940 [DEBUG] [Thread-309140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:31:28.214 [DEBUG] [Thread-309141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:31:46.141 [DEBUG] [Thread-309142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:31:46.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 25, 37), 10.09, 51.49, 0.0, 33.1, 17.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:31:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:25:37
2025-12-24T21:31:48.562 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:31:48.570 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:31:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:32:00.601 [DEBUG] [Thread-309143] [transport.py] [_log()] starting thread (client mode): 0xf57431f0
2025-12-24T21:32:00.603 [DEBUG] [Thread-309143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:32:00.607 [DEBUG] [Thread-309143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:32:00.608 [INFO] [Thread-309143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:32:00.615 [DEBUG] [Thread-309143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:32:00.616 [DEBUG] [Thread-309143] [transport.py] [_log()] client lang: <none>
2025-12-24T21:32:00.616 [DEBUG] [Thread-309143] [transport.py] [_log()] server lang: <none>
2025-12-24T21:32:00.616 [DEBUG] [Thread-309143] [transport.py] [_log()] kex follows: False
2025-12-24T21:32:00.616 [DEBUG] [Thread-309143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:32:00.618 [DEBUG] [Thread-309143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:32:00.618 [DEBUG] [Thread-309143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:32:00.618 [DEBUG] [Thread-309143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:32:00.619 [DEBUG] [Thread-309143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:32:00.619 [DEBUG] [Thread-309143] [transport.py] [_log()] Compression: none
2025-12-24T21:32:00.619 [DEBUG] [Thread-309143] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:32:01.032 [DEBUG] [Thread-309143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:32:01.040 [DEBUG] [Thread-309143] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:32:01.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:32:01.046 [DEBUG] [Thread-309143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:32:01.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:32:01.052 [DEBUG] [Thread-309143] [transport.py] [_log()] userauth is OK
2025-12-24T21:32:01.053 [DEBUG] [Thread-309143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:32:01.056 [DEBUG] [Thread-309143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:32:01.056 [DEBUG] [Thread-309143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:32:01.056 [DEBUG] [Thread-309143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:32:01.080 [INFO] [Thread-309143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:32:01.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:32:01.670 [DEBUG] [Thread-309143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:32:01.670 [DEBUG] [Thread-309143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:32:01.686 [DEBUG] [Thread-309143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:32:01.686 [DEBUG] [Thread-309143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:32:01.686 [DEBUG] [Thread-309143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:32:01.688 [DEBUG] [Thread-309143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:32:02.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:32:02.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:32:02.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:32:02.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:32:02.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:32:02.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:32:02.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:32:02.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:32:02.133 [DEBUG] [Thread-309143] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:32:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:32:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.813258 -999.00  +17.00  21.40     59   +9.10 1 1 1 1 1     0    0 6.43 -103.79 ZNESW 26.1 21.4 157.6 30.9 17.9 -21.8 17.7 -21.4 17.6 -19.9 17.9 -21.0
2025-12-24T21:32:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:32:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:32:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.813258
2025-12-24T21:32:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:32:03.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:32:03.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:32:03.068 [DEBUG] [Thread-309146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:32:03.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:32:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:32:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:25:37', tmtdew=10.09, humidity=51.49, cloud=0.0, wind=33.1, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:27:12', seeing=1.49, atlas_timestamp='2025-12-24T19:31:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.08924999999999983, 0.0832499999999996, 0.0912500000000005, 0.10849999999999937, 0.14750000000000085, 0.1252500000000012, 0.129999999999999, 0.08525000000000027, 0.08199999999999896, 0.10200000000000031, 0.11324999999999896, 0.0045000000000001705, 0.12650000000000006, 0.12624999999999886, 0.053999999999998494, 0.04800000000000004, 0.08424999999999905, 0.1255000000000006, 0.09600000000000009, 0.05974999999999753, 0.1034999999999986, 0.1247499999999988, 0.08375000000000199, 0.06225000000000058, 0.09499999999999886, 0.09950000000000081, 0.13175000000000026, 0.11050000000000004, 0.17249999999999943, 0.1960000000000015, 0.05500000000000149, 0.09000000000000163, 0.07174999999999798], zp_timestamp='2025-12-24T19:25:00')
2025-12-24T21:32:03.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:32:03.957 [DEBUG] [Thread-309147] [transport.py] [_log()] starting thread (client mode): 0xf5741f90
2025-12-24T21:32:03.958 [DEBUG] [Thread-309147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:32:03.970 [DEBUG] [Thread-309147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:32:03.970 [INFO] [Thread-309147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:32:03.978 [DEBUG] [Thread-309147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:32:03.978 [DEBUG] [Thread-309147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:32:03.978 [DEBUG] [Thread-309147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:32:03.978 [DEBUG] [Thread-309147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:32:03.978 [DEBUG] [Thread-309147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:32:03.981 [DEBUG] [Thread-309147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:32:03.981 [DEBUG] [Thread-309147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:32:03.981 [DEBUG] [Thread-309147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:32:03.981 [DEBUG] [Thread-309147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:32:03.981 [DEBUG] [Thread-309147] [transport.py] [_log()] client lang: <none>
2025-12-24T21:32:03.981 [DEBUG] [Thread-309147] [transport.py] [_log()] server lang: <none>
2025-12-24T21:32:03.982 [DEBUG] [Thread-309147] [transport.py] [_log()] kex follows: False
2025-12-24T21:32:03.982 [DEBUG] [Thread-309147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:32:03.982 [DEBUG] [Thread-309147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:32:03.982 [DEBUG] [Thread-309147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:32:03.982 [DEBUG] [Thread-309147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:32:03.982 [DEBUG] [Thread-309147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:32:03.982 [DEBUG] [Thread-309147] [transport.py] [_log()] Compression: none
2025-12-24T21:32:03.982 [DEBUG] [Thread-309147] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:32:04.482 [DEBUG] [Thread-309147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:32:04.680 [DEBUG] [Thread-309147] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:32:04.684 [DEBUG] [Thread-309147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:32:04.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:32:04.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:32:04.698 [DEBUG] [Thread-309147] [transport.py] [_log()] userauth is OK
2025-12-24T21:32:04.699 [DEBUG] [Thread-309147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:32:04.699 [DEBUG] [Thread-309147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:32:04.699 [DEBUG] [Thread-309147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:32:04.699 [DEBUG] [Thread-309147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:32:05.024 [INFO] [Thread-309147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:32:05.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:32:05.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:32:05.827 [DEBUG] [Thread-309147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:32:05.827 [DEBUG] [Thread-309147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:32:05.834 [DEBUG] [Thread-309147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:32:05.834 [DEBUG] [Thread-309147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:32:06.893 [DEBUG] [Thread-309147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:32:06.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:32: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')
2025-12-24T21:32: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
2025-12-24T21:32:07.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:32:07.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:32:08.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:32:08.176 [DEBUG] [Thread-309147] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:32:14.970 [DEBUG] [Thread-309149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:32:20.473 [DEBUG] [Thread-309150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:32:36.789 [DEBUG] [Thread-309151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:32:38.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:32:38.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:32:38.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:32:48.881 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:32:48.897 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:32:53.344 [DEBUG] [Thread-309152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:33:01.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 27, 6), 9.68, 53.05, 0.0, 45.09, 17.79, 0, 0, 0, 2, 1, 0),)
2025-12-24T21:33:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:27:06
2025-12-24T21:33:09.009 [DEBUG] [Thread-309153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:33:10.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:33:10.803 [DEBUG] [Thread-309154] [transport.py] [_log()] starting thread (client mode): 0xf5772bc0
2025-12-24T21:33:10.804 [DEBUG] [Thread-309154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:33:10.805 [DEBUG] [Thread-309154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:33:10.805 [INFO] [Thread-309154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:33:10.811 [DEBUG] [Thread-309154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:33:10.811 [DEBUG] [Thread-309154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:33:10.811 [DEBUG] [Thread-309154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:33:10.811 [DEBUG] [Thread-309154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] client lang: <none>
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] server lang: <none>
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] kex follows: False
2025-12-24T21:33:10.813 [DEBUG] [Thread-309154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:33:10.815 [DEBUG] [Thread-309154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:33:10.816 [DEBUG] [Thread-309154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:33:10.817 [DEBUG] [Thread-309154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:33:10.817 [DEBUG] [Thread-309154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:33:10.817 [DEBUG] [Thread-309154] [transport.py] [_log()] Compression: none
2025-12-24T21:33:10.817 [DEBUG] [Thread-309154] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:33:10.926 [DEBUG] [Thread-309154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:33:10.934 [DEBUG] [Thread-309154] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:33:10.938 [DEBUG] [Thread-309154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:33:10.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:33:10.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:33:10.949 [DEBUG] [Thread-309154] [transport.py] [_log()] userauth is OK
2025-12-24T21:33:10.949 [DEBUG] [Thread-309154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:33:10.950 [DEBUG] [Thread-309154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:33:10.950 [DEBUG] [Thread-309154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:33:10.950 [DEBUG] [Thread-309154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:33:11.140 [INFO] [Thread-309154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:33:11.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:33:12.087 [DEBUG] [Thread-309154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:33:12.087 [DEBUG] [Thread-309154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:33:12.088 [DEBUG] [Thread-309154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:33:12.088 [DEBUG] [Thread-309154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:33:12.088 [DEBUG] [Thread-309154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:33:12.091 [DEBUG] [Thread-309154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:33:12.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:33:12.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:33:12.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:33:12.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:33:12.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:33:12.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:33:12.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:33:12.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:33:12.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:33:12.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.814300 -999.00  +16.90  17.55     60   +9.30 1 1 1 1 1     0    0 5.91 -113.30 ZNESW 24.1 17.6 159.8 38.0 17.8 -21.9 17.7 -21.3 17.5 -19.9 17.8 -20.9
2025-12-24T21:33:12.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:33:12.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:33:12.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.814300
2025-12-24T21:33:12.130 [DEBUG] [Thread-309154] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:33:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:33:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:33:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:33:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:33:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:33:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:27:06', tmtdew=9.68, humidity=53.05, cloud=0.0, wind=45.09, temperature=17.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-24T21:27:12', seeing=1.49, atlas_timestamp='2025-12-24T19:32:35.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.08924999999999983, 0.0832499999999996, 0.0912500000000005, 0.10849999999999937, 0.14750000000000085, 0.1252500000000012, 0.129999999999999, 0.08525000000000027, 0.08199999999999896, 0.10200000000000031, 0.11324999999999896, 0.0045000000000001705, 0.12650000000000006, 0.12624999999999886, 0.053999999999998494, 0.04800000000000004, 0.08424999999999905, 0.1255000000000006, 0.09600000000000009, 0.05974999999999753, 0.1034999999999986, 0.1247499999999988, 0.08375000000000199, 0.06225000000000058, 0.09499999999999886, 0.09950000000000081, 0.13175000000000026, 0.11050000000000004, 0.17249999999999943, 0.1960000000000015, 0.05500000000000149, 0.09000000000000163, 0.07174999999999798], zp_timestamp='2025-12-24T19:30:00')
2025-12-24T21:33:12.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:33:12.452 [DEBUG] [Thread-309157] [transport.py] [_log()] starting thread (client mode): 0xfabc6680
2025-12-24T21:33:12.452 [DEBUG] [Thread-309157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:33:12.466 [DEBUG] [Thread-309157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:33:12.466 [INFO] [Thread-309157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] client lang: <none>
2025-12-24T21:33:12.473 [DEBUG] [Thread-309157] [transport.py] [_log()] server lang: <none>
2025-12-24T21:33:12.474 [DEBUG] [Thread-309157] [transport.py] [_log()] kex follows: False
2025-12-24T21:33:12.474 [DEBUG] [Thread-309157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:33:12.474 [DEBUG] [Thread-309157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:33:12.474 [DEBUG] [Thread-309157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:33:12.474 [DEBUG] [Thread-309157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:33:12.474 [DEBUG] [Thread-309157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:33:12.474 [DEBUG] [Thread-309157] [transport.py] [_log()] Compression: none
2025-12-24T21:33:12.474 [DEBUG] [Thread-309157] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:33:12.530 [DEBUG] [Thread-309157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:33:12.531 [DEBUG] [Thread-309157] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:33:12.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:33:12.531 [DEBUG] [Thread-309157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:33:12.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:33:12.591 [DEBUG] [Thread-309157] [transport.py] [_log()] userauth is OK
2025-12-24T21:33:12.591 [DEBUG] [Thread-309157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:33:12.591 [DEBUG] [Thread-309157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:33:12.591 [DEBUG] [Thread-309157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:33:12.591 [DEBUG] [Thread-309157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:33:12.608 [INFO] [Thread-309157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:33:12.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:33:12.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:33:13.675 [DEBUG] [Thread-309157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:33:13.675 [DEBUG] [Thread-309157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:33:13.675 [DEBUG] [Thread-309157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:33:13.675 [DEBUG] [Thread-309157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:33:13.683 [DEBUG] [Thread-309157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:33:13.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:33:13.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:33:13.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:33:13.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:33:13.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:33:13.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:33:13.715 [DEBUG] [Thread-309157] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:33:16.627 [DEBUG] [Thread-309159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:33:25.334 [DEBUG] [Thread-309160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:33:41.238 [DEBUG] [Thread-309161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:33:43.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:33:43.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:33:43.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:33:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 32, 48), 8.82, 55.83, 0.0, 38.91, 17.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:33:48.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:32:48
2025-12-24T21:33:49.164 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:33:49.168 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:33:49.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:33:50.240 [DEBUG] [Thread-309162] [transport.py] [_log()] starting thread (client mode): 0xf5742950
2025-12-24T21:33:50.241 [DEBUG] [Thread-309162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:33:50.251 [DEBUG] [Thread-309162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:33:50.251 [INFO] [Thread-309162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] client lang: <none>
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] server lang: <none>
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] kex follows: False
2025-12-24T21:33:50.256 [DEBUG] [Thread-309162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:33:50.258 [DEBUG] [Thread-309162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:33:50.258 [DEBUG] [Thread-309162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:33:50.258 [DEBUG] [Thread-309162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:33:50.258 [DEBUG] [Thread-309162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:33:50.258 [DEBUG] [Thread-309162] [transport.py] [_log()] Compression: none
2025-12-24T21:33:50.258 [DEBUG] [Thread-309162] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:33:50.296 [DEBUG] [Thread-309162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:33:50.307 [DEBUG] [Thread-309162] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:33:50.310 [DEBUG] [Thread-309162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:33:50.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:33:50.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:33:50.315 [DEBUG] [Thread-309162] [transport.py] [_log()] userauth is OK
2025-12-24T21:33:50.315 [DEBUG] [Thread-309162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:33:50.315 [DEBUG] [Thread-309162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:33:50.315 [DEBUG] [Thread-309162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:33:50.315 [DEBUG] [Thread-309162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:33:50.361 [INFO] [Thread-309162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:33:50.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:33:51.117 [DEBUG] [Thread-309162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:33:51.117 [DEBUG] [Thread-309162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:33:51.118 [DEBUG] [Thread-309162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:33:51.191 [DEBUG] [Thread-309162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:33:51.191 [DEBUG] [Thread-309162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:33:51.194 [DEBUG] [Thread-309162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:33:51.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:33:51.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:33:51.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:33:51.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:33:51.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:33:51.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:33:51.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:33:51.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:33:51.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:33:51.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.814647 -999.00  +16.90  26.16     60   +9.30 1 1 1 1 1     0    0 5.58 -126.21 ZNESW 28.1 26.2 164.6 39.1 17.8 -21.8 17.6 -21.7 17.4 -19.9 17.7 -20.9
2025-12-24T21:33:51.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:33:51.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:33:51.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.814647
2025-12-24T21:33:51.222 [DEBUG] [Thread-309162] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:33:51.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:33:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:33:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:33:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:33:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:33:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:32:48', tmtdew=8.82, humidity=55.83, cloud=0.0, wind=38.91, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:32:51', seeing=1.68, atlas_timestamp='2025-12-24T19:33:05.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.08924999999999983, 0.0832499999999996, 0.0912500000000005, 0.10849999999999937, 0.14750000000000085, 0.1252500000000012, 0.129999999999999, 0.08525000000000027, 0.08199999999999896, 0.10200000000000031, 0.11324999999999896, 0.0045000000000001705, 0.12650000000000006, 0.12624999999999886, 0.053999999999998494, 0.04800000000000004, 0.08424999999999905, 0.1255000000000006, 0.09600000000000009, 0.05974999999999753, 0.1034999999999986, 0.1247499999999988, 0.08375000000000199, 0.06225000000000058, 0.09499999999999886, 0.09950000000000081, 0.13175000000000026, 0.11050000000000004, 0.17249999999999943, 0.1960000000000015, 0.05500000000000149, 0.09000000000000163, 0.07174999999999798], zp_timestamp='2025-12-24T19:30:00')
2025-12-24T21:33:51.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:33:51.328 [DEBUG] [Thread-309165] [transport.py] [_log()] starting thread (client mode): 0xf5743790
2025-12-24T21:33:51.328 [DEBUG] [Thread-309165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:33:51.342 [DEBUG] [Thread-309165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:33:51.342 [INFO] [Thread-309165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:33:51.350 [DEBUG] [Thread-309165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] client lang: <none>
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] server lang: <none>
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] kex follows: False
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] Compression: none
2025-12-24T21:33:51.351 [DEBUG] [Thread-309165] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:33:51.408 [DEBUG] [Thread-309165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:33:51.408 [DEBUG] [Thread-309165] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:33:51.409 [DEBUG] [Thread-309165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:33:51.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:33:51.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:33:51.466 [DEBUG] [Thread-309165] [transport.py] [_log()] userauth is OK
2025-12-24T21:33:51.466 [DEBUG] [Thread-309165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:33:51.466 [DEBUG] [Thread-309165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:33:51.466 [DEBUG] [Thread-309165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:33:51.466 [DEBUG] [Thread-309165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:33:51.480 [INFO] [Thread-309165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:33:51.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:33:51.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:33:52.327 [DEBUG] [Thread-309165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:33:52.327 [DEBUG] [Thread-309165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:33:52.348 [DEBUG] [Thread-309165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:33:52.348 [DEBUG] [Thread-309165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:33:52.357 [DEBUG] [Thread-309165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:33:52.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:33:52.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:33:52.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:33:52.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:33:52.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:33:52.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:33:52.396 [DEBUG] [Thread-309165] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:33:56.643 [DEBUG] [Thread-309167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:34:12.624 [DEBUG] [Thread-309168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:34:17.375 [DEBUG] [Thread-309169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:34:22.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:34:23.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:34:27.838 [DEBUG] [Thread-309170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:34:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 32, 48), 8.82, 55.83, 0.0, 38.91, 17.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:34:29.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:32:48
2025-12-24T21:34:29.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:34:29.872 [DEBUG] [Thread-309171] [transport.py] [_log()] starting thread (client mode): 0xfabc7820
2025-12-24T21:34:29.873 [DEBUG] [Thread-309171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:34:29.875 [DEBUG] [Thread-309171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:34:29.875 [INFO] [Thread-309171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] client lang: <none>
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] server lang: <none>
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] kex follows: False
2025-12-24T21:34:29.879 [DEBUG] [Thread-309171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:34:29.880 [DEBUG] [Thread-309171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:34:29.880 [DEBUG] [Thread-309171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:34:29.881 [DEBUG] [Thread-309171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:34:29.881 [DEBUG] [Thread-309171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:34:29.881 [DEBUG] [Thread-309171] [transport.py] [_log()] Compression: none
2025-12-24T21:34:29.881 [DEBUG] [Thread-309171] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:34:29.994 [DEBUG] [Thread-309171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:34:29.997 [DEBUG] [Thread-309171] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:34:29.999 [DEBUG] [Thread-309171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:34:30.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:34:30.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:34:30.002 [DEBUG] [Thread-309171] [transport.py] [_log()] userauth is OK
2025-12-24T21:34:30.002 [DEBUG] [Thread-309171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:34:30.003 [DEBUG] [Thread-309171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:34:30.003 [DEBUG] [Thread-309171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:34:30.003 [DEBUG] [Thread-309171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:34:30.021 [INFO] [Thread-309171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:34:30.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:34:30.651 [DEBUG] [Thread-309171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:34:30.652 [DEBUG] [Thread-309171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:34:30.653 [DEBUG] [Thread-309171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:34:30.693 [DEBUG] [Thread-309171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:34:30.693 [DEBUG] [Thread-309171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:34:30.695 [DEBUG] [Thread-309171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:34:30.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:34:30.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:34:30.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:34:30.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:34:30.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:34:30.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:34:30.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:34:30.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:34:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:34:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.815342 -999.00  +16.80  34.14     61   +9.40 1 1 2 1 1     0    0 4.72 -147.33 ZNESW 30.5 34.1 173.8 40.1 17.7 -21.9 17.6 -21.3 17.4 -20.0 17.7 -20.9
2025-12-24T21:34:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:34:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:34:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.815342
2025-12-24T21:34:30.724 [DEBUG] [Thread-309171] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:34:30.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:34:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:34:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:34:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:34:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:34:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:32:48', tmtdew=8.82, humidity=55.83, cloud=0.0, wind=38.91, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:34:11', seeing=1.75, atlas_timestamp='2025-12-24T19:34:05.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.08924999999999983, 0.0832499999999996, 0.0912500000000005, 0.10849999999999937, 0.14750000000000085, 0.1252500000000012, 0.129999999999999, 0.08525000000000027, 0.08199999999999896, 0.10200000000000031, 0.11324999999999896, 0.0045000000000001705, 0.12650000000000006, 0.12624999999999886, 0.053999999999998494, 0.04800000000000004, 0.08424999999999905, 0.1255000000000006, 0.09600000000000009, 0.05974999999999753, 0.1034999999999986, 0.1247499999999988, 0.08375000000000199, 0.06225000000000058, 0.09499999999999886, 0.09950000000000081, 0.13175000000000026, 0.11050000000000004, 0.17249999999999943, 0.1960000000000015, 0.05500000000000149, 0.09000000000000163, 0.07174999999999798], zp_timestamp='2025-12-24T19:30:00')
2025-12-24T21:34:30.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:34:30.826 [DEBUG] [Thread-309174] [transport.py] [_log()] starting thread (client mode): 0xf57400d0
2025-12-24T21:34:30.826 [DEBUG] [Thread-309174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:34:30.840 [DEBUG] [Thread-309174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:34:30.840 [INFO] [Thread-309174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:34:30.848 [DEBUG] [Thread-309174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:34:30.848 [DEBUG] [Thread-309174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:34:30.848 [DEBUG] [Thread-309174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:34:30.848 [DEBUG] [Thread-309174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:34:30.848 [DEBUG] [Thread-309174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:34:30.848 [DEBUG] [Thread-309174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:34:30.848 [DEBUG] [Thread-309174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] client lang: <none>
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] server lang: <none>
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] kex follows: False
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:34:30.849 [DEBUG] [Thread-309174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:34:30.850 [DEBUG] [Thread-309174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:34:30.850 [DEBUG] [Thread-309174] [transport.py] [_log()] Compression: none
2025-12-24T21:34:30.850 [DEBUG] [Thread-309174] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:34:30.910 [DEBUG] [Thread-309174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:34:30.910 [DEBUG] [Thread-309174] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:34:30.911 [DEBUG] [Thread-309174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:34:30.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:34:30.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:34:30.971 [DEBUG] [Thread-309174] [transport.py] [_log()] userauth is OK
2025-12-24T21:34:30.971 [DEBUG] [Thread-309174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:34:30.972 [DEBUG] [Thread-309174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:34:30.972 [DEBUG] [Thread-309174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:34:30.972 [DEBUG] [Thread-309174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:34:30.992 [INFO] [Thread-309174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:34:30.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:34:30.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:34:31.803 [DEBUG] [Thread-309174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:34:31.803 [DEBUG] [Thread-309174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:34:31.847 [DEBUG] [Thread-309174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:34:31.848 [DEBUG] [Thread-309174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:34:31.856 [DEBUG] [Thread-309174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:34:31.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:34:31.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:34:31.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:34:31.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:34:31.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:34:31.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:34:31.891 [DEBUG] [Thread-309174] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:34:43.428 [DEBUG] [Thread-309176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:34:49.372 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:34:49.378 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:34:58.739 [DEBUG] [Thread-309177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:35:01.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:35:01.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:35:01.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:35:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 34, 10), 8.8, 55.9, 0.0, 38.45, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:35:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:34:10
2025-12-24T21:35:06.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:35:06.487 [DEBUG] [Thread-309178] [transport.py] [_log()] starting thread (client mode): 0xf57bceb0
2025-12-24T21:35:06.488 [DEBUG] [Thread-309178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:35:06.491 [DEBUG] [Thread-309178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:35:06.491 [INFO] [Thread-309178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] client lang: <none>
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] server lang: <none>
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] kex follows: False
2025-12-24T21:35:06.495 [DEBUG] [Thread-309178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:35:06.496 [DEBUG] [Thread-309178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:35:06.496 [DEBUG] [Thread-309178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:35:06.496 [DEBUG] [Thread-309178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:35:06.496 [DEBUG] [Thread-309178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:35:06.496 [DEBUG] [Thread-309178] [transport.py] [_log()] Compression: none
2025-12-24T21:35:06.496 [DEBUG] [Thread-309178] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:35:06.520 [DEBUG] [Thread-309178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:35:06.524 [DEBUG] [Thread-309178] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:35:06.525 [DEBUG] [Thread-309178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:35:06.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:35:06.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:35:06.529 [DEBUG] [Thread-309178] [transport.py] [_log()] userauth is OK
2025-12-24T21:35:06.529 [DEBUG] [Thread-309178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:35:06.529 [DEBUG] [Thread-309178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:35:06.529 [DEBUG] [Thread-309178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:35:06.529 [DEBUG] [Thread-309178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:35:06.547 [INFO] [Thread-309178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:35:06.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:35:07.294 [DEBUG] [Thread-309178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:35:07.294 [DEBUG] [Thread-309178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:35:07.295 [DEBUG] [Thread-309178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:35:07.335 [DEBUG] [Thread-309178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:35:07.335 [DEBUG] [Thread-309178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:35:07.337 [DEBUG] [Thread-309178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:35:07.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:35:07.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:35:07.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:35:07.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:35:07.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:35:07.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:35:07.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:35:07.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:35:07.361 [DEBUG] [Thread-309178] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:35:07.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:35:07.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.815688 -999.00  +16.80  38.23     61   +9.40 1 1 2 1 1     0    0 4.33 -158.38 ZNESW 29.9 38.2 171.2 42.7 17.7 -21.9 17.5 -21.3 17.4 -20.0 17.6 -21.0
2025-12-24T21:35:07.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:35:07.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:35:07.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.815688
2025-12-24T21:35:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:35:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:35:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:35:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:35:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:35:07.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:34:10', tmtdew=8.8, humidity=55.9, cloud=0.0, wind=38.45, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:35:00', seeing=1.95, atlas_timestamp='2025-12-24T19:34:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.0857499999999991, 0.08525000000000205, 0.10125000000000028, 0.1014999999999997, 0.11950000000000038, 0.10925000000000118, 0.07399999999999984, 0.07574999999999932, 0.13949999999999818, 0.08650000000000091, 0.10824999999999996, 0.03999999999999915, 0.14700000000000024, 0.11924999999999919, 0.0519999999999996, 0.04099999999999859, 0.07724999999999937, 0.12950000000000017, 0.10599999999999987, 0.051249999999999574, 0.13649999999999807, 0.10874999999999879, 0.07325000000000159, 0.07574999999999932, 0.06299999999999883, 0.07749999999999879, 0.15274999999999928, 0.09950000000000081, 0.1999999999999993, 0.08800000000000097, 0.15300000000000047, 0.06600000000000072, 0.08474999999999966], zp_timestamp='2025-12-24T19:32:00')
2025-12-24T21:35:07.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:35:07.475 [DEBUG] [Thread-309181] [transport.py] [_log()] starting thread (client mode): 0xf57bdc90
2025-12-24T21:35:07.476 [DEBUG] [Thread-309181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:35:07.490 [DEBUG] [Thread-309181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:35:07.490 [INFO] [Thread-309181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] client lang: <none>
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] server lang: <none>
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] kex follows: False
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] Compression: none
2025-12-24T21:35:07.497 [DEBUG] [Thread-309181] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:35:07.555 [DEBUG] [Thread-309181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:35:07.556 [DEBUG] [Thread-309181] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:35:07.556 [DEBUG] [Thread-309181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:35:07.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:35:07.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:35:07.612 [DEBUG] [Thread-309181] [transport.py] [_log()] userauth is OK
2025-12-24T21:35:07.612 [DEBUG] [Thread-309181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:35:07.612 [DEBUG] [Thread-309181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:35:07.612 [DEBUG] [Thread-309181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:35:07.612 [DEBUG] [Thread-309181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:35:07.626 [INFO] [Thread-309181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:35:07.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:35:07.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:35:08.471 [DEBUG] [Thread-309181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:35:08.471 [DEBUG] [Thread-309181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:35:08.518 [DEBUG] [Thread-309181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:35:08.519 [DEBUG] [Thread-309181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:35:08.527 [DEBUG] [Thread-309181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:35:08.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:35:08.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')
2025-12-24T21:35:08.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:35:08.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:35:08.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:35:08.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:35:08.559 [DEBUG] [Thread-309181] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:35:13.883 [DEBUG] [Thread-309183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:35:17.876 [DEBUG] [Thread-309184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:35:29.141 [DEBUG] [Thread-309185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:35:38.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:35:38.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:35:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:35:40.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 34, 59), 8.63, 57.15, 0.0, 35.29, 16.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:35:40.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:34:59
2025-12-24T21:35:40.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:35:41.120 [DEBUG] [Thread-309186] [transport.py] [_log()] starting thread (client mode): 0xf575f280
2025-12-24T21:35:41.121 [DEBUG] [Thread-309186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:35:41.123 [DEBUG] [Thread-309186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:35:41.124 [INFO] [Thread-309186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:35:41.129 [DEBUG] [Thread-309186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] client lang: <none>
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] server lang: <none>
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] kex follows: False
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:35:41.130 [DEBUG] [Thread-309186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:35:41.131 [DEBUG] [Thread-309186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:35:41.131 [DEBUG] [Thread-309186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:35:41.131 [DEBUG] [Thread-309186] [transport.py] [_log()] Compression: none
2025-12-24T21:35:41.131 [DEBUG] [Thread-309186] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:35:41.170 [DEBUG] [Thread-309186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:35:41.284 [DEBUG] [Thread-309186] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:35:41.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:35:41.287 [DEBUG] [Thread-309186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:35:41.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:35:41.289 [DEBUG] [Thread-309186] [transport.py] [_log()] userauth is OK
2025-12-24T21:35:41.290 [DEBUG] [Thread-309186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:35:41.290 [DEBUG] [Thread-309186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:35:41.290 [DEBUG] [Thread-309186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:35:41.290 [DEBUG] [Thread-309186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:35:41.309 [INFO] [Thread-309186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:35:41.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:35:41.954 [DEBUG] [Thread-309186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:35:41.955 [DEBUG] [Thread-309186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:35:41.956 [DEBUG] [Thread-309186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:35:41.996 [DEBUG] [Thread-309186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:35:41.996 [DEBUG] [Thread-309186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:35:41.998 [DEBUG] [Thread-309186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:35:42.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:35:42.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:35:42.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:35:42.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:35:42.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:35:42.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:35:42.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:35:42.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:35:42.021 [DEBUG] [Thread-309186] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:35:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:35:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.816036 -999.00  +16.80  24.60     61   +9.40 1 1 1 1 1     0    0 4.15 -158.63 ZNESW 27.7 24.6 158.8 42.8 17.6 -21.6 17.5 -21.5 17.3 -19.9 17.6 -20.9
2025-12-24T21:35:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:35:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:35:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.816036
2025-12-24T21:35:42.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:35:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:35:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:35:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:35:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:35:42.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:34:59', tmtdew=8.63, humidity=57.15, cloud=0.0, wind=35.29, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:35:38', seeing=1.71, atlas_timestamp='2025-12-24T19:35:05.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.0857499999999991, 0.08525000000000205, 0.10125000000000028, 0.1014999999999997, 0.11950000000000038, 0.10925000000000118, 0.07399999999999984, 0.07574999999999932, 0.13949999999999818, 0.08650000000000091, 0.10824999999999996, 0.03999999999999915, 0.14700000000000024, 0.11924999999999919, 0.0519999999999996, 0.04099999999999859, 0.07724999999999937, 0.12950000000000017, 0.10599999999999987, 0.051249999999999574, 0.13649999999999807, 0.10874999999999879, 0.07325000000000159, 0.07574999999999932, 0.06299999999999883, 0.07749999999999879, 0.15274999999999928, 0.09950000000000081, 0.1999999999999993, 0.08800000000000097, 0.15300000000000047, 0.06600000000000072, 0.08474999999999966], zp_timestamp='2025-12-24T19:32:00')
2025-12-24T21:35:42.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:35:42.371 [DEBUG] [Thread-309189] [transport.py] [_log()] starting thread (client mode): 0xf575e3b0
2025-12-24T21:35:42.371 [DEBUG] [Thread-309189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:35:42.386 [DEBUG] [Thread-309189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:35:42.386 [INFO] [Thread-309189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] client lang: <none>
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] server lang: <none>
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] kex follows: False
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:35:42.393 [DEBUG] [Thread-309189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:35:42.394 [DEBUG] [Thread-309189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:35:42.394 [DEBUG] [Thread-309189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:35:42.394 [DEBUG] [Thread-309189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:35:42.394 [DEBUG] [Thread-309189] [transport.py] [_log()] Compression: none
2025-12-24T21:35:42.394 [DEBUG] [Thread-309189] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:35:42.449 [DEBUG] [Thread-309189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:35:42.449 [DEBUG] [Thread-309189] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:35:42.449 [DEBUG] [Thread-309189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:35:42.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:35:42.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:35:42.507 [DEBUG] [Thread-309189] [transport.py] [_log()] userauth is OK
2025-12-24T21:35:42.507 [DEBUG] [Thread-309189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:35:42.507 [DEBUG] [Thread-309189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:35:42.507 [DEBUG] [Thread-309189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:35:42.507 [DEBUG] [Thread-309189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:35:42.522 [INFO] [Thread-309189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:35:42.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:35:42.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:35:43.305 [DEBUG] [Thread-309189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:35:43.305 [DEBUG] [Thread-309189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:35:43.351 [DEBUG] [Thread-309189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:35:43.351 [DEBUG] [Thread-309189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:35:43.359 [DEBUG] [Thread-309189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:35:43.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:35:43.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:35:43.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:35:43.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:35:43.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:35:43.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:35:43.406 [DEBUG] [Thread-309189] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:35:44.274 [DEBUG] [Thread-309191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:35:49.580 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:35:49.582 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:35:59.628 [DEBUG] [Thread-309192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:36:13.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:36:13.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:36:13.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:36:14.731 [DEBUG] [Thread-309193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:36:18.812 [DEBUG] [Thread-309194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:36:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 35, 37), 8.36, 57.4, 0.0, 39.5, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:36:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:35:37
2025-12-24T21:36:22.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:36:23.449 [DEBUG] [Thread-309195] [transport.py] [_log()] starting thread (client mode): 0xf57aa830
2025-12-24T21:36:23.450 [DEBUG] [Thread-309195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:36:23.697 [DEBUG] [Thread-309195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:36:23.697 [INFO] [Thread-309195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:36:23.704 [DEBUG] [Thread-309195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:36:23.705 [DEBUG] [Thread-309195] [transport.py] [_log()] client lang: <none>
2025-12-24T21:36:23.705 [DEBUG] [Thread-309195] [transport.py] [_log()] server lang: <none>
2025-12-24T21:36:23.705 [DEBUG] [Thread-309195] [transport.py] [_log()] kex follows: False
2025-12-24T21:36:23.705 [DEBUG] [Thread-309195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:36:23.706 [DEBUG] [Thread-309195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:36:23.706 [DEBUG] [Thread-309195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:36:23.706 [DEBUG] [Thread-309195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:36:23.706 [DEBUG] [Thread-309195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:36:23.706 [DEBUG] [Thread-309195] [transport.py] [_log()] Compression: none
2025-12-24T21:36:23.706 [DEBUG] [Thread-309195] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:36:23.849 [DEBUG] [Thread-309195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:36:23.855 [DEBUG] [Thread-309195] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:36:23.857 [DEBUG] [Thread-309195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:36:23.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:36:23.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:36:23.861 [DEBUG] [Thread-309195] [transport.py] [_log()] userauth is OK
2025-12-24T21:36:23.861 [DEBUG] [Thread-309195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:36:23.862 [DEBUG] [Thread-309195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:36:23.862 [DEBUG] [Thread-309195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:36:23.862 [DEBUG] [Thread-309195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:36:23.885 [INFO] [Thread-309195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:36:23.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:36:24.579 [DEBUG] [Thread-309195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:36:24.579 [DEBUG] [Thread-309195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:36:24.580 [DEBUG] [Thread-309195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:36:24.620 [DEBUG] [Thread-309195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:36:24.620 [DEBUG] [Thread-309195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:36:24.622 [DEBUG] [Thread-309195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:36:24.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:36:24.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:36:24.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:36:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:36:24.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:36:24.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:36:24.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:36:24.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:36:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:36:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.816730 -999.00  +16.70  35.87     62   +9.50 1 1 2 1 1     0    0 3.79 -172.28 ZNESW 26.2 35.9 164.0 43.1 17.6 -21.8 17.4 -21.3 17.3 -20.1 17.6 -20.9
2025-12-24T21:36:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:36:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:36:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.816730
2025-12-24T21:36:24.807 [DEBUG] [Thread-309195] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:36:24.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:36:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:36:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:36:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:36:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:36:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:35:37', tmtdew=8.36, humidity=57.4, cloud=0.0, wind=39.5, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:35:38', seeing=1.71, atlas_timestamp='2025-12-24T19:36:05.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.0857499999999991, 0.08525000000000205, 0.10125000000000028, 0.1014999999999997, 0.11950000000000038, 0.10925000000000118, 0.07399999999999984, 0.07574999999999932, 0.13949999999999818, 0.08650000000000091, 0.10824999999999996, 0.03999999999999915, 0.14700000000000024, 0.11924999999999919, 0.0519999999999996, 0.04099999999999859, 0.07724999999999937, 0.12950000000000017, 0.10599999999999987, 0.051249999999999574, 0.13649999999999807, 0.10874999999999879, 0.07325000000000159, 0.07574999999999932, 0.06299999999999883, 0.07749999999999879, 0.15274999999999928, 0.09950000000000081, 0.1999999999999993, 0.08800000000000097, 0.15300000000000047, 0.06600000000000072, 0.08474999999999966], zp_timestamp='2025-12-24T19:32:00')
2025-12-24T21:36:24.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:36:24.921 [DEBUG] [Thread-309198] [transport.py] [_log()] starting thread (client mode): 0xf813cd60
2025-12-24T21:36:24.921 [DEBUG] [Thread-309198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:36:24.935 [DEBUG] [Thread-309198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:36:24.935 [INFO] [Thread-309198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] client lang: <none>
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] server lang: <none>
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] kex follows: False
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] Compression: none
2025-12-24T21:36:24.943 [DEBUG] [Thread-309198] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:36:24.999 [DEBUG] [Thread-309198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:36:24.999 [DEBUG] [Thread-309198] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:36:24.999 [DEBUG] [Thread-309198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:36:24.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:36:25.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:36:25.056 [DEBUG] [Thread-309198] [transport.py] [_log()] userauth is OK
2025-12-24T21:36:25.056 [DEBUG] [Thread-309198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:36:25.056 [DEBUG] [Thread-309198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:36:25.056 [DEBUG] [Thread-309198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:36:25.056 [DEBUG] [Thread-309198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:36:25.070 [INFO] [Thread-309198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:36:25.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:36:25.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:36:26.112 [DEBUG] [Thread-309198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:36:26.112 [DEBUG] [Thread-309198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:36:26.112 [DEBUG] [Thread-309198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:36:26.112 [DEBUG] [Thread-309198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:36:26.124 [DEBUG] [Thread-309198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:36:26.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:36:26.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:36: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') -> 00000000
2025-12-24T21:36:26.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:36:26.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:36:26.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:36:26.175 [DEBUG] [Thread-309198] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:36:29.832 [DEBUG] [Thread-309200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:36:45.042 [DEBUG] [Thread-309201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:36:49.819 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:36:49.845 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:36:56.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:36:56.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:36:56.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:37:00.259 [DEBUG] [Thread-309202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:37:02.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 36, 16), 8.32, 57.58, 0.0, 38.71, 16.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:37:02.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:36:16
2025-12-24T21:37:05.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:37:05.879 [DEBUG] [Thread-309203] [transport.py] [_log()] starting thread (client mode): 0xf813c9a0
2025-12-24T21:37:05.881 [DEBUG] [Thread-309203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:37:05.886 [DEBUG] [Thread-309203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:37:05.886 [INFO] [Thread-309203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:37:05.893 [DEBUG] [Thread-309203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] client lang: <none>
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] server lang: <none>
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] kex follows: False
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] Compression: none
2025-12-24T21:37:05.894 [DEBUG] [Thread-309203] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:37:05.926 [DEBUG] [Thread-309203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:37:05.932 [DEBUG] [Thread-309203] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:37:05.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:37:05.937 [DEBUG] [Thread-309203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:37:05.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:37:05.940 [DEBUG] [Thread-309203] [transport.py] [_log()] userauth is OK
2025-12-24T21:37:05.940 [DEBUG] [Thread-309203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:37:05.941 [DEBUG] [Thread-309203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:37:05.941 [DEBUG] [Thread-309203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:37:05.941 [DEBUG] [Thread-309203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:37:06.061 [INFO] [Thread-309203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:37:06.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:37:06.586 [DEBUG] [Thread-309203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:37:06.587 [DEBUG] [Thread-309203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:37:06.588 [DEBUG] [Thread-309203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:37:06.588 [DEBUG] [Thread-309203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:37:06.588 [DEBUG] [Thread-309203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:37:06.590 [DEBUG] [Thread-309203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:37:06.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:37:06.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:37:06.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:37:06.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:37:06.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:37:06.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:37:06.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:37:06.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:37:06.613 [DEBUG] [Thread-309203] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:37:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:37:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.817078 -999.00  +16.70  30.25     62   +9.50 1 1 2 1 1     0    0 2.99 -195.07 ZNESW 34.0 30.2 159.3 40.8 17.6 -21.8 17.4 -21.2 17.2 -19.9 17.5 -20.8
2025-12-24T21:37:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:37:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:37:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.817078
2025-12-24T21:37:06.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:37:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:37:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:37:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:37:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:37:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:36:16', tmtdew=8.32, humidity=57.58, cloud=0.0, wind=38.71, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:36:17', seeing=1.71, atlas_timestamp='2025-12-24T19:36:35.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.0857499999999991, 0.08525000000000205, 0.10125000000000028, 0.1014999999999997, 0.11950000000000038, 0.10925000000000118, 0.07399999999999984, 0.07574999999999932, 0.13949999999999818, 0.08650000000000091, 0.10824999999999996, 0.03999999999999915, 0.14700000000000024, 0.11924999999999919, 0.0519999999999996, 0.04099999999999859, 0.07724999999999937, 0.12950000000000017, 0.10599999999999987, 0.051249999999999574, 0.13649999999999807, 0.10874999999999879, 0.07325000000000159, 0.07574999999999932, 0.06299999999999883, 0.07749999999999879, 0.15274999999999928, 0.09950000000000081, 0.1999999999999993, 0.08800000000000097, 0.15300000000000047, 0.06600000000000072, 0.08474999999999966], zp_timestamp='2025-12-24T19:32:00')
2025-12-24T21:37:06.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:37:06.909 [DEBUG] [Thread-309206] [transport.py] [_log()] starting thread (client mode): 0xf813e560
2025-12-24T21:37:06.910 [DEBUG] [Thread-309206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:37:06.910 [DEBUG] [Thread-309206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:37:06.910 [INFO] [Thread-309206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] client lang: <none>
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] server lang: <none>
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] kex follows: False
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] Compression: none
2025-12-24T21:37:06.921 [DEBUG] [Thread-309206] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:37:06.981 [DEBUG] [Thread-309206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:37:06.982 [DEBUG] [Thread-309206] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:37:06.982 [DEBUG] [Thread-309206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:37:06.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:37:06.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:37:07.041 [DEBUG] [Thread-309206] [transport.py] [_log()] userauth is OK
2025-12-24T21:37:07.041 [DEBUG] [Thread-309206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:37:07.172 [DEBUG] [Thread-309206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:37:07.172 [DEBUG] [Thread-309206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:37:07.172 [DEBUG] [Thread-309206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:37:07.187 [INFO] [Thread-309206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:37:07.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:37:07.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:37:08.040 [DEBUG] [Thread-309206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:37:08.040 [DEBUG] [Thread-309206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:37:08.063 [DEBUG] [Thread-309206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:37:08.064 [DEBUG] [Thread-309206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:37:08.072 [DEBUG] [Thread-309206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:37:08.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:37:08.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:37:08.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:37:08.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:37:08.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:37:08.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:37:08.123 [DEBUG] [Thread-309206] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:37:08.312 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:37:15.702 [DEBUG] [Thread-309208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:37:20.945 [DEBUG] [Thread-309209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:37:32.254 [DEBUG] [Thread-309210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:37:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:37:38.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:37:38.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:37:41.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 36, 16), 8.32, 57.58, 0.0, 38.71, 16.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:37:41.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:36:16
2025-12-24T21:37:42.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:37:42.337 [DEBUG] [Thread-309211] [transport.py] [_log()] starting thread (client mode): 0xfabc52d0
2025-12-24T21:37:42.338 [DEBUG] [Thread-309211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:37:42.349 [DEBUG] [Thread-309211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:37:42.350 [INFO] [Thread-309211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:37:42.353 [DEBUG] [Thread-309211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:37:42.353 [DEBUG] [Thread-309211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:37:42.353 [DEBUG] [Thread-309211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:37:42.353 [DEBUG] [Thread-309211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] client lang: <none>
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] server lang: <none>
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] kex follows: False
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] Compression: none
2025-12-24T21:37:42.354 [DEBUG] [Thread-309211] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:37:42.401 [DEBUG] [Thread-309211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:37:42.406 [DEBUG] [Thread-309211] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:37:42.410 [DEBUG] [Thread-309211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:37:42.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:37:42.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:37:42.414 [DEBUG] [Thread-309211] [transport.py] [_log()] userauth is OK
2025-12-24T21:37:42.414 [DEBUG] [Thread-309211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:37:42.415 [DEBUG] [Thread-309211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:37:42.415 [DEBUG] [Thread-309211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:37:42.415 [DEBUG] [Thread-309211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:37:42.435 [INFO] [Thread-309211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:37:42.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:37:43.070 [DEBUG] [Thread-309211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:37:43.070 [DEBUG] [Thread-309211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:37:43.072 [DEBUG] [Thread-309211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:37:43.113 [DEBUG] [Thread-309211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:37:43.113 [DEBUG] [Thread-309211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:37:43.116 [DEBUG] [Thread-309211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:37:43.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:37:43.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:37:43.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:37:43.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:37:43.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:37:43.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:37:43.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:37:43.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:37:43.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:37:43.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.817425 -999.00  +16.70  20.56     62   +9.50 1 1 1 1 1     0    0 3.21 -190.38 ZNESW 19.4 20.6 164.4 41.0 17.5 -21.7 17.4 -21.1 17.2 -19.9 17.5 -20.8
2025-12-24T21:37:43.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:37:43.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:37:43.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.817425
2025-12-24T21:37:43.206 [DEBUG] [Thread-309211] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:37:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:37:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:37:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:37:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:37:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:37:43.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:36:16', tmtdew=8.32, humidity=57.58, cloud=0.0, wind=38.71, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:37:13', seeing=1.48, atlas_timestamp='2025-12-24T19:37:05.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.05525000000000091, 0.09725000000000072, 0.09249999999999936, 0.10749999999999993, 0.13425000000000153, 0.06600000000000072, 0.08625000000000149, 0.06849999999999845, 0.051000000000000156, 0.11524999999999963, -0.0039999999999995595, 0.11999999999999922, 0.09774999999999956, 0.043499999999998096, 0.0519999999999996, 0.03725000000000023, 0.13049999999999962, 0.09149999999999814, 0.031749999999998835, 0.07899999999999885, 0.06824999999999903, 0.09925000000000139, 0.06375000000000064, 0.06599999999999895, 0.07850000000000001, 0.13625000000000043, 0.1255000000000006, 0.12600000000000122, 0.12650000000000006, 0.08050000000000068, 0.0600000000000005, 0.07774999999999821], zp_timestamp='2025-12-24T19:36:00')
2025-12-24T21:37:43.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:37:43.316 [DEBUG] [Thread-309214] [transport.py] [_log()] starting thread (client mode): 0xf575fa60
2025-12-24T21:37:43.316 [DEBUG] [Thread-309214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:37:43.331 [DEBUG] [Thread-309214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:37:43.331 [INFO] [Thread-309214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:37:43.338 [DEBUG] [Thread-309214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:37:43.338 [DEBUG] [Thread-309214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:37:43.338 [DEBUG] [Thread-309214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:37:43.338 [DEBUG] [Thread-309214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:37:43.338 [DEBUG] [Thread-309214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] client lang: <none>
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] server lang: <none>
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] kex follows: False
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] Compression: none
2025-12-24T21:37:43.339 [DEBUG] [Thread-309214] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:37:43.395 [DEBUG] [Thread-309214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:37:43.396 [DEBUG] [Thread-309214] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:37:43.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:37:43.396 [DEBUG] [Thread-309214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:37:43.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:37:43.453 [DEBUG] [Thread-309214] [transport.py] [_log()] userauth is OK
2025-12-24T21:37:43.453 [DEBUG] [Thread-309214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:37:43.453 [DEBUG] [Thread-309214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:37:43.453 [DEBUG] [Thread-309214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:37:43.453 [DEBUG] [Thread-309214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:37:43.468 [INFO] [Thread-309214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:37:43.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:37:43.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:37:44.294 [DEBUG] [Thread-309214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:37:44.297 [DEBUG] [Thread-309214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:37:44.311 [DEBUG] [Thread-309214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:37:44.311 [DEBUG] [Thread-309214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:37:44.321 [DEBUG] [Thread-309214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:37:44.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:37:44.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:37:44.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:37:44.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:37:44.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:37:44.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:37:44.368 [DEBUG] [Thread-309214] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:37:48.357 [DEBUG] [Thread-309216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:37:50.045 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:37:50.046 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:38:03.965 [DEBUG] [Thread-309217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:38:14.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:38:14.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:38:15.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:38:19.308 [DEBUG] [Thread-309218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:38:25.031 [DEBUG] [Thread-309219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:38:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 37, 11), 8.26, 57.79, 0.0, 42.01, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:38:30.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:37:11
2025-12-24T21:38:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:38:31.548 [DEBUG] [Thread-309220] [transport.py] [_log()] starting thread (client mode): 0xf575d7e0
2025-12-24T21:38:31.549 [DEBUG] [Thread-309220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:38:31.549 [DEBUG] [Thread-309220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:38:31.549 [INFO] [Thread-309220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:38:31.555 [DEBUG] [Thread-309220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] client lang: <none>
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] server lang: <none>
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] kex follows: False
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:38:31.556 [DEBUG] [Thread-309220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:38:31.557 [DEBUG] [Thread-309220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:38:31.557 [DEBUG] [Thread-309220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:38:31.557 [DEBUG] [Thread-309220] [transport.py] [_log()] Compression: none
2025-12-24T21:38:31.557 [DEBUG] [Thread-309220] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:38:31.590 [DEBUG] [Thread-309220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:38:31.597 [DEBUG] [Thread-309220] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:38:31.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:38:31.600 [DEBUG] [Thread-309220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:38:31.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:38:31.603 [DEBUG] [Thread-309220] [transport.py] [_log()] userauth is OK
2025-12-24T21:38:31.603 [DEBUG] [Thread-309220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:38:31.604 [DEBUG] [Thread-309220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:38:31.604 [DEBUG] [Thread-309220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:38:31.604 [DEBUG] [Thread-309220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:38:31.623 [INFO] [Thread-309220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:38:31.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:38:32.227 [DEBUG] [Thread-309220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:38:32.227 [DEBUG] [Thread-309220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:38:32.228 [DEBUG] [Thread-309220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:38:32.270 [DEBUG] [Thread-309220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:38:32.270 [DEBUG] [Thread-309220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:38:32.271 [DEBUG] [Thread-309220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:38:32.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:38:32.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:38:32.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:38:32.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:38:32.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:38:32.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:38:32.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:38:32.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:38:32.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:38:32.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.818119 -999.00  +16.60  24.62     62   +9.50 1 1 1 1 1     0    0 3.57 -176.39 ZNESW 23.3 24.6 164.5 39.9 17.5 -21.5 17.4 -21.1 17.2 -19.9 17.5 -20.7
2025-12-24T21:38:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:38:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:38:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.818119
2025-12-24T21:38:32.327 [DEBUG] [Thread-309220] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:38:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:38:32.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:38:32.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:38:32.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:38:32.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:38:32.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:37:11', tmtdew=8.26, humidity=57.79, cloud=0.0, wind=42.01, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:38:12', seeing=1.59, atlas_timestamp='2025-12-24T19:38:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.05525000000000091, 0.09725000000000072, 0.09249999999999936, 0.10749999999999993, 0.13425000000000153, 0.06600000000000072, 0.08625000000000149, 0.06849999999999845, 0.051000000000000156, 0.11524999999999963, -0.0039999999999995595, 0.11999999999999922, 0.09774999999999956, 0.043499999999998096, 0.0519999999999996, 0.03725000000000023, 0.13049999999999962, 0.09149999999999814, 0.031749999999998835, 0.07899999999999885, 0.06824999999999903, 0.09925000000000139, 0.06375000000000064, 0.06599999999999895, 0.07850000000000001, 0.13625000000000043, 0.1255000000000006, 0.12600000000000122, 0.12650000000000006, 0.08050000000000068, 0.0600000000000005, 0.07774999999999821], zp_timestamp='2025-12-24T19:36:00')
2025-12-24T21:38:32.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:38:32.670 [DEBUG] [Thread-309223] [transport.py] [_log()] starting thread (client mode): 0xf813fa00
2025-12-24T21:38:32.670 [DEBUG] [Thread-309223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:38:32.683 [DEBUG] [Thread-309223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:38:32.683 [INFO] [Thread-309223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:38:32.693 [DEBUG] [Thread-309223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:38:32.693 [DEBUG] [Thread-309223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:38:32.693 [DEBUG] [Thread-309223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] client lang: <none>
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] server lang: <none>
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] kex follows: False
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] Compression: none
2025-12-24T21:38:32.694 [DEBUG] [Thread-309223] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:38:32.952 [DEBUG] [Thread-309223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:38:32.954 [DEBUG] [Thread-309223] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:38:32.954 [DEBUG] [Thread-309223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:38:32.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:38:32.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:38:33.011 [DEBUG] [Thread-309223] [transport.py] [_log()] userauth is OK
2025-12-24T21:38:33.011 [DEBUG] [Thread-309223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:38:33.014 [DEBUG] [Thread-309223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:38:33.014 [DEBUG] [Thread-309223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:38:33.014 [DEBUG] [Thread-309223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:38:33.100 [INFO] [Thread-309223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:38:33.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:38:33.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:38:33.891 [DEBUG] [Thread-309223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:38:33.891 [DEBUG] [Thread-309223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:38:34.114 [DEBUG] [Thread-309223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:38:34.114 [DEBUG] [Thread-309223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:38:34.124 [DEBUG] [Thread-309223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:38:34.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:38:34.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:38:34.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:38:34.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:38:34.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:38:34.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:38:34.170 [DEBUG] [Thread-309223] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:38:34.890 [DEBUG] [Thread-309225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:38:50.265 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:38:50.280 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:38:50.806 [DEBUG] [Thread-309226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:39:04.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:39:04.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:39:04.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:39:05.956 [DEBUG] [Thread-309227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:39:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 38, 11), 8.23, 57.89, 0.0, 39.12, 16.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:39:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:38:11
2025-12-24T21:39:14.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:39:14.754 [DEBUG] [Thread-309228] [transport.py] [_log()] starting thread (client mode): 0xfabc7eb0
2025-12-24T21:39:14.756 [DEBUG] [Thread-309228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:39:14.757 [DEBUG] [Thread-309228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:39:14.757 [INFO] [Thread-309228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:39:14.765 [DEBUG] [Thread-309228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:39:14.765 [DEBUG] [Thread-309228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:39:14.765 [DEBUG] [Thread-309228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:39:14.765 [DEBUG] [Thread-309228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:39:14.765 [DEBUG] [Thread-309228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:39:14.765 [DEBUG] [Thread-309228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:39:14.765 [DEBUG] [Thread-309228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:39:14.766 [DEBUG] [Thread-309228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:39:14.766 [DEBUG] [Thread-309228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:39:14.766 [DEBUG] [Thread-309228] [transport.py] [_log()] client lang: <none>
2025-12-24T21:39:14.766 [DEBUG] [Thread-309228] [transport.py] [_log()] server lang: <none>
2025-12-24T21:39:14.766 [DEBUG] [Thread-309228] [transport.py] [_log()] kex follows: False
2025-12-24T21:39:14.766 [DEBUG] [Thread-309228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:39:14.766 [DEBUG] [Thread-309228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:39:14.766 [DEBUG] [Thread-309228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:39:14.767 [DEBUG] [Thread-309228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:39:14.767 [DEBUG] [Thread-309228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:39:14.767 [DEBUG] [Thread-309228] [transport.py] [_log()] Compression: none
2025-12-24T21:39:14.767 [DEBUG] [Thread-309228] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:39:14.946 [DEBUG] [Thread-309228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:39:14.951 [DEBUG] [Thread-309228] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:39:14.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:39:14.955 [DEBUG] [Thread-309228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:39:14.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:39:14.959 [DEBUG] [Thread-309228] [transport.py] [_log()] userauth is OK
2025-12-24T21:39:14.959 [DEBUG] [Thread-309228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:39:14.959 [DEBUG] [Thread-309228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:39:14.959 [DEBUG] [Thread-309228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:39:14.959 [DEBUG] [Thread-309228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:39:15.046 [INFO] [Thread-309228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:39:15.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:39:15.650 [DEBUG] [Thread-309228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:39:15.650 [DEBUG] [Thread-309228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:39:15.650 [DEBUG] [Thread-309228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:39:15.651 [DEBUG] [Thread-309228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:39:15.651 [DEBUG] [Thread-309228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:39:15.653 [DEBUG] [Thread-309228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:39:15.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:39:15.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:39:15.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:39:15.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:39:15.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:39:15.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:39:15.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:39:15.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:39:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:39:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.818467 -999.00  +16.60  29.79     63   +9.60 1 1 1 1 1     0    0 3.22 -178.85 ZNESW 25.4 29.8 167.0 37.1 17.5 -21.7 17.4 -21.5 17.2 -20.0 17.4 -20.7
2025-12-24T21:39:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:39:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:39:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.818467
2025-12-24T21:39:15.725 [DEBUG] [Thread-309228] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:39:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:39:16.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:39:16.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:39:16.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:39:16.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:39:16.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:38:11', tmtdew=8.23, humidity=57.89, cloud=0.0, wind=39.12, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:38:12', seeing=1.59, atlas_timestamp='2025-12-24T19:38:35.549', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.05525000000000091, 0.09725000000000072, 0.09249999999999936, 0.10749999999999993, 0.13425000000000153, 0.06600000000000072, 0.08625000000000149, 0.06849999999999845, 0.051000000000000156, 0.11524999999999963, -0.0039999999999995595, 0.11999999999999922, 0.09774999999999956, 0.043499999999998096, 0.0519999999999996, 0.03725000000000023, 0.13049999999999962, 0.09149999999999814, 0.031749999999998835, 0.07899999999999885, 0.06824999999999903, 0.09925000000000139, 0.06375000000000064, 0.06599999999999895, 0.07850000000000001, 0.13625000000000043, 0.1255000000000006, 0.12600000000000122, 0.12650000000000006, 0.08050000000000068, 0.0600000000000005, 0.07774999999999821], zp_timestamp='2025-12-24T19:36:00')
2025-12-24T21:39:16.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:39:16.578 [DEBUG] [Thread-309231] [transport.py] [_log()] starting thread (client mode): 0xf813d0c0
2025-12-24T21:39:16.578 [DEBUG] [Thread-309231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:39:16.579 [DEBUG] [Thread-309231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:39:16.579 [INFO] [Thread-309231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] client lang: <none>
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] server lang: <none>
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] kex follows: False
2025-12-24T21:39:16.587 [DEBUG] [Thread-309231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:39:16.588 [DEBUG] [Thread-309231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:39:16.588 [DEBUG] [Thread-309231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:39:16.588 [DEBUG] [Thread-309231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:39:16.588 [DEBUG] [Thread-309231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:39:16.588 [DEBUG] [Thread-309231] [transport.py] [_log()] Compression: none
2025-12-24T21:39:16.588 [DEBUG] [Thread-309231] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:39:16.744 [DEBUG] [Thread-309231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:39:16.746 [DEBUG] [Thread-309231] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:39:16.746 [DEBUG] [Thread-309231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:39:16.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:39:16.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:39:16.801 [DEBUG] [Thread-309231] [transport.py] [_log()] userauth is OK
2025-12-24T21:39:16.801 [DEBUG] [Thread-309231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:39:16.801 [DEBUG] [Thread-309231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:39:16.801 [DEBUG] [Thread-309231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:39:16.801 [DEBUG] [Thread-309231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:39:16.822 [INFO] [Thread-309231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:39:16.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:39:16.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:39:17.854 [DEBUG] [Thread-309231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:39:17.854 [DEBUG] [Thread-309231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:39:17.854 [DEBUG] [Thread-309231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:39:17.855 [DEBUG] [Thread-309231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:39:17.863 [DEBUG] [Thread-309231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:39:17.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:39:17.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:39:17.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') -> 00000000
2025-12-24T21:39:17.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:39:17.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:39:17.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:39:17.902 [DEBUG] [Thread-309231] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:39:21.402 [DEBUG] [Thread-309233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:39:26.457 [DEBUG] [Thread-309234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:39:38.811 [DEBUG] [Thread-309235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:39:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:39:48.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:39:48.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:39:50.640 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:39:50.645 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:39:52.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 38, 11), 8.23, 57.89, 0.0, 39.12, 16.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:39:52.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:38:11
2025-12-24T21:39:54.774 [DEBUG] [Thread-309236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:39:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:39:55.758 [DEBUG] [Thread-309237] [transport.py] [_log()] starting thread (client mode): 0xf57be890
2025-12-24T21:39:55.759 [DEBUG] [Thread-309237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:39:55.765 [DEBUG] [Thread-309237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:39:55.766 [INFO] [Thread-309237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:39:55.774 [DEBUG] [Thread-309237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:39:55.775 [DEBUG] [Thread-309237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:39:55.775 [DEBUG] [Thread-309237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:39:55.775 [DEBUG] [Thread-309237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:39:55.775 [DEBUG] [Thread-309237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:39:55.776 [DEBUG] [Thread-309237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:39:55.776 [DEBUG] [Thread-309237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:39:55.776 [DEBUG] [Thread-309237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:39:55.776 [DEBUG] [Thread-309237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:39:55.776 [DEBUG] [Thread-309237] [transport.py] [_log()] client lang: <none>
2025-12-24T21:39:55.776 [DEBUG] [Thread-309237] [transport.py] [_log()] server lang: <none>
2025-12-24T21:39:55.776 [DEBUG] [Thread-309237] [transport.py] [_log()] kex follows: False
2025-12-24T21:39:55.776 [DEBUG] [Thread-309237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:39:55.777 [DEBUG] [Thread-309237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:39:55.777 [DEBUG] [Thread-309237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:39:55.777 [DEBUG] [Thread-309237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:39:55.777 [DEBUG] [Thread-309237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:39:55.777 [DEBUG] [Thread-309237] [transport.py] [_log()] Compression: none
2025-12-24T21:39:55.777 [DEBUG] [Thread-309237] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:39:56.003 [DEBUG] [Thread-309237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:39:56.115 [DEBUG] [Thread-309237] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:39:56.116 [DEBUG] [Thread-309237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:39:56.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:39:56.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:39:56.120 [DEBUG] [Thread-309237] [transport.py] [_log()] userauth is OK
2025-12-24T21:39:56.120 [DEBUG] [Thread-309237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:39:56.120 [DEBUG] [Thread-309237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:39:56.120 [DEBUG] [Thread-309237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:39:56.120 [DEBUG] [Thread-309237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:39:56.150 [INFO] [Thread-309237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:39:56.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:39:56.794 [DEBUG] [Thread-309237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:39:56.794 [DEBUG] [Thread-309237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:39:56.795 [DEBUG] [Thread-309237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:39:56.837 [DEBUG] [Thread-309237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:39:56.837 [DEBUG] [Thread-309237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:39:56.839 [DEBUG] [Thread-309237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:39:56.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:39:56.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:39:56.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:39:56.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:39:57.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:39:57.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:39:57.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:39:57.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:39:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:39:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.819160 -999.00  +16.60  32.76     63   +9.60 1 1 2 1 1     0    0 3.38 -171.88 ZNESW 28.5 32.8 161.6 37.2 17.4 -21.6 17.4 -21.1 17.1 -19.8 17.4 -20.6
2025-12-24T21:39:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:39:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:39:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.819160
2025-12-24T21:39:57.011 [DEBUG] [Thread-309237] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:39:57.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:39:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:39:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:39:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:39:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:39:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:38:11', tmtdew=8.23, humidity=57.89, cloud=0.0, wind=39.12, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:39:18', seeing=1.47, atlas_timestamp='2025-12-24T19:39:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.05525000000000091, 0.09725000000000072, 0.09249999999999936, 0.10749999999999993, 0.13425000000000153, 0.06600000000000072, 0.08625000000000149, 0.06849999999999845, 0.051000000000000156, 0.11524999999999963, -0.0039999999999995595, 0.11999999999999922, 0.09774999999999956, 0.043499999999998096, 0.0519999999999996, 0.03725000000000023, 0.13049999999999962, 0.09149999999999814, 0.031749999999998835, 0.07899999999999885, 0.06824999999999903, 0.09925000000000139, 0.06375000000000064, 0.06599999999999895, 0.07850000000000001, 0.13625000000000043, 0.1255000000000006, 0.12600000000000122, 0.12650000000000006, 0.08050000000000068, 0.0600000000000005, 0.07774999999999821], zp_timestamp='2025-12-24T19:36:00')
2025-12-24T21:39:57.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:39:57.323 [DEBUG] [Thread-309240] [transport.py] [_log()] starting thread (client mode): 0xf575df90
2025-12-24T21:39:57.324 [DEBUG] [Thread-309240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:39:57.338 [DEBUG] [Thread-309240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:39:57.338 [INFO] [Thread-309240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] client lang: <none>
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] server lang: <none>
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] kex follows: False
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] Compression: none
2025-12-24T21:39:57.346 [DEBUG] [Thread-309240] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:39:57.402 [DEBUG] [Thread-309240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:39:57.402 [DEBUG] [Thread-309240] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:39:57.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:39:57.403 [DEBUG] [Thread-309240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:39:57.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:39:57.476 [DEBUG] [Thread-309240] [transport.py] [_log()] userauth is OK
2025-12-24T21:39:57.476 [DEBUG] [Thread-309240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:39:57.476 [DEBUG] [Thread-309240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:39:57.476 [DEBUG] [Thread-309240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:39:57.476 [DEBUG] [Thread-309240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:39:57.494 [INFO] [Thread-309240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:39:57.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:39:57.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:39:58.416 [DEBUG] [Thread-309240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:39:58.416 [DEBUG] [Thread-309240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:39:58.416 [DEBUG] [Thread-309240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:39:58.416 [DEBUG] [Thread-309240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:39:58.425 [DEBUG] [Thread-309240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:39:58.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:39: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')
2025-12-24T21:39:58.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:39:58.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:39:58.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:39:58.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:39:58.457 [DEBUG] [Thread-309240] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:40:10.281 [DEBUG] [Thread-309242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:40:25.747 [DEBUG] [Thread-309243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:40:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:40:28.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:40:28.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
2025-12-24T21:40:28.705 [DEBUG] [Thread-309244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:40:37.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 39, 17), 8.17, 58.13, 0.0, 38.53, 16.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:40:37.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:39:17
2025-12-24T21:40:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:40:40.316 [DEBUG] [Thread-309245] [transport.py] [_log()] starting thread (client mode): 0xf575de10
2025-12-24T21:40:40.316 [DEBUG] [Thread-309245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:40:40.317 [DEBUG] [Thread-309245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:40:40.317 [INFO] [Thread-309245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] client lang: <none>
2025-12-24T21:40:40.321 [DEBUG] [Thread-309245] [transport.py] [_log()] server lang: <none>
2025-12-24T21:40:40.322 [DEBUG] [Thread-309245] [transport.py] [_log()] kex follows: False
2025-12-24T21:40:40.322 [DEBUG] [Thread-309245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:40:40.322 [DEBUG] [Thread-309245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:40:40.322 [DEBUG] [Thread-309245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:40:40.322 [DEBUG] [Thread-309245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:40:40.322 [DEBUG] [Thread-309245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:40:40.322 [DEBUG] [Thread-309245] [transport.py] [_log()] Compression: none
2025-12-24T21:40:40.322 [DEBUG] [Thread-309245] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:40:40.352 [DEBUG] [Thread-309245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:40:40.356 [DEBUG] [Thread-309245] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:40:40.357 [DEBUG] [Thread-309245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:40:40.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:40:40.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:40:40.361 [DEBUG] [Thread-309245] [transport.py] [_log()] userauth is OK
2025-12-24T21:40:40.361 [DEBUG] [Thread-309245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:40:40.362 [DEBUG] [Thread-309245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:40:40.362 [DEBUG] [Thread-309245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:40:40.362 [DEBUG] [Thread-309245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:40:40.379 [INFO] [Thread-309245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:40:40.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:40:40.969 [DEBUG] [Thread-309247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:40:41.010 [DEBUG] [Thread-309245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:40:41.010 [DEBUG] [Thread-309245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:40:41.010 [DEBUG] [Thread-309245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:40:41.072 [DEBUG] [Thread-309245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:40:41.072 [DEBUG] [Thread-309245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:40:41.075 [DEBUG] [Thread-309245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:40:41.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:40:41.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:40:41.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:40:41.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:40:41.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:40:41.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:40:41.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:40:41.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:40:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:40:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.819508 -999.00  +16.60  17.72     63   +9.70 1 1 1 1 1     0    0 3.65 -169.51 ZNESW 28.4 17.7 169.6 41.3 17.4 -21.6 17.3 -21.4 17.1 -19.8 17.4 -20.7
2025-12-24T21:40:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:40:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:40:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.819508
2025-12-24T21:40:41.332 [DEBUG] [Thread-309245] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:40:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:40:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:40:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:40:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:40:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:40:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:39:17', tmtdew=8.17, humidity=58.13, cloud=0.0, wind=38.53, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:40:20', seeing=1.41, atlas_timestamp='2025-12-24T19:40:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.05525000000000091, 0.09725000000000072, 0.09249999999999936, 0.10749999999999993, 0.13425000000000153, 0.06600000000000072, 0.08625000000000149, 0.06849999999999845, 0.051000000000000156, 0.11524999999999963, -0.0039999999999995595, 0.11999999999999922, 0.09774999999999956, 0.043499999999998096, 0.0519999999999996, 0.03725000000000023, 0.13049999999999962, 0.09149999999999814, 0.031749999999998835, 0.07899999999999885, 0.06824999999999903, 0.09925000000000139, 0.06375000000000064, 0.06599999999999895, 0.07850000000000001, 0.13625000000000043, 0.1255000000000006, 0.12600000000000122, 0.12650000000000006, 0.08050000000000068, 0.0600000000000005, 0.07774999999999821], zp_timestamp='2025-12-24T19:36:00')
2025-12-24T21:40:41.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:40:41.442 [DEBUG] [Thread-309249] [transport.py] [_log()] starting thread (client mode): 0xf575d0f0
2025-12-24T21:40:41.442 [DEBUG] [Thread-309249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:40:41.456 [DEBUG] [Thread-309249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:40:41.456 [INFO] [Thread-309249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] client lang: <none>
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] server lang: <none>
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] kex follows: False
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] Compression: none
2025-12-24T21:40:41.464 [DEBUG] [Thread-309249] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:40:41.665 [DEBUG] [Thread-309249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:40:41.666 [DEBUG] [Thread-309249] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:40:41.666 [DEBUG] [Thread-309249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:40:41.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:40:41.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:40:41.722 [DEBUG] [Thread-309249] [transport.py] [_log()] userauth is OK
2025-12-24T21:40:41.722 [DEBUG] [Thread-309249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:40:41.722 [DEBUG] [Thread-309249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:40:41.722 [DEBUG] [Thread-309249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:40:41.722 [DEBUG] [Thread-309249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:40:41.740 [INFO] [Thread-309249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:40:41.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:40:41.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:40:42.549 [DEBUG] [Thread-309249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:40:42.549 [DEBUG] [Thread-309249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:40:42.549 [DEBUG] [Thread-309249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:40:42.549 [DEBUG] [Thread-309249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:40:42.557 [DEBUG] [Thread-309249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:40:42.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:40:42.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:40:42.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:40:42.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:40:42.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:40:42.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:40:42.590 [DEBUG] [Thread-309249] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:40:50.865 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:40:50.881 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:40:56.072 [DEBUG] [Thread-309251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:41:11.270 [DEBUG] [Thread-309252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:41:12.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:41:12.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:41:12.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:41:25.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 40, 18), 8.18, 58.48, 0.0, 38.07, 16.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:41:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:40:18
2025-12-24T21:41:26.704 [DEBUG] [Thread-309253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:41:27.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:41:27.947 [DEBUG] [Thread-309254] [transport.py] [_log()] starting thread (client mode): 0xf575f8b0
2025-12-24T21:41:27.949 [DEBUG] [Thread-309254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:41:27.950 [DEBUG] [Thread-309254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:41:27.950 [INFO] [Thread-309254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] client lang: <none>
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] server lang: <none>
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] kex follows: False
2025-12-24T21:41:27.953 [DEBUG] [Thread-309254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:41:27.954 [DEBUG] [Thread-309254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:41:27.954 [DEBUG] [Thread-309254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:41:27.954 [DEBUG] [Thread-309254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:41:27.954 [DEBUG] [Thread-309254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:41:27.954 [DEBUG] [Thread-309254] [transport.py] [_log()] Compression: none
2025-12-24T21:41:27.954 [DEBUG] [Thread-309254] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:41:27.996 [DEBUG] [Thread-309254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:41:28.001 [DEBUG] [Thread-309254] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:41:28.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:41:28.005 [DEBUG] [Thread-309254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:41:28.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:41:28.006 [DEBUG] [Thread-309254] [transport.py] [_log()] userauth is OK
2025-12-24T21:41:28.006 [DEBUG] [Thread-309254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:41:28.007 [DEBUG] [Thread-309254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:41:28.007 [DEBUG] [Thread-309254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:41:28.007 [DEBUG] [Thread-309254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:41:28.144 [INFO] [Thread-309254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:41:28.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:41:28.709 [DEBUG] [Thread-309254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:41:28.710 [DEBUG] [Thread-309254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:41:28.710 [DEBUG] [Thread-309254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:41:28.751 [DEBUG] [Thread-309254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:41:28.751 [DEBUG] [Thread-309254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:41:28.753 [DEBUG] [Thread-309254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:41:28.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:41:28.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:41:28.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:41:28.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:41:28.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:41:28.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:41:28.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:41:28.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:41:28.782 [DEBUG] [Thread-309254] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:41:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:41:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.820203 -999.00  +16.50  19.63     63   +9.70 1 1 1 1 1     0    0 3.12 -172.76 ZNESW 27.1 19.6 162.4 35.9 17.4 -21.6 17.3 -21.1 17.1 -19.8 17.4 -20.7
2025-12-24T21:41:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:41:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:41:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.820203
2025-12-24T21:41:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:41:29.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:41:29.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:41:29.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:41:29.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:41:29.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:40:18', tmtdew=8.18, humidity=58.48, cloud=0.0, wind=38.07, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:40:20', seeing=1.41, atlas_timestamp='2025-12-24T19:41:05.539', atlas_cloud=1, atlas_rain=1, zp_data=[0.11574999999999847, 0.09625000000000128, 0.13424999999999976, 0.0884999999999998, 0.15850000000000009, 0.1412500000000012, 0.10899999999999999, 0.12725000000000009, 0.06550000000000011, 0.09299999999999997, 0.14224999999999888, 0.051000000000000156, 0.17149999999999999, 0.12025000000000041, 0.07699999999999996, 0.04699999999999882, 0.08924999999999983, 0.1479999999999997, 0.09699999999999953, 0.053249999999998465, 0.08499999999999908, 0.12874999999999837, 0.11425000000000018, 0.06375000000000064, 0.07899999999999885, 0.09999999999999964, 0.12374999999999936, 0.08950000000000102, 0.1490000000000009, 0.14250000000000185, 0.15200000000000102, 0.0990000000000002, 0.11624999999999908], zp_timestamp='2025-12-24T19:39:00')
2025-12-24T21:41:29.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:41:29.568 [DEBUG] [Thread-309257] [transport.py] [_log()] starting thread (client mode): 0xf575eec0
2025-12-24T21:41:29.568 [DEBUG] [Thread-309257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:41:29.581 [DEBUG] [Thread-309257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:41:29.581 [INFO] [Thread-309257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] client lang: <none>
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] server lang: <none>
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] kex follows: False
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] Compression: none
2025-12-24T21:41:29.589 [DEBUG] [Thread-309257] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:41:29.884 [DEBUG] [Thread-309259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:41:29.884 [DEBUG] [Thread-309257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:41:29.885 [DEBUG] [Thread-309257] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:41:29.885 [DEBUG] [Thread-309257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:41:29.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:41:29.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:41:29.940 [DEBUG] [Thread-309257] [transport.py] [_log()] userauth is OK
2025-12-24T21:41:29.940 [DEBUG] [Thread-309257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:41:29.940 [DEBUG] [Thread-309257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:41:29.940 [DEBUG] [Thread-309257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:41:29.940 [DEBUG] [Thread-309257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:41:29.955 [INFO] [Thread-309257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:41:29.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:41:29.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:41:30.854 [DEBUG] [Thread-309257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:41:30.854 [DEBUG] [Thread-309257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:41:30.855 [DEBUG] [Thread-309257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:41:30.855 [DEBUG] [Thread-309257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:41:30.863 [DEBUG] [Thread-309257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:41:30.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:41:30.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:41:30.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:41:30.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:41:30.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:41:30.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:41:30.896 [DEBUG] [Thread-309257] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:41:42.007 [DEBUG] [Thread-309260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:41:51.282 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:41:51.294 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:41:57.181 [DEBUG] [Thread-309261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:42:00.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:42:00.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:42:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:42:08.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 41, 14), 8.1, 58.82, 0.0, 41.21, 16.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:42:08.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:41:14
2025-12-24T21:42:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:42:09.130 [DEBUG] [Thread-309262] [transport.py] [_log()] starting thread (client mode): 0xf575f5e0
2025-12-24T21:42:09.132 [DEBUG] [Thread-309262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:42:09.142 [DEBUG] [Thread-309262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:42:09.142 [INFO] [Thread-309262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:42:09.146 [DEBUG] [Thread-309262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:42:09.146 [DEBUG] [Thread-309262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:42:09.146 [DEBUG] [Thread-309262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:42:09.146 [DEBUG] [Thread-309262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:42:09.146 [DEBUG] [Thread-309262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:42:09.146 [DEBUG] [Thread-309262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] client lang: <none>
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] server lang: <none>
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] kex follows: False
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] Compression: none
2025-12-24T21:42:09.147 [DEBUG] [Thread-309262] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:42:09.176 [DEBUG] [Thread-309262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:42:09.179 [DEBUG] [Thread-309262] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:42:09.180 [DEBUG] [Thread-309262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:42:09.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:42:09.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:42:09.183 [DEBUG] [Thread-309262] [transport.py] [_log()] userauth is OK
2025-12-24T21:42:09.183 [DEBUG] [Thread-309262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:42:09.183 [DEBUG] [Thread-309262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:42:09.183 [DEBUG] [Thread-309262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:42:09.183 [DEBUG] [Thread-309262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:42:09.204 [INFO] [Thread-309262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:42:09.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:42:09.836 [DEBUG] [Thread-309262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:42:09.836 [DEBUG] [Thread-309262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:42:09.838 [DEBUG] [Thread-309262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:42:09.878 [DEBUG] [Thread-309262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:42:09.878 [DEBUG] [Thread-309262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:42:09.880 [DEBUG] [Thread-309262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:42:09.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:42:09.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:42:09.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:42:09.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:42:09.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:42:09.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:42:09.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:42:09.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:42:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:42:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.820550 -999.00  +16.50  26.87     64   +9.80 1 1 1 1 1     0    0 3.03 -176.07 ZNESW 21.4 26.9 162.1 36.5 17.4 -21.8 17.2 -21.1 17.1 -19.8 17.4 -20.8
2025-12-24T21:42:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:42:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:42:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.820550
2025-12-24T21:42:09.908 [DEBUG] [Thread-309262] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:42:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:42:09.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:42:09.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:42:09.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:42:09.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:42:09.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:41:14', tmtdew=8.1, humidity=58.82, cloud=0.0, wind=41.21, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:41:15', seeing=1.39, atlas_timestamp='2025-12-24T19:41:35.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.11574999999999847, 0.09625000000000128, 0.13424999999999976, 0.0884999999999998, 0.15850000000000009, 0.1412500000000012, 0.10899999999999999, 0.12725000000000009, 0.06550000000000011, 0.09299999999999997, 0.14224999999999888, 0.051000000000000156, 0.17149999999999999, 0.12025000000000041, 0.07699999999999996, 0.04699999999999882, 0.08924999999999983, 0.1479999999999997, 0.09699999999999953, 0.053249999999998465, 0.08499999999999908, 0.12874999999999837, 0.11425000000000018, 0.06375000000000064, 0.07899999999999885, 0.09999999999999964, 0.12374999999999936, 0.08950000000000102, 0.1490000000000009, 0.14250000000000185, 0.15200000000000102, 0.0990000000000002, 0.11624999999999908], zp_timestamp='2025-12-24T19:39:00')
2025-12-24T21:42:09.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:42:10.005 [DEBUG] [Thread-309265] [transport.py] [_log()] starting thread (client mode): 0xf575eb60
2025-12-24T21:42:10.005 [DEBUG] [Thread-309265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:42:10.020 [DEBUG] [Thread-309265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:42:10.020 [INFO] [Thread-309265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:42:10.027 [DEBUG] [Thread-309265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] client lang: <none>
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] server lang: <none>
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] kex follows: False
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] Compression: none
2025-12-24T21:42:10.028 [DEBUG] [Thread-309265] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:42:10.088 [DEBUG] [Thread-309265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:42:10.088 [DEBUG] [Thread-309265] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:42:10.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:42:10.090 [DEBUG] [Thread-309265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:42:10.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:42:10.143 [DEBUG] [Thread-309265] [transport.py] [_log()] userauth is OK
2025-12-24T21:42:10.144 [DEBUG] [Thread-309265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:42:10.144 [DEBUG] [Thread-309265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:42:10.144 [DEBUG] [Thread-309265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:42:10.144 [DEBUG] [Thread-309265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:42:10.164 [INFO] [Thread-309265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:42:10.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:42:10.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:42:11.007 [DEBUG] [Thread-309265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:42:11.007 [DEBUG] [Thread-309265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:42:11.014 [DEBUG] [Thread-309265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:42:11.014 [DEBUG] [Thread-309265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:42:11.022 [DEBUG] [Thread-309265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:42:11.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:42:11.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:42:11.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:42:11.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:42:11.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:42:11.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:42:11.057 [DEBUG] [Thread-309265] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:42:12.572 [DEBUG] [Thread-309267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:42:28.804 [DEBUG] [Thread-309268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:42:31.291 [DEBUG] [Thread-309269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:42:41.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:42:41.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:42:41.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
2025-12-24T21:42:44.702 [DEBUG] [Thread-309270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:42:51.583 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:42:51.601 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:42:53.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 42, 9), 7.86, 59.74, 0.0, 41.1, 16.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:42:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:42:09
2025-12-24T21:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:42:55.679 [DEBUG] [Thread-309271] [transport.py] [_log()] starting thread (client mode): 0xf575f850
2025-12-24T21:42:55.681 [DEBUG] [Thread-309271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:42:55.682 [DEBUG] [Thread-309271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:42:55.682 [INFO] [Thread-309271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] client lang: <none>
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] server lang: <none>
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] kex follows: False
2025-12-24T21:42:55.688 [DEBUG] [Thread-309271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:42:55.689 [DEBUG] [Thread-309271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:42:55.689 [DEBUG] [Thread-309271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:42:55.689 [DEBUG] [Thread-309271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:42:55.689 [DEBUG] [Thread-309271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:42:55.689 [DEBUG] [Thread-309271] [transport.py] [_log()] Compression: none
2025-12-24T21:42:55.689 [DEBUG] [Thread-309271] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:42:55.746 [DEBUG] [Thread-309271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:42:55.753 [DEBUG] [Thread-309271] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:42:55.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:42:55.756 [DEBUG] [Thread-309271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:42:55.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:42:55.760 [DEBUG] [Thread-309271] [transport.py] [_log()] userauth is OK
2025-12-24T21:42:55.760 [DEBUG] [Thread-309271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:42:55.760 [DEBUG] [Thread-309271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:42:55.760 [DEBUG] [Thread-309271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:42:55.760 [DEBUG] [Thread-309271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:42:56.012 [INFO] [Thread-309271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:42:56.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:42:56.416 [DEBUG] [Thread-309271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:42:56.416 [DEBUG] [Thread-309271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:42:56.419 [DEBUG] [Thread-309271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:42:56.419 [DEBUG] [Thread-309271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:42:56.419 [DEBUG] [Thread-309271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:42:56.421 [DEBUG] [Thread-309271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:42:56.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:42:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:42:56.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:42:56.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:42:56.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:42:56.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:42:56.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:42:56.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:42:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:42:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.820897 -999.00  +16.40  28.94     65   +9.90 1 1 1 1 1     0    0 3.14 -175.34 ZNESW 28.8 28.9 158.2 39.3 17.4 -21.7 17.2 -21.4 17.0 -20.0 17.2 -20.8
2025-12-24T21:42:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:42:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:42:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.820897
2025-12-24T21:42:56.449 [DEBUG] [Thread-309271] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:42:56.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:42:56.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:42:56.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:42:56.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:42:56.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:42:56.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:42:09', tmtdew=7.86, humidity=59.74, cloud=0.0, wind=41.1, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:42:10', seeing=1.43, atlas_timestamp='2025-12-24T19:42:05.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.11574999999999847, 0.09625000000000128, 0.13424999999999976, 0.0884999999999998, 0.15850000000000009, 0.1412500000000012, 0.10899999999999999, 0.12725000000000009, 0.06550000000000011, 0.09299999999999997, 0.14224999999999888, 0.051000000000000156, 0.17149999999999999, 0.12025000000000041, 0.07699999999999996, 0.04699999999999882, 0.08924999999999983, 0.1479999999999997, 0.09699999999999953, 0.053249999999998465, 0.08499999999999908, 0.12874999999999837, 0.11425000000000018, 0.06375000000000064, 0.07899999999999885, 0.09999999999999964, 0.12374999999999936, 0.08950000000000102, 0.1490000000000009, 0.14250000000000185, 0.15200000000000102, 0.0990000000000002, 0.11624999999999908], zp_timestamp='2025-12-24T19:39:00')
2025-12-24T21:42:56.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:42:56.702 [DEBUG] [Thread-309274] [transport.py] [_log()] starting thread (client mode): 0xf575fe20
2025-12-24T21:42:56.702 [DEBUG] [Thread-309274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:42:56.718 [DEBUG] [Thread-309274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:42:56.718 [INFO] [Thread-309274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] client lang: <none>
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] server lang: <none>
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] kex follows: False
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] Compression: none
2025-12-24T21:42:56.726 [DEBUG] [Thread-309274] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:42:56.785 [DEBUG] [Thread-309274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:42:56.785 [DEBUG] [Thread-309274] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:42:56.785 [DEBUG] [Thread-309274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:42:56.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:42:56.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:42:56.847 [DEBUG] [Thread-309274] [transport.py] [_log()] userauth is OK
2025-12-24T21:42:56.847 [DEBUG] [Thread-309274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:42:56.847 [DEBUG] [Thread-309274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:42:56.847 [DEBUG] [Thread-309274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:42:56.847 [DEBUG] [Thread-309274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:42:56.865 [INFO] [Thread-309274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:42:56.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:42:56.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:42:57.789 [DEBUG] [Thread-309274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:42:57.789 [DEBUG] [Thread-309274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:42:57.789 [DEBUG] [Thread-309274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:42:57.789 [DEBUG] [Thread-309274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:42:57.798 [DEBUG] [Thread-309274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:42:57.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:42:57.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:42:57.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:42:57.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:42:57.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:42:57.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:42:57.983 [DEBUG] [Thread-309274] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:43:00.492 [DEBUG] [Thread-309276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:43:15.924 [DEBUG] [Thread-309277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:43:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:43:28.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:43:28.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
2025-12-24T21:43:31.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 43, 10), 7.68, 60.47, 0.0, 39.34, 16.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:43:31.048 [DEBUG] [Thread-309278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:43:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:43:10
2025-12-24T21:43:31.996 [DEBUG] [Thread-309279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:43:32.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:43:32.369 [DEBUG] [Thread-309280] [transport.py] [_log()] starting thread (client mode): 0xf575e4a0
2025-12-24T21:43:32.369 [DEBUG] [Thread-309280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:43:32.377 [DEBUG] [Thread-309280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:43:32.377 [INFO] [Thread-309280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:43:32.383 [DEBUG] [Thread-309280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] client lang: <none>
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] server lang: <none>
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] kex follows: False
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] Compression: none
2025-12-24T21:43:32.384 [DEBUG] [Thread-309280] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:43:32.416 [DEBUG] [Thread-309280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:43:32.419 [DEBUG] [Thread-309280] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:43:32.420 [DEBUG] [Thread-309280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:43:32.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:43:32.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:43:32.423 [DEBUG] [Thread-309280] [transport.py] [_log()] userauth is OK
2025-12-24T21:43:32.423 [DEBUG] [Thread-309280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:43:32.423 [DEBUG] [Thread-309280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:43:32.423 [DEBUG] [Thread-309280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:43:32.423 [DEBUG] [Thread-309280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:43:32.441 [INFO] [Thread-309280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:43:32.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:43:33.097 [DEBUG] [Thread-309280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:43:33.097 [DEBUG] [Thread-309280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:43:33.098 [DEBUG] [Thread-309280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:43:33.138 [DEBUG] [Thread-309280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:43:33.138 [DEBUG] [Thread-309280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:43:33.140 [DEBUG] [Thread-309280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:43:33.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:43:33.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:43:33.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:43:33.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:43:33.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:43:33.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:43:33.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:43:33.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:43:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:43:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.821591 -999.00  +16.30  22.13     65   +9.90 1 1 1 1 1     0    0 2.64 -184.51 ZNESW 22.8 22.1 159.4 46.4 17.3 -21.7 17.1 -21.3 17.0 -19.8 17.2 -20.7
2025-12-24T21:43:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:43:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:43:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.821591
2025-12-24T21:43:33.172 [DEBUG] [Thread-309280] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:43:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:43:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:43:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:43:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:43:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:43:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:43:10', tmtdew=7.68, humidity=60.47, cloud=0.0, wind=39.34, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:43:11', seeing=1.52, atlas_timestamp='2025-12-24T19:43:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.11574999999999847, 0.09625000000000128, 0.13424999999999976, 0.0884999999999998, 0.15850000000000009, 0.1412500000000012, 0.10899999999999999, 0.12725000000000009, 0.06550000000000011, 0.09299999999999997, 0.14224999999999888, 0.051000000000000156, 0.17149999999999999, 0.12025000000000041, 0.07699999999999996, 0.04699999999999882, 0.08924999999999983, 0.1479999999999997, 0.09699999999999953, 0.053249999999998465, 0.08499999999999908, 0.12874999999999837, 0.11425000000000018, 0.06375000000000064, 0.07899999999999885, 0.09999999999999964, 0.12374999999999936, 0.08950000000000102, 0.1490000000000009, 0.14250000000000185, 0.15200000000000102, 0.0990000000000002, 0.11624999999999908], zp_timestamp='2025-12-24T19:39:00')
2025-12-24T21:43:33.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:43:33.277 [DEBUG] [Thread-309283] [transport.py] [_log()] starting thread (client mode): 0xf575c7f0
2025-12-24T21:43:33.277 [DEBUG] [Thread-309283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:43:33.291 [DEBUG] [Thread-309283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:43:33.291 [INFO] [Thread-309283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] client lang: <none>
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] server lang: <none>
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] kex follows: False
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] Compression: none
2025-12-24T21:43:33.299 [DEBUG] [Thread-309283] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:43:33.356 [DEBUG] [Thread-309283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:43:33.356 [DEBUG] [Thread-309283] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:43:33.356 [DEBUG] [Thread-309283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:43:33.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:43:33.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:43:33.413 [DEBUG] [Thread-309283] [transport.py] [_log()] userauth is OK
2025-12-24T21:43:33.413 [DEBUG] [Thread-309283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:43:33.413 [DEBUG] [Thread-309283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:43:33.413 [DEBUG] [Thread-309283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:43:33.413 [DEBUG] [Thread-309283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:43:33.429 [INFO] [Thread-309283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:43:33.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:43:33.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:43:34.241 [DEBUG] [Thread-309283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:43:34.241 [DEBUG] [Thread-309283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:43:34.288 [DEBUG] [Thread-309283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:43:34.288 [DEBUG] [Thread-309283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:43:34.297 [DEBUG] [Thread-309283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:43:34.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:43:34.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:43:34.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
2025-12-24T21:43:34.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:43:34.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:43:34.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:43:34.330 [DEBUG] [Thread-309283] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:43:46.520 [DEBUG] [Thread-309285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:43:52.154 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:43:52.163 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:44:02.424 [DEBUG] [Thread-309286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:44:04.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:44:04.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:44:04.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
2025-12-24T21:44:18.006 [DEBUG] [Thread-309287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:44:19.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 43, 10), 7.68, 60.47, 0.0, 39.34, 16.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:44:19.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:43:10
2025-12-24T21:44:23.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:44:24.057 [DEBUG] [Thread-309288] [transport.py] [_log()] starting thread (client mode): 0xf575d1b0
2025-12-24T21:44:24.059 [DEBUG] [Thread-309288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:44:24.061 [DEBUG] [Thread-309288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:44:24.061 [INFO] [Thread-309288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] client lang: <none>
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] server lang: <none>
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] kex follows: False
2025-12-24T21:44:24.173 [DEBUG] [Thread-309288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:44:24.174 [DEBUG] [Thread-309288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:44:24.174 [DEBUG] [Thread-309288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:44:24.174 [DEBUG] [Thread-309288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:44:24.174 [DEBUG] [Thread-309288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:44:24.175 [DEBUG] [Thread-309288] [transport.py] [_log()] Compression: none
2025-12-24T21:44:24.175 [DEBUG] [Thread-309288] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:44:24.207 [DEBUG] [Thread-309288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:44:24.213 [DEBUG] [Thread-309288] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:44:24.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:44:24.218 [DEBUG] [Thread-309288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:44:24.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:44:24.221 [DEBUG] [Thread-309288] [transport.py] [_log()] userauth is OK
2025-12-24T21:44:24.222 [DEBUG] [Thread-309288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:44:24.222 [DEBUG] [Thread-309288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:44:24.222 [DEBUG] [Thread-309288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:44:24.222 [DEBUG] [Thread-309288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:44:24.243 [INFO] [Thread-309288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:44:24.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:44:24.829 [DEBUG] [Thread-309288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:44:24.830 [DEBUG] [Thread-309288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:44:24.831 [DEBUG] [Thread-309288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:44:24.937 [DEBUG] [Thread-309288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:44:24.937 [DEBUG] [Thread-309288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:44:24.940 [DEBUG] [Thread-309288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:44:24.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:44:24.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:44:24.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:44:24.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:44:24.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:44:24.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:44:24.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:44:24.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:44:24.963 [DEBUG] [Thread-309288] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:44:24.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:44:24.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.822286 -999.00  +16.30  21.82     66   +9.90 1 1 1 1 1     0    0 2.19 -198.33 ZNESW 27.3 21.8 156.0 33.5 17.2 -21.5 17.1 -21.1 16.9 -20.0 17.2 -20.7
2025-12-24T21:44:24.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:44:24.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:44:24.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.822286
2025-12-24T21:44:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:44:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:44:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:44:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:44:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:44:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:43:10', tmtdew=7.68, humidity=60.47, cloud=0.0, wind=39.34, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:43:51', seeing=1.53, atlas_timestamp='2025-12-24T19:44:05.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.11574999999999847, 0.09625000000000128, 0.13424999999999976, 0.0884999999999998, 0.15850000000000009, 0.1412500000000012, 0.10899999999999999, 0.12725000000000009, 0.06550000000000011, 0.09299999999999997, 0.14224999999999888, 0.051000000000000156, 0.17149999999999999, 0.12025000000000041, 0.07699999999999996, 0.04699999999999882, 0.08924999999999983, 0.1479999999999997, 0.09699999999999953, 0.053249999999998465, 0.08499999999999908, 0.12874999999999837, 0.11425000000000018, 0.06375000000000064, 0.07899999999999885, 0.09999999999999964, 0.12374999999999936, 0.08950000000000102, 0.1490000000000009, 0.14250000000000185, 0.15200000000000102, 0.0990000000000002, 0.11624999999999908], zp_timestamp='2025-12-24T19:43:00')
2025-12-24T21:44:25.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:44:25.094 [DEBUG] [Thread-309291] [transport.py] [_log()] starting thread (client mode): 0xf575d480
2025-12-24T21:44:25.094 [DEBUG] [Thread-309291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:44:25.108 [DEBUG] [Thread-309291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:44:25.108 [INFO] [Thread-309291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] client lang: <none>
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] server lang: <none>
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] kex follows: False
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] Compression: none
2025-12-24T21:44:25.116 [DEBUG] [Thread-309291] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:44:25.461 [DEBUG] [Thread-309291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:44:25.463 [DEBUG] [Thread-309291] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:44:25.464 [DEBUG] [Thread-309291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:44:25.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:44:25.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:44:25.516 [DEBUG] [Thread-309291] [transport.py] [_log()] userauth is OK
2025-12-24T21:44:25.516 [DEBUG] [Thread-309291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:44:25.517 [DEBUG] [Thread-309291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:44:25.517 [DEBUG] [Thread-309291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:44:25.517 [DEBUG] [Thread-309291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:44:25.541 [INFO] [Thread-309291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:44:25.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:44:25.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:44:26.516 [DEBUG] [Thread-309291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:44:26.516 [DEBUG] [Thread-309291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:44:26.516 [DEBUG] [Thread-309291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:44:26.516 [DEBUG] [Thread-309291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:44:26.525 [DEBUG] [Thread-309291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:44:26.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:44:26.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')
2025-12-24T21:44:26.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:44:26.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:44:26.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:44:26.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:44:26.563 [DEBUG] [Thread-309291] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:44:32.805 [DEBUG] [Thread-309293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:44:33.522 [DEBUG] [Thread-309294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:44:49.338 [DEBUG] [Thread-309295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:44:52.376 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:44:52.393 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:44:56.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:44:56.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:44:56.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:45:04.871 [DEBUG] [Thread-309296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:45:15.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 43, 48), 7.38, 61.48, 0.0, 33.47, 16.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:45:15.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:43:48
2025-12-24T21:45:20.406 [DEBUG] [Thread-309297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:45:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:45:21.900 [DEBUG] [Thread-309298] [transport.py] [_log()] starting thread (client mode): 0xf575cb50
2025-12-24T21:45:21.901 [DEBUG] [Thread-309298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:45:21.905 [DEBUG] [Thread-309298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:45:21.905 [INFO] [Thread-309298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] client lang: <none>
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] server lang: <none>
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] kex follows: False
2025-12-24T21:45:21.909 [DEBUG] [Thread-309298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:45:21.910 [DEBUG] [Thread-309298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:45:21.910 [DEBUG] [Thread-309298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:45:21.910 [DEBUG] [Thread-309298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:45:21.910 [DEBUG] [Thread-309298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:45:21.910 [DEBUG] [Thread-309298] [transport.py] [_log()] Compression: none
2025-12-24T21:45:21.910 [DEBUG] [Thread-309298] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:45:22.177 [DEBUG] [Thread-309298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:45:22.179 [DEBUG] [Thread-309298] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:45:22.180 [DEBUG] [Thread-309298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:45:22.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:45:22.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:45:22.221 [DEBUG] [Thread-309298] [transport.py] [_log()] userauth is OK
2025-12-24T21:45:22.221 [DEBUG] [Thread-309298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:45:22.222 [DEBUG] [Thread-309298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:45:22.222 [DEBUG] [Thread-309298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:45:22.222 [DEBUG] [Thread-309298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:45:22.252 [INFO] [Thread-309298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:45:22.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:45:22.914 [DEBUG] [Thread-309298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:45:22.914 [DEBUG] [Thread-309298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:45:22.926 [DEBUG] [Thread-309298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:45:22.956 [DEBUG] [Thread-309298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:45:22.956 [DEBUG] [Thread-309298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:45:22.958 [DEBUG] [Thread-309298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:45:22.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:45:22.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:45:22.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:45:22.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:45:22.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:45:22.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:45:22.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:45:22.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:45:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:45:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.822633 -999.00  +16.20  24.18     66   +9.90 1 1 1 1 1     0    0 1.78 -206.88 ZNESW 27.9 24.2 171.6 33.8 17.2 -21.6 17.1 -21.2 16.9 -19.8 17.2 -20.9
2025-12-24T21:45:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:45:22.980 [DEBUG] [Thread-309298] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:45:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:45:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.822633
2025-12-24T21:45:22.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:45:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:45:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:45:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:45:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:45:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:43:48', tmtdew=7.38, humidity=61.48, cloud=0.0, wind=33.47, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:43:51', seeing=1.53, atlas_timestamp='2025-12-24T19:44:35.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.11574999999999847, 0.09625000000000128, 0.13424999999999976, 0.0884999999999998, 0.15850000000000009, 0.1412500000000012, 0.10899999999999999, 0.12725000000000009, 0.06550000000000011, 0.09299999999999997, 0.14224999999999888, 0.051000000000000156, 0.17149999999999999, 0.12025000000000041, 0.07699999999999996, 0.04699999999999882, 0.08924999999999983, 0.1479999999999997, 0.09699999999999953, 0.053249999999998465, 0.08499999999999908, 0.12874999999999837, 0.11425000000000018, 0.06375000000000064, 0.07899999999999885, 0.09999999999999964, 0.12374999999999936, 0.08950000000000102, 0.1490000000000009, 0.14250000000000185, 0.15200000000000102, 0.0990000000000002, 0.11624999999999908], zp_timestamp='2025-12-24T19:43:00')
2025-12-24T21:45:23.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:45:23.091 [DEBUG] [Thread-309301] [transport.py] [_log()] starting thread (client mode): 0xfabc6680
2025-12-24T21:45:23.091 [DEBUG] [Thread-309301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:45:23.106 [DEBUG] [Thread-309301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:45:23.106 [INFO] [Thread-309301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] client lang: <none>
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] server lang: <none>
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] kex follows: False
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] Compression: none
2025-12-24T21:45:23.113 [DEBUG] [Thread-309301] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:45:23.170 [DEBUG] [Thread-309301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:45:23.330 [DEBUG] [Thread-309301] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:45:23.330 [DEBUG] [Thread-309301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:45:23.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:45:23.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:45:23.338 [DEBUG] [Thread-309301] [transport.py] [_log()] userauth is OK
2025-12-24T21:45:23.338 [DEBUG] [Thread-309301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:45:23.338 [DEBUG] [Thread-309301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:45:23.338 [DEBUG] [Thread-309301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:45:23.338 [DEBUG] [Thread-309301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:45:23.353 [INFO] [Thread-309301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:45:23.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:45:23.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:45:24.232 [DEBUG] [Thread-309301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:45:24.232 [DEBUG] [Thread-309301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:45:24.232 [DEBUG] [Thread-309301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:45:24.232 [DEBUG] [Thread-309301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:45:24.240 [DEBUG] [Thread-309301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:45:24.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:45: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')
2025-12-24T21:45:24.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
2025-12-24T21:45:24.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:45:24.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:45:24.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:45:24.273 [DEBUG] [Thread-309301] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:45:34.250 [DEBUG] [Thread-309303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:45:35.824 [DEBUG] [Thread-309304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:45:51.508 [DEBUG] [Thread-309305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:45:52.598 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:45:52.599 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:45:54.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:45:54.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:45:54.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:45:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 44, 58), 7.35, 61.58, 0.0, 33.4, 16.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:45:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:44:58
2025-12-24T21:45:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:45:59.340 [DEBUG] [Thread-309306] [transport.py] [_log()] starting thread (client mode): 0xf813ed40
2025-12-24T21:45:59.341 [DEBUG] [Thread-309306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:45:59.348 [DEBUG] [Thread-309306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:45:59.348 [INFO] [Thread-309306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] client lang: <none>
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] server lang: <none>
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] kex follows: False
2025-12-24T21:45:59.353 [DEBUG] [Thread-309306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:45:59.354 [DEBUG] [Thread-309306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:45:59.354 [DEBUG] [Thread-309306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:45:59.354 [DEBUG] [Thread-309306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:45:59.354 [DEBUG] [Thread-309306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:45:59.354 [DEBUG] [Thread-309306] [transport.py] [_log()] Compression: none
2025-12-24T21:45:59.354 [DEBUG] [Thread-309306] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:45:59.386 [DEBUG] [Thread-309306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:45:59.390 [DEBUG] [Thread-309306] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:45:59.391 [DEBUG] [Thread-309306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:45:59.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:45:59.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:45:59.395 [DEBUG] [Thread-309306] [transport.py] [_log()] userauth is OK
2025-12-24T21:45:59.395 [DEBUG] [Thread-309306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:45:59.395 [DEBUG] [Thread-309306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:45:59.395 [DEBUG] [Thread-309306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:45:59.395 [DEBUG] [Thread-309306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:45:59.427 [INFO] [Thread-309306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:45:59.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:46:00.076 [DEBUG] [Thread-309306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:46:00.076 [DEBUG] [Thread-309306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:46:00.077 [DEBUG] [Thread-309306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:46:00.117 [DEBUG] [Thread-309306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:46:00.117 [DEBUG] [Thread-309306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:46:00.119 [DEBUG] [Thread-309306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:46:00.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:46:00.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:46:00.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:46:00.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:46:00.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:46:00.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:46:00.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:46:00.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:46:00.172 [DEBUG] [Thread-309306] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:46:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:46:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.822980 -999.00  +16.20  22.46     66  +10.00 1 1 1 1 1     0    0 1.30 -222.54 ZNESW 29.5 22.5 164.8 39.0 17.2 -21.5 17.0 -21.2 16.9 -19.8 17.1 -20.8
2025-12-24T21:46:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:46:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:46:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.822980
2025-12-24T21:46:00.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:46:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:46:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:46:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:46:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:46:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:44:58', tmtdew=7.35, humidity=61.58, cloud=0.0, wind=33.4, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:45:00', seeing=2.19, atlas_timestamp='2025-12-24T19:45:05.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.11574999999999847, 0.09625000000000128, 0.13424999999999976, 0.0884999999999998, 0.15850000000000009, 0.1412500000000012, 0.10899999999999999, 0.12725000000000009, 0.06550000000000011, 0.09299999999999997, 0.14224999999999888, 0.051000000000000156, 0.17149999999999999, 0.12025000000000041, 0.07699999999999996, 0.04699999999999882, 0.08924999999999983, 0.1479999999999997, 0.09699999999999953, 0.053249999999998465, 0.08499999999999908, 0.12874999999999837, 0.11425000000000018, 0.06375000000000064, 0.07899999999999885, 0.09999999999999964, 0.12374999999999936, 0.08950000000000102, 0.1490000000000009, 0.14250000000000185, 0.15200000000000102, 0.0990000000000002, 0.11624999999999908], zp_timestamp='2025-12-24T19:43:00')
2025-12-24T21:46:00.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:46:00.534 [DEBUG] [Thread-309309] [transport.py] [_log()] starting thread (client mode): 0xf813ea70
2025-12-24T21:46:00.534 [DEBUG] [Thread-309309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:46:00.549 [DEBUG] [Thread-309309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:46:00.549 [INFO] [Thread-309309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:46:00.557 [DEBUG] [Thread-309309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:46:00.557 [DEBUG] [Thread-309309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:46:00.557 [DEBUG] [Thread-309309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:46:00.557 [DEBUG] [Thread-309309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:46:00.557 [DEBUG] [Thread-309309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:46:00.557 [DEBUG] [Thread-309309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:46:00.557 [DEBUG] [Thread-309309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] client lang: <none>
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] server lang: <none>
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] kex follows: False
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] Compression: none
2025-12-24T21:46:00.558 [DEBUG] [Thread-309309] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:46:00.619 [DEBUG] [Thread-309309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:46:00.619 [DEBUG] [Thread-309309] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:46:00.619 [DEBUG] [Thread-309309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:46:00.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:46:00.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:46:00.674 [DEBUG] [Thread-309309] [transport.py] [_log()] userauth is OK
2025-12-24T21:46:00.674 [DEBUG] [Thread-309309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:46:00.674 [DEBUG] [Thread-309309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:46:00.674 [DEBUG] [Thread-309309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:46:00.674 [DEBUG] [Thread-309309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:46:00.688 [INFO] [Thread-309309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:46:00.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:46:00.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:46:01.514 [DEBUG] [Thread-309309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:46:01.514 [DEBUG] [Thread-309309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:46:01.559 [DEBUG] [Thread-309309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:46:01.560 [DEBUG] [Thread-309309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:46:01.568 [DEBUG] [Thread-309309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:46:01.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:46:01.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:46:01.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:46:01.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:46:01.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:46:01.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:46:01.603 [DEBUG] [Thread-309309] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:46:06.734 [DEBUG] [Thread-309311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:46:22.163 [DEBUG] [Thread-309312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:46:31.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:46:31.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:46:31.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
2025-12-24T21:46:35.702 [DEBUG] [Thread-309313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:46:37.294 [DEBUG] [Thread-309314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:46:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 46, 11), 7.28, 61.88, 0.0, 32.29, 16.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:46:38.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:46:11
2025-12-24T21:46:40.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:46:41.221 [DEBUG] [Thread-309315] [transport.py] [_log()] starting thread (client mode): 0xf575edd0
2025-12-24T21:46:41.222 [DEBUG] [Thread-309315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:46:41.225 [DEBUG] [Thread-309315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:46:41.226 [INFO] [Thread-309315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:46:41.232 [DEBUG] [Thread-309315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:46:41.233 [DEBUG] [Thread-309315] [transport.py] [_log()] client lang: <none>
2025-12-24T21:46:41.233 [DEBUG] [Thread-309315] [transport.py] [_log()] server lang: <none>
2025-12-24T21:46:41.233 [DEBUG] [Thread-309315] [transport.py] [_log()] kex follows: False
2025-12-24T21:46:41.233 [DEBUG] [Thread-309315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:46:41.234 [DEBUG] [Thread-309315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:46:41.234 [DEBUG] [Thread-309315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:46:41.234 [DEBUG] [Thread-309315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:46:41.234 [DEBUG] [Thread-309315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:46:41.234 [DEBUG] [Thread-309315] [transport.py] [_log()] Compression: none
2025-12-24T21:46:41.234 [DEBUG] [Thread-309315] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:46:41.266 [DEBUG] [Thread-309315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:46:41.273 [DEBUG] [Thread-309315] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:46:41.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:46:41.401 [DEBUG] [Thread-309315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:46:41.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:46:41.405 [DEBUG] [Thread-309315] [transport.py] [_log()] userauth is OK
2025-12-24T21:46:41.405 [DEBUG] [Thread-309315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:46:41.405 [DEBUG] [Thread-309315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:46:41.405 [DEBUG] [Thread-309315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:46:41.405 [DEBUG] [Thread-309315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:46:41.428 [INFO] [Thread-309315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:46:41.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:46:42.031 [DEBUG] [Thread-309315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:46:42.031 [DEBUG] [Thread-309315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:46:42.031 [DEBUG] [Thread-309315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:46:42.073 [DEBUG] [Thread-309315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:46:42.073 [DEBUG] [Thread-309315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:46:42.133 [DEBUG] [Thread-309315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:46:42.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:46:42.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:46:42.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:46:42.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:46:42.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:46:42.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:46:42.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:46:42.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:46:42.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:46:42.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.824022 -999.00  +16.20  27.55     67  +10.00 1 1 1 1 1     0    0 1.10 -217.68 ZNESW 22.9 27.6 164.6 35.4 17.1 -21.5 16.9 -21.0 16.8 -19.8 17.0 -20.7
2025-12-24T21:46:42.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:46:42.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:46:42.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.824022
2025-12-24T21:46:42.263 [DEBUG] [Thread-309315] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:46:42.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:46:42.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:46:42.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:46:42.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:46:42.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:46:42.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:46:11', tmtdew=7.28, humidity=61.88, cloud=0.0, wind=32.29, temperature=16.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:46:12', seeing=2.31, atlas_timestamp='2025-12-24T19:46:35.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.11574999999999847, 0.09625000000000128, 0.13424999999999976, 0.0884999999999998, 0.15850000000000009, 0.1412500000000012, 0.10899999999999999, 0.12725000000000009, 0.06550000000000011, 0.09299999999999997, 0.14224999999999888, 0.051000000000000156, 0.17149999999999999, 0.12025000000000041, 0.07699999999999996, 0.04699999999999882, 0.08924999999999983, 0.1479999999999997, 0.09699999999999953, 0.053249999999998465, 0.08499999999999908, 0.12874999999999837, 0.11425000000000018, 0.06375000000000064, 0.07899999999999885, 0.09999999999999964, 0.12374999999999936, 0.08950000000000102, 0.1490000000000009, 0.14250000000000185, 0.15200000000000102, 0.0990000000000002, 0.11624999999999908], zp_timestamp='2025-12-24T19:43:00')
2025-12-24T21:46:42.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:46:42.365 [DEBUG] [Thread-309318] [transport.py] [_log()] starting thread (client mode): 0xf575dc00
2025-12-24T21:46:42.365 [DEBUG] [Thread-309318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:46:42.379 [DEBUG] [Thread-309318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:46:42.379 [INFO] [Thread-309318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:46:42.387 [DEBUG] [Thread-309318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:46:42.387 [DEBUG] [Thread-309318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] client lang: <none>
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] server lang: <none>
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] kex follows: False
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] Compression: none
2025-12-24T21:46:42.388 [DEBUG] [Thread-309318] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:46:42.444 [DEBUG] [Thread-309318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:46:42.444 [DEBUG] [Thread-309318] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:46:42.444 [DEBUG] [Thread-309318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:46:42.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:46:42.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:46:42.501 [DEBUG] [Thread-309318] [transport.py] [_log()] userauth is OK
2025-12-24T21:46:42.501 [DEBUG] [Thread-309318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:46:42.501 [DEBUG] [Thread-309318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:46:42.501 [DEBUG] [Thread-309318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:46:42.501 [DEBUG] [Thread-309318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:46:42.515 [INFO] [Thread-309318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:46:42.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:46:42.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:46:43.303 [DEBUG] [Thread-309318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:46:43.303 [DEBUG] [Thread-309318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:46:43.352 [DEBUG] [Thread-309318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:46:43.352 [DEBUG] [Thread-309318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:46:43.361 [DEBUG] [Thread-309318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:46:43.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:46:43.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:46:43.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:46:43.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:46:43.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:46:43.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:46:43.394 [DEBUG] [Thread-309318] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:46:52.416 [DEBUG] [Thread-309320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:46:52.801 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:46:52.810 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:47:08.134 [DEBUG] [Thread-309321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:47:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:47:13.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:47:13.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:47:23.328 [DEBUG] [Thread-309322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:47:30.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 46, 11), 7.28, 61.88, 0.0, 32.29, 16.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:47:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:46:11
2025-12-24T21:47:33.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:47:34.278 [DEBUG] [Thread-309323] [transport.py] [_log()] starting thread (client mode): 0xf57bde40
2025-12-24T21:47:34.279 [DEBUG] [Thread-309323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:47:34.281 [DEBUG] [Thread-309323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:47:34.281 [INFO] [Thread-309323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:47:34.287 [DEBUG] [Thread-309323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:47:34.287 [DEBUG] [Thread-309323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] client lang: <none>
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] server lang: <none>
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] kex follows: False
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:47:34.288 [DEBUG] [Thread-309323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:47:34.289 [DEBUG] [Thread-309323] [transport.py] [_log()] Compression: none
2025-12-24T21:47:34.289 [DEBUG] [Thread-309323] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:47:34.463 [DEBUG] [Thread-309323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:47:34.470 [DEBUG] [Thread-309323] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:47:34.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:47:34.560 [DEBUG] [Thread-309323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:47:34.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:47:34.565 [DEBUG] [Thread-309323] [transport.py] [_log()] userauth is OK
2025-12-24T21:47:34.566 [DEBUG] [Thread-309323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:47:34.566 [DEBUG] [Thread-309323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:47:34.566 [DEBUG] [Thread-309323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:47:34.566 [DEBUG] [Thread-309323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:47:34.602 [INFO] [Thread-309323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:47:34.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:47:35.247 [DEBUG] [Thread-309323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:47:35.247 [DEBUG] [Thread-309323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:47:35.299 [DEBUG] [Thread-309323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:47:35.299 [DEBUG] [Thread-309323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:47:35.299 [DEBUG] [Thread-309323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:47:35.302 [DEBUG] [Thread-309323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:47:35.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:47:35.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:47:35.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:47:35.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:47:35.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:47:35.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:47:35.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:47:35.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:47:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:47:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.824370 -999.00  +16.10  29.47     67  +10.10 1 1 1 1 1     0    0 0.11 -244.98 ZNESW 29.3 29.5 153.4 37.0 17.1 -21.6 16.9 -21.0 16.8 -19.7 17.0 -20.7
2025-12-24T21:47:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:47:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:47:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.824370
2025-12-24T21:47:35.334 [DEBUG] [Thread-309323] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:47:35.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:47:35.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:47:35.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:47:35.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:47:35.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:47:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:46:11', tmtdew=7.28, humidity=61.88, cloud=0.0, wind=32.29, temperature=16.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:46:52', seeing=2.13, atlas_timestamp='2025-12-24T19:47:05.568', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.11824999999999974, 0.12925000000000075, 0.12149999999999928, 0.09149999999999991, 0.10925000000000118, 0.0730000000000004, 0.08425000000000082, 0.08799999999999919, 0.09850000000000136, 0.12075000000000102, 0.018000000000000682, 0.15749999999999886, 0.1197499999999998, 0.03999999999999915, 0.08300000000000018, 0.0912500000000005, 0.14749999999999908, 0.1039999999999992, 0.0722499999999986, 0.10299999999999798, 0.09474999999999945, 0.08125000000000071, 0.05075000000000074, 0.09399999999999942, 0.09450000000000003, 0.12274999999999991, 0.11850000000000094, 0.08200000000000074, 0.12049999999999983, 0.14800000000000146, 0.058000000000001606, 0.12774999999999892], zp_timestamp='2025-12-24T19:46:00')
2025-12-24T21:47:35.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:47:35.437 [DEBUG] [Thread-309326] [transport.py] [_log()] starting thread (client mode): 0xf5743730
2025-12-24T21:47:35.437 [DEBUG] [Thread-309326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:47:35.452 [DEBUG] [Thread-309326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:47:35.452 [INFO] [Thread-309326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] client lang: <none>
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] server lang: <none>
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] kex follows: False
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:47:35.460 [DEBUG] [Thread-309326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:47:35.461 [DEBUG] [Thread-309326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:47:35.461 [DEBUG] [Thread-309326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:47:35.461 [DEBUG] [Thread-309326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:47:35.461 [DEBUG] [Thread-309326] [transport.py] [_log()] Compression: none
2025-12-24T21:47:35.461 [DEBUG] [Thread-309326] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:47:35.516 [DEBUG] [Thread-309326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:47:35.516 [DEBUG] [Thread-309326] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:47:35.517 [DEBUG] [Thread-309326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:47:35.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:47:35.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:47:35.572 [DEBUG] [Thread-309326] [transport.py] [_log()] userauth is OK
2025-12-24T21:47:35.573 [DEBUG] [Thread-309326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:47:35.573 [DEBUG] [Thread-309326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:47:35.573 [DEBUG] [Thread-309326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:47:35.573 [DEBUG] [Thread-309326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:47:35.590 [INFO] [Thread-309326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21: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
2025-12-24T21:47:35.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:47:36.433 [DEBUG] [Thread-309326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:47:36.433 [DEBUG] [Thread-309326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:47:36.449 [DEBUG] [Thread-309326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:47:36.449 [DEBUG] [Thread-309326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:47:36.457 [DEBUG] [Thread-309326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:47:36.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:47:36.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')
2025-12-24T21:47:36.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') -> 00000000
2025-12-24T21:47:36.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:47:36.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:47:36.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:47:36.497 [DEBUG] [Thread-309326] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:47:37.827 [DEBUG] [Thread-309328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:47:38.523 [DEBUG] [Thread-309329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:47:53.257 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:47:53.377 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:47:53.967 [DEBUG] [Thread-309330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:48:06.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:48:06.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:48:06.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
2025-12-24T21:48:09.120 [DEBUG] [Thread-309331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:48:16.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 46, 51), 7.14, 62.52, 0.0, 35.9, 16.25, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:48:16.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:46:51
2025-12-24T21:48:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:48:18.898 [DEBUG] [Thread-309332] [transport.py] [_log()] starting thread (client mode): 0xf5740940
2025-12-24T21:48:18.900 [DEBUG] [Thread-309332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:48:18.901 [DEBUG] [Thread-309332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:48:18.901 [INFO] [Thread-309332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:48:18.908 [DEBUG] [Thread-309332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] client lang: <none>
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] server lang: <none>
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] kex follows: False
2025-12-24T21:48:18.909 [DEBUG] [Thread-309332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:48:18.910 [DEBUG] [Thread-309332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:48:18.910 [DEBUG] [Thread-309332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:48:18.910 [DEBUG] [Thread-309332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:48:18.911 [DEBUG] [Thread-309332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:48:18.911 [DEBUG] [Thread-309332] [transport.py] [_log()] Compression: none
2025-12-24T21:48:18.911 [DEBUG] [Thread-309332] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:48:19.049 [DEBUG] [Thread-309332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:48:19.053 [DEBUG] [Thread-309332] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:48:19.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:48:19.056 [DEBUG] [Thread-309332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:48:19.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:48:19.059 [DEBUG] [Thread-309332] [transport.py] [_log()] userauth is OK
2025-12-24T21:48:19.059 [DEBUG] [Thread-309332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:48:19.059 [DEBUG] [Thread-309332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:48:19.059 [DEBUG] [Thread-309332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:48:19.059 [DEBUG] [Thread-309332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:48:19.080 [INFO] [Thread-309332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:48:19.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:48:20.899 [DEBUG] [Thread-309332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:48:20.899 [DEBUG] [Thread-309332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:48:20.900 [DEBUG] [Thread-309332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:48:20.901 [DEBUG] [Thread-309332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:48:20.901 [DEBUG] [Thread-309332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:48:20.902 [DEBUG] [Thread-309332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:48:20.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:48:20.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:48:20.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:48:20.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:48:20.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:48:20.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:48:20.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:48:20.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:48:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:48:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.824716 -999.00  +16.10  26.48     67  +10.10 1 1 1 1 1     0    0 0.33 -247.30 ZNESW 23.9 26.5 159.2 40.0 17.0 -21.6 16.9 -21.1 16.7 -19.7 17.0 -20.8
2025-12-24T21:48:20.926 [DEBUG] [Thread-309332] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:48:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:48:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:48:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.824716
2025-12-24T21:48:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:48:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:48:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:48:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:48:20.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:48:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:46:51', tmtdew=7.14, humidity=62.52, cloud=0.0, wind=35.9, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:48:05', seeing=2.55, atlas_timestamp='2025-12-24T19:47:35.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.11824999999999974, 0.12925000000000075, 0.12149999999999928, 0.09149999999999991, 0.10925000000000118, 0.0730000000000004, 0.08425000000000082, 0.08799999999999919, 0.09850000000000136, 0.12075000000000102, 0.018000000000000682, 0.15749999999999886, 0.1197499999999998, 0.03999999999999915, 0.08300000000000018, 0.0912500000000005, 0.14749999999999908, 0.1039999999999992, 0.0722499999999986, 0.10299999999999798, 0.09474999999999945, 0.08125000000000071, 0.05075000000000074, 0.09399999999999942, 0.09450000000000003, 0.12274999999999991, 0.11850000000000094, 0.08200000000000074, 0.12049999999999983, 0.14800000000000146, 0.058000000000001606, 0.12774999999999892], zp_timestamp='2025-12-24T19:46:00')
2025-12-24T21:48:21.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:48:21.184 [DEBUG] [Thread-309335] [transport.py] [_log()] starting thread (client mode): 0xf575d8a0
2025-12-24T21:48:21.185 [DEBUG] [Thread-309335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:48:21.185 [DEBUG] [Thread-309335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:48:21.185 [INFO] [Thread-309335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:48:21.193 [DEBUG] [Thread-309335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:48:21.193 [DEBUG] [Thread-309335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:48:21.193 [DEBUG] [Thread-309335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:48:21.193 [DEBUG] [Thread-309335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:48:21.193 [DEBUG] [Thread-309335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:48:21.193 [DEBUG] [Thread-309335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:48:21.193 [DEBUG] [Thread-309335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:48:21.194 [DEBUG] [Thread-309335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:48:21.194 [DEBUG] [Thread-309335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:48:21.194 [DEBUG] [Thread-309335] [transport.py] [_log()] client lang: <none>
2025-12-24T21:48:21.194 [DEBUG] [Thread-309335] [transport.py] [_log()] server lang: <none>
2025-12-24T21:48:21.194 [DEBUG] [Thread-309335] [transport.py] [_log()] kex follows: False
2025-12-24T21:48:21.194 [DEBUG] [Thread-309335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:48:21.195 [DEBUG] [Thread-309335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:48:21.195 [DEBUG] [Thread-309335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:48:21.195 [DEBUG] [Thread-309335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:48:21.195 [DEBUG] [Thread-309335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:48:21.195 [DEBUG] [Thread-309335] [transport.py] [_log()] Compression: none
2025-12-24T21:48:21.195 [DEBUG] [Thread-309335] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:48:21.262 [DEBUG] [Thread-309335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:48:21.264 [DEBUG] [Thread-309335] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:48:21.264 [DEBUG] [Thread-309335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:48:21.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:48:21.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:48:21.320 [DEBUG] [Thread-309335] [transport.py] [_log()] userauth is OK
2025-12-24T21:48:21.321 [DEBUG] [Thread-309335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:48:21.321 [DEBUG] [Thread-309335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:48:21.321 [DEBUG] [Thread-309335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:48:21.321 [DEBUG] [Thread-309335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:48:21.336 [INFO] [Thread-309335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:48:21.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:48:21.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:48:22.134 [DEBUG] [Thread-309335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:48:22.134 [DEBUG] [Thread-309335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:48:22.180 [DEBUG] [Thread-309335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:48:22.180 [DEBUG] [Thread-309335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:48:22.189 [DEBUG] [Thread-309335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:48:22.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:48:22.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:48:22.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:48:22.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:48:22.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:48:22.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:48:22.229 [DEBUG] [Thread-309335] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:48:24.319 [DEBUG] [Thread-309337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:48:41.123 [DEBUG] [Thread-309338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:48:41.167 [DEBUG] [Thread-309339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:48:52.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:48:52.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:48:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:48:53.791 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:48:53.795 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:48:56.524 [DEBUG] [Thread-309340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:02.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 48, 3), 7.1, 62.66, 0.0, 33.08, 16.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:49:02.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:48:03
2025-12-24T21:49:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:49:06.080 [DEBUG] [Thread-309341] [transport.py] [_log()] starting thread (client mode): 0xf575d480
2025-12-24T21:49:06.081 [DEBUG] [Thread-309341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:49:06.081 [DEBUG] [Thread-309341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:49:06.081 [INFO] [Thread-309341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] client lang: <none>
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] server lang: <none>
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] kex follows: False
2025-12-24T21:49:06.216 [DEBUG] [Thread-309341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:49:06.218 [DEBUG] [Thread-309341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:49:06.218 [DEBUG] [Thread-309341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:49:06.218 [DEBUG] [Thread-309341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:49:06.218 [DEBUG] [Thread-309341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:49:06.218 [DEBUG] [Thread-309341] [transport.py] [_log()] Compression: none
2025-12-24T21:49:06.218 [DEBUG] [Thread-309341] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:49:06.351 [DEBUG] [Thread-309341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:49:06.355 [DEBUG] [Thread-309341] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:49:06.356 [DEBUG] [Thread-309341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:49:06.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:49:06.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:49:06.360 [DEBUG] [Thread-309341] [transport.py] [_log()] userauth is OK
2025-12-24T21:49:06.360 [DEBUG] [Thread-309341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:49:06.360 [DEBUG] [Thread-309341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:49:06.360 [DEBUG] [Thread-309341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:49:06.360 [DEBUG] [Thread-309341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:49:06.379 [INFO] [Thread-309341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:49:06.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:49:07.034 [DEBUG] [Thread-309341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:49:07.034 [DEBUG] [Thread-309341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:49:07.111 [DEBUG] [Thread-309341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:49:07.111 [DEBUG] [Thread-309341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:49:07.111 [DEBUG] [Thread-309341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:49:07.113 [DEBUG] [Thread-309341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:49:07.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:49:07.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:49:07.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:49:07.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:49:07.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:49:07.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:49:07.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:49:07.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:49:07.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:49:07.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.825411 -999.00  +16.00  22.28     67  +10.00 1 1 1 1 1     0    0 0.01 -246.41 ZNESW 23.8 22.3 165.0 35.7 16.9 -21.5 16.8 -21.0 16.7 -19.7 17.0 -20.6
2025-12-24T21:49:07.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:49:07.363 [DEBUG] [Thread-309341] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:49:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:49:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.825411
2025-12-24T21:49:07.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:49:07.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:49:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:49:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:49:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:49:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:48:03', tmtdew=7.1, humidity=62.66, cloud=0.0, wind=33.08, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:48:05', seeing=2.55, atlas_timestamp='2025-12-24T19:48:35.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.11824999999999974, 0.12925000000000075, 0.12149999999999928, 0.09149999999999991, 0.10925000000000118, 0.0730000000000004, 0.08425000000000082, 0.08799999999999919, 0.09850000000000136, 0.12075000000000102, 0.018000000000000682, 0.15749999999999886, 0.1197499999999998, 0.03999999999999915, 0.08300000000000018, 0.0912500000000005, 0.14749999999999908, 0.1039999999999992, 0.0722499999999986, 0.10299999999999798, 0.09474999999999945, 0.08125000000000071, 0.05075000000000074, 0.09399999999999942, 0.09450000000000003, 0.12274999999999991, 0.11850000000000094, 0.08200000000000074, 0.12049999999999983, 0.14800000000000146, 0.058000000000001606, 0.12774999999999892], zp_timestamp='2025-12-24T19:46:00')
2025-12-24T21:49:07.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:49:07.510 [DEBUG] [Thread-309344] [transport.py] [_log()] starting thread (client mode): 0xf57aa650
2025-12-24T21:49:07.510 [DEBUG] [Thread-309344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:49:07.521 [DEBUG] [Thread-309344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:49:07.521 [INFO] [Thread-309344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] client lang: <none>
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] server lang: <none>
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] kex follows: False
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:49:07.727 [DEBUG] [Thread-309344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:49:07.728 [DEBUG] [Thread-309344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:49:07.728 [DEBUG] [Thread-309344] [transport.py] [_log()] Compression: none
2025-12-24T21:49:07.728 [DEBUG] [Thread-309344] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:49:07.750 [DEBUG] [Thread-309344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:49:07.752 [DEBUG] [Thread-309344] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:49:07.753 [DEBUG] [Thread-309344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:49:07.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:49:07.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:49:07.807 [DEBUG] [Thread-309344] [transport.py] [_log()] userauth is OK
2025-12-24T21:49:07.807 [DEBUG] [Thread-309344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:49:07.808 [DEBUG] [Thread-309344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:49:07.808 [DEBUG] [Thread-309344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:49:07.808 [DEBUG] [Thread-309344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:49:07.853 [INFO] [Thread-309344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:49:07.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:49:07.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:49:08.770 [DEBUG] [Thread-309344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:49:08.770 [DEBUG] [Thread-309344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:49:08.770 [DEBUG] [Thread-309344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:49:08.770 [DEBUG] [Thread-309344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:49:08.778 [DEBUG] [Thread-309344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:49:08.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:49:08.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:49:08.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:49:08.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:49:08.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:49:08.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:49:08.813 [DEBUG] [Thread-309344] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:49:11.937 [DEBUG] [Thread-309346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:27.315 [DEBUG] [Thread-309347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:38.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:49:38.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:49: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
2025-12-24T21:49:39.594 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:42.269 [DEBUG] [Thread-309348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:42.579 [DEBUG] [Thread-309349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:42.720 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:47.833 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:49.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 48, 58), 6.93, 63.46, 0.0, 29.45, 16.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:49:49.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:48:58
2025-12-24T21:49:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:49:52.188 [DEBUG] [Thread-309350] [transport.py] [_log()] starting thread (client mode): 0xf575f640
2025-12-24T21:49:52.189 [DEBUG] [Thread-309350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:49:52.190 [DEBUG] [Thread-309350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:49:52.190 [INFO] [Thread-309350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] client lang: <none>
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] server lang: <none>
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] kex follows: False
2025-12-24T21:49:52.195 [DEBUG] [Thread-309350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:49:52.196 [DEBUG] [Thread-309350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:49:52.196 [DEBUG] [Thread-309350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:49:52.196 [DEBUG] [Thread-309350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:49:52.196 [DEBUG] [Thread-309350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:49:52.196 [DEBUG] [Thread-309350] [transport.py] [_log()] Compression: none
2025-12-24T21:49:52.196 [DEBUG] [Thread-309350] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:49:52.232 [DEBUG] [Thread-309350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:49:52.236 [DEBUG] [Thread-309350] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:49:52.238 [DEBUG] [Thread-309350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:49:52.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:49:52.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:49:52.243 [DEBUG] [Thread-309350] [transport.py] [_log()] userauth is OK
2025-12-24T21:49:52.243 [DEBUG] [Thread-309350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:49:52.243 [DEBUG] [Thread-309350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:49:52.243 [DEBUG] [Thread-309350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:49:52.243 [DEBUG] [Thread-309350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:49:52.265 [INFO] [Thread-309350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:49:52.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:49:53.079 [DEBUG] [Thread-309350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:49:53.144 [DEBUG] [Thread-309350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:49:53.146 [DEBUG] [Thread-309350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:49:53.146 [DEBUG] [Thread-309350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:49:53.146 [DEBUG] [Thread-309350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:49:53.149 [DEBUG] [Thread-309350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:49:53.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:49:53.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:49:53.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:49:53.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:49:53.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:49:53.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:49:53.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:49:53.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:49:53.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:49:53.169 [DEBUG] [Thread-309350] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:49:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.825758 -999.00  +16.10  20.07     67  +10.00 1 1 1 1 1     0    0 0.20 -234.77 ZNESW 20.3 20.1 153.6 31.3 16.9 -21.4 16.8 -20.9 16.6 -19.7 17.0 -20.6
2025-12-24T21:49:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:49:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:49:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.825758
2025-12-24T21:49:53.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:49:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:49:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:49:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:49:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:49:53.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:48:58', tmtdew=6.93, humidity=63.46, cloud=0.0, wind=29.45, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:49:00', seeing=2.17, atlas_timestamp='2025-12-24T19:49:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.11824999999999974, 0.12925000000000075, 0.12149999999999928, 0.09149999999999991, 0.10925000000000118, 0.0730000000000004, 0.08425000000000082, 0.08799999999999919, 0.09850000000000136, 0.12075000000000102, 0.018000000000000682, 0.15749999999999886, 0.1197499999999998, 0.03999999999999915, 0.08300000000000018, 0.0912500000000005, 0.14749999999999908, 0.1039999999999992, 0.0722499999999986, 0.10299999999999798, 0.09474999999999945, 0.08125000000000071, 0.05075000000000074, 0.09399999999999942, 0.09450000000000003, 0.12274999999999991, 0.11850000000000094, 0.08200000000000074, 0.12049999999999983, 0.14800000000000146, 0.058000000000001606, 0.12774999999999892], zp_timestamp='2025-12-24T19:46:00')
2025-12-24T21:49:53.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:49:53.307 [DEBUG] [Thread-309353] [transport.py] [_log()] starting thread (client mode): 0xf575f5b0
2025-12-24T21:49:53.307 [DEBUG] [Thread-309353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:49:53.318 [DEBUG] [Thread-309353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:49:53.318 [INFO] [Thread-309353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] client lang: <none>
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] server lang: <none>
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] kex follows: False
2025-12-24T21:49:53.326 [DEBUG] [Thread-309353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:49:53.327 [DEBUG] [Thread-309353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:49:53.327 [DEBUG] [Thread-309353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:49:53.327 [DEBUG] [Thread-309353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:49:53.327 [DEBUG] [Thread-309353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:49:53.327 [DEBUG] [Thread-309353] [transport.py] [_log()] Compression: none
2025-12-24T21:49:53.327 [DEBUG] [Thread-309353] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:49:53.393 [DEBUG] [Thread-309353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:49:53.396 [DEBUG] [Thread-309353] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:49:53.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:49:53.397 [DEBUG] [Thread-309353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:49:53.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:49:53.569 [DEBUG] [Thread-309353] [transport.py] [_log()] userauth is OK
2025-12-24T21:49:53.569 [DEBUG] [Thread-309353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:49:53.569 [DEBUG] [Thread-309353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:49:53.569 [DEBUG] [Thread-309353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:49:53.569 [DEBUG] [Thread-309353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:49:53.586 [INFO] [Thread-309353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:49:53.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:49:53.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:49:54.020 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:54.022 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:54.092 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:49:54.411 [DEBUG] [Thread-309353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:49:54.411 [DEBUG] [Thread-309353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:49:54.458 [DEBUG] [Thread-309353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:49:54.458 [DEBUG] [Thread-309353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:49:54.467 [DEBUG] [Thread-309353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:49:54.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:49:54.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')
2025-12-24T21:49:54.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:49:54.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:49:54.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:49:54.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:49:54.502 [DEBUG] [Thread-309353] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:49:57.940 [DEBUG] [Thread-309355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:13.902 [DEBUG] [Thread-309356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:22.659 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:24.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:50:24.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:50:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:50:26.868 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:29.212 [DEBUG] [Thread-309357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:43.484 [DEBUG] [Thread-309358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:44.558 [DEBUG] [Thread-309359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:44.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 48, 58), 6.93, 63.46, 0.0, 29.45, 16.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:50:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:48:58
2025-12-24T21:50:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:50:47.036 [DEBUG] [Thread-309360] [transport.py] [_log()] starting thread (client mode): 0xf575f310
2025-12-24T21:50:47.037 [DEBUG] [Thread-309360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:50:47.051 [DEBUG] [Thread-309360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:50:47.051 [INFO] [Thread-309360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] client lang: <none>
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] server lang: <none>
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] kex follows: False
2025-12-24T21:50:47.061 [DEBUG] [Thread-309360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:50:47.062 [DEBUG] [Thread-309360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:50:47.062 [DEBUG] [Thread-309360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:50:47.062 [DEBUG] [Thread-309360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:50:47.062 [DEBUG] [Thread-309360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:50:47.062 [DEBUG] [Thread-309360] [transport.py] [_log()] Compression: none
2025-12-24T21:50:47.062 [DEBUG] [Thread-309360] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:50:47.091 [DEBUG] [Thread-309360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:50:47.103 [DEBUG] [Thread-309360] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:50:47.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:50:47.111 [DEBUG] [Thread-309360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:50:47.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:50:47.114 [DEBUG] [Thread-309360] [transport.py] [_log()] userauth is OK
2025-12-24T21:50:47.114 [DEBUG] [Thread-309360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:50:47.115 [DEBUG] [Thread-309360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:50:47.115 [DEBUG] [Thread-309360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:50:47.115 [DEBUG] [Thread-309360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:50:47.148 [INFO] [Thread-309360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:50:47.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:50:47.728 [DEBUG] [Thread-309360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:50:47.728 [DEBUG] [Thread-309360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:50:47.737 [DEBUG] [Thread-309360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:50:47.770 [DEBUG] [Thread-309360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:50:47.770 [DEBUG] [Thread-309360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:50:47.772 [DEBUG] [Thread-309360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:50:47.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:50:47.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:50:47.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:50:47.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:50:47.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:50:47.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:50:47.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:50:47.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:50:47.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:50:47.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.826800 -999.00  +16.00  20.89     67  +10.10 1 1 1 1 1     0    0 0.44 -227.60 ZNESW 23.7 20.9 156.5 35.6 16.9 -21.4 16.7 -20.9 16.6 -19.6 16.9 -20.6
2025-12-24T21:50:47.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:50:47.797 [DEBUG] [Thread-309360] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:50:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:50:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.826800
2025-12-24T21:50:47.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:50:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:50:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:50:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:50:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:50:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:48:58', tmtdew=6.93, humidity=63.46, cloud=0.0, wind=29.45, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:49:59', seeing=1.8, atlas_timestamp='2025-12-24T19:50:35.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:49:00')
2025-12-24T21:50:47.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:50:47.910 [DEBUG] [Thread-309363] [transport.py] [_log()] starting thread (client mode): 0xf578b520
2025-12-24T21:50:47.910 [DEBUG] [Thread-309363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:50:47.924 [DEBUG] [Thread-309363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:50:47.924 [INFO] [Thread-309363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] client lang: <none>
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] server lang: <none>
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] kex follows: False
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] Compression: none
2025-12-24T21:50:47.932 [DEBUG] [Thread-309363] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:50:48.114 [DEBUG] [Thread-309363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:50:48.115 [DEBUG] [Thread-309363] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:50:48.115 [DEBUG] [Thread-309363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:50:48.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:50:48.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:50:48.170 [DEBUG] [Thread-309363] [transport.py] [_log()] userauth is OK
2025-12-24T21:50:48.170 [DEBUG] [Thread-309363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:50:48.170 [DEBUG] [Thread-309363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:50:48.170 [DEBUG] [Thread-309363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:50:48.170 [DEBUG] [Thread-309363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:50:48.184 [INFO] [Thread-309363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:50:48.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:50:48.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:50:48.997 [DEBUG] [Thread-309363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:50:48.997 [DEBUG] [Thread-309363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:50:49.004 [DEBUG] [Thread-309363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:50:49.004 [DEBUG] [Thread-309363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:50:49.012 [DEBUG] [Thread-309363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:50:49.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:50:49.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:50: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
2025-12-24T21:50:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:50:49.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:50:49.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:50:49.046 [DEBUG] [Thread-309363] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:50:54.240 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:54.251 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:56.322 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:50:59.966 [DEBUG] [Thread-309365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:00.710 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:07.712 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:12.082 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:15.138 [DEBUG] [Thread-309366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:51:19.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:51:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:51:20.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 49, 58), 6.91, 63.58, 0.0, 33.52, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:51:20.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:49:58
2025-12-24T21:51:21.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:51:21.256 [DEBUG] [Thread-309367] [transport.py] [_log()] starting thread (client mode): 0xf57435e0
2025-12-24T21:51:21.257 [DEBUG] [Thread-309367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:51:21.266 [DEBUG] [Thread-309367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:51:21.266 [INFO] [Thread-309367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] client lang: <none>
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] server lang: <none>
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] kex follows: False
2025-12-24T21:51:21.270 [DEBUG] [Thread-309367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:51:21.271 [DEBUG] [Thread-309367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:51:21.271 [DEBUG] [Thread-309367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:51:21.271 [DEBUG] [Thread-309367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:51:21.271 [DEBUG] [Thread-309367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:51:21.271 [DEBUG] [Thread-309367] [transport.py] [_log()] Compression: none
2025-12-24T21:51:21.271 [DEBUG] [Thread-309367] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:51:21.293 [DEBUG] [Thread-309367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:51:21.296 [DEBUG] [Thread-309367] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:51:21.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:51:21.298 [DEBUG] [Thread-309367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:51:21.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:51:21.300 [DEBUG] [Thread-309367] [transport.py] [_log()] userauth is OK
2025-12-24T21:51:21.300 [DEBUG] [Thread-309367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:51:21.300 [DEBUG] [Thread-309367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:51:21.300 [DEBUG] [Thread-309367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:51:21.300 [DEBUG] [Thread-309367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:51:21.312 [INFO] [Thread-309367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:51:21.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:51:21.901 [DEBUG] [Thread-309367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:51:21.901 [DEBUG] [Thread-309367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:51:21.902 [DEBUG] [Thread-309367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:51:21.942 [DEBUG] [Thread-309367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:51:21.942 [DEBUG] [Thread-309367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:51:21.944 [DEBUG] [Thread-309367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:51:21.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:51:21.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:51:21.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:51:21.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:51:21.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:51:21.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:51:21.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:51:21.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:51:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:51:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.827147 -999.00  +16.00  22.64     67  +10.10 1 1 1 1 1     0    0 -0.22 -244.48 ZNESW 22.1 22.6 166.0 36.2 16.9 -21.3 16.7 -21.3 16.6 -19.6 16.9 -20.7
2025-12-24T21:51:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:51:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:51:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.827147
2025-12-24T21:51:21.972 [DEBUG] [Thread-309367] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:51:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:51:21.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:51:21.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:51:21.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:51:21.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:51:21.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:49:58', tmtdew=6.91, humidity=63.58, cloud=0.0, wind=33.52, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:51:17', seeing=1.72, atlas_timestamp='2025-12-24T19:51:05.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:49:00')
2025-12-24T21:51:22.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:51:22.070 [DEBUG] [Thread-309370] [transport.py] [_log()] starting thread (client mode): 0xfabc7760
2025-12-24T21:51:22.070 [DEBUG] [Thread-309370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:51:22.084 [DEBUG] [Thread-309370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:51:22.084 [INFO] [Thread-309370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:51:22.091 [DEBUG] [Thread-309370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:51:22.091 [DEBUG] [Thread-309370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:51:22.091 [DEBUG] [Thread-309370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:51:22.091 [DEBUG] [Thread-309370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] client lang: <none>
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] server lang: <none>
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] kex follows: False
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] Compression: none
2025-12-24T21:51:22.092 [DEBUG] [Thread-309370] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:51:22.148 [DEBUG] [Thread-309370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:51:22.149 [DEBUG] [Thread-309370] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:51:22.149 [DEBUG] [Thread-309370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:51:22.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:51:22.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:51:22.206 [DEBUG] [Thread-309370] [transport.py] [_log()] userauth is OK
2025-12-24T21:51:22.206 [DEBUG] [Thread-309370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:51:22.206 [DEBUG] [Thread-309370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:51:22.206 [DEBUG] [Thread-309370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:51:22.206 [DEBUG] [Thread-309370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:51:22.220 [INFO] [Thread-309370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:51:22.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:51:22.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:51:23.015 [DEBUG] [Thread-309370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:51:23.016 [DEBUG] [Thread-309370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:51:23.064 [DEBUG] [Thread-309370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:51:23.064 [DEBUG] [Thread-309370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:51:23.073 [DEBUG] [Thread-309370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:51:23.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:51:23.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:51:23.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
2025-12-24T21:51:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:51:23.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:51:23.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:51:23.106 [DEBUG] [Thread-309370] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:51:30.579 [DEBUG] [Thread-309372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:44.043 [DEBUG] [Thread-309373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:45.787 [DEBUG] [Thread-309374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:53.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:51:53.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:51:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:51:54.462 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:51:54.468 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:01.197 [DEBUG] [Thread-309375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:02.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 51, 16), 6.89, 63.63, 0.0, 31.9, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:52:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:51:16
2025-12-24T21:52:03.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:52:03.229 [DEBUG] [Thread-309376] [transport.py] [_log()] starting thread (client mode): 0xf5772bc0
2025-12-24T21:52:03.231 [DEBUG] [Thread-309376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:52:03.335 [DEBUG] [Thread-309376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:52:03.335 [INFO] [Thread-309376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:52:03.344 [DEBUG] [Thread-309376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] client lang: <none>
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] server lang: <none>
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] kex follows: False
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:52:03.345 [DEBUG] [Thread-309376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:52:03.346 [DEBUG] [Thread-309376] [transport.py] [_log()] Compression: none
2025-12-24T21:52:03.346 [DEBUG] [Thread-309376] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:52:03.386 [DEBUG] [Thread-309376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:52:03.394 [DEBUG] [Thread-309376] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:52:03.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:52:03.398 [DEBUG] [Thread-309376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:52:03.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:52:03.400 [DEBUG] [Thread-309376] [transport.py] [_log()] userauth is OK
2025-12-24T21:52:03.400 [DEBUG] [Thread-309376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:52:03.400 [DEBUG] [Thread-309376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:52:03.400 [DEBUG] [Thread-309376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:52:03.400 [DEBUG] [Thread-309376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:52:03.419 [INFO] [Thread-309376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:52:03.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:52:04.059 [DEBUG] [Thread-309376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:52:04.059 [DEBUG] [Thread-309376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:52:04.061 [DEBUG] [Thread-309376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:52:04.101 [DEBUG] [Thread-309376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:52:04.101 [DEBUG] [Thread-309376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:52:04.103 [DEBUG] [Thread-309376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:52:04.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:52:04.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:52:04.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:52:04.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:52:04.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:52:04.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:52:04.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:52:04.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:52:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:52:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.827494 -999.00  +16.10  19.79     67  +10.10 1 1 1 1 1     0    0 -0.30 -245.27 ZNESW 25.2 19.8 165.2 25.4 16.9 -21.2 16.8 -20.8 16.6 -19.5 16.9 -20.5
2025-12-24T21:52:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:52:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:52:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.827494
2025-12-24T21:52:04.136 [DEBUG] [Thread-309376] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:52:04.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:52:04.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:52:04.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:52:04.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:52:04.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:52:04.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:51:16', tmtdew=6.89, humidity=63.63, cloud=0.0, wind=31.9, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:51:52', seeing=2.34, atlas_timestamp='2025-12-24T19:51:35.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:49:00')
2025-12-24T21:52:04.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:52:04.410 [DEBUG] [Thread-309379] [transport.py] [_log()] starting thread (client mode): 0xfabc66e0
2025-12-24T21:52:04.410 [DEBUG] [Thread-309379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:52:04.424 [DEBUG] [Thread-309379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:52:04.424 [INFO] [Thread-309379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] client lang: <none>
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] server lang: <none>
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] kex follows: False
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] Compression: none
2025-12-24T21:52:04.432 [DEBUG] [Thread-309379] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:52:04.489 [DEBUG] [Thread-309379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:52:04.489 [DEBUG] [Thread-309379] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:52:04.489 [DEBUG] [Thread-309379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:52:04.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:52:04.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:52:04.548 [DEBUG] [Thread-309379] [transport.py] [_log()] userauth is OK
2025-12-24T21:52:04.548 [DEBUG] [Thread-309379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:52:04.548 [DEBUG] [Thread-309379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:52:04.548 [DEBUG] [Thread-309379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:52:04.549 [DEBUG] [Thread-309379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:52:04.562 [INFO] [Thread-309379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:52:04.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:52:04.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:52:05.405 [DEBUG] [Thread-309379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:52:05.405 [DEBUG] [Thread-309379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:52:05.452 [DEBUG] [Thread-309379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:52:05.452 [DEBUG] [Thread-309379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:52:05.461 [DEBUG] [Thread-309379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:52:05.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:52:05.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:52: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
2025-12-24T21:52:05.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:52:05.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:52:05.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:52:05.500 [DEBUG] [Thread-309379] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:52:15.667 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:16.299 [DEBUG] [Thread-309381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:18.709 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:31.603 [DEBUG] [Thread-309382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:35.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:52:35.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:52:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:52:38.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 51, 51), 6.93, 63.69, 0.0, 34.35, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:52:38.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:51:51
2025-12-24T21:52:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:52:38.603 [DEBUG] [Thread-309383] [transport.py] [_log()] starting thread (client mode): 0xf5770be0
2025-12-24T21:52:38.605 [DEBUG] [Thread-309383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:52:38.605 [DEBUG] [Thread-309383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:52:38.605 [INFO] [Thread-309383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] client lang: <none>
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] server lang: <none>
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] kex follows: False
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] Compression: none
2025-12-24T21:52:38.610 [DEBUG] [Thread-309383] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:52:38.639 [DEBUG] [Thread-309383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:52:38.642 [DEBUG] [Thread-309383] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:52:38.643 [DEBUG] [Thread-309383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:52:38.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:52:38.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:52:38.646 [DEBUG] [Thread-309383] [transport.py] [_log()] userauth is OK
2025-12-24T21:52:38.646 [DEBUG] [Thread-309383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:52:38.646 [DEBUG] [Thread-309383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:52:38.646 [DEBUG] [Thread-309383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:52:38.646 [DEBUG] [Thread-309383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:52:38.681 [INFO] [Thread-309383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:52:38.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:52:39.337 [DEBUG] [Thread-309383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:52:39.337 [DEBUG] [Thread-309383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:52:39.338 [DEBUG] [Thread-309383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:52:39.378 [DEBUG] [Thread-309383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:52:39.378 [DEBUG] [Thread-309383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:52:39.380 [DEBUG] [Thread-309383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:52:39.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:52:39.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:52:39.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:52:39.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:52:39.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:52:39.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:52:39.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:52:39.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:52:39.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:52:39.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.827841 -999.00  +16.00  29.04     67  +10.10 1 1 1 1 1     0    0 0.10 -232.48 ZNESW 29.7 29.0 170.2 37.1 16.9 -21.2 16.7 -20.9 16.6 -19.7 16.8 -20.4
2025-12-24T21:52:39.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:52:39.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:52:39.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.827841
2025-12-24T21:52:39.413 [DEBUG] [Thread-309383] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:52:39.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:52:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:52:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:52:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:52:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:52:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:51:51', tmtdew=6.93, humidity=63.69, cloud=0.0, wind=34.35, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:51:52', seeing=2.34, atlas_timestamp='2025-12-24T19:52:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:49:00')
2025-12-24T21:52:39.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:52:39.511 [DEBUG] [Thread-309386] [transport.py] [_log()] starting thread (client mode): 0xf813c460
2025-12-24T21:52:39.512 [DEBUG] [Thread-309386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:52:39.526 [DEBUG] [Thread-309386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:52:39.526 [INFO] [Thread-309386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] client lang: <none>
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] server lang: <none>
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] kex follows: False
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:52:39.534 [DEBUG] [Thread-309386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:52:39.535 [DEBUG] [Thread-309386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:52:39.535 [DEBUG] [Thread-309386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:52:39.535 [DEBUG] [Thread-309386] [transport.py] [_log()] Compression: none
2025-12-24T21:52:39.535 [DEBUG] [Thread-309386] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:52:39.592 [DEBUG] [Thread-309386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:52:39.592 [DEBUG] [Thread-309386] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:52:39.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:52:39.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:52:39.592 [DEBUG] [Thread-309386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:52:39.649 [DEBUG] [Thread-309386] [transport.py] [_log()] userauth is OK
2025-12-24T21:52:39.649 [DEBUG] [Thread-309386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:52:39.649 [DEBUG] [Thread-309386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:52:39.649 [DEBUG] [Thread-309386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:52:39.649 [DEBUG] [Thread-309386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:52:39.662 [INFO] [Thread-309386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:52:39.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:52:39.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:52:40.484 [DEBUG] [Thread-309386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:52:40.501 [DEBUG] [Thread-309386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:52:40.531 [DEBUG] [Thread-309386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:52:40.532 [DEBUG] [Thread-309386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:52:40.540 [DEBUG] [Thread-309386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:52:40.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:52: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')
2025-12-24T21:52:40.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:52:40.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:52:40.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:52:40.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:52:40.574 [DEBUG] [Thread-309386] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:52:45.279 [DEBUG] [Thread-309388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:46.724 [DEBUG] [Thread-309389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:54.683 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:52:54.688 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:53:02.521 [DEBUG] [Thread-309390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:53:10.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:53:10.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:53:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:53:12.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 52, 39), 6.82, 63.73, 0.0, 37.09, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:53:12.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:52:39
2025-12-24T21:53:12.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:53:12.459 [DEBUG] [Thread-309391] [transport.py] [_log()] starting thread (client mode): 0xf575ff40
2025-12-24T21:53:12.460 [DEBUG] [Thread-309391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:53:12.470 [DEBUG] [Thread-309391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:53:12.470 [INFO] [Thread-309391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:53:12.474 [DEBUG] [Thread-309391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:53:12.474 [DEBUG] [Thread-309391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] client lang: <none>
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] server lang: <none>
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] kex follows: False
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:53:12.475 [DEBUG] [Thread-309391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:53:12.476 [DEBUG] [Thread-309391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:53:12.476 [DEBUG] [Thread-309391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:53:12.476 [DEBUG] [Thread-309391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:53:12.476 [DEBUG] [Thread-309391] [transport.py] [_log()] Compression: none
2025-12-24T21:53:12.476 [DEBUG] [Thread-309391] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:53:12.511 [DEBUG] [Thread-309391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:53:12.515 [DEBUG] [Thread-309391] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:53:12.516 [DEBUG] [Thread-309391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:53:12.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:53:12.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:53:12.520 [DEBUG] [Thread-309391] [transport.py] [_log()] userauth is OK
2025-12-24T21:53:12.520 [DEBUG] [Thread-309391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:53:12.520 [DEBUG] [Thread-309391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:53:12.521 [DEBUG] [Thread-309391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:53:12.521 [DEBUG] [Thread-309391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:53:12.552 [INFO] [Thread-309391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:53:12.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:53:13.200 [DEBUG] [Thread-309391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:53:13.200 [DEBUG] [Thread-309391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:53:13.201 [DEBUG] [Thread-309391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:53:13.201 [DEBUG] [Thread-309391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:53:13.201 [DEBUG] [Thread-309391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:53:13.203 [DEBUG] [Thread-309391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:53:13.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:53:13.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:53:13.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:53:13.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:53:13.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:53:13.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:53:13.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:53:13.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:53:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:53:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.828188 -999.00  +16.00  23.87     68  +10.10 1 1 1 1 1     0    0 0.24 -224.46 ZNESW 27.9 23.9 171.4 34.5 16.9 -21.4 16.7 -20.8 16.6 -19.6 16.8 -20.5
2025-12-24T21:53:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:53:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:53:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.828188
2025-12-24T21:53:13.241 [DEBUG] [Thread-309391] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:53:13.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:53:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:53:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:53:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:53:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:53:13.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:52:39', tmtdew=6.82, humidity=63.73, cloud=0.0, wind=37.09, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:52:40', seeing=1.95, atlas_timestamp='2025-12-24T19:52:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:49:00')
2025-12-24T21:53:13.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:53:13.348 [DEBUG] [Thread-309394] [transport.py] [_log()] starting thread (client mode): 0xf575dd20
2025-12-24T21:53:13.349 [DEBUG] [Thread-309394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:53:13.363 [DEBUG] [Thread-309394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:53:13.363 [INFO] [Thread-309394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] client lang: <none>
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] server lang: <none>
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] kex follows: False
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] Compression: none
2025-12-24T21:53:13.461 [DEBUG] [Thread-309394] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:53:13.523 [DEBUG] [Thread-309394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:53:13.523 [DEBUG] [Thread-309394] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:53:13.523 [DEBUG] [Thread-309394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:53:13.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:53:13.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:53:13.580 [DEBUG] [Thread-309394] [transport.py] [_log()] userauth is OK
2025-12-24T21:53:13.580 [DEBUG] [Thread-309394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:53:13.580 [DEBUG] [Thread-309394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:53:13.580 [DEBUG] [Thread-309394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:53:13.580 [DEBUG] [Thread-309394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:53:13.594 [INFO] [Thread-309394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:53:13.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:53:13.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:53:14.389 [DEBUG] [Thread-309394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:53:14.390 [DEBUG] [Thread-309394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:53:14.438 [DEBUG] [Thread-309394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:53:14.438 [DEBUG] [Thread-309394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:53:14.446 [DEBUG] [Thread-309394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:53:14.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:53:14.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:53:14.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
2025-12-24T21:53:14.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:53:14.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:53:14.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:53:14.483 [DEBUG] [Thread-309394] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:53:17.747 [DEBUG] [Thread-309396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:53:33.300 [DEBUG] [Thread-309397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:53:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:53:44.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:53:44.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:53:46.090 [DEBUG] [Thread-309398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:53:48.490 [DEBUG] [Thread-309399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:53:53.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 53, 28), 6.82, 63.71, 0.0, 36.65, 16.1, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:53:53.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:53:28
2025-12-24T21:53:54.932 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:53:54.937 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:53:55.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:53:55.447 [DEBUG] [Thread-309400] [transport.py] [_log()] starting thread (client mode): 0xf575c7f0
2025-12-24T21:53:55.448 [DEBUG] [Thread-309400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:53:55.451 [DEBUG] [Thread-309400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:53:55.451 [INFO] [Thread-309400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:53:55.455 [DEBUG] [Thread-309400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] client lang: <none>
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] server lang: <none>
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] kex follows: False
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] Compression: none
2025-12-24T21:53:55.456 [DEBUG] [Thread-309400] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:53:55.490 [DEBUG] [Thread-309400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:53:55.494 [DEBUG] [Thread-309400] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:53:55.495 [DEBUG] [Thread-309400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:53:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:53:55.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:53:55.500 [DEBUG] [Thread-309400] [transport.py] [_log()] userauth is OK
2025-12-24T21:53:55.500 [DEBUG] [Thread-309400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:53:55.501 [DEBUG] [Thread-309400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:53:55.501 [DEBUG] [Thread-309400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:53:55.501 [DEBUG] [Thread-309400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:53:55.531 [INFO] [Thread-309400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:53:55.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:53:56.189 [DEBUG] [Thread-309400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:53:56.189 [DEBUG] [Thread-309400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:53:56.190 [DEBUG] [Thread-309400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:53:56.230 [DEBUG] [Thread-309400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:53:56.231 [DEBUG] [Thread-309400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:53:56.233 [DEBUG] [Thread-309400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:53:56.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:53:56.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:53:56.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:53:56.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:53:56.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:53:56.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:53:56.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:53:56.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:53:56.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:53:56.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.828883 -999.00  +16.00  25.91     68  +10.20 1 1 1 1 1     0    0 0.22 -219.58 ZNESW 24.5 25.9 162.0 34.8 16.8 -21.4 16.6 -21.3 16.5 -19.6 16.8 -20.8
2025-12-24T21:53:56.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:53:56.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:53:56.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.828883
2025-12-24T21:53:56.429 [DEBUG] [Thread-309400] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:53:56.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:53:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:53:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:53:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:53:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:53:56.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:53:28', tmtdew=6.82, humidity=63.71, cloud=0.0, wind=36.65, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:53:29', seeing=2.19, atlas_timestamp='2025-12-24T19:53:35.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:52:00')
2025-12-24T21:53:56.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:53:56.800 [DEBUG] [Thread-309403] [transport.py] [_log()] starting thread (client mode): 0xfabc4be0
2025-12-24T21:53:56.800 [DEBUG] [Thread-309403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:53:56.812 [DEBUG] [Thread-309403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:53:56.812 [INFO] [Thread-309403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] client lang: <none>
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] server lang: <none>
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] kex follows: False
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:53:56.820 [DEBUG] [Thread-309403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:53:56.821 [DEBUG] [Thread-309403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:53:56.821 [DEBUG] [Thread-309403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:53:56.821 [DEBUG] [Thread-309403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:53:56.821 [DEBUG] [Thread-309403] [transport.py] [_log()] Compression: none
2025-12-24T21:53:56.821 [DEBUG] [Thread-309403] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:53:56.877 [DEBUG] [Thread-309403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:53:56.878 [DEBUG] [Thread-309403] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:53:56.878 [DEBUG] [Thread-309403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:53:56.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:53:56.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:53:56.932 [DEBUG] [Thread-309403] [transport.py] [_log()] userauth is OK
2025-12-24T21:53:56.932 [DEBUG] [Thread-309403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:53:56.932 [DEBUG] [Thread-309403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:53:56.932 [DEBUG] [Thread-309403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:53:56.932 [DEBUG] [Thread-309403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:53:56.948 [INFO] [Thread-309403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:53:56.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:53:56.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:53:57.867 [DEBUG] [Thread-309403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:53:57.867 [DEBUG] [Thread-309403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:53:57.868 [DEBUG] [Thread-309403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:53:57.868 [DEBUG] [Thread-309403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:53:57.876 [DEBUG] [Thread-309403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:53:57.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:53:57.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:53:57.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:53:57.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:53:57.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:53:57.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:53:57.915 [DEBUG] [Thread-309403] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:54:03.749 [DEBUG] [Thread-309405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:54:19.030 [DEBUG] [Thread-309406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:54:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:54:27.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:54:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:54:29.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 54, 7), 6.82, 63.71, 0.0, 35.27, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:54:29.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:54:07
2025-12-24T21:54:29.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:54:29.971 [DEBUG] [Thread-309407] [transport.py] [_log()] starting thread (client mode): 0xfabc6740
2025-12-24T21:54:29.972 [DEBUG] [Thread-309407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:54:29.979 [DEBUG] [Thread-309407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:54:29.979 [INFO] [Thread-309407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:54:29.982 [DEBUG] [Thread-309407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] client lang: <none>
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] server lang: <none>
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] kex follows: False
2025-12-24T21:54:29.983 [DEBUG] [Thread-309407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:54:29.984 [DEBUG] [Thread-309407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:54:29.984 [DEBUG] [Thread-309407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:54:29.984 [DEBUG] [Thread-309407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:54:29.984 [DEBUG] [Thread-309407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:54:29.984 [DEBUG] [Thread-309407] [transport.py] [_log()] Compression: none
2025-12-24T21:54:29.984 [DEBUG] [Thread-309407] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:54:30.007 [DEBUG] [Thread-309407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:54:30.010 [DEBUG] [Thread-309407] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:54:30.011 [DEBUG] [Thread-309407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:54:30.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:54:30.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:54:30.013 [DEBUG] [Thread-309407] [transport.py] [_log()] userauth is OK
2025-12-24T21:54:30.013 [DEBUG] [Thread-309407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:54:30.014 [DEBUG] [Thread-309407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:54:30.014 [DEBUG] [Thread-309407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:54:30.014 [DEBUG] [Thread-309407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:54:30.031 [INFO] [Thread-309407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:54:30.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:54:30.663 [DEBUG] [Thread-309407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:54:30.663 [DEBUG] [Thread-309407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:54:30.664 [DEBUG] [Thread-309407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:54:30.704 [DEBUG] [Thread-309407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:54:30.704 [DEBUG] [Thread-309407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:54:30.706 [DEBUG] [Thread-309407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:54:30.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:54:30.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:54:30.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:54:30.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:54:30.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:54:30.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:54:30.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:54:30.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:54:30.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:54:30.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.829230 -999.00  +16.00  27.37     68  +10.20 1 1 1 1 1     0    0 0.63 -208.08 ZNESW 22.4 27.4 168.2 35.5 16.8 -21.4 16.6 -20.8 16.5 -19.7 16.8 -20.5
2025-12-24T21:54:30.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:54:30.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:54:30.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.829230
2025-12-24T21:54:30.742 [DEBUG] [Thread-309407] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:54:30.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:54:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:54:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:54:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:54:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:54:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:54:07', tmtdew=6.82, humidity=63.71, cloud=0.0, wind=35.27, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:54:08', seeing=2.03, atlas_timestamp='2025-12-24T19:54:05.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:52:00')
2025-12-24T21:54:30.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:54:30.840 [DEBUG] [Thread-309410] [transport.py] [_log()] starting thread (client mode): 0xf818a2c0
2025-12-24T21:54:30.841 [DEBUG] [Thread-309410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:54:30.855 [DEBUG] [Thread-309410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:54:30.856 [INFO] [Thread-309410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] client lang: <none>
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] server lang: <none>
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] kex follows: False
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] Compression: none
2025-12-24T21:54:30.863 [DEBUG] [Thread-309410] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:54:30.919 [DEBUG] [Thread-309410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:54:30.919 [DEBUG] [Thread-309410] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:54:30.919 [DEBUG] [Thread-309410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:54:30.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:54:30.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:54:30.976 [DEBUG] [Thread-309410] [transport.py] [_log()] userauth is OK
2025-12-24T21:54:30.976 [DEBUG] [Thread-309410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:54:30.976 [DEBUG] [Thread-309410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:54:30.976 [DEBUG] [Thread-309410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:54:30.976 [DEBUG] [Thread-309410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:54:30.990 [INFO] [Thread-309410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:54:30.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:54:30.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:54:31.844 [DEBUG] [Thread-309410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:54:31.844 [DEBUG] [Thread-309410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:54:31.892 [DEBUG] [Thread-309410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:54:31.892 [DEBUG] [Thread-309410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:54:31.904 [DEBUG] [Thread-309410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:54:31.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:54:31.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:54: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') -> 00000000
2025-12-24T21:54:31.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:54:31.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:54:31.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:54:31.938 [DEBUG] [Thread-309410] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:54:34.195 [DEBUG] [Thread-309412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:54:47.141 [DEBUG] [Thread-309413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:54:49.363 [DEBUG] [Thread-309414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:54:55.163 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:54:55.179 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:55:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:55:02.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:55:02.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:55:04.524 [DEBUG] [Thread-309415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:55:08.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 54, 7), 6.82, 63.71, 0.0, 35.27, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:55:08.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:54:07
2025-12-24T21:55:10.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:55:11.216 [DEBUG] [Thread-309416] [transport.py] [_log()] starting thread (client mode): 0xf818a860
2025-12-24T21:55:11.218 [DEBUG] [Thread-309416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:55:11.220 [DEBUG] [Thread-309416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:55:11.220 [INFO] [Thread-309416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:55:11.228 [DEBUG] [Thread-309416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:55:11.228 [DEBUG] [Thread-309416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] client lang: <none>
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] server lang: <none>
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] kex follows: False
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:55:11.229 [DEBUG] [Thread-309416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:55:11.315 [DEBUG] [Thread-309416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:55:11.315 [DEBUG] [Thread-309416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:55:11.315 [DEBUG] [Thread-309416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:55:11.315 [DEBUG] [Thread-309416] [transport.py] [_log()] Compression: none
2025-12-24T21:55:11.316 [DEBUG] [Thread-309416] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:55:11.357 [DEBUG] [Thread-309416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:55:11.364 [DEBUG] [Thread-309416] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:55:11.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:55:11.379 [DEBUG] [Thread-309416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:55:11.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:55:11.516 [DEBUG] [Thread-309416] [transport.py] [_log()] userauth is OK
2025-12-24T21:55:11.516 [DEBUG] [Thread-309416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:55:11.516 [DEBUG] [Thread-309416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:55:11.516 [DEBUG] [Thread-309416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:55:11.516 [DEBUG] [Thread-309416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:55:11.554 [INFO] [Thread-309416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:55:11.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:55:12.560 [DEBUG] [Thread-309416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:55:12.603 [DEBUG] [Thread-309416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:55:12.604 [DEBUG] [Thread-309416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:55:12.604 [DEBUG] [Thread-309416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:55:12.604 [DEBUG] [Thread-309416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:55:12.607 [DEBUG] [Thread-309416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:55:12.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:55:12.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:55:12.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:55:12.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:55:12.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:55:12.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:55:12.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:55:12.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:55:12.640 [DEBUG] [Thread-309416] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:55:12.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:55:12.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.829577 -999.00  +15.90  30.96     68  +10.20 1 1 2 1 1     0    0 0.44 -214.82 ZNESW 23.8 31.0 159.4 39.0 16.8 -21.4 16.6 -20.8 16.4 -19.7 16.8 -20.4
2025-12-24T21:55:12.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:55:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:55:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.829577
2025-12-24T21:55:12.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:55:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:55:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:55:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:55:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:55:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:54:07', tmtdew=6.82, humidity=63.71, cloud=0.0, wind=35.27, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:54:46', seeing=2.26, atlas_timestamp='2025-12-24T19:54:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:52:00')
2025-12-24T21:55:12.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:55:12.920 [DEBUG] [Thread-309419] [transport.py] [_log()] starting thread (client mode): 0xf57a9bd0
2025-12-24T21:55:12.920 [DEBUG] [Thread-309419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:55:12.920 [DEBUG] [Thread-309419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:55:12.920 [INFO] [Thread-309419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] client lang: <none>
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] server lang: <none>
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] kex follows: False
2025-12-24T21:55:12.934 [DEBUG] [Thread-309419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:55:12.935 [DEBUG] [Thread-309419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:55:12.935 [DEBUG] [Thread-309419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:55:12.935 [DEBUG] [Thread-309419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:55:12.935 [DEBUG] [Thread-309419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:55:12.935 [DEBUG] [Thread-309419] [transport.py] [_log()] Compression: none
2025-12-24T21:55:12.935 [DEBUG] [Thread-309419] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:55:12.999 [DEBUG] [Thread-309419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:55:13.003 [DEBUG] [Thread-309419] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:55:13.003 [DEBUG] [Thread-309419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:55:13.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:55:13.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:55:13.056 [DEBUG] [Thread-309419] [transport.py] [_log()] userauth is OK
2025-12-24T21:55:13.056 [DEBUG] [Thread-309419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:55:13.056 [DEBUG] [Thread-309419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:55:13.056 [DEBUG] [Thread-309419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:55:13.056 [DEBUG] [Thread-309419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:55:13.177 [INFO] [Thread-309419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:55:13.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:55:13.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:55:13.976 [DEBUG] [Thread-309419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:55:13.976 [DEBUG] [Thread-309419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:55:14.023 [DEBUG] [Thread-309419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:55:14.023 [DEBUG] [Thread-309419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:55:14.031 [DEBUG] [Thread-309419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:55:14.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:55:14.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')
2025-12-24T21:55:14.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
2025-12-24T21:55:14.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:55:14.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:55:14.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:55:14.070 [DEBUG] [Thread-309419] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:55:20.015 [DEBUG] [Thread-309421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:55:35.389 [DEBUG] [Thread-309422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:55:44.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:55:44.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:55:44.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:55:45.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 54, 45), 6.77, 64.21, 0.0, 31.55, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:55:45.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:54:45
2025-12-24T21:55:46.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:55:46.220 [DEBUG] [Thread-309423] [transport.py] [_log()] starting thread (client mode): 0xf8156f20
2025-12-24T21:55:46.220 [DEBUG] [Thread-309423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:55:46.224 [DEBUG] [Thread-309423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:55:46.224 [INFO] [Thread-309423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] client lang: <none>
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] server lang: <none>
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] kex follows: False
2025-12-24T21:55:46.228 [DEBUG] [Thread-309423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:55:46.229 [DEBUG] [Thread-309423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:55:46.229 [DEBUG] [Thread-309423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:55:46.229 [DEBUG] [Thread-309423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:55:46.229 [DEBUG] [Thread-309423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:55:46.229 [DEBUG] [Thread-309423] [transport.py] [_log()] Compression: none
2025-12-24T21:55:46.229 [DEBUG] [Thread-309423] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:55:46.262 [DEBUG] [Thread-309423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:55:46.265 [DEBUG] [Thread-309423] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:55:46.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:55:46.267 [DEBUG] [Thread-309423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:55:46.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:55:46.269 [DEBUG] [Thread-309423] [transport.py] [_log()] userauth is OK
2025-12-24T21:55:46.269 [DEBUG] [Thread-309423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:55:46.269 [DEBUG] [Thread-309423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:55:46.269 [DEBUG] [Thread-309423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:55:46.269 [DEBUG] [Thread-309423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:55:46.286 [INFO] [Thread-309423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:55:46.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:55:46.914 [DEBUG] [Thread-309423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:55:46.914 [DEBUG] [Thread-309423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:55:46.915 [DEBUG] [Thread-309423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:55:46.954 [DEBUG] [Thread-309423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:55:46.954 [DEBUG] [Thread-309423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:55:46.957 [DEBUG] [Thread-309423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:55:46.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:55:46.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:55:46.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:55:46.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:55:46.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:55:46.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:55:46.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:55:46.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:55:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:55:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.829924 -999.00  +15.90  23.51     68  +10.20 1 1 1 1 1     0    0 0.50 -205.34 ZNESW 21.5 23.5 164.5 34.6 16.8 -21.3 16.6 -20.9 16.5 -19.7 16.8 -20.6
2025-12-24T21:55:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:55:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:55:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.829924
2025-12-24T21:55:46.991 [DEBUG] [Thread-309423] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:55:47.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:55:47.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:55:47.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:55:47.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:55:47.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:55:47.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:54:45', tmtdew=6.77, humidity=64.21, cloud=0.0, wind=31.55, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:54:46', seeing=2.26, atlas_timestamp='2025-12-24T19:55:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:52:00')
2025-12-24T21:55:47.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:55:47.115 [DEBUG] [Thread-309426] [transport.py] [_log()] starting thread (client mode): 0xf5770d30
2025-12-24T21:55:47.116 [DEBUG] [Thread-309426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:55:47.130 [DEBUG] [Thread-309426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:55:47.130 [INFO] [Thread-309426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] client lang: <none>
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] server lang: <none>
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] kex follows: False
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] Compression: none
2025-12-24T21:55:47.138 [DEBUG] [Thread-309426] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:55:47.194 [DEBUG] [Thread-309426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:55:47.194 [DEBUG] [Thread-309426] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:55:47.194 [DEBUG] [Thread-309426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:55:47.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:55:47.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:55:47.253 [DEBUG] [Thread-309426] [transport.py] [_log()] userauth is OK
2025-12-24T21:55:47.253 [DEBUG] [Thread-309426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:55:47.253 [DEBUG] [Thread-309426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:55:47.261 [DEBUG] [Thread-309426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:55:47.261 [DEBUG] [Thread-309426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:55:47.275 [INFO] [Thread-309426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:55:47.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:55:47.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:55:47.583 [DEBUG] [Thread-309428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:55:48.102 [DEBUG] [Thread-309426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:55:48.102 [DEBUG] [Thread-309426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:55:48.150 [DEBUG] [Thread-309426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:55:48.150 [DEBUG] [Thread-309426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:55:48.159 [DEBUG] [Thread-309426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:55:48.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:55:48.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:55:48.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
2025-12-24T21:55:48.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:55:48.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:55:48.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:55:48.195 [DEBUG] [Thread-309426] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:55:50.512 [DEBUG] [Thread-309429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:55:55.382 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:55:55.384 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:56:05.724 [DEBUG] [Thread-309430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:56:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:56:18.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:56:18.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:56:20.852 [DEBUG] [Thread-309431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:56:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 55, 45), 6.7, 64.33, 0.0, 36.75, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:56:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:55:45
2025-12-24T21:56:22.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:56:22.353 [DEBUG] [Thread-309432] [transport.py] [_log()] starting thread (client mode): 0xf8155780
2025-12-24T21:56:22.353 [DEBUG] [Thread-309432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:56:22.363 [DEBUG] [Thread-309432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:56:22.363 [INFO] [Thread-309432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] client lang: <none>
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] server lang: <none>
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] kex follows: False
2025-12-24T21:56:22.367 [DEBUG] [Thread-309432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:56:22.368 [DEBUG] [Thread-309432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:56:22.368 [DEBUG] [Thread-309432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:56:22.368 [DEBUG] [Thread-309432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:56:22.368 [DEBUG] [Thread-309432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:56:22.368 [DEBUG] [Thread-309432] [transport.py] [_log()] Compression: none
2025-12-24T21:56:22.368 [DEBUG] [Thread-309432] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:56:22.401 [DEBUG] [Thread-309432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:56:22.405 [DEBUG] [Thread-309432] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:56:22.407 [DEBUG] [Thread-309432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:56:22.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:56:22.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:56:22.409 [DEBUG] [Thread-309432] [transport.py] [_log()] userauth is OK
2025-12-24T21:56:22.409 [DEBUG] [Thread-309432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:56:22.409 [DEBUG] [Thread-309432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:56:22.409 [DEBUG] [Thread-309432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:56:22.409 [DEBUG] [Thread-309432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:56:22.430 [INFO] [Thread-309432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:56:22.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:56:23.030 [DEBUG] [Thread-309432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:56:23.127 [DEBUG] [Thread-309432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:56:23.134 [DEBUG] [Thread-309432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:56:23.134 [DEBUG] [Thread-309432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:56:23.134 [DEBUG] [Thread-309432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:56:23.137 [DEBUG] [Thread-309432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:56:23.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:56:23.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:56:23.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:56:23.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:56:23.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:56:23.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:56:23.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:56:23.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:56:23.310 [DEBUG] [Thread-309432] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:56:23.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:56:23.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.830271 -999.00  +15.90  25.32     69  +10.20 1 1 1 1 1     0    0 0.87 -192.89 ZNESW 27.4 25.3 158.4 35.4 16.8 -21.4 16.6 -20.9 16.4 -19.5 16.8 -20.5
2025-12-24T21:56:23.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:56:23.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:56:23.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.830271
2025-12-24T21:56:23.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:56:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:56:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:56:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:56:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:56:23.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:55:45', tmtdew=6.7, humidity=64.33, cloud=0.0, wind=36.75, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:55:46', seeing=2.64, atlas_timestamp='2025-12-24T19:55:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08125000000000071, 0.11074999999999946, 0.15025000000000155, 0.1039999999999992, 0.13000000000000078, 0.11925000000000097, 0.09050000000000047, 0.06925000000000026, 0.1144999999999996, 0.06700000000000017, 0.13724999999999987, 0.019999999999999574, 0.15499999999999936, 0.12324999999999875, 0.07199999999999918, 0.053999999999998494, 0.07724999999999937, 0.14550000000000018, 0.10199999999999854, 0.060249999999999915, 0.08399999999999963, 0.13924999999999876, 0.07925000000000004, 0.07174999999999976, 0.10799999999999876, 0.08850000000000158, 0.1067499999999999, 0.12149999999999928, 0.12599999999999945, 0.10900000000000176, 0.12500000000000178, 0.07900000000000063, 0.1322499999999991], zp_timestamp='2025-12-24T19:52:00')
2025-12-24T21:56:23.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:56:23.440 [DEBUG] [Thread-309435] [transport.py] [_log()] starting thread (client mode): 0xf8157df0
2025-12-24T21:56:23.440 [DEBUG] [Thread-309435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:56:23.454 [DEBUG] [Thread-309435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:56:23.455 [INFO] [Thread-309435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] client lang: <none>
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] server lang: <none>
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] kex follows: False
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:56:23.463 [DEBUG] [Thread-309435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:56:23.467 [DEBUG] [Thread-309435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:56:23.467 [DEBUG] [Thread-309435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:56:23.467 [DEBUG] [Thread-309435] [transport.py] [_log()] Compression: none
2025-12-24T21:56:23.467 [DEBUG] [Thread-309435] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:56:23.521 [DEBUG] [Thread-309435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:56:23.521 [DEBUG] [Thread-309435] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:56:23.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:56:23.522 [DEBUG] [Thread-309435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:56:23.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:56:23.636 [DEBUG] [Thread-309435] [transport.py] [_log()] userauth is OK
2025-12-24T21:56:23.636 [DEBUG] [Thread-309435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:56:23.636 [DEBUG] [Thread-309435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:56:23.636 [DEBUG] [Thread-309435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:56:23.636 [DEBUG] [Thread-309435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:56:23.656 [INFO] [Thread-309435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:56:23.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:56:23.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:56:24.471 [DEBUG] [Thread-309435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:56:24.471 [DEBUG] [Thread-309435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:56:24.520 [DEBUG] [Thread-309435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:56:24.520 [DEBUG] [Thread-309435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:56:24.528 [DEBUG] [Thread-309435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:56:24.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:56:24.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:56:24.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:56:24.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:56:24.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:56:24.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:56:24.638 [DEBUG] [Thread-309435] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:56:36.293 [DEBUG] [Thread-309437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:56:48.342 [DEBUG] [Thread-309438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:56:51.705 [DEBUG] [Thread-309439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:56:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:56:54.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:56:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:56:55.592 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:56:55.595 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:57:01.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 56, 22), 6.65, 64.53, 0.0, 38.31, 16.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:57:01.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:56:22
2025-12-24T21:57:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:57:03.153 [DEBUG] [Thread-309440] [transport.py] [_log()] starting thread (client mode): 0xf57a9cc0
2025-12-24T21:57:03.154 [DEBUG] [Thread-309440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:57:03.155 [DEBUG] [Thread-309440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:57:03.155 [INFO] [Thread-309440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:57:03.162 [DEBUG] [Thread-309440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:57:03.162 [DEBUG] [Thread-309440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:57:03.162 [DEBUG] [Thread-309440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:57:03.162 [DEBUG] [Thread-309440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:57:03.162 [DEBUG] [Thread-309440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:57:03.162 [DEBUG] [Thread-309440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:57:03.162 [DEBUG] [Thread-309440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:57:03.163 [DEBUG] [Thread-309440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:57:03.163 [DEBUG] [Thread-309440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:57:03.163 [DEBUG] [Thread-309440] [transport.py] [_log()] client lang: <none>
2025-12-24T21:57:03.163 [DEBUG] [Thread-309440] [transport.py] [_log()] server lang: <none>
2025-12-24T21:57:03.163 [DEBUG] [Thread-309440] [transport.py] [_log()] kex follows: False
2025-12-24T21:57:03.163 [DEBUG] [Thread-309440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:57:03.163 [DEBUG] [Thread-309440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:57:03.163 [DEBUG] [Thread-309440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:57:03.164 [DEBUG] [Thread-309440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:57:03.164 [DEBUG] [Thread-309440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:57:03.164 [DEBUG] [Thread-309440] [transport.py] [_log()] Compression: none
2025-12-24T21:57:03.164 [DEBUG] [Thread-309440] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:57:03.213 [DEBUG] [Thread-309440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:57:03.222 [DEBUG] [Thread-309440] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:57:03.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:57:03.233 [DEBUG] [Thread-309440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:57:03.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:57:03.237 [DEBUG] [Thread-309440] [transport.py] [_log()] userauth is OK
2025-12-24T21:57:03.237 [DEBUG] [Thread-309440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:57:03.237 [DEBUG] [Thread-309440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:57:03.237 [DEBUG] [Thread-309440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:57:03.237 [DEBUG] [Thread-309440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:57:03.272 [INFO] [Thread-309440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:57:03.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:57:03.913 [DEBUG] [Thread-309440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:57:03.913 [DEBUG] [Thread-309440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:57:03.914 [DEBUG] [Thread-309440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:57:03.954 [DEBUG] [Thread-309440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:57:03.954 [DEBUG] [Thread-309440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:57:03.956 [DEBUG] [Thread-309440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:57:03.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:57:03.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:57:03.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:57:03.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:57:03.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:57:03.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:57:03.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:57:03.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:57:03.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:57:03.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.830619 -999.00  +15.90  22.42     69  +10.20 1 1 1 1 1     0    0 1.69 -164.42 ZNESW 20.5 22.4 165.8 36.8 16.8 -21.3 16.6 -20.8 16.4 -19.6 16.8 -20.6
2025-12-24T21:57:03.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:57:03.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:57:03.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.830619
2025-12-24T21:57:04.147 [DEBUG] [Thread-309440] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:57:04.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:57:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:57:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:57:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:57:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:57:04.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:56:22', tmtdew=6.65, humidity=64.53, cloud=0.0, wind=38.31, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:56:24', seeing=2.64, atlas_timestamp='2025-12-24T19:56:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.05924999999999869, 0.11125000000000007, 0.11924999999999919, 0.1064999999999987, 0.13949999999999996, 0.1252500000000012, 0.12100000000000044, 0.06425000000000125, 0.09750000000000014, 0.10650000000000048, 0.098749999999999, 0.01699999999999946, 0.15700000000000003, 0.09174999999999933, 0.0519999999999996, 0.07349999999999923, 0.08124999999999893, 0.1280000000000001, 0.09600000000000009, 0.04374999999999929, 0.0799999999999983, 0.10374999999999801, 0.08125000000000071, 0.0807500000000001, 0.11099999999999888, 0.10849999999999937, 0.08174999999999955, 0.08250000000000135, 0.14750000000000085, 0.06500000000000128, 0.13100000000000023, 0.08900000000000219, 0.12524999999999942], zp_timestamp='2025-12-24T19:55:00')
2025-12-24T21:57:04.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:57:04.267 [DEBUG] [Thread-309443] [transport.py] [_log()] starting thread (client mode): 0xf5789120
2025-12-24T21:57:04.267 [DEBUG] [Thread-309443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:57:04.283 [DEBUG] [Thread-309443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:57:04.283 [INFO] [Thread-309443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:57:04.290 [DEBUG] [Thread-309443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:57:04.290 [DEBUG] [Thread-309443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:57:04.290 [DEBUG] [Thread-309443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:57:04.290 [DEBUG] [Thread-309443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:57:04.290 [DEBUG] [Thread-309443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:57:04.290 [DEBUG] [Thread-309443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:57:04.290 [DEBUG] [Thread-309443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:57:04.290 [DEBUG] [Thread-309443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] client lang: <none>
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] server lang: <none>
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] kex follows: False
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] Compression: none
2025-12-24T21:57:04.291 [DEBUG] [Thread-309443] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:57:04.346 [DEBUG] [Thread-309443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:57:04.346 [DEBUG] [Thread-309443] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:57:04.347 [DEBUG] [Thread-309443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:57:04.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:57:04.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:57:04.403 [DEBUG] [Thread-309443] [transport.py] [_log()] userauth is OK
2025-12-24T21:57:04.403 [DEBUG] [Thread-309443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:57:04.403 [DEBUG] [Thread-309443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:57:04.403 [DEBUG] [Thread-309443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:57:04.403 [DEBUG] [Thread-309443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:57:04.419 [INFO] [Thread-309443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:57:04.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:57:04.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:57:05.370 [DEBUG] [Thread-309443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:57:05.371 [DEBUG] [Thread-309443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:57:05.372 [DEBUG] [Thread-309443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:57:05.372 [DEBUG] [Thread-309443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:57:05.382 [DEBUG] [Thread-309443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:57:05.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:57:05.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:57:05.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:57:05.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:57:05.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:57:05.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:57:05.426 [DEBUG] [Thread-309443] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:57:06.863 [DEBUG] [Thread-309445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:57:22.634 [DEBUG] [Thread-309446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:57:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:57:35.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:57:35.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:57:38.338 [DEBUG] [Thread-309447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:57:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 56, 22), 6.65, 64.53, 0.0, 38.31, 16.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:57:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:56:22
2025-12-24T21:57:41.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:57:41.486 [DEBUG] [Thread-309448] [transport.py] [_log()] starting thread (client mode): 0xf8188190
2025-12-24T21:57:41.487 [DEBUG] [Thread-309448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:57:41.493 [DEBUG] [Thread-309448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:57:41.493 [INFO] [Thread-309448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] client lang: <none>
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] server lang: <none>
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] kex follows: False
2025-12-24T21:57:41.501 [DEBUG] [Thread-309448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:57:41.502 [DEBUG] [Thread-309448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:57:41.502 [DEBUG] [Thread-309448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:57:41.503 [DEBUG] [Thread-309448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:57:41.503 [DEBUG] [Thread-309448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:57:41.503 [DEBUG] [Thread-309448] [transport.py] [_log()] Compression: none
2025-12-24T21:57:41.503 [DEBUG] [Thread-309448] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:57:41.542 [DEBUG] [Thread-309448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:57:41.550 [DEBUG] [Thread-309448] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:57:41.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:57:41.553 [DEBUG] [Thread-309448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:57:41.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:57:41.557 [DEBUG] [Thread-309448] [transport.py] [_log()] userauth is OK
2025-12-24T21:57:41.557 [DEBUG] [Thread-309448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:57:41.558 [DEBUG] [Thread-309448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:57:41.558 [DEBUG] [Thread-309448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:57:41.558 [DEBUG] [Thread-309448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:57:41.596 [INFO] [Thread-309448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:57:41.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:57:42.278 [DEBUG] [Thread-309448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:57:42.278 [DEBUG] [Thread-309448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:57:42.281 [DEBUG] [Thread-309448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:57:42.320 [DEBUG] [Thread-309448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:57:42.320 [DEBUG] [Thread-309448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:57:42.322 [DEBUG] [Thread-309448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:57:42.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:57:42.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:57:42.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:57:42.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:57:42.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:57:42.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:57:42.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:57:42.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:57:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:57:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.831313 -999.00  +15.90  15.91     69  +10.20 1 1 1 1 1     0    0 2.60 -131.08 ZNESW 17.1 15.9 150.2 29.8 16.7 -21.2 16.5 -20.9 16.4 -19.5 16.8 -20.5
2025-12-24T21:57:42.351 [DEBUG] [Thread-309448] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:57:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:57:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:57:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.831313
2025-12-24T21:57:42.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:57:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:57:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:57:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:57:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:57:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:56:22', tmtdew=6.65, humidity=64.53, cloud=0.0, wind=38.31, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:57:22', seeing=1.94, atlas_timestamp='2025-12-24T19:57:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.05924999999999869, 0.11125000000000007, 0.11924999999999919, 0.1064999999999987, 0.13949999999999996, 0.1252500000000012, 0.12100000000000044, 0.06425000000000125, 0.09750000000000014, 0.10650000000000048, 0.098749999999999, 0.01699999999999946, 0.15700000000000003, 0.09174999999999933, 0.0519999999999996, 0.07349999999999923, 0.08124999999999893, 0.1280000000000001, 0.09600000000000009, 0.04374999999999929, 0.0799999999999983, 0.10374999999999801, 0.08125000000000071, 0.0807500000000001, 0.11099999999999888, 0.10849999999999937, 0.08174999999999955, 0.08250000000000135, 0.14750000000000085, 0.06500000000000128, 0.13100000000000023, 0.08900000000000219, 0.12524999999999942], zp_timestamp='2025-12-24T19:55:00')
2025-12-24T21:57:42.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:57:42.488 [DEBUG] [Thread-309451] [transport.py] [_log()] starting thread (client mode): 0xf5742800
2025-12-24T21:57:42.489 [DEBUG] [Thread-309451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:57:42.504 [DEBUG] [Thread-309451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:57:42.504 [INFO] [Thread-309451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:57:42.511 [DEBUG] [Thread-309451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] client lang: <none>
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] server lang: <none>
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] kex follows: False
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] Compression: none
2025-12-24T21:57:42.512 [DEBUG] [Thread-309451] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:57:42.570 [DEBUG] [Thread-309451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:57:42.570 [DEBUG] [Thread-309451] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:57:42.570 [DEBUG] [Thread-309451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:57:42.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:57:42.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:57:42.626 [DEBUG] [Thread-309451] [transport.py] [_log()] userauth is OK
2025-12-24T21:57:42.627 [DEBUG] [Thread-309451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:57:42.627 [DEBUG] [Thread-309451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:57:42.627 [DEBUG] [Thread-309451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:57:42.627 [DEBUG] [Thread-309451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:57:42.645 [INFO] [Thread-309451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:57:42.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:57:42.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:57:43.471 [DEBUG] [Thread-309451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:57:43.471 [DEBUG] [Thread-309451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:57:43.517 [DEBUG] [Thread-309451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:57:43.517 [DEBUG] [Thread-309451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:57:43.525 [DEBUG] [Thread-309451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:57:43.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:57:43.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')
2025-12-24T21:57:43.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:57:43.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:57:43.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:57:43.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:57:43.814 [DEBUG] [Thread-309451] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:57:49.167 [DEBUG] [Thread-309453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:57:53.671 [DEBUG] [Thread-309454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:57:55.807 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:57:55.821 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:58:09.318 [DEBUG] [Thread-309455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:58:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:58:13.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:58:14.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:58:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 57, 21), 6.57, 64.86, 0.0, 37.14, 15.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:58:19.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:57:21
2025-12-24T21:58:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:58:20.250 [DEBUG] [Thread-309456] [transport.py] [_log()] starting thread (client mode): 0xf5773a60
2025-12-24T21:58:20.255 [DEBUG] [Thread-309456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:58:20.265 [DEBUG] [Thread-309456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:58:20.266 [INFO] [Thread-309456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:58:20.458 [DEBUG] [Thread-309456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] client lang: <none>
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] server lang: <none>
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] kex follows: False
2025-12-24T21:58:20.459 [DEBUG] [Thread-309456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:58:20.460 [DEBUG] [Thread-309456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:58:20.460 [DEBUG] [Thread-309456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:58:20.460 [DEBUG] [Thread-309456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:58:20.460 [DEBUG] [Thread-309456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:58:20.460 [DEBUG] [Thread-309456] [transport.py] [_log()] Compression: none
2025-12-24T21:58:20.460 [DEBUG] [Thread-309456] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:58:20.557 [DEBUG] [Thread-309456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:58:20.562 [DEBUG] [Thread-309456] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:58:20.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:58:20.565 [DEBUG] [Thread-309456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:58:20.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:58:20.568 [DEBUG] [Thread-309456] [transport.py] [_log()] userauth is OK
2025-12-24T21:58:20.568 [DEBUG] [Thread-309456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:58:20.568 [DEBUG] [Thread-309456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:58:20.568 [DEBUG] [Thread-309456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:58:20.568 [DEBUG] [Thread-309456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:58:20.588 [INFO] [Thread-309456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:58:20.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:58:21.153 [DEBUG] [Thread-309456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:58:21.153 [DEBUG] [Thread-309456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:58:21.174 [DEBUG] [Thread-309456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:58:21.195 [DEBUG] [Thread-309456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:58:21.195 [DEBUG] [Thread-309456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:58:21.198 [DEBUG] [Thread-309456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:58:21.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:58:21.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:58:21.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:58:21.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:58:21.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:58:21.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:58:21.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:58:21.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:58:21.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:58:21.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.832008 -999.00  +15.80  27.82     69  +10.30 1 1 1 1 1     0    0 2.43 -137.53 ZNESW 27.5 27.8 160.0 36.4 16.6 -21.4 16.5 -21.0 16.4 -19.7 16.7 -20.6
2025-12-24T21:58:21.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:58:21.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:58:21.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.832008
2025-12-24T21:58:21.384 [DEBUG] [Thread-309456] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:58:21.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:58:21.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:58:21.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:58:21.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:58:21.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:58:21.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:57:21', tmtdew=6.57, humidity=64.86, cloud=0.0, wind=37.14, temperature=15.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:58:12', seeing=2.74, atlas_timestamp='2025-12-24T19:58:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.05924999999999869, 0.11125000000000007, 0.11924999999999919, 0.1064999999999987, 0.13949999999999996, 0.1252500000000012, 0.12100000000000044, 0.06425000000000125, 0.09750000000000014, 0.10650000000000048, 0.098749999999999, 0.01699999999999946, 0.15700000000000003, 0.09174999999999933, 0.0519999999999996, 0.07349999999999923, 0.08124999999999893, 0.1280000000000001, 0.09600000000000009, 0.04374999999999929, 0.0799999999999983, 0.10374999999999801, 0.08125000000000071, 0.0807500000000001, 0.11099999999999888, 0.10849999999999937, 0.08174999999999955, 0.08250000000000135, 0.14750000000000085, 0.06500000000000128, 0.13100000000000023, 0.08900000000000219, 0.12524999999999942], zp_timestamp='2025-12-24T19:55:00')
2025-12-24T21:58:21.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:58:21.553 [DEBUG] [Thread-309459] [transport.py] [_log()] starting thread (client mode): 0xf5788730
2025-12-24T21:58:21.553 [DEBUG] [Thread-309459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:58:21.562 [DEBUG] [Thread-309459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:58:21.562 [INFO] [Thread-309459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] client lang: <none>
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] server lang: <none>
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] kex follows: False
2025-12-24T21:58:21.570 [DEBUG] [Thread-309459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:58:21.571 [DEBUG] [Thread-309459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:58:21.571 [DEBUG] [Thread-309459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:58:21.571 [DEBUG] [Thread-309459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:58:21.571 [DEBUG] [Thread-309459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:58:21.571 [DEBUG] [Thread-309459] [transport.py] [_log()] Compression: none
2025-12-24T21:58:21.571 [DEBUG] [Thread-309459] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:58:21.627 [DEBUG] [Thread-309459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:58:21.627 [DEBUG] [Thread-309459] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:58:21.627 [DEBUG] [Thread-309459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:58:21.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:58:21.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:58:21.686 [DEBUG] [Thread-309459] [transport.py] [_log()] userauth is OK
2025-12-24T21:58:21.686 [DEBUG] [Thread-309459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:58:21.686 [DEBUG] [Thread-309459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:58:21.686 [DEBUG] [Thread-309459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:58:21.686 [DEBUG] [Thread-309459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:58:21.700 [INFO] [Thread-309459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:58:21.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:58:21.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:58:22.504 [DEBUG] [Thread-309459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:58:22.504 [DEBUG] [Thread-309459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:58:22.551 [DEBUG] [Thread-309459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:58:22.552 [DEBUG] [Thread-309459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:58:22.560 [DEBUG] [Thread-309459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:58:22.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:58:22.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:58:22.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:58:22.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:58:22.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:58:22.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:58:22.592 [DEBUG] [Thread-309459] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:58:24.508 [DEBUG] [Thread-309461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:58:40.153 [DEBUG] [Thread-309462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:58:50.307 [DEBUG] [Thread-309463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:58:52.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:58:52.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:58:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:58:55.402 [DEBUG] [Thread-309464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:58:56.022 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:58:56.028 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:58:59.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 58, 11), 6.51, 65.12, 0.0, 36.01, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:58:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:58:11
2025-12-24T21:58:59.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:58:59.445 [DEBUG] [Thread-309465] [transport.py] [_log()] starting thread (client mode): 0xf5743b80
2025-12-24T21:58:59.447 [DEBUG] [Thread-309465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:58:59.448 [DEBUG] [Thread-309465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:58:59.448 [INFO] [Thread-309465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:58:59.454 [DEBUG] [Thread-309465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:58:59.455 [DEBUG] [Thread-309465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:58:59.455 [DEBUG] [Thread-309465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:58:59.455 [DEBUG] [Thread-309465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:58:59.455 [DEBUG] [Thread-309465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:58:59.455 [DEBUG] [Thread-309465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:58:59.455 [DEBUG] [Thread-309465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:58:59.455 [DEBUG] [Thread-309465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:58:59.456 [DEBUG] [Thread-309465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:58:59.456 [DEBUG] [Thread-309465] [transport.py] [_log()] client lang: <none>
2025-12-24T21:58:59.456 [DEBUG] [Thread-309465] [transport.py] [_log()] server lang: <none>
2025-12-24T21:58:59.456 [DEBUG] [Thread-309465] [transport.py] [_log()] kex follows: False
2025-12-24T21:58:59.456 [DEBUG] [Thread-309465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:58:59.457 [DEBUG] [Thread-309465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:58:59.457 [DEBUG] [Thread-309465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:58:59.457 [DEBUG] [Thread-309465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:58:59.458 [DEBUG] [Thread-309465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:58:59.458 [DEBUG] [Thread-309465] [transport.py] [_log()] Compression: none
2025-12-24T21:58:59.458 [DEBUG] [Thread-309465] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:58:59.500 [DEBUG] [Thread-309465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:58:59.507 [DEBUG] [Thread-309465] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:58:59.509 [DEBUG] [Thread-309465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:58:59.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:58:59.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:58:59.515 [DEBUG] [Thread-309465] [transport.py] [_log()] userauth is OK
2025-12-24T21:58:59.515 [DEBUG] [Thread-309465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:58:59.515 [DEBUG] [Thread-309465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:58:59.515 [DEBUG] [Thread-309465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:58:59.515 [DEBUG] [Thread-309465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:58:59.543 [INFO] [Thread-309465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:58:59.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:59:00.202 [DEBUG] [Thread-309465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:59:00.202 [DEBUG] [Thread-309465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:59:00.204 [DEBUG] [Thread-309465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:59:00.244 [DEBUG] [Thread-309465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:59:00.244 [DEBUG] [Thread-309465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:59:00.246 [DEBUG] [Thread-309465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:59:00.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:59:00.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:59:00.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:59:00.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:59:00.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:59:00.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:59:00.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:59:00.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:59:00.272 [DEBUG] [Thread-309465] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:59:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:59:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.832355 -999.00  +15.80  22.55     69  +10.30 1 1 1 1 1     0    0 2.31 -133.57 ZNESW 24.7 22.6 159.6 34.2 16.6 -21.4 16.4 -21.1 16.3 -19.7 16.6 -20.6
2025-12-24T21:59:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:59:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:59:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.832355
2025-12-24T21:59:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:59:00.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:59:00.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:59:00.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:59:00.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:59:00.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:58:11', tmtdew=6.51, humidity=65.12, cloud=0.0, wind=36.01, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:58:12', seeing=2.74, atlas_timestamp='2025-12-24T19:58:35.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.05924999999999869, 0.11125000000000007, 0.11924999999999919, 0.1064999999999987, 0.13949999999999996, 0.1252500000000012, 0.12100000000000044, 0.06425000000000125, 0.09750000000000014, 0.10650000000000048, 0.098749999999999, 0.01699999999999946, 0.15700000000000003, 0.09174999999999933, 0.0519999999999996, 0.07349999999999923, 0.08124999999999893, 0.1280000000000001, 0.09600000000000009, 0.04374999999999929, 0.0799999999999983, 0.10374999999999801, 0.08125000000000071, 0.0807500000000001, 0.11099999999999888, 0.10849999999999937, 0.08174999999999955, 0.08250000000000135, 0.14750000000000085, 0.06500000000000128, 0.13100000000000023, 0.08900000000000219, 0.12524999999999942], zp_timestamp='2025-12-24T19:55:00')
2025-12-24T21:59:00.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:59:00.394 [DEBUG] [Thread-309468] [transport.py] [_log()] starting thread (client mode): 0xf57ab760
2025-12-24T21:59:00.394 [DEBUG] [Thread-309468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:59:00.408 [DEBUG] [Thread-309468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:59:00.408 [INFO] [Thread-309468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:59:00.415 [DEBUG] [Thread-309468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:59:00.415 [DEBUG] [Thread-309468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:59:00.415 [DEBUG] [Thread-309468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:59:00.415 [DEBUG] [Thread-309468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:59:00.415 [DEBUG] [Thread-309468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] client lang: <none>
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] server lang: <none>
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] kex follows: False
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] Compression: none
2025-12-24T21:59:00.416 [DEBUG] [Thread-309468] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:59:00.475 [DEBUG] [Thread-309468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:59:00.476 [DEBUG] [Thread-309468] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:59:00.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:59:00.477 [DEBUG] [Thread-309468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:59:00.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:59:00.530 [DEBUG] [Thread-309468] [transport.py] [_log()] userauth is OK
2025-12-24T21:59:00.531 [DEBUG] [Thread-309468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:59:00.531 [DEBUG] [Thread-309468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:59:00.531 [DEBUG] [Thread-309468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:59:00.531 [DEBUG] [Thread-309468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:59:00.553 [INFO] [Thread-309468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:59:00.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:59:00.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:59:01.386 [DEBUG] [Thread-309468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:59:01.386 [DEBUG] [Thread-309468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:59:01.435 [DEBUG] [Thread-309468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:59:01.435 [DEBUG] [Thread-309468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:59:01.445 [DEBUG] [Thread-309468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:59:01.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:59:01.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:59:01.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:59:01.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:59:01.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:59:01.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:59:01.496 [DEBUG] [Thread-309468] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:59:10.559 [DEBUG] [Thread-309470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:59:25.851 [DEBUG] [Thread-309471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:59:31.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T21:59:31.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T21:59:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T21:59:40.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 58, 11), 6.46, 65.62, 0.0, 32.41, 15.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T21:59:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:58:11
2025-12-24T21:59:41.380 [DEBUG] [Thread-309472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:59:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T21:59:41.715 [DEBUG] [Thread-309473] [transport.py] [_log()] starting thread (client mode): 0xf578bd30
2025-12-24T21:59:41.716 [DEBUG] [Thread-309473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:59:41.723 [DEBUG] [Thread-309473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T21:59:41.723 [INFO] [Thread-309473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] client lang: <none>
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] server lang: <none>
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] kex follows: False
2025-12-24T21:59:41.733 [DEBUG] [Thread-309473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:59:41.736 [DEBUG] [Thread-309473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:59:41.736 [DEBUG] [Thread-309473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:59:41.736 [DEBUG] [Thread-309473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:59:41.736 [DEBUG] [Thread-309473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:59:41.736 [DEBUG] [Thread-309473] [transport.py] [_log()] Compression: none
2025-12-24T21:59:41.736 [DEBUG] [Thread-309473] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:59:41.774 [DEBUG] [Thread-309473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:59:41.780 [DEBUG] [Thread-309473] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:59:41.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T21:59:41.783 [DEBUG] [Thread-309473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T21:59:41.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:59:41.785 [DEBUG] [Thread-309473] [transport.py] [_log()] userauth is OK
2025-12-24T21:59:41.785 [DEBUG] [Thread-309473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:59:41.786 [DEBUG] [Thread-309473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:59:41.786 [DEBUG] [Thread-309473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T21:59:41.786 [DEBUG] [Thread-309473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:59:41.804 [INFO] [Thread-309473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:59:41.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:59:42.454 [DEBUG] [Thread-309473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:59:42.454 [DEBUG] [Thread-309473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:59:42.455 [DEBUG] [Thread-309473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T21:59:42.495 [DEBUG] [Thread-309473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:59:42.495 [DEBUG] [Thread-309473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:59:42.497 [DEBUG] [Thread-309473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:59:42.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:59:42.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T21:59:42.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T21:59:42.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T21:59:42.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:59:42.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T21:59:42.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:59:42.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:59:42.530 [DEBUG] [Thread-309473] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:59:42.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T21:59:42.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.832702 -999.00  +15.70  25.74     70  +10.30 1 1 1 1 1     0    0 2.88 -121.59 ZNESW 32.2 25.7 157.9 35.6 16.6 -21.4 16.5 -20.9 16.3 -19.7 16.6 -20.6
2025-12-24T21:59:42.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T21:59:42.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T21:59:42.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.832702
2025-12-24T21:59:42.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T21:59:42.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T21:59:42.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T21:59:42.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T21:59:42.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T21:59:42.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:58:11', tmtdew=6.46, humidity=65.62, cloud=0.0, wind=32.41, temperature=15.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:59:01', seeing=1.99, atlas_timestamp='2025-12-24T19:59:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.05924999999999869, 0.11125000000000007, 0.11924999999999919, 0.1064999999999987, 0.13949999999999996, 0.1252500000000012, 0.12100000000000044, 0.06425000000000125, 0.09750000000000014, 0.10650000000000048, 0.098749999999999, 0.01699999999999946, 0.15700000000000003, 0.09174999999999933, 0.0519999999999996, 0.07349999999999923, 0.08124999999999893, 0.1280000000000001, 0.09600000000000009, 0.04374999999999929, 0.0799999999999983, 0.10374999999999801, 0.08125000000000071, 0.0807500000000001, 0.11099999999999888, 0.10849999999999937, 0.08174999999999955, 0.08250000000000135, 0.14750000000000085, 0.06500000000000128, 0.13100000000000023, 0.08900000000000219, 0.12524999999999942], zp_timestamp='2025-12-24T19:55:00')
2025-12-24T21:59:42.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T21:59:42.665 [DEBUG] [Thread-309476] [transport.py] [_log()] starting thread (client mode): 0xfabc5ff0
2025-12-24T21:59:42.665 [DEBUG] [Thread-309476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T21:59:42.679 [DEBUG] [Thread-309476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T21:59:42.679 [INFO] [Thread-309476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T21:59:42.686 [DEBUG] [Thread-309476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T21:59:42.686 [DEBUG] [Thread-309476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T21:59:42.686 [DEBUG] [Thread-309476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T21:59:42.686 [DEBUG] [Thread-309476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:59:42.686 [DEBUG] [Thread-309476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T21:59:42.686 [DEBUG] [Thread-309476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] client lang: <none>
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] server lang: <none>
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] kex follows: False
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] Compression: none
2025-12-24T21:59:42.687 [DEBUG] [Thread-309476] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T21:59:42.771 [DEBUG] [Thread-309476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T21:59:42.771 [DEBUG] [Thread-309476] [transport.py] [_log()] Switch to new keys ...
2025-12-24T21:59:42.771 [DEBUG] [Thread-309476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T21:59:42.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T21:59:42.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T21:59:42.826 [DEBUG] [Thread-309476] [transport.py] [_log()] userauth is OK
2025-12-24T21:59:42.826 [DEBUG] [Thread-309476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T21:59:42.826 [DEBUG] [Thread-309476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T21:59:42.826 [DEBUG] [Thread-309476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T21:59:42.826 [DEBUG] [Thread-309476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T21:59:42.840 [INFO] [Thread-309476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T21:59:42.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T21:59:42.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T21:59:43.648 [DEBUG] [Thread-309476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T21:59:43.649 [DEBUG] [Thread-309476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T21:59:43.695 [DEBUG] [Thread-309476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T21:59:43.695 [DEBUG] [Thread-309476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T21:59:43.703 [DEBUG] [Thread-309476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T21:59:43.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T21:59:43.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T21:59:43.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T21:59:43.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T21:59:43.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T21:59:43.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T21:59:43.942 [DEBUG] [Thread-309476] [transport.py] [_log()] EOF in transport thread
2025-12-24T21:59:52.243 [DEBUG] [Thread-309478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:59:56.239 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:59:56.246 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T21:59:56.586 [DEBUG] [Thread-309479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:00:12.878 [DEBUG] [Thread-309480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:00:13.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:00:14.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:00:14.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:00:29.164 [DEBUG] [Thread-309481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:00:46.003 [DEBUG] [Thread-309482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:00:58.064 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:00:58.092 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:01:09.359 [DEBUG] [Thread-309483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:01:13.990 [DEBUG] [Thread-309484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:01:40.947 [DEBUG] [Thread-309485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:01:41.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 58, 11), 6.46, 65.62, 0.0, 32.41, 15.89, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:01:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:58:11
2025-12-24T22:01:59.209 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:01.121 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:05.393 [DEBUG] [Thread-309486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:25.875 [DEBUG] [Thread-309488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:25.879 [DEBUG] [Thread-309487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:02:36.533 [DEBUG] [Thread-309489] [transport.py] [_log()] starting thread (client mode): 0xf818b100
2025-12-24T22:02:36.535 [DEBUG] [Thread-309489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:02:36.536 [DEBUG] [Thread-309489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:02:36.536 [INFO] [Thread-309489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:02:36.738 [DEBUG] [Thread-309489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:02:36.738 [DEBUG] [Thread-309489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] client lang: <none>
2025-12-24T22:02:36.739 [DEBUG] [Thread-309489] [transport.py] [_log()] server lang: <none>
2025-12-24T22:02:36.743 [DEBUG] [Thread-309489] [transport.py] [_log()] kex follows: False
2025-12-24T22:02:36.743 [DEBUG] [Thread-309489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:02:36.745 [DEBUG] [Thread-309489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:02:36.746 [DEBUG] [Thread-309489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:02:36.746 [DEBUG] [Thread-309489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:02:36.746 [DEBUG] [Thread-309489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:02:36.746 [DEBUG] [Thread-309489] [transport.py] [_log()] Compression: none
2025-12-24T22:02:36.746 [DEBUG] [Thread-309489] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:02:36.907 [DEBUG] [Thread-309489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:02:36.916 [DEBUG] [Thread-309489] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:02:36.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:02:36.921 [DEBUG] [Thread-309489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:02:36.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:02:37.115 [DEBUG] [Thread-309489] [transport.py] [_log()] userauth is OK
2025-12-24T22:02:37.115 [DEBUG] [Thread-309489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:02:37.115 [DEBUG] [Thread-309489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:02:37.115 [DEBUG] [Thread-309489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:02:37.115 [DEBUG] [Thread-309489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:02:37.251 [INFO] [Thread-309489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:02:37.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:02:37.752 [DEBUG] [Thread-309489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:02:38.256 [DEBUG] [Thread-309489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:02:38.257 [DEBUG] [Thread-309489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:02:38.257 [DEBUG] [Thread-309489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:02:38.257 [DEBUG] [Thread-309489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:02:38.260 [DEBUG] [Thread-309489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:02:38.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:02:38.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:02:38.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:02:38.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:02:38.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:02:38.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:02:38.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:02:38.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:02:38.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:02:38.419 [DEBUG] [Thread-309489] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:02:38.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.834785 -999.00  +15.60  20.23     70  +10.30 1 1 1 1 1     0    0 2.80 -113.44 ZNESW 24.8 20.2 157.8 34.9 16.5 -21.4 16.3 -20.7 16.1 -19.6 16.5 -20.4
2025-12-24T22:02:38.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:02:38.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:02:38.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.834785
2025-12-24T22:02:38.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:02:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:02:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:02:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:02:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:02:38.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:58:11', tmtdew=6.46, humidity=65.62, cloud=0.0, wind=32.41, temperature=15.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T21:59:41', seeing=1.99, atlas_timestamp='2025-12-24T20:02:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.05924999999999869, 0.11125000000000007, 0.11924999999999919, 0.1064999999999987, 0.13949999999999996, 0.1252500000000012, 0.12100000000000044, 0.06425000000000125, 0.09750000000000014, 0.10650000000000048, 0.098749999999999, 0.01699999999999946, 0.15700000000000003, 0.09174999999999933, 0.0519999999999996, 0.07349999999999923, 0.08124999999999893, 0.1280000000000001, 0.09600000000000009, 0.04374999999999929, 0.0799999999999983, 0.10374999999999801, 0.08125000000000071, 0.0807500000000001, 0.11099999999999888, 0.10849999999999937, 0.08174999999999955, 0.08250000000000135, 0.14750000000000085, 0.06500000000000128, 0.13100000000000023, 0.08900000000000219, 0.12524999999999942], zp_timestamp='2025-12-24T19:58:00')
2025-12-24T22:02:38.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:02:38.666 [DEBUG] [Thread-309492] [transport.py] [_log()] starting thread (client mode): 0xfabc75b0
2025-12-24T22:02:38.667 [DEBUG] [Thread-309492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:02:38.679 [DEBUG] [Thread-309492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:02:38.679 [INFO] [Thread-309492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] client lang: <none>
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] server lang: <none>
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] kex follows: False
2025-12-24T22:02:38.758 [DEBUG] [Thread-309492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:02:38.759 [DEBUG] [Thread-309492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:02:38.759 [DEBUG] [Thread-309492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:02:38.759 [DEBUG] [Thread-309492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:02:38.759 [DEBUG] [Thread-309492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:02:38.759 [DEBUG] [Thread-309492] [transport.py] [_log()] Compression: none
2025-12-24T22:02:38.759 [DEBUG] [Thread-309492] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:02:38.781 [DEBUG] [Thread-309492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:02:38.784 [DEBUG] [Thread-309492] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:02:38.784 [DEBUG] [Thread-309492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:02:38.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:02:38.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:02:39.051 [DEBUG] [Thread-309492] [transport.py] [_log()] userauth is OK
2025-12-24T22:02:39.051 [DEBUG] [Thread-309492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:02:39.051 [DEBUG] [Thread-309492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:02:39.051 [DEBUG] [Thread-309492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:02:39.051 [DEBUG] [Thread-309492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:02:39.070 [INFO] [Thread-309492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:02:39.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:02:39.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:02:39.858 [DEBUG] [Thread-309492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:02:39.858 [DEBUG] [Thread-309492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:02:39.905 [DEBUG] [Thread-309492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:02:39.905 [DEBUG] [Thread-309492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:02:39.913 [DEBUG] [Thread-309492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:02:40.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:02:40.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:02:40.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
2025-12-24T22:02:40.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:02:40.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:02:40.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:02:40.238 [DEBUG] [Thread-309492] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:02:41.606 [DEBUG] [Thread-309494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:42.732 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:52.194 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:56.314 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:02:58.683 [DEBUG] [Thread-309495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:03:01.486 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:03:01.497 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:03:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:03:10.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:03:14.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:03:15.061 [DEBUG] [Thread-309496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:03:32.791 [DEBUG] [Thread-309497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:03:34.034 [DEBUG] [Thread-309498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:03:49.248 [DEBUG] [Thread-309499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:04:04.574 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:04:04.615 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:04:05.701 [DEBUG] [Thread-309500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:04:19.721 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:04:23.739 [DEBUG] [Thread-309501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:04:27.632 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:04:31.796 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:04:49.477 [DEBUG] [Thread-309502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:05:06.469 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:05:06.493 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:05:10.608 [DEBUG] [Thread-309503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:05:30.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 59, 40), 6.26, 66.34, 0.0, 35.82, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:05:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:59:40
2025-12-24T22:05:36.523 [DEBUG] [Thread-309504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:05:44.901 [DEBUG] [Thread-309505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:05:55.809 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:03.314 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:06.941 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:06.960 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:07.301 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:25.545 [DEBUG] [Thread-309506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:36.785 [DEBUG] [Thread-309507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:37.237 [DEBUG] [Thread-309508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:37.625 [DEBUG] [Thread-309509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:06:56.081 [DEBUG] [Thread-309510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:07:09.496 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:07:14.977 [DEBUG] [Thread-309129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:07:15.638 [DEBUG] [Thread-309511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:07:35.722 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:07:45.580 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:00.052 [DEBUG] [Thread-309512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:00.104 [DEBUG] [Thread-309513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:00.106 [DEBUG] [Thread-309128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:00.109 [DEBUG] [Thread-309514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:03.480 [DEBUG] [Thread-309513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:19.933 [DEBUG] [Thread-309511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:25.604 [DEBUG] [Thread-309515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:25.619 [DEBUG] [Thread-309516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:25.620 [DEBUG] [Thread-309516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:51.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:08:57.637 [DEBUG] [Thread-309517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:58.809 [DEBUG] [Thread-309518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:08:58.981 [DEBUG] [Thread-309519] [transport.py] [_log()] starting thread (client mode): 0xf575e170
2025-12-24T22:08:58.985 [DEBUG] [Thread-309519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:08:58.985 [DEBUG] [Thread-309519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:08:58.989 [INFO] [Thread-309519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:08:59.396 [DEBUG] [Thread-309519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] client lang: <none>
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] server lang: <none>
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] kex follows: False
2025-12-24T22:08:59.397 [DEBUG] [Thread-309519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:08:59.398 [DEBUG] [Thread-309519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:08:59.398 [DEBUG] [Thread-309519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:08:59.398 [DEBUG] [Thread-309519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:08:59.398 [DEBUG] [Thread-309519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:08:59.398 [DEBUG] [Thread-309519] [transport.py] [_log()] Compression: none
2025-12-24T22:08:59.398 [DEBUG] [Thread-309519] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:09:01.647 [DEBUG] [Thread-309519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:09:01.665 [DEBUG] [Thread-309519] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:09:01.669 [DEBUG] [Thread-309519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:09:01.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:09:01.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:09:01.689 [DEBUG] [Thread-309519] [transport.py] [_log()] userauth is OK
2025-12-24T22:09:01.690 [DEBUG] [Thread-309519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:09:01.690 [DEBUG] [Thread-309519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:09:01.690 [DEBUG] [Thread-309519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:09:01.690 [DEBUG] [Thread-309519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:09:04.042 [INFO] [Thread-309519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:09:08.099 [DEBUG] [Thread-309519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:09:08.099 [DEBUG] [Thread-309519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:09:08.101 [DEBUG] [Thread-309519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:09:08.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:09:09.509 [DEBUG] [Thread-309519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:09:09.509 [DEBUG] [Thread-309519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:09:09.512 [DEBUG] [Thread-309519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:09:10.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:09:12.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:09:13.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:09:13.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:09:13.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:09:13.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:09:13.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:09:13.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:09:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:09:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.839299 -999.00  +15.30  29.87     72  +10.40 1 1 1 1 1     0    0 2.29 -111.16 ZNESW 27.1 29.9 163.6 42.3 16.2 -21.1 16.1 -20.7 15.9 -19.4 16.2 -20.5
2025-12-24T22:09:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:09:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:09:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.839299
2025-12-24T22:09:14.558 [DEBUG] [Thread-309519] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:09:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:09:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:09:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:09:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:09:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:09:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:59:40', tmtdew=6.26, humidity=66.34, cloud=0.0, wind=35.82, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:02:16', seeing=2.0, atlas_timestamp='2025-12-24T20:08:35.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.05924999999999869, 0.11125000000000007, 0.11924999999999919, 0.1064999999999987, 0.13949999999999996, 0.1252500000000012, 0.12100000000000044, 0.06425000000000125, 0.09750000000000014, 0.10650000000000048, 0.098749999999999, 0.01699999999999946, 0.15700000000000003, 0.09174999999999933, 0.0519999999999996, 0.07349999999999923, 0.08124999999999893, 0.1280000000000001, 0.09600000000000009, 0.04374999999999929, 0.0799999999999983, 0.10374999999999801, 0.08125000000000071, 0.0807500000000001, 0.11099999999999888, 0.10849999999999937, 0.08174999999999955, 0.08250000000000135, 0.14750000000000085, 0.06500000000000128, 0.13100000000000023, 0.08900000000000219, 0.12524999999999942], zp_timestamp='2025-12-24T19:58:00')
2025-12-24T22:09:31.473 [DEBUG] [Thread-309516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:09:36.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:09:39.296 [DEBUG] [Thread-309522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:09:40.565 [DEBUG] [Thread-309523] [transport.py] [_log()] starting thread (client mode): 0xf5770d90
2025-12-24T22:09:40.567 [DEBUG] [Thread-309523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:09:40.572 [DEBUG] [Thread-309523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:09:40.573 [INFO] [Thread-309523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:09:42.048 [DEBUG] [Thread-309525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:09:44.672 [DEBUG] [Thread-309523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:09:44.672 [DEBUG] [Thread-309523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] client lang: <none>
2025-12-24T22:09:44.673 [DEBUG] [Thread-309523] [transport.py] [_log()] server lang: <none>
2025-12-24T22:09:44.674 [DEBUG] [Thread-309523] [transport.py] [_log()] kex follows: False
2025-12-24T22:09:44.964 [DEBUG] [Thread-309523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:09:44.966 [DEBUG] [Thread-309523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:09:44.966 [DEBUG] [Thread-309523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:09:44.966 [DEBUG] [Thread-309523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:09:44.967 [DEBUG] [Thread-309523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:09:44.967 [DEBUG] [Thread-309523] [transport.py] [_log()] Compression: none
2025-12-24T22:09:44.967 [DEBUG] [Thread-309523] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:09:46.935 [DEBUG] [Thread-309523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:09:46.945 [DEBUG] [Thread-309523] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:09:51.962 [DEBUG] [Thread-309523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:09:51.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:09:59.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:10:03.784 [DEBUG] [Thread-309523] [transport.py] [_log()] userauth is OK
2025-12-24T22:10:04.408 [DEBUG] [Thread-309523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:10:04.412 [DEBUG] [Thread-309523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:10:04.412 [DEBUG] [Thread-309523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:10:04.412 [DEBUG] [Thread-309523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:10:09.119 [INFO] [Thread-309523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:10:09.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:10:09.952 [DEBUG] [Thread-309523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:10:09.961 [DEBUG] [Thread-309523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:10:09.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:10:10.129 [DEBUG] [Thread-309523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:10:10.129 [DEBUG] [Thread-309523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:10:10.444 [DEBUG] [Thread-309523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:10:11.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:10:11.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:10:12.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:10:12.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:10:12.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:10:12.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:10:12.093 [DEBUG] [Thread-309523] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:11:16.361 [INFO] [MainThread] [loggingutils.py] [setup_logging()] Logging set up
2025-12-24T22:11:16.361 [INFO] [MainThread] [driver.py] [__init__()] Starting up weather service
2025-12-24T22:11:16.361 [INFO] [MainThread] [driver.py] [parse_config()] Parsing config file /usr/local/etc/weather.cfg
2025-12-24T22:11:16.361 [DEBUG] [MainThread] [driver.py] [parse_config()] Using database table current_weather
2025-12-24T22:11:16.361 [DEBUG] [MainThread] [driver.py] [__init__()] Using database table current_weather
2025-12-24T22:11:16.361 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:11:16.361 [INFO] [MainThread] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:11:16.368 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:11:18.040 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 59, 40), 6.26, 66.34, 0.0, 35.82, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:11:18.040 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:59:40
2025-12-24T22:11:18.210 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:11:18.360 [INFO] [MainThread] [driver.py] [read_atlas_file()] An error occurred: [Errno -3] Temporary failure in name resolution
2025-12-24T22:11:18.360 [ERROR] [MainThread] [driver.py] [read_atlas_file()] Error opening or reading local copy of weather.dat: [Errno 2] No such file or directory: '/tmp/weather.log'
2025-12-24T22:11:18.360 [WARNING] [MainThread] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: [Errno 2] No such file or directory: '/tmp/weather.log'
2025-12-24T22:11:18.360 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:59:40', tmtdew=6.26, humidity=66.34, cloud=0.0, wind=35.82, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:02:16', seeing=2.0, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.10074999999999967, 0.16225000000000023, 0.12425000000000175, 0.1014999999999997, 0.15249999999999986, 0.1932500000000008, 0.1429999999999989, 0.1042500000000004, 0.11249999999999893, 0.120000000000001, 0.1582499999999989, 0.08699999999999974, 0.1739999999999995, 0.14124999999999943, 0.08300000000000018, 0.03849999999999909, 0.14924999999999855, 0.1615000000000002, 0.1269999999999989, 0.040249999999998565, 0.1659999999999986, 0.1427499999999995, 0.12424999999999997, 0.07375000000000043, 0.1169999999999991, 0.11950000000000038, 0.16724999999999923, 0.18350000000000044, 0.09600000000000009, 0.07400000000000162, 0.17800000000000082, 0.08700000000000152, 0.1587499999999995], zp_timestamp='2025-12-24T20:02:00')
2025-12-24T22:11:18.360 [INFO] [poll_weather_worker] [driver.py] [poll_weather_worker()] Starting polling thread
2025-12-24T22:11:18.360 [INFO] [MainThread] [server.py] [run()] Listening on 9061
2025-12-24T22:11:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:11:18.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:11:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:11:19.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 59, 40), 6.26, 66.34, 0.0, 35.82, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:11:19.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:59:40
2025-12-24T22:11:19.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:11:21.746 [DEBUG] [Thread-1] [transport.py] [_log()] starting thread (client mode): 0xbbfcdde0
2025-12-24T22:11:21.746 [DEBUG] [Thread-1] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:11:21.767 [DEBUG] [Thread-1] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:11:21.767 [INFO] [Thread-1] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] client lang: <none>
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] server lang: <none>
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] kex follows: False
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] Compression: none
2025-12-24T22:11:21.771 [DEBUG] [Thread-1] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:11:21.788 [DEBUG] [Thread-1] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:11:21.788 [DEBUG] [Thread-1] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:11:21.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:11:21.788 [DEBUG] [Thread-1] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:11:21.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:11:21.789 [DEBUG] [Thread-1] [transport.py] [_log()] userauth is OK
2025-12-24T22:11:21.789 [DEBUG] [Thread-1] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:11:21.789 [DEBUG] [Thread-1] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:11:21.789 [DEBUG] [Thread-1] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:11:21.789 [DEBUG] [Thread-1] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:11:21.804 [INFO] [Thread-1] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:11:21.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:11:22.441 [DEBUG] [Thread-1] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:11:22.441 [DEBUG] [Thread-1] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:11:22.441 [DEBUG] [Thread-1] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:11:22.482 [DEBUG] [Thread-1] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:11:22.482 [DEBUG] [Thread-1] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:11:22.485 [DEBUG] [Thread-1] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:11:22.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:11:22.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:11:22.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:11:22.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:11:22.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:11:22.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:11:22.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:11:22.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:11:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:11:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.840688 -999.00  +15.30  22.23     72  +10.40 1 1 1 1 1     0    0 2.04 -118.50 ZNESW 25.2 22.2 162.8 36.4 16.1 -21.2 16.0 -20.7 15.9 -19.4 16.2 -20.4
2025-12-24T22:11:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:11:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:11:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.840688
2025-12-24T22:11:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:11:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:11:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:11:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:11:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:11:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:59:40', tmtdew=6.26, humidity=66.34, cloud=0.0, wind=35.82, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:02:16', seeing=2.0, atlas_timestamp='2025-12-24T20:10:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.16225000000000023, 0.12425000000000175, 0.1014999999999997, 0.15249999999999986, 0.1932500000000008, 0.1429999999999989, 0.1042500000000004, 0.11249999999999893, 0.120000000000001, 0.1582499999999989, 0.08699999999999974, 0.1739999999999995, 0.14124999999999943, 0.08300000000000018, 0.03849999999999909, 0.14924999999999855, 0.1615000000000002, 0.1269999999999989, 0.040249999999998565, 0.1659999999999986, 0.1427499999999995, 0.12424999999999997, 0.07375000000000043, 0.1169999999999991, 0.11950000000000038, 0.16724999999999923, 0.18350000000000044, 0.09600000000000009, 0.07400000000000162, 0.17800000000000082, 0.08700000000000152, 0.1587499999999995], zp_timestamp='2025-12-24T20:02:00')
2025-12-24T22:11:22.509 [DEBUG] [Thread-1] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:11:22.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:11:22.614 [DEBUG] [Thread-4] [transport.py] [_log()] starting thread (client mode): 0xbbfcd210
2025-12-24T22:11:22.614 [DEBUG] [Thread-4] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:11:22.628 [DEBUG] [Thread-4] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:11:22.628 [INFO] [Thread-4] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] client lang: <none>
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] server lang: <none>
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] kex follows: False
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] Compression: none
2025-12-24T22:11:22.639 [DEBUG] [Thread-4] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:11:22.694 [DEBUG] [Thread-4] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:11:22.694 [DEBUG] [Thread-4] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:11:22.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:11:22.695 [DEBUG] [Thread-4] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:11:22.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:11:22.752 [DEBUG] [Thread-4] [transport.py] [_log()] userauth is OK
2025-12-24T22:11:22.752 [DEBUG] [Thread-4] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:11:22.752 [DEBUG] [Thread-4] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:11:22.752 [DEBUG] [Thread-4] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:11:22.752 [DEBUG] [Thread-4] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:11:22.769 [INFO] [Thread-4] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:11:22.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:11:22.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:11:23.564 [DEBUG] [Thread-4] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:11:23.564 [DEBUG] [Thread-4] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:11:23.611 [DEBUG] [Thread-4] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:11:23.611 [DEBUG] [Thread-4] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:11:23.620 [DEBUG] [Thread-4] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:11:23.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:11:23.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:11:23.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:11:23.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:11:23.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:11:23.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:11:23.652 [DEBUG] [Thread-4] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:11:35.561 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:11:35.562 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:11:41.952 [DEBUG] [Thread-7 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:11:54.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:11:54.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:11:54.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
2025-12-24T22:11:54.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 59, 40), 6.26, 66.34, 0.0, 35.82, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:11:54.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:59:40
2025-12-24T22:11:54.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:11:55.099 [DEBUG] [Thread-8] [transport.py] [_log()] starting thread (client mode): 0xbbfcfd00
2025-12-24T22:11:55.099 [DEBUG] [Thread-8] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:11:55.119 [DEBUG] [Thread-8] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:11:55.119 [INFO] [Thread-8] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:11:55.122 [DEBUG] [Thread-8] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:11:55.123 [DEBUG] [Thread-8] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:11:55.123 [DEBUG] [Thread-8] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:11:55.123 [DEBUG] [Thread-8] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:11:55.123 [DEBUG] [Thread-8] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:11:55.123 [DEBUG] [Thread-8] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:11:55.123 [DEBUG] [Thread-8] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:11:55.123 [DEBUG] [Thread-8] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:11:55.123 [DEBUG] [Thread-8] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] client lang: <none>
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] server lang: <none>
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] kex follows: False
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:11:55.124 [DEBUG] [Thread-8] [transport.py] [_log()] Compression: none
2025-12-24T22:11:55.125 [DEBUG] [Thread-8] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:11:55.145 [DEBUG] [Thread-8] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:11:55.145 [DEBUG] [Thread-8] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:11:55.146 [DEBUG] [Thread-8] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:11:55.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:11:55.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:11:55.148 [DEBUG] [Thread-8] [transport.py] [_log()] userauth is OK
2025-12-24T22:11:55.148 [DEBUG] [Thread-8] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:11:55.148 [DEBUG] [Thread-8] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:11:55.148 [DEBUG] [Thread-8] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:11:55.149 [DEBUG] [Thread-8] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:11:55.169 [INFO] [Thread-8] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:11:55.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:11:55.775 [DEBUG] [Thread-8] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:11:55.775 [DEBUG] [Thread-8] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:11:55.776 [DEBUG] [Thread-8] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:11:55.816 [DEBUG] [Thread-8] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:11:55.816 [DEBUG] [Thread-8] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:11:55.819 [DEBUG] [Thread-8] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:11:55.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:11:55.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:11:55.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:11:55.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:11:55.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:11:55.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:11:55.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:11:55.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:11:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:11:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.841382 -999.00  +15.30  25.00     72  +10.40 1 1 1 1 1     0    0 2.66 -89.78 ZNESW 29.3 25.0 163.4 37.3 16.1 -21.1 16.0 -20.7 15.8 -19.4 16.1 -20.3
2025-12-24T22:11:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:11:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:11:55.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.841382
2025-12-24T22:11:55.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:11:55.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:11:55.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:11:55.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:11:55.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:11:55.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:59:40', tmtdew=6.26, humidity=66.34, cloud=0.0, wind=35.82, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:02:16', seeing=2.0, atlas_timestamp='2025-12-24T20:11:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.16225000000000023, 0.12425000000000175, 0.1014999999999997, 0.15249999999999986, 0.1932500000000008, 0.1429999999999989, 0.1042500000000004, 0.11249999999999893, 0.120000000000001, 0.1582499999999989, 0.08699999999999974, 0.1739999999999995, 0.14124999999999943, 0.08300000000000018, 0.03849999999999909, 0.14924999999999855, 0.1615000000000002, 0.1269999999999989, 0.040249999999998565, 0.1659999999999986, 0.1427499999999995, 0.12424999999999997, 0.07375000000000043, 0.1169999999999991, 0.11950000000000038, 0.16724999999999923, 0.18350000000000044, 0.09600000000000009, 0.07400000000000162, 0.17800000000000082, 0.08700000000000152, 0.1587499999999995], zp_timestamp='2025-12-24T20:02:00')
2025-12-24T22:11:55.846 [DEBUG] [Thread-8] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:11:55.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:11:55.948 [DEBUG] [Thread-11] [transport.py] [_log()] starting thread (client mode): 0xbbfcfee0
2025-12-24T22:11:55.948 [DEBUG] [Thread-11] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:11:55.963 [DEBUG] [Thread-11] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:11:55.963 [INFO] [Thread-11] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:11:55.971 [DEBUG] [Thread-11] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:11:55.971 [DEBUG] [Thread-11] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:11:55.971 [DEBUG] [Thread-11] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:11:55.971 [DEBUG] [Thread-11] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:11:55.971 [DEBUG] [Thread-11] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:11:55.971 [DEBUG] [Thread-11] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:11:55.971 [DEBUG] [Thread-11] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] client lang: <none>
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] server lang: <none>
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] kex follows: False
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] Compression: none
2025-12-24T22:11:55.972 [DEBUG] [Thread-11] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:11:56.027 [DEBUG] [Thread-11] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:11:56.027 [DEBUG] [Thread-11] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:11:56.028 [DEBUG] [Thread-11] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:11:56.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:11:56.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:11:56.083 [DEBUG] [Thread-11] [transport.py] [_log()] userauth is OK
2025-12-24T22:11:56.083 [DEBUG] [Thread-11] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:11:56.084 [DEBUG] [Thread-11] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:11:56.084 [DEBUG] [Thread-11] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:11:56.084 [DEBUG] [Thread-11] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:11:56.102 [INFO] [Thread-11] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:11:56.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:11:56.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:11:56.901 [DEBUG] [Thread-11] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:11:56.901 [DEBUG] [Thread-11] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:11:56.949 [DEBUG] [Thread-11] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:11:56.949 [DEBUG] [Thread-11] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:11:56.957 [DEBUG] [Thread-11] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:11:56.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:11:56.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:11:56.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:11:56.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:11:56.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:11:56.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:11:56.998 [DEBUG] [Thread-11] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:11:57.238 [DEBUG] [Thread-13 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:12.301 [DEBUG] [Thread-14 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:12:27.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:12:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:12:27.342 [DEBUG] [Thread-15 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 59, 40), 6.26, 66.34, 0.0, 35.82, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:12:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:59:40
2025-12-24T22:12:27.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:12:27.970 [DEBUG] [Thread-16] [transport.py] [_log()] starting thread (client mode): 0xbbfcfc70
2025-12-24T22:12:27.970 [DEBUG] [Thread-16] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:12:27.989 [DEBUG] [Thread-16] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:12:27.989 [INFO] [Thread-16] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:12:27.992 [DEBUG] [Thread-16] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:12:27.992 [DEBUG] [Thread-16] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:12:27.992 [DEBUG] [Thread-16] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:12:27.992 [DEBUG] [Thread-16] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:12:27.992 [DEBUG] [Thread-16] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:12:27.992 [DEBUG] [Thread-16] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] client lang: <none>
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] server lang: <none>
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] kex follows: False
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:12:27.993 [DEBUG] [Thread-16] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:12:27.994 [DEBUG] [Thread-16] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:12:27.994 [DEBUG] [Thread-16] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:12:27.994 [DEBUG] [Thread-16] [transport.py] [_log()] Compression: none
2025-12-24T22:12:27.994 [DEBUG] [Thread-16] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:12:28.014 [DEBUG] [Thread-16] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:12:28.014 [DEBUG] [Thread-16] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:12:28.015 [DEBUG] [Thread-16] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:12:28.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:12:28.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:12:28.017 [DEBUG] [Thread-16] [transport.py] [_log()] userauth is OK
2025-12-24T22:12:28.017 [DEBUG] [Thread-16] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:12:28.017 [DEBUG] [Thread-16] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:12:28.017 [DEBUG] [Thread-16] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:12:28.017 [DEBUG] [Thread-16] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:12:28.041 [INFO] [Thread-16] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:12:28.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:12:28.639 [DEBUG] [Thread-16] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:12:28.639 [DEBUG] [Thread-16] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:12:28.640 [DEBUG] [Thread-16] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:12:28.680 [DEBUG] [Thread-16] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:12:28.681 [DEBUG] [Thread-16] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:12:28.684 [DEBUG] [Thread-16] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:12:28.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:12:28.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:12:28.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:12:28.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:12:28.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:12:28.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:12:28.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:12:28.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:12:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:12:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.841730 -999.00  +15.30  27.71     72  +10.40 1 1 1 1 1     0    0 2.53 -93.71 ZNESW 19.9 27.7 156.6 35.4 16.1 -21.2 16.0 -20.6 15.8 -19.6 16.1 -20.4
2025-12-24T22:12:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:12:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:12:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.841730
2025-12-24T22:12:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:12:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:12:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:12:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:12:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:12:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:59:40', tmtdew=6.26, humidity=66.34, cloud=0.0, wind=35.82, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:02:16', seeing=2.0, atlas_timestamp='2025-12-24T20:12:05.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.16225000000000023, 0.12425000000000175, 0.1014999999999997, 0.15249999999999986, 0.1932500000000008, 0.1429999999999989, 0.1042500000000004, 0.11249999999999893, 0.120000000000001, 0.1582499999999989, 0.08699999999999974, 0.1739999999999995, 0.14124999999999943, 0.08300000000000018, 0.03849999999999909, 0.14924999999999855, 0.1615000000000002, 0.1269999999999989, 0.040249999999998565, 0.1659999999999986, 0.1427499999999995, 0.12424999999999997, 0.07375000000000043, 0.1169999999999991, 0.11950000000000038, 0.16724999999999923, 0.18350000000000044, 0.09600000000000009, 0.07400000000000162, 0.17800000000000082, 0.08700000000000152, 0.1587499999999995], zp_timestamp='2025-12-24T20:02:00')
2025-12-24T22:12:28.713 [DEBUG] [Thread-16] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:12:28.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:12:28.815 [DEBUG] [Thread-19] [transport.py] [_log()] starting thread (client mode): 0xbbfcfb20
2025-12-24T22:12:28.816 [DEBUG] [Thread-19] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:12:28.830 [DEBUG] [Thread-19] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:12:28.831 [INFO] [Thread-19] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:12:28.838 [DEBUG] [Thread-19] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:12:28.838 [DEBUG] [Thread-19] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:12:28.838 [DEBUG] [Thread-19] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] client lang: <none>
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] server lang: <none>
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] kex follows: False
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:12:28.839 [DEBUG] [Thread-19] [transport.py] [_log()] Compression: none
2025-12-24T22:12:28.840 [DEBUG] [Thread-19] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:12:28.899 [DEBUG] [Thread-19] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:12:28.900 [DEBUG] [Thread-19] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:12:28.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:12:28.901 [DEBUG] [Thread-19] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:12:28.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:12:28.959 [DEBUG] [Thread-19] [transport.py] [_log()] userauth is OK
2025-12-24T22:12:28.959 [DEBUG] [Thread-19] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:12:28.960 [DEBUG] [Thread-19] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:12:28.960 [DEBUG] [Thread-19] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:12:28.960 [DEBUG] [Thread-19] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:12:28.978 [INFO] [Thread-19] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:12:28.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:12:28.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:12:29.782 [DEBUG] [Thread-19] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:12:29.783 [DEBUG] [Thread-19] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:12:29.830 [DEBUG] [Thread-19] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:12:29.831 [DEBUG] [Thread-19] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:12:29.840 [DEBUG] [Thread-19] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:12:29.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:12:29.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:12:29.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:12:29.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:12:29.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:12:29.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:12:29.879 [DEBUG] [Thread-19] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:12:34.561 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:36.229 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:36.230 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:39.654 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:42.386 [DEBUG] [Thread-22 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:45.096 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:57.441 [DEBUG] [Thread-23 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:12:59.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:12:59.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:12:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:13:00.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 21, 59, 40), 6.26, 66.34, 0.0, 35.82, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:13:00.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 21:59:40
2025-12-24T22:13:00.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:13:00.875 [DEBUG] [Thread-24] [transport.py] [_log()] starting thread (client mode): 0xb9547670
2025-12-24T22:13:00.875 [DEBUG] [Thread-24] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:13:00.889 [DEBUG] [Thread-24] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:13:00.889 [INFO] [Thread-24] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] client lang: <none>
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] server lang: <none>
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] kex follows: False
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] Compression: none
2025-12-24T22:13:00.891 [DEBUG] [Thread-24] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:13:00.899 [DEBUG] [Thread-24] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:13:00.900 [DEBUG] [Thread-24] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:13:00.900 [DEBUG] [Thread-24] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:13:00.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:13:00.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:13:00.900 [DEBUG] [Thread-24] [transport.py] [_log()] userauth is OK
2025-12-24T22:13:00.900 [DEBUG] [Thread-24] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:13:00.900 [DEBUG] [Thread-24] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:13:00.900 [DEBUG] [Thread-24] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:13:00.900 [DEBUG] [Thread-24] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:13:00.910 [INFO] [Thread-24] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:13:00.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:13:01.554 [DEBUG] [Thread-24] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:13:01.554 [DEBUG] [Thread-24] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:13:01.555 [DEBUG] [Thread-24] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:13:01.596 [DEBUG] [Thread-24] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:13:01.596 [DEBUG] [Thread-24] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:13:01.598 [DEBUG] [Thread-24] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:13:01.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:13:01.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:13:01.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:13:01.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:13:01.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:13:01.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:13:01.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:13:01.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:13:01.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:13:01.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.842077 -999.00  +15.20  34.99     73  +10.40 1 1 2 1 1     0    0 3.03 -84.96 ZNESW 31.9 35.0 164.0 38.2 16.1 -21.2 15.9 -20.6 15.8 -19.5 16.1 -20.4
2025-12-24T22:13:01.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:13:01.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:13:01.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.842077
2025-12-24T22:13:01.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:13:01.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:13:01.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:13:01.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:13:01.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:13:01.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T21:59:40', tmtdew=6.26, humidity=66.34, cloud=0.0, wind=35.82, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:02:16', seeing=2.0, atlas_timestamp='2025-12-24T20:12:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.16225000000000023, 0.12425000000000175, 0.1014999999999997, 0.15249999999999986, 0.1932500000000008, 0.1429999999999989, 0.1042500000000004, 0.11249999999999893, 0.120000000000001, 0.1582499999999989, 0.08699999999999974, 0.1739999999999995, 0.14124999999999943, 0.08300000000000018, 0.03849999999999909, 0.14924999999999855, 0.1615000000000002, 0.1269999999999989, 0.040249999999998565, 0.1659999999999986, 0.1427499999999995, 0.12424999999999997, 0.07375000000000043, 0.1169999999999991, 0.11950000000000038, 0.16724999999999923, 0.18350000000000044, 0.09600000000000009, 0.07400000000000162, 0.17800000000000082, 0.08700000000000152, 0.1587499999999995], zp_timestamp='2025-12-24T20:02:00')
2025-12-24T22:13:01.619 [DEBUG] [Thread-24] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:13:01.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:13:01.716 [DEBUG] [Thread-27] [transport.py] [_log()] starting thread (client mode): 0xbbfcfc70
2025-12-24T22:13:01.716 [DEBUG] [Thread-27] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:13:01.730 [DEBUG] [Thread-27] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:13:01.730 [INFO] [Thread-27] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] client lang: <none>
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] server lang: <none>
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] kex follows: False
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] Compression: none
2025-12-24T22:13:01.739 [DEBUG] [Thread-27] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:13:01.796 [DEBUG] [Thread-27] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:13:01.796 [DEBUG] [Thread-27] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:13:01.796 [DEBUG] [Thread-27] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:13:01.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:13:01.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:13:01.853 [DEBUG] [Thread-27] [transport.py] [_log()] userauth is OK
2025-12-24T22:13:01.853 [DEBUG] [Thread-27] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:13:01.853 [DEBUG] [Thread-27] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:13:01.853 [DEBUG] [Thread-27] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:13:01.853 [DEBUG] [Thread-27] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:13:01.871 [INFO] [Thread-27] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:13:01.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:13:01.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:13:02.697 [DEBUG] [Thread-27] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:13:02.697 [DEBUG] [Thread-27] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:13:02.744 [DEBUG] [Thread-27] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:13:02.744 [DEBUG] [Thread-27] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:13:02.753 [DEBUG] [Thread-27] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:13:02.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:13:02.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:13:02.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:13:02.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:13:02.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:13:02.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:13:02.785 [DEBUG] [Thread-27] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:13:10.955 [DEBUG] [Thread-29 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:12.472 [DEBUG] [Thread-30 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:24.410 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:27.521 [DEBUG] [Thread-31 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:28.778 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:13:32.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:13:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:13:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 13, 10), 5.95, 67.67, 0.0, 35.0, 15.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:13:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:13:10
2025-12-24T22:13:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:13:33.780 [DEBUG] [Thread-32] [transport.py] [_log()] starting thread (client mode): 0xb9544a60
2025-12-24T22:13:33.780 [DEBUG] [Thread-32] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:13:33.796 [DEBUG] [Thread-32] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:13:33.796 [INFO] [Thread-32] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] client lang: <none>
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] server lang: <none>
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] kex follows: False
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:13:33.799 [DEBUG] [Thread-32] [transport.py] [_log()] Compression: none
2025-12-24T22:13:33.800 [DEBUG] [Thread-32] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:13:33.818 [DEBUG] [Thread-32] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:13:33.818 [DEBUG] [Thread-32] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:13:33.819 [DEBUG] [Thread-32] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:13:33.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:13:33.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:13:33.819 [DEBUG] [Thread-32] [transport.py] [_log()] userauth is OK
2025-12-24T22:13:33.819 [DEBUG] [Thread-32] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:13:33.820 [DEBUG] [Thread-32] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:13:33.820 [DEBUG] [Thread-32] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:13:33.820 [DEBUG] [Thread-32] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:13:33.835 [INFO] [Thread-32] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:13:33.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:13:34.494 [DEBUG] [Thread-32] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:13:34.494 [DEBUG] [Thread-32] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:13:34.495 [DEBUG] [Thread-32] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:13:34.535 [DEBUG] [Thread-32] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:13:34.536 [DEBUG] [Thread-32] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:13:34.539 [DEBUG] [Thread-32] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:13:34.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:13:34.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:13:34.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:13:34.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:13:34.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:13:34.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:13:34.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:13:34.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:13:34.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:13:34.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.842424 -999.00  +15.20  26.46     73  +10.40 1 1 1 1 1     0    0 3.05 -82.03 ZNESW 28.1 26.5 160.2 34.8 16.1 -21.1 15.9 -20.6 15.8 -19.5 16.1 -20.2
2025-12-24T22:13:34.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:13:34.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:13:34.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.842424
2025-12-24T22:13:34.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:13:34.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:13:34.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:13:34.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:13:34.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:13:34.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:13:10', tmtdew=5.95, humidity=67.67, cloud=0.0, wind=35.0, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:13:10', seeing=1.65, atlas_timestamp='2025-12-24T20:13:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1252500000000012, 0.13724999999999987, 0.13149999999999906, 0.09249999999999936, 0.1387500000000017, 0.10299999999999976, 0.06925000000000026, 0.08299999999999841, 0.10100000000000087, 0.15174999999999983, 0.07099999999999973, 0.1905000000000001, 0.13324999999999854, 0.09699999999999953, 0.05599999999999916, 0.11074999999999946, 0.1534999999999993, 0.08999999999999986, 0.062249999999998806, 0.10050000000000026, 0.1272499999999983, 0.07225000000000037, 0.09975000000000023, 0.11599999999999966, 0.1255000000000006, 0.1582499999999989, 0.10400000000000098, 0.12100000000000044, 0.20050000000000168, 0.136000000000001, 0.0860000000000003, 0.17574999999999896], zp_timestamp='2025-12-24T20:11:00')
2025-12-24T22:13:34.564 [DEBUG] [Thread-32] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:13:34.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:13:34.668 [DEBUG] [Thread-35] [transport.py] [_log()] starting thread (client mode): 0xb95452a0
2025-12-24T22:13:34.668 [DEBUG] [Thread-35] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:13:34.683 [DEBUG] [Thread-35] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:13:34.683 [INFO] [Thread-35] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:13:34.691 [DEBUG] [Thread-35] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:13:34.691 [DEBUG] [Thread-35] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:13:34.691 [DEBUG] [Thread-35] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:13:34.691 [DEBUG] [Thread-35] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:13:34.691 [DEBUG] [Thread-35] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:13:34.691 [DEBUG] [Thread-35] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:13:34.691 [DEBUG] [Thread-35] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] client lang: <none>
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] server lang: <none>
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] kex follows: False
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] Compression: none
2025-12-24T22:13:34.692 [DEBUG] [Thread-35] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:13:34.749 [DEBUG] [Thread-35] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:13:34.749 [DEBUG] [Thread-35] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:13:34.750 [DEBUG] [Thread-35] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:13:34.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:13:34.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:13:34.805 [DEBUG] [Thread-35] [transport.py] [_log()] userauth is OK
2025-12-24T22:13:34.805 [DEBUG] [Thread-35] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:13:34.806 [DEBUG] [Thread-35] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:13:34.806 [DEBUG] [Thread-35] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:13:34.806 [DEBUG] [Thread-35] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:13:34.825 [INFO] [Thread-35] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:13:34.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:13:34.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:13:35.633 [DEBUG] [Thread-35] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:13:35.633 [DEBUG] [Thread-35] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:13:35.681 [DEBUG] [Thread-35] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:13:35.682 [DEBUG] [Thread-35] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:13:35.690 [DEBUG] [Thread-35] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:13:35.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:13: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')
2025-12-24T22:13:35.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:13:35.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:13:35.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:13:35.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:13:35.726 [DEBUG] [Thread-35] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:13:36.435 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:36.437 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:42.566 [DEBUG] [Thread-37 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:47.980 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:52.434 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:57.631 [DEBUG] [Thread-38 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:13:58.496 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:14:02.882 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:14:05.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:14:05.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:14:05.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:14:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 13, 42), 5.7, 68.43, 0.0, 35.92, 15.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:14:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:13:42
2025-12-24T22:14:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:14:06.715 [DEBUG] [Thread-39] [transport.py] [_log()] starting thread (client mode): 0xb9546b90
2025-12-24T22:14:06.715 [DEBUG] [Thread-39] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:14:06.736 [DEBUG] [Thread-39] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:14:06.736 [INFO] [Thread-39] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:14:06.739 [DEBUG] [Thread-39] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:14:06.739 [DEBUG] [Thread-39] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:14:06.739 [DEBUG] [Thread-39] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:14:06.739 [DEBUG] [Thread-39] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:14:06.739 [DEBUG] [Thread-39] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] client lang: <none>
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] server lang: <none>
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] kex follows: False
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] Compression: none
2025-12-24T22:14:06.740 [DEBUG] [Thread-39] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:14:06.758 [DEBUG] [Thread-39] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:14:06.759 [DEBUG] [Thread-39] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:14:06.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:14:06.760 [DEBUG] [Thread-39] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:14:06.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:14:06.801 [DEBUG] [Thread-39] [transport.py] [_log()] userauth is OK
2025-12-24T22:14:06.801 [DEBUG] [Thread-39] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:14:06.801 [DEBUG] [Thread-39] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:14:06.802 [DEBUG] [Thread-39] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:14:06.802 [DEBUG] [Thread-39] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:14:06.827 [INFO] [Thread-39] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:14:06.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:14:07.460 [DEBUG] [Thread-39] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:14:07.460 [DEBUG] [Thread-39] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:14:07.460 [DEBUG] [Thread-39] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:14:07.501 [DEBUG] [Thread-39] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:14:07.501 [DEBUG] [Thread-39] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:14:07.504 [DEBUG] [Thread-39] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:14:07.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:14:07.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:14:07.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:14:07.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:14:07.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:14:07.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:14:07.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:14:07.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:14:07.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:14:07.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.842771 -999.00  +15.20  18.45     73  +10.40 1 1 1 1 1     0    0 3.05 -78.17 ZNESW 23.3 18.4 146.7 37.0 16.1 -21.0 15.9 -20.9 15.8 -19.4 16.1 -20.2
2025-12-24T22:14:07.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:14:07.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:14:07.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.842771
2025-12-24T22:14:07.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:14:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:14:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:14:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:14:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:14:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:13:42', tmtdew=5.7, humidity=68.43, cloud=0.0, wind=35.92, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:13:43', seeing=1.78, atlas_timestamp='2025-12-24T20:13:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1252500000000012, 0.13724999999999987, 0.13149999999999906, 0.09249999999999936, 0.1387500000000017, 0.10299999999999976, 0.06925000000000026, 0.08299999999999841, 0.10100000000000087, 0.15174999999999983, 0.07099999999999973, 0.1905000000000001, 0.13324999999999854, 0.09699999999999953, 0.05599999999999916, 0.11074999999999946, 0.1534999999999993, 0.08999999999999986, 0.062249999999998806, 0.10050000000000026, 0.1272499999999983, 0.07225000000000037, 0.09975000000000023, 0.11599999999999966, 0.1255000000000006, 0.1582499999999989, 0.10400000000000098, 0.12100000000000044, 0.20050000000000168, 0.136000000000001, 0.0860000000000003, 0.17574999999999896], zp_timestamp='2025-12-24T20:11:00')
2025-12-24T22:14:07.541 [DEBUG] [Thread-39] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:14:07.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:14:07.646 [DEBUG] [Thread-42] [transport.py] [_log()] starting thread (client mode): 0xb9547070
2025-12-24T22:14:07.646 [DEBUG] [Thread-42] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:14:07.661 [DEBUG] [Thread-42] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:14:07.661 [INFO] [Thread-42] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:14:07.669 [DEBUG] [Thread-42] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] client lang: <none>
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] server lang: <none>
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] kex follows: False
2025-12-24T22:14:07.670 [DEBUG] [Thread-42] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:14:07.671 [DEBUG] [Thread-42] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:14:07.671 [DEBUG] [Thread-42] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:14:07.671 [DEBUG] [Thread-42] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:14:07.671 [DEBUG] [Thread-42] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:14:07.671 [DEBUG] [Thread-42] [transport.py] [_log()] Compression: none
2025-12-24T22:14:07.671 [DEBUG] [Thread-42] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:14:07.731 [DEBUG] [Thread-42] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:14:07.732 [DEBUG] [Thread-42] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:14:07.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:14:07.733 [DEBUG] [Thread-42] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:14:07.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:14:07.788 [DEBUG] [Thread-42] [transport.py] [_log()] userauth is OK
2025-12-24T22:14:07.789 [DEBUG] [Thread-42] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:14:07.789 [DEBUG] [Thread-42] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:14:07.789 [DEBUG] [Thread-42] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:14:07.789 [DEBUG] [Thread-42] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:14:07.810 [INFO] [Thread-42] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:14:07.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:14:07.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:14:08.632 [DEBUG] [Thread-42] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:14:08.632 [DEBUG] [Thread-42] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:14:08.682 [DEBUG] [Thread-42] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:14:08.682 [DEBUG] [Thread-42] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:14:08.692 [DEBUG] [Thread-42] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:14:08.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:14:08.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')
2025-12-24T22:14:08.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:14:08.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:14:08.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:14:08.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:14:08.735 [DEBUG] [Thread-42] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:14:11.302 [DEBUG] [Thread-44 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:14:12.671 [DEBUG] [Thread-45 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:14:27.734 [DEBUG] [Thread-46 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:14:36.639 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:14:36.639 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:14:38.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:14:38.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:14:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:14:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 14, 14), 5.68, 68.53, 0.0, 33.81, 15.36, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:14:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:14:14
2025-12-24T22:14:39.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:14:39.706 [DEBUG] [Thread-47] [transport.py] [_log()] starting thread (client mode): 0xb9545450
2025-12-24T22:14:39.707 [DEBUG] [Thread-47] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:14:39.726 [DEBUG] [Thread-47] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:14:39.726 [INFO] [Thread-47] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:14:39.729 [DEBUG] [Thread-47] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:14:39.729 [DEBUG] [Thread-47] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:14:39.729 [DEBUG] [Thread-47] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:14:39.729 [DEBUG] [Thread-47] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] client lang: <none>
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] server lang: <none>
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] kex follows: False
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] Compression: none
2025-12-24T22:14:39.730 [DEBUG] [Thread-47] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:14:39.746 [DEBUG] [Thread-47] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:14:39.746 [DEBUG] [Thread-47] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:14:39.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:14:39.747 [DEBUG] [Thread-47] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:14:39.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:14:39.750 [DEBUG] [Thread-47] [transport.py] [_log()] userauth is OK
2025-12-24T22:14:39.750 [DEBUG] [Thread-47] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:14:39.750 [DEBUG] [Thread-47] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:14:39.750 [DEBUG] [Thread-47] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:14:39.750 [DEBUG] [Thread-47] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:14:39.773 [INFO] [Thread-47] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:14:39.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:14:40.367 [DEBUG] [Thread-47] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:14:40.367 [DEBUG] [Thread-47] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:14:40.368 [DEBUG] [Thread-47] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:14:40.408 [DEBUG] [Thread-47] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:14:40.408 [DEBUG] [Thread-47] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:14:40.411 [DEBUG] [Thread-47] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:14:40.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:14:40.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:14:40.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:14:40.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:14:40.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:14:40.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:14:40.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:14:40.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:14:40.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:14:40.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.843119 -999.00  +15.20  25.07     73  +10.40 1 1 1 1 1     0    0 2.99 -81.72 ZNESW 20.0 25.1 155.0 31.8 16.1 -21.1 15.9 -20.5 15.7 -19.3 16.1 -20.2
2025-12-24T22:14:40.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:14:40.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:14:40.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.843119
2025-12-24T22:14:40.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:14:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:14:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:14:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:14:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:14:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:14:14', tmtdew=5.68, humidity=68.53, cloud=0.0, wind=33.81, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:14:15', seeing=1.55, atlas_timestamp='2025-12-24T20:14:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1252500000000012, 0.13724999999999987, 0.13149999999999906, 0.09249999999999936, 0.1387500000000017, 0.10299999999999976, 0.06925000000000026, 0.08299999999999841, 0.10100000000000087, 0.15174999999999983, 0.07099999999999973, 0.1905000000000001, 0.13324999999999854, 0.09699999999999953, 0.05599999999999916, 0.11074999999999946, 0.1534999999999993, 0.08999999999999986, 0.062249999999998806, 0.10050000000000026, 0.1272499999999983, 0.07225000000000037, 0.09975000000000023, 0.11599999999999966, 0.1255000000000006, 0.1582499999999989, 0.10400000000000098, 0.12100000000000044, 0.20050000000000168, 0.136000000000001, 0.0860000000000003, 0.17574999999999896], zp_timestamp='2025-12-24T20:11:00')
2025-12-24T22:14:40.450 [DEBUG] [Thread-47] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:14:40.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:14:42.773 [DEBUG] [Thread-50 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:14:57.840 [DEBUG] [Thread-51 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:15:11.366 [DEBUG] [Thread-52 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:15:12.882 [DEBUG] [Thread-53 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:15:27.917 [DEBUG] [Thread-54 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:15:36.843 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:15:36.844 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:15:42.964 [DEBUG] [Thread-55 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:15:58.003 [DEBUG] [Thread-56 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:16:11.436 [DEBUG] [Thread-57 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:16:13.047 [DEBUG] [Thread-58 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:16:28.088 [DEBUG] [Thread-59 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:16:37.046 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:16:37.047 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:16:43.129 [DEBUG] [Thread-60 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:16:55.253 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T22:16:58.174 [DEBUG] [Thread-61 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:17:11.498 [DEBUG] [Thread-62 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:17:13.210 [DEBUG] [Thread-63 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:17:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:17:25.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:17:25.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:17:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 16, 56), 5.64, 69.2, 0.0, 32.01, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:17:25.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:16:56
2025-12-24T22:17:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:17:26.240 [DEBUG] [Thread-64] [transport.py] [_log()] starting thread (client mode): 0xb9544df0
2025-12-24T22:17:26.240 [DEBUG] [Thread-64] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:17:26.260 [DEBUG] [Thread-64] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:17:26.260 [INFO] [Thread-64] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:17:26.263 [DEBUG] [Thread-64] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:17:26.263 [DEBUG] [Thread-64] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:17:26.263 [DEBUG] [Thread-64] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:17:26.263 [DEBUG] [Thread-64] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:17:26.263 [DEBUG] [Thread-64] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:17:26.263 [DEBUG] [Thread-64] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:17:26.263 [DEBUG] [Thread-64] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:17:26.263 [DEBUG] [Thread-64] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] client lang: <none>
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] server lang: <none>
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] kex follows: False
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] Compression: none
2025-12-24T22:17:26.264 [DEBUG] [Thread-64] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:17:26.282 [DEBUG] [Thread-64] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:17:26.283 [DEBUG] [Thread-64] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:17:26.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:17:26.284 [DEBUG] [Thread-64] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:17:26.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:17:26.325 [DEBUG] [Thread-64] [transport.py] [_log()] userauth is OK
2025-12-24T22:17:26.325 [DEBUG] [Thread-64] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:17:26.326 [DEBUG] [Thread-64] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:17:26.326 [DEBUG] [Thread-64] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:17:26.326 [DEBUG] [Thread-64] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:17:26.359 [INFO] [Thread-64] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:17:26.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:17:27.025 [DEBUG] [Thread-64] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:17:27.025 [DEBUG] [Thread-64] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:17:27.026 [DEBUG] [Thread-64] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:17:27.066 [DEBUG] [Thread-64] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:17:27.066 [DEBUG] [Thread-64] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:17:27.070 [DEBUG] [Thread-64] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:17:27.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:17:27.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:17:27.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:17:27.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:17:27.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:17:27.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:17:27.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:17:27.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:17:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:17:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.844855 -999.00  +15.20  25.62     73  +10.50 1 1 1 1 1     0    0 3.28 -69.44 ZNESW 23.7 25.6 148.3 31.5 -999.0 -999.0 15.9 -20.6 15.7 -19.2 16.0 -20.3
2025-12-24T22:17:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:17:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:17:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.844855
2025-12-24T22:17:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:17:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:17:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:17:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:17:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:17:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:16:56', tmtdew=5.64, humidity=69.2, cloud=0.0, wind=32.01, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:16:57', seeing=1.67, atlas_timestamp='2025-12-24T20:16:35.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:14:00')
2025-12-24T22:17:27.099 [DEBUG] [Thread-64] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:17:27.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:17:27.200 [DEBUG] [Thread-67] [transport.py] [_log()] starting thread (client mode): 0xbbfcfee0
2025-12-24T22:17:27.200 [DEBUG] [Thread-67] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:17:27.217 [DEBUG] [Thread-67] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:17:27.218 [INFO] [Thread-67] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:17:27.226 [DEBUG] [Thread-67] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:17:27.226 [DEBUG] [Thread-67] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:17:27.226 [DEBUG] [Thread-67] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:17:27.226 [DEBUG] [Thread-67] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:17:27.227 [DEBUG] [Thread-67] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:17:27.227 [DEBUG] [Thread-67] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:17:27.227 [DEBUG] [Thread-67] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:17:27.227 [DEBUG] [Thread-67] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:17:27.227 [DEBUG] [Thread-67] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:17:27.227 [DEBUG] [Thread-67] [transport.py] [_log()] client lang: <none>
2025-12-24T22:17:27.227 [DEBUG] [Thread-67] [transport.py] [_log()] server lang: <none>
2025-12-24T22:17:27.227 [DEBUG] [Thread-67] [transport.py] [_log()] kex follows: False
2025-12-24T22:17:27.228 [DEBUG] [Thread-67] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:17:27.228 [DEBUG] [Thread-67] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:17:27.228 [DEBUG] [Thread-67] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:17:27.228 [DEBUG] [Thread-67] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:17:27.228 [DEBUG] [Thread-67] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:17:27.228 [DEBUG] [Thread-67] [transport.py] [_log()] Compression: none
2025-12-24T22:17:27.229 [DEBUG] [Thread-67] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:17:27.287 [DEBUG] [Thread-67] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:17:27.288 [DEBUG] [Thread-67] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:17:27.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:17:27.289 [DEBUG] [Thread-67] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:17:27.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:17:27.347 [DEBUG] [Thread-67] [transport.py] [_log()] userauth is OK
2025-12-24T22:17:27.347 [DEBUG] [Thread-67] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:17:27.347 [DEBUG] [Thread-67] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:17:27.348 [DEBUG] [Thread-67] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:17:27.348 [DEBUG] [Thread-67] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:17:27.368 [INFO] [Thread-67] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:17:27.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:17:27.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:17:28.160 [DEBUG] [Thread-67] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:17:28.160 [DEBUG] [Thread-67] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:17:28.208 [DEBUG] [Thread-67] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:17:28.208 [DEBUG] [Thread-67] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:17:28.218 [DEBUG] [Thread-67] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:17:28.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:17:28.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:17:28.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:17:28.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:17:28.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:17:28.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:17:28.249 [DEBUG] [Thread-69 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:17:28.254 [DEBUG] [Thread-67] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:17:37.249 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:17:37.250 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:17:43.314 [DEBUG] [Thread-70 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:17:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:17:58.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:17:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:17:58.356 [DEBUG] [Thread-71 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:17:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 17, 29), 5.62, 69.3, 0.0, 32.64, 15.29, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:17:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:17:29
2025-12-24T22:17:59.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:17:59.272 [DEBUG] [Thread-72] [transport.py] [_log()] starting thread (client mode): 0xbbfcfb50
2025-12-24T22:17:59.272 [DEBUG] [Thread-72] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:17:59.291 [DEBUG] [Thread-72] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:17:59.291 [INFO] [Thread-72] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] client lang: <none>
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] server lang: <none>
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] kex follows: False
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:17:59.294 [DEBUG] [Thread-72] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:17:59.295 [DEBUG] [Thread-72] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:17:59.295 [DEBUG] [Thread-72] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:17:59.295 [DEBUG] [Thread-72] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:17:59.295 [DEBUG] [Thread-72] [transport.py] [_log()] Compression: none
2025-12-24T22:17:59.295 [DEBUG] [Thread-72] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:17:59.313 [DEBUG] [Thread-72] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:17:59.314 [DEBUG] [Thread-72] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:17:59.315 [DEBUG] [Thread-72] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:17:59.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:17:59.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:17:59.357 [DEBUG] [Thread-72] [transport.py] [_log()] userauth is OK
2025-12-24T22:17:59.357 [DEBUG] [Thread-72] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:17:59.358 [DEBUG] [Thread-72] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:17:59.358 [DEBUG] [Thread-72] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:17:59.358 [DEBUG] [Thread-72] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:17:59.377 [INFO] [Thread-72] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:17:59.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:18:00.145 [DEBUG] [Thread-72] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:18:00.146 [DEBUG] [Thread-72] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:18:00.146 [DEBUG] [Thread-72] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:18:00.187 [DEBUG] [Thread-72] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:18:00.187 [DEBUG] [Thread-72] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:18:00.191 [DEBUG] [Thread-72] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:18:00.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:18:00.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:18:00.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:18:00.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:18:00.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:18:00.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:18:00.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:18:00.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:18:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:18:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.845202 -999.00  +15.10  24.26     73  +10.40 1 1 1 1 1     0    0 3.30 -69.24 ZNESW 21.9 24.3 146.4 30.4 16.0 -20.9 15.8 -20.5 15.7 -19.4 16.0 -20.2
2025-12-24T22:18:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:18:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:18:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.845202
2025-12-24T22:18:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:18:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:18:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:18:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:18:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:18:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:17:29', tmtdew=5.62, humidity=69.3, cloud=0.0, wind=32.64, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:17:30', seeing=1.45, atlas_timestamp='2025-12-24T20:17:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:14:00')
2025-12-24T22:18:00.218 [DEBUG] [Thread-72] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:18:00.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:18:00.320 [DEBUG] [Thread-75] [transport.py] [_log()] starting thread (client mode): 0xb9546cb0
2025-12-24T22:18:00.320 [DEBUG] [Thread-75] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:18:00.335 [DEBUG] [Thread-75] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:18:00.335 [INFO] [Thread-75] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:18:00.342 [DEBUG] [Thread-75] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] client lang: <none>
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] server lang: <none>
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] kex follows: False
2025-12-24T22:18:00.343 [DEBUG] [Thread-75] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:18:00.344 [DEBUG] [Thread-75] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:18:00.344 [DEBUG] [Thread-75] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:18:00.344 [DEBUG] [Thread-75] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:18:00.344 [DEBUG] [Thread-75] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:18:00.344 [DEBUG] [Thread-75] [transport.py] [_log()] Compression: none
2025-12-24T22:18:00.344 [DEBUG] [Thread-75] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:18:00.402 [DEBUG] [Thread-75] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:18:00.403 [DEBUG] [Thread-75] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:18:00.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:18:00.404 [DEBUG] [Thread-75] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:18:00.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:18:00.458 [DEBUG] [Thread-75] [transport.py] [_log()] userauth is OK
2025-12-24T22:18:00.458 [DEBUG] [Thread-75] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:18:00.459 [DEBUG] [Thread-75] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:18:00.459 [DEBUG] [Thread-75] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:18:00.459 [DEBUG] [Thread-75] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:18:00.477 [INFO] [Thread-75] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:18:00.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:18:00.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:18:01.285 [DEBUG] [Thread-75] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:18:01.285 [DEBUG] [Thread-75] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:18:01.332 [DEBUG] [Thread-75] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:18:01.332 [DEBUG] [Thread-75] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:18:01.341 [DEBUG] [Thread-75] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:18:01.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:18:01.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:18:01.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:18:01.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:18:01.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:18:01.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:18:01.375 [DEBUG] [Thread-75] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:18:11.554 [DEBUG] [Thread-77 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:18:13.396 [DEBUG] [Thread-78 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:18:28.462 [DEBUG] [Thread-79 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:18:31.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:18:31.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:18:31.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:18:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 18, 2), 5.61, 69.35, 0.0, 31.44, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:18:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:18:02
2025-12-24T22:18:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:18:32.438 [DEBUG] [Thread-80] [transport.py] [_log()] starting thread (client mode): 0xb9546d40
2025-12-24T22:18:32.438 [DEBUG] [Thread-80] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:18:32.458 [DEBUG] [Thread-80] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:18:32.459 [INFO] [Thread-80] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] client lang: <none>
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] server lang: <none>
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] kex follows: False
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] Compression: none
2025-12-24T22:18:32.462 [DEBUG] [Thread-80] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:18:32.479 [DEBUG] [Thread-80] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:18:32.479 [DEBUG] [Thread-80] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:18:32.479 [DEBUG] [Thread-80] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:18:32.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:18:32.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:18:32.480 [DEBUG] [Thread-80] [transport.py] [_log()] userauth is OK
2025-12-24T22:18:32.480 [DEBUG] [Thread-80] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:18:32.480 [DEBUG] [Thread-80] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:18:32.480 [DEBUG] [Thread-80] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:18:32.480 [DEBUG] [Thread-80] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:18:32.493 [INFO] [Thread-80] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:18:32.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:18:33.168 [DEBUG] [Thread-80] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:18:33.168 [DEBUG] [Thread-80] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:18:33.168 [DEBUG] [Thread-80] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:18:33.209 [DEBUG] [Thread-80] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:18:33.209 [DEBUG] [Thread-80] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:18:33.211 [DEBUG] [Thread-80] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:18:33.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:18:33.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:18:33.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:18:33.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:18:33.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:18:33.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:18:33.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.845549 -999.00  +15.10  24.79     73  +10.40 1 1 1 1 1     0    0 3.14 -69.93 ZNESW 24.5 24.8 142.9 32.9 16.0 -20.9 15.8 -20.6 15.7 -19.3 16.0 -20.1
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.845549
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:18:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:18:02', tmtdew=5.61, humidity=69.35, cloud=0.0, wind=31.44, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:18:03', seeing=1.35, atlas_timestamp='2025-12-24T20:17:35.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:14:00')
2025-12-24T22:18:33.234 [DEBUG] [Thread-80] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:18:33.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:18:33.328 [DEBUG] [Thread-83] [transport.py] [_log()] starting thread (client mode): 0xb9545b70
2025-12-24T22:18:33.328 [DEBUG] [Thread-83] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:18:33.343 [DEBUG] [Thread-83] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:18:33.343 [INFO] [Thread-83] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] client lang: <none>
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] server lang: <none>
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] kex follows: False
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] Compression: none
2025-12-24T22:18:33.353 [DEBUG] [Thread-83] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:18:33.407 [DEBUG] [Thread-83] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:18:33.408 [DEBUG] [Thread-83] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:18:33.408 [DEBUG] [Thread-83] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:18:33.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:18:33.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:18:33.466 [DEBUG] [Thread-83] [transport.py] [_log()] userauth is OK
2025-12-24T22:18:33.466 [DEBUG] [Thread-83] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:18:33.466 [DEBUG] [Thread-83] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:18:33.466 [DEBUG] [Thread-83] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:18:33.466 [DEBUG] [Thread-83] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:18:33.484 [INFO] [Thread-83] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:18:33.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:18:33.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:18:34.263 [DEBUG] [Thread-83] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:18:34.264 [DEBUG] [Thread-83] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:18:34.313 [DEBUG] [Thread-83] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:18:34.314 [DEBUG] [Thread-83] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:18:34.323 [DEBUG] [Thread-83] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:18:34.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:18:34.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:18:34.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:18:34.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:18:34.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:18:34.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:18:34.362 [DEBUG] [Thread-83] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:18:37.451 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:18:37.452 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:18:43.500 [DEBUG] [Thread-85 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:18:58.566 [DEBUG] [Thread-86 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:19:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:19:04.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:19:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:19:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 18, 34), 5.49, 69.42, 0.0, 29.4, 15.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:19:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:18:34
2025-12-24T22:19:05.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:19:05.353 [DEBUG] [Thread-87] [transport.py] [_log()] starting thread (client mode): 0xbbfcfb80
2025-12-24T22:19:05.353 [DEBUG] [Thread-87] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:19:05.371 [DEBUG] [Thread-87] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:19:05.371 [INFO] [Thread-87] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] client lang: <none>
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] server lang: <none>
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] kex follows: False
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:19:05.374 [DEBUG] [Thread-87] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:19:05.375 [DEBUG] [Thread-87] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:19:05.375 [DEBUG] [Thread-87] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:19:05.375 [DEBUG] [Thread-87] [transport.py] [_log()] Compression: none
2025-12-24T22:19:05.375 [DEBUG] [Thread-87] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:19:05.392 [DEBUG] [Thread-87] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:19:05.392 [DEBUG] [Thread-87] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:19:05.393 [DEBUG] [Thread-87] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:19:05.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:19:05.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:19:05.395 [DEBUG] [Thread-87] [transport.py] [_log()] userauth is OK
2025-12-24T22:19:05.395 [DEBUG] [Thread-87] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:19:05.395 [DEBUG] [Thread-87] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:19:05.396 [DEBUG] [Thread-87] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:19:05.396 [DEBUG] [Thread-87] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:19:05.429 [INFO] [Thread-87] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:19:05.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:19:06.222 [DEBUG] [Thread-87] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:19:06.223 [DEBUG] [Thread-87] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:19:06.223 [DEBUG] [Thread-87] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:19:06.264 [DEBUG] [Thread-87] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:19:06.264 [DEBUG] [Thread-87] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:19:06.268 [DEBUG] [Thread-87] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:19:06.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:19:06.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:19:06.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:19:06.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:19:06.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:19:06.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:19:06.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:19:06.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:19:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:19:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.846244 -999.00  +15.10  22.02     73  +10.50 1 1 1 1 1     0    0 2.99 -74.64 ZNESW 15.9 22.0 153.0 28.6 16.0 -21.0 15.8 -20.5 15.7 -19.2 16.0 -20.1
2025-12-24T22:19:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:19:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:19:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.846244
2025-12-24T22:19:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:19:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:19:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:19:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:19:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:19:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:18:34', tmtdew=5.49, humidity=69.42, cloud=0.0, wind=29.4, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:18:35', seeing=1.35, atlas_timestamp='2025-12-24T20:18:35.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:14:00')
2025-12-24T22:19:06.298 [DEBUG] [Thread-87] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:19:06.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:19:06.413 [DEBUG] [Thread-90] [transport.py] [_log()] starting thread (client mode): 0xbbfcfb20
2025-12-24T22:19:06.413 [DEBUG] [Thread-90] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:19:06.431 [DEBUG] [Thread-90] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:19:06.431 [INFO] [Thread-90] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:19:06.442 [DEBUG] [Thread-90] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] client lang: <none>
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] server lang: <none>
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] kex follows: False
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:19:06.443 [DEBUG] [Thread-90] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:19:06.444 [DEBUG] [Thread-90] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:19:06.444 [DEBUG] [Thread-90] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:19:06.444 [DEBUG] [Thread-90] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:19:06.444 [DEBUG] [Thread-90] [transport.py] [_log()] Compression: none
2025-12-24T22:19:06.444 [DEBUG] [Thread-90] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:19:06.497 [DEBUG] [Thread-90] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:19:06.498 [DEBUG] [Thread-90] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:19:06.498 [DEBUG] [Thread-90] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:19:06.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:19:06.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:19:06.552 [DEBUG] [Thread-90] [transport.py] [_log()] userauth is OK
2025-12-24T22:19:06.553 [DEBUG] [Thread-90] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:19:06.553 [DEBUG] [Thread-90] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:19:06.554 [DEBUG] [Thread-90] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:19:06.554 [DEBUG] [Thread-90] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:19:06.573 [INFO] [Thread-90] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:19:06.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:19:06.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:19:07.351 [DEBUG] [Thread-90] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:19:07.351 [DEBUG] [Thread-90] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:19:07.401 [DEBUG] [Thread-90] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:19:07.401 [DEBUG] [Thread-90] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:19:07.411 [DEBUG] [Thread-90] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:19:07.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:19:07.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:19:07.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:19:07.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:19:07.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:19:07.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:19:07.444 [DEBUG] [Thread-90] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:19:11.606 [DEBUG] [Thread-92 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:19:13.607 [DEBUG] [Thread-93 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:19:28.671 [DEBUG] [Thread-94 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:19:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:19:37.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:19:37.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:19:37.655 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:19:37.656 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:19:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 19, 6), 5.47, 69.52, 0.0, 27.72, 15.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:19:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:19:06
2025-12-24T22:19:38.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:19:38.449 [DEBUG] [Thread-95] [transport.py] [_log()] starting thread (client mode): 0xb9546aa0
2025-12-24T22:19:38.449 [DEBUG] [Thread-95] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:19:38.470 [DEBUG] [Thread-95] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:19:38.470 [INFO] [Thread-95] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:19:38.473 [DEBUG] [Thread-95] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:19:38.474 [DEBUG] [Thread-95] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:19:38.474 [DEBUG] [Thread-95] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:19:38.474 [DEBUG] [Thread-95] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:19:38.474 [DEBUG] [Thread-95] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:19:38.474 [DEBUG] [Thread-95] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:19:38.474 [DEBUG] [Thread-95] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:19:38.474 [DEBUG] [Thread-95] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:19:38.474 [DEBUG] [Thread-95] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:19:38.475 [DEBUG] [Thread-95] [transport.py] [_log()] client lang: <none>
2025-12-24T22:19:38.475 [DEBUG] [Thread-95] [transport.py] [_log()] server lang: <none>
2025-12-24T22:19:38.475 [DEBUG] [Thread-95] [transport.py] [_log()] kex follows: False
2025-12-24T22:19:38.475 [DEBUG] [Thread-95] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:19:38.475 [DEBUG] [Thread-95] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:19:38.475 [DEBUG] [Thread-95] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:19:38.475 [DEBUG] [Thread-95] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:19:38.476 [DEBUG] [Thread-95] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:19:38.476 [DEBUG] [Thread-95] [transport.py] [_log()] Compression: none
2025-12-24T22:19:38.476 [DEBUG] [Thread-95] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:19:38.495 [DEBUG] [Thread-95] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:19:38.495 [DEBUG] [Thread-95] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:19:38.496 [DEBUG] [Thread-95] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:19:38.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:19:38.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:19:38.498 [DEBUG] [Thread-95] [transport.py] [_log()] userauth is OK
2025-12-24T22:19:38.498 [DEBUG] [Thread-95] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:19:38.498 [DEBUG] [Thread-95] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:19:38.498 [DEBUG] [Thread-95] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:19:38.499 [DEBUG] [Thread-95] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:19:38.524 [INFO] [Thread-95] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:19:38.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:19:39.181 [DEBUG] [Thread-95] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:19:39.181 [DEBUG] [Thread-95] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:19:39.182 [DEBUG] [Thread-95] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:19:39.222 [DEBUG] [Thread-95] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:19:39.222 [DEBUG] [Thread-95] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:19:39.225 [DEBUG] [Thread-95] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:19:39.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:19:39.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:19:39.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:19:39.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:19:39.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:19:39.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:19:39.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:19:39.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:19:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:19:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.846591 -999.00  +15.10  21.92     73  +10.50 1 1 1 1 1     0    0 3.02 -73.17 ZNESW 18.4 21.9 150.0 28.8 15.9 -21.0 15.8 -20.5 15.7 -19.2 15.9 -20.1
2025-12-24T22:19:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:19:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:19:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.846591
2025-12-24T22:19:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:19:39.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:19:39.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:19:39.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:19:39.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:19:39.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:19:06', tmtdew=5.47, humidity=69.52, cloud=0.0, wind=27.72, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:19:07', seeing=1.37, atlas_timestamp='2025-12-24T20:19:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:17:00')
2025-12-24T22:19:39.253 [DEBUG] [Thread-95] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:19:39.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:19:39.366 [DEBUG] [Thread-98] [transport.py] [_log()] starting thread (client mode): 0xb9546410
2025-12-24T22:19:39.366 [DEBUG] [Thread-98] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:19:39.381 [DEBUG] [Thread-98] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:19:39.381 [INFO] [Thread-98] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:19:39.388 [DEBUG] [Thread-98] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] client lang: <none>
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] server lang: <none>
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] kex follows: False
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:19:39.389 [DEBUG] [Thread-98] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:19:39.390 [DEBUG] [Thread-98] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:19:39.390 [DEBUG] [Thread-98] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:19:39.390 [DEBUG] [Thread-98] [transport.py] [_log()] Compression: none
2025-12-24T22:19:39.390 [DEBUG] [Thread-98] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:19:39.445 [DEBUG] [Thread-98] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:19:39.446 [DEBUG] [Thread-98] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:19:39.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:19:39.446 [DEBUG] [Thread-98] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:19:39.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:19:39.503 [DEBUG] [Thread-98] [transport.py] [_log()] userauth is OK
2025-12-24T22:19:39.503 [DEBUG] [Thread-98] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:19:39.503 [DEBUG] [Thread-98] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:19:39.503 [DEBUG] [Thread-98] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:19:39.503 [DEBUG] [Thread-98] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:19:39.517 [INFO] [Thread-98] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:19:39.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:19:39.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:19:40.300 [DEBUG] [Thread-98] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:19:40.300 [DEBUG] [Thread-98] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:19:40.349 [DEBUG] [Thread-98] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:19:40.349 [DEBUG] [Thread-98] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:19:40.357 [DEBUG] [Thread-98] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:19:40.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:19:40.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:19:40.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:19:40.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:19:40.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:19:40.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:19:40.389 [DEBUG] [Thread-98] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:19:43.714 [DEBUG] [Thread-100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:19:58.773 [DEBUG] [Thread-101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:20:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:20:10.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:20:10.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:20:11.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 19, 38), 5.46, 69.55, 0.0, 29.38, 15.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:20:11.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:19:38
2025-12-24T22:20:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:20:11.399 [DEBUG] [Thread-102] [transport.py] [_log()] starting thread (client mode): 0xb955b4f0
2025-12-24T22:20:11.399 [DEBUG] [Thread-102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:20:11.419 [DEBUG] [Thread-102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:20:11.419 [INFO] [Thread-102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:20:11.422 [DEBUG] [Thread-102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] client lang: <none>
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] server lang: <none>
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] kex follows: False
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] Compression: none
2025-12-24T22:20:11.423 [DEBUG] [Thread-102] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:20:11.432 [DEBUG] [Thread-102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:20:11.432 [DEBUG] [Thread-102] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:20:11.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:20:11.433 [DEBUG] [Thread-102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:20:11.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:20:11.434 [DEBUG] [Thread-102] [transport.py] [_log()] userauth is OK
2025-12-24T22:20:11.434 [DEBUG] [Thread-102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:20:11.434 [DEBUG] [Thread-102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:20:11.434 [DEBUG] [Thread-102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:20:11.434 [DEBUG] [Thread-102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:20:11.448 [INFO] [Thread-102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:20:11.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:20:11.661 [DEBUG] [Thread-104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:20:12.683 [DEBUG] [Thread-102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:20:12.683 [DEBUG] [Thread-102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:20:12.683 [DEBUG] [Thread-102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:20:12.724 [DEBUG] [Thread-102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:20:12.724 [DEBUG] [Thread-102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:20:12.726 [DEBUG] [Thread-102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:20:12.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:20:12.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:20:12.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:20:12.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:20:12.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:20:12.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:20:12.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.846938 -999.00  +15.10  22.77     74  +10.50 1 1 1 1 1     0    0 3.07 -72.14 ZNESW 20.2 22.8 153.8 28.9 15.9 -21.0 15.8 -20.5 15.7 -19.3 15.9 -20.0
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.846938
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:20:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:19:38', tmtdew=5.46, humidity=69.55, cloud=0.0, wind=29.38, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:19:39', seeing=1.62, atlas_timestamp='2025-12-24T20:19:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:17:00')
2025-12-24T22:20:12.873 [DEBUG] [Thread-102] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:20:12.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:20:12.967 [DEBUG] [Thread-106] [transport.py] [_log()] starting thread (client mode): 0xb955b700
2025-12-24T22:20:12.967 [DEBUG] [Thread-106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:20:12.988 [DEBUG] [Thread-106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:20:12.988 [INFO] [Thread-106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] client lang: <none>
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] server lang: <none>
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] kex follows: False
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] Compression: none
2025-12-24T22:20:13.001 [DEBUG] [Thread-106] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:20:13.060 [DEBUG] [Thread-106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:20:13.060 [DEBUG] [Thread-106] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:20:13.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:20:13.060 [DEBUG] [Thread-106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:20:13.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:20:13.125 [DEBUG] [Thread-106] [transport.py] [_log()] userauth is OK
2025-12-24T22:20:13.125 [DEBUG] [Thread-106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:20:13.125 [DEBUG] [Thread-106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:20:13.125 [DEBUG] [Thread-106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:20:13.125 [DEBUG] [Thread-106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:20:13.148 [INFO] [Thread-106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:20:13.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:20:13.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:20:13.817 [DEBUG] [Thread-108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:20:13.939 [DEBUG] [Thread-106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:20:13.939 [DEBUG] [Thread-106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:20:13.987 [DEBUG] [Thread-106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:20:13.987 [DEBUG] [Thread-106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:20:13.996 [DEBUG] [Thread-106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:20:14.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:20:14.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')
2025-12-24T22:20:14.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
2025-12-24T22:20:14.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:20:14.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:20:14.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:20:14.031 [DEBUG] [Thread-106] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:20:28.890 [DEBUG] [Thread-109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:20:37.858 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:20:37.859 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:20:43.924 [DEBUG] [Thread-110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:20:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:20:44.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:20:44.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:20:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 20, 10), 5.46, 69.58, 0.0, 31.11, 15.24, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:20:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:20:10
2025-12-24T22:20:44.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:20:45.081 [DEBUG] [Thread-111] [transport.py] [_log()] starting thread (client mode): 0xb955b940
2025-12-24T22:20:45.081 [DEBUG] [Thread-111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:20:45.101 [DEBUG] [Thread-111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:20:45.102 [INFO] [Thread-111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] client lang: <none>
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] server lang: <none>
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] kex follows: False
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] Compression: none
2025-12-24T22:20:45.105 [DEBUG] [Thread-111] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:20:45.121 [DEBUG] [Thread-111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:20:45.121 [DEBUG] [Thread-111] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:20:45.121 [DEBUG] [Thread-111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:20:45.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:20:45.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:20:45.122 [DEBUG] [Thread-111] [transport.py] [_log()] userauth is OK
2025-12-24T22:20:45.122 [DEBUG] [Thread-111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:20:45.122 [DEBUG] [Thread-111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:20:45.122 [DEBUG] [Thread-111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:20:45.122 [DEBUG] [Thread-111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:20:45.131 [INFO] [Thread-111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:20:45.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:20:45.761 [DEBUG] [Thread-111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:20:45.761 [DEBUG] [Thread-111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:20:45.761 [DEBUG] [Thread-111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:20:45.802 [DEBUG] [Thread-111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:20:45.802 [DEBUG] [Thread-111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:20:45.805 [DEBUG] [Thread-111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:20:45.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:20:45.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:20:45.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:20:45.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:20:45.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:20:45.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:20:45.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:20:45.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:20:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:20:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.847285 -999.00  +15.10  18.04     74  +10.50 1 1 1 1 1     0    0 3.03 -70.02 ZNESW 18.8 18.0 147.8 30.1 15.9 -21.0 15.8 -20.4 15.6 -19.1 15.9 -20.0
2025-12-24T22:20:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:20:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:20:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.847285
2025-12-24T22:20:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:20:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:20:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:20:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:20:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:20:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:20:10', tmtdew=5.46, humidity=69.58, cloud=0.0, wind=31.11, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:20:43', seeing=1.35, atlas_timestamp='2025-12-24T20:20:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:17:00')
2025-12-24T22:20:45.830 [DEBUG] [Thread-111] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:20:45.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:20:45.932 [DEBUG] [Thread-114] [transport.py] [_log()] starting thread (client mode): 0xb9547460
2025-12-24T22:20:45.933 [DEBUG] [Thread-114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:20:45.946 [DEBUG] [Thread-114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:20:45.946 [INFO] [Thread-114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:20:45.953 [DEBUG] [Thread-114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:20:45.954 [DEBUG] [Thread-114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:20:45.954 [DEBUG] [Thread-114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:20:45.954 [DEBUG] [Thread-114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:20:45.954 [DEBUG] [Thread-114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:20:45.954 [DEBUG] [Thread-114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:20:45.954 [DEBUG] [Thread-114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:20:45.954 [DEBUG] [Thread-114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] client lang: <none>
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] server lang: <none>
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] kex follows: False
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:20:45.955 [DEBUG] [Thread-114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:20:45.956 [DEBUG] [Thread-114] [transport.py] [_log()] Compression: none
2025-12-24T22:20:45.956 [DEBUG] [Thread-114] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:20:46.015 [DEBUG] [Thread-114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:20:46.015 [DEBUG] [Thread-114] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:20:46.016 [DEBUG] [Thread-114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:20:46.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:20:46.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:20:46.071 [DEBUG] [Thread-114] [transport.py] [_log()] userauth is OK
2025-12-24T22:20:46.071 [DEBUG] [Thread-114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:20:46.071 [DEBUG] [Thread-114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:20:46.071 [DEBUG] [Thread-114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:20:46.072 [DEBUG] [Thread-114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:20:46.090 [INFO] [Thread-114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:20:46.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:20:46.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:20:46.896 [DEBUG] [Thread-114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:20:46.897 [DEBUG] [Thread-114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:20:46.944 [DEBUG] [Thread-114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:20:46.944 [DEBUG] [Thread-114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:20:46.953 [DEBUG] [Thread-114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:20:46.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:20:46.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:20:46.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:20:46.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:20:46.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:20:46.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:20:46.984 [DEBUG] [Thread-114] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:20:58.963 [DEBUG] [Thread-116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:21:11.734 [DEBUG] [Thread-117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:21:14.023 [DEBUG] [Thread-118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:21:17.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:21:17.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:21:17.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:21:17.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 20, 42), 5.46, 69.57, 0.0, 29.02, 15.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:21:17.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:20:42
2025-12-24T22:21:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:21:18.023 [DEBUG] [Thread-119] [transport.py] [_log()] starting thread (client mode): 0xb955b760
2025-12-24T22:21:18.024 [DEBUG] [Thread-119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:21:18.044 [DEBUG] [Thread-119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:21:18.044 [INFO] [Thread-119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] client lang: <none>
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] server lang: <none>
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] kex follows: False
2025-12-24T22:21:18.047 [DEBUG] [Thread-119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:21:18.048 [DEBUG] [Thread-119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:21:18.048 [DEBUG] [Thread-119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:21:18.048 [DEBUG] [Thread-119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:21:18.048 [DEBUG] [Thread-119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:21:18.048 [DEBUG] [Thread-119] [transport.py] [_log()] Compression: none
2025-12-24T22:21:18.048 [DEBUG] [Thread-119] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:21:18.066 [DEBUG] [Thread-119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:21:18.067 [DEBUG] [Thread-119] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:21:18.067 [DEBUG] [Thread-119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:21:18.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:21:18.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:21:18.109 [DEBUG] [Thread-119] [transport.py] [_log()] userauth is OK
2025-12-24T22:21:18.109 [DEBUG] [Thread-119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:21:18.109 [DEBUG] [Thread-119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:21:18.109 [DEBUG] [Thread-119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:21:18.109 [DEBUG] [Thread-119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:21:18.133 [INFO] [Thread-119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:21:18.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:21:18.951 [DEBUG] [Thread-119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:21:18.951 [DEBUG] [Thread-119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:21:18.951 [DEBUG] [Thread-119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:21:18.992 [DEBUG] [Thread-119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:21:18.992 [DEBUG] [Thread-119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:21:18.996 [DEBUG] [Thread-119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:21:19.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:21:19.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:21:19.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:21:19.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:21:19.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:21:19.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:21:19.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:21:19.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:21:19.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:21:19.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.847632 -999.00  +15.10  20.82     74  +10.50 1 1 1 1 1     0    0 2.96 -71.13 ZNESW 19.2 20.8 148.0 29.7 15.9 -20.8 15.8 -20.6 15.6 -19.2 15.9 -20.2
2025-12-24T22:21:19.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:21:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:21:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.847632
2025-12-24T22:21:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:21:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:21:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:21:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:21:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:21:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:20:42', tmtdew=5.46, humidity=69.57, cloud=0.0, wind=29.02, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:21:15', seeing=1.7, atlas_timestamp='2025-12-24T20:20:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:17:00')
2025-12-24T22:21:19.025 [DEBUG] [Thread-119] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:21:19.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:21:19.125 [DEBUG] [Thread-122] [transport.py] [_log()] starting thread (client mode): 0xb955a350
2025-12-24T22:21:19.125 [DEBUG] [Thread-122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:21:19.139 [DEBUG] [Thread-122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:21:19.139 [INFO] [Thread-122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:21:19.147 [DEBUG] [Thread-122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:21:19.147 [DEBUG] [Thread-122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:21:19.147 [DEBUG] [Thread-122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:21:19.147 [DEBUG] [Thread-122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] client lang: <none>
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] server lang: <none>
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] kex follows: False
2025-12-24T22:21:19.148 [DEBUG] [Thread-122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:21:19.149 [DEBUG] [Thread-122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:21:19.149 [DEBUG] [Thread-122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:21:19.149 [DEBUG] [Thread-122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:21:19.149 [DEBUG] [Thread-122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:21:19.149 [DEBUG] [Thread-122] [transport.py] [_log()] Compression: none
2025-12-24T22:21:19.149 [DEBUG] [Thread-122] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:21:19.206 [DEBUG] [Thread-122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:21:19.206 [DEBUG] [Thread-122] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:21:19.207 [DEBUG] [Thread-122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:21:19.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:21:19.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:21:19.262 [DEBUG] [Thread-122] [transport.py] [_log()] userauth is OK
2025-12-24T22:21:19.263 [DEBUG] [Thread-122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:21:19.263 [DEBUG] [Thread-122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:21:19.263 [DEBUG] [Thread-122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:21:19.263 [DEBUG] [Thread-122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:21:19.281 [INFO] [Thread-122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:21:19.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:21:19.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:21:20.123 [DEBUG] [Thread-122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:21:20.123 [DEBUG] [Thread-122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:21:20.170 [DEBUG] [Thread-122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:21:20.170 [DEBUG] [Thread-122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:21:20.180 [DEBUG] [Thread-122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:21:20.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:21:20.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:21:20.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:21:20.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:21:20.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:21:20.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:21:20.214 [DEBUG] [Thread-122] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:21:29.064 [DEBUG] [Thread-124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:21:38.060 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:21:38.061 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:21:44.132 [DEBUG] [Thread-125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:21:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:21:50.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:21:50.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:21:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 21, 47), 5.49, 69.63, 0.0, 27.67, 15.16, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:21:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:21:47
2025-12-24T22:21:51.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:21:51.229 [DEBUG] [Thread-126] [transport.py] [_log()] starting thread (client mode): 0xb9545960
2025-12-24T22:21:51.229 [DEBUG] [Thread-126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:21:51.250 [DEBUG] [Thread-126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:21:51.251 [INFO] [Thread-126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:21:51.254 [DEBUG] [Thread-126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:21:51.254 [DEBUG] [Thread-126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:21:51.254 [DEBUG] [Thread-126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:21:51.254 [DEBUG] [Thread-126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:21:51.254 [DEBUG] [Thread-126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] client lang: <none>
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] server lang: <none>
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] kex follows: False
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] Compression: none
2025-12-24T22:21:51.255 [DEBUG] [Thread-126] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:21:51.271 [DEBUG] [Thread-126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:21:51.271 [DEBUG] [Thread-126] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:21:51.272 [DEBUG] [Thread-126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:21:51.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:21:51.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:21:51.274 [DEBUG] [Thread-126] [transport.py] [_log()] userauth is OK
2025-12-24T22:21:51.274 [DEBUG] [Thread-126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:21:51.274 [DEBUG] [Thread-126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:21:51.274 [DEBUG] [Thread-126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:21:51.274 [DEBUG] [Thread-126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:21:51.297 [INFO] [Thread-126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:21:51.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:21:51.923 [DEBUG] [Thread-126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:21:51.923 [DEBUG] [Thread-126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:21:51.924 [DEBUG] [Thread-126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:21:51.964 [DEBUG] [Thread-126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:21:51.964 [DEBUG] [Thread-126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:21:51.968 [DEBUG] [Thread-126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:21:51.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:21:51.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:21:51.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:21:51.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:21:51.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:21:51.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:21:51.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:21:51.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:21:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:21:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.847980 -999.00  +15.10  26.69     73  +10.50 1 1 1 1 1     0    0 2.78 -75.48 ZNESW 26.8 26.7 137.6 31.9 15.9 -21.0 15.7 -20.5 15.6 -19.1 15.9 -20.1
2025-12-24T22:21:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:21:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:21:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.847980
2025-12-24T22:21:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:21:51.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:21:51.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:21:51.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:21:51.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:21:51.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:21:47', tmtdew=5.49, humidity=69.63, cloud=0.0, wind=27.67, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:21:47', seeing=1.71, atlas_timestamp='2025-12-24T20:21:05.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.1302500000000002, 0.13424999999999976, 0.1064999999999987, 0.12650000000000006, 0.18374999999999986, 0.13649999999999984, 0.09175000000000111, 0.09049999999999869, 0.12899999999999956, 0.18175000000000097, 0.09849999999999959, 0.1769999999999996, 0.1557499999999994, 0.0990000000000002, 0.05599999999999916, 0.12124999999999986, 0.16350000000000087, 0.11950000000000038, 0.05874999999999986, 0.1424999999999983, 0.13874999999999815, 0.09925000000000139, 0.12274999999999991, 0.14349999999999952, 0.1590000000000007, 0.16274999999999906, 0.21500000000000163, 0.15499999999999936, 0.10500000000000043, 0.20400000000000063, 0.0990000000000002, 0.23274999999999935], zp_timestamp='2025-12-24T20:17:00')
2025-12-24T22:21:51.993 [DEBUG] [Thread-126] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:21:52.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:21:52.097 [DEBUG] [Thread-129] [transport.py] [_log()] starting thread (client mode): 0xbbfcfd00
2025-12-24T22:21:52.097 [DEBUG] [Thread-129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:21:52.111 [DEBUG] [Thread-129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:21:52.111 [INFO] [Thread-129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:21:52.118 [DEBUG] [Thread-129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] client lang: <none>
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] server lang: <none>
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] kex follows: False
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:21:52.119 [DEBUG] [Thread-129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:21:52.120 [DEBUG] [Thread-129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:21:52.120 [DEBUG] [Thread-129] [transport.py] [_log()] Compression: none
2025-12-24T22:21:52.120 [DEBUG] [Thread-129] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:21:52.177 [DEBUG] [Thread-129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:21:52.177 [DEBUG] [Thread-129] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:21:52.178 [DEBUG] [Thread-129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:21:52.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:21:52.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:21:52.233 [DEBUG] [Thread-129] [transport.py] [_log()] userauth is OK
2025-12-24T22:21:52.233 [DEBUG] [Thread-129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:21:52.233 [DEBUG] [Thread-129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:21:52.233 [DEBUG] [Thread-129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:21:52.233 [DEBUG] [Thread-129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:21:52.255 [INFO] [Thread-129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:21:52.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:21:52.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:21:53.054 [DEBUG] [Thread-129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:21:53.055 [DEBUG] [Thread-129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:21:53.103 [DEBUG] [Thread-129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:21:53.103 [DEBUG] [Thread-129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:21:53.112 [DEBUG] [Thread-129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:21:53.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:21:53.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:21:53.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:21:53.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:21:53.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:21:53.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:21:53.148 [DEBUG] [Thread-129] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:21:59.169 [DEBUG] [Thread-131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:22:11.791 [DEBUG] [Thread-132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:22:14.234 [DEBUG] [Thread-133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:22:23.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:22:23.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:22:23.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:22:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 22, 19), 5.49, 69.66, 0.0, 28.23, 15.19, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:22:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:22:19
2025-12-24T22:22:24.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:22:24.205 [DEBUG] [Thread-134] [transport.py] [_log()] starting thread (client mode): 0xb9547010
2025-12-24T22:22:24.205 [DEBUG] [Thread-134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:22:24.224 [DEBUG] [Thread-134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:22:24.225 [INFO] [Thread-134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] client lang: <none>
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] server lang: <none>
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] kex follows: False
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] Compression: none
2025-12-24T22:22:24.228 [DEBUG] [Thread-134] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:22:24.244 [DEBUG] [Thread-134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:22:24.244 [DEBUG] [Thread-134] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:22:24.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:22:24.244 [DEBUG] [Thread-134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:22:24.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:22:24.245 [DEBUG] [Thread-134] [transport.py] [_log()] userauth is OK
2025-12-24T22:22:24.245 [DEBUG] [Thread-134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:22:24.245 [DEBUG] [Thread-134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:22:24.245 [DEBUG] [Thread-134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:22:24.245 [DEBUG] [Thread-134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:22:24.260 [INFO] [Thread-134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:22:24.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:22:24.917 [DEBUG] [Thread-134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:22:24.917 [DEBUG] [Thread-134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:22:24.917 [DEBUG] [Thread-134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:22:24.957 [DEBUG] [Thread-134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:22:24.958 [DEBUG] [Thread-134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:22:24.960 [DEBUG] [Thread-134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:22:24.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:22:24.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:22:24.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:22:24.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:22:24.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:22:24.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:22:24.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.848674 -999.00  +15.10  18.71     74  +10.50 1 1 1 1 1     0    0 2.69 -78.42 ZNESW 18.4 18.7 151.4 26.4 15.9 -21.0 15.7 -20.5 15.6 -19.2 15.9 -20.2
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.848674
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:22:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:22:19', tmtdew=5.49, humidity=69.66, cloud=0.0, wind=28.23, temperature=15.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:22:19', seeing=1.86, atlas_timestamp='2025-12-24T20:22:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.12925000000000075, 0.09375000000000178, 0.1454999999999984, 0.09549999999999947, 0.14325000000000188, 0.06649999999999956, 0.06725000000000136, 0.05999999999999872, 0.0860000000000003, 0.13924999999999876, 0.1144999999999996, 0.15249999999999986, 0.13174999999999848, 0.04699999999999882, 0.04299999999999926, 0.08624999999999972, 0.13250000000000028, 0.09749999999999837, 0.03824999999999967, 0.1214999999999975, 0.13574999999999804, 0.09525000000000006, 0.08825000000000038, 0.10099999999999909, 0.14649999999999963, 0.12274999999999991, 0.14700000000000024, 0.20700000000000074, 0.12600000000000122, 0.13700000000000045, 0.040500000000001535, 0.18825000000000003], zp_timestamp='2025-12-24T20:20:00')
2025-12-24T22:22:24.979 [DEBUG] [Thread-134] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:22:25.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:22:25.071 [DEBUG] [Thread-137] [transport.py] [_log()] starting thread (client mode): 0xb9544d30
2025-12-24T22:22:25.071 [DEBUG] [Thread-137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:22:25.086 [DEBUG] [Thread-137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:22:25.086 [INFO] [Thread-137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] client lang: <none>
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] server lang: <none>
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] kex follows: False
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] Compression: none
2025-12-24T22:22:25.094 [DEBUG] [Thread-137] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:22:25.151 [DEBUG] [Thread-137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:22:25.151 [DEBUG] [Thread-137] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:22:25.151 [DEBUG] [Thread-137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:22:25.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:22:25.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:22:25.212 [DEBUG] [Thread-137] [transport.py] [_log()] userauth is OK
2025-12-24T22:22:25.212 [DEBUG] [Thread-137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:22:25.212 [DEBUG] [Thread-137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:22:25.212 [DEBUG] [Thread-137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:22:25.212 [DEBUG] [Thread-137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:22:25.230 [INFO] [Thread-137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:22:25.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:22:25.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:22:26.029 [DEBUG] [Thread-137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:22:26.029 [DEBUG] [Thread-137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:22:26.077 [DEBUG] [Thread-137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:22:26.078 [DEBUG] [Thread-137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:22:26.086 [DEBUG] [Thread-137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:22:26.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:22:26.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:22:26.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:22:26.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:22:26.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:22:26.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:22:26.118 [DEBUG] [Thread-137] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:22:29.271 [DEBUG] [Thread-139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:22:44.328 [DEBUG] [Thread-140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:22:56.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:22:56.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:22:56.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:22:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 22, 51), 5.43, 70.21, 0.0, 33.88, 15.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:22:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:22:51
2025-12-24T22:22:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:22:57.106 [DEBUG] [Thread-141] [transport.py] [_log()] starting thread (client mode): 0xb9544610
2025-12-24T22:22:57.107 [DEBUG] [Thread-141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:22:57.128 [DEBUG] [Thread-141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:22:57.129 [INFO] [Thread-141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] client lang: <none>
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] server lang: <none>
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] kex follows: False
2025-12-24T22:22:57.132 [DEBUG] [Thread-141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:22:57.133 [DEBUG] [Thread-141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:22:57.133 [DEBUG] [Thread-141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:22:57.133 [DEBUG] [Thread-141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:22:57.133 [DEBUG] [Thread-141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:22:57.133 [DEBUG] [Thread-141] [transport.py] [_log()] Compression: none
2025-12-24T22:22:57.133 [DEBUG] [Thread-141] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:22:57.154 [DEBUG] [Thread-141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:22:57.154 [DEBUG] [Thread-141] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:22:57.155 [DEBUG] [Thread-141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:22:57.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:22:57.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:22:57.157 [DEBUG] [Thread-141] [transport.py] [_log()] userauth is OK
2025-12-24T22:22:57.157 [DEBUG] [Thread-141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:22:57.157 [DEBUG] [Thread-141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:22:57.157 [DEBUG] [Thread-141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:22:57.157 [DEBUG] [Thread-141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:22:57.182 [INFO] [Thread-141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:22:57.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:22:57.834 [DEBUG] [Thread-141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:22:57.835 [DEBUG] [Thread-141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:22:57.835 [DEBUG] [Thread-141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:22:57.876 [DEBUG] [Thread-141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:22:57.876 [DEBUG] [Thread-141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:22:57.879 [DEBUG] [Thread-141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:22:57.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:22:57.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:22:57.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:22:57.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:22:57.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:22:57.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:22:57.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:22:57.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:22:57.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:22:57.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.849021 -999.00  +15.10  12.90     73  +10.50 1 1 1 1 1     0    0 2.63 -80.58 ZNESW 17.9 12.9 147.6 23.7 15.9 -20.9 15.8 -20.5 15.6 -19.3 15.8 -20.1
2025-12-24T22:22:57.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:22:57.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:22:57.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.849021
2025-12-24T22:22:57.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:22:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:22:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:22:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:22:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:22:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:22:51', tmtdew=5.43, humidity=70.21, cloud=0.0, wind=33.88, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:22:51', seeing=1.56, atlas_timestamp='2025-12-24T20:22:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.12925000000000075, 0.09375000000000178, 0.1454999999999984, 0.09549999999999947, 0.14325000000000188, 0.06649999999999956, 0.06725000000000136, 0.05999999999999872, 0.0860000000000003, 0.13924999999999876, 0.1144999999999996, 0.15249999999999986, 0.13174999999999848, 0.04699999999999882, 0.04299999999999926, 0.08624999999999972, 0.13250000000000028, 0.09749999999999837, 0.03824999999999967, 0.1214999999999975, 0.13574999999999804, 0.09525000000000006, 0.08825000000000038, 0.10099999999999909, 0.14649999999999963, 0.12274999999999991, 0.14700000000000024, 0.20700000000000074, 0.12600000000000122, 0.13700000000000045, 0.040500000000001535, 0.18825000000000003], zp_timestamp='2025-12-24T20:20:00')
2025-12-24T22:22:57.907 [DEBUG] [Thread-141] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:22:57.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:22:58.010 [DEBUG] [Thread-144] [transport.py] [_log()] starting thread (client mode): 0xb955b8b0
2025-12-24T22:22:58.011 [DEBUG] [Thread-144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:22:58.025 [DEBUG] [Thread-144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:22:58.026 [INFO] [Thread-144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:22:58.033 [DEBUG] [Thread-144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:22:58.033 [DEBUG] [Thread-144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:22:58.033 [DEBUG] [Thread-144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:22:58.033 [DEBUG] [Thread-144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] client lang: <none>
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] server lang: <none>
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] kex follows: False
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] Compression: none
2025-12-24T22:22:58.034 [DEBUG] [Thread-144] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:22:58.092 [DEBUG] [Thread-144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:22:58.092 [DEBUG] [Thread-144] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:22:58.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:22:58.094 [DEBUG] [Thread-144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:22:58.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:22:58.148 [DEBUG] [Thread-144] [transport.py] [_log()] userauth is OK
2025-12-24T22:22:58.148 [DEBUG] [Thread-144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:22:58.148 [DEBUG] [Thread-144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:22:58.148 [DEBUG] [Thread-144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:22:58.148 [DEBUG] [Thread-144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:22:58.167 [INFO] [Thread-144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:22:58.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:22:58.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:22:59.017 [DEBUG] [Thread-144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:22:59.017 [DEBUG] [Thread-144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:22:59.065 [DEBUG] [Thread-144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:22:59.065 [DEBUG] [Thread-144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:22:59.075 [DEBUG] [Thread-144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:22:59.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:22:59.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:22:59.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:22:59.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:22:59.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:22:59.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:22:59.113 [DEBUG] [Thread-144] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:22:59.375 [DEBUG] [Thread-146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:23:11.854 [DEBUG] [Thread-147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:23:14.437 [DEBUG] [Thread-148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:23:29.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:23:29.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:23:29.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:23:29.477 [DEBUG] [Thread-149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:23:29.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 23, 23), 5.41, 70.31, 0.0, 34.11, 15.18, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:23:29.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:23:23
2025-12-24T22:23:29.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:23:30.090 [DEBUG] [Thread-150] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-24T22:23:30.090 [DEBUG] [Thread-150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:23:30.110 [DEBUG] [Thread-150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:23:30.110 [INFO] [Thread-150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] client lang: <none>
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] server lang: <none>
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] kex follows: False
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:23:30.113 [DEBUG] [Thread-150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:23:30.114 [DEBUG] [Thread-150] [transport.py] [_log()] Compression: none
2025-12-24T22:23:30.114 [DEBUG] [Thread-150] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:23:30.130 [DEBUG] [Thread-150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:23:30.131 [DEBUG] [Thread-150] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:23:30.131 [DEBUG] [Thread-150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:23:30.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:23:30.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:23:30.133 [DEBUG] [Thread-150] [transport.py] [_log()] userauth is OK
2025-12-24T22:23:30.134 [DEBUG] [Thread-150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:23:30.134 [DEBUG] [Thread-150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:23:30.134 [DEBUG] [Thread-150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:23:30.134 [DEBUG] [Thread-150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:23:30.158 [INFO] [Thread-150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:23:30.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:23:30.815 [DEBUG] [Thread-150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:23:30.816 [DEBUG] [Thread-150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:23:30.816 [DEBUG] [Thread-150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:23:30.857 [DEBUG] [Thread-150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:23:30.857 [DEBUG] [Thread-150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:23:30.861 [DEBUG] [Thread-150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:23:30.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:23:30.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:23:30.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:23:30.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:23:30.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:23:30.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:23:30.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:23:30.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:23:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:23:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.849369 -999.00  +15.10  25.29     74  +10.50 1 1 1 1 1     0    0 2.44 -85.65 ZNESW 27.2 25.3 140.8 37.8 15.9 -21.0 15.8 -20.5 15.6 -19.3 15.9 -20.1
2025-12-24T22:23:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:23:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:23:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.849369
2025-12-24T22:23:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:23:30.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:23:30.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:23:30.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:23:30.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:23:30.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:23:23', tmtdew=5.41, humidity=70.31, cloud=0.0, wind=34.11, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:23:24', seeing=1.83, atlas_timestamp='2025-12-24T20:23:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.12925000000000075, 0.09375000000000178, 0.1454999999999984, 0.09549999999999947, 0.14325000000000188, 0.06649999999999956, 0.06725000000000136, 0.05999999999999872, 0.0860000000000003, 0.13924999999999876, 0.1144999999999996, 0.15249999999999986, 0.13174999999999848, 0.04699999999999882, 0.04299999999999926, 0.08624999999999972, 0.13250000000000028, 0.09749999999999837, 0.03824999999999967, 0.1214999999999975, 0.13574999999999804, 0.09525000000000006, 0.08825000000000038, 0.10099999999999909, 0.14649999999999963, 0.12274999999999991, 0.14700000000000024, 0.20700000000000074, 0.12600000000000122, 0.13700000000000045, 0.040500000000001535, 0.18825000000000003], zp_timestamp='2025-12-24T20:20:00')
2025-12-24T22:23:30.887 [DEBUG] [Thread-150] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:23:30.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:23:30.993 [DEBUG] [Thread-153] [transport.py] [_log()] starting thread (client mode): 0xb95597e0
2025-12-24T22:23:30.993 [DEBUG] [Thread-153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:23:31.013 [DEBUG] [Thread-153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:23:31.013 [INFO] [Thread-153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:23:31.021 [DEBUG] [Thread-153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:23:31.021 [DEBUG] [Thread-153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:23:31.021 [DEBUG] [Thread-153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:23:31.021 [DEBUG] [Thread-153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:23:31.021 [DEBUG] [Thread-153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:23:31.021 [DEBUG] [Thread-153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:23:31.021 [DEBUG] [Thread-153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] client lang: <none>
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] server lang: <none>
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] kex follows: False
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] Compression: none
2025-12-24T22:23:31.022 [DEBUG] [Thread-153] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:23:31.080 [DEBUG] [Thread-153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:23:31.081 [DEBUG] [Thread-153] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:23:31.082 [DEBUG] [Thread-153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:23:31.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:23:31.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:23:31.136 [DEBUG] [Thread-153] [transport.py] [_log()] userauth is OK
2025-12-24T22:23:31.136 [DEBUG] [Thread-153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:23:31.136 [DEBUG] [Thread-153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:23:31.136 [DEBUG] [Thread-153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:23:31.136 [DEBUG] [Thread-153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:23:31.155 [INFO] [Thread-153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:23:31.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:23:31.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:23:31.957 [DEBUG] [Thread-153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:23:31.958 [DEBUG] [Thread-153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:23:32.006 [DEBUG] [Thread-153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:23:32.006 [DEBUG] [Thread-153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:23:32.015 [DEBUG] [Thread-153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:23:32.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:23:32.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:23:32.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:23:32.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:23:32.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:23:32.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:23:32.052 [DEBUG] [Thread-153] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:23:44.515 [DEBUG] [Thread-155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:23:59.576 [DEBUG] [Thread-156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:24:02.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:24:02.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:24:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 23, 55), 5.41, 70.3, 0.0, 33.21, 15.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:24:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:23:55
2025-12-24T22:24:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:24:03.060 [DEBUG] [Thread-157] [transport.py] [_log()] starting thread (client mode): 0xb9559cf0
2025-12-24T22:24:03.061 [DEBUG] [Thread-157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:24:03.081 [DEBUG] [Thread-157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:24:03.081 [INFO] [Thread-157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:24:03.082 [DEBUG] [Thread-157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:24:03.082 [DEBUG] [Thread-157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] client lang: <none>
2025-12-24T22:24:03.083 [DEBUG] [Thread-157] [transport.py] [_log()] server lang: <none>
2025-12-24T22:24:03.084 [DEBUG] [Thread-157] [transport.py] [_log()] kex follows: False
2025-12-24T22:24:03.084 [DEBUG] [Thread-157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:24:03.084 [DEBUG] [Thread-157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:24:03.084 [DEBUG] [Thread-157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:24:03.084 [DEBUG] [Thread-157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:24:03.084 [DEBUG] [Thread-157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:24:03.084 [DEBUG] [Thread-157] [transport.py] [_log()] Compression: none
2025-12-24T22:24:03.084 [DEBUG] [Thread-157] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:24:03.094 [DEBUG] [Thread-157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:24:03.095 [DEBUG] [Thread-157] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:24:03.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:24:03.096 [DEBUG] [Thread-157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:24:03.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:24:03.098 [DEBUG] [Thread-157] [transport.py] [_log()] userauth is OK
2025-12-24T22:24:03.098 [DEBUG] [Thread-157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:24:03.098 [DEBUG] [Thread-157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:24:03.099 [DEBUG] [Thread-157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:24:03.099 [DEBUG] [Thread-157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:24:03.112 [INFO] [Thread-157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:24:03.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:24:03.733 [DEBUG] [Thread-157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:24:03.733 [DEBUG] [Thread-157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:24:03.734 [DEBUG] [Thread-157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:24:03.774 [DEBUG] [Thread-157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:24:03.774 [DEBUG] [Thread-157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:24:03.777 [DEBUG] [Thread-157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:24:03.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:24:03.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:24:03.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:24:03.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:24:03.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:24:03.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:24:03.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:24:03.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:24:03.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:24:03.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.849716 -999.00  +15.10  18.12     74  +10.60 1 1 1 1 1     0    0 2.48 -87.46 ZNESW 22.1 18.1 150.2 36.9 15.9 -21.0 15.7 -20.5 15.6 -19.3 15.9 -20.2
2025-12-24T22:24:03.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:24:03.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:24:03.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.849716
2025-12-24T22:24:03.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:24:03.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:24:03.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:24:03.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:24:03.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:24:03.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:23:55', tmtdew=5.41, humidity=70.3, cloud=0.0, wind=33.21, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:23:56', seeing=1.83, atlas_timestamp='2025-12-24T20:23:35.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.12925000000000075, 0.09375000000000178, 0.1454999999999984, 0.09549999999999947, 0.14325000000000188, 0.06649999999999956, 0.06725000000000136, 0.05999999999999872, 0.0860000000000003, 0.13924999999999876, 0.1144999999999996, 0.15249999999999986, 0.13174999999999848, 0.04699999999999882, 0.04299999999999926, 0.08624999999999972, 0.13250000000000028, 0.09749999999999837, 0.03824999999999967, 0.1214999999999975, 0.13574999999999804, 0.09525000000000006, 0.08825000000000038, 0.10099999999999909, 0.14649999999999963, 0.12274999999999991, 0.14700000000000024, 0.20700000000000074, 0.12600000000000122, 0.13700000000000045, 0.040500000000001535, 0.18825000000000003], zp_timestamp='2025-12-24T20:20:00')
2025-12-24T22:24:03.804 [DEBUG] [Thread-157] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:24:03.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:24:03.907 [DEBUG] [Thread-160] [transport.py] [_log()] starting thread (client mode): 0xb95589a0
2025-12-24T22:24:03.908 [DEBUG] [Thread-160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:24:03.922 [DEBUG] [Thread-160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:24:03.922 [INFO] [Thread-160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:24:03.929 [DEBUG] [Thread-160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:24:03.929 [DEBUG] [Thread-160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:24:03.929 [DEBUG] [Thread-160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:24:03.929 [DEBUG] [Thread-160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] client lang: <none>
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] server lang: <none>
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] kex follows: False
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] Compression: none
2025-12-24T22:24:03.930 [DEBUG] [Thread-160] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:24:03.991 [DEBUG] [Thread-160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:24:03.991 [DEBUG] [Thread-160] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:24:03.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:24:03.992 [DEBUG] [Thread-160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:24:03.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:24:04.047 [DEBUG] [Thread-160] [transport.py] [_log()] userauth is OK
2025-12-24T22:24:04.047 [DEBUG] [Thread-160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:24:04.047 [DEBUG] [Thread-160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:24:04.047 [DEBUG] [Thread-160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:24:04.047 [DEBUG] [Thread-160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:24:04.069 [INFO] [Thread-160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:24:04.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:24:04.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:24:04.899 [DEBUG] [Thread-160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:24:04.899 [DEBUG] [Thread-160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:24:04.947 [DEBUG] [Thread-160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:24:04.947 [DEBUG] [Thread-160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:24:04.956 [DEBUG] [Thread-160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:24:04.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:24:04.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:24:04.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:24:04.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:24:04.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:24:04.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:24:04.991 [DEBUG] [Thread-160] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:24:11.911 [DEBUG] [Thread-162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:14.620 [DEBUG] [Thread-163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:29.674 [DEBUG] [Thread-164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:35.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:24:35.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:24:35.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:24:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 24, 27), 5.4, 70.33, 0.0, 31.46, 15.09, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:24:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:24:27
2025-12-24T22:24:35.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:24:35.986 [DEBUG] [Thread-165] [transport.py] [_log()] starting thread (client mode): 0xb955aa40
2025-12-24T22:24:35.986 [DEBUG] [Thread-165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:24:36.001 [DEBUG] [Thread-165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:24:36.002 [INFO] [Thread-165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] client lang: <none>
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] server lang: <none>
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] kex follows: False
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] Compression: none
2025-12-24T22:24:36.005 [DEBUG] [Thread-165] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:24:36.023 [DEBUG] [Thread-165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:24:36.023 [DEBUG] [Thread-165] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:24:36.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:24:36.024 [DEBUG] [Thread-165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:24:36.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:24:36.026 [DEBUG] [Thread-165] [transport.py] [_log()] userauth is OK
2025-12-24T22:24:36.026 [DEBUG] [Thread-165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:24:36.026 [DEBUG] [Thread-165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:24:36.026 [DEBUG] [Thread-165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:24:36.027 [DEBUG] [Thread-165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:24:36.051 [INFO] [Thread-165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:24:36.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:24:36.636 [DEBUG] [Thread-165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:24:36.636 [DEBUG] [Thread-165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:24:36.637 [DEBUG] [Thread-165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:24:36.677 [DEBUG] [Thread-165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:24:36.677 [DEBUG] [Thread-165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:24:36.680 [DEBUG] [Thread-165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:24:36.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:24:36.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:24:36.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:24:36.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:24:36.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:24:36.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:24:36.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:24:36.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:24:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:24:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.850063 -999.00  +15.10  22.81     74  +10.60 1 1 1 1 1     0    0 2.27 -86.04 ZNESW 28.7 22.8 157.4 28.9 15.8 -20.9 15.7 -20.5 15.6 -19.3 15.8 -20.2
2025-12-24T22:24:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:24:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:24:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.850063
2025-12-24T22:24:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:24:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:24:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:24:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:24:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:24:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:24:27', tmtdew=5.4, humidity=70.33, cloud=0.0, wind=31.46, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:24:28', seeing=1.51, atlas_timestamp='2025-12-24T20:24:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.12925000000000075, 0.09375000000000178, 0.1454999999999984, 0.09549999999999947, 0.14325000000000188, 0.06649999999999956, 0.06725000000000136, 0.05999999999999872, 0.0860000000000003, 0.13924999999999876, 0.1144999999999996, 0.15249999999999986, 0.13174999999999848, 0.04699999999999882, 0.04299999999999926, 0.08624999999999972, 0.13250000000000028, 0.09749999999999837, 0.03824999999999967, 0.1214999999999975, 0.13574999999999804, 0.09525000000000006, 0.08825000000000038, 0.10099999999999909, 0.14649999999999963, 0.12274999999999991, 0.14700000000000024, 0.20700000000000074, 0.12600000000000122, 0.13700000000000045, 0.040500000000001535, 0.18825000000000003], zp_timestamp='2025-12-24T20:20:00')
2025-12-24T22:24:36.708 [DEBUG] [Thread-165] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:24:36.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:24:36.806 [DEBUG] [Thread-168] [transport.py] [_log()] starting thread (client mode): 0xb95595a0
2025-12-24T22:24:36.806 [DEBUG] [Thread-168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:24:36.822 [DEBUG] [Thread-168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:24:36.822 [INFO] [Thread-168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:24:36.830 [DEBUG] [Thread-168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:24:36.830 [DEBUG] [Thread-168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:24:36.830 [DEBUG] [Thread-168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] client lang: <none>
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] server lang: <none>
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] kex follows: False
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:24:36.831 [DEBUG] [Thread-168] [transport.py] [_log()] Compression: none
2025-12-24T22:24:36.832 [DEBUG] [Thread-168] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:24:36.891 [DEBUG] [Thread-168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:24:36.892 [DEBUG] [Thread-168] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:24:36.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:24:36.893 [DEBUG] [Thread-168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:24:36.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:24:36.946 [DEBUG] [Thread-168] [transport.py] [_log()] userauth is OK
2025-12-24T22:24:36.947 [DEBUG] [Thread-168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:24:36.947 [DEBUG] [Thread-168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:24:36.947 [DEBUG] [Thread-168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:24:36.947 [DEBUG] [Thread-168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:24:36.965 [INFO] [Thread-168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:24:36.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:24:36.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:24:37.753 [DEBUG] [Thread-168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:24:37.754 [DEBUG] [Thread-168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:24:37.802 [DEBUG] [Thread-168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:24:37.802 [DEBUG] [Thread-168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:24:37.812 [DEBUG] [Thread-168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:24:37.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:24:37.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:24:37.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:24:37.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:24:37.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:24:37.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:24:37.848 [DEBUG] [Thread-168] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:24:41.351 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:41.352 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:44.715 [DEBUG] [Thread-171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:52.272 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:52.273 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:24:59.781 [DEBUG] [Thread-173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:07.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:25:07.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:25:07.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
2025-12-24T22:25:08.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 24, 59), 5.34, 70.36, 0.0, 26.59, 15.14, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:25:08.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:24:59
2025-12-24T22:25:08.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:25:08.846 [DEBUG] [Thread-174] [transport.py] [_log()] starting thread (client mode): 0xb955a020
2025-12-24T22:25:08.846 [DEBUG] [Thread-174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:25:08.866 [DEBUG] [Thread-174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:25:08.866 [INFO] [Thread-174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:25:08.867 [DEBUG] [Thread-174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:25:08.867 [DEBUG] [Thread-174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:25:08.867 [DEBUG] [Thread-174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:25:08.867 [DEBUG] [Thread-174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:25:08.867 [DEBUG] [Thread-174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:25:08.867 [DEBUG] [Thread-174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] client lang: <none>
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] server lang: <none>
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] kex follows: False
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] Compression: none
2025-12-24T22:25:08.868 [DEBUG] [Thread-174] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:25:08.877 [DEBUG] [Thread-174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:25:08.877 [DEBUG] [Thread-174] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:25:08.877 [DEBUG] [Thread-174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:25:08.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:25:08.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:25:08.879 [DEBUG] [Thread-174] [transport.py] [_log()] userauth is OK
2025-12-24T22:25:08.879 [DEBUG] [Thread-174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:25:08.879 [DEBUG] [Thread-174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:25:08.879 [DEBUG] [Thread-174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:25:08.879 [DEBUG] [Thread-174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:25:08.892 [INFO] [Thread-174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:25:08.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:25:09.511 [DEBUG] [Thread-174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:25:09.511 [DEBUG] [Thread-174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:25:09.512 [DEBUG] [Thread-174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:25:09.552 [DEBUG] [Thread-174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:25:09.552 [DEBUG] [Thread-174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:25:09.560 [DEBUG] [Thread-174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:25:09.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:25:09.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:25:09.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:25:09.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:25:09.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:25:09.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:25:09.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:25:09.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:25:09.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:25:09.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.850410 -999.00  +15.10  20.85     74  +10.60 1 1 1 1 1     0    0 2.52 -80.10 ZNESW 22.4 20.9 151.0 31.2 15.9 -21.0 15.7 -20.5 15.6 -19.3 15.8 -20.1
2025-12-24T22:25:09.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:25:09.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:25:09.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.850410
2025-12-24T22:25:09.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:25:09.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:25:09.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:25:09.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:25:09.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:25:09.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:24:59', tmtdew=5.34, humidity=70.36, cloud=0.0, wind=26.59, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:25:00', seeing=1.39, atlas_timestamp='2025-12-24T20:24:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.12925000000000075, 0.09375000000000178, 0.1454999999999984, 0.09549999999999947, 0.14325000000000188, 0.06649999999999956, 0.06725000000000136, 0.05999999999999872, 0.0860000000000003, 0.13924999999999876, 0.1144999999999996, 0.15249999999999986, 0.13174999999999848, 0.04699999999999882, 0.04299999999999926, 0.08624999999999972, 0.13250000000000028, 0.09749999999999837, 0.03824999999999967, 0.1214999999999975, 0.13574999999999804, 0.09525000000000006, 0.08825000000000038, 0.10099999999999909, 0.14649999999999963, 0.12274999999999991, 0.14700000000000024, 0.20700000000000074, 0.12600000000000122, 0.13700000000000045, 0.040500000000001535, 0.18825000000000003], zp_timestamp='2025-12-24T20:20:00')
2025-12-24T22:25:09.584 [DEBUG] [Thread-174] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:25:09.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:25:09.686 [DEBUG] [Thread-177] [transport.py] [_log()] starting thread (client mode): 0xb95585e0
2025-12-24T22:25:09.687 [DEBUG] [Thread-177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:25:09.701 [DEBUG] [Thread-177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:25:09.702 [INFO] [Thread-177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:25:09.709 [DEBUG] [Thread-177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:25:09.710 [DEBUG] [Thread-177] [transport.py] [_log()] client lang: <none>
2025-12-24T22:25:09.711 [DEBUG] [Thread-177] [transport.py] [_log()] server lang: <none>
2025-12-24T22:25:09.711 [DEBUG] [Thread-177] [transport.py] [_log()] kex follows: False
2025-12-24T22:25:09.711 [DEBUG] [Thread-177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:25:09.711 [DEBUG] [Thread-177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:25:09.711 [DEBUG] [Thread-177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:25:09.711 [DEBUG] [Thread-177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:25:09.711 [DEBUG] [Thread-177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:25:09.712 [DEBUG] [Thread-177] [transport.py] [_log()] Compression: none
2025-12-24T22:25:09.712 [DEBUG] [Thread-177] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:25:09.767 [DEBUG] [Thread-177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:25:09.768 [DEBUG] [Thread-177] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:25:09.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:25:09.770 [DEBUG] [Thread-177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:25:09.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:25:09.827 [DEBUG] [Thread-177] [transport.py] [_log()] userauth is OK
2025-12-24T22:25:09.827 [DEBUG] [Thread-177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:25:09.828 [DEBUG] [Thread-177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:25:09.828 [DEBUG] [Thread-177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:25:09.828 [DEBUG] [Thread-177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:25:09.848 [INFO] [Thread-177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:25:09.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:25:09.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:25:10.658 [DEBUG] [Thread-177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:25:10.658 [DEBUG] [Thread-177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:25:10.706 [DEBUG] [Thread-177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:25:10.707 [DEBUG] [Thread-177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:25:10.716 [DEBUG] [Thread-177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:25:10.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:25:10.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:25:10.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
2025-12-24T22:25:10.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:25:10.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:25:10.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:25:10.752 [DEBUG] [Thread-177] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:25:11.978 [DEBUG] [Thread-179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:14.820 [DEBUG] [Thread-180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:29.888 [DEBUG] [Thread-181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:40.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:25:40.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:25:40.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:25:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 25, 31), 5.33, 70.45, 0.0, 28.0, 15.13, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:25:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:25:31
2025-12-24T22:25:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:25:41.808 [DEBUG] [Thread-182] [transport.py] [_log()] starting thread (client mode): 0xb955aa10
2025-12-24T22:25:41.808 [DEBUG] [Thread-182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:25:41.823 [DEBUG] [Thread-182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:25:41.823 [INFO] [Thread-182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] client lang: <none>
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] server lang: <none>
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] kex follows: False
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:25:41.826 [DEBUG] [Thread-182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:25:41.827 [DEBUG] [Thread-182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:25:41.827 [DEBUG] [Thread-182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:25:41.827 [DEBUG] [Thread-182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:25:41.827 [DEBUG] [Thread-182] [transport.py] [_log()] Compression: none
2025-12-24T22:25:41.827 [DEBUG] [Thread-182] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:25:41.838 [DEBUG] [Thread-182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:25:41.838 [DEBUG] [Thread-182] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:25:41.838 [DEBUG] [Thread-182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:25:41.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:25:41.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:25:41.839 [DEBUG] [Thread-182] [transport.py] [_log()] userauth is OK
2025-12-24T22:25:41.839 [DEBUG] [Thread-182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:25:41.839 [DEBUG] [Thread-182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:25:41.839 [DEBUG] [Thread-182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:25:41.839 [DEBUG] [Thread-182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:25:41.848 [INFO] [Thread-182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:25:41.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:25:42.410 [DEBUG] [Thread-182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:25:42.410 [DEBUG] [Thread-182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:25:42.410 [DEBUG] [Thread-182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:25:42.450 [DEBUG] [Thread-182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:25:42.450 [DEBUG] [Thread-182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:25:42.453 [DEBUG] [Thread-182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:25:42.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:25:42.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:25:42.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:25:42.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:25:42.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:25:42.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:25:42.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.851104 -999.00  +15.10  26.53     74  +10.60 1 1 1 1 1     0    0 2.67 -75.23 ZNESW 25.9 26.5 164.3 31.5 15.8 -21.0 15.7 -20.7 15.5 -19.4 15.8 -20.2
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.851104
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:25:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:25:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:25:31', tmtdew=5.33, humidity=70.45, cloud=0.0, wind=28.0, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:25:32', seeing=1.66, atlas_timestamp='2025-12-24T20:25:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:23:00')
2025-12-24T22:25:42.471 [DEBUG] [Thread-182] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:25:42.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:25:42.562 [DEBUG] [Thread-185] [transport.py] [_log()] starting thread (client mode): 0xb955a080
2025-12-24T22:25:42.563 [DEBUG] [Thread-185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:25:42.576 [DEBUG] [Thread-185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:25:42.576 [INFO] [Thread-185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] client lang: <none>
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] server lang: <none>
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] kex follows: False
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] Compression: none
2025-12-24T22:25:42.584 [DEBUG] [Thread-185] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:25:42.644 [DEBUG] [Thread-185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:25:42.644 [DEBUG] [Thread-185] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:25:42.644 [DEBUG] [Thread-185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:25:42.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:25:42.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:25:42.702 [DEBUG] [Thread-185] [transport.py] [_log()] userauth is OK
2025-12-24T22:25:42.702 [DEBUG] [Thread-185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:25:42.702 [DEBUG] [Thread-185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:25:42.702 [DEBUG] [Thread-185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:25:42.702 [DEBUG] [Thread-185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:25:42.715 [INFO] [Thread-185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:25:42.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:25:42.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:25:43.499 [DEBUG] [Thread-185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:25:43.499 [DEBUG] [Thread-185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:25:43.546 [DEBUG] [Thread-185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:25:43.546 [DEBUG] [Thread-185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:25:43.554 [DEBUG] [Thread-185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:25:43.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:25:43.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')
2025-12-24T22:25:43.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
2025-12-24T22:25:43.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:25:43.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:25:43.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:25:43.586 [DEBUG] [Thread-185] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:25:44.926 [DEBUG] [Thread-187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:45.867 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:49.026 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:52.475 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:52.477 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:54.093 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:58.527 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:25:59.984 [DEBUG] [Thread-188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:12.046 [DEBUG] [Thread-189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:26:13.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:26:13.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:26:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 26, 3), 5.34, 70.4, 0.0, 27.24, 15.08, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:26:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:26:03
2025-12-24T22:26:14.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:26:14.608 [DEBUG] [Thread-190] [transport.py] [_log()] starting thread (client mode): 0xb9559900
2025-12-24T22:26:14.608 [DEBUG] [Thread-190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:26:14.629 [DEBUG] [Thread-190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:26:14.629 [INFO] [Thread-190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] client lang: <none>
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] server lang: <none>
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] kex follows: False
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:26:14.631 [DEBUG] [Thread-190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:26:14.632 [DEBUG] [Thread-190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:26:14.632 [DEBUG] [Thread-190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:26:14.632 [DEBUG] [Thread-190] [transport.py] [_log()] Compression: none
2025-12-24T22:26:14.632 [DEBUG] [Thread-190] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:26:14.644 [DEBUG] [Thread-190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:26:14.645 [DEBUG] [Thread-190] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:26:14.645 [DEBUG] [Thread-190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:26:14.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:26:14.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:26:14.647 [DEBUG] [Thread-190] [transport.py] [_log()] userauth is OK
2025-12-24T22:26:14.647 [DEBUG] [Thread-190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:26:14.647 [DEBUG] [Thread-190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:26:14.647 [DEBUG] [Thread-190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:26:14.647 [DEBUG] [Thread-190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:26:14.682 [INFO] [Thread-190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:26:14.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:26:15.024 [DEBUG] [Thread-192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:15.298 [DEBUG] [Thread-190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:26:15.298 [DEBUG] [Thread-190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:26:15.298 [DEBUG] [Thread-190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:26:15.339 [DEBUG] [Thread-190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:26:15.339 [DEBUG] [Thread-190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:26:15.342 [DEBUG] [Thread-190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:26:15.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:26:15.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:26:15.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:26:15.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:26:15.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:26:15.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:26:15.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:26:15.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:26:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:26:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.851104 -999.00  +15.10  26.53     74  +10.60 1 1 1 1 1     0    0 2.67 -75.23 ZNESW 25.9 26.5 164.3 31.5 15.8 -21.0 15.7 -20.7 15.5 -19.4 15.8 -20.2
2025-12-24T22:26:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:26:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:26:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.851104
2025-12-24T22:26:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:26:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:26:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:26:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:26:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:26:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:26:03', tmtdew=5.34, humidity=70.4, cloud=0.0, wind=27.24, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:26:04', seeing=1.43, atlas_timestamp='2025-12-24T20:25:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:23:00')
2025-12-24T22:26:15.366 [DEBUG] [Thread-190] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:26:15.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:26:15.464 [DEBUG] [Thread-194] [transport.py] [_log()] starting thread (client mode): 0xb95584f0
2025-12-24T22:26:15.464 [DEBUG] [Thread-194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:26:15.478 [DEBUG] [Thread-194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:26:15.478 [INFO] [Thread-194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:26:15.486 [DEBUG] [Thread-194] [transport.py] [_log()] client lang: <none>
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] server lang: <none>
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] kex follows: False
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] Compression: none
2025-12-24T22:26:15.487 [DEBUG] [Thread-194] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:26:15.546 [DEBUG] [Thread-194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:26:15.546 [DEBUG] [Thread-194] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:26:15.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:26:15.547 [DEBUG] [Thread-194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:26:15.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:26:15.603 [DEBUG] [Thread-194] [transport.py] [_log()] userauth is OK
2025-12-24T22:26:15.603 [DEBUG] [Thread-194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:26:15.603 [DEBUG] [Thread-194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:26:15.603 [DEBUG] [Thread-194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:26:15.603 [DEBUG] [Thread-194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:26:15.622 [INFO] [Thread-194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:26:15.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:26:15.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:26:16.414 [DEBUG] [Thread-194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:26:16.414 [DEBUG] [Thread-194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:26:16.462 [DEBUG] [Thread-194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:26:16.462 [DEBUG] [Thread-194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:26:16.471 [DEBUG] [Thread-194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:26:16.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:26:16.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:26:16.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:26:16.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:26:16.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:26:16.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:26:16.505 [DEBUG] [Thread-194] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:26:18.005 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:22.417 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:30.063 [DEBUG] [Thread-196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:31.762 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:36.137 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:42.276 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:45.130 [DEBUG] [Thread-197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:46.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:26:46.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:26:46.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:26:46.673 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:47.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 26, 35), 5.27, 70.48, 0.0, 36.24, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:26:47.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:26:35
2025-12-24T22:26:47.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:26:47.501 [DEBUG] [Thread-198] [transport.py] [_log()] starting thread (client mode): 0xb955b760
2025-12-24T22:26:47.501 [DEBUG] [Thread-198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:26:47.521 [DEBUG] [Thread-198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:26:47.522 [INFO] [Thread-198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] client lang: <none>
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] server lang: <none>
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] kex follows: False
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:26:47.525 [DEBUG] [Thread-198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:26:47.526 [DEBUG] [Thread-198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:26:47.526 [DEBUG] [Thread-198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:26:47.526 [DEBUG] [Thread-198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:26:47.526 [DEBUG] [Thread-198] [transport.py] [_log()] Compression: none
2025-12-24T22:26:47.526 [DEBUG] [Thread-198] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:26:47.543 [DEBUG] [Thread-198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:26:47.544 [DEBUG] [Thread-198] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:26:47.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:26:47.545 [DEBUG] [Thread-198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:26:47.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:26:47.547 [DEBUG] [Thread-198] [transport.py] [_log()] userauth is OK
2025-12-24T22:26:47.548 [DEBUG] [Thread-198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:26:47.548 [DEBUG] [Thread-198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:26:47.548 [DEBUG] [Thread-198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:26:47.548 [DEBUG] [Thread-198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:26:47.573 [INFO] [Thread-198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:26:47.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:26:48.211 [DEBUG] [Thread-198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:26:48.212 [DEBUG] [Thread-198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:26:48.212 [DEBUG] [Thread-198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:26:48.252 [DEBUG] [Thread-198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:26:48.252 [DEBUG] [Thread-198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:26:48.255 [DEBUG] [Thread-198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:26:48.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:26:48.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:26:48.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:26:48.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:26:48.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:26:48.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:26:48.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:26:48.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:26:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:26:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.851452 -999.00  +15.00  21.89     74  +10.60 1 1 1 1 1     0    0 2.51 -77.57 ZNESW 22.4 21.9 156.4 33.4 15.8 -20.9 15.6 -20.5 15.5 -19.3 15.8 -20.2
2025-12-24T22:26:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:26:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:26:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.851452
2025-12-24T22:26:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:26:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:26:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:26:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:26:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:26:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:26:35', tmtdew=5.27, humidity=70.48, cloud=0.0, wind=36.24, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:26:36', seeing=1.81, atlas_timestamp='2025-12-24T20:26:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:23:00')
2025-12-24T22:26:48.284 [DEBUG] [Thread-198] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:26:48.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:26:48.385 [DEBUG] [Thread-201] [transport.py] [_log()] starting thread (client mode): 0xb9558dc0
2025-12-24T22:26:48.385 [DEBUG] [Thread-201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:26:48.399 [DEBUG] [Thread-201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:26:48.400 [INFO] [Thread-201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:26:48.407 [DEBUG] [Thread-201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:26:48.408 [DEBUG] [Thread-201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:26:48.408 [DEBUG] [Thread-201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:26:48.408 [DEBUG] [Thread-201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:26:48.408 [DEBUG] [Thread-201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] client lang: <none>
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] server lang: <none>
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] kex follows: False
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] Compression: none
2025-12-24T22:26:48.409 [DEBUG] [Thread-201] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:26:48.470 [DEBUG] [Thread-201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:26:48.470 [DEBUG] [Thread-201] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:26:48.471 [DEBUG] [Thread-201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:26:48.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:26:48.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:26:48.529 [DEBUG] [Thread-201] [transport.py] [_log()] userauth is OK
2025-12-24T22:26:48.529 [DEBUG] [Thread-201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:26:48.530 [DEBUG] [Thread-201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:26:48.530 [DEBUG] [Thread-201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:26:48.530 [DEBUG] [Thread-201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:26:48.548 [INFO] [Thread-201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:26:48.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:26:48.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:26:49.373 [DEBUG] [Thread-201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:26:49.373 [DEBUG] [Thread-201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:26:49.421 [DEBUG] [Thread-201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:26:49.421 [DEBUG] [Thread-201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:26:49.430 [DEBUG] [Thread-201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:26:49.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:26:49.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:26:49.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
2025-12-24T22:26:49.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:26:49.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:26:49.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:26:49.467 [DEBUG] [Thread-201] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:26:52.680 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:26:52.681 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:27:00.171 [DEBUG] [Thread-203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:27:12.104 [DEBUG] [Thread-204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:27:15.220 [DEBUG] [Thread-205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:27:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:27:19.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:27:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:27:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 27, 8), 5.27, 70.46, 0.0, 35.55, 14.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:27:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:27:08
2025-12-24T22:27:20.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:27:20.483 [DEBUG] [Thread-206] [transport.py] [_log()] starting thread (client mode): 0xb9559f90
2025-12-24T22:27:20.483 [DEBUG] [Thread-206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:27:20.495 [DEBUG] [Thread-206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:27:20.495 [INFO] [Thread-206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] client lang: <none>
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] server lang: <none>
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] kex follows: False
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] Compression: none
2025-12-24T22:27:20.497 [DEBUG] [Thread-206] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:27:20.505 [DEBUG] [Thread-206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:27:20.505 [DEBUG] [Thread-206] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:27:20.506 [DEBUG] [Thread-206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:27:20.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:27:20.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:27:20.507 [DEBUG] [Thread-206] [transport.py] [_log()] userauth is OK
2025-12-24T22:27:20.507 [DEBUG] [Thread-206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:27:20.507 [DEBUG] [Thread-206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:27:20.507 [DEBUG] [Thread-206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:27:20.507 [DEBUG] [Thread-206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:27:20.541 [INFO] [Thread-206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:27:20.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:27:21.154 [DEBUG] [Thread-206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:27:21.154 [DEBUG] [Thread-206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:27:21.155 [DEBUG] [Thread-206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:27:21.195 [DEBUG] [Thread-206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:27:21.195 [DEBUG] [Thread-206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:27:21.198 [DEBUG] [Thread-206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:27:21.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:27:21.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:27:21.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:27:21.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:27:21.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:27:21.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:27:21.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:27:21.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:27:21.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:27:21.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.851799 -999.00  +15.00  29.71     74  +10.60 1 1 1 1 1     0    0 2.58 -73.52 ZNESW 31.2 29.7 168.3 35.2 15.7 -21.0 15.6 -20.5 15.5 -19.3 15.8 -20.2
2025-12-24T22:27:21.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:27:21.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:27:21.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.851799
2025-12-24T22:27:21.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:27:21.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:27:21.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:27:21.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:27:21.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:27:21.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:27:08', tmtdew=5.27, humidity=70.46, cloud=0.0, wind=35.55, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:27:08', seeing=1.81, atlas_timestamp='2025-12-24T20:26:35.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:23:00')
2025-12-24T22:27:21.221 [DEBUG] [Thread-206] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:27:21.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:27:21.327 [DEBUG] [Thread-209] [transport.py] [_log()] starting thread (client mode): 0xb9558f70
2025-12-24T22:27:21.327 [DEBUG] [Thread-209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:27:21.342 [DEBUG] [Thread-209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:27:21.342 [INFO] [Thread-209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:27:21.349 [DEBUG] [Thread-209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] client lang: <none>
2025-12-24T22:27:21.350 [DEBUG] [Thread-209] [transport.py] [_log()] server lang: <none>
2025-12-24T22:27:21.351 [DEBUG] [Thread-209] [transport.py] [_log()] kex follows: False
2025-12-24T22:27:21.351 [DEBUG] [Thread-209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:27:21.351 [DEBUG] [Thread-209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:27:21.351 [DEBUG] [Thread-209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:27:21.351 [DEBUG] [Thread-209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:27:21.351 [DEBUG] [Thread-209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:27:21.351 [DEBUG] [Thread-209] [transport.py] [_log()] Compression: none
2025-12-24T22:27:21.351 [DEBUG] [Thread-209] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:27:21.408 [DEBUG] [Thread-209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:27:21.408 [DEBUG] [Thread-209] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:27:21.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:27:21.409 [DEBUG] [Thread-209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:27:21.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:27:21.464 [DEBUG] [Thread-209] [transport.py] [_log()] userauth is OK
2025-12-24T22:27:21.464 [DEBUG] [Thread-209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:27:21.464 [DEBUG] [Thread-209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:27:21.464 [DEBUG] [Thread-209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:27:21.465 [DEBUG] [Thread-209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:27:21.488 [INFO] [Thread-209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:27:21.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:27:21.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:27:22.302 [DEBUG] [Thread-209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:27:22.302 [DEBUG] [Thread-209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:27:22.350 [DEBUG] [Thread-209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:27:22.350 [DEBUG] [Thread-209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:27:22.360 [DEBUG] [Thread-209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:27:22.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:27:22.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:27:22.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:27:22.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:27:22.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:27:22.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:27:22.396 [DEBUG] [Thread-209] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:27:30.262 [DEBUG] [Thread-211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:27:45.334 [DEBUG] [Thread-212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:27:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:27:52.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:27:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:27:52.920 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:27:52.920 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:27:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 27, 40), 5.31, 70.5, 0.0, 30.37, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:27:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:27:40
2025-12-24T22:27:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:27:53.394 [DEBUG] [Thread-213] [transport.py] [_log()] starting thread (client mode): 0xb955afb0
2025-12-24T22:27:53.395 [DEBUG] [Thread-213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:27:53.414 [DEBUG] [Thread-213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:27:53.415 [INFO] [Thread-213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:27:53.417 [DEBUG] [Thread-213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:27:53.417 [DEBUG] [Thread-213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:27:53.417 [DEBUG] [Thread-213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] client lang: <none>
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] server lang: <none>
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] kex follows: False
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] Compression: none
2025-12-24T22:27:53.418 [DEBUG] [Thread-213] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:27:53.435 [DEBUG] [Thread-213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:27:53.436 [DEBUG] [Thread-213] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:27:53.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:27:53.437 [DEBUG] [Thread-213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:27:53.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:27:53.439 [DEBUG] [Thread-213] [transport.py] [_log()] userauth is OK
2025-12-24T22:27:53.439 [DEBUG] [Thread-213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:27:53.439 [DEBUG] [Thread-213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:27:53.439 [DEBUG] [Thread-213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:27:53.439 [DEBUG] [Thread-213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:27:53.475 [INFO] [Thread-213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:27:53.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:27:54.096 [DEBUG] [Thread-213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:27:54.096 [DEBUG] [Thread-213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:27:54.097 [DEBUG] [Thread-213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:27:54.137 [DEBUG] [Thread-213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:27:54.137 [DEBUG] [Thread-213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:27:54.140 [DEBUG] [Thread-213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:27:54.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:27:54.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:27:54.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:27:54.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:27:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:27:54.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:27:54.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:27:54.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:27:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:27:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.852146 -999.00  +15.00  32.75     75  +10.60 1 1 2 1 1     0    0 2.80 -70.65 ZNESW 27.3 32.8 150.0 37.1 15.7 -21.0 15.6 -20.5 15.4 -19.3 15.7 -20.1
2025-12-24T22:27:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:27:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:27:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.852146
2025-12-24T22:27:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:27:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:27:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:27:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:27:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:27:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:27:40', tmtdew=5.31, humidity=70.5, cloud=0.0, wind=30.37, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:27:41', seeing=1.64, atlas_timestamp='2025-12-24T20:27:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:23:00')
2025-12-24T22:27:54.161 [DEBUG] [Thread-213] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:27:54.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:27:54.259 [DEBUG] [Thread-216] [transport.py] [_log()] starting thread (client mode): 0xb9546fb0
2025-12-24T22:27:54.259 [DEBUG] [Thread-216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:27:54.274 [DEBUG] [Thread-216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:27:54.274 [INFO] [Thread-216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:27:54.281 [DEBUG] [Thread-216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] client lang: <none>
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] server lang: <none>
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] kex follows: False
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:27:54.282 [DEBUG] [Thread-216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:27:54.283 [DEBUG] [Thread-216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:27:54.283 [DEBUG] [Thread-216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:27:54.283 [DEBUG] [Thread-216] [transport.py] [_log()] Compression: none
2025-12-24T22:27:54.283 [DEBUG] [Thread-216] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:27:54.340 [DEBUG] [Thread-216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:27:54.341 [DEBUG] [Thread-216] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:27:54.342 [DEBUG] [Thread-216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:27:54.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:27:54.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:27:54.397 [DEBUG] [Thread-216] [transport.py] [_log()] userauth is OK
2025-12-24T22:27:54.397 [DEBUG] [Thread-216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:27:54.397 [DEBUG] [Thread-216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:27:54.397 [DEBUG] [Thread-216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:27:54.397 [DEBUG] [Thread-216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:27:54.421 [INFO] [Thread-216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:27:54.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:27:54.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:27:55.202 [DEBUG] [Thread-216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:27:55.202 [DEBUG] [Thread-216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:27:55.250 [DEBUG] [Thread-216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:27:55.250 [DEBUG] [Thread-216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:27:55.258 [DEBUG] [Thread-216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:27:55.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:27:55.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:27:55.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:27:55.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:27:55.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:27:55.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:27:55.292 [DEBUG] [Thread-216] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:28:00.378 [DEBUG] [Thread-218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:12.167 [DEBUG] [Thread-219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:15.443 [DEBUG] [Thread-220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:25.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:28:25.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:28:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:28:26.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 28, 12), 5.3, 70.55, 0.0, 28.95, 14.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:28:26.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:28:12
2025-12-24T22:28:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:28:26.296 [DEBUG] [Thread-221] [transport.py] [_log()] starting thread (client mode): 0xb9559f30
2025-12-24T22:28:26.296 [DEBUG] [Thread-221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:28:26.318 [DEBUG] [Thread-221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:28:26.318 [INFO] [Thread-221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] client lang: <none>
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] server lang: <none>
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] kex follows: False
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:28:26.322 [DEBUG] [Thread-221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:28:26.323 [DEBUG] [Thread-221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:28:26.323 [DEBUG] [Thread-221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:28:26.323 [DEBUG] [Thread-221] [transport.py] [_log()] Compression: none
2025-12-24T22:28:26.323 [DEBUG] [Thread-221] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:28:26.340 [DEBUG] [Thread-221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:28:26.340 [DEBUG] [Thread-221] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:28:26.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:28:26.341 [DEBUG] [Thread-221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:28:26.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:28:26.343 [DEBUG] [Thread-221] [transport.py] [_log()] userauth is OK
2025-12-24T22:28:26.343 [DEBUG] [Thread-221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:28:26.343 [DEBUG] [Thread-221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:28:26.343 [DEBUG] [Thread-221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:28:26.344 [DEBUG] [Thread-221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:28:26.366 [INFO] [Thread-221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:28:26.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:28:27.106 [DEBUG] [Thread-221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:28:27.106 [DEBUG] [Thread-221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:28:27.106 [DEBUG] [Thread-221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:28:27.147 [DEBUG] [Thread-221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:28:27.147 [DEBUG] [Thread-221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:28:27.150 [DEBUG] [Thread-221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:28:27.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:28:27.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:28:27.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:28:27.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:28:27.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:28:27.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:28:27.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:28:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:28:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:28:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.852493 -999.00  +15.00  19.63     74  +10.60 1 1 1 1 1     0    0 2.84 -62.42 ZNESW 21.9 19.6 142.0 32.2 15.8 -21.0 15.6 -20.4 15.5 -19.3 15.8 -20.2
2025-12-24T22:28:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:28:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:28:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.852493
2025-12-24T22:28:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:28:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:28:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:28:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:28:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:28:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:28:12', tmtdew=5.3, humidity=70.55, cloud=0.0, wind=28.95, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:28:13', seeing=1.39, atlas_timestamp='2025-12-24T20:27:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:26:00')
2025-12-24T22:28:27.177 [DEBUG] [Thread-221] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:28:27.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:28:27.284 [DEBUG] [Thread-224] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-24T22:28:27.284 [DEBUG] [Thread-224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:28:27.298 [DEBUG] [Thread-224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:28:27.299 [INFO] [Thread-224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] client lang: <none>
2025-12-24T22:28:27.306 [DEBUG] [Thread-224] [transport.py] [_log()] server lang: <none>
2025-12-24T22:28:27.307 [DEBUG] [Thread-224] [transport.py] [_log()] kex follows: False
2025-12-24T22:28:27.307 [DEBUG] [Thread-224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:28:27.307 [DEBUG] [Thread-224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:28:27.307 [DEBUG] [Thread-224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:28:27.307 [DEBUG] [Thread-224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:28:27.307 [DEBUG] [Thread-224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:28:27.307 [DEBUG] [Thread-224] [transport.py] [_log()] Compression: none
2025-12-24T22:28:27.307 [DEBUG] [Thread-224] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:28:27.372 [DEBUG] [Thread-224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:28:27.372 [DEBUG] [Thread-224] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:28:27.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:28:27.373 [DEBUG] [Thread-224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:28:27.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:28:27.434 [DEBUG] [Thread-224] [transport.py] [_log()] userauth is OK
2025-12-24T22:28:27.435 [DEBUG] [Thread-224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:28:27.435 [DEBUG] [Thread-224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:28:27.435 [DEBUG] [Thread-224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:28:27.435 [DEBUG] [Thread-224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:28:27.457 [INFO] [Thread-224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:28:27.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:28:27.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:28:28.303 [DEBUG] [Thread-224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:28:28.303 [DEBUG] [Thread-224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:28:28.350 [DEBUG] [Thread-224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:28:28.351 [DEBUG] [Thread-224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:28:28.359 [DEBUG] [Thread-224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:28:28.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:28:28.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:28:28.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:28:28.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:28:28.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:28:28.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:28:28.394 [DEBUG] [Thread-224] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:28:30.477 [DEBUG] [Thread-226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:42.450 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:45.551 [DEBUG] [Thread-227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:47.496 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:51.892 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:53.120 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:53.122 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:28:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:28:58.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:28:58.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:28:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 28, 45), 5.25, 70.55, 0.0, 30.98, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:28:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:28:45
2025-12-24T22:28:59.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:28:59.446 [DEBUG] [Thread-228] [transport.py] [_log()] starting thread (client mode): 0xbbfccfa0
2025-12-24T22:28:59.446 [DEBUG] [Thread-228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:28:59.465 [DEBUG] [Thread-228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:28:59.465 [INFO] [Thread-228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] client lang: <none>
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] server lang: <none>
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] kex follows: False
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] Compression: none
2025-12-24T22:28:59.467 [DEBUG] [Thread-228] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:28:59.474 [DEBUG] [Thread-228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:28:59.474 [DEBUG] [Thread-228] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:28:59.474 [DEBUG] [Thread-228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:28:59.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:28:59.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:28:59.475 [DEBUG] [Thread-228] [transport.py] [_log()] userauth is OK
2025-12-24T22:28:59.475 [DEBUG] [Thread-228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:28:59.475 [DEBUG] [Thread-228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:28:59.475 [DEBUG] [Thread-228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:28:59.475 [DEBUG] [Thread-228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:28:59.490 [INFO] [Thread-228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:28:59.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:29:00.123 [DEBUG] [Thread-228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:29:00.123 [DEBUG] [Thread-228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:29:00.123 [DEBUG] [Thread-228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:29:00.164 [DEBUG] [Thread-228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:29:00.164 [DEBUG] [Thread-228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:29:00.167 [DEBUG] [Thread-228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:29:00.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:29:00.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:29:00.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:29:00.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:29:00.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:29:00.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:29:00.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.852841 -999.00  +15.00  25.33     74  +10.60 1 1 1 1 1     0    0 2.87 -60.11 ZNESW 19.6 25.3 158.8 35.5 15.7 -21.0 15.6 -20.6 15.4 -19.2 15.8 -20.2
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.852841
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:29:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:28:45', tmtdew=5.25, humidity=70.55, cloud=0.0, wind=30.98, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:28:45', seeing=1.47, atlas_timestamp='2025-12-24T20:28:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:26:00')
2025-12-24T22:29:00.182 [DEBUG] [Thread-228] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:29:00.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:29:00.274 [DEBUG] [Thread-231] [transport.py] [_log()] starting thread (client mode): 0xbbfcfb20
2025-12-24T22:29:00.274 [DEBUG] [Thread-231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:29:00.288 [DEBUG] [Thread-231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:29:00.288 [INFO] [Thread-231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] client lang: <none>
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] server lang: <none>
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] kex follows: False
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] Compression: none
2025-12-24T22:29:00.296 [DEBUG] [Thread-231] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:29:00.354 [DEBUG] [Thread-231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:29:00.354 [DEBUG] [Thread-231] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:29:00.354 [DEBUG] [Thread-231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:29:00.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:29:00.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:29:00.412 [DEBUG] [Thread-231] [transport.py] [_log()] userauth is OK
2025-12-24T22:29:00.412 [DEBUG] [Thread-231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:29:00.412 [DEBUG] [Thread-231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:29:00.412 [DEBUG] [Thread-231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:29:00.412 [DEBUG] [Thread-231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:29:00.427 [INFO] [Thread-231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:29:00.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:29:00.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:29:00.587 [DEBUG] [Thread-233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:01.279 [DEBUG] [Thread-231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:29:01.279 [DEBUG] [Thread-231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:29:01.327 [DEBUG] [Thread-231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:29:01.327 [DEBUG] [Thread-231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:29:01.336 [DEBUG] [Thread-231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:29:01.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:29:01.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:29: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
2025-12-24T22:29:01.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:29:01.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:29:01.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:29:01.367 [DEBUG] [Thread-231] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:29:11.277 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:12.224 [DEBUG] [Thread-234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:15.640 [DEBUG] [Thread-235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:15.692 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:30.680 [DEBUG] [Thread-236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:29:31.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:29:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:29:32.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 29, 17), 5.24, 70.61, 0.0, 32.36, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:29:32.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:29:17
2025-12-24T22:29:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:29:32.356 [DEBUG] [Thread-237] [transport.py] [_log()] starting thread (client mode): 0xb95590c0
2025-12-24T22:29:32.356 [DEBUG] [Thread-237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:29:32.372 [DEBUG] [Thread-237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:29:32.372 [INFO] [Thread-237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:29:32.374 [DEBUG] [Thread-237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] client lang: <none>
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] server lang: <none>
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] kex follows: False
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:29:32.375 [DEBUG] [Thread-237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:29:32.376 [DEBUG] [Thread-237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:29:32.376 [DEBUG] [Thread-237] [transport.py] [_log()] Compression: none
2025-12-24T22:29:32.376 [DEBUG] [Thread-237] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:29:32.393 [DEBUG] [Thread-237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:29:32.394 [DEBUG] [Thread-237] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:29:32.394 [DEBUG] [Thread-237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:29:32.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:29:32.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:29:32.437 [DEBUG] [Thread-237] [transport.py] [_log()] userauth is OK
2025-12-24T22:29:32.438 [DEBUG] [Thread-237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:29:32.438 [DEBUG] [Thread-237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:29:32.438 [DEBUG] [Thread-237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:29:32.438 [DEBUG] [Thread-237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:29:32.460 [INFO] [Thread-237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:29:32.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:29:33.217 [DEBUG] [Thread-237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:29:33.217 [DEBUG] [Thread-237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:29:33.217 [DEBUG] [Thread-237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:29:33.258 [DEBUG] [Thread-237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:29:33.258 [DEBUG] [Thread-237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:29:33.261 [DEBUG] [Thread-237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:29:33.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:29:33.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:29:33.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:29:33.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:29:33.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:29:33.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:29:33.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:29:33.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:29:33.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:29:33.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.853535 -999.00  +14.90  24.99     75  +10.60 1 1 1 1 1     0    0 2.98 -59.50 ZNESW 26.7 25.0 146.1 35.8 15.7 -21.0 15.6 -20.6 15.4 -19.3 15.7 -20.1
2025-12-24T22:29:33.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:29:33.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:29:33.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.853535
2025-12-24T22:29:33.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:29:33.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:29:33.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:29:33.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:29:33.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:29:33.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:29:17', tmtdew=5.24, humidity=70.61, cloud=0.0, wind=32.36, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:29:17', seeing=1.34, atlas_timestamp='2025-12-24T20:29:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:26:00')
2025-12-24T22:29:33.278 [DEBUG] [Thread-237] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:29:33.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:29:33.384 [DEBUG] [Thread-240] [transport.py] [_log()] starting thread (client mode): 0xb95459c0
2025-12-24T22:29:33.384 [DEBUG] [Thread-240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:29:33.400 [DEBUG] [Thread-240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:29:33.400 [INFO] [Thread-240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:29:33.408 [DEBUG] [Thread-240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] client lang: <none>
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] server lang: <none>
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] kex follows: False
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:29:33.409 [DEBUG] [Thread-240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:29:33.410 [DEBUG] [Thread-240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:29:33.410 [DEBUG] [Thread-240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:29:33.410 [DEBUG] [Thread-240] [transport.py] [_log()] Compression: none
2025-12-24T22:29:33.410 [DEBUG] [Thread-240] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:29:33.470 [DEBUG] [Thread-240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:29:33.471 [DEBUG] [Thread-240] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:29:33.471 [DEBUG] [Thread-240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:29:33.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:29:33.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:29:33.527 [DEBUG] [Thread-240] [transport.py] [_log()] userauth is OK
2025-12-24T22:29:33.528 [DEBUG] [Thread-240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:29:33.528 [DEBUG] [Thread-240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:29:33.528 [DEBUG] [Thread-240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:29:33.528 [DEBUG] [Thread-240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:29:33.552 [INFO] [Thread-240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:29:33.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:29:33.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:29:34.369 [DEBUG] [Thread-240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:29:34.370 [DEBUG] [Thread-240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:29:34.420 [DEBUG] [Thread-240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:29:34.420 [DEBUG] [Thread-240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:29:34.433 [DEBUG] [Thread-240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:29:34.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:29:34.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:29:34.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:29:34.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:29:34.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:29:34.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:29:34.478 [DEBUG] [Thread-240] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:29:35.066 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:39.459 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:45.580 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:45.721 [DEBUG] [Thread-242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:49.999 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:53.366 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:29:53.367 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:00.783 [DEBUG] [Thread-243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:01.832 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:30:04.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:30:04.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:30:04.901 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:05.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 29, 49), 5.24, 71.1, 0.0, 28.87, 14.98, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:30:05.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:29:49
2025-12-24T22:30:05.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:30:05.482 [DEBUG] [Thread-244] [transport.py] [_log()] starting thread (client mode): 0xbbfcf760
2025-12-24T22:30:05.482 [DEBUG] [Thread-244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:30:05.502 [DEBUG] [Thread-244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:30:05.502 [INFO] [Thread-244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] client lang: <none>
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] server lang: <none>
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] kex follows: False
2025-12-24T22:30:05.505 [DEBUG] [Thread-244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:30:05.506 [DEBUG] [Thread-244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:30:05.506 [DEBUG] [Thread-244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:30:05.506 [DEBUG] [Thread-244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:30:05.506 [DEBUG] [Thread-244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:30:05.506 [DEBUG] [Thread-244] [transport.py] [_log()] Compression: none
2025-12-24T22:30:05.506 [DEBUG] [Thread-244] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:30:05.523 [DEBUG] [Thread-244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:30:05.523 [DEBUG] [Thread-244] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:30:05.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:30:05.524 [DEBUG] [Thread-244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:30:05.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:30:05.525 [DEBUG] [Thread-244] [transport.py] [_log()] userauth is OK
2025-12-24T22:30:05.525 [DEBUG] [Thread-244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:30:05.525 [DEBUG] [Thread-244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:30:05.525 [DEBUG] [Thread-244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:30:05.526 [DEBUG] [Thread-244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:30:05.549 [INFO] [Thread-244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:30:05.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:30:06.415 [DEBUG] [Thread-244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:30:06.415 [DEBUG] [Thread-244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:30:06.416 [DEBUG] [Thread-244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:30:06.456 [DEBUG] [Thread-244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:30:06.456 [DEBUG] [Thread-244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:30:06.460 [DEBUG] [Thread-244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:30:06.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:30:06.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:30:06.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:30:06.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:30:06.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:30:06.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:30:06.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:30:06.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:30:06.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:30:06.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.853882 -999.00  +14.90  18.81     75  +10.60 1 1 1 1 1     0    0 3.06 -52.69 ZNESW 18.3 18.8 153.2 29.7 15.7 -20.9 15.6 -20.5 15.4 -19.3 15.7 -20.0
2025-12-24T22:30:06.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:30:06.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:30:06.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.853882
2025-12-24T22:30:06.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:30:06.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:30:06.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:30:06.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:30:06.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:30:06.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:29:49', tmtdew=5.24, humidity=71.1, cloud=0.0, wind=28.87, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:29:49', seeing=1.44, atlas_timestamp='2025-12-24T20:29:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:26:00')
2025-12-24T22:30:06.534 [DEBUG] [Thread-244] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:30:06.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:30:06.639 [DEBUG] [Thread-247] [transport.py] [_log()] starting thread (client mode): 0xbbfcf6d0
2025-12-24T22:30:06.640 [DEBUG] [Thread-247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:30:06.654 [DEBUG] [Thread-247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:30:06.654 [INFO] [Thread-247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:30:06.662 [DEBUG] [Thread-247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:30:06.662 [DEBUG] [Thread-247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:30:06.662 [DEBUG] [Thread-247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:30:06.662 [DEBUG] [Thread-247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:30:06.662 [DEBUG] [Thread-247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:30:06.662 [DEBUG] [Thread-247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:30:06.662 [DEBUG] [Thread-247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:30:06.662 [DEBUG] [Thread-247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] client lang: <none>
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] server lang: <none>
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] kex follows: False
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] Compression: none
2025-12-24T22:30:06.663 [DEBUG] [Thread-247] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:30:06.719 [DEBUG] [Thread-247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:30:06.719 [DEBUG] [Thread-247] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:30:06.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:30:06.721 [DEBUG] [Thread-247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:30:06.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:30:06.775 [DEBUG] [Thread-247] [transport.py] [_log()] userauth is OK
2025-12-24T22:30:06.775 [DEBUG] [Thread-247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:30:06.776 [DEBUG] [Thread-247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:30:06.776 [DEBUG] [Thread-247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:30:06.776 [DEBUG] [Thread-247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:30:06.794 [INFO] [Thread-247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:30:06.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:30:06.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:30:07.601 [DEBUG] [Thread-247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:30:07.602 [DEBUG] [Thread-247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:30:07.649 [DEBUG] [Thread-247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:30:07.649 [DEBUG] [Thread-247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:30:07.658 [DEBUG] [Thread-247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:30:07.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:30:07.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:30:07.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:30:07.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:30:07.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:30:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:30:07.697 [DEBUG] [Thread-247] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:30:12.291 [DEBUG] [Thread-249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:15.825 [DEBUG] [Thread-250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:30.880 [DEBUG] [Thread-251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:36.389 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:37.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:30:37.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:30:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:30:38.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 30, 21), 5.23, 71.13, 0.0, 31.78, 14.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:30:38.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:30:21
2025-12-24T22:30:38.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:30:38.710 [DEBUG] [Thread-252] [transport.py] [_log()] starting thread (client mode): 0xb955bb80
2025-12-24T22:30:38.710 [DEBUG] [Thread-252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:30:38.730 [DEBUG] [Thread-252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:30:38.730 [INFO] [Thread-252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:30:38.733 [DEBUG] [Thread-252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] client lang: <none>
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] server lang: <none>
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] kex follows: False
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] Compression: none
2025-12-24T22:30:38.734 [DEBUG] [Thread-252] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:30:38.751 [DEBUG] [Thread-252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:30:38.751 [DEBUG] [Thread-252] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:30:38.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:30:38.752 [DEBUG] [Thread-252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:30:38.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:30:38.754 [DEBUG] [Thread-252] [transport.py] [_log()] userauth is OK
2025-12-24T22:30:38.754 [DEBUG] [Thread-252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:30:38.754 [DEBUG] [Thread-252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:30:38.754 [DEBUG] [Thread-252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:30:38.755 [DEBUG] [Thread-252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:30:38.772 [INFO] [Thread-252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:30:38.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:30:39.605 [DEBUG] [Thread-252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:30:39.605 [DEBUG] [Thread-252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:30:39.605 [DEBUG] [Thread-252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:30:39.646 [DEBUG] [Thread-252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:30:39.646 [DEBUG] [Thread-252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:30:39.649 [DEBUG] [Thread-252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:30:39.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:30:39.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:30:39.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:30:39.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:30:39.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:30:39.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:30:39.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:30:39.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:30:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:30:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.854229 -999.00  +14.90  25.59     75  +10.60 1 1 1 1 1     0    0 3.21 -50.82 ZNESW 23.4 25.6 153.4 31.6 15.7 -21.0 15.6 -20.6 15.4 -19.3 15.7 -20.0
2025-12-24T22:30:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:30:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:30:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.854229
2025-12-24T22:30:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:30:39.674 [DEBUG] [Thread-252] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:30:39.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:30:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:30:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:30:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:30:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:30:21', tmtdew=5.23, humidity=71.13, cloud=0.0, wind=31.78, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:30:21', seeing=1.35, atlas_timestamp='2025-12-24T20:30:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:26:00')
2025-12-24T22:30:39.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:30:39.780 [DEBUG] [Thread-255] [transport.py] [_log()] starting thread (client mode): 0xbbfcd420
2025-12-24T22:30:39.780 [DEBUG] [Thread-255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:30:39.794 [DEBUG] [Thread-255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:30:39.795 [INFO] [Thread-255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:30:39.802 [DEBUG] [Thread-255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:30:39.802 [DEBUG] [Thread-255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] client lang: <none>
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] server lang: <none>
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] kex follows: False
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:30:39.803 [DEBUG] [Thread-255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:30:39.804 [DEBUG] [Thread-255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:30:39.804 [DEBUG] [Thread-255] [transport.py] [_log()] Compression: none
2025-12-24T22:30:39.804 [DEBUG] [Thread-255] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:30:39.862 [DEBUG] [Thread-255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:30:39.863 [DEBUG] [Thread-255] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:30:39.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:30:39.864 [DEBUG] [Thread-255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:30:39.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:30:39.918 [DEBUG] [Thread-255] [transport.py] [_log()] userauth is OK
2025-12-24T22:30:39.918 [DEBUG] [Thread-255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:30:39.919 [DEBUG] [Thread-255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:30:39.919 [DEBUG] [Thread-255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:30:39.919 [DEBUG] [Thread-255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:30:39.937 [INFO] [Thread-255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:30:39.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:30:39.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:30:40.721 [DEBUG] [Thread-255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:30:40.721 [DEBUG] [Thread-255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:30:40.768 [DEBUG] [Thread-255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:30:40.769 [DEBUG] [Thread-255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:30:40.777 [DEBUG] [Thread-255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:30:40.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:30:40.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:30: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') -> 00000000
2025-12-24T22:30:40.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:30:40.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:30:40.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:30:40.812 [DEBUG] [Thread-255] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:30:45.922 [DEBUG] [Thread-257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:48.380 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:52.434 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:53.568 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:30:53.569 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:00.986 [DEBUG] [Thread-258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:10.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:31:10.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:31:10.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:31:11.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 30, 53), 5.19, 71.08, 0.0, 28.58, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:31:11.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:30:53
2025-12-24T22:31:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:31:11.764 [DEBUG] [Thread-259] [transport.py] [_log()] starting thread (client mode): 0xb955a530
2025-12-24T22:31:11.764 [DEBUG] [Thread-259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:31:11.783 [DEBUG] [Thread-259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:31:11.784 [INFO] [Thread-259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:31:11.785 [DEBUG] [Thread-259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:31:11.785 [DEBUG] [Thread-259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:31:11.785 [DEBUG] [Thread-259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] client lang: <none>
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] server lang: <none>
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] kex follows: False
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:31:11.786 [DEBUG] [Thread-259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:31:11.787 [DEBUG] [Thread-259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:31:11.787 [DEBUG] [Thread-259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:31:11.787 [DEBUG] [Thread-259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:31:11.787 [DEBUG] [Thread-259] [transport.py] [_log()] Compression: none
2025-12-24T22:31:11.787 [DEBUG] [Thread-259] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:31:11.801 [DEBUG] [Thread-259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:31:11.802 [DEBUG] [Thread-259] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:31:11.802 [DEBUG] [Thread-259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:31:11.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:31:11.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:31:11.804 [DEBUG] [Thread-259] [transport.py] [_log()] userauth is OK
2025-12-24T22:31:11.804 [DEBUG] [Thread-259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:31:11.804 [DEBUG] [Thread-259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:31:11.804 [DEBUG] [Thread-259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:31:11.804 [DEBUG] [Thread-259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:31:11.822 [INFO] [Thread-259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:31:11.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:31:12.348 [DEBUG] [Thread-261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:12.420 [DEBUG] [Thread-259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:31:12.420 [DEBUG] [Thread-259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:31:12.421 [DEBUG] [Thread-259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:31:12.461 [DEBUG] [Thread-259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:31:12.461 [DEBUG] [Thread-259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:31:12.464 [DEBUG] [Thread-259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:31:12.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:31:12.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:31:12.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:31:12.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:31:12.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:31:12.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:31:12.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:31:12.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:31:12.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:31:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.854577 -999.00  +14.90  20.83     75  +10.60 1 1 1 1 1     0    0 3.22 -48.72 ZNESW 25.4 20.8 149.0 30.6 15.7 -21.0 15.5 -20.4 15.4 -19.2 15.7 -20.1
2025-12-24T22:31:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:31:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:31:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.854577
2025-12-24T22:31:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:31:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:31:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:31:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:31:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:31:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:30:53', tmtdew=5.19, humidity=71.08, cloud=0.0, wind=28.58, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:30:53', seeing=1.35, atlas_timestamp='2025-12-24T20:30:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.08774999999999977, 0.15525000000000055, 0.15975000000000072, 0.12849999999999895, 0.13349999999999973, 0.19625000000000092, 0.1374999999999993, 0.10725000000000051, 0.09949999999999903, 0.10500000000000043, 0.1532499999999999, 0.11249999999999893, 0.1855000000000011, 0.15024999999999977, 0.10499999999999865, 0.07849999999999824, 0.13424999999999976, 0.1590000000000007, 0.11549999999999905, 0.06324999999999825, 0.12650000000000006, 0.14174999999999827, 0.11224999999999952, 0.1197499999999998, 0.18799999999999883, 0.17950000000000088, 0.1427499999999995, 0.21250000000000036, 0.19950000000000045, 0.23400000000000176, 0.17249999999999943, 0.11400000000000077, 0.18825000000000003], zp_timestamp='2025-12-24T20:26:00')
2025-12-24T22:31:12.490 [DEBUG] [Thread-259] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:31:12.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:31:12.594 [DEBUG] [Thread-263] [transport.py] [_log()] starting thread (client mode): 0xb95581f0
2025-12-24T22:31:12.594 [DEBUG] [Thread-263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:31:12.612 [DEBUG] [Thread-263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:31:12.612 [INFO] [Thread-263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] client lang: <none>
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] server lang: <none>
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] kex follows: False
2025-12-24T22:31:12.620 [DEBUG] [Thread-263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:31:12.621 [DEBUG] [Thread-263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:31:12.621 [DEBUG] [Thread-263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:31:12.621 [DEBUG] [Thread-263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:31:12.621 [DEBUG] [Thread-263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:31:12.621 [DEBUG] [Thread-263] [transport.py] [_log()] Compression: none
2025-12-24T22:31:12.621 [DEBUG] [Thread-263] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:31:12.679 [DEBUG] [Thread-263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:31:12.679 [DEBUG] [Thread-263] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:31:12.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:31:12.680 [DEBUG] [Thread-263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:31:12.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:31:12.734 [DEBUG] [Thread-263] [transport.py] [_log()] userauth is OK
2025-12-24T22:31:12.734 [DEBUG] [Thread-263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:31:12.735 [DEBUG] [Thread-263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:31:12.735 [DEBUG] [Thread-263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:31:12.735 [DEBUG] [Thread-263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:31:12.753 [INFO] [Thread-263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:31:12.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:31:12.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:31:13.577 [DEBUG] [Thread-263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:31:13.577 [DEBUG] [Thread-263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:31:13.626 [DEBUG] [Thread-263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:31:13.626 [DEBUG] [Thread-263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:31:13.635 [DEBUG] [Thread-263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:31:13.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:31:13.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:31:13.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:31:13.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:31:13.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:31:13.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:31:13.673 [DEBUG] [Thread-263] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:31:16.029 [DEBUG] [Thread-265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:22.897 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:31.094 [DEBUG] [Thread-266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:32.130 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:36.232 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:31:43.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:31:43.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:31:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 31, 25), 5.17, 71.18, 0.0, 27.1, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:31:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:31:25
2025-12-24T22:31:44.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:31:44.677 [DEBUG] [Thread-267] [transport.py] [_log()] starting thread (client mode): 0xb95785b0
2025-12-24T22:31:44.677 [DEBUG] [Thread-267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:31:44.698 [DEBUG] [Thread-267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:31:44.698 [INFO] [Thread-267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:31:44.701 [DEBUG] [Thread-267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:31:44.701 [DEBUG] [Thread-267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:31:44.701 [DEBUG] [Thread-267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] client lang: <none>
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] server lang: <none>
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] kex follows: False
2025-12-24T22:31:44.702 [DEBUG] [Thread-267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:31:44.703 [DEBUG] [Thread-267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:31:44.703 [DEBUG] [Thread-267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:31:44.703 [DEBUG] [Thread-267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:31:44.703 [DEBUG] [Thread-267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:31:44.703 [DEBUG] [Thread-267] [transport.py] [_log()] Compression: none
2025-12-24T22:31:44.703 [DEBUG] [Thread-267] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:31:44.721 [DEBUG] [Thread-267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:31:44.721 [DEBUG] [Thread-267] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:31:44.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:31:44.722 [DEBUG] [Thread-267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:31:44.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:31:44.725 [DEBUG] [Thread-267] [transport.py] [_log()] userauth is OK
2025-12-24T22:31:44.725 [DEBUG] [Thread-267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:31:44.725 [DEBUG] [Thread-267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:31:44.725 [DEBUG] [Thread-267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:31:44.725 [DEBUG] [Thread-267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:31:44.748 [INFO] [Thread-267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:31:44.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:31:45.366 [DEBUG] [Thread-267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:31:45.366 [DEBUG] [Thread-267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:31:45.366 [DEBUG] [Thread-267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:31:45.407 [DEBUG] [Thread-267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:31:45.408 [DEBUG] [Thread-267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:31:45.411 [DEBUG] [Thread-267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:31:45.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:31:45.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:31:45.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:31:45.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:31:45.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:31:45.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:31:45.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:31:45.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:31:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:31:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.854924 -999.00  +14.90  19.63     75  +10.60 1 1 1 1 1     0    0 3.30 -45.51 ZNESW 20.5 19.6 149.2 31.2 15.7 -20.8 15.5 -20.5 15.3 -19.4 15.7 -20.1
2025-12-24T22:31:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:31:45.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:31:45.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.854924
2025-12-24T22:31:45.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:31:45.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:31:45.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:31:45.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:31:45.434 [DEBUG] [Thread-267] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:31:45.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:31:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:31:25', tmtdew=5.17, humidity=71.18, cloud=0.0, wind=27.1, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:31:26', seeing=1.35, atlas_timestamp='2025-12-24T20:31:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:30:00')
2025-12-24T22:31:45.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:31:45.539 [DEBUG] [Thread-270] [transport.py] [_log()] starting thread (client mode): 0xb9578130
2025-12-24T22:31:45.539 [DEBUG] [Thread-270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:31:45.553 [DEBUG] [Thread-270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:31:45.553 [INFO] [Thread-270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:31:45.560 [DEBUG] [Thread-270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:31:45.560 [DEBUG] [Thread-270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] client lang: <none>
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] server lang: <none>
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] kex follows: False
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:31:45.561 [DEBUG] [Thread-270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:31:45.562 [DEBUG] [Thread-270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:31:45.562 [DEBUG] [Thread-270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:31:45.562 [DEBUG] [Thread-270] [transport.py] [_log()] Compression: none
2025-12-24T22:31:45.562 [DEBUG] [Thread-270] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:31:45.621 [DEBUG] [Thread-270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:31:45.622 [DEBUG] [Thread-270] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:31:45.622 [DEBUG] [Thread-270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:31:45.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:31:45.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:31:45.678 [DEBUG] [Thread-270] [transport.py] [_log()] userauth is OK
2025-12-24T22:31:45.678 [DEBUG] [Thread-270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:31:45.678 [DEBUG] [Thread-270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:31:45.678 [DEBUG] [Thread-270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:31:45.678 [DEBUG] [Thread-270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:31:45.696 [INFO] [Thread-270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:31:45.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:31:45.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:31:46.135 [DEBUG] [Thread-272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:46.533 [DEBUG] [Thread-270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:31:46.533 [DEBUG] [Thread-270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:31:46.581 [DEBUG] [Thread-270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:31:46.581 [DEBUG] [Thread-270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:31:46.590 [DEBUG] [Thread-270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:31:46.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:31:46.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:31:46.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:31:46.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:31:46.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:31:46.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:31:46.627 [DEBUG] [Thread-270] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:31:53.772 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:31:53.773 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:01.211 [DEBUG] [Thread-273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:06.647 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:12.401 [DEBUG] [Thread-274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:16.249 [DEBUG] [Thread-275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:16.502 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:32:16.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:32:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:32:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 31, 57), 5.23, 71.15, 0.0, 29.61, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:32:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:31:57
2025-12-24T22:32:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:32:17.635 [DEBUG] [Thread-276] [transport.py] [_log()] starting thread (client mode): 0xb957a500
2025-12-24T22:32:17.635 [DEBUG] [Thread-276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:32:17.655 [DEBUG] [Thread-276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:32:17.655 [INFO] [Thread-276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:32:17.658 [DEBUG] [Thread-276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] client lang: <none>
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] server lang: <none>
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] kex follows: False
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] Compression: none
2025-12-24T22:32:17.659 [DEBUG] [Thread-276] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:32:17.678 [DEBUG] [Thread-276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:32:17.678 [DEBUG] [Thread-276] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:32:17.679 [DEBUG] [Thread-276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:32:17.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:32:17.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:32:17.681 [DEBUG] [Thread-276] [transport.py] [_log()] userauth is OK
2025-12-24T22:32:17.681 [DEBUG] [Thread-276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:32:17.681 [DEBUG] [Thread-276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:32:17.681 [DEBUG] [Thread-276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:32:17.682 [DEBUG] [Thread-276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:32:17.704 [INFO] [Thread-276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:32:17.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:32:18.337 [DEBUG] [Thread-276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:32:18.338 [DEBUG] [Thread-276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:32:18.338 [DEBUG] [Thread-276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:32:18.379 [DEBUG] [Thread-276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:32:18.379 [DEBUG] [Thread-276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:32:18.383 [DEBUG] [Thread-276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:32:18.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:32:18.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:32:18.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:32:18.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:32:18.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:32:18.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:32:18.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:32:18.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:32:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:32:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.855271 -999.00  +14.90  21.98     75  +10.60 1 1 1 1 1     0    0 3.25 -45.64 ZNESW 18.1 22.0 152.7 28.8 15.6 -20.9 15.5 -20.5 15.3 -19.2 15.7 -20.1
2025-12-24T22:32:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:32:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:32:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.855271
2025-12-24T22:32:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:32:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:32:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:32:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:32:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:32:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:31:57', tmtdew=5.23, humidity=71.15, cloud=0.0, wind=29.61, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:31:58', seeing=1.68, atlas_timestamp='2025-12-24T20:31:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:30:00')
2025-12-24T22:32:18.405 [DEBUG] [Thread-276] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:32:18.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:32:18.499 [DEBUG] [Thread-279] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-24T22:32:18.500 [DEBUG] [Thread-279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:32:18.514 [DEBUG] [Thread-279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:32:18.514 [INFO] [Thread-279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:32:18.521 [DEBUG] [Thread-279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] client lang: <none>
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] server lang: <none>
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] kex follows: False
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:32:18.522 [DEBUG] [Thread-279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:32:18.523 [DEBUG] [Thread-279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:32:18.523 [DEBUG] [Thread-279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:32:18.523 [DEBUG] [Thread-279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:32:18.523 [DEBUG] [Thread-279] [transport.py] [_log()] Compression: none
2025-12-24T22:32:18.523 [DEBUG] [Thread-279] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:32:18.581 [DEBUG] [Thread-279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:32:18.582 [DEBUG] [Thread-279] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:32:18.583 [DEBUG] [Thread-279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:32:18.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:32:18.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:32:18.638 [DEBUG] [Thread-279] [transport.py] [_log()] userauth is OK
2025-12-24T22:32:18.638 [DEBUG] [Thread-279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:32:18.638 [DEBUG] [Thread-279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:32:18.639 [DEBUG] [Thread-279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:32:18.639 [DEBUG] [Thread-279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:32:18.658 [INFO] [Thread-279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:32:18.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:32:18.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:32:19.456 [DEBUG] [Thread-279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:32:19.456 [DEBUG] [Thread-279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:32:19.505 [DEBUG] [Thread-279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:32:19.505 [DEBUG] [Thread-279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:32:19.513 [DEBUG] [Thread-279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:32:19.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:32:19.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:32:19.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
2025-12-24T22:32:19.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:32:19.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:32:19.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:32:19.547 [DEBUG] [Thread-279] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:32:20.614 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:31.284 [DEBUG] [Thread-281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:46.339 [DEBUG] [Thread-282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:32:49.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:32:49.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:32:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 32, 29), 5.21, 71.26, 0.0, 30.28, 14.96, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:32:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:32:29
2025-12-24T22:32:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:32:50.591 [DEBUG] [Thread-283] [transport.py] [_log()] starting thread (client mode): 0xb9579ff0
2025-12-24T22:32:50.591 [DEBUG] [Thread-283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:32:50.611 [DEBUG] [Thread-283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:32:50.611 [INFO] [Thread-283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] client lang: <none>
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] server lang: <none>
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] kex follows: False
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] Compression: none
2025-12-24T22:32:50.615 [DEBUG] [Thread-283] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:32:50.633 [DEBUG] [Thread-283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:32:50.633 [DEBUG] [Thread-283] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:32:50.634 [DEBUG] [Thread-283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:32:50.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:32:50.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:32:50.634 [DEBUG] [Thread-283] [transport.py] [_log()] userauth is OK
2025-12-24T22:32:50.635 [DEBUG] [Thread-283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:32:50.635 [DEBUG] [Thread-283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:32:50.635 [DEBUG] [Thread-283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:32:50.635 [DEBUG] [Thread-283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:32:50.645 [INFO] [Thread-283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:32:50.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:32:51.100 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:51.296 [DEBUG] [Thread-283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:32:51.297 [DEBUG] [Thread-283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:32:51.297 [DEBUG] [Thread-283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:32:51.337 [DEBUG] [Thread-283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:32:51.337 [DEBUG] [Thread-283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:32:51.339 [DEBUG] [Thread-283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:32:51.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:32:51.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:32:51.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:32:51.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:32:51.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:32:51.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:32:51.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:32:51.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:32:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.855965 -999.00  +14.90  26.00     75  +10.60 1 1 1 1 1     0    0 3.36 -43.29 ZNESW 19.8 26.0 155.8 31.4 15.6 -20.9 15.5 -20.5 15.3 -19.2 15.7 -20.3
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.855965
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:32:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:32:29', tmtdew=5.21, humidity=71.26, cloud=0.0, wind=30.28, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:32:30', seeing=1.58, atlas_timestamp='2025-12-24T20:32:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:30:00')
2025-12-24T22:32:51.358 [DEBUG] [Thread-283] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:32:51.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:32:51.450 [DEBUG] [Thread-286] [transport.py] [_log()] starting thread (client mode): 0xb9579c60
2025-12-24T22:32:51.450 [DEBUG] [Thread-286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:32:51.464 [DEBUG] [Thread-286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:32:51.464 [INFO] [Thread-286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:32:51.471 [DEBUG] [Thread-286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:32:51.471 [DEBUG] [Thread-286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:32:51.471 [DEBUG] [Thread-286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] client lang: <none>
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] server lang: <none>
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] kex follows: False
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] Compression: none
2025-12-24T22:32:51.472 [DEBUG] [Thread-286] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:32:51.527 [DEBUG] [Thread-286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:32:51.527 [DEBUG] [Thread-286] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:32:51.527 [DEBUG] [Thread-286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:32:51.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:32:51.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:32:51.585 [DEBUG] [Thread-286] [transport.py] [_log()] userauth is OK
2025-12-24T22:32:51.585 [DEBUG] [Thread-286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:32:51.585 [DEBUG] [Thread-286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:32:51.585 [DEBUG] [Thread-286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:32:51.585 [DEBUG] [Thread-286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:32:51.602 [INFO] [Thread-286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:32:51.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:32:51.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:32:52.390 [DEBUG] [Thread-286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:32:52.390 [DEBUG] [Thread-286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:32:52.437 [DEBUG] [Thread-286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:32:52.437 [DEBUG] [Thread-286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:32:52.446 [DEBUG] [Thread-286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:32:52.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:32:52.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:32:52.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:32:52.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:32:52.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:32:52.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:32:52.478 [DEBUG] [Thread-286] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:32:53.973 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:32:53.974 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:01.376 [DEBUG] [Thread-288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:12.456 [DEBUG] [Thread-289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:16.439 [DEBUG] [Thread-290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:18.670 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:22.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:33:22.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:33:22.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:33:22.764 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 33, 1), 5.2, 71.28, 0.0, 27.7, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:33:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:33:01
2025-12-24T22:33:23.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:33:23.484 [DEBUG] [Thread-291] [transport.py] [_log()] starting thread (client mode): 0xbbfccd00
2025-12-24T22:33:23.484 [DEBUG] [Thread-291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:33:23.505 [DEBUG] [Thread-291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:33:23.505 [INFO] [Thread-291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:33:23.508 [DEBUG] [Thread-291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:33:23.508 [DEBUG] [Thread-291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] client lang: <none>
2025-12-24T22:33:23.509 [DEBUG] [Thread-291] [transport.py] [_log()] server lang: <none>
2025-12-24T22:33:23.510 [DEBUG] [Thread-291] [transport.py] [_log()] kex follows: False
2025-12-24T22:33:23.510 [DEBUG] [Thread-291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:33:23.510 [DEBUG] [Thread-291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:33:23.510 [DEBUG] [Thread-291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:33:23.510 [DEBUG] [Thread-291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:33:23.510 [DEBUG] [Thread-291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:33:23.510 [DEBUG] [Thread-291] [transport.py] [_log()] Compression: none
2025-12-24T22:33:23.511 [DEBUG] [Thread-291] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:33:23.531 [DEBUG] [Thread-291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:33:23.532 [DEBUG] [Thread-291] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:33:23.532 [DEBUG] [Thread-291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:33:23.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:33:23.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:33:23.574 [DEBUG] [Thread-291] [transport.py] [_log()] userauth is OK
2025-12-24T22:33:23.574 [DEBUG] [Thread-291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:33:23.574 [DEBUG] [Thread-291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:33:23.575 [DEBUG] [Thread-291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:33:23.575 [DEBUG] [Thread-291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:33:23.595 [INFO] [Thread-291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:33:23.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:33:24.216 [DEBUG] [Thread-291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:33:24.217 [DEBUG] [Thread-291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:33:24.217 [DEBUG] [Thread-291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:33:24.258 [DEBUG] [Thread-291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:33:24.258 [DEBUG] [Thread-291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:33:24.261 [DEBUG] [Thread-291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:33:24.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:33:24.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:33:24.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:33:24.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:33:24.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:33:24.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:33:24.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:33:24.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:33:24.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:33:24.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.856313 -999.00  +14.90  25.45     75  +10.60 1 1 1 1 1     0    0 3.36 -41.94 ZNESW 32.6 25.4 154.4 36.7 15.6 -21.0 15.5 -20.5 15.3 -19.1 15.6 -20.2
2025-12-24T22:33:24.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:33:24.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:33:24.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.856313
2025-12-24T22:33:24.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:33:24.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:33:24.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:33:24.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:33:24.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:33:24.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:33:01', tmtdew=5.2, humidity=71.28, cloud=0.0, wind=27.7, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:33:02', seeing=1.58, atlas_timestamp='2025-12-24T20:33:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:30:00')
2025-12-24T22:33:24.287 [DEBUG] [Thread-291] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:33:24.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:33:24.388 [DEBUG] [Thread-294] [transport.py] [_log()] starting thread (client mode): 0xb955b0d0
2025-12-24T22:33:24.388 [DEBUG] [Thread-294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:33:24.402 [DEBUG] [Thread-294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:33:24.403 [INFO] [Thread-294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:33:24.410 [DEBUG] [Thread-294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:33:24.410 [DEBUG] [Thread-294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:33:24.410 [DEBUG] [Thread-294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:33:24.410 [DEBUG] [Thread-294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] client lang: <none>
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] server lang: <none>
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] kex follows: False
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] Compression: none
2025-12-24T22:33:24.411 [DEBUG] [Thread-294] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:33:24.472 [DEBUG] [Thread-294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:33:24.473 [DEBUG] [Thread-294] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:33:24.474 [DEBUG] [Thread-294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:33:24.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:33:24.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:33:24.533 [DEBUG] [Thread-294] [transport.py] [_log()] userauth is OK
2025-12-24T22:33:24.533 [DEBUG] [Thread-294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:33:24.533 [DEBUG] [Thread-294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:33:24.533 [DEBUG] [Thread-294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:33:24.534 [DEBUG] [Thread-294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:33:24.552 [INFO] [Thread-294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:33:24.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:33:24.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:33:25.376 [DEBUG] [Thread-294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:33:25.376 [DEBUG] [Thread-294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:33:25.424 [DEBUG] [Thread-294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:33:25.424 [DEBUG] [Thread-294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:33:25.433 [DEBUG] [Thread-294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:33:25.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:33:25.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:33:25.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:33:25.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:33:25.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:33:25.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:33:25.467 [DEBUG] [Thread-294] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:33:31.478 [DEBUG] [Thread-296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:46.531 [DEBUG] [Thread-297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:53.276 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:54.173 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:54.174 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:33:55.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:33:55.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:33:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:33:56.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 33, 33), 5.15, 71.26, 0.0, 27.67, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:33:56.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:33:33
2025-12-24T22:33:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:33:56.477 [DEBUG] [Thread-298] [transport.py] [_log()] starting thread (client mode): 0xb957b190
2025-12-24T22:33:56.477 [DEBUG] [Thread-298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:33:56.498 [DEBUG] [Thread-298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:33:56.499 [INFO] [Thread-298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:33:56.500 [DEBUG] [Thread-298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:33:56.500 [DEBUG] [Thread-298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:33:56.500 [DEBUG] [Thread-298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:33:56.500 [DEBUG] [Thread-298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:33:56.500 [DEBUG] [Thread-298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:33:56.500 [DEBUG] [Thread-298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:33:56.500 [DEBUG] [Thread-298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:33:56.500 [DEBUG] [Thread-298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] client lang: <none>
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] server lang: <none>
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] kex follows: False
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] Compression: none
2025-12-24T22:33:56.501 [DEBUG] [Thread-298] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:33:56.510 [DEBUG] [Thread-298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:33:56.511 [DEBUG] [Thread-298] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:33:56.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:33:56.511 [DEBUG] [Thread-298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:33:56.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:33:56.513 [DEBUG] [Thread-298] [transport.py] [_log()] userauth is OK
2025-12-24T22:33:56.514 [DEBUG] [Thread-298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:33:56.514 [DEBUG] [Thread-298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:33:56.514 [DEBUG] [Thread-298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:33:56.514 [DEBUG] [Thread-298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:33:56.538 [INFO] [Thread-298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:33:56.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:33:57.164 [DEBUG] [Thread-298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:33:57.165 [DEBUG] [Thread-298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:33:57.165 [DEBUG] [Thread-298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:33:57.206 [DEBUG] [Thread-298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:33:57.206 [DEBUG] [Thread-298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:33:57.210 [DEBUG] [Thread-298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:33:57.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:33:57.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:33:57.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:33:57.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:33:57.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:33:57.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:33:57.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:33:57.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:33:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:33:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.856660 -999.00  +14.90  24.57     75  +10.60 1 1 1 1 1     0    0 3.37 -40.02 ZNESW 21.1 24.6 166.6 31.8 15.6 -20.9 15.4 -20.5 15.3 -19.0 15.6 -20.0
2025-12-24T22:33:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:33:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:33:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.856660
2025-12-24T22:33:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:33:57.235 [DEBUG] [Thread-298] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:33:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:33:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:33:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:33:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:33:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:33:33', tmtdew=5.15, humidity=71.26, cloud=0.0, wind=27.67, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:33:34', seeing=1.85, atlas_timestamp='2025-12-24T20:33:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:30:00')
2025-12-24T22:33:57.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:33:57.337 [DEBUG] [Thread-301] [transport.py] [_log()] starting thread (client mode): 0xb9579390
2025-12-24T22:33:57.337 [DEBUG] [Thread-301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:33:57.351 [DEBUG] [Thread-301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:33:57.352 [INFO] [Thread-301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:33:57.359 [DEBUG] [Thread-301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:33:57.359 [DEBUG] [Thread-301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:33:57.359 [DEBUG] [Thread-301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:33:57.359 [DEBUG] [Thread-301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:33:57.359 [DEBUG] [Thread-301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] client lang: <none>
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] server lang: <none>
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] kex follows: False
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] Compression: none
2025-12-24T22:33:57.360 [DEBUG] [Thread-301] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:33:57.416 [DEBUG] [Thread-301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:33:57.417 [DEBUG] [Thread-301] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:33:57.417 [DEBUG] [Thread-301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:33:57.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:33:57.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:33:57.473 [DEBUG] [Thread-301] [transport.py] [_log()] userauth is OK
2025-12-24T22:33:57.473 [DEBUG] [Thread-301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:33:57.473 [DEBUG] [Thread-301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:33:57.473 [DEBUG] [Thread-301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:33:57.473 [DEBUG] [Thread-301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:33:57.492 [INFO] [Thread-301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:33:57.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:33:57.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:33:58.276 [DEBUG] [Thread-301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:33:58.276 [DEBUG] [Thread-301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:33:58.325 [DEBUG] [Thread-301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:33:58.325 [DEBUG] [Thread-301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:33:58.334 [DEBUG] [Thread-301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:33:58.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:33:58.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:33:58.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:33:58.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:33:58.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:33:58.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:33:58.371 [DEBUG] [Thread-301] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:34:01.576 [DEBUG] [Thread-303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:07.464 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:10.509 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:12.516 [DEBUG] [Thread-304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:16.634 [DEBUG] [Thread-305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:34:28.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:34:28.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:34:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 34, 5), 5.15, 71.26, 0.0, 28.27, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:34:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:34:05
2025-12-24T22:34:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:34:29.381 [DEBUG] [Thread-306] [transport.py] [_log()] starting thread (client mode): 0xb957ab60
2025-12-24T22:34:29.381 [DEBUG] [Thread-306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:34:29.402 [DEBUG] [Thread-306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:34:29.402 [INFO] [Thread-306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] client lang: <none>
2025-12-24T22:34:29.405 [DEBUG] [Thread-306] [transport.py] [_log()] server lang: <none>
2025-12-24T22:34:29.406 [DEBUG] [Thread-306] [transport.py] [_log()] kex follows: False
2025-12-24T22:34:29.406 [DEBUG] [Thread-306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:34:29.406 [DEBUG] [Thread-306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:34:29.406 [DEBUG] [Thread-306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:34:29.406 [DEBUG] [Thread-306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:34:29.406 [DEBUG] [Thread-306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:34:29.406 [DEBUG] [Thread-306] [transport.py] [_log()] Compression: none
2025-12-24T22:34:29.406 [DEBUG] [Thread-306] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:34:29.424 [DEBUG] [Thread-306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:34:29.425 [DEBUG] [Thread-306] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:34:29.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:34:29.426 [DEBUG] [Thread-306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:34:29.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:34:29.428 [DEBUG] [Thread-306] [transport.py] [_log()] userauth is OK
2025-12-24T22:34:29.429 [DEBUG] [Thread-306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:34:29.429 [DEBUG] [Thread-306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:34:29.429 [DEBUG] [Thread-306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:34:29.429 [DEBUG] [Thread-306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:34:29.453 [INFO] [Thread-306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:34:29.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:34:30.065 [DEBUG] [Thread-306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:34:30.065 [DEBUG] [Thread-306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:34:30.066 [DEBUG] [Thread-306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:34:30.106 [DEBUG] [Thread-306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:34:30.106 [DEBUG] [Thread-306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:34:30.108 [DEBUG] [Thread-306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:34:30.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:34:30.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:34:30.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:34:30.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:34:30.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:34:30.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:34:30.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:34:30.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:34:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:34:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.857007 -999.00  +14.80  24.35     75  +10.60 1 1 1 1 1     0    0 3.41 -39.91 ZNESW 25.9 24.4 151.6 28.4 15.6 -20.9 15.4 -20.5 15.3 -19.2 15.6 -20.1
2025-12-24T22:34:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:34:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:34:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.857007
2025-12-24T22:34:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:34:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:34:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:34:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:34:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:34:30.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:34:05', tmtdew=5.15, humidity=71.26, cloud=0.0, wind=28.27, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:34:06', seeing=1.68, atlas_timestamp='2025-12-24T20:34:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:33:00')
2025-12-24T22:34:30.127 [DEBUG] [Thread-306] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:34:30.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:34:30.235 [DEBUG] [Thread-309] [transport.py] [_log()] starting thread (client mode): 0xb9579630
2025-12-24T22:34:30.235 [DEBUG] [Thread-309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:34:30.251 [DEBUG] [Thread-309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:34:30.251 [INFO] [Thread-309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:34:30.262 [DEBUG] [Thread-309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:34:30.262 [DEBUG] [Thread-309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:34:30.262 [DEBUG] [Thread-309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:34:30.262 [DEBUG] [Thread-309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:34:30.262 [DEBUG] [Thread-309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:34:30.263 [DEBUG] [Thread-309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:34:30.263 [DEBUG] [Thread-309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:34:30.263 [DEBUG] [Thread-309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:34:30.263 [DEBUG] [Thread-309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:34:30.263 [DEBUG] [Thread-309] [transport.py] [_log()] client lang: <none>
2025-12-24T22:34:30.263 [DEBUG] [Thread-309] [transport.py] [_log()] server lang: <none>
2025-12-24T22:34:30.263 [DEBUG] [Thread-309] [transport.py] [_log()] kex follows: False
2025-12-24T22:34:30.263 [DEBUG] [Thread-309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:34:30.264 [DEBUG] [Thread-309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:34:30.264 [DEBUG] [Thread-309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:34:30.264 [DEBUG] [Thread-309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:34:30.264 [DEBUG] [Thread-309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:34:30.264 [DEBUG] [Thread-309] [transport.py] [_log()] Compression: none
2025-12-24T22:34:30.264 [DEBUG] [Thread-309] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:34:30.327 [DEBUG] [Thread-309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:34:30.327 [DEBUG] [Thread-309] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:34:30.328 [DEBUG] [Thread-309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:34:30.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:34:30.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:34:30.395 [DEBUG] [Thread-309] [transport.py] [_log()] userauth is OK
2025-12-24T22:34:30.396 [DEBUG] [Thread-309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:34:30.396 [DEBUG] [Thread-309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:34:30.396 [DEBUG] [Thread-309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:34:30.396 [DEBUG] [Thread-309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:34:30.416 [INFO] [Thread-309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:34:30.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:34:30.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:34:31.203 [DEBUG] [Thread-309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:34:31.204 [DEBUG] [Thread-309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:34:31.252 [DEBUG] [Thread-309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:34:31.252 [DEBUG] [Thread-309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:34:31.262 [DEBUG] [Thread-309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:34:31.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:34:31.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:34:31.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:34:31.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:34:31.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:34:31.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:34:31.298 [DEBUG] [Thread-309] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:34:31.678 [DEBUG] [Thread-311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:41.007 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:46.743 [DEBUG] [Thread-312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:52.615 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:54.376 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:54.377 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:34:56.711 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:35:01.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:35:01.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:35:01.777 [DEBUG] [Thread-313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:02.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 34, 37), 5.16, 71.23, 0.0, 28.92, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:35:02.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:34:37
2025-12-24T22:35:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:35:02.332 [DEBUG] [Thread-314] [transport.py] [_log()] starting thread (client mode): 0xb9578940
2025-12-24T22:35:02.332 [DEBUG] [Thread-314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:35:02.350 [DEBUG] [Thread-314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:35:02.350 [INFO] [Thread-314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:35:02.353 [DEBUG] [Thread-314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:35:02.353 [DEBUG] [Thread-314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:35:02.353 [DEBUG] [Thread-314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:35:02.353 [DEBUG] [Thread-314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:35:02.353 [DEBUG] [Thread-314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:35:02.353 [DEBUG] [Thread-314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:35:02.353 [DEBUG] [Thread-314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:35:02.353 [DEBUG] [Thread-314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] client lang: <none>
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] server lang: <none>
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] kex follows: False
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] Compression: none
2025-12-24T22:35:02.354 [DEBUG] [Thread-314] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:35:02.370 [DEBUG] [Thread-314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:35:02.371 [DEBUG] [Thread-314] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:35:02.371 [DEBUG] [Thread-314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:35:02.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:35:02.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:35:02.373 [DEBUG] [Thread-314] [transport.py] [_log()] userauth is OK
2025-12-24T22:35:02.373 [DEBUG] [Thread-314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:35:02.373 [DEBUG] [Thread-314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:35:02.373 [DEBUG] [Thread-314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:35:02.373 [DEBUG] [Thread-314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:35:02.392 [INFO] [Thread-314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:35:02.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:35:03.032 [DEBUG] [Thread-314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:35:03.032 [DEBUG] [Thread-314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:35:03.033 [DEBUG] [Thread-314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:35:03.073 [DEBUG] [Thread-314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:35:03.073 [DEBUG] [Thread-314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:35:03.076 [DEBUG] [Thread-314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:35:03.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:35:03.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:35:03.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:35:03.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:35:03.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:35:03.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:35:03.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:35:03.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:35:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:35:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.857354 -999.00  +14.80  19.56     75  +10.60 1 1 1 1 1     0    0 3.36 -39.53 ZNESW 23.1 19.6 151.0 29.0 15.6 -20.9 15.4 -20.5 15.2 -19.2 15.6 -19.9
2025-12-24T22:35:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:35:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:35:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.857354
2025-12-24T22:35:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:35:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:35:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:35:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:35:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:35:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:34:37', tmtdew=5.16, humidity=71.23, cloud=0.0, wind=28.92, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:34:38', seeing=1.51, atlas_timestamp='2025-12-24T20:34:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:33:00')
2025-12-24T22:35:03.146 [DEBUG] [Thread-314] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:35:03.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:35:03.253 [DEBUG] [Thread-317] [transport.py] [_log()] starting thread (client mode): 0xbbfcccd0
2025-12-24T22:35:03.253 [DEBUG] [Thread-317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:35:03.268 [DEBUG] [Thread-317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:35:03.268 [INFO] [Thread-317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:35:03.276 [DEBUG] [Thread-317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:35:03.276 [DEBUG] [Thread-317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:35:03.276 [DEBUG] [Thread-317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:35:03.276 [DEBUG] [Thread-317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:35:03.276 [DEBUG] [Thread-317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] client lang: <none>
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] server lang: <none>
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] kex follows: False
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] Compression: none
2025-12-24T22:35:03.277 [DEBUG] [Thread-317] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:35:03.336 [DEBUG] [Thread-317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:35:03.337 [DEBUG] [Thread-317] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:35:03.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:35:03.338 [DEBUG] [Thread-317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:35:03.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:35:03.392 [DEBUG] [Thread-317] [transport.py] [_log()] userauth is OK
2025-12-24T22:35:03.392 [DEBUG] [Thread-317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:35:03.392 [DEBUG] [Thread-317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:35:03.393 [DEBUG] [Thread-317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:35:03.393 [DEBUG] [Thread-317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:35:03.411 [INFO] [Thread-317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:35:03.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:35:03.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:35:04.224 [DEBUG] [Thread-317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:35:04.224 [DEBUG] [Thread-317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:35:04.272 [DEBUG] [Thread-317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:35:04.272 [DEBUG] [Thread-317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:35:04.282 [DEBUG] [Thread-317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:35:04.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:35:04.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')
2025-12-24T22:35:04.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:35:04.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:35:04.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:35:04.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:35:04.320 [DEBUG] [Thread-317] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:35:12.568 [DEBUG] [Thread-319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:16.816 [DEBUG] [Thread-320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:27.205 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:31.875 [DEBUG] [Thread-321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:35:34.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:35:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:35:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 35, 10), 5.17, 71.2, 0.0, 30.97, 14.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:35:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:35:10
2025-12-24T22:35:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:35:35.330 [DEBUG] [Thread-322] [transport.py] [_log()] starting thread (client mode): 0xbbfccf70
2025-12-24T22:35:35.330 [DEBUG] [Thread-322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:35:35.351 [DEBUG] [Thread-322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:35:35.351 [INFO] [Thread-322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] client lang: <none>
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] server lang: <none>
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] kex follows: False
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:35:35.354 [DEBUG] [Thread-322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:35:35.355 [DEBUG] [Thread-322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:35:35.355 [DEBUG] [Thread-322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:35:35.355 [DEBUG] [Thread-322] [transport.py] [_log()] Compression: none
2025-12-24T22:35:35.355 [DEBUG] [Thread-322] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:35:35.373 [DEBUG] [Thread-322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:35:35.374 [DEBUG] [Thread-322] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:35:35.374 [DEBUG] [Thread-322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:35:35.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:35:35.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:35:35.376 [DEBUG] [Thread-322] [transport.py] [_log()] userauth is OK
2025-12-24T22:35:35.377 [DEBUG] [Thread-322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:35:35.377 [DEBUG] [Thread-322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:35:35.377 [DEBUG] [Thread-322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:35:35.377 [DEBUG] [Thread-322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:35:35.399 [INFO] [Thread-322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:35:35.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:35:36.015 [DEBUG] [Thread-322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:35:36.015 [DEBUG] [Thread-322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:35:36.016 [DEBUG] [Thread-322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:35:36.056 [DEBUG] [Thread-322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:35:36.056 [DEBUG] [Thread-322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:35:36.060 [DEBUG] [Thread-322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:35:36.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:35:36.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:35:36.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:35:36.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:35:36.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:35:36.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:35:36.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:35:36.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:35:36.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:35:36.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.857354 -999.00  +14.80  19.56     75  +10.60 1 1 1 1 1     0    0 3.36 -39.53 ZNESW 23.1 19.6 151.0 29.0 15.6 -20.9 15.4 -20.5 15.2 -19.2 15.6 -19.9
2025-12-24T22:35:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:35:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:35:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.857354
2025-12-24T22:35:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:35:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:35:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:35:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:35:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:35:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:35:10', tmtdew=5.17, humidity=71.2, cloud=0.0, wind=30.97, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:35:10', seeing=1.51, atlas_timestamp='2025-12-24T20:34:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:33:00')
2025-12-24T22:35:36.086 [DEBUG] [Thread-322] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:35:36.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:35:36.187 [DEBUG] [Thread-325] [transport.py] [_log()] starting thread (client mode): 0xb957ada0
2025-12-24T22:35:36.187 [DEBUG] [Thread-325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:35:36.204 [DEBUG] [Thread-325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:35:36.204 [INFO] [Thread-325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:35:36.212 [DEBUG] [Thread-325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:35:36.212 [DEBUG] [Thread-325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:35:36.212 [DEBUG] [Thread-325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:35:36.212 [DEBUG] [Thread-325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:35:36.212 [DEBUG] [Thread-325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:35:36.212 [DEBUG] [Thread-325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:35:36.212 [DEBUG] [Thread-325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:35:36.212 [DEBUG] [Thread-325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] client lang: <none>
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] server lang: <none>
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] kex follows: False
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] Compression: none
2025-12-24T22:35:36.213 [DEBUG] [Thread-325] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:35:36.272 [DEBUG] [Thread-325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:35:36.273 [DEBUG] [Thread-325] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:35:36.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:35:36.274 [DEBUG] [Thread-325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:35:36.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:35:36.332 [DEBUG] [Thread-325] [transport.py] [_log()] userauth is OK
2025-12-24T22:35:36.332 [DEBUG] [Thread-325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:35:36.332 [DEBUG] [Thread-325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:35:36.332 [DEBUG] [Thread-325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:35:36.332 [DEBUG] [Thread-325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:35:36.351 [INFO] [Thread-325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:35:36.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:35:36.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:35:37.010 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:37.159 [DEBUG] [Thread-325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:35:37.159 [DEBUG] [Thread-325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:35:37.207 [DEBUG] [Thread-325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:35:37.208 [DEBUG] [Thread-325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:35:37.217 [DEBUG] [Thread-325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:35:37.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:35:37.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:35:37.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:35:37.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:35:37.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:35:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:35:37.254 [DEBUG] [Thread-325] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:35:41.115 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:46.915 [DEBUG] [Thread-327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:54.596 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:35:54.597 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:01.980 [DEBUG] [Thread-328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:36:07.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:36:07.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:36:08.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 35, 42), 5.11, 71.26, 0.0, 25.71, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:36:08.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:35:42
2025-12-24T22:36:08.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:36:08.316 [DEBUG] [Thread-329] [transport.py] [_log()] starting thread (client mode): 0xb957a1d0
2025-12-24T22:36:08.316 [DEBUG] [Thread-329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:36:08.335 [DEBUG] [Thread-329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:36:08.335 [INFO] [Thread-329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] client lang: <none>
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] server lang: <none>
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] kex follows: False
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] Compression: none
2025-12-24T22:36:08.337 [DEBUG] [Thread-329] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:36:08.353 [DEBUG] [Thread-329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:36:08.353 [DEBUG] [Thread-329] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:36:08.353 [DEBUG] [Thread-329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:36:08.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:36:08.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:36:08.354 [DEBUG] [Thread-329] [transport.py] [_log()] userauth is OK
2025-12-24T22:36:08.354 [DEBUG] [Thread-329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:36:08.354 [DEBUG] [Thread-329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:36:08.354 [DEBUG] [Thread-329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:36:08.354 [DEBUG] [Thread-329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:36:08.363 [INFO] [Thread-329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:36:08.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:36:08.979 [DEBUG] [Thread-329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:36:08.979 [DEBUG] [Thread-329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:36:08.979 [DEBUG] [Thread-329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:36:09.020 [DEBUG] [Thread-329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:36:09.021 [DEBUG] [Thread-329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:36:09.023 [DEBUG] [Thread-329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:36:09.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:36:09.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:36:09.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:36:09.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:36:09.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:36:09.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:36:09.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:36:09.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.857701 -999.00  +14.80  14.98     75  +10.60 1 1 1 1 1     0    0 3.39 -37.62 ZNESW 18.9 15.0 150.4 29.7 15.6 -20.8 15.4 -20.4 15.3 -19.2 15.6 -20.0
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.857701
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:36:09.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:35:42', tmtdew=5.11, humidity=71.26, cloud=0.0, wind=25.71, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:35:42', seeing=1.37, atlas_timestamp='2025-12-24T20:35:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:33:00')
2025-12-24T22:36:09.041 [DEBUG] [Thread-329] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:36:09.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:36:09.136 [DEBUG] [Thread-332] [transport.py] [_log()] starting thread (client mode): 0xb9579cf0
2025-12-24T22:36:09.136 [DEBUG] [Thread-332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:36:09.151 [DEBUG] [Thread-332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:36:09.151 [INFO] [Thread-332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] client lang: <none>
2025-12-24T22:36:09.158 [DEBUG] [Thread-332] [transport.py] [_log()] server lang: <none>
2025-12-24T22:36:09.159 [DEBUG] [Thread-332] [transport.py] [_log()] kex follows: False
2025-12-24T22:36:09.159 [DEBUG] [Thread-332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:36:09.159 [DEBUG] [Thread-332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:36:09.159 [DEBUG] [Thread-332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:36:09.159 [DEBUG] [Thread-332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:36:09.159 [DEBUG] [Thread-332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:36:09.159 [DEBUG] [Thread-332] [transport.py] [_log()] Compression: none
2025-12-24T22:36:09.159 [DEBUG] [Thread-332] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:36:09.213 [DEBUG] [Thread-332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:36:09.213 [DEBUG] [Thread-332] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:36:09.213 [DEBUG] [Thread-332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:36:09.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:36:09.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:36:09.271 [DEBUG] [Thread-332] [transport.py] [_log()] userauth is OK
2025-12-24T22:36:09.271 [DEBUG] [Thread-332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:36:09.271 [DEBUG] [Thread-332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:36:09.271 [DEBUG] [Thread-332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:36:09.271 [DEBUG] [Thread-332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:36:09.284 [INFO] [Thread-332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:36:09.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:36:09.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:36:10.093 [DEBUG] [Thread-332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:36:10.093 [DEBUG] [Thread-332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:36:10.141 [DEBUG] [Thread-332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:36:10.141 [DEBUG] [Thread-332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:36:10.150 [DEBUG] [Thread-332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:36:10.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:36:10.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:36:10.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:36:10.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:36:10.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:36:10.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:36:10.181 [DEBUG] [Thread-332] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:36:11.519 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:12.625 [DEBUG] [Thread-334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:17.016 [DEBUG] [Thread-335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:20.389 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:24.473 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:32.081 [DEBUG] [Thread-336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:40.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:36:40.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:36:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:36:40.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 36, 14), 5.08, 71.36, 0.0, 27.19, 14.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:36:40.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:36:14
2025-12-24T22:36:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:36:41.186 [DEBUG] [Thread-337] [transport.py] [_log()] starting thread (client mode): 0xbbfcd690
2025-12-24T22:36:41.186 [DEBUG] [Thread-337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:36:41.206 [DEBUG] [Thread-337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:36:41.206 [INFO] [Thread-337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:36:41.207 [DEBUG] [Thread-337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:36:41.207 [DEBUG] [Thread-337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] client lang: <none>
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] server lang: <none>
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] kex follows: False
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] Compression: none
2025-12-24T22:36:41.208 [DEBUG] [Thread-337] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:36:41.218 [DEBUG] [Thread-337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:36:41.218 [DEBUG] [Thread-337] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:36:41.219 [DEBUG] [Thread-337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:36:41.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:36:41.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:36:41.221 [DEBUG] [Thread-337] [transport.py] [_log()] userauth is OK
2025-12-24T22:36:41.221 [DEBUG] [Thread-337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:36:41.221 [DEBUG] [Thread-337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:36:41.221 [DEBUG] [Thread-337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:36:41.221 [DEBUG] [Thread-337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:36:41.240 [INFO] [Thread-337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:36:41.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:36:41.829 [DEBUG] [Thread-337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:36:41.830 [DEBUG] [Thread-337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:36:41.830 [DEBUG] [Thread-337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:36:41.871 [DEBUG] [Thread-337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:36:41.871 [DEBUG] [Thread-337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:36:41.875 [DEBUG] [Thread-337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:36:41.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:36:41.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:36:41.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:36:41.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:36:41.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:36:41.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:36:41.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:36:41.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:36:41.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:36:41.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.858396 -999.00  +14.80  16.39     75  +10.60 1 1 1 1 1     0    0 3.32 -38.83 ZNESW 18.2 16.4 158.8 25.7 15.6 -20.8 15.4 -20.4 15.2 -19.2 15.6 -20.0
2025-12-24T22:36:41.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:36:41.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:36:41.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.858396
2025-12-24T22:36:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:36:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:36:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:36:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:36:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:36:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:36:14', tmtdew=5.08, humidity=71.36, cloud=0.0, wind=27.19, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:36:14', seeing=1.29, atlas_timestamp='2025-12-24T20:36:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:33:00')
2025-12-24T22:36:41.901 [DEBUG] [Thread-337] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:36:41.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:36:42.004 [DEBUG] [Thread-340] [transport.py] [_log()] starting thread (client mode): 0xbbfcd720
2025-12-24T22:36:42.004 [DEBUG] [Thread-340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:36:42.018 [DEBUG] [Thread-340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:36:42.018 [INFO] [Thread-340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:36:42.026 [DEBUG] [Thread-340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:36:42.026 [DEBUG] [Thread-340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:36:42.026 [DEBUG] [Thread-340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:36:42.026 [DEBUG] [Thread-340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:36:42.026 [DEBUG] [Thread-340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] client lang: <none>
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] server lang: <none>
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] kex follows: False
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] Compression: none
2025-12-24T22:36:42.027 [DEBUG] [Thread-340] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:36:42.087 [DEBUG] [Thread-340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:36:42.088 [DEBUG] [Thread-340] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:36:42.088 [DEBUG] [Thread-340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:36:42.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:36:42.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:36:42.143 [DEBUG] [Thread-340] [transport.py] [_log()] userauth is OK
2025-12-24T22:36:42.143 [DEBUG] [Thread-340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:36:42.143 [DEBUG] [Thread-340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:36:42.144 [DEBUG] [Thread-340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:36:42.144 [DEBUG] [Thread-340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:36:42.162 [INFO] [Thread-340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:36:42.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:36:42.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:36:42.960 [DEBUG] [Thread-340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:36:42.960 [DEBUG] [Thread-340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:36:43.008 [DEBUG] [Thread-340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:36:43.008 [DEBUG] [Thread-340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:36:43.017 [DEBUG] [Thread-340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:36:43.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:36:43.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:36:43.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:36:43.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:36:43.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:36:43.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:36:43.054 [DEBUG] [Thread-340] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:36:47.123 [DEBUG] [Thread-342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:54.801 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:54.802 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:36:54.869 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:02.175 [DEBUG] [Thread-343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:04.713 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:08.806 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:12.700 [DEBUG] [Thread-344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:13.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:37:13.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:37:13.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:37:13.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 36, 46), 5.08, 71.4, 0.0, 28.04, 14.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:37:13.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:36:46
2025-12-24T22:37:13.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:37:14.048 [DEBUG] [Thread-345] [transport.py] [_log()] starting thread (client mode): 0xb9579600
2025-12-24T22:37:14.048 [DEBUG] [Thread-345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:37:14.069 [DEBUG] [Thread-345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:37:14.069 [INFO] [Thread-345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:37:14.070 [DEBUG] [Thread-345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] client lang: <none>
2025-12-24T22:37:14.071 [DEBUG] [Thread-345] [transport.py] [_log()] server lang: <none>
2025-12-24T22:37:14.072 [DEBUG] [Thread-345] [transport.py] [_log()] kex follows: False
2025-12-24T22:37:14.072 [DEBUG] [Thread-345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:37:14.072 [DEBUG] [Thread-345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:37:14.072 [DEBUG] [Thread-345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:37:14.072 [DEBUG] [Thread-345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:37:14.072 [DEBUG] [Thread-345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:37:14.072 [DEBUG] [Thread-345] [transport.py] [_log()] Compression: none
2025-12-24T22:37:14.072 [DEBUG] [Thread-345] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:37:14.090 [DEBUG] [Thread-345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:37:14.091 [DEBUG] [Thread-345] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:37:14.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:37:14.092 [DEBUG] [Thread-345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:37:14.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:37:14.094 [DEBUG] [Thread-345] [transport.py] [_log()] userauth is OK
2025-12-24T22:37:14.094 [DEBUG] [Thread-345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:37:14.094 [DEBUG] [Thread-345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:37:14.094 [DEBUG] [Thread-345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:37:14.094 [DEBUG] [Thread-345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:37:14.117 [INFO] [Thread-345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:37:14.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:37:14.766 [DEBUG] [Thread-345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:37:14.766 [DEBUG] [Thread-345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:37:14.767 [DEBUG] [Thread-345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:37:14.807 [DEBUG] [Thread-345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:37:14.808 [DEBUG] [Thread-345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:37:14.811 [DEBUG] [Thread-345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:37:14.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:37:14.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:37:14.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:37:14.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:37:14.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:37:14.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:37:14.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:37:14.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:37:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:37:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.858743 -999.00  +14.80  19.27     75  +10.60 1 1 1 1 1     0    0 3.36 -39.04 ZNESW 23.8 19.3 164.2 25.9 15.6 -20.9 15.4 -20.4 15.3 -19.2 15.6 -20.0
2025-12-24T22:37:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:37:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:37:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.858743
2025-12-24T22:37:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:37:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:37:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:37:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:37:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:37:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:36:46', tmtdew=5.08, humidity=71.4, cloud=0.0, wind=28.04, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:36:46', seeing=1.33, atlas_timestamp='2025-12-24T20:36:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.15575000000000117, 0.16024999999999956, 0.13949999999999996, 0.1485000000000003, 0.19725000000000037, 0.1274999999999995, 0.13724999999999987, 0.08549999999999969, 0.13449999999999918, 0.17225000000000001, 0.0990000000000002, 0.23099999999999987, 0.12624999999999886, 0.10200000000000031, 0.08300000000000018, 0.1532499999999999, 0.15949999999999953, 0.1169999999999991, 0.08424999999999905, 0.16499999999999915, 0.1587499999999995, 0.12725000000000009, 0.13475000000000037, 0.13449999999999918, 0.2085000000000008, 0.14874999999999972, 0.19149999999999956, 0.1374999999999993, 0.18650000000000233, 0.20250000000000057, 0.1075000000000017, 0.24074999999999847], zp_timestamp='2025-12-24T20:33:00')
2025-12-24T22:37:14.838 [DEBUG] [Thread-345] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:37:14.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:37:14.939 [DEBUG] [Thread-348] [transport.py] [_log()] starting thread (client mode): 0xb9578eb0
2025-12-24T22:37:14.939 [DEBUG] [Thread-348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:37:14.953 [DEBUG] [Thread-348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:37:14.954 [INFO] [Thread-348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:37:14.961 [DEBUG] [Thread-348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] client lang: <none>
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] server lang: <none>
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] kex follows: False
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:37:14.962 [DEBUG] [Thread-348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:37:14.963 [DEBUG] [Thread-348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:37:14.963 [DEBUG] [Thread-348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:37:14.963 [DEBUG] [Thread-348] [transport.py] [_log()] Compression: none
2025-12-24T22:37:14.963 [DEBUG] [Thread-348] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:37:15.019 [DEBUG] [Thread-348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:37:15.019 [DEBUG] [Thread-348] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:37:15.020 [DEBUG] [Thread-348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:37:15.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:37:15.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:37:15.075 [DEBUG] [Thread-348] [transport.py] [_log()] userauth is OK
2025-12-24T22:37:15.075 [DEBUG] [Thread-348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:37:15.075 [DEBUG] [Thread-348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:37:15.075 [DEBUG] [Thread-348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:37:15.076 [DEBUG] [Thread-348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:37:15.095 [INFO] [Thread-348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:37:15.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:37:15.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:37:15.883 [DEBUG] [Thread-348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:37:15.883 [DEBUG] [Thread-348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:37:15.931 [DEBUG] [Thread-348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:37:15.931 [DEBUG] [Thread-348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:37:15.940 [DEBUG] [Thread-348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:37:15.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:37:15.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:37:15.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:37:15.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:37:15.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:37:15.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:37:15.978 [DEBUG] [Thread-348] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:37:17.216 [DEBUG] [Thread-350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:32.277 [DEBUG] [Thread-351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:39.212 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:46.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:37:46.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:37:46.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:37:46.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 37, 18), 5.08, 71.4, 0.0, 30.61, 14.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:37:46.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:37:18
2025-12-24T22:37:46.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:37:46.978 [DEBUG] [Thread-352] [transport.py] [_log()] starting thread (client mode): 0xb95791b0
2025-12-24T22:37:46.978 [DEBUG] [Thread-352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:37:46.999 [DEBUG] [Thread-352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:37:46.999 [INFO] [Thread-352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] client lang: <none>
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] server lang: <none>
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] kex follows: False
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] Compression: none
2025-12-24T22:37:47.002 [DEBUG] [Thread-352] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:37:47.017 [DEBUG] [Thread-352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:37:47.017 [DEBUG] [Thread-352] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:37:47.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:37:47.017 [DEBUG] [Thread-352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:37:47.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:37:47.018 [DEBUG] [Thread-352] [transport.py] [_log()] userauth is OK
2025-12-24T22:37:47.018 [DEBUG] [Thread-352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:37:47.018 [DEBUG] [Thread-352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:37:47.018 [DEBUG] [Thread-352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:37:47.018 [DEBUG] [Thread-352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:37:47.033 [INFO] [Thread-352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:37:47.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:37:47.323 [DEBUG] [Thread-354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:47.802 [DEBUG] [Thread-352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:37:47.802 [DEBUG] [Thread-352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:37:47.803 [DEBUG] [Thread-352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:37:47.844 [DEBUG] [Thread-352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:37:47.844 [DEBUG] [Thread-352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:37:47.847 [DEBUG] [Thread-352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:37:47.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:37:47.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:37:47.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:37:47.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:37:47.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:37:47.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:37:47.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:37:47.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:37:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:37:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.859090 -999.00  +14.80  27.96     75  +10.60 1 1 1 1 1     0    0 3.47 -35.97 ZNESW 22.5 28.0 151.8 34.2 15.5 -20.9 15.4 -20.5 15.2 -19.3 15.5 -20.1
2025-12-24T22:37:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:37:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:37:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.859090
2025-12-24T22:37:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:37:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:37:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:37:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:37:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:37:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:37:18', tmtdew=5.08, humidity=71.4, cloud=0.0, wind=30.61, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:37:18', seeing=1.34, atlas_timestamp='2025-12-24T20:37:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.1277500000000007, 0.12025000000000041, 0.1609999999999978, 0.0884999999999998, 0.19625000000000092, 0.06799999999999962, 0.10025000000000084, 0.07049999999999912, 0.12049999999999983, 0.15424999999999933, 0.058999999999999275, 0.1769999999999996, 0.16424999999999912, 0.08799999999999919, 0.07199999999999918, 0.16225000000000023, 0.13949999999999996, 0.1039999999999992, 0.05274999999999963, 0.13699999999999868, 0.11574999999999847, 0.09625000000000128, 0.1067499999999999, 0.1609999999999996, 0.136000000000001, 0.1462500000000002, 0.1609999999999996, 0.1509999999999998, 0.16100000000000136, 0.16800000000000104, 0.09299999999999997, 0.20474999999999888], zp_timestamp='2025-12-24T20:35:00')
2025-12-24T22:37:47.868 [DEBUG] [Thread-352] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:37:47.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:37:47.969 [DEBUG] [Thread-356] [transport.py] [_log()] starting thread (client mode): 0xb9558cd0
2025-12-24T22:37:47.969 [DEBUG] [Thread-356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:37:47.984 [DEBUG] [Thread-356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:37:47.984 [INFO] [Thread-356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:37:47.994 [DEBUG] [Thread-356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:37:47.994 [DEBUG] [Thread-356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:37:47.995 [DEBUG] [Thread-356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:37:47.995 [DEBUG] [Thread-356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:37:47.995 [DEBUG] [Thread-356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:37:47.995 [DEBUG] [Thread-356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:37:47.995 [DEBUG] [Thread-356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:37:47.995 [DEBUG] [Thread-356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:37:47.995 [DEBUG] [Thread-356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:37:47.995 [DEBUG] [Thread-356] [transport.py] [_log()] client lang: <none>
2025-12-24T22:37:47.996 [DEBUG] [Thread-356] [transport.py] [_log()] server lang: <none>
2025-12-24T22:37:47.996 [DEBUG] [Thread-356] [transport.py] [_log()] kex follows: False
2025-12-24T22:37:47.996 [DEBUG] [Thread-356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:37:47.996 [DEBUG] [Thread-356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:37:47.996 [DEBUG] [Thread-356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:37:47.996 [DEBUG] [Thread-356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:37:47.996 [DEBUG] [Thread-356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:37:47.997 [DEBUG] [Thread-356] [transport.py] [_log()] Compression: none
2025-12-24T22:37:47.997 [DEBUG] [Thread-356] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:37:48.051 [DEBUG] [Thread-356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:37:48.052 [DEBUG] [Thread-356] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:37:48.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:37:48.053 [DEBUG] [Thread-356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:37:48.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:37:48.110 [DEBUG] [Thread-356] [transport.py] [_log()] userauth is OK
2025-12-24T22:37:48.110 [DEBUG] [Thread-356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:37:48.111 [DEBUG] [Thread-356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:37:48.111 [DEBUG] [Thread-356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:37:48.111 [DEBUG] [Thread-356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:37:48.130 [INFO] [Thread-356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:37:48.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:37:48.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:37:48.925 [DEBUG] [Thread-356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:37:48.925 [DEBUG] [Thread-356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:37:48.972 [DEBUG] [Thread-356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:37:48.973 [DEBUG] [Thread-356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:37:48.981 [DEBUG] [Thread-356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:37:48.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:37:48.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')
2025-12-24T22:37:48.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:37:49.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:37:49.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:37:49.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:37:49.015 [DEBUG] [Thread-356] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:37:51.604 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:54.652 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:55.009 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:37:55.010 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:02.366 [DEBUG] [Thread-358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:12.757 [DEBUG] [Thread-359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:17.441 [DEBUG] [Thread-360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:38:19.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:38:19.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:38:19.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 37, 50), 5.08, 71.38, 0.0, 29.87, 14.81, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:38:19.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:37:50
2025-12-24T22:38:19.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:38:20.025 [DEBUG] [Thread-361] [transport.py] [_log()] starting thread (client mode): 0xb955b670
2025-12-24T22:38:20.025 [DEBUG] [Thread-361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:38:20.047 [DEBUG] [Thread-361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:38:20.047 [INFO] [Thread-361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:38:20.050 [DEBUG] [Thread-361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:38:20.050 [DEBUG] [Thread-361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] client lang: <none>
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] server lang: <none>
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] kex follows: False
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] Compression: none
2025-12-24T22:38:20.051 [DEBUG] [Thread-361] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:38:20.069 [DEBUG] [Thread-361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:38:20.069 [DEBUG] [Thread-361] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:38:20.070 [DEBUG] [Thread-361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:38:20.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:38:20.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:38:20.072 [DEBUG] [Thread-361] [transport.py] [_log()] userauth is OK
2025-12-24T22:38:20.072 [DEBUG] [Thread-361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:38:20.072 [DEBUG] [Thread-361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:38:20.072 [DEBUG] [Thread-361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:38:20.072 [DEBUG] [Thread-361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:38:20.096 [INFO] [Thread-361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:38:20.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:38:20.764 [DEBUG] [Thread-361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:38:20.765 [DEBUG] [Thread-361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:38:20.765 [DEBUG] [Thread-361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:38:20.805 [DEBUG] [Thread-361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:38:20.806 [DEBUG] [Thread-361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:38:20.807 [DEBUG] [Thread-361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:38:20.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:38:20.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:38:20.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:38:20.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:38:20.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:38:20.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:38:20.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:38:20.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:38:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:38:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.859438 -999.00  +14.80  17.86     75  +10.60 1 1 1 1 1     0    0 3.45 -34.18 ZNESW 18.1 17.9 155.6 24.1 15.5 -20.8 15.4 -20.4 15.2 -19.1 15.5 -20.1
2025-12-24T22:38:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:38:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:38:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.859438
2025-12-24T22:38:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:38:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:38:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:38:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:38:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:38:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:37:50', tmtdew=5.08, humidity=71.38, cloud=0.0, wind=29.87, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:37:51', seeing=1.38, atlas_timestamp='2025-12-24T20:37:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.1277500000000007, 0.12025000000000041, 0.1609999999999978, 0.0884999999999998, 0.19625000000000092, 0.06799999999999962, 0.10025000000000084, 0.07049999999999912, 0.12049999999999983, 0.15424999999999933, 0.058999999999999275, 0.1769999999999996, 0.16424999999999912, 0.08799999999999919, 0.07199999999999918, 0.16225000000000023, 0.13949999999999996, 0.1039999999999992, 0.05274999999999963, 0.13699999999999868, 0.11574999999999847, 0.09625000000000128, 0.1067499999999999, 0.1609999999999996, 0.136000000000001, 0.1462500000000002, 0.1609999999999996, 0.1509999999999998, 0.16100000000000136, 0.16800000000000104, 0.09299999999999997, 0.20474999999999888], zp_timestamp='2025-12-24T20:35:00')
2025-12-24T22:38:20.831 [DEBUG] [Thread-361] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:38:20.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:38:20.935 [DEBUG] [Thread-364] [transport.py] [_log()] starting thread (client mode): 0xb9578220
2025-12-24T22:38:20.935 [DEBUG] [Thread-364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:38:20.950 [DEBUG] [Thread-364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:38:20.950 [INFO] [Thread-364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:38:20.958 [DEBUG] [Thread-364] [transport.py] [_log()] client lang: <none>
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] server lang: <none>
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] kex follows: False
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] Compression: none
2025-12-24T22:38:20.959 [DEBUG] [Thread-364] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:38:21.018 [DEBUG] [Thread-364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:38:21.018 [DEBUG] [Thread-364] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:38:21.019 [DEBUG] [Thread-364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:38:21.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:38:21.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:38:21.074 [DEBUG] [Thread-364] [transport.py] [_log()] userauth is OK
2025-12-24T22:38:21.074 [DEBUG] [Thread-364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:38:21.075 [DEBUG] [Thread-364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:38:21.075 [DEBUG] [Thread-364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:38:21.075 [DEBUG] [Thread-364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:38:21.093 [INFO] [Thread-364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:38:21.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:38:21.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:38:21.891 [DEBUG] [Thread-364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:38:21.891 [DEBUG] [Thread-364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:38:21.939 [DEBUG] [Thread-364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:38:21.939 [DEBUG] [Thread-364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:38:21.949 [DEBUG] [Thread-364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:38:21.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:38:21.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:38:21.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
2025-12-24T22:38:21.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:38:21.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:38:21.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:38:21.985 [DEBUG] [Thread-364] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:38:25.088 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:32.482 [DEBUG] [Thread-366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:36.051 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:40.111 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:47.543 [DEBUG] [Thread-367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:52.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:38:52.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:38:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:38:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 38, 22), 5.06, 71.48, 0.0, 28.25, 14.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:38:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:38:22
2025-12-24T22:38:52.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:38:52.994 [DEBUG] [Thread-368] [transport.py] [_log()] starting thread (client mode): 0xb957bd30
2025-12-24T22:38:52.994 [DEBUG] [Thread-368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:38:53.012 [DEBUG] [Thread-368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:38:53.012 [INFO] [Thread-368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] client lang: <none>
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] server lang: <none>
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] kex follows: False
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:38:53.015 [DEBUG] [Thread-368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:38:53.016 [DEBUG] [Thread-368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:38:53.016 [DEBUG] [Thread-368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:38:53.016 [DEBUG] [Thread-368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:38:53.016 [DEBUG] [Thread-368] [transport.py] [_log()] Compression: none
2025-12-24T22:38:53.016 [DEBUG] [Thread-368] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:38:53.033 [DEBUG] [Thread-368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:38:53.033 [DEBUG] [Thread-368] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:38:53.034 [DEBUG] [Thread-368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:38:53.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:38:53.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:38:53.036 [DEBUG] [Thread-368] [transport.py] [_log()] userauth is OK
2025-12-24T22:38:53.036 [DEBUG] [Thread-368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:38:53.036 [DEBUG] [Thread-368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:38:53.036 [DEBUG] [Thread-368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:38:53.036 [DEBUG] [Thread-368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:38:53.061 [INFO] [Thread-368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:38:53.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:38:53.861 [DEBUG] [Thread-368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:38:53.862 [DEBUG] [Thread-368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:38:53.862 [DEBUG] [Thread-368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:38:53.902 [DEBUG] [Thread-368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:38:53.902 [DEBUG] [Thread-368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:38:53.906 [DEBUG] [Thread-368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:38:53.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:38:53.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:38:53.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:38:53.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:38:53.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:38:53.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:38:53.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:38:53.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:38:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:38:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.859785 -999.00  +14.80  17.27     75  +10.60 1 1 1 1 1     0    0 3.44 -34.46 ZNESW 16.6 17.3 147.2 27.6 15.5 -20.8 15.4 -20.4 15.2 -19.0 15.6 -20.0
2025-12-24T22:38:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:38:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:38:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.859785
2025-12-24T22:38:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:38:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:38:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:38:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:38:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:38:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:38:22', tmtdew=5.06, humidity=71.48, cloud=0.0, wind=28.25, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:38:23', seeing=1.46, atlas_timestamp='2025-12-24T20:38:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.1277500000000007, 0.12025000000000041, 0.1609999999999978, 0.0884999999999998, 0.19625000000000092, 0.06799999999999962, 0.10025000000000084, 0.07049999999999912, 0.12049999999999983, 0.15424999999999933, 0.058999999999999275, 0.1769999999999996, 0.16424999999999912, 0.08799999999999919, 0.07199999999999918, 0.16225000000000023, 0.13949999999999996, 0.1039999999999992, 0.05274999999999963, 0.13699999999999868, 0.11574999999999847, 0.09625000000000128, 0.1067499999999999, 0.1609999999999996, 0.136000000000001, 0.1462500000000002, 0.1609999999999996, 0.1509999999999998, 0.16100000000000136, 0.16800000000000104, 0.09299999999999997, 0.20474999999999888], zp_timestamp='2025-12-24T20:35:00')
2025-12-24T22:38:53.931 [DEBUG] [Thread-368] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:38:54.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:38:54.034 [DEBUG] [Thread-371] [transport.py] [_log()] starting thread (client mode): 0xb9579c30
2025-12-24T22:38:54.034 [DEBUG] [Thread-371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:38:54.048 [DEBUG] [Thread-371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:38:54.049 [INFO] [Thread-371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:38:54.056 [DEBUG] [Thread-371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:38:54.056 [DEBUG] [Thread-371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:38:54.056 [DEBUG] [Thread-371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:38:54.056 [DEBUG] [Thread-371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] client lang: <none>
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] server lang: <none>
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] kex follows: False
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:38:54.057 [DEBUG] [Thread-371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:38:54.058 [DEBUG] [Thread-371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:38:54.058 [DEBUG] [Thread-371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:38:54.058 [DEBUG] [Thread-371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:38:54.058 [DEBUG] [Thread-371] [transport.py] [_log()] Compression: none
2025-12-24T22:38:54.058 [DEBUG] [Thread-371] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:38:54.114 [DEBUG] [Thread-371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:38:54.115 [DEBUG] [Thread-371] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:38:54.115 [DEBUG] [Thread-371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:38:54.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:38:54.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:38:54.170 [DEBUG] [Thread-371] [transport.py] [_log()] userauth is OK
2025-12-24T22:38:54.170 [DEBUG] [Thread-371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:38:54.171 [DEBUG] [Thread-371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:38:54.171 [DEBUG] [Thread-371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:38:54.171 [DEBUG] [Thread-371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:38:54.197 [INFO] [Thread-371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:38:54.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:38:54.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:38:55.001 [DEBUG] [Thread-371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:38:55.001 [DEBUG] [Thread-371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:38:55.049 [DEBUG] [Thread-371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:38:55.049 [DEBUG] [Thread-371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:38:55.058 [DEBUG] [Thread-371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:38:55.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:38:55.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:38:55.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:38:55.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:38:55.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:38:55.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:38:55.095 [DEBUG] [Thread-371] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:38:55.212 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:38:55.213 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:02.583 [DEBUG] [Thread-373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:10.509 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:12.829 [DEBUG] [Thread-374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:17.647 [DEBUG] [Thread-375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:19.315 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:23.427 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:39:25.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:39:25.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:39:25.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 38, 54), 5.06, 71.48, 0.0, 25.32, 14.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:39:25.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:38:54
2025-12-24T22:39:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:39:26.128 [DEBUG] [Thread-376] [transport.py] [_log()] starting thread (client mode): 0xb955ae90
2025-12-24T22:39:26.129 [DEBUG] [Thread-376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:39:26.150 [DEBUG] [Thread-376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:39:26.150 [INFO] [Thread-376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:39:26.153 [DEBUG] [Thread-376] [transport.py] [_log()] client lang: <none>
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] server lang: <none>
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] kex follows: False
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] Compression: none
2025-12-24T22:39:26.154 [DEBUG] [Thread-376] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:39:26.170 [DEBUG] [Thread-376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:39:26.170 [DEBUG] [Thread-376] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:39:26.171 [DEBUG] [Thread-376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:39:26.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:39:26.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:39:26.172 [DEBUG] [Thread-376] [transport.py] [_log()] userauth is OK
2025-12-24T22:39:26.172 [DEBUG] [Thread-376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:39:26.172 [DEBUG] [Thread-376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:39:26.172 [DEBUG] [Thread-376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:39:26.172 [DEBUG] [Thread-376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:39:26.190 [INFO] [Thread-376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:39:26.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:39:26.818 [DEBUG] [Thread-376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:39:26.818 [DEBUG] [Thread-376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:39:26.818 [DEBUG] [Thread-376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:39:26.859 [DEBUG] [Thread-376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:39:26.859 [DEBUG] [Thread-376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:39:26.861 [DEBUG] [Thread-376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:39:26.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:39:26.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:39:26.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:39:26.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:39:26.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:39:26.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:39:26.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:39:26.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.860132 -999.00  +14.80  20.71     75  +10.60 1 1 1 1 1     0    0 3.47 -33.40 ZNESW 27.4 20.7 151.8 24.8 15.5 -20.9 15.3 -20.3 15.2 -19.2 15.5 -20.0
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.860132
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:39:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:38:54', tmtdew=5.06, humidity=71.48, cloud=0.0, wind=25.32, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:38:55', seeing=1.46, atlas_timestamp='2025-12-24T20:38:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.1277500000000007, 0.12025000000000041, 0.1609999999999978, 0.0884999999999998, 0.19625000000000092, 0.06799999999999962, 0.10025000000000084, 0.07049999999999912, 0.12049999999999983, 0.15424999999999933, 0.058999999999999275, 0.1769999999999996, 0.16424999999999912, 0.08799999999999919, 0.07199999999999918, 0.16225000000000023, 0.13949999999999996, 0.1039999999999992, 0.05274999999999963, 0.13699999999999868, 0.11574999999999847, 0.09625000000000128, 0.1067499999999999, 0.1609999999999996, 0.136000000000001, 0.1462500000000002, 0.1609999999999996, 0.1509999999999998, 0.16100000000000136, 0.16800000000000104, 0.09299999999999997, 0.20474999999999888], zp_timestamp='2025-12-24T20:35:00')
2025-12-24T22:39:26.879 [DEBUG] [Thread-376] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:39:26.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:39:26.971 [DEBUG] [Thread-379] [transport.py] [_log()] starting thread (client mode): 0xb955b610
2025-12-24T22:39:26.971 [DEBUG] [Thread-379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:39:26.986 [DEBUG] [Thread-379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:39:26.987 [INFO] [Thread-379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] client lang: <none>
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] server lang: <none>
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] kex follows: False
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] Compression: none
2025-12-24T22:39:26.994 [DEBUG] [Thread-379] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:39:27.052 [DEBUG] [Thread-379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:39:27.052 [DEBUG] [Thread-379] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:39:27.053 [DEBUG] [Thread-379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:39:27.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:39:27.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:39:27.109 [DEBUG] [Thread-379] [transport.py] [_log()] userauth is OK
2025-12-24T22:39:27.109 [DEBUG] [Thread-379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:39:27.109 [DEBUG] [Thread-379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:39:27.109 [DEBUG] [Thread-379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:39:27.109 [DEBUG] [Thread-379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:39:27.123 [INFO] [Thread-379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:39:27.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:39:27.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:39:27.943 [DEBUG] [Thread-379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:39:27.943 [DEBUG] [Thread-379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:39:27.992 [DEBUG] [Thread-379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:39:27.992 [DEBUG] [Thread-379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:39:28.000 [DEBUG] [Thread-379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:39:28.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:39:28.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:39:28.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:39:28.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:39:28.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:39:28.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:39:28.033 [DEBUG] [Thread-379] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:39:32.683 [DEBUG] [Thread-381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:47.747 [DEBUG] [Thread-382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:53.862 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:55.428 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:55.429 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:39:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:39:58.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:39:58.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
2025-12-24T22:39:58.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 39, 26), 5.06, 71.46, 0.0, 27.45, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:39:58.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:39:26
2025-12-24T22:39:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:39:59.056 [DEBUG] [Thread-383] [transport.py] [_log()] starting thread (client mode): 0xb9559c90
2025-12-24T22:39:59.056 [DEBUG] [Thread-383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:39:59.077 [DEBUG] [Thread-383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:39:59.077 [INFO] [Thread-383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] client lang: <none>
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] server lang: <none>
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] kex follows: False
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:39:59.080 [DEBUG] [Thread-383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:39:59.081 [DEBUG] [Thread-383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:39:59.081 [DEBUG] [Thread-383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:39:59.081 [DEBUG] [Thread-383] [transport.py] [_log()] Compression: none
2025-12-24T22:39:59.081 [DEBUG] [Thread-383] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:39:59.098 [DEBUG] [Thread-383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:39:59.099 [DEBUG] [Thread-383] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:39:59.100 [DEBUG] [Thread-383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:39:59.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:39:59.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:39:59.102 [DEBUG] [Thread-383] [transport.py] [_log()] userauth is OK
2025-12-24T22:39:59.102 [DEBUG] [Thread-383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:39:59.102 [DEBUG] [Thread-383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:39:59.102 [DEBUG] [Thread-383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:39:59.102 [DEBUG] [Thread-383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:39:59.121 [INFO] [Thread-383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:39:59.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:39:59.899 [DEBUG] [Thread-383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:39:59.899 [DEBUG] [Thread-383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:39:59.900 [DEBUG] [Thread-383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:39:59.940 [DEBUG] [Thread-383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:39:59.940 [DEBUG] [Thread-383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:39:59.943 [DEBUG] [Thread-383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:39:59.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:39:59.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:39:59.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:39:59.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:39:59.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:39:59.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:39:59.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.860826 -999.00  +14.80  14.93     75  +10.60 1 1 1 1 1     0    0 3.48 -32.71 ZNESW 15.9 14.9 149.8 22.5 15.6 -20.8 15.4 -20.4 15.2 -19.0 15.5 -19.9
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.860826
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:39:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:39:26', tmtdew=5.06, humidity=71.46, cloud=0.0, wind=27.45, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:39:27', seeing=1.18, atlas_timestamp='2025-12-24T20:39:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.1277500000000007, 0.12025000000000041, 0.1609999999999978, 0.0884999999999998, 0.19625000000000092, 0.06799999999999962, 0.10025000000000084, 0.07049999999999912, 0.12049999999999983, 0.15424999999999933, 0.058999999999999275, 0.1769999999999996, 0.16424999999999912, 0.08799999999999919, 0.07199999999999918, 0.16225000000000023, 0.13949999999999996, 0.1039999999999992, 0.05274999999999963, 0.13699999999999868, 0.11574999999999847, 0.09625000000000128, 0.1067499999999999, 0.1609999999999996, 0.136000000000001, 0.1462500000000002, 0.1609999999999996, 0.1509999999999998, 0.16100000000000136, 0.16800000000000104, 0.09299999999999997, 0.20474999999999888], zp_timestamp='2025-12-24T20:35:00')
2025-12-24T22:39:59.955 [DEBUG] [Thread-383] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:40:00.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:40:00.047 [DEBUG] [Thread-386] [transport.py] [_log()] starting thread (client mode): 0xb957a0b0
2025-12-24T22:40:00.048 [DEBUG] [Thread-386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:40:00.062 [DEBUG] [Thread-386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:40:00.062 [INFO] [Thread-386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:40:00.069 [DEBUG] [Thread-386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:40:00.069 [DEBUG] [Thread-386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:40:00.069 [DEBUG] [Thread-386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] client lang: <none>
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] server lang: <none>
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] kex follows: False
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] Compression: none
2025-12-24T22:40:00.070 [DEBUG] [Thread-386] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:40:00.129 [DEBUG] [Thread-386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:40:00.129 [DEBUG] [Thread-386] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:40:00.129 [DEBUG] [Thread-386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:40:00.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:40:00.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:40:00.185 [DEBUG] [Thread-386] [transport.py] [_log()] userauth is OK
2025-12-24T22:40:00.185 [DEBUG] [Thread-386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:40:00.185 [DEBUG] [Thread-386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:40:00.185 [DEBUG] [Thread-386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:40:00.185 [DEBUG] [Thread-386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:40:00.199 [INFO] [Thread-386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:40:00.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:40:00.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:40:00.982 [DEBUG] [Thread-386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:40:00.982 [DEBUG] [Thread-386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:40:01.029 [DEBUG] [Thread-386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:40:01.029 [DEBUG] [Thread-386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:40:01.038 [DEBUG] [Thread-386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:40:01.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:40:01.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:40:01.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
2025-12-24T22:40:01.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:40:01.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:40:01.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:40:01.070 [DEBUG] [Thread-386] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:40:02.785 [DEBUG] [Thread-388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:03.857 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:07.950 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:12.897 [DEBUG] [Thread-389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:17.839 [DEBUG] [Thread-390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:40:31.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:40:31.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:40:31.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 39, 58), 5.05, 71.51, 0.0, 25.27, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:40:31.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:39:58
2025-12-24T22:40:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:40:32.115 [DEBUG] [Thread-391] [transport.py] [_log()] starting thread (client mode): 0xb955ac50
2025-12-24T22:40:32.115 [DEBUG] [Thread-391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:40:32.135 [DEBUG] [Thread-391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:40:32.136 [INFO] [Thread-391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] client lang: <none>
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] server lang: <none>
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] kex follows: False
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] Compression: none
2025-12-24T22:40:32.139 [DEBUG] [Thread-391] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:40:32.155 [DEBUG] [Thread-391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:40:32.156 [DEBUG] [Thread-391] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:40:32.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:40:32.156 [DEBUG] [Thread-391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:40:32.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:40:32.157 [DEBUG] [Thread-391] [transport.py] [_log()] userauth is OK
2025-12-24T22:40:32.157 [DEBUG] [Thread-391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:40:32.157 [DEBUG] [Thread-391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:40:32.157 [DEBUG] [Thread-391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:40:32.157 [DEBUG] [Thread-391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:40:32.173 [INFO] [Thread-391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:40:32.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:40:32.837 [DEBUG] [Thread-391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:40:32.837 [DEBUG] [Thread-391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:40:32.837 [DEBUG] [Thread-391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:40:32.878 [DEBUG] [Thread-391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:40:32.878 [DEBUG] [Thread-391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:40:32.880 [DEBUG] [Thread-393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:32.881 [DEBUG] [Thread-391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:40:32.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:40:32.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:40:32.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:40:32.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:40:32.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:40:32.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:40:32.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.861173 -999.00  +14.80  20.87     75  +10.60 1 1 1 1 1     0    0 3.41 -32.98 ZNESW 19.4 20.9 157.9 28.0 15.5 -20.8 15.4 -20.3 15.2 -19.1 15.5 -19.8
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.861173
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:40:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:39:58', tmtdew=5.05, humidity=71.51, cloud=0.0, wind=25.27, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:39:59', seeing=1.92, atlas_timestamp='2025-12-24T20:40:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:39:00')
2025-12-24T22:40:32.899 [DEBUG] [Thread-391] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:40:32.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:40:32.992 [DEBUG] [Thread-395] [transport.py] [_log()] starting thread (client mode): 0xbbfccee0
2025-12-24T22:40:32.992 [DEBUG] [Thread-395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:40:33.008 [DEBUG] [Thread-395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:40:33.008 [INFO] [Thread-395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] client lang: <none>
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] server lang: <none>
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] kex follows: False
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] Compression: none
2025-12-24T22:40:33.016 [DEBUG] [Thread-395] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:40:33.071 [DEBUG] [Thread-395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:40:33.071 [DEBUG] [Thread-395] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:40:33.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:40:33.072 [DEBUG] [Thread-395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:40:33.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:40:33.128 [DEBUG] [Thread-395] [transport.py] [_log()] userauth is OK
2025-12-24T22:40:33.128 [DEBUG] [Thread-395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:40:33.128 [DEBUG] [Thread-395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:40:33.128 [DEBUG] [Thread-395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:40:33.128 [DEBUG] [Thread-395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:40:33.143 [INFO] [Thread-395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:40:33.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:40:33.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:40:33.982 [DEBUG] [Thread-395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:40:33.982 [DEBUG] [Thread-395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:40:34.029 [DEBUG] [Thread-395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:40:34.030 [DEBUG] [Thread-395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:40:34.039 [DEBUG] [Thread-395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:40:34.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:40:34.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:40:34.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:40:34.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:40:34.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:40:34.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:40:34.075 [DEBUG] [Thread-395] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:40:38.349 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:47.143 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:47.914 [DEBUG] [Thread-397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:51.291 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:55.627 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:40:55.628 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:41:02.991 [DEBUG] [Thread-398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:41:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:41:04.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:41:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:41:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 40, 30), 5.04, 71.55, 0.0, 23.87, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:41:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:40:30
2025-12-24T22:41:04.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:41:05.146 [DEBUG] [Thread-399] [transport.py] [_log()] starting thread (client mode): 0xb9546440
2025-12-24T22:41:05.146 [DEBUG] [Thread-399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:41:05.166 [DEBUG] [Thread-399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:41:05.166 [INFO] [Thread-399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] client lang: <none>
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] server lang: <none>
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] kex follows: False
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] Compression: none
2025-12-24T22:41:05.169 [DEBUG] [Thread-399] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:41:05.182 [DEBUG] [Thread-399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:41:05.183 [DEBUG] [Thread-399] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:41:05.183 [DEBUG] [Thread-399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:41:05.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:41:05.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:41:05.184 [DEBUG] [Thread-399] [transport.py] [_log()] userauth is OK
2025-12-24T22:41:05.184 [DEBUG] [Thread-399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:41:05.184 [DEBUG] [Thread-399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:41:05.184 [DEBUG] [Thread-399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:41:05.184 [DEBUG] [Thread-399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:41:05.199 [INFO] [Thread-399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:41:05.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:41:05.798 [DEBUG] [Thread-399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:41:05.798 [DEBUG] [Thread-399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:41:05.798 [DEBUG] [Thread-399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:41:05.839 [DEBUG] [Thread-399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:41:05.839 [DEBUG] [Thread-399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:41:05.842 [DEBUG] [Thread-399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:41:05.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:41:05.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:41:05.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:41:05.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:41:05.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:41:05.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:41:05.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:41:05.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:41:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:41:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.861521 -999.00  +14.80  20.37     75  +10.60 1 1 1 1 1     0    0 3.45 -31.26 ZNESW 23.8 20.4 168.4 21.7 15.5 -20.7 15.3 -20.4 15.2 -19.2 15.5 -20.0
2025-12-24T22:41:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:41:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:41:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.861521
2025-12-24T22:41:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:41:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:41:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:41:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:41:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:41:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:40:30', tmtdew=5.04, humidity=71.55, cloud=0.0, wind=23.87, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:41:03', seeing=1.45, atlas_timestamp='2025-12-24T20:40:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:39:00')
2025-12-24T22:41:05.870 [DEBUG] [Thread-399] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:41:05.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:41:05.970 [DEBUG] [Thread-402] [transport.py] [_log()] starting thread (client mode): 0xb957ab00
2025-12-24T22:41:05.970 [DEBUG] [Thread-402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:41:05.984 [DEBUG] [Thread-402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:41:05.984 [INFO] [Thread-402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:41:05.992 [DEBUG] [Thread-402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:41:05.992 [DEBUG] [Thread-402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] client lang: <none>
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] server lang: <none>
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] kex follows: False
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:41:05.993 [DEBUG] [Thread-402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:41:05.994 [DEBUG] [Thread-402] [transport.py] [_log()] Compression: none
2025-12-24T22:41:05.994 [DEBUG] [Thread-402] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:41:06.054 [DEBUG] [Thread-402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:41:06.054 [DEBUG] [Thread-402] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:41:06.055 [DEBUG] [Thread-402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:41:06.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:41:06.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:41:06.117 [DEBUG] [Thread-402] [transport.py] [_log()] userauth is OK
2025-12-24T22:41:06.117 [DEBUG] [Thread-402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:41:06.117 [DEBUG] [Thread-402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:41:06.117 [DEBUG] [Thread-402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:41:06.117 [DEBUG] [Thread-402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:41:06.135 [INFO] [Thread-402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:41:06.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:41:06.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:41:06.970 [DEBUG] [Thread-402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:41:06.970 [DEBUG] [Thread-402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:41:07.018 [DEBUG] [Thread-402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:41:07.019 [DEBUG] [Thread-402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:41:07.028 [DEBUG] [Thread-402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:41:07.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:41:07.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:41:07.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') -> 00000000
2025-12-24T22:41:07.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:41:07.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:41:07.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:41:07.065 [DEBUG] [Thread-402] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:41:12.966 [DEBUG] [Thread-404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:41:18.032 [DEBUG] [Thread-405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:41:21.818 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:41:33.091 [DEBUG] [Thread-406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:41:37.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:41:37.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:41:37.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:41:37.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 41, 2), 5.03, 71.6, 0.0, 23.59, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:41:37.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:41:02
2025-12-24T22:41:37.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:41:38.097 [DEBUG] [Thread-407] [transport.py] [_log()] starting thread (client mode): 0xb9558520
2025-12-24T22:41:38.097 [DEBUG] [Thread-407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:41:38.116 [DEBUG] [Thread-407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:41:38.117 [INFO] [Thread-407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] client lang: <none>
2025-12-24T22:41:38.120 [DEBUG] [Thread-407] [transport.py] [_log()] server lang: <none>
2025-12-24T22:41:38.121 [DEBUG] [Thread-407] [transport.py] [_log()] kex follows: False
2025-12-24T22:41:38.121 [DEBUG] [Thread-407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:41:38.121 [DEBUG] [Thread-407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:41:38.121 [DEBUG] [Thread-407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:41:38.121 [DEBUG] [Thread-407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:41:38.121 [DEBUG] [Thread-407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:41:38.121 [DEBUG] [Thread-407] [transport.py] [_log()] Compression: none
2025-12-24T22:41:38.121 [DEBUG] [Thread-407] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:41:38.137 [DEBUG] [Thread-407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:41:38.138 [DEBUG] [Thread-407] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:41:38.138 [DEBUG] [Thread-407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:41:38.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:41:38.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:41:38.140 [DEBUG] [Thread-407] [transport.py] [_log()] userauth is OK
2025-12-24T22:41:38.140 [DEBUG] [Thread-407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:41:38.141 [DEBUG] [Thread-407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:41:38.141 [DEBUG] [Thread-407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:41:38.141 [DEBUG] [Thread-407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:41:38.164 [INFO] [Thread-407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:41:38.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:41:38.809 [DEBUG] [Thread-407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:41:38.810 [DEBUG] [Thread-407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:41:38.810 [DEBUG] [Thread-407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:41:38.850 [DEBUG] [Thread-407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:41:38.850 [DEBUG] [Thread-407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:41:38.854 [DEBUG] [Thread-407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:41:38.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:41:38.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:41:38.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:41:38.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:41:38.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:41:38.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:41:38.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:41:38.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:41:38.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:41:38.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.861868 -999.00  +14.70  25.44     76  +10.60 1 1 1 1 1     0    0 3.43 -30.65 ZNESW 20.9 25.4 161.4 28.7 15.5 -20.8 15.4 -20.3 15.2 -19.1 15.5 -20.1
2025-12-24T22:41:38.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:41:38.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:41:38.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.861868
2025-12-24T22:41:38.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:41:38.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:41:38.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:41:38.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:41:38.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:41:38.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:41:02', tmtdew=5.03, humidity=71.6, cloud=0.0, wind=23.59, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:41:35', seeing=1.5, atlas_timestamp='2025-12-24T20:41:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:39:00')
2025-12-24T22:41:38.882 [DEBUG] [Thread-407] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:41:38.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:41:38.993 [DEBUG] [Thread-410] [transport.py] [_log()] starting thread (client mode): 0xb957a680
2025-12-24T22:41:38.993 [DEBUG] [Thread-410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:41:39.007 [DEBUG] [Thread-410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:41:39.008 [INFO] [Thread-410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:41:39.015 [DEBUG] [Thread-410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:41:39.015 [DEBUG] [Thread-410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] client lang: <none>
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] server lang: <none>
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] kex follows: False
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:41:39.016 [DEBUG] [Thread-410] [transport.py] [_log()] Compression: none
2025-12-24T22:41:39.017 [DEBUG] [Thread-410] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:41:39.072 [DEBUG] [Thread-410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:41:39.072 [DEBUG] [Thread-410] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:41:39.073 [DEBUG] [Thread-410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:41:39.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:41:39.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:41:39.129 [DEBUG] [Thread-410] [transport.py] [_log()] userauth is OK
2025-12-24T22:41:39.129 [DEBUG] [Thread-410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:41:39.129 [DEBUG] [Thread-410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:41:39.129 [DEBUG] [Thread-410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:41:39.129 [DEBUG] [Thread-410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:41:39.152 [INFO] [Thread-410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:41:39.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:41:39.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:41:39.937 [DEBUG] [Thread-410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:41:39.937 [DEBUG] [Thread-410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:41:39.985 [DEBUG] [Thread-410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:41:39.985 [DEBUG] [Thread-410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:41:39.995 [DEBUG] [Thread-410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:41:40.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:41:40.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:41:40.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
2025-12-24T22:41:40.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:41:40.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:41:40.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:41:40.036 [DEBUG] [Thread-410] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:41:48.131 [DEBUG] [Thread-412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:41:55.835 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:41:55.836 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:03.192 [DEBUG] [Thread-413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:10.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:42:10.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:42:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:42:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 42, 7), 5.04, 71.56, 0.0, 25.78, 14.86, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:42:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:42:07
2025-12-24T22:42:10.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:42:11.045 [DEBUG] [Thread-414] [transport.py] [_log()] starting thread (client mode): 0xbbfcc970
2025-12-24T22:42:11.045 [DEBUG] [Thread-414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:42:11.065 [DEBUG] [Thread-414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:42:11.066 [INFO] [Thread-414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:42:11.068 [DEBUG] [Thread-414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:42:11.069 [DEBUG] [Thread-414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:42:11.069 [DEBUG] [Thread-414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:42:11.069 [DEBUG] [Thread-414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:42:11.069 [DEBUG] [Thread-414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:42:11.069 [DEBUG] [Thread-414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:42:11.069 [DEBUG] [Thread-414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:42:11.069 [DEBUG] [Thread-414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:42:11.070 [DEBUG] [Thread-414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:42:11.070 [DEBUG] [Thread-414] [transport.py] [_log()] client lang: <none>
2025-12-24T22:42:11.070 [DEBUG] [Thread-414] [transport.py] [_log()] server lang: <none>
2025-12-24T22:42:11.070 [DEBUG] [Thread-414] [transport.py] [_log()] kex follows: False
2025-12-24T22:42:11.070 [DEBUG] [Thread-414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:42:11.070 [DEBUG] [Thread-414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:42:11.070 [DEBUG] [Thread-414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:42:11.070 [DEBUG] [Thread-414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:42:11.071 [DEBUG] [Thread-414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:42:11.071 [DEBUG] [Thread-414] [transport.py] [_log()] Compression: none
2025-12-24T22:42:11.071 [DEBUG] [Thread-414] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:42:11.091 [DEBUG] [Thread-414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:42:11.092 [DEBUG] [Thread-414] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:42:11.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:42:11.093 [DEBUG] [Thread-414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:42:11.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:42:11.134 [DEBUG] [Thread-414] [transport.py] [_log()] userauth is OK
2025-12-24T22:42:11.134 [DEBUG] [Thread-414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:42:11.134 [DEBUG] [Thread-414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:42:11.135 [DEBUG] [Thread-414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:42:11.135 [DEBUG] [Thread-414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:42:11.159 [INFO] [Thread-414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:42:11.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:42:11.811 [DEBUG] [Thread-414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:42:11.812 [DEBUG] [Thread-414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:42:11.812 [DEBUG] [Thread-414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:42:11.853 [DEBUG] [Thread-414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:42:11.853 [DEBUG] [Thread-414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:42:11.857 [DEBUG] [Thread-414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:42:11.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:42:11.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:42:11.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:42:11.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:42:11.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:42:11.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:42:11.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:42:11.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:42:11.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:42:11.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.862215 -999.00  +14.70  20.72     75  +10.50 1 1 1 1 1     0    0 3.55 -29.54 ZNESW 17.0 20.7 162.8 28.5 15.5 -20.8 15.4 -20.3 15.2 -19.0 15.5 -19.9
2025-12-24T22:42:11.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:42:11.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:42:11.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.862215
2025-12-24T22:42:11.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:42:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:42:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:42:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:42:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:42:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:42:07', tmtdew=5.04, humidity=71.56, cloud=0.0, wind=25.78, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:42:07', seeing=1.5, atlas_timestamp='2025-12-24T20:41:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:39:00')
2025-12-24T22:42:11.880 [DEBUG] [Thread-414] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:42:11.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:42:11.983 [DEBUG] [Thread-417] [transport.py] [_log()] starting thread (client mode): 0xbbfccf70
2025-12-24T22:42:11.984 [DEBUG] [Thread-417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:42:12.001 [DEBUG] [Thread-417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:42:12.001 [INFO] [Thread-417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:42:12.012 [DEBUG] [Thread-417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:42:12.012 [DEBUG] [Thread-417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:42:12.012 [DEBUG] [Thread-417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:42:12.012 [DEBUG] [Thread-417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] client lang: <none>
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] server lang: <none>
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] kex follows: False
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] Compression: none
2025-12-24T22:42:12.013 [DEBUG] [Thread-417] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:42:12.076 [DEBUG] [Thread-417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:42:12.076 [DEBUG] [Thread-417] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:42:12.077 [DEBUG] [Thread-417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:42:12.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:42:12.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:42:12.139 [DEBUG] [Thread-417] [transport.py] [_log()] userauth is OK
2025-12-24T22:42:12.139 [DEBUG] [Thread-417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:42:12.139 [DEBUG] [Thread-417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:42:12.139 [DEBUG] [Thread-417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:42:12.139 [DEBUG] [Thread-417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:42:12.161 [INFO] [Thread-417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:42:12.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:42:12.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:42:12.951 [DEBUG] [Thread-417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:42:12.952 [DEBUG] [Thread-417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:42:13.003 [DEBUG] [Thread-417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:42:13.003 [DEBUG] [Thread-417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:42:13.015 [DEBUG] [Thread-417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:42:13.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:42:13.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')
2025-12-24T22:42:13.034 [DEBUG] [Thread-419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:13.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:42:13.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:42:13.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:42:13.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:42:13.056 [DEBUG] [Thread-417] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:42:18.229 [DEBUG] [Thread-420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:33.297 [DEBUG] [Thread-421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:35.485 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:38.607 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:43.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:42:43.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:42:43.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:42:43.659 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:43.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 42, 39), 4.98, 72.13, 0.0, 27.1, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:42:43.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:42:39
2025-12-24T22:42:43.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:42:44.099 [DEBUG] [Thread-422] [transport.py] [_log()] starting thread (client mode): 0xb9545ff0
2025-12-24T22:42:44.100 [DEBUG] [Thread-422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:42:44.120 [DEBUG] [Thread-422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:42:44.120 [INFO] [Thread-422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] client lang: <none>
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] server lang: <none>
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] kex follows: False
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:42:44.123 [DEBUG] [Thread-422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:42:44.124 [DEBUG] [Thread-422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:42:44.124 [DEBUG] [Thread-422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:42:44.124 [DEBUG] [Thread-422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:42:44.124 [DEBUG] [Thread-422] [transport.py] [_log()] Compression: none
2025-12-24T22:42:44.124 [DEBUG] [Thread-422] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:42:44.139 [DEBUG] [Thread-422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:42:44.139 [DEBUG] [Thread-422] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:42:44.139 [DEBUG] [Thread-422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:42:44.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:42:44.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:42:44.140 [DEBUG] [Thread-422] [transport.py] [_log()] userauth is OK
2025-12-24T22:42:44.140 [DEBUG] [Thread-422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:42:44.140 [DEBUG] [Thread-422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:42:44.140 [DEBUG] [Thread-422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:42:44.140 [DEBUG] [Thread-422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:42:44.158 [INFO] [Thread-422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:42:44.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:42:44.787 [DEBUG] [Thread-422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:42:44.787 [DEBUG] [Thread-422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:42:44.788 [DEBUG] [Thread-422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:42:44.828 [DEBUG] [Thread-422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:42:44.828 [DEBUG] [Thread-422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:42:44.831 [DEBUG] [Thread-422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:42:44.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:42:44.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:42:44.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:42:44.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:42:44.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:42:44.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:42:44.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.862563 -999.00  +14.70  20.09     76  +10.50 1 1 1 1 1     0    0 3.46 -30.02 ZNESW 20.7 20.1 170.2 28.2 15.5 -20.8 15.3 -20.3 15.2 -19.2 15.5 -19.9
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.862563
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:42:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:42:39', tmtdew=4.98, humidity=72.13, cloud=0.0, wind=27.1, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:42:39', seeing=1.35, atlas_timestamp='2025-12-24T20:42:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:39:00')
2025-12-24T22:42:44.851 [DEBUG] [Thread-422] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:42:44.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:42:44.943 [DEBUG] [Thread-425] [transport.py] [_log()] starting thread (client mode): 0xb9578550
2025-12-24T22:42:44.943 [DEBUG] [Thread-425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:42:44.958 [DEBUG] [Thread-425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:42:44.958 [INFO] [Thread-425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:42:44.965 [DEBUG] [Thread-425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] client lang: <none>
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] server lang: <none>
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] kex follows: False
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] Compression: none
2025-12-24T22:42:44.966 [DEBUG] [Thread-425] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:42:45.020 [DEBUG] [Thread-425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:42:45.020 [DEBUG] [Thread-425] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:42:45.020 [DEBUG] [Thread-425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:42:45.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:42:45.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:42:45.078 [DEBUG] [Thread-425] [transport.py] [_log()] userauth is OK
2025-12-24T22:42:45.078 [DEBUG] [Thread-425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:42:45.078 [DEBUG] [Thread-425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:42:45.078 [DEBUG] [Thread-425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:42:45.078 [DEBUG] [Thread-425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:42:45.092 [INFO] [Thread-425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:42:45.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:42:45.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:42:45.910 [DEBUG] [Thread-425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:42:45.910 [DEBUG] [Thread-425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:42:45.958 [DEBUG] [Thread-425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:42:45.958 [DEBUG] [Thread-425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:42:45.968 [DEBUG] [Thread-425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:42:45.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:42:45.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')
2025-12-24T22:42:45.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:42:45.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:42:45.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:42:45.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:42:46.004 [DEBUG] [Thread-425] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:42:48.337 [DEBUG] [Thread-427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:49.148 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:56.045 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:56.046 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:42:58.460 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:02.838 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:03.403 [DEBUG] [Thread-428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:13.109 [DEBUG] [Thread-429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:16.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:43:16.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:43:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:43:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 43, 11), 4.98, 72.1, 0.0, 25.32, 14.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:43:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:43:11
2025-12-24T22:43:16.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:43:16.982 [DEBUG] [Thread-430] [transport.py] [_log()] starting thread (client mode): 0xb955abf0
2025-12-24T22:43:16.982 [DEBUG] [Thread-430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:43:17.003 [DEBUG] [Thread-430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:43:17.003 [INFO] [Thread-430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:43:17.006 [DEBUG] [Thread-430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:43:17.006 [DEBUG] [Thread-430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:43:17.006 [DEBUG] [Thread-430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:43:17.006 [DEBUG] [Thread-430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:43:17.006 [DEBUG] [Thread-430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:43:17.006 [DEBUG] [Thread-430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:43:17.006 [DEBUG] [Thread-430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] client lang: <none>
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] server lang: <none>
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] kex follows: False
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] Compression: none
2025-12-24T22:43:17.007 [DEBUG] [Thread-430] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:43:17.024 [DEBUG] [Thread-430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:43:17.025 [DEBUG] [Thread-430] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:43:17.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:43:17.026 [DEBUG] [Thread-430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:43:17.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:43:17.028 [DEBUG] [Thread-430] [transport.py] [_log()] userauth is OK
2025-12-24T22:43:17.028 [DEBUG] [Thread-430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:43:17.028 [DEBUG] [Thread-430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:43:17.028 [DEBUG] [Thread-430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:43:17.029 [DEBUG] [Thread-430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:43:17.052 [INFO] [Thread-430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:43:17.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:43:17.702 [DEBUG] [Thread-430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:43:17.702 [DEBUG] [Thread-430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:43:17.702 [DEBUG] [Thread-430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:43:17.743 [DEBUG] [Thread-430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:43:17.743 [DEBUG] [Thread-430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:43:17.747 [DEBUG] [Thread-430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:43:17.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:43:17.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:43:17.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:43:17.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:43:17.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:43:17.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:43:17.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:43:17.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:43:17.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:43:17.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.863257 -999.00  +14.70  23.74     76  +10.60 1 1 1 1 1     0    0 3.65 -27.49 ZNESW 24.1 23.7 157.2 28.0 15.5 -20.8 15.3 -20.3 15.2 -19.1 15.5 -20.0
2025-12-24T22:43:17.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:43:17.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:43:17.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.863257
2025-12-24T22:43:17.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:43:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:43:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:43:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:43:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:43:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:43:11', tmtdew=4.98, humidity=72.1, cloud=0.0, wind=25.32, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:43:11', seeing=1.35, atlas_timestamp='2025-12-24T20:43:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:39:00')
2025-12-24T22:43:17.775 [DEBUG] [Thread-430] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:43:17.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:43:17.877 [DEBUG] [Thread-433] [transport.py] [_log()] starting thread (client mode): 0xb9544100
2025-12-24T22:43:17.878 [DEBUG] [Thread-433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:43:17.892 [DEBUG] [Thread-433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:43:17.892 [INFO] [Thread-433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:43:17.899 [DEBUG] [Thread-433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] client lang: <none>
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] server lang: <none>
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] kex follows: False
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] Compression: none
2025-12-24T22:43:17.900 [DEBUG] [Thread-433] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:43:17.960 [DEBUG] [Thread-433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:43:17.961 [DEBUG] [Thread-433] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:43:17.961 [DEBUG] [Thread-433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:43:17.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:43:17.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:43:18.020 [DEBUG] [Thread-433] [transport.py] [_log()] userauth is OK
2025-12-24T22:43:18.020 [DEBUG] [Thread-433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:43:18.020 [DEBUG] [Thread-433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:43:18.021 [DEBUG] [Thread-433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:43:18.021 [DEBUG] [Thread-433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:43:18.045 [INFO] [Thread-433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:43:18.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:43:18.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:43:18.446 [DEBUG] [Thread-435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:18.896 [DEBUG] [Thread-433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:43:18.896 [DEBUG] [Thread-433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:43:18.944 [DEBUG] [Thread-433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:43:18.945 [DEBUG] [Thread-433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:43:18.953 [DEBUG] [Thread-433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:43:18.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:43:18.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:43:18.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:43:18.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:43:18.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:43:18.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:43:18.986 [DEBUG] [Thread-433] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:43:22.240 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:26.639 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:33.507 [DEBUG] [Thread-436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:33.630 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:38.050 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:48.552 [DEBUG] [Thread-437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:49.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:43:49.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:43:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:43:49.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 43, 43), 4.98, 72.11, 0.0, 25.6, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:43:49.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:43:43
2025-12-24T22:43:49.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:43:49.996 [DEBUG] [Thread-438] [transport.py] [_log()] starting thread (client mode): 0xb9547a60
2025-12-24T22:43:49.996 [DEBUG] [Thread-438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:43:50.017 [DEBUG] [Thread-438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:43:50.017 [INFO] [Thread-438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:43:50.020 [DEBUG] [Thread-438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] client lang: <none>
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] server lang: <none>
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] kex follows: False
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:43:50.021 [DEBUG] [Thread-438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:43:50.022 [DEBUG] [Thread-438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:43:50.022 [DEBUG] [Thread-438] [transport.py] [_log()] Compression: none
2025-12-24T22:43:50.022 [DEBUG] [Thread-438] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:43:50.037 [DEBUG] [Thread-438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:43:50.038 [DEBUG] [Thread-438] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:43:50.038 [DEBUG] [Thread-438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:43:50.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:43:50.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:43:50.040 [DEBUG] [Thread-438] [transport.py] [_log()] userauth is OK
2025-12-24T22:43:50.041 [DEBUG] [Thread-438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:43:50.041 [DEBUG] [Thread-438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:43:50.041 [DEBUG] [Thread-438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:43:50.041 [DEBUG] [Thread-438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:43:50.077 [INFO] [Thread-438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:43:50.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:43:50.643 [DEBUG] [Thread-438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:43:50.644 [DEBUG] [Thread-438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:43:50.644 [DEBUG] [Thread-438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:43:50.685 [DEBUG] [Thread-438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:43:50.685 [DEBUG] [Thread-438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:43:50.689 [DEBUG] [Thread-438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:43:50.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:43:50.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:43:50.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:43:50.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:43:50.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:43:50.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:43:50.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:43:50.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:43:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:43:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.863604 -999.00  +14.70  24.98     76  +10.50 1 1 1 1 1     0    0 3.58 -25.97 ZNESW 17.9 25.0 155.6 31.8 15.4 -20.8 15.3 -20.4 15.1 -19.2 15.4 -20.0
2025-12-24T22:43:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:43:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:43:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.863604
2025-12-24T22:43:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:43:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:43:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:43:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:43:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:43:50.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:43:43', tmtdew=4.98, humidity=72.11, cloud=0.0, wind=25.6, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:43:43', seeing=1.38, atlas_timestamp='2025-12-24T20:43:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:42:00')
2025-12-24T22:43:50.717 [DEBUG] [Thread-438] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:43:50.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:43:50.819 [DEBUG] [Thread-441] [transport.py] [_log()] starting thread (client mode): 0xb9592590
2025-12-24T22:43:50.819 [DEBUG] [Thread-441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:43:50.833 [DEBUG] [Thread-441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:43:50.834 [INFO] [Thread-441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:43:50.841 [DEBUG] [Thread-441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:43:50.841 [DEBUG] [Thread-441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:43:50.841 [DEBUG] [Thread-441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] client lang: <none>
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] server lang: <none>
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] kex follows: False
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:43:50.842 [DEBUG] [Thread-441] [transport.py] [_log()] Compression: none
2025-12-24T22:43:50.843 [DEBUG] [Thread-441] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:43:50.902 [DEBUG] [Thread-441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:43:50.902 [DEBUG] [Thread-441] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:43:50.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:43:50.904 [DEBUG] [Thread-441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:43:50.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:43:50.960 [DEBUG] [Thread-441] [transport.py] [_log()] userauth is OK
2025-12-24T22:43:50.960 [DEBUG] [Thread-441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:43:50.961 [DEBUG] [Thread-441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:43:50.961 [DEBUG] [Thread-441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:43:50.961 [DEBUG] [Thread-441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:43:50.979 [INFO] [Thread-441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:43:50.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:43:50.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:43:51.793 [DEBUG] [Thread-441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:43:51.793 [DEBUG] [Thread-441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:43:51.841 [DEBUG] [Thread-441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:43:51.841 [DEBUG] [Thread-441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:43:51.852 [DEBUG] [Thread-441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:43:51.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:43:51.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:43:51.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:43:51.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:43:51.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:43:51.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:43:51.890 [DEBUG] [Thread-441] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:43:56.251 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:43:56.252 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:03.591 [DEBUG] [Thread-443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:13.168 [DEBUG] [Thread-444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:18.647 [DEBUG] [Thread-445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:21.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:44:21.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:44:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:44:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 44, 15), 4.98, 72.11, 0.0, 29.08, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:44:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:44:15
2025-12-24T22:44:22.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:44:22.891 [DEBUG] [Thread-446] [transport.py] [_log()] starting thread (client mode): 0xb95923e0
2025-12-24T22:44:22.891 [DEBUG] [Thread-446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:44:22.911 [DEBUG] [Thread-446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:44:22.911 [INFO] [Thread-446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:44:22.914 [DEBUG] [Thread-446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:44:22.914 [DEBUG] [Thread-446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:44:22.914 [DEBUG] [Thread-446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:44:22.914 [DEBUG] [Thread-446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:44:22.914 [DEBUG] [Thread-446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] client lang: <none>
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] server lang: <none>
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] kex follows: False
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] Compression: none
2025-12-24T22:44:22.915 [DEBUG] [Thread-446] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:44:22.933 [DEBUG] [Thread-446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:44:22.933 [DEBUG] [Thread-446] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:44:22.934 [DEBUG] [Thread-446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:44:22.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:44:22.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:44:22.936 [DEBUG] [Thread-446] [transport.py] [_log()] userauth is OK
2025-12-24T22:44:22.936 [DEBUG] [Thread-446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:44:22.936 [DEBUG] [Thread-446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:44:22.937 [DEBUG] [Thread-446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:44:22.937 [DEBUG] [Thread-446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:44:22.961 [INFO] [Thread-446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:44:22.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:44:23.598 [DEBUG] [Thread-446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:44:23.599 [DEBUG] [Thread-446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:44:23.599 [DEBUG] [Thread-446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:44:23.640 [DEBUG] [Thread-446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:44:23.640 [DEBUG] [Thread-446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:44:23.643 [DEBUG] [Thread-446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:44:23.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:44:23.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:44:23.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:44:23.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:44:23.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:44:23.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:44:23.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:44:23.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:44:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:44:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.863951 -999.00  +14.70  19.24     76  +10.50 1 1 1 1 1     0    0 3.54 -26.18 ZNESW 20.6 19.2 148.0 29.9 15.5 -20.9 15.3 -20.3 15.2 -19.2 15.4 -20.1
2025-12-24T22:44:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:44:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:44:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.863951
2025-12-24T22:44:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:44:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:44:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:44:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:44:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:44:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:44:15', tmtdew=4.98, humidity=72.11, cloud=0.0, wind=29.08, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:44:16', seeing=1.56, atlas_timestamp='2025-12-24T20:44:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:42:00')
2025-12-24T22:44:23.672 [DEBUG] [Thread-446] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:44:23.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:44:23.773 [DEBUG] [Thread-449] [transport.py] [_log()] starting thread (client mode): 0xb9592140
2025-12-24T22:44:23.773 [DEBUG] [Thread-449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:44:23.788 [DEBUG] [Thread-449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:44:23.788 [INFO] [Thread-449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:44:23.796 [DEBUG] [Thread-449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:44:23.796 [DEBUG] [Thread-449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:44:23.796 [DEBUG] [Thread-449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:44:23.796 [DEBUG] [Thread-449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:44:23.796 [DEBUG] [Thread-449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:44:23.796 [DEBUG] [Thread-449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] client lang: <none>
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] server lang: <none>
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] kex follows: False
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:44:23.797 [DEBUG] [Thread-449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:44:23.798 [DEBUG] [Thread-449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:44:23.798 [DEBUG] [Thread-449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:44:23.798 [DEBUG] [Thread-449] [transport.py] [_log()] Compression: none
2025-12-24T22:44:23.798 [DEBUG] [Thread-449] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:44:23.858 [DEBUG] [Thread-449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:44:23.858 [DEBUG] [Thread-449] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:44:23.859 [DEBUG] [Thread-449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:44:23.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:44:23.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:44:23.917 [DEBUG] [Thread-449] [transport.py] [_log()] userauth is OK
2025-12-24T22:44:23.917 [DEBUG] [Thread-449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:44:23.917 [DEBUG] [Thread-449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:44:23.918 [DEBUG] [Thread-449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:44:23.918 [DEBUG] [Thread-449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:44:23.937 [INFO] [Thread-449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:44:23.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:44:23.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:44:24.768 [DEBUG] [Thread-449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:44:24.769 [DEBUG] [Thread-449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:44:24.817 [DEBUG] [Thread-449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:44:24.817 [DEBUG] [Thread-449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:44:24.826 [DEBUG] [Thread-449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:44:24.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:44:24.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')
2025-12-24T22:44:24.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:44:24.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:44:24.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:44:24.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:44:24.863 [DEBUG] [Thread-449] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:44:33.692 [DEBUG] [Thread-451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:37.242 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:40.299 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:48.751 [DEBUG] [Thread-452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:54.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:44:54.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:44:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:44:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 44, 47), 4.96, 72.21, 0.0, 27.56, 14.71, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:44:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:44:47
2025-12-24T22:44:55.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:44:55.867 [DEBUG] [Thread-453] [transport.py] [_log()] starting thread (client mode): 0xb9578b20
2025-12-24T22:44:55.867 [DEBUG] [Thread-453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:44:55.887 [DEBUG] [Thread-453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:44:55.888 [INFO] [Thread-453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:44:55.890 [DEBUG] [Thread-453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] client lang: <none>
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] server lang: <none>
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] kex follows: False
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] Compression: none
2025-12-24T22:44:55.891 [DEBUG] [Thread-453] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:44:55.909 [DEBUG] [Thread-453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:44:55.910 [DEBUG] [Thread-453] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:44:55.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:44:55.911 [DEBUG] [Thread-453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:44:55.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:44:55.913 [DEBUG] [Thread-453] [transport.py] [_log()] userauth is OK
2025-12-24T22:44:55.913 [DEBUG] [Thread-453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:44:55.913 [DEBUG] [Thread-453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:44:55.914 [DEBUG] [Thread-453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:44:55.914 [DEBUG] [Thread-453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:44:55.929 [INFO] [Thread-453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:44:55.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:44:56.454 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:56.456 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:44:56.557 [DEBUG] [Thread-453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:44:56.557 [DEBUG] [Thread-453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:44:56.557 [DEBUG] [Thread-453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:44:56.598 [DEBUG] [Thread-453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:44:56.598 [DEBUG] [Thread-453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:44:56.601 [DEBUG] [Thread-453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:44:56.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:44:56.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:44:56.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:44:56.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:44:56.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:44:56.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:44:56.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:44:56.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:44:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:44:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.864298 -999.00  +14.70  20.20     76  +10.50 1 1 1 1 1     0    0 3.58 -26.57 ZNESW 24.1 20.2 160.4 29.9 15.4 -20.9 15.3 -20.4 15.2 -19.2 15.4 -20.1
2025-12-24T22:44:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:44:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:44:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.864298
2025-12-24T22:44:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:44:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:44:56.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:44:56.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:44:56.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:44:56.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:44:47', tmtdew=4.96, humidity=72.21, cloud=0.0, wind=27.56, temperature=14.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:44:48', seeing=1.57, atlas_timestamp='2025-12-24T20:44:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:42:00')
2025-12-24T22:44:56.627 [DEBUG] [Thread-453] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:44:56.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:44:56.729 [DEBUG] [Thread-456] [transport.py] [_log()] starting thread (client mode): 0xb9578970
2025-12-24T22:44:56.730 [DEBUG] [Thread-456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:44:56.744 [DEBUG] [Thread-456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:44:56.744 [INFO] [Thread-456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:44:56.751 [DEBUG] [Thread-456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] client lang: <none>
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] server lang: <none>
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] kex follows: False
2025-12-24T22:44:56.752 [DEBUG] [Thread-456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:44:56.753 [DEBUG] [Thread-456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:44:56.753 [DEBUG] [Thread-456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:44:56.753 [DEBUG] [Thread-456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:44:56.753 [DEBUG] [Thread-456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:44:56.753 [DEBUG] [Thread-456] [transport.py] [_log()] Compression: none
2025-12-24T22:44:56.753 [DEBUG] [Thread-456] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:44:56.809 [DEBUG] [Thread-456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:44:56.810 [DEBUG] [Thread-456] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:44:56.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:44:56.811 [DEBUG] [Thread-456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:44:56.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:44:56.865 [DEBUG] [Thread-456] [transport.py] [_log()] userauth is OK
2025-12-24T22:44:56.866 [DEBUG] [Thread-456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:44:56.866 [DEBUG] [Thread-456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:44:56.866 [DEBUG] [Thread-456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:44:56.866 [DEBUG] [Thread-456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:44:56.885 [INFO] [Thread-456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:44:56.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:44:56.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:44:57.696 [DEBUG] [Thread-456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:44:57.696 [DEBUG] [Thread-456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:44:57.744 [DEBUG] [Thread-456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:44:57.744 [DEBUG] [Thread-456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:44:57.753 [DEBUG] [Thread-456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:44:57.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:44:57.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:44:57.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
2025-12-24T22:44:57.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:44:57.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:44:57.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:44:57.791 [DEBUG] [Thread-456] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:45:03.790 [DEBUG] [Thread-458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:45:13.227 [DEBUG] [Thread-459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:45:18.864 [DEBUG] [Thread-460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:45:27.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:45:27.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:45:27.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:45:28.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 45, 19), 4.95, 72.26, 0.0, 29.08, 14.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:45:28.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:45:19
2025-12-24T22:45:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:45:28.784 [DEBUG] [Thread-461] [transport.py] [_log()] starting thread (client mode): 0xbbfcf850
2025-12-24T22:45:28.784 [DEBUG] [Thread-461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:45:28.804 [DEBUG] [Thread-461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:45:28.805 [INFO] [Thread-461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:45:28.808 [DEBUG] [Thread-461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:45:28.808 [DEBUG] [Thread-461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:45:28.808 [DEBUG] [Thread-461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] client lang: <none>
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] server lang: <none>
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] kex follows: False
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] Compression: none
2025-12-24T22:45:28.809 [DEBUG] [Thread-461] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:45:28.826 [DEBUG] [Thread-461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:45:28.827 [DEBUG] [Thread-461] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:45:28.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:45:28.828 [DEBUG] [Thread-461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:45:28.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:45:28.830 [DEBUG] [Thread-461] [transport.py] [_log()] userauth is OK
2025-12-24T22:45:28.830 [DEBUG] [Thread-461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:45:28.830 [DEBUG] [Thread-461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:45:28.831 [DEBUG] [Thread-461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:45:28.831 [DEBUG] [Thread-461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:45:28.866 [INFO] [Thread-461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:45:28.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:45:29.501 [DEBUG] [Thread-461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:45:29.501 [DEBUG] [Thread-461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:45:29.502 [DEBUG] [Thread-461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:45:29.542 [DEBUG] [Thread-461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:45:29.542 [DEBUG] [Thread-461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:45:29.545 [DEBUG] [Thread-461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:45:29.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:45:29.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:45:29.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:45:29.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:45:29.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:45:29.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:45:29.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:45:29.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:45:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:45:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.864298 -999.00  +14.70  20.20     76  +10.50 1 1 1 1 1     0    0 3.58 -26.57 ZNESW 24.1 20.2 160.4 29.9 15.4 -20.9 15.3 -20.4 15.2 -19.2 15.4 -20.1
2025-12-24T22:45:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:45:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:45:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.864298
2025-12-24T22:45:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:45:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:45:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:45:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:45:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:45:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:45:19', tmtdew=4.95, humidity=72.26, cloud=0.0, wind=29.08, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:45:20', seeing=1.49, atlas_timestamp='2025-12-24T20:44:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:42:00')
2025-12-24T22:45:29.573 [DEBUG] [Thread-461] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:45:29.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:45:29.674 [DEBUG] [Thread-464] [transport.py] [_log()] starting thread (client mode): 0xbbfccf40
2025-12-24T22:45:29.674 [DEBUG] [Thread-464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:45:29.689 [DEBUG] [Thread-464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:45:29.689 [INFO] [Thread-464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:45:29.697 [DEBUG] [Thread-464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:45:29.697 [DEBUG] [Thread-464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:45:29.697 [DEBUG] [Thread-464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:45:29.697 [DEBUG] [Thread-464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] client lang: <none>
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] server lang: <none>
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] kex follows: False
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] Compression: none
2025-12-24T22:45:29.698 [DEBUG] [Thread-464] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:45:29.755 [DEBUG] [Thread-464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:45:29.756 [DEBUG] [Thread-464] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:45:29.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:45:29.757 [DEBUG] [Thread-464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:45:29.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:45:29.816 [DEBUG] [Thread-464] [transport.py] [_log()] userauth is OK
2025-12-24T22:45:29.817 [DEBUG] [Thread-464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:45:29.817 [DEBUG] [Thread-464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:45:29.817 [DEBUG] [Thread-464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:45:29.817 [DEBUG] [Thread-464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:45:29.836 [INFO] [Thread-464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:45:29.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:45:29.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:45:30.635 [DEBUG] [Thread-464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:45:30.635 [DEBUG] [Thread-464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:45:30.685 [DEBUG] [Thread-464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:45:30.686 [DEBUG] [Thread-464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:45:30.695 [DEBUG] [Thread-464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:45:30.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:45:30.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')
2025-12-24T22:45:30.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:45:30.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:45:30.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:45:30.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:45:30.732 [DEBUG] [Thread-464] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:45:33.904 [DEBUG] [Thread-466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:45:48.970 [DEBUG] [Thread-467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:45:56.658 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:45:56.659 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:46:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:46:00.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:46:00.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:46:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 45, 51), 4.94, 72.31, 0.0, 28.25, 14.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:46:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:45:51
2025-12-24T22:46:01.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:46:01.727 [DEBUG] [Thread-468] [transport.py] [_log()] starting thread (client mode): 0xb95786a0
2025-12-24T22:46:01.727 [DEBUG] [Thread-468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:46:01.742 [DEBUG] [Thread-468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:46:01.742 [INFO] [Thread-468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:46:01.743 [DEBUG] [Thread-468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:46:01.743 [DEBUG] [Thread-468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] client lang: <none>
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] server lang: <none>
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] kex follows: False
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:46:01.744 [DEBUG] [Thread-468] [transport.py] [_log()] Compression: none
2025-12-24T22:46:01.745 [DEBUG] [Thread-468] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:46:01.753 [DEBUG] [Thread-468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:46:01.753 [DEBUG] [Thread-468] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:46:01.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:46:01.753 [DEBUG] [Thread-468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:46:01.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:46:01.755 [DEBUG] [Thread-468] [transport.py] [_log()] userauth is OK
2025-12-24T22:46:01.755 [DEBUG] [Thread-468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:46:01.755 [DEBUG] [Thread-468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:46:01.755 [DEBUG] [Thread-468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:46:01.755 [DEBUG] [Thread-468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:46:01.767 [INFO] [Thread-468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:46:01.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:46:02.494 [DEBUG] [Thread-468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:46:02.495 [DEBUG] [Thread-468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:46:02.495 [DEBUG] [Thread-468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:46:02.535 [DEBUG] [Thread-468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:46:02.535 [DEBUG] [Thread-468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:46:02.538 [DEBUG] [Thread-468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:46:02.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:46:02.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:46:02.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:46:02.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:46:02.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:46:02.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:46:02.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:46:02.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:46:02.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:46:02.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.864645 -999.00  +14.60  28.22     76  +10.50 1 1 1 1 1     0    0 3.54 -26.84 ZNESW 26.1 28.2 157.8 35.5 15.4 -20.9 15.3 -20.4 15.2 -19.2 15.4 -20.0
2025-12-24T22:46:02.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:46:02.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:46:02.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.864645
2025-12-24T22:46:02.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:46:02.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:46:02.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:46:02.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:46:02.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:46:02.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:45:51', tmtdew=4.94, humidity=72.31, cloud=0.0, wind=28.25, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:45:52', seeing=1.39, atlas_timestamp='2025-12-24T20:45:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.062249999999998806, 0.13124999999999964, 0.09825000000000017, 0.09849999999999959, 0.12850000000000072, 0.12625000000000064, 0.0909999999999993, 0.034250000000000114, 0.09199999999999875, 0.10599999999999987, 0.1322499999999991, 0.057000000000000384, 0.19149999999999956, 0.13375000000000092, 0.08199999999999896, 0.05699999999999861, 0.12624999999999886, 0.13649999999999984, 0.1120000000000001, 0.04124999999999979, 0.11199999999999832, 0.12374999999999936, 0.1022500000000015, 0.08774999999999977, 0.12849999999999895, 0.15000000000000036, 0.11074999999999946, 0.1070000000000011, 0.1720000000000006, 0.16800000000000104, 0.16800000000000104, 0.09450000000000003, 0.14974999999999916], zp_timestamp='2025-12-24T20:42:00')
2025-12-24T22:46:02.567 [DEBUG] [Thread-468] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:46:02.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:46:02.668 [DEBUG] [Thread-471] [transport.py] [_log()] starting thread (client mode): 0xb955a5f0
2025-12-24T22:46:02.668 [DEBUG] [Thread-471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:46:02.683 [DEBUG] [Thread-471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:46:02.683 [INFO] [Thread-471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] client lang: <none>
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] server lang: <none>
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] kex follows: False
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] Compression: none
2025-12-24T22:46:02.691 [DEBUG] [Thread-471] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:46:02.751 [DEBUG] [Thread-471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:46:02.751 [DEBUG] [Thread-471] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:46:02.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:46:02.752 [DEBUG] [Thread-471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:46:02.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:46:02.807 [DEBUG] [Thread-471] [transport.py] [_log()] userauth is OK
2025-12-24T22:46:02.807 [DEBUG] [Thread-471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:46:02.808 [DEBUG] [Thread-471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:46:02.808 [DEBUG] [Thread-471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:46:02.808 [DEBUG] [Thread-471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:46:02.827 [INFO] [Thread-471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:46:02.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:46:02.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:46:03.646 [DEBUG] [Thread-471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:46:03.646 [DEBUG] [Thread-471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:46:03.694 [DEBUG] [Thread-471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:46:03.694 [DEBUG] [Thread-471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:46:03.703 [DEBUG] [Thread-471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:46:03.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:46:03.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:46:03.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:46:03.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:46:03.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:46:03.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:46:03.738 [DEBUG] [Thread-471] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:46:04.007 [DEBUG] [Thread-473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:46:13.283 [DEBUG] [Thread-474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:46:19.084 [DEBUG] [Thread-475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:46:33.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:46:33.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:46:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:46:34.126 [DEBUG] [Thread-476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:46:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 46, 23), 4.92, 72.36, 0.0, 24.56, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:46:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:46:23
2025-12-24T22:46:34.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:46:34.794 [DEBUG] [Thread-477] [transport.py] [_log()] starting thread (client mode): 0xbbfcd630
2025-12-24T22:46:34.795 [DEBUG] [Thread-477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:46:34.814 [DEBUG] [Thread-477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:46:34.814 [INFO] [Thread-477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] client lang: <none>
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] server lang: <none>
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] kex follows: False
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:46:34.817 [DEBUG] [Thread-477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:46:34.818 [DEBUG] [Thread-477] [transport.py] [_log()] Compression: none
2025-12-24T22:46:34.818 [DEBUG] [Thread-477] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:46:34.833 [DEBUG] [Thread-477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:46:34.833 [DEBUG] [Thread-477] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:46:34.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:46:34.833 [DEBUG] [Thread-477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:46:34.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:46:34.834 [DEBUG] [Thread-477] [transport.py] [_log()] userauth is OK
2025-12-24T22:46:34.834 [DEBUG] [Thread-477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:46:34.834 [DEBUG] [Thread-477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:46:34.834 [DEBUG] [Thread-477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:46:34.834 [DEBUG] [Thread-477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:46:34.849 [INFO] [Thread-477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:46:34.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:46:35.492 [DEBUG] [Thread-477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:46:35.492 [DEBUG] [Thread-477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:46:35.492 [DEBUG] [Thread-477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:46:35.533 [DEBUG] [Thread-477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:46:35.533 [DEBUG] [Thread-477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:46:35.535 [DEBUG] [Thread-477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:46:35.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:46:35.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:46:35.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:46:35.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:46:35.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:46:35.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:46:35.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.864993 -999.00  +14.60  20.11     76  +10.50 1 1 1 1 1     0    0 3.55 -26.43 ZNESW 21.9 20.1 161.2 31.9 15.4 -20.8 15.2 -20.4 15.1 -19.3 15.4 -20.1
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.864993
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:46:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:46:23', tmtdew=4.92, humidity=72.36, cloud=0.0, wind=24.56, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:46:24', seeing=1.27, atlas_timestamp='2025-12-24T20:45:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:45:00')
2025-12-24T22:46:35.553 [DEBUG] [Thread-477] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:46:35.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:46:35.645 [DEBUG] [Thread-480] [transport.py] [_log()] starting thread (client mode): 0xbbfcd7e0
2025-12-24T22:46:35.645 [DEBUG] [Thread-480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:46:35.660 [DEBUG] [Thread-480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:46:35.660 [INFO] [Thread-480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:46:35.667 [DEBUG] [Thread-480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] client lang: <none>
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] server lang: <none>
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] kex follows: False
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] Compression: none
2025-12-24T22:46:35.668 [DEBUG] [Thread-480] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:46:35.725 [DEBUG] [Thread-480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:46:35.725 [DEBUG] [Thread-480] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:46:35.725 [DEBUG] [Thread-480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:46:35.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:46:35.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:46:35.782 [DEBUG] [Thread-480] [transport.py] [_log()] userauth is OK
2025-12-24T22:46:35.782 [DEBUG] [Thread-480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:46:35.782 [DEBUG] [Thread-480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:46:35.782 [DEBUG] [Thread-480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:46:35.782 [DEBUG] [Thread-480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:46:35.796 [INFO] [Thread-480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:46:35.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:46:35.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:46:36.586 [DEBUG] [Thread-480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:46:36.586 [DEBUG] [Thread-480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:46:36.633 [DEBUG] [Thread-480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:46:36.633 [DEBUG] [Thread-480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:46:36.641 [DEBUG] [Thread-480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:46:36.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:46:36.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:46:36.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:46:36.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:46:36.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:46:36.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:46:36.673 [DEBUG] [Thread-480] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:46:49.161 [DEBUG] [Thread-482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:46:56.858 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:46:56.859 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:47:04.230 [DEBUG] [Thread-483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:47:06.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:47:06.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:47:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:47:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 46, 55), 4.87, 72.38, 0.0, 26.61, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:47:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:46:55
2025-12-24T22:47:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:47:07.680 [DEBUG] [Thread-484] [transport.py] [_log()] starting thread (client mode): 0xbbfcfe50
2025-12-24T22:47:07.680 [DEBUG] [Thread-484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:47:07.699 [DEBUG] [Thread-484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:47:07.700 [INFO] [Thread-484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:47:07.702 [DEBUG] [Thread-484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:47:07.703 [DEBUG] [Thread-484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:47:07.703 [DEBUG] [Thread-484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:47:07.703 [DEBUG] [Thread-484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:47:07.703 [DEBUG] [Thread-484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:47:07.703 [DEBUG] [Thread-484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:47:07.703 [DEBUG] [Thread-484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:47:07.703 [DEBUG] [Thread-484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:47:07.703 [DEBUG] [Thread-484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:47:07.704 [DEBUG] [Thread-484] [transport.py] [_log()] client lang: <none>
2025-12-24T22:47:07.704 [DEBUG] [Thread-484] [transport.py] [_log()] server lang: <none>
2025-12-24T22:47:07.704 [DEBUG] [Thread-484] [transport.py] [_log()] kex follows: False
2025-12-24T22:47:07.704 [DEBUG] [Thread-484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:47:07.704 [DEBUG] [Thread-484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:47:07.704 [DEBUG] [Thread-484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:47:07.704 [DEBUG] [Thread-484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:47:07.704 [DEBUG] [Thread-484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:47:07.705 [DEBUG] [Thread-484] [transport.py] [_log()] Compression: none
2025-12-24T22:47:07.705 [DEBUG] [Thread-484] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:47:07.724 [DEBUG] [Thread-484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:47:07.724 [DEBUG] [Thread-484] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:47:07.725 [DEBUG] [Thread-484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:47:07.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:47:07.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:47:07.728 [DEBUG] [Thread-484] [transport.py] [_log()] userauth is OK
2025-12-24T22:47:07.728 [DEBUG] [Thread-484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:47:07.729 [DEBUG] [Thread-484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:47:07.729 [DEBUG] [Thread-484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:47:07.729 [DEBUG] [Thread-484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:47:07.754 [INFO] [Thread-484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:47:07.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:47:08.492 [DEBUG] [Thread-484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:47:08.492 [DEBUG] [Thread-484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:47:08.493 [DEBUG] [Thread-484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:47:08.533 [DEBUG] [Thread-484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:47:08.533 [DEBUG] [Thread-484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:47:08.537 [DEBUG] [Thread-484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:47:08.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:47:08.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:47:08.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:47:08.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:47:08.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:47:08.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:47:08.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:47:08.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:47:08.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:47:08.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.865687 -999.00  +14.60  19.02     76  +10.50 1 1 1 1 1     0    0 3.52 -24.55 ZNESW 19.7 19.0 162.6 27.9 15.4 -20.8 15.2 -20.3 15.1 -19.2 15.4 -20.1
2025-12-24T22:47:08.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:47:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:47:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.865687
2025-12-24T22:47:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:47:08.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:47:08.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:47:08.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:47:08.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:47:08.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:46:55', tmtdew=4.87, humidity=72.38, cloud=0.0, wind=26.61, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:46:56', seeing=1.54, atlas_timestamp='2025-12-24T20:46:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:45:00')
2025-12-24T22:47:08.562 [DEBUG] [Thread-484] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:47:08.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:47:08.675 [DEBUG] [Thread-487] [transport.py] [_log()] starting thread (client mode): 0xbbfcfc70
2025-12-24T22:47:08.675 [DEBUG] [Thread-487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:47:08.689 [DEBUG] [Thread-487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:47:08.690 [INFO] [Thread-487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:47:08.697 [DEBUG] [Thread-487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:47:08.697 [DEBUG] [Thread-487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:47:08.697 [DEBUG] [Thread-487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] client lang: <none>
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] server lang: <none>
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] kex follows: False
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:47:08.698 [DEBUG] [Thread-487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:47:08.699 [DEBUG] [Thread-487] [transport.py] [_log()] Compression: none
2025-12-24T22:47:08.699 [DEBUG] [Thread-487] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:47:08.755 [DEBUG] [Thread-487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:47:08.756 [DEBUG] [Thread-487] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:47:08.756 [DEBUG] [Thread-487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:47:08.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:47:08.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:47:08.811 [DEBUG] [Thread-487] [transport.py] [_log()] userauth is OK
2025-12-24T22:47:08.811 [DEBUG] [Thread-487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:47:08.812 [DEBUG] [Thread-487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:47:08.812 [DEBUG] [Thread-487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:47:08.812 [DEBUG] [Thread-487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:47:08.830 [INFO] [Thread-487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:47:08.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:47:08.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:47:09.665 [DEBUG] [Thread-487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:47:09.665 [DEBUG] [Thread-487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:47:09.713 [DEBUG] [Thread-487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:47:09.713 [DEBUG] [Thread-487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:47:09.723 [DEBUG] [Thread-487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:47:09.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:47:09.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:47:09.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:47:09.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:47:09.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:47:09.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:47:09.760 [DEBUG] [Thread-487] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:47:13.357 [DEBUG] [Thread-489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:47:19.267 [DEBUG] [Thread-490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:47:34.325 [DEBUG] [Thread-491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:47:39.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:47:39.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:47:39.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:47:40.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 47, 27), 4.87, 72.39, 0.0, 24.88, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:47:40.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:47:27
2025-12-24T22:47:40.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:47:40.749 [DEBUG] [Thread-492] [transport.py] [_log()] starting thread (client mode): 0xb9558cd0
2025-12-24T22:47:40.749 [DEBUG] [Thread-492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:47:40.770 [DEBUG] [Thread-492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:47:40.770 [INFO] [Thread-492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:47:40.772 [DEBUG] [Thread-492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:47:40.772 [DEBUG] [Thread-492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:47:40.772 [DEBUG] [Thread-492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:47:40.772 [DEBUG] [Thread-492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:47:40.772 [DEBUG] [Thread-492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:47:40.772 [DEBUG] [Thread-492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:47:40.772 [DEBUG] [Thread-492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] client lang: <none>
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] server lang: <none>
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] kex follows: False
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] Compression: none
2025-12-24T22:47:40.773 [DEBUG] [Thread-492] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:47:40.792 [DEBUG] [Thread-492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:47:40.793 [DEBUG] [Thread-492] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:47:40.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:47:40.794 [DEBUG] [Thread-492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:47:40.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:47:40.796 [DEBUG] [Thread-492] [transport.py] [_log()] userauth is OK
2025-12-24T22:47:40.796 [DEBUG] [Thread-492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:47:40.796 [DEBUG] [Thread-492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:47:40.796 [DEBUG] [Thread-492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:47:40.796 [DEBUG] [Thread-492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:47:40.820 [INFO] [Thread-492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:47:40.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:47:41.466 [DEBUG] [Thread-492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:47:41.466 [DEBUG] [Thread-492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:47:41.467 [DEBUG] [Thread-492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:47:41.507 [DEBUG] [Thread-492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:47:41.507 [DEBUG] [Thread-492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:47:41.511 [DEBUG] [Thread-492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:47:41.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:47:41.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:47:41.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:47:41.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:47:41.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:47:41.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:47:41.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:47:41.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:47:41.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:47:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.866035 -999.00  +14.60  18.08     76  +10.50 1 1 1 1 1     0    0 3.57 -23.99 ZNESW 17.9 18.1 147.4 31.4 15.4 -20.8 15.2 -20.4 15.1 -19.1 15.4 -20.0
2025-12-24T22:47:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:47:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:47:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.866035
2025-12-24T22:47:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:47:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:47:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:47:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:47:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:47:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:47:27', tmtdew=4.87, humidity=72.39, cloud=0.0, wind=24.88, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:47:28', seeing=1.54, atlas_timestamp='2025-12-24T20:47:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:45:00')
2025-12-24T22:47:41.540 [DEBUG] [Thread-492] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:47:41.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:47:41.657 [DEBUG] [Thread-495] [transport.py] [_log()] starting thread (client mode): 0xbbfcd8a0
2025-12-24T22:47:41.658 [DEBUG] [Thread-495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:47:41.672 [DEBUG] [Thread-495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:47:41.672 [INFO] [Thread-495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:47:41.680 [DEBUG] [Thread-495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:47:41.680 [DEBUG] [Thread-495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:47:41.680 [DEBUG] [Thread-495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:47:41.680 [DEBUG] [Thread-495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:47:41.680 [DEBUG] [Thread-495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:47:41.680 [DEBUG] [Thread-495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] client lang: <none>
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] server lang: <none>
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] kex follows: False
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] Compression: none
2025-12-24T22:47:41.681 [DEBUG] [Thread-495] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:47:41.739 [DEBUG] [Thread-495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:47:41.740 [DEBUG] [Thread-495] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:47:41.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:47:41.741 [DEBUG] [Thread-495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:47:41.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:47:41.796 [DEBUG] [Thread-495] [transport.py] [_log()] userauth is OK
2025-12-24T22:47:41.796 [DEBUG] [Thread-495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:47:41.796 [DEBUG] [Thread-495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:47:41.796 [DEBUG] [Thread-495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:47:41.796 [DEBUG] [Thread-495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:47:41.814 [INFO] [Thread-495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:47:41.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:47:41.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:47:42.617 [DEBUG] [Thread-495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:47:42.618 [DEBUG] [Thread-495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:47:42.666 [DEBUG] [Thread-495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:47:42.666 [DEBUG] [Thread-495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:47:42.675 [DEBUG] [Thread-495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:47:42.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:47:42.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:47:42.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:47:42.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:47:42.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:47:42.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:47:42.712 [DEBUG] [Thread-495] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:47:49.368 [DEBUG] [Thread-497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:47:57.061 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:47:57.062 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:48:04.428 [DEBUG] [Thread-498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:48:12.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:48:12.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:48:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:48:13.429 [DEBUG] [Thread-499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:48:13.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 47, 27), 4.87, 72.39, 0.0, 28.48, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:48:13.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:47:27
2025-12-24T22:48:13.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:48:13.721 [DEBUG] [Thread-500] [transport.py] [_log()] starting thread (client mode): 0xbbfcfe80
2025-12-24T22:48:13.721 [DEBUG] [Thread-500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:48:13.743 [DEBUG] [Thread-500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:48:13.744 [INFO] [Thread-500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:48:13.745 [DEBUG] [Thread-500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:48:13.745 [DEBUG] [Thread-500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:48:13.745 [DEBUG] [Thread-500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:48:13.745 [DEBUG] [Thread-500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:48:13.745 [DEBUG] [Thread-500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] client lang: <none>
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] server lang: <none>
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] kex follows: False
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] Compression: none
2025-12-24T22:48:13.746 [DEBUG] [Thread-500] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:48:13.759 [DEBUG] [Thread-500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:48:13.760 [DEBUG] [Thread-500] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:48:13.760 [DEBUG] [Thread-500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:48:13.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:48:13.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:48:13.762 [DEBUG] [Thread-500] [transport.py] [_log()] userauth is OK
2025-12-24T22:48:13.762 [DEBUG] [Thread-500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:48:13.762 [DEBUG] [Thread-500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:48:13.763 [DEBUG] [Thread-500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:48:13.763 [DEBUG] [Thread-500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:48:13.786 [INFO] [Thread-500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:48:13.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:48:14.623 [DEBUG] [Thread-500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:48:14.623 [DEBUG] [Thread-500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:48:14.623 [DEBUG] [Thread-500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:48:14.664 [DEBUG] [Thread-500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:48:14.664 [DEBUG] [Thread-500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:48:14.667 [DEBUG] [Thread-500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:48:14.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:48:14.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:48:14.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:48:14.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:48:14.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:48:14.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:48:14.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:48:14.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:48:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:48:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.866382 -999.00  +14.60  23.08     76  +10.50 1 1 1 1 1     0    0 3.59 -21.98 ZNESW 22.4 23.1 156.2 28.9 15.4 -20.7 15.2 -20.3 15.1 -19.1 15.3 -20.1
2025-12-24T22:48:14.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:48:14.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:48:14.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.866382
2025-12-24T22:48:14.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:48:14.699 [DEBUG] [Thread-500] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:48:14.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:48:14.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:48:14.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:48:14.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:48:14.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:47:27', tmtdew=4.87, humidity=72.39, cloud=0.0, wind=28.48, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:48:00', seeing=1.51, atlas_timestamp='2025-12-24T20:47:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:45:00')
2025-12-24T22:48:14.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:48:14.805 [DEBUG] [Thread-503] [transport.py] [_log()] starting thread (client mode): 0xb9579e70
2025-12-24T22:48:14.805 [DEBUG] [Thread-503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:48:14.819 [DEBUG] [Thread-503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:48:14.819 [INFO] [Thread-503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:48:14.827 [DEBUG] [Thread-503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:48:14.827 [DEBUG] [Thread-503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:48:14.827 [DEBUG] [Thread-503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:48:14.827 [DEBUG] [Thread-503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:48:14.827 [DEBUG] [Thread-503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:48:14.827 [DEBUG] [Thread-503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] client lang: <none>
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] server lang: <none>
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] kex follows: False
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:48:14.828 [DEBUG] [Thread-503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:48:14.829 [DEBUG] [Thread-503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:48:14.829 [DEBUG] [Thread-503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:48:14.829 [DEBUG] [Thread-503] [transport.py] [_log()] Compression: none
2025-12-24T22:48:14.829 [DEBUG] [Thread-503] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:48:14.888 [DEBUG] [Thread-503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:48:14.889 [DEBUG] [Thread-503] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:48:14.889 [DEBUG] [Thread-503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:48:14.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:48:14.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:48:14.948 [DEBUG] [Thread-503] [transport.py] [_log()] userauth is OK
2025-12-24T22:48:14.948 [DEBUG] [Thread-503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:48:14.949 [DEBUG] [Thread-503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:48:14.949 [DEBUG] [Thread-503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:48:14.949 [DEBUG] [Thread-503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:48:14.968 [INFO] [Thread-503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:48:14.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:48:14.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:48:15.773 [DEBUG] [Thread-503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:48:15.774 [DEBUG] [Thread-503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:48:15.821 [DEBUG] [Thread-503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:48:15.822 [DEBUG] [Thread-503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:48:15.830 [DEBUG] [Thread-503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:48:15.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:48:15.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')
2025-12-24T22:48:15.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') -> 00000000
2025-12-24T22:48:15.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:48:15.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:48:15.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:48:15.866 [DEBUG] [Thread-503] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:48:19.472 [DEBUG] [Thread-505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:48:34.534 [DEBUG] [Thread-506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:48:45.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:48:45.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:48:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:48:46.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 48, 32), 4.88, 72.34, 0.0, 31.21, 14.58, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:48:46.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:48:32
2025-12-24T22:48:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:48:46.852 [DEBUG] [Thread-507] [transport.py] [_log()] starting thread (client mode): 0xbbfcd8a0
2025-12-24T22:48:46.852 [DEBUG] [Thread-507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:48:46.873 [DEBUG] [Thread-507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:48:46.873 [INFO] [Thread-507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:48:46.876 [DEBUG] [Thread-507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] client lang: <none>
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] server lang: <none>
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] kex follows: False
2025-12-24T22:48:46.877 [DEBUG] [Thread-507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:48:46.878 [DEBUG] [Thread-507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:48:46.878 [DEBUG] [Thread-507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:48:46.878 [DEBUG] [Thread-507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:48:46.878 [DEBUG] [Thread-507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:48:46.878 [DEBUG] [Thread-507] [transport.py] [_log()] Compression: none
2025-12-24T22:48:46.878 [DEBUG] [Thread-507] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:48:46.896 [DEBUG] [Thread-507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:48:46.897 [DEBUG] [Thread-507] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:48:46.897 [DEBUG] [Thread-507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:48:46.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:48:46.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:48:46.899 [DEBUG] [Thread-507] [transport.py] [_log()] userauth is OK
2025-12-24T22:48:46.899 [DEBUG] [Thread-507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:48:46.900 [DEBUG] [Thread-507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:48:46.900 [DEBUG] [Thread-507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:48:46.900 [DEBUG] [Thread-507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:48:46.918 [INFO] [Thread-507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:48:46.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:48:47.551 [DEBUG] [Thread-507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:48:47.551 [DEBUG] [Thread-507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:48:47.552 [DEBUG] [Thread-507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:48:47.591 [DEBUG] [Thread-507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:48:47.592 [DEBUG] [Thread-507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:48:47.594 [DEBUG] [Thread-507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:48:47.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:48:47.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:48:47.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:48:47.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:48:47.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:48:47.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:48:47.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:48:47.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:48:47.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:48:47.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.866729 -999.00  +14.60  20.46     76  +10.50 1 1 1 1 1     0    0 3.64 -22.43 ZNESW 24.3 20.5 154.8 26.1 15.4 -20.7 15.2 -20.3 15.0 -19.1 15.4 -20.1
2025-12-24T22:48:47.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:48:47.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:48:47.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.866729
2025-12-24T22:48:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:48:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:48:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:48:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:48:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:48:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:48:32', tmtdew=4.88, humidity=72.34, cloud=0.0, wind=31.21, temperature=14.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:48:32', seeing=1.49, atlas_timestamp='2025-12-24T20:48:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:45:00')
2025-12-24T22:48:47.621 [DEBUG] [Thread-507] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:48:47.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:48:47.731 [DEBUG] [Thread-510] [transport.py] [_log()] starting thread (client mode): 0xbbfcfd00
2025-12-24T22:48:47.731 [DEBUG] [Thread-510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:48:47.744 [DEBUG] [Thread-510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:48:47.744 [INFO] [Thread-510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] client lang: <none>
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] server lang: <none>
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] kex follows: False
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] Compression: none
2025-12-24T22:48:47.752 [DEBUG] [Thread-510] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:48:47.810 [DEBUG] [Thread-510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:48:47.810 [DEBUG] [Thread-510] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:48:47.810 [DEBUG] [Thread-510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:48:47.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:48:47.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:48:47.868 [DEBUG] [Thread-510] [transport.py] [_log()] userauth is OK
2025-12-24T22:48:47.868 [DEBUG] [Thread-510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:48:47.869 [DEBUG] [Thread-510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:48:47.869 [DEBUG] [Thread-510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:48:47.869 [DEBUG] [Thread-510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:48:47.887 [INFO] [Thread-510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:48:47.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:48:47.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:48:48.709 [DEBUG] [Thread-510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:48:48.709 [DEBUG] [Thread-510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:48:48.757 [DEBUG] [Thread-510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:48:48.757 [DEBUG] [Thread-510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:48:48.766 [DEBUG] [Thread-510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:48:48.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:48:48.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:48:48.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:48:48.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:48:48.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:48:48.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:48:48.802 [DEBUG] [Thread-510] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:48:49.574 [DEBUG] [Thread-512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:48:57.291 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:48:57.292 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:49:04.651 [DEBUG] [Thread-513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:49:13.490 [DEBUG] [Thread-514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:49:18.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:49:18.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22: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
2025-12-24T22:49:19.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 49, 4), 4.87, 72.39, 0.0, 31.07, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:49:19.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:49:04
2025-12-24T22:49:19.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:49:19.691 [DEBUG] [Thread-515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:49:19.784 [DEBUG] [Thread-516] [transport.py] [_log()] starting thread (client mode): 0xb955b8e0
2025-12-24T22:49:19.784 [DEBUG] [Thread-516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:49:19.806 [DEBUG] [Thread-516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:49:19.806 [INFO] [Thread-516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:49:19.809 [DEBUG] [Thread-516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:49:19.810 [DEBUG] [Thread-516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:49:19.810 [DEBUG] [Thread-516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:49:19.810 [DEBUG] [Thread-516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:49:19.810 [DEBUG] [Thread-516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:49:19.810 [DEBUG] [Thread-516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:49:19.810 [DEBUG] [Thread-516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:49:19.810 [DEBUG] [Thread-516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:49:19.810 [DEBUG] [Thread-516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:49:19.811 [DEBUG] [Thread-516] [transport.py] [_log()] client lang: <none>
2025-12-24T22:49:19.811 [DEBUG] [Thread-516] [transport.py] [_log()] server lang: <none>
2025-12-24T22:49:19.811 [DEBUG] [Thread-516] [transport.py] [_log()] kex follows: False
2025-12-24T22:49:19.811 [DEBUG] [Thread-516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:49:19.811 [DEBUG] [Thread-516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:49:19.811 [DEBUG] [Thread-516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:49:19.811 [DEBUG] [Thread-516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:49:19.811 [DEBUG] [Thread-516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:49:19.812 [DEBUG] [Thread-516] [transport.py] [_log()] Compression: none
2025-12-24T22:49:19.812 [DEBUG] [Thread-516] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:49:19.830 [DEBUG] [Thread-516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:49:19.830 [DEBUG] [Thread-516] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:49:19.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:49:19.832 [DEBUG] [Thread-516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:49:19.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:49:19.834 [DEBUG] [Thread-516] [transport.py] [_log()] userauth is OK
2025-12-24T22:49:19.834 [DEBUG] [Thread-516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:49:19.834 [DEBUG] [Thread-516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:49:19.834 [DEBUG] [Thread-516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:49:19.835 [DEBUG] [Thread-516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:49:19.856 [INFO] [Thread-516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:49:19.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:49:20.607 [DEBUG] [Thread-516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:49:20.608 [DEBUG] [Thread-516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:49:20.608 [DEBUG] [Thread-516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:49:20.648 [DEBUG] [Thread-516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:49:20.649 [DEBUG] [Thread-516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:49:20.651 [DEBUG] [Thread-516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:49:20.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:49:20.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:49:20.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:49:20.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:49:20.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:49:20.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:49:20.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.867076 -999.00  +14.60  18.80     76  +10.50 1 1 1 1 1     0    0 3.57 -21.90 ZNESW 23.8 18.8 157.0 27.0 15.4 -20.7 15.2 -20.4 15.1 -19.1 15.3 -20.0
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.867076
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:49:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:49:04', tmtdew=4.87, humidity=72.39, cloud=0.0, wind=31.07, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:49:04', seeing=1.55, atlas_timestamp='2025-12-24T20:48:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:45:00')
2025-12-24T22:49:20.669 [DEBUG] [Thread-516] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:49:20.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:49:20.760 [DEBUG] [Thread-519] [transport.py] [_log()] starting thread (client mode): 0xb955a6e0
2025-12-24T22:49:20.760 [DEBUG] [Thread-519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:49:20.774 [DEBUG] [Thread-519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:49:20.774 [INFO] [Thread-519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:49:20.781 [DEBUG] [Thread-519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:49:20.781 [DEBUG] [Thread-519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:49:20.781 [DEBUG] [Thread-519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:49:20.781 [DEBUG] [Thread-519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:49:20.781 [DEBUG] [Thread-519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:49:20.781 [DEBUG] [Thread-519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] client lang: <none>
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] server lang: <none>
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] kex follows: False
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] Compression: none
2025-12-24T22:49:20.782 [DEBUG] [Thread-519] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:49:20.840 [DEBUG] [Thread-519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:49:20.840 [DEBUG] [Thread-519] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:49:20.841 [DEBUG] [Thread-519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:49:20.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:49:20.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:49:20.896 [DEBUG] [Thread-519] [transport.py] [_log()] userauth is OK
2025-12-24T22:49:20.896 [DEBUG] [Thread-519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:49:20.896 [DEBUG] [Thread-519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:49:20.896 [DEBUG] [Thread-519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:49:20.896 [DEBUG] [Thread-519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:49:20.915 [INFO] [Thread-519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:49:20.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:49:20.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:49:21.699 [DEBUG] [Thread-519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:49:21.699 [DEBUG] [Thread-519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:49:21.747 [DEBUG] [Thread-519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:49:21.747 [DEBUG] [Thread-519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:49:21.756 [DEBUG] [Thread-519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:49:21.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:49:21.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:49:21.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:49:21.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:49:21.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:49:21.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:49:21.794 [DEBUG] [Thread-519] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:49:34.729 [DEBUG] [Thread-521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:49:49.789 [DEBUG] [Thread-522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:49:51.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:49:51.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:49:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:49:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 49, 36), 4.87, 72.41, 0.0, 30.93, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:49:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:49:36
2025-12-24T22:49:52.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:49:52.837 [DEBUG] [Thread-523] [transport.py] [_log()] starting thread (client mode): 0xb9544e50
2025-12-24T22:49:52.837 [DEBUG] [Thread-523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:49:52.856 [DEBUG] [Thread-523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:49:52.856 [INFO] [Thread-523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] client lang: <none>
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] server lang: <none>
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] kex follows: False
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:49:52.859 [DEBUG] [Thread-523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:49:52.860 [DEBUG] [Thread-523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:49:52.860 [DEBUG] [Thread-523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:49:52.860 [DEBUG] [Thread-523] [transport.py] [_log()] Compression: none
2025-12-24T22:49:52.860 [DEBUG] [Thread-523] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:49:52.874 [DEBUG] [Thread-523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:49:52.874 [DEBUG] [Thread-523] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:49:52.874 [DEBUG] [Thread-523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:49:52.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:49:52.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:49:52.875 [DEBUG] [Thread-523] [transport.py] [_log()] userauth is OK
2025-12-24T22:49:52.875 [DEBUG] [Thread-523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:49:52.875 [DEBUG] [Thread-523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:49:52.875 [DEBUG] [Thread-523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:49:52.875 [DEBUG] [Thread-523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:49:52.885 [INFO] [Thread-523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:49:52.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:49:53.513 [DEBUG] [Thread-523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:49:53.513 [DEBUG] [Thread-523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:49:53.513 [DEBUG] [Thread-523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:49:53.555 [DEBUG] [Thread-523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:49:53.555 [DEBUG] [Thread-523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:49:53.557 [DEBUG] [Thread-523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:49:53.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:49:53.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:49:53.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:49:53.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:49:53.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:49:53.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:49:53.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.867423 -999.00  +14.60  27.01     76  +10.50 1 1 1 1 1     0    0 3.66 -22.55 ZNESW 22.1 27.0 167.6 36.4 15.4 -20.9 15.2 -20.3 15.1 -19.1 15.3 -20.0
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.867423
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:49:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:49:36', tmtdew=4.87, humidity=72.41, cloud=0.0, wind=30.93, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:49:36', seeing=1.25, atlas_timestamp='2025-12-24T20:49:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:48:00')
2025-12-24T22:49:53.576 [DEBUG] [Thread-523] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:49:53.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:49:53.672 [DEBUG] [Thread-526] [transport.py] [_log()] starting thread (client mode): 0xb955a650
2025-12-24T22:49:53.672 [DEBUG] [Thread-526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:49:53.686 [DEBUG] [Thread-526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:49:53.686 [INFO] [Thread-526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] client lang: <none>
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] server lang: <none>
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] kex follows: False
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] Compression: none
2025-12-24T22:49:53.698 [DEBUG] [Thread-526] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:49:53.754 [DEBUG] [Thread-526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:49:53.754 [DEBUG] [Thread-526] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:49:53.754 [DEBUG] [Thread-526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:49:53.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:49:53.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:49:53.812 [DEBUG] [Thread-526] [transport.py] [_log()] userauth is OK
2025-12-24T22:49:53.812 [DEBUG] [Thread-526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:49:53.812 [DEBUG] [Thread-526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:49:53.812 [DEBUG] [Thread-526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:49:53.812 [DEBUG] [Thread-526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:49:53.826 [INFO] [Thread-526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:49:53.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:49:53.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:49:54.617 [DEBUG] [Thread-526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:49:54.617 [DEBUG] [Thread-526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:49:54.665 [DEBUG] [Thread-526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:49:54.665 [DEBUG] [Thread-526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:49:54.673 [DEBUG] [Thread-526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:49:54.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:49:54.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:49:54.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
2025-12-24T22:49:54.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:49:54.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:49:54.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:49:54.705 [DEBUG] [Thread-526] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:49:57.493 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:49:57.495 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:50:04.827 [DEBUG] [Thread-528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:50:13.563 [DEBUG] [Thread-529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:50:19.889 [DEBUG] [Thread-530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:50:24.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:50:24.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:50:24.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
2025-12-24T22:50:25.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 50, 8), 4.85, 72.46, 0.0, 30.95, 14.61, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:50:25.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:50:08
2025-12-24T22:50:25.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:50:25.704 [DEBUG] [Thread-531] [transport.py] [_log()] starting thread (client mode): 0xb9545780
2025-12-24T22:50:25.704 [DEBUG] [Thread-531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:50:25.724 [DEBUG] [Thread-531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:50:25.725 [INFO] [Thread-531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] client lang: <none>
2025-12-24T22:50:25.726 [DEBUG] [Thread-531] [transport.py] [_log()] server lang: <none>
2025-12-24T22:50:25.727 [DEBUG] [Thread-531] [transport.py] [_log()] kex follows: False
2025-12-24T22:50:25.727 [DEBUG] [Thread-531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:50:25.727 [DEBUG] [Thread-531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:50:25.727 [DEBUG] [Thread-531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:50:25.727 [DEBUG] [Thread-531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:50:25.727 [DEBUG] [Thread-531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:50:25.727 [DEBUG] [Thread-531] [transport.py] [_log()] Compression: none
2025-12-24T22:50:25.727 [DEBUG] [Thread-531] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:50:25.746 [DEBUG] [Thread-531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:50:25.747 [DEBUG] [Thread-531] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:50:25.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:50:25.748 [DEBUG] [Thread-531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:50:25.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:50:25.750 [DEBUG] [Thread-531] [transport.py] [_log()] userauth is OK
2025-12-24T22:50:25.750 [DEBUG] [Thread-531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:50:25.750 [DEBUG] [Thread-531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:50:25.750 [DEBUG] [Thread-531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:50:25.751 [DEBUG] [Thread-531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:50:25.775 [INFO] [Thread-531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:50:25.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:50:26.387 [DEBUG] [Thread-531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:50:26.388 [DEBUG] [Thread-531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:50:26.388 [DEBUG] [Thread-531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:50:26.429 [DEBUG] [Thread-531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:50:26.429 [DEBUG] [Thread-531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:50:26.433 [DEBUG] [Thread-531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:50:26.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:50:26.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:50:26.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:50:26.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:50:26.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:50:26.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:50:26.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:50:26.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:50:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:50:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.868117 -999.00  +14.50  23.71     76  +10.50 1 1 1 1 1     0    0 3.50 -24.65 ZNESW 27.0 23.7 150.0 32.6 15.3 -20.8 15.2 -20.7 15.0 -19.1 15.3 -19.9
2025-12-24T22:50:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:50:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:50:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.868117
2025-12-24T22:50:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:50:26.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:50:26.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:50:26.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:50:26.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:50:26.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:50:08', tmtdew=4.85, humidity=72.46, cloud=0.0, wind=30.95, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:50:08', seeing=1.42, atlas_timestamp='2025-12-24T20:50:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:48:00')
2025-12-24T22:50:26.462 [DEBUG] [Thread-531] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:50:26.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:50:26.560 [DEBUG] [Thread-534] [transport.py] [_log()] starting thread (client mode): 0xb9545e70
2025-12-24T22:50:26.560 [DEBUG] [Thread-534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:50:26.575 [DEBUG] [Thread-534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:50:26.576 [INFO] [Thread-534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:50:26.583 [DEBUG] [Thread-534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:50:26.583 [DEBUG] [Thread-534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:50:26.583 [DEBUG] [Thread-534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:50:26.583 [DEBUG] [Thread-534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] client lang: <none>
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] server lang: <none>
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] kex follows: False
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] Compression: none
2025-12-24T22:50:26.584 [DEBUG] [Thread-534] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:50:26.640 [DEBUG] [Thread-534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:50:26.641 [DEBUG] [Thread-534] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:50:26.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:50:26.642 [DEBUG] [Thread-534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:50:26.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:50:26.700 [DEBUG] [Thread-534] [transport.py] [_log()] userauth is OK
2025-12-24T22:50:26.700 [DEBUG] [Thread-534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:50:26.701 [DEBUG] [Thread-534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:50:26.701 [DEBUG] [Thread-534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:50:26.701 [DEBUG] [Thread-534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:50:26.719 [INFO] [Thread-534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:50:26.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:50:26.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:50:27.568 [DEBUG] [Thread-534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:50:27.568 [DEBUG] [Thread-534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:50:27.616 [DEBUG] [Thread-534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:50:27.616 [DEBUG] [Thread-534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:50:27.625 [DEBUG] [Thread-534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:50:27.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:50:27.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:50:27.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:50:27.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:50:27.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:50:27.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:50:27.662 [DEBUG] [Thread-534] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:50:34.926 [DEBUG] [Thread-536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:50:49.990 [DEBUG] [Thread-537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:50:57.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:50:57.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:50:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:50:57.717 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:50:57.718 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:50:58.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 50, 40), 4.85, 72.49, 0.0, 29.13, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:50:58.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:50:40
2025-12-24T22:50:58.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:50:58.667 [DEBUG] [Thread-538] [transport.py] [_log()] starting thread (client mode): 0xb9578a90
2025-12-24T22:50:58.668 [DEBUG] [Thread-538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:50:58.689 [DEBUG] [Thread-538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:50:58.689 [INFO] [Thread-538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] client lang: <none>
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] server lang: <none>
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] kex follows: False
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:50:58.692 [DEBUG] [Thread-538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:50:58.693 [DEBUG] [Thread-538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:50:58.693 [DEBUG] [Thread-538] [transport.py] [_log()] Compression: none
2025-12-24T22:50:58.693 [DEBUG] [Thread-538] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:50:58.702 [DEBUG] [Thread-538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:50:58.702 [DEBUG] [Thread-538] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:50:58.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:50:58.703 [DEBUG] [Thread-538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:50:58.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:50:58.704 [DEBUG] [Thread-538] [transport.py] [_log()] userauth is OK
2025-12-24T22:50:58.704 [DEBUG] [Thread-538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:50:58.705 [DEBUG] [Thread-538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:50:58.705 [DEBUG] [Thread-538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:50:58.705 [DEBUG] [Thread-538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:50:58.718 [INFO] [Thread-538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:50:58.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:50:59.334 [DEBUG] [Thread-538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:50:59.335 [DEBUG] [Thread-538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:50:59.335 [DEBUG] [Thread-538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:50:59.375 [DEBUG] [Thread-538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:50:59.375 [DEBUG] [Thread-538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:50:59.378 [DEBUG] [Thread-538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:50:59.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:50:59.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:50:59.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:50:59.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:50:59.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:50:59.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:50:59.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:50:59.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:50:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:50:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.868465 -999.00  +14.50  20.71     77  +10.50 1 1 1 1 1     0    0 3.56 -23.91 ZNESW 20.7 20.7 153.2 30.7 15.4 -20.7 15.2 -20.4 15.0 -19.2 15.3 -20.0
2025-12-24T22:50:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:50:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:50:59.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.868465
2025-12-24T22:50:59.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:50:59.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:50:59.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:50:59.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:50:59.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:50:59.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:50:40', tmtdew=4.85, humidity=72.49, cloud=0.0, wind=29.13, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:50:41', seeing=1.33, atlas_timestamp='2025-12-24T20:50:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:48:00')
2025-12-24T22:50:59.406 [DEBUG] [Thread-538] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:50:59.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:50:59.505 [DEBUG] [Thread-541] [transport.py] [_log()] starting thread (client mode): 0xb9578640
2025-12-24T22:50:59.505 [DEBUG] [Thread-541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:50:59.524 [DEBUG] [Thread-541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:50:59.524 [INFO] [Thread-541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:50:59.532 [DEBUG] [Thread-541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:50:59.532 [DEBUG] [Thread-541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] client lang: <none>
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] server lang: <none>
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] kex follows: False
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:50:59.533 [DEBUG] [Thread-541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:50:59.534 [DEBUG] [Thread-541] [transport.py] [_log()] Compression: none
2025-12-24T22:50:59.534 [DEBUG] [Thread-541] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:50:59.593 [DEBUG] [Thread-541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:50:59.593 [DEBUG] [Thread-541] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:50:59.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:50:59.594 [DEBUG] [Thread-541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:50:59.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:50:59.649 [DEBUG] [Thread-541] [transport.py] [_log()] userauth is OK
2025-12-24T22:50:59.649 [DEBUG] [Thread-541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:50:59.649 [DEBUG] [Thread-541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:50:59.649 [DEBUG] [Thread-541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:50:59.650 [DEBUG] [Thread-541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:50:59.668 [INFO] [Thread-541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:50:59.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:50:59.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:51:00.476 [DEBUG] [Thread-541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:51:00.476 [DEBUG] [Thread-541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:51:00.524 [DEBUG] [Thread-541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:51:00.524 [DEBUG] [Thread-541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:51:00.533 [DEBUG] [Thread-541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:51:00.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:51:00.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')
2025-12-24T22:51:00.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:51:00.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:51:00.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:51:00.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:51:00.571 [DEBUG] [Thread-541] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:51:05.036 [DEBUG] [Thread-543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:51:13.634 [DEBUG] [Thread-544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:51:20.101 [DEBUG] [Thread-545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:51:30.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:51:30.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:51:30.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
2025-12-24T22:51:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 51, 12), 4.83, 72.58, 0.0, 31.44, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:51:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:51:12
2025-12-24T22:51:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:51:31.537 [DEBUG] [Thread-546] [transport.py] [_log()] starting thread (client mode): 0xb957aa10
2025-12-24T22:51:31.537 [DEBUG] [Thread-546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:51:31.559 [DEBUG] [Thread-546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:51:31.560 [INFO] [Thread-546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] client lang: <none>
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] server lang: <none>
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] kex follows: False
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:51:31.563 [DEBUG] [Thread-546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:51:31.564 [DEBUG] [Thread-546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:51:31.564 [DEBUG] [Thread-546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:51:31.564 [DEBUG] [Thread-546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:51:31.564 [DEBUG] [Thread-546] [transport.py] [_log()] Compression: none
2025-12-24T22:51:31.564 [DEBUG] [Thread-546] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:51:31.582 [DEBUG] [Thread-546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:51:31.583 [DEBUG] [Thread-546] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:51:31.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:51:31.584 [DEBUG] [Thread-546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:51:31.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:51:31.586 [DEBUG] [Thread-546] [transport.py] [_log()] userauth is OK
2025-12-24T22:51:31.586 [DEBUG] [Thread-546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:51:31.586 [DEBUG] [Thread-546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:51:31.586 [DEBUG] [Thread-546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:51:31.587 [DEBUG] [Thread-546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:51:31.610 [INFO] [Thread-546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:51:31.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:51:32.239 [DEBUG] [Thread-546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:51:32.239 [DEBUG] [Thread-546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:51:32.240 [DEBUG] [Thread-546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:51:32.280 [DEBUG] [Thread-546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:51:32.280 [DEBUG] [Thread-546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:51:32.283 [DEBUG] [Thread-546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:51:32.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:51:32.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:51:32.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:51:32.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:51:32.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:51:32.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:51:32.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:51:32.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:51:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:51:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.868812 -999.00  +14.50  24.65     77  +10.50 1 1 1 1 1     0    0 3.51 -24.24 ZNESW 23.0 24.6 166.8 34.8 15.3 -20.6 15.1 -20.3 15.0 -19.1 15.3 -20.0
2025-12-24T22:51:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:51:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:51:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.868812
2025-12-24T22:51:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:51:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:51:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:51:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:51:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:51:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:51:12', tmtdew=4.83, humidity=72.58, cloud=0.0, wind=31.44, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:51:13', seeing=1.33, atlas_timestamp='2025-12-24T20:51:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:48:00')
2025-12-24T22:51:32.311 [DEBUG] [Thread-546] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:51:32.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:51:32.412 [DEBUG] [Thread-549] [transport.py] [_log()] starting thread (client mode): 0xb9578670
2025-12-24T22:51:32.412 [DEBUG] [Thread-549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:51:32.426 [DEBUG] [Thread-549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:51:32.426 [INFO] [Thread-549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] client lang: <none>
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] server lang: <none>
2025-12-24T22:51:32.434 [DEBUG] [Thread-549] [transport.py] [_log()] kex follows: False
2025-12-24T22:51:32.435 [DEBUG] [Thread-549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:51:32.435 [DEBUG] [Thread-549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:51:32.435 [DEBUG] [Thread-549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:51:32.435 [DEBUG] [Thread-549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:51:32.435 [DEBUG] [Thread-549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:51:32.435 [DEBUG] [Thread-549] [transport.py] [_log()] Compression: none
2025-12-24T22:51:32.435 [DEBUG] [Thread-549] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:51:32.493 [DEBUG] [Thread-549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:51:32.493 [DEBUG] [Thread-549] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:51:32.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:51:32.494 [DEBUG] [Thread-549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:51:32.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:51:32.549 [DEBUG] [Thread-549] [transport.py] [_log()] userauth is OK
2025-12-24T22:51:32.549 [DEBUG] [Thread-549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:51:32.549 [DEBUG] [Thread-549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:51:32.549 [DEBUG] [Thread-549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:51:32.550 [DEBUG] [Thread-549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:51:32.567 [INFO] [Thread-549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:51:32.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:51:32.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:51:33.363 [DEBUG] [Thread-549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:51:33.363 [DEBUG] [Thread-549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:51:33.411 [DEBUG] [Thread-549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:51:33.411 [DEBUG] [Thread-549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:51:33.420 [DEBUG] [Thread-549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:51:33.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:51:33.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:51:33.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:51:33.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:51:33.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:51:33.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:51:33.457 [DEBUG] [Thread-549] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:51:35.147 [DEBUG] [Thread-551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:51:50.208 [DEBUG] [Thread-552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:51:57.920 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:51:57.921 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:52:03.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:52:03.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:52:03.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:52:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 51, 44), 4.79, 72.54, 0.0, 34.02, 14.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:52:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:51:44
2025-12-24T22:52:04.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:52:04.453 [DEBUG] [Thread-553] [transport.py] [_log()] starting thread (client mode): 0xb95933a0
2025-12-24T22:52:04.453 [DEBUG] [Thread-553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:52:04.472 [DEBUG] [Thread-553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:52:04.472 [INFO] [Thread-553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:52:04.475 [DEBUG] [Thread-553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:52:04.475 [DEBUG] [Thread-553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] client lang: <none>
2025-12-24T22:52:04.476 [DEBUG] [Thread-553] [transport.py] [_log()] server lang: <none>
2025-12-24T22:52:04.477 [DEBUG] [Thread-553] [transport.py] [_log()] kex follows: False
2025-12-24T22:52:04.477 [DEBUG] [Thread-553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:52:04.477 [DEBUG] [Thread-553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:52:04.477 [DEBUG] [Thread-553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:52:04.477 [DEBUG] [Thread-553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:52:04.478 [DEBUG] [Thread-553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:52:04.478 [DEBUG] [Thread-553] [transport.py] [_log()] Compression: none
2025-12-24T22:52:04.478 [DEBUG] [Thread-553] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:52:04.499 [DEBUG] [Thread-553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:52:04.499 [DEBUG] [Thread-553] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:52:04.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:52:04.501 [DEBUG] [Thread-553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:52:04.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:52:04.502 [DEBUG] [Thread-553] [transport.py] [_log()] userauth is OK
2025-12-24T22:52:04.503 [DEBUG] [Thread-553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:52:04.503 [DEBUG] [Thread-553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:52:04.503 [DEBUG] [Thread-553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:52:04.503 [DEBUG] [Thread-553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:52:04.525 [INFO] [Thread-553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:52:04.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:52:05.182 [DEBUG] [Thread-553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:52:05.182 [DEBUG] [Thread-553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:52:05.182 [DEBUG] [Thread-553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:52:05.224 [DEBUG] [Thread-553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:52:05.225 [DEBUG] [Thread-553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:52:05.228 [DEBUG] [Thread-553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:52:05.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:52:05.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:52:05.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:52:05.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:52:05.247 [DEBUG] [Thread-556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:52:05.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:52:05.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:52:05.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:52:05.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:52:05.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:52:05.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.869159 -999.00  +14.50  31.75     77  +10.50 1 1 2 1 1     0    0 3.47 -25.49 ZNESW 19.3 31.8 155.0 37.1 15.3 -20.7 15.2 -20.3 15.0 -19.1 15.3 -20.0
2025-12-24T22:52:05.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:52:05.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:52:05.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.869159
2025-12-24T22:52:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:52:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:52:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:52:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:52:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:52:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:51:44', tmtdew=4.79, humidity=72.54, cloud=0.0, wind=34.02, temperature=14.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:51:45', seeing=1.46, atlas_timestamp='2025-12-24T20:51:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.1252500000000012, 0.1542500000000011, 0.10449999999999982, 0.125, 0.16325000000000145, 0.12349999999999994, 0.060249999999999915, 0.059499999999999886, 0.1225000000000005, 0.10724999999999874, 0.08699999999999974, 0.15949999999999953, 0.17525000000000013, 0.0779999999999994, 0.041999999999999815, 0.1332500000000003, 0.11100000000000065, 0.1064999999999987, 0.08724999999999916, 0.1789999999999985, 0.15674999999999883, 0.11025000000000063, 0.0857499999999991, 0.1324999999999985, 0.15649999999999942, 0.11575000000000024, 0.15649999999999942, 0.15000000000000036, 0.17300000000000182, 0.14300000000000068, 0.07600000000000051, 0.16274999999999906], zp_timestamp='2025-12-24T20:48:00')
2025-12-24T22:52:05.254 [DEBUG] [Thread-553] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:52:05.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:52:13.699 [DEBUG] [Thread-557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:52:20.286 [DEBUG] [Thread-558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:52:35.348 [DEBUG] [Thread-559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:52:50.388 [DEBUG] [Thread-560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:52:58.125 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:52:58.126 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:04.681 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:05.431 [DEBUG] [Thread-561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:10.113 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:13.163 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:13.757 [DEBUG] [Thread-562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:19.530 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:20.469 [DEBUG] [Thread-563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:35.508 [DEBUG] [Thread-564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:50.547 [DEBUG] [Thread-565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:58.329 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:53:58.331 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:05.587 [DEBUG] [Thread-566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:13.816 [DEBUG] [Thread-567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:19.861 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T22:54:20.630 [DEBUG] [Thread-568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:35.666 [DEBUG] [Thread-569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:49.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:54:49.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:54:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:54:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 54, 25), 4.74, 73.24, 0.0, 37.97, 14.56, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:54:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:54:25
2025-12-24T22:54:50.708 [DEBUG] [Thread-570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:50.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:54:50.873 [DEBUG] [Thread-571] [transport.py] [_log()] starting thread (client mode): 0xb955a5f0
2025-12-24T22:54:50.873 [DEBUG] [Thread-571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:54:50.893 [DEBUG] [Thread-571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:54:50.893 [INFO] [Thread-571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:54:50.896 [DEBUG] [Thread-571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:54:50.896 [DEBUG] [Thread-571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:54:50.896 [DEBUG] [Thread-571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:54:50.896 [DEBUG] [Thread-571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:54:50.896 [DEBUG] [Thread-571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:54:50.896 [DEBUG] [Thread-571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:54:50.896 [DEBUG] [Thread-571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:54:50.896 [DEBUG] [Thread-571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] client lang: <none>
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] server lang: <none>
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] kex follows: False
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:54:50.897 [DEBUG] [Thread-571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:54:50.898 [DEBUG] [Thread-571] [transport.py] [_log()] Compression: none
2025-12-24T22:54:50.898 [DEBUG] [Thread-571] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:54:50.908 [DEBUG] [Thread-571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:54:50.909 [DEBUG] [Thread-571] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:54:50.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:54:50.911 [DEBUG] [Thread-571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:54:50.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:54:50.914 [DEBUG] [Thread-571] [transport.py] [_log()] userauth is OK
2025-12-24T22:54:50.914 [DEBUG] [Thread-571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:54:50.914 [DEBUG] [Thread-571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:54:50.914 [DEBUG] [Thread-571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:54:50.915 [DEBUG] [Thread-571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:54:50.933 [INFO] [Thread-571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:54:50.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:54:51.544 [DEBUG] [Thread-571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:54:51.544 [DEBUG] [Thread-571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:54:51.545 [DEBUG] [Thread-571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:54:51.585 [DEBUG] [Thread-571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:54:51.585 [DEBUG] [Thread-571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:54:51.590 [DEBUG] [Thread-571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:54:51.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:54:51.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:54:51.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:54:51.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:54:51.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:54:51.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:54:51.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:54:51.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:54:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:54:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.871242 -999.00  +14.40  24.42     77  +10.50 1 1 1 1 1     0    0 3.42 -23.58 ZNESW 25.0 24.4 160.6 39.2 15.2 -20.6 15.0 -20.2 14.9 -19.1 15.2 -19.9
2025-12-24T22:54:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:54:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:54:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.871242
2025-12-24T22:54:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:54:51.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:54:51.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:54:51.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:54:51.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:54:51.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:54:25', tmtdew=4.74, humidity=73.24, cloud=0.0, wind=37.97, temperature=14.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:54:25', seeing=1.41, atlas_timestamp='2025-12-24T20:54:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.09175000000000111, 0.1412500000000012, 0.09325000000000117, 0.1269999999999989, 0.13149999999999906, 0.15075000000000216, 0.10200000000000031, 0.07325000000000159, 0.09249999999999936, 0.12899999999999956, 0.1662499999999998, 0.10999999999999943, 0.2190000000000012, 0.21325000000000038, 0.09499999999999886, 0.08199999999999896, 0.13424999999999976, 0.1534999999999993, 0.09799999999999898, 0.062249999999998806, 0.18049999999999855, 0.14724999999999966, 0.10475000000000101, 0.11074999999999946, 0.18900000000000006, 0.1739999999999995, 0.11275000000000013, 0.1745000000000001, 0.20650000000000013, 0.17350000000000065, 0.16800000000000104, 0.09299999999999997, 0.18774999999999942], zp_timestamp='2025-12-24T20:50:00')
2025-12-24T22:54:51.616 [DEBUG] [Thread-571] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:54:51.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:54:51.712 [DEBUG] [Thread-574] [transport.py] [_log()] starting thread (client mode): 0xb95479a0
2025-12-24T22:54:51.712 [DEBUG] [Thread-574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:54:51.727 [DEBUG] [Thread-574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:54:51.727 [INFO] [Thread-574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:54:51.734 [DEBUG] [Thread-574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] client lang: <none>
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] server lang: <none>
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] kex follows: False
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:54:51.735 [DEBUG] [Thread-574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:54:51.736 [DEBUG] [Thread-574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:54:51.736 [DEBUG] [Thread-574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:54:51.736 [DEBUG] [Thread-574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:54:51.736 [DEBUG] [Thread-574] [transport.py] [_log()] Compression: none
2025-12-24T22:54:51.736 [DEBUG] [Thread-574] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:54:51.798 [DEBUG] [Thread-574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:54:51.798 [DEBUG] [Thread-574] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:54:51.799 [DEBUG] [Thread-574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:54:51.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:54:51.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:54:51.854 [DEBUG] [Thread-574] [transport.py] [_log()] userauth is OK
2025-12-24T22:54:51.854 [DEBUG] [Thread-574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:54:51.854 [DEBUG] [Thread-574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:54:51.854 [DEBUG] [Thread-574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:54:51.854 [DEBUG] [Thread-574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:54:51.874 [INFO] [Thread-574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:54:51.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:54:51.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:54:52.688 [DEBUG] [Thread-574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:54:52.688 [DEBUG] [Thread-574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:54:52.737 [DEBUG] [Thread-574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:54:52.737 [DEBUG] [Thread-574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:54:52.746 [DEBUG] [Thread-574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:54:52.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:54:52.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:54:52.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:54:52.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:54:52.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:54:52.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:54:52.780 [DEBUG] [Thread-574] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:54:54.798 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:57.994 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:58.533 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:54:58.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:03.026 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:05.747 [DEBUG] [Thread-576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:08.401 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:13.878 [DEBUG] [Thread-577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:17.785 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:20.812 [DEBUG] [Thread-578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:22.178 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:22.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:55:22.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:55:22.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:55:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 54, 57), 4.74, 73.24, 0.0, 36.59, 14.53, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:55:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:54:57
2025-12-24T22:55:23.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:55:23.793 [DEBUG] [Thread-579] [transport.py] [_log()] starting thread (client mode): 0xb9590640
2025-12-24T22:55:23.793 [DEBUG] [Thread-579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:55:23.807 [DEBUG] [Thread-579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:55:23.807 [INFO] [Thread-579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:55:23.808 [DEBUG] [Thread-579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] client lang: <none>
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] server lang: <none>
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] kex follows: False
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:55:23.809 [DEBUG] [Thread-579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:55:23.810 [DEBUG] [Thread-579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:55:23.810 [DEBUG] [Thread-579] [transport.py] [_log()] Compression: none
2025-12-24T22:55:23.810 [DEBUG] [Thread-579] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:55:23.819 [DEBUG] [Thread-579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:55:23.820 [DEBUG] [Thread-579] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:55:23.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:55:23.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:55:23.822 [DEBUG] [Thread-579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:55:23.822 [DEBUG] [Thread-579] [transport.py] [_log()] userauth is OK
2025-12-24T22:55:23.822 [DEBUG] [Thread-579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:55:23.822 [DEBUG] [Thread-579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:55:23.822 [DEBUG] [Thread-579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:55:23.822 [DEBUG] [Thread-579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:55:23.836 [INFO] [Thread-579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:55:23.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:55:24.428 [DEBUG] [Thread-579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:55:24.428 [DEBUG] [Thread-579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:55:24.429 [DEBUG] [Thread-579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:55:24.469 [DEBUG] [Thread-579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:55:24.469 [DEBUG] [Thread-579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:55:24.472 [DEBUG] [Thread-579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:55:24.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:55:24.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:55:24.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:55:24.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:55:24.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:55:24.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:55:24.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:55:24.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:55:24.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:55:24.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.871590 -999.00  +14.40  30.26     77  +10.50 1 1 2 1 1     0    0 3.48 -23.80 ZNESW 26.0 30.3 159.0 41.5 15.2 -20.7 15.0 -20.3 14.9 -19.1 15.2 -19.9
2025-12-24T22:55:24.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:55:24.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:55:24.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.871590
2025-12-24T22:55:24.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:55:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:55:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:55:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:55:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:55:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:54:57', tmtdew=4.74, humidity=73.24, cloud=0.0, wind=36.59, temperature=14.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:54:57', seeing=1.32, atlas_timestamp='2025-12-24T20:55:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.09175000000000111, 0.1412500000000012, 0.09325000000000117, 0.1269999999999989, 0.13149999999999906, 0.15075000000000216, 0.10200000000000031, 0.07325000000000159, 0.09249999999999936, 0.12899999999999956, 0.1662499999999998, 0.10999999999999943, 0.2190000000000012, 0.21325000000000038, 0.09499999999999886, 0.08199999999999896, 0.13424999999999976, 0.1534999999999993, 0.09799999999999898, 0.062249999999998806, 0.18049999999999855, 0.14724999999999966, 0.10475000000000101, 0.11074999999999946, 0.18900000000000006, 0.1739999999999995, 0.11275000000000013, 0.1745000000000001, 0.20650000000000013, 0.17350000000000065, 0.16800000000000104, 0.09299999999999997, 0.18774999999999942], zp_timestamp='2025-12-24T20:50:00')
2025-12-24T22:55:24.497 [DEBUG] [Thread-579] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:55:24.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:55:24.591 [DEBUG] [Thread-582] [transport.py] [_log()] starting thread (client mode): 0xb9579de0
2025-12-24T22:55:24.591 [DEBUG] [Thread-582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:55:24.605 [DEBUG] [Thread-582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:55:24.606 [INFO] [Thread-582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:55:24.613 [DEBUG] [Thread-582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:55:24.614 [DEBUG] [Thread-582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:55:24.614 [DEBUG] [Thread-582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:55:24.614 [DEBUG] [Thread-582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:55:24.614 [DEBUG] [Thread-582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:55:24.614 [DEBUG] [Thread-582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:55:24.614 [DEBUG] [Thread-582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] client lang: <none>
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] server lang: <none>
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] kex follows: False
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] Compression: none
2025-12-24T22:55:24.615 [DEBUG] [Thread-582] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:55:24.673 [DEBUG] [Thread-582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:55:24.674 [DEBUG] [Thread-582] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:55:24.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:55:24.675 [DEBUG] [Thread-582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:55:24.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:55:24.733 [DEBUG] [Thread-582] [transport.py] [_log()] userauth is OK
2025-12-24T22:55:24.734 [DEBUG] [Thread-582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:55:24.734 [DEBUG] [Thread-582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:55:24.734 [DEBUG] [Thread-582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:55:24.734 [DEBUG] [Thread-582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:55:24.757 [INFO] [Thread-582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:55:24.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:55:24.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:55:25.575 [DEBUG] [Thread-582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:55:25.575 [DEBUG] [Thread-582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:55:25.623 [DEBUG] [Thread-582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:55:25.624 [DEBUG] [Thread-582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:55:25.633 [DEBUG] [Thread-582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:55:25.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:55:25.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:55:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:55:25.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:55:25.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:55:25.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:55:25.668 [DEBUG] [Thread-582] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:55:35.853 [DEBUG] [Thread-584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:41.566 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:45.942 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:50.920 [DEBUG] [Thread-585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:52.969 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:55:55.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:55:55.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:55:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 55, 29), 4.73, 73.33, 0.0, 34.16, 14.55, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:55:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:55:29
2025-12-24T22:55:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:55:56.683 [DEBUG] [Thread-586] [transport.py] [_log()] starting thread (client mode): 0xb9579990
2025-12-24T22:55:56.684 [DEBUG] [Thread-586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:55:56.704 [DEBUG] [Thread-586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:55:56.704 [INFO] [Thread-586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:55:56.707 [DEBUG] [Thread-586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:55:56.707 [DEBUG] [Thread-586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:55:56.708 [DEBUG] [Thread-586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:55:56.708 [DEBUG] [Thread-586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:55:56.708 [DEBUG] [Thread-586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:55:56.708 [DEBUG] [Thread-586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:55:56.708 [DEBUG] [Thread-586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:55:56.708 [DEBUG] [Thread-586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:55:56.708 [DEBUG] [Thread-586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:55:56.708 [DEBUG] [Thread-586] [transport.py] [_log()] client lang: <none>
2025-12-24T22:55:56.709 [DEBUG] [Thread-586] [transport.py] [_log()] server lang: <none>
2025-12-24T22:55:56.709 [DEBUG] [Thread-586] [transport.py] [_log()] kex follows: False
2025-12-24T22:55:56.709 [DEBUG] [Thread-586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:55:56.709 [DEBUG] [Thread-586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:55:56.709 [DEBUG] [Thread-586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:55:56.709 [DEBUG] [Thread-586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:55:56.709 [DEBUG] [Thread-586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:55:56.710 [DEBUG] [Thread-586] [transport.py] [_log()] Compression: none
2025-12-24T22:55:56.710 [DEBUG] [Thread-586] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:55:56.730 [DEBUG] [Thread-586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:55:56.730 [DEBUG] [Thread-586] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:55:56.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:55:56.731 [DEBUG] [Thread-586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:55:56.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:55:56.733 [DEBUG] [Thread-586] [transport.py] [_log()] userauth is OK
2025-12-24T22:55:56.734 [DEBUG] [Thread-586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:55:56.734 [DEBUG] [Thread-586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:55:56.734 [DEBUG] [Thread-586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:55:56.734 [DEBUG] [Thread-586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:55:56.773 [INFO] [Thread-586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:55:56.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:55:57.334 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:57.444 [DEBUG] [Thread-586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:55:57.444 [DEBUG] [Thread-586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:55:57.445 [DEBUG] [Thread-586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:55:57.485 [DEBUG] [Thread-586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:55:57.485 [DEBUG] [Thread-586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:55:57.489 [DEBUG] [Thread-586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:55:57.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:55:57.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:55:57.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:55:57.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:55:57.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:55:57.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:55:57.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:55:57.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:55:57.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:55:57.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.871590 -999.00  +14.40  30.26     77  +10.50 1 1 2 1 1     0    0 3.48 -23.80 ZNESW 26.0 30.3 159.0 41.5 15.2 -20.7 15.0 -20.3 14.9 -19.1 15.2 -19.9
2025-12-24T22:55:57.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:55:57.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:55:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.871590
2025-12-24T22:55:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:55:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:55:57.515 [DEBUG] [Thread-586] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:55:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:55:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:55:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:55:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:55:29', tmtdew=4.73, humidity=73.33, cloud=0.0, wind=34.16, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:55:29', seeing=1.3, atlas_timestamp='2025-12-24T20:55:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:54:00')
2025-12-24T22:55:57.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:55:57.617 [DEBUG] [Thread-589] [transport.py] [_log()] starting thread (client mode): 0xb9592bc0
2025-12-24T22:55:57.618 [DEBUG] [Thread-589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:55:57.632 [DEBUG] [Thread-589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:55:57.633 [INFO] [Thread-589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:55:57.640 [DEBUG] [Thread-589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:55:57.641 [DEBUG] [Thread-589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:55:57.641 [DEBUG] [Thread-589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:55:57.641 [DEBUG] [Thread-589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:55:57.641 [DEBUG] [Thread-589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:55:57.641 [DEBUG] [Thread-589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:55:57.641 [DEBUG] [Thread-589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:55:57.641 [DEBUG] [Thread-589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:55:57.642 [DEBUG] [Thread-589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:55:57.642 [DEBUG] [Thread-589] [transport.py] [_log()] client lang: <none>
2025-12-24T22:55:57.642 [DEBUG] [Thread-589] [transport.py] [_log()] server lang: <none>
2025-12-24T22:55:57.642 [DEBUG] [Thread-589] [transport.py] [_log()] kex follows: False
2025-12-24T22:55:57.642 [DEBUG] [Thread-589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:55:57.642 [DEBUG] [Thread-589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:55:57.642 [DEBUG] [Thread-589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:55:57.643 [DEBUG] [Thread-589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:55:57.643 [DEBUG] [Thread-589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:55:57.643 [DEBUG] [Thread-589] [transport.py] [_log()] Compression: none
2025-12-24T22:55:57.643 [DEBUG] [Thread-589] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:55:57.704 [DEBUG] [Thread-589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:55:57.705 [DEBUG] [Thread-589] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:55:57.706 [DEBUG] [Thread-589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:55:57.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:55:57.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:55:57.763 [DEBUG] [Thread-589] [transport.py] [_log()] userauth is OK
2025-12-24T22:55:57.763 [DEBUG] [Thread-589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:55:57.763 [DEBUG] [Thread-589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:55:57.764 [DEBUG] [Thread-589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:55:57.764 [DEBUG] [Thread-589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:55:57.785 [INFO] [Thread-589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:55:57.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:55:57.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:55:58.568 [DEBUG] [Thread-589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:55:58.568 [DEBUG] [Thread-589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:55:58.616 [DEBUG] [Thread-589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:55:58.616 [DEBUG] [Thread-589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:55:58.625 [DEBUG] [Thread-589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:55:58.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:55:58.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:55:58.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:55:58.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:55:58.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:55:58.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:55:58.663 [DEBUG] [Thread-589] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:55:58.732 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:55:58.734 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:56:05.963 [DEBUG] [Thread-591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:56:13.938 [DEBUG] [Thread-592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:56:21.041 [DEBUG] [Thread-593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:56:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:56:28.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:56:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:56:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 56, 1), 4.73, 73.29, 0.0, 37.3, 14.51, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:56:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:56:01
2025-12-24T22:56:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:56:29.716 [DEBUG] [Thread-594] [transport.py] [_log()] starting thread (client mode): 0xb9559510
2025-12-24T22:56:29.717 [DEBUG] [Thread-594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:56:29.737 [DEBUG] [Thread-594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:56:29.737 [INFO] [Thread-594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] client lang: <none>
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] server lang: <none>
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] kex follows: False
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] Compression: none
2025-12-24T22:56:29.740 [DEBUG] [Thread-594] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:56:29.756 [DEBUG] [Thread-594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:56:29.756 [DEBUG] [Thread-594] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:56:29.757 [DEBUG] [Thread-594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:56:29.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:56:29.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:56:29.759 [DEBUG] [Thread-594] [transport.py] [_log()] userauth is OK
2025-12-24T22:56:29.759 [DEBUG] [Thread-594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:56:29.759 [DEBUG] [Thread-594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:56:29.759 [DEBUG] [Thread-594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:56:29.759 [DEBUG] [Thread-594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:56:29.777 [INFO] [Thread-594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:56:29.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:56:30.436 [DEBUG] [Thread-594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:56:30.436 [DEBUG] [Thread-594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:56:30.437 [DEBUG] [Thread-594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:56:30.477 [DEBUG] [Thread-594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:56:30.477 [DEBUG] [Thread-594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:56:30.480 [DEBUG] [Thread-594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:56:30.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:56:30.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:56:30.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:56:30.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:56:30.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:56:30.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:56:30.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:56:30.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:56:30.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:56:30.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.871937 -999.00  +14.40  30.31     77  +10.60 1 1 2 1 1     0    0 3.48 -23.68 ZNESW 23.0 30.3 160.2 38.8 15.2 -20.7 15.0 -20.5 14.9 -18.9 15.2 -19.9
2025-12-24T22:56:30.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:56:30.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:56:30.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.871937
2025-12-24T22:56:30.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:56:30.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:56:30.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:56:30.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:56:30.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:56:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:56:01', tmtdew=4.73, humidity=73.29, cloud=0.0, wind=37.3, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:56:01', seeing=1.3, atlas_timestamp='2025-12-24T20:55:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:54:00')
2025-12-24T22:56:30.505 [DEBUG] [Thread-594] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:56:30.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:56:30.619 [DEBUG] [Thread-597] [transport.py] [_log()] starting thread (client mode): 0xb9544a60
2025-12-24T22:56:30.619 [DEBUG] [Thread-597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:56:30.634 [DEBUG] [Thread-597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:56:30.634 [INFO] [Thread-597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:56:30.642 [DEBUG] [Thread-597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:56:30.642 [DEBUG] [Thread-597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:56:30.642 [DEBUG] [Thread-597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:56:30.642 [DEBUG] [Thread-597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:56:30.642 [DEBUG] [Thread-597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:56:30.642 [DEBUG] [Thread-597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:56:30.643 [DEBUG] [Thread-597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:56:30.643 [DEBUG] [Thread-597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:56:30.643 [DEBUG] [Thread-597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:56:30.643 [DEBUG] [Thread-597] [transport.py] [_log()] client lang: <none>
2025-12-24T22:56:30.643 [DEBUG] [Thread-597] [transport.py] [_log()] server lang: <none>
2025-12-24T22:56:30.643 [DEBUG] [Thread-597] [transport.py] [_log()] kex follows: False
2025-12-24T22:56:30.643 [DEBUG] [Thread-597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:56:30.643 [DEBUG] [Thread-597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:56:30.644 [DEBUG] [Thread-597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:56:30.644 [DEBUG] [Thread-597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:56:30.644 [DEBUG] [Thread-597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:56:30.644 [DEBUG] [Thread-597] [transport.py] [_log()] Compression: none
2025-12-24T22:56:30.644 [DEBUG] [Thread-597] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:56:30.703 [DEBUG] [Thread-597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:56:30.704 [DEBUG] [Thread-597] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:56:30.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:56:30.705 [DEBUG] [Thread-597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:56:30.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:56:30.762 [DEBUG] [Thread-597] [transport.py] [_log()] userauth is OK
2025-12-24T22:56:30.762 [DEBUG] [Thread-597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:56:30.762 [DEBUG] [Thread-597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:56:30.763 [DEBUG] [Thread-597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:56:30.763 [DEBUG] [Thread-597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:56:30.781 [INFO] [Thread-597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:56:30.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:56:30.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:56:31.550 [DEBUG] [Thread-597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:56:31.550 [DEBUG] [Thread-597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:56:31.600 [DEBUG] [Thread-597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:56:31.601 [DEBUG] [Thread-597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:56:31.613 [DEBUG] [Thread-597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:56:31.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:56:31.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:56:31.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:56:31.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:56:31.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:56:31.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:56:31.650 [DEBUG] [Thread-597] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:56:36.078 [DEBUG] [Thread-599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:56:51.140 [DEBUG] [Thread-600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:56:57.006 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:56:58.933 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:56:58.934 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:57:00.051 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:57:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:57:01.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:57:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:57:02.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 56, 33), 4.88, 72.52, 0.0, 40.79, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:57:02.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:56:33
2025-12-24T22:57:02.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:57:02.657 [DEBUG] [Thread-601] [transport.py] [_log()] starting thread (client mode): 0xb9579f60
2025-12-24T22:57:02.657 [DEBUG] [Thread-601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:57:02.676 [DEBUG] [Thread-601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:57:02.676 [INFO] [Thread-601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] client lang: <none>
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] server lang: <none>
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] kex follows: False
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:57:02.679 [DEBUG] [Thread-601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:57:02.680 [DEBUG] [Thread-601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:57:02.680 [DEBUG] [Thread-601] [transport.py] [_log()] Compression: none
2025-12-24T22:57:02.680 [DEBUG] [Thread-601] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:57:02.697 [DEBUG] [Thread-601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:57:02.698 [DEBUG] [Thread-601] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:57:02.698 [DEBUG] [Thread-601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:57:02.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:57:02.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:57:02.700 [DEBUG] [Thread-601] [transport.py] [_log()] userauth is OK
2025-12-24T22:57:02.700 [DEBUG] [Thread-601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:57:02.700 [DEBUG] [Thread-601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:57:02.700 [DEBUG] [Thread-601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:57:02.701 [DEBUG] [Thread-601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:57:02.724 [INFO] [Thread-601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:57:02.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:57:03.383 [DEBUG] [Thread-601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:57:03.383 [DEBUG] [Thread-601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:57:03.383 [DEBUG] [Thread-601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:57:03.424 [DEBUG] [Thread-601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:57:03.424 [DEBUG] [Thread-601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:57:03.427 [DEBUG] [Thread-601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:57:03.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:57:03.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:57:03.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:57:03.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:57:03.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:57:03.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:57:03.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.872284 -999.00  +14.40  19.39     77  +10.50 1 1 1 1 1     0    0 3.43 -25.52 ZNESW 18.4 19.4 161.8 31.2 15.2 -20.7 15.0 -20.2 14.8 -18.9 15.2 -19.8
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.872284
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:57:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:56:33', tmtdew=4.88, humidity=72.52, cloud=0.0, wind=40.79, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:56:33', seeing=1.31, atlas_timestamp='2025-12-24T20:56:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:54:00')
2025-12-24T22:57:03.445 [DEBUG] [Thread-601] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:57:03.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:57:03.539 [DEBUG] [Thread-604] [transport.py] [_log()] starting thread (client mode): 0xb957a560
2025-12-24T22:57:03.539 [DEBUG] [Thread-604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:57:03.553 [DEBUG] [Thread-604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:57:03.553 [INFO] [Thread-604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] client lang: <none>
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] server lang: <none>
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] kex follows: False
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] Compression: none
2025-12-24T22:57:03.561 [DEBUG] [Thread-604] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:57:03.620 [DEBUG] [Thread-604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:57:03.620 [DEBUG] [Thread-604] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:57:03.620 [DEBUG] [Thread-604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:57:03.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:57:03.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:57:03.677 [DEBUG] [Thread-604] [transport.py] [_log()] userauth is OK
2025-12-24T22:57:03.677 [DEBUG] [Thread-604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:57:03.677 [DEBUG] [Thread-604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:57:03.677 [DEBUG] [Thread-604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:57:03.677 [DEBUG] [Thread-604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:57:03.694 [INFO] [Thread-604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:57:03.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:57:03.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:57:04.500 [DEBUG] [Thread-604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:57:04.500 [DEBUG] [Thread-604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:57:04.547 [DEBUG] [Thread-604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:57:04.547 [DEBUG] [Thread-604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:57:04.556 [DEBUG] [Thread-604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:57:04.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:57:04.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:57:04.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:57:04.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:57:04.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:57:04.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:57:04.589 [DEBUG] [Thread-604] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:57:06.182 [DEBUG] [Thread-606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:57:13.996 [DEBUG] [Thread-607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:57:21.237 [DEBUG] [Thread-608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:57:34.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:57:34.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:57:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:57:35.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 57, 5), 4.68, 73.33, 0.0, 35.82, 14.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:57:35.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:57:05
2025-12-24T22:57:35.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:57:35.607 [DEBUG] [Thread-609] [transport.py] [_log()] starting thread (client mode): 0xb9579c30
2025-12-24T22:57:35.607 [DEBUG] [Thread-609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:57:35.628 [DEBUG] [Thread-609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:57:35.628 [INFO] [Thread-609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:57:35.632 [DEBUG] [Thread-609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:57:35.632 [DEBUG] [Thread-609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:57:35.632 [DEBUG] [Thread-609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:57:35.632 [DEBUG] [Thread-609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:57:35.632 [DEBUG] [Thread-609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:57:35.632 [DEBUG] [Thread-609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] client lang: <none>
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] server lang: <none>
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] kex follows: False
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:57:35.633 [DEBUG] [Thread-609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:57:35.634 [DEBUG] [Thread-609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:57:35.634 [DEBUG] [Thread-609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:57:35.634 [DEBUG] [Thread-609] [transport.py] [_log()] Compression: none
2025-12-24T22:57:35.634 [DEBUG] [Thread-609] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:57:35.654 [DEBUG] [Thread-609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:57:35.655 [DEBUG] [Thread-609] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:57:35.656 [DEBUG] [Thread-609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:57:35.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:57:35.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:57:35.657 [DEBUG] [Thread-609] [transport.py] [_log()] userauth is OK
2025-12-24T22:57:35.658 [DEBUG] [Thread-609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:57:35.658 [DEBUG] [Thread-609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:57:35.658 [DEBUG] [Thread-609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:57:35.658 [DEBUG] [Thread-609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:57:35.677 [INFO] [Thread-609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:57:35.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:57:36.281 [DEBUG] [Thread-611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:57:36.318 [DEBUG] [Thread-609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:57:36.318 [DEBUG] [Thread-609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:57:36.318 [DEBUG] [Thread-609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:57:36.359 [DEBUG] [Thread-609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:57:36.359 [DEBUG] [Thread-609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:57:36.363 [DEBUG] [Thread-609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:57:36.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:57:36.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:57:36.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:57:36.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:57:36.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:57:36.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:57:36.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:57:36.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:57:36.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:57:36.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.872632 -999.00  +14.40  27.18     77  +10.50 1 1 1 1 1     0    0 3.30 -26.08 ZNESW 23.6 27.2 151.4 34.1 15.2 -20.6 15.0 -20.2 14.9 -19.0 15.2 -19.9
2025-12-24T22:57:36.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:57:36.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:57:36.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.872632
2025-12-24T22:57:36.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:57:36.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:57:36.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:57:36.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:57:36.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:57:36.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:57:05', tmtdew=4.68, humidity=73.33, cloud=0.0, wind=35.82, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:57:06', seeing=1.36, atlas_timestamp='2025-12-24T20:56:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:54:00')
2025-12-24T22:57:36.390 [DEBUG] [Thread-609] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:57:36.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:57:36.491 [DEBUG] [Thread-613] [transport.py] [_log()] starting thread (client mode): 0xb95902b0
2025-12-24T22:57:36.491 [DEBUG] [Thread-613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:57:36.506 [DEBUG] [Thread-613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:57:36.506 [INFO] [Thread-613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] client lang: <none>
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] server lang: <none>
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] kex follows: False
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] Compression: none
2025-12-24T22:57:36.516 [DEBUG] [Thread-613] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:57:36.573 [DEBUG] [Thread-613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:57:36.574 [DEBUG] [Thread-613] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:57:36.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:57:36.576 [DEBUG] [Thread-613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:57:36.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:57:36.630 [DEBUG] [Thread-613] [transport.py] [_log()] userauth is OK
2025-12-24T22:57:36.630 [DEBUG] [Thread-613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:57:36.630 [DEBUG] [Thread-613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:57:36.630 [DEBUG] [Thread-613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:57:36.630 [DEBUG] [Thread-613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:57:36.649 [INFO] [Thread-613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:57:36.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:57:36.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:57:37.432 [DEBUG] [Thread-613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:57:37.432 [DEBUG] [Thread-613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:57:37.480 [DEBUG] [Thread-613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:57:37.480 [DEBUG] [Thread-613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:57:37.489 [DEBUG] [Thread-613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:57:37.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:57:37.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:57:37.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:57:37.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:57:37.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:57:37.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:57:37.527 [DEBUG] [Thread-613] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:57:51.321 [DEBUG] [Thread-615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:57:59.135 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:57:59.137 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:58:06.389 [DEBUG] [Thread-616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:58:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:58:07.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:58:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:58:08.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 57, 38), 4.65, 73.46, 0.0, 29.78, 14.48, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:58:08.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:57:38
2025-12-24T22:58:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:58:08.508 [DEBUG] [Thread-617] [transport.py] [_log()] starting thread (client mode): 0xb9591ba0
2025-12-24T22:58:08.508 [DEBUG] [Thread-617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:58:08.529 [DEBUG] [Thread-617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:58:08.529 [INFO] [Thread-617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] client lang: <none>
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] server lang: <none>
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] kex follows: False
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:58:08.532 [DEBUG] [Thread-617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:58:08.533 [DEBUG] [Thread-617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:58:08.533 [DEBUG] [Thread-617] [transport.py] [_log()] Compression: none
2025-12-24T22:58:08.533 [DEBUG] [Thread-617] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:58:08.550 [DEBUG] [Thread-617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:58:08.551 [DEBUG] [Thread-617] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:58:08.551 [DEBUG] [Thread-617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:58:08.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:58:08.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:58:08.594 [DEBUG] [Thread-617] [transport.py] [_log()] userauth is OK
2025-12-24T22:58:08.594 [DEBUG] [Thread-617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:58:08.594 [DEBUG] [Thread-617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:58:08.594 [DEBUG] [Thread-617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:58:08.594 [DEBUG] [Thread-617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:58:08.614 [INFO] [Thread-617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:58:08.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:58:09.242 [DEBUG] [Thread-617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:58:09.243 [DEBUG] [Thread-617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:58:09.243 [DEBUG] [Thread-617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:58:09.283 [DEBUG] [Thread-617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:58:09.283 [DEBUG] [Thread-617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:58:09.286 [DEBUG] [Thread-617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:58:09.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:58:09.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:58:09.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:58:09.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:58:09.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:58:09.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:58:09.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:58:09.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:58:09.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:58:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.873326 -999.00  +14.40  24.52     77  +10.50 1 1 1 1 1     0    0 3.40 -23.83 ZNESW 21.4 24.5 159.8 34.5 15.2 -20.5 15.0 -20.2 14.8 -18.9 15.2 -19.8
2025-12-24T22:58:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:58:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:58:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.873326
2025-12-24T22:58:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:58:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:58:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:58:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:58:09.311 [DEBUG] [Thread-617] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:58:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:58:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:57:38', tmtdew=4.65, humidity=73.46, cloud=0.0, wind=29.78, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:57:38', seeing=1.6, atlas_timestamp='2025-12-24T20:57:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:54:00')
2025-12-24T22:58:09.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:58:09.412 [DEBUG] [Thread-620] [transport.py] [_log()] starting thread (client mode): 0xb9578ca0
2025-12-24T22:58:09.412 [DEBUG] [Thread-620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:58:09.426 [DEBUG] [Thread-620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:58:09.427 [INFO] [Thread-620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:58:09.434 [DEBUG] [Thread-620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:58:09.434 [DEBUG] [Thread-620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:58:09.434 [DEBUG] [Thread-620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:58:09.434 [DEBUG] [Thread-620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:58:09.434 [DEBUG] [Thread-620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:58:09.434 [DEBUG] [Thread-620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] client lang: <none>
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] server lang: <none>
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] kex follows: False
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] Compression: none
2025-12-24T22:58:09.435 [DEBUG] [Thread-620] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:58:09.494 [DEBUG] [Thread-620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:58:09.494 [DEBUG] [Thread-620] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:58:09.495 [DEBUG] [Thread-620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:58:09.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:58:09.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:58:09.550 [DEBUG] [Thread-620] [transport.py] [_log()] userauth is OK
2025-12-24T22:58:09.551 [DEBUG] [Thread-620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:58:09.551 [DEBUG] [Thread-620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:58:09.551 [DEBUG] [Thread-620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:58:09.551 [DEBUG] [Thread-620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:58:09.569 [INFO] [Thread-620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:58:09.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:58:09.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:58:10.378 [DEBUG] [Thread-620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:58:10.378 [DEBUG] [Thread-620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:58:10.426 [DEBUG] [Thread-620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:58:10.426 [DEBUG] [Thread-620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:58:10.436 [DEBUG] [Thread-620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:58:10.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:58:10.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:58: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') -> 00000000
2025-12-24T22:58:10.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:58:10.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:58:10.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:58:10.473 [DEBUG] [Thread-620] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:58:14.073 [DEBUG] [Thread-622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:58:21.429 [DEBUG] [Thread-623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:58:36.483 [DEBUG] [Thread-624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:58:40.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:58:40.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:58:40.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:58:41.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 58, 10), 4.66, 73.41, 0.0, 28.65, 14.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:58:41.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:58:10
2025-12-24T22:58:41.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:58:41.445 [DEBUG] [Thread-625] [transport.py] [_log()] starting thread (client mode): 0xb9590610
2025-12-24T22:58:41.445 [DEBUG] [Thread-625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:58:41.460 [DEBUG] [Thread-625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:58:41.460 [INFO] [Thread-625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:58:41.463 [DEBUG] [Thread-625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] client lang: <none>
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] server lang: <none>
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] kex follows: False
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] Compression: none
2025-12-24T22:58:41.464 [DEBUG] [Thread-625] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:58:41.479 [DEBUG] [Thread-625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:58:41.479 [DEBUG] [Thread-625] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:58:41.479 [DEBUG] [Thread-625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:58:41.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:58:41.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:58:41.480 [DEBUG] [Thread-625] [transport.py] [_log()] userauth is OK
2025-12-24T22:58:41.480 [DEBUG] [Thread-625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:58:41.480 [DEBUG] [Thread-625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:58:41.480 [DEBUG] [Thread-625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:58:41.480 [DEBUG] [Thread-625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:58:41.489 [INFO] [Thread-625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:58:41.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:58:42.254 [DEBUG] [Thread-625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:58:42.254 [DEBUG] [Thread-625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:58:42.255 [DEBUG] [Thread-625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:58:42.295 [DEBUG] [Thread-625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:58:42.295 [DEBUG] [Thread-625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:58:42.298 [DEBUG] [Thread-625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:58:42.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:58:42.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:58:42.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:58:42.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:58:42.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:58:42.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:58:42.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:58:42.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:58:42.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:58:42.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.873673 -999.00  +14.40  28.41     77  +10.60 1 1 1 1 1     0    0 3.24 -26.79 ZNESW 22.7 28.4 164.8 39.3 15.2 -20.6 15.0 -20.2 14.8 -19.0 15.2 -19.8
2025-12-24T22:58:42.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:58:42.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:58:42.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.873673
2025-12-24T22:58:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:58:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:58:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:58:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:58:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:58:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:58:10', tmtdew=4.66, humidity=73.41, cloud=0.0, wind=28.65, temperature=14.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:58:10', seeing=1.76, atlas_timestamp='2025-12-24T20:58:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:57:00')
2025-12-24T22:58:42.322 [DEBUG] [Thread-625] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:58:42.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:58:42.422 [DEBUG] [Thread-628] [transport.py] [_log()] starting thread (client mode): 0xb9590910
2025-12-24T22:58:42.423 [DEBUG] [Thread-628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:58:42.438 [DEBUG] [Thread-628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:58:42.438 [INFO] [Thread-628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:58:42.446 [DEBUG] [Thread-628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:58:42.446 [DEBUG] [Thread-628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:58:42.446 [DEBUG] [Thread-628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] client lang: <none>
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] server lang: <none>
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] kex follows: False
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:58:42.447 [DEBUG] [Thread-628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:58:42.448 [DEBUG] [Thread-628] [transport.py] [_log()] Compression: none
2025-12-24T22:58:42.448 [DEBUG] [Thread-628] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:58:42.506 [DEBUG] [Thread-628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:58:42.506 [DEBUG] [Thread-628] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:58:42.507 [DEBUG] [Thread-628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:58:42.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:58:42.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:58:42.561 [DEBUG] [Thread-628] [transport.py] [_log()] userauth is OK
2025-12-24T22:58:42.562 [DEBUG] [Thread-628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:58:42.562 [DEBUG] [Thread-628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:58:42.562 [DEBUG] [Thread-628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:58:42.562 [DEBUG] [Thread-628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:58:42.582 [INFO] [Thread-628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:58:42.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:58:42.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:58:43.386 [DEBUG] [Thread-628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:58:43.386 [DEBUG] [Thread-628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:58:43.433 [DEBUG] [Thread-628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:58:43.433 [DEBUG] [Thread-628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:58:43.441 [DEBUG] [Thread-628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:58:43.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:58:43.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')
2025-12-24T22:58:43.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
2025-12-24T22:58:43.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:58:43.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:58:43.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:58:43.472 [DEBUG] [Thread-628] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:58:51.526 [DEBUG] [Thread-630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:58:59.338 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:58:59.339 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:59:06.598 [DEBUG] [Thread-631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:59:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:59:13.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:59:13.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:59:14.147 [DEBUG] [Thread-632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:59:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 58, 42), 4.65, 73.43, 0.0, 27.61, 14.45, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:59:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:58:42
2025-12-24T22:59:14.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:59:14.481 [DEBUG] [Thread-633] [transport.py] [_log()] starting thread (client mode): 0xbbfcd000
2025-12-24T22:59:14.481 [DEBUG] [Thread-633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:59:14.503 [DEBUG] [Thread-633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:59:14.503 [INFO] [Thread-633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:59:14.506 [DEBUG] [Thread-633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:59:14.506 [DEBUG] [Thread-633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:59:14.506 [DEBUG] [Thread-633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:59:14.506 [DEBUG] [Thread-633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] client lang: <none>
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] server lang: <none>
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] kex follows: False
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:59:14.507 [DEBUG] [Thread-633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:59:14.508 [DEBUG] [Thread-633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:59:14.508 [DEBUG] [Thread-633] [transport.py] [_log()] Compression: none
2025-12-24T22:59:14.508 [DEBUG] [Thread-633] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:59:14.526 [DEBUG] [Thread-633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:59:14.527 [DEBUG] [Thread-633] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:59:14.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:59:14.528 [DEBUG] [Thread-633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:59:14.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:59:14.530 [DEBUG] [Thread-633] [transport.py] [_log()] userauth is OK
2025-12-24T22:59:14.530 [DEBUG] [Thread-633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:59:14.530 [DEBUG] [Thread-633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:59:14.530 [DEBUG] [Thread-633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:59:14.530 [DEBUG] [Thread-633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:59:14.567 [INFO] [Thread-633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:59:14.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:59:15.232 [DEBUG] [Thread-633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:59:15.232 [DEBUG] [Thread-633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:59:15.232 [DEBUG] [Thread-633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:59:15.273 [DEBUG] [Thread-633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:59:15.273 [DEBUG] [Thread-633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:59:15.275 [DEBUG] [Thread-633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:59:15.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:59:15.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:59:15.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:59:15.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:59:15.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:59:15.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:59:15.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:59:15.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:59:15.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:59:15.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.874020 -999.00  +14.40  20.69     77  +10.60 1 1 1 1 1     0    0 3.30 -27.87 ZNESW 21.0 20.7 155.5 33.0 15.2 -20.6 15.0 -20.1 14.8 -18.9 15.2 -19.8
2025-12-24T22:59:15.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:59:15.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:59:15.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.874020
2025-12-24T22:59:15.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:59:15.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:59:15.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:59:15.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:59:15.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:59:15.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:58:42', tmtdew=4.65, humidity=73.43, cloud=0.0, wind=27.61, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:58:43', seeing=1.31, atlas_timestamp='2025-12-24T20:58:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:57:00')
2025-12-24T22:59:15.295 [DEBUG] [Thread-633] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:59:15.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:59:15.386 [DEBUG] [Thread-636] [transport.py] [_log()] starting thread (client mode): 0xb9591d50
2025-12-24T22:59:15.386 [DEBUG] [Thread-636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:59:15.400 [DEBUG] [Thread-636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:59:15.400 [INFO] [Thread-636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:59:15.407 [DEBUG] [Thread-636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:59:15.407 [DEBUG] [Thread-636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:59:15.407 [DEBUG] [Thread-636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:59:15.407 [DEBUG] [Thread-636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:59:15.407 [DEBUG] [Thread-636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:59:15.407 [DEBUG] [Thread-636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:59:15.407 [DEBUG] [Thread-636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] client lang: <none>
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] server lang: <none>
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] kex follows: False
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] Compression: none
2025-12-24T22:59:15.408 [DEBUG] [Thread-636] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:59:15.464 [DEBUG] [Thread-636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:59:15.464 [DEBUG] [Thread-636] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:59:15.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:59:15.464 [DEBUG] [Thread-636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:59:15.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:59:15.521 [DEBUG] [Thread-636] [transport.py] [_log()] userauth is OK
2025-12-24T22:59:15.521 [DEBUG] [Thread-636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:59:15.521 [DEBUG] [Thread-636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:59:15.521 [DEBUG] [Thread-636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:59:15.521 [DEBUG] [Thread-636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:59:15.536 [INFO] [Thread-636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:59:15.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:59:15.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:59:16.333 [DEBUG] [Thread-636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:59:16.333 [DEBUG] [Thread-636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:59:16.381 [DEBUG] [Thread-636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:59:16.381 [DEBUG] [Thread-636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:59:16.389 [DEBUG] [Thread-636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:59:16.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:59:16.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:59:16.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:59:16.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:59:16.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:59:16.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:59:16.421 [DEBUG] [Thread-636] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:59:21.641 [DEBUG] [Thread-638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:59:36.709 [DEBUG] [Thread-639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:59:46.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T22:59:46.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T22:59:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T22:59:47.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 59, 14), 4.65, 73.43, 0.0, 27.9, 14.45, 0, 0, 0, 2, 0, 0),)
2025-12-24T22:59:47.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:59:14
2025-12-24T22:59:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T22:59:47.446 [DEBUG] [Thread-640] [transport.py] [_log()] starting thread (client mode): 0xb9593e80
2025-12-24T22:59:47.446 [DEBUG] [Thread-640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:59:47.467 [DEBUG] [Thread-640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T22:59:47.467 [INFO] [Thread-640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] client lang: <none>
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] server lang: <none>
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] kex follows: False
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:59:47.470 [DEBUG] [Thread-640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:59:47.471 [DEBUG] [Thread-640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:59:47.471 [DEBUG] [Thread-640] [transport.py] [_log()] Compression: none
2025-12-24T22:59:47.471 [DEBUG] [Thread-640] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:59:47.485 [DEBUG] [Thread-640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:59:47.485 [DEBUG] [Thread-640] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:59:47.485 [DEBUG] [Thread-640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T22:59:47.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T22:59:47.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:59:47.486 [DEBUG] [Thread-640] [transport.py] [_log()] userauth is OK
2025-12-24T22:59:47.486 [DEBUG] [Thread-640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:59:47.486 [DEBUG] [Thread-640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:59:47.486 [DEBUG] [Thread-640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T22:59:47.486 [DEBUG] [Thread-640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:59:47.507 [INFO] [Thread-640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:59:47.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:59:48.267 [DEBUG] [Thread-640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:59:48.267 [DEBUG] [Thread-640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:59:48.267 [DEBUG] [Thread-640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T22:59:48.308 [DEBUG] [Thread-640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:59:48.308 [DEBUG] [Thread-640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:59:48.309 [DEBUG] [Thread-640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:59:48.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:59:48.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T22:59:48.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T22:59:48.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T22:59:48.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:59:48.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T22:59:48.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.874368 -999.00  +14.40  26.19     77  +10.50 1 1 1 1 1     0    0 3.21 -28.62 ZNESW 19.7 26.2 159.8 33.7 15.2 -20.5 15.0 -20.2 14.8 -18.9 15.2 -19.8
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.874368
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T22:59:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:59:14', tmtdew=4.65, humidity=73.43, cloud=0.0, wind=27.9, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T22:59:15', seeing=1.36, atlas_timestamp='2025-12-24T20:59:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:57:00')
2025-12-24T22:59:48.342 [DEBUG] [Thread-640] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:59:48.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T22:59:48.431 [DEBUG] [Thread-643] [transport.py] [_log()] starting thread (client mode): 0xb9579e70
2025-12-24T22:59:48.431 [DEBUG] [Thread-643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T22:59:48.449 [DEBUG] [Thread-643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T22:59:48.449 [INFO] [Thread-643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] client lang: <none>
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] server lang: <none>
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] kex follows: False
2025-12-24T22:59:48.456 [DEBUG] [Thread-643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T22:59:48.457 [DEBUG] [Thread-643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T22:59:48.457 [DEBUG] [Thread-643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T22:59:48.457 [DEBUG] [Thread-643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T22:59:48.457 [DEBUG] [Thread-643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T22:59:48.457 [DEBUG] [Thread-643] [transport.py] [_log()] Compression: none
2025-12-24T22:59:48.457 [DEBUG] [Thread-643] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T22:59:48.516 [DEBUG] [Thread-643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T22:59:48.517 [DEBUG] [Thread-643] [transport.py] [_log()] Switch to new keys ...
2025-12-24T22:59:48.517 [DEBUG] [Thread-643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T22:59:48.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T22:59:48.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T22:59:48.573 [DEBUG] [Thread-643] [transport.py] [_log()] userauth is OK
2025-12-24T22:59:48.573 [DEBUG] [Thread-643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T22:59:48.573 [DEBUG] [Thread-643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T22:59:48.573 [DEBUG] [Thread-643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T22:59:48.573 [DEBUG] [Thread-643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T22:59:48.588 [INFO] [Thread-643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T22:59:48.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T22:59:48.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T22:59:49.423 [DEBUG] [Thread-643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T22:59:49.424 [DEBUG] [Thread-643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T22:59:49.472 [DEBUG] [Thread-643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T22:59:49.472 [DEBUG] [Thread-643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T22:59:49.481 [DEBUG] [Thread-643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T22:59:49.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T22:59:49.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T22:59:49.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T22:59:49.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T22:59:49.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T22:59:49.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T22:59:49.517 [DEBUG] [Thread-643] [transport.py] [_log()] EOF in transport thread
2025-12-24T22:59:51.745 [DEBUG] [Thread-645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:59:59.542 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T22:59:59.543 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:00:06.820 [DEBUG] [Thread-646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:00:14.222 [DEBUG] [Thread-647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:00:19.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:00:19.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:00: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
2025-12-24T23:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 22, 59, 46), 4.65, 73.44, 0.0, 27.37, 14.45, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 22:59:46
2025-12-24T23:00:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:00:20.625 [DEBUG] [Thread-648] [transport.py] [_log()] starting thread (client mode): 0xb9592b00
2025-12-24T23:00:20.625 [DEBUG] [Thread-648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:00:20.645 [DEBUG] [Thread-648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:00:20.645 [INFO] [Thread-648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] client lang: <none>
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] server lang: <none>
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] kex follows: False
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] Compression: none
2025-12-24T23:00:20.648 [DEBUG] [Thread-648] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:00:20.664 [DEBUG] [Thread-648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:00:20.664 [DEBUG] [Thread-648] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:00:20.664 [DEBUG] [Thread-648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:00:20.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:00:20.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:00:20.665 [DEBUG] [Thread-648] [transport.py] [_log()] userauth is OK
2025-12-24T23:00:20.665 [DEBUG] [Thread-648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:00:20.665 [DEBUG] [Thread-648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:00:20.665 [DEBUG] [Thread-648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:00:20.665 [DEBUG] [Thread-648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:00:20.680 [INFO] [Thread-648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:00:20.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:00:21.308 [DEBUG] [Thread-648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:00:21.308 [DEBUG] [Thread-648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:00:21.308 [DEBUG] [Thread-648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:00:21.350 [DEBUG] [Thread-648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:00:21.350 [DEBUG] [Thread-648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:00:21.352 [DEBUG] [Thread-648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:00:21.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:00:21.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:00:21.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:00:21.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:00:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:00:21.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:00:21.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.874714 -999.00  +14.40  20.53     77  +10.50 1 1 1 1 1     0    0 3.25 -27.36 ZNESW 26.7 20.5 160.8 31.8 15.1 -20.6 14.9 -20.2 14.8 -18.9 15.1 -19.8
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.874714
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:00:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T22:59:46', tmtdew=4.65, humidity=73.44, cloud=0.0, wind=27.37, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:00:19', seeing=1.32, atlas_timestamp='2025-12-24T20:59:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:57:00')
2025-12-24T23:00:21.371 [DEBUG] [Thread-648] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:00:21.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:00:21.463 [DEBUG] [Thread-651] [transport.py] [_log()] starting thread (client mode): 0xb9592ec0
2025-12-24T23:00:21.463 [DEBUG] [Thread-651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:00:21.482 [DEBUG] [Thread-651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:00:21.482 [INFO] [Thread-651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:00:21.489 [DEBUG] [Thread-651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:00:21.489 [DEBUG] [Thread-651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:00:21.489 [DEBUG] [Thread-651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:00:21.489 [DEBUG] [Thread-651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:00:21.489 [DEBUG] [Thread-651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] client lang: <none>
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] server lang: <none>
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] kex follows: False
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] Compression: none
2025-12-24T23:00:21.490 [DEBUG] [Thread-651] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:00:21.548 [DEBUG] [Thread-651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:00:21.548 [DEBUG] [Thread-651] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:00:21.548 [DEBUG] [Thread-651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:00:21.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:00:21.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:00:21.605 [DEBUG] [Thread-651] [transport.py] [_log()] userauth is OK
2025-12-24T23:00:21.605 [DEBUG] [Thread-651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:00:21.605 [DEBUG] [Thread-651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:00:21.605 [DEBUG] [Thread-651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:00:21.605 [DEBUG] [Thread-651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:00:21.622 [INFO] [Thread-651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:00:21.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:00:21.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:00:21.864 [DEBUG] [Thread-653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:00:22.409 [DEBUG] [Thread-651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:00:22.409 [DEBUG] [Thread-651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:00:22.457 [DEBUG] [Thread-651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:00:22.458 [DEBUG] [Thread-651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:00:22.466 [DEBUG] [Thread-651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:00:22.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:00:22.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')
2025-12-24T23:00:22.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:00:22.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:00:22.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:00:22.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:00:22.498 [DEBUG] [Thread-651] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:00:36.921 [DEBUG] [Thread-654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:00:51.963 [DEBUG] [Thread-655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:00:52.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:00:52.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:00:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:00:53.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 0, 18), 4.65, 73.46, 0.0, 26.8, 14.43, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:00:53.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:00:18
2025-12-24T23:00:53.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:00:53.552 [DEBUG] [Thread-656] [transport.py] [_log()] starting thread (client mode): 0xb9593970
2025-12-24T23:00:53.553 [DEBUG] [Thread-656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:00:53.571 [DEBUG] [Thread-656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:00:53.572 [INFO] [Thread-656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:00:53.574 [DEBUG] [Thread-656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:00:53.574 [DEBUG] [Thread-656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:00:53.574 [DEBUG] [Thread-656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:00:53.574 [DEBUG] [Thread-656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:00:53.574 [DEBUG] [Thread-656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] client lang: <none>
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] server lang: <none>
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] kex follows: False
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:00:53.575 [DEBUG] [Thread-656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:00:53.576 [DEBUG] [Thread-656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:00:53.576 [DEBUG] [Thread-656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:00:53.576 [DEBUG] [Thread-656] [transport.py] [_log()] Compression: none
2025-12-24T23:00:53.576 [DEBUG] [Thread-656] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:00:53.593 [DEBUG] [Thread-656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:00:53.594 [DEBUG] [Thread-656] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:00:53.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:00:53.595 [DEBUG] [Thread-656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:00:53.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:00:53.597 [DEBUG] [Thread-656] [transport.py] [_log()] userauth is OK
2025-12-24T23:00:53.597 [DEBUG] [Thread-656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:00:53.597 [DEBUG] [Thread-656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:00:53.597 [DEBUG] [Thread-656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:00:53.598 [DEBUG] [Thread-656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:00:53.620 [INFO] [Thread-656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:00:53.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:00:54.452 [DEBUG] [Thread-656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:00:54.452 [DEBUG] [Thread-656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:00:54.452 [DEBUG] [Thread-656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:00:54.493 [DEBUG] [Thread-656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:00:54.493 [DEBUG] [Thread-656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:00:54.496 [DEBUG] [Thread-656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:00:54.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:00:54.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:00:54.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:00:54.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:00:54.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:00:54.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:00:54.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.875062 -999.00  +14.40  21.38     77  +10.50 1 1 1 1 1     0    0 3.23 -28.15 ZNESW 20.7 21.4 166.0 29.6 15.1 -20.6 14.9 -20.2 14.8 -18.9 15.1 -19.8
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.875062
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:00:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:00:18', tmtdew=4.65, humidity=73.46, cloud=0.0, wind=26.8, temperature=14.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:00:51', seeing=1.36, atlas_timestamp='2025-12-24T21:00:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.0702499999999997, 0.13275000000000148, 0.17375000000000007, 0.15449999999999875, 0.1404999999999994, 0.15575000000000117, 0.13400000000000034, 0.09275000000000055, 0.07349999999999923, 0.13950000000000173, 0.17575000000000074, 0.11100000000000065, 0.1869999999999994, 0.20074999999999932, 0.10699999999999932, 0.08300000000000018, 0.14474999999999838, 0.15600000000000058, 0.12299999999999933, 0.062249999999998806, 0.17999999999999794, 0.13374999999999915, 0.1307500000000008, 0.12274999999999991, 0.18099999999999916, 0.17950000000000088, 0.12175000000000047, 0.19449999999999967, 0.2394999999999996, 0.2085000000000008, 0.15700000000000003, 0.09550000000000125, 0.22774999999999856], zp_timestamp='2025-12-24T20:57:00')
2025-12-24T23:00:54.514 [DEBUG] [Thread-656] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:00:54.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:00:54.607 [DEBUG] [Thread-659] [transport.py] [_log()] starting thread (client mode): 0xb9591bd0
2025-12-24T23:00:54.607 [DEBUG] [Thread-659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:00:54.622 [DEBUG] [Thread-659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:00:54.622 [INFO] [Thread-659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] client lang: <none>
2025-12-24T23:00:54.630 [DEBUG] [Thread-659] [transport.py] [_log()] server lang: <none>
2025-12-24T23:00:54.631 [DEBUG] [Thread-659] [transport.py] [_log()] kex follows: False
2025-12-24T23:00:54.631 [DEBUG] [Thread-659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:00:54.631 [DEBUG] [Thread-659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:00:54.631 [DEBUG] [Thread-659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:00:54.631 [DEBUG] [Thread-659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:00:54.631 [DEBUG] [Thread-659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:00:54.631 [DEBUG] [Thread-659] [transport.py] [_log()] Compression: none
2025-12-24T23:00:54.631 [DEBUG] [Thread-659] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:00:54.689 [DEBUG] [Thread-659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:00:54.690 [DEBUG] [Thread-659] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:00:54.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:00:54.691 [DEBUG] [Thread-659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:00:54.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:00:54.746 [DEBUG] [Thread-659] [transport.py] [_log()] userauth is OK
2025-12-24T23:00:54.746 [DEBUG] [Thread-659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:00:54.746 [DEBUG] [Thread-659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:00:54.746 [DEBUG] [Thread-659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:00:54.746 [DEBUG] [Thread-659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:00:54.766 [INFO] [Thread-659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:00:54.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:00:54.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:00:55.562 [DEBUG] [Thread-659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:00:55.562 [DEBUG] [Thread-659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:00:55.610 [DEBUG] [Thread-659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:00:55.611 [DEBUG] [Thread-659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:00:55.620 [DEBUG] [Thread-659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:00:55.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:00:55.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:00:55.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:00:55.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:00:55.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:00:55.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:00:55.653 [DEBUG] [Thread-659] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:00:59.746 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:00:59.747 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:01:06.997 [DEBUG] [Thread-661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:01:14.295 [DEBUG] [Thread-662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:01:22.067 [DEBUG] [Thread-663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:01:25.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:01:25.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:01:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:01:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 1, 22), 4.63, 73.53, 0.0, 32.62, 14.42, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:01:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:01:22
2025-12-24T23:01:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:01:26.657 [DEBUG] [Thread-664] [transport.py] [_log()] starting thread (client mode): 0xb9578610
2025-12-24T23:01:26.657 [DEBUG] [Thread-664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:01:26.677 [DEBUG] [Thread-664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:01:26.677 [INFO] [Thread-664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:01:26.680 [DEBUG] [Thread-664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:01:26.681 [DEBUG] [Thread-664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:01:26.681 [DEBUG] [Thread-664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:01:26.681 [DEBUG] [Thread-664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:01:26.681 [DEBUG] [Thread-664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:01:26.681 [DEBUG] [Thread-664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:01:26.681 [DEBUG] [Thread-664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:01:26.681 [DEBUG] [Thread-664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:01:26.681 [DEBUG] [Thread-664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:01:26.682 [DEBUG] [Thread-664] [transport.py] [_log()] client lang: <none>
2025-12-24T23:01:26.682 [DEBUG] [Thread-664] [transport.py] [_log()] server lang: <none>
2025-12-24T23:01:26.682 [DEBUG] [Thread-664] [transport.py] [_log()] kex follows: False
2025-12-24T23:01:26.682 [DEBUG] [Thread-664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:01:26.682 [DEBUG] [Thread-664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:01:26.682 [DEBUG] [Thread-664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:01:26.682 [DEBUG] [Thread-664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:01:26.682 [DEBUG] [Thread-664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:01:26.683 [DEBUG] [Thread-664] [transport.py] [_log()] Compression: none
2025-12-24T23:01:26.683 [DEBUG] [Thread-664] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:01:26.701 [DEBUG] [Thread-664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:01:26.702 [DEBUG] [Thread-664] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:01:26.702 [DEBUG] [Thread-664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:01:26.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:01:26.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:01:26.704 [DEBUG] [Thread-664] [transport.py] [_log()] userauth is OK
2025-12-24T23:01:26.705 [DEBUG] [Thread-664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:01:26.705 [DEBUG] [Thread-664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:01:26.705 [DEBUG] [Thread-664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:01:26.705 [DEBUG] [Thread-664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:01:26.724 [INFO] [Thread-664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:01:26.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:01:27.306 [DEBUG] [Thread-664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:01:27.306 [DEBUG] [Thread-664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:01:27.306 [DEBUG] [Thread-664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:01:27.347 [DEBUG] [Thread-664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:01:27.347 [DEBUG] [Thread-664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:01:27.350 [DEBUG] [Thread-664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:01:27.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:01:27.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:01:27.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:01:27.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:01:27.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:01:27.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:01:27.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:01:27.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:01:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:01:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.875757 -999.00  +14.30  23.28     78  +10.60 1 1 1 1 1     0    0 3.14 -28.80 ZNESW 25.9 23.3 152.6 31.8 15.1 -20.7 14.9 -20.2 14.8 -19.0 15.1 -19.9
2025-12-24T23:01:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:01:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:01:27.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.875757
2025-12-24T23:01:27.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:01:27.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:01:27.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:01:27.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:01:27.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:01:27.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:01:22', tmtdew=4.63, humidity=73.53, cloud=0.0, wind=32.62, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:01:23', seeing=1.57, atlas_timestamp='2025-12-24T21:01:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:00:00')
2025-12-24T23:01:27.375 [DEBUG] [Thread-664] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:01:27.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:01:27.478 [DEBUG] [Thread-667] [transport.py] [_log()] starting thread (client mode): 0xb9590f40
2025-12-24T23:01:27.478 [DEBUG] [Thread-667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:01:27.491 [DEBUG] [Thread-667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:01:27.491 [INFO] [Thread-667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:01:27.499 [DEBUG] [Thread-667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:01:27.499 [DEBUG] [Thread-667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:01:27.499 [DEBUG] [Thread-667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] client lang: <none>
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] server lang: <none>
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] kex follows: False
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:01:27.500 [DEBUG] [Thread-667] [transport.py] [_log()] Compression: none
2025-12-24T23:01:27.501 [DEBUG] [Thread-667] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:01:27.558 [DEBUG] [Thread-667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:01:27.559 [DEBUG] [Thread-667] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:01:27.559 [DEBUG] [Thread-667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:01:27.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:01:27.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:01:27.618 [DEBUG] [Thread-667] [transport.py] [_log()] userauth is OK
2025-12-24T23:01:27.618 [DEBUG] [Thread-667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:01:27.618 [DEBUG] [Thread-667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:01:27.618 [DEBUG] [Thread-667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:01:27.618 [DEBUG] [Thread-667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:01:27.638 [INFO] [Thread-667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:01:27.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:01:27.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:01:28.466 [DEBUG] [Thread-667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:01:28.466 [DEBUG] [Thread-667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:01:28.514 [DEBUG] [Thread-667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:01:28.514 [DEBUG] [Thread-667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:01:28.523 [DEBUG] [Thread-667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:01:28.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:01:28.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:01:28.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:01:28.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:01:28.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:01:28.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:01:28.560 [DEBUG] [Thread-667] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:01:37.109 [DEBUG] [Thread-669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:01:52.189 [DEBUG] [Thread-670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:01:58.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:01:58.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:01:58.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
2025-12-24T23:01:59.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 1, 55), 4.62, 73.61, 0.0, 36.95, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:01:59.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:01:55
2025-12-24T23:01:59.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:01:59.584 [DEBUG] [Thread-671] [transport.py] [_log()] starting thread (client mode): 0xb957a740
2025-12-24T23:01:59.584 [DEBUG] [Thread-671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:01:59.605 [DEBUG] [Thread-671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:01:59.605 [INFO] [Thread-671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:01:59.608 [DEBUG] [Thread-671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:01:59.608 [DEBUG] [Thread-671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:01:59.608 [DEBUG] [Thread-671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] client lang: <none>
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] server lang: <none>
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] kex follows: False
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] Compression: none
2025-12-24T23:01:59.609 [DEBUG] [Thread-671] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:01:59.627 [DEBUG] [Thread-671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:01:59.628 [DEBUG] [Thread-671] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:01:59.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:01:59.629 [DEBUG] [Thread-671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:01:59.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:01:59.670 [DEBUG] [Thread-671] [transport.py] [_log()] userauth is OK
2025-12-24T23:01:59.670 [DEBUG] [Thread-671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:01:59.670 [DEBUG] [Thread-671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:01:59.670 [DEBUG] [Thread-671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:01:59.670 [DEBUG] [Thread-671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:01:59.709 [INFO] [Thread-671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:01:59.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:01:59.949 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:01:59.950 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:02:00.363 [DEBUG] [Thread-671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:02:00.363 [DEBUG] [Thread-671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:02:00.364 [DEBUG] [Thread-671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:02:00.404 [DEBUG] [Thread-671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:02:00.404 [DEBUG] [Thread-671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:02:00.407 [DEBUG] [Thread-671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:02:00.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:02:00.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:02:00.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:02:00.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:02:00.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:02:00.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:02:00.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:02:00.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:02:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:02:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.876104 -999.00  +14.30  24.98     78  +10.50 1 1 1 1 1     0    0 3.23 -29.35 ZNESW 21.3 25.0 157.8 34.3 15.1 -20.6 14.9 -20.1 14.7 -18.9 15.1 -19.9
2025-12-24T23:02:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:02:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:02:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.876104
2025-12-24T23:02:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:02:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:02:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:02:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:02:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:02:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:01:55', tmtdew=4.62, humidity=73.61, cloud=0.0, wind=36.95, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:01:55', seeing=1.19, atlas_timestamp='2025-12-24T21:01:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:00:00')
2025-12-24T23:02:00.433 [DEBUG] [Thread-671] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:02:00.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:02:00.534 [DEBUG] [Thread-674] [transport.py] [_log()] starting thread (client mode): 0xb95479a0
2025-12-24T23:02:00.534 [DEBUG] [Thread-674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:02:00.549 [DEBUG] [Thread-674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:02:00.549 [INFO] [Thread-674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:02:00.559 [DEBUG] [Thread-674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] client lang: <none>
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] server lang: <none>
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] kex follows: False
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:02:00.560 [DEBUG] [Thread-674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:02:00.561 [DEBUG] [Thread-674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:02:00.561 [DEBUG] [Thread-674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:02:00.561 [DEBUG] [Thread-674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:02:00.561 [DEBUG] [Thread-674] [transport.py] [_log()] Compression: none
2025-12-24T23:02:00.561 [DEBUG] [Thread-674] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:02:00.618 [DEBUG] [Thread-674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:02:00.618 [DEBUG] [Thread-674] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:02:00.619 [DEBUG] [Thread-674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:02:00.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:02:00.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:02:00.673 [DEBUG] [Thread-674] [transport.py] [_log()] userauth is OK
2025-12-24T23:02:00.674 [DEBUG] [Thread-674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:02:00.674 [DEBUG] [Thread-674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:02:00.674 [DEBUG] [Thread-674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:02:00.674 [DEBUG] [Thread-674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:02:00.693 [INFO] [Thread-674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:02:00.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:02:00.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:02:01.468 [DEBUG] [Thread-674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:02:01.468 [DEBUG] [Thread-674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:02:01.516 [DEBUG] [Thread-674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:02:01.517 [DEBUG] [Thread-674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:02:01.526 [DEBUG] [Thread-674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:02:01.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:02:01.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')
2025-12-24T23:02: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') -> 00000000
2025-12-24T23:02:01.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:02:01.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:02:01.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:02:01.562 [DEBUG] [Thread-674] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:02:07.231 [DEBUG] [Thread-676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:02:14.360 [DEBUG] [Thread-677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:02:22.299 [DEBUG] [Thread-678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:02:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:02:31.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:02:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:02:32.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 2, 27), 4.61, 73.64, 0.0, 33.45, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:02:32.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:02:27
2025-12-24T23:02:32.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:02:32.581 [DEBUG] [Thread-679] [transport.py] [_log()] starting thread (client mode): 0xb95923e0
2025-12-24T23:02:32.581 [DEBUG] [Thread-679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:02:32.602 [DEBUG] [Thread-679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:02:32.602 [INFO] [Thread-679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:02:32.606 [DEBUG] [Thread-679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:02:32.606 [DEBUG] [Thread-679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:02:32.606 [DEBUG] [Thread-679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:02:32.606 [DEBUG] [Thread-679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] client lang: <none>
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] server lang: <none>
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] kex follows: False
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] Compression: none
2025-12-24T23:02:32.607 [DEBUG] [Thread-679] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:02:32.626 [DEBUG] [Thread-679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:02:32.627 [DEBUG] [Thread-679] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:02:32.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:02:32.628 [DEBUG] [Thread-679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:02:32.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:02:32.630 [DEBUG] [Thread-679] [transport.py] [_log()] userauth is OK
2025-12-24T23:02:32.631 [DEBUG] [Thread-679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:02:32.631 [DEBUG] [Thread-679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:02:32.631 [DEBUG] [Thread-679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:02:32.631 [DEBUG] [Thread-679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:02:32.666 [INFO] [Thread-679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:02:32.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:02:33.302 [DEBUG] [Thread-679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:02:33.302 [DEBUG] [Thread-679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:02:33.302 [DEBUG] [Thread-679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:02:33.343 [DEBUG] [Thread-679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:02:33.343 [DEBUG] [Thread-679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:02:33.347 [DEBUG] [Thread-679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:02:33.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:02:33.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:02:33.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:02:33.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:02:33.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:02:33.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:02:33.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:02:33.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:02:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:02:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.876451 -999.00  +14.30  18.83     78  +10.60 1 1 1 1 1     0    0 3.09 -31.88 ZNESW 21.3 18.8 160.3 30.8 15.0 -20.6 14.9 -20.1 14.8 -18.8 15.1 -19.9
2025-12-24T23:02:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:02:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:02:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.876451
2025-12-24T23:02:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:02:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:02:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:02:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:02:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:02:33.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:02:27', tmtdew=4.61, humidity=73.64, cloud=0.0, wind=33.45, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:02:27', seeing=1.18, atlas_timestamp='2025-12-24T21:02:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:00:00')
2025-12-24T23:02:33.376 [DEBUG] [Thread-679] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:02:33.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:02:33.478 [DEBUG] [Thread-682] [transport.py] [_log()] starting thread (client mode): 0xb9592fb0
2025-12-24T23:02:33.479 [DEBUG] [Thread-682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:02:33.493 [DEBUG] [Thread-682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:02:33.494 [INFO] [Thread-682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:02:33.501 [DEBUG] [Thread-682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:02:33.501 [DEBUG] [Thread-682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:02:33.501 [DEBUG] [Thread-682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] client lang: <none>
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] server lang: <none>
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] kex follows: False
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:02:33.502 [DEBUG] [Thread-682] [transport.py] [_log()] Compression: none
2025-12-24T23:02:33.503 [DEBUG] [Thread-682] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:02:33.562 [DEBUG] [Thread-682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:02:33.562 [DEBUG] [Thread-682] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:02:33.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:02:33.564 [DEBUG] [Thread-682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:02:33.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:02:33.618 [DEBUG] [Thread-682] [transport.py] [_log()] userauth is OK
2025-12-24T23:02:33.618 [DEBUG] [Thread-682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:02:33.618 [DEBUG] [Thread-682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:02:33.618 [DEBUG] [Thread-682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:02:33.618 [DEBUG] [Thread-682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:02:33.638 [INFO] [Thread-682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:02:33.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:02:33.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:02:34.474 [DEBUG] [Thread-682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:02:34.475 [DEBUG] [Thread-682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:02:34.524 [DEBUG] [Thread-682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:02:34.524 [DEBUG] [Thread-682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:02:34.533 [DEBUG] [Thread-682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:02:34.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:02:34.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')
2025-12-24T23:02:34.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:02:34.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:02:34.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:02:34.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:02:34.570 [DEBUG] [Thread-682] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:02:37.338 [DEBUG] [Thread-684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:02:52.406 [DEBUG] [Thread-685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:03:00.149 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:03:00.150 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:03:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:03:04.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:03:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:03:05.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 2, 59), 4.54, 74.22, 0.0, 29.54, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:03:05.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:02:59
2025-12-24T23:03:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:03:05.600 [DEBUG] [Thread-686] [transport.py] [_log()] starting thread (client mode): 0xb95478e0
2025-12-24T23:03:05.600 [DEBUG] [Thread-686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:03:05.620 [DEBUG] [Thread-686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:03:05.620 [INFO] [Thread-686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:03:05.623 [DEBUG] [Thread-686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:03:05.623 [DEBUG] [Thread-686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:03:05.623 [DEBUG] [Thread-686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:03:05.623 [DEBUG] [Thread-686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:03:05.623 [DEBUG] [Thread-686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] client lang: <none>
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] server lang: <none>
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] kex follows: False
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] Compression: none
2025-12-24T23:03:05.624 [DEBUG] [Thread-686] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:03:05.643 [DEBUG] [Thread-686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:03:05.643 [DEBUG] [Thread-686] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:03:05.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:03:05.644 [DEBUG] [Thread-686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:03:05.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:03:05.685 [DEBUG] [Thread-686] [transport.py] [_log()] userauth is OK
2025-12-24T23:03:05.685 [DEBUG] [Thread-686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:03:05.686 [DEBUG] [Thread-686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:03:05.686 [DEBUG] [Thread-686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:03:05.686 [DEBUG] [Thread-686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:03:05.716 [INFO] [Thread-686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:03:05.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:03:06.373 [DEBUG] [Thread-686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:03:06.373 [DEBUG] [Thread-686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:03:06.374 [DEBUG] [Thread-686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:03:06.415 [DEBUG] [Thread-686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:03:06.415 [DEBUG] [Thread-686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:03:06.418 [DEBUG] [Thread-686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:03:06.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:03:06.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:03:06.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:03:06.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:03:06.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:03:06.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:03:06.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:03:06.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:03:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:03:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.876798 -999.00  +14.30  26.56     78  +10.60 1 1 1 1 1     0    0 3.03 -30.24 ZNESW 26.9 26.6 152.6 38.7 15.1 -20.5 14.9 -20.1 14.8 -19.0 15.1 -20.0
2025-12-24T23:03:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:03:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:03:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.876798
2025-12-24T23:03:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:03:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:03:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:03:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:03:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:03:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:02:59', tmtdew=4.54, humidity=74.22, cloud=0.0, wind=29.54, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:02:59', seeing=1.18, atlas_timestamp='2025-12-24T21:02:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:00:00')
2025-12-24T23:03:06.442 [DEBUG] [Thread-686] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:03:06.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:03:06.542 [DEBUG] [Thread-689] [transport.py] [_log()] starting thread (client mode): 0xb9546860
2025-12-24T23:03:06.542 [DEBUG] [Thread-689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:03:06.557 [DEBUG] [Thread-689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:03:06.557 [INFO] [Thread-689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:03:06.565 [DEBUG] [Thread-689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:03:06.565 [DEBUG] [Thread-689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:03:06.565 [DEBUG] [Thread-689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:03:06.565 [DEBUG] [Thread-689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:03:06.565 [DEBUG] [Thread-689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:03:06.565 [DEBUG] [Thread-689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] client lang: <none>
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] server lang: <none>
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] kex follows: False
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:03:06.566 [DEBUG] [Thread-689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:03:06.567 [DEBUG] [Thread-689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:03:06.567 [DEBUG] [Thread-689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:03:06.567 [DEBUG] [Thread-689] [transport.py] [_log()] Compression: none
2025-12-24T23:03:06.567 [DEBUG] [Thread-689] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:03:06.624 [DEBUG] [Thread-689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:03:06.624 [DEBUG] [Thread-689] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:03:06.624 [DEBUG] [Thread-689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:03:06.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:03:06.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:03:06.681 [DEBUG] [Thread-689] [transport.py] [_log()] userauth is OK
2025-12-24T23:03:06.681 [DEBUG] [Thread-689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:03:06.681 [DEBUG] [Thread-689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:03:06.681 [DEBUG] [Thread-689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:03:06.682 [DEBUG] [Thread-689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:03:06.703 [INFO] [Thread-689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:03:06.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:03:06.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:03:07.445 [DEBUG] [Thread-691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:03:07.485 [DEBUG] [Thread-689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:03:07.485 [DEBUG] [Thread-689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:03:07.533 [DEBUG] [Thread-689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:03:07.533 [DEBUG] [Thread-689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:03:07.542 [DEBUG] [Thread-689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:03:07.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:03:07.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:03:07.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:03:07.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:03:07.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:03:07.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:03:07.576 [DEBUG] [Thread-689] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:03:14.424 [DEBUG] [Thread-692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:03:22.499 [DEBUG] [Thread-693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:03:37.540 [DEBUG] [Thread-694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:03:37.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:03:37.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:03:37.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:03:38.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 3, 31), 4.54, 74.21, 0.0, 30.75, 14.35, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:03:38.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:03:31
2025-12-24T23:03:38.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:03:38.604 [DEBUG] [Thread-695] [transport.py] [_log()] starting thread (client mode): 0xb955a110
2025-12-24T23:03:38.604 [DEBUG] [Thread-695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:03:38.626 [DEBUG] [Thread-695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:03:38.626 [INFO] [Thread-695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] client lang: <none>
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] server lang: <none>
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] kex follows: False
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] Compression: none
2025-12-24T23:03:38.629 [DEBUG] [Thread-695] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:03:38.644 [DEBUG] [Thread-695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:03:38.644 [DEBUG] [Thread-695] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:03:38.644 [DEBUG] [Thread-695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:03:38.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:03:38.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:03:38.645 [DEBUG] [Thread-695] [transport.py] [_log()] userauth is OK
2025-12-24T23:03:38.645 [DEBUG] [Thread-695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:03:38.645 [DEBUG] [Thread-695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:03:38.645 [DEBUG] [Thread-695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:03:38.645 [DEBUG] [Thread-695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:03:38.654 [INFO] [Thread-695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:03:38.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:03:39.298 [DEBUG] [Thread-695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:03:39.298 [DEBUG] [Thread-695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:03:39.298 [DEBUG] [Thread-695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:03:39.339 [DEBUG] [Thread-695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:03:39.339 [DEBUG] [Thread-695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:03:39.341 [DEBUG] [Thread-695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:03:39.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:03:39.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:03:39.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:03:39.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:03:39.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:03:39.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:03:39.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.877145 -999.00  +14.30  23.16     78  +10.60 1 1 1 1 1     0    0 3.06 -29.82 ZNESW 22.4 23.2 150.8 32.7 15.1 -20.6 14.9 -20.0 14.7 -18.7 15.1 -19.8
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.877145
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:03:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:03:31', tmtdew=4.54, humidity=74.21, cloud=0.0, wind=30.75, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:03:31', seeing=1.12, atlas_timestamp='2025-12-24T21:03:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:00:00')
2025-12-24T23:03:39.360 [DEBUG] [Thread-695] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:03:39.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:03:39.452 [DEBUG] [Thread-698] [transport.py] [_log()] starting thread (client mode): 0xb95449d0
2025-12-24T23:03:39.452 [DEBUG] [Thread-698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:03:39.466 [DEBUG] [Thread-698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:03:39.467 [INFO] [Thread-698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] client lang: <none>
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] server lang: <none>
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] kex follows: False
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] Compression: none
2025-12-24T23:03:39.477 [DEBUG] [Thread-698] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:03:39.532 [DEBUG] [Thread-698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:03:39.532 [DEBUG] [Thread-698] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:03:39.532 [DEBUG] [Thread-698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:03:39.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:03:39.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:03:39.589 [DEBUG] [Thread-698] [transport.py] [_log()] userauth is OK
2025-12-24T23:03:39.589 [DEBUG] [Thread-698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:03:39.589 [DEBUG] [Thread-698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:03:39.589 [DEBUG] [Thread-698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:03:39.589 [DEBUG] [Thread-698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:03:39.604 [INFO] [Thread-698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:03:39.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:03:39.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:03:40.388 [DEBUG] [Thread-698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:03:40.389 [DEBUG] [Thread-698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:03:40.436 [DEBUG] [Thread-698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:03:40.436 [DEBUG] [Thread-698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:03:40.444 [DEBUG] [Thread-698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:03:40.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:03:40.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:03:40.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:03:40.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:03:40.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:03:40.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:03:40.476 [DEBUG] [Thread-698] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:03:52.580 [DEBUG] [Thread-700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:04:00.351 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:04:00.352 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:04:07.644 [DEBUG] [Thread-701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:04:10.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:04:10.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:04:10.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:04:11.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 4, 3), 4.53, 74.27, 0.0, 30.12, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:04:11.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:04:03
2025-12-24T23:04:11.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:04:11.503 [DEBUG] [Thread-702] [transport.py] [_log()] starting thread (client mode): 0xb9559510
2025-12-24T23:04:11.503 [DEBUG] [Thread-702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:04:11.523 [DEBUG] [Thread-702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:04:11.523 [INFO] [Thread-702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:04:11.526 [DEBUG] [Thread-702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:04:11.526 [DEBUG] [Thread-702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:04:11.526 [DEBUG] [Thread-702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:04:11.526 [DEBUG] [Thread-702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:04:11.526 [DEBUG] [Thread-702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:04:11.526 [DEBUG] [Thread-702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:04:11.526 [DEBUG] [Thread-702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] client lang: <none>
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] server lang: <none>
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] kex follows: False
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] Compression: none
2025-12-24T23:04:11.527 [DEBUG] [Thread-702] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:04:11.546 [DEBUG] [Thread-702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:04:11.547 [DEBUG] [Thread-702] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:04:11.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:04:11.548 [DEBUG] [Thread-702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:04:11.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:04:11.550 [DEBUG] [Thread-702] [transport.py] [_log()] userauth is OK
2025-12-24T23:04:11.550 [DEBUG] [Thread-702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:04:11.550 [DEBUG] [Thread-702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:04:11.550 [DEBUG] [Thread-702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:04:11.550 [DEBUG] [Thread-702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:04:11.574 [INFO] [Thread-702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:04:11.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:04:12.247 [DEBUG] [Thread-702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:04:12.248 [DEBUG] [Thread-702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:04:12.248 [DEBUG] [Thread-702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:04:12.289 [DEBUG] [Thread-702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:04:12.289 [DEBUG] [Thread-702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:04:12.293 [DEBUG] [Thread-702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:04:12.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:04:12.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:04:12.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:04:12.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:04:12.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:04:12.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:04:12.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:04:12.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:04:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:04:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.877493 -999.00  +14.30  21.86     78  +10.60 1 1 1 1 1     0    0 3.12 -28.08 ZNESW 22.3 21.9 164.6 35.5 15.0 -20.6 14.9 -20.0 14.8 -18.8 15.1 -19.7
2025-12-24T23:04:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:04:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:04:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.877493
2025-12-24T23:04:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:04:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:04:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:04:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:04:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:04:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:04:03', tmtdew=4.53, humidity=74.27, cloud=0.0, wind=30.12, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:04:03', seeing=1.03, atlas_timestamp='2025-12-24T21:03:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:00:00')
2025-12-24T23:04:12.319 [DEBUG] [Thread-702] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:04:12.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:04:12.416 [DEBUG] [Thread-705] [transport.py] [_log()] starting thread (client mode): 0xb9591420
2025-12-24T23:04:12.416 [DEBUG] [Thread-705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:04:12.430 [DEBUG] [Thread-705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:04:12.431 [INFO] [Thread-705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] client lang: <none>
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] server lang: <none>
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] kex follows: False
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:04:12.438 [DEBUG] [Thread-705] [transport.py] [_log()] Compression: none
2025-12-24T23:04:12.439 [DEBUG] [Thread-705] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:04:12.497 [DEBUG] [Thread-705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:04:12.498 [DEBUG] [Thread-705] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:04:12.507 [DEBUG] [Thread-705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:04:12.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:04:12.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:04:12.553 [DEBUG] [Thread-705] [transport.py] [_log()] userauth is OK
2025-12-24T23:04:12.554 [DEBUG] [Thread-705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:04:12.554 [DEBUG] [Thread-705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:04:12.554 [DEBUG] [Thread-705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:04:12.554 [DEBUG] [Thread-705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:04:12.572 [INFO] [Thread-705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:04:12.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:04:12.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:04:13.370 [DEBUG] [Thread-705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:04:13.371 [DEBUG] [Thread-705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:04:13.420 [DEBUG] [Thread-705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:04:13.420 [DEBUG] [Thread-705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:04:13.429 [DEBUG] [Thread-705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:04:13.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:04:13.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:04:13.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:04:13.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:04:13.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:04:13.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:04:13.464 [DEBUG] [Thread-705] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:04:14.498 [DEBUG] [Thread-707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:04:22.685 [DEBUG] [Thread-708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:04:37.746 [DEBUG] [Thread-709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:04:43.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:04:43.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:04:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:04:44.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 4, 35), 4.52, 74.34, 0.0, 29.25, 14.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:04:44.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:04:35
2025-12-24T23:04:44.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:04:44.488 [DEBUG] [Thread-710] [transport.py] [_log()] starting thread (client mode): 0xb9579ba0
2025-12-24T23:04:44.488 [DEBUG] [Thread-710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:04:44.508 [DEBUG] [Thread-710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:04:44.510 [INFO] [Thread-710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] client lang: <none>
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] server lang: <none>
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] kex follows: False
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:04:44.511 [DEBUG] [Thread-710] [transport.py] [_log()] Compression: none
2025-12-24T23:04:44.512 [DEBUG] [Thread-710] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:04:44.520 [DEBUG] [Thread-710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:04:44.521 [DEBUG] [Thread-710] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:04:44.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:04:44.522 [DEBUG] [Thread-710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:04:44.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:04:44.524 [DEBUG] [Thread-710] [transport.py] [_log()] userauth is OK
2025-12-24T23:04:44.524 [DEBUG] [Thread-710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:04:44.524 [DEBUG] [Thread-710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:04:44.524 [DEBUG] [Thread-710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:04:44.524 [DEBUG] [Thread-710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:04:44.548 [INFO] [Thread-710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:04:44.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:04:45.157 [DEBUG] [Thread-710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:04:45.158 [DEBUG] [Thread-710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:04:45.158 [DEBUG] [Thread-710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:04:45.198 [DEBUG] [Thread-710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:04:45.198 [DEBUG] [Thread-710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:04:45.201 [DEBUG] [Thread-710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:04:45.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:04:45.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:04:45.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:04:45.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:04:45.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:04:45.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:04:45.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:04:45.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:04:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:04:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.878187 -999.00  +14.30  21.74     78  +10.60 1 1 1 1 1     0    0 3.01 -30.76 ZNESW 21.5 21.7 153.6 31.1 15.0 -20.5 14.9 -20.1 14.7 -18.9 15.0 -19.8
2025-12-24T23:04:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:04:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:04:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.878187
2025-12-24T23:04:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:04:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:04:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:04:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:04:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:04:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:04:35', tmtdew=4.52, humidity=74.34, cloud=0.0, wind=29.25, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:04:36', seeing=1.03, atlas_timestamp='2025-12-24T21:04:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:03:00')
2025-12-24T23:04:45.229 [DEBUG] [Thread-710] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:04:45.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:04:45.331 [DEBUG] [Thread-713] [transport.py] [_log()] starting thread (client mode): 0xb95936a0
2025-12-24T23:04:45.331 [DEBUG] [Thread-713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:04:45.345 [DEBUG] [Thread-713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:04:45.345 [INFO] [Thread-713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:04:45.353 [DEBUG] [Thread-713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:04:45.353 [DEBUG] [Thread-713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:04:45.353 [DEBUG] [Thread-713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:04:45.353 [DEBUG] [Thread-713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] client lang: <none>
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] server lang: <none>
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] kex follows: False
2025-12-24T23:04:45.354 [DEBUG] [Thread-713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:04:45.355 [DEBUG] [Thread-713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:04:45.355 [DEBUG] [Thread-713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:04:45.355 [DEBUG] [Thread-713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:04:45.355 [DEBUG] [Thread-713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:04:45.355 [DEBUG] [Thread-713] [transport.py] [_log()] Compression: none
2025-12-24T23:04:45.355 [DEBUG] [Thread-713] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:04:45.413 [DEBUG] [Thread-713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:04:45.414 [DEBUG] [Thread-713] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:04:45.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:04:45.415 [DEBUG] [Thread-713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:04:45.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:04:45.469 [DEBUG] [Thread-713] [transport.py] [_log()] userauth is OK
2025-12-24T23:04:45.469 [DEBUG] [Thread-713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:04:45.469 [DEBUG] [Thread-713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:04:45.470 [DEBUG] [Thread-713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:04:45.470 [DEBUG] [Thread-713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:04:45.492 [INFO] [Thread-713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:04:45.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:04:45.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:04:46.287 [DEBUG] [Thread-713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:04:46.288 [DEBUG] [Thread-713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:04:46.336 [DEBUG] [Thread-713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:04:46.336 [DEBUG] [Thread-713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:04:46.346 [DEBUG] [Thread-713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:04:46.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:04:46.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')
2025-12-24T23:04:46.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:04:46.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:04:46.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:04:46.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:04:46.382 [DEBUG] [Thread-713] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:04:52.786 [DEBUG] [Thread-715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:00.553 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:00.554 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:07.857 [DEBUG] [Thread-716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:14.574 [DEBUG] [Thread-717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:05:16.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:05:16.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:05:17.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 5, 7), 4.51, 74.36, 0.0, 30.38, 14.35, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:05:17.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:05:07
2025-12-24T23:05:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:05:17.420 [DEBUG] [Thread-718] [transport.py] [_log()] starting thread (client mode): 0xb9558c70
2025-12-24T23:05:17.421 [DEBUG] [Thread-718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:05:17.438 [DEBUG] [Thread-718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:05:17.438 [INFO] [Thread-718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] client lang: <none>
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] server lang: <none>
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] kex follows: False
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:05:17.441 [DEBUG] [Thread-718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:05:17.442 [DEBUG] [Thread-718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:05:17.442 [DEBUG] [Thread-718] [transport.py] [_log()] Compression: none
2025-12-24T23:05:17.442 [DEBUG] [Thread-718] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:05:17.458 [DEBUG] [Thread-718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:05:17.459 [DEBUG] [Thread-718] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:05:17.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:05:17.460 [DEBUG] [Thread-718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:05:17.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:05:17.462 [DEBUG] [Thread-718] [transport.py] [_log()] userauth is OK
2025-12-24T23:05:17.462 [DEBUG] [Thread-718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:05:17.462 [DEBUG] [Thread-718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:05:17.462 [DEBUG] [Thread-718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:05:17.462 [DEBUG] [Thread-718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:05:17.485 [INFO] [Thread-718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:05:17.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:05:18.066 [DEBUG] [Thread-718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:05:18.066 [DEBUG] [Thread-718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:05:18.067 [DEBUG] [Thread-718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:05:18.107 [DEBUG] [Thread-718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:05:18.107 [DEBUG] [Thread-718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:05:18.110 [DEBUG] [Thread-718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:05:18.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:05:18.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:05:18.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:05:18.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:05:18.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:05:18.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:05:18.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:05:18.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:05:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:05:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.878534 -999.00  +14.30  23.24     78  +10.60 1 1 1 1 1     0    0 3.07 -28.42 ZNESW 19.8 23.2 152.6 28.4 15.0 -20.6 14.9 -20.1 14.7 -19.0 15.0 -19.8
2025-12-24T23:05:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:05:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:05:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.878534
2025-12-24T23:05:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:05:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:05:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:05:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:05:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:05:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:05:07', tmtdew=4.51, humidity=74.36, cloud=0.0, wind=30.38, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:05:08', seeing=1.25, atlas_timestamp='2025-12-24T21:05:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:03:00')
2025-12-24T23:05:18.134 [DEBUG] [Thread-718] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:05:18.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:05:18.238 [DEBUG] [Thread-721] [transport.py] [_log()] starting thread (client mode): 0xb955bc70
2025-12-24T23:05:18.238 [DEBUG] [Thread-721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:05:18.253 [DEBUG] [Thread-721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:05:18.253 [INFO] [Thread-721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:05:18.260 [DEBUG] [Thread-721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:05:18.261 [DEBUG] [Thread-721] [transport.py] [_log()] client lang: <none>
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] server lang: <none>
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] kex follows: False
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] Compression: none
2025-12-24T23:05:18.262 [DEBUG] [Thread-721] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:05:18.325 [DEBUG] [Thread-721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:05:18.325 [DEBUG] [Thread-721] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:05:18.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:05:18.326 [DEBUG] [Thread-721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:05:18.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:05:18.381 [DEBUG] [Thread-721] [transport.py] [_log()] userauth is OK
2025-12-24T23:05:18.381 [DEBUG] [Thread-721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:05:18.381 [DEBUG] [Thread-721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:05:18.381 [DEBUG] [Thread-721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:05:18.381 [DEBUG] [Thread-721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:05:18.399 [INFO] [Thread-721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:05:18.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:05:18.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:05:19.223 [DEBUG] [Thread-721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:05:19.224 [DEBUG] [Thread-721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:05:19.271 [DEBUG] [Thread-721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:05:19.272 [DEBUG] [Thread-721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:05:19.280 [DEBUG] [Thread-721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:05:19.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:05:19.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:05:19.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:05:19.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:05:19.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:05:19.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:05:19.318 [DEBUG] [Thread-721] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:05:22.895 [DEBUG] [Thread-723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:24.290 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:30.392 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:33.433 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:37.956 [DEBUG] [Thread-724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:39.799 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:05:49.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:05:49.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:05:49.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:05:50.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 5, 39), 4.51, 74.39, 0.0, 26.89, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:05:50.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:05:39
2025-12-24T23:05:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:05:50.323 [DEBUG] [Thread-725] [transport.py] [_log()] starting thread (client mode): 0xb95595d0
2025-12-24T23:05:50.323 [DEBUG] [Thread-725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:05:50.342 [DEBUG] [Thread-725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:05:50.343 [INFO] [Thread-725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] client lang: <none>
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] server lang: <none>
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] kex follows: False
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:05:50.346 [DEBUG] [Thread-725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:05:50.347 [DEBUG] [Thread-725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:05:50.347 [DEBUG] [Thread-725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:05:50.347 [DEBUG] [Thread-725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:05:50.347 [DEBUG] [Thread-725] [transport.py] [_log()] Compression: none
2025-12-24T23:05:50.347 [DEBUG] [Thread-725] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:05:50.368 [DEBUG] [Thread-725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:05:50.369 [DEBUG] [Thread-725] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:05:50.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:05:50.370 [DEBUG] [Thread-725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:05:50.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:05:50.371 [DEBUG] [Thread-725] [transport.py] [_log()] userauth is OK
2025-12-24T23:05:50.372 [DEBUG] [Thread-725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:05:50.372 [DEBUG] [Thread-725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:05:50.372 [DEBUG] [Thread-725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:05:50.372 [DEBUG] [Thread-725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:05:50.395 [INFO] [Thread-725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:05:50.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:05:51.009 [DEBUG] [Thread-725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:05:51.009 [DEBUG] [Thread-725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:05:51.010 [DEBUG] [Thread-725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:05:51.051 [DEBUG] [Thread-725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:05:51.051 [DEBUG] [Thread-725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:05:51.054 [DEBUG] [Thread-725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:05:51.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:05:51.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:05:51.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:05:51.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:05:51.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:05:51.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:05:51.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:05:51.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:05:51.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:05:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.878534 -999.00  +14.30  23.24     78  +10.60 1 1 1 1 1     0    0 3.07 -28.42 ZNESW 19.8 23.2 152.6 28.4 15.0 -20.6 14.9 -20.1 14.7 -19.0 15.0 -19.8
2025-12-24T23:05:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:05:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:05:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.878534
2025-12-24T23:05:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:05:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:05:51.078 [DEBUG] [Thread-725] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:05:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:05:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:05:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:05:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:05:39', tmtdew=4.51, humidity=74.39, cloud=0.0, wind=26.89, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:05:40', seeing=1.13, atlas_timestamp='2025-12-24T21:05:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:03:00')
2025-12-24T23:05:51.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:05:51.184 [DEBUG] [Thread-728] [transport.py] [_log()] starting thread (client mode): 0xb95909d0
2025-12-24T23:05:51.184 [DEBUG] [Thread-728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:05:51.199 [DEBUG] [Thread-728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:05:51.199 [INFO] [Thread-728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:05:51.206 [DEBUG] [Thread-728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] client lang: <none>
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] server lang: <none>
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] kex follows: False
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:05:51.207 [DEBUG] [Thread-728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:05:51.208 [DEBUG] [Thread-728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:05:51.208 [DEBUG] [Thread-728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:05:51.208 [DEBUG] [Thread-728] [transport.py] [_log()] Compression: none
2025-12-24T23:05:51.208 [DEBUG] [Thread-728] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:05:51.269 [DEBUG] [Thread-728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:05:51.270 [DEBUG] [Thread-728] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:05:51.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:05:51.271 [DEBUG] [Thread-728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:05:51.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:05:51.325 [DEBUG] [Thread-728] [transport.py] [_log()] userauth is OK
2025-12-24T23:05:51.326 [DEBUG] [Thread-728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:05:51.326 [DEBUG] [Thread-728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:05:51.326 [DEBUG] [Thread-728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:05:51.326 [DEBUG] [Thread-728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:05:51.344 [INFO] [Thread-728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:05:51.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:05:51.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:05:52.144 [DEBUG] [Thread-728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:05:52.144 [DEBUG] [Thread-728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:05:52.192 [DEBUG] [Thread-728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:05:52.192 [DEBUG] [Thread-728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:05:52.201 [DEBUG] [Thread-728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:05:52.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:05:52.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:05: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') -> 00000000
2025-12-24T23:05:52.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:05:52.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:05:52.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:05:52.238 [DEBUG] [Thread-728] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:05:52.994 [DEBUG] [Thread-730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:06:00.754 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:06:00.755 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:06:08.065 [DEBUG] [Thread-731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:06:14.647 [DEBUG] [Thread-732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:06:22.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:06:22.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:06:22.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:06:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 6, 11), 4.48, 74.51, 0.0, 29.52, 14.37, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:06:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:06:11
2025-12-24T23:06:23.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:06:23.105 [DEBUG] [Thread-733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:06:23.220 [DEBUG] [Thread-734] [transport.py] [_log()] starting thread (client mode): 0xb9558730
2025-12-24T23:06:23.221 [DEBUG] [Thread-734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:06:23.242 [DEBUG] [Thread-734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:06:23.242 [INFO] [Thread-734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] client lang: <none>
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] server lang: <none>
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] kex follows: False
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:06:23.246 [DEBUG] [Thread-734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:06:23.247 [DEBUG] [Thread-734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:06:23.247 [DEBUG] [Thread-734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:06:23.247 [DEBUG] [Thread-734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:06:23.247 [DEBUG] [Thread-734] [transport.py] [_log()] Compression: none
2025-12-24T23:06:23.247 [DEBUG] [Thread-734] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:06:23.265 [DEBUG] [Thread-734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:06:23.265 [DEBUG] [Thread-734] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:06:23.266 [DEBUG] [Thread-734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:06:23.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:06:23.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:06:23.268 [DEBUG] [Thread-734] [transport.py] [_log()] userauth is OK
2025-12-24T23:06:23.268 [DEBUG] [Thread-734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:06:23.269 [DEBUG] [Thread-734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:06:23.269 [DEBUG] [Thread-734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:06:23.269 [DEBUG] [Thread-734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:06:23.294 [INFO] [Thread-734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:06:23.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:06:23.929 [DEBUG] [Thread-734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:06:23.929 [DEBUG] [Thread-734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:06:23.929 [DEBUG] [Thread-734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:06:23.970 [DEBUG] [Thread-734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:06:23.970 [DEBUG] [Thread-734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:06:23.974 [DEBUG] [Thread-734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:06:23.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:06:23.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:06:23.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:06:23.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:06:23.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:06:23.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:06:23.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:06:23.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:06:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:06:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.878881 -999.00  +14.20  23.83     78  +10.60 1 1 1 1 1     0    0 3.18 -27.86 ZNESW 19.8 23.8 153.2 31.8 15.0 -20.5 14.9 -20.1 14.7 -18.9 15.0 -19.8
2025-12-24T23:06:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:06:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:06:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.878881
2025-12-24T23:06:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:06:23.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:06:23.994 [DEBUG] [Thread-734] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:06:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:06:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:06:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:06:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:06:11', tmtdew=4.48, humidity=74.51, cloud=0.0, wind=29.52, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:06:12', seeing=1.15, atlas_timestamp='2025-12-24T21:05:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:03:00')
2025-12-24T23:06:24.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:06:24.093 [DEBUG] [Thread-737] [transport.py] [_log()] starting thread (client mode): 0xb9545b70
2025-12-24T23:06:24.093 [DEBUG] [Thread-737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:06:24.108 [DEBUG] [Thread-737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:06:24.108 [INFO] [Thread-737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:06:24.116 [DEBUG] [Thread-737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:06:24.116 [DEBUG] [Thread-737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:06:24.116 [DEBUG] [Thread-737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:06:24.117 [DEBUG] [Thread-737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:06:24.117 [DEBUG] [Thread-737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:06:24.117 [DEBUG] [Thread-737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:06:24.117 [DEBUG] [Thread-737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:06:24.117 [DEBUG] [Thread-737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:06:24.117 [DEBUG] [Thread-737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:06:24.117 [DEBUG] [Thread-737] [transport.py] [_log()] client lang: <none>
2025-12-24T23:06:24.117 [DEBUG] [Thread-737] [transport.py] [_log()] server lang: <none>
2025-12-24T23:06:24.118 [DEBUG] [Thread-737] [transport.py] [_log()] kex follows: False
2025-12-24T23:06:24.118 [DEBUG] [Thread-737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:06:24.118 [DEBUG] [Thread-737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:06:24.118 [DEBUG] [Thread-737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:06:24.118 [DEBUG] [Thread-737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:06:24.118 [DEBUG] [Thread-737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:06:24.118 [DEBUG] [Thread-737] [transport.py] [_log()] Compression: none
2025-12-24T23:06:24.118 [DEBUG] [Thread-737] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:06:24.178 [DEBUG] [Thread-737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:06:24.179 [DEBUG] [Thread-737] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:06:24.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:06:24.180 [DEBUG] [Thread-737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:06:24.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:06:24.238 [DEBUG] [Thread-737] [transport.py] [_log()] userauth is OK
2025-12-24T23:06:24.238 [DEBUG] [Thread-737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:06:24.239 [DEBUG] [Thread-737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:06:24.239 [DEBUG] [Thread-737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:06:24.239 [DEBUG] [Thread-737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:06:24.259 [INFO] [Thread-737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:06:24.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:06:24.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:06:25.058 [DEBUG] [Thread-737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:06:25.058 [DEBUG] [Thread-737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:06:25.106 [DEBUG] [Thread-737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:06:25.107 [DEBUG] [Thread-737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:06:25.116 [DEBUG] [Thread-737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:06:25.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:06:25.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:06:25.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:06:25.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:06:25.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:06:25.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:06:25.152 [DEBUG] [Thread-737] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:06:38.145 [DEBUG] [Thread-739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:06:53.205 [DEBUG] [Thread-740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:06:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:06:55.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:06:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:06:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 6, 43), 4.49, 74.47, 0.0, 27.86, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:06:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:06:43
2025-12-24T23:06:56.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:06:56.201 [DEBUG] [Thread-741] [transport.py] [_log()] starting thread (client mode): 0xb95928c0
2025-12-24T23:06:56.201 [DEBUG] [Thread-741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:06:56.222 [DEBUG] [Thread-741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:06:56.222 [INFO] [Thread-741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:06:56.223 [DEBUG] [Thread-741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] client lang: <none>
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] server lang: <none>
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] kex follows: False
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] Compression: none
2025-12-24T23:06:56.224 [DEBUG] [Thread-741] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:06:56.231 [DEBUG] [Thread-741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:06:56.232 [DEBUG] [Thread-741] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:06:56.232 [DEBUG] [Thread-741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:06:56.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:06:56.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:06:56.233 [DEBUG] [Thread-741] [transport.py] [_log()] userauth is OK
2025-12-24T23:06:56.233 [DEBUG] [Thread-741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:06:56.233 [DEBUG] [Thread-741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:06:56.233 [DEBUG] [Thread-741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:06:56.233 [DEBUG] [Thread-741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:06:56.248 [INFO] [Thread-741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:06:56.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:06:56.852 [DEBUG] [Thread-741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:06:56.852 [DEBUG] [Thread-741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:06:56.852 [DEBUG] [Thread-741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:06:56.893 [DEBUG] [Thread-741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:06:56.893 [DEBUG] [Thread-741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:06:56.895 [DEBUG] [Thread-741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:06:56.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:06:56.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:06:56.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:06:56.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:06:56.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:06:56.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:06:56.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:06:56.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.879229 -999.00  +14.20  26.66     78  +10.60 1 1 1 1 1     0    0 2.98 -29.88 ZNESW 26.9 26.7 146.0 31.6 15.0 -20.5 14.8 -20.1 14.7 -18.8 15.1 -19.9
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.879229
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:06:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:06:43', tmtdew=4.49, humidity=74.47, cloud=0.0, wind=27.86, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:06:44', seeing=1.17, atlas_timestamp='2025-12-24T21:06:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.14325000000000188, 0.1437500000000007, 0.10549999999999926, 0.15949999999999953, 0.12225000000000108, 0.12299999999999933, 0.08125000000000071, 0.0884999999999998, 0.11599999999999966, 0.16324999999999967, 0.1064999999999987, 0.17999999999999972, 0.18024999999999913, 0.07899999999999885, 0.07399999999999807, 0.14024999999999999, 0.11250000000000071, 0.13899999999999935, 0.06274999999999942, 0.19699999999999918, 0.12374999999999936, 0.12725000000000009, 0.09975000000000023, 0.1609999999999996, 0.17100000000000115, 0.11775000000000091, 0.16050000000000075, 0.20199999999999996, 0.14200000000000124, 0.120000000000001, 0.06050000000000111, 0.22924999999999862], zp_timestamp='2025-12-24T21:03:00')
2025-12-24T23:06:56.914 [DEBUG] [Thread-741] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:06:56.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:06:57.006 [DEBUG] [Thread-744] [transport.py] [_log()] starting thread (client mode): 0xb95b1330
2025-12-24T23:06:57.006 [DEBUG] [Thread-744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:06:57.021 [DEBUG] [Thread-744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:06:57.021 [INFO] [Thread-744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:06:57.028 [DEBUG] [Thread-744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:06:57.028 [DEBUG] [Thread-744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:06:57.028 [DEBUG] [Thread-744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:06:57.028 [DEBUG] [Thread-744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:06:57.028 [DEBUG] [Thread-744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:06:57.028 [DEBUG] [Thread-744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:06:57.028 [DEBUG] [Thread-744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:06:57.028 [DEBUG] [Thread-744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] client lang: <none>
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] server lang: <none>
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] kex follows: False
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] Compression: none
2025-12-24T23:06:57.029 [DEBUG] [Thread-744] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:06:57.087 [DEBUG] [Thread-744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:06:57.087 [DEBUG] [Thread-744] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:06:57.087 [DEBUG] [Thread-744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:06:57.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:06:57.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:06:57.144 [DEBUG] [Thread-744] [transport.py] [_log()] userauth is OK
2025-12-24T23:06:57.144 [DEBUG] [Thread-744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:06:57.145 [DEBUG] [Thread-744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:06:57.145 [DEBUG] [Thread-744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:06:57.145 [DEBUG] [Thread-744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:06:57.162 [INFO] [Thread-744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:06:57.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:06:57.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:06:58.021 [DEBUG] [Thread-744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:06:58.021 [DEBUG] [Thread-744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:06:58.068 [DEBUG] [Thread-744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:06:58.069 [DEBUG] [Thread-744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:06:58.078 [DEBUG] [Thread-744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:06:58.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:06:58.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:06:58.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:06:58.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:06:58.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:06:58.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:06:58.112 [DEBUG] [Thread-744] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:07:00.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:07:00.956 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:07:08.244 [DEBUG] [Thread-746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:07:14.724 [DEBUG] [Thread-747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:07:23.309 [DEBUG] [Thread-748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:07:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:07:28.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:07:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:07:28.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 7, 15), 4.48, 74.54, 0.0, 26.15, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:07:28.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:07:15
2025-12-24T23:07:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:07:29.131 [DEBUG] [Thread-749] [transport.py] [_log()] starting thread (client mode): 0xb95b0bb0
2025-12-24T23:07:29.131 [DEBUG] [Thread-749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:07:29.152 [DEBUG] [Thread-749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:07:29.152 [INFO] [Thread-749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:07:29.154 [DEBUG] [Thread-749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:07:29.154 [DEBUG] [Thread-749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] client lang: <none>
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] server lang: <none>
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] kex follows: False
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] Compression: none
2025-12-24T23:07:29.155 [DEBUG] [Thread-749] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:07:29.174 [DEBUG] [Thread-749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:07:29.175 [DEBUG] [Thread-749] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:07:29.175 [DEBUG] [Thread-749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:07:29.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:07:29.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:07:29.177 [DEBUG] [Thread-749] [transport.py] [_log()] userauth is OK
2025-12-24T23:07:29.178 [DEBUG] [Thread-749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:07:29.178 [DEBUG] [Thread-749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:07:29.178 [DEBUG] [Thread-749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:07:29.178 [DEBUG] [Thread-749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:07:29.212 [INFO] [Thread-749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:07:29.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:07:29.867 [DEBUG] [Thread-749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:07:29.868 [DEBUG] [Thread-749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:07:29.868 [DEBUG] [Thread-749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:07:29.909 [DEBUG] [Thread-749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:07:29.909 [DEBUG] [Thread-749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:07:29.912 [DEBUG] [Thread-749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:07:29.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:07:29.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:07:29.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:07:29.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:07:29.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:07:29.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:07:29.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:07:29.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:07:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:07:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.879576 -999.00  +14.20  20.18     78  +10.60 1 1 1 1 1     0    0 3.06 -28.37 ZNESW 25.9 20.2 163.0 27.9 15.0 -20.5 14.9 -20.2 14.7 -18.9 15.0 -19.7
2025-12-24T23:07:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:07:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:07:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.879576
2025-12-24T23:07:29.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:07:29.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:07:29.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:07:29.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:07:29.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:07:29.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:07:15', tmtdew=4.48, humidity=74.54, cloud=0.0, wind=26.15, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:07:16', seeing=1.09, atlas_timestamp='2025-12-24T21:06:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.09474999999999945, 0.14325000000000188, 0.17325000000000124, 0.10149999999999793, 0.09750000000000014, 0.17024999999999935, 0.09399999999999942, 0.0677500000000002, 0.06449999999999889, 0.10599999999999987, 0.13625000000000043, 0.09299999999999997, 0.182500000000001, 0.15474999999999994, 0.07599999999999874, 0.04949999999999832, 0.14724999999999966, 0.13549999999999862, 0.11599999999999966, 0.07574999999999932, 0.15149999999999864, 0.1322499999999991, 0.1382500000000011, 0.09975000000000023, 0.1559999999999988, 0.14550000000000018, 0.1587499999999995, 0.13349999999999973, 0.20149999999999935, 0.09850000000000136, 0.16000000000000014, 0.10200000000000031, 0.21274999999999977], zp_timestamp='2025-12-24T21:06:00')
2025-12-24T23:07:29.941 [DEBUG] [Thread-749] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:07:30.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:07:30.050 [DEBUG] [Thread-752] [transport.py] [_log()] starting thread (client mode): 0xb95b2da0
2025-12-24T23:07:30.050 [DEBUG] [Thread-752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:07:30.065 [DEBUG] [Thread-752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:07:30.065 [INFO] [Thread-752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:07:30.072 [DEBUG] [Thread-752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] client lang: <none>
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] server lang: <none>
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] kex follows: False
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:07:30.073 [DEBUG] [Thread-752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:07:30.074 [DEBUG] [Thread-752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:07:30.074 [DEBUG] [Thread-752] [transport.py] [_log()] Compression: none
2025-12-24T23:07:30.074 [DEBUG] [Thread-752] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:07:30.137 [DEBUG] [Thread-752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:07:30.137 [DEBUG] [Thread-752] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:07:30.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:07:30.138 [DEBUG] [Thread-752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:07:30.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:07:30.192 [DEBUG] [Thread-752] [transport.py] [_log()] userauth is OK
2025-12-24T23:07:30.192 [DEBUG] [Thread-752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:07:30.192 [DEBUG] [Thread-752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:07:30.192 [DEBUG] [Thread-752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:07:30.193 [DEBUG] [Thread-752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:07:30.211 [INFO] [Thread-752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:07:30.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:07:30.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:07:31.031 [DEBUG] [Thread-752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:07:31.031 [DEBUG] [Thread-752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:07:31.078 [DEBUG] [Thread-752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:07:31.078 [DEBUG] [Thread-752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:07:31.087 [DEBUG] [Thread-752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:07:31.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:07:31.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:07:31.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:07:31.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:07:31.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:07:31.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:07:31.119 [DEBUG] [Thread-752] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:07:38.346 [DEBUG] [Thread-754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:07:53.406 [DEBUG] [Thread-755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:08:01.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:08:01.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:08:01.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:08:01.155 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:08:01.156 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:08:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 7, 47), 4.48, 74.54, 0.0, 28.35, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:08:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:07:47
2025-12-24T23:08:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:08:02.119 [DEBUG] [Thread-756] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-24T23:08:02.119 [DEBUG] [Thread-756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:08:02.139 [DEBUG] [Thread-756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:08:02.140 [INFO] [Thread-756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:08:02.142 [DEBUG] [Thread-756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:08:02.142 [DEBUG] [Thread-756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:08:02.142 [DEBUG] [Thread-756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] client lang: <none>
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] server lang: <none>
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] kex follows: False
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] Compression: none
2025-12-24T23:08:02.143 [DEBUG] [Thread-756] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:08:02.161 [DEBUG] [Thread-756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:08:02.162 [DEBUG] [Thread-756] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:08:02.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:08:02.163 [DEBUG] [Thread-756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:08:02.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:08:02.165 [DEBUG] [Thread-756] [transport.py] [_log()] userauth is OK
2025-12-24T23:08:02.165 [DEBUG] [Thread-756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:08:02.165 [DEBUG] [Thread-756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:08:02.165 [DEBUG] [Thread-756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:08:02.165 [DEBUG] [Thread-756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:08:02.188 [INFO] [Thread-756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:08:02.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:08:02.871 [DEBUG] [Thread-756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:08:02.871 [DEBUG] [Thread-756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:08:02.872 [DEBUG] [Thread-756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:08:02.912 [DEBUG] [Thread-756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:08:02.912 [DEBUG] [Thread-756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:08:02.916 [DEBUG] [Thread-756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:08:02.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:08:02.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:08:02.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:08:02.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:08:02.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:08:02.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:08:02.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:08:02.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:08:02.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:08:02.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.879923 -999.00  +14.20  20.72     78  +10.60 1 1 1 1 1     0    0 3.05 -29.37 ZNESW 17.2 20.7 156.0 26.9 15.0 -20.5 14.9 -20.1 14.7 -18.7 15.0 -19.8
2025-12-24T23:08:02.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:08:02.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:08:02.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.879923
2025-12-24T23:08:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:08:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:08:02.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:08:02.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:08:02.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:08:02.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:07:47', tmtdew=4.48, humidity=74.54, cloud=0.0, wind=28.35, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:07:48', seeing=1.07, atlas_timestamp='2025-12-24T21:07:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.09474999999999945, 0.14325000000000188, 0.17325000000000124, 0.10149999999999793, 0.09750000000000014, 0.17024999999999935, 0.09399999999999942, 0.0677500000000002, 0.06449999999999889, 0.10599999999999987, 0.13625000000000043, 0.09299999999999997, 0.182500000000001, 0.15474999999999994, 0.07599999999999874, 0.04949999999999832, 0.14724999999999966, 0.13549999999999862, 0.11599999999999966, 0.07574999999999932, 0.15149999999999864, 0.1322499999999991, 0.1382500000000011, 0.09975000000000023, 0.1559999999999988, 0.14550000000000018, 0.1587499999999995, 0.13349999999999973, 0.20149999999999935, 0.09850000000000136, 0.16000000000000014, 0.10200000000000031, 0.21274999999999977], zp_timestamp='2025-12-24T21:06:00')
2025-12-24T23:08:02.942 [DEBUG] [Thread-756] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:08:03.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:08:03.050 [DEBUG] [Thread-759] [transport.py] [_log()] starting thread (client mode): 0xb9593a60
2025-12-24T23:08:03.051 [DEBUG] [Thread-759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:08:03.065 [DEBUG] [Thread-759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:08:03.065 [INFO] [Thread-759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:08:03.073 [DEBUG] [Thread-759] [transport.py] [_log()] client lang: <none>
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] server lang: <none>
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] kex follows: False
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] Compression: none
2025-12-24T23:08:03.074 [DEBUG] [Thread-759] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:08:03.133 [DEBUG] [Thread-759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:08:03.134 [DEBUG] [Thread-759] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:08:03.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:08:03.135 [DEBUG] [Thread-759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:08:03.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:08:03.189 [DEBUG] [Thread-759] [transport.py] [_log()] userauth is OK
2025-12-24T23:08:03.189 [DEBUG] [Thread-759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:08:03.189 [DEBUG] [Thread-759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:08:03.189 [DEBUG] [Thread-759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:08:03.189 [DEBUG] [Thread-759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:08:03.207 [INFO] [Thread-759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:08:03.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:08:03.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:08:04.015 [DEBUG] [Thread-759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:08:04.016 [DEBUG] [Thread-759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:08:04.064 [DEBUG] [Thread-759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:08:04.064 [DEBUG] [Thread-759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:08:04.073 [DEBUG] [Thread-759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:08:04.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:08:04.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:08:04.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:08:04.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:08:04.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:08:04.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:08:04.107 [DEBUG] [Thread-759] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:08:08.452 [DEBUG] [Thread-761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:08:14.793 [DEBUG] [Thread-762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:08:23.516 [DEBUG] [Thread-763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:08:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:08:34.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:08:34.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:08:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 8, 20), 4.47, 74.56, 0.0, 28.97, 14.33, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:08:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:08:20
2025-12-24T23:08:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:08:35.085 [DEBUG] [Thread-764] [transport.py] [_log()] starting thread (client mode): 0xb95b04c0
2025-12-24T23:08:35.085 [DEBUG] [Thread-764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:08:35.105 [DEBUG] [Thread-764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:08:35.105 [INFO] [Thread-764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:08:35.108 [DEBUG] [Thread-764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:08:35.108 [DEBUG] [Thread-764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:08:35.108 [DEBUG] [Thread-764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] client lang: <none>
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] server lang: <none>
2025-12-24T23:08:35.109 [DEBUG] [Thread-764] [transport.py] [_log()] kex follows: False
2025-12-24T23:08:35.110 [DEBUG] [Thread-764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:08:35.110 [DEBUG] [Thread-764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:08:35.110 [DEBUG] [Thread-764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:08:35.110 [DEBUG] [Thread-764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:08:35.110 [DEBUG] [Thread-764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:08:35.110 [DEBUG] [Thread-764] [transport.py] [_log()] Compression: none
2025-12-24T23:08:35.110 [DEBUG] [Thread-764] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:08:35.130 [DEBUG] [Thread-764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:08:35.131 [DEBUG] [Thread-764] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:08:35.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:08:35.133 [DEBUG] [Thread-764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:08:35.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:08:35.135 [DEBUG] [Thread-764] [transport.py] [_log()] userauth is OK
2025-12-24T23:08:35.135 [DEBUG] [Thread-764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:08:35.135 [DEBUG] [Thread-764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:08:35.135 [DEBUG] [Thread-764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:08:35.136 [DEBUG] [Thread-764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:08:35.159 [INFO] [Thread-764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:08:35.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:08:35.798 [DEBUG] [Thread-764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:08:35.798 [DEBUG] [Thread-764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:08:35.799 [DEBUG] [Thread-764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:08:35.840 [DEBUG] [Thread-764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:08:35.840 [DEBUG] [Thread-764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:08:35.843 [DEBUG] [Thread-764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:08:35.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:08:35.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:08:35.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:08:35.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:08:35.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:08:35.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:08:35.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:08:35.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:08:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:08:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.880618 -999.00  +14.20  23.02     78  +10.60 1 1 1 1 1     0    0 2.99 -28.58 ZNESW 20.6 23.0 154.6 27.9 15.0 -20.4 14.8 -20.1 14.7 -18.8 15.0 -19.7
2025-12-24T23:08:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:08:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:08:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.880618
2025-12-24T23:08:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:08:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:08:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:08:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:08:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:08:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:08:20', tmtdew=4.47, humidity=74.56, cloud=0.0, wind=28.97, temperature=14.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:08:20', seeing=1.07, atlas_timestamp='2025-12-24T21:08:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.09474999999999945, 0.14325000000000188, 0.17325000000000124, 0.10149999999999793, 0.09750000000000014, 0.17024999999999935, 0.09399999999999942, 0.0677500000000002, 0.06449999999999889, 0.10599999999999987, 0.13625000000000043, 0.09299999999999997, 0.182500000000001, 0.15474999999999994, 0.07599999999999874, 0.04949999999999832, 0.14724999999999966, 0.13549999999999862, 0.11599999999999966, 0.07574999999999932, 0.15149999999999864, 0.1322499999999991, 0.1382500000000011, 0.09975000000000023, 0.1559999999999988, 0.14550000000000018, 0.1587499999999995, 0.13349999999999973, 0.20149999999999935, 0.09850000000000136, 0.16000000000000014, 0.10200000000000031, 0.21274999999999977], zp_timestamp='2025-12-24T21:06:00')
2025-12-24T23:08:35.868 [DEBUG] [Thread-764] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:08:35.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:08:35.977 [DEBUG] [Thread-767] [transport.py] [_log()] starting thread (client mode): 0xb95b0460
2025-12-24T23:08:35.977 [DEBUG] [Thread-767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:08:35.992 [DEBUG] [Thread-767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:08:35.992 [INFO] [Thread-767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:08:36.000 [DEBUG] [Thread-767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:08:36.000 [DEBUG] [Thread-767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:08:36.000 [DEBUG] [Thread-767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:08:36.000 [DEBUG] [Thread-767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:08:36.000 [DEBUG] [Thread-767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:08:36.000 [DEBUG] [Thread-767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:08:36.000 [DEBUG] [Thread-767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] client lang: <none>
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] server lang: <none>
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] kex follows: False
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] Compression: none
2025-12-24T23:08:36.001 [DEBUG] [Thread-767] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:08:36.061 [DEBUG] [Thread-767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:08:36.061 [DEBUG] [Thread-767] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:08:36.062 [DEBUG] [Thread-767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:08:36.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:08:36.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:08:36.117 [DEBUG] [Thread-767] [transport.py] [_log()] userauth is OK
2025-12-24T23:08:36.117 [DEBUG] [Thread-767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:08:36.118 [DEBUG] [Thread-767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:08:36.118 [DEBUG] [Thread-767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:08:36.118 [DEBUG] [Thread-767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:08:36.136 [INFO] [Thread-767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:08:36.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:08:36.912 [DEBUG] [Thread-767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:08:36.912 [DEBUG] [Thread-767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:08:36.960 [DEBUG] [Thread-767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:08:36.960 [DEBUG] [Thread-767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:08:36.969 [DEBUG] [Thread-767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:08:36.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:08:36.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:08:36.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:08:36.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:08:36.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:08:36.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:08:37.005 [DEBUG] [Thread-767] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:08:38.559 [DEBUG] [Thread-769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:08:53.629 [DEBUG] [Thread-770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:09:01.357 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:09:01.358 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:09:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:09:07.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:09:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:09:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 8, 52), 4.42, 74.59, 0.0, 28.88, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:09:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:08:52
2025-12-24T23:09:07.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:09:07.999 [DEBUG] [Thread-771] [transport.py] [_log()] starting thread (client mode): 0xb9546ad0
2025-12-24T23:09:08.000 [DEBUG] [Thread-771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:09:08.018 [DEBUG] [Thread-771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:09:08.018 [INFO] [Thread-771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] client lang: <none>
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] server lang: <none>
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] kex follows: False
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:09:08.022 [DEBUG] [Thread-771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:09:08.023 [DEBUG] [Thread-771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:09:08.023 [DEBUG] [Thread-771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:09:08.023 [DEBUG] [Thread-771] [transport.py] [_log()] Compression: none
2025-12-24T23:09:08.023 [DEBUG] [Thread-771] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:09:08.038 [DEBUG] [Thread-771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:09:08.039 [DEBUG] [Thread-771] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:09:08.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:09:08.040 [DEBUG] [Thread-771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:09:08.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:09:08.042 [DEBUG] [Thread-771] [transport.py] [_log()] userauth is OK
2025-12-24T23:09:08.043 [DEBUG] [Thread-771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:09:08.043 [DEBUG] [Thread-771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:09:08.043 [DEBUG] [Thread-771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:09:08.043 [DEBUG] [Thread-771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:09:08.069 [INFO] [Thread-771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:09:08.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:09:08.671 [DEBUG] [Thread-773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:09:08.873 [DEBUG] [Thread-771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:09:08.874 [DEBUG] [Thread-771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:09:08.874 [DEBUG] [Thread-771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:09:08.918 [DEBUG] [Thread-771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:09:08.918 [DEBUG] [Thread-771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:09:08.921 [DEBUG] [Thread-771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:09:08.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:09:08.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:09:08.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:09:08.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:09:08.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:09:08.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:09:08.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:09:08.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:09:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:09:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.880965 -999.00  +14.20  14.86     78  +10.60 1 1 1 1 1     0    0 3.02 -28.59 ZNESW 16.7 14.9 156.0 29.2 15.0 -20.4 14.8 -20.4 14.7 -18.7 14.9 -19.6
2025-12-24T23:09:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:09:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:09:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.880965
2025-12-24T23:09:08.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:09:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:09:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:09:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:09:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:09:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:08:52', tmtdew=4.42, humidity=74.59, cloud=0.0, wind=28.88, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:08:52', seeing=1.06, atlas_timestamp='2025-12-24T21:08:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.09474999999999945, 0.14325000000000188, 0.17325000000000124, 0.10149999999999793, 0.09750000000000014, 0.17024999999999935, 0.09399999999999942, 0.0677500000000002, 0.06449999999999889, 0.10599999999999987, 0.13625000000000043, 0.09299999999999997, 0.182500000000001, 0.15474999999999994, 0.07599999999999874, 0.04949999999999832, 0.14724999999999966, 0.13549999999999862, 0.11599999999999966, 0.07574999999999932, 0.15149999999999864, 0.1322499999999991, 0.1382500000000011, 0.09975000000000023, 0.1559999999999988, 0.14550000000000018, 0.1587499999999995, 0.13349999999999973, 0.20149999999999935, 0.09850000000000136, 0.16000000000000014, 0.10200000000000031, 0.21274999999999977], zp_timestamp='2025-12-24T21:06:00')
2025-12-24T23:09:08.945 [DEBUG] [Thread-771] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:09:09.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:09:09.048 [DEBUG] [Thread-775] [transport.py] [_log()] starting thread (client mode): 0xb9558790
2025-12-24T23:09:09.048 [DEBUG] [Thread-775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:09:09.063 [DEBUG] [Thread-775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:09:09.063 [INFO] [Thread-775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:09:09.071 [DEBUG] [Thread-775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:09:09.072 [DEBUG] [Thread-775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:09:09.072 [DEBUG] [Thread-775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:09:09.072 [DEBUG] [Thread-775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:09:09.072 [DEBUG] [Thread-775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] client lang: <none>
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] server lang: <none>
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] kex follows: False
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] Compression: none
2025-12-24T23:09:09.073 [DEBUG] [Thread-775] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:09:09.129 [DEBUG] [Thread-775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:09:09.130 [DEBUG] [Thread-775] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:09:09.130 [DEBUG] [Thread-775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:09:09.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:09:09.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:09:09.186 [DEBUG] [Thread-775] [transport.py] [_log()] userauth is OK
2025-12-24T23:09:09.187 [DEBUG] [Thread-775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:09:09.187 [DEBUG] [Thread-775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:09:09.187 [DEBUG] [Thread-775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:09:09.187 [DEBUG] [Thread-775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:09:09.206 [INFO] [Thread-775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:09:09.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:09:09.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:09:09.996 [DEBUG] [Thread-775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:09:09.996 [DEBUG] [Thread-775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:09:10.044 [DEBUG] [Thread-775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:09:10.045 [DEBUG] [Thread-775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:09:10.054 [DEBUG] [Thread-775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:09:10.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:09: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')
2025-12-24T23:09:10.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:09:10.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:09:10.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:09:10.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:09:10.090 [DEBUG] [Thread-775] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:09:14.860 [DEBUG] [Thread-777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:09:23.718 [DEBUG] [Thread-778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:09:38.781 [DEBUG] [Thread-779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:09:40.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:09:40.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:09:40.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:09:40.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 9, 24), 4.42, 74.59, 0.0, 27.16, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:09:40.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:09:24
2025-12-24T23:09:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:09:41.108 [DEBUG] [Thread-780] [transport.py] [_log()] starting thread (client mode): 0xb9558dc0
2025-12-24T23:09:41.108 [DEBUG] [Thread-780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:09:41.132 [DEBUG] [Thread-780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:09:41.132 [INFO] [Thread-780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:09:41.135 [DEBUG] [Thread-780] [transport.py] [_log()] client lang: <none>
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] server lang: <none>
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] kex follows: False
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] Compression: none
2025-12-24T23:09:41.136 [DEBUG] [Thread-780] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:09:41.154 [DEBUG] [Thread-780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:09:41.154 [DEBUG] [Thread-780] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:09:41.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:09:41.155 [DEBUG] [Thread-780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:09:41.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:09:41.197 [DEBUG] [Thread-780] [transport.py] [_log()] userauth is OK
2025-12-24T23:09:41.198 [DEBUG] [Thread-780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:09:41.198 [DEBUG] [Thread-780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:09:41.198 [DEBUG] [Thread-780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:09:41.198 [DEBUG] [Thread-780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:09:41.219 [INFO] [Thread-780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:09:41.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:09:41.856 [DEBUG] [Thread-780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:09:41.856 [DEBUG] [Thread-780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:09:41.857 [DEBUG] [Thread-780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:09:41.897 [DEBUG] [Thread-780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:09:41.897 [DEBUG] [Thread-780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:09:41.900 [DEBUG] [Thread-780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:09:41.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:09:41.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:09:41.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:09:41.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:09:41.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:09:41.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:09:41.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:09:41.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:09:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:09:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.881312 -999.00  +14.20  21.43     78  +10.60 1 1 1 1 1     0    0 3.07 -28.86 ZNESW 20.7 21.4 156.9 27.6 15.0 -20.5 14.8 -20.0 14.6 -18.6 15.0 -19.7
2025-12-24T23:09:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:09:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:09:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.881312
2025-12-24T23:09:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:09:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:09:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:09:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:09:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:09:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:09:24', tmtdew=4.42, humidity=74.59, cloud=0.0, wind=27.16, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:09:24', seeing=1.14, atlas_timestamp='2025-12-24T21:09:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.09474999999999945, 0.14325000000000188, 0.17325000000000124, 0.10149999999999793, 0.09750000000000014, 0.17024999999999935, 0.09399999999999942, 0.0677500000000002, 0.06449999999999889, 0.10599999999999987, 0.13625000000000043, 0.09299999999999997, 0.182500000000001, 0.15474999999999994, 0.07599999999999874, 0.04949999999999832, 0.14724999999999966, 0.13549999999999862, 0.11599999999999966, 0.07574999999999932, 0.15149999999999864, 0.1322499999999991, 0.1382500000000011, 0.09975000000000023, 0.1559999999999988, 0.14550000000000018, 0.1587499999999995, 0.13349999999999973, 0.20149999999999935, 0.09850000000000136, 0.16000000000000014, 0.10200000000000031, 0.21274999999999977], zp_timestamp='2025-12-24T21:06:00')
2025-12-24T23:09:41.928 [DEBUG] [Thread-780] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:09:42.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:09:42.031 [DEBUG] [Thread-783] [transport.py] [_log()] starting thread (client mode): 0xb95b3910
2025-12-24T23:09:42.031 [DEBUG] [Thread-783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:09:42.046 [DEBUG] [Thread-783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:09:42.046 [INFO] [Thread-783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:09:42.053 [DEBUG] [Thread-783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:09:42.053 [DEBUG] [Thread-783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:09:42.053 [DEBUG] [Thread-783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:09:42.053 [DEBUG] [Thread-783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:09:42.053 [DEBUG] [Thread-783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] client lang: <none>
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] server lang: <none>
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] kex follows: False
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] Compression: none
2025-12-24T23:09:42.054 [DEBUG] [Thread-783] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:09:42.111 [DEBUG] [Thread-783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:09:42.112 [DEBUG] [Thread-783] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:09:42.112 [DEBUG] [Thread-783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:09:42.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:09:42.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:09:42.168 [DEBUG] [Thread-783] [transport.py] [_log()] userauth is OK
2025-12-24T23:09:42.168 [DEBUG] [Thread-783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:09:42.168 [DEBUG] [Thread-783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:09:42.169 [DEBUG] [Thread-783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:09:42.169 [DEBUG] [Thread-783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:09:42.191 [INFO] [Thread-783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:09:42.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:09:42.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:09:42.949 [DEBUG] [Thread-783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:09:42.950 [DEBUG] [Thread-783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:09:42.998 [DEBUG] [Thread-783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:09:42.998 [DEBUG] [Thread-783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:09:43.007 [DEBUG] [Thread-783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:09:43.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:09:43.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:09:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:09:43.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:09:43.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:09:43.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:09:43.043 [DEBUG] [Thread-783] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:09:53.825 [DEBUG] [Thread-785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:10:01.557 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:10:01.558 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:10:08.887 [DEBUG] [Thread-786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:10:13.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:10:13.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:10:13.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:10:13.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 9, 56), 4.41, 75.11, 0.0, 30.08, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:10:13.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:09:56
2025-12-24T23:10:13.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:10:14.041 [DEBUG] [Thread-787] [transport.py] [_log()] starting thread (client mode): 0xb95b00d0
2025-12-24T23:10:14.041 [DEBUG] [Thread-787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:10:14.061 [DEBUG] [Thread-787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:10:14.061 [INFO] [Thread-787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:10:14.064 [DEBUG] [Thread-787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:10:14.065 [DEBUG] [Thread-787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:10:14.065 [DEBUG] [Thread-787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:10:14.065 [DEBUG] [Thread-787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:10:14.065 [DEBUG] [Thread-787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:10:14.065 [DEBUG] [Thread-787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:10:14.065 [DEBUG] [Thread-787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:10:14.066 [DEBUG] [Thread-787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:10:14.066 [DEBUG] [Thread-787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:10:14.066 [DEBUG] [Thread-787] [transport.py] [_log()] client lang: <none>
2025-12-24T23:10:14.066 [DEBUG] [Thread-787] [transport.py] [_log()] server lang: <none>
2025-12-24T23:10:14.066 [DEBUG] [Thread-787] [transport.py] [_log()] kex follows: False
2025-12-24T23:10:14.066 [DEBUG] [Thread-787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:10:14.066 [DEBUG] [Thread-787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:10:14.066 [DEBUG] [Thread-787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:10:14.067 [DEBUG] [Thread-787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:10:14.067 [DEBUG] [Thread-787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:10:14.067 [DEBUG] [Thread-787] [transport.py] [_log()] Compression: none
2025-12-24T23:10:14.067 [DEBUG] [Thread-787] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:10:14.088 [DEBUG] [Thread-787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:10:14.089 [DEBUG] [Thread-787] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:10:14.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:10:14.090 [DEBUG] [Thread-787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:10:14.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:10:14.092 [DEBUG] [Thread-787] [transport.py] [_log()] userauth is OK
2025-12-24T23:10:14.092 [DEBUG] [Thread-787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:10:14.093 [DEBUG] [Thread-787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:10:14.093 [DEBUG] [Thread-787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:10:14.093 [DEBUG] [Thread-787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:10:14.124 [INFO] [Thread-787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:10:14.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:10:14.918 [DEBUG] [Thread-789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:10:15.255 [DEBUG] [Thread-787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:10:15.256 [DEBUG] [Thread-787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:10:15.256 [DEBUG] [Thread-787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:10:15.297 [DEBUG] [Thread-787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:10:15.297 [DEBUG] [Thread-787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:10:15.300 [DEBUG] [Thread-787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:10:15.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:10:15.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:10:15.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:10:15.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:10:15.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:10:15.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:10:15.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:10:15.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:10:15.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:10:15.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.881659 -999.00  +14.20  20.51     79  +10.60 1 1 1 1 1     0    0 2.99 -29.73 ZNESW 23.7 20.5 163.2 25.4 14.9 -20.6 14.8 -20.0 14.7 -18.8 14.9 -19.6
2025-12-24T23:10:15.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:10:15.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:10:15.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.881659
2025-12-24T23:10:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:10:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:10:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:10:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:10:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:10:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:09:56', tmtdew=4.41, humidity=75.11, cloud=0.0, wind=30.08, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:09:56', seeing=1.19, atlas_timestamp='2025-12-24T21:09:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.09474999999999945, 0.14325000000000188, 0.17325000000000124, 0.10149999999999793, 0.09750000000000014, 0.17024999999999935, 0.09399999999999942, 0.0677500000000002, 0.06449999999999889, 0.10599999999999987, 0.13625000000000043, 0.09299999999999997, 0.182500000000001, 0.15474999999999994, 0.07599999999999874, 0.04949999999999832, 0.14724999999999966, 0.13549999999999862, 0.11599999999999966, 0.07574999999999932, 0.15149999999999864, 0.1322499999999991, 0.1382500000000011, 0.09975000000000023, 0.1559999999999988, 0.14550000000000018, 0.1587499999999995, 0.13349999999999973, 0.20149999999999935, 0.09850000000000136, 0.16000000000000014, 0.10200000000000031, 0.21274999999999977], zp_timestamp='2025-12-24T21:06:00')
2025-12-24T23:10:15.338 [DEBUG] [Thread-787] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:10:15.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:10:15.454 [DEBUG] [Thread-791] [transport.py] [_log()] starting thread (client mode): 0xb95b28c0
2025-12-24T23:10:15.454 [DEBUG] [Thread-791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:10:15.468 [DEBUG] [Thread-791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:10:15.469 [INFO] [Thread-791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:10:15.476 [DEBUG] [Thread-791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:10:15.476 [DEBUG] [Thread-791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:10:15.476 [DEBUG] [Thread-791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:10:15.476 [DEBUG] [Thread-791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:10:15.476 [DEBUG] [Thread-791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:10:15.476 [DEBUG] [Thread-791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:10:15.476 [DEBUG] [Thread-791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] client lang: <none>
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] server lang: <none>
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] kex follows: False
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] Compression: none
2025-12-24T23:10:15.477 [DEBUG] [Thread-791] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:10:15.539 [DEBUG] [Thread-791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:10:15.540 [DEBUG] [Thread-791] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:10:15.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:10:15.541 [DEBUG] [Thread-791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:10:15.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:10:15.596 [DEBUG] [Thread-791] [transport.py] [_log()] userauth is OK
2025-12-24T23:10:15.596 [DEBUG] [Thread-791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:10:15.596 [DEBUG] [Thread-791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:10:15.596 [DEBUG] [Thread-791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:10:15.596 [DEBUG] [Thread-791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:10:15.610 [INFO] [Thread-791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:10:15.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:10:15.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:10:16.423 [DEBUG] [Thread-791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:10:16.424 [DEBUG] [Thread-791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:10:16.472 [DEBUG] [Thread-791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:10:16.472 [DEBUG] [Thread-791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:10:16.481 [DEBUG] [Thread-791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:10:16.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:10:16.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:10:16.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:10:16.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:10:16.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:10:16.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:10:16.519 [DEBUG] [Thread-791] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:10:23.927 [DEBUG] [Thread-793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:10:38.998 [DEBUG] [Thread-794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:10:46.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:10:46.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:10:46.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
2025-12-24T23:10:47.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 10, 28), 4.4, 75.17, 0.0, 29.66, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:10:47.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:10:28
2025-12-24T23:10:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:10:47.586 [DEBUG] [Thread-795] [transport.py] [_log()] starting thread (client mode): 0xb95b3fd0
2025-12-24T23:10:47.586 [DEBUG] [Thread-795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:10:47.605 [DEBUG] [Thread-795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:10:47.605 [INFO] [Thread-795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:10:47.608 [DEBUG] [Thread-795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] client lang: <none>
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] server lang: <none>
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] kex follows: False
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] Compression: none
2025-12-24T23:10:47.609 [DEBUG] [Thread-795] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:10:47.624 [DEBUG] [Thread-795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:10:47.624 [DEBUG] [Thread-795] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:10:47.624 [DEBUG] [Thread-795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:10:47.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:10:47.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:10:47.625 [DEBUG] [Thread-795] [transport.py] [_log()] userauth is OK
2025-12-24T23:10:47.625 [DEBUG] [Thread-795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:10:47.625 [DEBUG] [Thread-795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:10:47.625 [DEBUG] [Thread-795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:10:47.625 [DEBUG] [Thread-795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:10:47.652 [INFO] [Thread-795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:10:47.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:10:48.308 [DEBUG] [Thread-795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:10:48.308 [DEBUG] [Thread-795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:10:48.308 [DEBUG] [Thread-795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:10:48.348 [DEBUG] [Thread-795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:10:48.349 [DEBUG] [Thread-795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:10:48.351 [DEBUG] [Thread-795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:10:48.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:10:48.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:10:48.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:10:48.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:10:48.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:10:48.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:10:48.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.882006 -999.00  +14.20  15.83     78  +10.60 1 1 1 1 1     0    0 3.00 -28.13 ZNESW 21.1 15.8 149.2 26.5 14.9 -20.6 14.8 -20.0 14.6 -18.8 15.0 -19.8
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.882006
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:10:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:10:28', tmtdew=4.4, humidity=75.17, cloud=0.0, wind=29.66, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:10:28', seeing=1.53, atlas_timestamp='2025-12-24T21:10:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.1357500000000016, 0.14575000000000138, 0.09549999999999947, 0.16350000000000087, 0.15575000000000117, 0.1324999999999985, 0.09925000000000139, 0.09049999999999869, 0.1120000000000001, 0.15724999999999945, 0.0860000000000003, 0.2010000000000005, 0.16024999999999956, 0.0990000000000002, 0.07749999999999879, 0.13824999999999932, 0.15850000000000009, 0.12399999999999878, 0.06325000000000003, 0.15649999999999942, 0.12074999999999747, 0.15325000000000166, 0.1172500000000003, 0.1789999999999985, 0.17400000000000126, 0.12024999999999864, 0.17350000000000065, 0.22100000000000009, 0.19500000000000028, 0.1960000000000015, 0.10300000000000153, 0.20374999999999943], zp_timestamp='2025-12-24T21:09:00')
2025-12-24T23:10:48.372 [DEBUG] [Thread-795] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:10:48.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:10:48.464 [DEBUG] [Thread-798] [transport.py] [_log()] starting thread (client mode): 0xb955bbe0
2025-12-24T23:10:48.464 [DEBUG] [Thread-798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:10:48.480 [DEBUG] [Thread-798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:10:48.480 [INFO] [Thread-798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] client lang: <none>
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] server lang: <none>
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] kex follows: False
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] Compression: none
2025-12-24T23:10:48.488 [DEBUG] [Thread-798] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:10:48.546 [DEBUG] [Thread-798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:10:48.546 [DEBUG] [Thread-798] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:10:48.546 [DEBUG] [Thread-798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:10:48.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:10:48.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:10:48.604 [DEBUG] [Thread-798] [transport.py] [_log()] userauth is OK
2025-12-24T23:10:48.604 [DEBUG] [Thread-798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:10:48.604 [DEBUG] [Thread-798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:10:48.604 [DEBUG] [Thread-798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:10:48.604 [DEBUG] [Thread-798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:10:48.618 [INFO] [Thread-798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:10:48.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:10:48.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:10:49.449 [DEBUG] [Thread-798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:10:49.449 [DEBUG] [Thread-798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:10:49.497 [DEBUG] [Thread-798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:10:49.497 [DEBUG] [Thread-798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:10:49.506 [DEBUG] [Thread-798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:10:49.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:10:49.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:10:49.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:10:49.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:10:49.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:10:49.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:10:49.539 [DEBUG] [Thread-798] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:10:54.036 [DEBUG] [Thread-800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:11:01.756 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:11:01.757 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:11:09.100 [DEBUG] [Thread-801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:11:14.973 [DEBUG] [Thread-802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:11:19.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:11:19.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:11:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:11:20.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 10, 28), 4.35, 75.17, 0.0, 29.66, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:11:20.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:10:28
2025-12-24T23:11:20.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:11:20.533 [DEBUG] [Thread-803] [transport.py] [_log()] starting thread (client mode): 0xb95b2590
2025-12-24T23:11:20.533 [DEBUG] [Thread-803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:11:20.553 [DEBUG] [Thread-803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:11:20.554 [INFO] [Thread-803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] client lang: <none>
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] server lang: <none>
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] kex follows: False
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] Compression: none
2025-12-24T23:11:20.557 [DEBUG] [Thread-803] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:11:20.575 [DEBUG] [Thread-803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:11:20.575 [DEBUG] [Thread-803] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:11:20.575 [DEBUG] [Thread-803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:11:20.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:11:20.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:11:20.576 [DEBUG] [Thread-803] [transport.py] [_log()] userauth is OK
2025-12-24T23:11:20.577 [DEBUG] [Thread-803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:11:20.577 [DEBUG] [Thread-803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:11:20.577 [DEBUG] [Thread-803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:11:20.577 [DEBUG] [Thread-803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:11:20.590 [INFO] [Thread-803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:11:20.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:11:21.265 [DEBUG] [Thread-803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:11:21.265 [DEBUG] [Thread-803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:11:21.266 [DEBUG] [Thread-803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:11:21.306 [DEBUG] [Thread-803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:11:21.306 [DEBUG] [Thread-803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:11:21.309 [DEBUG] [Thread-803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:11:21.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:11:21.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:11:21.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:11:21.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:11:21.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:11:21.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:11:21.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:11:21.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:11:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:11:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.882353 -999.00  +14.20  21.60     79  +10.60 1 1 1 1 1     0    0 2.99 -28.79 ZNESW 19.7 21.6 144.4 29.1 14.9 -20.4 14.8 -20.2 14.6 -18.8 14.9 -19.7
2025-12-24T23:11:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:11:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:11:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.882353
2025-12-24T23:11:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:11:21.332 [DEBUG] [Thread-803] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:11:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:11:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:11:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:11:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:11:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:10:28', tmtdew=4.35, humidity=75.17, cloud=0.0, wind=29.66, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:11:01', seeing=1.61, atlas_timestamp='2025-12-24T21:10:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.1357500000000016, 0.14575000000000138, 0.09549999999999947, 0.16350000000000087, 0.15575000000000117, 0.1324999999999985, 0.09925000000000139, 0.09049999999999869, 0.1120000000000001, 0.15724999999999945, 0.0860000000000003, 0.2010000000000005, 0.16024999999999956, 0.0990000000000002, 0.07749999999999879, 0.13824999999999932, 0.15850000000000009, 0.12399999999999878, 0.06325000000000003, 0.15649999999999942, 0.12074999999999747, 0.15325000000000166, 0.1172500000000003, 0.1789999999999985, 0.17400000000000126, 0.12024999999999864, 0.17350000000000065, 0.22100000000000009, 0.19500000000000028, 0.1960000000000015, 0.10300000000000153, 0.20374999999999943], zp_timestamp='2025-12-24T21:09:00')
2025-12-24T23:11:21.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:11:24.143 [DEBUG] [Thread-806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:11:39.204 [DEBUG] [Thread-807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:11:54.245 [DEBUG] [Thread-808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:12:01.957 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:12:01.958 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:12:09.282 [DEBUG] [Thread-809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:12:15.042 [DEBUG] [Thread-810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:12:24.324 [DEBUG] [Thread-811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:12:39.371 [DEBUG] [Thread-812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:12:54.416 [DEBUG] [Thread-813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:13:02.160 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:13:02.161 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:13:09.459 [DEBUG] [Thread-814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:13:15.118 [DEBUG] [Thread-815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:13:24.497 [DEBUG] [Thread-816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:13:34.934 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-24T23:13:39.532 [DEBUG] [Thread-817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:13:54.574 [DEBUG] [Thread-818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:14:02.374 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:14:02.375 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:14:04.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:14:04.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:14:04.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:14:05.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 13, 40), 4.35, 75.19, 0.0, 27.38, 14.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:14:05.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:13:40
2025-12-24T23:14:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:14:05.999 [DEBUG] [Thread-819] [transport.py] [_log()] starting thread (client mode): 0xb95b1870
2025-12-24T23:14:05.999 [DEBUG] [Thread-819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:14:06.019 [DEBUG] [Thread-819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:14:06.019 [INFO] [Thread-819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] client lang: <none>
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] server lang: <none>
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] kex follows: False
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] Compression: none
2025-12-24T23:14:06.022 [DEBUG] [Thread-819] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:14:06.037 [DEBUG] [Thread-819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:14:06.037 [DEBUG] [Thread-819] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:14:06.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:14:06.037 [DEBUG] [Thread-819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:14:06.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:14:06.038 [DEBUG] [Thread-819] [transport.py] [_log()] userauth is OK
2025-12-24T23:14:06.038 [DEBUG] [Thread-819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:14:06.038 [DEBUG] [Thread-819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:14:06.038 [DEBUG] [Thread-819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:14:06.038 [DEBUG] [Thread-819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:14:06.053 [INFO] [Thread-819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:14:06.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:14:06.705 [DEBUG] [Thread-819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:14:06.705 [DEBUG] [Thread-819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:14:06.705 [DEBUG] [Thread-819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:14:06.746 [DEBUG] [Thread-819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:14:06.746 [DEBUG] [Thread-819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:14:06.749 [DEBUG] [Thread-819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:14:06.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:14:06.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:14:06.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:14:06.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:14:06.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:14:06.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:14:06.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:14:06.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:14:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:14:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.884437 -999.00  +14.20  19.27     79  +10.60 1 1 1 1 1     0    0 3.00 -26.70 ZNESW 14.3 19.3 169.0 27.6 14.9 -20.4 14.8 -19.9 14.6 -18.8 14.9 -19.6
2025-12-24T23:14:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:14:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:14:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.884437
2025-12-24T23:14:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:14:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:14:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:14:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:14:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:14:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:13:40', tmtdew=4.35, humidity=75.19, cloud=0.0, wind=27.38, temperature=14.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:13:41', seeing=1.37, atlas_timestamp='2025-12-24T21:13:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.1357500000000016, 0.14575000000000138, 0.09549999999999947, 0.16350000000000087, 0.15575000000000117, 0.1324999999999985, 0.09925000000000139, 0.09049999999999869, 0.1120000000000001, 0.15724999999999945, 0.0860000000000003, 0.2010000000000005, 0.16024999999999956, 0.0990000000000002, 0.07749999999999879, 0.13824999999999932, 0.15850000000000009, 0.12399999999999878, 0.06325000000000003, 0.15649999999999942, 0.12074999999999747, 0.15325000000000166, 0.1172500000000003, 0.1789999999999985, 0.17400000000000126, 0.12024999999999864, 0.17350000000000065, 0.22100000000000009, 0.19500000000000028, 0.1960000000000015, 0.10300000000000153, 0.20374999999999943], zp_timestamp='2025-12-24T21:12:00')
2025-12-24T23:14:06.771 [DEBUG] [Thread-819] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:14:06.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:14:06.864 [DEBUG] [Thread-822] [transport.py] [_log()] starting thread (client mode): 0xb95463b0
2025-12-24T23:14:06.864 [DEBUG] [Thread-822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:14:06.879 [DEBUG] [Thread-822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:14:06.879 [INFO] [Thread-822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] client lang: <none>
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] server lang: <none>
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] kex follows: False
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] Compression: none
2025-12-24T23:14:06.887 [DEBUG] [Thread-822] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:14:06.942 [DEBUG] [Thread-822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:14:06.942 [DEBUG] [Thread-822] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:14:06.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:14:06.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:14:06.943 [DEBUG] [Thread-822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:14:06.999 [DEBUG] [Thread-822] [transport.py] [_log()] userauth is OK
2025-12-24T23:14:06.999 [DEBUG] [Thread-822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:14:06.999 [DEBUG] [Thread-822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:14:06.999 [DEBUG] [Thread-822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:14:06.999 [DEBUG] [Thread-822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:14:07.014 [INFO] [Thread-822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:14:07.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:14:07.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:14:07.811 [DEBUG] [Thread-822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:14:07.811 [DEBUG] [Thread-822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:14:07.859 [DEBUG] [Thread-822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:14:07.859 [DEBUG] [Thread-822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:14:07.868 [DEBUG] [Thread-822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:14:07.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:14:07.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:14:07.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:14:07.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:14:07.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:14:07.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:14:07.900 [DEBUG] [Thread-822] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:14:09.613 [DEBUG] [Thread-824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:14:15.171 [DEBUG] [Thread-825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:14:24.681 [DEBUG] [Thread-826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:14:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:14:37.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:14:37.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:14:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 14, 12), 4.33, 75.27, 0.0, 26.7, 14.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:14:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:14:12
2025-12-24T23:14:38.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:14:38.890 [DEBUG] [Thread-827] [transport.py] [_log()] starting thread (client mode): 0xb95b3d00
2025-12-24T23:14:38.890 [DEBUG] [Thread-827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:14:38.909 [DEBUG] [Thread-827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:14:38.909 [INFO] [Thread-827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] client lang: <none>
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] server lang: <none>
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] kex follows: False
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:14:38.916 [DEBUG] [Thread-827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:14:38.917 [DEBUG] [Thread-827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:14:38.917 [DEBUG] [Thread-827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:14:38.917 [DEBUG] [Thread-827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:14:38.917 [DEBUG] [Thread-827] [transport.py] [_log()] Compression: none
2025-12-24T23:14:38.917 [DEBUG] [Thread-827] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:14:38.936 [DEBUG] [Thread-827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:14:38.936 [DEBUG] [Thread-827] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:14:38.937 [DEBUG] [Thread-827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:14:38.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:14:38.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:14:38.939 [DEBUG] [Thread-827] [transport.py] [_log()] userauth is OK
2025-12-24T23:14:38.939 [DEBUG] [Thread-827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:14:38.940 [DEBUG] [Thread-827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:14:38.940 [DEBUG] [Thread-827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:14:38.940 [DEBUG] [Thread-827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:14:38.954 [INFO] [Thread-827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:14:38.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:14:39.555 [DEBUG] [Thread-827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:14:39.555 [DEBUG] [Thread-827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:14:39.556 [DEBUG] [Thread-827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:14:39.596 [DEBUG] [Thread-827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:14:39.596 [DEBUG] [Thread-827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:14:39.600 [DEBUG] [Thread-827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:14:39.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:14:39.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:14:39.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:14:39.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:14:39.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:14:39.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:14:39.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:14:39.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:14:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:14:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.884784 -999.00  +14.20  13.30     79  +10.60 1 1 1 1 1     0    0 2.97 -28.19 ZNESW 19.2 13.3 151.5 20.2 14.9 -20.4 14.8 -20.0 14.6 -18.8 14.9 -19.8
2025-12-24T23:14:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:14:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:14:39.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.884784
2025-12-24T23:14:39.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:14:39.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:14:39.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:14:39.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:14:39.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:14:39.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:14:12', tmtdew=4.33, humidity=75.27, cloud=0.0, wind=26.7, temperature=14.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:14:13', seeing=1.22, atlas_timestamp='2025-12-24T21:14:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.1357500000000016, 0.14575000000000138, 0.09549999999999947, 0.16350000000000087, 0.15575000000000117, 0.1324999999999985, 0.09925000000000139, 0.09049999999999869, 0.1120000000000001, 0.15724999999999945, 0.0860000000000003, 0.2010000000000005, 0.16024999999999956, 0.0990000000000002, 0.07749999999999879, 0.13824999999999932, 0.15850000000000009, 0.12399999999999878, 0.06325000000000003, 0.15649999999999942, 0.12074999999999747, 0.15325000000000166, 0.1172500000000003, 0.1789999999999985, 0.17400000000000126, 0.12024999999999864, 0.17350000000000065, 0.22100000000000009, 0.19500000000000028, 0.1960000000000015, 0.10300000000000153, 0.20374999999999943], zp_timestamp='2025-12-24T21:12:00')
2025-12-24T23:14:39.622 [DEBUG] [Thread-827] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:14:39.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:14:39.723 [DEBUG] [Thread-830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:14:39.723 [DEBUG] [Thread-831] [transport.py] [_log()] starting thread (client mode): 0xb95b2d40
2025-12-24T23:14:39.723 [DEBUG] [Thread-831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:14:39.738 [DEBUG] [Thread-831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:14:39.738 [INFO] [Thread-831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] client lang: <none>
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] server lang: <none>
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] kex follows: False
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:14:39.745 [DEBUG] [Thread-831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:14:39.746 [DEBUG] [Thread-831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:14:39.746 [DEBUG] [Thread-831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:14:39.746 [DEBUG] [Thread-831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:14:39.746 [DEBUG] [Thread-831] [transport.py] [_log()] Compression: none
2025-12-24T23:14:39.746 [DEBUG] [Thread-831] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:14:39.804 [DEBUG] [Thread-831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:14:39.805 [DEBUG] [Thread-831] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:14:39.805 [DEBUG] [Thread-831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:14:39.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:14:39.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:14:39.864 [DEBUG] [Thread-831] [transport.py] [_log()] userauth is OK
2025-12-24T23:14:39.864 [DEBUG] [Thread-831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:14:39.864 [DEBUG] [Thread-831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:14:39.864 [DEBUG] [Thread-831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:14:39.865 [DEBUG] [Thread-831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:14:39.883 [INFO] [Thread-831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:14:39.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:14:39.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:14:40.669 [DEBUG] [Thread-831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:14:40.669 [DEBUG] [Thread-831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:14:40.717 [DEBUG] [Thread-831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:14:40.717 [DEBUG] [Thread-831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:14:40.727 [DEBUG] [Thread-831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:14:40.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:14:40.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:14:40.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:14:40.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:14:40.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:14:40.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:14:40.764 [DEBUG] [Thread-831] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:14:54.777 [DEBUG] [Thread-833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:15:02.575 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:15:02.576 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:15:09.822 [DEBUG] [Thread-834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:15:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:15:10.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:15:10.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:15:11.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 14, 44), 4.34, 75.21, 0.0, 24.33, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:15:11.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:14:44
2025-12-24T23:15:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:15:11.760 [DEBUG] [Thread-835] [transport.py] [_log()] starting thread (client mode): 0xb9544a30
2025-12-24T23:15:11.760 [DEBUG] [Thread-835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:15:11.788 [DEBUG] [Thread-835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:15:11.789 [INFO] [Thread-835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:15:11.790 [DEBUG] [Thread-835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:15:11.790 [DEBUG] [Thread-835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:15:11.791 [DEBUG] [Thread-835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:15:11.791 [DEBUG] [Thread-835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:15:11.791 [DEBUG] [Thread-835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:15:11.791 [DEBUG] [Thread-835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:15:11.791 [DEBUG] [Thread-835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:15:11.791 [DEBUG] [Thread-835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:15:11.791 [DEBUG] [Thread-835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:15:11.791 [DEBUG] [Thread-835] [transport.py] [_log()] client lang: <none>
2025-12-24T23:15:11.792 [DEBUG] [Thread-835] [transport.py] [_log()] server lang: <none>
2025-12-24T23:15:11.792 [DEBUG] [Thread-835] [transport.py] [_log()] kex follows: False
2025-12-24T23:15:11.792 [DEBUG] [Thread-835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:15:11.792 [DEBUG] [Thread-835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:15:11.792 [DEBUG] [Thread-835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:15:11.792 [DEBUG] [Thread-835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:15:11.792 [DEBUG] [Thread-835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:15:11.792 [DEBUG] [Thread-835] [transport.py] [_log()] Compression: none
2025-12-24T23:15:11.793 [DEBUG] [Thread-835] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:15:11.805 [DEBUG] [Thread-835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:15:11.805 [DEBUG] [Thread-835] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:15:11.806 [DEBUG] [Thread-835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:15:11.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:15:11.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:15:11.808 [DEBUG] [Thread-835] [transport.py] [_log()] userauth is OK
2025-12-24T23:15:11.809 [DEBUG] [Thread-835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:15:11.809 [DEBUG] [Thread-835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:15:11.809 [DEBUG] [Thread-835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:15:11.809 [DEBUG] [Thread-835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:15:11.830 [INFO] [Thread-835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:15:11.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:15:12.417 [DEBUG] [Thread-835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:15:12.417 [DEBUG] [Thread-835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:15:12.418 [DEBUG] [Thread-835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:15:12.458 [DEBUG] [Thread-835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:15:12.458 [DEBUG] [Thread-835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:15:12.462 [DEBUG] [Thread-835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:15:12.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:15:12.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:15:12.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:15:12.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:15:12.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:15:12.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:15:12.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:15:12.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:15:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:15:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.885478 -999.00  +14.20  21.36     79  +10.60 1 1 1 1 1     0    0 3.02 -25.68 ZNESW 20.3 21.4 161.1 27.4 14.9 -20.5 14.8 -20.1 14.6 -18.8 14.9 -19.8
2025-12-24T23:15:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:15:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:15:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.885478
2025-12-24T23:15:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:15:12.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:15:12.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:15:12.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:15:12.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:15:12.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:14:44', tmtdew=4.34, humidity=75.21, cloud=0.0, wind=24.33, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:14:45', seeing=1.31, atlas_timestamp='2025-12-24T21:15:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.1357500000000016, 0.14575000000000138, 0.09549999999999947, 0.16350000000000087, 0.15575000000000117, 0.1324999999999985, 0.09925000000000139, 0.09049999999999869, 0.1120000000000001, 0.15724999999999945, 0.0860000000000003, 0.2010000000000005, 0.16024999999999956, 0.0990000000000002, 0.07749999999999879, 0.13824999999999932, 0.15850000000000009, 0.12399999999999878, 0.06325000000000003, 0.15649999999999942, 0.12074999999999747, 0.15325000000000166, 0.1172500000000003, 0.1789999999999985, 0.17400000000000126, 0.12024999999999864, 0.17350000000000065, 0.22100000000000009, 0.19500000000000028, 0.1960000000000015, 0.10300000000000153, 0.20374999999999943], zp_timestamp='2025-12-24T21:12:00')
2025-12-24T23:15:12.486 [DEBUG] [Thread-835] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:15:12.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:15:12.589 [DEBUG] [Thread-838] [transport.py] [_log()] starting thread (client mode): 0xb955a050
2025-12-24T23:15:12.590 [DEBUG] [Thread-838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:15:12.605 [DEBUG] [Thread-838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:15:12.605 [INFO] [Thread-838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:15:12.616 [DEBUG] [Thread-838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:15:12.617 [DEBUG] [Thread-838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:15:12.617 [DEBUG] [Thread-838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:15:12.617 [DEBUG] [Thread-838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:15:12.617 [DEBUG] [Thread-838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:15:12.617 [DEBUG] [Thread-838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] client lang: <none>
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] server lang: <none>
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] kex follows: False
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] Compression: none
2025-12-24T23:15:12.618 [DEBUG] [Thread-838] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:15:12.675 [DEBUG] [Thread-838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:15:12.676 [DEBUG] [Thread-838] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:15:12.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:15:12.677 [DEBUG] [Thread-838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:15:12.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:15:12.732 [DEBUG] [Thread-838] [transport.py] [_log()] userauth is OK
2025-12-24T23:15:12.732 [DEBUG] [Thread-838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:15:12.732 [DEBUG] [Thread-838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:15:12.732 [DEBUG] [Thread-838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:15:12.732 [DEBUG] [Thread-838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:15:12.751 [INFO] [Thread-838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:15:12.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:15:12.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:15:13.536 [DEBUG] [Thread-838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:15:13.536 [DEBUG] [Thread-838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:15:13.584 [DEBUG] [Thread-838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:15:13.584 [DEBUG] [Thread-838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:15:13.593 [DEBUG] [Thread-838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:15:13.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:15:13.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')
2025-12-24T23:15:13.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:15:13.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:15:13.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:15:13.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:15:13.631 [DEBUG] [Thread-838] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:15:15.230 [DEBUG] [Thread-840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:15:24.860 [DEBUG] [Thread-841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:15:39.917 [DEBUG] [Thread-842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:15:43.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:15:43.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:15:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:15:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 15, 17), 4.33, 75.26, 0.0, 27.31, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:15:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:15:17
2025-12-24T23:15:44.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:15:44.628 [DEBUG] [Thread-843] [transport.py] [_log()] starting thread (client mode): 0xb95b1f60
2025-12-24T23:15:44.629 [DEBUG] [Thread-843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:15:44.651 [DEBUG] [Thread-843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:15:44.651 [INFO] [Thread-843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:15:44.655 [DEBUG] [Thread-843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:15:44.655 [DEBUG] [Thread-843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:15:44.655 [DEBUG] [Thread-843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:15:44.655 [DEBUG] [Thread-843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:15:44.655 [DEBUG] [Thread-843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:15:44.656 [DEBUG] [Thread-843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:15:44.656 [DEBUG] [Thread-843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:15:44.656 [DEBUG] [Thread-843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:15:44.656 [DEBUG] [Thread-843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:15:44.656 [DEBUG] [Thread-843] [transport.py] [_log()] client lang: <none>
2025-12-24T23:15:44.656 [DEBUG] [Thread-843] [transport.py] [_log()] server lang: <none>
2025-12-24T23:15:44.656 [DEBUG] [Thread-843] [transport.py] [_log()] kex follows: False
2025-12-24T23:15:44.656 [DEBUG] [Thread-843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:15:44.657 [DEBUG] [Thread-843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:15:44.657 [DEBUG] [Thread-843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:15:44.657 [DEBUG] [Thread-843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:15:44.657 [DEBUG] [Thread-843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:15:44.657 [DEBUG] [Thread-843] [transport.py] [_log()] Compression: none
2025-12-24T23:15:44.657 [DEBUG] [Thread-843] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:15:44.677 [DEBUG] [Thread-843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:15:44.677 [DEBUG] [Thread-843] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:15:44.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:15:44.679 [DEBUG] [Thread-843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:15:44.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:15:44.680 [DEBUG] [Thread-843] [transport.py] [_log()] userauth is OK
2025-12-24T23:15:44.681 [DEBUG] [Thread-843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:15:44.681 [DEBUG] [Thread-843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:15:44.681 [DEBUG] [Thread-843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:15:44.681 [DEBUG] [Thread-843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:15:44.707 [INFO] [Thread-843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:15:44.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:15:45.358 [DEBUG] [Thread-843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:15:45.358 [DEBUG] [Thread-843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:15:45.359 [DEBUG] [Thread-843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:15:45.399 [DEBUG] [Thread-843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:15:45.399 [DEBUG] [Thread-843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:15:45.402 [DEBUG] [Thread-843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:15:45.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:15:45.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:15:45.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:15:45.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:15:45.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:15:45.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:15:45.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:15:45.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:15:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:15:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.885478 -999.00  +14.20  21.36     79  +10.60 1 1 1 1 1     0    0 3.02 -25.68 ZNESW 20.3 21.4 161.1 27.4 14.9 -20.5 14.8 -20.1 14.6 -18.8 14.9 -19.8
2025-12-24T23:15:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:15:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:15:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.885478
2025-12-24T23:15:45.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:15:45.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:15:45.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:15:45.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:15:45.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:15:45.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:15:17', tmtdew=4.33, humidity=75.26, cloud=0.0, wind=27.31, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:15:17', seeing=1.22, atlas_timestamp='2025-12-24T21:15:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.1357500000000016, 0.14575000000000138, 0.09549999999999947, 0.16350000000000087, 0.15575000000000117, 0.1324999999999985, 0.09925000000000139, 0.09049999999999869, 0.1120000000000001, 0.15724999999999945, 0.0860000000000003, 0.2010000000000005, 0.16024999999999956, 0.0990000000000002, 0.07749999999999879, 0.13824999999999932, 0.15850000000000009, 0.12399999999999878, 0.06325000000000003, 0.15649999999999942, 0.12074999999999747, 0.15325000000000166, 0.1172500000000003, 0.1789999999999985, 0.17400000000000126, 0.12024999999999864, 0.17350000000000065, 0.22100000000000009, 0.19500000000000028, 0.1960000000000015, 0.10300000000000153, 0.20374999999999943], zp_timestamp='2025-12-24T21:12:00')
2025-12-24T23:15:45.421 [DEBUG] [Thread-843] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:15:45.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:15:45.527 [DEBUG] [Thread-846] [transport.py] [_log()] starting thread (client mode): 0xb95b10f0
2025-12-24T23:15:45.527 [DEBUG] [Thread-846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:15:45.541 [DEBUG] [Thread-846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:15:45.541 [INFO] [Thread-846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] client lang: <none>
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] server lang: <none>
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] kex follows: False
2025-12-24T23:15:45.549 [DEBUG] [Thread-846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:15:45.550 [DEBUG] [Thread-846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:15:45.550 [DEBUG] [Thread-846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:15:45.550 [DEBUG] [Thread-846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:15:45.550 [DEBUG] [Thread-846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:15:45.550 [DEBUG] [Thread-846] [transport.py] [_log()] Compression: none
2025-12-24T23:15:45.550 [DEBUG] [Thread-846] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:15:45.608 [DEBUG] [Thread-846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:15:45.608 [DEBUG] [Thread-846] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:15:45.609 [DEBUG] [Thread-846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:15:45.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:15:45.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:15:45.664 [DEBUG] [Thread-846] [transport.py] [_log()] userauth is OK
2025-12-24T23:15:45.664 [DEBUG] [Thread-846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:15:45.664 [DEBUG] [Thread-846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:15:45.665 [DEBUG] [Thread-846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:15:45.665 [DEBUG] [Thread-846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:15:45.684 [INFO] [Thread-846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:15:45.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:15:45.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:15:46.464 [DEBUG] [Thread-846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:15:46.465 [DEBUG] [Thread-846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:15:46.517 [DEBUG] [Thread-846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:15:46.517 [DEBUG] [Thread-846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:15:46.527 [DEBUG] [Thread-846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:15:46.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:15:46.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:15:46.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
2025-12-24T23:15:46.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:15:46.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:15:46.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:15:46.573 [DEBUG] [Thread-846] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:15:54.959 [DEBUG] [Thread-848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:16:02.773 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:16:02.774 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:16:10.017 [DEBUG] [Thread-849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:16:15.294 [DEBUG] [Thread-850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:16:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:16:16.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:16:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:16:17.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 15, 49), 4.32, 75.29, 0.0, 27.31, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:16:17.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:15:49
2025-12-24T23:16:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:16:17.565 [DEBUG] [Thread-851] [transport.py] [_log()] starting thread (client mode): 0xb95b0df0
2025-12-24T23:16:17.565 [DEBUG] [Thread-851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:16:17.585 [DEBUG] [Thread-851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:16:17.585 [INFO] [Thread-851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:16:17.588 [DEBUG] [Thread-851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:16:17.589 [DEBUG] [Thread-851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:16:17.589 [DEBUG] [Thread-851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:16:17.589 [DEBUG] [Thread-851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:16:17.589 [DEBUG] [Thread-851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:16:17.589 [DEBUG] [Thread-851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:16:17.589 [DEBUG] [Thread-851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] client lang: <none>
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] server lang: <none>
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] kex follows: False
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] Compression: none
2025-12-24T23:16:17.590 [DEBUG] [Thread-851] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:16:17.607 [DEBUG] [Thread-851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:16:17.608 [DEBUG] [Thread-851] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:16:17.608 [DEBUG] [Thread-851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:16:17.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:16:17.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:16:17.610 [DEBUG] [Thread-851] [transport.py] [_log()] userauth is OK
2025-12-24T23:16:17.611 [DEBUG] [Thread-851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:16:17.611 [DEBUG] [Thread-851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:16:17.611 [DEBUG] [Thread-851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:16:17.611 [DEBUG] [Thread-851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:16:17.647 [INFO] [Thread-851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:16:17.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:16:18.280 [DEBUG] [Thread-851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:16:18.280 [DEBUG] [Thread-851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:16:18.281 [DEBUG] [Thread-851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:16:18.321 [DEBUG] [Thread-851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:16:18.321 [DEBUG] [Thread-851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:16:18.325 [DEBUG] [Thread-851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:16:18.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:16:18.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:16:18.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:16:18.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:16:18.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:16:18.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:16:18.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.885826 -999.00  +14.10  19.23     79  +10.60 1 1 1 1 1     0    0 3.02 -25.15 ZNESW 18.3 19.2 147.8 30.0 14.9 -20.4 14.8 -20.1 14.6 -18.8 14.9 -19.7
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.885826
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:16:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:15:49', tmtdew=4.32, humidity=75.29, cloud=0.0, wind=27.31, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:15:49', seeing=1.23, atlas_timestamp='2025-12-24T21:15:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.1357500000000016, 0.14575000000000138, 0.09549999999999947, 0.16350000000000087, 0.15575000000000117, 0.1324999999999985, 0.09925000000000139, 0.09049999999999869, 0.1120000000000001, 0.15724999999999945, 0.0860000000000003, 0.2010000000000005, 0.16024999999999956, 0.0990000000000002, 0.07749999999999879, 0.13824999999999932, 0.15850000000000009, 0.12399999999999878, 0.06325000000000003, 0.15649999999999942, 0.12074999999999747, 0.15325000000000166, 0.1172500000000003, 0.1789999999999985, 0.17400000000000126, 0.12024999999999864, 0.17350000000000065, 0.22100000000000009, 0.19500000000000028, 0.1960000000000015, 0.10300000000000153, 0.20374999999999943], zp_timestamp='2025-12-24T21:12:00')
2025-12-24T23:16:18.348 [DEBUG] [Thread-851] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:16:18.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:16:18.440 [DEBUG] [Thread-854] [transport.py] [_log()] starting thread (client mode): 0xb95b0910
2025-12-24T23:16:18.440 [DEBUG] [Thread-854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:16:18.454 [DEBUG] [Thread-854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:16:18.454 [INFO] [Thread-854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:16:18.462 [DEBUG] [Thread-854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:16:18.462 [DEBUG] [Thread-854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] client lang: <none>
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] server lang: <none>
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] kex follows: False
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] Compression: none
2025-12-24T23:16:18.463 [DEBUG] [Thread-854] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:16:18.520 [DEBUG] [Thread-854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:16:18.521 [DEBUG] [Thread-854] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:16:18.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:16:18.522 [DEBUG] [Thread-854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:16:18.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:16:18.587 [DEBUG] [Thread-854] [transport.py] [_log()] userauth is OK
2025-12-24T23:16:18.587 [DEBUG] [Thread-854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:16:18.588 [DEBUG] [Thread-854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:16:18.588 [DEBUG] [Thread-854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:16:18.588 [DEBUG] [Thread-854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:16:18.610 [INFO] [Thread-854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:16:18.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:16:18.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:16:19.375 [DEBUG] [Thread-854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:16:19.375 [DEBUG] [Thread-854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:16:19.423 [DEBUG] [Thread-854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:16:19.423 [DEBUG] [Thread-854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:16:19.432 [DEBUG] [Thread-854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:16:19.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:16:19.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:16:19.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:16:19.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:16:19.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:16:19.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:16:19.469 [DEBUG] [Thread-854] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:16:25.062 [DEBUG] [Thread-856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:16:40.135 [DEBUG] [Thread-857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:16:49.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:16:49.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:16:49.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:16:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 16, 21), 4.32, 75.29, 0.0, 26.61, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:16:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:16:21
2025-12-24T23:16:50.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:16:50.487 [DEBUG] [Thread-858] [transport.py] [_log()] starting thread (client mode): 0xb95b1210
2025-12-24T23:16:50.487 [DEBUG] [Thread-858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:16:50.509 [DEBUG] [Thread-858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:16:50.509 [INFO] [Thread-858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:16:50.512 [DEBUG] [Thread-858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:16:50.512 [DEBUG] [Thread-858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:16:50.512 [DEBUG] [Thread-858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:16:50.512 [DEBUG] [Thread-858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:16:50.512 [DEBUG] [Thread-858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:16:50.512 [DEBUG] [Thread-858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] client lang: <none>
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] server lang: <none>
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] kex follows: False
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] Compression: none
2025-12-24T23:16:50.513 [DEBUG] [Thread-858] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:16:50.531 [DEBUG] [Thread-858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:16:50.531 [DEBUG] [Thread-858] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:16:50.532 [DEBUG] [Thread-858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:16:50.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:16:50.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:16:50.534 [DEBUG] [Thread-858] [transport.py] [_log()] userauth is OK
2025-12-24T23:16:50.534 [DEBUG] [Thread-858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:16:50.534 [DEBUG] [Thread-858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:16:50.534 [DEBUG] [Thread-858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:16:50.534 [DEBUG] [Thread-858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:16:50.558 [INFO] [Thread-858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:16:50.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:16:51.198 [DEBUG] [Thread-858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:16:51.198 [DEBUG] [Thread-858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:16:51.198 [DEBUG] [Thread-858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:16:51.239 [DEBUG] [Thread-858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:16:51.239 [DEBUG] [Thread-858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:16:51.242 [DEBUG] [Thread-858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:16:51.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:16:51.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:16:51.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:16:51.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:16:51.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:16:51.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:16:51.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:16:51.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:16:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:16:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.886173 -999.00  +14.10  19.99     79  +10.60 1 1 1 1 1     0    0 3.01 -26.00 ZNESW 20.9 20.0 151.9 25.7 14.9 -20.5 14.8 -20.0 14.6 -18.7 14.9 -19.8
2025-12-24T23:16:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:16:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:16:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.886173
2025-12-24T23:16:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:16:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:16:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:16:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:16:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:16:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:16:21', tmtdew=4.32, humidity=75.29, cloud=0.0, wind=26.61, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:16:21', seeing=1.23, atlas_timestamp='2025-12-24T21:16:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:15:00')
2025-12-24T23:16:51.269 [DEBUG] [Thread-858] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:16:51.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:16:51.371 [DEBUG] [Thread-861] [transport.py] [_log()] starting thread (client mode): 0xb9591810
2025-12-24T23:16:51.371 [DEBUG] [Thread-861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:16:51.385 [DEBUG] [Thread-861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:16:51.386 [INFO] [Thread-861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:16:51.393 [DEBUG] [Thread-861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:16:51.393 [DEBUG] [Thread-861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:16:51.394 [DEBUG] [Thread-861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:16:51.394 [DEBUG] [Thread-861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:16:51.394 [DEBUG] [Thread-861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:16:51.394 [DEBUG] [Thread-861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:16:51.394 [DEBUG] [Thread-861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:16:51.394 [DEBUG] [Thread-861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:16:51.394 [DEBUG] [Thread-861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:16:51.394 [DEBUG] [Thread-861] [transport.py] [_log()] client lang: <none>
2025-12-24T23:16:51.395 [DEBUG] [Thread-861] [transport.py] [_log()] server lang: <none>
2025-12-24T23:16:51.395 [DEBUG] [Thread-861] [transport.py] [_log()] kex follows: False
2025-12-24T23:16:51.395 [DEBUG] [Thread-861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:16:51.395 [DEBUG] [Thread-861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:16:51.395 [DEBUG] [Thread-861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:16:51.395 [DEBUG] [Thread-861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:16:51.395 [DEBUG] [Thread-861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:16:51.396 [DEBUG] [Thread-861] [transport.py] [_log()] Compression: none
2025-12-24T23:16:51.396 [DEBUG] [Thread-861] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:16:51.453 [DEBUG] [Thread-861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:16:51.454 [DEBUG] [Thread-861] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:16:51.455 [DEBUG] [Thread-861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:16:51.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:16:51.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:16:51.513 [DEBUG] [Thread-861] [transport.py] [_log()] userauth is OK
2025-12-24T23:16:51.513 [DEBUG] [Thread-861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:16:51.514 [DEBUG] [Thread-861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:16:51.514 [DEBUG] [Thread-861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:16:51.514 [DEBUG] [Thread-861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:16:51.535 [INFO] [Thread-861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:16:51.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:16:51.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:16:52.308 [DEBUG] [Thread-861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:16:52.309 [DEBUG] [Thread-861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:16:52.357 [DEBUG] [Thread-861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:16:52.357 [DEBUG] [Thread-861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:16:52.366 [DEBUG] [Thread-861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:16:52.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:16:52.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:16:52.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:16:52.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:16:52.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:16:52.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:16:52.401 [DEBUG] [Thread-861] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:16:55.170 [DEBUG] [Thread-863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:17:02.973 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:17:02.974 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:17:10.229 [DEBUG] [Thread-864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:17:15.363 [DEBUG] [Thread-865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:17:22.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:17:22.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:17:22.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:17:23.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 16, 53), 4.38, 75.26, 0.0, 26.64, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:17:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:16:53
2025-12-24T23:17:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:17:23.456 [DEBUG] [Thread-866] [transport.py] [_log()] starting thread (client mode): 0xb955b8e0
2025-12-24T23:17:23.456 [DEBUG] [Thread-866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:17:23.475 [DEBUG] [Thread-866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:17:23.475 [INFO] [Thread-866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] client lang: <none>
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] server lang: <none>
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] kex follows: False
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] Compression: none
2025-12-24T23:17:23.477 [DEBUG] [Thread-866] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:17:23.486 [DEBUG] [Thread-866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:17:23.486 [DEBUG] [Thread-866] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:17:23.486 [DEBUG] [Thread-866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:17:23.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:17:23.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:17:23.487 [DEBUG] [Thread-866] [transport.py] [_log()] userauth is OK
2025-12-24T23:17:23.487 [DEBUG] [Thread-866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:17:23.487 [DEBUG] [Thread-866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:17:23.487 [DEBUG] [Thread-866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:17:23.487 [DEBUG] [Thread-866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:17:23.496 [INFO] [Thread-866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:17:23.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:17:24.136 [DEBUG] [Thread-866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:17:24.137 [DEBUG] [Thread-866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:17:24.137 [DEBUG] [Thread-866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:17:24.178 [DEBUG] [Thread-866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:17:24.178 [DEBUG] [Thread-866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:17:24.180 [DEBUG] [Thread-866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:17:24.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:17:24.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:17:24.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:17:24.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:17:24.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:17:24.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:17:24.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.886520 -999.00  +14.10  18.08     79  +10.60 1 1 1 1 1     0    0 3.02 -25.87 ZNESW 16.3 18.1 153.8 31.0 14.9 -20.6 14.8 -20.0 14.6 -18.7 14.9 -19.8
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.886520
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:17:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:17:24.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:16:53', tmtdew=4.38, humidity=75.26, cloud=0.0, wind=26.64, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:16:53', seeing=1.32, atlas_timestamp='2025-12-24T21:16:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:15:00')
2025-12-24T23:17:24.191 [DEBUG] [Thread-866] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:17:24.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:17:24.287 [DEBUG] [Thread-869] [transport.py] [_log()] starting thread (client mode): 0xb95b1900
2025-12-24T23:17:24.287 [DEBUG] [Thread-869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:17:24.304 [DEBUG] [Thread-869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:17:24.304 [INFO] [Thread-869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] client lang: <none>
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] server lang: <none>
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] kex follows: False
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] Compression: none
2025-12-24T23:17:24.314 [DEBUG] [Thread-869] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:17:24.372 [DEBUG] [Thread-869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:17:24.372 [DEBUG] [Thread-869] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:17:24.372 [DEBUG] [Thread-869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:17:24.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:17:24.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:17:24.435 [DEBUG] [Thread-869] [transport.py] [_log()] userauth is OK
2025-12-24T23:17:24.435 [DEBUG] [Thread-869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:17:24.435 [DEBUG] [Thread-869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:17:24.435 [DEBUG] [Thread-869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:17:24.435 [DEBUG] [Thread-869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:17:24.449 [INFO] [Thread-869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:17:24.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:17:24.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:17:25.270 [DEBUG] [Thread-869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:17:25.271 [DEBUG] [Thread-871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:17:25.272 [DEBUG] [Thread-869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:17:25.318 [DEBUG] [Thread-869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:17:25.318 [DEBUG] [Thread-869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:17:25.327 [DEBUG] [Thread-869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:17:25.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:17:25.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:17:25.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:17:25.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:17:25.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:17:25.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:17:25.367 [DEBUG] [Thread-869] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:17:40.345 [DEBUG] [Thread-872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:17:55.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:17:55.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:17:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:17:55.394 [DEBUG] [Thread-873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:17:56.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 17, 25), 4.38, 75.27, 0.0, 26.84, 14.23, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:17:56.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:17:25
2025-12-24T23:17:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:17:56.389 [DEBUG] [Thread-874] [transport.py] [_log()] starting thread (client mode): 0xb955b1c0
2025-12-24T23:17:56.389 [DEBUG] [Thread-874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:17:56.410 [DEBUG] [Thread-874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:17:56.410 [INFO] [Thread-874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:17:56.413 [DEBUG] [Thread-874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:17:56.413 [DEBUG] [Thread-874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] client lang: <none>
2025-12-24T23:17:56.414 [DEBUG] [Thread-874] [transport.py] [_log()] server lang: <none>
2025-12-24T23:17:56.415 [DEBUG] [Thread-874] [transport.py] [_log()] kex follows: False
2025-12-24T23:17:56.415 [DEBUG] [Thread-874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:17:56.415 [DEBUG] [Thread-874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:17:56.415 [DEBUG] [Thread-874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:17:56.415 [DEBUG] [Thread-874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:17:56.415 [DEBUG] [Thread-874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:17:56.415 [DEBUG] [Thread-874] [transport.py] [_log()] Compression: none
2025-12-24T23:17:56.415 [DEBUG] [Thread-874] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:17:56.433 [DEBUG] [Thread-874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:17:56.433 [DEBUG] [Thread-874] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:17:56.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:17:56.434 [DEBUG] [Thread-874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:17:56.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:17:56.436 [DEBUG] [Thread-874] [transport.py] [_log()] userauth is OK
2025-12-24T23:17:56.436 [DEBUG] [Thread-874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:17:56.436 [DEBUG] [Thread-874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:17:56.437 [DEBUG] [Thread-874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:17:56.437 [DEBUG] [Thread-874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:17:56.471 [INFO] [Thread-874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:17:56.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:17:57.123 [DEBUG] [Thread-874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:17:57.123 [DEBUG] [Thread-874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:17:57.124 [DEBUG] [Thread-874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:17:57.164 [DEBUG] [Thread-874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:17:57.164 [DEBUG] [Thread-874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:17:57.168 [DEBUG] [Thread-874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:17:57.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:17:57.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:17:57.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:17:57.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:17:57.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:17:57.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:17:57.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:17:57.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:17:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:17:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.886867 -999.00  +14.10  24.65     79  +10.60 1 1 1 1 1     0    0 3.01 -24.79 ZNESW 19.3 24.6 154.4 29.9 14.9 -20.7 14.8 -20.2 14.6 -18.8 14.9 -19.7
2025-12-24T23:17:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:17:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:17:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.886867
2025-12-24T23:17:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:17:57.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:17:57.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:17:57.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:17:57.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:17:57.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:17:25', tmtdew=4.38, humidity=75.27, cloud=0.0, wind=26.84, temperature=14.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:17:25', seeing=1.54, atlas_timestamp='2025-12-24T21:17:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:15:00')
2025-12-24T23:17:57.193 [DEBUG] [Thread-874] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:17:57.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:17:57.295 [DEBUG] [Thread-877] [transport.py] [_log()] starting thread (client mode): 0xb95463b0
2025-12-24T23:17:57.295 [DEBUG] [Thread-877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:17:57.310 [DEBUG] [Thread-877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:17:57.310 [INFO] [Thread-877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:17:57.317 [DEBUG] [Thread-877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:17:57.318 [DEBUG] [Thread-877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:17:57.318 [DEBUG] [Thread-877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:17:57.318 [DEBUG] [Thread-877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:17:57.318 [DEBUG] [Thread-877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:17:57.318 [DEBUG] [Thread-877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:17:57.318 [DEBUG] [Thread-877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:17:57.318 [DEBUG] [Thread-877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:17:57.318 [DEBUG] [Thread-877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] client lang: <none>
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] server lang: <none>
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] kex follows: False
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] Compression: none
2025-12-24T23:17:57.319 [DEBUG] [Thread-877] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:17:57.382 [DEBUG] [Thread-877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:17:57.382 [DEBUG] [Thread-877] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:17:57.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:17:57.384 [DEBUG] [Thread-877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:17:57.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:17:57.438 [DEBUG] [Thread-877] [transport.py] [_log()] userauth is OK
2025-12-24T23:17:57.438 [DEBUG] [Thread-877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:17:57.438 [DEBUG] [Thread-877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:17:57.439 [DEBUG] [Thread-877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:17:57.439 [DEBUG] [Thread-877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:17:57.457 [INFO] [Thread-877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:17:57.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:17:57.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:17:58.262 [DEBUG] [Thread-877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:17:58.263 [DEBUG] [Thread-877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:17:58.310 [DEBUG] [Thread-877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:17:58.310 [DEBUG] [Thread-877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:17:58.318 [DEBUG] [Thread-877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:17:58.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:17:58.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:17:58.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:17:58.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:17:58.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:17:58.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:17:58.350 [DEBUG] [Thread-877] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:18:03.175 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:18:03.176 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:18:10.431 [DEBUG] [Thread-879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:18:15.430 [DEBUG] [Thread-880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:18:25.503 [DEBUG] [Thread-881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:18:28.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:18:28.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:18:28.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
2025-12-24T23:18:29.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 17, 57), 4.38, 75.27, 0.0, 28.87, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:18:29.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:17:57
2025-12-24T23:18:29.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:18:29.344 [DEBUG] [Thread-882] [transport.py] [_log()] starting thread (client mode): 0xb9593340
2025-12-24T23:18:29.344 [DEBUG] [Thread-882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:18:29.365 [DEBUG] [Thread-882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:18:29.365 [INFO] [Thread-882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:18:29.367 [DEBUG] [Thread-882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:18:29.367 [DEBUG] [Thread-882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:18:29.367 [DEBUG] [Thread-882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:18:29.367 [DEBUG] [Thread-882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:18:29.367 [DEBUG] [Thread-882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:18:29.367 [DEBUG] [Thread-882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:18:29.367 [DEBUG] [Thread-882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] client lang: <none>
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] server lang: <none>
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] kex follows: False
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] Compression: none
2025-12-24T23:18:29.368 [DEBUG] [Thread-882] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:18:29.377 [DEBUG] [Thread-882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:18:29.377 [DEBUG] [Thread-882] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:18:29.378 [DEBUG] [Thread-882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:18:29.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:18:29.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:18:29.422 [DEBUG] [Thread-882] [transport.py] [_log()] userauth is OK
2025-12-24T23:18:29.422 [DEBUG] [Thread-882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:18:29.423 [DEBUG] [Thread-882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:18:29.423 [DEBUG] [Thread-882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:18:29.423 [DEBUG] [Thread-882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:18:29.436 [INFO] [Thread-882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:18:29.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:18:30.120 [DEBUG] [Thread-882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:18:30.120 [DEBUG] [Thread-882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:18:30.120 [DEBUG] [Thread-882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:18:30.161 [DEBUG] [Thread-882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:18:30.161 [DEBUG] [Thread-882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:18:30.163 [DEBUG] [Thread-882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:18:30.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:18:30.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:18:30.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:18:30.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:18:30.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:18:30.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:18:30.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.887215 -999.00  +14.10  20.76     79  +10.60 1 1 1 1 1     0    0 3.01 -24.23 ZNESW 20.3 20.8 158.8 27.0 14.9 -20.6 14.7 -20.2 14.6 -18.8 14.9 -19.6
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.887215
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:18:30.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:17:57', tmtdew=4.38, humidity=75.27, cloud=0.0, wind=28.87, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:17:57', seeing=1.85, atlas_timestamp='2025-12-24T21:17:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:15:00')
2025-12-24T23:18:30.184 [DEBUG] [Thread-882] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:18:30.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:18:30.277 [DEBUG] [Thread-885] [transport.py] [_log()] starting thread (client mode): 0xb95914b0
2025-12-24T23:18:30.277 [DEBUG] [Thread-885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:18:30.292 [DEBUG] [Thread-885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:18:30.292 [INFO] [Thread-885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:18:30.301 [DEBUG] [Thread-885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] client lang: <none>
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] server lang: <none>
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] kex follows: False
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] Compression: none
2025-12-24T23:18:30.302 [DEBUG] [Thread-885] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:18:30.361 [DEBUG] [Thread-885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:18:30.361 [DEBUG] [Thread-885] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:18:30.361 [DEBUG] [Thread-885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:18:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:18:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:18:30.417 [DEBUG] [Thread-885] [transport.py] [_log()] userauth is OK
2025-12-24T23:18:30.417 [DEBUG] [Thread-885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:18:30.417 [DEBUG] [Thread-885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:18:30.417 [DEBUG] [Thread-885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:18:30.418 [DEBUG] [Thread-885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:18:30.431 [INFO] [Thread-885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:18:30.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:18:30.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:18:31.264 [DEBUG] [Thread-885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:18:31.264 [DEBUG] [Thread-885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:18:31.311 [DEBUG] [Thread-885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:18:31.311 [DEBUG] [Thread-885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:18:31.320 [DEBUG] [Thread-885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:18:31.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:18:31.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:18:31.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
2025-12-24T23:18:31.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:18:31.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:18:31.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:18:31.353 [DEBUG] [Thread-885] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:18:40.540 [DEBUG] [Thread-887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:18:55.600 [DEBUG] [Thread-888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:19:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:19:01.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:19:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:19:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 18, 29), 4.37, 75.29, 0.0, 27.7, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:19:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:18:29
2025-12-24T23:19:02.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:19:02.363 [DEBUG] [Thread-889] [transport.py] [_log()] starting thread (client mode): 0xb9591330
2025-12-24T23:19:02.363 [DEBUG] [Thread-889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:19:02.383 [DEBUG] [Thread-889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:19:02.383 [INFO] [Thread-889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] client lang: <none>
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] server lang: <none>
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] kex follows: False
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] Compression: none
2025-12-24T23:19:02.386 [DEBUG] [Thread-889] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:19:02.404 [DEBUG] [Thread-889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:19:02.404 [DEBUG] [Thread-889] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:19:02.404 [DEBUG] [Thread-889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:19:02.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:19:02.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:19:02.405 [DEBUG] [Thread-889] [transport.py] [_log()] userauth is OK
2025-12-24T23:19:02.405 [DEBUG] [Thread-889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:19:02.405 [DEBUG] [Thread-889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:19:02.405 [DEBUG] [Thread-889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:19:02.405 [DEBUG] [Thread-889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:19:02.415 [INFO] [Thread-889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:19:02.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:19:03.065 [DEBUG] [Thread-889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:19:03.065 [DEBUG] [Thread-889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:19:03.065 [DEBUG] [Thread-889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:19:03.107 [DEBUG] [Thread-889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:19:03.107 [DEBUG] [Thread-889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:19:03.109 [DEBUG] [Thread-889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:19:03.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:19:03.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:19:03.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:19:03.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:19:03.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:19:03.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:19:03.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:19:03.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:19:03.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:19:03.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.887909 -999.00  +14.10  21.70     79  +10.50 1 1 1 1 1     0    0 2.97 -24.97 ZNESW 16.0 21.7 144.4 31.6 14.8 -20.5 14.7 -20.0 14.6 -18.9 14.8 -19.7
2025-12-24T23:19:03.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:19:03.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:19:03.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.887909
2025-12-24T23:19:03.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:19:03.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:19:03.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:19:03.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:19:03.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:19:03.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:18:29', tmtdew=4.37, humidity=75.29, cloud=0.0, wind=27.7, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:18:30', seeing=1.7, atlas_timestamp='2025-12-24T21:18:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:15:00')
2025-12-24T23:19:03.129 [DEBUG] [Thread-889] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:19:03.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:19:03.221 [DEBUG] [Thread-892] [transport.py] [_log()] starting thread (client mode): 0xb95b2f80
2025-12-24T23:19:03.221 [DEBUG] [Thread-892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:19:03.238 [DEBUG] [Thread-892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:19:03.238 [INFO] [Thread-892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] client lang: <none>
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] server lang: <none>
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] kex follows: False
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] Compression: none
2025-12-24T23:19:03.246 [DEBUG] [Thread-892] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:19:03.305 [DEBUG] [Thread-892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:19:03.305 [DEBUG] [Thread-892] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:19:03.306 [DEBUG] [Thread-892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:19:03.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:19:03.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:19:03.362 [DEBUG] [Thread-892] [transport.py] [_log()] userauth is OK
2025-12-24T23:19:03.362 [DEBUG] [Thread-892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:19:03.362 [DEBUG] [Thread-892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:19:03.362 [DEBUG] [Thread-892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:19:03.362 [DEBUG] [Thread-892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:19:03.377 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:19:03.377 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:19:03.379 [INFO] [Thread-892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:19:03.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:19:03.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:19:04.201 [DEBUG] [Thread-892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:19:04.202 [DEBUG] [Thread-892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:19:04.249 [DEBUG] [Thread-892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:19:04.249 [DEBUG] [Thread-892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:19:04.258 [DEBUG] [Thread-892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:19:04.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:19:04.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:19:04.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
2025-12-24T23:19:04.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:19:04.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:19:04.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:19:04.296 [DEBUG] [Thread-892] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:19:10.642 [DEBUG] [Thread-894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:19:15.503 [DEBUG] [Thread-895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:19:25.704 [DEBUG] [Thread-896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:19:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:19:34.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:19:34.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:19:35.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 19, 1), 4.38, 75.24, 0.0, 27.47, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:19:35.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:19:01
2025-12-24T23:19:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:19:35.385 [DEBUG] [Thread-897] [transport.py] [_log()] starting thread (client mode): 0xb95b1450
2025-12-24T23:19:35.385 [DEBUG] [Thread-897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:19:35.405 [DEBUG] [Thread-897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:19:35.405 [INFO] [Thread-897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] client lang: <none>
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] server lang: <none>
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] kex follows: False
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:19:35.408 [DEBUG] [Thread-897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:19:35.409 [DEBUG] [Thread-897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:19:35.409 [DEBUG] [Thread-897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:19:35.409 [DEBUG] [Thread-897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:19:35.409 [DEBUG] [Thread-897] [transport.py] [_log()] Compression: none
2025-12-24T23:19:35.409 [DEBUG] [Thread-897] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:19:35.427 [DEBUG] [Thread-897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:19:35.427 [DEBUG] [Thread-897] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:19:35.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:19:35.427 [DEBUG] [Thread-897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:19:35.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:19:35.428 [DEBUG] [Thread-897] [transport.py] [_log()] userauth is OK
2025-12-24T23:19:35.428 [DEBUG] [Thread-897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:19:35.428 [DEBUG] [Thread-897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:19:35.428 [DEBUG] [Thread-897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:19:35.428 [DEBUG] [Thread-897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:19:35.438 [INFO] [Thread-897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:19:35.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:19:36.196 [DEBUG] [Thread-897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:19:36.196 [DEBUG] [Thread-897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:19:36.197 [DEBUG] [Thread-897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:19:36.237 [DEBUG] [Thread-897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:19:36.238 [DEBUG] [Thread-897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:19:36.241 [DEBUG] [Thread-897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:19:36.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:19:36.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:19:36.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:19:36.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:19:36.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:19:36.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:19:36.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:19:36.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:19:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:19:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.888256 -999.00  +14.10  26.82     79  +10.60 1 1 1 1 1     0    0 2.93 -25.26 ZNESW 29.2 26.8 150.6 30.5 14.8 -20.6 14.7 -20.1 14.5 -18.8 14.8 -20.0
2025-12-24T23:19:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:19:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:19:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.888256
2025-12-24T23:19:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:19:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:19:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:19:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:19:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:19:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:19:01', tmtdew=4.38, humidity=75.24, cloud=0.0, wind=27.47, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:19:34', seeing=1.57, atlas_timestamp='2025-12-24T21:19:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:18:00')
2025-12-24T23:19:36.269 [DEBUG] [Thread-897] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:19:36.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:19:36.374 [DEBUG] [Thread-900] [transport.py] [_log()] starting thread (client mode): 0xb9579c60
2025-12-24T23:19:36.374 [DEBUG] [Thread-900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:19:36.388 [DEBUG] [Thread-900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:19:36.388 [INFO] [Thread-900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:19:36.395 [DEBUG] [Thread-900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] client lang: <none>
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] server lang: <none>
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] kex follows: False
2025-12-24T23:19:36.396 [DEBUG] [Thread-900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:19:36.397 [DEBUG] [Thread-900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:19:36.397 [DEBUG] [Thread-900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:19:36.397 [DEBUG] [Thread-900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:19:36.397 [DEBUG] [Thread-900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:19:36.397 [DEBUG] [Thread-900] [transport.py] [_log()] Compression: none
2025-12-24T23:19:36.397 [DEBUG] [Thread-900] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:19:36.455 [DEBUG] [Thread-900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:19:36.455 [DEBUG] [Thread-900] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:19:36.456 [DEBUG] [Thread-900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:19:36.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:19:36.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:19:36.510 [DEBUG] [Thread-900] [transport.py] [_log()] userauth is OK
2025-12-24T23:19:36.511 [DEBUG] [Thread-900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:19:36.511 [DEBUG] [Thread-900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:19:36.511 [DEBUG] [Thread-900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:19:36.511 [DEBUG] [Thread-900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:19:36.530 [INFO] [Thread-900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:19:36.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:19:36.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:19:37.408 [DEBUG] [Thread-900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:19:37.408 [DEBUG] [Thread-900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:19:37.456 [DEBUG] [Thread-900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:19:37.457 [DEBUG] [Thread-900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:19:37.466 [DEBUG] [Thread-900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:19:37.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:19:37.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')
2025-12-24T23:19:37.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:19:37.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:19:37.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:19:37.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:19:37.503 [DEBUG] [Thread-900] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:19:40.747 [DEBUG] [Thread-902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:19:55.819 [DEBUG] [Thread-903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:20:03.579 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:20:03.580 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:20:07.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:20:07.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:20:07.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:20:08.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 19, 33), 4.42, 74.71, 0.0, 32.81, 14.5, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:20:08.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:19:33
2025-12-24T23:20:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:20:08.531 [DEBUG] [Thread-904] [transport.py] [_log()] starting thread (client mode): 0xb955ac80
2025-12-24T23:20:08.531 [DEBUG] [Thread-904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:20:08.551 [DEBUG] [Thread-904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:20:08.551 [INFO] [Thread-904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:20:08.554 [DEBUG] [Thread-904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] client lang: <none>
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] server lang: <none>
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] kex follows: False
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] Compression: none
2025-12-24T23:20:08.555 [DEBUG] [Thread-904] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:20:08.572 [DEBUG] [Thread-904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:20:08.573 [DEBUG] [Thread-904] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:20:08.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:20:08.574 [DEBUG] [Thread-904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:20:08.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:20:08.576 [DEBUG] [Thread-904] [transport.py] [_log()] userauth is OK
2025-12-24T23:20:08.577 [DEBUG] [Thread-904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:20:08.577 [DEBUG] [Thread-904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:20:08.577 [DEBUG] [Thread-904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:20:08.577 [DEBUG] [Thread-904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:20:08.613 [INFO] [Thread-904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:20:08.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:20:09.560 [DEBUG] [Thread-904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:20:09.561 [DEBUG] [Thread-904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:20:09.561 [DEBUG] [Thread-904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:20:09.601 [DEBUG] [Thread-904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:20:09.601 [DEBUG] [Thread-904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:20:09.605 [DEBUG] [Thread-904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:20:09.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:20:09.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:20:09.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:20:09.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:20:09.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:20:09.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:20:09.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:20:09.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:20:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:20:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.888603 -999.00  +14.00  25.94     80  +10.60 1 1 1 2 1     0    0 2.92 -27.43 ZNESW 22.4 25.9 149.0 38.9 14.8 -20.5 14.7 -20.2 14.5 -18.9 14.8 -19.8
2025-12-24T23:20:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:20:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:20:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.888603
2025-12-24T23:20:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:20:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:20:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:20:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:20:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:20:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:19:33', tmtdew=4.42, humidity=74.71, cloud=0.0, wind=32.81, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:20:06', seeing=1.57, atlas_timestamp='2025-12-24T21:19:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:18:00')
2025-12-24T23:20:09.647 [DEBUG] [Thread-904] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:20:09.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:20:09.749 [DEBUG] [Thread-907] [transport.py] [_log()] starting thread (client mode): 0xb955bee0
2025-12-24T23:20:09.749 [DEBUG] [Thread-907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:20:09.764 [DEBUG] [Thread-907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:20:09.764 [INFO] [Thread-907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:20:09.771 [DEBUG] [Thread-907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] client lang: <none>
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] server lang: <none>
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] kex follows: False
2025-12-24T23:20:09.772 [DEBUG] [Thread-907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:20:09.773 [DEBUG] [Thread-907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:20:09.773 [DEBUG] [Thread-907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:20:09.773 [DEBUG] [Thread-907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:20:09.773 [DEBUG] [Thread-907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:20:09.773 [DEBUG] [Thread-907] [transport.py] [_log()] Compression: none
2025-12-24T23:20:09.773 [DEBUG] [Thread-907] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:20:09.831 [DEBUG] [Thread-907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:20:09.831 [DEBUG] [Thread-907] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:20:09.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:20:09.832 [DEBUG] [Thread-907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:20:09.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:20:09.886 [DEBUG] [Thread-907] [transport.py] [_log()] userauth is OK
2025-12-24T23:20:09.887 [DEBUG] [Thread-907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:20:09.887 [DEBUG] [Thread-907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:20:09.887 [DEBUG] [Thread-907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:20:09.887 [DEBUG] [Thread-907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:20:09.911 [INFO] [Thread-907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:20:09.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:20:09.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:20:10.759 [DEBUG] [Thread-907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:20:10.760 [DEBUG] [Thread-907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:20:10.808 [DEBUG] [Thread-907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:20:10.809 [DEBUG] [Thread-907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:20:10.818 [DEBUG] [Thread-907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:20:10.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:20:10.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:20:10.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:20:10.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:20:10.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:20:10.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:20:10.855 [DEBUG] [Thread-907] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:20:10.861 [DEBUG] [Thread-909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:20:15.573 [DEBUG] [Thread-910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:20:25.930 [DEBUG] [Thread-911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:20:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:20:40.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:20:40.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:20:40.965 [DEBUG] [Thread-912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:20:41.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 20, 37), 4.17, 76.04, 0.0, 34.69, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:20:41.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:20:37
2025-12-24T23:20:41.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:20:41.863 [DEBUG] [Thread-913] [transport.py] [_log()] starting thread (client mode): 0xb955b8e0
2025-12-24T23:20:41.863 [DEBUG] [Thread-913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:20:41.887 [DEBUG] [Thread-913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:20:41.887 [INFO] [Thread-913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] client lang: <none>
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] server lang: <none>
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] kex follows: False
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:20:41.889 [DEBUG] [Thread-913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:20:41.890 [DEBUG] [Thread-913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:20:41.890 [DEBUG] [Thread-913] [transport.py] [_log()] Compression: none
2025-12-24T23:20:41.890 [DEBUG] [Thread-913] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:20:41.904 [DEBUG] [Thread-913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:20:41.904 [DEBUG] [Thread-913] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:20:41.905 [DEBUG] [Thread-913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:20:41.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:20:41.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:20:41.907 [DEBUG] [Thread-913] [transport.py] [_log()] userauth is OK
2025-12-24T23:20:41.907 [DEBUG] [Thread-913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:20:41.907 [DEBUG] [Thread-913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:20:41.907 [DEBUG] [Thread-913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:20:41.907 [DEBUG] [Thread-913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:20:41.933 [INFO] [Thread-913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:20:41.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:20:42.747 [DEBUG] [Thread-913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:20:42.748 [DEBUG] [Thread-913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:20:42.748 [DEBUG] [Thread-913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:20:42.789 [DEBUG] [Thread-913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:20:42.789 [DEBUG] [Thread-913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:20:42.793 [DEBUG] [Thread-913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:20:42.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:20:42.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:20:42.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:20:42.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:20:42.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:20:42.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:20:42.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:20:42.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:20:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:20:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.888950 -999.00  +14.00  25.36     80  +10.60 1 1 1 2 1     0    0 2.83 -27.96 ZNESW 30.9 25.4 168.4 40.6 14.8 -20.6 14.7 -20.2 14.5 -18.8 14.8 -19.8
2025-12-24T23:20:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:20:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:20:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.888950
2025-12-24T23:20:42.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:20:42.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:20:42.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:20:42.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:20:42.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:20:42.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:20:37', tmtdew=4.17, humidity=76.04, cloud=0.0, wind=34.69, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:20:38', seeing=1.47, atlas_timestamp='2025-12-24T21:20:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:18:00')
2025-12-24T23:20:42.822 [DEBUG] [Thread-913] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:20:42.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:20:42.925 [DEBUG] [Thread-916] [transport.py] [_log()] starting thread (client mode): 0xb9593880
2025-12-24T23:20:42.925 [DEBUG] [Thread-916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:20:42.945 [DEBUG] [Thread-916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:20:42.945 [INFO] [Thread-916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:20:42.955 [DEBUG] [Thread-916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:20:42.955 [DEBUG] [Thread-916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] client lang: <none>
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] server lang: <none>
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] kex follows: False
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:20:42.956 [DEBUG] [Thread-916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:20:42.957 [DEBUG] [Thread-916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:20:42.957 [DEBUG] [Thread-916] [transport.py] [_log()] Compression: none
2025-12-24T23:20:42.957 [DEBUG] [Thread-916] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:20:43.017 [DEBUG] [Thread-916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:20:43.018 [DEBUG] [Thread-916] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:20:43.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:20:43.019 [DEBUG] [Thread-916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:20:43.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:20:43.082 [DEBUG] [Thread-916] [transport.py] [_log()] userauth is OK
2025-12-24T23:20:43.082 [DEBUG] [Thread-916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:20:43.082 [DEBUG] [Thread-916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:20:43.082 [DEBUG] [Thread-916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:20:43.083 [DEBUG] [Thread-916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:20:43.104 [INFO] [Thread-916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:20:43.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:20:43.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:20:43.915 [DEBUG] [Thread-916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:20:43.915 [DEBUG] [Thread-916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:20:43.963 [DEBUG] [Thread-916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:20:43.964 [DEBUG] [Thread-916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:20:43.973 [DEBUG] [Thread-916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:20:43.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:20:43.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:20:43.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:20:44.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:20:44.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:20:44.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:20:44.008 [DEBUG] [Thread-916] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:20:56.005 [DEBUG] [Thread-918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:21:03.783 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:21:03.784 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:21:11.082 [DEBUG] [Thread-919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:21:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:21:14.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:21:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:21:14.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 21, 9), 4.15, 76.14, 0.0, 34.94, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:21:14.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:21:09
2025-12-24T23:21:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:21:15.039 [DEBUG] [Thread-920] [transport.py] [_log()] starting thread (client mode): 0xb95d7430
2025-12-24T23:21:15.039 [DEBUG] [Thread-920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:21:15.060 [DEBUG] [Thread-920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:21:15.060 [INFO] [Thread-920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] client lang: <none>
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] server lang: <none>
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] kex follows: False
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] Compression: none
2025-12-24T23:21:15.064 [DEBUG] [Thread-920] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:21:15.079 [DEBUG] [Thread-920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:21:15.079 [DEBUG] [Thread-920] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:21:15.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:21:15.080 [DEBUG] [Thread-920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:21:15.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:21:15.080 [DEBUG] [Thread-920] [transport.py] [_log()] userauth is OK
2025-12-24T23:21:15.080 [DEBUG] [Thread-920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:21:15.080 [DEBUG] [Thread-920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:21:15.080 [DEBUG] [Thread-920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:21:15.080 [DEBUG] [Thread-920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:21:15.090 [INFO] [Thread-920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:21:15.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:21:15.625 [DEBUG] [Thread-922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:21:15.738 [DEBUG] [Thread-920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:21:15.738 [DEBUG] [Thread-920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:21:15.738 [DEBUG] [Thread-920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:21:15.778 [DEBUG] [Thread-920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:21:15.779 [DEBUG] [Thread-920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:21:15.780 [DEBUG] [Thread-920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:21:15.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:21:15.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:21:15.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:21:15.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:21:15.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:21:15.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:21:15.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.889298 -999.00  +14.00  26.16     80  +10.60 1 1 1 2 1     0    0 2.73 -30.65 ZNESW 20.4 26.2 166.0 35.6 14.8 -20.5 14.7 -20.0 14.4 -18.8 14.8 -19.8
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.889298
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:21:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:21:15.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:21:15.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:21:15.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:21:09', tmtdew=4.15, humidity=76.14, cloud=0.0, wind=34.94, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:21:10', seeing=1.48, atlas_timestamp='2025-12-24T21:20:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:18:00')
2025-12-24T23:21:15.797 [DEBUG] [Thread-920] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:21:15.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:21:15.890 [DEBUG] [Thread-924] [transport.py] [_log()] starting thread (client mode): 0xb95b1240
2025-12-24T23:21:15.890 [DEBUG] [Thread-924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:21:15.905 [DEBUG] [Thread-924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:21:15.905 [INFO] [Thread-924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] client lang: <none>
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] server lang: <none>
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] kex follows: False
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:21:15.912 [DEBUG] [Thread-924] [transport.py] [_log()] Compression: none
2025-12-24T23:21:15.913 [DEBUG] [Thread-924] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:21:15.969 [DEBUG] [Thread-924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:21:15.970 [DEBUG] [Thread-924] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:21:15.970 [DEBUG] [Thread-924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:21:15.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:21:15.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:21:16.027 [DEBUG] [Thread-924] [transport.py] [_log()] userauth is OK
2025-12-24T23:21:16.027 [DEBUG] [Thread-924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:21:16.027 [DEBUG] [Thread-924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:21:16.027 [DEBUG] [Thread-924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:21:16.027 [DEBUG] [Thread-924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:21:16.040 [INFO] [Thread-924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:21:16.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:21:16.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:21:16.871 [DEBUG] [Thread-924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:21:16.871 [DEBUG] [Thread-924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:21:16.918 [DEBUG] [Thread-924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:21:16.918 [DEBUG] [Thread-924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:21:16.927 [DEBUG] [Thread-924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:21:16.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:21:16.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:21:16.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:21:16.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:21:16.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:21:16.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:21:16.958 [DEBUG] [Thread-924] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:21:26.117 [DEBUG] [Thread-926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:21:41.194 [DEBUG] [Thread-927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:21:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:21:46.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:21:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:21:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 21, 42), 4.14, 76.2, 0.0, 28.65, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:21:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:21:42
2025-12-24T23:21:47.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:21:47.978 [DEBUG] [Thread-928] [transport.py] [_log()] starting thread (client mode): 0xb95934c0
2025-12-24T23:21:47.979 [DEBUG] [Thread-928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:21:47.998 [DEBUG] [Thread-928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:21:47.998 [INFO] [Thread-928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:21:48.001 [DEBUG] [Thread-928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:21:48.002 [DEBUG] [Thread-928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:21:48.002 [DEBUG] [Thread-928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:21:48.002 [DEBUG] [Thread-928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:21:48.002 [DEBUG] [Thread-928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:21:48.002 [DEBUG] [Thread-928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:21:48.002 [DEBUG] [Thread-928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:21:48.002 [DEBUG] [Thread-928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:21:48.003 [DEBUG] [Thread-928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:21:48.003 [DEBUG] [Thread-928] [transport.py] [_log()] client lang: <none>
2025-12-24T23:21:48.003 [DEBUG] [Thread-928] [transport.py] [_log()] server lang: <none>
2025-12-24T23:21:48.003 [DEBUG] [Thread-928] [transport.py] [_log()] kex follows: False
2025-12-24T23:21:48.003 [DEBUG] [Thread-928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:21:48.003 [DEBUG] [Thread-928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:21:48.003 [DEBUG] [Thread-928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:21:48.003 [DEBUG] [Thread-928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:21:48.004 [DEBUG] [Thread-928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:21:48.004 [DEBUG] [Thread-928] [transport.py] [_log()] Compression: none
2025-12-24T23:21:48.004 [DEBUG] [Thread-928] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:21:48.024 [DEBUG] [Thread-928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:21:48.024 [DEBUG] [Thread-928] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:21:48.025 [DEBUG] [Thread-928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:21:48.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:21:48.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:21:48.027 [DEBUG] [Thread-928] [transport.py] [_log()] userauth is OK
2025-12-24T23:21:48.027 [DEBUG] [Thread-928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:21:48.027 [DEBUG] [Thread-928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:21:48.027 [DEBUG] [Thread-928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:21:48.027 [DEBUG] [Thread-928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:21:48.062 [INFO] [Thread-928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:21:48.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:21:48.697 [DEBUG] [Thread-928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:21:48.697 [DEBUG] [Thread-928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:21:48.697 [DEBUG] [Thread-928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:21:48.738 [DEBUG] [Thread-928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:21:48.738 [DEBUG] [Thread-928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:21:48.741 [DEBUG] [Thread-928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:21:48.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:21:48.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:21:48.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:21:48.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:21:48.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:21:48.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:21:48.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:21:48.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:21:48.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:21:48.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.889645 -999.00  +14.00  19.25     80  +10.60 1 1 1 2 1     0    0 2.75 -29.69 ZNESW 21.3 19.2 163.0 30.2 14.7 -20.5 14.6 -20.1 14.5 -18.7 14.8 -19.8
2025-12-24T23:21:48.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:21:48.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:21:48.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.889645
2025-12-24T23:21:48.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:21:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:21:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:21:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:21:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:21:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:21:42', tmtdew=4.14, humidity=76.2, cloud=0.0, wind=28.65, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:21:42', seeing=1.45, atlas_timestamp='2025-12-24T21:21:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:18:00')
2025-12-24T23:21:48.769 [DEBUG] [Thread-928] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:21:48.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:21:48.878 [DEBUG] [Thread-931] [transport.py] [_log()] starting thread (client mode): 0xb95d4400
2025-12-24T23:21:48.878 [DEBUG] [Thread-931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:21:48.894 [DEBUG] [Thread-931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:21:48.895 [INFO] [Thread-931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:21:48.903 [DEBUG] [Thread-931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] client lang: <none>
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] server lang: <none>
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] kex follows: False
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:21:48.904 [DEBUG] [Thread-931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:21:48.905 [DEBUG] [Thread-931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:21:48.905 [DEBUG] [Thread-931] [transport.py] [_log()] Compression: none
2025-12-24T23:21:48.905 [DEBUG] [Thread-931] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:21:48.966 [DEBUG] [Thread-931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:21:48.966 [DEBUG] [Thread-931] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:21:48.967 [DEBUG] [Thread-931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:21:48.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:21:48.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:21:49.024 [DEBUG] [Thread-931] [transport.py] [_log()] userauth is OK
2025-12-24T23:21:49.025 [DEBUG] [Thread-931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:21:49.025 [DEBUG] [Thread-931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:21:49.025 [DEBUG] [Thread-931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:21:49.025 [DEBUG] [Thread-931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:21:49.044 [INFO] [Thread-931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:21:49.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:21:49.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:21:49.890 [DEBUG] [Thread-931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:21:49.891 [DEBUG] [Thread-931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:21:49.939 [DEBUG] [Thread-931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:21:49.940 [DEBUG] [Thread-931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:21:49.949 [DEBUG] [Thread-931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:21:49.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:21:49.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:21:49.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
2025-12-24T23:21:49.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:21:49.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:21:49.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:21:49.986 [DEBUG] [Thread-931] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:21:56.231 [DEBUG] [Thread-933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:22:03.985 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:22:03.986 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:22:11.289 [DEBUG] [Thread-934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:22:15.678 [DEBUG] [Thread-935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:22:20.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:22:20.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:22:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:22:20.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 22, 14), 4.13, 76.27, 0.0, 25.99, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:22:20.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:22:14
2025-12-24T23:22:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:22:20.990 [DEBUG] [Thread-936] [transport.py] [_log()] starting thread (client mode): 0xb95d6e60
2025-12-24T23:22:20.990 [DEBUG] [Thread-936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:22:21.010 [DEBUG] [Thread-936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:22:21.010 [INFO] [Thread-936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:22:21.013 [DEBUG] [Thread-936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:22:21.013 [DEBUG] [Thread-936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] client lang: <none>
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] server lang: <none>
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] kex follows: False
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:22:21.014 [DEBUG] [Thread-936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:22:21.015 [DEBUG] [Thread-936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:22:21.015 [DEBUG] [Thread-936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:22:21.015 [DEBUG] [Thread-936] [transport.py] [_log()] Compression: none
2025-12-24T23:22:21.015 [DEBUG] [Thread-936] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:22:21.034 [DEBUG] [Thread-936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:22:21.035 [DEBUG] [Thread-936] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:22:21.035 [DEBUG] [Thread-936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:22:21.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:22:21.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:22:21.037 [DEBUG] [Thread-936] [transport.py] [_log()] userauth is OK
2025-12-24T23:22:21.037 [DEBUG] [Thread-936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:22:21.038 [DEBUG] [Thread-936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:22:21.038 [DEBUG] [Thread-936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:22:21.038 [DEBUG] [Thread-936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:22:21.061 [INFO] [Thread-936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:22:21.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:22:21.681 [DEBUG] [Thread-936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:22:21.682 [DEBUG] [Thread-936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:22:21.682 [DEBUG] [Thread-936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:22:21.722 [DEBUG] [Thread-936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:22:21.722 [DEBUG] [Thread-936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:22:21.726 [DEBUG] [Thread-936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:22:21.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:22:21.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:22:21.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:22:21.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:22:21.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:22:21.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:22:21.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:22:21.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:22:21.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:22:21.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.890339 -999.00  +13.90  25.93     80  +10.60 1 1 1 2 1     0    0 2.72 -29.53 ZNESW 30.8 25.9 164.8 34.6 14.8 -20.6 14.6 -20.0 14.4 -18.9 14.7 -19.6
2025-12-24T23:22:21.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:22:21.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:22:21.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.890339
2025-12-24T23:22:21.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:22:21.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:22:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:22:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:22:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:22:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:22:14', tmtdew=4.13, humidity=76.27, cloud=0.0, wind=25.99, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:22:14', seeing=1.83, atlas_timestamp='2025-12-24T21:22:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.07174999999999976, 0.1667500000000004, 0.18725000000000058, 0.12299999999999933, 0.13349999999999973, 0.151250000000001, 0.1039999999999992, 0.08525000000000027, 0.12149999999999928, 0.1330000000000009, 0.16324999999999967, 0.0730000000000004, 0.21799999999999997, 0.17525000000000013, 0.0909999999999993, 0.08099999999999952, 0.17125000000000057, 0.15549999999999997, 0.12349999999999994, 0.05024999999999835, 0.18549999999999756, 0.1297499999999996, 0.13425000000000153, 0.1197499999999998, 0.19149999999999956, 0.14649999999999963, 0.1437500000000007, 0.13750000000000107, 0.1700000000000017, 0.12600000000000122, 0.1305000000000014, 0.10650000000000048, 0.22974999999999923], zp_timestamp='2025-12-24T21:18:00')
2025-12-24T23:22:21.754 [DEBUG] [Thread-936] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:22:21.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:22:21.856 [DEBUG] [Thread-939] [transport.py] [_log()] starting thread (client mode): 0xb95d7b80
2025-12-24T23:22:21.857 [DEBUG] [Thread-939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:22:21.871 [DEBUG] [Thread-939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:22:21.871 [INFO] [Thread-939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:22:21.878 [DEBUG] [Thread-939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:22:21.878 [DEBUG] [Thread-939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] client lang: <none>
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] server lang: <none>
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] kex follows: False
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:22:21.879 [DEBUG] [Thread-939] [transport.py] [_log()] Compression: none
2025-12-24T23:22:21.880 [DEBUG] [Thread-939] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:22:21.935 [DEBUG] [Thread-939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:22:21.936 [DEBUG] [Thread-939] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:22:21.936 [DEBUG] [Thread-939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:22:21.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:22:21.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:22:21.992 [DEBUG] [Thread-939] [transport.py] [_log()] userauth is OK
2025-12-24T23:22:21.992 [DEBUG] [Thread-939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:22:21.992 [DEBUG] [Thread-939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:22:21.992 [DEBUG] [Thread-939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:22:21.993 [DEBUG] [Thread-939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:22:22.010 [INFO] [Thread-939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:22:22.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:22:22.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:22:22.796 [DEBUG] [Thread-939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:22:22.796 [DEBUG] [Thread-939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:22:22.844 [DEBUG] [Thread-939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:22:22.844 [DEBUG] [Thread-939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:22:22.854 [DEBUG] [Thread-939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:22:22.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:22:22.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:22:22.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:22:22.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:22:22.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:22:22.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:22:22.890 [DEBUG] [Thread-939] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:22:26.335 [DEBUG] [Thread-941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:22:41.396 [DEBUG] [Thread-942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:22:52.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:22:52.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:22:52.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:22:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 22, 46), 4.13, 76.27, 0.0, 28.95, 14.02, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:22:53.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:22:46
2025-12-24T23:22:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:22:53.904 [DEBUG] [Thread-943] [transport.py] [_log()] starting thread (client mode): 0xb95d5b10
2025-12-24T23:22:53.904 [DEBUG] [Thread-943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:22:53.919 [DEBUG] [Thread-943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:22:53.920 [INFO] [Thread-943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:22:53.922 [DEBUG] [Thread-943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] client lang: <none>
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] server lang: <none>
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] kex follows: False
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] Compression: none
2025-12-24T23:22:53.923 [DEBUG] [Thread-943] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:22:53.941 [DEBUG] [Thread-943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:22:53.942 [DEBUG] [Thread-943] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:22:53.942 [DEBUG] [Thread-943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:22:53.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:22:53.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:22:53.944 [DEBUG] [Thread-943] [transport.py] [_log()] userauth is OK
2025-12-24T23:22:53.945 [DEBUG] [Thread-943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:22:53.945 [DEBUG] [Thread-943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:22:53.945 [DEBUG] [Thread-943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:22:53.945 [DEBUG] [Thread-943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:22:53.970 [INFO] [Thread-943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:22:53.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:22:54.633 [DEBUG] [Thread-943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:22:54.633 [DEBUG] [Thread-943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:22:54.634 [DEBUG] [Thread-943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:22:54.674 [DEBUG] [Thread-943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:22:54.674 [DEBUG] [Thread-943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:22:54.678 [DEBUG] [Thread-943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:22:54.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:22:54.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:22:54.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:22:54.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:22:54.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:22:54.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:22:54.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:22:54.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:22:54.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:22:54.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.890687 -999.00  +13.90  22.15     80  +10.60 1 1 1 2 1     0    0 2.68 -30.10 ZNESW 15.9 22.1 155.0 34.3 14.8 -20.6 14.6 -20.0 14.4 -18.8 14.7 -19.5
2025-12-24T23:22:54.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:22:54.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:22:54.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.890687
2025-12-24T23:22:54.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:22:54.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:22:54.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:22:54.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:22:54.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:22:54.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:22:46', tmtdew=4.13, humidity=76.27, cloud=0.0, wind=28.95, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:22:46', seeing=1.6, atlas_timestamp='2025-12-24T21:22:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.12625000000000064, 0.12925000000000075, 0.12249999999999872, 0.11949999999999861, 0.12675000000000125, 0.12449999999999939, 0.10075000000000145, 0.07850000000000001, 0.11100000000000065, 0.1462500000000002, 0.11150000000000126, 0.19399999999999906, 0.1272499999999983, 0.10200000000000031, 0.0779999999999994, 0.13925000000000054, 0.1634999999999991, 0.12199999999999989, 0.07624999999999815, 0.20199999999999818, 0.11574999999999847, 0.1152500000000014, 0.10474999999999923, 0.21399999999999864, 0.1590000000000007, 0.11775000000000091, 0.16750000000000043, 0.2110000000000003, 0.1410000000000018, 0.16100000000000136, 0.14800000000000146, 0.23525000000000063], zp_timestamp='2025-12-24T21:21:00')
2025-12-24T23:22:54.702 [DEBUG] [Thread-943] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:22:54.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:22:54.804 [DEBUG] [Thread-946] [transport.py] [_log()] starting thread (client mode): 0xb95d4d30
2025-12-24T23:22:54.804 [DEBUG] [Thread-946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:22:54.819 [DEBUG] [Thread-946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:22:54.819 [INFO] [Thread-946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:22:54.826 [DEBUG] [Thread-946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] client lang: <none>
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] server lang: <none>
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] kex follows: False
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:22:54.827 [DEBUG] [Thread-946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:22:54.828 [DEBUG] [Thread-946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:22:54.828 [DEBUG] [Thread-946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:22:54.828 [DEBUG] [Thread-946] [transport.py] [_log()] Compression: none
2025-12-24T23:22:54.828 [DEBUG] [Thread-946] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:22:54.884 [DEBUG] [Thread-946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:22:54.884 [DEBUG] [Thread-946] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:22:54.885 [DEBUG] [Thread-946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:22:54.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:22:54.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:22:54.940 [DEBUG] [Thread-946] [transport.py] [_log()] userauth is OK
2025-12-24T23:22:54.941 [DEBUG] [Thread-946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:22:54.941 [DEBUG] [Thread-946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:22:54.941 [DEBUG] [Thread-946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:22:54.941 [DEBUG] [Thread-946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:22:54.959 [INFO] [Thread-946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:22:54.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:22:54.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:22:55.742 [DEBUG] [Thread-946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:22:55.742 [DEBUG] [Thread-946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:22:55.791 [DEBUG] [Thread-946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:22:55.791 [DEBUG] [Thread-946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:22:55.800 [DEBUG] [Thread-946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:22:55.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:22:55.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:22:55.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:22:55.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:22:55.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:22:55.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:22:55.835 [DEBUG] [Thread-946] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:22:56.439 [DEBUG] [Thread-948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:23:04.187 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:23:04.188 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:23:11.519 [DEBUG] [Thread-949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:23:15.740 [DEBUG] [Thread-950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:23:25.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:23:25.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:23:25.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:23:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 23, 18), 4.12, 76.29, 0.0, 31.21, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:23:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:23:18
2025-12-24T23:23:26.557 [DEBUG] [Thread-951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:23:26.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:23:26.829 [DEBUG] [Thread-952] [transport.py] [_log()] starting thread (client mode): 0xb95d7fd0
2025-12-24T23:23:26.829 [DEBUG] [Thread-952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:23:26.846 [DEBUG] [Thread-952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:23:26.846 [INFO] [Thread-952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:23:26.849 [DEBUG] [Thread-952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] client lang: <none>
2025-12-24T23:23:26.850 [DEBUG] [Thread-952] [transport.py] [_log()] server lang: <none>
2025-12-24T23:23:26.851 [DEBUG] [Thread-952] [transport.py] [_log()] kex follows: False
2025-12-24T23:23:26.851 [DEBUG] [Thread-952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:23:26.851 [DEBUG] [Thread-952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:23:26.851 [DEBUG] [Thread-952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:23:26.851 [DEBUG] [Thread-952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:23:26.851 [DEBUG] [Thread-952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:23:26.851 [DEBUG] [Thread-952] [transport.py] [_log()] Compression: none
2025-12-24T23:23:26.851 [DEBUG] [Thread-952] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:23:26.869 [DEBUG] [Thread-952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:23:26.870 [DEBUG] [Thread-952] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:23:26.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:23:26.871 [DEBUG] [Thread-952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:23:26.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:23:26.873 [DEBUG] [Thread-952] [transport.py] [_log()] userauth is OK
2025-12-24T23:23:26.873 [DEBUG] [Thread-952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:23:26.873 [DEBUG] [Thread-952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:23:26.873 [DEBUG] [Thread-952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:23:26.873 [DEBUG] [Thread-952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:23:26.896 [INFO] [Thread-952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:23:26.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:23:27.536 [DEBUG] [Thread-952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:23:27.537 [DEBUG] [Thread-952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:23:27.537 [DEBUG] [Thread-952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:23:27.578 [DEBUG] [Thread-952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:23:27.578 [DEBUG] [Thread-952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:23:27.582 [DEBUG] [Thread-952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:23:27.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:23:27.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:23:27.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:23:27.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:23:27.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:23:27.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:23:27.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:23:27.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:23:27.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:23:27.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.891034 -999.00  +13.90  19.53     80  +10.60 1 1 1 2 1     0    0 2.74 -31.50 ZNESW 16.7 19.5 154.4 30.1 14.7 -20.4 14.6 -19.9 14.4 -18.9 14.7 -19.6
2025-12-24T23:23:27.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:23:27.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:23:27.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.891034
2025-12-24T23:23:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:23:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:23:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:23:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:23:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:23:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:23:18', tmtdew=4.12, humidity=76.29, cloud=0.0, wind=31.21, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:23:18', seeing=1.95, atlas_timestamp='2025-12-24T21:23:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.12625000000000064, 0.12925000000000075, 0.12249999999999872, 0.11949999999999861, 0.12675000000000125, 0.12449999999999939, 0.10075000000000145, 0.07850000000000001, 0.11100000000000065, 0.1462500000000002, 0.11150000000000126, 0.19399999999999906, 0.1272499999999983, 0.10200000000000031, 0.0779999999999994, 0.13925000000000054, 0.1634999999999991, 0.12199999999999989, 0.07624999999999815, 0.20199999999999818, 0.11574999999999847, 0.1152500000000014, 0.10474999999999923, 0.21399999999999864, 0.1590000000000007, 0.11775000000000091, 0.16750000000000043, 0.2110000000000003, 0.1410000000000018, 0.16100000000000136, 0.14800000000000146, 0.23525000000000063], zp_timestamp='2025-12-24T21:21:00')
2025-12-24T23:23:27.608 [DEBUG] [Thread-952] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:23:27.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:23:27.710 [DEBUG] [Thread-955] [transport.py] [_log()] starting thread (client mode): 0xb95d4d90
2025-12-24T23:23:27.710 [DEBUG] [Thread-955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:23:27.724 [DEBUG] [Thread-955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:23:27.724 [INFO] [Thread-955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:23:27.732 [DEBUG] [Thread-955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:23:27.732 [DEBUG] [Thread-955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:23:27.732 [DEBUG] [Thread-955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:23:27.732 [DEBUG] [Thread-955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] client lang: <none>
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] server lang: <none>
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] kex follows: False
2025-12-24T23:23:27.733 [DEBUG] [Thread-955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:23:27.734 [DEBUG] [Thread-955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:23:27.734 [DEBUG] [Thread-955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:23:27.734 [DEBUG] [Thread-955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:23:27.734 [DEBUG] [Thread-955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:23:27.734 [DEBUG] [Thread-955] [transport.py] [_log()] Compression: none
2025-12-24T23:23:27.734 [DEBUG] [Thread-955] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:23:27.793 [DEBUG] [Thread-955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:23:27.794 [DEBUG] [Thread-955] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:23:27.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:23:27.795 [DEBUG] [Thread-955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:23:27.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:23:27.856 [DEBUG] [Thread-955] [transport.py] [_log()] userauth is OK
2025-12-24T23:23:27.856 [DEBUG] [Thread-955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:23:27.856 [DEBUG] [Thread-955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:23:27.856 [DEBUG] [Thread-955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:23:27.856 [DEBUG] [Thread-955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:23:27.875 [INFO] [Thread-955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:23:27.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:23:27.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:23:28.673 [DEBUG] [Thread-955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:23:28.673 [DEBUG] [Thread-955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:23:28.723 [DEBUG] [Thread-955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:23:28.723 [DEBUG] [Thread-955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:23:28.733 [DEBUG] [Thread-955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:23:28.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:23:28.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:23:28.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:23:28.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:23:28.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:23:28.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:23:28.771 [DEBUG] [Thread-955] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:23:41.598 [DEBUG] [Thread-957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:23:56.659 [DEBUG] [Thread-958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:23:58.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:23:58.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:23:58.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:23:59.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 23, 50), 4.07, 76.27, 0.0, 31.04, 13.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:23:59.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:23:50
2025-12-24T23:23:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:23:59.771 [DEBUG] [Thread-959] [transport.py] [_log()] starting thread (client mode): 0xb95d4610
2025-12-24T23:23:59.771 [DEBUG] [Thread-959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:23:59.788 [DEBUG] [Thread-959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:23:59.788 [INFO] [Thread-959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:23:59.790 [DEBUG] [Thread-959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] client lang: <none>
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] server lang: <none>
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] kex follows: False
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] Compression: none
2025-12-24T23:23:59.791 [DEBUG] [Thread-959] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:23:59.807 [DEBUG] [Thread-959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:23:59.808 [DEBUG] [Thread-959] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:23:59.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:23:59.810 [DEBUG] [Thread-959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:23:59.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:23:59.812 [DEBUG] [Thread-959] [transport.py] [_log()] userauth is OK
2025-12-24T23:23:59.813 [DEBUG] [Thread-959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:23:59.813 [DEBUG] [Thread-959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:23:59.813 [DEBUG] [Thread-959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:23:59.813 [DEBUG] [Thread-959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:23:59.840 [INFO] [Thread-959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:23:59.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:24:00.480 [DEBUG] [Thread-959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:24:00.480 [DEBUG] [Thread-959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:24:00.481 [DEBUG] [Thread-959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:24:00.521 [DEBUG] [Thread-959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:24:00.521 [DEBUG] [Thread-959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:24:00.524 [DEBUG] [Thread-959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:24:00.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:24:00.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:24:00.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:24:00.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:24:00.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:24:00.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:24:00.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:24:00.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:24:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:24:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.891382 -999.00  +13.90  18.13     80  +10.60 1 1 1 2 1     0    0 2.62 -31.44 ZNESW 20.6 18.1 155.8 27.4 14.7 -20.4 14.5 -19.8 14.4 -18.7 14.7 -19.5
2025-12-24T23:24:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:24:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:24:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.891382
2025-12-24T23:24:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:24:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:24:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:24:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:24:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:24:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:23:50', tmtdew=4.07, humidity=76.27, cloud=0.0, wind=31.04, temperature=13.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:23:50', seeing=1.95, atlas_timestamp='2025-12-24T21:23:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.12625000000000064, 0.12925000000000075, 0.12249999999999872, 0.11949999999999861, 0.12675000000000125, 0.12449999999999939, 0.10075000000000145, 0.07850000000000001, 0.11100000000000065, 0.1462500000000002, 0.11150000000000126, 0.19399999999999906, 0.1272499999999983, 0.10200000000000031, 0.0779999999999994, 0.13925000000000054, 0.1634999999999991, 0.12199999999999989, 0.07624999999999815, 0.20199999999999818, 0.11574999999999847, 0.1152500000000014, 0.10474999999999923, 0.21399999999999864, 0.1590000000000007, 0.11775000000000091, 0.16750000000000043, 0.2110000000000003, 0.1410000000000018, 0.16100000000000136, 0.14800000000000146, 0.23525000000000063], zp_timestamp='2025-12-24T21:21:00')
2025-12-24T23:24:00.548 [DEBUG] [Thread-959] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:24:00.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:24:00.651 [DEBUG] [Thread-962] [transport.py] [_log()] starting thread (client mode): 0xb95d6b60
2025-12-24T23:24:00.651 [DEBUG] [Thread-962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:24:00.666 [DEBUG] [Thread-962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:24:00.666 [INFO] [Thread-962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:24:00.674 [DEBUG] [Thread-962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:24:00.674 [DEBUG] [Thread-962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:24:00.674 [DEBUG] [Thread-962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:24:00.674 [DEBUG] [Thread-962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:24:00.674 [DEBUG] [Thread-962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:24:00.675 [DEBUG] [Thread-962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:24:00.675 [DEBUG] [Thread-962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:24:00.675 [DEBUG] [Thread-962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:24:00.675 [DEBUG] [Thread-962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:24:00.675 [DEBUG] [Thread-962] [transport.py] [_log()] client lang: <none>
2025-12-24T23:24:00.675 [DEBUG] [Thread-962] [transport.py] [_log()] server lang: <none>
2025-12-24T23:24:00.675 [DEBUG] [Thread-962] [transport.py] [_log()] kex follows: False
2025-12-24T23:24:00.675 [DEBUG] [Thread-962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:24:00.676 [DEBUG] [Thread-962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:24:00.676 [DEBUG] [Thread-962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:24:00.676 [DEBUG] [Thread-962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:24:00.676 [DEBUG] [Thread-962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:24:00.677 [DEBUG] [Thread-962] [transport.py] [_log()] Compression: none
2025-12-24T23:24:00.677 [DEBUG] [Thread-962] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:24:00.733 [DEBUG] [Thread-962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:24:00.734 [DEBUG] [Thread-962] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:24:00.735 [DEBUG] [Thread-962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:24:00.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:24:00.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:24:00.793 [DEBUG] [Thread-962] [transport.py] [_log()] userauth is OK
2025-12-24T23:24:00.793 [DEBUG] [Thread-962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:24:00.793 [DEBUG] [Thread-962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:24:00.793 [DEBUG] [Thread-962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:24:00.794 [DEBUG] [Thread-962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:24:00.814 [INFO] [Thread-962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:24:00.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:24:00.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:24:01.624 [DEBUG] [Thread-962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:24:01.625 [DEBUG] [Thread-962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:24:01.671 [DEBUG] [Thread-962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:24:01.672 [DEBUG] [Thread-962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:24:01.680 [DEBUG] [Thread-962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:24:01.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:24:01.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:24:01.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:24:01.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:24:01.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:24:01.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:24:01.715 [DEBUG] [Thread-962] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:24:04.389 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:24:04.390 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:24:11.701 [DEBUG] [Thread-964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:24:15.808 [DEBUG] [Thread-965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:24:26.774 [DEBUG] [Thread-966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:24:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:24:31.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:24:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:24:32.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 24, 22), 4.07, 76.3, 0.0, 30.19, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:24:32.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:24:22
2025-12-24T23:24:32.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:24:32.767 [DEBUG] [Thread-967] [transport.py] [_log()] starting thread (client mode): 0xb95d78b0
2025-12-24T23:24:32.767 [DEBUG] [Thread-967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:24:32.788 [DEBUG] [Thread-967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:24:32.789 [INFO] [Thread-967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] client lang: <none>
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] server lang: <none>
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] kex follows: False
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] Compression: none
2025-12-24T23:24:32.792 [DEBUG] [Thread-967] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:24:32.805 [DEBUG] [Thread-967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:24:32.806 [DEBUG] [Thread-967] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:24:32.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:24:32.806 [DEBUG] [Thread-967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:24:32.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:24:32.807 [DEBUG] [Thread-967] [transport.py] [_log()] userauth is OK
2025-12-24T23:24:32.807 [DEBUG] [Thread-967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:24:32.807 [DEBUG] [Thread-967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:24:32.807 [DEBUG] [Thread-967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:24:32.807 [DEBUG] [Thread-967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:24:32.816 [INFO] [Thread-967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:24:32.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:24:33.405 [DEBUG] [Thread-967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:24:33.405 [DEBUG] [Thread-967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:24:33.405 [DEBUG] [Thread-967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:24:33.446 [DEBUG] [Thread-967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:24:33.446 [DEBUG] [Thread-967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:24:33.448 [DEBUG] [Thread-967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:24:33.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:24:33.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:24:33.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:24:33.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:24:33.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:24:33.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:24:33.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:24:33.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.891728 -999.00  +13.90  25.69     80  +10.60 1 1 1 2 1     0    0 2.52 -34.61 ZNESW 21.2 25.7 163.8 31.5 14.7 -20.4 14.6 -19.9 14.4 -18.7 14.8 -19.6
2025-12-24T23:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.891728
2025-12-24T23:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:24:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:24:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:24:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:24:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:24:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:24:22', tmtdew=4.07, humidity=76.3, cloud=0.0, wind=30.19, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:24:23', seeing=1.76, atlas_timestamp='2025-12-24T21:24:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.12625000000000064, 0.12925000000000075, 0.12249999999999872, 0.11949999999999861, 0.12675000000000125, 0.12449999999999939, 0.10075000000000145, 0.07850000000000001, 0.11100000000000065, 0.1462500000000002, 0.11150000000000126, 0.19399999999999906, 0.1272499999999983, 0.10200000000000031, 0.0779999999999994, 0.13925000000000054, 0.1634999999999991, 0.12199999999999989, 0.07624999999999815, 0.20199999999999818, 0.11574999999999847, 0.1152500000000014, 0.10474999999999923, 0.21399999999999864, 0.1590000000000007, 0.11775000000000091, 0.16750000000000043, 0.2110000000000003, 0.1410000000000018, 0.16100000000000136, 0.14800000000000146, 0.23525000000000063], zp_timestamp='2025-12-24T21:21:00')
2025-12-24T23:24:33.468 [DEBUG] [Thread-967] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:24:33.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:24:33.560 [DEBUG] [Thread-970] [transport.py] [_log()] starting thread (client mode): 0xb95d4160
2025-12-24T23:24:33.560 [DEBUG] [Thread-970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:24:33.575 [DEBUG] [Thread-970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:24:33.575 [INFO] [Thread-970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] client lang: <none>
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] server lang: <none>
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] kex follows: False
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:24:33.582 [DEBUG] [Thread-970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:24:33.583 [DEBUG] [Thread-970] [transport.py] [_log()] Compression: none
2025-12-24T23:24:33.583 [DEBUG] [Thread-970] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:24:33.639 [DEBUG] [Thread-970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:24:33.639 [DEBUG] [Thread-970] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:24:33.639 [DEBUG] [Thread-970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:24:33.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:24:33.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:24:33.696 [DEBUG] [Thread-970] [transport.py] [_log()] userauth is OK
2025-12-24T23:24:33.696 [DEBUG] [Thread-970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:24:33.696 [DEBUG] [Thread-970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:24:33.696 [DEBUG] [Thread-970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:24:33.696 [DEBUG] [Thread-970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:24:33.710 [INFO] [Thread-970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:24:33.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:24:33.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:24:34.510 [DEBUG] [Thread-970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:24:34.510 [DEBUG] [Thread-970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:24:34.558 [DEBUG] [Thread-970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:24:34.558 [DEBUG] [Thread-970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:24:34.566 [DEBUG] [Thread-970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:24:34.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:24:34.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:24:34.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:24:34.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:24:34.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:24:34.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:24:34.598 [DEBUG] [Thread-970] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:24:41.816 [DEBUG] [Thread-972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:24:56.878 [DEBUG] [Thread-973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:25:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:25:04.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:25:04.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:25:04.609 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:25:04.610 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:25:05.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 24, 54), 4.08, 76.24, 0.0, 31.34, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:25:05.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:24:54
2025-12-24T23:25:05.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:25:05.574 [DEBUG] [Thread-974] [transport.py] [_log()] starting thread (client mode): 0xb95d7d00
2025-12-24T23:25:05.574 [DEBUG] [Thread-974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:25:05.594 [DEBUG] [Thread-974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:25:05.595 [INFO] [Thread-974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:25:05.597 [DEBUG] [Thread-974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:25:05.597 [DEBUG] [Thread-974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:25:05.598 [DEBUG] [Thread-974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:25:05.598 [DEBUG] [Thread-974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:25:05.598 [DEBUG] [Thread-974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:25:05.598 [DEBUG] [Thread-974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:25:05.598 [DEBUG] [Thread-974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:25:05.598 [DEBUG] [Thread-974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:25:05.598 [DEBUG] [Thread-974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:25:05.599 [DEBUG] [Thread-974] [transport.py] [_log()] client lang: <none>
2025-12-24T23:25:05.599 [DEBUG] [Thread-974] [transport.py] [_log()] server lang: <none>
2025-12-24T23:25:05.599 [DEBUG] [Thread-974] [transport.py] [_log()] kex follows: False
2025-12-24T23:25:05.599 [DEBUG] [Thread-974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:25:05.599 [DEBUG] [Thread-974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:25:05.599 [DEBUG] [Thread-974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:25:05.599 [DEBUG] [Thread-974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:25:05.599 [DEBUG] [Thread-974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:25:05.600 [DEBUG] [Thread-974] [transport.py] [_log()] Compression: none
2025-12-24T23:25:05.600 [DEBUG] [Thread-974] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:25:05.610 [DEBUG] [Thread-974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:25:05.611 [DEBUG] [Thread-974] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:25:05.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:25:05.612 [DEBUG] [Thread-974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:25:05.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:25:05.617 [DEBUG] [Thread-974] [transport.py] [_log()] userauth is OK
2025-12-24T23:25:05.617 [DEBUG] [Thread-974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:25:05.617 [DEBUG] [Thread-974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:25:05.617 [DEBUG] [Thread-974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:25:05.617 [DEBUG] [Thread-974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:25:05.653 [INFO] [Thread-974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:25:05.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:25:06.278 [DEBUG] [Thread-974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:25:06.278 [DEBUG] [Thread-974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:25:06.278 [DEBUG] [Thread-974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:25:06.319 [DEBUG] [Thread-974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:25:06.319 [DEBUG] [Thread-974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:25:06.323 [DEBUG] [Thread-974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:25:06.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:25:06.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:25:06.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:25:06.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:25:06.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:25:06.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:25:06.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:25:06.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:25:06.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:25:06.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.892075 -999.00  +13.90  22.17     80  +10.60 1 1 1 2 1     0    0 2.51 -35.43 ZNESW 24.5 22.2 159.2 29.7 14.7 -20.3 14.5 -19.9 14.4 -18.7 14.7 -19.5
2025-12-24T23:25:06.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:25:06.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:25:06.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.892075
2025-12-24T23:25:06.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:25:06.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:25:06.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:25:06.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:25:06.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:25:06.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:24:54', tmtdew=4.08, humidity=76.24, cloud=0.0, wind=31.34, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:24:55', seeing=1.76, atlas_timestamp='2025-12-24T21:24:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.12625000000000064, 0.12925000000000075, 0.12249999999999872, 0.11949999999999861, 0.12675000000000125, 0.12449999999999939, 0.10075000000000145, 0.07850000000000001, 0.11100000000000065, 0.1462500000000002, 0.11150000000000126, 0.19399999999999906, 0.1272499999999983, 0.10200000000000031, 0.0779999999999994, 0.13925000000000054, 0.1634999999999991, 0.12199999999999989, 0.07624999999999815, 0.20199999999999818, 0.11574999999999847, 0.1152500000000014, 0.10474999999999923, 0.21399999999999864, 0.1590000000000007, 0.11775000000000091, 0.16750000000000043, 0.2110000000000003, 0.1410000000000018, 0.16100000000000136, 0.14800000000000146, 0.23525000000000063], zp_timestamp='2025-12-24T21:21:00')
2025-12-24T23:25:06.352 [DEBUG] [Thread-974] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:25:06.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:25:06.452 [DEBUG] [Thread-977] [transport.py] [_log()] starting thread (client mode): 0xb95b1b70
2025-12-24T23:25:06.452 [DEBUG] [Thread-977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:25:06.467 [DEBUG] [Thread-977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:25:06.467 [INFO] [Thread-977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:25:06.475 [DEBUG] [Thread-977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:25:06.475 [DEBUG] [Thread-977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:25:06.475 [DEBUG] [Thread-977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] client lang: <none>
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] server lang: <none>
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] kex follows: False
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:25:06.476 [DEBUG] [Thread-977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:25:06.477 [DEBUG] [Thread-977] [transport.py] [_log()] Compression: none
2025-12-24T23:25:06.477 [DEBUG] [Thread-977] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:25:06.537 [DEBUG] [Thread-977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:25:06.537 [DEBUG] [Thread-977] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:25:06.538 [DEBUG] [Thread-977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:25:06.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:25:06.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:25:06.592 [DEBUG] [Thread-977] [transport.py] [_log()] userauth is OK
2025-12-24T23:25:06.592 [DEBUG] [Thread-977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:25:06.592 [DEBUG] [Thread-977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:25:06.592 [DEBUG] [Thread-977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:25:06.592 [DEBUG] [Thread-977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:25:06.606 [INFO] [Thread-977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:25:06.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:25:06.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:25:07.445 [DEBUG] [Thread-977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:25:07.445 [DEBUG] [Thread-977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:25:07.493 [DEBUG] [Thread-977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:25:07.493 [DEBUG] [Thread-977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:25:07.507 [DEBUG] [Thread-977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:25:07.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:25:07.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:25: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
2025-12-24T23:25:07.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:25:07.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:25:07.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:25:07.561 [DEBUG] [Thread-977] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:25:11.914 [DEBUG] [Thread-979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:25:15.864 [DEBUG] [Thread-980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:25:26.979 [DEBUG] [Thread-981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:25:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:25:37.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:25:37.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:25:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 25, 26), 4.08, 76.24, 0.0, 32.24, 13.99, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:25:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:25:26
2025-12-24T23:25:38.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:25:38.523 [DEBUG] [Thread-982] [transport.py] [_log()] starting thread (client mode): 0xb95d6440
2025-12-24T23:25:38.523 [DEBUG] [Thread-982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:25:38.542 [DEBUG] [Thread-982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:25:38.543 [INFO] [Thread-982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] client lang: <none>
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] server lang: <none>
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] kex follows: False
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:25:38.546 [DEBUG] [Thread-982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:25:38.547 [DEBUG] [Thread-982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:25:38.547 [DEBUG] [Thread-982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:25:38.547 [DEBUG] [Thread-982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:25:38.547 [DEBUG] [Thread-982] [transport.py] [_log()] Compression: none
2025-12-24T23:25:38.547 [DEBUG] [Thread-982] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:25:38.564 [DEBUG] [Thread-982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:25:38.564 [DEBUG] [Thread-982] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:25:38.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:25:38.565 [DEBUG] [Thread-982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:25:38.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:25:38.568 [DEBUG] [Thread-982] [transport.py] [_log()] userauth is OK
2025-12-24T23:25:38.568 [DEBUG] [Thread-982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:25:38.568 [DEBUG] [Thread-982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:25:38.568 [DEBUG] [Thread-982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:25:38.568 [DEBUG] [Thread-982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:25:38.592 [INFO] [Thread-982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:25:38.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:25:39.260 [DEBUG] [Thread-982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:25:39.260 [DEBUG] [Thread-982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:25:39.260 [DEBUG] [Thread-982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:25:39.301 [DEBUG] [Thread-982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:25:39.301 [DEBUG] [Thread-982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:25:39.304 [DEBUG] [Thread-982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:25:39.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:25:39.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:25:39.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:25:39.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:25:39.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:25:39.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:25:39.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:25:39.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:25:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:25:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.892075 -999.00  +13.90  22.17     80  +10.60 1 1 1 2 1     0    0 2.51 -35.43 ZNESW 24.5 22.2 159.2 29.7 14.7 -20.3 14.5 -19.9 14.4 -18.7 14.7 -19.5
2025-12-24T23:25:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:25:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:25:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.892075
2025-12-24T23:25:39.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:25:39.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:25:39.333 [DEBUG] [Thread-982] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:25:39.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:25:39.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:25:39.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:25:39.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:25:26', tmtdew=4.08, humidity=76.24, cloud=0.0, wind=32.24, temperature=13.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:25:27', seeing=1.56, atlas_timestamp='2025-12-24T21:24:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:24:00')
2025-12-24T23:25:39.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:25:39.440 [DEBUG] [Thread-985] [transport.py] [_log()] starting thread (client mode): 0xb95d63e0
2025-12-24T23:25:39.441 [DEBUG] [Thread-985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:25:39.459 [DEBUG] [Thread-985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:25:39.459 [INFO] [Thread-985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:25:39.467 [DEBUG] [Thread-985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:25:39.467 [DEBUG] [Thread-985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:25:39.467 [DEBUG] [Thread-985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:25:39.467 [DEBUG] [Thread-985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:25:39.467 [DEBUG] [Thread-985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] client lang: <none>
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] server lang: <none>
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] kex follows: False
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:25:39.468 [DEBUG] [Thread-985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:25:39.469 [DEBUG] [Thread-985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:25:39.469 [DEBUG] [Thread-985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:25:39.469 [DEBUG] [Thread-985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:25:39.469 [DEBUG] [Thread-985] [transport.py] [_log()] Compression: none
2025-12-24T23:25:39.469 [DEBUG] [Thread-985] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:25:39.526 [DEBUG] [Thread-985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:25:39.526 [DEBUG] [Thread-985] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:25:39.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:25:39.528 [DEBUG] [Thread-985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:25:39.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:25:39.585 [DEBUG] [Thread-985] [transport.py] [_log()] userauth is OK
2025-12-24T23:25:39.585 [DEBUG] [Thread-985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:25:39.585 [DEBUG] [Thread-985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:25:39.585 [DEBUG] [Thread-985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:25:39.585 [DEBUG] [Thread-985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:25:39.604 [INFO] [Thread-985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:25:39.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:25:39.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:25:40.421 [DEBUG] [Thread-985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:25:40.422 [DEBUG] [Thread-985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:25:40.470 [DEBUG] [Thread-985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:25:40.470 [DEBUG] [Thread-985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:25:40.479 [DEBUG] [Thread-985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:25:40.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:25:40.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:25:40.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:25:40.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:25:40.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:25:40.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:25:40.517 [DEBUG] [Thread-985] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:25:42.020 [DEBUG] [Thread-987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:25:57.084 [DEBUG] [Thread-988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:26:04.809 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:26:04.810 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:26:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:26:10.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:26:10.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:26:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 25, 58), 4.09, 76.19, 0.0, 31.39, 13.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:26:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:25:58
2025-12-24T23:26:11.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:26:11.498 [DEBUG] [Thread-989] [transport.py] [_log()] starting thread (client mode): 0xb95788e0
2025-12-24T23:26:11.498 [DEBUG] [Thread-989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:26:11.518 [DEBUG] [Thread-989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:26:11.518 [INFO] [Thread-989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:26:11.521 [DEBUG] [Thread-989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] client lang: <none>
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] server lang: <none>
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] kex follows: False
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] Compression: none
2025-12-24T23:26:11.522 [DEBUG] [Thread-989] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:26:11.540 [DEBUG] [Thread-989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:26:11.541 [DEBUG] [Thread-989] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:26:11.542 [DEBUG] [Thread-989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:26:11.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:26:11.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:26:11.544 [DEBUG] [Thread-989] [transport.py] [_log()] userauth is OK
2025-12-24T23:26:11.544 [DEBUG] [Thread-989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:26:11.544 [DEBUG] [Thread-989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:26:11.544 [DEBUG] [Thread-989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:26:11.544 [DEBUG] [Thread-989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:26:11.569 [INFO] [Thread-989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:26:11.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:26:12.127 [DEBUG] [Thread-991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:26:12.221 [DEBUG] [Thread-989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:26:12.221 [DEBUG] [Thread-989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:26:12.221 [DEBUG] [Thread-989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:26:12.262 [DEBUG] [Thread-989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:26:12.262 [DEBUG] [Thread-989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:26:12.265 [DEBUG] [Thread-989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:26:12.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:26:12.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:26:12.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:26:12.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:26:12.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:26:12.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:26:12.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:26:12.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:26:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:26:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.892770 -999.00  +13.90  19.71     80  +10.50 1 1 1 2 1     0    0 2.61 -31.85 ZNESW 26.1 19.7 144.7 30.4 14.6 -20.3 14.5 -19.9 14.4 -18.8 14.7 -19.7
2025-12-24T23:26:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:26:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:26:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.892770
2025-12-24T23:26:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:26:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:26:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:26:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:26:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:26:12.291 [DEBUG] [Thread-989] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:26:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:25:58', tmtdew=4.09, humidity=76.19, cloud=0.0, wind=31.39, temperature=13.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:25:59', seeing=1.55, atlas_timestamp='2025-12-24T21:25:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:24:00')
2025-12-24T23:26:12.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:26:12.394 [DEBUG] [Thread-993] [transport.py] [_log()] starting thread (client mode): 0xb95d7f40
2025-12-24T23:26:12.394 [DEBUG] [Thread-993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:26:12.411 [DEBUG] [Thread-993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:26:12.411 [INFO] [Thread-993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:26:12.423 [DEBUG] [Thread-993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:26:12.423 [DEBUG] [Thread-993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:26:12.423 [DEBUG] [Thread-993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:26:12.423 [DEBUG] [Thread-993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:26:12.423 [DEBUG] [Thread-993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:26:12.423 [DEBUG] [Thread-993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] client lang: <none>
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] server lang: <none>
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] kex follows: False
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] Compression: none
2025-12-24T23:26:12.424 [DEBUG] [Thread-993] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:26:12.477 [DEBUG] [Thread-993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:26:12.477 [DEBUG] [Thread-993] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:26:12.478 [DEBUG] [Thread-993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:26:12.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:26:12.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:26:12.533 [DEBUG] [Thread-993] [transport.py] [_log()] userauth is OK
2025-12-24T23:26:12.533 [DEBUG] [Thread-993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:26:12.533 [DEBUG] [Thread-993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:26:12.533 [DEBUG] [Thread-993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:26:12.533 [DEBUG] [Thread-993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:26:12.552 [INFO] [Thread-993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:26:12.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:26:12.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:26:13.368 [DEBUG] [Thread-993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:26:13.369 [DEBUG] [Thread-993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:26:13.417 [DEBUG] [Thread-993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:26:13.418 [DEBUG] [Thread-993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:26:13.427 [DEBUG] [Thread-993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:26:13.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:26:13.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:26:13.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:26:13.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:26:13.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:26:13.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:26:13.464 [DEBUG] [Thread-993] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:26:15.919 [DEBUG] [Thread-995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:26:27.172 [DEBUG] [Thread-996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:26:42.234 [DEBUG] [Thread-997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:26:43.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:26:43.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:26:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:26:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 26, 30), 4.08, 76.22, 0.0, 29.98, 13.95, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:26:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:26:30
2025-12-24T23:26:44.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:26:44.463 [DEBUG] [Thread-998] [transport.py] [_log()] starting thread (client mode): 0xb95b0430
2025-12-24T23:26:44.463 [DEBUG] [Thread-998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:26:44.483 [DEBUG] [Thread-998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:26:44.484 [INFO] [Thread-998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:26:44.487 [DEBUG] [Thread-998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:26:44.487 [DEBUG] [Thread-998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:26:44.487 [DEBUG] [Thread-998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:26:44.487 [DEBUG] [Thread-998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:26:44.487 [DEBUG] [Thread-998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:26:44.487 [DEBUG] [Thread-998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:26:44.487 [DEBUG] [Thread-998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] client lang: <none>
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] server lang: <none>
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] kex follows: False
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:26:44.488 [DEBUG] [Thread-998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:26:44.489 [DEBUG] [Thread-998] [transport.py] [_log()] Compression: none
2025-12-24T23:26:44.489 [DEBUG] [Thread-998] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:26:44.506 [DEBUG] [Thread-998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:26:44.507 [DEBUG] [Thread-998] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:26:44.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:26:44.507 [DEBUG] [Thread-998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:26:44.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:26:44.509 [DEBUG] [Thread-998] [transport.py] [_log()] userauth is OK
2025-12-24T23:26:44.510 [DEBUG] [Thread-998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:26:44.510 [DEBUG] [Thread-998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:26:44.510 [DEBUG] [Thread-998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:26:44.510 [DEBUG] [Thread-998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:26:44.544 [INFO] [Thread-998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:26:44.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:26:45.161 [DEBUG] [Thread-998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:26:45.161 [DEBUG] [Thread-998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:26:45.161 [DEBUG] [Thread-998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:26:45.202 [DEBUG] [Thread-998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:26:45.203 [DEBUG] [Thread-998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:26:45.206 [DEBUG] [Thread-998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:26:45.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:26:45.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:26:45.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:26:45.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:26:45.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:26:45.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:26:45.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:26:45.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:26:45.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:26:45.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.893117 -999.00  +13.90  22.35     80  +10.50 1 1 1 2 1     0    0 2.53 -33.35 ZNESW 21.0 22.4 156.6 28.9 14.7 -20.4 14.5 -19.9 14.3 -18.7 14.7 -19.7
2025-12-24T23:26:45.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:26:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:26:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.893117
2025-12-24T23:26:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:26:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:26:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:26:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:26:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:26:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:26:30', tmtdew=4.08, humidity=76.22, cloud=0.0, wind=29.98, temperature=13.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:26:31', seeing=1.96, atlas_timestamp='2025-12-24T21:26:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:24:00')
2025-12-24T23:26:45.234 [DEBUG] [Thread-998] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:26:45.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:26:45.342 [DEBUG] [Thread-1001] [transport.py] [_log()] starting thread (client mode): 0xb95b0d60
2025-12-24T23:26:45.342 [DEBUG] [Thread-1001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:26:45.357 [DEBUG] [Thread-1001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:26:45.357 [INFO] [Thread-1001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] client lang: <none>
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] server lang: <none>
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] kex follows: False
2025-12-24T23:26:45.365 [DEBUG] [Thread-1001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:26:45.366 [DEBUG] [Thread-1001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:26:45.366 [DEBUG] [Thread-1001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:26:45.366 [DEBUG] [Thread-1001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:26:45.366 [DEBUG] [Thread-1001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:26:45.366 [DEBUG] [Thread-1001] [transport.py] [_log()] Compression: none
2025-12-24T23:26:45.367 [DEBUG] [Thread-1001] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:26:45.429 [DEBUG] [Thread-1001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:26:45.429 [DEBUG] [Thread-1001] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:26:45.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:26:45.430 [DEBUG] [Thread-1001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:26:45.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:26:45.485 [DEBUG] [Thread-1001] [transport.py] [_log()] userauth is OK
2025-12-24T23:26:45.485 [DEBUG] [Thread-1001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:26:45.485 [DEBUG] [Thread-1001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:26:45.485 [DEBUG] [Thread-1001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:26:45.485 [DEBUG] [Thread-1001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:26:45.509 [INFO] [Thread-1001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:26:45.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:26:45.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:26:46.307 [DEBUG] [Thread-1001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:26:46.307 [DEBUG] [Thread-1001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:26:46.355 [DEBUG] [Thread-1001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:26:46.355 [DEBUG] [Thread-1001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:26:46.365 [DEBUG] [Thread-1001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:26:46.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:26:46.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:26:46.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:26:46.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:26:46.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:26:46.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:26:46.402 [DEBUG] [Thread-1001] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:26:57.277 [DEBUG] [Thread-1003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:27:05.008 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:27:05.008 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:27:12.331 [DEBUG] [Thread-1004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:27:15.976 [DEBUG] [Thread-1005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:27:16.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:27:16.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:27:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:27:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 27, 2), 4.08, 76.22, 0.0, 29.31, 13.94, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:27:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:27:02
2025-12-24T23:27:17.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:27:17.374 [DEBUG] [Thread-1006] [transport.py] [_log()] starting thread (client mode): 0xb95b3910
2025-12-24T23:27:17.374 [DEBUG] [Thread-1006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:27:17.393 [DEBUG] [Thread-1006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:27:17.394 [INFO] [Thread-1006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] client lang: <none>
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] server lang: <none>
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] kex follows: False
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] Compression: none
2025-12-24T23:27:17.397 [DEBUG] [Thread-1006] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:27:17.415 [DEBUG] [Thread-1006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:27:17.415 [DEBUG] [Thread-1006] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:27:17.416 [DEBUG] [Thread-1006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:27:17.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:27:17.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:27:17.417 [DEBUG] [Thread-1006] [transport.py] [_log()] userauth is OK
2025-12-24T23:27:17.418 [DEBUG] [Thread-1006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:27:17.418 [DEBUG] [Thread-1006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:27:17.418 [DEBUG] [Thread-1006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:27:17.418 [DEBUG] [Thread-1006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:27:17.453 [INFO] [Thread-1006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:27:17.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:27:18.085 [DEBUG] [Thread-1006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:27:18.085 [DEBUG] [Thread-1006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:27:18.085 [DEBUG] [Thread-1006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:27:18.126 [DEBUG] [Thread-1006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:27:18.126 [DEBUG] [Thread-1006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:27:18.129 [DEBUG] [Thread-1006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:27:18.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:27:18.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:27:18.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:27:18.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:27:18.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:27:18.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:27:18.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:27:18.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:27:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:27:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.893464 -999.00  +13.80  34.80     79  +10.40 1 1 2 1 1     0    0 2.47 -34.99 ZNESW 32.0 34.8 166.8 41.4 14.6 -20.4 14.5 -19.9 14.3 -18.8 14.7 -19.7
2025-12-24T23:27:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:27:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:27:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.893464
2025-12-24T23:27:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:27:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:27:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:27:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:27:18.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:27:18.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:27:02', tmtdew=4.08, humidity=76.22, cloud=0.0, wind=29.31, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:27:04', seeing=1.42, atlas_timestamp='2025-12-24T21:26:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:24:00')
2025-12-24T23:27:18.153 [DEBUG] [Thread-1006] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:27:18.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:27:18.254 [DEBUG] [Thread-1009] [transport.py] [_log()] starting thread (client mode): 0xb95b0be0
2025-12-24T23:27:18.254 [DEBUG] [Thread-1009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:27:18.268 [DEBUG] [Thread-1009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:27:18.268 [INFO] [Thread-1009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:27:18.276 [DEBUG] [Thread-1009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:27:18.276 [DEBUG] [Thread-1009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:27:18.276 [DEBUG] [Thread-1009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:27:18.276 [DEBUG] [Thread-1009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:27:18.276 [DEBUG] [Thread-1009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:27:18.276 [DEBUG] [Thread-1009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:27:18.277 [DEBUG] [Thread-1009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:27:18.277 [DEBUG] [Thread-1009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:27:18.277 [DEBUG] [Thread-1009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:27:18.277 [DEBUG] [Thread-1009] [transport.py] [_log()] client lang: <none>
2025-12-24T23:27:18.277 [DEBUG] [Thread-1009] [transport.py] [_log()] server lang: <none>
2025-12-24T23:27:18.277 [DEBUG] [Thread-1009] [transport.py] [_log()] kex follows: False
2025-12-24T23:27:18.277 [DEBUG] [Thread-1009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:27:18.277 [DEBUG] [Thread-1009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:27:18.278 [DEBUG] [Thread-1009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:27:18.278 [DEBUG] [Thread-1009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:27:18.278 [DEBUG] [Thread-1009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:27:18.278 [DEBUG] [Thread-1009] [transport.py] [_log()] Compression: none
2025-12-24T23:27:18.278 [DEBUG] [Thread-1009] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:27:18.338 [DEBUG] [Thread-1009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:27:18.338 [DEBUG] [Thread-1009] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:27:18.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:27:18.339 [DEBUG] [Thread-1009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:27:18.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:27:18.397 [DEBUG] [Thread-1009] [transport.py] [_log()] userauth is OK
2025-12-24T23:27:18.397 [DEBUG] [Thread-1009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:27:18.398 [DEBUG] [Thread-1009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:27:18.398 [DEBUG] [Thread-1009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:27:18.398 [DEBUG] [Thread-1009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:27:18.417 [INFO] [Thread-1009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:27:18.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:27:18.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:27:19.218 [DEBUG] [Thread-1009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:27:19.218 [DEBUG] [Thread-1009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:27:19.266 [DEBUG] [Thread-1009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:27:19.266 [DEBUG] [Thread-1009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:27:19.276 [DEBUG] [Thread-1009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:27:19.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:27:19.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:27:19.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:27:19.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:27:19.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:27:19.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:27:19.312 [DEBUG] [Thread-1009] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:27:27.372 [DEBUG] [Thread-1011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:27:42.439 [DEBUG] [Thread-1012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:27:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:27:49.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:27:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:27:50.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 27, 36), 4.18, 76.22, 0.0, 30.49, 13.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:27:50.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:27:36
2025-12-24T23:27:50.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:27:50.327 [DEBUG] [Thread-1013] [transport.py] [_log()] starting thread (client mode): 0xb95d5240
2025-12-24T23:27:50.327 [DEBUG] [Thread-1013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:27:50.347 [DEBUG] [Thread-1013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:27:50.347 [INFO] [Thread-1013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:27:50.349 [DEBUG] [Thread-1013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] client lang: <none>
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] server lang: <none>
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] kex follows: False
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] Compression: none
2025-12-24T23:27:50.350 [DEBUG] [Thread-1013] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:27:50.357 [DEBUG] [Thread-1013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:27:50.357 [DEBUG] [Thread-1013] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:27:50.357 [DEBUG] [Thread-1013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:27:50.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:27:50.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:27:50.358 [DEBUG] [Thread-1013] [transport.py] [_log()] userauth is OK
2025-12-24T23:27:50.358 [DEBUG] [Thread-1013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:27:50.358 [DEBUG] [Thread-1013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:27:50.358 [DEBUG] [Thread-1013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:27:50.358 [DEBUG] [Thread-1013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:27:50.367 [INFO] [Thread-1013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:27:50.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:27:51.028 [DEBUG] [Thread-1013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:27:51.028 [DEBUG] [Thread-1013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:27:51.029 [DEBUG] [Thread-1013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:27:51.070 [DEBUG] [Thread-1013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:27:51.070 [DEBUG] [Thread-1013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:27:51.072 [DEBUG] [Thread-1013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:27:51.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:27:51.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:27:51.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:27:51.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:27:51.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:27:51.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:27:51.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.893812 -999.00  +13.80  26.08     79  +10.40 1 1 1 1 1     0    0 2.52 -35.78 ZNESW 34.6 26.1 150.2 32.3 14.6 -20.4 14.5 -20.1 14.3 -18.7 14.7 -19.7
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.893812
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:27:36', tmtdew=4.18, humidity=76.22, cloud=0.0, wind=30.49, temperature=13.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:27:37', seeing=1.34, atlas_timestamp='2025-12-24T21:27:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:24:00')
2025-12-24T23:27:51.090 [DEBUG] [Thread-1013] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:27:51.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:27:51.180 [DEBUG] [Thread-1016] [transport.py] [_log()] starting thread (client mode): 0xb9590640
2025-12-24T23:27:51.180 [DEBUG] [Thread-1016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:27:51.196 [DEBUG] [Thread-1016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:27:51.196 [INFO] [Thread-1016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] client lang: <none>
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] server lang: <none>
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] kex follows: False
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:27:51.203 [DEBUG] [Thread-1016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:27:51.204 [DEBUG] [Thread-1016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:27:51.204 [DEBUG] [Thread-1016] [transport.py] [_log()] Compression: none
2025-12-24T23:27:51.204 [DEBUG] [Thread-1016] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:27:51.264 [DEBUG] [Thread-1016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:27:51.264 [DEBUG] [Thread-1016] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:27:51.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:27:51.264 [DEBUG] [Thread-1016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:27:51.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:27:51.324 [DEBUG] [Thread-1016] [transport.py] [_log()] userauth is OK
2025-12-24T23:27:51.324 [DEBUG] [Thread-1016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:27:51.324 [DEBUG] [Thread-1016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:27:51.324 [DEBUG] [Thread-1016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:27:51.324 [DEBUG] [Thread-1016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:27:51.338 [INFO] [Thread-1016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:27:51.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:27:51.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:27:52.174 [DEBUG] [Thread-1016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:27:52.174 [DEBUG] [Thread-1016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:27:52.222 [DEBUG] [Thread-1016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:27:52.222 [DEBUG] [Thread-1016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:27:52.231 [DEBUG] [Thread-1016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:27:52.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:27:52.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:27:52.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:27:52.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:27:52.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:27:52.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:27:52.265 [DEBUG] [Thread-1016] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:27:57.478 [DEBUG] [Thread-1018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:28:05.207 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:28:05.209 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:28:12.546 [DEBUG] [Thread-1019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:28:16.041 [DEBUG] [Thread-1020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:28:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:28:22.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:28:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:28:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 28, 8), 4.18, 76.26, 0.0, 33.98, 13.92, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:28:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:28:08
2025-12-24T23:28:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:28:23.263 [DEBUG] [Thread-1021] [transport.py] [_log()] starting thread (client mode): 0xb9593430
2025-12-24T23:28:23.263 [DEBUG] [Thread-1021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:28:23.283 [DEBUG] [Thread-1021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:28:23.283 [INFO] [Thread-1021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:28:23.286 [DEBUG] [Thread-1021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] client lang: <none>
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] server lang: <none>
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] kex follows: False
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] Compression: none
2025-12-24T23:28:23.287 [DEBUG] [Thread-1021] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:28:23.305 [DEBUG] [Thread-1021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:28:23.305 [DEBUG] [Thread-1021] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:28:23.306 [DEBUG] [Thread-1021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:28:23.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:28:23.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:28:23.307 [DEBUG] [Thread-1021] [transport.py] [_log()] userauth is OK
2025-12-24T23:28:23.307 [DEBUG] [Thread-1021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:28:23.307 [DEBUG] [Thread-1021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:28:23.307 [DEBUG] [Thread-1021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:28:23.307 [DEBUG] [Thread-1021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:28:23.341 [INFO] [Thread-1021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:28:23.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:28:24.023 [DEBUG] [Thread-1021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:28:24.023 [DEBUG] [Thread-1021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:28:24.023 [DEBUG] [Thread-1021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:28:24.064 [DEBUG] [Thread-1021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:28:24.064 [DEBUG] [Thread-1021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:28:24.068 [DEBUG] [Thread-1021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:28:24.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:28:24.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:28:24.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:28:24.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:28:24.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:28:24.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:28:24.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:28:24.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:28:24.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:28:24.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.894159 -999.00  +13.80  21.51     80  +10.40 1 1 1 2 1     0    0 2.44 -36.06 ZNESW 25.8 21.5 147.8 35.8 14.7 -20.4 14.5 -19.9 14.3 -18.7 14.6 -19.5
2025-12-24T23:28:24.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:28:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:28:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.894159
2025-12-24T23:28:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:28:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:28:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:28:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:28:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:28:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:28:08', tmtdew=4.18, humidity=76.26, cloud=0.0, wind=33.98, temperature=13.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:28:09', seeing=1.25, atlas_timestamp='2025-12-24T21:27:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:24:00')
2025-12-24T23:28:24.092 [DEBUG] [Thread-1021] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:28:24.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:28:24.194 [DEBUG] [Thread-1024] [transport.py] [_log()] starting thread (client mode): 0xb95d6440
2025-12-24T23:28:24.194 [DEBUG] [Thread-1024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:28:24.208 [DEBUG] [Thread-1024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:28:24.209 [INFO] [Thread-1024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:28:24.216 [DEBUG] [Thread-1024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:28:24.216 [DEBUG] [Thread-1024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:28:24.216 [DEBUG] [Thread-1024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:28:24.216 [DEBUG] [Thread-1024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:28:24.216 [DEBUG] [Thread-1024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:28:24.216 [DEBUG] [Thread-1024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] client lang: <none>
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] server lang: <none>
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] kex follows: False
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] Compression: none
2025-12-24T23:28:24.217 [DEBUG] [Thread-1024] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:28:24.277 [DEBUG] [Thread-1024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:28:24.278 [DEBUG] [Thread-1024] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:28:24.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:28:24.279 [DEBUG] [Thread-1024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:28:24.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:28:24.333 [DEBUG] [Thread-1024] [transport.py] [_log()] userauth is OK
2025-12-24T23:28:24.334 [DEBUG] [Thread-1024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:28:24.334 [DEBUG] [Thread-1024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:28:24.334 [DEBUG] [Thread-1024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:28:24.334 [DEBUG] [Thread-1024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:28:24.353 [INFO] [Thread-1024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:28:24.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:28:24.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:28:25.141 [DEBUG] [Thread-1024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:28:25.141 [DEBUG] [Thread-1024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:28:25.189 [DEBUG] [Thread-1024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:28:25.189 [DEBUG] [Thread-1024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:28:25.198 [DEBUG] [Thread-1024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:28:25.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:28:25.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:28:25.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:28:25.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:28:25.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:28:25.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:28:25.230 [DEBUG] [Thread-1024] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:28:27.587 [DEBUG] [Thread-1026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:28:42.648 [DEBUG] [Thread-1027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:28:55.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:28:55.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:28:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:28:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 28, 40), 4.13, 76.22, 0.0, 35.08, 13.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:28:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:28:40
2025-12-24T23:28:56.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:28:56.245 [DEBUG] [Thread-1028] [transport.py] [_log()] starting thread (client mode): 0xb9579780
2025-12-24T23:28:56.245 [DEBUG] [Thread-1028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:28:56.265 [DEBUG] [Thread-1028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:28:56.265 [INFO] [Thread-1028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:28:56.268 [DEBUG] [Thread-1028] [transport.py] [_log()] client lang: <none>
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] server lang: <none>
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] kex follows: False
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] Compression: none
2025-12-24T23:28:56.269 [DEBUG] [Thread-1028] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:28:56.283 [DEBUG] [Thread-1028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:28:56.284 [DEBUG] [Thread-1028] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:28:56.284 [DEBUG] [Thread-1028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:28:56.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:28:56.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:28:56.285 [DEBUG] [Thread-1028] [transport.py] [_log()] userauth is OK
2025-12-24T23:28:56.285 [DEBUG] [Thread-1028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:28:56.285 [DEBUG] [Thread-1028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:28:56.285 [DEBUG] [Thread-1028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:28:56.285 [DEBUG] [Thread-1028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:28:56.299 [INFO] [Thread-1028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:28:56.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:28:57.073 [DEBUG] [Thread-1028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:28:57.073 [DEBUG] [Thread-1028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:28:57.074 [DEBUG] [Thread-1028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:28:57.114 [DEBUG] [Thread-1028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:28:57.114 [DEBUG] [Thread-1028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:28:57.118 [DEBUG] [Thread-1028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:28:57.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:28:57.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:28:57.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:28:57.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:28:57.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:28:57.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:28:57.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:28:57.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:28:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:28:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.894506 -999.00  +13.80  27.68     80  +10.40 1 1 1 2 1     0    0 2.55 -31.11 ZNESW 26.3 27.7 154.0 36.9 14.6 -20.6 14.4 -20.0 14.3 -18.8 14.6 -19.7
2025-12-24T23:28:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:28:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:28:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.894506
2025-12-24T23:28:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:28:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:28:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:28:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:28:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:28:57.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:28:40', tmtdew=4.13, humidity=76.22, cloud=0.0, wind=35.08, temperature=13.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:28:41', seeing=1.13, atlas_timestamp='2025-12-24T21:28:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:27:00')
2025-12-24T23:28:57.146 [DEBUG] [Thread-1028] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:28:57.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:28:57.249 [DEBUG] [Thread-1031] [transport.py] [_log()] starting thread (client mode): 0xb955bee0
2025-12-24T23:28:57.249 [DEBUG] [Thread-1031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:28:57.265 [DEBUG] [Thread-1031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:28:57.265 [INFO] [Thread-1031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:28:57.273 [DEBUG] [Thread-1031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:28:57.273 [DEBUG] [Thread-1031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:28:57.273 [DEBUG] [Thread-1031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:28:57.273 [DEBUG] [Thread-1031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:28:57.273 [DEBUG] [Thread-1031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:28:57.273 [DEBUG] [Thread-1031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:28:57.273 [DEBUG] [Thread-1031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] client lang: <none>
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] server lang: <none>
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] kex follows: False
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] Compression: none
2025-12-24T23:28:57.274 [DEBUG] [Thread-1031] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:28:57.333 [DEBUG] [Thread-1031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:28:57.334 [DEBUG] [Thread-1031] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:28:57.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:28:57.335 [DEBUG] [Thread-1031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:28:57.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:28:57.389 [DEBUG] [Thread-1031] [transport.py] [_log()] userauth is OK
2025-12-24T23:28:57.389 [DEBUG] [Thread-1031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:28:57.389 [DEBUG] [Thread-1031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:28:57.390 [DEBUG] [Thread-1031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:28:57.390 [DEBUG] [Thread-1031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:28:57.409 [INFO] [Thread-1031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:28:57.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:28:57.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:28:57.687 [DEBUG] [Thread-1033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:28:58.238 [DEBUG] [Thread-1031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:28:58.239 [DEBUG] [Thread-1031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:28:58.287 [DEBUG] [Thread-1031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:28:58.287 [DEBUG] [Thread-1031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:28:58.296 [DEBUG] [Thread-1031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:28:58.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:28:58.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:28:58.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
2025-12-24T23:28:58.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:28:58.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:28:58.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:28:58.334 [DEBUG] [Thread-1031] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:29:05.407 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:29:05.407 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:29:12.750 [DEBUG] [Thread-1034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:29:16.104 [DEBUG] [Thread-1035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:29:27.797 [DEBUG] [Thread-1036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:29:28.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:29:28.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:29:28.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:29:29.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 29, 12), 4.13, 76.26, 0.0, 36.84, 13.9, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:29:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:29:12
2025-12-24T23:29:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:29:29.326 [DEBUG] [Thread-1037] [transport.py] [_log()] starting thread (client mode): 0xb95d4ac0
2025-12-24T23:29:29.326 [DEBUG] [Thread-1037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:29:29.347 [DEBUG] [Thread-1037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:29:29.348 [INFO] [Thread-1037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:29:29.349 [DEBUG] [Thread-1037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:29:29.349 [DEBUG] [Thread-1037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:29:29.349 [DEBUG] [Thread-1037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:29:29.349 [DEBUG] [Thread-1037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] client lang: <none>
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] server lang: <none>
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] kex follows: False
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] Compression: none
2025-12-24T23:29:29.350 [DEBUG] [Thread-1037] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:29:29.367 [DEBUG] [Thread-1037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:29:29.367 [DEBUG] [Thread-1037] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:29:29.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:29:29.368 [DEBUG] [Thread-1037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:29:29.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:29:29.371 [DEBUG] [Thread-1037] [transport.py] [_log()] userauth is OK
2025-12-24T23:29:29.371 [DEBUG] [Thread-1037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:29:29.371 [DEBUG] [Thread-1037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:29:29.371 [DEBUG] [Thread-1037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:29:29.371 [DEBUG] [Thread-1037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:29:29.394 [INFO] [Thread-1037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:29:29.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:29:30.046 [DEBUG] [Thread-1037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:29:30.046 [DEBUG] [Thread-1037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:29:30.046 [DEBUG] [Thread-1037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:29:30.088 [DEBUG] [Thread-1037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:29:30.088 [DEBUG] [Thread-1037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:29:30.091 [DEBUG] [Thread-1037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:29:30.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:29:30.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:29:30.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:29:30.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:29:30.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:29:30.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:29:30.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:29:30.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:29:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:29:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.895200 -999.00  +13.80  26.77     80  +10.40 1 1 1 2 1     0    0 2.55 -32.16 ZNESW 25.5 26.8 157.2 35.9 14.6 -20.3 14.4 -19.9 14.3 -18.7 14.6 -19.6
2025-12-24T23:29:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:29:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:29:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.895200
2025-12-24T23:29:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:29:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:29:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:29:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:29:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:29:30.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:29:12', tmtdew=4.13, humidity=76.26, cloud=0.0, wind=36.84, temperature=13.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:29:13', seeing=1.13, atlas_timestamp='2025-12-24T21:29:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:27:00')
2025-12-24T23:29:30.118 [DEBUG] [Thread-1037] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:29:30.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:29:30.221 [DEBUG] [Thread-1040] [transport.py] [_log()] starting thread (client mode): 0xb9592f50
2025-12-24T23:29:30.221 [DEBUG] [Thread-1040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:29:30.235 [DEBUG] [Thread-1040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:29:30.235 [INFO] [Thread-1040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] client lang: <none>
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] server lang: <none>
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] kex follows: False
2025-12-24T23:29:30.243 [DEBUG] [Thread-1040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:29:30.244 [DEBUG] [Thread-1040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:29:30.244 [DEBUG] [Thread-1040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:29:30.244 [DEBUG] [Thread-1040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:29:30.244 [DEBUG] [Thread-1040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:29:30.244 [DEBUG] [Thread-1040] [transport.py] [_log()] Compression: none
2025-12-24T23:29:30.244 [DEBUG] [Thread-1040] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:29:30.306 [DEBUG] [Thread-1040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:29:30.306 [DEBUG] [Thread-1040] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:29:30.307 [DEBUG] [Thread-1040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:29:30.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:29:30.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:29:30.362 [DEBUG] [Thread-1040] [transport.py] [_log()] userauth is OK
2025-12-24T23:29:30.362 [DEBUG] [Thread-1040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:29:30.362 [DEBUG] [Thread-1040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:29:30.362 [DEBUG] [Thread-1040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:29:30.362 [DEBUG] [Thread-1040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:29:30.381 [INFO] [Thread-1040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:29:30.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:29:30.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:29:31.194 [DEBUG] [Thread-1040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:29:31.195 [DEBUG] [Thread-1040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:29:31.243 [DEBUG] [Thread-1040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:29:31.243 [DEBUG] [Thread-1040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:29:31.253 [DEBUG] [Thread-1040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:29:31.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:29:31.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:29:31.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:29:31.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:29:31.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:29:31.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:29:31.290 [DEBUG] [Thread-1040] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:29:42.844 [DEBUG] [Thread-1042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:29:57.909 [DEBUG] [Thread-1043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:30:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:30:01.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:30:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:30:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 29, 44), 4.07, 76.29, 0.0, 29.63, 13.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:30:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:29:44
2025-12-24T23:30:02.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:30:02.347 [DEBUG] [Thread-1044] [transport.py] [_log()] starting thread (client mode): 0xb9590640
2025-12-24T23:30:02.347 [DEBUG] [Thread-1044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:30:02.359 [DEBUG] [Thread-1044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:30:02.359 [INFO] [Thread-1044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] client lang: <none>
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] server lang: <none>
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] kex follows: False
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] Compression: none
2025-12-24T23:30:02.362 [DEBUG] [Thread-1044] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:30:02.381 [DEBUG] [Thread-1044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:30:02.382 [DEBUG] [Thread-1044] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:30:02.382 [DEBUG] [Thread-1044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:30:02.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:30:02.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:30:02.384 [DEBUG] [Thread-1044] [transport.py] [_log()] userauth is OK
2025-12-24T23:30:02.384 [DEBUG] [Thread-1044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:30:02.385 [DEBUG] [Thread-1044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:30:02.385 [DEBUG] [Thread-1044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:30:02.385 [DEBUG] [Thread-1044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:30:02.408 [INFO] [Thread-1044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:30:02.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:30:03.211 [DEBUG] [Thread-1044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:30:03.211 [DEBUG] [Thread-1044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:30:03.211 [DEBUG] [Thread-1044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:30:03.252 [DEBUG] [Thread-1044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:30:03.253 [DEBUG] [Thread-1044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:30:03.256 [DEBUG] [Thread-1044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:30:03.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:30:03.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:30:03.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:30:03.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:30:03.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:30:03.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:30:03.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:30:03.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:30:03.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:30:03.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.895547 -999.00  +13.80  26.19     80  +10.40 1 1 1 2 1     0    0 2.46 -34.49 ZNESW 22.7 26.2 142.4 30.2 14.6 -20.3 14.4 -19.9 14.3 -18.6 14.6 -19.6
2025-12-24T23:30:03.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:30:03.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:30:03.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.895547
2025-12-24T23:30:03.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:30:03.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:30:03.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:30:03.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:30:03.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:30:03.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:29:44', tmtdew=4.07, humidity=76.29, cloud=0.0, wind=29.63, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:29:45', seeing=1.16, atlas_timestamp='2025-12-24T21:29:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:27:00')
2025-12-24T23:30:03.301 [DEBUG] [Thread-1044] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:30:03.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:30:03.407 [DEBUG] [Thread-1047] [transport.py] [_log()] starting thread (client mode): 0xb9559360
2025-12-24T23:30:03.407 [DEBUG] [Thread-1047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:30:03.422 [DEBUG] [Thread-1047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:30:03.422 [INFO] [Thread-1047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:30:03.429 [DEBUG] [Thread-1047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] client lang: <none>
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] server lang: <none>
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] kex follows: False
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:30:03.430 [DEBUG] [Thread-1047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:30:03.431 [DEBUG] [Thread-1047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:30:03.431 [DEBUG] [Thread-1047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:30:03.431 [DEBUG] [Thread-1047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:30:03.431 [DEBUG] [Thread-1047] [transport.py] [_log()] Compression: none
2025-12-24T23:30:03.431 [DEBUG] [Thread-1047] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:30:03.490 [DEBUG] [Thread-1047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:30:03.490 [DEBUG] [Thread-1047] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:30:03.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:30:03.491 [DEBUG] [Thread-1047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:30:03.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:30:03.545 [DEBUG] [Thread-1047] [transport.py] [_log()] userauth is OK
2025-12-24T23:30:03.546 [DEBUG] [Thread-1047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:30:03.546 [DEBUG] [Thread-1047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:30:03.546 [DEBUG] [Thread-1047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:30:03.546 [DEBUG] [Thread-1047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:30:03.566 [INFO] [Thread-1047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:30:03.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:30:03.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:30:04.432 [DEBUG] [Thread-1047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:30:04.433 [DEBUG] [Thread-1047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:30:04.481 [DEBUG] [Thread-1047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:30:04.481 [DEBUG] [Thread-1047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:30:04.491 [DEBUG] [Thread-1047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:30:04.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:30:04.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:30:04.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:30:04.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:30:04.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:30:04.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:30:04.526 [DEBUG] [Thread-1047] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:30:05.607 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:30:05.608 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:30:12.954 [DEBUG] [Thread-1049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:30:16.160 [DEBUG] [Thread-1050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:30:28.025 [DEBUG] [Thread-1051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:30:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:30:34.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:30:34.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:30:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 30, 17), 4.07, 76.31, 0.0, 31.71, 13.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:30:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:30:17
2025-12-24T23:30:35.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:30:35.487 [DEBUG] [Thread-1052] [transport.py] [_log()] starting thread (client mode): 0xb95d77c0
2025-12-24T23:30:35.487 [DEBUG] [Thread-1052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:30:35.506 [DEBUG] [Thread-1052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:30:35.506 [INFO] [Thread-1052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:30:35.509 [DEBUG] [Thread-1052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:30:35.509 [DEBUG] [Thread-1052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] client lang: <none>
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] server lang: <none>
2025-12-24T23:30:35.510 [DEBUG] [Thread-1052] [transport.py] [_log()] kex follows: False
2025-12-24T23:30:35.511 [DEBUG] [Thread-1052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:30:35.511 [DEBUG] [Thread-1052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:30:35.511 [DEBUG] [Thread-1052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:30:35.511 [DEBUG] [Thread-1052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:30:35.511 [DEBUG] [Thread-1052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:30:35.511 [DEBUG] [Thread-1052] [transport.py] [_log()] Compression: none
2025-12-24T23:30:35.511 [DEBUG] [Thread-1052] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:30:35.530 [DEBUG] [Thread-1052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:30:35.531 [DEBUG] [Thread-1052] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:30:35.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:30:35.532 [DEBUG] [Thread-1052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:30:35.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:30:35.534 [DEBUG] [Thread-1052] [transport.py] [_log()] userauth is OK
2025-12-24T23:30:35.534 [DEBUG] [Thread-1052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:30:35.534 [DEBUG] [Thread-1052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:30:35.534 [DEBUG] [Thread-1052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:30:35.534 [DEBUG] [Thread-1052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:30:35.570 [INFO] [Thread-1052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:30:35.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:30:36.225 [DEBUG] [Thread-1052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:30:36.225 [DEBUG] [Thread-1052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:30:36.225 [DEBUG] [Thread-1052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:30:36.266 [DEBUG] [Thread-1052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:30:36.266 [DEBUG] [Thread-1052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:30:36.269 [DEBUG] [Thread-1052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:30:36.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:30:36.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:30:36.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:30:36.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:30:36.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:30:36.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:30:36.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:30:36.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:30:36.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:30:36.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.895894 -999.00  +13.80  20.34     80  +10.40 1 1 1 2 1     0    0 2.56 -31.95 ZNESW 27.8 20.3 154.2 27.8 14.6 -20.3 14.4 -19.9 14.2 -18.8 14.6 -19.4
2025-12-24T23:30:36.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:30:36.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:30:36.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.895894
2025-12-24T23:30:36.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:30:36.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:30:36.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:30:36.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:30:36.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:30:36.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:30:17', tmtdew=4.07, humidity=76.31, cloud=0.0, wind=31.71, temperature=13.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:30:17', seeing=1.27, atlas_timestamp='2025-12-24T21:30:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:27:00')
2025-12-24T23:30:36.299 [DEBUG] [Thread-1052] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:30:36.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:30:36.403 [DEBUG] [Thread-1055] [transport.py] [_log()] starting thread (client mode): 0xb9591a80
2025-12-24T23:30:36.403 [DEBUG] [Thread-1055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:30:36.422 [DEBUG] [Thread-1055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:30:36.423 [INFO] [Thread-1055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:30:36.430 [DEBUG] [Thread-1055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:30:36.430 [DEBUG] [Thread-1055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:30:36.430 [DEBUG] [Thread-1055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:30:36.430 [DEBUG] [Thread-1055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] client lang: <none>
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] server lang: <none>
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] kex follows: False
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] Compression: none
2025-12-24T23:30:36.431 [DEBUG] [Thread-1055] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:30:36.493 [DEBUG] [Thread-1055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:30:36.493 [DEBUG] [Thread-1055] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:30:36.493 [DEBUG] [Thread-1055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:30:36.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:30:36.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:30:36.549 [DEBUG] [Thread-1055] [transport.py] [_log()] userauth is OK
2025-12-24T23:30:36.549 [DEBUG] [Thread-1055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:30:36.549 [DEBUG] [Thread-1055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:30:36.550 [DEBUG] [Thread-1055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:30:36.550 [DEBUG] [Thread-1055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:30:36.573 [INFO] [Thread-1055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:30:36.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:30:36.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:30:37.403 [DEBUG] [Thread-1055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:30:37.403 [DEBUG] [Thread-1055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:30:37.451 [DEBUG] [Thread-1055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:30:37.451 [DEBUG] [Thread-1055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:30:37.461 [DEBUG] [Thread-1055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:30:37.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:30: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')
2025-12-24T23:30:37.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
2025-12-24T23:30:37.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:30:37.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:30:37.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:30:37.499 [DEBUG] [Thread-1055] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:30:43.064 [DEBUG] [Thread-1057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:30:58.133 [DEBUG] [Thread-1058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:31:05.807 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:31:05.808 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:31:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:31:07.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:31:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:31:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 30, 49), 4.05, 76.39, 0.0, 30.59, 13.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:31:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:30:49
2025-12-24T23:31:08.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:31:08.500 [DEBUG] [Thread-1059] [transport.py] [_log()] starting thread (client mode): 0xb95d6a40
2025-12-24T23:31:08.501 [DEBUG] [Thread-1059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:31:08.521 [DEBUG] [Thread-1059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:31:08.521 [INFO] [Thread-1059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:31:08.524 [DEBUG] [Thread-1059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:31:08.530 [DEBUG] [Thread-1059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:31:08.530 [DEBUG] [Thread-1059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] client lang: <none>
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] server lang: <none>
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] kex follows: False
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] Compression: none
2025-12-24T23:31:08.531 [DEBUG] [Thread-1059] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:31:08.549 [DEBUG] [Thread-1059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:31:08.550 [DEBUG] [Thread-1059] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:31:08.550 [DEBUG] [Thread-1059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:31:08.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:31:08.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:31:08.553 [DEBUG] [Thread-1059] [transport.py] [_log()] userauth is OK
2025-12-24T23:31:08.553 [DEBUG] [Thread-1059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:31:08.553 [DEBUG] [Thread-1059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:31:08.553 [DEBUG] [Thread-1059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:31:08.553 [DEBUG] [Thread-1059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:31:08.578 [INFO] [Thread-1059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:31:08.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:31:09.242 [DEBUG] [Thread-1059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:31:09.243 [DEBUG] [Thread-1059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:31:09.243 [DEBUG] [Thread-1059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:31:09.286 [DEBUG] [Thread-1059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:31:09.286 [DEBUG] [Thread-1059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:31:09.289 [DEBUG] [Thread-1059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:31:09.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:31:09.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:31:09.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:31:09.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:31:09.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:31:09.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:31:09.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:31:09.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:31:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:31:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.896242 -999.00  +13.80  22.70     80  +10.40 1 1 1 2 1     0    0 2.53 -31.55 ZNESW 22.3 22.7 146.2 28.9 14.6 -20.3 14.4 -19.9 14.2 -18.6 14.5 -19.6
2025-12-24T23:31:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:31:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:31:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.896242
2025-12-24T23:31:09.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:31:09.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:31:09.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:31:09.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:31:09.313 [DEBUG] [Thread-1059] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:31:09.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:31:09.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:30:49', tmtdew=4.05, humidity=76.39, cloud=0.0, wind=30.59, temperature=13.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:30:49', seeing=1.21, atlas_timestamp='2025-12-24T21:30:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.07474999999999987, 0.15225000000000044, 0.1802500000000009, 0.09549999999999947, 0.11650000000000027, 0.12325000000000053, 0.14400000000000013, 0.06174999999999997, 0.1169999999999991, 0.10450000000000159, 0.12725000000000009, 0.09800000000000075, 0.17300000000000004, 0.19024999999999892, 0.12650000000000006, 0.09299999999999997, 0.145249999999999, 0.1634999999999991, 0.11399999999999899, 0.05424999999999969, 0.2049999999999983, 0.1347499999999986, 0.13375000000000092, 0.12374999999999936, 0.19299999999999962, 0.13900000000000112, 0.1297499999999996, 0.15050000000000097, 0.12400000000000055, 0.18200000000000038, 0.1490000000000009, 0.12400000000000055, 0.2447499999999998], zp_timestamp='2025-12-24T21:27:00')
2025-12-24T23:31:09.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:31:09.413 [DEBUG] [Thread-1062] [transport.py] [_log()] starting thread (client mode): 0xb9546410
2025-12-24T23:31:09.413 [DEBUG] [Thread-1062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:31:09.428 [DEBUG] [Thread-1062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:31:09.428 [INFO] [Thread-1062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:31:09.436 [DEBUG] [Thread-1062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:31:09.436 [DEBUG] [Thread-1062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:31:09.437 [DEBUG] [Thread-1062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:31:09.437 [DEBUG] [Thread-1062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:31:09.437 [DEBUG] [Thread-1062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:31:09.437 [DEBUG] [Thread-1062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:31:09.437 [DEBUG] [Thread-1062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:31:09.437 [DEBUG] [Thread-1062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:31:09.437 [DEBUG] [Thread-1062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:31:09.437 [DEBUG] [Thread-1062] [transport.py] [_log()] client lang: <none>
2025-12-24T23:31:09.438 [DEBUG] [Thread-1062] [transport.py] [_log()] server lang: <none>
2025-12-24T23:31:09.438 [DEBUG] [Thread-1062] [transport.py] [_log()] kex follows: False
2025-12-24T23:31:09.438 [DEBUG] [Thread-1062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:31:09.438 [DEBUG] [Thread-1062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:31:09.438 [DEBUG] [Thread-1062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:31:09.438 [DEBUG] [Thread-1062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:31:09.438 [DEBUG] [Thread-1062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:31:09.439 [DEBUG] [Thread-1062] [transport.py] [_log()] Compression: none
2025-12-24T23:31:09.439 [DEBUG] [Thread-1062] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:31:09.494 [DEBUG] [Thread-1062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:31:09.494 [DEBUG] [Thread-1062] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:31:09.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:31:09.496 [DEBUG] [Thread-1062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:31:09.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:31:09.553 [DEBUG] [Thread-1062] [transport.py] [_log()] userauth is OK
2025-12-24T23:31:09.554 [DEBUG] [Thread-1062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:31:09.554 [DEBUG] [Thread-1062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:31:09.554 [DEBUG] [Thread-1062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:31:09.554 [DEBUG] [Thread-1062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:31:09.573 [INFO] [Thread-1062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:31:09.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:31:09.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:31:10.364 [DEBUG] [Thread-1062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:31:10.364 [DEBUG] [Thread-1062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:31:10.412 [DEBUG] [Thread-1062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:31:10.412 [DEBUG] [Thread-1062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:31:10.421 [DEBUG] [Thread-1062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:31:10.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:31:10.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:31:10.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:31:10.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:31:10.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:31:10.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:31:10.459 [DEBUG] [Thread-1062] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:31:13.174 [DEBUG] [Thread-1064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:31:16.217 [DEBUG] [Thread-1065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:31:28.249 [DEBUG] [Thread-1066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:31:40.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:31:40.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:31:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:31:41.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 31, 21), 4.04, 76.45, 0.0, 30.08, 13.87, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:31:41.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:31:21
2025-12-24T23:31:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:31:41.432 [DEBUG] [Thread-1067] [transport.py] [_log()] starting thread (client mode): 0xb9579780
2025-12-24T23:31:41.433 [DEBUG] [Thread-1067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:31:41.452 [DEBUG] [Thread-1067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:31:41.452 [INFO] [Thread-1067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] client lang: <none>
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] server lang: <none>
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] kex follows: False
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] Compression: none
2025-12-24T23:31:41.456 [DEBUG] [Thread-1067] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:31:41.471 [DEBUG] [Thread-1067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:31:41.471 [DEBUG] [Thread-1067] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:31:41.471 [DEBUG] [Thread-1067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:31:41.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:31:41.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:31:41.472 [DEBUG] [Thread-1067] [transport.py] [_log()] userauth is OK
2025-12-24T23:31:41.472 [DEBUG] [Thread-1067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:31:41.472 [DEBUG] [Thread-1067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:31:41.472 [DEBUG] [Thread-1067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:31:41.472 [DEBUG] [Thread-1067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:31:41.487 [INFO] [Thread-1067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:31:41.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:31:42.111 [DEBUG] [Thread-1067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:31:42.111 [DEBUG] [Thread-1067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:31:42.111 [DEBUG] [Thread-1067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:31:42.151 [DEBUG] [Thread-1067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:31:42.151 [DEBUG] [Thread-1067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:31:42.154 [DEBUG] [Thread-1067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:31:42.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:31:42.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:31:42.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:31:42.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:31:42.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:31:42.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:31:42.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:31:42.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:31:42.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:31:42.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.896589 -999.00  +13.80  17.06     80  +10.50 1 1 1 2 1     0    0 2.48 -32.02 ZNESW 18.7 17.1 152.2 27.4 14.6 -20.2 14.4 -19.8 14.2 -18.6 14.6 -19.5
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.896589
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:31:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:31:21', tmtdew=4.04, humidity=76.45, cloud=0.0, wind=30.08, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:31:21', seeing=1.26, atlas_timestamp='2025-12-24T21:31:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:30:00')
2025-12-24T23:31:42.174 [DEBUG] [Thread-1067] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:31:42.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:31:42.264 [DEBUG] [Thread-1070] [transport.py] [_log()] starting thread (client mode): 0xb95d5b10
2025-12-24T23:31:42.264 [DEBUG] [Thread-1070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:31:42.279 [DEBUG] [Thread-1070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:31:42.279 [INFO] [Thread-1070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] client lang: <none>
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] server lang: <none>
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] kex follows: False
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:31:42.286 [DEBUG] [Thread-1070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:31:42.287 [DEBUG] [Thread-1070] [transport.py] [_log()] Compression: none
2025-12-24T23:31:42.287 [DEBUG] [Thread-1070] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:31:42.343 [DEBUG] [Thread-1070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:31:42.344 [DEBUG] [Thread-1070] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:31:42.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:31:42.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:31:42.344 [DEBUG] [Thread-1070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:31:42.401 [DEBUG] [Thread-1070] [transport.py] [_log()] userauth is OK
2025-12-24T23:31:42.401 [DEBUG] [Thread-1070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:31:42.401 [DEBUG] [Thread-1070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:31:42.401 [DEBUG] [Thread-1070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:31:42.401 [DEBUG] [Thread-1070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:31:42.419 [INFO] [Thread-1070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:31:42.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:31:42.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:31:43.230 [DEBUG] [Thread-1070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:31:43.230 [DEBUG] [Thread-1070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:31:43.277 [DEBUG] [Thread-1070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:31:43.277 [DEBUG] [Thread-1070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:31:43.286 [DEBUG] [Thread-1070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:31:43.291 [DEBUG] [Thread-1072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:31:43.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:31:43.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:31:43.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
2025-12-24T23:31:43.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:31:43.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:31:43.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:31:43.322 [DEBUG] [Thread-1070] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:31:58.357 [DEBUG] [Thread-1073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:32:06.007 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:32:06.008 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:32:13.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:32:13.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:32:13.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
2025-12-24T23:32:13.398 [DEBUG] [Thread-1074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:32:14.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 31, 53), 4.01, 76.57, 0.0, 29.5, 13.85, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:32:14.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:31:53
2025-12-24T23:32:14.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:32:14.320 [DEBUG] [Thread-1075] [transport.py] [_log()] starting thread (client mode): 0xb95799f0
2025-12-24T23:32:14.320 [DEBUG] [Thread-1075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:32:14.340 [DEBUG] [Thread-1075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:32:14.341 [INFO] [Thread-1075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:32:14.344 [DEBUG] [Thread-1075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:32:14.344 [DEBUG] [Thread-1075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:32:14.344 [DEBUG] [Thread-1075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:32:14.344 [DEBUG] [Thread-1075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:32:14.344 [DEBUG] [Thread-1075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:32:14.345 [DEBUG] [Thread-1075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:32:14.345 [DEBUG] [Thread-1075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:32:14.345 [DEBUG] [Thread-1075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:32:14.345 [DEBUG] [Thread-1075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:32:14.345 [DEBUG] [Thread-1075] [transport.py] [_log()] client lang: <none>
2025-12-24T23:32:14.345 [DEBUG] [Thread-1075] [transport.py] [_log()] server lang: <none>
2025-12-24T23:32:14.345 [DEBUG] [Thread-1075] [transport.py] [_log()] kex follows: False
2025-12-24T23:32:14.345 [DEBUG] [Thread-1075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:32:14.346 [DEBUG] [Thread-1075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:32:14.346 [DEBUG] [Thread-1075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:32:14.346 [DEBUG] [Thread-1075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:32:14.346 [DEBUG] [Thread-1075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:32:14.346 [DEBUG] [Thread-1075] [transport.py] [_log()] Compression: none
2025-12-24T23:32:14.346 [DEBUG] [Thread-1075] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:32:14.365 [DEBUG] [Thread-1075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:32:14.366 [DEBUG] [Thread-1075] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:32:14.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:32:14.367 [DEBUG] [Thread-1075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:32:14.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:32:14.369 [DEBUG] [Thread-1075] [transport.py] [_log()] userauth is OK
2025-12-24T23:32:14.370 [DEBUG] [Thread-1075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:32:14.370 [DEBUG] [Thread-1075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:32:14.370 [DEBUG] [Thread-1075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:32:14.370 [DEBUG] [Thread-1075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:32:14.388 [INFO] [Thread-1075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:32:14.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:32:15.023 [DEBUG] [Thread-1075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:32:15.024 [DEBUG] [Thread-1075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:32:15.024 [DEBUG] [Thread-1075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:32:15.065 [DEBUG] [Thread-1075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:32:15.066 [DEBUG] [Thread-1075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:32:15.069 [DEBUG] [Thread-1075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:32:15.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:32:15.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:32:15.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:32:15.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:32:15.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:32:15.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:32:15.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:32:15.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:32:15.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:32:15.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.896936 -999.00  +13.80  19.43     80  +10.40 1 1 1 2 1     0    0 2.76 -26.17 ZNESW 21.9 19.4 139.4 25.5 14.6 -20.2 14.4 -19.7 14.2 -18.6 14.6 -19.4
2025-12-24T23:32:15.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:32:15.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:32:15.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.896936
2025-12-24T23:32:15.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:32:15.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:32:15.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:32:15.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:32:15.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:32:15.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:31:53', tmtdew=4.01, humidity=76.57, cloud=0.0, wind=29.5, temperature=13.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:31:53', seeing=1.26, atlas_timestamp='2025-12-24T21:31:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:30:00')
2025-12-24T23:32:15.096 [DEBUG] [Thread-1075] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:32:15.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:32:15.200 [DEBUG] [Thread-1078] [transport.py] [_log()] starting thread (client mode): 0xb95d7850
2025-12-24T23:32:15.200 [DEBUG] [Thread-1078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:32:15.217 [DEBUG] [Thread-1078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:32:15.218 [INFO] [Thread-1078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:32:15.225 [DEBUG] [Thread-1078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:32:15.225 [DEBUG] [Thread-1078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] client lang: <none>
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] server lang: <none>
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] kex follows: False
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:32:15.226 [DEBUG] [Thread-1078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:32:15.227 [DEBUG] [Thread-1078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:32:15.227 [DEBUG] [Thread-1078] [transport.py] [_log()] Compression: none
2025-12-24T23:32:15.227 [DEBUG] [Thread-1078] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:32:15.288 [DEBUG] [Thread-1078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:32:15.289 [DEBUG] [Thread-1078] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:32:15.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:32:15.290 [DEBUG] [Thread-1078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:32:15.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:32:15.346 [DEBUG] [Thread-1078] [transport.py] [_log()] userauth is OK
2025-12-24T23:32:15.346 [DEBUG] [Thread-1078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:32:15.346 [DEBUG] [Thread-1078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:32:15.346 [DEBUG] [Thread-1078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:32:15.347 [DEBUG] [Thread-1078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:32:15.366 [INFO] [Thread-1078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:32:15.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:32:15.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:32:16.238 [DEBUG] [Thread-1078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:32:16.238 [DEBUG] [Thread-1078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:32:16.274 [DEBUG] [Thread-1080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:32:16.286 [DEBUG] [Thread-1078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:32:16.286 [DEBUG] [Thread-1078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:32:16.295 [DEBUG] [Thread-1078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:32:16.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:32:16.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:32:16.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:32:16.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:32:16.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:32:16.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:32:16.335 [DEBUG] [Thread-1078] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:32:28.432 [DEBUG] [Thread-1081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:32:43.502 [DEBUG] [Thread-1082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:32:46.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:32:46.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:32:46.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:32:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 32, 25), 4.01, 76.6, 0.0, 28.87, 13.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:32:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:32:25
2025-12-24T23:32:47.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:32:47.331 [DEBUG] [Thread-1083] [transport.py] [_log()] starting thread (client mode): 0xb9547af0
2025-12-24T23:32:47.331 [DEBUG] [Thread-1083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:32:47.352 [DEBUG] [Thread-1083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:32:47.352 [INFO] [Thread-1083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:32:47.355 [DEBUG] [Thread-1083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:32:47.355 [DEBUG] [Thread-1083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:32:47.355 [DEBUG] [Thread-1083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:32:47.355 [DEBUG] [Thread-1083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:32:47.355 [DEBUG] [Thread-1083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:32:47.355 [DEBUG] [Thread-1083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:32:47.355 [DEBUG] [Thread-1083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] client lang: <none>
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] server lang: <none>
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] kex follows: False
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] Compression: none
2025-12-24T23:32:47.356 [DEBUG] [Thread-1083] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:32:47.373 [DEBUG] [Thread-1083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:32:47.374 [DEBUG] [Thread-1083] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:32:47.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:32:47.375 [DEBUG] [Thread-1083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:32:47.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:32:47.377 [DEBUG] [Thread-1083] [transport.py] [_log()] userauth is OK
2025-12-24T23:32:47.377 [DEBUG] [Thread-1083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:32:47.377 [DEBUG] [Thread-1083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:32:47.377 [DEBUG] [Thread-1083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:32:47.377 [DEBUG] [Thread-1083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:32:47.411 [INFO] [Thread-1083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:32:47.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:32:48.109 [DEBUG] [Thread-1083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:32:48.109 [DEBUG] [Thread-1083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:32:48.109 [DEBUG] [Thread-1083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:32:48.151 [DEBUG] [Thread-1083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:32:48.151 [DEBUG] [Thread-1083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:32:48.155 [DEBUG] [Thread-1083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:32:48.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:32:48.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:32:48.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:32:48.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:32:48.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:32:48.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:32:48.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:32:48.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:32:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:32:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.897631 -999.00  +13.70  27.30     80  +10.50 1 1 1 2 1     0    0 2.75 -23.39 ZNESW 22.1 27.3 162.2 36.3 14.5 -20.3 14.4 -19.9 14.2 -18.6 14.5 -19.5
2025-12-24T23:32:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:32:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:32:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.897631
2025-12-24T23:32:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:32:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:32:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:32:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:32:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:32:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:32:25', tmtdew=4.01, humidity=76.6, cloud=0.0, wind=28.87, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:32:25', seeing=1.37, atlas_timestamp='2025-12-24T21:32:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:30:00')
2025-12-24T23:32:48.182 [DEBUG] [Thread-1083] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:32:48.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:32:48.283 [DEBUG] [Thread-1086] [transport.py] [_log()] starting thread (client mode): 0xb95d6710
2025-12-24T23:32:48.284 [DEBUG] [Thread-1086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:32:48.299 [DEBUG] [Thread-1086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:32:48.299 [INFO] [Thread-1086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:32:48.307 [DEBUG] [Thread-1086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:32:48.307 [DEBUG] [Thread-1086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:32:48.307 [DEBUG] [Thread-1086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:32:48.307 [DEBUG] [Thread-1086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:32:48.308 [DEBUG] [Thread-1086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:32:48.308 [DEBUG] [Thread-1086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:32:48.308 [DEBUG] [Thread-1086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:32:48.308 [DEBUG] [Thread-1086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:32:48.308 [DEBUG] [Thread-1086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:32:48.308 [DEBUG] [Thread-1086] [transport.py] [_log()] client lang: <none>
2025-12-24T23:32:48.308 [DEBUG] [Thread-1086] [transport.py] [_log()] server lang: <none>
2025-12-24T23:32:48.308 [DEBUG] [Thread-1086] [transport.py] [_log()] kex follows: False
2025-12-24T23:32:48.309 [DEBUG] [Thread-1086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:32:48.309 [DEBUG] [Thread-1086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:32:48.309 [DEBUG] [Thread-1086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:32:48.309 [DEBUG] [Thread-1086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:32:48.309 [DEBUG] [Thread-1086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:32:48.309 [DEBUG] [Thread-1086] [transport.py] [_log()] Compression: none
2025-12-24T23:32:48.310 [DEBUG] [Thread-1086] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:32:48.370 [DEBUG] [Thread-1086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:32:48.371 [DEBUG] [Thread-1086] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:32:48.372 [DEBUG] [Thread-1086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:32:48.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:32:48.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:32:48.426 [DEBUG] [Thread-1086] [transport.py] [_log()] userauth is OK
2025-12-24T23:32:48.426 [DEBUG] [Thread-1086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:32:48.426 [DEBUG] [Thread-1086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:32:48.426 [DEBUG] [Thread-1086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:32:48.426 [DEBUG] [Thread-1086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:32:48.451 [INFO] [Thread-1086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:32:48.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:32:48.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:32:49.249 [DEBUG] [Thread-1086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:32:49.249 [DEBUG] [Thread-1086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:32:49.298 [DEBUG] [Thread-1086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:32:49.298 [DEBUG] [Thread-1086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:32:49.307 [DEBUG] [Thread-1086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:32:49.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:32:49.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:32:49.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:32:49.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:32:49.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:32:49.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:32:49.346 [DEBUG] [Thread-1086] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:32:58.545 [DEBUG] [Thread-1088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:33:06.210 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:33:06.211 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:33:13.600 [DEBUG] [Thread-1089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:33:16.346 [DEBUG] [Thread-1090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:33:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:33:19.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:33:19.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:33:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 32, 57), 4.0, 76.64, 0.0, 32.54, 13.84, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:33:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:32:57
2025-12-24T23:33:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:33:20.323 [DEBUG] [Thread-1091] [transport.py] [_log()] starting thread (client mode): 0xb95f3fa0
2025-12-24T23:33:20.323 [DEBUG] [Thread-1091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:33:20.342 [DEBUG] [Thread-1091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:33:20.343 [INFO] [Thread-1091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] client lang: <none>
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] server lang: <none>
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] kex follows: False
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:33:20.346 [DEBUG] [Thread-1091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:33:20.347 [DEBUG] [Thread-1091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:33:20.347 [DEBUG] [Thread-1091] [transport.py] [_log()] Compression: none
2025-12-24T23:33:20.347 [DEBUG] [Thread-1091] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:33:20.363 [DEBUG] [Thread-1091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:33:20.363 [DEBUG] [Thread-1091] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:33:20.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:33:20.364 [DEBUG] [Thread-1091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:33:20.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:33:20.367 [DEBUG] [Thread-1091] [transport.py] [_log()] userauth is OK
2025-12-24T23:33:20.367 [DEBUG] [Thread-1091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:33:20.367 [DEBUG] [Thread-1091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:33:20.367 [DEBUG] [Thread-1091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:33:20.367 [DEBUG] [Thread-1091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:33:20.391 [INFO] [Thread-1091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:33:20.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:33:21.020 [DEBUG] [Thread-1091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:33:21.020 [DEBUG] [Thread-1091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:33:21.020 [DEBUG] [Thread-1091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:33:21.060 [DEBUG] [Thread-1091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:33:21.061 [DEBUG] [Thread-1091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:33:21.063 [DEBUG] [Thread-1091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:33:21.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:33:21.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:33:21.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:33:21.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:33:21.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:33:21.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:33:21.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:33:21.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:33:21.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:33:21.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.897978 -999.00  +13.70  20.22     81  +10.50 1 1 1 2 1     0    0 2.75 -23.49 ZNESW 24.0 20.2 146.2 30.7 14.5 -20.3 14.3 -19.9 14.2 -18.7 14.5 -19.6
2025-12-24T23:33:21.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:33:21.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:33:21.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.897978
2025-12-24T23:33:21.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:33:21.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:33:21.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:33:21.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:33:21.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:33:21.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:32:57', tmtdew=4.0, humidity=76.64, cloud=0.0, wind=32.54, temperature=13.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:32:57', seeing=1.7, atlas_timestamp='2025-12-24T21:33:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:30:00')
2025-12-24T23:33:21.087 [DEBUG] [Thread-1091] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:33:21.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:33:21.189 [DEBUG] [Thread-1094] [transport.py] [_log()] starting thread (client mode): 0xb9558340
2025-12-24T23:33:21.189 [DEBUG] [Thread-1094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:33:21.208 [DEBUG] [Thread-1094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:33:21.209 [INFO] [Thread-1094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:33:21.216 [DEBUG] [Thread-1094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:33:21.216 [DEBUG] [Thread-1094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:33:21.216 [DEBUG] [Thread-1094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:33:21.216 [DEBUG] [Thread-1094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:33:21.216 [DEBUG] [Thread-1094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:33:21.216 [DEBUG] [Thread-1094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:33:21.216 [DEBUG] [Thread-1094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:33:21.216 [DEBUG] [Thread-1094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] client lang: <none>
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] server lang: <none>
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] kex follows: False
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] Compression: none
2025-12-24T23:33:21.217 [DEBUG] [Thread-1094] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:33:21.278 [DEBUG] [Thread-1094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:33:21.278 [DEBUG] [Thread-1094] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:33:21.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:33:21.279 [DEBUG] [Thread-1094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:33:21.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:33:21.337 [DEBUG] [Thread-1094] [transport.py] [_log()] userauth is OK
2025-12-24T23:33:21.337 [DEBUG] [Thread-1094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:33:21.337 [DEBUG] [Thread-1094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:33:21.337 [DEBUG] [Thread-1094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:33:21.338 [DEBUG] [Thread-1094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:33:21.361 [INFO] [Thread-1094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:33:21.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:33:21.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:33:22.177 [DEBUG] [Thread-1094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:33:22.178 [DEBUG] [Thread-1094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:33:22.226 [DEBUG] [Thread-1094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:33:22.226 [DEBUG] [Thread-1094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:33:22.236 [DEBUG] [Thread-1094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:33:22.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:33:22.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:33:22.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:33:22.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:33:22.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:33:22.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:33:22.273 [DEBUG] [Thread-1094] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:33:28.642 [DEBUG] [Thread-1096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:33:43.700 [DEBUG] [Thread-1097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:33:52.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:33:52.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:33:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:33:52.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 33, 29), 3.99, 76.69, 0.0, 30.63, 13.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:33:52.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:33:29
2025-12-24T23:33:53.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:33:53.256 [DEBUG] [Thread-1098] [transport.py] [_log()] starting thread (client mode): 0xb95f3ac0
2025-12-24T23:33:53.256 [DEBUG] [Thread-1098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:33:53.273 [DEBUG] [Thread-1098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:33:53.273 [INFO] [Thread-1098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] client lang: <none>
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] server lang: <none>
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] kex follows: False
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:33:53.274 [DEBUG] [Thread-1098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:33:53.275 [DEBUG] [Thread-1098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:33:53.275 [DEBUG] [Thread-1098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:33:53.275 [DEBUG] [Thread-1098] [transport.py] [_log()] Compression: none
2025-12-24T23:33:53.275 [DEBUG] [Thread-1098] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:33:53.292 [DEBUG] [Thread-1098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:33:53.293 [DEBUG] [Thread-1098] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:33:53.293 [DEBUG] [Thread-1098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:33:53.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:33:53.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:33:53.295 [DEBUG] [Thread-1098] [transport.py] [_log()] userauth is OK
2025-12-24T23:33:53.295 [DEBUG] [Thread-1098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:33:53.296 [DEBUG] [Thread-1098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:33:53.296 [DEBUG] [Thread-1098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:33:53.296 [DEBUG] [Thread-1098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:33:53.320 [INFO] [Thread-1098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:33:53.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:33:53.964 [DEBUG] [Thread-1098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:33:53.965 [DEBUG] [Thread-1098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:33:53.965 [DEBUG] [Thread-1098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:33:54.006 [DEBUG] [Thread-1098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:33:54.006 [DEBUG] [Thread-1098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:33:54.009 [DEBUG] [Thread-1098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:33:54.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:33:54.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:33:54.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:33:54.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:33:54.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:33:54.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:33:54.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:33:54.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:33:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:33:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.898325 -999.00  +13.70  28.06     81  +10.50 1 1 1 2 1     0    0 2.71 -23.86 ZNESW 30.2 28.1 141.5 31.7 14.5 -20.3 14.4 -19.8 14.2 -18.6 14.5 -19.4
2025-12-24T23:33:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:33:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:33:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.898325
2025-12-24T23:33:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:33:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:33:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:33:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:33:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:33:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:33:29', tmtdew=3.99, humidity=76.69, cloud=0.0, wind=30.63, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:33:30', seeing=1.7, atlas_timestamp='2025-12-24T21:33:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:30:00')
2025-12-24T23:33:54.033 [DEBUG] [Thread-1098] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:33:54.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:33:54.150 [DEBUG] [Thread-1101] [transport.py] [_log()] starting thread (client mode): 0xb95f2560
2025-12-24T23:33:54.150 [DEBUG] [Thread-1101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:33:54.164 [DEBUG] [Thread-1101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:33:54.164 [INFO] [Thread-1101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:33:54.171 [DEBUG] [Thread-1101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:33:54.171 [DEBUG] [Thread-1101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:33:54.171 [DEBUG] [Thread-1101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:33:54.171 [DEBUG] [Thread-1101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:33:54.171 [DEBUG] [Thread-1101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] client lang: <none>
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] server lang: <none>
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] kex follows: False
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] Compression: none
2025-12-24T23:33:54.172 [DEBUG] [Thread-1101] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:33:54.228 [DEBUG] [Thread-1101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:33:54.228 [DEBUG] [Thread-1101] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:33:54.229 [DEBUG] [Thread-1101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:33:54.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:33:54.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:33:54.285 [DEBUG] [Thread-1101] [transport.py] [_log()] userauth is OK
2025-12-24T23:33:54.285 [DEBUG] [Thread-1101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:33:54.285 [DEBUG] [Thread-1101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:33:54.285 [DEBUG] [Thread-1101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:33:54.286 [DEBUG] [Thread-1101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:33:54.305 [INFO] [Thread-1101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:33:54.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:33:54.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:33:55.089 [DEBUG] [Thread-1101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:33:55.089 [DEBUG] [Thread-1101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:33:55.137 [DEBUG] [Thread-1101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:33:55.137 [DEBUG] [Thread-1101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:33:55.146 [DEBUG] [Thread-1101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:33:55.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:33:55.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')
2025-12-24T23:33:55.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:33:55.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:33:55.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:33:55.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:33:55.180 [DEBUG] [Thread-1101] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:33:58.741 [DEBUG] [Thread-1103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:06.412 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:06.413 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:13.814 [DEBUG] [Thread-1104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:16.421 [DEBUG] [Thread-1105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:34:25.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:34:25.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:34:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 34, 1), 3.99, 76.69, 0.0, 30.93, 13.82, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:34:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:34:01
2025-12-24T23:34:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:34:26.155 [DEBUG] [Thread-1106] [transport.py] [_log()] starting thread (client mode): 0xb95f3070
2025-12-24T23:34:26.156 [DEBUG] [Thread-1106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:34:26.170 [DEBUG] [Thread-1106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:34:26.170 [INFO] [Thread-1106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] client lang: <none>
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] server lang: <none>
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] kex follows: False
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:34:26.173 [DEBUG] [Thread-1106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:34:26.174 [DEBUG] [Thread-1106] [transport.py] [_log()] Compression: none
2025-12-24T23:34:26.174 [DEBUG] [Thread-1106] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:34:26.183 [DEBUG] [Thread-1106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:34:26.183 [DEBUG] [Thread-1106] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:34:26.184 [DEBUG] [Thread-1106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:34:26.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:34:26.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:34:26.186 [DEBUG] [Thread-1106] [transport.py] [_log()] userauth is OK
2025-12-24T23:34:26.186 [DEBUG] [Thread-1106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:34:26.186 [DEBUG] [Thread-1106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:34:26.186 [DEBUG] [Thread-1106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:34:26.186 [DEBUG] [Thread-1106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:34:26.200 [INFO] [Thread-1106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:34:26.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:34:26.791 [DEBUG] [Thread-1106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:34:26.791 [DEBUG] [Thread-1106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:34:26.792 [DEBUG] [Thread-1106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:34:26.833 [DEBUG] [Thread-1106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:34:26.833 [DEBUG] [Thread-1106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:34:26.837 [DEBUG] [Thread-1106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:34:26.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:34:26.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:34:26.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:34:26.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:34:26.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:34:26.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:34:26.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:34:26.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:34:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:34:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.898673 -999.00  +13.70  20.70     81  +10.50 1 1 1 2 1     0    0 2.73 -23.76 ZNESW 22.6 20.7 165.6 29.2 14.5 -20.2 14.3 -19.9 14.2 -18.5 14.5 -19.4
2025-12-24T23:34:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:34:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:34:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.898673
2025-12-24T23:34:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:34:26.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:34:26.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:34:26.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:34:26.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:34:26.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:34:01', tmtdew=3.99, humidity=76.69, cloud=0.0, wind=30.93, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:34:02', seeing=1.25, atlas_timestamp='2025-12-24T21:34:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:30:00')
2025-12-24T23:34:26.863 [DEBUG] [Thread-1106] [transport.py] [_log()] EOF in transport thread
2025-12-24T23: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
2025-12-24T23:34:26.957 [DEBUG] [Thread-1109] [transport.py] [_log()] starting thread (client mode): 0xb95f3f10
2025-12-24T23:34:26.957 [DEBUG] [Thread-1109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:34:26.976 [DEBUG] [Thread-1109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:34:26.976 [INFO] [Thread-1109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:34:26.984 [DEBUG] [Thread-1109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:34:26.984 [DEBUG] [Thread-1109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:34:26.984 [DEBUG] [Thread-1109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] client lang: <none>
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] server lang: <none>
2025-12-24T23:34:26.985 [DEBUG] [Thread-1109] [transport.py] [_log()] kex follows: False
2025-12-24T23:34:26.986 [DEBUG] [Thread-1109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:34:26.986 [DEBUG] [Thread-1109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:34:26.986 [DEBUG] [Thread-1109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:34:26.986 [DEBUG] [Thread-1109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:34:26.986 [DEBUG] [Thread-1109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:34:26.986 [DEBUG] [Thread-1109] [transport.py] [_log()] Compression: none
2025-12-24T23:34:26.986 [DEBUG] [Thread-1109] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:34:27.043 [DEBUG] [Thread-1109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:34:27.043 [DEBUG] [Thread-1109] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:34:27.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:34:27.045 [DEBUG] [Thread-1109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:34:27.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:34:27.102 [DEBUG] [Thread-1109] [transport.py] [_log()] userauth is OK
2025-12-24T23:34:27.102 [DEBUG] [Thread-1109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:34:27.102 [DEBUG] [Thread-1109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:34:27.103 [DEBUG] [Thread-1109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:34:27.103 [DEBUG] [Thread-1109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:34:27.124 [INFO] [Thread-1109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:34:27.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:34:27.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:34:27.946 [DEBUG] [Thread-1109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:34:27.947 [DEBUG] [Thread-1109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:34:27.995 [DEBUG] [Thread-1109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:34:27.995 [DEBUG] [Thread-1109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:34:28.005 [DEBUG] [Thread-1109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:34:28.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:34:28.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:34:28.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:34:28.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:34:28.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:34:28.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:34:28.041 [DEBUG] [Thread-1109] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:34:28.855 [DEBUG] [Thread-1111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:43.923 [DEBUG] [Thread-1112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:50.144 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:53.243 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:34:58.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:34:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:34:58.283 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 34, 33), 4.06, 76.51, 0.0, 33.7, 14.21, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:34:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:34:33
2025-12-24T23:34:58.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:34:58.966 [DEBUG] [Thread-1113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:34:59.110 [DEBUG] [Thread-1114] [transport.py] [_log()] starting thread (client mode): 0xb95799f0
2025-12-24T23:34:59.110 [DEBUG] [Thread-1114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:34:59.130 [DEBUG] [Thread-1114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:34:59.130 [INFO] [Thread-1114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:34:59.133 [DEBUG] [Thread-1114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] client lang: <none>
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] server lang: <none>
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] kex follows: False
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] Compression: none
2025-12-24T23:34:59.134 [DEBUG] [Thread-1114] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:34:59.149 [DEBUG] [Thread-1114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:34:59.149 [DEBUG] [Thread-1114] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:34:59.149 [DEBUG] [Thread-1114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:34:59.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:34:59.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:34:59.153 [DEBUG] [Thread-1114] [transport.py] [_log()] userauth is OK
2025-12-24T23:34:59.153 [DEBUG] [Thread-1114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:34:59.153 [DEBUG] [Thread-1114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:34:59.153 [DEBUG] [Thread-1114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:34:59.153 [DEBUG] [Thread-1114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:34:59.162 [INFO] [Thread-1114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:34:59.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:34:59.721 [DEBUG] [Thread-1114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:34:59.721 [DEBUG] [Thread-1114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:34:59.721 [DEBUG] [Thread-1114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:34:59.763 [DEBUG] [Thread-1114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:34:59.763 [DEBUG] [Thread-1114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:34:59.765 [DEBUG] [Thread-1114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:34:59.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:34:59.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:34:59.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:34:59.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:34:59.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:34:59.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:34:59.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:34:59.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.899020 -999.00  +13.70  18.32     81  +10.60 1 1 1 2 1     0    0 2.77 -23.39 ZNESW 25.2 18.3 155.0 32.5 14.5 -20.2 14.3 -19.7 14.2 -18.7 14.5 -19.5
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.899020
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:34:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:34:33', tmtdew=4.06, humidity=76.51, cloud=0.0, wind=33.7, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:34:34', seeing=1.25, atlas_timestamp='2025-12-24T21:34:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:33:00')
2025-12-24T23:34:59.779 [DEBUG] [Thread-1114] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:34:59.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:34:59.870 [DEBUG] [Thread-1117] [transport.py] [_log()] starting thread (client mode): 0xb95f2f50
2025-12-24T23:34:59.870 [DEBUG] [Thread-1117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:34:59.885 [DEBUG] [Thread-1117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:34:59.885 [INFO] [Thread-1117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] client lang: <none>
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] server lang: <none>
2025-12-24T23:34:59.892 [DEBUG] [Thread-1117] [transport.py] [_log()] kex follows: False
2025-12-24T23:34:59.893 [DEBUG] [Thread-1117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:34:59.893 [DEBUG] [Thread-1117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:34:59.893 [DEBUG] [Thread-1117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:34:59.893 [DEBUG] [Thread-1117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:34:59.893 [DEBUG] [Thread-1117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:34:59.893 [DEBUG] [Thread-1117] [transport.py] [_log()] Compression: none
2025-12-24T23:34:59.893 [DEBUG] [Thread-1117] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:34:59.948 [DEBUG] [Thread-1117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:34:59.948 [DEBUG] [Thread-1117] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:34:59.948 [DEBUG] [Thread-1117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:34:59.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:34:59.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:35:00.005 [DEBUG] [Thread-1117] [transport.py] [_log()] userauth is OK
2025-12-24T23:35:00.005 [DEBUG] [Thread-1117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:35:00.005 [DEBUG] [Thread-1117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:35:00.005 [DEBUG] [Thread-1117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:35:00.005 [DEBUG] [Thread-1117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:35:00.019 [INFO] [Thread-1117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:35:00.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:35:00.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:35:00.813 [DEBUG] [Thread-1117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:35:00.813 [DEBUG] [Thread-1117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:35:00.863 [DEBUG] [Thread-1117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:35:00.863 [DEBUG] [Thread-1117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:35:00.874 [DEBUG] [Thread-1117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:35:00.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:35: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')
2025-12-24T23:35: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') -> 00000000
2025-12-24T23:35:00.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:35:00.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:35:00.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:35:00.910 [DEBUG] [Thread-1117] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:35:03.658 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:06.612 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:06.613 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:14.001 [DEBUG] [Thread-1119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:16.491 [DEBUG] [Thread-1120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:23.171 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:27.550 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:29.078 [DEBUG] [Thread-1121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:35:30.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:35:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:35:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 35, 5), 3.84, 77.42, 0.0, 34.34, 13.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:35:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:35:05
2025-12-24T23:35:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:35:31.998 [DEBUG] [Thread-1122] [transport.py] [_log()] starting thread (client mode): 0xb95f3c10
2025-12-24T23:35:31.998 [DEBUG] [Thread-1122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:35:32.017 [DEBUG] [Thread-1122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:35:32.017 [INFO] [Thread-1122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:35:32.020 [DEBUG] [Thread-1122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:35:32.020 [DEBUG] [Thread-1122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] client lang: <none>
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] server lang: <none>
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] kex follows: False
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] Compression: none
2025-12-24T23:35:32.021 [DEBUG] [Thread-1122] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:35:32.036 [DEBUG] [Thread-1122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:35:32.036 [DEBUG] [Thread-1122] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:35:32.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:35:32.036 [DEBUG] [Thread-1122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:35:32.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:35:32.037 [DEBUG] [Thread-1122] [transport.py] [_log()] userauth is OK
2025-12-24T23:35:32.037 [DEBUG] [Thread-1122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:35:32.037 [DEBUG] [Thread-1122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:35:32.037 [DEBUG] [Thread-1122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:35:32.037 [DEBUG] [Thread-1122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:35:32.052 [INFO] [Thread-1122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:35:32.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:35:32.694 [DEBUG] [Thread-1122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:35:32.694 [DEBUG] [Thread-1122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:35:32.695 [DEBUG] [Thread-1122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:35:32.735 [DEBUG] [Thread-1122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:35:32.735 [DEBUG] [Thread-1122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:35:32.738 [DEBUG] [Thread-1122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:35:32.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:35:32.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:35:32.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:35:32.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:35:32.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:35:32.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:35:32.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:35:32.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:35:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:35:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.899020 -999.00  +13.70  18.32     81  +10.60 1 1 1 2 1     0    0 2.77 -23.39 ZNESW 25.2 18.3 155.0 32.5 14.5 -20.2 14.3 -19.7 14.2 -18.7 14.5 -19.5
2025-12-24T23:35:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:35:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:35:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.899020
2025-12-24T23:35:32.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:35:32.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:35:32.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:35:32.764 [DEBUG] [Thread-1122] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:35:32.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:35:32.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:35:32.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:35:05', tmtdew=3.84, humidity=77.42, cloud=0.0, wind=34.34, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:35:06', seeing=1.08, atlas_timestamp='2025-12-24T21:34:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:33:00')
2025-12-24T23:35:32.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:35:32.871 [DEBUG] [Thread-1125] [transport.py] [_log()] starting thread (client mode): 0xb95f2500
2025-12-24T23:35:32.872 [DEBUG] [Thread-1125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:35:32.887 [DEBUG] [Thread-1125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:35:32.887 [INFO] [Thread-1125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:35:32.895 [DEBUG] [Thread-1125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:35:32.895 [DEBUG] [Thread-1125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:35:32.895 [DEBUG] [Thread-1125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:35:32.895 [DEBUG] [Thread-1125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:35:32.895 [DEBUG] [Thread-1125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:35:32.895 [DEBUG] [Thread-1125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:35:32.895 [DEBUG] [Thread-1125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] client lang: <none>
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] server lang: <none>
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] kex follows: False
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] Compression: none
2025-12-24T23:35:32.896 [DEBUG] [Thread-1125] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:35:32.957 [DEBUG] [Thread-1125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:35:32.958 [DEBUG] [Thread-1125] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:35:32.959 [DEBUG] [Thread-1125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:35:32.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:35:32.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:35:33.014 [DEBUG] [Thread-1125] [transport.py] [_log()] userauth is OK
2025-12-24T23:35:33.014 [DEBUG] [Thread-1125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:35:33.015 [DEBUG] [Thread-1125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:35:33.015 [DEBUG] [Thread-1125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:35:33.015 [DEBUG] [Thread-1125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:35:33.033 [INFO] [Thread-1125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:35:33.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:35:33.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:35:33.828 [DEBUG] [Thread-1125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:35:33.828 [DEBUG] [Thread-1125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:35:33.876 [DEBUG] [Thread-1125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:35:33.876 [DEBUG] [Thread-1125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:35:33.885 [DEBUG] [Thread-1125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:35:33.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:35:33.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:35:33.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:35:33.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:35:33.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:35:33.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:35:33.921 [DEBUG] [Thread-1125] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:35:44.120 [DEBUG] [Thread-1127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:46.951 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:51.351 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:58.054 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:35:59.185 [DEBUG] [Thread-1128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:36:02.445 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:36:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:36:03.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:36:03.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:36:04.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 35, 37), 3.77, 78.04, 0.0, 36.28, 13.75, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:36:04.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:35:37
2025-12-24T23:36:04.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:36:04.911 [DEBUG] [Thread-1129] [transport.py] [_log()] starting thread (client mode): 0xb9592260
2025-12-24T23:36:04.911 [DEBUG] [Thread-1129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:36:04.932 [DEBUG] [Thread-1129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:36:04.932 [INFO] [Thread-1129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:36:04.935 [DEBUG] [Thread-1129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:36:04.935 [DEBUG] [Thread-1129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:36:04.935 [DEBUG] [Thread-1129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:36:04.935 [DEBUG] [Thread-1129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:36:04.935 [DEBUG] [Thread-1129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:36:04.935 [DEBUG] [Thread-1129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] client lang: <none>
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] server lang: <none>
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] kex follows: False
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] Compression: none
2025-12-24T23:36:04.936 [DEBUG] [Thread-1129] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:36:04.954 [DEBUG] [Thread-1129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:36:04.954 [DEBUG] [Thread-1129] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:36:04.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:36:04.955 [DEBUG] [Thread-1129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:36:04.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:36:04.957 [DEBUG] [Thread-1129] [transport.py] [_log()] userauth is OK
2025-12-24T23:36:04.957 [DEBUG] [Thread-1129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:36:04.958 [DEBUG] [Thread-1129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:36:04.958 [DEBUG] [Thread-1129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:36:04.958 [DEBUG] [Thread-1129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:36:04.972 [INFO] [Thread-1129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:36:04.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:36:05.803 [DEBUG] [Thread-1129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:36:05.803 [DEBUG] [Thread-1129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:36:05.804 [DEBUG] [Thread-1129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:36:05.844 [DEBUG] [Thread-1129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:36:05.844 [DEBUG] [Thread-1129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:36:05.847 [DEBUG] [Thread-1129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:36:05.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:36:05.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:36:05.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:36:05.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:36:05.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:36:05.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:36:05.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:36:05.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:36:05.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:36:05.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.899367 -999.00  +13.70  21.51     81  +10.60 1 1 1 2 1     0    0 2.68 -24.01 ZNESW 21.9 21.5 155.2 35.0 14.4 -20.4 14.3 -19.8 14.2 -18.6 14.5 -19.5
2025-12-24T23:36:05.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:36:05.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:36:05.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.899367
2025-12-24T23:36:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:36:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:36:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:36:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:36:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:36:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:35:37', tmtdew=3.77, humidity=78.04, cloud=0.0, wind=36.28, temperature=13.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:35:38', seeing=1.16, atlas_timestamp='2025-12-24T21:35:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:33:00')
2025-12-24T23:36:05.874 [DEBUG] [Thread-1129] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:36:05.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:36:05.979 [DEBUG] [Thread-1132] [transport.py] [_log()] starting thread (client mode): 0xb9547d00
2025-12-24T23:36:05.979 [DEBUG] [Thread-1132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:36:05.993 [DEBUG] [Thread-1132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:36:05.994 [INFO] [Thread-1132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:36:06.001 [DEBUG] [Thread-1132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:36:06.001 [DEBUG] [Thread-1132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] client lang: <none>
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] server lang: <none>
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] kex follows: False
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:36:06.002 [DEBUG] [Thread-1132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:36:06.003 [DEBUG] [Thread-1132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:36:06.003 [DEBUG] [Thread-1132] [transport.py] [_log()] Compression: none
2025-12-24T23:36:06.003 [DEBUG] [Thread-1132] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:36:06.066 [DEBUG] [Thread-1132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:36:06.066 [DEBUG] [Thread-1132] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:36:06.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:36:06.068 [DEBUG] [Thread-1132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:36:06.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:36:06.122 [DEBUG] [Thread-1132] [transport.py] [_log()] userauth is OK
2025-12-24T23:36:06.122 [DEBUG] [Thread-1132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:36:06.122 [DEBUG] [Thread-1132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:36:06.122 [DEBUG] [Thread-1132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:36:06.122 [DEBUG] [Thread-1132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:36:06.141 [INFO] [Thread-1132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:36:06.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:36:06.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:36:06.812 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:36:06.814 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:36:06.933 [DEBUG] [Thread-1132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:36:06.933 [DEBUG] [Thread-1132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:36:06.981 [DEBUG] [Thread-1132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:36:06.981 [DEBUG] [Thread-1132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:36:06.991 [DEBUG] [Thread-1132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:36:07.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:36:07.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:36: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
2025-12-24T23:36:07.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:36:07.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:36:07.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:36:07.037 [DEBUG] [Thread-1132] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:36:14.227 [DEBUG] [Thread-1134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:36:16.544 [DEBUG] [Thread-1135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:36:29.299 [DEBUG] [Thread-1136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:36:37.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:36:37.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:36:37.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
2025-12-24T23:36:37.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 36, 9), 3.73, 78.25, 0.0, 37.83, 13.74, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:36:37.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:36:09
2025-12-24T23:36:37.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:36:38.035 [DEBUG] [Thread-1137] [transport.py] [_log()] starting thread (client mode): 0xb9593220
2025-12-24T23:36:38.035 [DEBUG] [Thread-1137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:36:38.056 [DEBUG] [Thread-1137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:36:38.056 [INFO] [Thread-1137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:36:38.059 [DEBUG] [Thread-1137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:36:38.060 [DEBUG] [Thread-1137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:36:38.060 [DEBUG] [Thread-1137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:36:38.060 [DEBUG] [Thread-1137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:36:38.060 [DEBUG] [Thread-1137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:36:38.060 [DEBUG] [Thread-1137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:36:38.060 [DEBUG] [Thread-1137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:36:38.060 [DEBUG] [Thread-1137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:36:38.060 [DEBUG] [Thread-1137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:36:38.061 [DEBUG] [Thread-1137] [transport.py] [_log()] client lang: <none>
2025-12-24T23:36:38.061 [DEBUG] [Thread-1137] [transport.py] [_log()] server lang: <none>
2025-12-24T23:36:38.061 [DEBUG] [Thread-1137] [transport.py] [_log()] kex follows: False
2025-12-24T23:36:38.061 [DEBUG] [Thread-1137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:36:38.061 [DEBUG] [Thread-1137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:36:38.061 [DEBUG] [Thread-1137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:36:38.061 [DEBUG] [Thread-1137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:36:38.061 [DEBUG] [Thread-1137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:36:38.062 [DEBUG] [Thread-1137] [transport.py] [_log()] Compression: none
2025-12-24T23:36:38.062 [DEBUG] [Thread-1137] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:36:38.080 [DEBUG] [Thread-1137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:36:38.081 [DEBUG] [Thread-1137] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:36:38.081 [DEBUG] [Thread-1137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:36:38.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:36:38.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:36:38.084 [DEBUG] [Thread-1137] [transport.py] [_log()] userauth is OK
2025-12-24T23:36:38.084 [DEBUG] [Thread-1137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:36:38.084 [DEBUG] [Thread-1137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:36:38.084 [DEBUG] [Thread-1137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:36:38.085 [DEBUG] [Thread-1137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:36:38.105 [INFO] [Thread-1137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:36:38.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:36:38.723 [DEBUG] [Thread-1137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:36:38.723 [DEBUG] [Thread-1137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:36:38.724 [DEBUG] [Thread-1137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:36:38.764 [DEBUG] [Thread-1137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:36:38.764 [DEBUG] [Thread-1137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:36:38.768 [DEBUG] [Thread-1137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:36:38.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:36:38.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:36:38.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:36:38.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:36:38.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:36:38.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:36:38.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:36:38.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:36:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:36:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.899714 -999.00  +13.70  26.94     82  +10.70 1 1 1 2 1     0    0 2.71 -22.62 ZNESW 28.7 26.9 157.2 37.2 14.5 -20.3 14.3 -19.8 14.1 -18.6 14.5 -19.4
2025-12-24T23:36:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:36:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:36:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.899714
2025-12-24T23:36:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:36:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:36:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:36:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:36:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:36:38.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:36:09', tmtdew=3.73, humidity=78.25, cloud=0.0, wind=37.83, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:36:10', seeing=1.22, atlas_timestamp='2025-12-24T21:35:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:33:00')
2025-12-24T23:36:38.795 [DEBUG] [Thread-1137] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:36:38.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:36:38.898 [DEBUG] [Thread-1140] [transport.py] [_log()] starting thread (client mode): 0xb9593310
2025-12-24T23:36:38.898 [DEBUG] [Thread-1140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:36:38.913 [DEBUG] [Thread-1140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:36:38.913 [INFO] [Thread-1140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:36:38.921 [DEBUG] [Thread-1140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:36:38.921 [DEBUG] [Thread-1140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:36:38.921 [DEBUG] [Thread-1140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:36:38.921 [DEBUG] [Thread-1140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:36:38.921 [DEBUG] [Thread-1140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:36:38.921 [DEBUG] [Thread-1140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] client lang: <none>
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] server lang: <none>
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] kex follows: False
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] Compression: none
2025-12-24T23:36:38.922 [DEBUG] [Thread-1140] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:36:38.982 [DEBUG] [Thread-1140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:36:38.983 [DEBUG] [Thread-1140] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:36:38.984 [DEBUG] [Thread-1140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:36:38.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:36:38.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:36:39.042 [DEBUG] [Thread-1140] [transport.py] [_log()] userauth is OK
2025-12-24T23:36:39.042 [DEBUG] [Thread-1140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:36:39.042 [DEBUG] [Thread-1140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:36:39.042 [DEBUG] [Thread-1140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:36:39.042 [DEBUG] [Thread-1140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:36:39.061 [INFO] [Thread-1140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:36:39.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:36:39.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:36:39.855 [DEBUG] [Thread-1140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:36:39.855 [DEBUG] [Thread-1140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:36:39.904 [DEBUG] [Thread-1140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:36:39.904 [DEBUG] [Thread-1140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:36:39.919 [DEBUG] [Thread-1140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:36:39.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:36:39.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:36:39.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:36:39.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:36:39.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:36:39.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:36:39.955 [DEBUG] [Thread-1140] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:36:44.342 [DEBUG] [Thread-1142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:36:59.393 [DEBUG] [Thread-1143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:01.768 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:04.824 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:07.014 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:07.015 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:09.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:37:09.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:37:09.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:37:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 36, 41), 3.65, 78.92, 0.0, 37.95, 13.77, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:37:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:36:41
2025-12-24T23:37:10.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:37:10.958 [DEBUG] [Thread-1144] [transport.py] [_log()] starting thread (client mode): 0xb95f2860
2025-12-24T23:37:10.958 [DEBUG] [Thread-1144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:37:10.974 [DEBUG] [Thread-1144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:37:10.974 [INFO] [Thread-1144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:37:10.977 [DEBUG] [Thread-1144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] client lang: <none>
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] server lang: <none>
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] kex follows: False
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] Compression: none
2025-12-24T23:37:10.978 [DEBUG] [Thread-1144] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:37:10.995 [DEBUG] [Thread-1144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:37:10.996 [DEBUG] [Thread-1144] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:37:10.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:37:10.997 [DEBUG] [Thread-1144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:37:10.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:37:10.999 [DEBUG] [Thread-1144] [transport.py] [_log()] userauth is OK
2025-12-24T23:37:10.999 [DEBUG] [Thread-1144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:37:11.000 [DEBUG] [Thread-1144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:37:11.000 [DEBUG] [Thread-1144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:37:11.000 [DEBUG] [Thread-1144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:37:11.034 [INFO] [Thread-1144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:37:11.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:37:11.831 [DEBUG] [Thread-1144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:37:11.831 [DEBUG] [Thread-1144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:37:11.831 [DEBUG] [Thread-1144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:37:11.872 [DEBUG] [Thread-1144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:37:11.873 [DEBUG] [Thread-1144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:37:11.875 [DEBUG] [Thread-1144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:37:11.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:37:11.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:37:11.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:37:11.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:37:11.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:37:11.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:37:11.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:37:11.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:37:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:37:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.900409 -999.00  +13.60  31.74     82  +10.70 1 1 2 2 1     0    0 2.63 -25.20 ZNESW 29.7 31.7 153.2 39.3 14.4 -20.3 14.3 -19.8 14.1 -18.6 14.4 -19.4
2025-12-24T23:37:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:37:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:37:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.900409
2025-12-24T23:37:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:37:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:37:11.903 [DEBUG] [Thread-1144] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:37:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:37:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:37:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:37:11.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:36:41', tmtdew=3.65, humidity=78.92, cloud=0.0, wind=37.95, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:36:42', seeing=1.22, atlas_timestamp='2025-12-24T21:36:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.060249999999999915, 0.13475000000000037, 0.16375000000000028, 0.06649999999999956, 0.14300000000000068, 0.1647500000000015, 0.13100000000000023, 0.0782500000000006, 0.1324999999999985, 0.09799999999999898, 0.13924999999999876, 0.09299999999999997, 0.16799999999999926, 0.16424999999999912, 0.059499999999999886, 0.05749999999999922, 0.1302500000000002, 0.15450000000000053, 0.10049999999999848, 0.06325000000000003, 0.1949999999999985, 0.1322499999999991, 0.11925000000000097, 0.12674999999999947, 0.19799999999999862, 0.15649999999999942, 0.1147500000000008, 0.12950000000000017, 0.16500000000000092, 0.15000000000000213, 0.14300000000000068, 0.10150000000000148, 0.25324999999999775], zp_timestamp='2025-12-24T21:33:00')
2025-12-24T23:37:11.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:37:12.005 [DEBUG] [Thread-1147] [transport.py] [_log()] starting thread (client mode): 0xb95f2950
2025-12-24T23:37:12.005 [DEBUG] [Thread-1147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:37:12.020 [DEBUG] [Thread-1147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:37:12.020 [INFO] [Thread-1147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:37:12.028 [DEBUG] [Thread-1147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:37:12.028 [DEBUG] [Thread-1147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:37:12.028 [DEBUG] [Thread-1147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] client lang: <none>
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] server lang: <none>
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] kex follows: False
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:37:12.029 [DEBUG] [Thread-1147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:37:12.030 [DEBUG] [Thread-1147] [transport.py] [_log()] Compression: none
2025-12-24T23:37:12.030 [DEBUG] [Thread-1147] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:37:12.085 [DEBUG] [Thread-1147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:37:12.086 [DEBUG] [Thread-1147] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:37:12.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:37:12.087 [DEBUG] [Thread-1147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:37:12.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:37:12.142 [DEBUG] [Thread-1147] [transport.py] [_log()] userauth is OK
2025-12-24T23:37:12.142 [DEBUG] [Thread-1147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:37:12.142 [DEBUG] [Thread-1147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:37:12.142 [DEBUG] [Thread-1147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:37:12.142 [DEBUG] [Thread-1147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:37:12.161 [INFO] [Thread-1147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:37:12.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:37:12.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:37:12.957 [DEBUG] [Thread-1147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:37:12.957 [DEBUG] [Thread-1147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:37:13.011 [DEBUG] [Thread-1147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:37:13.011 [DEBUG] [Thread-1147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:37:13.025 [DEBUG] [Thread-1147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:37:13.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:37:13.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:37:13.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
2025-12-24T23:37:13.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:37:13.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:37:13.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:37:13.078 [DEBUG] [Thread-1147] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:37:14.432 [DEBUG] [Thread-1149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:16.596 [DEBUG] [Thread-1150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:29.495 [DEBUG] [Thread-1151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:43.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:37:43.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:37:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:37:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 37, 14), 3.62, 79.05, 0.0, 35.64, 13.72, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:37:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:37:14
2025-12-24T23:37:43.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:37:44.054 [DEBUG] [Thread-1152] [transport.py] [_log()] starting thread (client mode): 0xb9591f30
2025-12-24T23:37:44.054 [DEBUG] [Thread-1152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:37:44.074 [DEBUG] [Thread-1152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:37:44.074 [INFO] [Thread-1152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] client lang: <none>
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] server lang: <none>
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] kex follows: False
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] Compression: none
2025-12-24T23:37:44.076 [DEBUG] [Thread-1152] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:37:44.089 [DEBUG] [Thread-1152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:37:44.090 [DEBUG] [Thread-1152] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:37:44.090 [DEBUG] [Thread-1152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:37:44.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:37:44.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:37:44.092 [DEBUG] [Thread-1152] [transport.py] [_log()] userauth is OK
2025-12-24T23:37:44.092 [DEBUG] [Thread-1152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:37:44.092 [DEBUG] [Thread-1152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:37:44.092 [DEBUG] [Thread-1152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:37:44.093 [DEBUG] [Thread-1152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:37:44.116 [INFO] [Thread-1152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:37:44.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:37:44.534 [DEBUG] [Thread-1154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:37:44.744 [DEBUG] [Thread-1152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:37:44.744 [DEBUG] [Thread-1152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:37:44.745 [DEBUG] [Thread-1152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:37:44.785 [DEBUG] [Thread-1152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:37:44.785 [DEBUG] [Thread-1152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:37:44.788 [DEBUG] [Thread-1152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:37:44.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:37:44.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:37:44.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:37:44.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:37:44.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:37:44.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:37:44.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:37:44.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:37:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:37:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.900756 -999.00  +13.60  25.14     82  +10.70 1 1 1 2 1     0    0 2.58 -26.42 ZNESW 26.1 25.1 160.6 33.2 14.4 -20.2 14.2 -19.7 14.1 -18.6 14.4 -19.5
2025-12-24T23:37:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:37:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:37:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.900756
2025-12-24T23:37:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:37:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:37:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:37:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:37:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:37:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:37:14', tmtdew=3.62, humidity=79.05, cloud=0.0, wind=35.64, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:37:14', seeing=1.21, atlas_timestamp='2025-12-24T21:37:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.14925000000000033, 0.18524999999999991, 0.1274999999999995, 0.14649999999999963, 0.1667500000000004, 0.13599999999999923, 0.08525000000000027, 0.12549999999999883, 0.11100000000000065, 0.13824999999999932, 0.08799999999999919, 0.1999999999999993, 0.19324999999999903, 0.09299999999999997, 0.07600000000000051, 0.13574999999999982, 0.1590000000000007, 0.1034999999999986, 0.06325000000000003, 0.1769999999999996, 0.13124999999999787, 0.16125000000000078, 0.13175000000000026, 0.19399999999999906, 0.15050000000000097, 0.09675000000000011, 0.11250000000000071, 0.21499999999999986, 0.13900000000000112, 0.1880000000000006, 0.11299999999999955, 0.2572499999999991], zp_timestamp='2025-12-24T21:36:00')
2025-12-24T23:37:44.817 [DEBUG] [Thread-1152] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:37:44.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:37:44.917 [DEBUG] [Thread-1156] [transport.py] [_log()] starting thread (client mode): 0xb9547850
2025-12-24T23:37:44.917 [DEBUG] [Thread-1156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:37:44.932 [DEBUG] [Thread-1156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:37:44.933 [INFO] [Thread-1156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:37:44.940 [DEBUG] [Thread-1156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:37:44.940 [DEBUG] [Thread-1156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:37:44.940 [DEBUG] [Thread-1156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] client lang: <none>
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] server lang: <none>
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] kex follows: False
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:37:44.941 [DEBUG] [Thread-1156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:37:44.942 [DEBUG] [Thread-1156] [transport.py] [_log()] Compression: none
2025-12-24T23:37:44.942 [DEBUG] [Thread-1156] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:37:44.997 [DEBUG] [Thread-1156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:37:44.998 [DEBUG] [Thread-1156] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:37:44.998 [DEBUG] [Thread-1156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:37:44.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:37:44.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:37:45.054 [DEBUG] [Thread-1156] [transport.py] [_log()] userauth is OK
2025-12-24T23:37:45.055 [DEBUG] [Thread-1156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:37:45.055 [DEBUG] [Thread-1156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:37:45.055 [DEBUG] [Thread-1156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:37:45.055 [DEBUG] [Thread-1156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:37:45.074 [INFO] [Thread-1156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:37:45.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:37:45.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:37:45.867 [DEBUG] [Thread-1156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:37:45.867 [DEBUG] [Thread-1156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:37:45.915 [DEBUG] [Thread-1156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:37:45.915 [DEBUG] [Thread-1156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:37:45.925 [DEBUG] [Thread-1156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:37:45.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:37:45.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:37:45.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:37:45.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:37:45.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:37:45.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:37:45.961 [DEBUG] [Thread-1156] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:37:59.573 [DEBUG] [Thread-1158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:38:07.216 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:38:07.217 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:38:14.643 [DEBUG] [Thread-1159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:38:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:38:15.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:38:15.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
2025-12-24T23:38:16.650 [DEBUG] [Thread-1160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:38:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 37, 46), 3.51, 79.13, 0.0, 31.04, 13.64, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:38:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:37:46
2025-12-24T23:38:16.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:38:16.977 [DEBUG] [Thread-1161] [transport.py] [_log()] starting thread (client mode): 0xb95441c0
2025-12-24T23:38:16.977 [DEBUG] [Thread-1161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:38:16.993 [DEBUG] [Thread-1161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:38:16.993 [INFO] [Thread-1161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] client lang: <none>
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] server lang: <none>
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] kex follows: False
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] Compression: none
2025-12-24T23:38:16.996 [DEBUG] [Thread-1161] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:38:17.014 [DEBUG] [Thread-1161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:38:17.014 [DEBUG] [Thread-1161] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:38:17.014 [DEBUG] [Thread-1161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:38:17.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:38:17.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:38:17.015 [DEBUG] [Thread-1161] [transport.py] [_log()] userauth is OK
2025-12-24T23:38:17.015 [DEBUG] [Thread-1161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:38:17.015 [DEBUG] [Thread-1161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:38:17.015 [DEBUG] [Thread-1161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:38:17.015 [DEBUG] [Thread-1161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:38:17.030 [INFO] [Thread-1161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:38:17.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:38:17.845 [DEBUG] [Thread-1161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:38:17.845 [DEBUG] [Thread-1161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:38:17.845 [DEBUG] [Thread-1161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:38:17.885 [DEBUG] [Thread-1161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:38:17.885 [DEBUG] [Thread-1161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:38:17.888 [DEBUG] [Thread-1161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:38:17.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:38:17.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:38:17.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:38:17.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:38:17.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:38:17.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:38:17.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:38:17.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:38:17.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:38:17.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.901103 -999.00  +13.60  33.48     83  +10.80 1 1 2 2 1     0    0 2.48 -28.80 ZNESW 34.6 33.5 164.8 37.5 14.4 -20.4 14.2 -19.8 14.1 -18.6 14.4 -19.4
2025-12-24T23:38:17.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:38:17.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:38:17.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.901103
2025-12-24T23:38:17.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:38:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:38:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:38:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:38:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:38:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:37:46', tmtdew=3.51, humidity=79.13, cloud=0.0, wind=31.04, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:37:46', seeing=1.54, atlas_timestamp='2025-12-24T21:37:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.14925000000000033, 0.18524999999999991, 0.1274999999999995, 0.14649999999999963, 0.1667500000000004, 0.13599999999999923, 0.08525000000000027, 0.12549999999999883, 0.11100000000000065, 0.13824999999999932, 0.08799999999999919, 0.1999999999999993, 0.19324999999999903, 0.09299999999999997, 0.07600000000000051, 0.13574999999999982, 0.1590000000000007, 0.1034999999999986, 0.06325000000000003, 0.1769999999999996, 0.13124999999999787, 0.16125000000000078, 0.13175000000000026, 0.19399999999999906, 0.15050000000000097, 0.09675000000000011, 0.11250000000000071, 0.21499999999999986, 0.13900000000000112, 0.1880000000000006, 0.11299999999999955, 0.2572499999999991], zp_timestamp='2025-12-24T21:36:00')
2025-12-24T23:38:17.906 [DEBUG] [Thread-1161] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:38:17.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:38:18.000 [DEBUG] [Thread-1164] [transport.py] [_log()] starting thread (client mode): 0xb95f09a0
2025-12-24T23:38:18.000 [DEBUG] [Thread-1164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:38:18.018 [DEBUG] [Thread-1164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:38:18.018 [INFO] [Thread-1164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:38:18.025 [DEBUG] [Thread-1164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] client lang: <none>
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] server lang: <none>
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] kex follows: False
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] Compression: none
2025-12-24T23:38:18.026 [DEBUG] [Thread-1164] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:38:18.084 [DEBUG] [Thread-1164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:38:18.084 [DEBUG] [Thread-1164] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:38:18.085 [DEBUG] [Thread-1164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:38:18.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:38:18.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:38:18.141 [DEBUG] [Thread-1164] [transport.py] [_log()] userauth is OK
2025-12-24T23:38:18.141 [DEBUG] [Thread-1164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:38:18.141 [DEBUG] [Thread-1164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:38:18.141 [DEBUG] [Thread-1164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:38:18.141 [DEBUG] [Thread-1164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:38:18.155 [INFO] [Thread-1164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:38:18.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:38:18.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:38:18.949 [DEBUG] [Thread-1164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:38:18.949 [DEBUG] [Thread-1164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:38:18.997 [DEBUG] [Thread-1164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:38:18.997 [DEBUG] [Thread-1164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:38:19.005 [DEBUG] [Thread-1164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:38:19.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:38:19.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:38:19.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:38:19.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:38:19.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:38:19.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:38:19.037 [DEBUG] [Thread-1164] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:38:29.682 [DEBUG] [Thread-1166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:38:44.756 [DEBUG] [Thread-1167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:38:49.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:38:49.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:38:49.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:38:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 38, 18), 3.5, 79.18, 0.0, 31.44, 13.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:38:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:38:18
2025-12-24T23:38:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:38:50.030 [DEBUG] [Thread-1168] [transport.py] [_log()] starting thread (client mode): 0xb95938b0
2025-12-24T23:38:50.031 [DEBUG] [Thread-1168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:38:50.044 [DEBUG] [Thread-1168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:38:50.045 [INFO] [Thread-1168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] client lang: <none>
2025-12-24T23:38:50.048 [DEBUG] [Thread-1168] [transport.py] [_log()] server lang: <none>
2025-12-24T23:38:50.049 [DEBUG] [Thread-1168] [transport.py] [_log()] kex follows: False
2025-12-24T23:38:50.049 [DEBUG] [Thread-1168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:38:50.049 [DEBUG] [Thread-1168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:38:50.049 [DEBUG] [Thread-1168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:38:50.049 [DEBUG] [Thread-1168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:38:50.049 [DEBUG] [Thread-1168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:38:50.049 [DEBUG] [Thread-1168] [transport.py] [_log()] Compression: none
2025-12-24T23:38:50.049 [DEBUG] [Thread-1168] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:38:50.067 [DEBUG] [Thread-1168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:38:50.067 [DEBUG] [Thread-1168] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:38:50.068 [DEBUG] [Thread-1168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:38:50.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:38:50.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:38:50.070 [DEBUG] [Thread-1168] [transport.py] [_log()] userauth is OK
2025-12-24T23:38:50.070 [DEBUG] [Thread-1168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:38:50.070 [DEBUG] [Thread-1168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:38:50.070 [DEBUG] [Thread-1168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:38:50.070 [DEBUG] [Thread-1168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:38:50.094 [INFO] [Thread-1168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:38:50.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:38:50.784 [DEBUG] [Thread-1168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:38:50.785 [DEBUG] [Thread-1168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:38:50.785 [DEBUG] [Thread-1168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:38:50.824 [DEBUG] [Thread-1168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:38:50.825 [DEBUG] [Thread-1168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:38:50.827 [DEBUG] [Thread-1168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:38:50.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:38:50.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:38:50.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:38:50.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:38:50.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:38:50.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:38:50.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:38:50.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:38:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:38:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.901450 -999.00  +13.50  23.41     83  +10.80 1 1 1 2 1     0    0 2.45 -31.32 ZNESW 22.1 23.4 148.4 40.1 14.4 -20.2 14.2 -19.8 14.1 -18.5 14.4 -19.4
2025-12-24T23:38:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:38:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:38:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.901450
2025-12-24T23:38:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:38:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:38:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:38:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:38:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:38:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:38:18', tmtdew=3.5, humidity=79.18, cloud=0.0, wind=31.44, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:38:18', seeing=1.3, atlas_timestamp='2025-12-24T21:38:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.14925000000000033, 0.18524999999999991, 0.1274999999999995, 0.14649999999999963, 0.1667500000000004, 0.13599999999999923, 0.08525000000000027, 0.12549999999999883, 0.11100000000000065, 0.13824999999999932, 0.08799999999999919, 0.1999999999999993, 0.19324999999999903, 0.09299999999999997, 0.07600000000000051, 0.13574999999999982, 0.1590000000000007, 0.1034999999999986, 0.06325000000000003, 0.1769999999999996, 0.13124999999999787, 0.16125000000000078, 0.13175000000000026, 0.19399999999999906, 0.15050000000000097, 0.09675000000000011, 0.11250000000000071, 0.21499999999999986, 0.13900000000000112, 0.1880000000000006, 0.11299999999999955, 0.2572499999999991], zp_timestamp='2025-12-24T21:36:00')
2025-12-24T23:38:50.848 [DEBUG] [Thread-1168] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:38:50.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:38:50.952 [DEBUG] [Thread-1171] [transport.py] [_log()] starting thread (client mode): 0xb9592d40
2025-12-24T23:38:50.952 [DEBUG] [Thread-1171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:38:50.966 [DEBUG] [Thread-1171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:38:50.967 [INFO] [Thread-1171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] client lang: <none>
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] server lang: <none>
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] kex follows: False
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:38:50.974 [DEBUG] [Thread-1171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:38:50.975 [DEBUG] [Thread-1171] [transport.py] [_log()] Compression: none
2025-12-24T23:38:50.975 [DEBUG] [Thread-1171] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:38:51.036 [DEBUG] [Thread-1171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:38:51.036 [DEBUG] [Thread-1171] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:38:51.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:38:51.036 [DEBUG] [Thread-1171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:38:51.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:38:51.093 [DEBUG] [Thread-1171] [transport.py] [_log()] userauth is OK
2025-12-24T23:38:51.093 [DEBUG] [Thread-1171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:38:51.093 [DEBUG] [Thread-1171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:38:51.093 [DEBUG] [Thread-1171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:38:51.093 [DEBUG] [Thread-1171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:38:51.107 [INFO] [Thread-1171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:38:51.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:38:51.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:38:51.889 [DEBUG] [Thread-1171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:38:51.890 [DEBUG] [Thread-1171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:38:51.937 [DEBUG] [Thread-1171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:38:51.937 [DEBUG] [Thread-1171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:38:51.946 [DEBUG] [Thread-1171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:38:51.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:38:51.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:38:51.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:38:51.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:38:51.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:38:51.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:38:51.977 [DEBUG] [Thread-1171] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:38:59.795 [DEBUG] [Thread-1173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:39:07.413 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:39:07.415 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:39:14.864 [DEBUG] [Thread-1174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:39:16.708 [DEBUG] [Thread-1175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:39:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:39:22.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:39:22.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:39:22.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 38, 50), 3.47, 79.3, 0.0, 36.54, 13.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:39:22.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:38:50
2025-12-24T23:39:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:39:22.992 [DEBUG] [Thread-1176] [transport.py] [_log()] starting thread (client mode): 0xb95f1f30
2025-12-24T23:39:22.992 [DEBUG] [Thread-1176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:39:23.012 [DEBUG] [Thread-1176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:39:23.012 [INFO] [Thread-1176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] client lang: <none>
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] server lang: <none>
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] kex follows: False
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] Compression: none
2025-12-24T23:39:23.016 [DEBUG] [Thread-1176] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:39:23.031 [DEBUG] [Thread-1176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:39:23.031 [DEBUG] [Thread-1176] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:39:23.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:39:23.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:39:23.032 [DEBUG] [Thread-1176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:39:23.032 [DEBUG] [Thread-1176] [transport.py] [_log()] userauth is OK
2025-12-24T23:39:23.032 [DEBUG] [Thread-1176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:39:23.032 [DEBUG] [Thread-1176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:39:23.032 [DEBUG] [Thread-1176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:39:23.032 [DEBUG] [Thread-1176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:39:23.045 [INFO] [Thread-1176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:39:23.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:39:23.681 [DEBUG] [Thread-1176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:39:23.681 [DEBUG] [Thread-1176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:39:23.681 [DEBUG] [Thread-1176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:39:23.723 [DEBUG] [Thread-1176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:39:23.723 [DEBUG] [Thread-1176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:39:23.725 [DEBUG] [Thread-1176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:39:23.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:39:23.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:39:23.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:39:23.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:39:23.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:39:23.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:39:23.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:39:23.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:39:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:39:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.901797 -999.00  +13.50  22.36     83  +10.80 1 1 1 2 1     0    0 2.27 -33.86 ZNESW 30.6 22.4 152.6 35.7 14.3 -20.3 14.2 -19.7 14.1 -18.5 14.4 -19.4
2025-12-24T23:39:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:39:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:39:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.901797
2025-12-24T23:39:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:39:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:39:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:39:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:39:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:39:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:38:50', tmtdew=3.47, humidity=79.3, cloud=0.0, wind=36.54, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:38:50', seeing=1.53, atlas_timestamp='2025-12-24T21:38:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.14925000000000033, 0.18524999999999991, 0.1274999999999995, 0.14649999999999963, 0.1667500000000004, 0.13599999999999923, 0.08525000000000027, 0.12549999999999883, 0.11100000000000065, 0.13824999999999932, 0.08799999999999919, 0.1999999999999993, 0.19324999999999903, 0.09299999999999997, 0.07600000000000051, 0.13574999999999982, 0.1590000000000007, 0.1034999999999986, 0.06325000000000003, 0.1769999999999996, 0.13124999999999787, 0.16125000000000078, 0.13175000000000026, 0.19399999999999906, 0.15050000000000097, 0.09675000000000011, 0.11250000000000071, 0.21499999999999986, 0.13900000000000112, 0.1880000000000006, 0.11299999999999955, 0.2572499999999991], zp_timestamp='2025-12-24T21:36:00')
2025-12-24T23:39:23.745 [DEBUG] [Thread-1176] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:39:23.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:39:23.841 [DEBUG] [Thread-1179] [transport.py] [_log()] starting thread (client mode): 0xb95b3b20
2025-12-24T23:39:23.841 [DEBUG] [Thread-1179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:39:23.860 [DEBUG] [Thread-1179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:39:23.860 [INFO] [Thread-1179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:39:23.867 [DEBUG] [Thread-1179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:39:23.867 [DEBUG] [Thread-1179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:39:23.867 [DEBUG] [Thread-1179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:39:23.867 [DEBUG] [Thread-1179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:39:23.867 [DEBUG] [Thread-1179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:39:23.867 [DEBUG] [Thread-1179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:39:23.867 [DEBUG] [Thread-1179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:39:23.867 [DEBUG] [Thread-1179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] client lang: <none>
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] server lang: <none>
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] kex follows: False
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] Compression: none
2025-12-24T23:39:23.868 [DEBUG] [Thread-1179] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:39:23.924 [DEBUG] [Thread-1179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:39:23.924 [DEBUG] [Thread-1179] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:39:23.924 [DEBUG] [Thread-1179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:39:23.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:39:23.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:39:23.981 [DEBUG] [Thread-1179] [transport.py] [_log()] userauth is OK
2025-12-24T23:39:23.981 [DEBUG] [Thread-1179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:39:23.981 [DEBUG] [Thread-1179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:39:23.981 [DEBUG] [Thread-1179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:39:23.981 [DEBUG] [Thread-1179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:39:23.995 [INFO] [Thread-1179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:39:23.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:39:23.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:39:24.790 [DEBUG] [Thread-1179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:39:24.790 [DEBUG] [Thread-1179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:39:24.838 [DEBUG] [Thread-1179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:39:24.838 [DEBUG] [Thread-1179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:39:24.847 [DEBUG] [Thread-1179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:39:24.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:39:24.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:39:24.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:39:24.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:39:24.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:39:24.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:39:24.878 [DEBUG] [Thread-1179] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:39:29.909 [DEBUG] [Thread-1181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:39:44.972 [DEBUG] [Thread-1182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:39:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:39:54.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:39:54.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:39:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 39, 22), 3.47, 79.33, 0.0, 32.52, 13.66, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:39:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:39:22
2025-12-24T23:39:55.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:39:55.952 [DEBUG] [Thread-1183] [transport.py] [_log()] starting thread (client mode): 0xb95d4a90
2025-12-24T23:39:55.953 [DEBUG] [Thread-1183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:39:55.973 [DEBUG] [Thread-1183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:39:55.973 [INFO] [Thread-1183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] client lang: <none>
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] server lang: <none>
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] kex follows: False
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] Compression: none
2025-12-24T23:39:55.976 [DEBUG] [Thread-1183] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:39:55.990 [DEBUG] [Thread-1183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:39:55.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:39:55.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:39:55.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:39:55.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:39:55.991 [DEBUG] [Thread-1183] [transport.py] [_log()] userauth is OK
2025-12-24T23:39:55.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:39:55.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:39:55.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:39:55.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:39:56.007 [INFO] [Thread-1183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:39:56.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:39:56.641 [DEBUG] [Thread-1183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:39:56.641 [DEBUG] [Thread-1183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:39:56.641 [DEBUG] [Thread-1183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:39:56.682 [DEBUG] [Thread-1183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:39:56.682 [DEBUG] [Thread-1183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:39:56.684 [DEBUG] [Thread-1183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:39:56.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:39:56.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:39:56.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:39:56.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:39:56.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:39:56.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:39:56.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.902145 -999.00  +13.50  20.96     83  +10.80 1 1 1 2 1     0    0 2.25 -35.97 ZNESW 17.2 21.0 150.8 35.9 14.4 -20.1 14.2 -19.7 14.1 -18.5 14.4 -19.5
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.902145
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:39:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:39:22', tmtdew=3.47, humidity=79.33, cloud=0.0, wind=32.52, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:39:22', seeing=2.23, atlas_timestamp='2025-12-24T21:39:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.14925000000000033, 0.18524999999999991, 0.1274999999999995, 0.14649999999999963, 0.1667500000000004, 0.13599999999999923, 0.08525000000000027, 0.12549999999999883, 0.11100000000000065, 0.13824999999999932, 0.08799999999999919, 0.1999999999999993, 0.19324999999999903, 0.09299999999999997, 0.07600000000000051, 0.13574999999999982, 0.1590000000000007, 0.1034999999999986, 0.06325000000000003, 0.1769999999999996, 0.13124999999999787, 0.16125000000000078, 0.13175000000000026, 0.19399999999999906, 0.15050000000000097, 0.09675000000000011, 0.11250000000000071, 0.21499999999999986, 0.13900000000000112, 0.1880000000000006, 0.11299999999999955, 0.2572499999999991], zp_timestamp='2025-12-24T21:36:00')
2025-12-24T23:39:56.706 [DEBUG] [Thread-1183] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:39:56.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:39:56.795 [DEBUG] [Thread-1186] [transport.py] [_log()] starting thread (client mode): 0xb95d6b60
2025-12-24T23:39:56.795 [DEBUG] [Thread-1186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:39:56.810 [DEBUG] [Thread-1186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:39:56.810 [INFO] [Thread-1186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] client lang: <none>
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] server lang: <none>
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] kex follows: False
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] Compression: none
2025-12-24T23:39:56.818 [DEBUG] [Thread-1186] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:39:56.876 [DEBUG] [Thread-1186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:39:56.876 [DEBUG] [Thread-1186] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:39:56.876 [DEBUG] [Thread-1186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:39:56.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:39:56.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:39:56.933 [DEBUG] [Thread-1186] [transport.py] [_log()] userauth is OK
2025-12-24T23:39:56.933 [DEBUG] [Thread-1186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:39:56.933 [DEBUG] [Thread-1186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:39:56.933 [DEBUG] [Thread-1186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:39:56.933 [DEBUG] [Thread-1186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:39:56.947 [INFO] [Thread-1186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:39:56.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:39:56.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:39:57.749 [DEBUG] [Thread-1186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:39:57.750 [DEBUG] [Thread-1186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:39:57.797 [DEBUG] [Thread-1186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:39:57.797 [DEBUG] [Thread-1186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:39:57.806 [DEBUG] [Thread-1186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:39:57.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:39:57.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:39:57.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:39:57.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:39:57.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:39:57.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:39:57.843 [DEBUG] [Thread-1186] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:40:00.013 [DEBUG] [Thread-1188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:07.615 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:07.616 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:15.068 [DEBUG] [Thread-1189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:16.782 [DEBUG] [Thread-1190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:27.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:40:27.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:40:27.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:40:28.562 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 39, 54), 3.4, 79.91, 0.0, 33.56, 13.67, 0, 0, 0, 2, 0, 0),)
2025-12-24T23:40:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:39:54
2025-12-24T23:40:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:40:28.916 [DEBUG] [Thread-1191] [transport.py] [_log()] starting thread (client mode): 0xb95b2680
2025-12-24T23:40:28.916 [DEBUG] [Thread-1191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:40:28.938 [DEBUG] [Thread-1191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:40:28.938 [INFO] [Thread-1191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:40:28.941 [DEBUG] [Thread-1191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:40:28.941 [DEBUG] [Thread-1191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] client lang: <none>
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] server lang: <none>
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] kex follows: False
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] Compression: none
2025-12-24T23:40:28.942 [DEBUG] [Thread-1191] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:40:28.957 [DEBUG] [Thread-1191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:40:28.957 [DEBUG] [Thread-1191] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:40:28.957 [DEBUG] [Thread-1191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:40:28.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:40:28.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:40:28.958 [DEBUG] [Thread-1191] [transport.py] [_log()] userauth is OK
2025-12-24T23:40:28.958 [DEBUG] [Thread-1191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:40:28.958 [DEBUG] [Thread-1191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:40:28.958 [DEBUG] [Thread-1191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:40:28.958 [DEBUG] [Thread-1191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:40:28.967 [INFO] [Thread-1191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:40:28.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:40:29.615 [DEBUG] [Thread-1191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:40:29.615 [DEBUG] [Thread-1191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:40:29.615 [DEBUG] [Thread-1191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:40:29.656 [DEBUG] [Thread-1191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:40:29.656 [DEBUG] [Thread-1191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:40:29.659 [DEBUG] [Thread-1191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:40:29.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:40:29.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:40:29.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:40:29.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:40:29.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:40:29.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:40:29.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:40:29.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:40:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:40:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.902839 -999.00  +13.50  22.79     83  +10.80 1 1 1 2 1     0    0 2.00 -42.76 ZNESW 22.3 22.8 143.6 35.3 14.3 -20.1 14.2 -19.8 14.0 -18.4 14.4 -19.4
2025-12-24T23:40:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:40:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:40:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.902839
2025-12-24T23:40:29.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:40:29.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:40:29.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:40:29.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:40:29.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:40:29.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:39:54', tmtdew=3.4, humidity=79.91, cloud=0.0, wind=33.56, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:40:27', seeing=1.38, atlas_timestamp='2025-12-24T21:40:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.14925000000000033, 0.18524999999999991, 0.1274999999999995, 0.14649999999999963, 0.1667500000000004, 0.13599999999999923, 0.08525000000000027, 0.12549999999999883, 0.11100000000000065, 0.13824999999999932, 0.08799999999999919, 0.1999999999999993, 0.19324999999999903, 0.09299999999999997, 0.07600000000000051, 0.13574999999999982, 0.1590000000000007, 0.1034999999999986, 0.06325000000000003, 0.1769999999999996, 0.13124999999999787, 0.16125000000000078, 0.13175000000000026, 0.19399999999999906, 0.15050000000000097, 0.09675000000000011, 0.11250000000000071, 0.21499999999999986, 0.13900000000000112, 0.1880000000000006, 0.11299999999999955, 0.2572499999999991], zp_timestamp='2025-12-24T21:36:00')
2025-12-24T23:40:29.685 [DEBUG] [Thread-1191] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:40:29.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:40:29.787 [DEBUG] [Thread-1194] [transport.py] [_log()] starting thread (client mode): 0xb95f1870
2025-12-24T23:40:29.788 [DEBUG] [Thread-1194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:40:29.803 [DEBUG] [Thread-1194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:40:29.803 [INFO] [Thread-1194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] client lang: <none>
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] server lang: <none>
2025-12-24T23:40:29.811 [DEBUG] [Thread-1194] [transport.py] [_log()] kex follows: False
2025-12-24T23:40:29.812 [DEBUG] [Thread-1194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:40:29.812 [DEBUG] [Thread-1194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:40:29.812 [DEBUG] [Thread-1194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:40:29.812 [DEBUG] [Thread-1194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:40:29.812 [DEBUG] [Thread-1194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:40:29.813 [DEBUG] [Thread-1194] [transport.py] [_log()] Compression: none
2025-12-24T23:40:29.813 [DEBUG] [Thread-1194] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:40:29.871 [DEBUG] [Thread-1194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:40:29.871 [DEBUG] [Thread-1194] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:40:29.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:40:29.872 [DEBUG] [Thread-1194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:40:29.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:40:29.934 [DEBUG] [Thread-1194] [transport.py] [_log()] userauth is OK
2025-12-24T23:40:29.934 [DEBUG] [Thread-1194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:40:29.934 [DEBUG] [Thread-1194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:40:29.935 [DEBUG] [Thread-1194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:40:29.935 [DEBUG] [Thread-1194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:40:29.954 [INFO] [Thread-1194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:40:29.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:40:29.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:40:30.107 [DEBUG] [Thread-1196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:30.783 [DEBUG] [Thread-1194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:40:30.783 [DEBUG] [Thread-1194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:40:30.831 [DEBUG] [Thread-1194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:40:30.831 [DEBUG] [Thread-1194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:40:30.840 [DEBUG] [Thread-1194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:40:30.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:40:30.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:40:30.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:40:30.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:40:30.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:40:30.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:40:30.877 [DEBUG] [Thread-1194] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:40:33.853 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:36.907 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:43.311 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:40:45.182 [DEBUG] [Thread-1197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:41:00.219 [DEBUG] [Thread-1198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:41:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:41:00.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:41:00.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:41:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 40, 26), 3.38, 80.01, 0.0, 29.31, 13.64, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:41:01.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:40:26
2025-12-24T23:41:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:41:01.896 [DEBUG] [Thread-1199] [transport.py] [_log()] starting thread (client mode): 0xb95d48b0
2025-12-24T23:41:01.896 [DEBUG] [Thread-1199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:41:01.916 [DEBUG] [Thread-1199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:41:01.917 [INFO] [Thread-1199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:41:01.919 [DEBUG] [Thread-1199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:41:01.920 [DEBUG] [Thread-1199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:41:01.920 [DEBUG] [Thread-1199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:41:01.920 [DEBUG] [Thread-1199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:41:01.920 [DEBUG] [Thread-1199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:41:01.920 [DEBUG] [Thread-1199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:41:01.920 [DEBUG] [Thread-1199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:41:01.920 [DEBUG] [Thread-1199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:41:01.921 [DEBUG] [Thread-1199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:41:01.921 [DEBUG] [Thread-1199] [transport.py] [_log()] client lang: <none>
2025-12-24T23:41:01.921 [DEBUG] [Thread-1199] [transport.py] [_log()] server lang: <none>
2025-12-24T23:41:01.921 [DEBUG] [Thread-1199] [transport.py] [_log()] kex follows: False
2025-12-24T23:41:01.921 [DEBUG] [Thread-1199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:41:01.921 [DEBUG] [Thread-1199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:41:01.921 [DEBUG] [Thread-1199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:41:01.921 [DEBUG] [Thread-1199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:41:01.922 [DEBUG] [Thread-1199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:41:01.922 [DEBUG] [Thread-1199] [transport.py] [_log()] Compression: none
2025-12-24T23:41:01.922 [DEBUG] [Thread-1199] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:41:01.942 [DEBUG] [Thread-1199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:41:01.942 [DEBUG] [Thread-1199] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:41:01.943 [DEBUG] [Thread-1199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:41:01.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:41:01.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:41:01.945 [DEBUG] [Thread-1199] [transport.py] [_log()] userauth is OK
2025-12-24T23:41:01.946 [DEBUG] [Thread-1199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:41:01.946 [DEBUG] [Thread-1199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:41:01.946 [DEBUG] [Thread-1199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:41:01.946 [DEBUG] [Thread-1199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:41:01.969 [INFO] [Thread-1199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:41:01.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:41:02.584 [DEBUG] [Thread-1199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:41:02.584 [DEBUG] [Thread-1199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:41:02.585 [DEBUG] [Thread-1199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:41:02.625 [DEBUG] [Thread-1199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:41:02.625 [DEBUG] [Thread-1199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:41:02.629 [DEBUG] [Thread-1199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:41:02.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:41:02.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:41:02.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:41:02.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:41:02.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:41:02.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:41:02.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:41:02.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:41:02.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:41:02.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.903186 -999.00  +13.50  22.98     83  +10.80 1 1 1 2 1     0    0 1.98 -42.60 ZNESW 24.9 23.0 165.8 29.2 14.3 -20.1 14.2 -19.6 14.1 -18.4 14.4 -19.3
2025-12-24T23:41:02.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:41:02.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:41:02.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.903186
2025-12-24T23:41:02.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:41:02.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:41:02.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:41:02.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:41:02.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:41:02.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:40:26', tmtdew=3.38, humidity=80.01, cloud=0.0, wind=29.31, temperature=13.64, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:40:59', seeing=1.73, atlas_timestamp='2025-12-24T21:40:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:38:00')
2025-12-24T23:41:02.656 [DEBUG] [Thread-1199] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:41:02.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:41:02.759 [DEBUG] [Thread-1202] [transport.py] [_log()] starting thread (client mode): 0xb95d62f0
2025-12-24T23:41:02.759 [DEBUG] [Thread-1202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:41:02.775 [DEBUG] [Thread-1202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:41:02.776 [INFO] [Thread-1202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:41:02.783 [DEBUG] [Thread-1202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] client lang: <none>
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] server lang: <none>
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] kex follows: False
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:41:02.784 [DEBUG] [Thread-1202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:41:02.785 [DEBUG] [Thread-1202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:41:02.785 [DEBUG] [Thread-1202] [transport.py] [_log()] Compression: none
2025-12-24T23:41:02.785 [DEBUG] [Thread-1202] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:41:02.846 [DEBUG] [Thread-1202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:41:02.847 [DEBUG] [Thread-1202] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:41:02.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:41:02.848 [DEBUG] [Thread-1202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:41:02.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:41:02.910 [DEBUG] [Thread-1202] [transport.py] [_log()] userauth is OK
2025-12-24T23:41:02.910 [DEBUG] [Thread-1202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:41:02.910 [DEBUG] [Thread-1202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:41:02.910 [DEBUG] [Thread-1202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:41:02.910 [DEBUG] [Thread-1202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:41:02.930 [INFO] [Thread-1202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:41:02.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:41:02.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:41:03.766 [DEBUG] [Thread-1202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:41:03.766 [DEBUG] [Thread-1202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:41:03.814 [DEBUG] [Thread-1202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:41:03.815 [DEBUG] [Thread-1202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:41:03.825 [DEBUG] [Thread-1202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:41:03.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:41:03.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:41:03.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:41:03.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:41:03.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:41:03.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:41:03.873 [DEBUG] [Thread-1202] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:41:07.817 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:41:07.818 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:41:15.258 [DEBUG] [Thread-1204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:41:16.838 [DEBUG] [Thread-1205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:41:30.324 [DEBUG] [Thread-1206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:41:33.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:41:33.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:41:33.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:41:34.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 41, 30), 3.36, 80.13, 0.0, 31.14, 13.62, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:41:34.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:41:30
2025-12-24T23:41:34.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:41:34.880 [DEBUG] [Thread-1207] [transport.py] [_log()] starting thread (client mode): 0xb95d7970
2025-12-24T23:41:34.880 [DEBUG] [Thread-1207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:41:34.896 [DEBUG] [Thread-1207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:41:34.896 [INFO] [Thread-1207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:41:34.897 [DEBUG] [Thread-1207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:41:34.897 [DEBUG] [Thread-1207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:41:34.897 [DEBUG] [Thread-1207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:41:34.897 [DEBUG] [Thread-1207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:41:34.897 [DEBUG] [Thread-1207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:41:34.897 [DEBUG] [Thread-1207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] client lang: <none>
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] server lang: <none>
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] kex follows: False
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:41:34.898 [DEBUG] [Thread-1207] [transport.py] [_log()] Compression: none
2025-12-24T23:41:34.899 [DEBUG] [Thread-1207] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:41:34.910 [DEBUG] [Thread-1207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:41:34.911 [DEBUG] [Thread-1207] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:41:34.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:41:34.913 [DEBUG] [Thread-1207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:41:34.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:41:34.915 [DEBUG] [Thread-1207] [transport.py] [_log()] userauth is OK
2025-12-24T23:41:34.915 [DEBUG] [Thread-1207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:41:34.915 [DEBUG] [Thread-1207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:41:34.915 [DEBUG] [Thread-1207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:41:34.916 [DEBUG] [Thread-1207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:41:34.938 [INFO] [Thread-1207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:41:34.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:41:35.569 [DEBUG] [Thread-1207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:41:35.569 [DEBUG] [Thread-1207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:41:35.570 [DEBUG] [Thread-1207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:41:35.612 [DEBUG] [Thread-1207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:41:35.612 [DEBUG] [Thread-1207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:41:35.614 [DEBUG] [Thread-1207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:41:35.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:41:35.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:41:35.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:41:35.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:41:35.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:41:35.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:41:35.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:41:35.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:41:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:41:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.903534 -999.00  +13.50  26.06     83  +10.80 1 1 1 2 1     0    0 1.89 -44.80 ZNESW 20.5 26.1 142.2 36.1 14.3 -20.0 14.1 -19.6 14.1 -18.4 14.3 -19.4
2025-12-24T23:41:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:41:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:41:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.903534
2025-12-24T23:41:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:41:35.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:41:35.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:41:35.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:41:35.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:41:35.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:41:30', tmtdew=3.36, humidity=80.13, cloud=0.0, wind=31.14, temperature=13.62, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:41:31', seeing=2.09, atlas_timestamp='2025-12-24T21:41:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:38:00')
2025-12-24T23:41:35.642 [DEBUG] [Thread-1207] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:41:35.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:41:35.750 [DEBUG] [Thread-1210] [transport.py] [_log()] starting thread (client mode): 0xb9592b00
2025-12-24T23:41:35.750 [DEBUG] [Thread-1210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:41:35.766 [DEBUG] [Thread-1210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:41:35.766 [INFO] [Thread-1210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:41:35.773 [DEBUG] [Thread-1210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:41:35.773 [DEBUG] [Thread-1210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] client lang: <none>
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] server lang: <none>
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] kex follows: False
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] Compression: none
2025-12-24T23:41:35.774 [DEBUG] [Thread-1210] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:41:35.835 [DEBUG] [Thread-1210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:41:35.835 [DEBUG] [Thread-1210] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:41:35.836 [DEBUG] [Thread-1210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:41:35.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:41:35.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:41:35.893 [DEBUG] [Thread-1210] [transport.py] [_log()] userauth is OK
2025-12-24T23:41:35.894 [DEBUG] [Thread-1210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:41:35.894 [DEBUG] [Thread-1210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:41:35.894 [DEBUG] [Thread-1210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:41:35.894 [DEBUG] [Thread-1210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:41:35.912 [INFO] [Thread-1210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:41:35.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:41:35.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:41:36.709 [DEBUG] [Thread-1210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:41:36.709 [DEBUG] [Thread-1210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:41:36.757 [DEBUG] [Thread-1210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:41:36.757 [DEBUG] [Thread-1210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:41:36.767 [DEBUG] [Thread-1210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:41:36.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:41:36.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:41:36.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:41:36.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:41:36.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:41:36.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:41:36.803 [DEBUG] [Thread-1210] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:41:45.363 [DEBUG] [Thread-1212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:00.439 [DEBUG] [Thread-1213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:42:06.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:42:06.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:42:07.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 42, 2), 3.35, 80.16, 0.0, 31.79, 13.64, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:42:07.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:42:02
2025-12-24T23:42:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:42:07.852 [DEBUG] [Thread-1214] [transport.py] [_log()] starting thread (client mode): 0xb95d4af0
2025-12-24T23:42:07.853 [DEBUG] [Thread-1214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:42:07.873 [DEBUG] [Thread-1214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:42:07.873 [INFO] [Thread-1214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] client lang: <none>
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] server lang: <none>
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] kex follows: False
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] Compression: none
2025-12-24T23:42:07.876 [DEBUG] [Thread-1214] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:42:07.892 [DEBUG] [Thread-1214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:42:07.893 [DEBUG] [Thread-1214] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:42:07.893 [DEBUG] [Thread-1214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:42:07.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:42:07.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:42:07.904 [DEBUG] [Thread-1214] [transport.py] [_log()] userauth is OK
2025-12-24T23:42:07.904 [DEBUG] [Thread-1214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:42:07.904 [DEBUG] [Thread-1214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:42:07.904 [DEBUG] [Thread-1214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:42:07.904 [DEBUG] [Thread-1214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:42:07.919 [INFO] [Thread-1214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:42:07.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:42:08.026 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:08.027 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:08.525 [DEBUG] [Thread-1214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:42:08.525 [DEBUG] [Thread-1214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:42:08.525 [DEBUG] [Thread-1214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:42:08.566 [DEBUG] [Thread-1214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:42:08.567 [DEBUG] [Thread-1214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:42:08.569 [DEBUG] [Thread-1214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:42:08.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:42:08.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:42:08.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:42:08.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:42:08.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:42:08.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:42:08.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.903881 -999.00  +13.50  22.30     84  +10.80 1 1 1 2 1     0    0 1.78 -47.61 ZNESW 25.5 22.3 160.8 34.7 14.3 -20.1 14.2 -19.6 14.0 -18.4 14.3 -19.3
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.903881
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:42:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:42:02', tmtdew=3.35, humidity=80.16, cloud=0.0, wind=31.79, temperature=13.64, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:42:03', seeing=2.09, atlas_timestamp='2025-12-24T21:41:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:38:00')
2025-12-24T23:42:08.587 [DEBUG] [Thread-1214] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:42:08.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:42:08.684 [DEBUG] [Thread-1217] [transport.py] [_log()] starting thread (client mode): 0xb95b0820
2025-12-24T23:42:08.684 [DEBUG] [Thread-1217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:42:08.699 [DEBUG] [Thread-1217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:42:08.699 [INFO] [Thread-1217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:42:08.706 [DEBUG] [Thread-1217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:42:08.706 [DEBUG] [Thread-1217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:42:08.706 [DEBUG] [Thread-1217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:42:08.706 [DEBUG] [Thread-1217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] client lang: <none>
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] server lang: <none>
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] kex follows: False
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] Compression: none
2025-12-24T23:42:08.707 [DEBUG] [Thread-1217] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:42:08.764 [DEBUG] [Thread-1217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:42:08.764 [DEBUG] [Thread-1217] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:42:08.764 [DEBUG] [Thread-1217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:42:08.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:42:08.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:42:08.821 [DEBUG] [Thread-1217] [transport.py] [_log()] userauth is OK
2025-12-24T23:42:08.821 [DEBUG] [Thread-1217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:42:08.821 [DEBUG] [Thread-1217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:42:08.821 [DEBUG] [Thread-1217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:42:08.821 [DEBUG] [Thread-1217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:42:08.835 [INFO] [Thread-1217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:42:08.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:42:08.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:42:09.636 [DEBUG] [Thread-1217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:42:09.636 [DEBUG] [Thread-1217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:42:09.684 [DEBUG] [Thread-1217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:42:09.684 [DEBUG] [Thread-1217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:42:09.693 [DEBUG] [Thread-1217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:42:09.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:42:09.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:42:09.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:42:09.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:42:09.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:42:09.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:42:09.724 [DEBUG] [Thread-1217] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:42:15.098 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:15.475 [DEBUG] [Thread-1219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:16.900 [DEBUG] [Thread-1220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:18.257 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:23.377 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:29.047 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:30.540 [DEBUG] [Thread-1221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:38.121 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:39.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:42:39.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:42:39.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:42:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 42, 34), 3.24, 80.73, 0.0, 33.82, 13.59, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:42:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:42:34
2025-12-24T23:42:40.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:42:40.738 [DEBUG] [Thread-1222] [transport.py] [_log()] starting thread (client mode): 0xb95b13f0
2025-12-24T23:42:40.739 [DEBUG] [Thread-1222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:42:40.757 [DEBUG] [Thread-1222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:42:40.757 [INFO] [Thread-1222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:42:40.760 [DEBUG] [Thread-1222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:42:40.760 [DEBUG] [Thread-1222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] client lang: <none>
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] server lang: <none>
2025-12-24T23:42:40.761 [DEBUG] [Thread-1222] [transport.py] [_log()] kex follows: False
2025-12-24T23:42:40.762 [DEBUG] [Thread-1222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:42:40.762 [DEBUG] [Thread-1222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:42:40.762 [DEBUG] [Thread-1222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:42:40.762 [DEBUG] [Thread-1222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:42:40.762 [DEBUG] [Thread-1222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:42:40.762 [DEBUG] [Thread-1222] [transport.py] [_log()] Compression: none
2025-12-24T23:42:40.762 [DEBUG] [Thread-1222] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:42:40.781 [DEBUG] [Thread-1222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:42:40.781 [DEBUG] [Thread-1222] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:42:40.782 [DEBUG] [Thread-1222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:42:40.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:42:40.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:42:40.784 [DEBUG] [Thread-1222] [transport.py] [_log()] userauth is OK
2025-12-24T23:42:40.784 [DEBUG] [Thread-1222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:42:40.784 [DEBUG] [Thread-1222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:42:40.784 [DEBUG] [Thread-1222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:42:40.784 [DEBUG] [Thread-1222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:42:40.803 [INFO] [Thread-1222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:42:40.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:42:41.444 [DEBUG] [Thread-1222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:42:41.445 [DEBUG] [Thread-1222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:42:41.445 [DEBUG] [Thread-1222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:42:41.487 [DEBUG] [Thread-1222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:42:41.487 [DEBUG] [Thread-1222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:42:41.490 [DEBUG] [Thread-1222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:42:41.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:42:41.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:42:41.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:42:41.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:42:41.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:42:41.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:42:41.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:42:41.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:42:41.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:42:41.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.904228 -999.00  +13.50  29.14     84  +10.90 1 1 1 2 1     0    0 1.80 -46.45 ZNESW 22.9 29.1 161.8 36.8 14.3 -20.1 14.1 -19.6 14.0 -18.4 14.3 -19.5
2025-12-24T23:42:41.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:42:41.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:42:41.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.904228
2025-12-24T23:42:41.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:42:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:42:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:42:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:42:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:42:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:42:34', tmtdew=3.24, humidity=80.73, cloud=0.0, wind=33.82, temperature=13.59, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:42:35', seeing=1.64, atlas_timestamp='2025-12-24T21:42:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:38:00')
2025-12-24T23:42:41.530 [DEBUG] [Thread-1222] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:42:41.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:42:41.634 [DEBUG] [Thread-1225] [transport.py] [_log()] starting thread (client mode): 0xb95b1660
2025-12-24T23:42:41.635 [DEBUG] [Thread-1225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:42:41.651 [DEBUG] [Thread-1225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:42:41.651 [INFO] [Thread-1225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:42:41.659 [DEBUG] [Thread-1225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:42:41.660 [DEBUG] [Thread-1225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:42:41.660 [DEBUG] [Thread-1225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:42:41.660 [DEBUG] [Thread-1225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:42:41.660 [DEBUG] [Thread-1225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:42:41.660 [DEBUG] [Thread-1225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] client lang: <none>
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] server lang: <none>
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] kex follows: False
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] Compression: none
2025-12-24T23:42:41.661 [DEBUG] [Thread-1225] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:42:41.718 [DEBUG] [Thread-1225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:42:41.718 [DEBUG] [Thread-1225] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:42:41.719 [DEBUG] [Thread-1225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:42:41.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:42:41.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:42:41.775 [DEBUG] [Thread-1225] [transport.py] [_log()] userauth is OK
2025-12-24T23:42:41.775 [DEBUG] [Thread-1225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:42:41.775 [DEBUG] [Thread-1225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:42:41.775 [DEBUG] [Thread-1225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:42:41.775 [DEBUG] [Thread-1225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:42:41.794 [INFO] [Thread-1225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:42:41.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:42:41.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:42:42.634 [DEBUG] [Thread-1225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:42:42.635 [DEBUG] [Thread-1225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:42:42.635 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:42:42.683 [DEBUG] [Thread-1225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:42:42.683 [DEBUG] [Thread-1225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:42:42.693 [DEBUG] [Thread-1225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:42:42.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:42:42.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:42:42.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
2025-12-24T23:42:42.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:42:42.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:42:42.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:42:42.730 [DEBUG] [Thread-1225] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:42:45.583 [DEBUG] [Thread-1227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:00.653 [DEBUG] [Thread-1228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:01.900 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:06.378 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:08.229 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:08.230 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:12.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:43:12.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:43:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:43:13.035 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 43, 6), 3.23, 80.81, 0.0, 32.01, 13.59, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:43:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:43:06
2025-12-24T23:43:13.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:43:13.723 [DEBUG] [Thread-1229] [transport.py] [_log()] starting thread (client mode): 0xb9592710
2025-12-24T23:43:13.723 [DEBUG] [Thread-1229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:43:13.743 [DEBUG] [Thread-1229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:43:13.743 [INFO] [Thread-1229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:43:13.746 [DEBUG] [Thread-1229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:43:13.746 [DEBUG] [Thread-1229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:43:13.746 [DEBUG] [Thread-1229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:43:13.746 [DEBUG] [Thread-1229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:43:13.746 [DEBUG] [Thread-1229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:43:13.746 [DEBUG] [Thread-1229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:43:13.746 [DEBUG] [Thread-1229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:43:13.746 [DEBUG] [Thread-1229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] client lang: <none>
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] server lang: <none>
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] kex follows: False
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] Compression: none
2025-12-24T23:43:13.747 [DEBUG] [Thread-1229] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:43:13.765 [DEBUG] [Thread-1229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:43:13.765 [DEBUG] [Thread-1229] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:43:13.765 [DEBUG] [Thread-1229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:43:13.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:43:13.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:43:13.767 [DEBUG] [Thread-1229] [transport.py] [_log()] userauth is OK
2025-12-24T23:43:13.767 [DEBUG] [Thread-1229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:43:13.767 [DEBUG] [Thread-1229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:43:13.767 [DEBUG] [Thread-1229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:43:13.767 [DEBUG] [Thread-1229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:43:13.788 [INFO] [Thread-1229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:43:13.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:43:14.435 [DEBUG] [Thread-1229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:43:14.436 [DEBUG] [Thread-1229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:43:14.436 [DEBUG] [Thread-1229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:43:14.476 [DEBUG] [Thread-1229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:43:14.476 [DEBUG] [Thread-1229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:43:14.479 [DEBUG] [Thread-1229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:43:14.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:43:14.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:43:14.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:43:14.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:43:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:43:14.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:43:14.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:43:14.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:43:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:43:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.904575 -999.00  +13.50  24.60     84  +10.90 1 1 1 2 1     0    0 1.85 -44.22 ZNESW 23.6 24.6 161.6 33.7 14.3 -20.0 14.2 -19.5 13.9 -18.2 14.3 -19.2
2025-12-24T23:43:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:43:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:43:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.904575
2025-12-24T23:43:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:43:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:43:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:43:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:43:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:43:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:43:06', tmtdew=3.23, humidity=80.81, cloud=0.0, wind=32.01, temperature=13.59, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:43:07', seeing=1.91, atlas_timestamp='2025-12-24T21:42:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:38:00')
2025-12-24T23:43:14.502 [DEBUG] [Thread-1229] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:43:14.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:43:14.603 [DEBUG] [Thread-1232] [transport.py] [_log()] starting thread (client mode): 0xb9591330
2025-12-24T23:43:14.603 [DEBUG] [Thread-1232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:43:14.619 [DEBUG] [Thread-1232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:43:14.619 [INFO] [Thread-1232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] client lang: <none>
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] server lang: <none>
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] kex follows: False
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:43:14.628 [DEBUG] [Thread-1232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:43:14.629 [DEBUG] [Thread-1232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:43:14.629 [DEBUG] [Thread-1232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:43:14.629 [DEBUG] [Thread-1232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:43:14.629 [DEBUG] [Thread-1232] [transport.py] [_log()] Compression: none
2025-12-24T23:43:14.629 [DEBUG] [Thread-1232] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:43:14.685 [DEBUG] [Thread-1232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:43:14.685 [DEBUG] [Thread-1232] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:43:14.686 [DEBUG] [Thread-1232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:43:14.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:43:14.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:43:14.745 [DEBUG] [Thread-1232] [transport.py] [_log()] userauth is OK
2025-12-24T23:43:14.745 [DEBUG] [Thread-1232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:43:14.745 [DEBUG] [Thread-1232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:43:14.745 [DEBUG] [Thread-1232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:43:14.745 [DEBUG] [Thread-1232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:43:14.771 [INFO] [Thread-1232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:43:14.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:43:14.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:43:15.598 [DEBUG] [Thread-1232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:43:15.599 [DEBUG] [Thread-1232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:43:15.647 [DEBUG] [Thread-1232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:43:15.647 [DEBUG] [Thread-1232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:43:15.656 [DEBUG] [Thread-1232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:43:15.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:43:15.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:43:15.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:43:15.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:43:15.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:43:15.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:43:15.690 [DEBUG] [Thread-1232] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:43:15.692 [DEBUG] [Thread-1234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:16.959 [DEBUG] [Thread-1235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:17.510 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:30.759 [DEBUG] [Thread-1236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:45.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:43:45.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:43:45.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:43:45.798 [DEBUG] [Thread-1237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:43:46.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 43, 39), 3.23, 80.78, 0.0, 33.45, 13.54, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:43:46.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:43:39
2025-12-24T23:43:46.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:43:46.693 [DEBUG] [Thread-1238] [transport.py] [_log()] starting thread (client mode): 0xb9592710
2025-12-24T23:43:46.693 [DEBUG] [Thread-1238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:43:46.713 [DEBUG] [Thread-1238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:43:46.713 [INFO] [Thread-1238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] client lang: <none>
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] server lang: <none>
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] kex follows: False
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] Compression: none
2025-12-24T23:43:46.717 [DEBUG] [Thread-1238] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:43:46.730 [DEBUG] [Thread-1238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:43:46.730 [DEBUG] [Thread-1238] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:43:46.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:43:46.732 [DEBUG] [Thread-1238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:43:46.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:43:46.734 [DEBUG] [Thread-1238] [transport.py] [_log()] userauth is OK
2025-12-24T23:43:46.734 [DEBUG] [Thread-1238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:43:46.734 [DEBUG] [Thread-1238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:43:46.734 [DEBUG] [Thread-1238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:43:46.734 [DEBUG] [Thread-1238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:43:46.758 [INFO] [Thread-1238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:43:46.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:43:47.408 [DEBUG] [Thread-1238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:43:47.408 [DEBUG] [Thread-1238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:43:47.408 [DEBUG] [Thread-1238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:43:47.450 [DEBUG] [Thread-1238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:43:47.450 [DEBUG] [Thread-1238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:43:47.453 [DEBUG] [Thread-1238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:43:47.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:43:47.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:43:47.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:43:47.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:43:47.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:43:47.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:43:47.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:43:47.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:43:47.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:43:47.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.905270 -999.00  +13.50  28.17     84  +10.90 1 1 1 2 1     0    0 1.61 -50.61 ZNESW 33.5 28.2 151.0 39.6 14.3 -20.0 14.1 -19.5 13.9 -18.4 14.2 -19.3
2025-12-24T23:43:47.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:43:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:43:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.905270
2025-12-24T23:43:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:43:47.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:43:47.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:43:47.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:43:47.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:43:47.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:43:39', tmtdew=3.23, humidity=80.78, cloud=0.0, wind=33.45, temperature=13.54, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:43:39', seeing=2.43, atlas_timestamp='2025-12-24T21:43:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:42:00')
2025-12-24T23:43:47.478 [DEBUG] [Thread-1238] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:43:47.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:43:47.581 [DEBUG] [Thread-1241] [transport.py] [_log()] starting thread (client mode): 0xb95d6830
2025-12-24T23:43:47.581 [DEBUG] [Thread-1241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:43:47.595 [DEBUG] [Thread-1241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:43:47.596 [INFO] [Thread-1241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:43:47.603 [DEBUG] [Thread-1241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:43:47.603 [DEBUG] [Thread-1241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:43:47.603 [DEBUG] [Thread-1241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:43:47.603 [DEBUG] [Thread-1241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:43:47.603 [DEBUG] [Thread-1241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] client lang: <none>
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] server lang: <none>
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] kex follows: False
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] Compression: none
2025-12-24T23:43:47.604 [DEBUG] [Thread-1241] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:43:47.662 [DEBUG] [Thread-1241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:43:47.662 [DEBUG] [Thread-1241] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:43:47.663 [DEBUG] [Thread-1241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:43:47.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:43:47.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:43:47.718 [DEBUG] [Thread-1241] [transport.py] [_log()] userauth is OK
2025-12-24T23:43:47.718 [DEBUG] [Thread-1241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:43:47.718 [DEBUG] [Thread-1241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:43:47.718 [DEBUG] [Thread-1241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:43:47.718 [DEBUG] [Thread-1241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:43:47.741 [INFO] [Thread-1241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:43:47.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:43:47.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:43:48.569 [DEBUG] [Thread-1241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:43:48.569 [DEBUG] [Thread-1241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:43:48.617 [DEBUG] [Thread-1241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:43:48.618 [DEBUG] [Thread-1241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:43:48.627 [DEBUG] [Thread-1241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:43:48.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:43:48.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:43:48.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:43:48.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:43:48.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:43:48.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:43:48.663 [DEBUG] [Thread-1241] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:44:00.839 [DEBUG] [Thread-1243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:08.434 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:08.435 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:15.903 [DEBUG] [Thread-1244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:16.291 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:17.020 [DEBUG] [Thread-1245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:44:18.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:44:18.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:44:19.364 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:19.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 44, 11), 3.22, 80.86, 0.0, 32.1, 13.56, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:44:19.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:44:11
2025-12-24T23:44:19.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:44:19.661 [DEBUG] [Thread-1246] [transport.py] [_log()] starting thread (client mode): 0xb95f1ae0
2025-12-24T23:44:19.661 [DEBUG] [Thread-1246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:44:19.686 [DEBUG] [Thread-1246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:44:19.686 [INFO] [Thread-1246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:44:19.688 [DEBUG] [Thread-1246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:44:19.689 [DEBUG] [Thread-1246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:44:19.689 [DEBUG] [Thread-1246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:44:19.689 [DEBUG] [Thread-1246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:44:19.689 [DEBUG] [Thread-1246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:44:19.689 [DEBUG] [Thread-1246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:44:19.689 [DEBUG] [Thread-1246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:44:19.689 [DEBUG] [Thread-1246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:44:19.690 [DEBUG] [Thread-1246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:44:19.690 [DEBUG] [Thread-1246] [transport.py] [_log()] client lang: <none>
2025-12-24T23:44:19.690 [DEBUG] [Thread-1246] [transport.py] [_log()] server lang: <none>
2025-12-24T23:44:19.690 [DEBUG] [Thread-1246] [transport.py] [_log()] kex follows: False
2025-12-24T23:44:19.690 [DEBUG] [Thread-1246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:44:19.690 [DEBUG] [Thread-1246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:44:19.690 [DEBUG] [Thread-1246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:44:19.690 [DEBUG] [Thread-1246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:44:19.691 [DEBUG] [Thread-1246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:44:19.691 [DEBUG] [Thread-1246] [transport.py] [_log()] Compression: none
2025-12-24T23:44:19.691 [DEBUG] [Thread-1246] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:44:19.702 [DEBUG] [Thread-1246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:44:19.702 [DEBUG] [Thread-1246] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:44:19.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:44:19.704 [DEBUG] [Thread-1246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:44:19.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:44:19.706 [DEBUG] [Thread-1246] [transport.py] [_log()] userauth is OK
2025-12-24T23:44:19.706 [DEBUG] [Thread-1246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:44:19.706 [DEBUG] [Thread-1246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:44:19.706 [DEBUG] [Thread-1246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:44:19.706 [DEBUG] [Thread-1246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:44:19.729 [INFO] [Thread-1246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:44:19.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:44:20.341 [DEBUG] [Thread-1246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:44:20.342 [DEBUG] [Thread-1246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:44:20.342 [DEBUG] [Thread-1246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:44:20.383 [DEBUG] [Thread-1246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:44:20.383 [DEBUG] [Thread-1246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:44:20.386 [DEBUG] [Thread-1246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:44:20.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:44:20.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:44:20.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:44:20.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:44:20.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:44:20.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:44:20.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:44:20.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:44:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:44:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.905617 -999.00  +13.50  23.59     84  +10.90 1 1 1 2 1     0    0 1.52 -54.78 ZNESW 25.0 23.6 154.6 32.5 14.2 -20.0 14.1 -19.5 14.0 -18.3 14.3 -19.2
2025-12-24T23:44:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:44:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:44:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.905617
2025-12-24T23:44:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:44:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:44:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:44:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:44:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:44:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:44:11', tmtdew=3.22, humidity=80.86, cloud=0.0, wind=32.1, temperature=13.56, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:44:11', seeing=1.92, atlas_timestamp='2025-12-24T21:44:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:42:00')
2025-12-24T23:44:20.418 [DEBUG] [Thread-1246] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:44:20.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:44:20.521 [DEBUG] [Thread-1249] [transport.py] [_log()] starting thread (client mode): 0xb6b02020
2025-12-24T23:44:20.521 [DEBUG] [Thread-1249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:44:20.538 [DEBUG] [Thread-1249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:44:20.539 [INFO] [Thread-1249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:44:20.546 [DEBUG] [Thread-1249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:44:20.547 [DEBUG] [Thread-1249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:44:20.547 [DEBUG] [Thread-1249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:44:20.547 [DEBUG] [Thread-1249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:44:20.547 [DEBUG] [Thread-1249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:44:20.547 [DEBUG] [Thread-1249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:44:20.547 [DEBUG] [Thread-1249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:44:20.547 [DEBUG] [Thread-1249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:44:20.548 [DEBUG] [Thread-1249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:44:20.548 [DEBUG] [Thread-1249] [transport.py] [_log()] client lang: <none>
2025-12-24T23:44:20.548 [DEBUG] [Thread-1249] [transport.py] [_log()] server lang: <none>
2025-12-24T23:44:20.548 [DEBUG] [Thread-1249] [transport.py] [_log()] kex follows: False
2025-12-24T23:44:20.548 [DEBUG] [Thread-1249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:44:20.548 [DEBUG] [Thread-1249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:44:20.548 [DEBUG] [Thread-1249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:44:20.548 [DEBUG] [Thread-1249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:44:20.549 [DEBUG] [Thread-1249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:44:20.549 [DEBUG] [Thread-1249] [transport.py] [_log()] Compression: none
2025-12-24T23:44:20.549 [DEBUG] [Thread-1249] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:44:20.607 [DEBUG] [Thread-1249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:44:20.607 [DEBUG] [Thread-1249] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:44:20.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:44:20.609 [DEBUG] [Thread-1249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:44:20.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:44:20.665 [DEBUG] [Thread-1249] [transport.py] [_log()] userauth is OK
2025-12-24T23:44:20.665 [DEBUG] [Thread-1249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:44:20.665 [DEBUG] [Thread-1249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:44:20.665 [DEBUG] [Thread-1249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:44:20.665 [DEBUG] [Thread-1249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:44:20.680 [INFO] [Thread-1249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:44:20.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:44:20.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:44:21.506 [DEBUG] [Thread-1249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:44:21.506 [DEBUG] [Thread-1249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:44:21.554 [DEBUG] [Thread-1249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:44:21.554 [DEBUG] [Thread-1249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:44:21.563 [DEBUG] [Thread-1249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:44:21.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:44:21.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')
2025-12-24T23:44:21.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:44:21.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:44:21.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:44:21.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:44:21.598 [DEBUG] [Thread-1249] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:44:30.943 [DEBUG] [Thread-1251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:46.005 [DEBUG] [Thread-1252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:44:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:44:51.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:44:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:44:52.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 44, 43), 3.21, 80.9, 0.0, 36.97, 13.54, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:44:52.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:44:43
2025-12-24T23:44:52.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:44:52.595 [DEBUG] [Thread-1253] [transport.py] [_log()] starting thread (client mode): 0xb6b03460
2025-12-24T23:44:52.595 [DEBUG] [Thread-1253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:44:52.614 [DEBUG] [Thread-1253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:44:52.615 [INFO] [Thread-1253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:44:52.617 [DEBUG] [Thread-1253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:44:52.617 [DEBUG] [Thread-1253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:44:52.617 [DEBUG] [Thread-1253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] client lang: <none>
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] server lang: <none>
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] kex follows: False
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] Compression: none
2025-12-24T23:44:52.618 [DEBUG] [Thread-1253] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:44:52.636 [DEBUG] [Thread-1253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:44:52.637 [DEBUG] [Thread-1253] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:44:52.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:44:52.638 [DEBUG] [Thread-1253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:44:52.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:44:52.640 [DEBUG] [Thread-1253] [transport.py] [_log()] userauth is OK
2025-12-24T23:44:52.640 [DEBUG] [Thread-1253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:44:52.641 [DEBUG] [Thread-1253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:44:52.641 [DEBUG] [Thread-1253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:44:52.641 [DEBUG] [Thread-1253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:44:52.665 [INFO] [Thread-1253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:44:52.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:44:53.279 [DEBUG] [Thread-1253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:44:53.279 [DEBUG] [Thread-1253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:44:53.279 [DEBUG] [Thread-1253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:44:53.320 [DEBUG] [Thread-1253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:44:53.320 [DEBUG] [Thread-1253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:44:53.324 [DEBUG] [Thread-1253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:44:53.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:44:53.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:44:53.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:44:53.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:44:53.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:44:53.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:44:53.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:44:53.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:44:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:44:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.905964 -999.00  +13.40  26.25     84  +10.90 1 1 1 2 1     0    0 1.56 -49.92 ZNESW 23.0 26.2 142.6 36.0 14.2 -20.0 14.1 -19.6 13.9 -18.3 14.2 -19.2
2025-12-24T23:44:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:44:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:44:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.905964
2025-12-24T23:44:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:44:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:44:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:44:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:44:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:44:53.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:44:43', tmtdew=3.21, humidity=80.9, cloud=0.0, wind=36.97, temperature=13.54, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:44:43', seeing=1.87, atlas_timestamp='2025-12-24T21:44:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:42:00')
2025-12-24T23:44:53.352 [DEBUG] [Thread-1253] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:44:53.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:44:53.457 [DEBUG] [Thread-1256] [transport.py] [_log()] starting thread (client mode): 0xb6b03490
2025-12-24T23:44:53.458 [DEBUG] [Thread-1256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:44:53.472 [DEBUG] [Thread-1256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:44:53.472 [INFO] [Thread-1256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:44:53.480 [DEBUG] [Thread-1256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:44:53.480 [DEBUG] [Thread-1256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:44:53.480 [DEBUG] [Thread-1256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:44:53.480 [DEBUG] [Thread-1256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:44:53.480 [DEBUG] [Thread-1256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] client lang: <none>
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] server lang: <none>
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] kex follows: False
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:44:53.481 [DEBUG] [Thread-1256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:44:53.482 [DEBUG] [Thread-1256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:44:53.482 [DEBUG] [Thread-1256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:44:53.482 [DEBUG] [Thread-1256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:44:53.482 [DEBUG] [Thread-1256] [transport.py] [_log()] Compression: none
2025-12-24T23:44:53.482 [DEBUG] [Thread-1256] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:44:53.538 [DEBUG] [Thread-1256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:44:53.539 [DEBUG] [Thread-1256] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:44:53.539 [DEBUG] [Thread-1256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:44:53.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:44:53.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:44:53.593 [DEBUG] [Thread-1256] [transport.py] [_log()] userauth is OK
2025-12-24T23:44:53.594 [DEBUG] [Thread-1256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:44:53.594 [DEBUG] [Thread-1256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:44:53.594 [DEBUG] [Thread-1256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:44:53.595 [DEBUG] [Thread-1256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:44:53.614 [INFO] [Thread-1256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:44:53.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:44:53.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:44:54.415 [DEBUG] [Thread-1256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:44:54.415 [DEBUG] [Thread-1256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:44:54.464 [DEBUG] [Thread-1256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:44:54.464 [DEBUG] [Thread-1256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:44:54.474 [DEBUG] [Thread-1256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:44:54.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:44:54.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:44: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') -> 00000000
2025-12-24T23:44:54.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:44:54.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:44:54.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:44:54.514 [DEBUG] [Thread-1256] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:45:01.043 [DEBUG] [Thread-1258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:45:08.634 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:45:08.635 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:45:16.108 [DEBUG] [Thread-1259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:45:17.073 [DEBUG] [Thread-1260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:45:24.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:45:24.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:45:24.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:45:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 45, 15), 3.19, 81.01, 0.0, 34.51, 13.59, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:45:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:45:15
2025-12-24T23:45:25.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:45:25.567 [DEBUG] [Thread-1261] [transport.py] [_log()] starting thread (client mode): 0xd88c71f0
2025-12-24T23:45:25.567 [DEBUG] [Thread-1261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:45:25.587 [DEBUG] [Thread-1261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:45:25.587 [INFO] [Thread-1261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:45:25.590 [DEBUG] [Thread-1261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] client lang: <none>
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] server lang: <none>
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] kex follows: False
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] Compression: none
2025-12-24T23:45:25.591 [DEBUG] [Thread-1261] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:45:25.606 [DEBUG] [Thread-1261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:45:25.606 [DEBUG] [Thread-1261] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:45:25.607 [DEBUG] [Thread-1261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:45:25.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:45:25.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:45:25.608 [DEBUG] [Thread-1261] [transport.py] [_log()] userauth is OK
2025-12-24T23:45:25.608 [DEBUG] [Thread-1261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:45:25.608 [DEBUG] [Thread-1261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:45:25.608 [DEBUG] [Thread-1261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:45:25.608 [DEBUG] [Thread-1261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:45:25.634 [INFO] [Thread-1261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:45:25.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:45:26.428 [DEBUG] [Thread-1261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:45:26.428 [DEBUG] [Thread-1261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:45:26.428 [DEBUG] [Thread-1261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:45:26.469 [DEBUG] [Thread-1261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:45:26.469 [DEBUG] [Thread-1261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:45:26.471 [DEBUG] [Thread-1261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:45:26.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:45:26.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:45:26.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:45:26.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:45:26.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:45:26.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:45:26.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.905964 -999.00  +13.40  26.25     84  +10.90 1 1 1 2 1     0    0 1.56 -49.92 ZNESW 23.0 26.2 142.6 36.0 14.2 -20.0 14.1 -19.6 13.9 -18.3 14.2 -19.2
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.905964
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:45:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:45:15', tmtdew=3.19, humidity=81.01, cloud=0.0, wind=34.51, temperature=13.59, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:45:15', seeing=1.92, atlas_timestamp='2025-12-24T21:44:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:42:00')
2025-12-24T23:45:26.490 [DEBUG] [Thread-1261] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:45:26.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:45:26.583 [DEBUG] [Thread-1264] [transport.py] [_log()] starting thread (client mode): 0xb6b01f00
2025-12-24T23:45:26.583 [DEBUG] [Thread-1264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:45:26.598 [DEBUG] [Thread-1264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:45:26.598 [INFO] [Thread-1264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] client lang: <none>
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] server lang: <none>
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] kex follows: False
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] Compression: none
2025-12-24T23:45:26.606 [DEBUG] [Thread-1264] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:45:26.665 [DEBUG] [Thread-1264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:45:26.665 [DEBUG] [Thread-1264] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:45:26.665 [DEBUG] [Thread-1264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:45:26.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:45:26.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:45:26.725 [DEBUG] [Thread-1264] [transport.py] [_log()] userauth is OK
2025-12-24T23:45:26.725 [DEBUG] [Thread-1264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:45:26.725 [DEBUG] [Thread-1264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:45:26.725 [DEBUG] [Thread-1264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:45:26.725 [DEBUG] [Thread-1264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:45:26.739 [INFO] [Thread-1264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:45:26.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:45:26.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:45:27.586 [DEBUG] [Thread-1264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:45:27.586 [DEBUG] [Thread-1264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:45:27.638 [DEBUG] [Thread-1264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:45:27.638 [DEBUG] [Thread-1264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:45:27.648 [DEBUG] [Thread-1264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:45:27.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:45:27.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:45:27.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
2025-12-24T23:45:27.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:45:27.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:45:27.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:45:27.683 [DEBUG] [Thread-1264] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:45:31.147 [DEBUG] [Thread-1266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:45:46.226 [DEBUG] [Thread-1267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:45:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:45:57.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:45:57.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:45:58.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 45, 47), 3.18, 81.06, 0.0, 29.18, 13.51, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:45:58.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:45:47
2025-12-24T23:45:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:45:58.660 [DEBUG] [Thread-1268] [transport.py] [_log()] starting thread (client mode): 0xb6b012d0
2025-12-24T23:45:58.660 [DEBUG] [Thread-1268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:45:58.679 [DEBUG] [Thread-1268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:45:58.680 [INFO] [Thread-1268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:45:58.683 [DEBUG] [Thread-1268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:45:58.683 [DEBUG] [Thread-1268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:45:58.683 [DEBUG] [Thread-1268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:45:58.683 [DEBUG] [Thread-1268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:45:58.683 [DEBUG] [Thread-1268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:45:58.683 [DEBUG] [Thread-1268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] client lang: <none>
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] server lang: <none>
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] kex follows: False
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:45:58.684 [DEBUG] [Thread-1268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:45:58.685 [DEBUG] [Thread-1268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:45:58.685 [DEBUG] [Thread-1268] [transport.py] [_log()] Compression: none
2025-12-24T23:45:58.685 [DEBUG] [Thread-1268] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:45:58.696 [DEBUG] [Thread-1268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:45:58.696 [DEBUG] [Thread-1268] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:45:58.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:45:58.697 [DEBUG] [Thread-1268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:45:58.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:45:58.699 [DEBUG] [Thread-1268] [transport.py] [_log()] userauth is OK
2025-12-24T23:45:58.700 [DEBUG] [Thread-1268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:45:58.700 [DEBUG] [Thread-1268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:45:58.700 [DEBUG] [Thread-1268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:45:58.700 [DEBUG] [Thread-1268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:45:58.723 [INFO] [Thread-1268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:45:58.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:45:59.383 [DEBUG] [Thread-1268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:45:59.383 [DEBUG] [Thread-1268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:45:59.383 [DEBUG] [Thread-1268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:45:59.424 [DEBUG] [Thread-1268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:45:59.424 [DEBUG] [Thread-1268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:45:59.427 [DEBUG] [Thread-1268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:45:59.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:45:59.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:45:59.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:45:59.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:45:59.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:45:59.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:45:59.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:45:59.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:45:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:45:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.906311 -999.00  +13.40  21.89     84  +10.90 1 1 1 2 1     0    0 1.67 -49.07 ZNESW 19.9 21.9 147.6 37.0 14.2 -20.0 14.0 -19.5 13.9 -18.3 14.2 -19.1
2025-12-24T23:45:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:45:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:45:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.906311
2025-12-24T23:45:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:45:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:45:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:45:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:45:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:45:59.453 [DEBUG] [Thread-1268] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:45:59.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:45:47', tmtdew=3.18, humidity=81.06, cloud=0.0, wind=29.18, temperature=13.51, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:45:47', seeing=1.92, atlas_timestamp='2025-12-24T21:45:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:42:00')
2025-12-24T23:45:59.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:45:59.563 [DEBUG] [Thread-1271] [transport.py] [_log()] starting thread (client mode): 0xb6b00400
2025-12-24T23:45:59.564 [DEBUG] [Thread-1271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:45:59.581 [DEBUG] [Thread-1271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:45:59.581 [INFO] [Thread-1271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:45:59.591 [DEBUG] [Thread-1271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:45:59.591 [DEBUG] [Thread-1271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:45:59.591 [DEBUG] [Thread-1271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:45:59.592 [DEBUG] [Thread-1271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:45:59.592 [DEBUG] [Thread-1271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:45:59.592 [DEBUG] [Thread-1271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:45:59.592 [DEBUG] [Thread-1271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:45:59.592 [DEBUG] [Thread-1271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:45:59.592 [DEBUG] [Thread-1271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:45:59.592 [DEBUG] [Thread-1271] [transport.py] [_log()] client lang: <none>
2025-12-24T23:45:59.592 [DEBUG] [Thread-1271] [transport.py] [_log()] server lang: <none>
2025-12-24T23:45:59.593 [DEBUG] [Thread-1271] [transport.py] [_log()] kex follows: False
2025-12-24T23:45:59.593 [DEBUG] [Thread-1271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:45:59.593 [DEBUG] [Thread-1271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:45:59.593 [DEBUG] [Thread-1271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:45:59.593 [DEBUG] [Thread-1271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:45:59.593 [DEBUG] [Thread-1271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:45:59.593 [DEBUG] [Thread-1271] [transport.py] [_log()] Compression: none
2025-12-24T23:45:59.594 [DEBUG] [Thread-1271] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:45:59.648 [DEBUG] [Thread-1271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:45:59.648 [DEBUG] [Thread-1271] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:45:59.648 [DEBUG] [Thread-1271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:45:59.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:45:59.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:45:59.705 [DEBUG] [Thread-1271] [transport.py] [_log()] userauth is OK
2025-12-24T23:45:59.706 [DEBUG] [Thread-1271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:45:59.706 [DEBUG] [Thread-1271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:45:59.706 [DEBUG] [Thread-1271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:45:59.707 [DEBUG] [Thread-1271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:45:59.726 [INFO] [Thread-1271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:45:59.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:45:59.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:46:00.607 [DEBUG] [Thread-1271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:46:00.607 [DEBUG] [Thread-1271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:46:00.655 [DEBUG] [Thread-1271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:46:00.655 [DEBUG] [Thread-1271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:46:00.665 [DEBUG] [Thread-1271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:46:00.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:46:00.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:46:00.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:46:00.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:46:00.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:46:00.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:46:00.701 [DEBUG] [Thread-1271] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:46:01.270 [DEBUG] [Thread-1273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:46:08.837 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:46:08.838 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:46:16.341 [DEBUG] [Thread-1274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:46:17.129 [DEBUG] [Thread-1275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:46:30.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:46:30.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:46:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:46:31.381 [DEBUG] [Thread-1276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:46:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 46, 19), 3.16, 81.13, 0.0, 30.1, 13.49, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:46:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:46:19
2025-12-24T23:46:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:46:31.708 [DEBUG] [Thread-1277] [transport.py] [_log()] starting thread (client mode): 0xb6b02b30
2025-12-24T23:46:31.708 [DEBUG] [Thread-1277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:46:31.723 [DEBUG] [Thread-1277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:46:31.723 [INFO] [Thread-1277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:46:31.726 [DEBUG] [Thread-1277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:46:31.726 [DEBUG] [Thread-1277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:46:31.726 [DEBUG] [Thread-1277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:46:31.726 [DEBUG] [Thread-1277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:46:31.726 [DEBUG] [Thread-1277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:46:31.726 [DEBUG] [Thread-1277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] client lang: <none>
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] server lang: <none>
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] kex follows: False
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] Compression: none
2025-12-24T23:46:31.727 [DEBUG] [Thread-1277] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:46:31.745 [DEBUG] [Thread-1277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:46:31.745 [DEBUG] [Thread-1277] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:46:31.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:46:31.746 [DEBUG] [Thread-1277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:46:31.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:46:31.748 [DEBUG] [Thread-1277] [transport.py] [_log()] userauth is OK
2025-12-24T23:46:31.748 [DEBUG] [Thread-1277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:46:31.748 [DEBUG] [Thread-1277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:46:31.748 [DEBUG] [Thread-1277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:46:31.748 [DEBUG] [Thread-1277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:46:31.773 [INFO] [Thread-1277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:46:31.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:46:32.578 [DEBUG] [Thread-1277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:46:32.579 [DEBUG] [Thread-1277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:46:32.579 [DEBUG] [Thread-1277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:46:32.620 [DEBUG] [Thread-1277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:46:32.620 [DEBUG] [Thread-1277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:46:32.623 [DEBUG] [Thread-1277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:46:32.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:46:32.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:46:32.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:46:32.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:46:32.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:46:32.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:46:32.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:46:32.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:46:32.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:46:32.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.906658 -999.00  +13.40  26.26     84  +10.90 1 1 1 2 1     0    0 1.57 -50.73 ZNESW 30.7 26.3 150.5 34.3 14.2 -20.0 14.1 -19.6 13.9 -18.4 14.3 -19.2
2025-12-24T23:46:32.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:46:32.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:46:32.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.906658
2025-12-24T23:46:32.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:46:32.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:46:32.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:46:32.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:46:32.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:46:32.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:46:19', tmtdew=3.16, humidity=81.13, cloud=0.0, wind=30.1, temperature=13.49, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:46:20', seeing=2.11, atlas_timestamp='2025-12-24T21:45:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.10925000000000118, 0.19125000000000014, 0.1280000000000001, 0.129999999999999, 0.14825000000000088, 0.11299999999999955, 0.11224999999999952, 0.1274999999999995, 0.12100000000000044, 0.16274999999999906, 0.07600000000000051, 0.23999999999999844, 0.19674999999999976, 0.0990000000000002, 0.06850000000000023, 0.1532499999999999, 0.17300000000000004, 0.09699999999999953, 0.08724999999999916, 0.17199999999999882, 0.12424999999999997, 0.1382500000000011, 0.13124999999999964, 0.24799999999999933, 0.19200000000000017, 0.12075000000000102, 0.13949999999999996, 0.20500000000000007, 0.16100000000000136, 0.17300000000000182, 0.11200000000000188, 0.2417499999999997], zp_timestamp='2025-12-24T21:42:00')
2025-12-24T23:46:32.647 [DEBUG] [Thread-1277] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:46:32.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:46:32.749 [DEBUG] [Thread-1280] [transport.py] [_log()] starting thread (client mode): 0xb6b00e20
2025-12-24T23:46:32.749 [DEBUG] [Thread-1280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:46:32.763 [DEBUG] [Thread-1280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:46:32.763 [INFO] [Thread-1280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:46:32.771 [DEBUG] [Thread-1280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:46:32.771 [DEBUG] [Thread-1280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:46:32.771 [DEBUG] [Thread-1280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:46:32.771 [DEBUG] [Thread-1280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:46:32.771 [DEBUG] [Thread-1280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] client lang: <none>
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] server lang: <none>
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] kex follows: False
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] Compression: none
2025-12-24T23:46:32.772 [DEBUG] [Thread-1280] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:46:32.829 [DEBUG] [Thread-1280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:46:32.829 [DEBUG] [Thread-1280] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:46:32.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:46:32.830 [DEBUG] [Thread-1280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:46:32.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:46:32.885 [DEBUG] [Thread-1280] [transport.py] [_log()] userauth is OK
2025-12-24T23:46:32.886 [DEBUG] [Thread-1280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:46:32.886 [DEBUG] [Thread-1280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:46:32.886 [DEBUG] [Thread-1280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:46:32.886 [DEBUG] [Thread-1280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:46:32.909 [INFO] [Thread-1280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:46:32.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:46:32.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:46:33.700 [DEBUG] [Thread-1280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:46:33.700 [DEBUG] [Thread-1280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:46:33.747 [DEBUG] [Thread-1280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:46:33.748 [DEBUG] [Thread-1280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:46:33.756 [DEBUG] [Thread-1280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:46:33.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:46:33.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:46:33.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:46:33.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:46:33.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:46:33.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:46:33.791 [DEBUG] [Thread-1280] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:46:46.413 [DEBUG] [Thread-1282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:01.477 [DEBUG] [Thread-1283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:47:03.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:47:03.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:47:04.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 46, 51), 3.14, 81.26, 0.0, 33.33, 13.49, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:47:04.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:46:51
2025-12-24T23:47:04.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:47:04.797 [DEBUG] [Thread-1284] [transport.py] [_log()] starting thread (client mode): 0xb6b02b30
2025-12-24T23:47:04.798 [DEBUG] [Thread-1284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:47:04.819 [DEBUG] [Thread-1284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:47:04.819 [INFO] [Thread-1284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:47:04.822 [DEBUG] [Thread-1284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:47:04.822 [DEBUG] [Thread-1284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] client lang: <none>
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] server lang: <none>
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] kex follows: False
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] Compression: none
2025-12-24T23:47:04.823 [DEBUG] [Thread-1284] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:47:04.832 [DEBUG] [Thread-1284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:47:04.833 [DEBUG] [Thread-1284] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:47:04.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:47:04.833 [DEBUG] [Thread-1284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:47:04.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:47:04.836 [DEBUG] [Thread-1284] [transport.py] [_log()] userauth is OK
2025-12-24T23:47:04.836 [DEBUG] [Thread-1284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:47:04.836 [DEBUG] [Thread-1284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:47:04.836 [DEBUG] [Thread-1284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:47:04.836 [DEBUG] [Thread-1284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:47:04.860 [INFO] [Thread-1284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:47:04.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:47:05.467 [DEBUG] [Thread-1284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:47:05.467 [DEBUG] [Thread-1284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:47:05.468 [DEBUG] [Thread-1284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:47:05.510 [DEBUG] [Thread-1284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:47:05.510 [DEBUG] [Thread-1284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:47:05.513 [DEBUG] [Thread-1284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:47:05.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:47:05.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:47:05.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:47:05.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:47:05.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:47:05.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:47:05.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:47:05.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:47:05.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:47:05.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.907006 -999.00  +13.40  31.29     84  +10.90 1 1 2 2 1     0    0 1.44 -54.10 ZNESW 25.9 31.3 163.0 37.0 14.2 -20.0 14.1 -19.7 13.9 -18.3 14.2 -19.3
2025-12-24T23:47:05.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:47:05.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:47:05.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.907006
2025-12-24T23:47:05.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:47:05.537 [DEBUG] [Thread-1284] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:47:05.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:47:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:47:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:47:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:47:05.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:46:51', tmtdew=3.14, humidity=81.26, cloud=0.0, wind=33.33, temperature=13.49, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:46:52', seeing=2.2, atlas_timestamp='2025-12-24T21:46:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:44:00')
2025-12-24T23:47:05.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:47:05.651 [DEBUG] [Thread-1287] [transport.py] [_log()] starting thread (client mode): 0xb6b00b80
2025-12-24T23:47:05.651 [DEBUG] [Thread-1287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:47:05.665 [DEBUG] [Thread-1287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:47:05.666 [INFO] [Thread-1287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:47:05.673 [DEBUG] [Thread-1287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:47:05.673 [DEBUG] [Thread-1287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:47:05.673 [DEBUG] [Thread-1287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:47:05.673 [DEBUG] [Thread-1287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] client lang: <none>
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] server lang: <none>
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] kex follows: False
2025-12-24T23:47:05.674 [DEBUG] [Thread-1287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:47:05.675 [DEBUG] [Thread-1287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:47:05.675 [DEBUG] [Thread-1287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:47:05.675 [DEBUG] [Thread-1287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:47:05.675 [DEBUG] [Thread-1287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:47:05.675 [DEBUG] [Thread-1287] [transport.py] [_log()] Compression: none
2025-12-24T23:47:05.675 [DEBUG] [Thread-1287] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:47:05.734 [DEBUG] [Thread-1287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:47:05.734 [DEBUG] [Thread-1287] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:47:05.735 [DEBUG] [Thread-1287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:47:05.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:47:05.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:47:05.790 [DEBUG] [Thread-1287] [transport.py] [_log()] userauth is OK
2025-12-24T23:47:05.790 [DEBUG] [Thread-1287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:47:05.790 [DEBUG] [Thread-1287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:47:05.790 [DEBUG] [Thread-1287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:47:05.791 [DEBUG] [Thread-1287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:47:05.810 [INFO] [Thread-1287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:47:05.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:47:05.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:47:06.627 [DEBUG] [Thread-1287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:47:06.627 [DEBUG] [Thread-1287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:47:06.675 [DEBUG] [Thread-1287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:47:06.676 [DEBUG] [Thread-1287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:47:06.685 [DEBUG] [Thread-1287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:47:06.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:47:06.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:47:06.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:47:06.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:47:06.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:47:06.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:47:06.723 [DEBUG] [Thread-1287] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:47:09.036 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:09.037 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:16.522 [DEBUG] [Thread-1289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:17.193 [DEBUG] [Thread-1290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:31.591 [DEBUG] [Thread-1291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:36.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:47:36.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:47:36.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:47:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 47, 23), 3.14, 81.28, 0.0, 31.6, 13.49, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:47:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:47:23
2025-12-24T23:47:37.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:47:37.720 [DEBUG] [Thread-1292] [transport.py] [_log()] starting thread (client mode): 0xb6b00700
2025-12-24T23:47:37.720 [DEBUG] [Thread-1292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:47:37.741 [DEBUG] [Thread-1292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:47:37.741 [INFO] [Thread-1292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:47:37.743 [DEBUG] [Thread-1292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:47:37.743 [DEBUG] [Thread-1292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:47:37.743 [DEBUG] [Thread-1292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] client lang: <none>
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] server lang: <none>
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] kex follows: False
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] Compression: none
2025-12-24T23:47:37.744 [DEBUG] [Thread-1292] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:47:37.761 [DEBUG] [Thread-1292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:47:37.762 [DEBUG] [Thread-1292] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:47:37.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:47:37.763 [DEBUG] [Thread-1292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:47:37.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:47:37.765 [DEBUG] [Thread-1292] [transport.py] [_log()] userauth is OK
2025-12-24T23:47:37.765 [DEBUG] [Thread-1292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:47:37.765 [DEBUG] [Thread-1292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:47:37.765 [DEBUG] [Thread-1292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:47:37.765 [DEBUG] [Thread-1292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:47:37.802 [INFO] [Thread-1292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:47:37.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:47:38.443 [DEBUG] [Thread-1292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:47:38.443 [DEBUG] [Thread-1292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:47:38.444 [DEBUG] [Thread-1292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:47:38.484 [DEBUG] [Thread-1292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:47:38.484 [DEBUG] [Thread-1292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:47:38.487 [DEBUG] [Thread-1292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:47:38.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:47:38.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:47:38.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:47:38.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:47:38.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:47:38.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:47:38.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:47:38.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:47:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:47:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.907700 -999.00  +13.40  26.24     85  +10.90 1 1 1 2 1     0    0 1.17 -61.23 ZNESW 33.8 26.2 144.8 33.9 14.2 -19.9 14.1 -19.5 13.9 -18.2 14.2 -19.1
2025-12-24T23:47:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:47:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:47:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.907700
2025-12-24T23:47:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:47:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:47:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:47:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:47:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:47:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:47:23', tmtdew=3.14, humidity=81.28, cloud=0.0, wind=31.6, temperature=13.49, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:47:24', seeing=2.5, atlas_timestamp='2025-12-24T21:47:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:44:00')
2025-12-24T23:47:38.514 [DEBUG] [Thread-1292] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:47:38.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:47:38.614 [DEBUG] [Thread-1295] [transport.py] [_log()] starting thread (client mode): 0xb6b01db0
2025-12-24T23:47:38.614 [DEBUG] [Thread-1295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:47:38.630 [DEBUG] [Thread-1295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:47:38.630 [INFO] [Thread-1295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:47:38.638 [DEBUG] [Thread-1295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:47:38.638 [DEBUG] [Thread-1295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:47:38.638 [DEBUG] [Thread-1295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:47:38.638 [DEBUG] [Thread-1295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:47:38.638 [DEBUG] [Thread-1295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:47:38.639 [DEBUG] [Thread-1295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:47:38.639 [DEBUG] [Thread-1295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:47:38.639 [DEBUG] [Thread-1295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:47:38.639 [DEBUG] [Thread-1295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:47:38.639 [DEBUG] [Thread-1295] [transport.py] [_log()] client lang: <none>
2025-12-24T23:47:38.639 [DEBUG] [Thread-1295] [transport.py] [_log()] server lang: <none>
2025-12-24T23:47:38.639 [DEBUG] [Thread-1295] [transport.py] [_log()] kex follows: False
2025-12-24T23:47:38.639 [DEBUG] [Thread-1295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:47:38.640 [DEBUG] [Thread-1295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:47:38.640 [DEBUG] [Thread-1295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:47:38.640 [DEBUG] [Thread-1295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:47:38.640 [DEBUG] [Thread-1295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:47:38.640 [DEBUG] [Thread-1295] [transport.py] [_log()] Compression: none
2025-12-24T23:47:38.640 [DEBUG] [Thread-1295] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:47:38.698 [DEBUG] [Thread-1295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:47:38.699 [DEBUG] [Thread-1295] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:47:38.700 [DEBUG] [Thread-1295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:47:38.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:47:38.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:47:38.757 [DEBUG] [Thread-1295] [transport.py] [_log()] userauth is OK
2025-12-24T23:47:38.758 [DEBUG] [Thread-1295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:47:38.758 [DEBUG] [Thread-1295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:47:38.758 [DEBUG] [Thread-1295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:47:38.759 [DEBUG] [Thread-1295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:47:38.777 [INFO] [Thread-1295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:47:38.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:47:38.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:47:39.589 [DEBUG] [Thread-1295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:47:39.589 [DEBUG] [Thread-1295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:47:39.637 [DEBUG] [Thread-1295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:47:39.638 [DEBUG] [Thread-1295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:47:39.647 [DEBUG] [Thread-1295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:47:39.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:47:39.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:47:39.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:47:39.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:47:39.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:47:39.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:47:39.683 [DEBUG] [Thread-1295] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:47:43.186 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:46.638 [DEBUG] [Thread-1297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:48.519 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:51.560 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:47:57.926 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:48:01.723 [DEBUG] [Thread-1298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:48:09.238 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:48:09.239 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:48:09.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:48:09.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:48:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:48:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 47, 55), 3.07, 81.88, 0.0, 32.98, 13.52, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:48:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:47:55
2025-12-24T23:48:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:48:10.687 [DEBUG] [Thread-1299] [transport.py] [_log()] starting thread (client mode): 0xb6b03070
2025-12-24T23:48:10.687 [DEBUG] [Thread-1299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:48:10.707 [DEBUG] [Thread-1299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:48:10.707 [INFO] [Thread-1299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] client lang: <none>
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] server lang: <none>
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] kex follows: False
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:48:10.710 [DEBUG] [Thread-1299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:48:10.711 [DEBUG] [Thread-1299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:48:10.711 [DEBUG] [Thread-1299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:48:10.711 [DEBUG] [Thread-1299] [transport.py] [_log()] Compression: none
2025-12-24T23:48:10.711 [DEBUG] [Thread-1299] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:48:10.727 [DEBUG] [Thread-1299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:48:10.727 [DEBUG] [Thread-1299] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:48:10.728 [DEBUG] [Thread-1299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:48:10.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:48:10.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:48:10.729 [DEBUG] [Thread-1299] [transport.py] [_log()] userauth is OK
2025-12-24T23:48:10.729 [DEBUG] [Thread-1299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:48:10.729 [DEBUG] [Thread-1299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:48:10.729 [DEBUG] [Thread-1299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:48:10.729 [DEBUG] [Thread-1299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:48:10.762 [INFO] [Thread-1299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:48:10.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:48:11.441 [DEBUG] [Thread-1299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:48:11.442 [DEBUG] [Thread-1299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:48:11.442 [DEBUG] [Thread-1299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:48:11.483 [DEBUG] [Thread-1299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:48:11.483 [DEBUG] [Thread-1299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:48:11.487 [DEBUG] [Thread-1299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:48:11.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:48:11.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:48:11.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:48:11.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:48:11.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:48:11.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:48:11.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:48:11.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:48:11.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:48:11.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.908047 -999.00  +13.40  22.27     85  +10.90 1 1 1 2 1     0    0 1.27 -58.60 ZNESW 23.2 22.3 148.4 35.5 14.2 -19.9 14.0 -19.5 13.8 -18.1 14.2 -19.2
2025-12-24T23:48:11.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:48:11.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:48:11.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.908047
2025-12-24T23:48:11.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:48:11.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:48:11.513 [DEBUG] [Thread-1299] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:48:11.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:48:11.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:48:11.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:48:11.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:47:55', tmtdew=3.07, humidity=81.88, cloud=0.0, wind=32.98, temperature=13.52, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:47:56', seeing=2.5, atlas_timestamp='2025-12-24T21:47:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:44:00')
2025-12-24T23:48:11.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:48:11.616 [DEBUG] [Thread-1302] [transport.py] [_log()] starting thread (client mode): 0xb6b03fd0
2025-12-24T23:48:11.616 [DEBUG] [Thread-1302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:48:11.631 [DEBUG] [Thread-1302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:48:11.632 [INFO] [Thread-1302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:48:11.639 [DEBUG] [Thread-1302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:48:11.640 [DEBUG] [Thread-1302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:48:11.640 [DEBUG] [Thread-1302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:48:11.640 [DEBUG] [Thread-1302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:48:11.640 [DEBUG] [Thread-1302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:48:11.640 [DEBUG] [Thread-1302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:48:11.640 [DEBUG] [Thread-1302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:48:11.640 [DEBUG] [Thread-1302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:48:11.640 [DEBUG] [Thread-1302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:48:11.641 [DEBUG] [Thread-1302] [transport.py] [_log()] client lang: <none>
2025-12-24T23:48:11.641 [DEBUG] [Thread-1302] [transport.py] [_log()] server lang: <none>
2025-12-24T23:48:11.641 [DEBUG] [Thread-1302] [transport.py] [_log()] kex follows: False
2025-12-24T23:48:11.641 [DEBUG] [Thread-1302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:48:11.641 [DEBUG] [Thread-1302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:48:11.641 [DEBUG] [Thread-1302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:48:11.641 [DEBUG] [Thread-1302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:48:11.642 [DEBUG] [Thread-1302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:48:11.642 [DEBUG] [Thread-1302] [transport.py] [_log()] Compression: none
2025-12-24T23:48:11.642 [DEBUG] [Thread-1302] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:48:11.698 [DEBUG] [Thread-1302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:48:11.698 [DEBUG] [Thread-1302] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:48:11.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:48:11.700 [DEBUG] [Thread-1302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:48:11.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:48:11.757 [DEBUG] [Thread-1302] [transport.py] [_log()] userauth is OK
2025-12-24T23:48:11.757 [DEBUG] [Thread-1302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:48:11.758 [DEBUG] [Thread-1302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:48:11.758 [DEBUG] [Thread-1302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:48:11.758 [DEBUG] [Thread-1302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:48:11.778 [INFO] [Thread-1302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:48:11.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:48:11.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:48:12.608 [DEBUG] [Thread-1302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:48:12.608 [DEBUG] [Thread-1302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:48:12.656 [DEBUG] [Thread-1302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:48:12.656 [DEBUG] [Thread-1302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:48:12.665 [DEBUG] [Thread-1302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:48:12.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:48:12.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:48:12.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:48:12.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:48:12.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:48:12.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:48:12.701 [DEBUG] [Thread-1302] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:48:16.759 [DEBUG] [Thread-1304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:48:17.250 [DEBUG] [Thread-1305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:48:31.816 [DEBUG] [Thread-1306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:48:42.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:48:42.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:48:42.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:48:43.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 48, 27), 3.07, 81.86, 0.0, 32.92, 13.54, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:48:43.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:48:27
2025-12-24T23:48:43.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:48:43.760 [DEBUG] [Thread-1307] [transport.py] [_log()] starting thread (client mode): 0xb6b03760
2025-12-24T23:48:43.760 [DEBUG] [Thread-1307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:48:43.781 [DEBUG] [Thread-1307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:48:43.781 [INFO] [Thread-1307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] client lang: <none>
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] server lang: <none>
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] kex follows: False
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:48:43.784 [DEBUG] [Thread-1307] [transport.py] [_log()] Compression: none
2025-12-24T23:48:43.785 [DEBUG] [Thread-1307] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:48:43.800 [DEBUG] [Thread-1307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:48:43.801 [DEBUG] [Thread-1307] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:48:43.801 [DEBUG] [Thread-1307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:48:43.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:48:43.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:48:43.802 [DEBUG] [Thread-1307] [transport.py] [_log()] userauth is OK
2025-12-24T23:48:43.802 [DEBUG] [Thread-1307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:48:43.802 [DEBUG] [Thread-1307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:48:43.802 [DEBUG] [Thread-1307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:48:43.802 [DEBUG] [Thread-1307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:48:43.820 [INFO] [Thread-1307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:48:43.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:48:44.465 [DEBUG] [Thread-1307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:48:44.465 [DEBUG] [Thread-1307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:48:44.465 [DEBUG] [Thread-1307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:48:44.506 [DEBUG] [Thread-1307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:48:44.507 [DEBUG] [Thread-1307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:48:44.509 [DEBUG] [Thread-1307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:48:44.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:48:44.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:48:44.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:48:44.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:48:44.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:48:44.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:48:44.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:48:44.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.908394 -999.00  +13.40  22.13     85  +10.90 1 1 1 2 1     0    0 1.26 -56.09 ZNESW 30.1 22.1 158.2 32.1 14.2 -19.9 14.0 -19.7 13.9 -18.3 14.2 -19.3
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.908394
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:48:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:48:27', tmtdew=3.07, humidity=81.86, cloud=0.0, wind=32.92, temperature=13.54, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:48:28', seeing=1.73, atlas_timestamp='2025-12-24T21:48:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:44:00')
2025-12-24T23:48:44.529 [DEBUG] [Thread-1307] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:48:44.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:48:44.621 [DEBUG] [Thread-1310] [transport.py] [_log()] starting thread (client mode): 0xb6b03490
2025-12-24T23:48:44.621 [DEBUG] [Thread-1310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:48:44.637 [DEBUG] [Thread-1310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:48:44.637 [INFO] [Thread-1310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] client lang: <none>
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] server lang: <none>
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] kex follows: False
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] Compression: none
2025-12-24T23:48:44.645 [DEBUG] [Thread-1310] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:48:44.705 [DEBUG] [Thread-1310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:48:44.705 [DEBUG] [Thread-1310] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:48:44.706 [DEBUG] [Thread-1310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:48:44.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:48:44.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:48:44.767 [DEBUG] [Thread-1310] [transport.py] [_log()] userauth is OK
2025-12-24T23:48:44.767 [DEBUG] [Thread-1310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:48:44.767 [DEBUG] [Thread-1310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:48:44.767 [DEBUG] [Thread-1310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:48:44.767 [DEBUG] [Thread-1310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:48:44.781 [INFO] [Thread-1310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:48:44.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:48:44.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:48:45.619 [DEBUG] [Thread-1310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:48:45.619 [DEBUG] [Thread-1310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:48:45.669 [DEBUG] [Thread-1310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:48:45.669 [DEBUG] [Thread-1310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:48:45.678 [DEBUG] [Thread-1310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:48:45.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:48:45.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')
2025-12-24T23:48:45.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
2025-12-24T23:48:45.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:48:45.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:48:45.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:48:45.713 [DEBUG] [Thread-1310] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:48:46.855 [DEBUG] [Thread-1312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:49:01.915 [DEBUG] [Thread-1313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:49:09.439 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:49:09.440 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:49:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:49:15.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:49:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:49:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 48, 59), 3.02, 81.84, 0.0, 31.64, 13.46, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:49:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:48:59
2025-12-24T23:49:16.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:49:16.716 [DEBUG] [Thread-1314] [transport.py] [_log()] starting thread (client mode): 0xb6b008e0
2025-12-24T23:49:16.716 [DEBUG] [Thread-1314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:49:16.739 [DEBUG] [Thread-1314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:49:16.739 [INFO] [Thread-1314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:49:16.742 [DEBUG] [Thread-1314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:49:16.742 [DEBUG] [Thread-1314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:49:16.742 [DEBUG] [Thread-1314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:49:16.742 [DEBUG] [Thread-1314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:49:16.742 [DEBUG] [Thread-1314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:49:16.742 [DEBUG] [Thread-1314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] client lang: <none>
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] server lang: <none>
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] kex follows: False
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] Compression: none
2025-12-24T23:49:16.743 [DEBUG] [Thread-1314] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:49:16.761 [DEBUG] [Thread-1314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:49:16.762 [DEBUG] [Thread-1314] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:49:16.762 [DEBUG] [Thread-1314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:49:16.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:49:16.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:49:16.764 [DEBUG] [Thread-1314] [transport.py] [_log()] userauth is OK
2025-12-24T23:49:16.765 [DEBUG] [Thread-1314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:49:16.765 [DEBUG] [Thread-1314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:49:16.765 [DEBUG] [Thread-1314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:49:16.765 [DEBUG] [Thread-1314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:49:16.789 [INFO] [Thread-1314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:49:16.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:49:16.957 [DEBUG] [Thread-1316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:49:17.306 [DEBUG] [Thread-1317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:49:17.445 [DEBUG] [Thread-1314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:49:17.445 [DEBUG] [Thread-1314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:49:17.446 [DEBUG] [Thread-1314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:49:17.487 [DEBUG] [Thread-1314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:49:17.487 [DEBUG] [Thread-1314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:49:17.491 [DEBUG] [Thread-1314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:49:17.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:49:17.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:49:17.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:49:17.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:49:17.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:49:17.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:49:17.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:49:17.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:49:17.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:49:17.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.908742 -999.00  +13.40  26.51     85  +10.90 1 1 1 2 1     0    0 1.33 -55.00 ZNESW 27.5 26.5 143.0 32.9 14.1 -19.9 14.0 -19.5 13.9 -18.2 14.2 -19.2
2025-12-24T23:49:17.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:49:17.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:49:17.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.908742
2025-12-24T23:49:17.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:49:17.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:49:17.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:49:17.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:49:17.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:49:17.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:48:59', tmtdew=3.02, humidity=81.84, cloud=0.0, wind=31.64, temperature=13.46, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:49:00', seeing=1.77, atlas_timestamp='2025-12-24T21:48:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:44:00')
2025-12-24T23:49:17.517 [DEBUG] [Thread-1314] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:49:17.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:49:17.622 [DEBUG] [Thread-1319] [transport.py] [_log()] starting thread (client mode): 0xb6b031c0
2025-12-24T23:49:17.623 [DEBUG] [Thread-1319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:49:17.640 [DEBUG] [Thread-1319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:49:17.640 [INFO] [Thread-1319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:49:17.648 [DEBUG] [Thread-1319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:49:17.648 [DEBUG] [Thread-1319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:49:17.648 [DEBUG] [Thread-1319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:49:17.648 [DEBUG] [Thread-1319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:49:17.648 [DEBUG] [Thread-1319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:49:17.648 [DEBUG] [Thread-1319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] client lang: <none>
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] server lang: <none>
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] kex follows: False
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] Compression: none
2025-12-24T23:49:17.649 [DEBUG] [Thread-1319] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:49:17.708 [DEBUG] [Thread-1319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:49:17.708 [DEBUG] [Thread-1319] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:49:17.708 [DEBUG] [Thread-1319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:49:17.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:49:17.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:49:17.765 [DEBUG] [Thread-1319] [transport.py] [_log()] userauth is OK
2025-12-24T23:49:17.766 [DEBUG] [Thread-1319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:49:17.766 [DEBUG] [Thread-1319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:49:17.766 [DEBUG] [Thread-1319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:49:17.766 [DEBUG] [Thread-1319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:49:17.784 [INFO] [Thread-1319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:49:17.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:49:17.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:49:18.594 [DEBUG] [Thread-1319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:49:18.594 [DEBUG] [Thread-1319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:49:18.642 [DEBUG] [Thread-1319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:49:18.642 [DEBUG] [Thread-1319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:49:18.650 [DEBUG] [Thread-1319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:49:18.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:49:18.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:49:18.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
2025-12-24T23:49:18.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:49:18.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:49:18.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:49:18.684 [DEBUG] [Thread-1319] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:49:31.996 [DEBUG] [Thread-1321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:49:47.061 [DEBUG] [Thread-1322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:49:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:49:48.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:49:48.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:49:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 49, 32), 3.01, 81.91, 0.0, 31.32, 13.47, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:49:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:49:32
2025-12-24T23:49:49.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:49:49.678 [DEBUG] [Thread-1323] [transport.py] [_log()] starting thread (client mode): 0xb6b00670
2025-12-24T23:49:49.678 [DEBUG] [Thread-1323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:49:49.699 [DEBUG] [Thread-1323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:49:49.699 [INFO] [Thread-1323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:49:49.702 [DEBUG] [Thread-1323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] client lang: <none>
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] server lang: <none>
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] kex follows: False
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] Compression: none
2025-12-24T23:49:49.703 [DEBUG] [Thread-1323] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:49:49.722 [DEBUG] [Thread-1323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:49:49.722 [DEBUG] [Thread-1323] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:49:49.723 [DEBUG] [Thread-1323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:49:49.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:49:49.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:49:49.725 [DEBUG] [Thread-1323] [transport.py] [_log()] userauth is OK
2025-12-24T23:49:49.725 [DEBUG] [Thread-1323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:49:49.725 [DEBUG] [Thread-1323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:49:49.725 [DEBUG] [Thread-1323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:49:49.725 [DEBUG] [Thread-1323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:49:49.750 [INFO] [Thread-1323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:49:49.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:49:50.347 [DEBUG] [Thread-1323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:49:50.348 [DEBUG] [Thread-1323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:49:50.348 [DEBUG] [Thread-1323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:49:50.388 [DEBUG] [Thread-1323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:49:50.388 [DEBUG] [Thread-1323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:49:50.392 [DEBUG] [Thread-1323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:49:50.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:49:50.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:49:50.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:49:50.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:49:50.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:49:50.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:49:50.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:49:50.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:49:50.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:49:50.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.909089 -999.00  +13.40  28.92     85  +11.00 1 1 1 2 1     0    0 1.14 -59.21 ZNESW 31.9 28.9 146.0 33.7 14.2 -20.0 14.0 -19.4 13.9 -18.1 14.2 -19.1
2025-12-24T23:49:50.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:49:50.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:49:50.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.909089
2025-12-24T23:49:50.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:49:50.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:49:50.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:49:50.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:49:50.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:49:50.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:49:32', tmtdew=3.01, humidity=81.91, cloud=0.0, wind=31.32, temperature=13.47, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:49:32', seeing=1.77, atlas_timestamp='2025-12-24T21:49:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:48:00')
2025-12-24T23:49:50.418 [DEBUG] [Thread-1323] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:49:50.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:49:50.519 [DEBUG] [Thread-1326] [transport.py] [_log()] starting thread (client mode): 0xb6b00490
2025-12-24T23:49:50.520 [DEBUG] [Thread-1326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:49:50.537 [DEBUG] [Thread-1326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:49:50.537 [INFO] [Thread-1326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:49:50.545 [DEBUG] [Thread-1326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:49:50.545 [DEBUG] [Thread-1326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:49:50.545 [DEBUG] [Thread-1326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] client lang: <none>
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] server lang: <none>
2025-12-24T23:49:50.546 [DEBUG] [Thread-1326] [transport.py] [_log()] kex follows: False
2025-12-24T23:49:50.547 [DEBUG] [Thread-1326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:49:50.547 [DEBUG] [Thread-1326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:49:50.547 [DEBUG] [Thread-1326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:49:50.547 [DEBUG] [Thread-1326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:49:50.547 [DEBUG] [Thread-1326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:49:50.547 [DEBUG] [Thread-1326] [transport.py] [_log()] Compression: none
2025-12-24T23:49:50.547 [DEBUG] [Thread-1326] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:49:50.606 [DEBUG] [Thread-1326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:49:50.607 [DEBUG] [Thread-1326] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:49:50.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:49:50.608 [DEBUG] [Thread-1326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:49:50.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:49:50.665 [DEBUG] [Thread-1326] [transport.py] [_log()] userauth is OK
2025-12-24T23:49:50.665 [DEBUG] [Thread-1326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:49:50.665 [DEBUG] [Thread-1326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:49:50.665 [DEBUG] [Thread-1326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:49:50.666 [DEBUG] [Thread-1326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:49:50.684 [INFO] [Thread-1326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:49:50.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:49:50.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:49:51.531 [DEBUG] [Thread-1326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:49:51.531 [DEBUG] [Thread-1326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:49:51.579 [DEBUG] [Thread-1326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:49:51.579 [DEBUG] [Thread-1326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:49:51.589 [DEBUG] [Thread-1326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:49:51.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:49:51.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:49:51.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:49:51.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:49:51.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:49:51.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:49:51.626 [DEBUG] [Thread-1326] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:50:02.096 [DEBUG] [Thread-1328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:50:09.642 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:50:09.643 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:50:17.160 [DEBUG] [Thread-1329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:50:17.363 [DEBUG] [Thread-1330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:50:21.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:50:21.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:50:21.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:50:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 50, 4), 3.0, 81.98, 0.0, 29.73, 13.49, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:50:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:50:04
2025-12-24T23:50:22.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:50:22.605 [DEBUG] [Thread-1331] [transport.py] [_log()] starting thread (client mode): 0xb6b02ad0
2025-12-24T23:50:22.605 [DEBUG] [Thread-1331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:50:22.625 [DEBUG] [Thread-1331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:50:22.626 [INFO] [Thread-1331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] client lang: <none>
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] server lang: <none>
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] kex follows: False
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:50:22.629 [DEBUG] [Thread-1331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:50:22.630 [DEBUG] [Thread-1331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:50:22.630 [DEBUG] [Thread-1331] [transport.py] [_log()] Compression: none
2025-12-24T23:50:22.630 [DEBUG] [Thread-1331] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:50:22.647 [DEBUG] [Thread-1331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:50:22.648 [DEBUG] [Thread-1331] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:50:22.648 [DEBUG] [Thread-1331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:50:22.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:50:22.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:50:22.650 [DEBUG] [Thread-1331] [transport.py] [_log()] userauth is OK
2025-12-24T23:50:22.651 [DEBUG] [Thread-1331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:50:22.651 [DEBUG] [Thread-1331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:50:22.651 [DEBUG] [Thread-1331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:50:22.651 [DEBUG] [Thread-1331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:50:22.669 [INFO] [Thread-1331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:50:22.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:50:23.317 [DEBUG] [Thread-1331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:50:23.318 [DEBUG] [Thread-1331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:50:23.318 [DEBUG] [Thread-1331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:50:23.359 [DEBUG] [Thread-1331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:50:23.359 [DEBUG] [Thread-1331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:50:23.363 [DEBUG] [Thread-1331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:50:23.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:50:23.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:50:23.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:50:23.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:50:23.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:50:23.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:50:23.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:50:23.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:50:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:50:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.909436 -999.00  +13.30  23.53     85  +10.90 1 1 1 2 1     0    0 1.13 -60.17 ZNESW 22.4 23.5 147.1 33.6 14.2 -19.8 14.0 -19.6 13.8 -18.1 14.2 -19.1
2025-12-24T23:50:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:50:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:50:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.909436
2025-12-24T23:50:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:50:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:50:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:50:23.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:50:23.390 [DEBUG] [Thread-1331] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:50:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:50:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:50:04', tmtdew=3.0, humidity=81.98, cloud=0.0, wind=29.73, temperature=13.49, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:50:04', seeing=2.2, atlas_timestamp='2025-12-24T21:49:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:48:00')
2025-12-24T23:50:23.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:50:23.493 [DEBUG] [Thread-1334] [transport.py] [_log()] starting thread (client mode): 0xb6b018d0
2025-12-24T23:50:23.493 [DEBUG] [Thread-1334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:50:23.508 [DEBUG] [Thread-1334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:50:23.508 [INFO] [Thread-1334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:50:23.517 [DEBUG] [Thread-1334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:50:23.518 [DEBUG] [Thread-1334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:50:23.518 [DEBUG] [Thread-1334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:50:23.518 [DEBUG] [Thread-1334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:50:23.518 [DEBUG] [Thread-1334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:50:23.518 [DEBUG] [Thread-1334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:50:23.518 [DEBUG] [Thread-1334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:50:23.518 [DEBUG] [Thread-1334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:50:23.518 [DEBUG] [Thread-1334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:50:23.519 [DEBUG] [Thread-1334] [transport.py] [_log()] client lang: <none>
2025-12-24T23:50:23.519 [DEBUG] [Thread-1334] [transport.py] [_log()] server lang: <none>
2025-12-24T23:50:23.519 [DEBUG] [Thread-1334] [transport.py] [_log()] kex follows: False
2025-12-24T23:50:23.519 [DEBUG] [Thread-1334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:50:23.519 [DEBUG] [Thread-1334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:50:23.519 [DEBUG] [Thread-1334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:50:23.519 [DEBUG] [Thread-1334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:50:23.520 [DEBUG] [Thread-1334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:50:23.520 [DEBUG] [Thread-1334] [transport.py] [_log()] Compression: none
2025-12-24T23:50:23.520 [DEBUG] [Thread-1334] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:50:23.577 [DEBUG] [Thread-1334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:50:23.577 [DEBUG] [Thread-1334] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:50:23.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:50:23.579 [DEBUG] [Thread-1334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:50:23.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:50:23.640 [DEBUG] [Thread-1334] [transport.py] [_log()] userauth is OK
2025-12-24T23:50:23.640 [DEBUG] [Thread-1334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:50:23.640 [DEBUG] [Thread-1334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:50:23.640 [DEBUG] [Thread-1334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:50:23.641 [DEBUG] [Thread-1334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:50:23.659 [INFO] [Thread-1334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:50:23.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:50:23.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:50:24.578 [DEBUG] [Thread-1334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:50:24.579 [DEBUG] [Thread-1334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:50:24.627 [DEBUG] [Thread-1334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:50:24.627 [DEBUG] [Thread-1334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:50:24.637 [DEBUG] [Thread-1334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:50:24.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:50:24.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:50:24.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:50:24.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:50:24.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:50:24.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:50:24.672 [DEBUG] [Thread-1334] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:50:32.205 [DEBUG] [Thread-1336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:50:47.268 [DEBUG] [Thread-1337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:50:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:50:54.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:50:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:50:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 50, 36), 3.0, 81.98, 0.0, 28.44, 13.49, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:50:55.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:50:36
2025-12-24T23:50:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:50:55.657 [DEBUG] [Thread-1338] [transport.py] [_log()] starting thread (client mode): 0xb6b03be0
2025-12-24T23:50:55.658 [DEBUG] [Thread-1338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:50:55.678 [DEBUG] [Thread-1338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:50:55.678 [INFO] [Thread-1338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] client lang: <none>
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] server lang: <none>
2025-12-24T23:50:55.681 [DEBUG] [Thread-1338] [transport.py] [_log()] kex follows: False
2025-12-24T23:50:55.682 [DEBUG] [Thread-1338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:50:55.682 [DEBUG] [Thread-1338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:50:55.682 [DEBUG] [Thread-1338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:50:55.682 [DEBUG] [Thread-1338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:50:55.682 [DEBUG] [Thread-1338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:50:55.682 [DEBUG] [Thread-1338] [transport.py] [_log()] Compression: none
2025-12-24T23:50:55.682 [DEBUG] [Thread-1338] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:50:55.702 [DEBUG] [Thread-1338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:50:55.702 [DEBUG] [Thread-1338] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:50:55.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:50:55.703 [DEBUG] [Thread-1338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:50:55.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:50:55.746 [DEBUG] [Thread-1338] [transport.py] [_log()] userauth is OK
2025-12-24T23:50:55.747 [DEBUG] [Thread-1338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:50:55.747 [DEBUG] [Thread-1338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:50:55.747 [DEBUG] [Thread-1338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:50:55.747 [DEBUG] [Thread-1338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:50:55.772 [INFO] [Thread-1338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:50:55.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:50:56.421 [DEBUG] [Thread-1338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:50:56.421 [DEBUG] [Thread-1338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:50:56.422 [DEBUG] [Thread-1338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:50:56.462 [DEBUG] [Thread-1338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:50:56.462 [DEBUG] [Thread-1338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:50:56.465 [DEBUG] [Thread-1338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:50:56.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:50:56.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:50:56.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:50:56.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:50:56.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:50:56.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:50:56.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:50:56.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:50:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:50:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.910130 -999.00  +13.30  30.07     85  +10.90 1 1 2 2 1     0    0 1.10 -61.60 ZNESW 22.6 30.1 144.2 35.3 14.1 -19.8 14.0 -19.4 13.8 -18.1 14.2 -19.0
2025-12-24T23:50:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:50:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:50:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.910130
2025-12-24T23:50:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:50:56.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:50:56.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:50:56.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:50:56.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:50:56.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:50:36', tmtdew=3.0, humidity=81.98, cloud=0.0, wind=28.44, temperature=13.49, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:50:36', seeing=2.2, atlas_timestamp='2025-12-24T21:50:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:48:00')
2025-12-24T23:50:56.489 [DEBUG] [Thread-1338] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:50:56.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:50:56.596 [DEBUG] [Thread-1341] [transport.py] [_log()] starting thread (client mode): 0xb95d7e80
2025-12-24T23:50:56.596 [DEBUG] [Thread-1341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:50:56.610 [DEBUG] [Thread-1341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:50:56.610 [INFO] [Thread-1341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] client lang: <none>
2025-12-24T23:50:56.618 [DEBUG] [Thread-1341] [transport.py] [_log()] server lang: <none>
2025-12-24T23:50:56.619 [DEBUG] [Thread-1341] [transport.py] [_log()] kex follows: False
2025-12-24T23:50:56.619 [DEBUG] [Thread-1341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:50:56.619 [DEBUG] [Thread-1341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:50:56.619 [DEBUG] [Thread-1341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:50:56.619 [DEBUG] [Thread-1341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:50:56.619 [DEBUG] [Thread-1341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:50:56.619 [DEBUG] [Thread-1341] [transport.py] [_log()] Compression: none
2025-12-24T23:50:56.619 [DEBUG] [Thread-1341] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:50:56.677 [DEBUG] [Thread-1341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:50:56.678 [DEBUG] [Thread-1341] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:50:56.678 [DEBUG] [Thread-1341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:50:56.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:50:56.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:50:56.734 [DEBUG] [Thread-1341] [transport.py] [_log()] userauth is OK
2025-12-24T23:50:56.734 [DEBUG] [Thread-1341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:50:56.734 [DEBUG] [Thread-1341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:50:56.734 [DEBUG] [Thread-1341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:50:56.734 [DEBUG] [Thread-1341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:50:56.753 [INFO] [Thread-1341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:50:56.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:50:56.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:50:57.569 [DEBUG] [Thread-1341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:50:57.570 [DEBUG] [Thread-1341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:50:57.618 [DEBUG] [Thread-1341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:50:57.618 [DEBUG] [Thread-1341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:50:57.627 [DEBUG] [Thread-1341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:50:57.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:50: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')
2025-12-24T23:50:57.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:50:57.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:50:57.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:50:57.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:50:57.663 [DEBUG] [Thread-1341] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:51:02.310 [DEBUG] [Thread-1343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:51:09.843 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:51:09.843 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:51:17.372 [DEBUG] [Thread-1344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:51:17.416 [DEBUG] [Thread-1345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:51:27.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:51:27.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:51:27.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
2025-12-24T23:51:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 51, 8), 3.0, 81.99, 0.0, 28.6, 13.44, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:51:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:51:08
2025-12-24T23:51:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:51:28.661 [DEBUG] [Thread-1346] [transport.py] [_log()] starting thread (client mode): 0xb95d4d90
2025-12-24T23:51:28.661 [DEBUG] [Thread-1346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:51:28.684 [DEBUG] [Thread-1346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:51:28.684 [INFO] [Thread-1346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:51:28.688 [DEBUG] [Thread-1346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:51:28.688 [DEBUG] [Thread-1346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:51:28.688 [DEBUG] [Thread-1346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:51:28.689 [DEBUG] [Thread-1346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:51:28.689 [DEBUG] [Thread-1346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:51:28.689 [DEBUG] [Thread-1346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:51:28.689 [DEBUG] [Thread-1346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:51:28.689 [DEBUG] [Thread-1346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:51:28.689 [DEBUG] [Thread-1346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:51:28.689 [DEBUG] [Thread-1346] [transport.py] [_log()] client lang: <none>
2025-12-24T23:51:28.689 [DEBUG] [Thread-1346] [transport.py] [_log()] server lang: <none>
2025-12-24T23:51:28.690 [DEBUG] [Thread-1346] [transport.py] [_log()] kex follows: False
2025-12-24T23:51:28.690 [DEBUG] [Thread-1346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:51:28.690 [DEBUG] [Thread-1346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:51:28.690 [DEBUG] [Thread-1346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:51:28.690 [DEBUG] [Thread-1346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:51:28.690 [DEBUG] [Thread-1346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:51:28.690 [DEBUG] [Thread-1346] [transport.py] [_log()] Compression: none
2025-12-24T23:51:28.690 [DEBUG] [Thread-1346] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:51:28.708 [DEBUG] [Thread-1346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:51:28.709 [DEBUG] [Thread-1346] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:51:28.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:51:28.710 [DEBUG] [Thread-1346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:51:28.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:51:28.712 [DEBUG] [Thread-1346] [transport.py] [_log()] userauth is OK
2025-12-24T23:51:28.712 [DEBUG] [Thread-1346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:51:28.713 [DEBUG] [Thread-1346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:51:28.713 [DEBUG] [Thread-1346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:51:28.713 [DEBUG] [Thread-1346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:51:28.749 [INFO] [Thread-1346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:51:28.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:51:29.349 [DEBUG] [Thread-1346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:51:29.349 [DEBUG] [Thread-1346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:51:29.349 [DEBUG] [Thread-1346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:51:29.390 [DEBUG] [Thread-1346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:51:29.390 [DEBUG] [Thread-1346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:51:29.394 [DEBUG] [Thread-1346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:51:29.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:51:29.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:51:29.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:51:29.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:51:29.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:51:29.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:51:29.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:51:29.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:51:29.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:51:29.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.910478 -999.00  +13.40  24.49     85  +11.00 1 1 1 2 1     0    0 1.15 -58.20 ZNESW 23.7 24.5 140.6 28.9 14.2 -19.3 14.0 -19.1 13.9 -18.1 14.2 -19.1
2025-12-24T23:51:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:51:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:51:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.910478
2025-12-24T23:51:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:51:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:51:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:51:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:51:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:51:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:51:08', tmtdew=3.0, humidity=81.99, cloud=0.0, wind=28.6, temperature=13.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:51:08', seeing=2.04, atlas_timestamp='2025-12-24T21:51:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:48:00')
2025-12-24T23:51:29.423 [DEBUG] [Thread-1346] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:51:29.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:51:29.523 [DEBUG] [Thread-1349] [transport.py] [_log()] starting thread (client mode): 0xb95d6ec0
2025-12-24T23:51:29.523 [DEBUG] [Thread-1349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:51:29.537 [DEBUG] [Thread-1349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:51:29.537 [INFO] [Thread-1349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:51:29.545 [DEBUG] [Thread-1349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:51:29.545 [DEBUG] [Thread-1349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:51:29.545 [DEBUG] [Thread-1349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:51:29.545 [DEBUG] [Thread-1349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:51:29.545 [DEBUG] [Thread-1349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:51:29.545 [DEBUG] [Thread-1349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:51:29.545 [DEBUG] [Thread-1349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:51:29.545 [DEBUG] [Thread-1349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] client lang: <none>
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] server lang: <none>
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] kex follows: False
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] Compression: none
2025-12-24T23:51:29.546 [DEBUG] [Thread-1349] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:51:29.605 [DEBUG] [Thread-1349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:51:29.606 [DEBUG] [Thread-1349] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:51:29.607 [DEBUG] [Thread-1349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:51:29.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:51:29.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:51:29.662 [DEBUG] [Thread-1349] [transport.py] [_log()] userauth is OK
2025-12-24T23:51:29.663 [DEBUG] [Thread-1349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:51:29.663 [DEBUG] [Thread-1349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:51:29.663 [DEBUG] [Thread-1349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:51:29.663 [DEBUG] [Thread-1349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:51:29.682 [INFO] [Thread-1349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:51:29.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:51:29.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:51:30.462 [DEBUG] [Thread-1349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:51:30.462 [DEBUG] [Thread-1349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:51:30.511 [DEBUG] [Thread-1349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:51:30.511 [DEBUG] [Thread-1349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:51:30.520 [DEBUG] [Thread-1349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:51:30.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:51: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')
2025-12-24T23:51:30.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:51:30.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:51:30.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:51:30.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:51:30.557 [DEBUG] [Thread-1349] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:51:32.411 [DEBUG] [Thread-1351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:51:47.479 [DEBUG] [Thread-1352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:52:00.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:52:00.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:52:01.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 51, 40), 2.95, 81.96, 0.0, 28.53, 13.42, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:52:01.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:51:40
2025-12-24T23:52:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:52:01.545 [DEBUG] [Thread-1353] [transport.py] [_log()] starting thread (client mode): 0xb6b02080
2025-12-24T23:52:01.545 [DEBUG] [Thread-1353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:52:01.566 [DEBUG] [Thread-1353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:52:01.566 [INFO] [Thread-1353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:52:01.569 [DEBUG] [Thread-1353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:52:01.570 [DEBUG] [Thread-1353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:52:01.570 [DEBUG] [Thread-1353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:52:01.570 [DEBUG] [Thread-1353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:52:01.570 [DEBUG] [Thread-1353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:52:01.570 [DEBUG] [Thread-1353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:52:01.570 [DEBUG] [Thread-1353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:52:01.570 [DEBUG] [Thread-1353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:52:01.570 [DEBUG] [Thread-1353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:52:01.571 [DEBUG] [Thread-1353] [transport.py] [_log()] client lang: <none>
2025-12-24T23:52:01.571 [DEBUG] [Thread-1353] [transport.py] [_log()] server lang: <none>
2025-12-24T23:52:01.571 [DEBUG] [Thread-1353] [transport.py] [_log()] kex follows: False
2025-12-24T23:52:01.571 [DEBUG] [Thread-1353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:52:01.571 [DEBUG] [Thread-1353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:52:01.571 [DEBUG] [Thread-1353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:52:01.571 [DEBUG] [Thread-1353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:52:01.572 [DEBUG] [Thread-1353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:52:01.572 [DEBUG] [Thread-1353] [transport.py] [_log()] Compression: none
2025-12-24T23:52:01.572 [DEBUG] [Thread-1353] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:52:01.588 [DEBUG] [Thread-1353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:52:01.588 [DEBUG] [Thread-1353] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:52:01.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:52:01.589 [DEBUG] [Thread-1353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:52:01.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:52:01.631 [DEBUG] [Thread-1353] [transport.py] [_log()] userauth is OK
2025-12-24T23:52:01.632 [DEBUG] [Thread-1353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:52:01.632 [DEBUG] [Thread-1353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:52:01.632 [DEBUG] [Thread-1353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:52:01.632 [DEBUG] [Thread-1353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:52:01.670 [INFO] [Thread-1353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:52:01.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:52:02.337 [DEBUG] [Thread-1353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:52:02.337 [DEBUG] [Thread-1353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:52:02.337 [DEBUG] [Thread-1353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:52:02.378 [DEBUG] [Thread-1353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:52:02.378 [DEBUG] [Thread-1353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:52:02.382 [DEBUG] [Thread-1353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:52:02.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:52:02.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:52:02.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:52:02.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:52:02.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:52:02.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:52:02.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:52:02.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:52:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:52:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.910825 -999.00  +13.40  22.24     85  +11.00 1 1 1 2 1     0    0 1.16 -55.82 ZNESW 31.6 22.2 155.0 29.4 14.1 -18.7 14.0 -18.7 13.8 -17.6 14.1 -18.9
2025-12-24T23:52:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:52:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:52:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.910825
2025-12-24T23:52:02.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:52:02.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:52:02.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:52:02.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:52:02.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:52:02.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:51:40', tmtdew=2.95, humidity=81.96, cloud=0.0, wind=28.53, temperature=13.42, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:51:40', seeing=2.06, atlas_timestamp='2025-12-24T21:51:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:48:00')
2025-12-24T23:52:02.411 [DEBUG] [Thread-1353] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:52:02.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:52:02.512 [DEBUG] [Thread-1356] [transport.py] [_log()] starting thread (client mode): 0xb6b034f0
2025-12-24T23:52:02.512 [DEBUG] [Thread-1356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:52:02.518 [DEBUG] [Thread-1357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:02.530 [DEBUG] [Thread-1356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:52:02.530 [INFO] [Thread-1356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:52:02.537 [DEBUG] [Thread-1356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:52:02.538 [DEBUG] [Thread-1356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:52:02.538 [DEBUG] [Thread-1356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:52:02.538 [DEBUG] [Thread-1356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:52:02.538 [DEBUG] [Thread-1356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:52:02.538 [DEBUG] [Thread-1356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:52:02.538 [DEBUG] [Thread-1356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:52:02.538 [DEBUG] [Thread-1356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:52:02.539 [DEBUG] [Thread-1356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:52:02.539 [DEBUG] [Thread-1356] [transport.py] [_log()] client lang: <none>
2025-12-24T23:52:02.539 [DEBUG] [Thread-1356] [transport.py] [_log()] server lang: <none>
2025-12-24T23:52:02.539 [DEBUG] [Thread-1356] [transport.py] [_log()] kex follows: False
2025-12-24T23:52:02.539 [DEBUG] [Thread-1356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:52:02.539 [DEBUG] [Thread-1356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:52:02.539 [DEBUG] [Thread-1356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:52:02.540 [DEBUG] [Thread-1356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:52:02.540 [DEBUG] [Thread-1356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:52:02.540 [DEBUG] [Thread-1356] [transport.py] [_log()] Compression: none
2025-12-24T23:52:02.540 [DEBUG] [Thread-1356] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:52:02.599 [DEBUG] [Thread-1356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:52:02.600 [DEBUG] [Thread-1356] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:52:02.601 [DEBUG] [Thread-1356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:52:02.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:52:02.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:52:02.659 [DEBUG] [Thread-1356] [transport.py] [_log()] userauth is OK
2025-12-24T23:52:02.659 [DEBUG] [Thread-1356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:52:02.660 [DEBUG] [Thread-1356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:52:02.660 [DEBUG] [Thread-1356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:52:02.660 [DEBUG] [Thread-1356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:52:02.680 [INFO] [Thread-1356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:52:02.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:52:02.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:52:03.528 [DEBUG] [Thread-1356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:52:03.529 [DEBUG] [Thread-1356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:52:03.577 [DEBUG] [Thread-1356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:52:03.577 [DEBUG] [Thread-1356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:52:03.586 [DEBUG] [Thread-1356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:52:03.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:52:03.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:52:03.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:52:03.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:52:03.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:52:03.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:52:03.623 [DEBUG] [Thread-1356] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:52:10.043 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:10.044 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:17.473 [DEBUG] [Thread-1359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:17.581 [DEBUG] [Thread-1360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:32.629 [DEBUG] [Thread-1361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:33.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:52:33.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:52:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:52:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 52, 12), 2.94, 82.04, 0.0, 29.63, 13.49, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:52:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:52:12
2025-12-24T23:52:34.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:52:34.669 [DEBUG] [Thread-1362] [transport.py] [_log()] starting thread (client mode): 0xb6b018d0
2025-12-24T23:52:34.670 [DEBUG] [Thread-1362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:52:34.688 [DEBUG] [Thread-1362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:52:34.688 [INFO] [Thread-1362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] client lang: <none>
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] server lang: <none>
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] kex follows: False
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] Compression: none
2025-12-24T23:52:34.691 [DEBUG] [Thread-1362] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:52:34.705 [DEBUG] [Thread-1362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:52:34.705 [DEBUG] [Thread-1362] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:52:34.705 [DEBUG] [Thread-1362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:52:34.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:52:34.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:52:34.705 [DEBUG] [Thread-1362] [transport.py] [_log()] userauth is OK
2025-12-24T23:52:34.706 [DEBUG] [Thread-1362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:52:34.706 [DEBUG] [Thread-1362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:52:34.706 [DEBUG] [Thread-1362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:52:34.706 [DEBUG] [Thread-1362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:52:34.720 [INFO] [Thread-1362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:52:34.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:52:35.363 [DEBUG] [Thread-1362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:52:35.363 [DEBUG] [Thread-1362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:52:35.363 [DEBUG] [Thread-1362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:52:35.404 [DEBUG] [Thread-1362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:52:35.404 [DEBUG] [Thread-1362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:52:35.406 [DEBUG] [Thread-1362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:52:35.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:52:35.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:52:35.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:52:35.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:52:35.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:52:35.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:52:35.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:52:35.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:52:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:52:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.911172 -999.00  +13.30  25.60     85  +11.00 1 1 1 2 1     0    0 0.88 -63.95 ZNESW 25.2 25.6 140.6 36.8 14.1 -19.4 14.0 -19.1 13.8 -18.0 14.1 -18.4
2025-12-24T23:52:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:52:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:52:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.911172
2025-12-24T23:52:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:52:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:52:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:52:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:52:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:52:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:52:12', tmtdew=2.94, humidity=82.04, cloud=0.0, wind=29.63, temperature=13.49, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:52:12', seeing=2.63, atlas_timestamp='2025-12-24T21:52:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.14424999999999955, 0.1817499999999992, 0.15449999999999875, 0.14250000000000007, 0.17825000000000024, 0.09999999999999964, 0.12025000000000041, 0.1659999999999986, 0.13100000000000023, 0.15374999999999872, 0.13000000000000078, 0.23349999999999937, 0.1557499999999994, 0.09849999999999959, 0.06999999999999851, 0.17125000000000057, 0.20449999999999946, 0.10499999999999865, 0.10724999999999874, 0.14899999999999736, 0.17524999999999835, 0.15025000000000155, 0.1407500000000006, 0.20999999999999908, 0.1880000000000006, 0.14874999999999972, 0.14000000000000057, 0.23000000000000043, 0.14700000000000024, 0.14550000000000196, 0.136000000000001, 0.2867499999999996], zp_timestamp='2025-12-24T21:48:00')
2025-12-24T23:52:35.424 [DEBUG] [Thread-1362] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:52:35.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:52:35.516 [DEBUG] [Thread-1365] [transport.py] [_log()] starting thread (client mode): 0xb95d7d90
2025-12-24T23:52:35.516 [DEBUG] [Thread-1365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:52:35.530 [DEBUG] [Thread-1365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:52:35.530 [INFO] [Thread-1365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] client lang: <none>
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] server lang: <none>
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] kex follows: False
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:52:35.537 [DEBUG] [Thread-1365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:52:35.538 [DEBUG] [Thread-1365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:52:35.538 [DEBUG] [Thread-1365] [transport.py] [_log()] Compression: none
2025-12-24T23:52:35.538 [DEBUG] [Thread-1365] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:52:35.593 [DEBUG] [Thread-1365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:52:35.594 [DEBUG] [Thread-1365] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:52:35.594 [DEBUG] [Thread-1365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:52:35.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:52:35.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:52:35.650 [DEBUG] [Thread-1365] [transport.py] [_log()] userauth is OK
2025-12-24T23:52:35.650 [DEBUG] [Thread-1365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:52:35.650 [DEBUG] [Thread-1365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:52:35.650 [DEBUG] [Thread-1365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:52:35.650 [DEBUG] [Thread-1365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:52:35.668 [INFO] [Thread-1365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:52:35.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:52:35.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:52:36.474 [DEBUG] [Thread-1365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:52:36.474 [DEBUG] [Thread-1365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:52:36.522 [DEBUG] [Thread-1365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:52:36.523 [DEBUG] [Thread-1365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:52:36.531 [DEBUG] [Thread-1365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:52:36.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:52:36.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:52:36.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
2025-12-24T23:52:36.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:52:36.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:52:36.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:52:36.565 [DEBUG] [Thread-1365] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:52:47.670 [DEBUG] [Thread-1367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:51.221 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:54.418 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:52:59.496 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:02.736 [DEBUG] [Thread-1368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:05.009 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:06.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:53:06.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:53:06.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:53:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 52, 44), 2.99, 82.03, 0.0, 28.0, 13.44, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:53:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:52:44
2025-12-24T23:53:07.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:53:07.578 [DEBUG] [Thread-1369] [transport.py] [_log()] starting thread (client mode): 0xb95d5420
2025-12-24T23:53:07.578 [DEBUG] [Thread-1369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:53:07.598 [DEBUG] [Thread-1369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:53:07.598 [INFO] [Thread-1369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:53:07.601 [DEBUG] [Thread-1369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:53:07.602 [DEBUG] [Thread-1369] [transport.py] [_log()] client lang: <none>
2025-12-24T23:53:07.603 [DEBUG] [Thread-1369] [transport.py] [_log()] server lang: <none>
2025-12-24T23:53:07.603 [DEBUG] [Thread-1369] [transport.py] [_log()] kex follows: False
2025-12-24T23:53:07.603 [DEBUG] [Thread-1369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:53:07.603 [DEBUG] [Thread-1369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:53:07.603 [DEBUG] [Thread-1369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:53:07.603 [DEBUG] [Thread-1369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:53:07.603 [DEBUG] [Thread-1369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:53:07.604 [DEBUG] [Thread-1369] [transport.py] [_log()] Compression: none
2025-12-24T23:53:07.604 [DEBUG] [Thread-1369] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:53:07.623 [DEBUG] [Thread-1369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:53:07.624 [DEBUG] [Thread-1369] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:53:07.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:53:07.625 [DEBUG] [Thread-1369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:53:07.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:53:07.627 [DEBUG] [Thread-1369] [transport.py] [_log()] userauth is OK
2025-12-24T23:53:07.628 [DEBUG] [Thread-1369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:53:07.628 [DEBUG] [Thread-1369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:53:07.628 [DEBUG] [Thread-1369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:53:07.628 [DEBUG] [Thread-1369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:53:07.653 [INFO] [Thread-1369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:53:07.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:53:08.289 [DEBUG] [Thread-1369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:53:08.289 [DEBUG] [Thread-1369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:53:08.289 [DEBUG] [Thread-1369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:53:08.329 [DEBUG] [Thread-1369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:53:08.329 [DEBUG] [Thread-1369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:53:08.332 [DEBUG] [Thread-1369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:53:08.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:53:08.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:53:08.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:53:08.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:53:08.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:53:08.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:53:08.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:53:08.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:53:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:53:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.911519 -999.00  +13.30  16.68     85  +11.00 1 1 1 2 1     0    0 0.69 -72.11 ZNESW 17.6 16.7 143.7 27.4 14.1 -19.6 14.0 -19.5 13.8 -18.1 14.2 -19.1
2025-12-24T23:53:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:53:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:53:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.911519
2025-12-24T23:53:08.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:53:08.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:53:08.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:53:08.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:53:08.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:53:08.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:52:44', tmtdew=2.99, humidity=82.03, cloud=0.0, wind=28.0, temperature=13.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:52:45', seeing=2.87, atlas_timestamp='2025-12-24T21:52:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.09975000000000023, 0.11425000000000018, 0.21424999999999983, 0.1454999999999984, 0.11749999999999972, 0.15825000000000244, 0.13150000000000084, 0.10625000000000107, 0.1634999999999991, 0.12899999999999956, 0.16525000000000034, 0.12299999999999933, 0.24650000000000105, 0.19824999999999982, 0.11099999999999888, 0.0909999999999993, 0.18825000000000003, 0.1974999999999998, 0.11549999999999905, 0.1112499999999983, 0.19299999999999784, 0.1242499999999982, 0.18125000000000036, 0.16174999999999962, 0.2839999999999989, 0.2215000000000007, 0.17474999999999952, 0.11050000000000004, 0.20700000000000074, 0.17549999999999955, 0.1460000000000008, 0.14200000000000124, 0.2937499999999993], zp_timestamp='2025-12-24T21:51:00')
2025-12-24T23:53:08.352 [DEBUG] [Thread-1369] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:53:08.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:53:08.442 [DEBUG] [Thread-1372] [transport.py] [_log()] starting thread (client mode): 0xb95d55d0
2025-12-24T23:53:08.442 [DEBUG] [Thread-1372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:53:08.456 [DEBUG] [Thread-1372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:53:08.456 [INFO] [Thread-1372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] client lang: <none>
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] server lang: <none>
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] kex follows: False
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:53:08.464 [DEBUG] [Thread-1372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:53:08.465 [DEBUG] [Thread-1372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:53:08.465 [DEBUG] [Thread-1372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:53:08.465 [DEBUG] [Thread-1372] [transport.py] [_log()] Compression: none
2025-12-24T23:53:08.465 [DEBUG] [Thread-1372] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:53:08.526 [DEBUG] [Thread-1372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:53:08.526 [DEBUG] [Thread-1372] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:53:08.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:53:08.526 [DEBUG] [Thread-1372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:53:08.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:53:08.583 [DEBUG] [Thread-1372] [transport.py] [_log()] userauth is OK
2025-12-24T23:53:08.583 [DEBUG] [Thread-1372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:53:08.583 [DEBUG] [Thread-1372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:53:08.583 [DEBUG] [Thread-1372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:53:08.583 [DEBUG] [Thread-1372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:53:08.603 [INFO] [Thread-1372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:53:08.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:53:08.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:53:09.439 [DEBUG] [Thread-1372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:53:09.439 [DEBUG] [Thread-1372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:53:09.486 [DEBUG] [Thread-1372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:53:09.487 [DEBUG] [Thread-1372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:53:09.495 [DEBUG] [Thread-1372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:53:09.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:53:09.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:53:09.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:53:09.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:53:09.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:53:09.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:53:09.533 [DEBUG] [Thread-1372] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:53:10.262 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:10.262 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:14.255 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:17.526 [DEBUG] [Thread-1374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:17.770 [DEBUG] [Thread-1375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:18.663 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:32.826 [DEBUG] [Thread-1376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:38.033 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:53:39.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:53:39.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:53:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 53, 16), 2.98, 82.06, 0.0, 25.41, 13.44, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:53:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:53:16
2025-12-24T23:53:40.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:53:40.517 [DEBUG] [Thread-1377] [transport.py] [_log()] starting thread (client mode): 0xb6b03520
2025-12-24T23:53:40.517 [DEBUG] [Thread-1377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:53:40.537 [DEBUG] [Thread-1377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:53:40.537 [INFO] [Thread-1377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:53:40.540 [DEBUG] [Thread-1377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:53:40.540 [DEBUG] [Thread-1377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:53:40.540 [DEBUG] [Thread-1377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] client lang: <none>
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] server lang: <none>
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] kex follows: False
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:53:40.541 [DEBUG] [Thread-1377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:53:40.542 [DEBUG] [Thread-1377] [transport.py] [_log()] Compression: none
2025-12-24T23:53:40.542 [DEBUG] [Thread-1377] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:53:40.550 [DEBUG] [Thread-1377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:53:40.551 [DEBUG] [Thread-1377] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:53:40.551 [DEBUG] [Thread-1377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:53:40.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:53:40.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:53:40.553 [DEBUG] [Thread-1377] [transport.py] [_log()] userauth is OK
2025-12-24T23:53:40.553 [DEBUG] [Thread-1377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:53:40.553 [DEBUG] [Thread-1377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:53:40.554 [DEBUG] [Thread-1377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:53:40.554 [DEBUG] [Thread-1377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:53:40.572 [INFO] [Thread-1377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:53:40.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:53:41.202 [DEBUG] [Thread-1377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:53:41.203 [DEBUG] [Thread-1377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:53:41.203 [DEBUG] [Thread-1377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:53:41.243 [DEBUG] [Thread-1377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:53:41.243 [DEBUG] [Thread-1377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:53:41.246 [DEBUG] [Thread-1377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:53:41.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:53:41.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:53:41.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:53:41.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:53:41.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:53:41.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:53:41.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:53:41.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:53:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:53:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.911867 -999.00  +13.40  23.00     85  +11.00 1 1 1 2 1     0    0 0.94 -62.28 ZNESW 21.1 23.0 147.8 27.9 14.2 -19.5 14.1 -19.2 13.8 -18.1 14.2 -19.0
2025-12-24T23:53:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:53:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:53:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.911867
2025-12-24T23:53:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:53:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:53:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:53:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:53:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:53:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:53:16', tmtdew=2.98, humidity=82.06, cloud=0.0, wind=25.41, temperature=13.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:53:17', seeing=2.87, atlas_timestamp='2025-12-24T21:53:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.09975000000000023, 0.11425000000000018, 0.21424999999999983, 0.1454999999999984, 0.11749999999999972, 0.15825000000000244, 0.13150000000000084, 0.10625000000000107, 0.1634999999999991, 0.12899999999999956, 0.16525000000000034, 0.12299999999999933, 0.24650000000000105, 0.19824999999999982, 0.11099999999999888, 0.0909999999999993, 0.18825000000000003, 0.1974999999999998, 0.11549999999999905, 0.1112499999999983, 0.19299999999999784, 0.1242499999999982, 0.18125000000000036, 0.16174999999999962, 0.2839999999999989, 0.2215000000000007, 0.17474999999999952, 0.11050000000000004, 0.20700000000000074, 0.17549999999999955, 0.1460000000000008, 0.14200000000000124, 0.2937499999999993], zp_timestamp='2025-12-24T21:51:00')
2025-12-24T23:53:41.272 [DEBUG] [Thread-1377] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:53:41.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:53:41.375 [DEBUG] [Thread-1380] [transport.py] [_log()] starting thread (client mode): 0xb6b006d0
2025-12-24T23:53:41.375 [DEBUG] [Thread-1380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:53:41.394 [DEBUG] [Thread-1380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:53:41.394 [INFO] [Thread-1380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:53:41.402 [DEBUG] [Thread-1380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] client lang: <none>
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] server lang: <none>
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] kex follows: False
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:53:41.403 [DEBUG] [Thread-1380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:53:41.404 [DEBUG] [Thread-1380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:53:41.404 [DEBUG] [Thread-1380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:53:41.404 [DEBUG] [Thread-1380] [transport.py] [_log()] Compression: none
2025-12-24T23:53:41.404 [DEBUG] [Thread-1380] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:53:41.462 [DEBUG] [Thread-1380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:53:41.463 [DEBUG] [Thread-1380] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:53:41.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:53:41.464 [DEBUG] [Thread-1380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:53:41.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:53:41.524 [DEBUG] [Thread-1380] [transport.py] [_log()] userauth is OK
2025-12-24T23:53:41.524 [DEBUG] [Thread-1380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:53:41.524 [DEBUG] [Thread-1380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:53:41.524 [DEBUG] [Thread-1380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:53:41.524 [DEBUG] [Thread-1380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:53:41.544 [INFO] [Thread-1380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:53:41.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:53:41.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:53:42.396 [DEBUG] [Thread-1380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:53:42.396 [DEBUG] [Thread-1380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:53:42.444 [DEBUG] [Thread-1380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:53:42.444 [DEBUG] [Thread-1380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:53:42.454 [DEBUG] [Thread-1380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:53:42.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:53: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')
2025-12-24T23:53:42.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:53:42.481 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:42.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:53:42.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:53:42.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:53:42.496 [DEBUG] [Thread-1380] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:53:47.870 [DEBUG] [Thread-1382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:49.146 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:53:53.543 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:54:02.925 [DEBUG] [Thread-1383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:54:10.460 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:54:10.462 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:54:12.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:54:12.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:54:12.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:54:13.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 53, 48), 2.92, 82.63, 0.0, 29.13, 13.51, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:54:13.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:53:48
2025-12-24T23:54:13.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:54:13.500 [DEBUG] [Thread-1384] [transport.py] [_log()] starting thread (client mode): 0xb6b03be0
2025-12-24T23:54:13.500 [DEBUG] [Thread-1384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:54:13.516 [DEBUG] [Thread-1384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:54:13.517 [INFO] [Thread-1384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] client lang: <none>
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] server lang: <none>
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] kex follows: False
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] Compression: none
2025-12-24T23:54:13.520 [DEBUG] [Thread-1384] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:54:13.536 [DEBUG] [Thread-1384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:54:13.536 [DEBUG] [Thread-1384] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:54:13.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:54:13.537 [DEBUG] [Thread-1384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:54:13.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:54:13.539 [DEBUG] [Thread-1384] [transport.py] [_log()] userauth is OK
2025-12-24T23:54:13.539 [DEBUG] [Thread-1384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:54:13.539 [DEBUG] [Thread-1384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:54:13.539 [DEBUG] [Thread-1384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:54:13.539 [DEBUG] [Thread-1384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:54:13.563 [INFO] [Thread-1384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:54:13.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:54:14.181 [DEBUG] [Thread-1384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:54:14.181 [DEBUG] [Thread-1384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:54:14.181 [DEBUG] [Thread-1384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:54:14.222 [DEBUG] [Thread-1384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:54:14.222 [DEBUG] [Thread-1384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:54:14.226 [DEBUG] [Thread-1384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:54:14.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:54:14.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:54:14.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:54:14.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:54:14.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:54:14.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:54:14.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:54:14.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:54:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:54:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.912561 -999.00  +13.30  20.36     85  +11.00 1 1 1 2 1     0    0 0.93 -62.49 ZNESW 20.3 20.4 137.6 23.9 14.1 -18.5 14.0 -18.5 13.8 -17.4 14.2 -18.8
2025-12-24T23:54:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:54:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:54:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.912561
2025-12-24T23:54:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:54:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:54:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:54:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:54:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:54:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:53:48', tmtdew=2.92, humidity=82.63, cloud=0.0, wind=29.13, temperature=13.51, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:53:49', seeing=2.93, atlas_timestamp='2025-12-24T21:54:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.09975000000000023, 0.11425000000000018, 0.21424999999999983, 0.1454999999999984, 0.11749999999999972, 0.15825000000000244, 0.13150000000000084, 0.10625000000000107, 0.1634999999999991, 0.12899999999999956, 0.16525000000000034, 0.12299999999999933, 0.24650000000000105, 0.19824999999999982, 0.11099999999999888, 0.0909999999999993, 0.18825000000000003, 0.1974999999999998, 0.11549999999999905, 0.1112499999999983, 0.19299999999999784, 0.1242499999999982, 0.18125000000000036, 0.16174999999999962, 0.2839999999999989, 0.2215000000000007, 0.17474999999999952, 0.11050000000000004, 0.20700000000000074, 0.17549999999999955, 0.1460000000000008, 0.14200000000000124, 0.2937499999999993], zp_timestamp='2025-12-24T21:51:00')
2025-12-24T23:54:14.250 [DEBUG] [Thread-1384] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:54:14.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:54:14.349 [DEBUG] [Thread-1387] [transport.py] [_log()] starting thread (client mode): 0xb95d5660
2025-12-24T23:54:14.350 [DEBUG] [Thread-1387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:54:14.365 [DEBUG] [Thread-1387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:54:14.365 [INFO] [Thread-1387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:54:14.373 [DEBUG] [Thread-1387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:54:14.373 [DEBUG] [Thread-1387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:54:14.373 [DEBUG] [Thread-1387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] client lang: <none>
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] server lang: <none>
2025-12-24T23:54:14.374 [DEBUG] [Thread-1387] [transport.py] [_log()] kex follows: False
2025-12-24T23:54:14.375 [DEBUG] [Thread-1387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:54:14.375 [DEBUG] [Thread-1387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:54:14.375 [DEBUG] [Thread-1387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:54:14.375 [DEBUG] [Thread-1387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:54:14.375 [DEBUG] [Thread-1387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:54:14.375 [DEBUG] [Thread-1387] [transport.py] [_log()] Compression: none
2025-12-24T23:54:14.375 [DEBUG] [Thread-1387] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:54:14.437 [DEBUG] [Thread-1387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:54:14.438 [DEBUG] [Thread-1387] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:54:14.438 [DEBUG] [Thread-1387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:54:14.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:54:14.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:54:14.498 [DEBUG] [Thread-1387] [transport.py] [_log()] userauth is OK
2025-12-24T23:54:14.498 [DEBUG] [Thread-1387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:54:14.499 [DEBUG] [Thread-1387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:54:14.499 [DEBUG] [Thread-1387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:54:14.499 [DEBUG] [Thread-1387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:54:14.517 [INFO] [Thread-1387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:54:14.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:54:14.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:54:15.352 [DEBUG] [Thread-1387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:54:15.353 [DEBUG] [Thread-1387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:54:15.401 [DEBUG] [Thread-1387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:54:15.401 [DEBUG] [Thread-1387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:54:15.410 [DEBUG] [Thread-1387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:54:15.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:54:15.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:54:15.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:54:15.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:54:15.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:54:15.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:54:15.446 [DEBUG] [Thread-1387] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:54:17.602 [DEBUG] [Thread-1389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:54:17.967 [DEBUG] [Thread-1390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:54:33.031 [DEBUG] [Thread-1391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:54:45.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:54:45.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:54:45.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:54:46.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 54, 20), 2.93, 82.61, 0.0, 29.73, 13.46, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:54:46.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:54:20
2025-12-24T23:54:46.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:54:46.454 [DEBUG] [Thread-1392] [transport.py] [_log()] starting thread (client mode): 0xb6b018a0
2025-12-24T23:54:46.454 [DEBUG] [Thread-1392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:54:46.475 [DEBUG] [Thread-1392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:54:46.475 [INFO] [Thread-1392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:54:46.476 [DEBUG] [Thread-1392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:54:46.476 [DEBUG] [Thread-1392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] client lang: <none>
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] server lang: <none>
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] kex follows: False
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] Compression: none
2025-12-24T23:54:46.477 [DEBUG] [Thread-1392] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:54:46.489 [DEBUG] [Thread-1392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:54:46.490 [DEBUG] [Thread-1392] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:54:46.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:54:46.491 [DEBUG] [Thread-1392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:54:46.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:54:46.493 [DEBUG] [Thread-1392] [transport.py] [_log()] userauth is OK
2025-12-24T23:54:46.493 [DEBUG] [Thread-1392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:54:46.493 [DEBUG] [Thread-1392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:54:46.493 [DEBUG] [Thread-1392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:54:46.493 [DEBUG] [Thread-1392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:54:46.512 [INFO] [Thread-1392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:54:46.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:54:47.181 [DEBUG] [Thread-1392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:54:47.181 [DEBUG] [Thread-1392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:54:47.181 [DEBUG] [Thread-1392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:54:47.222 [DEBUG] [Thread-1392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:54:47.223 [DEBUG] [Thread-1392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:54:47.230 [DEBUG] [Thread-1392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:54:47.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:54:47.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:54:47.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:54:47.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:54:47.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:54:47.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:54:47.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:54:47.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:54:47.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:54:47.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.912908 -999.00  +13.30  19.91     85  +11.00 1 1 1 2 1     0    0 0.82 -64.48 ZNESW 22.5 19.9 164.4 35.8 14.1 -19.2 14.0 -18.6 13.8 -17.6 14.2 -18.4
2025-12-24T23:54:47.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:54:47.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:54:47.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.912908
2025-12-24T23:54:47.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:54:47.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:54:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:54:47.261 [DEBUG] [Thread-1392] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:54:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:54:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:54:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:54:20', tmtdew=2.93, humidity=82.61, cloud=0.0, wind=29.73, temperature=13.46, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:54:21', seeing=2.49, atlas_timestamp='2025-12-24T21:54:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.09975000000000023, 0.11425000000000018, 0.21424999999999983, 0.1454999999999984, 0.11749999999999972, 0.15825000000000244, 0.13150000000000084, 0.10625000000000107, 0.1634999999999991, 0.12899999999999956, 0.16525000000000034, 0.12299999999999933, 0.24650000000000105, 0.19824999999999982, 0.11099999999999888, 0.0909999999999993, 0.18825000000000003, 0.1974999999999998, 0.11549999999999905, 0.1112499999999983, 0.19299999999999784, 0.1242499999999982, 0.18125000000000036, 0.16174999999999962, 0.2839999999999989, 0.2215000000000007, 0.17474999999999952, 0.11050000000000004, 0.20700000000000074, 0.17549999999999955, 0.1460000000000008, 0.14200000000000124, 0.2937499999999993], zp_timestamp='2025-12-24T21:51:00')
2025-12-24T23:54:47.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:54:47.367 [DEBUG] [Thread-1395] [transport.py] [_log()] starting thread (client mode): 0xb95d4af0
2025-12-24T23:54:47.367 [DEBUG] [Thread-1395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:54:47.382 [DEBUG] [Thread-1395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:54:47.382 [INFO] [Thread-1395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:54:47.390 [DEBUG] [Thread-1395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:54:47.390 [DEBUG] [Thread-1395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:54:47.391 [DEBUG] [Thread-1395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:54:47.391 [DEBUG] [Thread-1395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:54:47.391 [DEBUG] [Thread-1395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:54:47.391 [DEBUG] [Thread-1395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:54:47.391 [DEBUG] [Thread-1395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:54:47.391 [DEBUG] [Thread-1395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:54:47.391 [DEBUG] [Thread-1395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:54:47.391 [DEBUG] [Thread-1395] [transport.py] [_log()] client lang: <none>
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] server lang: <none>
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] kex follows: False
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] Compression: none
2025-12-24T23:54:47.392 [DEBUG] [Thread-1395] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:54:47.446 [DEBUG] [Thread-1395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:54:47.446 [DEBUG] [Thread-1395] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:54:47.446 [DEBUG] [Thread-1395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:54:47.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:54:47.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:54:47.507 [DEBUG] [Thread-1395] [transport.py] [_log()] userauth is OK
2025-12-24T23:54:47.507 [DEBUG] [Thread-1395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:54:47.507 [DEBUG] [Thread-1395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:54:47.507 [DEBUG] [Thread-1395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:54:47.507 [DEBUG] [Thread-1395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:54:47.527 [INFO] [Thread-1395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:54:47.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:54:47.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:54:48.072 [DEBUG] [Thread-1397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:54:48.378 [DEBUG] [Thread-1395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:54:48.379 [DEBUG] [Thread-1395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:54:48.427 [DEBUG] [Thread-1395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:54:48.427 [DEBUG] [Thread-1395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:54:48.437 [DEBUG] [Thread-1395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:54:48.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:54:48.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:54:48.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:54:48.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:54:48.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:54:48.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:54:48.473 [DEBUG] [Thread-1395] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:55:03.148 [DEBUG] [Thread-1398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:03.489 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:07.570 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:10.663 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:10.664 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:17.656 [DEBUG] [Thread-1399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:18.189 [DEBUG] [Thread-1400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:55:18.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:55:18.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:55:19.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 54, 52), 2.82, 82.89, 0.0, 28.36, 13.34, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:55:19.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:54:52
2025-12-24T23:55:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:55:19.496 [DEBUG] [Thread-1401] [transport.py] [_log()] starting thread (client mode): 0xb95d5f00
2025-12-24T23:55:19.496 [DEBUG] [Thread-1401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:55:19.510 [DEBUG] [Thread-1401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:55:19.510 [INFO] [Thread-1401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:55:19.514 [DEBUG] [Thread-1401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:55:19.514 [DEBUG] [Thread-1401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:55:19.514 [DEBUG] [Thread-1401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:55:19.514 [DEBUG] [Thread-1401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:55:19.514 [DEBUG] [Thread-1401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:55:19.514 [DEBUG] [Thread-1401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:55:19.514 [DEBUG] [Thread-1401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:55:19.514 [DEBUG] [Thread-1401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] client lang: <none>
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] server lang: <none>
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] kex follows: False
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] Compression: none
2025-12-24T23:55:19.515 [DEBUG] [Thread-1401] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:55:19.531 [DEBUG] [Thread-1401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:55:19.532 [DEBUG] [Thread-1401] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:55:19.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:55:19.533 [DEBUG] [Thread-1401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:55:19.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:55:19.534 [DEBUG] [Thread-1401] [transport.py] [_log()] userauth is OK
2025-12-24T23:55:19.535 [DEBUG] [Thread-1401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:55:19.535 [DEBUG] [Thread-1401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:55:19.535 [DEBUG] [Thread-1401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:55:19.535 [DEBUG] [Thread-1401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:55:19.558 [INFO] [Thread-1401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:55:19.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:55:20.198 [DEBUG] [Thread-1401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:55:20.198 [DEBUG] [Thread-1401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:55:20.198 [DEBUG] [Thread-1401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:55:20.239 [DEBUG] [Thread-1401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:55:20.239 [DEBUG] [Thread-1401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:55:20.241 [DEBUG] [Thread-1401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:55:20.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:55:20.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:55:20.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:55:20.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:55:20.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:55:20.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:55:20.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:55:20.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:55:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:55:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.912908 -999.00  +13.30  19.91     85  +11.00 1 1 1 2 1     0    0 0.82 -64.48 ZNESW 22.5 19.9 164.4 35.8 14.1 -19.2 14.0 -18.6 13.8 -17.6 14.2 -18.4
2025-12-24T23:55:20.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:55:20.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:55:20.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.912908
2025-12-24T23:55:20.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:55:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:55:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:55:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:55:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:55:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:54:52', tmtdew=2.82, humidity=82.89, cloud=0.0, wind=28.36, temperature=13.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:54:53', seeing=3.71, atlas_timestamp='2025-12-24T21:54:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.09975000000000023, 0.11425000000000018, 0.21424999999999983, 0.1454999999999984, 0.11749999999999972, 0.15825000000000244, 0.13150000000000084, 0.10625000000000107, 0.1634999999999991, 0.12899999999999956, 0.16525000000000034, 0.12299999999999933, 0.24650000000000105, 0.19824999999999982, 0.11099999999999888, 0.0909999999999993, 0.18825000000000003, 0.1974999999999998, 0.11549999999999905, 0.1112499999999983, 0.19299999999999784, 0.1242499999999982, 0.18125000000000036, 0.16174999999999962, 0.2839999999999989, 0.2215000000000007, 0.17474999999999952, 0.11050000000000004, 0.20700000000000074, 0.17549999999999955, 0.1460000000000008, 0.14200000000000124, 0.2937499999999993], zp_timestamp='2025-12-24T21:51:00')
2025-12-24T23:55:20.265 [DEBUG] [Thread-1401] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:55:20.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:55:20.370 [DEBUG] [Thread-1404] [transport.py] [_log()] starting thread (client mode): 0xb9579a20
2025-12-24T23:55:20.370 [DEBUG] [Thread-1404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:55:20.388 [DEBUG] [Thread-1404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:55:20.388 [INFO] [Thread-1404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:55:20.397 [DEBUG] [Thread-1404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:55:20.397 [DEBUG] [Thread-1404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] client lang: <none>
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] server lang: <none>
2025-12-24T23:55:20.398 [DEBUG] [Thread-1404] [transport.py] [_log()] kex follows: False
2025-12-24T23:55:20.399 [DEBUG] [Thread-1404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:55:20.399 [DEBUG] [Thread-1404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:55:20.399 [DEBUG] [Thread-1404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:55:20.399 [DEBUG] [Thread-1404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:55:20.399 [DEBUG] [Thread-1404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:55:20.399 [DEBUG] [Thread-1404] [transport.py] [_log()] Compression: none
2025-12-24T23:55:20.399 [DEBUG] [Thread-1404] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:55:20.455 [DEBUG] [Thread-1404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:55:20.455 [DEBUG] [Thread-1404] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:55:20.456 [DEBUG] [Thread-1404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:55:20.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:55:20.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:55:20.512 [DEBUG] [Thread-1404] [transport.py] [_log()] userauth is OK
2025-12-24T23:55:20.513 [DEBUG] [Thread-1404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:55:20.513 [DEBUG] [Thread-1404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:55:20.513 [DEBUG] [Thread-1404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:55:20.513 [DEBUG] [Thread-1404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:55:20.537 [INFO] [Thread-1404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:55:20.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:55:20.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:55:21.363 [DEBUG] [Thread-1404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:55:21.363 [DEBUG] [Thread-1404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:55:21.411 [DEBUG] [Thread-1404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:55:21.411 [DEBUG] [Thread-1404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:55:21.420 [DEBUG] [Thread-1404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:55:21.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:55:21.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:55:21.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:55:21.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:55:21.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:55:21.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:55:21.456 [DEBUG] [Thread-1404] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:55:33.231 [DEBUG] [Thread-1406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:48.312 [DEBUG] [Thread-1407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:55:51.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:55:51.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:55:51.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:55:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 55, 24), 2.82, 82.89, 0.0, 28.85, 13.36, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:55:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:55:24
2025-12-24T23:55:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:55:52.488 [DEBUG] [Thread-1408] [transport.py] [_log()] starting thread (client mode): 0xb95796f0
2025-12-24T23:55:52.488 [DEBUG] [Thread-1408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:55:52.509 [DEBUG] [Thread-1408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:55:52.509 [INFO] [Thread-1408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:55:52.512 [DEBUG] [Thread-1408] [transport.py] [_log()] client lang: <none>
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] server lang: <none>
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] kex follows: False
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] Compression: none
2025-12-24T23:55:52.513 [DEBUG] [Thread-1408] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:55:52.528 [DEBUG] [Thread-1408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:55:52.528 [DEBUG] [Thread-1408] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:55:52.528 [DEBUG] [Thread-1408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:55:52.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:55:52.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:55:52.529 [DEBUG] [Thread-1408] [transport.py] [_log()] userauth is OK
2025-12-24T23:55:52.529 [DEBUG] [Thread-1408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:55:52.529 [DEBUG] [Thread-1408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:55:52.529 [DEBUG] [Thread-1408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:55:52.529 [DEBUG] [Thread-1408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:55:52.539 [INFO] [Thread-1408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:55:52.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:55:53.380 [DEBUG] [Thread-1408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:55:53.380 [DEBUG] [Thread-1408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:55:53.380 [DEBUG] [Thread-1408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:55:53.420 [DEBUG] [Thread-1408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:55:53.421 [DEBUG] [Thread-1408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:55:53.422 [DEBUG] [Thread-1408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:55:53.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:55:53.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:55:53.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:55:53.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:55:53.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:55:53.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:55:53.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.913255 -999.00  +13.30  20.67     86  +11.00 1 1 1 2 1     0    0 0.85 -64.49 ZNESW 25.6 20.7 143.8 30.5 14.1 -19.3 14.0 -18.4 13.8 -17.8 14.1 -18.5
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.913255
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:55:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:55:24', tmtdew=2.82, humidity=82.89, cloud=0.0, wind=28.85, temperature=13.36, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:55:25', seeing=3.04, atlas_timestamp='2025-12-24T21:55:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:54:00')
2025-12-24T23:55:53.438 [DEBUG] [Thread-1408] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:55:53.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:55:53.532 [DEBUG] [Thread-1411] [transport.py] [_log()] starting thread (client mode): 0xb9578130
2025-12-24T23:55:53.532 [DEBUG] [Thread-1411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:55:53.547 [DEBUG] [Thread-1411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:55:53.547 [INFO] [Thread-1411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] client lang: <none>
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] server lang: <none>
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] kex follows: False
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] Compression: none
2025-12-24T23:55:53.554 [DEBUG] [Thread-1411] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:55:53.614 [DEBUG] [Thread-1411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:55:53.614 [DEBUG] [Thread-1411] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:55:53.614 [DEBUG] [Thread-1411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:55:53.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:55:53.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:55:53.671 [DEBUG] [Thread-1411] [transport.py] [_log()] userauth is OK
2025-12-24T23:55:53.671 [DEBUG] [Thread-1411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:55:53.671 [DEBUG] [Thread-1411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:55:53.671 [DEBUG] [Thread-1411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:55:53.671 [DEBUG] [Thread-1411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:55:53.685 [INFO] [Thread-1411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:55:53.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:55:53.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:55:54.494 [DEBUG] [Thread-1411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:55:54.494 [DEBUG] [Thread-1411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:55:54.542 [DEBUG] [Thread-1411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:55:54.542 [DEBUG] [Thread-1411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:55:54.550 [DEBUG] [Thread-1411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:55:54.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:55:54.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')
2025-12-24T23:55:54.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') -> 00000000
2025-12-24T23:55:54.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:55:54.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:55:54.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:55:54.584 [DEBUG] [Thread-1411] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:56:03.353 [DEBUG] [Thread-1413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:56:10.904 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:56:10.906 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:56:17.720 [DEBUG] [Thread-1414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:56:18.429 [DEBUG] [Thread-1415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:56:24.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:56:24.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:56:24.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:56:25.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 55, 56), 2.8, 82.99, 0.0, 27.84, 13.37, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:56:25.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:55:56
2025-12-24T23:56:25.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:56:25.580 [DEBUG] [Thread-1416] [transport.py] [_log()] starting thread (client mode): 0xb957b640
2025-12-24T23:56:25.580 [DEBUG] [Thread-1416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:56:25.603 [DEBUG] [Thread-1416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:56:25.603 [INFO] [Thread-1416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:56:25.607 [DEBUG] [Thread-1416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] client lang: <none>
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] server lang: <none>
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] kex follows: False
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] Compression: none
2025-12-24T23:56:25.608 [DEBUG] [Thread-1416] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:56:25.625 [DEBUG] [Thread-1416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:56:25.625 [DEBUG] [Thread-1416] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:56:25.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:56:25.626 [DEBUG] [Thread-1416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:56:25.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:56:25.628 [DEBUG] [Thread-1416] [transport.py] [_log()] userauth is OK
2025-12-24T23:56:25.628 [DEBUG] [Thread-1416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:56:25.628 [DEBUG] [Thread-1416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:56:25.628 [DEBUG] [Thread-1416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:56:25.628 [DEBUG] [Thread-1416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:56:25.663 [INFO] [Thread-1416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:56:25.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:56:26.373 [DEBUG] [Thread-1416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:56:26.373 [DEBUG] [Thread-1416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:56:26.373 [DEBUG] [Thread-1416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:56:26.414 [DEBUG] [Thread-1416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:56:26.414 [DEBUG] [Thread-1416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:56:26.417 [DEBUG] [Thread-1416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:56:26.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:56:26.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:56:26.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:56:26.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:56:26.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:56:26.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:56:26.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:56:26.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:56:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:56:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.913603 -999.00  +13.30  18.14     86  +11.00 1 1 1 2 1     0    0 0.73 -64.15 ZNESW 22.0 18.1 157.2 25.4 14.1 -19.9 13.9 -19.3 13.8 -18.1 14.1 -19.1
2025-12-24T23:56:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:56:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:56:26.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.913603
2025-12-24T23:56:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:56:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:56:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:56:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:56:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:56:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:55:56', tmtdew=2.8, humidity=82.99, cloud=0.0, wind=27.84, temperature=13.37, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:55:57', seeing=2.77, atlas_timestamp='2025-12-24T21:55:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:54:00')
2025-12-24T23:56:26.446 [DEBUG] [Thread-1416] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:56:26.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:56:26.547 [DEBUG] [Thread-1419] [transport.py] [_log()] starting thread (client mode): 0xb957ad70
2025-12-24T23:56:26.547 [DEBUG] [Thread-1419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:56:26.562 [DEBUG] [Thread-1419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:56:26.563 [INFO] [Thread-1419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:56:26.570 [DEBUG] [Thread-1419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] client lang: <none>
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] server lang: <none>
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] kex follows: False
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:56:26.571 [DEBUG] [Thread-1419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:56:26.572 [DEBUG] [Thread-1419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:56:26.572 [DEBUG] [Thread-1419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:56:26.572 [DEBUG] [Thread-1419] [transport.py] [_log()] Compression: none
2025-12-24T23:56:26.572 [DEBUG] [Thread-1419] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:56:26.631 [DEBUG] [Thread-1419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:56:26.632 [DEBUG] [Thread-1419] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:56:26.632 [DEBUG] [Thread-1419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:56:26.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:56:26.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:56:26.687 [DEBUG] [Thread-1419] [transport.py] [_log()] userauth is OK
2025-12-24T23:56:26.687 [DEBUG] [Thread-1419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:56:26.687 [DEBUG] [Thread-1419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:56:26.687 [DEBUG] [Thread-1419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:56:26.687 [DEBUG] [Thread-1419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:56:26.701 [INFO] [Thread-1419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:56:26.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:56:26.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:56:27.508 [DEBUG] [Thread-1419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:56:27.508 [DEBUG] [Thread-1419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:56:27.556 [DEBUG] [Thread-1419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:56:27.556 [DEBUG] [Thread-1419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:56:27.565 [DEBUG] [Thread-1419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:56:27.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:56:27.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:56:27.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
2025-12-24T23:56:27.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:56:27.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:56:27.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:56:27.602 [DEBUG] [Thread-1419] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:56:33.469 [DEBUG] [Thread-1421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:56:48.524 [DEBUG] [Thread-1422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:56:57.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:56:57.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:56:57.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:56:58.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 56, 28), 2.8, 83.02, 0.0, 28.37, 13.29, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:56:58.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:56:28
2025-12-24T23:56:58.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:56:58.583 [DEBUG] [Thread-1423] [transport.py] [_log()] starting thread (client mode): 0xb957b970
2025-12-24T23:56:58.584 [DEBUG] [Thread-1423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:56:58.604 [DEBUG] [Thread-1423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:56:58.604 [INFO] [Thread-1423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:56:58.607 [DEBUG] [Thread-1423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:56:58.608 [DEBUG] [Thread-1423] [transport.py] [_log()] client lang: <none>
2025-12-24T23:56:58.609 [DEBUG] [Thread-1423] [transport.py] [_log()] server lang: <none>
2025-12-24T23:56:58.609 [DEBUG] [Thread-1423] [transport.py] [_log()] kex follows: False
2025-12-24T23:56:58.609 [DEBUG] [Thread-1423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:56:58.609 [DEBUG] [Thread-1423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:56:58.609 [DEBUG] [Thread-1423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:56:58.609 [DEBUG] [Thread-1423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:56:58.609 [DEBUG] [Thread-1423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:56:58.609 [DEBUG] [Thread-1423] [transport.py] [_log()] Compression: none
2025-12-24T23:56:58.610 [DEBUG] [Thread-1423] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:56:58.629 [DEBUG] [Thread-1423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:56:58.630 [DEBUG] [Thread-1423] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:56:58.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:56:58.631 [DEBUG] [Thread-1423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:56:58.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:56:58.633 [DEBUG] [Thread-1423] [transport.py] [_log()] userauth is OK
2025-12-24T23:56:58.634 [DEBUG] [Thread-1423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:56:58.634 [DEBUG] [Thread-1423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:56:58.634 [DEBUG] [Thread-1423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:56:58.634 [DEBUG] [Thread-1423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:56:58.661 [INFO] [Thread-1423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:56:58.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:56:59.497 [DEBUG] [Thread-1423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:56:59.497 [DEBUG] [Thread-1423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:56:59.498 [DEBUG] [Thread-1423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:56:59.538 [DEBUG] [Thread-1423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:56:59.538 [DEBUG] [Thread-1423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:56:59.541 [DEBUG] [Thread-1423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:56:59.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:56:59.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:56:59.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:56:59.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:56:59.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:56:59.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:56:59.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:56:59.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:56:59.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:56:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.913950 -999.00  +13.20  26.58     86  +11.00 1 1 1 2 1     0    0 0.90 -60.72 ZNESW 24.6 26.6 156.6 34.0 14.1 -19.9 13.9 -19.2 13.8 -18.0 14.1 -19.2
2025-12-24T23:56:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:56:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:56:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.913950
2025-12-24T23:56:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:56:59.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:56:59.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:56:59.568 [DEBUG] [Thread-1423] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:56:59.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:56:59.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:56:59.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:56:28', tmtdew=2.8, humidity=83.02, cloud=0.0, wind=28.37, temperature=13.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:56:29', seeing=2.98, atlas_timestamp='2025-12-24T21:56:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:54:00')
2025-12-24T23:56:59.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:56:59.671 [DEBUG] [Thread-1426] [transport.py] [_log()] starting thread (client mode): 0xb95787c0
2025-12-24T23:56:59.672 [DEBUG] [Thread-1426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:56:59.687 [DEBUG] [Thread-1426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:56:59.687 [INFO] [Thread-1426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:56:59.694 [DEBUG] [Thread-1426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:56:59.694 [DEBUG] [Thread-1426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] client lang: <none>
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] server lang: <none>
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] kex follows: False
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] Compression: none
2025-12-24T23:56:59.695 [DEBUG] [Thread-1426] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:56:59.755 [DEBUG] [Thread-1426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:56:59.756 [DEBUG] [Thread-1426] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:56:59.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:56:59.757 [DEBUG] [Thread-1426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:56:59.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:56:59.811 [DEBUG] [Thread-1426] [transport.py] [_log()] userauth is OK
2025-12-24T23:56:59.812 [DEBUG] [Thread-1426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:56:59.812 [DEBUG] [Thread-1426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:56:59.812 [DEBUG] [Thread-1426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:56:59.812 [DEBUG] [Thread-1426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:56:59.832 [INFO] [Thread-1426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:56:59.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:56:59.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:57:00.668 [DEBUG] [Thread-1426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:57:00.668 [DEBUG] [Thread-1426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:57:00.716 [DEBUG] [Thread-1426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:57:00.716 [DEBUG] [Thread-1426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:57:00.725 [DEBUG] [Thread-1426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:57:00.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:57:00.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:57:00.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:57:00.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:57:00.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:57:00.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:57:00.761 [DEBUG] [Thread-1426] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:57:03.562 [DEBUG] [Thread-1428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:57:11.106 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:57:11.107 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:57:17.776 [DEBUG] [Thread-1429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:57:18.618 [DEBUG] [Thread-1430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:57:30.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:57:30.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:57:30.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
2025-12-24T23:57:31.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 57, 1), 2.79, 83.07, 0.0, 26.62, 13.31, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:57:31.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:57:01
2025-12-24T23:57:31.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:57:31.754 [DEBUG] [Thread-1431] [transport.py] [_log()] starting thread (client mode): 0xb957a200
2025-12-24T23:57:31.754 [DEBUG] [Thread-1431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:57:31.776 [DEBUG] [Thread-1431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:57:31.776 [INFO] [Thread-1431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] client lang: <none>
2025-12-24T23:57:31.779 [DEBUG] [Thread-1431] [transport.py] [_log()] server lang: <none>
2025-12-24T23:57:31.780 [DEBUG] [Thread-1431] [transport.py] [_log()] kex follows: False
2025-12-24T23:57:31.780 [DEBUG] [Thread-1431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:57:31.780 [DEBUG] [Thread-1431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:57:31.780 [DEBUG] [Thread-1431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:57:31.780 [DEBUG] [Thread-1431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:57:31.780 [DEBUG] [Thread-1431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:57:31.780 [DEBUG] [Thread-1431] [transport.py] [_log()] Compression: none
2025-12-24T23:57:31.780 [DEBUG] [Thread-1431] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:57:31.796 [DEBUG] [Thread-1431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:57:31.797 [DEBUG] [Thread-1431] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:57:31.797 [DEBUG] [Thread-1431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:57:31.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:57:31.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:57:31.799 [DEBUG] [Thread-1431] [transport.py] [_log()] userauth is OK
2025-12-24T23:57:31.799 [DEBUG] [Thread-1431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:57:31.799 [DEBUG] [Thread-1431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:57:31.799 [DEBUG] [Thread-1431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:57:31.799 [DEBUG] [Thread-1431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:57:31.818 [INFO] [Thread-1431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:57:31.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:57:32.440 [DEBUG] [Thread-1431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:57:32.440 [DEBUG] [Thread-1431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:57:32.440 [DEBUG] [Thread-1431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:57:32.481 [DEBUG] [Thread-1431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:57:32.481 [DEBUG] [Thread-1431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:57:32.484 [DEBUG] [Thread-1431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:57:32.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:57:32.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:57:32.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:57:32.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:57:32.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:57:32.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:57:32.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:57:32.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:57:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:57:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.914297 -999.00  +13.20  18.91     86  +11.10 1 1 1 2 1     0    0 0.99 -58.45 ZNESW 21.6 18.9 157.6 27.1 14.1 -19.9 13.9 -19.5 13.8 -18.1 14.1 -19.1
2025-12-24T23:57:32.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:57:32.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:57:32.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.914297
2025-12-24T23:57:32.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:57:32.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:57:32.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:57:32.505 [DEBUG] [Thread-1431] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:57:32.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:57:32.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:57:32.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:57:01', tmtdew=2.79, humidity=83.07, cloud=0.0, wind=26.62, temperature=13.31, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:57:01', seeing=2.98, atlas_timestamp='2025-12-24T21:56:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:54:00')
2025-12-24T23:57:32.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:57:32.614 [DEBUG] [Thread-1434] [transport.py] [_log()] starting thread (client mode): 0xb957bcd0
2025-12-24T23:57:32.614 [DEBUG] [Thread-1434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:57:32.630 [DEBUG] [Thread-1434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:57:32.630 [INFO] [Thread-1434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:57:32.638 [DEBUG] [Thread-1434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:57:32.638 [DEBUG] [Thread-1434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:57:32.639 [DEBUG] [Thread-1434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:57:32.639 [DEBUG] [Thread-1434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:57:32.639 [DEBUG] [Thread-1434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:57:32.639 [DEBUG] [Thread-1434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:57:32.639 [DEBUG] [Thread-1434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:57:32.639 [DEBUG] [Thread-1434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] client lang: <none>
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] server lang: <none>
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] kex follows: False
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] Compression: none
2025-12-24T23:57:32.640 [DEBUG] [Thread-1434] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:57:32.700 [DEBUG] [Thread-1434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:57:32.701 [DEBUG] [Thread-1434] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:57:32.701 [DEBUG] [Thread-1434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:57:32.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:57:32.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:57:32.759 [DEBUG] [Thread-1434] [transport.py] [_log()] userauth is OK
2025-12-24T23:57:32.759 [DEBUG] [Thread-1434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:57:32.759 [DEBUG] [Thread-1434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:57:32.759 [DEBUG] [Thread-1434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:57:32.759 [DEBUG] [Thread-1434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:57:32.778 [INFO] [Thread-1434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:57:32.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:57:32.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:57:33.594 [DEBUG] [Thread-1434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:57:33.595 [DEBUG] [Thread-1434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:57:33.643 [DEBUG] [Thread-1434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:57:33.643 [DEBUG] [Thread-1434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:57:33.652 [DEBUG] [Thread-1434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:57:33.660 [DEBUG] [Thread-1436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:57:33.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:57:33.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:57:33.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:57:33.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:57:33.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:57:33.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:57:33.687 [DEBUG] [Thread-1434] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:57:48.720 [DEBUG] [Thread-1437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:58:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:58:03.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:58:03.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:58:03.756 [DEBUG] [Thread-1438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:58:04.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 57, 33), 2.75, 83.27, 0.0, 27.97, 13.36, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:58:04.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:57:33
2025-12-24T23:58:04.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:58:04.700 [DEBUG] [Thread-1439] [transport.py] [_log()] starting thread (client mode): 0xb9579900
2025-12-24T23:58:04.701 [DEBUG] [Thread-1439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:58:04.720 [DEBUG] [Thread-1439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:58:04.721 [INFO] [Thread-1439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] client lang: <none>
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] server lang: <none>
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] kex follows: False
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:58:04.724 [DEBUG] [Thread-1439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:58:04.725 [DEBUG] [Thread-1439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:58:04.725 [DEBUG] [Thread-1439] [transport.py] [_log()] Compression: none
2025-12-24T23:58:04.725 [DEBUG] [Thread-1439] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:58:04.744 [DEBUG] [Thread-1439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:58:04.745 [DEBUG] [Thread-1439] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:58:04.745 [DEBUG] [Thread-1439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:58:04.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:58:04.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:58:04.786 [DEBUG] [Thread-1439] [transport.py] [_log()] userauth is OK
2025-12-24T23:58:04.786 [DEBUG] [Thread-1439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:58:04.786 [DEBUG] [Thread-1439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:58:04.787 [DEBUG] [Thread-1439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:58:04.787 [DEBUG] [Thread-1439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:58:04.822 [INFO] [Thread-1439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:58:04.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:58:05.505 [DEBUG] [Thread-1439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:58:05.505 [DEBUG] [Thread-1439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:58:05.505 [DEBUG] [Thread-1439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:58:05.547 [DEBUG] [Thread-1439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:58:05.547 [DEBUG] [Thread-1439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:58:05.550 [DEBUG] [Thread-1439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:58:05.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:58:05.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:58:05.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:58:05.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:58:05.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:58:05.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:58:05.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:58:05.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:58:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:58:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.914991 -999.00  +13.20  24.60     86  +11.00 1 1 1 2 1     0    0 0.87 -60.27 ZNESW 23.6 24.6 140.2 28.8 14.1 -19.1 13.9 -18.7 13.7 -17.5 14.0 -18.8
2025-12-24T23:58:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:58:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:58:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.914991
2025-12-24T23:58:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:58:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:58:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:58:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:58:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:58:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:57:33', tmtdew=2.75, humidity=83.27, cloud=0.0, wind=27.97, temperature=13.36, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:57:33', seeing=3.24, atlas_timestamp='2025-12-24T21:57:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:54:00')
2025-12-24T23:58:05.572 [DEBUG] [Thread-1439] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:58:05.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:58:05.679 [DEBUG] [Thread-1442] [transport.py] [_log()] starting thread (client mode): 0xb95794e0
2025-12-24T23:58:05.679 [DEBUG] [Thread-1442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:58:05.693 [DEBUG] [Thread-1442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:58:05.693 [INFO] [Thread-1442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:58:05.700 [DEBUG] [Thread-1442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:58:05.701 [DEBUG] [Thread-1442] [transport.py] [_log()] client lang: <none>
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] server lang: <none>
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] kex follows: False
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] Compression: none
2025-12-24T23:58:05.702 [DEBUG] [Thread-1442] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:58:05.759 [DEBUG] [Thread-1442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:58:05.760 [DEBUG] [Thread-1442] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:58:05.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:58:05.761 [DEBUG] [Thread-1442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:58:05.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:58:05.819 [DEBUG] [Thread-1442] [transport.py] [_log()] userauth is OK
2025-12-24T23:58:05.819 [DEBUG] [Thread-1442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:58:05.819 [DEBUG] [Thread-1442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:58:05.819 [DEBUG] [Thread-1442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:58:05.819 [DEBUG] [Thread-1442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:58:05.839 [INFO] [Thread-1442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:58:05.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:58:05.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:58:06.633 [DEBUG] [Thread-1442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:58:06.633 [DEBUG] [Thread-1442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:58:06.681 [DEBUG] [Thread-1442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:58:06.681 [DEBUG] [Thread-1442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:58:06.690 [DEBUG] [Thread-1442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:58:06.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:58:06.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:58:06.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:58:06.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:58:06.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:58:06.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:58:06.721 [DEBUG] [Thread-1442] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:58:11.319 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:58:11.320 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:58:17.842 [DEBUG] [Thread-1444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:58:18.798 [DEBUG] [Thread-1445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:58:33.860 [DEBUG] [Thread-1446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:58:36.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:58:36.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:58:36.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:58:37.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 58, 5), 2.75, 83.27, 0.0, 28.48, 13.31, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:58:37.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:58:05
2025-12-24T23:58:37.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:58:37.730 [DEBUG] [Thread-1447] [transport.py] [_log()] starting thread (client mode): 0xb9578250
2025-12-24T23:58:37.730 [DEBUG] [Thread-1447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:58:37.749 [DEBUG] [Thread-1447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:58:37.749 [INFO] [Thread-1447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:58:37.752 [DEBUG] [Thread-1447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] client lang: <none>
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] server lang: <none>
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] kex follows: False
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:58:37.753 [DEBUG] [Thread-1447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:58:37.754 [DEBUG] [Thread-1447] [transport.py] [_log()] Compression: none
2025-12-24T23:58:37.754 [DEBUG] [Thread-1447] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:58:37.773 [DEBUG] [Thread-1447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:58:37.774 [DEBUG] [Thread-1447] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:58:37.774 [DEBUG] [Thread-1447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:58:37.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:58:37.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:58:37.776 [DEBUG] [Thread-1447] [transport.py] [_log()] userauth is OK
2025-12-24T23:58:37.776 [DEBUG] [Thread-1447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:58:37.777 [DEBUG] [Thread-1447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:58:37.777 [DEBUG] [Thread-1447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:58:37.777 [DEBUG] [Thread-1447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:58:37.801 [INFO] [Thread-1447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:58:37.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:58:38.445 [DEBUG] [Thread-1447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:58:38.445 [DEBUG] [Thread-1447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:58:38.445 [DEBUG] [Thread-1447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:58:38.486 [DEBUG] [Thread-1447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:58:38.486 [DEBUG] [Thread-1447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:58:38.488 [DEBUG] [Thread-1447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:58:38.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:58:38.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:58:38.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:58:38.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:58:38.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:58:38.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:58:38.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:58:38.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:58:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:58:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.915339 -999.00  +13.20  22.78     86  +11.00 1 1 1 2 1     0    0 0.88 -57.31 ZNESW 20.2 22.8 142.6 27.4 14.0 -18.8 13.9 -18.4 13.8 -17.6 14.1 -18.5
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.915339
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:58:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:58:05', tmtdew=2.75, humidity=83.27, cloud=0.0, wind=28.48, temperature=13.31, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:58:05', seeing=2.78, atlas_timestamp='2025-12-24T21:58:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:54:00')
2025-12-24T23:58:38.506 [DEBUG] [Thread-1447] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:58:38.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:58:38.598 [DEBUG] [Thread-1450] [transport.py] [_log()] starting thread (client mode): 0xb9579210
2025-12-24T23:58:38.598 [DEBUG] [Thread-1450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:58:38.613 [DEBUG] [Thread-1450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:58:38.613 [INFO] [Thread-1450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] client lang: <none>
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] server lang: <none>
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] kex follows: False
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] Compression: none
2025-12-24T23:58:38.621 [DEBUG] [Thread-1450] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:58:38.678 [DEBUG] [Thread-1450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:58:38.678 [DEBUG] [Thread-1450] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:58:38.678 [DEBUG] [Thread-1450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:58:38.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:58:38.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:58:38.736 [DEBUG] [Thread-1450] [transport.py] [_log()] userauth is OK
2025-12-24T23:58:38.736 [DEBUG] [Thread-1450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:58:38.736 [DEBUG] [Thread-1450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:58:38.736 [DEBUG] [Thread-1450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:58:38.736 [DEBUG] [Thread-1450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:58:38.749 [INFO] [Thread-1450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:58:38.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:58:38.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:58:39.565 [DEBUG] [Thread-1450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:58:39.565 [DEBUG] [Thread-1450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:58:39.614 [DEBUG] [Thread-1450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:58:39.614 [DEBUG] [Thread-1450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:58:39.622 [DEBUG] [Thread-1450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:58:39.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:58:39.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:58:39.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:58:39.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:58:39.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:58:39.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:58:39.656 [DEBUG] [Thread-1450] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:58:48.905 [DEBUG] [Thread-1452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:59:03.973 [DEBUG] [Thread-1453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:59:09.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:59:09.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:59:09.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-24T23:59:10.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 58, 37), 2.63, 83.87, 0.0, 29.08, 13.26, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:59:10.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:58:37
2025-12-24T23:59:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:59:10.712 [DEBUG] [Thread-1454] [transport.py] [_log()] starting thread (client mode): 0xb957b4f0
2025-12-24T23:59:10.713 [DEBUG] [Thread-1454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:59:10.732 [DEBUG] [Thread-1454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:59:10.732 [INFO] [Thread-1454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:59:10.733 [DEBUG] [Thread-1454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] client lang: <none>
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] server lang: <none>
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] kex follows: False
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] Compression: none
2025-12-24T23:59:10.734 [DEBUG] [Thread-1454] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:59:10.741 [DEBUG] [Thread-1454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:59:10.741 [DEBUG] [Thread-1454] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:59:10.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:59:10.741 [DEBUG] [Thread-1454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:59:10.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:59:10.742 [DEBUG] [Thread-1454] [transport.py] [_log()] userauth is OK
2025-12-24T23:59:10.742 [DEBUG] [Thread-1454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:59:10.742 [DEBUG] [Thread-1454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:59:10.742 [DEBUG] [Thread-1454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:59:10.742 [DEBUG] [Thread-1454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:59:10.751 [INFO] [Thread-1454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:59:10.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:59:11.349 [DEBUG] [Thread-1454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:59:11.349 [DEBUG] [Thread-1454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:59:11.349 [DEBUG] [Thread-1454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:59:11.390 [DEBUG] [Thread-1454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:59:11.390 [DEBUG] [Thread-1454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:59:11.392 [DEBUG] [Thread-1454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:59:11.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:59:11.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:59:11.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:59:11.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:59:11.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:59:11.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:59:11.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.915686 -999.00  +13.20  24.87     87  +11.10 1 1 1 2 1     0    0 1.01 -53.28 ZNESW 20.1 24.9 144.0 27.9 14.1 -19.0 13.9 -18.6 13.7 -17.6 14.0 -18.6
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.915686
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:59:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:58:37', tmtdew=2.63, humidity=83.87, cloud=0.0, wind=29.08, temperature=13.26, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:58:37', seeing=4.54, atlas_timestamp='2025-12-24T21:58:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:57:00')
2025-12-24T23:59:11.402 [DEBUG] [Thread-1454] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:59:11.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:59:11.498 [DEBUG] [Thread-1457] [transport.py] [_log()] starting thread (client mode): 0xb9579e70
2025-12-24T23:59:11.498 [DEBUG] [Thread-1457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:59:11.515 [DEBUG] [Thread-1457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:59:11.515 [INFO] [Thread-1457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:59:11.519 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:59:11.520 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:59:11.522 [DEBUG] [Thread-1457] [transport.py] [_log()] client lang: <none>
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] server lang: <none>
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] kex follows: False
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] Compression: none
2025-12-24T23:59:11.523 [DEBUG] [Thread-1457] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:59:11.577 [DEBUG] [Thread-1457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:59:11.578 [DEBUG] [Thread-1457] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:59:11.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:59:11.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:59:11.578 [DEBUG] [Thread-1457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:59:11.635 [DEBUG] [Thread-1457] [transport.py] [_log()] userauth is OK
2025-12-24T23:59:11.635 [DEBUG] [Thread-1457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:59:11.635 [DEBUG] [Thread-1457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:59:11.635 [DEBUG] [Thread-1457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:59:11.635 [DEBUG] [Thread-1457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:59:11.651 [INFO] [Thread-1457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:59:11.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:59:11.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:59:12.447 [DEBUG] [Thread-1457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:59:12.447 [DEBUG] [Thread-1457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:59:12.495 [DEBUG] [Thread-1457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:59:12.495 [DEBUG] [Thread-1457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:59:12.504 [DEBUG] [Thread-1457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:59:12.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:59:12.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-24T23:59:12.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-24T23:59:12.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:59:12.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:59:12.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:59:12.543 [DEBUG] [Thread-1457] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:59:17.917 [DEBUG] [Thread-1459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:59:19.011 [DEBUG] [Thread-1460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:59:34.081 [DEBUG] [Thread-1461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-24T23:59:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-24T23:59:42.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-24T23:59:42.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
2025-12-24T23:59:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 59, 9), 2.61, 83.99, 0.0, 31.46, 13.24, 0, 1, 0, 2, 0, 0),)
2025-12-24T23:59:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:59:09
2025-12-24T23:59:43.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-24T23:59:43.635 [DEBUG] [Thread-1462] [transport.py] [_log()] starting thread (client mode): 0xb95791b0
2025-12-24T23:59:43.635 [DEBUG] [Thread-1462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:59:43.654 [DEBUG] [Thread-1462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-24T23:59:43.655 [INFO] [Thread-1462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] client lang: <none>
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] server lang: <none>
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] kex follows: False
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] Compression: none
2025-12-24T23:59:43.656 [DEBUG] [Thread-1462] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:59:43.663 [DEBUG] [Thread-1462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:59:43.663 [DEBUG] [Thread-1462] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:59:43.663 [DEBUG] [Thread-1462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-24T23:59:43.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-24T23:59:43.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:59:43.664 [DEBUG] [Thread-1462] [transport.py] [_log()] userauth is OK
2025-12-24T23:59:43.664 [DEBUG] [Thread-1462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:59:43.664 [DEBUG] [Thread-1462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:59:43.664 [DEBUG] [Thread-1462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-24T23:59:43.664 [DEBUG] [Thread-1462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:59:43.673 [INFO] [Thread-1462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:59:43.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:59:44.333 [DEBUG] [Thread-1462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:59:44.333 [DEBUG] [Thread-1462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:59:44.333 [DEBUG] [Thread-1462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-24T23:59:44.375 [DEBUG] [Thread-1462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:59:44.375 [DEBUG] [Thread-1462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:59:44.377 [DEBUG] [Thread-1462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:59:44.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:59:44.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-24T23:59:44.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-24T23:59:44.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-24T23:59:44.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:59:44.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-24T23:59:44.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:59:44.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:59:44.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-24T23:59:44.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.916033 -999.00  +13.20  25.90     87  +11.10 1 1 1 2 1     0    0 0.92 -55.10 ZNESW 26.7 25.9 146.2 29.4 14.0 -19.7 13.9 -18.8 13.7 -18.1 14.1 -18.6
2025-12-24T23:59:44.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-24T23:59:44.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-24T23:59:44.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.916033
2025-12-24T23:59:44.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-24T23:59:44.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-24T23:59:44.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-24T23:59:44.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-24T23:59:44.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-24T23:59:44.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:59:09', tmtdew=2.61, humidity=83.99, cloud=0.0, wind=31.46, temperature=13.24, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-24T23:59:42', seeing=3.42, atlas_timestamp='2025-12-24T21:59:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:57:00')
2025-12-24T23:59:44.401 [DEBUG] [Thread-1462] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:59:44.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-24T23:59:44.498 [DEBUG] [Thread-1465] [transport.py] [_log()] starting thread (client mode): 0xb957a710
2025-12-24T23:59:44.498 [DEBUG] [Thread-1465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-24T23:59:44.512 [DEBUG] [Thread-1465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-24T23:59:44.513 [INFO] [Thread-1465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-24T23:59:44.520 [DEBUG] [Thread-1465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-24T23:59:44.520 [DEBUG] [Thread-1465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-24T23:59:44.520 [DEBUG] [Thread-1465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] client lang: <none>
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] server lang: <none>
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] kex follows: False
2025-12-24T23:59:44.521 [DEBUG] [Thread-1465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-24T23:59:44.522 [DEBUG] [Thread-1465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-24T23:59:44.522 [DEBUG] [Thread-1465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-24T23:59:44.522 [DEBUG] [Thread-1465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-24T23:59:44.522 [DEBUG] [Thread-1465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-24T23:59:44.522 [DEBUG] [Thread-1465] [transport.py] [_log()] Compression: none
2025-12-24T23:59:44.522 [DEBUG] [Thread-1465] [transport.py] [_log()] === End of kex handshake ===
2025-12-24T23:59:44.579 [DEBUG] [Thread-1465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-24T23:59:44.579 [DEBUG] [Thread-1465] [transport.py] [_log()] Switch to new keys ...
2025-12-24T23:59:44.580 [DEBUG] [Thread-1465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-24T23:59:44.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-24T23:59:44.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-24T23:59:44.635 [DEBUG] [Thread-1465] [transport.py] [_log()] userauth is OK
2025-12-24T23:59:44.635 [DEBUG] [Thread-1465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-24T23:59:44.635 [DEBUG] [Thread-1465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-24T23:59:44.635 [DEBUG] [Thread-1465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-24T23:59:44.635 [DEBUG] [Thread-1465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-24T23:59:44.650 [INFO] [Thread-1465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-24T23:59:44.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-24T23:59:44.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-24T23:59:45.455 [DEBUG] [Thread-1465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-24T23:59:45.455 [DEBUG] [Thread-1465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-24T23:59:45.502 [DEBUG] [Thread-1465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-24T23:59:45.502 [DEBUG] [Thread-1465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-24T23:59:45.510 [DEBUG] [Thread-1465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-24T23:59:45.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-24T23:59:45.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')
2025-12-24T23:59:45.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
2025-12-24T23:59:45.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-24T23:59:45.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-24T23:59:45.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-24T23:59:45.541 [DEBUG] [Thread-1465] [transport.py] [_log()] EOF in transport thread
2025-12-24T23:59:49.117 [DEBUG] [Thread-1467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:00:04.164 [DEBUG] [Thread-1468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:00:11.721 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:00:11.723 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:00:15.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:00:15.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:00:15.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:00:16.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 24, 23, 59, 41), 2.6, 84.07, 0.0, 26.89, 13.29, 0, 1, 0, 2, 0, 0),)
2025-12-25T00:00:16.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-24 23:59:41
2025-12-25T00:00:16.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:00:16.556 [DEBUG] [Thread-1469] [transport.py] [_log()] starting thread (client mode): 0xb95d5a50
2025-12-25T00:00:16.556 [DEBUG] [Thread-1469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:00:16.578 [DEBUG] [Thread-1469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:00:16.578 [INFO] [Thread-1469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:00:16.581 [DEBUG] [Thread-1469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] client lang: <none>
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] server lang: <none>
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] kex follows: False
2025-12-25T00:00:16.582 [DEBUG] [Thread-1469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:00:16.583 [DEBUG] [Thread-1469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:00:16.583 [DEBUG] [Thread-1469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:00:16.583 [DEBUG] [Thread-1469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:00:16.583 [DEBUG] [Thread-1469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:00:16.583 [DEBUG] [Thread-1469] [transport.py] [_log()] Compression: none
2025-12-25T00:00:16.583 [DEBUG] [Thread-1469] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:00:16.602 [DEBUG] [Thread-1469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:00:16.603 [DEBUG] [Thread-1469] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:00:16.603 [DEBUG] [Thread-1469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:00:16.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:00:16.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:00:16.605 [DEBUG] [Thread-1469] [transport.py] [_log()] userauth is OK
2025-12-25T00:00:16.606 [DEBUG] [Thread-1469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:00:16.606 [DEBUG] [Thread-1469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:00:16.606 [DEBUG] [Thread-1469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:00:16.606 [DEBUG] [Thread-1469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:00:16.629 [INFO] [Thread-1469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:00:16.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:00:17.996 [DEBUG] [Thread-1471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:00:18.835 [DEBUG] [Thread-1469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:00:18.835 [DEBUG] [Thread-1469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:00:18.835 [DEBUG] [Thread-1469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:00:18.876 [DEBUG] [Thread-1469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:00:18.876 [DEBUG] [Thread-1469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:00:18.879 [DEBUG] [Thread-1469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:00:18.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:00:18.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:00:18.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:00:18.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:00:18.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:00:18.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:00:18.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:00:18.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:00:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:00:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.916380 -999.00  +13.20  22.56     87  +11.10 1 1 1 2 1     0    0 1.07 -51.61 ZNESW 22.4 22.6 131.8 28.8 14.0 -19.8 13.9 -19.3 13.8 -18.2 14.0 -19.1
2025-12-25T00:00:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:00:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:00:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.916380
2025-12-25T00:00:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:00:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:00:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:00:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:00:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:00:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-24T23:59:41', tmtdew=2.6, humidity=84.07, cloud=0.0, wind=26.89, temperature=13.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:00:14', seeing=3.56, atlas_timestamp='2025-12-24T21:59:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:57:00')
2025-12-25T00:00:18.908 [DEBUG] [Thread-1469] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:00:18.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:00:19.008 [DEBUG] [Thread-1473] [transport.py] [_log()] starting thread (client mode): 0xb95d4b80
2025-12-25T00:00:19.008 [DEBUG] [Thread-1473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:00:19.023 [DEBUG] [Thread-1473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:00:19.023 [INFO] [Thread-1473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] client lang: <none>
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] server lang: <none>
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] kex follows: False
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:00:19.031 [DEBUG] [Thread-1473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:00:19.032 [DEBUG] [Thread-1473] [transport.py] [_log()] Compression: none
2025-12-25T00:00:19.032 [DEBUG] [Thread-1473] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:00:19.091 [DEBUG] [Thread-1473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:00:19.092 [DEBUG] [Thread-1473] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:00:19.093 [DEBUG] [Thread-1473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:00:19.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:00:19.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:00:19.147 [DEBUG] [Thread-1473] [transport.py] [_log()] userauth is OK
2025-12-25T00:00:19.147 [DEBUG] [Thread-1473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:00:19.148 [DEBUG] [Thread-1473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:00:19.148 [DEBUG] [Thread-1473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:00:19.148 [DEBUG] [Thread-1473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:00:19.172 [INFO] [Thread-1473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:00:19.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:00:19.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:00:19.201 [DEBUG] [Thread-1475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:00:19.994 [DEBUG] [Thread-1473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:00:19.994 [DEBUG] [Thread-1473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:00:20.042 [DEBUG] [Thread-1473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:00:20.042 [DEBUG] [Thread-1473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:00:20.053 [DEBUG] [Thread-1473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:00:20.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:00:20.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:00:20.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:00:20.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:00:20.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:00:20.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:00:20.089 [DEBUG] [Thread-1473] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:00:34.259 [DEBUG] [Thread-1476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:00:49.293 [DEBUG] [Thread-1477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:00:50.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:00:50.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:00:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:00:50.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 0, 45), 2.56, 84.77, 0.0, 34.25, 13.22, 0, 1, 2, 2, 0, 0),)
2025-12-25T00:00:50.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:00:45
2025-12-25T00:00:50.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:00:51.096 [DEBUG] [Thread-1478] [transport.py] [_log()] starting thread (client mode): 0xb95783d0
2025-12-25T00:00:51.096 [DEBUG] [Thread-1478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:00:51.116 [DEBUG] [Thread-1478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:00:51.116 [INFO] [Thread-1478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:00:51.119 [DEBUG] [Thread-1478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] client lang: <none>
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] server lang: <none>
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] kex follows: False
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] Compression: none
2025-12-25T00:00:51.120 [DEBUG] [Thread-1478] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:00:51.137 [DEBUG] [Thread-1478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:00:51.138 [DEBUG] [Thread-1478] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:00:51.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:00:51.139 [DEBUG] [Thread-1478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:00:51.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:00:51.141 [DEBUG] [Thread-1478] [transport.py] [_log()] userauth is OK
2025-12-25T00:00:51.141 [DEBUG] [Thread-1478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:00:51.141 [DEBUG] [Thread-1478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:00:51.141 [DEBUG] [Thread-1478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:00:51.141 [DEBUG] [Thread-1478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:00:51.164 [INFO] [Thread-1478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:00:51.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:00:51.831 [DEBUG] [Thread-1478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:00:51.831 [DEBUG] [Thread-1478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:00:51.832 [DEBUG] [Thread-1478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:00:51.872 [DEBUG] [Thread-1478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:00:51.872 [DEBUG] [Thread-1478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:00:51.875 [DEBUG] [Thread-1478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:00:51.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:00:51.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:00:51.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:00:51.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:00:51.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:00:51.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:00:51.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:00:51.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:00:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:00:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.917075 -999.00  +13.20  27.24     86  +11.10 1 1 1 2 1     0    0 1.01 -50.02 ZNESW 29.6 27.2 142.8 31.1 14.0 -19.6 13.8 -19.3 13.7 -18.3 14.0 -19.1
2025-12-25T00:00:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:00:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:00:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.917075
2025-12-25T00:00:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:00:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:00:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:00:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:00:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:00:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:00:45', tmtdew=2.56, humidity=84.77, cloud=0.0, wind=34.25, temperature=13.22, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:00:46', seeing=3.56, atlas_timestamp='2025-12-24T22:00:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:57:00')
2025-12-25T00:00:51.903 [DEBUG] [Thread-1478] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:00:51.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:00:51.998 [DEBUG] [Thread-1481] [transport.py] [_log()] starting thread (client mode): 0xb9579c30
2025-12-25T00:00:51.998 [DEBUG] [Thread-1481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:00:52.013 [DEBUG] [Thread-1481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:00:52.013 [INFO] [Thread-1481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:00:52.020 [DEBUG] [Thread-1481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] client lang: <none>
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] server lang: <none>
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] kex follows: False
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:00:52.021 [DEBUG] [Thread-1481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:00:52.022 [DEBUG] [Thread-1481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:00:52.022 [DEBUG] [Thread-1481] [transport.py] [_log()] Compression: none
2025-12-25T00:00:52.022 [DEBUG] [Thread-1481] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:00:52.079 [DEBUG] [Thread-1481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:00:52.080 [DEBUG] [Thread-1481] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:00:52.080 [DEBUG] [Thread-1481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:00:52.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:00:52.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:00:52.137 [DEBUG] [Thread-1481] [transport.py] [_log()] userauth is OK
2025-12-25T00:00:52.137 [DEBUG] [Thread-1481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:00:52.137 [DEBUG] [Thread-1481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:00:52.138 [DEBUG] [Thread-1481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:00:52.138 [DEBUG] [Thread-1481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:00:52.156 [INFO] [Thread-1481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:00:52.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:00:52.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:00:52.976 [DEBUG] [Thread-1481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:00:52.976 [DEBUG] [Thread-1481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:00:53.024 [DEBUG] [Thread-1481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:00:53.025 [DEBUG] [Thread-1481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:00:53.034 [DEBUG] [Thread-1481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:00:53.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:00:53.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:00:53.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:00:53.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:00:53.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:00:53.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:00:53.070 [DEBUG] [Thread-1481] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:01:04.328 [DEBUG] [Thread-1483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:01:11.925 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:01:11.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:01:18.087 [DEBUG] [Thread-1484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:01:19.365 [DEBUG] [Thread-1485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:01:23.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:01:23.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:01:23.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
2025-12-25T00:01:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 1, 17), 2.55, 84.84, 0.0, 31.3, 13.21, 0, 1, 2, 2, 0, 0),)
2025-12-25T00:01:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:01:17
2025-12-25T00:01:23.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:01:24.071 [DEBUG] [Thread-1486] [transport.py] [_log()] starting thread (client mode): 0xb95d7af0
2025-12-25T00:01:24.072 [DEBUG] [Thread-1486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:01:24.093 [DEBUG] [Thread-1486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:01:24.093 [INFO] [Thread-1486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:01:24.096 [DEBUG] [Thread-1486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:01:24.096 [DEBUG] [Thread-1486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] client lang: <none>
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] server lang: <none>
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] kex follows: False
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:01:24.097 [DEBUG] [Thread-1486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:01:24.098 [DEBUG] [Thread-1486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:01:24.098 [DEBUG] [Thread-1486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:01:24.098 [DEBUG] [Thread-1486] [transport.py] [_log()] Compression: none
2025-12-25T00:01:24.098 [DEBUG] [Thread-1486] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:01:24.112 [DEBUG] [Thread-1486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:01:24.113 [DEBUG] [Thread-1486] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:01:24.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:01:24.115 [DEBUG] [Thread-1486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:01:24.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:01:24.116 [DEBUG] [Thread-1486] [transport.py] [_log()] userauth is OK
2025-12-25T00:01:24.117 [DEBUG] [Thread-1486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:01:24.117 [DEBUG] [Thread-1486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:01:24.117 [DEBUG] [Thread-1486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:01:24.117 [DEBUG] [Thread-1486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:01:24.140 [INFO] [Thread-1486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:01:24.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:01:24.797 [DEBUG] [Thread-1486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:01:24.798 [DEBUG] [Thread-1486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:01:24.798 [DEBUG] [Thread-1486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:01:24.839 [DEBUG] [Thread-1486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:01:24.839 [DEBUG] [Thread-1486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:01:24.842 [DEBUG] [Thread-1486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:01:24.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:01:24.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:01:24.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:01:24.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:01:24.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:01:24.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:01:24.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:01:24.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:01:24.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:01:24.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.917422 -999.00  +13.10  26.35     87  +11.10 1 1 1 2 1     0    0 1.05 -49.44 ZNESW 25.7 26.4 133.0 33.7 13.9 -18.6 13.9 -18.8 13.7 -17.7 14.0 -19.1
2025-12-25T00:01:24.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:01:24.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:01:24.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.917422
2025-12-25T00:01:24.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:01:24.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:01:24.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:01:24.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:01:24.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:01:24.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:01:17', tmtdew=2.55, humidity=84.84, cloud=0.0, wind=31.3, temperature=13.21, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:01:18', seeing=3.63, atlas_timestamp='2025-12-24T22:01:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.10174999999999912, 0.1567500000000006, 0.22724999999999973, 0.14699999999999847, 0.1844999999999999, 0.20825000000000138, 0.09200000000000053, 0.13625000000000043, 0.14449999999999896, 0.11899999999999977, 0.18024999999999913, 0.13299999999999912, 0.26900000000000013, 0.2292500000000004, 0.10999999999999943, 0.13349999999999973, 0.18125000000000036, 0.21199999999999974, 0.12199999999999989, 0.08724999999999916, 0.18099999999999916, 0.12774999999999892, 0.17025000000000112, 0.22625000000000028, 0.3249999999999993, 0.4045000000000005, 0.16574999999999918, 0.13750000000000107, 0.23850000000000016, 0.1515000000000004, 0.16400000000000148, 0.35600000000000076, 0.505749999999999], zp_timestamp='2025-12-24T21:57:00')
2025-12-25T00:01:24.868 [DEBUG] [Thread-1486] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:01:24.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:01:24.962 [DEBUG] [Thread-1489] [transport.py] [_log()] starting thread (client mode): 0xb95d62c0
2025-12-25T00:01:24.962 [DEBUG] [Thread-1489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:01:24.977 [DEBUG] [Thread-1489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:01:24.977 [INFO] [Thread-1489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] client lang: <none>
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] server lang: <none>
2025-12-25T00:01:24.985 [DEBUG] [Thread-1489] [transport.py] [_log()] kex follows: False
2025-12-25T00:01:24.986 [DEBUG] [Thread-1489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:01:24.986 [DEBUG] [Thread-1489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:01:24.986 [DEBUG] [Thread-1489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:01:24.986 [DEBUG] [Thread-1489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:01:24.986 [DEBUG] [Thread-1489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:01:24.986 [DEBUG] [Thread-1489] [transport.py] [_log()] Compression: none
2025-12-25T00:01:24.986 [DEBUG] [Thread-1489] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:01:25.043 [DEBUG] [Thread-1489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:01:25.044 [DEBUG] [Thread-1489] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:01:25.044 [DEBUG] [Thread-1489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:01:25.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:01:25.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:01:25.099 [DEBUG] [Thread-1489] [transport.py] [_log()] userauth is OK
2025-12-25T00:01:25.100 [DEBUG] [Thread-1489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:01:25.100 [DEBUG] [Thread-1489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:01:25.100 [DEBUG] [Thread-1489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:01:25.100 [DEBUG] [Thread-1489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:01:25.119 [INFO] [Thread-1489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:01:25.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:01:25.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:01:25.978 [DEBUG] [Thread-1489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:01:25.978 [DEBUG] [Thread-1489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:01:26.026 [DEBUG] [Thread-1489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:01:26.026 [DEBUG] [Thread-1489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:01:26.036 [DEBUG] [Thread-1489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:01:26.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:01:26.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:01:26.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
2025-12-25T00:01:26.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:01:26.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:01:26.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:01:26.072 [DEBUG] [Thread-1489] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:01:34.398 [DEBUG] [Thread-1491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:01:49.443 [DEBUG] [Thread-1492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:01:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:01:56.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:01:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:01:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 1, 49), 2.43, 84.92, 0.0, 29.73, 13.16, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:01:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:01:49
2025-12-25T00:01:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:01:57.060 [DEBUG] [Thread-1493] [transport.py] [_log()] starting thread (client mode): 0xb95d6920
2025-12-25T00:01:57.060 [DEBUG] [Thread-1493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:01:57.078 [DEBUG] [Thread-1493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:01:57.078 [INFO] [Thread-1493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:01:57.081 [DEBUG] [Thread-1493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] client lang: <none>
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] server lang: <none>
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] kex follows: False
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] Compression: none
2025-12-25T00:01:57.082 [DEBUG] [Thread-1493] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:01:57.101 [DEBUG] [Thread-1493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:01:57.101 [DEBUG] [Thread-1493] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:01:57.102 [DEBUG] [Thread-1493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:01:57.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:01:57.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:01:57.104 [DEBUG] [Thread-1493] [transport.py] [_log()] userauth is OK
2025-12-25T00:01:57.104 [DEBUG] [Thread-1493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:01:57.104 [DEBUG] [Thread-1493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:01:57.104 [DEBUG] [Thread-1493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:01:57.104 [DEBUG] [Thread-1493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:01:57.129 [INFO] [Thread-1493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:01:57.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:01:57.778 [DEBUG] [Thread-1493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:01:57.779 [DEBUG] [Thread-1493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:01:57.779 [DEBUG] [Thread-1493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:01:57.819 [DEBUG] [Thread-1493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:01:57.819 [DEBUG] [Thread-1493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:01:57.821 [DEBUG] [Thread-1493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:01:57.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:01:57.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:01:57.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:01:57.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:01:57.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:01:57.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:01:57.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:01:57.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:01:57.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:01:57.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.917769 -999.00  +13.10  22.63     87  +11.10 1 1 1 2 1     0    0 0.96 -49.53 ZNESW 25.3 22.6 144.8 25.5 14.0 -15.1 13.8 -15.7 13.7 -14.8 14.0 -17.4
2025-12-25T00:01:57.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:01:57.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:01:57.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.917769
2025-12-25T00:01:57.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:01:57.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:01:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:01:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:01:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:01:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:01:49', tmtdew=2.43, humidity=84.92, cloud=0.0, wind=29.73, temperature=13.16, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:01:50', seeing=2.9, atlas_timestamp='2025-12-24T22:01:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:00:00')
2025-12-25T00:01:57.846 [DEBUG] [Thread-1493] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:01:57.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:01:57.940 [DEBUG] [Thread-1496] [transport.py] [_log()] starting thread (client mode): 0xb95d6980
2025-12-25T00:01:57.940 [DEBUG] [Thread-1496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:01:57.955 [DEBUG] [Thread-1496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:01:57.955 [INFO] [Thread-1496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:01:57.963 [DEBUG] [Thread-1496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:01:57.963 [DEBUG] [Thread-1496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:01:57.963 [DEBUG] [Thread-1496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:01:57.963 [DEBUG] [Thread-1496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:01:57.963 [DEBUG] [Thread-1496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:01:57.963 [DEBUG] [Thread-1496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:01:57.963 [DEBUG] [Thread-1496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:01:57.963 [DEBUG] [Thread-1496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] client lang: <none>
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] server lang: <none>
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] kex follows: False
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] Compression: none
2025-12-25T00:01:57.964 [DEBUG] [Thread-1496] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:01:58.028 [DEBUG] [Thread-1496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:01:58.028 [DEBUG] [Thread-1496] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:01:58.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:01:58.029 [DEBUG] [Thread-1496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:01:58.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:01:58.083 [DEBUG] [Thread-1496] [transport.py] [_log()] userauth is OK
2025-12-25T00:01:58.084 [DEBUG] [Thread-1496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:01:58.084 [DEBUG] [Thread-1496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:01:58.084 [DEBUG] [Thread-1496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:01:58.084 [DEBUG] [Thread-1496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:01:58.107 [INFO] [Thread-1496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:01:58.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:01:58.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:01:58.892 [DEBUG] [Thread-1496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:01:58.893 [DEBUG] [Thread-1496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:01:58.941 [DEBUG] [Thread-1496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:01:58.941 [DEBUG] [Thread-1496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:01:58.950 [DEBUG] [Thread-1496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:01:58.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:01:58.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:01:58.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:01:58.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:01:58.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:01:58.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:01:58.987 [DEBUG] [Thread-1496] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:02:04.477 [DEBUG] [Thread-1498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:02:12.125 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:02:12.126 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:02:18.155 [DEBUG] [Thread-1499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:02:19.531 [DEBUG] [Thread-1500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:02:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:02:29.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:02:29.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:02:29.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 2, 21), 2.42, 84.99, 0.0, 30.37, 13.18, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:02:29.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:02:21
2025-12-25T00:02:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:02:29.970 [DEBUG] [Thread-1501] [transport.py] [_log()] starting thread (client mode): 0xb95d6c80
2025-12-25T00:02:29.970 [DEBUG] [Thread-1501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:02:29.990 [DEBUG] [Thread-1501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:02:29.990 [INFO] [Thread-1501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:02:29.991 [DEBUG] [Thread-1501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:02:29.991 [DEBUG] [Thread-1501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:02:29.991 [DEBUG] [Thread-1501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:02:29.991 [DEBUG] [Thread-1501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] client lang: <none>
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] server lang: <none>
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] kex follows: False
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] Compression: none
2025-12-25T00:02:29.992 [DEBUG] [Thread-1501] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:02:30.000 [DEBUG] [Thread-1501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:02:30.001 [DEBUG] [Thread-1501] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:02:30.002 [DEBUG] [Thread-1501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:02:30.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:02:30.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:02:30.003 [DEBUG] [Thread-1501] [transport.py] [_log()] userauth is OK
2025-12-25T00:02:30.004 [DEBUG] [Thread-1501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:02:30.004 [DEBUG] [Thread-1501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:02:30.004 [DEBUG] [Thread-1501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:02:30.004 [DEBUG] [Thread-1501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:02:30.018 [INFO] [Thread-1501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:02:30.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:02:30.687 [DEBUG] [Thread-1501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:02:30.687 [DEBUG] [Thread-1501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:02:30.688 [DEBUG] [Thread-1501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:02:30.728 [DEBUG] [Thread-1501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:02:30.728 [DEBUG] [Thread-1501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:02:30.731 [DEBUG] [Thread-1501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:02:30.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:02:30.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:02:30.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:02:30.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:02:30.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:02:30.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:02:30.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:02:30.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:02:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:02:30.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.918116 -999.00  +13.10  25.14     87  +11.10 1 1 1 2 1     0    0 0.95 -51.39 ZNESW 24.6 25.1 135.6 33.9 13.9 -17.6 13.9 -16.2 13.7 -16.8 14.0 -15.4
2025-12-25T00:02:30.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:02:30.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:02:30.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.918116
2025-12-25T00:02:30.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:02:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:02:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:02:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:02:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:02:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:02:21', tmtdew=2.42, humidity=84.99, cloud=0.0, wind=30.37, temperature=13.18, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:02:22', seeing=3.21, atlas_timestamp='2025-12-24T22:02:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:00:00')
2025-12-25T00:02:30.757 [DEBUG] [Thread-1501] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:02:30.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:02:30.849 [DEBUG] [Thread-1504] [transport.py] [_log()] starting thread (client mode): 0xb9578310
2025-12-25T00:02:30.849 [DEBUG] [Thread-1504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:02:30.863 [DEBUG] [Thread-1504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:02:30.863 [INFO] [Thread-1504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] client lang: <none>
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] server lang: <none>
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] kex follows: False
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:02:30.871 [DEBUG] [Thread-1504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:02:30.872 [DEBUG] [Thread-1504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:02:30.872 [DEBUG] [Thread-1504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:02:30.872 [DEBUG] [Thread-1504] [transport.py] [_log()] Compression: none
2025-12-25T00:02:30.872 [DEBUG] [Thread-1504] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:02:30.931 [DEBUG] [Thread-1504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:02:30.932 [DEBUG] [Thread-1504] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:02:30.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:02:30.933 [DEBUG] [Thread-1504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:02:30.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:02:30.987 [DEBUG] [Thread-1504] [transport.py] [_log()] userauth is OK
2025-12-25T00:02:30.988 [DEBUG] [Thread-1504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:02:30.988 [DEBUG] [Thread-1504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:02:30.988 [DEBUG] [Thread-1504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:02:30.988 [DEBUG] [Thread-1504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:02:31.007 [INFO] [Thread-1504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:02:31.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:02:31.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:02:31.826 [DEBUG] [Thread-1504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:02:31.826 [DEBUG] [Thread-1504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:02:31.874 [DEBUG] [Thread-1504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:02:31.874 [DEBUG] [Thread-1504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:02:31.883 [DEBUG] [Thread-1504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:02:31.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:02:31.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')
2025-12-25T00:02:31.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
2025-12-25T00:02:31.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:02:31.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:02:31.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:02:31.919 [DEBUG] [Thread-1504] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:02:34.569 [DEBUG] [Thread-1506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:02:49.632 [DEBUG] [Thread-1507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:03:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:03:01.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:03:01.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:03:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 2, 54), 2.4, 85.08, 0.0, 31.92, 13.16, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:03:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:02:54
2025-12-25T00:03:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:03:02.943 [DEBUG] [Thread-1508] [transport.py] [_log()] starting thread (client mode): 0xb6b00a60
2025-12-25T00:03:02.943 [DEBUG] [Thread-1508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:03:02.963 [DEBUG] [Thread-1508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:03:02.963 [INFO] [Thread-1508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] client lang: <none>
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] server lang: <none>
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] kex follows: False
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] Compression: none
2025-12-25T00:03:02.966 [DEBUG] [Thread-1508] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:03:02.978 [DEBUG] [Thread-1508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:03:02.978 [DEBUG] [Thread-1508] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:03:02.979 [DEBUG] [Thread-1508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:03:02.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:03:02.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:03:02.979 [DEBUG] [Thread-1508] [transport.py] [_log()] userauth is OK
2025-12-25T00:03:02.979 [DEBUG] [Thread-1508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:03:02.980 [DEBUG] [Thread-1508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:03:02.980 [DEBUG] [Thread-1508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:03:02.980 [DEBUG] [Thread-1508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:03:02.989 [INFO] [Thread-1508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:03:02.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:03:03.632 [DEBUG] [Thread-1508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:03:03.632 [DEBUG] [Thread-1508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:03:03.632 [DEBUG] [Thread-1508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:03:03.673 [DEBUG] [Thread-1508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:03:03.673 [DEBUG] [Thread-1508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:03:03.676 [DEBUG] [Thread-1508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:03:03.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:03:03.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:03:03.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:03:03.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:03:03.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:03:03.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:03:03.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.918464 -999.00  +13.10  22.55     87  +11.10 1 1 1 2 1     0    0 0.90 -52.27 ZNESW 26.9 22.6 145.4 32.4 13.9 -19.9 13.9 -19.3 13.7 -18.2 14.0 -18.6
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.918464
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:03:03.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:02:54', tmtdew=2.4, humidity=85.08, cloud=0.0, wind=31.92, temperature=13.16, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:02:54', seeing=3.21, atlas_timestamp='2025-12-24T22:02:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:00:00')
2025-12-25T00:03:03.686 [DEBUG] [Thread-1508] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:03:03.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:03:03.770 [DEBUG] [Thread-1511] [transport.py] [_log()] starting thread (client mode): 0xb9579450
2025-12-25T00:03:03.771 [DEBUG] [Thread-1511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:03:03.785 [DEBUG] [Thread-1511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:03:03.785 [INFO] [Thread-1511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] client lang: <none>
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] server lang: <none>
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] kex follows: False
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] Compression: none
2025-12-25T00:03:03.793 [DEBUG] [Thread-1511] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:03:03.853 [DEBUG] [Thread-1511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:03:03.853 [DEBUG] [Thread-1511] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:03:03.854 [DEBUG] [Thread-1511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:03:03.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:03:03.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:03:03.911 [DEBUG] [Thread-1511] [transport.py] [_log()] userauth is OK
2025-12-25T00:03:03.911 [DEBUG] [Thread-1511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:03:03.911 [DEBUG] [Thread-1511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:03:03.911 [DEBUG] [Thread-1511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:03:03.911 [DEBUG] [Thread-1511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:03:03.924 [INFO] [Thread-1511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:03:03.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:03:03.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:03:04.664 [DEBUG] [Thread-1513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:03:04.756 [DEBUG] [Thread-1511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:03:04.756 [DEBUG] [Thread-1511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:03:04.803 [DEBUG] [Thread-1511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:03:04.803 [DEBUG] [Thread-1511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:03:04.812 [DEBUG] [Thread-1511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:03:04.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:03:04.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:03:04.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:03:04.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:03:04.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:03:04.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:03:04.843 [DEBUG] [Thread-1511] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:03:12.327 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:03:12.328 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:03:18.243 [DEBUG] [Thread-1514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:03:19.703 [DEBUG] [Thread-1515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:03:34.740 [DEBUG] [Thread-1516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:03:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:03:34.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:03:34.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
2025-12-25T00:03:35.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 3, 26), 2.38, 85.2, 0.0, 28.28, 13.16, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:03:35.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:03:26
2025-12-25T00:03:35.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:03:35.830 [DEBUG] [Thread-1517] [transport.py] [_log()] starting thread (client mode): 0xb6b01570
2025-12-25T00:03:35.830 [DEBUG] [Thread-1517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:03:35.850 [DEBUG] [Thread-1517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:03:35.850 [INFO] [Thread-1517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:03:35.851 [DEBUG] [Thread-1517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:03:35.851 [DEBUG] [Thread-1517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:03:35.851 [DEBUG] [Thread-1517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:03:35.851 [DEBUG] [Thread-1517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:03:35.851 [DEBUG] [Thread-1517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] client lang: <none>
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] server lang: <none>
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] kex follows: False
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] Compression: none
2025-12-25T00:03:35.852 [DEBUG] [Thread-1517] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:03:35.870 [DEBUG] [Thread-1517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:03:35.871 [DEBUG] [Thread-1517] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:03:35.871 [DEBUG] [Thread-1517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:03:35.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:03:35.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:03:35.873 [DEBUG] [Thread-1517] [transport.py] [_log()] userauth is OK
2025-12-25T00:03:35.873 [DEBUG] [Thread-1517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:03:35.873 [DEBUG] [Thread-1517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:03:35.874 [DEBUG] [Thread-1517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:03:35.874 [DEBUG] [Thread-1517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:03:35.909 [INFO] [Thread-1517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:03:35.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:03:36.488 [DEBUG] [Thread-1517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:03:36.488 [DEBUG] [Thread-1517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:03:36.488 [DEBUG] [Thread-1517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:03:36.529 [DEBUG] [Thread-1517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:03:36.529 [DEBUG] [Thread-1517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:03:36.533 [DEBUG] [Thread-1517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:03:36.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:03:36.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:03:36.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:03:36.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:03:36.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:03:36.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:03:36.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:03:36.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:03:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:03:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.918811 -999.00  +13.10  17.46     87  +11.10 1 1 1 2 1     0    0 0.77 -53.44 ZNESW 16.6 17.5 144.0 29.3 13.9 -19.9 13.8 -19.5 13.7 -18.1 14.0 -19.1
2025-12-25T00:03:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:03:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:03:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.918811
2025-12-25T00:03:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:03:36.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:03:36.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:03:36.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:03:36.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:03:36.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:03:26', tmtdew=2.38, humidity=85.2, cloud=0.0, wind=28.28, temperature=13.16, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:03:26', seeing=3.21, atlas_timestamp='2025-12-24T22:03:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:00:00')
2025-12-25T00:03:36.556 [DEBUG] [Thread-1517] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:03:36.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:03:36.649 [DEBUG] [Thread-1520] [transport.py] [_log()] starting thread (client mode): 0xb95d5450
2025-12-25T00:03:36.649 [DEBUG] [Thread-1520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:03:36.664 [DEBUG] [Thread-1520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:03:36.664 [INFO] [Thread-1520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] client lang: <none>
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] server lang: <none>
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] kex follows: False
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:03:36.671 [DEBUG] [Thread-1520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:03:36.672 [DEBUG] [Thread-1520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:03:36.672 [DEBUG] [Thread-1520] [transport.py] [_log()] Compression: none
2025-12-25T00:03:36.672 [DEBUG] [Thread-1520] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:03:36.734 [DEBUG] [Thread-1520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:03:36.734 [DEBUG] [Thread-1520] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:03:36.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:03:36.735 [DEBUG] [Thread-1520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:03:36.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:03:36.791 [DEBUG] [Thread-1520] [transport.py] [_log()] userauth is OK
2025-12-25T00:03:36.792 [DEBUG] [Thread-1520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:03:36.792 [DEBUG] [Thread-1520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:03:36.792 [DEBUG] [Thread-1520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:03:36.792 [DEBUG] [Thread-1520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:03:36.816 [INFO] [Thread-1520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:03:36.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:03:36.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:03:37.629 [DEBUG] [Thread-1520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:03:37.629 [DEBUG] [Thread-1520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:03:37.677 [DEBUG] [Thread-1520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:03:37.677 [DEBUG] [Thread-1520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:03:37.686 [DEBUG] [Thread-1520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:03:37.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:03:37.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:03:37.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') -> 00000000
2025-12-25T00:03:37.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:03:37.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:03:37.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:03:37.722 [DEBUG] [Thread-1520] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:03:49.778 [DEBUG] [Thread-1522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:04:04.842 [DEBUG] [Thread-1523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:04:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:04:07.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:04:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:04:08.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 3, 58), 2.38, 85.72, 0.0, 28.64, 13.13, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:04:08.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:03:58
2025-12-25T00:04:08.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:04:08.690 [DEBUG] [Thread-1524] [transport.py] [_log()] starting thread (client mode): 0xb95d6260
2025-12-25T00:04:08.690 [DEBUG] [Thread-1524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:04:08.710 [DEBUG] [Thread-1524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:04:08.710 [INFO] [Thread-1524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] client lang: <none>
2025-12-25T00:04:08.713 [DEBUG] [Thread-1524] [transport.py] [_log()] server lang: <none>
2025-12-25T00:04:08.714 [DEBUG] [Thread-1524] [transport.py] [_log()] kex follows: False
2025-12-25T00:04:08.714 [DEBUG] [Thread-1524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:04:08.714 [DEBUG] [Thread-1524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:04:08.714 [DEBUG] [Thread-1524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:04:08.714 [DEBUG] [Thread-1524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:04:08.714 [DEBUG] [Thread-1524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:04:08.714 [DEBUG] [Thread-1524] [transport.py] [_log()] Compression: none
2025-12-25T00:04:08.714 [DEBUG] [Thread-1524] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:04:08.733 [DEBUG] [Thread-1524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:04:08.734 [DEBUG] [Thread-1524] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:04:08.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:04:08.735 [DEBUG] [Thread-1524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:04:08.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:04:08.737 [DEBUG] [Thread-1524] [transport.py] [_log()] userauth is OK
2025-12-25T00:04:08.737 [DEBUG] [Thread-1524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:04:08.737 [DEBUG] [Thread-1524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:04:08.737 [DEBUG] [Thread-1524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:04:08.737 [DEBUG] [Thread-1524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:04:08.762 [INFO] [Thread-1524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:04:08.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:04:09.550 [DEBUG] [Thread-1524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:04:09.550 [DEBUG] [Thread-1524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:04:09.551 [DEBUG] [Thread-1524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:04:09.591 [DEBUG] [Thread-1524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:04:09.591 [DEBUG] [Thread-1524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:04:09.595 [DEBUG] [Thread-1524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:04:09.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:04:09.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:04:09.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:04:09.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:04:09.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:04:09.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:04:09.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:04:09.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:04:09.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:04:09.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.918811 -999.00  +13.10  17.46     87  +11.10 1 1 1 2 1     0    0 0.77 -53.44 ZNESW 16.6 17.5 144.0 29.3 13.9 -19.9 13.8 -19.5 13.7 -18.1 14.0 -19.1
2025-12-25T00:04:09.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:04:09.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:04:09.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.918811
2025-12-25T00:04:09.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:04:09.620 [DEBUG] [Thread-1524] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:04:09.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:04:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:04:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:04:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:04:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:03:58', tmtdew=2.38, humidity=85.72, cloud=0.0, wind=28.64, temperature=13.13, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:03:58', seeing=3.21, atlas_timestamp='2025-12-24T22:03:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:00:00')
2025-12-25T00:04:09.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:04:09.726 [DEBUG] [Thread-1527] [transport.py] [_log()] starting thread (client mode): 0xb6b036a0
2025-12-25T00:04:09.726 [DEBUG] [Thread-1527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:04:09.740 [DEBUG] [Thread-1527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:04:09.740 [INFO] [Thread-1527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:04:09.748 [DEBUG] [Thread-1527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:04:09.748 [DEBUG] [Thread-1527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:04:09.748 [DEBUG] [Thread-1527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:04:09.748 [DEBUG] [Thread-1527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:04:09.748 [DEBUG] [Thread-1527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:04:09.748 [DEBUG] [Thread-1527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:04:09.748 [DEBUG] [Thread-1527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:04:09.748 [DEBUG] [Thread-1527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] client lang: <none>
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] server lang: <none>
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] kex follows: False
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] Compression: none
2025-12-25T00:04:09.749 [DEBUG] [Thread-1527] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:04:09.807 [DEBUG] [Thread-1527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:04:09.808 [DEBUG] [Thread-1527] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:04:09.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:04:09.809 [DEBUG] [Thread-1527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:04:09.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:04:09.863 [DEBUG] [Thread-1527] [transport.py] [_log()] userauth is OK
2025-12-25T00:04:09.864 [DEBUG] [Thread-1527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:04:09.864 [DEBUG] [Thread-1527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:04:09.864 [DEBUG] [Thread-1527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:04:09.864 [DEBUG] [Thread-1527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:04:09.882 [INFO] [Thread-1527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:04:09.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:04:09.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:04:10.674 [DEBUG] [Thread-1527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:04:10.675 [DEBUG] [Thread-1527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:04:10.722 [DEBUG] [Thread-1527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:04:10.722 [DEBUG] [Thread-1527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:04:10.732 [DEBUG] [Thread-1527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:04:10.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:04:10.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:04:10.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:04:10.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:04:10.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:04:10.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:04:10.767 [DEBUG] [Thread-1527] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:04:12.529 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:04:12.531 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:04:18.322 [DEBUG] [Thread-1529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:04:19.879 [DEBUG] [Thread-1530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:04:34.917 [DEBUG] [Thread-1531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:04:40.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:04:40.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:04:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:04:41.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 4, 30), 2.37, 85.78, 0.0, 33.45, 13.13, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:04:41.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:04:30
2025-12-25T00:04:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:04:41.755 [DEBUG] [Thread-1532] [transport.py] [_log()] starting thread (client mode): 0xb6b02530
2025-12-25T00:04:41.756 [DEBUG] [Thread-1532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:04:41.776 [DEBUG] [Thread-1532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:04:41.776 [INFO] [Thread-1532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] client lang: <none>
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] server lang: <none>
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] kex follows: False
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] Compression: none
2025-12-25T00:04:41.779 [DEBUG] [Thread-1532] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:04:41.790 [DEBUG] [Thread-1532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:04:41.791 [DEBUG] [Thread-1532] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:04:41.791 [DEBUG] [Thread-1532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:04:41.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:04:41.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:04:41.833 [DEBUG] [Thread-1532] [transport.py] [_log()] userauth is OK
2025-12-25T00:04:41.833 [DEBUG] [Thread-1532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:04:41.833 [DEBUG] [Thread-1532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:04:41.833 [DEBUG] [Thread-1532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:04:41.833 [DEBUG] [Thread-1532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:04:41.864 [INFO] [Thread-1532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:04:41.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:04:42.497 [DEBUG] [Thread-1532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:04:42.497 [DEBUG] [Thread-1532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:04:42.498 [DEBUG] [Thread-1532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:04:42.538 [DEBUG] [Thread-1532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:04:42.538 [DEBUG] [Thread-1532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:04:42.542 [DEBUG] [Thread-1532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:04:42.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:04:42.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:04:42.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:04:42.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:04:42.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:04:42.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:04:42.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:04:42.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:04:42.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:04:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.919505 -999.00  +13.10  20.80     87  +11.10 1 2 1 2 1     0    0 0.80 -51.53 zNESW 21.1 20.8 145.2 27.0 13.9 -19.2 13.8 -19.2 13.7 -18.3 13.9 -18.8
2025-12-25T00:04:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:04:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:04:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.919505
2025-12-25T00:04:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:04:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:04:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:04:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:04:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:04:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:04:30', tmtdew=2.37, humidity=85.78, cloud=0.0, wind=33.45, temperature=13.13, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:04:30', seeing=3.21, atlas_timestamp='2025-12-24T22:04:05.232', atlas_cloud=2, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:00:00')
2025-12-25T00:04:42.571 [DEBUG] [Thread-1532] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:04:42.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:04:42.665 [DEBUG] [Thread-1535] [transport.py] [_log()] starting thread (client mode): 0xb6b028c0
2025-12-25T00:04:42.665 [DEBUG] [Thread-1535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:04:42.679 [DEBUG] [Thread-1535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:04:42.679 [INFO] [Thread-1535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] client lang: <none>
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] server lang: <none>
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] kex follows: False
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] Compression: none
2025-12-25T00:04:42.687 [DEBUG] [Thread-1535] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:04:42.751 [DEBUG] [Thread-1535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:04:42.751 [DEBUG] [Thread-1535] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:04:42.752 [DEBUG] [Thread-1535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:04:42.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:04:42.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:04:42.809 [DEBUG] [Thread-1535] [transport.py] [_log()] userauth is OK
2025-12-25T00:04:42.809 [DEBUG] [Thread-1535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:04:42.809 [DEBUG] [Thread-1535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:04:42.809 [DEBUG] [Thread-1535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:04:42.809 [DEBUG] [Thread-1535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:04:42.829 [INFO] [Thread-1535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:04:42.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:04:42.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:04:43.654 [DEBUG] [Thread-1535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:04:43.655 [DEBUG] [Thread-1535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:04:43.702 [DEBUG] [Thread-1535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:04:43.702 [DEBUG] [Thread-1535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:04:43.712 [DEBUG] [Thread-1535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:04:43.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:04:43.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')
2025-12-25T00:04:43.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:04:43.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:04:43.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:04:43.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:04:43.749 [DEBUG] [Thread-1535] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:04:49.952 [DEBUG] [Thread-1537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:05.001 [DEBUG] [Thread-1538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:08.944 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:12.730 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:12.732 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:13.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:05:13.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:05:13.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:05:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 5, 2), 2.35, 85.87, 0.0, 32.09, 13.11, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:05:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:05:02
2025-12-25T00:05:14.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:05:14.730 [DEBUG] [Thread-1539] [transport.py] [_log()] starting thread (client mode): 0xb6b006d0
2025-12-25T00:05:14.730 [DEBUG] [Thread-1539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:05:14.749 [DEBUG] [Thread-1539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:05:14.749 [INFO] [Thread-1539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] client lang: <none>
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] server lang: <none>
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] kex follows: False
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] Compression: none
2025-12-25T00:05:14.753 [DEBUG] [Thread-1539] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:05:14.770 [DEBUG] [Thread-1539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:05:14.771 [DEBUG] [Thread-1539] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:05:14.771 [DEBUG] [Thread-1539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:05:14.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:05:14.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:05:14.773 [DEBUG] [Thread-1539] [transport.py] [_log()] userauth is OK
2025-12-25T00:05:14.773 [DEBUG] [Thread-1539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:05:14.774 [DEBUG] [Thread-1539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:05:14.774 [DEBUG] [Thread-1539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:05:14.774 [DEBUG] [Thread-1539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:05:14.798 [INFO] [Thread-1539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:05:14.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:05:18.404 [DEBUG] [Thread-1541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:19.636 [DEBUG] [Thread-1539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:05:19.636 [DEBUG] [Thread-1539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:05:19.636 [DEBUG] [Thread-1539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:05:19.676 [DEBUG] [Thread-1539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:05:19.677 [DEBUG] [Thread-1539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:05:19.680 [DEBUG] [Thread-1539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:05:19.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:05:19.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:05:19.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:05:19.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:05:19.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:05:19.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:05:19.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:05:19.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:05:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:05:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.919852 -999.00  +13.10  17.88     87  +11.10 1 1 1 2 1     0    0 0.79 -52.19 ZNESW 15.1 17.9 154.4 24.4 13.9 -19.9 13.8 -19.3 13.6 -18.0 13.9 -18.9
2025-12-25T00:05:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:05:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:05:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.919852
2025-12-25T00:05:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:05:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:05:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:05:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:05:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:05:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:05:02', tmtdew=2.35, humidity=85.87, cloud=0.0, wind=32.09, temperature=13.11, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:05:02', seeing=3.21, atlas_timestamp='2025-12-24T22:04:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:03:00')
2025-12-25T00:05:19.709 [DEBUG] [Thread-1539] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:05:19.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:05:19.806 [DEBUG] [Thread-1543] [transport.py] [_log()] starting thread (client mode): 0xb6b01150
2025-12-25T00:05:19.806 [DEBUG] [Thread-1543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:05:19.822 [DEBUG] [Thread-1543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:05:19.822 [INFO] [Thread-1543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:05:19.832 [DEBUG] [Thread-1543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:05:19.832 [DEBUG] [Thread-1543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:05:19.832 [DEBUG] [Thread-1543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:05:19.832 [DEBUG] [Thread-1543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:05:19.832 [DEBUG] [Thread-1543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:05:19.832 [DEBUG] [Thread-1543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:05:19.832 [DEBUG] [Thread-1543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:05:19.832 [DEBUG] [Thread-1543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] client lang: <none>
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] server lang: <none>
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] kex follows: False
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:05:19.833 [DEBUG] [Thread-1543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:05:19.834 [DEBUG] [Thread-1543] [transport.py] [_log()] Compression: none
2025-12-25T00:05:19.834 [DEBUG] [Thread-1543] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:05:19.886 [DEBUG] [Thread-1543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:05:19.887 [DEBUG] [Thread-1543] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:05:19.887 [DEBUG] [Thread-1543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:05:19.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:05:19.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:05:19.954 [DEBUG] [Thread-1543] [transport.py] [_log()] userauth is OK
2025-12-25T00:05:19.954 [DEBUG] [Thread-1543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:05:19.954 [DEBUG] [Thread-1543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:05:19.954 [DEBUG] [Thread-1543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:05:19.954 [DEBUG] [Thread-1543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:05:19.976 [INFO] [Thread-1543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:05:19.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:05:19.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:05:20.037 [DEBUG] [Thread-1545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:20.800 [DEBUG] [Thread-1543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:05:20.800 [DEBUG] [Thread-1543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:05:20.849 [DEBUG] [Thread-1543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:05:20.849 [DEBUG] [Thread-1543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:05:20.857 [DEBUG] [Thread-1543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:05:20.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:05:20.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:05:20.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:05:20.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:05:20.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:05:20.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:05:20.892 [DEBUG] [Thread-1543] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:05:35.097 [DEBUG] [Thread-1546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:50.124 [DEBUG] [Thread-1547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:05:50.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:05:50.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:05:50.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:05:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 5, 34), 2.29, 85.97, 0.0, 29.24, 13.09, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:05:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:05:34
2025-12-25T00:05:51.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:05:51.869 [DEBUG] [Thread-1548] [transport.py] [_log()] starting thread (client mode): 0xd88c71f0
2025-12-25T00:05:51.869 [DEBUG] [Thread-1548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:05:51.888 [DEBUG] [Thread-1548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:05:51.888 [INFO] [Thread-1548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:05:51.891 [DEBUG] [Thread-1548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:05:51.891 [DEBUG] [Thread-1548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] client lang: <none>
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] server lang: <none>
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] kex follows: False
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] Compression: none
2025-12-25T00:05:51.892 [DEBUG] [Thread-1548] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:05:51.911 [DEBUG] [Thread-1548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:05:51.911 [DEBUG] [Thread-1548] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:05:51.912 [DEBUG] [Thread-1548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:05:51.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:05:51.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:05:51.914 [DEBUG] [Thread-1548] [transport.py] [_log()] userauth is OK
2025-12-25T00:05:51.914 [DEBUG] [Thread-1548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:05:51.915 [DEBUG] [Thread-1548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:05:51.915 [DEBUG] [Thread-1548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:05:51.915 [DEBUG] [Thread-1548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:05:51.933 [INFO] [Thread-1548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:05:51.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:05:52.528 [DEBUG] [Thread-1548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:05:52.528 [DEBUG] [Thread-1548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:05:52.529 [DEBUG] [Thread-1548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:05:52.569 [DEBUG] [Thread-1548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:05:52.569 [DEBUG] [Thread-1548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:05:52.573 [DEBUG] [Thread-1548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:05:52.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:05:52.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:05:52.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:05:52.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:05:52.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:05:52.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:05:52.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:05:52.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:05:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:05:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.920199 -999.00  +13.10  22.01     87  +11.10 1 1 1 2 1     0    0 0.73 -53.99 ZNESW 17.7 22.0 166.6 30.2 13.9 -19.7 13.8 -19.4 13.6 -18.2 14.0 -19.3
2025-12-25T00:05:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:05:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:05:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.920199
2025-12-25T00:05:52.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:05:52.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:05:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:05:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:05:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:05:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:05:34', tmtdew=2.29, humidity=85.97, cloud=0.0, wind=29.24, temperature=13.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:05:34', seeing=3.21, atlas_timestamp='2025-12-24T22:05:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:03:00')
2025-12-25T00:05:52.601 [DEBUG] [Thread-1548] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:05:52.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:05:52.696 [DEBUG] [Thread-1551] [transport.py] [_log()] starting thread (client mode): 0xbbfcdf30
2025-12-25T00:05:52.696 [DEBUG] [Thread-1551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:05:52.711 [DEBUG] [Thread-1551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:05:52.711 [INFO] [Thread-1551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:05:52.719 [DEBUG] [Thread-1551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:05:52.719 [DEBUG] [Thread-1551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:05:52.719 [DEBUG] [Thread-1551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:05:52.719 [DEBUG] [Thread-1551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:05:52.720 [DEBUG] [Thread-1551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:05:52.720 [DEBUG] [Thread-1551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:05:52.720 [DEBUG] [Thread-1551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:05:52.720 [DEBUG] [Thread-1551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:05:52.720 [DEBUG] [Thread-1551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:05:52.720 [DEBUG] [Thread-1551] [transport.py] [_log()] client lang: <none>
2025-12-25T00:05:52.720 [DEBUG] [Thread-1551] [transport.py] [_log()] server lang: <none>
2025-12-25T00:05:52.721 [DEBUG] [Thread-1551] [transport.py] [_log()] kex follows: False
2025-12-25T00:05:52.721 [DEBUG] [Thread-1551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:05:52.721 [DEBUG] [Thread-1551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:05:52.721 [DEBUG] [Thread-1551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:05:52.721 [DEBUG] [Thread-1551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:05:52.721 [DEBUG] [Thread-1551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:05:52.721 [DEBUG] [Thread-1551] [transport.py] [_log()] Compression: none
2025-12-25T00:05:52.721 [DEBUG] [Thread-1551] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:05:52.780 [DEBUG] [Thread-1551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:05:52.781 [DEBUG] [Thread-1551] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:05:52.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:05:52.782 [DEBUG] [Thread-1551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:05:52.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:05:52.839 [DEBUG] [Thread-1551] [transport.py] [_log()] userauth is OK
2025-12-25T00:05:52.840 [DEBUG] [Thread-1551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:05:52.840 [DEBUG] [Thread-1551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:05:52.840 [DEBUG] [Thread-1551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:05:52.840 [DEBUG] [Thread-1551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:05:52.859 [INFO] [Thread-1551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:05:52.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:05:52.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:05:53.759 [DEBUG] [Thread-1551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:05:53.760 [DEBUG] [Thread-1551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:05:53.808 [DEBUG] [Thread-1551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:05:53.808 [DEBUG] [Thread-1551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:05:53.817 [DEBUG] [Thread-1551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:05:53.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:05:53.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:05:53.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:05:53.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:05:53.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:05:53.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:05:53.854 [DEBUG] [Thread-1551] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:06:05.158 [DEBUG] [Thread-1553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:06:12.933 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:06:12.934 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:06:18.474 [DEBUG] [Thread-1554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:06:20.201 [DEBUG] [Thread-1555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:06:23.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:06:23.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:06:23.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:06:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 6, 6), 2.28, 85.97, 0.0, 32.09, 12.99, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:06:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:06:06
2025-12-25T00:06:24.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:06:24.844 [DEBUG] [Thread-1556] [transport.py] [_log()] starting thread (client mode): 0xbbfce050
2025-12-25T00:06:24.844 [DEBUG] [Thread-1556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:06:24.864 [DEBUG] [Thread-1556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:06:24.864 [INFO] [Thread-1556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:06:24.867 [DEBUG] [Thread-1556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:06:24.867 [DEBUG] [Thread-1556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:06:24.867 [DEBUG] [Thread-1556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:06:24.867 [DEBUG] [Thread-1556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:06:24.867 [DEBUG] [Thread-1556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:06:24.867 [DEBUG] [Thread-1556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:06:24.867 [DEBUG] [Thread-1556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:06:24.867 [DEBUG] [Thread-1556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] client lang: <none>
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] server lang: <none>
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] kex follows: False
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] Compression: none
2025-12-25T00:06:24.868 [DEBUG] [Thread-1556] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:06:24.876 [DEBUG] [Thread-1556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:06:24.876 [DEBUG] [Thread-1556] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:06:24.877 [DEBUG] [Thread-1556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:06:24.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:06:24.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:06:24.879 [DEBUG] [Thread-1556] [transport.py] [_log()] userauth is OK
2025-12-25T00:06:24.879 [DEBUG] [Thread-1556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:06:24.879 [DEBUG] [Thread-1556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:06:24.879 [DEBUG] [Thread-1556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:06:24.879 [DEBUG] [Thread-1556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:06:24.897 [INFO] [Thread-1556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:06:24.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:06:25.626 [DEBUG] [Thread-1556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:06:25.626 [DEBUG] [Thread-1556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:06:25.627 [DEBUG] [Thread-1556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:06:25.667 [DEBUG] [Thread-1556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:06:25.668 [DEBUG] [Thread-1556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:06:25.674 [DEBUG] [Thread-1556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:06:25.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:06:25.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:06:25.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:06:25.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:06:25.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:06:25.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:06:25.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:06:25.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:06:25.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:06:25.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.920547 -999.00  +13.00  22.78     87  +11.10 1 1 1 2 1     0    0 0.74 -53.62 ZNESW 20.0 22.8 140.8 26.4 13.9 -18.3 13.8 -18.4 13.7 -18.0 13.9 -18.5
2025-12-25T00:06:25.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:06:25.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:06:25.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.920547
2025-12-25T00:06:25.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:06:25.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:06:25.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:06:25.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:06:25.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:06:25.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:06:06', tmtdew=2.28, humidity=85.97, cloud=0.0, wind=32.09, temperature=12.99, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:05:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:03:00')
2025-12-25T00:06:25.721 [DEBUG] [Thread-1556] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:06:25.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:06:25.817 [DEBUG] [Thread-1559] [transport.py] [_log()] starting thread (client mode): 0xb6b00fd0
2025-12-25T00:06:25.818 [DEBUG] [Thread-1559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:06:25.832 [DEBUG] [Thread-1559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:06:25.832 [INFO] [Thread-1559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:06:25.840 [DEBUG] [Thread-1559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:06:25.840 [DEBUG] [Thread-1559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:06:25.840 [DEBUG] [Thread-1559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] client lang: <none>
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] server lang: <none>
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] kex follows: False
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] Compression: none
2025-12-25T00:06:25.841 [DEBUG] [Thread-1559] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:06:25.902 [DEBUG] [Thread-1559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:06:25.903 [DEBUG] [Thread-1559] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:06:25.903 [DEBUG] [Thread-1559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:06:25.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:06:25.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:06:25.959 [DEBUG] [Thread-1559] [transport.py] [_log()] userauth is OK
2025-12-25T00:06:25.960 [DEBUG] [Thread-1559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:06:25.960 [DEBUG] [Thread-1559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:06:25.960 [DEBUG] [Thread-1559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:06:25.960 [DEBUG] [Thread-1559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:06:25.979 [INFO] [Thread-1559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:06:25.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:06:25.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:06:26.855 [DEBUG] [Thread-1559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:06:26.855 [DEBUG] [Thread-1559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:06:26.903 [DEBUG] [Thread-1559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:06:26.903 [DEBUG] [Thread-1559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:06:26.913 [DEBUG] [Thread-1559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:06:26.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:06:26.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')
2025-12-25T00:06:26.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:06:26.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:06:26.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:06:26.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:06:26.949 [DEBUG] [Thread-1559] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:06:35.233 [DEBUG] [Thread-1561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:06:50.286 [DEBUG] [Thread-1562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:06:56.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:06:56.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:06: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
2025-12-25T00:06:57.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 6, 38), 2.27, 86.05, 0.0, 33.68, 13.04, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:06:57.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:06:38
2025-12-25T00:06:57.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:06:57.963 [DEBUG] [Thread-1563] [transport.py] [_log()] starting thread (client mode): 0xb95d77f0
2025-12-25T00:06:57.963 [DEBUG] [Thread-1563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:06:57.984 [DEBUG] [Thread-1563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:06:57.984 [INFO] [Thread-1563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] client lang: <none>
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] server lang: <none>
2025-12-25T00:06:57.987 [DEBUG] [Thread-1563] [transport.py] [_log()] kex follows: False
2025-12-25T00:06:57.988 [DEBUG] [Thread-1563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:06:57.988 [DEBUG] [Thread-1563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:06:57.988 [DEBUG] [Thread-1563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:06:57.988 [DEBUG] [Thread-1563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:06:57.988 [DEBUG] [Thread-1563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:06:57.988 [DEBUG] [Thread-1563] [transport.py] [_log()] Compression: none
2025-12-25T00:06:57.988 [DEBUG] [Thread-1563] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:06:58.003 [DEBUG] [Thread-1563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:06:58.004 [DEBUG] [Thread-1563] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:06:58.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:06:58.004 [DEBUG] [Thread-1563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:06:58.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:06:58.005 [DEBUG] [Thread-1563] [transport.py] [_log()] userauth is OK
2025-12-25T00:06:58.005 [DEBUG] [Thread-1563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:06:58.005 [DEBUG] [Thread-1563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:06:58.005 [DEBUG] [Thread-1563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:06:58.005 [DEBUG] [Thread-1563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:06:58.014 [INFO] [Thread-1563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:06:58.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:06:58.671 [DEBUG] [Thread-1563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:06:58.671 [DEBUG] [Thread-1563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:06:58.671 [DEBUG] [Thread-1563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:06:58.712 [DEBUG] [Thread-1563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:06:58.712 [DEBUG] [Thread-1563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:06:58.715 [DEBUG] [Thread-1563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:06:58.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:06:58.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:06:58.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:06:58.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:06:58.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:06:58.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:06:58.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:06:58.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.920894 -999.00  +13.00  21.10     87  +11.10 1 1 1 2 1     0    0 0.50 -60.01 ZNESW 24.8 21.1 134.0 31.4 13.9 -19.3 13.8 -18.6 13.6 -17.0 13.9 -18.1
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.920894
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:06:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:06:38', tmtdew=2.27, humidity=86.05, cloud=0.0, wind=33.68, temperature=13.04, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:06:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:03:00')
2025-12-25T00:06:58.733 [DEBUG] [Thread-1563] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:06:58.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:06:58.818 [DEBUG] [Thread-1566] [transport.py] [_log()] starting thread (client mode): 0xb95d4040
2025-12-25T00:06:58.818 [DEBUG] [Thread-1566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:06:58.832 [DEBUG] [Thread-1566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:06:58.832 [INFO] [Thread-1566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] client lang: <none>
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] server lang: <none>
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] kex follows: False
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] Compression: none
2025-12-25T00:06:58.840 [DEBUG] [Thread-1566] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:06:58.897 [DEBUG] [Thread-1566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:06:58.898 [DEBUG] [Thread-1566] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:06:58.898 [DEBUG] [Thread-1566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:06:58.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:06:58.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:06:58.955 [DEBUG] [Thread-1566] [transport.py] [_log()] userauth is OK
2025-12-25T00:06:58.955 [DEBUG] [Thread-1566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:06:58.955 [DEBUG] [Thread-1566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:06:58.955 [DEBUG] [Thread-1566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:06:58.955 [DEBUG] [Thread-1566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:06:58.968 [INFO] [Thread-1566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:06:58.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:06:58.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:06:59.770 [DEBUG] [Thread-1566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:06:59.770 [DEBUG] [Thread-1566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:06:59.817 [DEBUG] [Thread-1566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:06:59.817 [DEBUG] [Thread-1566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:06:59.825 [DEBUG] [Thread-1566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:06:59.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:06:59.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:06:59.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:06:59.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:06:59.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:06:59.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:06:59.857 [DEBUG] [Thread-1566] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:07:05.318 [DEBUG] [Thread-1568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:07:13.136 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:07:13.137 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:07:18.554 [DEBUG] [Thread-1569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:07:20.372 [DEBUG] [Thread-1570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:07:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:07:29.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:07:29.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:07:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 7, 10), 2.26, 86.13, 0.0, 32.41, 13.04, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:07:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:07:10
2025-12-25T00:07:30.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:07:30.846 [DEBUG] [Thread-1571] [transport.py] [_log()] starting thread (client mode): 0xb95d7af0
2025-12-25T00:07:30.846 [DEBUG] [Thread-1571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:07:30.867 [DEBUG] [Thread-1571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:07:30.867 [INFO] [Thread-1571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] client lang: <none>
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] server lang: <none>
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] kex follows: False
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] Compression: none
2025-12-25T00:07:30.868 [DEBUG] [Thread-1571] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:07:30.876 [DEBUG] [Thread-1571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:07:30.877 [DEBUG] [Thread-1571] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:07:30.877 [DEBUG] [Thread-1571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:07:30.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:07:30.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:07:30.879 [DEBUG] [Thread-1571] [transport.py] [_log()] userauth is OK
2025-12-25T00:07:30.879 [DEBUG] [Thread-1571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:07:30.879 [DEBUG] [Thread-1571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:07:30.879 [DEBUG] [Thread-1571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:07:30.880 [DEBUG] [Thread-1571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:07:30.903 [INFO] [Thread-1571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:07:30.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:07:31.638 [DEBUG] [Thread-1571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:07:31.638 [DEBUG] [Thread-1571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:07:31.638 [DEBUG] [Thread-1571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:07:31.679 [DEBUG] [Thread-1571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:07:31.679 [DEBUG] [Thread-1571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:07:31.682 [DEBUG] [Thread-1571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:07:31.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:07:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:07:31.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:07:31.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:07:31.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:07:31.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:07:31.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:07:31.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:07:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:07:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.921241 -999.00  +13.00  36.23     88  +11.10 1 1 2 3 1     0    0 0.76 -52.05 ZNESW 28.8 36.2 158.4 40.1 13.8 -19.4 13.8 -19.1 13.6 -18.1 13.9 -18.8
2025-12-25T00:07:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:07:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:07:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.921241
2025-12-25T00:07:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:07:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:07:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:07:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:07:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:07:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:07:10', tmtdew=2.26, humidity=86.13, cloud=0.0, wind=32.41, temperature=13.04, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:06:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.4292499999999997, 0.6962500000000018, 0.5992500000000005, 0.3194999999999997, 0.21250000000000036, 0.36275000000000013, 0.3460000000000001, 0.3642500000000002, 0.4474999999999998, 0.7010000000000005, 0.48324999999999996, 0.2635000000000005, 0.3305000000000007, 0.2732499999999991, 0.1739999999999995, 0.19099999999999895, 0.35275000000000034, 0.5005000000000006, 0.2475000000000005, 0.16524999999999856, 0.2099999999999973, 0.20474999999999888, 0.20025000000000048, 0.3182500000000008, 0.5014999999999992, 0.29850000000000065, 0.20124999999999993, 0.182500000000001, 0.24900000000000055, 0.20000000000000107, 0.17849999999999966, 0.21799999999999997, 0.4917499999999988], zp_timestamp='2025-12-24T22:03:00')
2025-12-25T00:07:31.708 [DEBUG] [Thread-1571] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:07:31.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:07:31.806 [DEBUG] [Thread-1574] [transport.py] [_log()] starting thread (client mode): 0xb95d46d0
2025-12-25T00:07:31.806 [DEBUG] [Thread-1574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:07:31.826 [DEBUG] [Thread-1574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:07:31.826 [INFO] [Thread-1574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:07:31.839 [DEBUG] [Thread-1574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:07:31.839 [DEBUG] [Thread-1574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:07:31.839 [DEBUG] [Thread-1574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:07:31.839 [DEBUG] [Thread-1574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] client lang: <none>
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] server lang: <none>
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] kex follows: False
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:07:31.840 [DEBUG] [Thread-1574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:07:31.841 [DEBUG] [Thread-1574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:07:31.841 [DEBUG] [Thread-1574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:07:31.841 [DEBUG] [Thread-1574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:07:31.841 [DEBUG] [Thread-1574] [transport.py] [_log()] Compression: none
2025-12-25T00:07:31.841 [DEBUG] [Thread-1574] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:07:31.907 [DEBUG] [Thread-1574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:07:31.907 [DEBUG] [Thread-1574] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:07:31.908 [DEBUG] [Thread-1574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:07:31.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:07:31.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:07:31.969 [DEBUG] [Thread-1574] [transport.py] [_log()] userauth is OK
2025-12-25T00:07:31.969 [DEBUG] [Thread-1574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:07:31.969 [DEBUG] [Thread-1574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:07:31.969 [DEBUG] [Thread-1574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:07:31.969 [DEBUG] [Thread-1574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:07:31.991 [INFO] [Thread-1574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:07:31.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:07:31.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:07:32.847 [DEBUG] [Thread-1574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:07:32.847 [DEBUG] [Thread-1574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:07:32.896 [DEBUG] [Thread-1574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:07:32.897 [DEBUG] [Thread-1574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:07:32.910 [DEBUG] [Thread-1574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:07:32.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:07:32.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')
2025-12-25T00:07:32.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:07:32.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:07:32.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:07:32.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:07:32.958 [DEBUG] [Thread-1574] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:07:35.410 [DEBUG] [Thread-1576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:07:50.457 [DEBUG] [Thread-1577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:08:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:08:02.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:08:02.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
2025-12-25T00:08:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 7, 42), 2.2, 86.65, 0.0, 37.69, 13.03, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:08:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:07:42
2025-12-25T00:08:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:08:03.946 [DEBUG] [Thread-1578] [transport.py] [_log()] starting thread (client mode): 0xb95d6b60
2025-12-25T00:08:03.946 [DEBUG] [Thread-1578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:08:03.966 [DEBUG] [Thread-1578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:08:03.966 [INFO] [Thread-1578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:08:03.969 [DEBUG] [Thread-1578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] client lang: <none>
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] server lang: <none>
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] kex follows: False
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:08:03.970 [DEBUG] [Thread-1578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:08:03.971 [DEBUG] [Thread-1578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:08:03.971 [DEBUG] [Thread-1578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:08:03.971 [DEBUG] [Thread-1578] [transport.py] [_log()] Compression: none
2025-12-25T00:08:03.971 [DEBUG] [Thread-1578] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:08:03.984 [DEBUG] [Thread-1578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:08:03.985 [DEBUG] [Thread-1578] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:08:03.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:08:03.986 [DEBUG] [Thread-1578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:08:03.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:08:03.988 [DEBUG] [Thread-1578] [transport.py] [_log()] userauth is OK
2025-12-25T00:08:03.988 [DEBUG] [Thread-1578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:08:03.989 [DEBUG] [Thread-1578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:08:03.989 [DEBUG] [Thread-1578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:08:03.989 [DEBUG] [Thread-1578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:08:04.013 [INFO] [Thread-1578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:08:04.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:08:04.658 [DEBUG] [Thread-1578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:08:04.658 [DEBUG] [Thread-1578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:08:04.659 [DEBUG] [Thread-1578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:08:04.700 [DEBUG] [Thread-1578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:08:04.700 [DEBUG] [Thread-1578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:08:04.702 [DEBUG] [Thread-1578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:08:04.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:08:04.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:08:04.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:08:04.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:08:04.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:08:04.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:08:04.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:08:04.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:08:04.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:08:04.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.921936 -999.00  +12.90  17.63     88  +11.10 1 2 1 3 1     0    0 0.70 -52.40 zNESW 22.1 17.6 158.4 30.2 13.8 -19.8 13.7 -19.4 13.6 -18.1 13.8 -19.0
2025-12-25T00:08:04.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:08:04.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:08:04.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.921936
2025-12-25T00:08:04.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:08:04.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:08:04.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:08:04.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:08:04.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:08:04.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:07:42', tmtdew=2.2, humidity=86.65, cloud=0.0, wind=37.69, temperature=13.03, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:07:35.270', atlas_cloud=2, atlas_rain=1, zp_data=[0.17574999999999896, 0.21424999999999983, 0.2822500000000012, 0.18249999999999922, 0.1974999999999998, 0.2892500000000009, 0.2159999999999993, 0.15775000000000006, 0.16549999999999798, 0.17849999999999966, 0.24024999999999963, 0.2134999999999998, 0.29999999999999893, 0.3202499999999997, 0.13899999999999935, 0.18099999999999916, 0.22524999999999906, 0.2635000000000005, 0.17300000000000004, 0.16974999999999874, 0.24999999999999822, 0.19174999999999898, 0.20925000000000082, 0.21274999999999977, 0.3329999999999984, 0.3254999999999999, 0.17125000000000057, 0.1750000000000007, 0.258, 0.1750000000000007, 0.22550000000000026, 0.34800000000000075, 0.8107499999999987], zp_timestamp='2025-12-24T22:06:00')
2025-12-25T00:08:04.726 [DEBUG] [Thread-1578] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:08:04.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:08:04.818 [DEBUG] [Thread-1581] [transport.py] [_log()] starting thread (client mode): 0xb95d5480
2025-12-25T00:08:04.818 [DEBUG] [Thread-1581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:08:04.833 [DEBUG] [Thread-1581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:08:04.833 [INFO] [Thread-1581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:08:04.841 [DEBUG] [Thread-1581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] client lang: <none>
2025-12-25T00:08:04.842 [DEBUG] [Thread-1581] [transport.py] [_log()] server lang: <none>
2025-12-25T00:08:04.843 [DEBUG] [Thread-1581] [transport.py] [_log()] kex follows: False
2025-12-25T00:08:04.843 [DEBUG] [Thread-1581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:08:04.843 [DEBUG] [Thread-1581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:08:04.843 [DEBUG] [Thread-1581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:08:04.843 [DEBUG] [Thread-1581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:08:04.843 [DEBUG] [Thread-1581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:08:04.843 [DEBUG] [Thread-1581] [transport.py] [_log()] Compression: none
2025-12-25T00:08:04.843 [DEBUG] [Thread-1581] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:08:04.903 [DEBUG] [Thread-1581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:08:04.904 [DEBUG] [Thread-1581] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:08:04.904 [DEBUG] [Thread-1581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:08:04.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:08:04.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:08:04.963 [DEBUG] [Thread-1581] [transport.py] [_log()] userauth is OK
2025-12-25T00:08:04.964 [DEBUG] [Thread-1581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:08:04.964 [DEBUG] [Thread-1581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:08:04.964 [DEBUG] [Thread-1581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:08:04.964 [DEBUG] [Thread-1581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:08:04.984 [INFO] [Thread-1581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:08:04.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:08:04.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:08:05.494 [DEBUG] [Thread-1583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:08:05.796 [DEBUG] [Thread-1581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:08:05.797 [DEBUG] [Thread-1581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:08:05.845 [DEBUG] [Thread-1581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:08:05.845 [DEBUG] [Thread-1581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:08:05.854 [DEBUG] [Thread-1581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:08:05.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:08:05.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:08:05.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:08:05.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:08:05.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:08:05.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:08:05.890 [DEBUG] [Thread-1581] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:08:13.338 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:08:13.338 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:08:18.606 [DEBUG] [Thread-1584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:08:20.539 [DEBUG] [Thread-1585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:08:35.574 [DEBUG] [Thread-1586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:08:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:08:35.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:08:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:08:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 8, 14), 2.18, 86.78, 0.0, 32.29, 13.01, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:08:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:08:14
2025-12-25T00:08:36.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:08:36.865 [DEBUG] [Thread-1587] [transport.py] [_log()] starting thread (client mode): 0xb95d6b60
2025-12-25T00:08:36.865 [DEBUG] [Thread-1587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:08:36.887 [DEBUG] [Thread-1587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:08:36.887 [INFO] [Thread-1587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:08:36.890 [DEBUG] [Thread-1587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:08:36.890 [DEBUG] [Thread-1587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:08:36.890 [DEBUG] [Thread-1587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:08:36.890 [DEBUG] [Thread-1587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:08:36.890 [DEBUG] [Thread-1587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:08:36.890 [DEBUG] [Thread-1587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] client lang: <none>
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] server lang: <none>
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] kex follows: False
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] Compression: none
2025-12-25T00:08:36.891 [DEBUG] [Thread-1587] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:08:36.907 [DEBUG] [Thread-1587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:08:36.908 [DEBUG] [Thread-1587] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:08:36.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:08:36.909 [DEBUG] [Thread-1587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:08:36.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:08:36.910 [DEBUG] [Thread-1587] [transport.py] [_log()] userauth is OK
2025-12-25T00:08:36.911 [DEBUG] [Thread-1587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:08:36.911 [DEBUG] [Thread-1587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:08:36.911 [DEBUG] [Thread-1587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:08:36.911 [DEBUG] [Thread-1587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:08:36.935 [INFO] [Thread-1587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:08:36.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:08:37.674 [DEBUG] [Thread-1587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:08:37.674 [DEBUG] [Thread-1587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:08:37.675 [DEBUG] [Thread-1587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:08:37.715 [DEBUG] [Thread-1587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:08:37.715 [DEBUG] [Thread-1587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:08:37.718 [DEBUG] [Thread-1587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:08:37.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:08:37.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:08:37.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:08:37.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:08:37.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:08:37.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:08:37.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:08:37.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:08:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:08:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.922283 -999.00  +12.90  22.36     88  +11.10 1 1 1 3 1     0    0 0.73 -50.87 ZNESW 19.6 22.4 139.6 34.1 13.8 -19.7 13.7 -19.4 13.5 -18.1 13.8 -19.1
2025-12-25T00:08:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:08:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:08:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.922283
2025-12-25T00:08:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:08:37.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:08:37.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:08:37.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:08:37.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:08:37.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:08:14', tmtdew=2.18, humidity=86.78, cloud=0.0, wind=32.29, temperature=13.01, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:08:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.17574999999999896, 0.21424999999999983, 0.2822500000000012, 0.18249999999999922, 0.1974999999999998, 0.2892500000000009, 0.2159999999999993, 0.15775000000000006, 0.16549999999999798, 0.17849999999999966, 0.24024999999999963, 0.2134999999999998, 0.29999999999999893, 0.3202499999999997, 0.13899999999999935, 0.18099999999999916, 0.22524999999999906, 0.2635000000000005, 0.17300000000000004, 0.16974999999999874, 0.24999999999999822, 0.19174999999999898, 0.20925000000000082, 0.21274999999999977, 0.3329999999999984, 0.3254999999999999, 0.17125000000000057, 0.1750000000000007, 0.258, 0.1750000000000007, 0.22550000000000026, 0.34800000000000075, 0.8107499999999987], zp_timestamp='2025-12-24T22:06:00')
2025-12-25T00:08:37.745 [DEBUG] [Thread-1587] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:08:37.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:08:37.838 [DEBUG] [Thread-1590] [transport.py] [_log()] starting thread (client mode): 0xb95d7280
2025-12-25T00:08:37.838 [DEBUG] [Thread-1590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:08:37.853 [DEBUG] [Thread-1590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:08:37.853 [INFO] [Thread-1590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:08:37.861 [DEBUG] [Thread-1590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:08:37.861 [DEBUG] [Thread-1590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:08:37.861 [DEBUG] [Thread-1590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:08:37.861 [DEBUG] [Thread-1590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:08:37.861 [DEBUG] [Thread-1590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:08:37.861 [DEBUG] [Thread-1590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] client lang: <none>
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] server lang: <none>
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] kex follows: False
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:08:37.862 [DEBUG] [Thread-1590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:08:37.863 [DEBUG] [Thread-1590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:08:37.863 [DEBUG] [Thread-1590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:08:37.863 [DEBUG] [Thread-1590] [transport.py] [_log()] Compression: none
2025-12-25T00:08:37.863 [DEBUG] [Thread-1590] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:08:37.920 [DEBUG] [Thread-1590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:08:37.920 [DEBUG] [Thread-1590] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:08:37.921 [DEBUG] [Thread-1590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:08:37.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:08:37.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:08:37.979 [DEBUG] [Thread-1590] [transport.py] [_log()] userauth is OK
2025-12-25T00:08:37.980 [DEBUG] [Thread-1590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:08:37.980 [DEBUG] [Thread-1590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:08:37.980 [DEBUG] [Thread-1590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:08:37.980 [DEBUG] [Thread-1590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:08:37.998 [INFO] [Thread-1590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:08:37.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:08:37.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:08:38.819 [DEBUG] [Thread-1590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:08:38.819 [DEBUG] [Thread-1590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:08:38.868 [DEBUG] [Thread-1590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:08:38.868 [DEBUG] [Thread-1590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:08:38.877 [DEBUG] [Thread-1590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:08:38.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:08:38.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:08:38.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:08:38.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:08:38.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:08:38.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:08:38.910 [DEBUG] [Thread-1590] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:08:50.608 [DEBUG] [Thread-1592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:09:05.654 [DEBUG] [Thread-1593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:09:08.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:09:08.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:09:08.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:09:09.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 8, 46), 2.12, 86.85, 0.0, 36.33, 12.98, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:09:09.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:08:46
2025-12-25T00:09:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:09:09.888 [DEBUG] [Thread-1594] [transport.py] [_log()] starting thread (client mode): 0xb957be20
2025-12-25T00:09:09.888 [DEBUG] [Thread-1594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:09:09.908 [DEBUG] [Thread-1594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:09:09.908 [INFO] [Thread-1594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:09:09.911 [DEBUG] [Thread-1594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] client lang: <none>
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] server lang: <none>
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] kex follows: False
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] Compression: none
2025-12-25T00:09:09.912 [DEBUG] [Thread-1594] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:09:09.926 [DEBUG] [Thread-1594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:09:09.926 [DEBUG] [Thread-1594] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:09:09.927 [DEBUG] [Thread-1594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:09:09.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:09:09.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:09:09.929 [DEBUG] [Thread-1594] [transport.py] [_log()] userauth is OK
2025-12-25T00:09:09.929 [DEBUG] [Thread-1594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:09:09.929 [DEBUG] [Thread-1594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:09:09.929 [DEBUG] [Thread-1594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:09:09.929 [DEBUG] [Thread-1594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:09:09.954 [INFO] [Thread-1594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:09:09.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:09:10.570 [DEBUG] [Thread-1594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:09:10.571 [DEBUG] [Thread-1594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:09:10.571 [DEBUG] [Thread-1594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:09:10.612 [DEBUG] [Thread-1594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:09:10.612 [DEBUG] [Thread-1594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:09:10.615 [DEBUG] [Thread-1594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:09:10.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:09:10.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:09:10.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:09:10.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:09:10.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:09:10.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:09:10.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:09:10.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:09:10.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:09:10.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.922630 -999.00  +12.90  33.85     88  +11.00 1 1 2 3 1     0    0 0.76 -47.94 ZNESW 21.0 33.9 142.6 37.3 13.8 -18.8 13.7 -18.3 13.5 -18.0 13.8 -19.0
2025-12-25T00:09:10.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:09:10.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:09:10.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.922630
2025-12-25T00:09:10.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:09:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:09:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:09:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:09:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:09:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:08:46', tmtdew=2.12, humidity=86.85, cloud=0.0, wind=36.33, temperature=12.98, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:08:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.17574999999999896, 0.21424999999999983, 0.2822500000000012, 0.18249999999999922, 0.1974999999999998, 0.2892500000000009, 0.2159999999999993, 0.15775000000000006, 0.16549999999999798, 0.17849999999999966, 0.24024999999999963, 0.2134999999999998, 0.29999999999999893, 0.3202499999999997, 0.13899999999999935, 0.18099999999999916, 0.22524999999999906, 0.2635000000000005, 0.17300000000000004, 0.16974999999999874, 0.24999999999999822, 0.19174999999999898, 0.20925000000000082, 0.21274999999999977, 0.3329999999999984, 0.3254999999999999, 0.17125000000000057, 0.1750000000000007, 0.258, 0.1750000000000007, 0.22550000000000026, 0.34800000000000075, 0.8107499999999987], zp_timestamp='2025-12-24T22:06:00')
2025-12-25T00:09:10.641 [DEBUG] [Thread-1594] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:09:10.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:09:10.731 [DEBUG] [Thread-1597] [transport.py] [_log()] starting thread (client mode): 0xb95d6e90
2025-12-25T00:09:10.732 [DEBUG] [Thread-1597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:09:10.746 [DEBUG] [Thread-1597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:09:10.746 [INFO] [Thread-1597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:09:10.754 [DEBUG] [Thread-1597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:09:10.755 [DEBUG] [Thread-1597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:09:10.755 [DEBUG] [Thread-1597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:09:10.755 [DEBUG] [Thread-1597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:09:10.755 [DEBUG] [Thread-1597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:09:10.755 [DEBUG] [Thread-1597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:09:10.755 [DEBUG] [Thread-1597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] client lang: <none>
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] server lang: <none>
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] kex follows: False
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] Compression: none
2025-12-25T00:09:10.756 [DEBUG] [Thread-1597] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:09:10.815 [DEBUG] [Thread-1597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:09:10.816 [DEBUG] [Thread-1597] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:09:10.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:09:10.817 [DEBUG] [Thread-1597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:09:10.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:09:10.875 [DEBUG] [Thread-1597] [transport.py] [_log()] userauth is OK
2025-12-25T00:09:10.876 [DEBUG] [Thread-1597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:09:10.876 [DEBUG] [Thread-1597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:09:10.876 [DEBUG] [Thread-1597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:09:10.876 [DEBUG] [Thread-1597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:09:10.895 [INFO] [Thread-1597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:09:10.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:09:10.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:09:11.745 [DEBUG] [Thread-1597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:09:11.745 [DEBUG] [Thread-1597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:09:11.793 [DEBUG] [Thread-1597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:09:11.793 [DEBUG] [Thread-1597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:09:11.802 [DEBUG] [Thread-1597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:09:11.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:09:11.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:09: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') -> 00000000
2025-12-25T00:09:11.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:09:11.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:09:11.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:09:11.839 [DEBUG] [Thread-1597] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:09:13.539 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:09:13.540 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:09:18.664 [DEBUG] [Thread-1599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:09:20.687 [DEBUG] [Thread-1600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:09:35.723 [DEBUG] [Thread-1601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:09:41.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:09:41.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:09:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:09:42.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 9, 18), 2.12, 86.85, 0.0, 35.68, 12.98, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:09:42.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:09:18
2025-12-25T00:09:42.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:09:42.826 [DEBUG] [Thread-1602] [transport.py] [_log()] starting thread (client mode): 0xb95d6170
2025-12-25T00:09:42.826 [DEBUG] [Thread-1602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:09:42.846 [DEBUG] [Thread-1602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:09:42.846 [INFO] [Thread-1602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:09:42.849 [DEBUG] [Thread-1602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:09:42.849 [DEBUG] [Thread-1602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:09:42.849 [DEBUG] [Thread-1602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:09:42.849 [DEBUG] [Thread-1602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:09:42.849 [DEBUG] [Thread-1602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] client lang: <none>
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] server lang: <none>
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] kex follows: False
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:09:42.850 [DEBUG] [Thread-1602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:09:42.851 [DEBUG] [Thread-1602] [transport.py] [_log()] Compression: none
2025-12-25T00:09:42.851 [DEBUG] [Thread-1602] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:09:42.869 [DEBUG] [Thread-1602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:09:42.869 [DEBUG] [Thread-1602] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:09:42.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:09:42.870 [DEBUG] [Thread-1602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:09:42.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:09:42.872 [DEBUG] [Thread-1602] [transport.py] [_log()] userauth is OK
2025-12-25T00:09:42.873 [DEBUG] [Thread-1602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:09:42.873 [DEBUG] [Thread-1602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:09:42.873 [DEBUG] [Thread-1602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:09:42.873 [DEBUG] [Thread-1602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:09:42.898 [INFO] [Thread-1602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:09:42.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:09:43.658 [DEBUG] [Thread-1602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:09:43.658 [DEBUG] [Thread-1602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:09:43.658 [DEBUG] [Thread-1602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:09:43.699 [DEBUG] [Thread-1602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:09:43.699 [DEBUG] [Thread-1602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:09:43.702 [DEBUG] [Thread-1602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:09:43.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:09:43.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:09:43.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:09:43.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:09:43.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:09:43.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:09:43.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:09:43.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:09:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:09:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.922977 -999.00  +12.90  23.94     88  +11.00 1 1 1 3 1     0    0 0.88 -43.99 ZNESW 26.0 23.9 157.4 38.1 13.8 -18.8 13.7 -18.3 13.5 -17.4 13.8 -18.6
2025-12-25T00:09:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:09:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:09:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.922977
2025-12-25T00:09:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:09:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:09:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:09:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:09:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:09:43.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:09:18', tmtdew=2.12, humidity=86.85, cloud=0.0, wind=35.68, temperature=12.98, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:09:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[0.17574999999999896, 0.21424999999999983, 0.2822500000000012, 0.18249999999999922, 0.1974999999999998, 0.2892500000000009, 0.2159999999999993, 0.15775000000000006, 0.16549999999999798, 0.17849999999999966, 0.24024999999999963, 0.2134999999999998, 0.29999999999999893, 0.3202499999999997, 0.13899999999999935, 0.18099999999999916, 0.22524999999999906, 0.2635000000000005, 0.17300000000000004, 0.16974999999999874, 0.24999999999999822, 0.19174999999999898, 0.20925000000000082, 0.21274999999999977, 0.3329999999999984, 0.3254999999999999, 0.17125000000000057, 0.1750000000000007, 0.258, 0.1750000000000007, 0.22550000000000026, 0.34800000000000075, 0.8107499999999987], zp_timestamp='2025-12-24T22:06:00')
2025-12-25T00:09:43.729 [DEBUG] [Thread-1602] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:09:43.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:09:43.823 [DEBUG] [Thread-1605] [transport.py] [_log()] starting thread (client mode): 0xb95d4ee0
2025-12-25T00:09:43.823 [DEBUG] [Thread-1605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:09:43.838 [DEBUG] [Thread-1605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:09:43.838 [INFO] [Thread-1605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:09:43.846 [DEBUG] [Thread-1605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:09:43.846 [DEBUG] [Thread-1605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:09:43.846 [DEBUG] [Thread-1605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:09:43.846 [DEBUG] [Thread-1605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:09:43.846 [DEBUG] [Thread-1605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:09:43.846 [DEBUG] [Thread-1605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] client lang: <none>
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] server lang: <none>
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] kex follows: False
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:09:43.847 [DEBUG] [Thread-1605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:09:43.848 [DEBUG] [Thread-1605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:09:43.848 [DEBUG] [Thread-1605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:09:43.848 [DEBUG] [Thread-1605] [transport.py] [_log()] Compression: none
2025-12-25T00:09:43.848 [DEBUG] [Thread-1605] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:09:43.903 [DEBUG] [Thread-1605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:09:43.903 [DEBUG] [Thread-1605] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:09:43.904 [DEBUG] [Thread-1605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:09:43.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:09:43.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:09:43.959 [DEBUG] [Thread-1605] [transport.py] [_log()] userauth is OK
2025-12-25T00:09:43.959 [DEBUG] [Thread-1605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:09:43.960 [DEBUG] [Thread-1605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:09:43.960 [DEBUG] [Thread-1605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:09:43.960 [DEBUG] [Thread-1605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:09:43.979 [INFO] [Thread-1605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:09:43.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:09:43.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:09:44.785 [DEBUG] [Thread-1605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:09:44.786 [DEBUG] [Thread-1605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:09:44.834 [DEBUG] [Thread-1605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:09:44.834 [DEBUG] [Thread-1605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:09:44.843 [DEBUG] [Thread-1605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:09:44.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:09:44.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:09:44.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:09:44.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:09:44.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:09:44.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:09:44.881 [DEBUG] [Thread-1605] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:09:50.757 [DEBUG] [Thread-1607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:10:05.815 [DEBUG] [Thread-1608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:10:13.741 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:10:13.742 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:10:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:10:14.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:10:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:10:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 9, 50), 2.1, 86.96, 0.0, 33.93, 12.94, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:10:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:09:50
2025-12-25T00:10:15.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:10:15.922 [DEBUG] [Thread-1609] [transport.py] [_log()] starting thread (client mode): 0xb6b027a0
2025-12-25T00:10:15.922 [DEBUG] [Thread-1609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:10:15.942 [DEBUG] [Thread-1609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:10:15.942 [INFO] [Thread-1609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] client lang: <none>
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] server lang: <none>
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] kex follows: False
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] Compression: none
2025-12-25T00:10:15.946 [DEBUG] [Thread-1609] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:10:15.961 [DEBUG] [Thread-1609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:10:15.961 [DEBUG] [Thread-1609] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:10:15.961 [DEBUG] [Thread-1609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:10:15.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:10:15.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:10:15.962 [DEBUG] [Thread-1609] [transport.py] [_log()] userauth is OK
2025-12-25T00:10:15.962 [DEBUG] [Thread-1609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:10:15.962 [DEBUG] [Thread-1609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:10:15.962 [DEBUG] [Thread-1609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:10:15.962 [DEBUG] [Thread-1609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:10:15.971 [INFO] [Thread-1609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:10:15.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:10:16.604 [DEBUG] [Thread-1609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:10:16.604 [DEBUG] [Thread-1609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:10:16.604 [DEBUG] [Thread-1609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:10:16.644 [DEBUG] [Thread-1609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:10:16.644 [DEBUG] [Thread-1609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:10:16.646 [DEBUG] [Thread-1609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:10:16.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:10:16.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:10:16.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:10:16.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:10:16.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:10:16.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:10:16.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:10:16.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:10:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:10:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.923324 -999.00  +12.90  22.86     88  +11.10 1 1 1 3 1     0    0 0.90 -42.99 ZNESW 30.6 22.9 148.4 35.4 13.8 -16.4 13.7 -16.5 13.5 -17.7 13.8 -18.3
2025-12-25T00:10:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.923324
2025-12-25T00:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:09:50', tmtdew=2.1, humidity=86.96, cloud=0.0, wind=33.93, temperature=12.94, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:09:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[0.17574999999999896, 0.21424999999999983, 0.2822500000000012, 0.18249999999999922, 0.1974999999999998, 0.2892500000000009, 0.2159999999999993, 0.15775000000000006, 0.16549999999999798, 0.17849999999999966, 0.24024999999999963, 0.2134999999999998, 0.29999999999999893, 0.3202499999999997, 0.13899999999999935, 0.18099999999999916, 0.22524999999999906, 0.2635000000000005, 0.17300000000000004, 0.16974999999999874, 0.24999999999999822, 0.19174999999999898, 0.20925000000000082, 0.21274999999999977, 0.3329999999999984, 0.3254999999999999, 0.17125000000000057, 0.1750000000000007, 0.258, 0.1750000000000007, 0.22550000000000026, 0.34800000000000075, 0.8107499999999987], zp_timestamp='2025-12-24T22:06:00')
2025-12-25T00:10:16.665 [DEBUG] [Thread-1609] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:10:16.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:10:16.748 [DEBUG] [Thread-1612] [transport.py] [_log()] starting thread (client mode): 0xb6b00af0
2025-12-25T00:10:16.748 [DEBUG] [Thread-1612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:10:16.762 [DEBUG] [Thread-1612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:10:16.762 [INFO] [Thread-1612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] client lang: <none>
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] server lang: <none>
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] kex follows: False
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] Compression: none
2025-12-25T00:10:16.770 [DEBUG] [Thread-1612] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:10:16.825 [DEBUG] [Thread-1612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:10:16.825 [DEBUG] [Thread-1612] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:10:16.825 [DEBUG] [Thread-1612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:10:16.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:10:16.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:10:16.882 [DEBUG] [Thread-1612] [transport.py] [_log()] userauth is OK
2025-12-25T00:10:16.883 [DEBUG] [Thread-1612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:10:16.883 [DEBUG] [Thread-1612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:10:16.883 [DEBUG] [Thread-1612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:10:16.883 [DEBUG] [Thread-1612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:10:16.898 [INFO] [Thread-1612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:10:16.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:10:16.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:10:17.726 [DEBUG] [Thread-1612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:10:17.726 [DEBUG] [Thread-1612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:10:17.774 [DEBUG] [Thread-1612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:10:17.774 [DEBUG] [Thread-1612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:10:17.783 [DEBUG] [Thread-1612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:10:17.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:10:17.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:10:17.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:10:17.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:10:17.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:10:17.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:10:17.814 [DEBUG] [Thread-1612] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:10:18.735 [DEBUG] [Thread-1614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:10:20.851 [DEBUG] [Thread-1615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:10:35.901 [DEBUG] [Thread-1616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:10:47.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:10:47.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:10:47.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
2025-12-25T00:10:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 10, 22), 2.09, 87.01, 0.0, 34.19, 12.96, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:10:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:10:22
2025-12-25T00:10:48.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:10:48.807 [DEBUG] [Thread-1617] [transport.py] [_log()] starting thread (client mode): 0xb957a200
2025-12-25T00:10:48.808 [DEBUG] [Thread-1617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:10:48.827 [DEBUG] [Thread-1617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:10:48.827 [INFO] [Thread-1617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] client lang: <none>
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] server lang: <none>
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] kex follows: False
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] Compression: none
2025-12-25T00:10:48.830 [DEBUG] [Thread-1617] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:10:48.844 [DEBUG] [Thread-1617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:10:48.844 [DEBUG] [Thread-1617] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:10:48.844 [DEBUG] [Thread-1617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:10:48.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:10:48.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:10:48.845 [DEBUG] [Thread-1617] [transport.py] [_log()] userauth is OK
2025-12-25T00:10:48.845 [DEBUG] [Thread-1617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:10:48.845 [DEBUG] [Thread-1617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:10:48.845 [DEBUG] [Thread-1617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:10:48.845 [DEBUG] [Thread-1617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:10:48.860 [INFO] [Thread-1617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:10:48.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:10:49.487 [DEBUG] [Thread-1617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:10:49.488 [DEBUG] [Thread-1617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:10:49.488 [DEBUG] [Thread-1617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:10:49.529 [DEBUG] [Thread-1617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:10:49.529 [DEBUG] [Thread-1617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:10:49.533 [DEBUG] [Thread-1617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:10:49.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:10:49.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:10:49.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:10:49.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:10:49.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:10:49.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:10:49.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:10:49.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:10:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:10:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.923671 -999.00  +12.80  26.22     88  +11.10 1 1 1 3 1     0    0 0.94 -42.21 ZNESW 23.1 26.2 140.2 31.3 13.8 -14.5 13.7 -13.1 13.5 -15.7 13.8 -15.6
2025-12-25T00:10:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:10:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:10:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.923671
2025-12-25T00:10:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:10:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:10:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:10:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:10:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:10:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:10:22', tmtdew=2.09, humidity=87.01, cloud=0.0, wind=34.19, temperature=12.96, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:10:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:09:00')
2025-12-25T00:10:49.560 [DEBUG] [Thread-1617] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:10:49.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:10:49.655 [DEBUG] [Thread-1620] [transport.py] [_log()] starting thread (client mode): 0xb95d6f50
2025-12-25T00:10:49.656 [DEBUG] [Thread-1620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:10:49.670 [DEBUG] [Thread-1620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:10:49.671 [INFO] [Thread-1620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:10:49.678 [DEBUG] [Thread-1620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] client lang: <none>
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] server lang: <none>
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] kex follows: False
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] Compression: none
2025-12-25T00:10:49.679 [DEBUG] [Thread-1620] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:10:49.740 [DEBUG] [Thread-1620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:10:49.741 [DEBUG] [Thread-1620] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:10:49.741 [DEBUG] [Thread-1620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:10:49.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:10:49.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:10:49.800 [DEBUG] [Thread-1620] [transport.py] [_log()] userauth is OK
2025-12-25T00:10:49.800 [DEBUG] [Thread-1620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:10:49.801 [DEBUG] [Thread-1620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:10:49.801 [DEBUG] [Thread-1620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:10:49.801 [DEBUG] [Thread-1620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:10:49.821 [INFO] [Thread-1620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:10:49.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:10:49.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:10:50.659 [DEBUG] [Thread-1620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:10:50.660 [DEBUG] [Thread-1620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:10:50.707 [DEBUG] [Thread-1620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:10:50.708 [DEBUG] [Thread-1620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:10:50.718 [DEBUG] [Thread-1620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:10:50.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:10:50.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:10:50.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:10:50.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:10:50.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:10:50.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:10:50.752 [DEBUG] [Thread-1620] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:10:50.936 [DEBUG] [Thread-1622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:11:05.986 [DEBUG] [Thread-1623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:11:13.942 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:11:13.944 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:11:18.796 [DEBUG] [Thread-1624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:11:20.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:11:20.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:11:20.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:11:21.022 [DEBUG] [Thread-1625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:11:21.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 10, 54), 1.98, 87.55, 0.0, 30.42, 12.84, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:11:21.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:10:54
2025-12-25T00:11:21.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:11:21.706 [DEBUG] [Thread-1626] [transport.py] [_log()] starting thread (client mode): 0xb6b01360
2025-12-25T00:11:21.706 [DEBUG] [Thread-1626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:11:21.726 [DEBUG] [Thread-1626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:11:21.727 [INFO] [Thread-1626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] client lang: <none>
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] server lang: <none>
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] kex follows: False
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] Compression: none
2025-12-25T00:11:21.728 [DEBUG] [Thread-1626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:11:21.738 [DEBUG] [Thread-1626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:11:21.739 [DEBUG] [Thread-1626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:11:21.739 [DEBUG] [Thread-1626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:11:21.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:11:21.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:11:21.741 [DEBUG] [Thread-1626] [transport.py] [_log()] userauth is OK
2025-12-25T00:11:21.741 [DEBUG] [Thread-1626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:11:21.741 [DEBUG] [Thread-1626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:11:21.741 [DEBUG] [Thread-1626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:11:21.741 [DEBUG] [Thread-1626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:11:21.766 [INFO] [Thread-1626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:11:21.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:11:22.389 [DEBUG] [Thread-1626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:11:22.389 [DEBUG] [Thread-1626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:11:22.389 [DEBUG] [Thread-1626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:11:22.430 [DEBUG] [Thread-1626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:11:22.431 [DEBUG] [Thread-1626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:11:22.434 [DEBUG] [Thread-1626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:11:22.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:11:22.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:11:22.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:11:22.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:11:22.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:11:22.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:11:22.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:11:22.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:11:22.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:11:22.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.924366 -999.00  +12.90  25.16     89  +11.10 1 2 1 3 1     0    0 0.98 -40.77 ZNeSW 19.8 25.2 141.2 35.8 13.8 -16.3 13.7 -13.4 13.5 -10.4 13.8 -12.1
2025-12-25T00:11:22.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:11:22.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:11:22.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.924366
2025-12-25T00:11:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:11:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:11:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:11:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:11:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:11:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:10:54', tmtdew=1.98, humidity=87.55, cloud=0.0, wind=30.42, temperature=12.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:11:05.222', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:09:00')
2025-12-25T00:11:22.463 [DEBUG] [Thread-1626] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:11:22.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:11:22.561 [DEBUG] [Thread-1629] [transport.py] [_log()] starting thread (client mode): 0xb95d5a20
2025-12-25T00:11:22.561 [DEBUG] [Thread-1629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:11:22.576 [DEBUG] [Thread-1629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:11:22.577 [INFO] [Thread-1629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:11:22.586 [DEBUG] [Thread-1629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:11:22.587 [DEBUG] [Thread-1629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:11:22.587 [DEBUG] [Thread-1629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:11:22.587 [DEBUG] [Thread-1629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:11:22.587 [DEBUG] [Thread-1629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:11:22.587 [DEBUG] [Thread-1629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:11:22.587 [DEBUG] [Thread-1629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:11:22.587 [DEBUG] [Thread-1629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:11:22.587 [DEBUG] [Thread-1629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:11:22.588 [DEBUG] [Thread-1629] [transport.py] [_log()] client lang: <none>
2025-12-25T00:11:22.588 [DEBUG] [Thread-1629] [transport.py] [_log()] server lang: <none>
2025-12-25T00:11:22.588 [DEBUG] [Thread-1629] [transport.py] [_log()] kex follows: False
2025-12-25T00:11:22.588 [DEBUG] [Thread-1629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:11:22.588 [DEBUG] [Thread-1629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:11:22.588 [DEBUG] [Thread-1629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:11:22.588 [DEBUG] [Thread-1629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:11:22.589 [DEBUG] [Thread-1629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:11:22.589 [DEBUG] [Thread-1629] [transport.py] [_log()] Compression: none
2025-12-25T00:11:22.589 [DEBUG] [Thread-1629] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:11:22.644 [DEBUG] [Thread-1629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:11:22.644 [DEBUG] [Thread-1629] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:11:22.645 [DEBUG] [Thread-1629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:11:22.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:11:22.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:11:22.708 [DEBUG] [Thread-1629] [transport.py] [_log()] userauth is OK
2025-12-25T00:11:22.708 [DEBUG] [Thread-1629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:11:22.708 [DEBUG] [Thread-1629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:11:22.708 [DEBUG] [Thread-1629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:11:22.709 [DEBUG] [Thread-1629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:11:22.730 [INFO] [Thread-1629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:11:22.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:11:22.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:11:23.540 [DEBUG] [Thread-1629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:11:23.540 [DEBUG] [Thread-1629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:11:23.588 [DEBUG] [Thread-1629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:11:23.588 [DEBUG] [Thread-1629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:11:23.597 [DEBUG] [Thread-1629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:11:23.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:11:23.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:11:23.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:11:23.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:11:23.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:11:23.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:11:23.632 [DEBUG] [Thread-1629] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:11:36.053 [DEBUG] [Thread-1631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:11:51.103 [DEBUG] [Thread-1632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:11:53.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:11:53.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:11:53.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:11:54.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 11, 26), 1.97, 87.63, 0.0, 30.61, 12.84, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:11:54.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:11:26
2025-12-25T00:11:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:11:54.604 [DEBUG] [Thread-1633] [transport.py] [_log()] starting thread (client mode): 0xb95d77f0
2025-12-25T00:11:54.604 [DEBUG] [Thread-1633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:11:54.623 [DEBUG] [Thread-1633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:11:54.624 [INFO] [Thread-1633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] client lang: <none>
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] server lang: <none>
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] kex follows: False
2025-12-25T00:11:54.627 [DEBUG] [Thread-1633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:11:54.628 [DEBUG] [Thread-1633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:11:54.628 [DEBUG] [Thread-1633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:11:54.628 [DEBUG] [Thread-1633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:11:54.628 [DEBUG] [Thread-1633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:11:54.628 [DEBUG] [Thread-1633] [transport.py] [_log()] Compression: none
2025-12-25T00:11:54.628 [DEBUG] [Thread-1633] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:11:54.644 [DEBUG] [Thread-1633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:11:54.644 [DEBUG] [Thread-1633] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:11:54.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:11:54.645 [DEBUG] [Thread-1633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:11:54.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:11:54.647 [DEBUG] [Thread-1633] [transport.py] [_log()] userauth is OK
2025-12-25T00:11:54.647 [DEBUG] [Thread-1633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:11:54.647 [DEBUG] [Thread-1633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:11:54.647 [DEBUG] [Thread-1633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:11:54.647 [DEBUG] [Thread-1633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:11:54.666 [INFO] [Thread-1633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:11:54.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:11:55.299 [DEBUG] [Thread-1633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:11:55.299 [DEBUG] [Thread-1633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:11:55.299 [DEBUG] [Thread-1633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:11:55.340 [DEBUG] [Thread-1633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:11:55.340 [DEBUG] [Thread-1633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:11:55.343 [DEBUG] [Thread-1633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:11:55.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:11:55.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:11:55.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:11:55.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:11:55.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:11:55.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:11:55.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:11:55.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:11:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:11:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.924713 -999.00  +12.80  23.72     89  +11.10 1 2 1 3 1     0    0 0.96 -40.50 zN.sW 23.3 23.7 165.8 27.5 13.8 -18.5 13.7 -18.6 13.5 -16.0 13.8 -18.1
2025-12-25T00:11:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:11:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:11:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.924713
2025-12-25T00:11:55.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:11:55.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:11:55.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:11:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:11:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:11:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:11:26', tmtdew=1.97, humidity=87.63, cloud=0.0, wind=30.61, temperature=12.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:11:35.203', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:09:00')
2025-12-25T00:11:55.370 [DEBUG] [Thread-1633] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:11:55.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:11:55.467 [DEBUG] [Thread-1636] [transport.py] [_log()] starting thread (client mode): 0xb95d6f20
2025-12-25T00:11:55.467 [DEBUG] [Thread-1636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:11:55.481 [DEBUG] [Thread-1636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:11:55.481 [INFO] [Thread-1636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:11:55.488 [DEBUG] [Thread-1636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] client lang: <none>
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] server lang: <none>
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] kex follows: False
2025-12-25T00:11:55.489 [DEBUG] [Thread-1636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:11:55.490 [DEBUG] [Thread-1636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:11:55.490 [DEBUG] [Thread-1636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:11:55.490 [DEBUG] [Thread-1636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:11:55.490 [DEBUG] [Thread-1636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:11:55.490 [DEBUG] [Thread-1636] [transport.py] [_log()] Compression: none
2025-12-25T00:11:55.490 [DEBUG] [Thread-1636] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:11:55.547 [DEBUG] [Thread-1636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:11:55.547 [DEBUG] [Thread-1636] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:11:55.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:11:55.548 [DEBUG] [Thread-1636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:11:55.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:11:55.607 [DEBUG] [Thread-1636] [transport.py] [_log()] userauth is OK
2025-12-25T00:11:55.607 [DEBUG] [Thread-1636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:11:55.607 [DEBUG] [Thread-1636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:11:55.608 [DEBUG] [Thread-1636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:11:55.608 [DEBUG] [Thread-1636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:11:55.627 [INFO] [Thread-1636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:11:55.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:11:55.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:11:56.426 [DEBUG] [Thread-1636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:11:56.426 [DEBUG] [Thread-1636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:11:56.474 [DEBUG] [Thread-1636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:11:56.474 [DEBUG] [Thread-1636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:11:56.484 [DEBUG] [Thread-1636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:11:56.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:11:56.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:11:56.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:11:56.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:11:56.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:11:56.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:11:56.528 [DEBUG] [Thread-1636] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:12:06.138 [DEBUG] [Thread-1638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:12:14.143 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:12:14.144 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:12:18.852 [DEBUG] [Thread-1639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:12:21.187 [DEBUG] [Thread-1640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:12:26.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:12:26.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:12:26.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:12:27.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 11, 58), 1.96, 87.7, 0.0, 27.46, 12.88, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:12:27.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:11:58
2025-12-25T00:12:27.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:12:27.536 [DEBUG] [Thread-1641] [transport.py] [_log()] starting thread (client mode): 0xb957b1f0
2025-12-25T00:12:27.536 [DEBUG] [Thread-1641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:12:27.555 [DEBUG] [Thread-1641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:12:27.555 [INFO] [Thread-1641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] client lang: <none>
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] server lang: <none>
2025-12-25T00:12:27.559 [DEBUG] [Thread-1641] [transport.py] [_log()] kex follows: False
2025-12-25T00:12:27.560 [DEBUG] [Thread-1641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:12:27.560 [DEBUG] [Thread-1641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:12:27.560 [DEBUG] [Thread-1641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:12:27.560 [DEBUG] [Thread-1641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:12:27.560 [DEBUG] [Thread-1641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:12:27.560 [DEBUG] [Thread-1641] [transport.py] [_log()] Compression: none
2025-12-25T00:12:27.560 [DEBUG] [Thread-1641] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:12:27.576 [DEBUG] [Thread-1641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:12:27.577 [DEBUG] [Thread-1641] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:12:27.577 [DEBUG] [Thread-1641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:12:27.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:12:27.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:12:27.579 [DEBUG] [Thread-1641] [transport.py] [_log()] userauth is OK
2025-12-25T00:12:27.579 [DEBUG] [Thread-1641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:12:27.579 [DEBUG] [Thread-1641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:12:27.579 [DEBUG] [Thread-1641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:12:27.580 [DEBUG] [Thread-1641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:12:27.595 [INFO] [Thread-1641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:12:27.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:12:28.244 [DEBUG] [Thread-1641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:12:28.244 [DEBUG] [Thread-1641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:12:28.245 [DEBUG] [Thread-1641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:12:28.286 [DEBUG] [Thread-1641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:12:28.286 [DEBUG] [Thread-1641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:12:28.289 [DEBUG] [Thread-1641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:12:28.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:12:28.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:12:28.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:12:28.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:12:28.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:12:28.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:12:28.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:12:28.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:12:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:12:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.925060 -999.00  +12.80  30.38     89  +11.10 1 2 2 3 1     0    0 0.96 -39.25 zN.sW 26.6 30.4 145.0 36.2 13.8 -16.9 13.6 -16.0 13.5 -16.5 13.8 -16.8
2025-12-25T00:12:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:12:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:12:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.925060
2025-12-25T00:12:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:12:28.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:12:28.313 [DEBUG] [Thread-1641] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:12:28.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:12:28.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:12:28.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:12:28.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:11:58', tmtdew=1.96, humidity=87.7, cloud=0.0, wind=27.46, temperature=12.88, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:12:05.184', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:09:00')
2025-12-25T00:12:28.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:12:28.415 [DEBUG] [Thread-1644] [transport.py] [_log()] starting thread (client mode): 0xb957acb0
2025-12-25T00:12:28.415 [DEBUG] [Thread-1644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:12:28.429 [DEBUG] [Thread-1644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:12:28.429 [INFO] [Thread-1644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] client lang: <none>
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] server lang: <none>
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] kex follows: False
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] Compression: none
2025-12-25T00:12:28.437 [DEBUG] [Thread-1644] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:12:28.495 [DEBUG] [Thread-1644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:12:28.496 [DEBUG] [Thread-1644] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:12:28.497 [DEBUG] [Thread-1644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:12:28.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:12:28.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:12:28.550 [DEBUG] [Thread-1644] [transport.py] [_log()] userauth is OK
2025-12-25T00:12:28.551 [DEBUG] [Thread-1644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:12:28.551 [DEBUG] [Thread-1644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:12:28.551 [DEBUG] [Thread-1644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:12:28.551 [DEBUG] [Thread-1644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:12:28.573 [INFO] [Thread-1644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:12:28.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:12:28.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:12:29.430 [DEBUG] [Thread-1644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:12:29.430 [DEBUG] [Thread-1644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:12:29.478 [DEBUG] [Thread-1644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:12:29.478 [DEBUG] [Thread-1644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:12:29.487 [DEBUG] [Thread-1644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:12:29.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:12:29.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:12:29.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:12:29.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:12:29.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:12:29.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:12:29.522 [DEBUG] [Thread-1644] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:12:36.221 [DEBUG] [Thread-1646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:12:51.269 [DEBUG] [Thread-1647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:12:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:12:59.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:12:59.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:13:00.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 12, 31), 1.95, 87.75, 0.0, 28.8, 12.86, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:13:00.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:12:31
2025-12-25T00:13:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:13:00.513 [DEBUG] [Thread-1648] [transport.py] [_log()] starting thread (client mode): 0xb6b02860
2025-12-25T00:13:00.513 [DEBUG] [Thread-1648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:13:00.533 [DEBUG] [Thread-1648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:13:00.534 [INFO] [Thread-1648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:13:00.537 [DEBUG] [Thread-1648] [transport.py] [_log()] client lang: <none>
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] server lang: <none>
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] kex follows: False
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] Compression: none
2025-12-25T00:13:00.538 [DEBUG] [Thread-1648] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:13:00.556 [DEBUG] [Thread-1648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:13:00.557 [DEBUG] [Thread-1648] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:13:00.558 [DEBUG] [Thread-1648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:13:00.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:13:00.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:13:00.561 [DEBUG] [Thread-1648] [transport.py] [_log()] userauth is OK
2025-12-25T00:13:00.561 [DEBUG] [Thread-1648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:13:00.561 [DEBUG] [Thread-1648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:13:00.561 [DEBUG] [Thread-1648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:13:00.561 [DEBUG] [Thread-1648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:13:00.602 [INFO] [Thread-1648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:13:00.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:13:01.235 [DEBUG] [Thread-1648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:13:01.236 [DEBUG] [Thread-1648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:13:01.236 [DEBUG] [Thread-1648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:13:01.276 [DEBUG] [Thread-1648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:13:01.276 [DEBUG] [Thread-1648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:13:01.280 [DEBUG] [Thread-1648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:13:01.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:13:01.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:13:01.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:13:01.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:13:01.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:13:01.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:13:01.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:13:01.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:13:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:13:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.925408 -999.00  +12.80  25.91     89  +11.00 1 2 1 3 1     0    0 0.95 -38.27 ZnESw 20.0 25.9 142.8 34.9 13.8 -15.6 13.6 -15.6 13.4 -14.9 13.8 -16.6
2025-12-25T00:13:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:13:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:13:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.925408
2025-12-25T00:13:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:13:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:13:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:13:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:13:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:13:01.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:12:31', tmtdew=1.95, humidity=87.75, cloud=0.0, wind=28.8, temperature=12.86, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:12:35.251', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:09:00')
2025-12-25T00:13:01.307 [DEBUG] [Thread-1648] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:13:01.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:13:01.400 [DEBUG] [Thread-1651] [transport.py] [_log()] starting thread (client mode): 0xb6b01db0
2025-12-25T00:13:01.400 [DEBUG] [Thread-1651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:13:01.415 [DEBUG] [Thread-1651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:13:01.415 [INFO] [Thread-1651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:13:01.423 [DEBUG] [Thread-1651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:13:01.423 [DEBUG] [Thread-1651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:13:01.423 [DEBUG] [Thread-1651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:13:01.423 [DEBUG] [Thread-1651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] client lang: <none>
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] server lang: <none>
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] kex follows: False
2025-12-25T00:13:01.424 [DEBUG] [Thread-1651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:13:01.425 [DEBUG] [Thread-1651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:13:01.425 [DEBUG] [Thread-1651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:13:01.425 [DEBUG] [Thread-1651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:13:01.425 [DEBUG] [Thread-1651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:13:01.425 [DEBUG] [Thread-1651] [transport.py] [_log()] Compression: none
2025-12-25T00:13:01.425 [DEBUG] [Thread-1651] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:13:01.481 [DEBUG] [Thread-1651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:13:01.482 [DEBUG] [Thread-1651] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:13:01.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:13:01.482 [DEBUG] [Thread-1651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:13:01.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:13:01.538 [DEBUG] [Thread-1651] [transport.py] [_log()] userauth is OK
2025-12-25T00:13:01.539 [DEBUG] [Thread-1651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:13:01.539 [DEBUG] [Thread-1651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:13:01.539 [DEBUG] [Thread-1651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:13:01.539 [DEBUG] [Thread-1651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:13:01.557 [INFO] [Thread-1651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:13:01.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:13:01.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:13:02.439 [DEBUG] [Thread-1651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:13:02.439 [DEBUG] [Thread-1651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:13:02.487 [DEBUG] [Thread-1651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:13:02.487 [DEBUG] [Thread-1651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:13:02.496 [DEBUG] [Thread-1651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:13:02.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:13:02.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:13:02.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:13:02.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:13:02.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:13:02.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:13:02.531 [DEBUG] [Thread-1651] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:13:06.301 [DEBUG] [Thread-1653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:13:14.346 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:13:14.347 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:13:18.910 [DEBUG] [Thread-1654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:13:21.353 [DEBUG] [Thread-1655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:13:32.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:13:32.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:13:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:13:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 13, 3), 1.95, 87.71, 0.0, 29.94, 12.81, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:13:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:13:03
2025-12-25T00:13:33.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:13:33.533 [DEBUG] [Thread-1656] [transport.py] [_log()] starting thread (client mode): 0xb957ad10
2025-12-25T00:13:33.533 [DEBUG] [Thread-1656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:13:33.544 [DEBUG] [Thread-1656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:13:33.544 [INFO] [Thread-1656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:13:33.545 [DEBUG] [Thread-1656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:13:33.545 [DEBUG] [Thread-1656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:13:33.545 [DEBUG] [Thread-1656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:13:33.545 [DEBUG] [Thread-1656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] client lang: <none>
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] server lang: <none>
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] kex follows: False
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] Compression: none
2025-12-25T00:13:33.546 [DEBUG] [Thread-1656] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:13:33.554 [DEBUG] [Thread-1656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:13:33.554 [DEBUG] [Thread-1656] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:13:33.554 [DEBUG] [Thread-1656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:13:33.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:13:33.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:13:33.555 [DEBUG] [Thread-1656] [transport.py] [_log()] userauth is OK
2025-12-25T00:13:33.555 [DEBUG] [Thread-1656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:13:33.556 [DEBUG] [Thread-1656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:13:33.556 [DEBUG] [Thread-1656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:13:33.556 [DEBUG] [Thread-1656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:13:33.569 [INFO] [Thread-1656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:13:33.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:13:34.166 [DEBUG] [Thread-1656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:13:34.166 [DEBUG] [Thread-1656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:13:34.166 [DEBUG] [Thread-1656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:13:34.207 [DEBUG] [Thread-1656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:13:34.207 [DEBUG] [Thread-1656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:13:34.210 [DEBUG] [Thread-1656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:13:34.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:13:34.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:13:34.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:13:34.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:13:34.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:13:34.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:13:34.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:13:34.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:13:34.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:13:34.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.925755 -999.00  +12.80  19.37     89  +11.00 1 2 1 3 1     0    0 1.12 -33.79 ZnESw 23.0 19.4 147.8 27.8 13.8 -13.9 13.6 -12.7 13.4 -13.9 13.8 -13.0
2025-12-25T00:13:34.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:13:34.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:13:34.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.925755
2025-12-25T00:13:34.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:13:34.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:13:34.235 [DEBUG] [Thread-1656] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:13:34.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:13:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:13:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:13:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:13:03', tmtdew=1.95, humidity=87.71, cloud=0.0, wind=29.94, temperature=12.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:13:05.232', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:09:00')
2025-12-25T00:13:34.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:13:34.328 [DEBUG] [Thread-1659] [transport.py] [_log()] starting thread (client mode): 0xb95794e0
2025-12-25T00:13:34.329 [DEBUG] [Thread-1659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:13:34.343 [DEBUG] [Thread-1659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:13:34.343 [INFO] [Thread-1659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:13:34.350 [DEBUG] [Thread-1659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] client lang: <none>
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] server lang: <none>
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] kex follows: False
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] Compression: none
2025-12-25T00:13:34.351 [DEBUG] [Thread-1659] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:13:34.410 [DEBUG] [Thread-1659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:13:34.411 [DEBUG] [Thread-1659] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:13:34.411 [DEBUG] [Thread-1659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:13:34.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:13:34.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:13:34.467 [DEBUG] [Thread-1659] [transport.py] [_log()] userauth is OK
2025-12-25T00:13:34.468 [DEBUG] [Thread-1659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:13:34.468 [DEBUG] [Thread-1659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:13:34.468 [DEBUG] [Thread-1659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:13:34.468 [DEBUG] [Thread-1659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:13:34.486 [INFO] [Thread-1659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:13:34.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:13:34.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:13:35.291 [DEBUG] [Thread-1659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:13:35.291 [DEBUG] [Thread-1659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:13:35.339 [DEBUG] [Thread-1659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:13:35.340 [DEBUG] [Thread-1659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:13:35.349 [DEBUG] [Thread-1659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:13:35.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:13:35.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:13:35.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:13:35.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:13:35.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:13:35.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:13:35.391 [DEBUG] [Thread-1659] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:13:36.388 [DEBUG] [Thread-1661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:13:51.430 [DEBUG] [Thread-1662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:14:05.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:14:05.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:14:05.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
2025-12-25T00:14:06.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 13, 35), 1.94, 88.26, 0.0, 31.62, 12.88, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:14:06.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:13:35
2025-12-25T00:14:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:14:06.439 [DEBUG] [Thread-1663] [transport.py] [_log()] starting thread (client mode): 0xb95d5b10
2025-12-25T00:14:06.440 [DEBUG] [Thread-1663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:14:06.455 [DEBUG] [Thread-1663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:14:06.455 [INFO] [Thread-1663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] client lang: <none>
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] server lang: <none>
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] kex follows: False
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] Compression: none
2025-12-25T00:14:06.457 [DEBUG] [Thread-1663] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:14:06.467 [DEBUG] [Thread-1665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:14:06.471 [DEBUG] [Thread-1663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:14:06.471 [DEBUG] [Thread-1663] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:14:06.471 [DEBUG] [Thread-1663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:14:06.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:14:06.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:14:06.472 [DEBUG] [Thread-1663] [transport.py] [_log()] userauth is OK
2025-12-25T00:14:06.472 [DEBUG] [Thread-1663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:14:06.472 [DEBUG] [Thread-1663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:14:06.472 [DEBUG] [Thread-1663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:14:06.472 [DEBUG] [Thread-1663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:14:06.480 [INFO] [Thread-1663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:14:06.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:14:07.136 [DEBUG] [Thread-1663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:14:07.136 [DEBUG] [Thread-1663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:14:07.136 [DEBUG] [Thread-1663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:14:07.177 [DEBUG] [Thread-1663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:14:07.177 [DEBUG] [Thread-1663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:14:07.180 [DEBUG] [Thread-1663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:14:07.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:14:07.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:14:07.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:14:07.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:14:07.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:14:07.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:14:07.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.926102 -999.00  +12.80  19.38     89  +11.10 1 2 1 3 1     0    0 1.09 -33.76 ZnESw 18.5 19.4 146.4 26.4 13.7 -18.5 13.6 -19.1 13.4 -14.7 13.8 -17.3
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.926102
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:14:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:13:35', tmtdew=1.94, humidity=88.26, cloud=0.0, wind=31.62, temperature=12.88, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:13:35.213', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:12:00')
2025-12-25T00:14:07.201 [DEBUG] [Thread-1663] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:14:07.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:14:07.284 [DEBUG] [Thread-1667] [transport.py] [_log()] starting thread (client mode): 0xb6b037c0
2025-12-25T00:14:07.285 [DEBUG] [Thread-1667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:14:07.299 [DEBUG] [Thread-1667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:14:07.299 [INFO] [Thread-1667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:14:07.306 [DEBUG] [Thread-1667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] client lang: <none>
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] server lang: <none>
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] kex follows: False
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] Compression: none
2025-12-25T00:14:07.307 [DEBUG] [Thread-1667] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:14:07.361 [DEBUG] [Thread-1667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:14:07.362 [DEBUG] [Thread-1667] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:14:07.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:14:07.362 [DEBUG] [Thread-1667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:14:07.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:14:07.418 [DEBUG] [Thread-1667] [transport.py] [_log()] userauth is OK
2025-12-25T00:14:07.418 [DEBUG] [Thread-1667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:14:07.419 [DEBUG] [Thread-1667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:14:07.419 [DEBUG] [Thread-1667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:14:07.419 [DEBUG] [Thread-1667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:14:07.434 [INFO] [Thread-1667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:14:07.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:14:07.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:14:08.297 [DEBUG] [Thread-1667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:14:08.297 [DEBUG] [Thread-1667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:14:08.344 [DEBUG] [Thread-1667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:14:08.344 [DEBUG] [Thread-1667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:14:08.352 [DEBUG] [Thread-1667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:14:08.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:14:08.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:14:08.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:14:08.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:14:08.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:14:08.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:14:08.384 [DEBUG] [Thread-1667] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:14:14.571 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:14:14.573 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:14:18.978 [DEBUG] [Thread-1669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:14:21.500 [DEBUG] [Thread-1670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:14:36.548 [DEBUG] [Thread-1671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:14:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:14:38.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:14:38.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:14:39.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 14, 7), 1.93, 88.33, 0.0, 30.23, 12.79, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:14:39.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:14:07
2025-12-25T00:14:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:14:39.347 [DEBUG] [Thread-1672] [transport.py] [_log()] starting thread (client mode): 0xbbfceb30
2025-12-25T00:14:39.347 [DEBUG] [Thread-1672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:14:39.361 [DEBUG] [Thread-1672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:14:39.361 [INFO] [Thread-1672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:14:39.372 [DEBUG] [Thread-1672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:14:39.372 [DEBUG] [Thread-1672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:14:39.372 [DEBUG] [Thread-1672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:14:39.372 [DEBUG] [Thread-1672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] client lang: <none>
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] server lang: <none>
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] kex follows: False
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] Compression: none
2025-12-25T00:14:39.373 [DEBUG] [Thread-1672] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:14:39.385 [DEBUG] [Thread-1672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:14:39.386 [DEBUG] [Thread-1672] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:14:39.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:14:39.387 [DEBUG] [Thread-1672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:14:39.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:14:39.389 [DEBUG] [Thread-1672] [transport.py] [_log()] userauth is OK
2025-12-25T00:14:39.389 [DEBUG] [Thread-1672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:14:39.389 [DEBUG] [Thread-1672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:14:39.389 [DEBUG] [Thread-1672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:14:39.390 [DEBUG] [Thread-1672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:14:39.409 [INFO] [Thread-1672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:14:39.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:14:40.050 [DEBUG] [Thread-1672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:14:40.050 [DEBUG] [Thread-1672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:14:40.050 [DEBUG] [Thread-1672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:14:40.091 [DEBUG] [Thread-1672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:14:40.091 [DEBUG] [Thread-1672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:14:40.093 [DEBUG] [Thread-1672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:14:40.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:14:40.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:14:40.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:14:40.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:14:40.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:14:40.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:14:40.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.926796 -999.00  +12.80  24.30     89  +11.00 1 2 1 3 1     0    0 1.08 -33.70 ZN.sW 21.6 24.3 147.9 31.6 13.8 -12.3 13.6 -13.5 13.4 -14.7 13.8 -14.9
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.926796
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:14:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:14:07', tmtdew=1.93, humidity=88.33, cloud=0.0, wind=30.23, temperature=12.79, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:14:35.174', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:12:00')
2025-12-25T00:14:40.113 [DEBUG] [Thread-1672] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:14:40.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:14:40.196 [DEBUG] [Thread-1675] [transport.py] [_log()] starting thread (client mode): 0xb9579810
2025-12-25T00:14:40.197 [DEBUG] [Thread-1675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:14:40.211 [DEBUG] [Thread-1675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:14:40.211 [INFO] [Thread-1675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] client lang: <none>
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] server lang: <none>
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] kex follows: False
2025-12-25T00:14:40.218 [DEBUG] [Thread-1675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:14:40.219 [DEBUG] [Thread-1675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:14:40.219 [DEBUG] [Thread-1675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:14:40.219 [DEBUG] [Thread-1675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:14:40.219 [DEBUG] [Thread-1675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:14:40.219 [DEBUG] [Thread-1675] [transport.py] [_log()] Compression: none
2025-12-25T00:14:40.219 [DEBUG] [Thread-1675] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:14:40.273 [DEBUG] [Thread-1675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:14:40.273 [DEBUG] [Thread-1675] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:14:40.274 [DEBUG] [Thread-1675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:14:40.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:14:40.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:14:40.330 [DEBUG] [Thread-1675] [transport.py] [_log()] userauth is OK
2025-12-25T00:14:40.330 [DEBUG] [Thread-1675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:14:40.331 [DEBUG] [Thread-1675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:14:40.331 [DEBUG] [Thread-1675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:14:40.331 [DEBUG] [Thread-1675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:14:40.346 [INFO] [Thread-1675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:14:40.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:14:40.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:14:41.148 [DEBUG] [Thread-1675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:14:41.149 [DEBUG] [Thread-1675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:14:41.196 [DEBUG] [Thread-1675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:14:41.196 [DEBUG] [Thread-1675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:14:41.205 [DEBUG] [Thread-1675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:14:41.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:14:41.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:14:41.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:14:41.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:14:41.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:14:41.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:14:41.237 [DEBUG] [Thread-1675] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:14:51.580 [DEBUG] [Thread-1677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:15:06.641 [DEBUG] [Thread-1678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:15:10.375 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:15:11.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:15:11.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:15:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:15:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 14, 39), 1.87, 88.38, 0.0, 34.09, 12.79, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:15:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:14:39
2025-12-25T00:15:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:15:12.275 [DEBUG] [Thread-1679] [transport.py] [_log()] starting thread (client mode): 0xbbfcd9c0
2025-12-25T00:15:12.275 [DEBUG] [Thread-1679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:15:12.294 [DEBUG] [Thread-1679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:15:12.294 [INFO] [Thread-1679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] client lang: <none>
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] server lang: <none>
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] kex follows: False
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:15:12.297 [DEBUG] [Thread-1679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:15:12.298 [DEBUG] [Thread-1679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:15:12.298 [DEBUG] [Thread-1679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:15:12.298 [DEBUG] [Thread-1679] [transport.py] [_log()] Compression: none
2025-12-25T00:15:12.298 [DEBUG] [Thread-1679] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:15:12.313 [DEBUG] [Thread-1679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:15:12.313 [DEBUG] [Thread-1679] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:15:12.313 [DEBUG] [Thread-1679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:15:12.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:15:12.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:15:12.314 [DEBUG] [Thread-1679] [transport.py] [_log()] userauth is OK
2025-12-25T00:15:12.314 [DEBUG] [Thread-1679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:15:12.314 [DEBUG] [Thread-1679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:15:12.314 [DEBUG] [Thread-1679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:15:12.314 [DEBUG] [Thread-1679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:15:12.344 [INFO] [Thread-1679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:15:12.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:15:13.146 [DEBUG] [Thread-1679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:15:13.146 [DEBUG] [Thread-1679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:15:13.146 [DEBUG] [Thread-1679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:15:13.186 [DEBUG] [Thread-1679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:15:13.186 [DEBUG] [Thread-1679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:15:13.188 [DEBUG] [Thread-1679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:15:13.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:15:13.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:15:13.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:15:13.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:15:13.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:15:13.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:15:13.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:15:13.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:15:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:15:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.926796 -999.00  +12.80  24.30     89  +11.00 1 2 1 3 1     0    0 1.08 -33.70 ZN.sW 21.6 24.3 147.9 31.6 13.8 -12.3 13.6 -13.5 13.4 -14.7 13.8 -14.9
2025-12-25T00:15:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:15:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:15:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.926796
2025-12-25T00:15:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:15:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:15:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:15:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:15:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:15:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:14:39', tmtdew=1.87, humidity=88.38, cloud=0.0, wind=34.09, temperature=12.79, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:14:35.174', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:12:00')
2025-12-25T00:15:13.206 [DEBUG] [Thread-1679] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:15:13.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:15:13.293 [DEBUG] [Thread-1682] [transport.py] [_log()] starting thread (client mode): 0xbbfcd720
2025-12-25T00:15:13.293 [DEBUG] [Thread-1682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:15:13.311 [DEBUG] [Thread-1682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:15:13.311 [INFO] [Thread-1682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] client lang: <none>
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] server lang: <none>
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] kex follows: False
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] Compression: none
2025-12-25T00:15:13.319 [DEBUG] [Thread-1682] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:15:13.378 [DEBUG] [Thread-1682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:15:13.378 [DEBUG] [Thread-1682] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:15:13.378 [DEBUG] [Thread-1682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:15:13.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:15:13.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:15:13.434 [DEBUG] [Thread-1682] [transport.py] [_log()] userauth is OK
2025-12-25T00:15:13.434 [DEBUG] [Thread-1682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:15:13.434 [DEBUG] [Thread-1682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:15:13.434 [DEBUG] [Thread-1682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:15:13.434 [DEBUG] [Thread-1682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:15:13.449 [INFO] [Thread-1682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:15:13.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:15:13.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:15:14.259 [DEBUG] [Thread-1682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:15:14.259 [DEBUG] [Thread-1682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:15:14.308 [DEBUG] [Thread-1682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:15:14.308 [DEBUG] [Thread-1682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:15:14.317 [DEBUG] [Thread-1682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:15:14.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:15:14.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:15:14.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
2025-12-25T00:15:14.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:15:14.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:15:14.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:15:14.354 [DEBUG] [Thread-1682] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:15:14.774 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:15:14.775 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:15:19.035 [DEBUG] [Thread-1684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:15:21.675 [DEBUG] [Thread-1685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:15:36.727 [DEBUG] [Thread-1686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:15:44.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:15:44.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:15:44.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:15:45.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 15, 11), 1.87, 88.38, 0.0, 36.42, 12.76, 1, 1, 2, 2, 0, 0),)
2025-12-25T00:15:45.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:15:11
2025-12-25T00:15:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:15:45.377 [DEBUG] [Thread-1687] [transport.py] [_log()] starting thread (client mode): 0xb6b02380
2025-12-25T00:15:45.378 [DEBUG] [Thread-1687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:15:45.398 [DEBUG] [Thread-1687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:15:45.398 [INFO] [Thread-1687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:15:45.401 [DEBUG] [Thread-1687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] client lang: <none>
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] server lang: <none>
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] kex follows: False
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] Compression: none
2025-12-25T00:15:45.402 [DEBUG] [Thread-1687] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:15:45.417 [DEBUG] [Thread-1687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:15:45.417 [DEBUG] [Thread-1687] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:15:45.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:15:45.417 [DEBUG] [Thread-1687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:15:45.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:15:45.418 [DEBUG] [Thread-1687] [transport.py] [_log()] userauth is OK
2025-12-25T00:15:45.418 [DEBUG] [Thread-1687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:15:45.418 [DEBUG] [Thread-1687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:15:45.418 [DEBUG] [Thread-1687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:15:45.418 [DEBUG] [Thread-1687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:15:45.435 [INFO] [Thread-1687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:15:45.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:15:46.194 [DEBUG] [Thread-1687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:15:46.194 [DEBUG] [Thread-1687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:15:46.195 [DEBUG] [Thread-1687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:15:46.235 [DEBUG] [Thread-1687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:15:46.235 [DEBUG] [Thread-1687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:15:46.237 [DEBUG] [Thread-1687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:15:46.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:15:46.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:15:46.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:15:46.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:15:46.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:15:46.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:15:46.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.927143 -999.00  +12.70  26.47     89  +11.00 1 2 1 3 1     0    0 1.00 -35.79 ZNeSW 23.8 26.5 157.0 34.7 13.7 -14.6 13.6 -13.9 13.4 -11.9 13.8 -12.3
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.927143
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:15:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:15:11', tmtdew=1.87, humidity=88.38, cloud=0.0, wind=36.42, temperature=12.76, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:15:05.155', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.38424999999999976, 0.47724999999999973, 0.28699999999999903, 0.23349999999999937, 0.3472500000000007, 0.2524999999999995, 0.23625000000000007, 0.23749999999999893, 0.48600000000000065, 0.6037499999999998, 0.2759999999999998, 0.34999999999999964, 0.3097499999999993, 0.15199999999999925, 0.2029999999999994, 0.2612500000000004, 1.1144999999999996, 0.4239999999999995, 0.16224999999999845, 0.31299999999999883, 0.23824999999999896, 0.23525000000000063, 0.21974999999999945, 0.4294999999999991, 1.3315000000000001, 0.4867499999999998, 0.16050000000000075, 0.3070000000000004, 0.1725000000000012, 0.1960000000000015, 0.2270000000000003, 0.7437499999999995], zp_timestamp='2025-12-24T22:12:00')
2025-12-25T00:15:46.254 [DEBUG] [Thread-1687] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:15:46.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:15:51.768 [DEBUG] [Thread-1690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:16:06.816 [DEBUG] [Thread-1691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:16:14.976 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:16:14.978 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:16:19.107 [DEBUG] [Thread-1692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:16:21.848 [DEBUG] [Thread-1693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:16:36.884 [DEBUG] [Thread-1694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:16:51.912 [DEBUG] [Thread-1695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:17:06.948 [DEBUG] [Thread-1696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:17:15.177 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:17:15.179 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:17:19.173 [DEBUG] [Thread-1697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:17:21.980 [DEBUG] [Thread-1698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:17:37.012 [DEBUG] [Thread-1699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:17:52.049 [DEBUG] [Thread-1700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:18:01.557 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-25T00:18:07.080 [DEBUG] [Thread-1701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:18:15.379 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:18:15.381 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:18:19.240 [DEBUG] [Thread-1702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:18:22.116 [DEBUG] [Thread-1703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:18:31.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:18:31.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:18:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:18:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 18, 25), 1.76, 88.74, 0.0, 30.08, 12.78, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:18:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:18:25
2025-12-25T00:18:32.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:18:32.554 [DEBUG] [Thread-1704] [transport.py] [_log()] starting thread (client mode): 0xb957b9d0
2025-12-25T00:18:32.554 [DEBUG] [Thread-1704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:18:32.574 [DEBUG] [Thread-1704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:18:32.574 [INFO] [Thread-1704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] client lang: <none>
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] server lang: <none>
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] kex follows: False
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] Compression: none
2025-12-25T00:18:32.575 [DEBUG] [Thread-1704] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:18:32.583 [DEBUG] [Thread-1704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:18:32.584 [DEBUG] [Thread-1704] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:18:32.584 [DEBUG] [Thread-1704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:18:32.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:18:32.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:18:32.586 [DEBUG] [Thread-1704] [transport.py] [_log()] userauth is OK
2025-12-25T00:18:32.586 [DEBUG] [Thread-1704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:18:32.586 [DEBUG] [Thread-1704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:18:32.586 [DEBUG] [Thread-1704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:18:32.586 [DEBUG] [Thread-1704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:18:32.608 [INFO] [Thread-1704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:18:32.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:18:33.249 [DEBUG] [Thread-1704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:18:33.249 [DEBUG] [Thread-1704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:18:33.249 [DEBUG] [Thread-1704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:18:33.290 [DEBUG] [Thread-1704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:18:33.290 [DEBUG] [Thread-1704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:18:33.294 [DEBUG] [Thread-1704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:18:33.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:18:33.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:18:33.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:18:33.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:18:33.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:18:33.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:18:33.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:18:33.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:18:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:18:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.928880 -999.00  +12.70  28.06     89  +11.00 1 2 1 3 1     0    0 0.90 -36.27 Z.ESw 25.6 28.1 148.4 32.5 13.7 -13.8 13.6 -15.0 13.4 -14.7 13.7 -16.0
2025-12-25T00:18:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:18:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:18:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.928880
2025-12-25T00:18:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:18:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:18:33.315 [DEBUG] [Thread-1704] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:18:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:18:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:18:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:18:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:18:25', tmtdew=1.76, humidity=88.74, cloud=0.0, wind=30.08, temperature=12.78, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:17:35.232', atlas_cloud=2, atlas_rain=1, zp_data=[0.6007499999999997, 0.9327500000000004, 0.8177500000000002, 0.5974999999999993, 0.6094999999999997, 0.5622500000000006, 0.3879999999999999, 0.4592500000000008, 0.7239999999999993, 1.0665000000000004, 0.5932499999999994, 0.35299999999999976, 0.5549999999999997, 0.41024999999999956, 0.33649999999999913, 0.5229999999999997, 0.8027499999999996, 0.8574999999999999, 0.29349999999999987, 0.25124999999999886, 0.40999999999999837, 0.38624999999999865, 0.39525000000000077, 0.6757499999999999, 1.1689999999999996, 0.6625000000000005, 0.23775000000000013, 0.24649999999999928, 0.41800000000000104, 0.519000000000001, 0.5410000000000013, 2.6980000000000004, 1.8637499999999996], zp_timestamp='2025-12-24T22:15:00')
2025-12-25T00:18:33.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:18:33.410 [DEBUG] [Thread-1707] [transport.py] [_log()] starting thread (client mode): 0xbbfce140
2025-12-25T00:18:33.410 [DEBUG] [Thread-1707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:18:33.425 [DEBUG] [Thread-1707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:18:33.425 [INFO] [Thread-1707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:18:33.433 [DEBUG] [Thread-1707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:18:33.433 [DEBUG] [Thread-1707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:18:33.433 [DEBUG] [Thread-1707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:18:33.433 [DEBUG] [Thread-1707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:18:33.433 [DEBUG] [Thread-1707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] client lang: <none>
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] server lang: <none>
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] kex follows: False
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] Compression: none
2025-12-25T00:18:33.434 [DEBUG] [Thread-1707] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:18:33.491 [DEBUG] [Thread-1707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:18:33.492 [DEBUG] [Thread-1707] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:18:33.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:18:33.493 [DEBUG] [Thread-1707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:18:33.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:18:33.547 [DEBUG] [Thread-1707] [transport.py] [_log()] userauth is OK
2025-12-25T00:18:33.547 [DEBUG] [Thread-1707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:18:33.548 [DEBUG] [Thread-1707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:18:33.548 [DEBUG] [Thread-1707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:18:33.548 [DEBUG] [Thread-1707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:18:33.572 [INFO] [Thread-1707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:18:33.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:18:33.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:18:34.400 [DEBUG] [Thread-1707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:18:34.400 [DEBUG] [Thread-1707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:18:34.447 [DEBUG] [Thread-1707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:18:34.448 [DEBUG] [Thread-1707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:18:34.456 [DEBUG] [Thread-1707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:18:34.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:18:34.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:18:34.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:18:34.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:18:34.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:18:34.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:18:34.491 [DEBUG] [Thread-1707] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:18:37.153 [DEBUG] [Thread-1709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:18:52.208 [DEBUG] [Thread-1710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:19:04.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:19:04.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:19:04.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:19:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 18, 57), 1.76, 88.73, 0.0, 31.3, 12.74, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:19:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:18:57
2025-12-25T00:19:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:19:05.499 [DEBUG] [Thread-1711] [transport.py] [_log()] starting thread (client mode): 0xb95b02e0
2025-12-25T00:19:05.499 [DEBUG] [Thread-1711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:19:05.514 [DEBUG] [Thread-1711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:19:05.514 [INFO] [Thread-1711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:19:05.517 [DEBUG] [Thread-1711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] client lang: <none>
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] server lang: <none>
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] kex follows: False
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] Compression: none
2025-12-25T00:19:05.518 [DEBUG] [Thread-1711] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:19:05.535 [DEBUG] [Thread-1711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:19:05.536 [DEBUG] [Thread-1711] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:19:05.536 [DEBUG] [Thread-1711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:19:05.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:19:05.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:19:05.538 [DEBUG] [Thread-1711] [transport.py] [_log()] userauth is OK
2025-12-25T00:19:05.538 [DEBUG] [Thread-1711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:19:05.538 [DEBUG] [Thread-1711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:19:05.538 [DEBUG] [Thread-1711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:19:05.538 [DEBUG] [Thread-1711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:19:05.562 [INFO] [Thread-1711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:19:05.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:19:06.186 [DEBUG] [Thread-1711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:19:06.187 [DEBUG] [Thread-1711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:19:06.187 [DEBUG] [Thread-1711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:19:06.228 [DEBUG] [Thread-1711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:19:06.228 [DEBUG] [Thread-1711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:19:06.232 [DEBUG] [Thread-1711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:19:06.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:19:06.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:19:06.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:19:06.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:19:06.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:19:06.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:19:06.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:19:06.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:19:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:19:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.929574 -999.00  +12.70  24.06     89  +11.00 1 2 1 3 1     0    0 0.81 -39.68 ZNEsW 19.8 24.1 145.0 27.2 13.7 -16.4 13.6 -15.5 13.4 -13.6 13.7 -14.8
2025-12-25T00:19:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:19:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:19:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.929574
2025-12-25T00:19:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:19:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:19:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:19:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:19:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:19:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:18:57', tmtdew=1.76, humidity=88.73, cloud=0.0, wind=31.3, temperature=12.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:18:35.194', atlas_cloud=2, atlas_rain=1, zp_data=[0.6007499999999997, 0.9327500000000004, 0.8177500000000002, 0.5974999999999993, 0.6094999999999997, 0.5622500000000006, 0.3879999999999999, 0.4592500000000008, 0.7239999999999993, 1.0665000000000004, 0.5932499999999994, 0.35299999999999976, 0.5549999999999997, 0.41024999999999956, 0.33649999999999913, 0.5229999999999997, 0.8027499999999996, 0.8574999999999999, 0.29349999999999987, 0.25124999999999886, 0.40999999999999837, 0.38624999999999865, 0.39525000000000077, 0.6757499999999999, 1.1689999999999996, 0.6625000000000005, 0.23775000000000013, 0.24649999999999928, 0.41800000000000104, 0.519000000000001, 0.5410000000000013, 2.6980000000000004, 1.8637499999999996], zp_timestamp='2025-12-24T22:15:00')
2025-12-25T00:19:06.260 [DEBUG] [Thread-1711] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:19:06.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:19:06.353 [DEBUG] [Thread-1714] [transport.py] [_log()] starting thread (client mode): 0xbbfcda80
2025-12-25T00:19:06.353 [DEBUG] [Thread-1714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:19:06.369 [DEBUG] [Thread-1714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:19:06.369 [INFO] [Thread-1714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] client lang: <none>
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] server lang: <none>
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] kex follows: False
2025-12-25T00:19:06.377 [DEBUG] [Thread-1714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:19:06.378 [DEBUG] [Thread-1714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:19:06.378 [DEBUG] [Thread-1714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:19:06.378 [DEBUG] [Thread-1714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:19:06.378 [DEBUG] [Thread-1714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:19:06.378 [DEBUG] [Thread-1714] [transport.py] [_log()] Compression: none
2025-12-25T00:19:06.378 [DEBUG] [Thread-1714] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:19:06.440 [DEBUG] [Thread-1714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:19:06.441 [DEBUG] [Thread-1714] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:19:06.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:19:06.442 [DEBUG] [Thread-1714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:19:06.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:19:06.499 [DEBUG] [Thread-1714] [transport.py] [_log()] userauth is OK
2025-12-25T00:19:06.500 [DEBUG] [Thread-1714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:19:06.500 [DEBUG] [Thread-1714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:19:06.500 [DEBUG] [Thread-1714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:19:06.501 [DEBUG] [Thread-1714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:19:06.521 [INFO] [Thread-1714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:19:06.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:19:06.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:19:07.246 [DEBUG] [Thread-1716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:19:07.442 [DEBUG] [Thread-1714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:19:07.442 [DEBUG] [Thread-1714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:19:07.490 [DEBUG] [Thread-1714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:19:07.491 [DEBUG] [Thread-1714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:19:07.500 [DEBUG] [Thread-1714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:19:07.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:19:07.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:19:07.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:19:07.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:19:07.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:19:07.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:19:07.536 [DEBUG] [Thread-1714] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:19:15.579 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:19:15.580 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:19:19.310 [DEBUG] [Thread-1717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:19:22.296 [DEBUG] [Thread-1718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:19:37.329 [DEBUG] [Thread-1719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:19:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:19:37.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:19:37.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:19:38.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 19, 29), 1.75, 88.78, 0.0, 30.35, 12.74, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:19:38.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:19:29
2025-12-25T00:19:38.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:19:38.525 [DEBUG] [Thread-1720] [transport.py] [_log()] starting thread (client mode): 0xb95b1d20
2025-12-25T00:19:38.525 [DEBUG] [Thread-1720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:19:38.545 [DEBUG] [Thread-1720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:19:38.545 [INFO] [Thread-1720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:19:38.548 [DEBUG] [Thread-1720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:19:38.548 [DEBUG] [Thread-1720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:19:38.548 [DEBUG] [Thread-1720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] client lang: <none>
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] server lang: <none>
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] kex follows: False
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] Compression: none
2025-12-25T00:19:38.549 [DEBUG] [Thread-1720] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:19:38.567 [DEBUG] [Thread-1720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:19:38.567 [DEBUG] [Thread-1720] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:19:38.568 [DEBUG] [Thread-1720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:19:38.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:19:38.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:19:38.570 [DEBUG] [Thread-1720] [transport.py] [_log()] userauth is OK
2025-12-25T00:19:38.570 [DEBUG] [Thread-1720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:19:38.570 [DEBUG] [Thread-1720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:19:38.570 [DEBUG] [Thread-1720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:19:38.571 [DEBUG] [Thread-1720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:19:38.607 [INFO] [Thread-1720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:19:38.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:19:39.257 [DEBUG] [Thread-1720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:19:39.257 [DEBUG] [Thread-1720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:19:39.257 [DEBUG] [Thread-1720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:19:39.298 [DEBUG] [Thread-1720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:19:39.298 [DEBUG] [Thread-1720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:19:39.301 [DEBUG] [Thread-1720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:19:39.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:19:39.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:19:39.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:19:39.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:19:39.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:19:39.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:19:39.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:19:39.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:19:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:19:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.929922 -999.00  +12.70  18.65     89  +11.00 1 2 1 3 1     0    0 0.82 -37.97 ZNesW 25.3 18.6 145.4 29.9 13.7 -17.9 13.5 -18.0 13.4 -15.8 13.7 -17.6
2025-12-25T00:19:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:19:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:19:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.929922
2025-12-25T00:19:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:19:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:19:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:19:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:19:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:19:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:19:29', tmtdew=1.75, humidity=88.78, cloud=0.0, wind=30.35, temperature=12.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:19:05.261', atlas_cloud=2, atlas_rain=1, zp_data=[0.6007499999999997, 0.9327500000000004, 0.8177500000000002, 0.5974999999999993, 0.6094999999999997, 0.5622500000000006, 0.3879999999999999, 0.4592500000000008, 0.7239999999999993, 1.0665000000000004, 0.5932499999999994, 0.35299999999999976, 0.5549999999999997, 0.41024999999999956, 0.33649999999999913, 0.5229999999999997, 0.8027499999999996, 0.8574999999999999, 0.29349999999999987, 0.25124999999999886, 0.40999999999999837, 0.38624999999999865, 0.39525000000000077, 0.6757499999999999, 1.1689999999999996, 0.6625000000000005, 0.23775000000000013, 0.24649999999999928, 0.41800000000000104, 0.519000000000001, 0.5410000000000013, 2.6980000000000004, 1.8637499999999996], zp_timestamp='2025-12-24T22:15:00')
2025-12-25T00:19:39.328 [DEBUG] [Thread-1720] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:19:39.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:19:39.421 [DEBUG] [Thread-1723] [transport.py] [_log()] starting thread (client mode): 0xb95b0460
2025-12-25T00:19:39.421 [DEBUG] [Thread-1723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:19:39.435 [DEBUG] [Thread-1723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:19:39.436 [INFO] [Thread-1723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:19:39.443 [DEBUG] [Thread-1723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:19:39.443 [DEBUG] [Thread-1723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] client lang: <none>
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] server lang: <none>
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] kex follows: False
2025-12-25T00:19:39.444 [DEBUG] [Thread-1723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:19:39.445 [DEBUG] [Thread-1723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:19:39.445 [DEBUG] [Thread-1723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:19:39.445 [DEBUG] [Thread-1723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:19:39.445 [DEBUG] [Thread-1723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:19:39.445 [DEBUG] [Thread-1723] [transport.py] [_log()] Compression: none
2025-12-25T00:19:39.445 [DEBUG] [Thread-1723] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:19:39.505 [DEBUG] [Thread-1723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:19:39.505 [DEBUG] [Thread-1723] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:19:39.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:19:39.507 [DEBUG] [Thread-1723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:19:39.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:19:39.567 [DEBUG] [Thread-1723] [transport.py] [_log()] userauth is OK
2025-12-25T00:19:39.567 [DEBUG] [Thread-1723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:19:39.567 [DEBUG] [Thread-1723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:19:39.567 [DEBUG] [Thread-1723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:19:39.567 [DEBUG] [Thread-1723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:19:39.586 [INFO] [Thread-1723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:19:39.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:19:39.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:19:40.429 [DEBUG] [Thread-1723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:19:40.429 [DEBUG] [Thread-1723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:19:40.478 [DEBUG] [Thread-1723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:19:40.478 [DEBUG] [Thread-1723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:19:40.487 [DEBUG] [Thread-1723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:19:40.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:19:40.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:19:40.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:19:40.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:19:40.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:19:40.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:19:40.525 [DEBUG] [Thread-1723] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:19:52.364 [DEBUG] [Thread-1725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:20:07.409 [DEBUG] [Thread-1726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:20:10.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:20:10.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:20:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:20:11.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 20, 1), 1.75, 88.81, 0.0, 29.08, 12.76, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:20:11.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:20:01
2025-12-25T00:20:11.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:20:11.527 [DEBUG] [Thread-1727] [transport.py] [_log()] starting thread (client mode): 0xbbfcd540
2025-12-25T00:20:11.527 [DEBUG] [Thread-1727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:20:11.548 [DEBUG] [Thread-1727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:20:11.548 [INFO] [Thread-1727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:20:11.551 [DEBUG] [Thread-1727] [transport.py] [_log()] client lang: <none>
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] server lang: <none>
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] kex follows: False
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] Compression: none
2025-12-25T00:20:11.552 [DEBUG] [Thread-1727] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:20:11.569 [DEBUG] [Thread-1727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:20:11.570 [DEBUG] [Thread-1727] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:20:11.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:20:11.571 [DEBUG] [Thread-1727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:20:11.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:20:11.617 [DEBUG] [Thread-1727] [transport.py] [_log()] userauth is OK
2025-12-25T00:20:11.617 [DEBUG] [Thread-1727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:20:11.617 [DEBUG] [Thread-1727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:20:11.617 [DEBUG] [Thread-1727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:20:11.617 [DEBUG] [Thread-1727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:20:11.637 [INFO] [Thread-1727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:20:11.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:20:12.299 [DEBUG] [Thread-1727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:20:12.299 [DEBUG] [Thread-1727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:20:12.300 [DEBUG] [Thread-1727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:20:12.340 [DEBUG] [Thread-1727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:20:12.340 [DEBUG] [Thread-1727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:20:12.342 [DEBUG] [Thread-1727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:20:12.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:20:12.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:20:12.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:20:12.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:20:12.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:20:12.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:20:12.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:20:12.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:20:12.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:20:12.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.930268 -999.00  +12.60  24.15     89  +11.00 1 2 1 3 1     0    0 0.76 -39.13 ZnESW 23.4 24.1 161.4 31.9 13.7 -17.4 13.5 -16.7 13.4 -16.5 13.6 -16.4
2025-12-25T00:20:12.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:20:12.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:20:12.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.930268
2025-12-25T00:20:12.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:20:12.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:20:12.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:20:12.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:20:12.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:20:12.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:20:01', tmtdew=1.75, humidity=88.81, cloud=0.0, wind=29.08, temperature=12.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:19:35.155', atlas_cloud=2, atlas_rain=1, zp_data=[0.6007499999999997, 0.9327500000000004, 0.8177500000000002, 0.5974999999999993, 0.6094999999999997, 0.5622500000000006, 0.3879999999999999, 0.4592500000000008, 0.7239999999999993, 1.0665000000000004, 0.5932499999999994, 0.35299999999999976, 0.5549999999999997, 0.41024999999999956, 0.33649999999999913, 0.5229999999999997, 0.8027499999999996, 0.8574999999999999, 0.29349999999999987, 0.25124999999999886, 0.40999999999999837, 0.38624999999999865, 0.39525000000000077, 0.6757499999999999, 1.1689999999999996, 0.6625000000000005, 0.23775000000000013, 0.24649999999999928, 0.41800000000000104, 0.519000000000001, 0.5410000000000013, 2.6980000000000004, 1.8637499999999996], zp_timestamp='2025-12-24T22:19:00')
2025-12-25T00:20:12.367 [DEBUG] [Thread-1727] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:20:12.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:20:12.457 [DEBUG] [Thread-1730] [transport.py] [_log()] starting thread (client mode): 0xbbfcda80
2025-12-25T00:20:12.457 [DEBUG] [Thread-1730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:20:12.472 [DEBUG] [Thread-1730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:20:12.472 [INFO] [Thread-1730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] client lang: <none>
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] server lang: <none>
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] kex follows: False
2025-12-25T00:20:12.480 [DEBUG] [Thread-1730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:20:12.481 [DEBUG] [Thread-1730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:20:12.481 [DEBUG] [Thread-1730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:20:12.481 [DEBUG] [Thread-1730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:20:12.481 [DEBUG] [Thread-1730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:20:12.481 [DEBUG] [Thread-1730] [transport.py] [_log()] Compression: none
2025-12-25T00:20:12.481 [DEBUG] [Thread-1730] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:20:12.539 [DEBUG] [Thread-1730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:20:12.539 [DEBUG] [Thread-1730] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:20:12.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:20:12.541 [DEBUG] [Thread-1730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:20:12.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:20:12.595 [DEBUG] [Thread-1730] [transport.py] [_log()] userauth is OK
2025-12-25T00:20:12.595 [DEBUG] [Thread-1730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:20:12.596 [DEBUG] [Thread-1730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:20:12.596 [DEBUG] [Thread-1730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:20:12.596 [DEBUG] [Thread-1730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:20:12.614 [INFO] [Thread-1730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:20:12.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:20:12.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:20:13.483 [DEBUG] [Thread-1730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:20:13.484 [DEBUG] [Thread-1730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:20:13.531 [DEBUG] [Thread-1730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:20:13.531 [DEBUG] [Thread-1730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:20:13.540 [DEBUG] [Thread-1730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:20:13.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:20:13.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:20:13.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:20:13.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:20:13.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:20:13.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:20:13.577 [DEBUG] [Thread-1730] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:20:15.780 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:20:15.781 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:20:19.387 [DEBUG] [Thread-1732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:20:22.445 [DEBUG] [Thread-1733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:20:37.501 [DEBUG] [Thread-1734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:20:43.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:20:43.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:20:43.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
2025-12-25T00:20:44.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 20, 33), 2.0, 87.59, 0.0, 35.46, 12.99, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:20:44.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:20:33
2025-12-25T00:20:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:20:44.571 [DEBUG] [Thread-1735] [transport.py] [_log()] starting thread (client mode): 0xbbfcead0
2025-12-25T00:20:44.571 [DEBUG] [Thread-1735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:20:44.593 [DEBUG] [Thread-1735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:20:44.593 [INFO] [Thread-1735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:20:44.594 [DEBUG] [Thread-1735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] client lang: <none>
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] server lang: <none>
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] kex follows: False
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:20:44.595 [DEBUG] [Thread-1735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:20:44.596 [DEBUG] [Thread-1735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:20:44.596 [DEBUG] [Thread-1735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:20:44.596 [DEBUG] [Thread-1735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:20:44.596 [DEBUG] [Thread-1735] [transport.py] [_log()] Compression: none
2025-12-25T00:20:44.596 [DEBUG] [Thread-1735] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:20:44.614 [DEBUG] [Thread-1735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:20:44.615 [DEBUG] [Thread-1735] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:20:44.615 [DEBUG] [Thread-1735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:20:44.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:20:44.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:20:44.618 [DEBUG] [Thread-1735] [transport.py] [_log()] userauth is OK
2025-12-25T00:20:44.618 [DEBUG] [Thread-1735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:20:44.618 [DEBUG] [Thread-1735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:20:44.618 [DEBUG] [Thread-1735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:20:44.618 [DEBUG] [Thread-1735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:20:44.643 [INFO] [Thread-1735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:20:44.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:20:45.278 [DEBUG] [Thread-1735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:20:45.279 [DEBUG] [Thread-1735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:20:45.279 [DEBUG] [Thread-1735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:20:45.320 [DEBUG] [Thread-1735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:20:45.320 [DEBUG] [Thread-1735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:20:45.324 [DEBUG] [Thread-1735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:20:45.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:20:45.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:20:45.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:20:45.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:20:45.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:20:45.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:20:45.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:20:45.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:20:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:20:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.930616 -999.00  +12.60  25.32     89  +11.00 1 2 1 3 1     0    0 0.77 -37.96 ZnESW 22.6 25.3 150.4 32.7 13.6 -18.4 13.4 -17.0 13.3 -16.3 13.6 -16.7
2025-12-25T00:20:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:20:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:20:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.930616
2025-12-25T00:20:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:20:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:20:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:20:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:20:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:20:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:20:33', tmtdew=2.0, humidity=87.59, cloud=0.0, wind=35.46, temperature=12.99, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:20:05.222', atlas_cloud=2, atlas_rain=1, zp_data=[0.6007499999999997, 0.9327500000000004, 0.8177500000000002, 0.5974999999999993, 0.6094999999999997, 0.5622500000000006, 0.3879999999999999, 0.4592500000000008, 0.7239999999999993, 1.0665000000000004, 0.5932499999999994, 0.35299999999999976, 0.5549999999999997, 0.41024999999999956, 0.33649999999999913, 0.5229999999999997, 0.8027499999999996, 0.8574999999999999, 0.29349999999999987, 0.25124999999999886, 0.40999999999999837, 0.38624999999999865, 0.39525000000000077, 0.6757499999999999, 1.1689999999999996, 0.6625000000000005, 0.23775000000000013, 0.24649999999999928, 0.41800000000000104, 0.519000000000001, 0.5410000000000013, 2.6980000000000004, 1.8637499999999996], zp_timestamp='2025-12-24T22:19:00')
2025-12-25T00:20:45.352 [DEBUG] [Thread-1735] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:20:45.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:20:45.446 [DEBUG] [Thread-1738] [transport.py] [_log()] starting thread (client mode): 0xb6b01720
2025-12-25T00:20:45.446 [DEBUG] [Thread-1738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:20:45.460 [DEBUG] [Thread-1738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:20:45.460 [INFO] [Thread-1738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] client lang: <none>
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] server lang: <none>
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] kex follows: False
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] Compression: none
2025-12-25T00:20:45.468 [DEBUG] [Thread-1738] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:20:45.527 [DEBUG] [Thread-1738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:20:45.527 [DEBUG] [Thread-1738] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:20:45.528 [DEBUG] [Thread-1738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:20:45.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:20:45.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:20:45.583 [DEBUG] [Thread-1738] [transport.py] [_log()] userauth is OK
2025-12-25T00:20:45.583 [DEBUG] [Thread-1738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:20:45.583 [DEBUG] [Thread-1738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:20:45.584 [DEBUG] [Thread-1738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:20:45.584 [DEBUG] [Thread-1738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:20:45.606 [INFO] [Thread-1738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:20:45.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:20:45.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:20:46.421 [DEBUG] [Thread-1738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:20:46.422 [DEBUG] [Thread-1738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:20:46.470 [DEBUG] [Thread-1738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:20:46.470 [DEBUG] [Thread-1738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:20:46.479 [DEBUG] [Thread-1738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:20:46.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:20:46.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:20:46.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:20:46.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:20:46.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:20:46.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:20:46.516 [DEBUG] [Thread-1738] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:20:52.530 [DEBUG] [Thread-1740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:21:07.583 [DEBUG] [Thread-1741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:21:15.984 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:21:15.985 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:21:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:21:16.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:21:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:21:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 21, 5), 1.69, 89.34, 0.0, 25.78, 12.63, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:21:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:21:05
2025-12-25T00:21:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:21:17.561 [DEBUG] [Thread-1742] [transport.py] [_log()] starting thread (client mode): 0xb6b01360
2025-12-25T00:21:17.561 [DEBUG] [Thread-1742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:21:17.576 [DEBUG] [Thread-1742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:21:17.576 [INFO] [Thread-1742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] client lang: <none>
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] server lang: <none>
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] kex follows: False
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] Compression: none
2025-12-25T00:21:17.579 [DEBUG] [Thread-1742] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:21:17.593 [DEBUG] [Thread-1742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:21:17.593 [DEBUG] [Thread-1742] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:21:17.593 [DEBUG] [Thread-1742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:21:17.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:21:17.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:21:17.594 [DEBUG] [Thread-1742] [transport.py] [_log()] userauth is OK
2025-12-25T00:21:17.594 [DEBUG] [Thread-1742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:21:17.594 [DEBUG] [Thread-1742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:21:17.594 [DEBUG] [Thread-1742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:21:17.594 [DEBUG] [Thread-1742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:21:17.603 [INFO] [Thread-1742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:21:17.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:21:18.234 [DEBUG] [Thread-1742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:21:18.234 [DEBUG] [Thread-1742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:21:18.234 [DEBUG] [Thread-1742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:21:18.274 [DEBUG] [Thread-1742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:21:18.274 [DEBUG] [Thread-1742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:21:18.277 [DEBUG] [Thread-1742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:21:18.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:21:18.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:21:18.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:21:18.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:21:18.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:21:18.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:21:18.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.930963 -999.00  +12.60  22.96     90  +11.00 1 2 1 3 1     0    0 0.73 -38.87 ZnESW 21.3 23.0 152.4 29.1 13.6 -19.7 13.5 -18.9 13.3 -17.1 13.6 -18.6
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.930963
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:21:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:21:05', tmtdew=1.69, humidity=89.34, cloud=0.0, wind=25.78, temperature=12.63, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:20:35.203', atlas_cloud=2, atlas_rain=1, zp_data=[0.6007499999999997, 0.9327500000000004, 0.8177500000000002, 0.5974999999999993, 0.6094999999999997, 0.5622500000000006, 0.3879999999999999, 0.4592500000000008, 0.7239999999999993, 1.0665000000000004, 0.5932499999999994, 0.35299999999999976, 0.5549999999999997, 0.41024999999999956, 0.33649999999999913, 0.5229999999999997, 0.8027499999999996, 0.8574999999999999, 0.29349999999999987, 0.25124999999999886, 0.40999999999999837, 0.38624999999999865, 0.39525000000000077, 0.6757499999999999, 1.1689999999999996, 0.6625000000000005, 0.23775000000000013, 0.24649999999999928, 0.41800000000000104, 0.519000000000001, 0.5410000000000013, 2.6980000000000004, 1.8637499999999996], zp_timestamp='2025-12-24T22:19:00')
2025-12-25T00:21:18.296 [DEBUG] [Thread-1742] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:21:18.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:21:18.379 [DEBUG] [Thread-1745] [transport.py] [_log()] starting thread (client mode): 0xbbfce080
2025-12-25T00:21:18.379 [DEBUG] [Thread-1745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:21:18.394 [DEBUG] [Thread-1745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:21:18.394 [INFO] [Thread-1745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:21:18.401 [DEBUG] [Thread-1745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:21:18.401 [DEBUG] [Thread-1745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:21:18.401 [DEBUG] [Thread-1745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:21:18.401 [DEBUG] [Thread-1745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:21:18.401 [DEBUG] [Thread-1745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:21:18.401 [DEBUG] [Thread-1745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:21:18.401 [DEBUG] [Thread-1745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:21:18.401 [DEBUG] [Thread-1745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] client lang: <none>
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] server lang: <none>
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] kex follows: False
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] Compression: none
2025-12-25T00:21:18.402 [DEBUG] [Thread-1745] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:21:18.457 [DEBUG] [Thread-1745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:21:18.457 [DEBUG] [Thread-1745] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:21:18.458 [DEBUG] [Thread-1745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:21:18.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:21:18.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:21:18.514 [DEBUG] [Thread-1745] [transport.py] [_log()] userauth is OK
2025-12-25T00:21:18.514 [DEBUG] [Thread-1745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:21:18.514 [DEBUG] [Thread-1745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:21:18.514 [DEBUG] [Thread-1745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:21:18.514 [DEBUG] [Thread-1745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:21:18.528 [INFO] [Thread-1745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:21:18.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:21:18.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:21:19.339 [DEBUG] [Thread-1745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:21:19.339 [DEBUG] [Thread-1745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:21:19.386 [DEBUG] [Thread-1745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:21:19.386 [DEBUG] [Thread-1745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:21:19.394 [DEBUG] [Thread-1745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:21:19.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:21:19.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:21:19.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:21:19.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:21:19.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:21:19.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:21:19.426 [DEBUG] [Thread-1745] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:21:19.454 [DEBUG] [Thread-1747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:21:22.615 [DEBUG] [Thread-1748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:21:37.676 [DEBUG] [Thread-1749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:21:49.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:21:49.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:21: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
2025-12-25T00:21:50.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 21, 37), 1.68, 89.43, 0.0, 33.44, 12.71, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:21:50.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:21:37
2025-12-25T00:21:50.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:21:50.425 [DEBUG] [Thread-1750] [transport.py] [_log()] starting thread (client mode): 0xbbfcffa0
2025-12-25T00:21:50.425 [DEBUG] [Thread-1750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:21:50.445 [DEBUG] [Thread-1750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:21:50.445 [INFO] [Thread-1750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:21:50.448 [DEBUG] [Thread-1750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:21:50.448 [DEBUG] [Thread-1750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:21:50.448 [DEBUG] [Thread-1750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] client lang: <none>
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] server lang: <none>
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] kex follows: False
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:21:50.449 [DEBUG] [Thread-1750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:21:50.450 [DEBUG] [Thread-1750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:21:50.450 [DEBUG] [Thread-1750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:21:50.450 [DEBUG] [Thread-1750] [transport.py] [_log()] Compression: none
2025-12-25T00:21:50.450 [DEBUG] [Thread-1750] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:21:50.467 [DEBUG] [Thread-1750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:21:50.467 [DEBUG] [Thread-1750] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:21:50.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:21:50.468 [DEBUG] [Thread-1750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:21:50.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:21:50.471 [DEBUG] [Thread-1750] [transport.py] [_log()] userauth is OK
2025-12-25T00:21:50.471 [DEBUG] [Thread-1750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:21:50.471 [DEBUG] [Thread-1750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:21:50.471 [DEBUG] [Thread-1750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:21:50.471 [DEBUG] [Thread-1750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:21:50.508 [INFO] [Thread-1750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:21:50.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:21:51.126 [DEBUG] [Thread-1750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:21:51.127 [DEBUG] [Thread-1750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:21:51.127 [DEBUG] [Thread-1750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:21:51.166 [DEBUG] [Thread-1750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:21:51.166 [DEBUG] [Thread-1750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:21:51.168 [DEBUG] [Thread-1750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:21:51.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:21:51.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:21:51.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:21:51.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:21:51.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:21:51.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:21:51.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.931310 -999.00  +12.60  21.61     90  +11.00 1 1 1 3 1     0    0 0.75 -38.96 ZNESW 23.2 21.6 159.8 36.6 13.6 -19.0 13.4 -18.9 13.3 -18.0 13.6 -18.9
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.931310
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:21:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:21:37', tmtdew=1.68, humidity=89.43, cloud=0.0, wind=33.44, temperature=12.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:21:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[0.6007499999999997, 0.9327500000000004, 0.8177500000000002, 0.5974999999999993, 0.6094999999999997, 0.5622500000000006, 0.3879999999999999, 0.4592500000000008, 0.7239999999999993, 1.0665000000000004, 0.5932499999999994, 0.35299999999999976, 0.5549999999999997, 0.41024999999999956, 0.33649999999999913, 0.5229999999999997, 0.8027499999999996, 0.8574999999999999, 0.29349999999999987, 0.25124999999999886, 0.40999999999999837, 0.38624999999999865, 0.39525000000000077, 0.6757499999999999, 1.1689999999999996, 0.6625000000000005, 0.23775000000000013, 0.24649999999999928, 0.41800000000000104, 0.519000000000001, 0.5410000000000013, 2.6980000000000004, 1.8637499999999996], zp_timestamp='2025-12-24T22:19:00')
2025-12-25T00:21:51.190 [DEBUG] [Thread-1750] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:21:51.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:21:51.270 [DEBUG] [Thread-1753] [transport.py] [_log()] starting thread (client mode): 0xbbfcd0c0
2025-12-25T00:21:51.271 [DEBUG] [Thread-1753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:21:51.284 [DEBUG] [Thread-1753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:21:51.285 [INFO] [Thread-1753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:21:51.292 [DEBUG] [Thread-1753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:21:51.292 [DEBUG] [Thread-1753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:21:51.292 [DEBUG] [Thread-1753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:21:51.292 [DEBUG] [Thread-1753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:21:51.292 [DEBUG] [Thread-1753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:21:51.292 [DEBUG] [Thread-1753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:21:51.292 [DEBUG] [Thread-1753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:21:51.292 [DEBUG] [Thread-1753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] client lang: <none>
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] server lang: <none>
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] kex follows: False
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] Compression: none
2025-12-25T00:21:51.293 [DEBUG] [Thread-1753] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:21:51.350 [DEBUG] [Thread-1753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:21:51.350 [DEBUG] [Thread-1753] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:21:51.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:21:51.351 [DEBUG] [Thread-1753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:21:51.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:21:51.407 [DEBUG] [Thread-1753] [transport.py] [_log()] userauth is OK
2025-12-25T00:21:51.407 [DEBUG] [Thread-1753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:21:51.407 [DEBUG] [Thread-1753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:21:51.407 [DEBUG] [Thread-1753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:21:51.407 [DEBUG] [Thread-1753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:21:51.425 [INFO] [Thread-1753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:21:51.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:21:51.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:21:52.250 [DEBUG] [Thread-1753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:21:52.251 [DEBUG] [Thread-1753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:21:52.299 [DEBUG] [Thread-1753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:21:52.299 [DEBUG] [Thread-1753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:21:52.307 [DEBUG] [Thread-1753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:21:52.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:21:52.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:21:52.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:21:52.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:21:52.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:21:52.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:21:52.343 [DEBUG] [Thread-1753] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:21:52.715 [DEBUG] [Thread-1755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:22:07.767 [DEBUG] [Thread-1756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:22:16.189 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:22:16.190 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:22:19.555 [DEBUG] [Thread-1757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:22:22.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:22:22.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:22:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:22:22.802 [DEBUG] [Thread-1758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:22:23.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 22, 9), 1.66, 89.53, 0.0, 33.05, 12.68, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:22:23.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:22:09
2025-12-25T00:22:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:22:23.329 [DEBUG] [Thread-1759] [transport.py] [_log()] starting thread (client mode): 0xbbfccbe0
2025-12-25T00:22:23.330 [DEBUG] [Thread-1759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:22:23.348 [DEBUG] [Thread-1759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:22:23.349 [INFO] [Thread-1759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] client lang: <none>
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] server lang: <none>
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] kex follows: False
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] Compression: none
2025-12-25T00:22:23.350 [DEBUG] [Thread-1759] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:22:23.358 [DEBUG] [Thread-1759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:22:23.359 [DEBUG] [Thread-1759] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:22:23.359 [DEBUG] [Thread-1759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:22:23.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:22:23.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:22:23.361 [DEBUG] [Thread-1759] [transport.py] [_log()] userauth is OK
2025-12-25T00:22:23.361 [DEBUG] [Thread-1759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:22:23.361 [DEBUG] [Thread-1759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:22:23.361 [DEBUG] [Thread-1759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:22:23.361 [DEBUG] [Thread-1759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:22:23.378 [INFO] [Thread-1759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:22:23.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:22:24.007 [DEBUG] [Thread-1759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:22:24.008 [DEBUG] [Thread-1759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:22:24.008 [DEBUG] [Thread-1759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:22:24.049 [DEBUG] [Thread-1759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:22:24.049 [DEBUG] [Thread-1759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:22:24.052 [DEBUG] [Thread-1759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:22:24.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:22:24.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:22:24.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:22:24.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:22:24.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:22:24.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:22:24.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:22:24.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:22:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:22:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.932005 -999.00  +12.50  23.55     90  +11.00 1 1 1 3 1     0    0 0.66 -41.06 ZNESW 18.5 23.6 153.2 31.8 13.5 -17.5 13.3 -17.8 13.2 -17.7 13.6 -18.0
2025-12-25T00:22:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:22:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:22:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.932005
2025-12-25T00:22:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:22:09', tmtdew=1.66, humidity=89.53, cloud=0.0, wind=33.05, temperature=12.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:22:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.6007499999999997, 0.9327500000000004, 0.8177500000000002, 0.5974999999999993, 0.6094999999999997, 0.5622500000000006, 0.3879999999999999, 0.4592500000000008, 0.7239999999999993, 1.0665000000000004, 0.5932499999999994, 0.35299999999999976, 0.5549999999999997, 0.41024999999999956, 0.33649999999999913, 0.5229999999999997, 0.8027499999999996, 0.8574999999999999, 0.29349999999999987, 0.25124999999999886, 0.40999999999999837, 0.38624999999999865, 0.39525000000000077, 0.6757499999999999, 1.1689999999999996, 0.6625000000000005, 0.23775000000000013, 0.24649999999999928, 0.41800000000000104, 0.519000000000001, 0.5410000000000013, 2.6980000000000004, 1.8637499999999996], zp_timestamp='2025-12-24T22:19:00')
2025-12-25T00:22:24.072 [DEBUG] [Thread-1759] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:22:24.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:22:24.166 [DEBUG] [Thread-1762] [transport.py] [_log()] starting thread (client mode): 0xb6b037c0
2025-12-25T00:22:24.167 [DEBUG] [Thread-1762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:22:24.181 [DEBUG] [Thread-1762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:22:24.181 [INFO] [Thread-1762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] client lang: <none>
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] server lang: <none>
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] kex follows: False
2025-12-25T00:22:24.189 [DEBUG] [Thread-1762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:22:24.190 [DEBUG] [Thread-1762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:22:24.190 [DEBUG] [Thread-1762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:22:24.190 [DEBUG] [Thread-1762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:22:24.190 [DEBUG] [Thread-1762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:22:24.190 [DEBUG] [Thread-1762] [transport.py] [_log()] Compression: none
2025-12-25T00:22:24.190 [DEBUG] [Thread-1762] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:22:24.247 [DEBUG] [Thread-1762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:22:24.248 [DEBUG] [Thread-1762] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:22:24.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:22:24.249 [DEBUG] [Thread-1762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:22:24.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:22:24.308 [DEBUG] [Thread-1762] [transport.py] [_log()] userauth is OK
2025-12-25T00:22:24.308 [DEBUG] [Thread-1762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:22:24.308 [DEBUG] [Thread-1762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:22:24.308 [DEBUG] [Thread-1762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:22:24.309 [DEBUG] [Thread-1762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:22:24.328 [INFO] [Thread-1762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:22:24.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:22:24.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:22:25.173 [DEBUG] [Thread-1762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:22:25.174 [DEBUG] [Thread-1762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:22:25.222 [DEBUG] [Thread-1762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:22:25.222 [DEBUG] [Thread-1762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:22:25.232 [DEBUG] [Thread-1762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:22:25.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:22:25.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:22:25.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:22:25.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:22:25.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:22:25.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:22:25.268 [DEBUG] [Thread-1762] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:22:37.831 [DEBUG] [Thread-1764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:22:52.872 [DEBUG] [Thread-1765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:22:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:22:55.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:22:55.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:22:55.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 22, 41), 1.66, 89.54, 0.0, 27.24, 12.66, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:22:55.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:22:41
2025-12-25T00:22:56.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:22:56.271 [DEBUG] [Thread-1766] [transport.py] [_log()] starting thread (client mode): 0xb6b01fc0
2025-12-25T00:22:56.271 [DEBUG] [Thread-1766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:22:56.292 [DEBUG] [Thread-1766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:22:56.292 [INFO] [Thread-1766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] client lang: <none>
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] server lang: <none>
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] kex follows: False
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:22:56.295 [DEBUG] [Thread-1766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:22:56.296 [DEBUG] [Thread-1766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:22:56.296 [DEBUG] [Thread-1766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:22:56.296 [DEBUG] [Thread-1766] [transport.py] [_log()] Compression: none
2025-12-25T00:22:56.296 [DEBUG] [Thread-1766] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:22:56.311 [DEBUG] [Thread-1766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:22:56.311 [DEBUG] [Thread-1766] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:22:56.311 [DEBUG] [Thread-1766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:22:56.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:22:56.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:22:56.312 [DEBUG] [Thread-1766] [transport.py] [_log()] userauth is OK
2025-12-25T00:22:56.312 [DEBUG] [Thread-1766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:22:56.312 [DEBUG] [Thread-1766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:22:56.312 [DEBUG] [Thread-1766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:22:56.312 [DEBUG] [Thread-1766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:22:56.321 [INFO] [Thread-1766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:22:56.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:22:56.938 [DEBUG] [Thread-1766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:22:56.938 [DEBUG] [Thread-1766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:22:56.939 [DEBUG] [Thread-1766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:22:56.979 [DEBUG] [Thread-1766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:22:56.979 [DEBUG] [Thread-1766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:22:56.982 [DEBUG] [Thread-1766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:22:56.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:22:56.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:22:56.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:22:57.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:22:57.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:22:57.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:22:57.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:22:57.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:22:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:22:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.932352 -999.00  +12.50  23.32     90  +11.00 1 1 1 3 1     0    0 0.64 -41.81 ZNESW 25.3 23.3 157.8 32.4 13.5 -13.0 13.4 -12.9 13.2 -16.3 13.5 -15.5
2025-12-25T00:22:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:22:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:22:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.932352
2025-12-25T00:22:57.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:22:57.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:22:57.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:22:57.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:22:57.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:22:57.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:22:41', tmtdew=1.66, humidity=89.54, cloud=0.0, wind=27.24, temperature=12.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:22:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[1.03625, 1.4472500000000004, 1.27625, 0.8609999999999989, 1.2945000000000002, 1.2252500000000008, 1.0534999999999997, 0.8992500000000003, 0.8769999999999989, 1.3935000000000004, 1.1092499999999994, 0.9850000000000003, 1.1494999999999997, 1.2952499999999993, 1.161999999999999, 1.0559999999999992, 0.9392499999999995, 1.0015, 1.2159999999999993, 1.0892499999999998, 0.9399999999999986, 1.2617499999999984, 1.6702500000000011, 1.6247499999999997, 1.2189999999999994, 0.6494999999999997, 0.9467499999999998, 1.0405000000000006, 0.7200000000000006, 0.6965000000000012, 1.3470000000000013, 1.1310000000000011, 1.0872499999999992], zp_timestamp='2025-12-24T22:21:00')
2025-12-25T00:22:57.013 [DEBUG] [Thread-1766] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:22:57.108 [DEBUG] [Thread-1769] [transport.py] [_log()] starting thread (client mode): 0xb6b01030
2025-12-25T00:22:57.108 [DEBUG] [Thread-1769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:22:57.122 [DEBUG] [Thread-1769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:22:57.122 [INFO] [Thread-1769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] client lang: <none>
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] server lang: <none>
2025-12-25T00:22:57.130 [DEBUG] [Thread-1769] [transport.py] [_log()] kex follows: False
2025-12-25T00:22:57.131 [DEBUG] [Thread-1769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:22:57.131 [DEBUG] [Thread-1769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:22:57.131 [DEBUG] [Thread-1769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:22:57.131 [DEBUG] [Thread-1769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:22:57.131 [DEBUG] [Thread-1769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:22:57.131 [DEBUG] [Thread-1769] [transport.py] [_log()] Compression: none
2025-12-25T00:22:57.131 [DEBUG] [Thread-1769] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:22:57.187 [DEBUG] [Thread-1769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:22:57.188 [DEBUG] [Thread-1769] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:22:57.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:22:57.189 [DEBUG] [Thread-1769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:22:57.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:22:57.243 [DEBUG] [Thread-1769] [transport.py] [_log()] userauth is OK
2025-12-25T00:22:57.243 [DEBUG] [Thread-1769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:22:57.243 [DEBUG] [Thread-1769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:22:57.243 [DEBUG] [Thread-1769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:22:57.243 [DEBUG] [Thread-1769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:22:57.261 [INFO] [Thread-1769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:22:57.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:22:57.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:22:58.128 [DEBUG] [Thread-1769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:22:58.128 [DEBUG] [Thread-1769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:22:58.176 [DEBUG] [Thread-1769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:22:58.176 [DEBUG] [Thread-1769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:22:58.185 [DEBUG] [Thread-1769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:22:58.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:22:58.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:22:58.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:22:58.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:22:58.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:22:58.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:22:58.221 [DEBUG] [Thread-1769] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:23:07.904 [DEBUG] [Thread-1771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:23:16.388 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:23:16.389 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:23:19.615 [DEBUG] [Thread-1772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:23:19.841 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:23:22.951 [DEBUG] [Thread-1773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:23:28.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:23:28.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:23:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:23:28.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 23, 13), 1.65, 89.58, 0.0, 28.92, 12.66, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:23:28.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:23:13
2025-12-25T00:23:29.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:23:29.197 [DEBUG] [Thread-1774] [transport.py] [_log()] starting thread (client mode): 0xbbfce350
2025-12-25T00:23:29.197 [DEBUG] [Thread-1774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:23:29.217 [DEBUG] [Thread-1774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:23:29.217 [INFO] [Thread-1774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] client lang: <none>
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] server lang: <none>
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] kex follows: False
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:23:29.218 [DEBUG] [Thread-1774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:23:29.219 [DEBUG] [Thread-1774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:23:29.219 [DEBUG] [Thread-1774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:23:29.219 [DEBUG] [Thread-1774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:23:29.219 [DEBUG] [Thread-1774] [transport.py] [_log()] Compression: none
2025-12-25T00:23:29.219 [DEBUG] [Thread-1774] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:23:29.231 [DEBUG] [Thread-1774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:23:29.231 [DEBUG] [Thread-1774] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:23:29.232 [DEBUG] [Thread-1774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:23:29.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:23:29.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:23:29.234 [DEBUG] [Thread-1774] [transport.py] [_log()] userauth is OK
2025-12-25T00:23:29.234 [DEBUG] [Thread-1774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:23:29.234 [DEBUG] [Thread-1774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:23:29.234 [DEBUG] [Thread-1774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:23:29.234 [DEBUG] [Thread-1774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:23:29.262 [INFO] [Thread-1774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:23:29.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:23:29.889 [DEBUG] [Thread-1774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:23:29.889 [DEBUG] [Thread-1774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:23:29.889 [DEBUG] [Thread-1774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:23:29.930 [DEBUG] [Thread-1774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:23:29.930 [DEBUG] [Thread-1774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:23:29.934 [DEBUG] [Thread-1774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:23:29.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:23:29.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:23:29.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:23:29.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:23:29.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:23:29.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:23:29.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:23:29.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:23:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:23:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.932699 -999.00  +12.50  19.40     90  +11.00 1 1 1 3 1     0    0 0.64 -38.71 ZNESW 18.2 19.4 161.2 27.8 13.6 -14.0 13.4 -12.4 13.2 -11.5 13.6 -12.9
2025-12-25T00:23:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:23:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:23:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.932699
2025-12-25T00:23:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:23:29.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:23:29.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:23:29.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:23:29.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:23:29.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:23:13', tmtdew=1.65, humidity=89.58, cloud=0.0, wind=28.92, temperature=12.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:23:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[1.03625, 1.4472500000000004, 1.27625, 0.8609999999999989, 1.2945000000000002, 1.2252500000000008, 1.0534999999999997, 0.8992500000000003, 0.8769999999999989, 1.3935000000000004, 1.1092499999999994, 0.9850000000000003, 1.1494999999999997, 1.2952499999999993, 1.161999999999999, 1.0559999999999992, 0.9392499999999995, 1.0015, 1.2159999999999993, 1.0892499999999998, 0.9399999999999986, 1.2617499999999984, 1.6702500000000011, 1.6247499999999997, 1.2189999999999994, 0.6494999999999997, 0.9467499999999998, 1.0405000000000006, 0.7200000000000006, 0.6965000000000012, 1.3470000000000013, 1.1310000000000011, 1.0872499999999992], zp_timestamp='2025-12-24T22:21:00')
2025-12-25T00:23:29.957 [DEBUG] [Thread-1774] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:23:30.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:23:30.049 [DEBUG] [Thread-1777] [transport.py] [_log()] starting thread (client mode): 0xb95d59c0
2025-12-25T00:23:30.049 [DEBUG] [Thread-1777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:23:30.065 [DEBUG] [Thread-1777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:23:30.065 [INFO] [Thread-1777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:23:30.073 [DEBUG] [Thread-1777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:23:30.073 [DEBUG] [Thread-1777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:23:30.073 [DEBUG] [Thread-1777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:23:30.073 [DEBUG] [Thread-1777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:23:30.073 [DEBUG] [Thread-1777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] client lang: <none>
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] server lang: <none>
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] kex follows: False
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:23:30.074 [DEBUG] [Thread-1777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:23:30.075 [DEBUG] [Thread-1777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:23:30.075 [DEBUG] [Thread-1777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:23:30.075 [DEBUG] [Thread-1777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:23:30.075 [DEBUG] [Thread-1777] [transport.py] [_log()] Compression: none
2025-12-25T00:23:30.075 [DEBUG] [Thread-1777] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:23:30.136 [DEBUG] [Thread-1777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:23:30.136 [DEBUG] [Thread-1777] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:23:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:23:30.138 [DEBUG] [Thread-1777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:23:30.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:23:30.195 [DEBUG] [Thread-1777] [transport.py] [_log()] userauth is OK
2025-12-25T00:23:30.196 [DEBUG] [Thread-1777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:23:30.196 [DEBUG] [Thread-1777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:23:30.196 [DEBUG] [Thread-1777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:23:30.196 [DEBUG] [Thread-1777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:23:30.215 [INFO] [Thread-1777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:23:30.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:23:30.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:23:31.062 [DEBUG] [Thread-1777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:23:31.062 [DEBUG] [Thread-1777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:23:31.110 [DEBUG] [Thread-1777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:23:31.110 [DEBUG] [Thread-1777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:23:31.119 [DEBUG] [Thread-1777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:23:31.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:23:31.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:23: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') -> 00000000
2025-12-25T00:23:31.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:23:31.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:23:31.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:23:31.156 [DEBUG] [Thread-1777] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:23:37.992 [DEBUG] [Thread-1779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:23:53.046 [DEBUG] [Thread-1780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:24:01.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:24:01.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:24:01.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:24:01.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 23, 45), 1.59, 89.63, 0.0, 29.96, 12.68, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:24:01.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:23:45
2025-12-25T00:24:02.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:24:02.156 [DEBUG] [Thread-1781] [transport.py] [_log()] starting thread (client mode): 0xb95d6440
2025-12-25T00:24:02.156 [DEBUG] [Thread-1781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:24:02.176 [DEBUG] [Thread-1781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:24:02.176 [INFO] [Thread-1781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] client lang: <none>
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] server lang: <none>
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] kex follows: False
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:24:02.180 [DEBUG] [Thread-1781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:24:02.181 [DEBUG] [Thread-1781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:24:02.181 [DEBUG] [Thread-1781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:24:02.181 [DEBUG] [Thread-1781] [transport.py] [_log()] Compression: none
2025-12-25T00:24:02.181 [DEBUG] [Thread-1781] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:24:02.189 [DEBUG] [Thread-1781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:24:02.190 [DEBUG] [Thread-1781] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:24:02.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:24:02.191 [DEBUG] [Thread-1781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:24:02.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:24:02.192 [DEBUG] [Thread-1781] [transport.py] [_log()] userauth is OK
2025-12-25T00:24:02.193 [DEBUG] [Thread-1781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:24:02.193 [DEBUG] [Thread-1781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:24:02.193 [DEBUG] [Thread-1781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:24:02.193 [DEBUG] [Thread-1781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:24:02.211 [INFO] [Thread-1781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:24:02.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:24:02.871 [DEBUG] [Thread-1781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:24:02.872 [DEBUG] [Thread-1781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:24:02.872 [DEBUG] [Thread-1781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:24:02.912 [DEBUG] [Thread-1781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:24:02.912 [DEBUG] [Thread-1781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:24:02.916 [DEBUG] [Thread-1781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:24:02.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:24:02.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:24:02.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:24:02.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:24:02.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:24:02.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:24:02.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:24:02.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:24:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:24:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.933046 -999.00  +12.50  22.00     90  +11.00 1 1 1 3 1     0    0 0.65 -39.23 ZNESW 24.1 22.0 148.5 32.6 13.6 -11.6 13.4 -11.6 13.2 -13.6 13.6 -13.5
2025-12-25T00:24:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:24:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:24:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.933046
2025-12-25T00:24:02.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:24:02.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:24:02.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:24:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:24:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:24:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:23:45', tmtdew=1.59, humidity=89.63, cloud=0.0, wind=29.96, temperature=12.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:23:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[1.03625, 1.4472500000000004, 1.27625, 0.8609999999999989, 1.2945000000000002, 1.2252500000000008, 1.0534999999999997, 0.8992500000000003, 0.8769999999999989, 1.3935000000000004, 1.1092499999999994, 0.9850000000000003, 1.1494999999999997, 1.2952499999999993, 1.161999999999999, 1.0559999999999992, 0.9392499999999995, 1.0015, 1.2159999999999993, 1.0892499999999998, 0.9399999999999986, 1.2617499999999984, 1.6702500000000011, 1.6247499999999997, 1.2189999999999994, 0.6494999999999997, 0.9467499999999998, 1.0405000000000006, 0.7200000000000006, 0.6965000000000012, 1.3470000000000013, 1.1310000000000011, 1.0872499999999992], zp_timestamp='2025-12-24T22:21:00')
2025-12-25T00:24:02.943 [DEBUG] [Thread-1781] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:24:03.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:24:03.037 [DEBUG] [Thread-1784] [transport.py] [_log()] starting thread (client mode): 0xbbfcfdc0
2025-12-25T00:24:03.037 [DEBUG] [Thread-1784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:24:03.052 [DEBUG] [Thread-1784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:24:03.052 [INFO] [Thread-1784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:24:03.060 [DEBUG] [Thread-1784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:24:03.060 [DEBUG] [Thread-1784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:24:03.060 [DEBUG] [Thread-1784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:24:03.060 [DEBUG] [Thread-1784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:24:03.060 [DEBUG] [Thread-1784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:24:03.060 [DEBUG] [Thread-1784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] client lang: <none>
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] server lang: <none>
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] kex follows: False
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] Compression: none
2025-12-25T00:24:03.061 [DEBUG] [Thread-1784] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:24:03.124 [DEBUG] [Thread-1784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:24:03.124 [DEBUG] [Thread-1784] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:24:03.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:24:03.126 [DEBUG] [Thread-1784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:24:03.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:24:03.184 [DEBUG] [Thread-1784] [transport.py] [_log()] userauth is OK
2025-12-25T00:24:03.184 [DEBUG] [Thread-1784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:24:03.184 [DEBUG] [Thread-1784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:24:03.184 [DEBUG] [Thread-1784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:24:03.185 [DEBUG] [Thread-1784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:24:03.208 [INFO] [Thread-1784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:24:03.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:24:03.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:24:04.065 [DEBUG] [Thread-1784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:24:04.065 [DEBUG] [Thread-1784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:24:04.114 [DEBUG] [Thread-1784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:24:04.114 [DEBUG] [Thread-1784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:24:04.125 [DEBUG] [Thread-1784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:24:04.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:24:04.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:24:04.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:24:04.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:24:04.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:24:04.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:24:04.168 [DEBUG] [Thread-1784] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:24:08.079 [DEBUG] [Thread-1786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:24:16.592 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:24:16.593 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:24:19.687 [DEBUG] [Thread-1787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:24:23.137 [DEBUG] [Thread-1788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:24:34.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:24:34.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:24: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
2025-12-25T00:24:34.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 24, 17), 1.59, 89.64, 0.0, 30.08, 12.64, 1, 1, 0, 2, 0, 0),)
2025-12-25T00:24:34.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:24:17
2025-12-25T00:24:35.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:24:35.204 [DEBUG] [Thread-1789] [transport.py] [_log()] starting thread (client mode): 0xb6b01e40
2025-12-25T00:24:35.204 [DEBUG] [Thread-1789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:24:35.223 [DEBUG] [Thread-1789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:24:35.223 [INFO] [Thread-1789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] client lang: <none>
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] server lang: <none>
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] kex follows: False
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] Compression: none
2025-12-25T00:24:35.226 [DEBUG] [Thread-1789] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:24:35.242 [DEBUG] [Thread-1789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:24:35.242 [DEBUG] [Thread-1789] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:24:35.242 [DEBUG] [Thread-1789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:24:35.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:24:35.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:24:35.243 [DEBUG] [Thread-1789] [transport.py] [_log()] userauth is OK
2025-12-25T00:24:35.243 [DEBUG] [Thread-1789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:24:35.243 [DEBUG] [Thread-1789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:24:35.243 [DEBUG] [Thread-1789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:24:35.243 [DEBUG] [Thread-1789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:24:35.261 [INFO] [Thread-1789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:24:35.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:24:35.905 [DEBUG] [Thread-1789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:24:35.905 [DEBUG] [Thread-1789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:24:35.906 [DEBUG] [Thread-1789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:24:35.946 [DEBUG] [Thread-1789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:24:35.946 [DEBUG] [Thread-1789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:24:35.949 [DEBUG] [Thread-1789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:24:35.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:24:35.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:24:35.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:24:35.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:24:35.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:24:35.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:24:35.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:24:35.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:24:35.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:24:35.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.933394 -999.00  +12.50  19.38     90  +11.00 1 2 1 3 1     0    0 0.63 -40.56 ZNeSW 17.5 19.4 141.2 29.7 13.6 -11.4 13.4 -10.6 13.2 -10.7 13.6 -11.6
2025-12-25T00:24:35.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:24:35.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:24:35.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.933394
2025-12-25T00:24:35.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:24:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:24:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:24:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:24:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:24:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:24:17', tmtdew=1.59, humidity=89.64, cloud=0.0, wind=30.08, temperature=12.64, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:24:05.242', atlas_cloud=2, atlas_rain=1, zp_data=[1.03625, 1.4472500000000004, 1.27625, 0.8609999999999989, 1.2945000000000002, 1.2252500000000008, 1.0534999999999997, 0.8992500000000003, 0.8769999999999989, 1.3935000000000004, 1.1092499999999994, 0.9850000000000003, 1.1494999999999997, 1.2952499999999993, 1.161999999999999, 1.0559999999999992, 0.9392499999999995, 1.0015, 1.2159999999999993, 1.0892499999999998, 0.9399999999999986, 1.2617499999999984, 1.6702500000000011, 1.6247499999999997, 1.2189999999999994, 0.6494999999999997, 0.9467499999999998, 1.0405000000000006, 0.7200000000000006, 0.6965000000000012, 1.3470000000000013, 1.1310000000000011, 1.0872499999999992], zp_timestamp='2025-12-24T22:21:00')
2025-12-25T00:24:35.969 [DEBUG] [Thread-1789] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:24:36.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:24:36.065 [DEBUG] [Thread-1792] [transport.py] [_log()] starting thread (client mode): 0xb6b00cd0
2025-12-25T00:24:36.066 [DEBUG] [Thread-1792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:24:36.081 [DEBUG] [Thread-1792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:24:36.081 [INFO] [Thread-1792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:24:36.088 [DEBUG] [Thread-1792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] client lang: <none>
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] server lang: <none>
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] kex follows: False
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] Compression: none
2025-12-25T00:24:36.089 [DEBUG] [Thread-1792] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:24:36.145 [DEBUG] [Thread-1792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:24:36.145 [DEBUG] [Thread-1792] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:24:36.145 [DEBUG] [Thread-1792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:24:36.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:24:36.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:24:36.202 [DEBUG] [Thread-1792] [transport.py] [_log()] userauth is OK
2025-12-25T00:24:36.202 [DEBUG] [Thread-1792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:24:36.202 [DEBUG] [Thread-1792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:24:36.202 [DEBUG] [Thread-1792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:24:36.202 [DEBUG] [Thread-1792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:24:36.222 [INFO] [Thread-1792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:24:36.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:24:36.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:24:37.059 [DEBUG] [Thread-1792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:24:37.060 [DEBUG] [Thread-1792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:24:37.107 [DEBUG] [Thread-1792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:24:37.107 [DEBUG] [Thread-1792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:24:37.117 [DEBUG] [Thread-1792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:24:37.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:24: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')
2025-12-25T00:24:37.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:24:37.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:24:37.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:24:37.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:24:37.154 [DEBUG] [Thread-1792] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:24:38.173 [DEBUG] [Thread-1794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:24:53.220 [DEBUG] [Thread-1795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:25:07.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:25:07.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:25:07.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:25:07.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 24, 49), 1.57, 90.26, 0.0, 31.37, 12.64, 1, 2, 0, 2, 0, 0),)
2025-12-25T00:25:07.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:24:49
2025-12-25T00:25:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:25:08.158 [DEBUG] [Thread-1796] [transport.py] [_log()] starting thread (client mode): 0xb95d59f0
2025-12-25T00:25:08.158 [DEBUG] [Thread-1796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:25:08.176 [DEBUG] [Thread-1796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:25:08.176 [INFO] [Thread-1796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:25:08.179 [DEBUG] [Thread-1796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:25:08.179 [DEBUG] [Thread-1796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:25:08.179 [DEBUG] [Thread-1796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] client lang: <none>
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] server lang: <none>
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] kex follows: False
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:25:08.180 [DEBUG] [Thread-1796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:25:08.181 [DEBUG] [Thread-1796] [transport.py] [_log()] Compression: none
2025-12-25T00:25:08.181 [DEBUG] [Thread-1796] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:25:08.198 [DEBUG] [Thread-1796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:25:08.199 [DEBUG] [Thread-1796] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:25:08.199 [DEBUG] [Thread-1796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:25:08.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:25:08.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:25:08.200 [DEBUG] [Thread-1796] [transport.py] [_log()] userauth is OK
2025-12-25T00:25:08.200 [DEBUG] [Thread-1796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:25:08.200 [DEBUG] [Thread-1796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:25:08.200 [DEBUG] [Thread-1796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:25:08.200 [DEBUG] [Thread-1796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:25:08.211 [INFO] [Thread-1796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:25:08.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:25:08.255 [DEBUG] [Thread-1798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:25:08.769 [DEBUG] [Thread-1796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:25:08.769 [DEBUG] [Thread-1796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:25:08.769 [DEBUG] [Thread-1796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:25:08.809 [DEBUG] [Thread-1796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:25:08.809 [DEBUG] [Thread-1796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:25:08.811 [DEBUG] [Thread-1796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:25:08.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:25:08.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:25:08.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:25:08.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:25:08.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:25:08.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:25:08.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.933740 -999.00  +12.50  25.50     90  +11.00 1 3 1 3 1     0    0 0.52 -41.78 ZNeSW 29.1 25.5 148.8 28.9 13.6 -6.6 13.4 -6.7 13.2 -9.6 13.6 -8.9
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.933740
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T00:25:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:24:49', tmtdew=1.57, humidity=90.26, cloud=0.0, wind=31.37, temperature=12.64, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:24:35.136', atlas_cloud=3, atlas_rain=1, zp_data=[1.03625, 1.4472500000000004, 1.27625, 0.8609999999999989, 1.2945000000000002, 1.2252500000000008, 1.0534999999999997, 0.8992500000000003, 0.8769999999999989, 1.3935000000000004, 1.1092499999999994, 0.9850000000000003, 1.1494999999999997, 1.2952499999999993, 1.161999999999999, 1.0559999999999992, 0.9392499999999995, 1.0015, 1.2159999999999993, 1.0892499999999998, 0.9399999999999986, 1.2617499999999984, 1.6702500000000011, 1.6247499999999997, 1.2189999999999994, 0.6494999999999997, 0.9467499999999998, 1.0405000000000006, 0.7200000000000006, 0.6965000000000012, 1.3470000000000013, 1.1310000000000011, 1.0872499999999992], zp_timestamp='2025-12-24T22:21:00')
2025-12-25T00:25:08.825 [DEBUG] [Thread-1796] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:25:08.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:25:08.909 [DEBUG] [Thread-1800] [transport.py] [_log()] starting thread (client mode): 0xb9578490
2025-12-25T00:25:08.909 [DEBUG] [Thread-1800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:25:08.923 [DEBUG] [Thread-1800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:25:08.923 [INFO] [Thread-1800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] client lang: <none>
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] server lang: <none>
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] kex follows: False
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] Compression: none
2025-12-25T00:25:08.931 [DEBUG] [Thread-1800] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:25:08.989 [DEBUG] [Thread-1800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:25:08.989 [DEBUG] [Thread-1800] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:25:08.989 [DEBUG] [Thread-1800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:25:08.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:25:08.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:25:09.047 [DEBUG] [Thread-1800] [transport.py] [_log()] userauth is OK
2025-12-25T00:25:09.047 [DEBUG] [Thread-1800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:25:09.047 [DEBUG] [Thread-1800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:25:09.047 [DEBUG] [Thread-1800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:25:09.047 [DEBUG] [Thread-1800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:25:09.060 [INFO] [Thread-1800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:25:09.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:25:09.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:25:09.909 [DEBUG] [Thread-1800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:25:09.909 [DEBUG] [Thread-1800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:25:09.959 [DEBUG] [Thread-1800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:25:09.959 [DEBUG] [Thread-1800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:25:09.967 [DEBUG] [Thread-1800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:25:09.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:25:09.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:25:09.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:25:09.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:25:09.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:25:09.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:25:09.998 [DEBUG] [Thread-1800] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:25:16.798 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:25:16.799 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:25:19.761 [DEBUG] [Thread-1802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:25:23.286 [DEBUG] [Thread-1803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:25:38.333 [DEBUG] [Thread-1804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:25:40.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:25:40.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:25:40.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:25:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 25, 21), 1.57, 90.26, 0.0, 28.2, 12.66, 1, 2, 0, 2, 0, 0),)
2025-12-25T00:25:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:25:21
2025-12-25T00:25:40.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:25:40.985 [DEBUG] [Thread-1805] [transport.py] [_log()] starting thread (client mode): 0xb9579d50
2025-12-25T00:25:40.985 [DEBUG] [Thread-1805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:25:41.006 [DEBUG] [Thread-1805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:25:41.006 [INFO] [Thread-1805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:25:41.009 [DEBUG] [Thread-1805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:25:41.009 [DEBUG] [Thread-1805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:25:41.009 [DEBUG] [Thread-1805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:25:41.009 [DEBUG] [Thread-1805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:25:41.009 [DEBUG] [Thread-1805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:25:41.009 [DEBUG] [Thread-1805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:25:41.009 [DEBUG] [Thread-1805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] client lang: <none>
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] server lang: <none>
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] kex follows: False
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] Compression: none
2025-12-25T00:25:41.010 [DEBUG] [Thread-1805] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:25:41.027 [DEBUG] [Thread-1805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:25:41.028 [DEBUG] [Thread-1805] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:25:41.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:25:41.029 [DEBUG] [Thread-1805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:25:41.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:25:41.031 [DEBUG] [Thread-1805] [transport.py] [_log()] userauth is OK
2025-12-25T00:25:41.031 [DEBUG] [Thread-1805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:25:41.031 [DEBUG] [Thread-1805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:25:41.031 [DEBUG] [Thread-1805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:25:41.031 [DEBUG] [Thread-1805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:25:41.051 [INFO] [Thread-1805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:25:41.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:25:41.847 [DEBUG] [Thread-1805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:25:41.848 [DEBUG] [Thread-1805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:25:41.848 [DEBUG] [Thread-1805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:25:41.888 [DEBUG] [Thread-1805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:25:41.888 [DEBUG] [Thread-1805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:25:41.891 [DEBUG] [Thread-1805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:25:41.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:25:41.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:25:41.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:25:41.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:25:41.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:25:41.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:25:41.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:25:41.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:25:41.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:25:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.933740 -999.00  +12.50  25.50     90  +11.00 1 3 1 3 1     0    0 0.52 -41.78 ZNeSW 29.1 25.5 148.8 28.9 13.6 -6.6 13.4 -6.7 13.2 -9.6 13.6 -8.9
2025-12-25T00:25:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:25:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:25:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.933740
2025-12-25T00:25:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:25:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:25:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:25:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:25:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T00:25:41.916 [DEBUG] [Thread-1805] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:25:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:25:21', tmtdew=1.57, humidity=90.26, cloud=0.0, wind=28.2, temperature=12.66, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:24:35.136', atlas_cloud=3, atlas_rain=1, zp_data=[1.03625, 1.4472500000000004, 1.27625, 0.8609999999999989, 1.2945000000000002, 1.2252500000000008, 1.0534999999999997, 0.8992500000000003, 0.8769999999999989, 1.3935000000000004, 1.1092499999999994, 0.9850000000000003, 1.1494999999999997, 1.2952499999999993, 1.161999999999999, 1.0559999999999992, 0.9392499999999995, 1.0015, 1.2159999999999993, 1.0892499999999998, 0.9399999999999986, 1.2617499999999984, 1.6702500000000011, 1.6247499999999997, 1.2189999999999994, 0.6494999999999997, 0.9467499999999998, 1.0405000000000006, 0.7200000000000006, 0.6965000000000012, 1.3470000000000013, 1.1310000000000011, 1.0872499999999992], zp_timestamp='2025-12-24T22:21:00')
2025-12-25T00:25:42.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:25:42.010 [DEBUG] [Thread-1808] [transport.py] [_log()] starting thread (client mode): 0xb957bdc0
2025-12-25T00:25:42.010 [DEBUG] [Thread-1808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:25:42.025 [DEBUG] [Thread-1808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:25:42.025 [INFO] [Thread-1808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:25:42.032 [DEBUG] [Thread-1808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:25:42.032 [DEBUG] [Thread-1808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:25:42.032 [DEBUG] [Thread-1808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] client lang: <none>
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] server lang: <none>
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] kex follows: False
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] Compression: none
2025-12-25T00:25:42.033 [DEBUG] [Thread-1808] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:25:42.089 [DEBUG] [Thread-1808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:25:42.089 [DEBUG] [Thread-1808] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:25:42.090 [DEBUG] [Thread-1808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:25:42.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:25:42.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:25:42.145 [DEBUG] [Thread-1808] [transport.py] [_log()] userauth is OK
2025-12-25T00:25:42.146 [DEBUG] [Thread-1808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:25:42.146 [DEBUG] [Thread-1808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:25:42.146 [DEBUG] [Thread-1808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:25:42.146 [DEBUG] [Thread-1808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:25:42.164 [INFO] [Thread-1808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:25:42.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:25:42.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:25:43.033 [DEBUG] [Thread-1808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:25:43.033 [DEBUG] [Thread-1808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:25:43.081 [DEBUG] [Thread-1808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:25:43.081 [DEBUG] [Thread-1808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:25:43.090 [DEBUG] [Thread-1808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:25:43.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:25:43.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:25:43.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:25:43.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:25:43.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:25:43.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:25:43.127 [DEBUG] [Thread-1808] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:25:53.366 [DEBUG] [Thread-1810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:26:08.419 [DEBUG] [Thread-1811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:26:13.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:26:13.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:26:13.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:26:13.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 25, 53), 1.51, 90.34, 0.0, 28.44, 12.66, 1, 2, 0, 2, 0, 0),)
2025-12-25T00:26:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:25:53
2025-12-25T00:26:13.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:26:14.090 [DEBUG] [Thread-1812] [transport.py] [_log()] starting thread (client mode): 0xb9578b50
2025-12-25T00:26:14.090 [DEBUG] [Thread-1812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:26:14.111 [DEBUG] [Thread-1812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:26:14.111 [INFO] [Thread-1812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] client lang: <none>
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] server lang: <none>
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] kex follows: False
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] Compression: none
2025-12-25T00:26:14.115 [DEBUG] [Thread-1812] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:26:14.135 [DEBUG] [Thread-1812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:26:14.136 [DEBUG] [Thread-1812] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:26:14.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:26:14.137 [DEBUG] [Thread-1812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:26:14.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:26:14.139 [DEBUG] [Thread-1812] [transport.py] [_log()] userauth is OK
2025-12-25T00:26:14.139 [DEBUG] [Thread-1812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:26:14.139 [DEBUG] [Thread-1812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:26:14.139 [DEBUG] [Thread-1812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:26:14.139 [DEBUG] [Thread-1812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:26:14.162 [INFO] [Thread-1812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:26:14.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:26:14.814 [DEBUG] [Thread-1812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:26:14.814 [DEBUG] [Thread-1812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:26:14.814 [DEBUG] [Thread-1812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:26:14.855 [DEBUG] [Thread-1812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:26:14.856 [DEBUG] [Thread-1812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:26:14.859 [DEBUG] [Thread-1812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:26:14.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:26:14.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:26:14.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:26:14.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:26:14.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:26:14.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:26:14.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:26:14.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:26:14.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:26:14.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.934435 -999.00  +12.50  19.81     90  +11.00 1 3 1 3 1     0    0 0.61 -38.61 ZN..W 19.1 19.8 158.6 26.5 13.7 -8.0 13.5 -8.6 13.3 -7.4 13.6 -8.8
2025-12-25T00:26:14.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:26:14.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:26:14.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.934435
2025-12-25T00:26:14.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:26:14.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:26:14.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:26:14.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:26:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T00:26:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:25:53', tmtdew=1.51, humidity=90.34, cloud=0.0, wind=28.44, temperature=12.66, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:25:35.184', atlas_cloud=3, atlas_rain=1, zp_data=[1.7157499999999999, 2.1412500000000003, nan, nan, 2.093, 1.7262500000000012, 1.7899999999999991, 1.6972500000000004, 1.4564999999999992, 1.9385000000000003, 3.1092499999999994, 2.162, 2.2219999999999995, 1.7937499999999993, 1.948999999999999, 1.9849999999999994, 1.7822499999999994, nan, 3.2169999999999987, 2.017249999999999, 1.8209999999999988, 1.5257499999999986, 1.5252500000000007, 2.88375, 2.666999999999999, nan, nan, 1.947, 1.024000000000001, 0.846000000000001, 1.0860000000000003, nan, nan], zp_timestamp='2025-12-24T22:24:00')
2025-12-25T00:26:14.886 [DEBUG] [Thread-1812] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:26:14.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:26:14.980 [DEBUG] [Thread-1815] [transport.py] [_log()] starting thread (client mode): 0xb95d5930
2025-12-25T00:26:14.980 [DEBUG] [Thread-1815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:26:14.996 [DEBUG] [Thread-1815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:26:14.996 [INFO] [Thread-1815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] client lang: <none>
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] server lang: <none>
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] kex follows: False
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:26:15.004 [DEBUG] [Thread-1815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:26:15.005 [DEBUG] [Thread-1815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:26:15.005 [DEBUG] [Thread-1815] [transport.py] [_log()] Compression: none
2025-12-25T00:26:15.005 [DEBUG] [Thread-1815] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:26:15.063 [DEBUG] [Thread-1815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:26:15.063 [DEBUG] [Thread-1815] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:26:15.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:26:15.064 [DEBUG] [Thread-1815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:26:15.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:26:15.119 [DEBUG] [Thread-1815] [transport.py] [_log()] userauth is OK
2025-12-25T00:26:15.120 [DEBUG] [Thread-1815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:26:15.120 [DEBUG] [Thread-1815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:26:15.129 [DEBUG] [Thread-1815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:26:15.129 [DEBUG] [Thread-1815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:26:15.153 [INFO] [Thread-1815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:26:15.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:26:15.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:26:16.005 [DEBUG] [Thread-1815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:26:16.005 [DEBUG] [Thread-1815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:26:16.053 [DEBUG] [Thread-1815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:26:16.053 [DEBUG] [Thread-1815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:26:16.064 [DEBUG] [Thread-1815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:26:16.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:26:16.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:26:16.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:26:16.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:26:16.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:26:16.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:26:16.104 [DEBUG] [Thread-1815] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:26:17.003 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:26:17.004 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:26:19.831 [DEBUG] [Thread-1817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:26:23.459 [DEBUG] [Thread-1818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:26:38.507 [DEBUG] [Thread-1819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:26:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:26:46.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:26:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:26:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 26, 26), 1.51, 90.32, 0.0, 30.74, 12.6, 1, 2, 0, 2, 0, 0),)
2025-12-25T00:26:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:26:26
2025-12-25T00:26:46.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:26:47.089 [DEBUG] [Thread-1820] [transport.py] [_log()] starting thread (client mode): 0xb95d4550
2025-12-25T00:26:47.089 [DEBUG] [Thread-1820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:26:47.110 [DEBUG] [Thread-1820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:26:47.110 [INFO] [Thread-1820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:26:47.111 [DEBUG] [Thread-1820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] client lang: <none>
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] server lang: <none>
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] kex follows: False
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] Compression: none
2025-12-25T00:26:47.112 [DEBUG] [Thread-1820] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:26:47.124 [DEBUG] [Thread-1820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:26:47.124 [DEBUG] [Thread-1820] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:26:47.124 [DEBUG] [Thread-1820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:26:47.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:26:47.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:26:47.125 [DEBUG] [Thread-1820] [transport.py] [_log()] userauth is OK
2025-12-25T00:26:47.125 [DEBUG] [Thread-1820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:26:47.125 [DEBUG] [Thread-1820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:26:47.125 [DEBUG] [Thread-1820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:26:47.125 [DEBUG] [Thread-1820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:26:47.140 [INFO] [Thread-1820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:26:47.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:26:47.889 [DEBUG] [Thread-1820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:26:47.890 [DEBUG] [Thread-1820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:26:47.890 [DEBUG] [Thread-1820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:26:47.931 [DEBUG] [Thread-1820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:26:47.931 [DEBUG] [Thread-1820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:26:47.933 [DEBUG] [Thread-1820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:26:47.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:26:47.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:26:47.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:26:47.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:26:47.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:26:47.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:26:47.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:26:47.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:26:47.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.934783 -999.00  +12.50  19.44     90  +11.00 1 3 1 3 1     0    0 0.55 -40.38 ZN..W 21.6 19.4 142.5 32.4 13.7 -9.8 13.4 -8.2 13.3 -7.9 13.6 -8.3
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.934783
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T00:26:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:26:26', tmtdew=1.51, humidity=90.32, cloud=0.0, wind=30.74, temperature=12.6, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:26:05.251', atlas_cloud=3, atlas_rain=1, zp_data=[1.7157499999999999, 2.1412500000000003, nan, nan, 2.093, 1.7262500000000012, 1.7899999999999991, 1.6972500000000004, 1.4564999999999992, 1.9385000000000003, 3.1092499999999994, 2.162, 2.2219999999999995, 1.7937499999999993, 1.948999999999999, 1.9849999999999994, 1.7822499999999994, nan, 3.2169999999999987, 2.017249999999999, 1.8209999999999988, 1.5257499999999986, 1.5252500000000007, 2.88375, 2.666999999999999, nan, nan, 1.947, 1.024000000000001, 0.846000000000001, 1.0860000000000003, nan, nan], zp_timestamp='2025-12-24T22:24:00')
2025-12-25T00:26:47.959 [DEBUG] [Thread-1820] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:26:48.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:26:53.543 [DEBUG] [Thread-1823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:27:08.591 [DEBUG] [Thread-1824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:27:17.208 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:27:17.209 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:27:19.911 [DEBUG] [Thread-1825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:27:23.622 [DEBUG] [Thread-1826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:27:38.657 [DEBUG] [Thread-1827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:27:53.695 [DEBUG] [Thread-1828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:28:08.732 [DEBUG] [Thread-1829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:28:17.414 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:28:17.415 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:28:19.980 [DEBUG] [Thread-1830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:28:23.768 [DEBUG] [Thread-1831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:28:38.801 [DEBUG] [Thread-1832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:28:53.840 [DEBUG] [Thread-1833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:29:01.013 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-25T00:29:08.872 [DEBUG] [Thread-1834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:29:17.626 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:29:17.628 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:29:20.061 [DEBUG] [Thread-1835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:29:23.909 [DEBUG] [Thread-1836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:29:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:29:31.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:29:31.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:29:31.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 29, 6), 1.48, 90.52, 0.0, 32.61, 12.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:29:31.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:29:06
2025-12-25T00:29:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:29:32.030 [DEBUG] [Thread-1837] [transport.py] [_log()] starting thread (client mode): 0xb6b01a20
2025-12-25T00:29:32.030 [DEBUG] [Thread-1837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:29:32.050 [DEBUG] [Thread-1837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:29:32.051 [INFO] [Thread-1837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:29:32.054 [DEBUG] [Thread-1837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:29:32.054 [DEBUG] [Thread-1837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:29:32.054 [DEBUG] [Thread-1837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:29:32.054 [DEBUG] [Thread-1837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:29:32.054 [DEBUG] [Thread-1837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:29:32.054 [DEBUG] [Thread-1837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:29:32.054 [DEBUG] [Thread-1837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] client lang: <none>
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] server lang: <none>
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] kex follows: False
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] Compression: none
2025-12-25T00:29:32.055 [DEBUG] [Thread-1837] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:29:32.076 [DEBUG] [Thread-1837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:29:32.076 [DEBUG] [Thread-1837] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:29:32.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:29:32.078 [DEBUG] [Thread-1837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:29:32.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:29:32.080 [DEBUG] [Thread-1837] [transport.py] [_log()] userauth is OK
2025-12-25T00:29:32.080 [DEBUG] [Thread-1837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:29:32.080 [DEBUG] [Thread-1837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:29:32.080 [DEBUG] [Thread-1837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:29:32.080 [DEBUG] [Thread-1837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:29:32.114 [INFO] [Thread-1837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:29:32.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:29:32.737 [DEBUG] [Thread-1837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:29:32.737 [DEBUG] [Thread-1837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:29:32.737 [DEBUG] [Thread-1837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:29:32.778 [DEBUG] [Thread-1837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:29:32.778 [DEBUG] [Thread-1837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:29:32.781 [DEBUG] [Thread-1837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:29:32.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:29:32.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:29:32.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:29:32.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:29:32.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:29:32.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:29:32.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:29:32.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:29:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:29:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.936866 -999.00  +12.50  25.18     90  +11.00 1 2 1 3 1     0    0 0.62 -36.51 zN..W 19.8 25.2 158.3 33.5 13.7 -15.9 13.5 -17.1 13.3 -13.1 13.7 -15.3
2025-12-25T00:29:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:29:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:29:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.936866
2025-12-25T00:29:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:29:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:29:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:29:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:29:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:29:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:29:06', tmtdew=1.48, humidity=90.52, cloud=0.0, wind=32.61, temperature=12.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:29:05.222', atlas_cloud=2, atlas_rain=1, zp_data=[1.7157499999999999, 2.1412500000000003, nan, nan, 2.093, 1.7262500000000012, 1.7899999999999991, 1.6972500000000004, 1.4564999999999992, 1.9385000000000003, 3.1092499999999994, 2.162, 2.2219999999999995, 1.7937499999999993, 1.948999999999999, 1.9849999999999994, 1.7822499999999994, nan, 3.2169999999999987, 2.017249999999999, 1.8209999999999988, 1.5257499999999986, 1.5252500000000007, 2.88375, 2.666999999999999, nan, nan, 1.947, 1.024000000000001, 0.846000000000001, 1.0860000000000003, nan, nan], zp_timestamp='2025-12-24T22:27:00')
2025-12-25T00:29:32.809 [DEBUG] [Thread-1837] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:29:32.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:29:32.902 [DEBUG] [Thread-1840] [transport.py] [_log()] starting thread (client mode): 0xb9578760
2025-12-25T00:29:32.902 [DEBUG] [Thread-1840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:29:32.917 [DEBUG] [Thread-1840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:29:32.917 [INFO] [Thread-1840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] client lang: <none>
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] server lang: <none>
2025-12-25T00:29:32.925 [DEBUG] [Thread-1840] [transport.py] [_log()] kex follows: False
2025-12-25T00:29:32.926 [DEBUG] [Thread-1840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:29:32.926 [DEBUG] [Thread-1840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:29:32.926 [DEBUG] [Thread-1840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:29:32.926 [DEBUG] [Thread-1840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:29:32.926 [DEBUG] [Thread-1840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:29:32.926 [DEBUG] [Thread-1840] [transport.py] [_log()] Compression: none
2025-12-25T00:29:32.926 [DEBUG] [Thread-1840] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:29:32.983 [DEBUG] [Thread-1840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:29:32.984 [DEBUG] [Thread-1840] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:29:32.984 [DEBUG] [Thread-1840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:29:32.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:29:32.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:29:33.040 [DEBUG] [Thread-1840] [transport.py] [_log()] userauth is OK
2025-12-25T00:29:33.040 [DEBUG] [Thread-1840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:29:33.040 [DEBUG] [Thread-1840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:29:33.040 [DEBUG] [Thread-1840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:29:33.040 [DEBUG] [Thread-1840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:29:33.065 [INFO] [Thread-1840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:29:33.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:29:33.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:29:33.871 [DEBUG] [Thread-1840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:29:33.872 [DEBUG] [Thread-1840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:29:33.920 [DEBUG] [Thread-1840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:29:33.920 [DEBUG] [Thread-1840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:29:33.929 [DEBUG] [Thread-1840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:29:33.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:29:33.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:29:33.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:29:33.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:29:33.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:29:33.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:29:33.966 [DEBUG] [Thread-1840] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:29:38.943 [DEBUG] [Thread-1842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:29:53.983 [DEBUG] [Thread-1843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:30:03.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:30:03.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:30:03.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
2025-12-25T00:30:04.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 29, 38), 1.48, 91.01, 0.0, 33.33, 12.58, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:30:04.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:29:38
2025-12-25T00:30:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:30:04.965 [DEBUG] [Thread-1844] [transport.py] [_log()] starting thread (client mode): 0xbbfcd330
2025-12-25T00:30:04.965 [DEBUG] [Thread-1844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:30:04.980 [DEBUG] [Thread-1844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:30:04.981 [INFO] [Thread-1844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] client lang: <none>
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] server lang: <none>
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] kex follows: False
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] Compression: none
2025-12-25T00:30:04.984 [DEBUG] [Thread-1844] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:30:04.992 [DEBUG] [Thread-1844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:30:04.992 [DEBUG] [Thread-1844] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:30:04.993 [DEBUG] [Thread-1844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:30:04.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:30:04.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:30:04.994 [DEBUG] [Thread-1844] [transport.py] [_log()] userauth is OK
2025-12-25T00:30:04.994 [DEBUG] [Thread-1844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:30:04.994 [DEBUG] [Thread-1844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:30:04.994 [DEBUG] [Thread-1844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:30:04.994 [DEBUG] [Thread-1844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:30:05.008 [INFO] [Thread-1844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:30:05.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:30:05.931 [DEBUG] [Thread-1844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:30:05.931 [DEBUG] [Thread-1844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:30:05.931 [DEBUG] [Thread-1844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:30:05.972 [DEBUG] [Thread-1844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:30:05.972 [DEBUG] [Thread-1844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:30:05.976 [DEBUG] [Thread-1844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:30:05.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:30:05.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:30:05.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:30:05.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:30:06.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:30:06.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:30:06.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:30:06.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:30:06.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:30:06.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.937212 -999.00  +12.50  28.96     90  +11.00 1 2 1 3 1     0    0 0.73 -32.65 ..ESw 31.1 29.0 140.0 35.1 13.6 -18.8 13.4 -17.8 13.3 -14.8 13.7 -16.7
2025-12-25T00:30:06.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:30:06.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:30:06.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.937212
2025-12-25T00:30:06.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:30:06.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:30:06.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:30:06.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:30:06.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:30:06.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:29:38', tmtdew=1.48, humidity=91.01, cloud=0.0, wind=33.33, temperature=12.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:29:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[1.7157499999999999, 2.1412500000000003, nan, nan, 2.093, 1.7262500000000012, 1.7899999999999991, 1.6972500000000004, 1.4564999999999992, 1.9385000000000003, 3.1092499999999994, 2.162, 2.2219999999999995, 1.7937499999999993, 1.948999999999999, 1.9849999999999994, 1.7822499999999994, nan, 3.2169999999999987, 2.017249999999999, 1.8209999999999988, 1.5257499999999986, 1.5252500000000007, 2.88375, 2.666999999999999, nan, nan, 1.947, 1.024000000000001, 0.846000000000001, 1.0860000000000003, nan, nan], zp_timestamp='2025-12-24T22:27:00')
2025-12-25T00:30:06.007 [DEBUG] [Thread-1844] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:30:06.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:30:06.101 [DEBUG] [Thread-1847] [transport.py] [_log()] starting thread (client mode): 0xb95d6140
2025-12-25T00:30:06.101 [DEBUG] [Thread-1847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:30:06.116 [DEBUG] [Thread-1847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:30:06.116 [INFO] [Thread-1847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:30:06.123 [DEBUG] [Thread-1847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] client lang: <none>
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] server lang: <none>
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] kex follows: False
2025-12-25T00:30:06.124 [DEBUG] [Thread-1847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:30:06.125 [DEBUG] [Thread-1847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:30:06.125 [DEBUG] [Thread-1847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:30:06.125 [DEBUG] [Thread-1847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:30:06.125 [DEBUG] [Thread-1847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:30:06.125 [DEBUG] [Thread-1847] [transport.py] [_log()] Compression: none
2025-12-25T00:30:06.125 [DEBUG] [Thread-1847] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:30:06.185 [DEBUG] [Thread-1847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:30:06.186 [DEBUG] [Thread-1847] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:30:06.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:30:06.187 [DEBUG] [Thread-1847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:30:06.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:30:06.245 [DEBUG] [Thread-1847] [transport.py] [_log()] userauth is OK
2025-12-25T00:30:06.245 [DEBUG] [Thread-1847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:30:06.245 [DEBUG] [Thread-1847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:30:06.245 [DEBUG] [Thread-1847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:30:06.245 [DEBUG] [Thread-1847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:30:06.263 [INFO] [Thread-1847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:30:06.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:30:06.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:30:07.135 [DEBUG] [Thread-1847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:30:07.136 [DEBUG] [Thread-1847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:30:07.183 [DEBUG] [Thread-1847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:30:07.184 [DEBUG] [Thread-1847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:30:07.193 [DEBUG] [Thread-1847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:30:07.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:30:07.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:30: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
2025-12-25T00:30:07.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:30:07.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:30:07.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:30:07.226 [DEBUG] [Thread-1847] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:30:09.018 [DEBUG] [Thread-1849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:30:17.835 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:30:17.837 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:30:20.122 [DEBUG] [Thread-1850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:30:24.065 [DEBUG] [Thread-1851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:30:37.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:30:37.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:30:37.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
2025-12-25T00:30:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 30, 10), 1.47, 91.04, 0.0, 36.35, 12.56, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:30:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:30:10
2025-12-25T00:30:38.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:30:38.223 [DEBUG] [Thread-1852] [transport.py] [_log()] starting thread (client mode): 0xb6b00700
2025-12-25T00:30:38.223 [DEBUG] [Thread-1852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:30:38.244 [DEBUG] [Thread-1852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:30:38.244 [INFO] [Thread-1852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:30:38.247 [DEBUG] [Thread-1852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:30:38.247 [DEBUG] [Thread-1852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:30:38.247 [DEBUG] [Thread-1852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:30:38.247 [DEBUG] [Thread-1852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:30:38.247 [DEBUG] [Thread-1852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:30:38.247 [DEBUG] [Thread-1852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] client lang: <none>
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] server lang: <none>
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] kex follows: False
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] Compression: none
2025-12-25T00:30:38.248 [DEBUG] [Thread-1852] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:30:38.265 [DEBUG] [Thread-1852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:30:38.266 [DEBUG] [Thread-1852] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:30:38.266 [DEBUG] [Thread-1852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:30:38.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:30:38.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:30:38.268 [DEBUG] [Thread-1852] [transport.py] [_log()] userauth is OK
2025-12-25T00:30:38.268 [DEBUG] [Thread-1852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:30:38.269 [DEBUG] [Thread-1852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:30:38.269 [DEBUG] [Thread-1852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:30:38.269 [DEBUG] [Thread-1852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:30:38.307 [INFO] [Thread-1852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:30:38.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:30:38.974 [DEBUG] [Thread-1852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:30:38.974 [DEBUG] [Thread-1852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:30:38.975 [DEBUG] [Thread-1852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:30:39.015 [DEBUG] [Thread-1852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:30:39.015 [DEBUG] [Thread-1852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:30:39.019 [DEBUG] [Thread-1852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:30:39.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:30:39.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:30:39.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:30:39.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:30:39.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:30:39.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:30:39.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:30:39.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.937560 -999.00  +12.40  29.07     90  +10.90 1 2 1 3 1     0    0 0.63 -35.26 ZNeSW 23.5 29.1 145.2 36.5 13.6 -19.5 13.4 -18.5 13.3 -17.4 13.6 -18.4
2025-12-25T00:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.937560
2025-12-25T00:30:39.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:30:39.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:30:39.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:30:39.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:30:39.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:30:39.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:30:10', tmtdew=1.47, humidity=91.04, cloud=0.0, wind=36.35, temperature=12.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:30:05.184', atlas_cloud=2, atlas_rain=1, zp_data=[1.7157499999999999, 2.1412500000000003, nan, nan, 2.093, 1.7262500000000012, 1.7899999999999991, 1.6972500000000004, 1.4564999999999992, 1.9385000000000003, 3.1092499999999994, 2.162, 2.2219999999999995, 1.7937499999999993, 1.948999999999999, 1.9849999999999994, 1.7822499999999994, nan, 3.2169999999999987, 2.017249999999999, 1.8209999999999988, 1.5257499999999986, 1.5252500000000007, 2.88375, 2.666999999999999, nan, nan, 1.947, 1.024000000000001, 0.846000000000001, 1.0860000000000003, nan, nan], zp_timestamp='2025-12-24T22:27:00')
2025-12-25T00:30:39.045 [DEBUG] [Thread-1852] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:30:39.097 [DEBUG] [Thread-1855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:30:39.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:30:39.135 [DEBUG] [Thread-1856] [transport.py] [_log()] starting thread (client mode): 0xb95d4550
2025-12-25T00:30:39.135 [DEBUG] [Thread-1856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:30:39.152 [DEBUG] [Thread-1856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:30:39.152 [INFO] [Thread-1856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:30:39.159 [DEBUG] [Thread-1856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:30:39.159 [DEBUG] [Thread-1856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:30:39.159 [DEBUG] [Thread-1856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:30:39.159 [DEBUG] [Thread-1856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:30:39.159 [DEBUG] [Thread-1856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] client lang: <none>
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] server lang: <none>
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] kex follows: False
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] Compression: none
2025-12-25T00:30:39.160 [DEBUG] [Thread-1856] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:30:39.217 [DEBUG] [Thread-1856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:30:39.218 [DEBUG] [Thread-1856] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:30:39.219 [DEBUG] [Thread-1856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:30:39.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:30:39.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:30:39.274 [DEBUG] [Thread-1856] [transport.py] [_log()] userauth is OK
2025-12-25T00:30:39.274 [DEBUG] [Thread-1856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:30:39.274 [DEBUG] [Thread-1856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:30:39.274 [DEBUG] [Thread-1856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:30:39.274 [DEBUG] [Thread-1856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:30:39.293 [INFO] [Thread-1856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:30:39.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:30:39.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:30:40.118 [DEBUG] [Thread-1856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:30:40.118 [DEBUG] [Thread-1856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:30:40.166 [DEBUG] [Thread-1856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:30:40.166 [DEBUG] [Thread-1856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:30:40.175 [DEBUG] [Thread-1856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:30:40.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:30:40.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:30:40.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
2025-12-25T00:30:40.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:30:40.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:30:40.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:30:40.212 [DEBUG] [Thread-1856] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:30:54.136 [DEBUG] [Thread-1858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:31:09.168 [DEBUG] [Thread-1859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:31:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:31:10.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:31:10.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:31:10.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 30, 42), 1.42, 91.07, 0.0, 31.42, 12.51, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:31:10.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:30:42
2025-12-25T00:31:11.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:31:11.199 [DEBUG] [Thread-1860] [transport.py] [_log()] starting thread (client mode): 0xbbfcff10
2025-12-25T00:31:11.199 [DEBUG] [Thread-1860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:31:11.212 [DEBUG] [Thread-1860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:31:11.212 [INFO] [Thread-1860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] client lang: <none>
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] server lang: <none>
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] kex follows: False
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:31:11.214 [DEBUG] [Thread-1860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:31:11.215 [DEBUG] [Thread-1860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:31:11.215 [DEBUG] [Thread-1860] [transport.py] [_log()] Compression: none
2025-12-25T00:31:11.215 [DEBUG] [Thread-1860] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:31:11.223 [DEBUG] [Thread-1860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:31:11.223 [DEBUG] [Thread-1860] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:31:11.223 [DEBUG] [Thread-1860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:31:11.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:31:11.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:31:11.225 [DEBUG] [Thread-1860] [transport.py] [_log()] userauth is OK
2025-12-25T00:31:11.225 [DEBUG] [Thread-1860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:31:11.225 [DEBUG] [Thread-1860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:31:11.225 [DEBUG] [Thread-1860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:31:11.225 [DEBUG] [Thread-1860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:31:11.240 [INFO] [Thread-1860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:31:11.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:31:12.034 [DEBUG] [Thread-1860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:31:12.035 [DEBUG] [Thread-1860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:31:12.035 [DEBUG] [Thread-1860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:31:12.076 [DEBUG] [Thread-1860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:31:12.076 [DEBUG] [Thread-1860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:31:12.079 [DEBUG] [Thread-1860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:31:12.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:31:12.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:31:12.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:31:12.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:31:12.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:31:12.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:31:12.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:31:12.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:31:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:31:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.937908 -999.00  +12.40  23.53     90  +10.90 1 2 1 3 1     0    0 0.56 -37.24 ZNeSW 21.4 23.5 145.8 33.9 13.5 -18.3 13.4 -18.8 13.2 -18.0 13.6 -18.8
2025-12-25T00:31:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:31:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:31:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.937908
2025-12-25T00:31:12.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:31:12.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:31:12.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:31:12.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:31:12.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:31:12.105 [DEBUG] [Thread-1860] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:31:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:30:42', tmtdew=1.42, humidity=91.07, cloud=0.0, wind=31.42, temperature=12.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:30:35.251', atlas_cloud=2, atlas_rain=1, zp_data=[1.7157499999999999, 2.1412500000000003, nan, nan, 2.093, 1.7262500000000012, 1.7899999999999991, 1.6972500000000004, 1.4564999999999992, 1.9385000000000003, 3.1092499999999994, 2.162, 2.2219999999999995, 1.7937499999999993, 1.948999999999999, 1.9849999999999994, 1.7822499999999994, nan, 3.2169999999999987, 2.017249999999999, 1.8209999999999988, 1.5257499999999986, 1.5252500000000007, 2.88375, 2.666999999999999, nan, nan, 1.947, 1.024000000000001, 0.846000000000001, 1.0860000000000003, nan, nan], zp_timestamp='2025-12-24T22:27:00')
2025-12-25T00:31:12.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:31:12.200 [DEBUG] [Thread-1863] [transport.py] [_log()] starting thread (client mode): 0xb6b01450
2025-12-25T00:31:12.200 [DEBUG] [Thread-1863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:31:12.221 [DEBUG] [Thread-1863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:31:12.221 [INFO] [Thread-1863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:31:12.228 [DEBUG] [Thread-1863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] client lang: <none>
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] server lang: <none>
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] kex follows: False
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:31:12.229 [DEBUG] [Thread-1863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:31:12.230 [DEBUG] [Thread-1863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:31:12.230 [DEBUG] [Thread-1863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:31:12.230 [DEBUG] [Thread-1863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:31:12.230 [DEBUG] [Thread-1863] [transport.py] [_log()] Compression: none
2025-12-25T00:31:12.230 [DEBUG] [Thread-1863] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:31:12.287 [DEBUG] [Thread-1863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:31:12.287 [DEBUG] [Thread-1863] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:31:12.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:31:12.288 [DEBUG] [Thread-1863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:31:12.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:31:12.343 [DEBUG] [Thread-1863] [transport.py] [_log()] userauth is OK
2025-12-25T00:31:12.343 [DEBUG] [Thread-1863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:31:12.343 [DEBUG] [Thread-1863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:31:12.344 [DEBUG] [Thread-1863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:31:12.344 [DEBUG] [Thread-1863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:31:12.369 [INFO] [Thread-1863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:31:12.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:31:12.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:31:13.260 [DEBUG] [Thread-1863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:31:13.261 [DEBUG] [Thread-1863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:31:13.309 [DEBUG] [Thread-1863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:31:13.309 [DEBUG] [Thread-1863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:31:13.318 [DEBUG] [Thread-1863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:31:13.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:31:13.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:31: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') -> 00000000
2025-12-25T00:31:13.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:31:13.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:31:13.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:31:13.351 [DEBUG] [Thread-1863] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:31:18.037 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:31:18.038 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:31:20.189 [DEBUG] [Thread-1865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:31:24.202 [DEBUG] [Thread-1866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:31:39.261 [DEBUG] [Thread-1867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:31:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:31:43.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:31:43.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
2025-12-25T00:31:44.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 31, 14), 1.42, 91.07, 0.0, 29.08, 12.5, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:31:44.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:31:14
2025-12-25T00:31:44.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:31:44.351 [DEBUG] [Thread-1868] [transport.py] [_log()] starting thread (client mode): 0xb95b0430
2025-12-25T00:31:44.351 [DEBUG] [Thread-1868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:31:44.370 [DEBUG] [Thread-1868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:31:44.371 [INFO] [Thread-1868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] client lang: <none>
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] server lang: <none>
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] kex follows: False
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] Compression: none
2025-12-25T00:31:44.374 [DEBUG] [Thread-1868] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:31:44.391 [DEBUG] [Thread-1868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:31:44.392 [DEBUG] [Thread-1868] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:31:44.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:31:44.392 [DEBUG] [Thread-1868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:31:44.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:31:44.436 [DEBUG] [Thread-1868] [transport.py] [_log()] userauth is OK
2025-12-25T00:31:44.436 [DEBUG] [Thread-1868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:31:44.436 [DEBUG] [Thread-1868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:31:44.436 [DEBUG] [Thread-1868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:31:44.437 [DEBUG] [Thread-1868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:31:44.468 [INFO] [Thread-1868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:31:44.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:31:45.108 [DEBUG] [Thread-1868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:31:45.108 [DEBUG] [Thread-1868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:31:45.109 [DEBUG] [Thread-1868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:31:45.149 [DEBUG] [Thread-1868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:31:45.149 [DEBUG] [Thread-1868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:31:45.153 [DEBUG] [Thread-1868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:31:45.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:31:45.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:31:45.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:31:45.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:31:45.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:31:45.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:31:45.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:31:45.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:31:45.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:31:45.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.938255 -999.00  +12.40  18.22     90  +10.90 1 2 1 3 1     0    0 0.65 -32.95 ZNEsW 20.9 18.2 157.4 26.7 13.6 -16.4 13.4 -17.0 13.2 -16.9 13.6 -17.9
2025-12-25T00:31:45.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:31:45.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:31:45.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.938255
2025-12-25T00:31:45.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:31:45.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:31:45.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:31:45.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:31:45.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:31:45.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:31:14', tmtdew=1.42, humidity=91.07, cloud=0.0, wind=29.08, temperature=12.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:31:05.232', atlas_cloud=2, atlas_rain=1, zp_data=[1.7157499999999999, 2.1412500000000003, nan, nan, 2.093, 1.7262500000000012, 1.7899999999999991, 1.6972500000000004, 1.4564999999999992, 1.9385000000000003, 3.1092499999999994, 2.162, 2.2219999999999995, 1.7937499999999993, 1.948999999999999, 1.9849999999999994, 1.7822499999999994, nan, 3.2169999999999987, 2.017249999999999, 1.8209999999999988, 1.5257499999999986, 1.5252500000000007, 2.88375, 2.666999999999999, nan, nan, 1.947, 1.024000000000001, 0.846000000000001, 1.0860000000000003, nan, nan], zp_timestamp='2025-12-24T22:27:00')
2025-12-25T00:31:45.181 [DEBUG] [Thread-1868] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:31:45.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:31:45.276 [DEBUG] [Thread-1871] [transport.py] [_log()] starting thread (client mode): 0xb95d4f70
2025-12-25T00:31:45.276 [DEBUG] [Thread-1871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:31:45.290 [DEBUG] [Thread-1871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:31:45.290 [INFO] [Thread-1871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:31:45.298 [DEBUG] [Thread-1871] [transport.py] [_log()] client lang: <none>
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] server lang: <none>
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] kex follows: False
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] Compression: none
2025-12-25T00:31:45.299 [DEBUG] [Thread-1871] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:31:45.356 [DEBUG] [Thread-1871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:31:45.356 [DEBUG] [Thread-1871] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:31:45.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:31:45.357 [DEBUG] [Thread-1871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:31:45.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:31:45.412 [DEBUG] [Thread-1871] [transport.py] [_log()] userauth is OK
2025-12-25T00:31:45.412 [DEBUG] [Thread-1871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:31:45.412 [DEBUG] [Thread-1871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:31:45.412 [DEBUG] [Thread-1871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:31:45.412 [DEBUG] [Thread-1871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:31:45.431 [INFO] [Thread-1871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:31:45.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:31:45.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:31:46.260 [DEBUG] [Thread-1871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:31:46.261 [DEBUG] [Thread-1871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:31:46.308 [DEBUG] [Thread-1871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:31:46.309 [DEBUG] [Thread-1871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:31:46.321 [DEBUG] [Thread-1871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:31:46.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:31:46.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')
2025-12-25T00:31:46.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:31:46.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:31:46.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:31:46.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:31:46.363 [DEBUG] [Thread-1871] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:31:54.288 [DEBUG] [Thread-1873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:32:09.340 [DEBUG] [Thread-1874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:32:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:32:16.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:32:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:32:17.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 31, 46), 1.41, 91.09, 0.0, 30.4, 12.45, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:32:17.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:31:46
2025-12-25T00:32:17.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:32:17.374 [DEBUG] [Thread-1875] [transport.py] [_log()] starting thread (client mode): 0xb95d6e60
2025-12-25T00:32:17.374 [DEBUG] [Thread-1875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:32:17.394 [DEBUG] [Thread-1875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:32:17.395 [INFO] [Thread-1875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] client lang: <none>
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] server lang: <none>
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] kex follows: False
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] Compression: none
2025-12-25T00:32:17.396 [DEBUG] [Thread-1875] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:32:17.412 [DEBUG] [Thread-1875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:32:17.412 [DEBUG] [Thread-1875] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:32:17.412 [DEBUG] [Thread-1875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:32:17.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:32:17.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:32:17.413 [DEBUG] [Thread-1875] [transport.py] [_log()] userauth is OK
2025-12-25T00:32:17.413 [DEBUG] [Thread-1875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:32:17.413 [DEBUG] [Thread-1875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:32:17.413 [DEBUG] [Thread-1875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:32:17.413 [DEBUG] [Thread-1875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:32:17.422 [INFO] [Thread-1875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:32:17.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:32:18.039 [DEBUG] [Thread-1875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:32:18.039 [DEBUG] [Thread-1875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:32:18.039 [DEBUG] [Thread-1875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:32:18.080 [DEBUG] [Thread-1875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:32:18.080 [DEBUG] [Thread-1875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:32:18.082 [DEBUG] [Thread-1875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:32:18.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:32:18.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:32:18.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:32:18.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:32:18.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:32:18.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:32:18.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.938602 -999.00  +12.40  16.93     90  +10.90 1 1 1 3 1     0    0 0.73 -31.01 ZNESW 19.0 16.9 166.2 24.6 13.6 -16.0 13.4 -14.2 13.2 -14.8 13.6 -15.1
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.938602
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:32:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:31:46', tmtdew=1.41, humidity=91.09, cloud=0.0, wind=30.4, temperature=12.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:31:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:31:00')
2025-12-25T00:32:18.100 [DEBUG] [Thread-1875] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:32:18.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:32:18.184 [DEBUG] [Thread-1878] [transport.py] [_log()] starting thread (client mode): 0xb95b1120
2025-12-25T00:32:18.185 [DEBUG] [Thread-1878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:32:18.203 [DEBUG] [Thread-1878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:32:18.203 [INFO] [Thread-1878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:32:18.210 [DEBUG] [Thread-1878] [transport.py] [_log()] client lang: <none>
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] server lang: <none>
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] kex follows: False
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] Compression: none
2025-12-25T00:32:18.211 [DEBUG] [Thread-1878] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:32:18.240 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:32:18.241 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:32:18.267 [DEBUG] [Thread-1878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:32:18.267 [DEBUG] [Thread-1878] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:32:18.267 [DEBUG] [Thread-1878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:32:18.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:32:18.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:32:18.324 [DEBUG] [Thread-1878] [transport.py] [_log()] userauth is OK
2025-12-25T00:32:18.324 [DEBUG] [Thread-1878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:32:18.324 [DEBUG] [Thread-1878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:32:18.324 [DEBUG] [Thread-1878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:32:18.324 [DEBUG] [Thread-1878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:32:18.341 [INFO] [Thread-1878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:32:18.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:32:18.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:32:19.202 [DEBUG] [Thread-1878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:32:19.202 [DEBUG] [Thread-1878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:32:19.250 [DEBUG] [Thread-1878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:32:19.251 [DEBUG] [Thread-1878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:32:19.259 [DEBUG] [Thread-1878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:32:19.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:32:19.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:32:19.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:32:19.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:32:19.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:32:19.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:32:19.290 [DEBUG] [Thread-1878] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:32:20.242 [DEBUG] [Thread-1880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:32:24.372 [DEBUG] [Thread-1881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:32:39.427 [DEBUG] [Thread-1882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:32:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:32:49.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:32:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:32:49.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 32, 18), 1.4, 91.14, 0.0, 30.08, 12.48, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:32:49.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:32:18
2025-12-25T00:32:50.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:32:50.269 [DEBUG] [Thread-1883] [transport.py] [_log()] starting thread (client mode): 0xb95b2f20
2025-12-25T00:32:50.270 [DEBUG] [Thread-1883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:32:50.289 [DEBUG] [Thread-1883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:32:50.289 [INFO] [Thread-1883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:32:50.293 [DEBUG] [Thread-1883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:32:50.293 [DEBUG] [Thread-1883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:32:50.293 [DEBUG] [Thread-1883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:32:50.293 [DEBUG] [Thread-1883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:32:50.293 [DEBUG] [Thread-1883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:32:50.293 [DEBUG] [Thread-1883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:32:50.293 [DEBUG] [Thread-1883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:32:50.293 [DEBUG] [Thread-1883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] client lang: <none>
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] server lang: <none>
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] kex follows: False
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] Compression: none
2025-12-25T00:32:50.294 [DEBUG] [Thread-1883] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:32:50.305 [DEBUG] [Thread-1883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:32:50.306 [DEBUG] [Thread-1883] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:32:50.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:32:50.307 [DEBUG] [Thread-1883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:32:50.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:32:50.309 [DEBUG] [Thread-1883] [transport.py] [_log()] userauth is OK
2025-12-25T00:32:50.310 [DEBUG] [Thread-1883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:32:50.310 [DEBUG] [Thread-1883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:32:50.310 [DEBUG] [Thread-1883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:32:50.310 [DEBUG] [Thread-1883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:32:50.334 [INFO] [Thread-1883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:32:50.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:32:50.982 [DEBUG] [Thread-1883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:32:50.982 [DEBUG] [Thread-1883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:32:50.983 [DEBUG] [Thread-1883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:32:51.022 [DEBUG] [Thread-1883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:32:51.023 [DEBUG] [Thread-1883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:32:51.025 [DEBUG] [Thread-1883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:32:51.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:32:51.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:32:51.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:32:51.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:32:51.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:32:51.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:32:51.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:32:51.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:32:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:32:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.939296 -999.00  +12.40  23.85     90  +10.90 1 1 1 3 1     0    0 0.70 -31.31 ZNESW 19.2 23.9 146.0 28.9 13.5 -17.1 13.4 -15.5 13.2 -15.3 13.5 -15.5
2025-12-25T00:32:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:32:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:32:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.939296
2025-12-25T00:32:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:32:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:32:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:32:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:32:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:32:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:32:18', tmtdew=1.4, humidity=91.14, cloud=0.0, wind=30.08, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:32:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:31:00')
2025-12-25T00:32:51.044 [DEBUG] [Thread-1883] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:32:51.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:32:51.130 [DEBUG] [Thread-1886] [transport.py] [_log()] starting thread (client mode): 0xbbfcffa0
2025-12-25T00:32:51.130 [DEBUG] [Thread-1886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:32:51.145 [DEBUG] [Thread-1886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:32:51.145 [INFO] [Thread-1886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:32:51.152 [DEBUG] [Thread-1886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:32:51.152 [DEBUG] [Thread-1886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:32:51.152 [DEBUG] [Thread-1886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:32:51.152 [DEBUG] [Thread-1886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:32:51.152 [DEBUG] [Thread-1886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] client lang: <none>
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] server lang: <none>
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] kex follows: False
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] Compression: none
2025-12-25T00:32:51.153 [DEBUG] [Thread-1886] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:32:51.208 [DEBUG] [Thread-1886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:32:51.208 [DEBUG] [Thread-1886] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:32:51.208 [DEBUG] [Thread-1886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:32:51.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:32:51.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:32:51.266 [DEBUG] [Thread-1886] [transport.py] [_log()] userauth is OK
2025-12-25T00:32:51.266 [DEBUG] [Thread-1886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:32:51.266 [DEBUG] [Thread-1886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:32:51.266 [DEBUG] [Thread-1886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:32:51.266 [DEBUG] [Thread-1886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:32:51.284 [INFO] [Thread-1886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:32:51.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:32:51.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:32:52.133 [DEBUG] [Thread-1886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:32:52.133 [DEBUG] [Thread-1886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:32:52.181 [DEBUG] [Thread-1886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:32:52.182 [DEBUG] [Thread-1886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:32:52.190 [DEBUG] [Thread-1886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:32:52.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:32:52.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:32:52.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:32:52.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:32:52.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:32:52.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:32:52.222 [DEBUG] [Thread-1886] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:32:54.460 [DEBUG] [Thread-1888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:33:09.507 [DEBUG] [Thread-1889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:33:18.445 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:33:18.447 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:33:20.322 [DEBUG] [Thread-1890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:33:22.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:33:22.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:33:22.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:33:22.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 32, 50), 1.4, 91.14, 0.0, 29.25, 12.45, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:33:22.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:32:50
2025-12-25T00:33:23.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:33:23.226 [DEBUG] [Thread-1891] [transport.py] [_log()] starting thread (client mode): 0xbbfcff70
2025-12-25T00:33:23.226 [DEBUG] [Thread-1891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:33:23.247 [DEBUG] [Thread-1891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:33:23.247 [INFO] [Thread-1891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:33:23.250 [DEBUG] [Thread-1891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:33:23.250 [DEBUG] [Thread-1891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:33:23.250 [DEBUG] [Thread-1891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] client lang: <none>
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] server lang: <none>
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] kex follows: False
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] Compression: none
2025-12-25T00:33:23.251 [DEBUG] [Thread-1891] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:33:23.266 [DEBUG] [Thread-1891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:33:23.266 [DEBUG] [Thread-1891] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:33:23.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:33:23.266 [DEBUG] [Thread-1891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:33:23.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:33:23.267 [DEBUG] [Thread-1891] [transport.py] [_log()] userauth is OK
2025-12-25T00:33:23.267 [DEBUG] [Thread-1891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:33:23.267 [DEBUG] [Thread-1891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:33:23.267 [DEBUG] [Thread-1891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:33:23.267 [DEBUG] [Thread-1891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:33:23.282 [INFO] [Thread-1891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:33:23.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:33:23.916 [DEBUG] [Thread-1891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:33:23.916 [DEBUG] [Thread-1891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:33:23.916 [DEBUG] [Thread-1891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:33:23.958 [DEBUG] [Thread-1891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:33:23.958 [DEBUG] [Thread-1891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:33:23.960 [DEBUG] [Thread-1891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:33:23.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:33:23.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:33:23.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:33:23.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:33:23.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:33:23.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:33:23.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:33:23.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.939643 -999.00  +12.40  22.56     90  +10.90 1 1 1 3 1     0    0 0.81 -28.06 ZNESW 20.1 22.6 159.2 28.7 13.5 -17.1 13.3 -15.9 13.2 -16.8 13.5 -17.0
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.939643
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:33:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:32:50', tmtdew=1.4, humidity=91.14, cloud=0.0, wind=29.25, temperature=12.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:33:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:31:00')
2025-12-25T00:33:23.978 [DEBUG] [Thread-1891] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:33:24.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:33:24.067 [DEBUG] [Thread-1894] [transport.py] [_log()] starting thread (client mode): 0xbbfcd000
2025-12-25T00:33:24.067 [DEBUG] [Thread-1894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:33:24.085 [DEBUG] [Thread-1894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:33:24.085 [INFO] [Thread-1894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:33:24.092 [DEBUG] [Thread-1894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] client lang: <none>
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] server lang: <none>
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] kex follows: False
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] Compression: none
2025-12-25T00:33:24.093 [DEBUG] [Thread-1894] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:33:24.149 [DEBUG] [Thread-1894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:33:24.149 [DEBUG] [Thread-1894] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:33:24.150 [DEBUG] [Thread-1894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:33:24.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:33:24.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:33:24.213 [DEBUG] [Thread-1894] [transport.py] [_log()] userauth is OK
2025-12-25T00:33:24.213 [DEBUG] [Thread-1894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:33:24.213 [DEBUG] [Thread-1894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:33:24.213 [DEBUG] [Thread-1894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:33:24.213 [DEBUG] [Thread-1894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:33:24.227 [INFO] [Thread-1894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:33:24.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:33:24.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:33:24.541 [DEBUG] [Thread-1896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:33:25.045 [DEBUG] [Thread-1894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:33:25.045 [DEBUG] [Thread-1894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:33:25.093 [DEBUG] [Thread-1894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:33:25.093 [DEBUG] [Thread-1894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:33:25.102 [DEBUG] [Thread-1894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:33:25.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:33:25.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')
2025-12-25T00:33:25.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:33:25.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:33:25.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:33:25.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:33:25.138 [DEBUG] [Thread-1894] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:33:39.576 [DEBUG] [Thread-1897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:33:54.609 [DEBUG] [Thread-1898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:33:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:33:55.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:33:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:33:55.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 33, 22), 1.39, 91.22, 0.0, 28.8, 12.51, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:33:55.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:33:22
2025-12-25T00:33:56.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:33:56.210 [DEBUG] [Thread-1899] [transport.py] [_log()] starting thread (client mode): 0xb95b36d0
2025-12-25T00:33:56.210 [DEBUG] [Thread-1899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:33:56.230 [DEBUG] [Thread-1899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:33:56.230 [INFO] [Thread-1899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:33:56.233 [DEBUG] [Thread-1899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:33:56.233 [DEBUG] [Thread-1899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:33:56.233 [DEBUG] [Thread-1899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] client lang: <none>
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] server lang: <none>
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] kex follows: False
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] Compression: none
2025-12-25T00:33:56.234 [DEBUG] [Thread-1899] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:33:56.248 [DEBUG] [Thread-1899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:33:56.249 [DEBUG] [Thread-1899] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:33:56.249 [DEBUG] [Thread-1899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:33:56.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:33:56.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:33:56.250 [DEBUG] [Thread-1899] [transport.py] [_log()] userauth is OK
2025-12-25T00:33:56.250 [DEBUG] [Thread-1899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:33:56.250 [DEBUG] [Thread-1899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:33:56.250 [DEBUG] [Thread-1899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:33:56.250 [DEBUG] [Thread-1899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:33:56.268 [INFO] [Thread-1899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:33:56.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:33:56.924 [DEBUG] [Thread-1899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:33:56.924 [DEBUG] [Thread-1899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:33:56.924 [DEBUG] [Thread-1899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:33:56.966 [DEBUG] [Thread-1899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:33:56.966 [DEBUG] [Thread-1899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:33:56.968 [DEBUG] [Thread-1899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:33:56.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:33:56.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:33:56.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:33:56.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:33:56.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:33:56.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:33:56.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.939991 -999.00  +12.40  17.70     90  +10.90 1 1 1 3 1     0    0 0.76 -28.80 ZNESW 16.8 17.7 163.5 29.0 13.5 -16.0 13.3 -14.1 13.2 -14.5 13.5 -15.6
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.939991
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:33:56.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:33:22', tmtdew=1.39, humidity=91.22, cloud=0.0, wind=28.8, temperature=12.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:33:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:31:00')
2025-12-25T00:33:56.987 [DEBUG] [Thread-1899] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:33:57.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:33:57.071 [DEBUG] [Thread-1902] [transport.py] [_log()] starting thread (client mode): 0xb95b0be0
2025-12-25T00:33:57.071 [DEBUG] [Thread-1902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:33:57.086 [DEBUG] [Thread-1902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:33:57.086 [INFO] [Thread-1902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] client lang: <none>
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] server lang: <none>
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] kex follows: False
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:33:57.093 [DEBUG] [Thread-1902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:33:57.094 [DEBUG] [Thread-1902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:33:57.094 [DEBUG] [Thread-1902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:33:57.094 [DEBUG] [Thread-1902] [transport.py] [_log()] Compression: none
2025-12-25T00:33:57.094 [DEBUG] [Thread-1902] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:33:57.151 [DEBUG] [Thread-1902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:33:57.152 [DEBUG] [Thread-1902] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:33:57.153 [DEBUG] [Thread-1902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:33:57.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:33:57.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:33:57.207 [DEBUG] [Thread-1902] [transport.py] [_log()] userauth is OK
2025-12-25T00:33:57.208 [DEBUG] [Thread-1902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:33:57.208 [DEBUG] [Thread-1902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:33:57.208 [DEBUG] [Thread-1902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:33:57.208 [DEBUG] [Thread-1902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:33:57.227 [INFO] [Thread-1902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:33:57.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:33:57.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:33:58.050 [DEBUG] [Thread-1902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:33:58.050 [DEBUG] [Thread-1902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:33:58.097 [DEBUG] [Thread-1902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:33:58.098 [DEBUG] [Thread-1902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:33:58.107 [DEBUG] [Thread-1902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:33:58.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:33:58.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:33:58.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:33:58.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:33:58.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:33:58.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:33:58.141 [DEBUG] [Thread-1902] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:34:09.644 [DEBUG] [Thread-1904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:34:18.651 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:34:18.652 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:34:20.374 [DEBUG] [Thread-1905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:34:24.693 [DEBUG] [Thread-1906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:34:28.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:34:28.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:34:28.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:34:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 33, 54), 1.38, 91.27, 0.0, 29.01, 12.48, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:34:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:33:54
2025-12-25T00:34:29.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:34:29.203 [DEBUG] [Thread-1907] [transport.py] [_log()] starting thread (client mode): 0xb95b3b80
2025-12-25T00:34:29.203 [DEBUG] [Thread-1907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:34:29.214 [DEBUG] [Thread-1907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:34:29.214 [INFO] [Thread-1907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:34:29.217 [DEBUG] [Thread-1907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:34:29.217 [DEBUG] [Thread-1907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:34:29.217 [DEBUG] [Thread-1907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:34:29.217 [DEBUG] [Thread-1907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:34:29.217 [DEBUG] [Thread-1907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:34:29.217 [DEBUG] [Thread-1907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:34:29.217 [DEBUG] [Thread-1907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] client lang: <none>
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] server lang: <none>
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] kex follows: False
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] Compression: none
2025-12-25T00:34:29.218 [DEBUG] [Thread-1907] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:34:29.235 [DEBUG] [Thread-1907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:34:29.236 [DEBUG] [Thread-1907] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:34:29.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:34:29.237 [DEBUG] [Thread-1907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:34:29.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:34:29.238 [DEBUG] [Thread-1907] [transport.py] [_log()] userauth is OK
2025-12-25T00:34:29.238 [DEBUG] [Thread-1907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:34:29.238 [DEBUG] [Thread-1907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:34:29.239 [DEBUG] [Thread-1907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:34:29.239 [DEBUG] [Thread-1907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:34:29.262 [INFO] [Thread-1907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:34:29.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:34:29.839 [DEBUG] [Thread-1907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:34:29.839 [DEBUG] [Thread-1907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:34:29.840 [DEBUG] [Thread-1907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:34:29.880 [DEBUG] [Thread-1907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:34:29.880 [DEBUG] [Thread-1907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:34:29.884 [DEBUG] [Thread-1907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:34:29.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:34:29.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:34:29.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:34:29.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:34:29.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:34:29.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:34:29.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:34:29.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:34:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:34:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.940338 -999.00  +12.40  15.46     90  +10.90 1 1 1 3 1     0    0 0.70 -30.00 ZNESW 14.2 15.5 146.6 25.6 13.5 -14.1 13.3 -15.3 13.1 -13.7 13.5 -15.6
2025-12-25T00:34:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:34:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:34:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.940338
2025-12-25T00:34:29.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:34:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:34:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:34:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:34:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:34:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:33:54', tmtdew=1.38, humidity=91.27, cloud=0.0, wind=29.01, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:34:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:31:00')
2025-12-25T00:34:29.912 [DEBUG] [Thread-1907] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:34:30.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:34:30.011 [DEBUG] [Thread-1910] [transport.py] [_log()] starting thread (client mode): 0xb95b2a70
2025-12-25T00:34:30.012 [DEBUG] [Thread-1910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:34:30.026 [DEBUG] [Thread-1910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:34:30.026 [INFO] [Thread-1910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:34:30.034 [DEBUG] [Thread-1910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:34:30.034 [DEBUG] [Thread-1910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:34:30.034 [DEBUG] [Thread-1910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:34:30.034 [DEBUG] [Thread-1910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:34:30.034 [DEBUG] [Thread-1910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:34:30.034 [DEBUG] [Thread-1910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:34:30.034 [DEBUG] [Thread-1910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] client lang: <none>
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] server lang: <none>
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] kex follows: False
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] Compression: none
2025-12-25T00:34:30.035 [DEBUG] [Thread-1910] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:34:30.096 [DEBUG] [Thread-1910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:34:30.097 [DEBUG] [Thread-1910] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:34:30.098 [DEBUG] [Thread-1910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:34:30.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:34:30.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:34:30.153 [DEBUG] [Thread-1910] [transport.py] [_log()] userauth is OK
2025-12-25T00:34:30.153 [DEBUG] [Thread-1910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:34:30.153 [DEBUG] [Thread-1910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:34:30.153 [DEBUG] [Thread-1910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:34:30.153 [DEBUG] [Thread-1910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:34:30.172 [INFO] [Thread-1910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:34:30.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:34:30.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:34:30.995 [DEBUG] [Thread-1910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:34:30.996 [DEBUG] [Thread-1910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:34:31.044 [DEBUG] [Thread-1910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:34:31.044 [DEBUG] [Thread-1910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:34:31.053 [DEBUG] [Thread-1910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:34:31.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:34:31.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:34:31.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:34:31.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:34:31.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:34:31.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:34:31.090 [DEBUG] [Thread-1910] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:34:39.729 [DEBUG] [Thread-1912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:34:54.783 [DEBUG] [Thread-1913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:35:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:35:01.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:35:01.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
2025-12-25T00:35:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 34, 26), 1.38, 91.29, 0.0, 27.75, 12.46, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:35:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:34:26
2025-12-25T00:35:01.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:35:02.086 [DEBUG] [Thread-1914] [transport.py] [_log()] starting thread (client mode): 0xbbfcd4e0
2025-12-25T00:35:02.086 [DEBUG] [Thread-1914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:35:02.104 [DEBUG] [Thread-1914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:35:02.104 [INFO] [Thread-1914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] client lang: <none>
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] server lang: <none>
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] kex follows: False
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:35:02.105 [DEBUG] [Thread-1914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:35:02.106 [DEBUG] [Thread-1914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:35:02.106 [DEBUG] [Thread-1914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:35:02.106 [DEBUG] [Thread-1914] [transport.py] [_log()] Compression: none
2025-12-25T00:35:02.106 [DEBUG] [Thread-1914] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:35:02.113 [DEBUG] [Thread-1914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:35:02.114 [DEBUG] [Thread-1914] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:35:02.114 [DEBUG] [Thread-1914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:35:02.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:35:02.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:35:02.115 [DEBUG] [Thread-1914] [transport.py] [_log()] userauth is OK
2025-12-25T00:35:02.116 [DEBUG] [Thread-1914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:35:02.116 [DEBUG] [Thread-1914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:35:02.116 [DEBUG] [Thread-1914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:35:02.116 [DEBUG] [Thread-1914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:35:02.133 [INFO] [Thread-1914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:35:02.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:35:02.707 [DEBUG] [Thread-1914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:35:02.707 [DEBUG] [Thread-1914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:35:02.708 [DEBUG] [Thread-1914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:35:02.748 [DEBUG] [Thread-1914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:35:02.748 [DEBUG] [Thread-1914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:35:02.751 [DEBUG] [Thread-1914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:35:02.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:35:02.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:35:02.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:35:02.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:35:02.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:35:02.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:35:02.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:35:02.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:35:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:35:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.940685 -999.00  +12.40  20.46     90  +10.90 1 2 1 3 1     0    0 0.80 -27.16 ZNeSW 17.3 20.5 158.4 26.2 13.5 -17.0 13.3 -13.7 13.2 -14.8 13.5 -15.6
2025-12-25T00:35:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:35:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:35:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.940685
2025-12-25T00:35:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:35:02.778 [DEBUG] [Thread-1914] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:35:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:35:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:35:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:35:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:35:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:34:26', tmtdew=1.38, humidity=91.29, cloud=0.0, wind=27.75, temperature=12.46, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:34:35.184', atlas_cloud=2, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:33:00')
2025-12-25T00:35:02.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:35:02.874 [DEBUG] [Thread-1917] [transport.py] [_log()] starting thread (client mode): 0xbbfcdae0
2025-12-25T00:35:02.874 [DEBUG] [Thread-1917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:35:02.889 [DEBUG] [Thread-1917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:35:02.889 [INFO] [Thread-1917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:35:02.896 [DEBUG] [Thread-1917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:35:02.897 [DEBUG] [Thread-1917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:35:02.897 [DEBUG] [Thread-1917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:35:02.897 [DEBUG] [Thread-1917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:35:02.897 [DEBUG] [Thread-1917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:35:02.897 [DEBUG] [Thread-1917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:35:02.897 [DEBUG] [Thread-1917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:35:02.897 [DEBUG] [Thread-1917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:35:02.898 [DEBUG] [Thread-1917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:35:02.898 [DEBUG] [Thread-1917] [transport.py] [_log()] client lang: <none>
2025-12-25T00:35:02.898 [DEBUG] [Thread-1917] [transport.py] [_log()] server lang: <none>
2025-12-25T00:35:02.898 [DEBUG] [Thread-1917] [transport.py] [_log()] kex follows: False
2025-12-25T00:35:02.898 [DEBUG] [Thread-1917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:35:02.898 [DEBUG] [Thread-1917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:35:02.898 [DEBUG] [Thread-1917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:35:02.898 [DEBUG] [Thread-1917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:35:02.899 [DEBUG] [Thread-1917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:35:02.899 [DEBUG] [Thread-1917] [transport.py] [_log()] Compression: none
2025-12-25T00:35:02.899 [DEBUG] [Thread-1917] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:35:02.962 [DEBUG] [Thread-1917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:35:02.962 [DEBUG] [Thread-1917] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:35:02.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:35:02.964 [DEBUG] [Thread-1917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:35:02.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:35:03.021 [DEBUG] [Thread-1917] [transport.py] [_log()] userauth is OK
2025-12-25T00:35:03.022 [DEBUG] [Thread-1917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:35:03.022 [DEBUG] [Thread-1917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:35:03.022 [DEBUG] [Thread-1917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:35:03.022 [DEBUG] [Thread-1917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:35:03.047 [INFO] [Thread-1917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:35:03.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:35:03.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:35:03.892 [DEBUG] [Thread-1917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:35:03.892 [DEBUG] [Thread-1917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:35:03.940 [DEBUG] [Thread-1917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:35:03.940 [DEBUG] [Thread-1917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:35:03.950 [DEBUG] [Thread-1917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:35:03.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:35:03.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:35:03.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:35:03.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:35:03.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:35:03.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:35:03.986 [DEBUG] [Thread-1917] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:35:09.811 [DEBUG] [Thread-1919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:35:18.859 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:35:18.860 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:35:20.451 [DEBUG] [Thread-1920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:35:24.860 [DEBUG] [Thread-1921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:35:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:35:34.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:35:34.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
2025-12-25T00:35:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 35, 30), 1.37, 91.34, 0.0, 27.79, 12.48, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:35:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:35:30
2025-12-25T00:35:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:35:35.035 [DEBUG] [Thread-1922] [transport.py] [_log()] starting thread (client mode): 0xb95b2470
2025-12-25T00:35:35.035 [DEBUG] [Thread-1922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:35:35.045 [DEBUG] [Thread-1922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:35:35.045 [INFO] [Thread-1922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:35:35.046 [DEBUG] [Thread-1922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] client lang: <none>
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] server lang: <none>
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] kex follows: False
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] Compression: none
2025-12-25T00:35:35.047 [DEBUG] [Thread-1922] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:35:35.054 [DEBUG] [Thread-1922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:35:35.054 [DEBUG] [Thread-1922] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:35:35.055 [DEBUG] [Thread-1922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:35:35.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:35:35.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:35:35.056 [DEBUG] [Thread-1922] [transport.py] [_log()] userauth is OK
2025-12-25T00:35:35.056 [DEBUG] [Thread-1922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:35:35.056 [DEBUG] [Thread-1922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:35:35.056 [DEBUG] [Thread-1922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:35:35.056 [DEBUG] [Thread-1922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:35:35.066 [INFO] [Thread-1922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:35:35.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:35:35.640 [DEBUG] [Thread-1922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:35:35.640 [DEBUG] [Thread-1922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:35:35.640 [DEBUG] [Thread-1922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:35:35.680 [DEBUG] [Thread-1922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:35:35.680 [DEBUG] [Thread-1922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:35:35.682 [DEBUG] [Thread-1922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:35:35.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:35:35.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:35:35.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:35:35.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:35:35.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:35:35.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:35:35.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:35:35.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:35:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:35:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.941032 -999.00  +12.40  21.66     90  +10.90 1 2 1 3 1     0    0 0.76 -27.28 ZNeSW 19.9 21.7 155.0 30.2 13.5 -14.1 13.3 -13.5 13.2 -12.7 13.5 -13.9
2025-12-25T00:35:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:35:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:35:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.941032
2025-12-25T00:35:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:35:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:35:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:35:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:35:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:35:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:35:30', tmtdew=1.37, humidity=91.34, cloud=0.0, wind=27.79, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:35:05.165', atlas_cloud=2, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:33:00')
2025-12-25T00:35:35.699 [DEBUG] [Thread-1922] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:35:35.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:35:35.782 [DEBUG] [Thread-1925] [transport.py] [_log()] starting thread (client mode): 0xb95b2950
2025-12-25T00:35:35.783 [DEBUG] [Thread-1925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:35:35.796 [DEBUG] [Thread-1925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:35:35.796 [INFO] [Thread-1925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] client lang: <none>
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] server lang: <none>
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] kex follows: False
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] Compression: none
2025-12-25T00:35:35.804 [DEBUG] [Thread-1925] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:35:35.859 [DEBUG] [Thread-1925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:35:35.860 [DEBUG] [Thread-1925] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:35:35.860 [DEBUG] [Thread-1925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:35:35.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:35:35.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:35:35.917 [DEBUG] [Thread-1925] [transport.py] [_log()] userauth is OK
2025-12-25T00:35:35.917 [DEBUG] [Thread-1925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:35:35.917 [DEBUG] [Thread-1925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:35:35.917 [DEBUG] [Thread-1925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:35:35.917 [DEBUG] [Thread-1925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:35:35.935 [INFO] [Thread-1925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:35:35.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:35:35.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:35:36.743 [DEBUG] [Thread-1925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:35:36.743 [DEBUG] [Thread-1925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:35:36.791 [DEBUG] [Thread-1925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:35:36.791 [DEBUG] [Thread-1925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:35:36.799 [DEBUG] [Thread-1925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:35:36.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:35:36.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:35:36.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:35:36.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:35:36.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:35:36.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:35:36.831 [DEBUG] [Thread-1925] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:35:39.891 [DEBUG] [Thread-1927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:35:54.948 [DEBUG] [Thread-1928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:36:06.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:36:06.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:36:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:36:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 36, 2), 1.37, 91.36, 0.0, 27.24, 12.48, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:36:07.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:36:02
2025-12-25T00:36:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:36:07.813 [DEBUG] [Thread-1929] [transport.py] [_log()] starting thread (client mode): 0xbbfcd8a0
2025-12-25T00:36:07.814 [DEBUG] [Thread-1929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:36:07.835 [DEBUG] [Thread-1929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:36:07.835 [INFO] [Thread-1929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:36:07.838 [DEBUG] [Thread-1929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:36:07.838 [DEBUG] [Thread-1929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:36:07.838 [DEBUG] [Thread-1929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] client lang: <none>
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] server lang: <none>
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] kex follows: False
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] Compression: none
2025-12-25T00:36:07.839 [DEBUG] [Thread-1929] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:36:07.856 [DEBUG] [Thread-1929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:36:07.857 [DEBUG] [Thread-1929] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:36:07.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:36:07.858 [DEBUG] [Thread-1929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:36:07.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:36:07.860 [DEBUG] [Thread-1929] [transport.py] [_log()] userauth is OK
2025-12-25T00:36:07.860 [DEBUG] [Thread-1929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:36:07.860 [DEBUG] [Thread-1929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:36:07.860 [DEBUG] [Thread-1929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:36:07.860 [DEBUG] [Thread-1929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:36:07.879 [INFO] [Thread-1929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:36:07.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:36:08.504 [DEBUG] [Thread-1929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:36:08.504 [DEBUG] [Thread-1929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:36:08.505 [DEBUG] [Thread-1929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:36:08.545 [DEBUG] [Thread-1929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:36:08.545 [DEBUG] [Thread-1929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:36:08.549 [DEBUG] [Thread-1929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:36:08.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:36:08.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:36:08.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:36:08.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:36:08.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:36:08.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:36:08.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:36:08.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:36:08.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:36:08.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.941032 -999.00  +12.40  21.66     90  +10.90 1 2 1 3 1     0    0 0.76 -27.28 ZNeSW 19.9 21.7 155.0 30.2 13.5 -14.1 13.3 -13.5 13.2 -12.7 13.5 -13.9
2025-12-25T00:36:08.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:36:08.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:36:08.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.941032
2025-12-25T00:36:08.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:36:08.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:36:08.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:36:08.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:36:08.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:36:08.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:36:02', tmtdew=1.37, humidity=91.36, cloud=0.0, wind=27.24, temperature=12.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:35:05.165', atlas_cloud=2, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:33:00')
2025-12-25T00:36:08.575 [DEBUG] [Thread-1929] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:36:08.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:36:08.678 [DEBUG] [Thread-1932] [transport.py] [_log()] starting thread (client mode): 0xbbfcd750
2025-12-25T00:36:08.678 [DEBUG] [Thread-1932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:36:08.691 [DEBUG] [Thread-1932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:36:08.691 [INFO] [Thread-1932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] client lang: <none>
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] server lang: <none>
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] kex follows: False
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] Compression: none
2025-12-25T00:36:08.699 [DEBUG] [Thread-1932] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:36:08.757 [DEBUG] [Thread-1932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:36:08.757 [DEBUG] [Thread-1932] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:36:08.757 [DEBUG] [Thread-1932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:36:08.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:36:08.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:36:08.814 [DEBUG] [Thread-1932] [transport.py] [_log()] userauth is OK
2025-12-25T00:36:08.814 [DEBUG] [Thread-1932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:36:08.815 [DEBUG] [Thread-1932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:36:08.815 [DEBUG] [Thread-1932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:36:08.815 [DEBUG] [Thread-1932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:36:08.838 [INFO] [Thread-1932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:36:08.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:36:08.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:36:09.655 [DEBUG] [Thread-1932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:36:09.655 [DEBUG] [Thread-1932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:36:09.703 [DEBUG] [Thread-1932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:36:09.704 [DEBUG] [Thread-1932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:36:09.713 [DEBUG] [Thread-1932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:36:09.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:36:09.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:36:09.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:36:09.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:36:09.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:36:09.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:36:09.753 [DEBUG] [Thread-1932] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:36:09.982 [DEBUG] [Thread-1934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:36:19.066 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:36:19.067 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:36:20.516 [DEBUG] [Thread-1935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:36:25.035 [DEBUG] [Thread-1936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:36:39.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:36:39.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:36:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:36:40.070 [DEBUG] [Thread-1937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:36:40.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 36, 34), 1.31, 91.91, 0.0, 24.61, 12.43, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:36:40.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:36:34
2025-12-25T00:36:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:36:40.750 [DEBUG] [Thread-1938] [transport.py] [_log()] starting thread (client mode): 0xb95b0b20
2025-12-25T00:36:40.750 [DEBUG] [Thread-1938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:36:40.770 [DEBUG] [Thread-1938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:36:40.770 [INFO] [Thread-1938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] client lang: <none>
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] server lang: <none>
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] kex follows: False
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] Compression: none
2025-12-25T00:36:40.773 [DEBUG] [Thread-1938] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:36:40.791 [DEBUG] [Thread-1938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:36:40.791 [DEBUG] [Thread-1938] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:36:40.791 [DEBUG] [Thread-1938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:36:40.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:36:40.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:36:40.792 [DEBUG] [Thread-1938] [transport.py] [_log()] userauth is OK
2025-12-25T00:36:40.792 [DEBUG] [Thread-1938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:36:40.792 [DEBUG] [Thread-1938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:36:40.792 [DEBUG] [Thread-1938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:36:40.792 [DEBUG] [Thread-1938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:36:40.801 [INFO] [Thread-1938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:36:40.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:36:41.430 [DEBUG] [Thread-1938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:36:41.431 [DEBUG] [Thread-1938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:36:41.431 [DEBUG] [Thread-1938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:36:41.471 [DEBUG] [Thread-1938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:36:41.471 [DEBUG] [Thread-1938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:36:41.474 [DEBUG] [Thread-1938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:36:41.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:36:41.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:36:41.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:36:41.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:36:41.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:36:41.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:36:41.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:36:41.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:36:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:36:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.941727 -999.00  +12.40  23.89     91  +10.90 1 2 1 3 1     0    0 0.81 -25.41 ZNe.W 23.9 23.9 140.0 29.3 13.5 -15.9 13.3 -14.9 13.2 -14.9 13.5 -16.1
2025-12-25T00:36:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:36:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:36:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.941727
2025-12-25T00:36:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:36:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:36:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:36:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:36:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:36:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:36:34', tmtdew=1.31, humidity=91.91, cloud=0.0, wind=24.61, temperature=12.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:36:05.213', atlas_cloud=2, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:33:00')
2025-12-25T00:36:41.503 [DEBUG] [Thread-1938] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:36:41.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:36:41.596 [DEBUG] [Thread-1941] [transport.py] [_log()] starting thread (client mode): 0xbbfcdea0
2025-12-25T00:36:41.596 [DEBUG] [Thread-1941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:36:41.610 [DEBUG] [Thread-1941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:36:41.610 [INFO] [Thread-1941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:36:41.618 [DEBUG] [Thread-1941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] client lang: <none>
2025-12-25T00:36:41.619 [DEBUG] [Thread-1941] [transport.py] [_log()] server lang: <none>
2025-12-25T00:36:41.620 [DEBUG] [Thread-1941] [transport.py] [_log()] kex follows: False
2025-12-25T00:36:41.620 [DEBUG] [Thread-1941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:36:41.620 [DEBUG] [Thread-1941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:36:41.620 [DEBUG] [Thread-1941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:36:41.620 [DEBUG] [Thread-1941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:36:41.620 [DEBUG] [Thread-1941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:36:41.620 [DEBUG] [Thread-1941] [transport.py] [_log()] Compression: none
2025-12-25T00:36:41.620 [DEBUG] [Thread-1941] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:36:41.676 [DEBUG] [Thread-1941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:36:41.677 [DEBUG] [Thread-1941] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:36:41.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:36:41.678 [DEBUG] [Thread-1941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:36:41.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:36:41.735 [DEBUG] [Thread-1941] [transport.py] [_log()] userauth is OK
2025-12-25T00:36:41.735 [DEBUG] [Thread-1941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:36:41.735 [DEBUG] [Thread-1941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:36:41.736 [DEBUG] [Thread-1941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:36:41.736 [DEBUG] [Thread-1941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:36:41.758 [INFO] [Thread-1941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:36:41.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:36:41.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:36:42.616 [DEBUG] [Thread-1941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:36:42.616 [DEBUG] [Thread-1941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:36:42.664 [DEBUG] [Thread-1941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:36:42.665 [DEBUG] [Thread-1941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:36:42.673 [DEBUG] [Thread-1941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:36:42.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:36:42.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:36:42.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
2025-12-25T00:36:42.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:36:42.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:36:42.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:36:42.710 [DEBUG] [Thread-1941] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:36:55.100 [DEBUG] [Thread-1943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:37:10.136 [DEBUG] [Thread-1944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:37:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:37:12.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:37:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:37:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 37, 6), 1.31, 91.92, 0.0, 23.33, 12.45, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:37:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:37:06
2025-12-25T00:37:13.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:37:13.696 [DEBUG] [Thread-1945] [transport.py] [_log()] starting thread (client mode): 0xb957b6a0
2025-12-25T00:37:13.696 [DEBUG] [Thread-1945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:37:13.716 [DEBUG] [Thread-1945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:37:13.716 [INFO] [Thread-1945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:37:13.719 [DEBUG] [Thread-1945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:37:13.719 [DEBUG] [Thread-1945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] client lang: <none>
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] server lang: <none>
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] kex follows: False
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] Compression: none
2025-12-25T00:37:13.720 [DEBUG] [Thread-1945] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:37:13.738 [DEBUG] [Thread-1945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:37:13.739 [DEBUG] [Thread-1945] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:37:13.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:37:13.740 [DEBUG] [Thread-1945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:37:13.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:37:13.742 [DEBUG] [Thread-1945] [transport.py] [_log()] userauth is OK
2025-12-25T00:37:13.742 [DEBUG] [Thread-1945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:37:13.742 [DEBUG] [Thread-1945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:37:13.742 [DEBUG] [Thread-1945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:37:13.742 [DEBUG] [Thread-1945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:37:13.766 [INFO] [Thread-1945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:37:13.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:37:14.391 [DEBUG] [Thread-1945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:37:14.391 [DEBUG] [Thread-1945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:37:14.391 [DEBUG] [Thread-1945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:37:14.432 [DEBUG] [Thread-1945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:37:14.432 [DEBUG] [Thread-1945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:37:14.435 [DEBUG] [Thread-1945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:37:14.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:37:14.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:37:14.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:37:14.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:37:14.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:37:14.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:37:14.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:37:14.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:37:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:37:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.942074 -999.00  +12.30  26.83     91  +10.90 1 2 1 3 1     0    0 0.76 -26.74 zNESW 21.9 26.8 143.0 30.6 13.5 -15.3 13.3 -14.3 13.2 -15.0 13.4 -15.9
2025-12-25T00:37:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:37:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:37:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.942074
2025-12-25T00:37:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:37:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:37:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:37:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:37:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:37:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:37:06', tmtdew=1.31, humidity=91.92, cloud=0.0, wind=23.33, temperature=12.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:36:35.194', atlas_cloud=2, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:33:00')
2025-12-25T00:37:14.464 [DEBUG] [Thread-1945] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:37:14.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:37:14.557 [DEBUG] [Thread-1948] [transport.py] [_log()] starting thread (client mode): 0xb95b2290
2025-12-25T00:37:14.557 [DEBUG] [Thread-1948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:37:14.571 [DEBUG] [Thread-1948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:37:14.572 [INFO] [Thread-1948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:37:14.579 [DEBUG] [Thread-1948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] client lang: <none>
2025-12-25T00:37:14.580 [DEBUG] [Thread-1948] [transport.py] [_log()] server lang: <none>
2025-12-25T00:37:14.581 [DEBUG] [Thread-1948] [transport.py] [_log()] kex follows: False
2025-12-25T00:37:14.581 [DEBUG] [Thread-1948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:37:14.581 [DEBUG] [Thread-1948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:37:14.581 [DEBUG] [Thread-1948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:37:14.581 [DEBUG] [Thread-1948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:37:14.581 [DEBUG] [Thread-1948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:37:14.581 [DEBUG] [Thread-1948] [transport.py] [_log()] Compression: none
2025-12-25T00:37:14.581 [DEBUG] [Thread-1948] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:37:14.640 [DEBUG] [Thread-1948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:37:14.641 [DEBUG] [Thread-1948] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:37:14.641 [DEBUG] [Thread-1948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:37:14.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:37:14.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:37:14.700 [DEBUG] [Thread-1948] [transport.py] [_log()] userauth is OK
2025-12-25T00:37:14.700 [DEBUG] [Thread-1948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:37:14.700 [DEBUG] [Thread-1948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:37:14.701 [DEBUG] [Thread-1948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:37:14.701 [DEBUG] [Thread-1948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:37:14.722 [INFO] [Thread-1948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:37:14.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:37:14.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:37:15.558 [DEBUG] [Thread-1948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:37:15.558 [DEBUG] [Thread-1948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:37:15.605 [DEBUG] [Thread-1948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:37:15.605 [DEBUG] [Thread-1948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:37:15.614 [DEBUG] [Thread-1948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:37:15.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:37:15.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:37:15.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:37:15.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:37:15.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:37:15.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:37:15.647 [DEBUG] [Thread-1948] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:37:19.317 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:37:19.318 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:37:20.581 [DEBUG] [Thread-1950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:37:25.172 [DEBUG] [Thread-1951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:37:40.224 [DEBUG] [Thread-1952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:37:45.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:37:45.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:37:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:37:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 37, 38), 1.31, 91.91, 0.0, 23.29, 12.45, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:37:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:37:38
2025-12-25T00:37:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:37:46.642 [DEBUG] [Thread-1953] [transport.py] [_log()] starting thread (client mode): 0xb95d6ec0
2025-12-25T00:37:46.642 [DEBUG] [Thread-1953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:37:46.661 [DEBUG] [Thread-1953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:37:46.661 [INFO] [Thread-1953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:37:46.664 [DEBUG] [Thread-1953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] client lang: <none>
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] server lang: <none>
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] kex follows: False
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] Compression: none
2025-12-25T00:37:46.665 [DEBUG] [Thread-1953] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:37:46.684 [DEBUG] [Thread-1953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:37:46.684 [DEBUG] [Thread-1953] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:37:46.685 [DEBUG] [Thread-1953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:37:46.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:37:46.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:37:46.687 [DEBUG] [Thread-1953] [transport.py] [_log()] userauth is OK
2025-12-25T00:37:46.687 [DEBUG] [Thread-1953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:37:46.687 [DEBUG] [Thread-1953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:37:46.687 [DEBUG] [Thread-1953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:37:46.687 [DEBUG] [Thread-1953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:37:46.711 [INFO] [Thread-1953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:37:46.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:37:47.368 [DEBUG] [Thread-1953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:37:47.368 [DEBUG] [Thread-1953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:37:47.368 [DEBUG] [Thread-1953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:37:47.409 [DEBUG] [Thread-1953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:37:47.409 [DEBUG] [Thread-1953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:37:47.412 [DEBUG] [Thread-1953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:37:47.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:37:47.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:37:47.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:37:47.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:37:47.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:37:47.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:37:47.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:37:47.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:37:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:37:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.942421 -999.00  +12.30  16.05     91  +10.90 1 2 1 3 1     0    0 0.84 -24.71 ZNEsW 16.8 16.1 157.2 30.1 13.5 -12.6 13.4 -11.9 13.2 -12.6 13.5 -12.9
2025-12-25T00:37:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:37:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:37:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.942421
2025-12-25T00:37:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:37:47.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:37:47.437 [DEBUG] [Thread-1953] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:37:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:37:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:37:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:37:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:37:38', tmtdew=1.31, humidity=91.91, cloud=0.0, wind=23.29, temperature=12.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:37:05.174', atlas_cloud=2, atlas_rain=1, zp_data=[3.15975, 2.3382500000000004, 2.12875, 2.1984999999999992, 2.5545, nan, nan, nan, 2.737499999999999, 1.896, 2.0237499999999997, 2.3985000000000003, nan, nan, 1.9539999999999997, nan, nan, 1.6594999999999995, 1.6724999999999994, 1.624249999999999, nan, nan, nan, nan, nan, 1.1925, 1.1967499999999998, 0.9835000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-24T22:33:00')
2025-12-25T00:37:47.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:37:47.533 [DEBUG] [Thread-1956] [transport.py] [_log()] starting thread (client mode): 0xb95d7520
2025-12-25T00:37:47.533 [DEBUG] [Thread-1956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:37:47.547 [DEBUG] [Thread-1956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:37:47.547 [INFO] [Thread-1956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:37:47.555 [DEBUG] [Thread-1956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:37:47.555 [DEBUG] [Thread-1956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] client lang: <none>
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] server lang: <none>
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] kex follows: False
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:37:47.556 [DEBUG] [Thread-1956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:37:47.557 [DEBUG] [Thread-1956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:37:47.557 [DEBUG] [Thread-1956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:37:47.557 [DEBUG] [Thread-1956] [transport.py] [_log()] Compression: none
2025-12-25T00:37:47.557 [DEBUG] [Thread-1956] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:37:47.611 [DEBUG] [Thread-1956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:37:47.612 [DEBUG] [Thread-1956] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:37:47.612 [DEBUG] [Thread-1956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:37:47.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:37:47.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:37:47.668 [DEBUG] [Thread-1956] [transport.py] [_log()] userauth is OK
2025-12-25T00:37:47.668 [DEBUG] [Thread-1956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:37:47.668 [DEBUG] [Thread-1956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:37:47.668 [DEBUG] [Thread-1956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:37:47.668 [DEBUG] [Thread-1956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:37:47.686 [INFO] [Thread-1956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:37:47.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:37:47.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:37:48.529 [DEBUG] [Thread-1956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:37:48.530 [DEBUG] [Thread-1956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:37:48.578 [DEBUG] [Thread-1956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:37:48.578 [DEBUG] [Thread-1956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:37:48.587 [DEBUG] [Thread-1956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:37:48.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:37:48.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:37:48.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:37:48.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:37:48.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:37:48.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:37:48.623 [DEBUG] [Thread-1956] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:37:55.255 [DEBUG] [Thread-1958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:38:10.308 [DEBUG] [Thread-1959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:38:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:38:18.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:38:18.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:38:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 38, 10), 1.3, 91.94, 0.0, 23.8, 12.45, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:38:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:38:10
2025-12-25T00:38:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:38:19.521 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:38:19.522 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:38:19.629 [DEBUG] [Thread-1960] [transport.py] [_log()] starting thread (client mode): 0xb95d6890
2025-12-25T00:38:19.629 [DEBUG] [Thread-1960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:38:19.650 [DEBUG] [Thread-1960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:38:19.650 [INFO] [Thread-1960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] client lang: <none>
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] server lang: <none>
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] kex follows: False
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:38:19.653 [DEBUG] [Thread-1960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:38:19.654 [DEBUG] [Thread-1960] [transport.py] [_log()] Compression: none
2025-12-25T00:38:19.654 [DEBUG] [Thread-1960] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:38:19.672 [DEBUG] [Thread-1960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:38:19.672 [DEBUG] [Thread-1960] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:38:19.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:38:19.673 [DEBUG] [Thread-1960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:38:19.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:38:19.675 [DEBUG] [Thread-1960] [transport.py] [_log()] userauth is OK
2025-12-25T00:38:19.675 [DEBUG] [Thread-1960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:38:19.675 [DEBUG] [Thread-1960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:38:19.676 [DEBUG] [Thread-1960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:38:19.676 [DEBUG] [Thread-1960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:38:19.699 [INFO] [Thread-1960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:38:19.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:38:20.321 [DEBUG] [Thread-1960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:38:20.321 [DEBUG] [Thread-1960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:38:20.322 [DEBUG] [Thread-1960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:38:20.363 [DEBUG] [Thread-1960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:38:20.363 [DEBUG] [Thread-1960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:38:20.366 [DEBUG] [Thread-1960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:38:20.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:38:20.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:38:20.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:38:20.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:38:20.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:38:20.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:38:20.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:38:20.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:38:20.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:38:20.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.942768 -999.00  +12.30  19.20     91  +10.90 1 2 1 3 1     0    0 0.90 -22.95 ZNeSW 17.9 19.2 157.6 27.0 13.5 -12.6 13.3 -14.2 13.2 -12.9 13.5 -14.8
2025-12-25T00:38:20.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:38:20.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:38:20.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.942768
2025-12-25T00:38:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:38:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:38:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:38:20.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:38:20.391 [DEBUG] [Thread-1960] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:38:20.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:38:20.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:38:10', tmtdew=1.3, humidity=91.94, cloud=0.0, wind=23.8, temperature=12.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:37:35.155', atlas_cloud=2, atlas_rain=1, zp_data=[1.1047499999999992, 1.3267500000000005, 1.3627500000000001, 0.9974999999999996, 0.9440000000000008, 1.2502500000000012, 0.8659999999999997, 0.7477500000000008, 0.8584999999999994, 1.5970000000000004, 1.3302499999999995, 0.7699999999999996, 0.9844999999999997, 0.9627499999999998, 0.5234999999999994, 0.5019999999999989, 0.8532500000000001, 1.5984999999999996, 1.439499999999999, 0.8092499999999987, 0.6539999999999981, 0.6762499999999987, 0.518250000000001, 0.5237499999999997, 1.017999999999999, nan, 1.5817499999999995, 1.0455000000000005, 0.4320000000000004, 0.5305000000000009, 0.4505000000000017, 0.7350000000000012, 1.6882499999999991], zp_timestamp='2025-12-24T22:37:00')
2025-12-25T00:38:20.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:38:20.484 [DEBUG] [Thread-1963] [transport.py] [_log()] starting thread (client mode): 0xbbfccf40
2025-12-25T00:38:20.484 [DEBUG] [Thread-1963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:38:20.498 [DEBUG] [Thread-1963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:38:20.498 [INFO] [Thread-1963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:38:20.505 [DEBUG] [Thread-1963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] client lang: <none>
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] server lang: <none>
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] kex follows: False
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] Compression: none
2025-12-25T00:38:20.506 [DEBUG] [Thread-1963] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:38:20.568 [DEBUG] [Thread-1963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:38:20.569 [DEBUG] [Thread-1963] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:38:20.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:38:20.569 [DEBUG] [Thread-1963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:38:20.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:38:20.624 [DEBUG] [Thread-1963] [transport.py] [_log()] userauth is OK
2025-12-25T00:38:20.624 [DEBUG] [Thread-1963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:38:20.624 [DEBUG] [Thread-1963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:38:20.624 [DEBUG] [Thread-1963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:38:20.624 [DEBUG] [Thread-1963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:38:20.638 [INFO] [Thread-1963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:38:20.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:38:20.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:38:20.649 [DEBUG] [Thread-1965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:38:21.495 [DEBUG] [Thread-1963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:38:21.495 [DEBUG] [Thread-1963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:38:21.543 [DEBUG] [Thread-1963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:38:21.543 [DEBUG] [Thread-1963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:38:21.552 [DEBUG] [Thread-1963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:38:21.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:38:21.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')
2025-12-25T00:38:21.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:38:21.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:38:21.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:38:21.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:38:21.589 [DEBUG] [Thread-1963] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:38:25.341 [DEBUG] [Thread-1966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:38:40.402 [DEBUG] [Thread-1967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:38:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:38:51.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:38:51.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:38:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 38, 43), 1.3, 91.97, 0.0, 26.84, 12.45, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:38:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:38:43
2025-12-25T00:38:52.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:38:52.645 [DEBUG] [Thread-1968] [transport.py] [_log()] starting thread (client mode): 0xb95b0940
2025-12-25T00:38:52.645 [DEBUG] [Thread-1968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:38:52.667 [DEBUG] [Thread-1968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:38:52.667 [INFO] [Thread-1968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] client lang: <none>
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] server lang: <none>
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] kex follows: False
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] Compression: none
2025-12-25T00:38:52.671 [DEBUG] [Thread-1968] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:38:52.688 [DEBUG] [Thread-1968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:38:52.688 [DEBUG] [Thread-1968] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:38:52.688 [DEBUG] [Thread-1968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:38:52.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:38:52.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:38:52.689 [DEBUG] [Thread-1968] [transport.py] [_log()] userauth is OK
2025-12-25T00:38:52.689 [DEBUG] [Thread-1968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:38:52.689 [DEBUG] [Thread-1968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:38:52.689 [DEBUG] [Thread-1968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:38:52.689 [DEBUG] [Thread-1968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:38:52.699 [INFO] [Thread-1968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:38:52.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:38:53.340 [DEBUG] [Thread-1968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:38:53.340 [DEBUG] [Thread-1968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:38:53.340 [DEBUG] [Thread-1968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:38:53.381 [DEBUG] [Thread-1968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:38:53.381 [DEBUG] [Thread-1968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:38:53.383 [DEBUG] [Thread-1968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:38:53.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:38:53.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:38:53.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:38:53.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:38:53.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:38:53.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:38:53.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.943116 -999.00  +12.30  14.19     91  +10.90 1 2 1 3 1     0    0 0.85 -23.32 ZNeSW 17.2 14.2 154.1 22.1 13.5 -12.1 13.3 -9.5 13.2 -12.4 13.5 -10.1
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.943116
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:38:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:38:43', tmtdew=1.3, humidity=91.97, cloud=0.0, wind=26.84, temperature=12.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:38:05.222', atlas_cloud=2, atlas_rain=1, zp_data=[1.1047499999999992, 1.3267500000000005, 1.3627500000000001, 0.9974999999999996, 0.9440000000000008, 1.2502500000000012, 0.8659999999999997, 0.7477500000000008, 0.8584999999999994, 1.5970000000000004, 1.3302499999999995, 0.7699999999999996, 0.9844999999999997, 0.9627499999999998, 0.5234999999999994, 0.5019999999999989, 0.8532500000000001, 1.5984999999999996, 1.439499999999999, 0.8092499999999987, 0.6539999999999981, 0.6762499999999987, 0.518250000000001, 0.5237499999999997, 1.017999999999999, nan, 1.5817499999999995, 1.0455000000000005, 0.4320000000000004, 0.5305000000000009, 0.4505000000000017, 0.7350000000000012, 1.6882499999999991], zp_timestamp='2025-12-24T22:37:00')
2025-12-25T00:38:53.403 [DEBUG] [Thread-1968] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:38:53.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:38:53.490 [DEBUG] [Thread-1971] [transport.py] [_log()] starting thread (client mode): 0xb95d7400
2025-12-25T00:38:53.490 [DEBUG] [Thread-1971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:38:53.505 [DEBUG] [Thread-1971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:38:53.505 [INFO] [Thread-1971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] client lang: <none>
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] server lang: <none>
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] kex follows: False
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:38:53.513 [DEBUG] [Thread-1971] [transport.py] [_log()] Compression: none
2025-12-25T00:38:53.514 [DEBUG] [Thread-1971] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:38:53.571 [DEBUG] [Thread-1971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:38:53.572 [DEBUG] [Thread-1971] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:38:53.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:38:53.573 [DEBUG] [Thread-1971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:38:53.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:38:53.630 [DEBUG] [Thread-1971] [transport.py] [_log()] userauth is OK
2025-12-25T00:38:53.630 [DEBUG] [Thread-1971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:38:53.630 [DEBUG] [Thread-1971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:38:53.630 [DEBUG] [Thread-1971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:38:53.630 [DEBUG] [Thread-1971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:38:53.655 [INFO] [Thread-1971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:38:53.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:38:53.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:38:54.497 [DEBUG] [Thread-1971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:38:54.497 [DEBUG] [Thread-1971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:38:54.545 [DEBUG] [Thread-1971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:38:54.545 [DEBUG] [Thread-1971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:38:54.554 [DEBUG] [Thread-1971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:38:54.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:38:54.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:38:54.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:38:54.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:38:54.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:38:54.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:38:54.592 [DEBUG] [Thread-1971] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:38:55.434 [DEBUG] [Thread-1973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:39:10.487 [DEBUG] [Thread-1974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:39:19.735 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:39:19.736 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:39:20.708 [DEBUG] [Thread-1975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:39:24.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:39:24.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:39:24.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:39:25.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 39, 15), 1.3, 91.96, 0.0, 26.31, 12.46, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:39:25.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:39:15
2025-12-25T00:39:25.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:39:25.523 [DEBUG] [Thread-1976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:39:25.612 [DEBUG] [Thread-1977] [transport.py] [_log()] starting thread (client mode): 0xb95b1ae0
2025-12-25T00:39:25.612 [DEBUG] [Thread-1977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:39:25.629 [DEBUG] [Thread-1977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:39:25.629 [INFO] [Thread-1977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] client lang: <none>
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] server lang: <none>
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] kex follows: False
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:39:25.633 [DEBUG] [Thread-1977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:39:25.634 [DEBUG] [Thread-1977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:39:25.634 [DEBUG] [Thread-1977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:39:25.634 [DEBUG] [Thread-1977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:39:25.634 [DEBUG] [Thread-1977] [transport.py] [_log()] Compression: none
2025-12-25T00:39:25.634 [DEBUG] [Thread-1977] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:39:25.652 [DEBUG] [Thread-1977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:39:25.653 [DEBUG] [Thread-1977] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:39:25.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:39:25.654 [DEBUG] [Thread-1977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:39:25.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:39:25.656 [DEBUG] [Thread-1977] [transport.py] [_log()] userauth is OK
2025-12-25T00:39:25.656 [DEBUG] [Thread-1977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:39:25.656 [DEBUG] [Thread-1977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:39:25.656 [DEBUG] [Thread-1977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:39:25.656 [DEBUG] [Thread-1977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:39:25.681 [INFO] [Thread-1977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:39:25.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:39:26.344 [DEBUG] [Thread-1977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:39:26.344 [DEBUG] [Thread-1977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:39:26.344 [DEBUG] [Thread-1977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:39:26.385 [DEBUG] [Thread-1977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:39:26.385 [DEBUG] [Thread-1977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:39:26.388 [DEBUG] [Thread-1977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:39:26.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:39:26.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:39:26.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:39:26.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:39:26.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:39:26.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:39:26.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.943463 -999.00  +12.30  21.14     91  +10.90 1 2 1 3 1     0    0 0.86 -22.93 ZNeSW 19.1 21.1 138.4 24.9 13.5 -10.9 13.3 -17.1 13.2 -11.3 13.5 -15.5
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.943463
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:39:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:39:26.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:39:26.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:39:26.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:39:15', tmtdew=1.3, humidity=91.96, cloud=0.0, wind=26.31, temperature=12.46, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:38:35.203', atlas_cloud=2, atlas_rain=1, zp_data=[1.1047499999999992, 1.3267500000000005, 1.3627500000000001, 0.9974999999999996, 0.9440000000000008, 1.2502500000000012, 0.8659999999999997, 0.7477500000000008, 0.8584999999999994, 1.5970000000000004, 1.3302499999999995, 0.7699999999999996, 0.9844999999999997, 0.9627499999999998, 0.5234999999999994, 0.5019999999999989, 0.8532500000000001, 1.5984999999999996, 1.439499999999999, 0.8092499999999987, 0.6539999999999981, 0.6762499999999987, 0.518250000000001, 0.5237499999999997, 1.017999999999999, nan, 1.5817499999999995, 1.0455000000000005, 0.4320000000000004, 0.5305000000000009, 0.4505000000000017, 0.7350000000000012, 1.6882499999999991], zp_timestamp='2025-12-24T22:37:00')
2025-12-25T00:39:26.408 [DEBUG] [Thread-1977] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:39:26.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:39:26.492 [DEBUG] [Thread-1980] [transport.py] [_log()] starting thread (client mode): 0xb95b1930
2025-12-25T00:39:26.493 [DEBUG] [Thread-1980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:39:26.507 [DEBUG] [Thread-1980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:39:26.507 [INFO] [Thread-1980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] client lang: <none>
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] server lang: <none>
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] kex follows: False
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:39:26.515 [DEBUG] [Thread-1980] [transport.py] [_log()] Compression: none
2025-12-25T00:39:26.516 [DEBUG] [Thread-1980] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:39:26.572 [DEBUG] [Thread-1980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:39:26.572 [DEBUG] [Thread-1980] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:39:26.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:39:26.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:39:26.573 [DEBUG] [Thread-1980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:39:26.631 [DEBUG] [Thread-1980] [transport.py] [_log()] userauth is OK
2025-12-25T00:39:26.631 [DEBUG] [Thread-1980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:39:26.631 [DEBUG] [Thread-1980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:39:26.631 [DEBUG] [Thread-1980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:39:26.631 [DEBUG] [Thread-1980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:39:26.645 [INFO] [Thread-1980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:39:26.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:39:26.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:39:27.486 [DEBUG] [Thread-1980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:39:27.486 [DEBUG] [Thread-1980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:39:27.536 [DEBUG] [Thread-1980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:39:27.536 [DEBUG] [Thread-1980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:39:27.546 [DEBUG] [Thread-1980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:39:27.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:39:27.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:39:27.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
2025-12-25T00:39:27.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:39:27.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:39:27.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:39:27.590 [DEBUG] [Thread-1980] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:39:40.557 [DEBUG] [Thread-1982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:39:55.608 [DEBUG] [Thread-1983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:39:57.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:39:57.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:39:57.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:39:58.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 39, 47), 1.25, 91.97, 0.0, 24.19, 12.36, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:39:58.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:39:47
2025-12-25T00:39:58.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:39:58.565 [DEBUG] [Thread-1984] [transport.py] [_log()] starting thread (client mode): 0xbbfcd840
2025-12-25T00:39:58.565 [DEBUG] [Thread-1984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:39:58.586 [DEBUG] [Thread-1984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:39:58.586 [INFO] [Thread-1984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] client lang: <none>
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] server lang: <none>
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] kex follows: False
2025-12-25T00:39:58.589 [DEBUG] [Thread-1984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:39:58.590 [DEBUG] [Thread-1984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:39:58.590 [DEBUG] [Thread-1984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:39:58.590 [DEBUG] [Thread-1984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:39:58.590 [DEBUG] [Thread-1984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:39:58.590 [DEBUG] [Thread-1984] [transport.py] [_log()] Compression: none
2025-12-25T00:39:58.590 [DEBUG] [Thread-1984] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:39:58.608 [DEBUG] [Thread-1984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:39:58.609 [DEBUG] [Thread-1984] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:39:58.609 [DEBUG] [Thread-1984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:39:58.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:39:58.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:39:58.611 [DEBUG] [Thread-1984] [transport.py] [_log()] userauth is OK
2025-12-25T00:39:58.612 [DEBUG] [Thread-1984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:39:58.612 [DEBUG] [Thread-1984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:39:58.612 [DEBUG] [Thread-1984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:39:58.612 [DEBUG] [Thread-1984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:39:58.636 [INFO] [Thread-1984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:39:58.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:39:59.296 [DEBUG] [Thread-1984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:39:59.296 [DEBUG] [Thread-1984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:39:59.296 [DEBUG] [Thread-1984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:39:59.337 [DEBUG] [Thread-1984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:39:59.337 [DEBUG] [Thread-1984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:39:59.340 [DEBUG] [Thread-1984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:39:59.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:39:59.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:39:59.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:39:59.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:39:59.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:39:59.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:39:59.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:39:59.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:39:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:39:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.943810 -999.00  +12.30  18.37     91  +10.90 1 2 1 3 1     0    0 0.96 -19.81 ZN.SW 16.2 18.4 158.4 27.5 13.5 -17.4 13.3 -15.7 13.1 -16.9 13.5 -15.8
2025-12-25T00:39:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:39:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:39:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.943810
2025-12-25T00:39:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:39:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:39:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:39:59.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:39:59.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:39:59.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:39:47', tmtdew=1.25, humidity=91.97, cloud=0.0, wind=24.19, temperature=12.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:39:05.184', atlas_cloud=2, atlas_rain=1, zp_data=[1.1047499999999992, 1.3267500000000005, 1.3627500000000001, 0.9974999999999996, 0.9440000000000008, 1.2502500000000012, 0.8659999999999997, 0.7477500000000008, 0.8584999999999994, 1.5970000000000004, 1.3302499999999995, 0.7699999999999996, 0.9844999999999997, 0.9627499999999998, 0.5234999999999994, 0.5019999999999989, 0.8532500000000001, 1.5984999999999996, 1.439499999999999, 0.8092499999999987, 0.6539999999999981, 0.6762499999999987, 0.518250000000001, 0.5237499999999997, 1.017999999999999, nan, 1.5817499999999995, 1.0455000000000005, 0.4320000000000004, 0.5305000000000009, 0.4505000000000017, 0.7350000000000012, 1.6882499999999991], zp_timestamp='2025-12-24T22:37:00')
2025-12-25T00:39:59.368 [DEBUG] [Thread-1984] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:39:59.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:39:59.463 [DEBUG] [Thread-1987] [transport.py] [_log()] starting thread (client mode): 0xb95d57b0
2025-12-25T00:39:59.463 [DEBUG] [Thread-1987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:39:59.478 [DEBUG] [Thread-1987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:39:59.479 [INFO] [Thread-1987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:39:59.486 [DEBUG] [Thread-1987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:39:59.486 [DEBUG] [Thread-1987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] client lang: <none>
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] server lang: <none>
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] kex follows: False
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] Compression: none
2025-12-25T00:39:59.487 [DEBUG] [Thread-1987] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:39:59.546 [DEBUG] [Thread-1987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:39:59.547 [DEBUG] [Thread-1987] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:39:59.548 [DEBUG] [Thread-1987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:39:59.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:39:59.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:39:59.602 [DEBUG] [Thread-1987] [transport.py] [_log()] userauth is OK
2025-12-25T00:39:59.603 [DEBUG] [Thread-1987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:39:59.603 [DEBUG] [Thread-1987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:39:59.603 [DEBUG] [Thread-1987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:39:59.603 [DEBUG] [Thread-1987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:39:59.622 [INFO] [Thread-1987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:39:59.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:39:59.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:40:00.451 [DEBUG] [Thread-1987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:40:00.451 [DEBUG] [Thread-1987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:40:00.499 [DEBUG] [Thread-1987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:40:00.499 [DEBUG] [Thread-1987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:40:00.509 [DEBUG] [Thread-1987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:40:00.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:40:00.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')
2025-12-25T00:40:00.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:40:00.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:40:00.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:40:00.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:40:00.544 [DEBUG] [Thread-1987] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:40:10.637 [DEBUG] [Thread-1989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:40:19.939 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:40:19.940 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:40:20.774 [DEBUG] [Thread-1990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:40:25.680 [DEBUG] [Thread-1991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:40:30.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:40:30.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:40:30.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:40:31.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 40, 19), 1.25, 91.96, 0.0, 25.95, 12.4, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:40:31.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:40:19
2025-12-25T00:40:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:40:31.526 [DEBUG] [Thread-1992] [transport.py] [_log()] starting thread (client mode): 0xb6b02b60
2025-12-25T00:40:31.527 [DEBUG] [Thread-1992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:40:31.548 [DEBUG] [Thread-1992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:40:31.548 [INFO] [Thread-1992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:40:31.551 [DEBUG] [Thread-1992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] client lang: <none>
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] server lang: <none>
2025-12-25T00:40:31.552 [DEBUG] [Thread-1992] [transport.py] [_log()] kex follows: False
2025-12-25T00:40:31.553 [DEBUG] [Thread-1992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:40:31.553 [DEBUG] [Thread-1992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:40:31.553 [DEBUG] [Thread-1992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:40:31.553 [DEBUG] [Thread-1992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:40:31.553 [DEBUG] [Thread-1992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:40:31.553 [DEBUG] [Thread-1992] [transport.py] [_log()] Compression: none
2025-12-25T00:40:31.553 [DEBUG] [Thread-1992] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:40:31.572 [DEBUG] [Thread-1992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:40:31.572 [DEBUG] [Thread-1992] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:40:31.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:40:31.573 [DEBUG] [Thread-1992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:40:31.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:40:31.575 [DEBUG] [Thread-1992] [transport.py] [_log()] userauth is OK
2025-12-25T00:40:31.576 [DEBUG] [Thread-1992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:40:31.576 [DEBUG] [Thread-1992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:40:31.576 [DEBUG] [Thread-1992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:40:31.576 [DEBUG] [Thread-1992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:40:31.595 [INFO] [Thread-1992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:40:31.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:40:32.199 [DEBUG] [Thread-1992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:40:32.200 [DEBUG] [Thread-1992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:40:32.200 [DEBUG] [Thread-1992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:40:32.241 [DEBUG] [Thread-1992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:40:32.242 [DEBUG] [Thread-1992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:40:32.245 [DEBUG] [Thread-1992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:40:32.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:40:32.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:40:32.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:40:32.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:40:32.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:40:32.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:40:32.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:40:32.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:40:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:40:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.944504 -999.00  +12.30  17.29     91  +10.90 1 2 1 3 1     0    0 1.00 -18.71 Z.ES. 21.2 17.3 152.0 27.0 13.5 -15.8 13.3 -16.4 13.1 -16.0 13.4 -16.7
2025-12-25T00:40:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:40:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:40:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.944504
2025-12-25T00:40:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:40:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:40:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:40:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:40:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:40:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:40:19', tmtdew=1.25, humidity=91.96, cloud=0.0, wind=25.95, temperature=12.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:40:05.146', atlas_cloud=2, atlas_rain=1, zp_data=[1.1047499999999992, 1.3267500000000005, 1.3627500000000001, 0.9974999999999996, 0.9440000000000008, 1.2502500000000012, 0.8659999999999997, 0.7477500000000008, 0.8584999999999994, 1.5970000000000004, 1.3302499999999995, 0.7699999999999996, 0.9844999999999997, 0.9627499999999998, 0.5234999999999994, 0.5019999999999989, 0.8532500000000001, 1.5984999999999996, 1.439499999999999, 0.8092499999999987, 0.6539999999999981, 0.6762499999999987, 0.518250000000001, 0.5237499999999997, 1.017999999999999, nan, 1.5817499999999995, 1.0455000000000005, 0.4320000000000004, 0.5305000000000009, 0.4505000000000017, 0.7350000000000012, 1.6882499999999991], zp_timestamp='2025-12-24T22:37:00')
2025-12-25T00:40:32.274 [DEBUG] [Thread-1992] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:40:32.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:40:32.369 [DEBUG] [Thread-1995] [transport.py] [_log()] starting thread (client mode): 0xb6b01fc0
2025-12-25T00:40:32.370 [DEBUG] [Thread-1995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:40:32.384 [DEBUG] [Thread-1995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:40:32.384 [INFO] [Thread-1995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:40:32.392 [DEBUG] [Thread-1995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:40:32.392 [DEBUG] [Thread-1995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:40:32.392 [DEBUG] [Thread-1995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:40:32.392 [DEBUG] [Thread-1995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] client lang: <none>
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] server lang: <none>
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] kex follows: False
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:40:32.393 [DEBUG] [Thread-1995] [transport.py] [_log()] Compression: none
2025-12-25T00:40:32.394 [DEBUG] [Thread-1995] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:40:32.451 [DEBUG] [Thread-1995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:40:32.452 [DEBUG] [Thread-1995] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:40:32.452 [DEBUG] [Thread-1995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:40:32.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:40:32.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:40:32.507 [DEBUG] [Thread-1995] [transport.py] [_log()] userauth is OK
2025-12-25T00:40:32.507 [DEBUG] [Thread-1995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:40:32.508 [DEBUG] [Thread-1995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:40:32.508 [DEBUG] [Thread-1995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:40:32.508 [DEBUG] [Thread-1995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:40:32.526 [INFO] [Thread-1995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:40:32.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:40:32.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:40:33.400 [DEBUG] [Thread-1995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:40:33.400 [DEBUG] [Thread-1995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:40:33.448 [DEBUG] [Thread-1995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:40:33.449 [DEBUG] [Thread-1995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:40:33.458 [DEBUG] [Thread-1995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:40:33.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:40:33.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:40:33.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:40:33.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:40:33.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:40:33.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:40:33.493 [DEBUG] [Thread-1995] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:40:40.719 [DEBUG] [Thread-1997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:40:55.773 [DEBUG] [Thread-1998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:41:03.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:41:03.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:41:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:41:04.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 40, 51), 1.25, 91.96, 0.0, 27.38, 12.33, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:41:04.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:40:51
2025-12-25T00:41:04.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:41:04.485 [DEBUG] [Thread-1999] [transport.py] [_log()] starting thread (client mode): 0xb95b2e00
2025-12-25T00:41:04.485 [DEBUG] [Thread-1999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:41:04.505 [DEBUG] [Thread-1999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:41:04.505 [INFO] [Thread-1999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:41:04.507 [DEBUG] [Thread-1999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] client lang: <none>
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] server lang: <none>
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] kex follows: False
2025-12-25T00:41:04.508 [DEBUG] [Thread-1999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:41:04.509 [DEBUG] [Thread-1999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:41:04.509 [DEBUG] [Thread-1999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:41:04.509 [DEBUG] [Thread-1999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:41:04.509 [DEBUG] [Thread-1999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:41:04.509 [DEBUG] [Thread-1999] [transport.py] [_log()] Compression: none
2025-12-25T00:41:04.509 [DEBUG] [Thread-1999] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:41:04.527 [DEBUG] [Thread-1999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:41:04.527 [DEBUG] [Thread-1999] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:41:04.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:41:04.529 [DEBUG] [Thread-1999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:41:04.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:41:04.530 [DEBUG] [Thread-1999] [transport.py] [_log()] userauth is OK
2025-12-25T00:41:04.531 [DEBUG] [Thread-1999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:41:04.531 [DEBUG] [Thread-1999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:41:04.531 [DEBUG] [Thread-1999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:41:04.531 [DEBUG] [Thread-1999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:41:04.554 [INFO] [Thread-1999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:41:04.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:41:05.192 [DEBUG] [Thread-1999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:41:05.192 [DEBUG] [Thread-1999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:41:05.193 [DEBUG] [Thread-1999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:41:05.233 [DEBUG] [Thread-1999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:41:05.234 [DEBUG] [Thread-1999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:41:05.237 [DEBUG] [Thread-1999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:41:05.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:41:05.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:41:05.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:41:05.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:41:05.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:41:05.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:41:05.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:41:05.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:41:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:41:05.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.944852 -999.00  +12.30  19.41     91  +10.90 1 2 1 3 1     0    0 1.01 -18.57 ZNeSW 17.6 19.4 140.4 31.8 13.4 -14.8 13.2 -12.9 13.1 -13.5 13.4 -12.6
2025-12-25T00:41:05.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:41:05.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:41:05.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.944852
2025-12-25T00:41:05.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:41:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:41:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:41:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:41:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:41:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:40:51', tmtdew=1.25, humidity=91.96, cloud=0.0, wind=27.38, temperature=12.33, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:40:35.213', atlas_cloud=2, atlas_rain=1, zp_data=[1.0767499999999997, 0.8252500000000005, 1.0112500000000004, 1.302999999999999, 1.8535000000000004, 1.8977500000000012, 1.536999999999999, 1.1247500000000006, 0.7644999999999991, 0.6590000000000007, 0.79725, 1.4100000000000001, 2.247, 2.2692499999999995, 1.2669999999999995, 1.2649999999999997, 0.8232499999999998, 0.6055000000000001, 0.6269999999999989, 1.4012499999999992, 2.100999999999999, 2.093749999999999, 2.101750000000001, 2.04725, 0.9129999999999994, 0.7925000000000004, 0.8617499999999998, 1.2325, 0.9569999999999999, 1.4440000000000008, 1.865000000000001, 1.8720000000000008, 1.303749999999999], zp_timestamp='2025-12-24T22:39:00')
2025-12-25T00:41:05.265 [DEBUG] [Thread-1999] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:41:05.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:41:05.361 [DEBUG] [Thread-2002] [transport.py] [_log()] starting thread (client mode): 0xbbfcdf30
2025-12-25T00:41:05.361 [DEBUG] [Thread-2002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:41:05.378 [DEBUG] [Thread-2002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:41:05.378 [INFO] [Thread-2002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:41:05.387 [DEBUG] [Thread-2002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] client lang: <none>
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] server lang: <none>
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] kex follows: False
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:41:05.388 [DEBUG] [Thread-2002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:41:05.389 [DEBUG] [Thread-2002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:41:05.389 [DEBUG] [Thread-2002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:41:05.389 [DEBUG] [Thread-2002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:41:05.389 [DEBUG] [Thread-2002] [transport.py] [_log()] Compression: none
2025-12-25T00:41:05.389 [DEBUG] [Thread-2002] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:41:05.452 [DEBUG] [Thread-2002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:41:05.452 [DEBUG] [Thread-2002] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:41:05.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:41:05.453 [DEBUG] [Thread-2002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:41:05.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:41:05.507 [DEBUG] [Thread-2002] [transport.py] [_log()] userauth is OK
2025-12-25T00:41:05.507 [DEBUG] [Thread-2002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:41:05.507 [DEBUG] [Thread-2002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:41:05.507 [DEBUG] [Thread-2002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:41:05.507 [DEBUG] [Thread-2002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:41:05.530 [INFO] [Thread-2002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:41:05.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:41:05.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:41:06.364 [DEBUG] [Thread-2002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:41:06.365 [DEBUG] [Thread-2002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:41:06.413 [DEBUG] [Thread-2002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:41:06.413 [DEBUG] [Thread-2002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:41:06.422 [DEBUG] [Thread-2002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:41:06.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:41:06.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:41:06.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:41:06.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:41:06.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:41:06.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:41:06.459 [DEBUG] [Thread-2002] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:41:10.809 [DEBUG] [Thread-2004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:41:20.142 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:41:20.143 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:41:20.847 [DEBUG] [Thread-2005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:41:25.856 [DEBUG] [Thread-2006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:41:36.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:41:36.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:41:36.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:41:37.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 41, 23), 1.25, 91.97, 0.0, 27.56, 12.36, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:41:37.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:41:23
2025-12-25T00:41:37.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:41:37.458 [DEBUG] [Thread-2007] [transport.py] [_log()] starting thread (client mode): 0xb957aa40
2025-12-25T00:41:37.458 [DEBUG] [Thread-2007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:41:37.478 [DEBUG] [Thread-2007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:41:37.479 [INFO] [Thread-2007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] client lang: <none>
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] server lang: <none>
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] kex follows: False
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:41:37.482 [DEBUG] [Thread-2007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:41:37.483 [DEBUG] [Thread-2007] [transport.py] [_log()] Compression: none
2025-12-25T00:41:37.483 [DEBUG] [Thread-2007] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:41:37.500 [DEBUG] [Thread-2007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:41:37.501 [DEBUG] [Thread-2007] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:41:37.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:41:37.502 [DEBUG] [Thread-2007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:41:37.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:41:37.504 [DEBUG] [Thread-2007] [transport.py] [_log()] userauth is OK
2025-12-25T00:41:37.505 [DEBUG] [Thread-2007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:41:37.505 [DEBUG] [Thread-2007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:41:37.505 [DEBUG] [Thread-2007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:41:37.505 [DEBUG] [Thread-2007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:41:37.538 [INFO] [Thread-2007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:41:37.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:41:38.174 [DEBUG] [Thread-2007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:41:38.175 [DEBUG] [Thread-2007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:41:38.175 [DEBUG] [Thread-2007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:41:38.216 [DEBUG] [Thread-2007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:41:38.216 [DEBUG] [Thread-2007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:41:38.219 [DEBUG] [Thread-2007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:41:38.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:41:38.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:41:38.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:41:38.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:41:38.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:41:38.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:41:38.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:41:38.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:41:38.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:41:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.945199 -999.00  +12.30  20.94     91  +10.90 1 2 1 3 1     0    0 1.03 -17.05 ZNeSW 13.7 20.9 143.0 24.9 13.4 -13.8 13.3 -14.8 13.1 -14.9 13.4 -13.9
2025-12-25T00:41:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:41:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:41:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.945199
2025-12-25T00:41:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:41:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:41:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:41:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:41:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:41:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:41:23', tmtdew=1.25, humidity=91.97, cloud=0.0, wind=27.56, temperature=12.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:41:05.194', atlas_cloud=2, atlas_rain=1, zp_data=[1.0767499999999997, 0.8252500000000005, 1.0112500000000004, 1.302999999999999, 1.8535000000000004, 1.8977500000000012, 1.536999999999999, 1.1247500000000006, 0.7644999999999991, 0.6590000000000007, 0.79725, 1.4100000000000001, 2.247, 2.2692499999999995, 1.2669999999999995, 1.2649999999999997, 0.8232499999999998, 0.6055000000000001, 0.6269999999999989, 1.4012499999999992, 2.100999999999999, 2.093749999999999, 2.101750000000001, 2.04725, 0.9129999999999994, 0.7925000000000004, 0.8617499999999998, 1.2325, 0.9569999999999999, 1.4440000000000008, 1.865000000000001, 1.8720000000000008, 1.303749999999999], zp_timestamp='2025-12-24T22:39:00')
2025-12-25T00:41:38.248 [DEBUG] [Thread-2007] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:41:38.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:41:38.343 [DEBUG] [Thread-2010] [transport.py] [_log()] starting thread (client mode): 0xb957a740
2025-12-25T00:41:38.343 [DEBUG] [Thread-2010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:41:38.357 [DEBUG] [Thread-2010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:41:38.358 [INFO] [Thread-2010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:41:38.365 [DEBUG] [Thread-2010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:41:38.366 [DEBUG] [Thread-2010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:41:38.366 [DEBUG] [Thread-2010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:41:38.366 [DEBUG] [Thread-2010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:41:38.366 [DEBUG] [Thread-2010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:41:38.366 [DEBUG] [Thread-2010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:41:38.366 [DEBUG] [Thread-2010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:41:38.366 [DEBUG] [Thread-2010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:41:38.366 [DEBUG] [Thread-2010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:41:38.367 [DEBUG] [Thread-2010] [transport.py] [_log()] client lang: <none>
2025-12-25T00:41:38.367 [DEBUG] [Thread-2010] [transport.py] [_log()] server lang: <none>
2025-12-25T00:41:38.367 [DEBUG] [Thread-2010] [transport.py] [_log()] kex follows: False
2025-12-25T00:41:38.367 [DEBUG] [Thread-2010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:41:38.367 [DEBUG] [Thread-2010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:41:38.367 [DEBUG] [Thread-2010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:41:38.367 [DEBUG] [Thread-2010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:41:38.368 [DEBUG] [Thread-2010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:41:38.368 [DEBUG] [Thread-2010] [transport.py] [_log()] Compression: none
2025-12-25T00:41:38.368 [DEBUG] [Thread-2010] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:41:38.425 [DEBUG] [Thread-2010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:41:38.425 [DEBUG] [Thread-2010] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:41:38.426 [DEBUG] [Thread-2010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:41:38.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:41:38.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:41:38.480 [DEBUG] [Thread-2010] [transport.py] [_log()] userauth is OK
2025-12-25T00:41:38.481 [DEBUG] [Thread-2010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:41:38.481 [DEBUG] [Thread-2010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:41:38.481 [DEBUG] [Thread-2010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:41:38.481 [DEBUG] [Thread-2010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:41:38.502 [INFO] [Thread-2010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:41:38.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:41:38.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:41:39.335 [DEBUG] [Thread-2010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:41:39.335 [DEBUG] [Thread-2010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:41:39.383 [DEBUG] [Thread-2010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:41:39.383 [DEBUG] [Thread-2010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:41:39.392 [DEBUG] [Thread-2010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:41:39.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:41:39.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:41:39.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:41:39.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:41:39.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:41:39.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:41:39.429 [DEBUG] [Thread-2010] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:41:40.887 [DEBUG] [Thread-2012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:41:55.931 [DEBUG] [Thread-2013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:42:09.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:42:09.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:42:09.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
2025-12-25T00:42:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 41, 55), 1.23, 92.06, 0.0, 27.07, 12.4, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:42:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:41:55
2025-12-25T00:42:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:42:10.442 [DEBUG] [Thread-2014] [transport.py] [_log()] starting thread (client mode): 0xb6b002b0
2025-12-25T00:42:10.442 [DEBUG] [Thread-2014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:42:10.462 [DEBUG] [Thread-2014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:42:10.462 [INFO] [Thread-2014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:42:10.465 [DEBUG] [Thread-2014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] client lang: <none>
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] server lang: <none>
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] kex follows: False
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] Compression: none
2025-12-25T00:42:10.466 [DEBUG] [Thread-2014] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:42:10.482 [DEBUG] [Thread-2014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:42:10.482 [DEBUG] [Thread-2014] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:42:10.482 [DEBUG] [Thread-2014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:42:10.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:42:10.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:42:10.484 [DEBUG] [Thread-2014] [transport.py] [_log()] userauth is OK
2025-12-25T00:42:10.484 [DEBUG] [Thread-2014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:42:10.484 [DEBUG] [Thread-2014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:42:10.484 [DEBUG] [Thread-2014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:42:10.484 [DEBUG] [Thread-2014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:42:10.506 [INFO] [Thread-2014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:42:10.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:42:10.962 [DEBUG] [Thread-2016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:42:11.147 [DEBUG] [Thread-2014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:42:11.147 [DEBUG] [Thread-2014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:42:11.147 [DEBUG] [Thread-2014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:42:11.188 [DEBUG] [Thread-2014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:42:11.188 [DEBUG] [Thread-2014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:42:11.191 [DEBUG] [Thread-2014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:42:11.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:42:11.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:42:11.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:42:11.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:42:11.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:42:11.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:42:11.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:42:11.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:42:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:42:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.945546 -999.00  +12.30  22.74     91  +10.90 1 2 1 3 1     0    0 0.97 -17.89 zNESW 25.0 22.7 151.4 32.1 13.4 -14.9 13.3 -18.2 13.1 -15.6 13.4 -16.4
2025-12-25T00:42:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:42:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:42:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.945546
2025-12-25T00:42:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:42:11.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:42:11.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:42:11.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:42:11.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:42:11.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:41:55', tmtdew=1.23, humidity=92.06, cloud=0.0, wind=27.07, temperature=12.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:41:35.174', atlas_cloud=2, atlas_rain=1, zp_data=[1.0767499999999997, 0.8252500000000005, 1.0112500000000004, 1.302999999999999, 1.8535000000000004, 1.8977500000000012, 1.536999999999999, 1.1247500000000006, 0.7644999999999991, 0.6590000000000007, 0.79725, 1.4100000000000001, 2.247, 2.2692499999999995, 1.2669999999999995, 1.2649999999999997, 0.8232499999999998, 0.6055000000000001, 0.6269999999999989, 1.4012499999999992, 2.100999999999999, 2.093749999999999, 2.101750000000001, 2.04725, 0.9129999999999994, 0.7925000000000004, 0.8617499999999998, 1.2325, 0.9569999999999999, 1.4440000000000008, 1.865000000000001, 1.8720000000000008, 1.303749999999999], zp_timestamp='2025-12-24T22:39:00')
2025-12-25T00:42:11.217 [DEBUG] [Thread-2014] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:42:11.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:42:11.312 [DEBUG] [Thread-2018] [transport.py] [_log()] starting thread (client mode): 0xb957bc40
2025-12-25T00:42:11.312 [DEBUG] [Thread-2018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:42:11.327 [DEBUG] [Thread-2018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:42:11.327 [INFO] [Thread-2018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] client lang: <none>
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] server lang: <none>
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] kex follows: False
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:42:11.334 [DEBUG] [Thread-2018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:42:11.335 [DEBUG] [Thread-2018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:42:11.335 [DEBUG] [Thread-2018] [transport.py] [_log()] Compression: none
2025-12-25T00:42:11.335 [DEBUG] [Thread-2018] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:42:11.391 [DEBUG] [Thread-2018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:42:11.391 [DEBUG] [Thread-2018] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:42:11.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:42:11.392 [DEBUG] [Thread-2018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:42:11.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:42:11.448 [DEBUG] [Thread-2018] [transport.py] [_log()] userauth is OK
2025-12-25T00:42:11.448 [DEBUG] [Thread-2018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:42:11.448 [DEBUG] [Thread-2018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:42:11.448 [DEBUG] [Thread-2018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:42:11.448 [DEBUG] [Thread-2018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:42:11.467 [INFO] [Thread-2018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:42:11.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:42:11.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:42:12.283 [DEBUG] [Thread-2018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:42:12.283 [DEBUG] [Thread-2018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:42:12.330 [DEBUG] [Thread-2018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:42:12.331 [DEBUG] [Thread-2018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:42:12.339 [DEBUG] [Thread-2018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:42:12.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:42:12.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:42:12.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:42:12.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:42:12.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:42:12.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:42:12.373 [DEBUG] [Thread-2018] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:42:20.346 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:42:20.347 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:42:20.926 [DEBUG] [Thread-2020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:42:25.996 [DEBUG] [Thread-2021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:42:41.050 [DEBUG] [Thread-2022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:42:42.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:42:42.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:42:42.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:42:43.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 42, 27), 1.24, 92.04, 0.0, 28.05, 12.33, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:42:43.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:42:27
2025-12-25T00:42:43.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:42:43.433 [DEBUG] [Thread-2023] [transport.py] [_log()] starting thread (client mode): 0xbbfced10
2025-12-25T00:42:43.433 [DEBUG] [Thread-2023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:42:43.448 [DEBUG] [Thread-2023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:42:43.448 [INFO] [Thread-2023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:42:43.450 [DEBUG] [Thread-2023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:42:43.450 [DEBUG] [Thread-2023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:42:43.450 [DEBUG] [Thread-2023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:42:43.450 [DEBUG] [Thread-2023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] client lang: <none>
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] server lang: <none>
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] kex follows: False
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] Compression: none
2025-12-25T00:42:43.451 [DEBUG] [Thread-2023] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:42:43.466 [DEBUG] [Thread-2023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:42:43.466 [DEBUG] [Thread-2023] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:42:43.466 [DEBUG] [Thread-2023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:42:43.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:42:43.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:42:43.467 [DEBUG] [Thread-2023] [transport.py] [_log()] userauth is OK
2025-12-25T00:42:43.467 [DEBUG] [Thread-2023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:42:43.467 [DEBUG] [Thread-2023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:42:43.467 [DEBUG] [Thread-2023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:42:43.467 [DEBUG] [Thread-2023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:42:43.476 [INFO] [Thread-2023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:42:43.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:42:44.118 [DEBUG] [Thread-2023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:42:44.118 [DEBUG] [Thread-2023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:42:44.118 [DEBUG] [Thread-2023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:42:44.159 [DEBUG] [Thread-2023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:42:44.159 [DEBUG] [Thread-2023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:42:44.161 [DEBUG] [Thread-2023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:42:44.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:42:44.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:42:44.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:42:44.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:42:44.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:42:44.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:42:44.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.945893 -999.00  +12.30  26.61     91  +10.90 1 2 1 3 1     0    0 0.91 -19.89 zNESW 25.0 26.6 144.0 31.2 13.4 -17.5 13.3 -15.2 13.1 -15.7 13.4 -16.1
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.945893
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:42:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:42:27', tmtdew=1.24, humidity=92.04, cloud=0.0, wind=28.05, temperature=12.33, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:42:05.155', atlas_cloud=2, atlas_rain=1, zp_data=[1.0767499999999997, 0.8252500000000005, 1.0112500000000004, 1.302999999999999, 1.8535000000000004, 1.8977500000000012, 1.536999999999999, 1.1247500000000006, 0.7644999999999991, 0.6590000000000007, 0.79725, 1.4100000000000001, 2.247, 2.2692499999999995, 1.2669999999999995, 1.2649999999999997, 0.8232499999999998, 0.6055000000000001, 0.6269999999999989, 1.4012499999999992, 2.100999999999999, 2.093749999999999, 2.101750000000001, 2.04725, 0.9129999999999994, 0.7925000000000004, 0.8617499999999998, 1.2325, 0.9569999999999999, 1.4440000000000008, 1.865000000000001, 1.8720000000000008, 1.303749999999999], zp_timestamp='2025-12-24T22:39:00')
2025-12-25T00:42:44.181 [DEBUG] [Thread-2023] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:42:44.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:42:44.264 [DEBUG] [Thread-2026] [transport.py] [_log()] starting thread (client mode): 0xb6b018d0
2025-12-25T00:42:44.265 [DEBUG] [Thread-2026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:42:44.279 [DEBUG] [Thread-2026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:42:44.279 [INFO] [Thread-2026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] client lang: <none>
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] server lang: <none>
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] kex follows: False
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] Compression: none
2025-12-25T00:42:44.287 [DEBUG] [Thread-2026] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:42:44.345 [DEBUG] [Thread-2026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:42:44.345 [DEBUG] [Thread-2026] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:42:44.345 [DEBUG] [Thread-2026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:42:44.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:42:44.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:42:44.400 [DEBUG] [Thread-2026] [transport.py] [_log()] userauth is OK
2025-12-25T00:42:44.400 [DEBUG] [Thread-2026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:42:44.400 [DEBUG] [Thread-2026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:42:44.400 [DEBUG] [Thread-2026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:42:44.400 [DEBUG] [Thread-2026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:42:44.414 [INFO] [Thread-2026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:42:44.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:42:44.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:42:45.235 [DEBUG] [Thread-2026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:42:45.235 [DEBUG] [Thread-2026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:42:45.284 [DEBUG] [Thread-2026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:42:45.284 [DEBUG] [Thread-2026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:42:45.296 [DEBUG] [Thread-2026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:42:45.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:42:45.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')
2025-12-25T00:42:45.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:42:45.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:42:45.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:42:45.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:42:45.335 [DEBUG] [Thread-2026] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:42:56.083 [DEBUG] [Thread-2028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:43:11.137 [DEBUG] [Thread-2029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:43:15.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:43:15.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:43:15.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
2025-12-25T00:43:16.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 42, 59), 1.23, 92.09, 0.0, 30.65, 12.36, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:43:16.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:42:59
2025-12-25T00:43:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:43:16.314 [DEBUG] [Thread-2030] [transport.py] [_log()] starting thread (client mode): 0xb95441c0
2025-12-25T00:43:16.314 [DEBUG] [Thread-2030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:43:16.337 [DEBUG] [Thread-2030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:43:16.337 [INFO] [Thread-2030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] client lang: <none>
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] server lang: <none>
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] kex follows: False
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:43:16.341 [DEBUG] [Thread-2030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:43:16.342 [DEBUG] [Thread-2030] [transport.py] [_log()] Compression: none
2025-12-25T00:43:16.342 [DEBUG] [Thread-2030] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:43:16.361 [DEBUG] [Thread-2030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:43:16.362 [DEBUG] [Thread-2030] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:43:16.362 [DEBUG] [Thread-2030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:43:16.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:43:16.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:43:16.365 [DEBUG] [Thread-2030] [transport.py] [_log()] userauth is OK
2025-12-25T00:43:16.365 [DEBUG] [Thread-2030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:43:16.365 [DEBUG] [Thread-2030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:43:16.365 [DEBUG] [Thread-2030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:43:16.365 [DEBUG] [Thread-2030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:43:16.390 [INFO] [Thread-2030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:43:16.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:43:17.054 [DEBUG] [Thread-2030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:43:17.054 [DEBUG] [Thread-2030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:43:17.055 [DEBUG] [Thread-2030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:43:17.095 [DEBUG] [Thread-2030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:43:17.095 [DEBUG] [Thread-2030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:43:17.098 [DEBUG] [Thread-2030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:43:17.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:43:17.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:43:17.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:43:17.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:43:17.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:43:17.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:43:17.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:43:17.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:43:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:43:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.946240 -999.00  +12.30  25.88     91  +10.90 1 2 1 3 1     0    0 0.88 -21.94 Z.ESW 27.0 25.9 142.2 30.6 13.4 -16.7 13.2 -18.5 13.1 -15.5 13.4 -18.6
2025-12-25T00:43:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:43:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:43:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.946240
2025-12-25T00:43:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:43:17.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:43:17.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:43:17.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:43:17.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:43:17.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:42:59', tmtdew=1.23, humidity=92.09, cloud=0.0, wind=30.65, temperature=12.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:42:35.136', atlas_cloud=2, atlas_rain=1, zp_data=[1.0767499999999997, 0.8252500000000005, 1.0112500000000004, 1.302999999999999, 1.8535000000000004, 1.8977500000000012, 1.536999999999999, 1.1247500000000006, 0.7644999999999991, 0.6590000000000007, 0.79725, 1.4100000000000001, 2.247, 2.2692499999999995, 1.2669999999999995, 1.2649999999999997, 0.8232499999999998, 0.6055000000000001, 0.6269999999999989, 1.4012499999999992, 2.100999999999999, 2.093749999999999, 2.101750000000001, 2.04725, 0.9129999999999994, 0.7925000000000004, 0.8617499999999998, 1.2325, 0.9569999999999999, 1.4440000000000008, 1.865000000000001, 1.8720000000000008, 1.303749999999999], zp_timestamp='2025-12-24T22:39:00')
2025-12-25T00:43:17.124 [DEBUG] [Thread-2030] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:43:17.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:43:17.227 [DEBUG] [Thread-2033] [transport.py] [_log()] starting thread (client mode): 0xb9545150
2025-12-25T00:43:17.228 [DEBUG] [Thread-2033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:43:17.242 [DEBUG] [Thread-2033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:43:17.242 [INFO] [Thread-2033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] client lang: <none>
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] server lang: <none>
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] kex follows: False
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:43:17.250 [DEBUG] [Thread-2033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:43:17.251 [DEBUG] [Thread-2033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:43:17.251 [DEBUG] [Thread-2033] [transport.py] [_log()] Compression: none
2025-12-25T00:43:17.251 [DEBUG] [Thread-2033] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:43:17.309 [DEBUG] [Thread-2033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:43:17.310 [DEBUG] [Thread-2033] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:43:17.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:43:17.311 [DEBUG] [Thread-2033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:43:17.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:43:17.366 [DEBUG] [Thread-2033] [transport.py] [_log()] userauth is OK
2025-12-25T00:43:17.366 [DEBUG] [Thread-2033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:43:17.366 [DEBUG] [Thread-2033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:43:17.366 [DEBUG] [Thread-2033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:43:17.366 [DEBUG] [Thread-2033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:43:17.385 [INFO] [Thread-2033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:43:17.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:43:17.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:43:18.212 [DEBUG] [Thread-2033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:43:18.212 [DEBUG] [Thread-2033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:43:18.260 [DEBUG] [Thread-2033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:43:18.261 [DEBUG] [Thread-2033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:43:18.270 [DEBUG] [Thread-2033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:43:18.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:43:18.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:43:18.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:43:18.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:43:18.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:43:18.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:43:18.308 [DEBUG] [Thread-2033] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:43:20.549 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:43:20.550 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:43:21.000 [DEBUG] [Thread-2035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:43:26.168 [DEBUG] [Thread-2036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:43:41.222 [DEBUG] [Thread-2037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:43:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:43:48.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:43:48.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:43:49.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 43, 33), 1.22, 92.12, 0.0, 30.52, 12.36, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:43:49.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:43:33
2025-12-25T00:43:49.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:43:49.293 [DEBUG] [Thread-2038] [transport.py] [_log()] starting thread (client mode): 0xb9544460
2025-12-25T00:43:49.293 [DEBUG] [Thread-2038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:43:49.314 [DEBUG] [Thread-2038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:43:49.314 [INFO] [Thread-2038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] client lang: <none>
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] server lang: <none>
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] kex follows: False
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:43:49.317 [DEBUG] [Thread-2038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:43:49.318 [DEBUG] [Thread-2038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:43:49.318 [DEBUG] [Thread-2038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:43:49.318 [DEBUG] [Thread-2038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:43:49.318 [DEBUG] [Thread-2038] [transport.py] [_log()] Compression: none
2025-12-25T00:43:49.318 [DEBUG] [Thread-2038] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:43:49.335 [DEBUG] [Thread-2038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:43:49.335 [DEBUG] [Thread-2038] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:43:49.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:43:49.336 [DEBUG] [Thread-2038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:43:49.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:43:49.338 [DEBUG] [Thread-2038] [transport.py] [_log()] userauth is OK
2025-12-25T00:43:49.339 [DEBUG] [Thread-2038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:43:49.339 [DEBUG] [Thread-2038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:43:49.339 [DEBUG] [Thread-2038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:43:49.339 [DEBUG] [Thread-2038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:43:49.356 [INFO] [Thread-2038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:43:49.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:43:49.975 [DEBUG] [Thread-2038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:43:49.975 [DEBUG] [Thread-2038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:43:49.976 [DEBUG] [Thread-2038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:43:50.016 [DEBUG] [Thread-2038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:43:50.016 [DEBUG] [Thread-2038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:43:50.019 [DEBUG] [Thread-2038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:43:50.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:43:50.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:43:50.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:43:50.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:43:50.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:43:50.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:43:50.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:43:50.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:43:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:43:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.946935 -999.00  +12.30  21.28     91  +10.90 1 2 1 3 1     0    0 0.90 -19.74 ZNESw 21.7 21.3 149.4 27.4 13.4 -10.1 13.3 -11.5 13.0 -10.3 13.4 -12.3
2025-12-25T00:43:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:43:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:43:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.946935
2025-12-25T00:43:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:43:50.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:43:50.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:43:50.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:43:50.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:43:50.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:43:33', tmtdew=1.22, humidity=92.12, cloud=0.0, wind=30.52, temperature=12.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:43:35.184', atlas_cloud=2, atlas_rain=1, zp_data=[1.0767499999999997, 0.8252500000000005, 1.0112500000000004, 1.302999999999999, 1.8535000000000004, 1.8977500000000012, 1.536999999999999, 1.1247500000000006, 0.7644999999999991, 0.6590000000000007, 0.79725, 1.4100000000000001, 2.247, 2.2692499999999995, 1.2669999999999995, 1.2649999999999997, 0.8232499999999998, 0.6055000000000001, 0.6269999999999989, 1.4012499999999992, 2.100999999999999, 2.093749999999999, 2.101750000000001, 2.04725, 0.9129999999999994, 0.7925000000000004, 0.8617499999999998, 1.2325, 0.9569999999999999, 1.4440000000000008, 1.865000000000001, 1.8720000000000008, 1.303749999999999], zp_timestamp='2025-12-24T22:39:00')
2025-12-25T00:43:50.044 [DEBUG] [Thread-2038] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:43:50.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:43:50.140 [DEBUG] [Thread-2041] [transport.py] [_log()] starting thread (client mode): 0xb6b010c0
2025-12-25T00:43:50.140 [DEBUG] [Thread-2041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:43:50.154 [DEBUG] [Thread-2041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:43:50.154 [INFO] [Thread-2041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:43:50.162 [DEBUG] [Thread-2041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:43:50.162 [DEBUG] [Thread-2041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:43:50.162 [DEBUG] [Thread-2041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:43:50.162 [DEBUG] [Thread-2041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:43:50.162 [DEBUG] [Thread-2041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] client lang: <none>
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] server lang: <none>
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] kex follows: False
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:43:50.163 [DEBUG] [Thread-2041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:43:50.164 [DEBUG] [Thread-2041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:43:50.164 [DEBUG] [Thread-2041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:43:50.164 [DEBUG] [Thread-2041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:43:50.164 [DEBUG] [Thread-2041] [transport.py] [_log()] Compression: none
2025-12-25T00:43:50.164 [DEBUG] [Thread-2041] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:43:50.222 [DEBUG] [Thread-2041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:43:50.223 [DEBUG] [Thread-2041] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:43:50.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:43:50.225 [DEBUG] [Thread-2041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:43:50.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:43:50.286 [DEBUG] [Thread-2041] [transport.py] [_log()] userauth is OK
2025-12-25T00:43:50.286 [DEBUG] [Thread-2041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:43:50.286 [DEBUG] [Thread-2041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:43:50.286 [DEBUG] [Thread-2041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:43:50.286 [DEBUG] [Thread-2041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:43:50.309 [INFO] [Thread-2041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:43:50.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:43:50.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:43:51.198 [DEBUG] [Thread-2041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:43:51.198 [DEBUG] [Thread-2041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:43:51.246 [DEBUG] [Thread-2041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:43:51.246 [DEBUG] [Thread-2041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:43:51.255 [DEBUG] [Thread-2041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:43:51.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:43:51.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:43:51.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:43:51.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:43:51.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:43:51.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:43:51.292 [DEBUG] [Thread-2041] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:43:56.257 [DEBUG] [Thread-2043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:44:11.305 [DEBUG] [Thread-2044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:44:20.759 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:44:20.760 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:44:21.067 [DEBUG] [Thread-2045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:44:21.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:44:21.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:44:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:44:22.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 44, 5), 1.23, 92.11, 0.0, 27.97, 12.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:44:22.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:44:05
2025-12-25T00:44:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:44:22.298 [DEBUG] [Thread-2046] [transport.py] [_log()] starting thread (client mode): 0xb6b019f0
2025-12-25T00:44:22.298 [DEBUG] [Thread-2046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:44:22.317 [DEBUG] [Thread-2046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:44:22.317 [INFO] [Thread-2046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:44:22.320 [DEBUG] [Thread-2046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:44:22.320 [DEBUG] [Thread-2046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] client lang: <none>
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] server lang: <none>
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] kex follows: False
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] Compression: none
2025-12-25T00:44:22.321 [DEBUG] [Thread-2046] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:44:22.340 [DEBUG] [Thread-2046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:44:22.341 [DEBUG] [Thread-2046] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:44:22.341 [DEBUG] [Thread-2046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:44:22.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:44:22.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:44:22.343 [DEBUG] [Thread-2046] [transport.py] [_log()] userauth is OK
2025-12-25T00:44:22.344 [DEBUG] [Thread-2046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:44:22.344 [DEBUG] [Thread-2046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:44:22.344 [DEBUG] [Thread-2046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:44:22.344 [DEBUG] [Thread-2046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:44:22.368 [INFO] [Thread-2046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:44:22.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:44:22.949 [DEBUG] [Thread-2046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:44:22.950 [DEBUG] [Thread-2046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:44:22.950 [DEBUG] [Thread-2046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:44:22.992 [DEBUG] [Thread-2046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:44:22.992 [DEBUG] [Thread-2046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:44:22.995 [DEBUG] [Thread-2046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:44:23.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:44:23.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:44:23.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:44:23.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:44:23.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:44:23.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:44:23.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:44:23.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:44:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:44:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.947282 -999.00  +12.30  23.36     91  +10.90 1 2 1 3 1     0    0 1.00 -17.31 ZNESw 22.4 23.4 145.0 29.0 13.4 -11.7 13.2 -11.3 13.1 -10.4 13.4 -12.0
2025-12-25T00:44:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:44:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:44:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.947282
2025-12-25T00:44:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:44:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:44:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:44:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:44:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:44:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:44:05', tmtdew=1.23, humidity=92.11, cloud=0.0, wind=27.97, temperature=12.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:44:05.165', atlas_cloud=2, atlas_rain=1, zp_data=[1.0767499999999997, 0.8252500000000005, 1.0112500000000004, 1.302999999999999, 1.8535000000000004, 1.8977500000000012, 1.536999999999999, 1.1247500000000006, 0.7644999999999991, 0.6590000000000007, 0.79725, 1.4100000000000001, 2.247, 2.2692499999999995, 1.2669999999999995, 1.2649999999999997, 0.8232499999999998, 0.6055000000000001, 0.6269999999999989, 1.4012499999999992, 2.100999999999999, 2.093749999999999, 2.101750000000001, 2.04725, 0.9129999999999994, 0.7925000000000004, 0.8617499999999998, 1.2325, 0.9569999999999999, 1.4440000000000008, 1.865000000000001, 1.8720000000000008, 1.303749999999999], zp_timestamp='2025-12-24T22:43:00')
2025-12-25T00:44:23.022 [DEBUG] [Thread-2046] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:44:23.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:44:26.338 [DEBUG] [Thread-2049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:44:41.393 [DEBUG] [Thread-2050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:44:56.425 [DEBUG] [Thread-2051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:45:11.462 [DEBUG] [Thread-2052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:45:20.964 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:45:20.965 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:45:21.140 [DEBUG] [Thread-2053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:45:26.491 [DEBUG] [Thread-2054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:45:41.530 [DEBUG] [Thread-2055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:45:56.564 [DEBUG] [Thread-2056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:46:11.595 [DEBUG] [Thread-2057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:46:21.171 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:46:21.172 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:46:21.195 [DEBUG] [Thread-2058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:46:26.632 [DEBUG] [Thread-2059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:46:37.781 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-25T00:46:41.666 [DEBUG] [Thread-2060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:46:56.700 [DEBUG] [Thread-2061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:47:07.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:47:07.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:47:07.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:47:08.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 46, 45), 1.16, 92.22, 0.0, 24.07, 12.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:47:08.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:46:45
2025-12-25T00:47:08.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:47:08.806 [DEBUG] [Thread-2062] [transport.py] [_log()] starting thread (client mode): 0xb6b00d90
2025-12-25T00:47:08.806 [DEBUG] [Thread-2062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:47:08.819 [DEBUG] [Thread-2062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:47:08.819 [INFO] [Thread-2062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] client lang: <none>
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] server lang: <none>
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] kex follows: False
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:47:08.823 [DEBUG] [Thread-2062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:47:08.824 [DEBUG] [Thread-2062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:47:08.824 [DEBUG] [Thread-2062] [transport.py] [_log()] Compression: none
2025-12-25T00:47:08.824 [DEBUG] [Thread-2062] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:47:08.842 [DEBUG] [Thread-2062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:47:08.843 [DEBUG] [Thread-2062] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:47:08.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:47:08.844 [DEBUG] [Thread-2062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:47:08.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:47:08.846 [DEBUG] [Thread-2062] [transport.py] [_log()] userauth is OK
2025-12-25T00:47:08.846 [DEBUG] [Thread-2062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:47:08.846 [DEBUG] [Thread-2062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:47:08.846 [DEBUG] [Thread-2062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:47:08.846 [DEBUG] [Thread-2062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:47:08.870 [INFO] [Thread-2062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:47:08.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:47:09.484 [DEBUG] [Thread-2062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:47:09.484 [DEBUG] [Thread-2062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:47:09.484 [DEBUG] [Thread-2062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:47:09.525 [DEBUG] [Thread-2062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:47:09.525 [DEBUG] [Thread-2062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:47:09.528 [DEBUG] [Thread-2062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:47:09.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:47:09.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:47:09.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:47:09.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:47:09.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:47:09.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:47:09.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:47:09.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:47:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:47:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.948671 -999.00  +12.20  22.66     91  +10.90 1 1 1 3 1     0    0 1.02 -15.79 ZNESW 21.1 22.7 142.2 25.1 13.4 -14.2 13.3 -14.5 13.1 -14.0 13.3 -16.7
2025-12-25T00:47:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:47:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:47:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.948671
2025-12-25T00:47:09.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:47:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:47:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:47:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:47:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:47:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:46:45', tmtdew=1.16, humidity=92.22, cloud=0.0, wind=24.07, temperature=12.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:46:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:46:00')
2025-12-25T00:47:09.555 [DEBUG] [Thread-2062] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:47:09.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:47:09.648 [DEBUG] [Thread-2065] [transport.py] [_log()] starting thread (client mode): 0xb95d5b10
2025-12-25T00:47:09.648 [DEBUG] [Thread-2065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:47:09.663 [DEBUG] [Thread-2065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:47:09.664 [INFO] [Thread-2065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:47:09.671 [DEBUG] [Thread-2065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:47:09.671 [DEBUG] [Thread-2065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:47:09.671 [DEBUG] [Thread-2065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:47:09.671 [DEBUG] [Thread-2065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:47:09.671 [DEBUG] [Thread-2065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] client lang: <none>
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] server lang: <none>
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] kex follows: False
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] Compression: none
2025-12-25T00:47:09.672 [DEBUG] [Thread-2065] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:47:09.728 [DEBUG] [Thread-2065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:47:09.729 [DEBUG] [Thread-2065] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:47:09.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:47:09.730 [DEBUG] [Thread-2065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:47:09.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:47:09.784 [DEBUG] [Thread-2065] [transport.py] [_log()] userauth is OK
2025-12-25T00:47:09.784 [DEBUG] [Thread-2065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:47:09.785 [DEBUG] [Thread-2065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:47:09.785 [DEBUG] [Thread-2065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:47:09.785 [DEBUG] [Thread-2065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:47:09.803 [INFO] [Thread-2065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:47:09.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:47:09.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:47:10.623 [DEBUG] [Thread-2065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:47:10.623 [DEBUG] [Thread-2065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:47:10.671 [DEBUG] [Thread-2065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:47:10.671 [DEBUG] [Thread-2065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:47:10.681 [DEBUG] [Thread-2065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:47:10.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:47:10.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:47:10.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:47:10.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:47:10.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:47:10.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:47:10.717 [DEBUG] [Thread-2065] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:47:11.737 [DEBUG] [Thread-2067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:47:21.264 [DEBUG] [Thread-2068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:47:21.375 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:47:21.376 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:47:26.796 [DEBUG] [Thread-2069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:47:40.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:47:40.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:47:40.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:47:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 47, 17), 1.15, 92.27, 0.0, 26.45, 12.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:47:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:47:17
2025-12-25T00:47:41.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:47:41.726 [DEBUG] [Thread-2070] [transport.py] [_log()] starting thread (client mode): 0xbbfcebc0
2025-12-25T00:47:41.726 [DEBUG] [Thread-2070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:47:41.748 [DEBUG] [Thread-2070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:47:41.748 [INFO] [Thread-2070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] client lang: <none>
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] server lang: <none>
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] kex follows: False
2025-12-25T00:47:41.751 [DEBUG] [Thread-2070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:47:41.752 [DEBUG] [Thread-2070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:47:41.752 [DEBUG] [Thread-2070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:47:41.752 [DEBUG] [Thread-2070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:47:41.752 [DEBUG] [Thread-2070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:47:41.752 [DEBUG] [Thread-2070] [transport.py] [_log()] Compression: none
2025-12-25T00:47:41.752 [DEBUG] [Thread-2070] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:47:41.768 [DEBUG] [Thread-2070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:47:41.769 [DEBUG] [Thread-2070] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:47:41.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:47:41.770 [DEBUG] [Thread-2070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:47:41.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:47:41.772 [DEBUG] [Thread-2070] [transport.py] [_log()] userauth is OK
2025-12-25T00:47:41.772 [DEBUG] [Thread-2070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:47:41.772 [DEBUG] [Thread-2070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:47:41.772 [DEBUG] [Thread-2070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:47:41.772 [DEBUG] [Thread-2070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:47:41.791 [INFO] [Thread-2070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:47:41.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:47:41.833 [DEBUG] [Thread-2072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:47:42.444 [DEBUG] [Thread-2070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:47:42.445 [DEBUG] [Thread-2070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:47:42.445 [DEBUG] [Thread-2070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:47:42.485 [DEBUG] [Thread-2070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:47:42.485 [DEBUG] [Thread-2070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:47:42.489 [DEBUG] [Thread-2070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:47:42.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:47:42.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:47:42.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:47:42.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:47:42.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:47:42.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:47:42.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:47:42.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:47:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:47:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.949365 -999.00  +12.30  20.56     91  +11.00 1 2 1 3 1     0    0 0.96 -15.59 ZNE.W 21.0 20.6 145.6 23.0 13.4 -12.2 13.3 -14.2 13.1 -11.8 13.4 -15.4
2025-12-25T00:47:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:47:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:47:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.949365
2025-12-25T00:47:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:47:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:47:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:47:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:47:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:47:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:47:17', tmtdew=1.15, humidity=92.27, cloud=0.0, wind=26.45, temperature=12.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:47:05.136', atlas_cloud=2, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:46:00')
2025-12-25T00:47:42.517 [DEBUG] [Thread-2070] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:47:42.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:47:42.610 [DEBUG] [Thread-2074] [transport.py] [_log()] starting thread (client mode): 0xb95d6170
2025-12-25T00:47:42.610 [DEBUG] [Thread-2074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:47:42.624 [DEBUG] [Thread-2074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:47:42.624 [INFO] [Thread-2074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:47:42.632 [DEBUG] [Thread-2074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:47:42.632 [DEBUG] [Thread-2074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:47:42.632 [DEBUG] [Thread-2074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:47:42.632 [DEBUG] [Thread-2074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:47:42.632 [DEBUG] [Thread-2074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:47:42.632 [DEBUG] [Thread-2074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] client lang: <none>
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] server lang: <none>
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] kex follows: False
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:47:42.633 [DEBUG] [Thread-2074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:47:42.634 [DEBUG] [Thread-2074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:47:42.634 [DEBUG] [Thread-2074] [transport.py] [_log()] Compression: none
2025-12-25T00:47:42.634 [DEBUG] [Thread-2074] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:47:42.693 [DEBUG] [Thread-2074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:47:42.693 [DEBUG] [Thread-2074] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:47:42.694 [DEBUG] [Thread-2074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:47:42.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:47:42.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:47:42.748 [DEBUG] [Thread-2074] [transport.py] [_log()] userauth is OK
2025-12-25T00:47:42.749 [DEBUG] [Thread-2074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:47:42.749 [DEBUG] [Thread-2074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:47:42.749 [DEBUG] [Thread-2074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:47:42.749 [DEBUG] [Thread-2074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:47:42.767 [INFO] [Thread-2074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:47:42.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:47:42.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:47:43.610 [DEBUG] [Thread-2074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:47:43.610 [DEBUG] [Thread-2074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:47:43.661 [DEBUG] [Thread-2074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:47:43.661 [DEBUG] [Thread-2074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:47:43.670 [DEBUG] [Thread-2074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:47:43.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:47:43.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:47:43.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:47:43.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:47:43.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:47:43.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:47:43.707 [DEBUG] [Thread-2074] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:47:56.863 [DEBUG] [Thread-2076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:48:11.907 [DEBUG] [Thread-2077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:48:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:48:13.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:48:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:48:14.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 47, 49), 1.14, 92.84, 0.0, 24.91, 12.28, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:48:14.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:47:49
2025-12-25T00:48:14.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:48:14.714 [DEBUG] [Thread-2078] [transport.py] [_log()] starting thread (client mode): 0xbbfcd8a0
2025-12-25T00:48:14.714 [DEBUG] [Thread-2078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:48:14.734 [DEBUG] [Thread-2078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:48:14.735 [INFO] [Thread-2078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:48:14.738 [DEBUG] [Thread-2078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:48:14.738 [DEBUG] [Thread-2078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:48:14.738 [DEBUG] [Thread-2078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:48:14.738 [DEBUG] [Thread-2078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:48:14.738 [DEBUG] [Thread-2078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:48:14.738 [DEBUG] [Thread-2078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] client lang: <none>
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] server lang: <none>
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] kex follows: False
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] Compression: none
2025-12-25T00:48:14.739 [DEBUG] [Thread-2078] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:48:14.760 [DEBUG] [Thread-2078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:48:14.761 [DEBUG] [Thread-2078] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:48:14.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:48:14.763 [DEBUG] [Thread-2078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:48:14.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:48:14.765 [DEBUG] [Thread-2078] [transport.py] [_log()] userauth is OK
2025-12-25T00:48:14.765 [DEBUG] [Thread-2078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:48:14.765 [DEBUG] [Thread-2078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:48:14.766 [DEBUG] [Thread-2078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:48:14.766 [DEBUG] [Thread-2078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:48:14.789 [INFO] [Thread-2078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:48:14.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:48:15.443 [DEBUG] [Thread-2078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:48:15.444 [DEBUG] [Thread-2078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:48:15.444 [DEBUG] [Thread-2078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:48:15.485 [DEBUG] [Thread-2078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:48:15.485 [DEBUG] [Thread-2078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:48:15.487 [DEBUG] [Thread-2078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:48:15.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:48:15.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:48:15.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:48:15.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:48:15.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:48:15.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:48:15.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:48:15.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:48:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:48:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.949712 -999.00  +12.30  18.14     91  +10.90 1 2 1 3 1     0    0 1.04 -14.34 ZNE.W 22.0 18.1 151.0 22.5 13.4 -14.7 13.3 -12.9 13.1 -14.0 13.3 -13.4
2025-12-25T00:48:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:48:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:48:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.949712
2025-12-25T00:48:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:48:15.513 [DEBUG] [Thread-2078] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:48:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:48:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:48:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:48:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:48:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:47:49', tmtdew=1.14, humidity=92.84, cloud=0.0, wind=24.91, temperature=12.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:47:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:46:00')
2025-12-25T00:48:15.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:48:15.612 [DEBUG] [Thread-2081] [transport.py] [_log()] starting thread (client mode): 0xbbfcfd90
2025-12-25T00:48:15.612 [DEBUG] [Thread-2081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:48:15.628 [DEBUG] [Thread-2081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:48:15.628 [INFO] [Thread-2081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] client lang: <none>
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] server lang: <none>
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] kex follows: False
2025-12-25T00:48:15.635 [DEBUG] [Thread-2081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:48:15.636 [DEBUG] [Thread-2081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:48:15.636 [DEBUG] [Thread-2081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:48:15.636 [DEBUG] [Thread-2081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:48:15.636 [DEBUG] [Thread-2081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:48:15.636 [DEBUG] [Thread-2081] [transport.py] [_log()] Compression: none
2025-12-25T00:48:15.636 [DEBUG] [Thread-2081] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:48:15.692 [DEBUG] [Thread-2081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:48:15.692 [DEBUG] [Thread-2081] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:48:15.693 [DEBUG] [Thread-2081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:48:15.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:48:15.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:48:15.749 [DEBUG] [Thread-2081] [transport.py] [_log()] userauth is OK
2025-12-25T00:48:15.749 [DEBUG] [Thread-2081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:48:15.749 [DEBUG] [Thread-2081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:48:15.750 [DEBUG] [Thread-2081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:48:15.750 [DEBUG] [Thread-2081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:48:15.768 [INFO] [Thread-2081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:48:15.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:48:15.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:48:16.597 [DEBUG] [Thread-2081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:48:16.598 [DEBUG] [Thread-2081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:48:16.646 [DEBUG] [Thread-2081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:48:16.646 [DEBUG] [Thread-2081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:48:16.655 [DEBUG] [Thread-2081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:48:16.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:48:16.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:48: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
2025-12-25T00:48:16.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:48:16.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:48:16.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:48:16.693 [DEBUG] [Thread-2081] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:48:21.332 [DEBUG] [Thread-2083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:48:21.580 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:48:21.582 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:48:26.941 [DEBUG] [Thread-2084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:48:41.988 [DEBUG] [Thread-2085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:48:46.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:48:46.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:48:46.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:48:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 48, 21), 1.14, 92.81, 0.0, 24.31, 12.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:48:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:48:21
2025-12-25T00:48:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:48:47.687 [DEBUG] [Thread-2086] [transport.py] [_log()] starting thread (client mode): 0xb95b0700
2025-12-25T00:48:47.687 [DEBUG] [Thread-2086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:48:47.707 [DEBUG] [Thread-2086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:48:47.707 [INFO] [Thread-2086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] client lang: <none>
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] server lang: <none>
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] kex follows: False
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] Compression: none
2025-12-25T00:48:47.711 [DEBUG] [Thread-2086] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:48:47.726 [DEBUG] [Thread-2086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:48:47.727 [DEBUG] [Thread-2086] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:48:47.727 [DEBUG] [Thread-2086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:48:47.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:48:47.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:48:47.768 [DEBUG] [Thread-2086] [transport.py] [_log()] userauth is OK
2025-12-25T00:48:47.769 [DEBUG] [Thread-2086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:48:47.769 [DEBUG] [Thread-2086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:48:47.769 [DEBUG] [Thread-2086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:48:47.769 [DEBUG] [Thread-2086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:48:47.804 [INFO] [Thread-2086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:48:47.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:48:48.432 [DEBUG] [Thread-2086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:48:48.432 [DEBUG] [Thread-2086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:48:48.433 [DEBUG] [Thread-2086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:48:48.473 [DEBUG] [Thread-2086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:48:48.473 [DEBUG] [Thread-2086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:48:48.476 [DEBUG] [Thread-2086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:48:48.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:48:48.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:48:48.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:48:48.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:48:48.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:48:48.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:48:48.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:48:48.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:48:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:48:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.950060 -999.00  +12.20  12.54     91  +10.90 1 2 1 3 1     0    0 1.00 -14.62 ZNEsW 13.3 12.5 150.2 22.5 13.4 -13.1 13.3 -13.8 13.1 -13.0 13.3 -14.1
2025-12-25T00:48:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:48:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:48:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.950060
2025-12-25T00:48:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:48:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:48:48.495 [DEBUG] [Thread-2086] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:48:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:48:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:48:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:48:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:48:21', tmtdew=1.14, humidity=92.81, cloud=0.0, wind=24.31, temperature=12.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:48:05.184', atlas_cloud=2, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:46:00')
2025-12-25T00:48:48.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:48:48.593 [DEBUG] [Thread-2089] [transport.py] [_log()] starting thread (client mode): 0xb95d5ae0
2025-12-25T00:48:48.593 [DEBUG] [Thread-2089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:48:48.608 [DEBUG] [Thread-2089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:48:48.608 [INFO] [Thread-2089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] client lang: <none>
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] server lang: <none>
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] kex follows: False
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] Compression: none
2025-12-25T00:48:48.616 [DEBUG] [Thread-2089] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:48:48.673 [DEBUG] [Thread-2089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:48:48.674 [DEBUG] [Thread-2089] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:48:48.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:48:48.675 [DEBUG] [Thread-2089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:48:48.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:48:48.729 [DEBUG] [Thread-2089] [transport.py] [_log()] userauth is OK
2025-12-25T00:48:48.729 [DEBUG] [Thread-2089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:48:48.730 [DEBUG] [Thread-2089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:48:48.730 [DEBUG] [Thread-2089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:48:48.730 [DEBUG] [Thread-2089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:48:48.749 [INFO] [Thread-2089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:48:48.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:48:48.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:48:49.592 [DEBUG] [Thread-2089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:48:49.592 [DEBUG] [Thread-2089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:48:49.640 [DEBUG] [Thread-2089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:48:49.640 [DEBUG] [Thread-2089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:48:49.650 [DEBUG] [Thread-2089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:48:49.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:48:49.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:48:49.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:48:49.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:48:49.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:48:49.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:48:49.688 [DEBUG] [Thread-2089] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:48:57.022 [DEBUG] [Thread-2091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:49:12.070 [DEBUG] [Thread-2092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:49:19.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:49:19.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:49:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:49:20.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 48, 53), 1.13, 92.87, 0.0, 22.2, 12.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:49:20.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:48:53
2025-12-25T00:49:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:49:20.675 [DEBUG] [Thread-2093] [transport.py] [_log()] starting thread (client mode): 0xb9578d30
2025-12-25T00:49:20.675 [DEBUG] [Thread-2093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:49:20.695 [DEBUG] [Thread-2093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:49:20.695 [INFO] [Thread-2093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:49:20.698 [DEBUG] [Thread-2093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] client lang: <none>
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] server lang: <none>
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] kex follows: False
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] Compression: none
2025-12-25T00:49:20.699 [DEBUG] [Thread-2093] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:49:20.714 [DEBUG] [Thread-2093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:49:20.714 [DEBUG] [Thread-2093] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:49:20.714 [DEBUG] [Thread-2093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:49:20.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:49:20.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:49:20.715 [DEBUG] [Thread-2093] [transport.py] [_log()] userauth is OK
2025-12-25T00:49:20.715 [DEBUG] [Thread-2093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:49:20.715 [DEBUG] [Thread-2093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:49:20.715 [DEBUG] [Thread-2093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:49:20.715 [DEBUG] [Thread-2093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:49:20.724 [INFO] [Thread-2093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:49:20.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:49:21.342 [DEBUG] [Thread-2093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:49:21.343 [DEBUG] [Thread-2093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:49:21.343 [DEBUG] [Thread-2093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:49:21.383 [DEBUG] [Thread-2093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:49:21.384 [DEBUG] [Thread-2093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:49:21.386 [DEBUG] [Thread-2093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:49:21.389 [DEBUG] [Thread-2095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:49:21.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:49:21.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:49:21.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:49:21.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:49:21.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:49:21.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:49:21.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:49:21.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:49:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:49:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.950407 -999.00  +12.20  14.73     91  +10.90 1 2 1 3 1     0    0 1.06 -12.96 ZNEsW 15.3 14.7 152.6 21.6 13.4 -16.3 13.3 -14.9 13.1 -15.5 13.3 -15.6
2025-12-25T00:49:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:49:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:49:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.950407
2025-12-25T00:49:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:49:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:49:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:49:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:49:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:49:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:48:53', tmtdew=1.13, humidity=92.87, cloud=0.0, wind=22.2, temperature=12.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:48:35.165', atlas_cloud=2, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:46:00')
2025-12-25T00:49:21.407 [DEBUG] [Thread-2093] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:49:21.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:49:21.499 [DEBUG] [Thread-2097] [transport.py] [_log()] starting thread (client mode): 0xb957ad70
2025-12-25T00:49:21.499 [DEBUG] [Thread-2097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:49:21.513 [DEBUG] [Thread-2097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:49:21.513 [INFO] [Thread-2097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:49:21.521 [DEBUG] [Thread-2097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:49:21.521 [DEBUG] [Thread-2097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:49:21.521 [DEBUG] [Thread-2097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:49:21.521 [DEBUG] [Thread-2097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] client lang: <none>
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] server lang: <none>
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] kex follows: False
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] Compression: none
2025-12-25T00:49:21.522 [DEBUG] [Thread-2097] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:49:21.581 [DEBUG] [Thread-2097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:49:21.582 [DEBUG] [Thread-2097] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:49:21.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:49:21.583 [DEBUG] [Thread-2097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:49:21.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:49:21.637 [DEBUG] [Thread-2097] [transport.py] [_log()] userauth is OK
2025-12-25T00:49:21.638 [DEBUG] [Thread-2097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:49:21.638 [DEBUG] [Thread-2097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:49:21.638 [DEBUG] [Thread-2097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:49:21.638 [DEBUG] [Thread-2097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:49:21.657 [INFO] [Thread-2097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:49:21.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:49:21.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:49:21.782 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:49:21.784 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:49:22.437 [DEBUG] [Thread-2097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:49:22.437 [DEBUG] [Thread-2097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:49:22.485 [DEBUG] [Thread-2097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:49:22.485 [DEBUG] [Thread-2097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:49:22.494 [DEBUG] [Thread-2097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:49:22.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:49:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:49:22.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:49:22.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:49:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:49:22.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:49:22.531 [DEBUG] [Thread-2097] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:49:27.100 [DEBUG] [Thread-2099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:49:42.142 [DEBUG] [Thread-2100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:49:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:49:52.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:49:52.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:49:53.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 49, 25), 1.13, 92.89, 0.0, 22.76, 12.28, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:49:53.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:49:25
2025-12-25T00:49:53.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:49:53.562 [DEBUG] [Thread-2101] [transport.py] [_log()] starting thread (client mode): 0xb957ae60
2025-12-25T00:49:53.562 [DEBUG] [Thread-2101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:49:53.582 [DEBUG] [Thread-2101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:49:53.582 [INFO] [Thread-2101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] client lang: <none>
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] server lang: <none>
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] kex follows: False
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] Compression: none
2025-12-25T00:49:53.584 [DEBUG] [Thread-2101] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:49:53.591 [DEBUG] [Thread-2101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:49:53.591 [DEBUG] [Thread-2101] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:49:53.592 [DEBUG] [Thread-2101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:49:53.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:49:53.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:49:53.592 [DEBUG] [Thread-2101] [transport.py] [_log()] userauth is OK
2025-12-25T00:49:53.592 [DEBUG] [Thread-2101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:49:53.592 [DEBUG] [Thread-2101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:49:53.593 [DEBUG] [Thread-2101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:49:53.593 [DEBUG] [Thread-2101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:49:53.606 [INFO] [Thread-2101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:49:53.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:49:54.238 [DEBUG] [Thread-2101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:49:54.238 [DEBUG] [Thread-2101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:49:54.239 [DEBUG] [Thread-2101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:49:54.280 [DEBUG] [Thread-2101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:49:54.280 [DEBUG] [Thread-2101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:49:54.282 [DEBUG] [Thread-2101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:49:54.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:49:54.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:49:54.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:49:54.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:49:54.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:49:54.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:49:54.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:49:54.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:49:54.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:49:54.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.950754 -999.00  +12.20  15.75     91  +10.90 1 1 1 3 1     0    0 1.08 -11.39 ZNESW 20.0 15.8 146.8 23.2 13.4 -14.2 13.3 -14.9 13.1 -14.0 13.4 -14.8
2025-12-25T00:49:54.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:49:54.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:49:54.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.950754
2025-12-25T00:49:54.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:49:54.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:49:54.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:49:54.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:49:54.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:49:54.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:49:25', tmtdew=1.13, humidity=92.89, cloud=0.0, wind=22.76, temperature=12.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:49:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:46:00')
2025-12-25T00:49:54.300 [DEBUG] [Thread-2101] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:49:54.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:49:54.385 [DEBUG] [Thread-2104] [transport.py] [_log()] starting thread (client mode): 0xb95b1e70
2025-12-25T00:49:54.385 [DEBUG] [Thread-2104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:49:54.399 [DEBUG] [Thread-2104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:49:54.399 [INFO] [Thread-2104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] client lang: <none>
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] server lang: <none>
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] kex follows: False
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] Compression: none
2025-12-25T00:49:54.407 [DEBUG] [Thread-2104] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:49:54.464 [DEBUG] [Thread-2104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:49:54.464 [DEBUG] [Thread-2104] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:49:54.464 [DEBUG] [Thread-2104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:49:54.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:49:54.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:49:54.521 [DEBUG] [Thread-2104] [transport.py] [_log()] userauth is OK
2025-12-25T00:49:54.521 [DEBUG] [Thread-2104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:49:54.521 [DEBUG] [Thread-2104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:49:54.521 [DEBUG] [Thread-2104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:49:54.521 [DEBUG] [Thread-2104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:49:54.538 [INFO] [Thread-2104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:49:54.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:49:54.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:49:55.360 [DEBUG] [Thread-2104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:49:55.361 [DEBUG] [Thread-2104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:49:55.408 [DEBUG] [Thread-2104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:49:55.408 [DEBUG] [Thread-2104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:49:55.416 [DEBUG] [Thread-2104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:49:55.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:49:55.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:49:55.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:49:55.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:49:55.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:49:55.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:49:55.448 [DEBUG] [Thread-2104] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:49:57.179 [DEBUG] [Thread-2106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:50:12.232 [DEBUG] [Thread-2107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:50:21.475 [DEBUG] [Thread-2108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:50:21.989 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:50:21.990 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:50:25.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:50:25.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:50:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:50:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 49, 57), 1.13, 92.89, 0.0, 23.66, 12.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:50:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:49:57
2025-12-25T00:50:26.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:50:26.444 [DEBUG] [Thread-2109] [transport.py] [_log()] starting thread (client mode): 0xb9579cc0
2025-12-25T00:50:26.444 [DEBUG] [Thread-2109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:50:26.464 [DEBUG] [Thread-2109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:50:26.465 [INFO] [Thread-2109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:50:26.467 [DEBUG] [Thread-2109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] client lang: <none>
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] server lang: <none>
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] kex follows: False
2025-12-25T00:50:26.468 [DEBUG] [Thread-2109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:50:26.469 [DEBUG] [Thread-2109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:50:26.469 [DEBUG] [Thread-2109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:50:26.469 [DEBUG] [Thread-2109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:50:26.469 [DEBUG] [Thread-2109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:50:26.469 [DEBUG] [Thread-2109] [transport.py] [_log()] Compression: none
2025-12-25T00:50:26.469 [DEBUG] [Thread-2109] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:50:26.479 [DEBUG] [Thread-2109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:50:26.480 [DEBUG] [Thread-2109] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:50:26.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:50:26.481 [DEBUG] [Thread-2109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:50:26.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:50:26.483 [DEBUG] [Thread-2109] [transport.py] [_log()] userauth is OK
2025-12-25T00:50:26.483 [DEBUG] [Thread-2109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:50:26.484 [DEBUG] [Thread-2109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:50:26.484 [DEBUG] [Thread-2109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:50:26.484 [DEBUG] [Thread-2109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:50:26.503 [INFO] [Thread-2109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:50:26.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:50:27.148 [DEBUG] [Thread-2109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:50:27.148 [DEBUG] [Thread-2109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:50:27.148 [DEBUG] [Thread-2109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:50:27.189 [DEBUG] [Thread-2109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:50:27.189 [DEBUG] [Thread-2109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:50:27.193 [DEBUG] [Thread-2109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:50:27.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:50:27.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:50:27.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:50:27.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:50:27.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:50:27.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:50:27.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:50:27.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:50:27.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:50:27.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.951101 -999.00  +12.20  17.98     91  +10.90 1 1 1 3 1     0    0 1.07 -11.66 ZNESW 19.0 18.0 150.2 23.2 13.3 -14.5 13.2 -14.7 13.1 -13.8 13.3 -15.1
2025-12-25T00:50:27.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:50:27.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:50:27.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.951101
2025-12-25T00:50:27.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:50:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:50:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:50:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:50:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:50:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:49:57', tmtdew=1.13, humidity=92.89, cloud=0.0, wind=23.66, temperature=12.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:49:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:49:00')
2025-12-25T00:50:27.222 [DEBUG] [Thread-2109] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:50:27.266 [DEBUG] [Thread-2112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:50:27.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:50:27.315 [DEBUG] [Thread-2113] [transport.py] [_log()] starting thread (client mode): 0xb95d58d0
2025-12-25T00:50:27.315 [DEBUG] [Thread-2113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:50:27.331 [DEBUG] [Thread-2113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:50:27.331 [INFO] [Thread-2113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:50:27.342 [DEBUG] [Thread-2113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:50:27.342 [DEBUG] [Thread-2113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:50:27.342 [DEBUG] [Thread-2113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:50:27.342 [DEBUG] [Thread-2113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] client lang: <none>
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] server lang: <none>
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] kex follows: False
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] Compression: none
2025-12-25T00:50:27.343 [DEBUG] [Thread-2113] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:50:27.398 [DEBUG] [Thread-2113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:50:27.399 [DEBUG] [Thread-2113] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:50:27.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:50:27.400 [DEBUG] [Thread-2113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:50:27.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:50:27.454 [DEBUG] [Thread-2113] [transport.py] [_log()] userauth is OK
2025-12-25T00:50:27.454 [DEBUG] [Thread-2113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:50:27.454 [DEBUG] [Thread-2113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:50:27.454 [DEBUG] [Thread-2113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:50:27.454 [DEBUG] [Thread-2113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:50:27.468 [INFO] [Thread-2113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:50:27.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:50:27.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:50:28.296 [DEBUG] [Thread-2113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:50:28.296 [DEBUG] [Thread-2113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:50:28.344 [DEBUG] [Thread-2113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:50:28.344 [DEBUG] [Thread-2113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:50:28.354 [DEBUG] [Thread-2113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:50:28.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:50:28.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')
2025-12-25T00:50:28.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:50:28.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:50:28.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:50:28.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:50:28.390 [DEBUG] [Thread-2113] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:50:42.302 [DEBUG] [Thread-2115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:50:57.339 [DEBUG] [Thread-2116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:50:58.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:50:58.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:50:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:50:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 50, 29), 1.12, 92.94, 0.0, 23.77, 12.23, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:50:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:50:29
2025-12-25T00:50:59.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:50:59.372 [DEBUG] [Thread-2117] [transport.py] [_log()] starting thread (client mode): 0xb6b00670
2025-12-25T00:50:59.372 [DEBUG] [Thread-2117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:50:59.392 [DEBUG] [Thread-2117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:50:59.393 [INFO] [Thread-2117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] client lang: <none>
2025-12-25T00:50:59.396 [DEBUG] [Thread-2117] [transport.py] [_log()] server lang: <none>
2025-12-25T00:50:59.397 [DEBUG] [Thread-2117] [transport.py] [_log()] kex follows: False
2025-12-25T00:50:59.397 [DEBUG] [Thread-2117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:50:59.397 [DEBUG] [Thread-2117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:50:59.397 [DEBUG] [Thread-2117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:50:59.397 [DEBUG] [Thread-2117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:50:59.397 [DEBUG] [Thread-2117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:50:59.397 [DEBUG] [Thread-2117] [transport.py] [_log()] Compression: none
2025-12-25T00:50:59.397 [DEBUG] [Thread-2117] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:50:59.414 [DEBUG] [Thread-2117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:50:59.415 [DEBUG] [Thread-2117] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:50:59.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:50:59.416 [DEBUG] [Thread-2117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:50:59.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:50:59.418 [DEBUG] [Thread-2117] [transport.py] [_log()] userauth is OK
2025-12-25T00:50:59.418 [DEBUG] [Thread-2117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:50:59.418 [DEBUG] [Thread-2117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:50:59.418 [DEBUG] [Thread-2117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:50:59.418 [DEBUG] [Thread-2117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:50:59.442 [INFO] [Thread-2117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:50:59.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:51:00.052 [DEBUG] [Thread-2117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:51:00.052 [DEBUG] [Thread-2117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:51:00.052 [DEBUG] [Thread-2117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:51:00.093 [DEBUG] [Thread-2117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:51:00.093 [DEBUG] [Thread-2117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:51:00.097 [DEBUG] [Thread-2117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:51:00.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:51:00.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:51:00.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:51:00.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:51:00.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:51:00.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:51:00.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:51:00.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:51:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:51:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.951796 -999.00  +12.20  15.34     91  +10.90 1 1 1 3 1     0    0 1.08 -11.62 ZNESW 18.2 15.3 151.8 25.0 13.4 -14.2 13.2 -13.3 13.0 -12.4 13.3 -13.8
2025-12-25T00:51:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:51:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:51:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.951796
2025-12-25T00:51:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:51:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:51:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:51:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:51:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:51:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:50:29', tmtdew=1.12, humidity=92.94, cloud=0.0, wind=23.77, temperature=12.23, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:50:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:49:00')
2025-12-25T00:51:00.123 [DEBUG] [Thread-2117] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:51:00.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:51:00.220 [DEBUG] [Thread-2120] [transport.py] [_log()] starting thread (client mode): 0xbbfcf9d0
2025-12-25T00:51:00.220 [DEBUG] [Thread-2120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:51:00.235 [DEBUG] [Thread-2120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:51:00.235 [INFO] [Thread-2120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:51:00.243 [DEBUG] [Thread-2120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:51:00.243 [DEBUG] [Thread-2120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:51:00.243 [DEBUG] [Thread-2120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] client lang: <none>
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] server lang: <none>
2025-12-25T00:51:00.244 [DEBUG] [Thread-2120] [transport.py] [_log()] kex follows: False
2025-12-25T00:51:00.245 [DEBUG] [Thread-2120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:51:00.245 [DEBUG] [Thread-2120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:51:00.245 [DEBUG] [Thread-2120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:51:00.245 [DEBUG] [Thread-2120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:51:00.245 [DEBUG] [Thread-2120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:51:00.246 [DEBUG] [Thread-2120] [transport.py] [_log()] Compression: none
2025-12-25T00:51:00.246 [DEBUG] [Thread-2120] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:51:00.302 [DEBUG] [Thread-2120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:51:00.303 [DEBUG] [Thread-2120] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:51:00.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:51:00.304 [DEBUG] [Thread-2120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:51:00.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:51:00.358 [DEBUG] [Thread-2120] [transport.py] [_log()] userauth is OK
2025-12-25T00:51:00.359 [DEBUG] [Thread-2120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:51:00.359 [DEBUG] [Thread-2120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:51:00.359 [DEBUG] [Thread-2120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:51:00.359 [DEBUG] [Thread-2120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:51:00.378 [INFO] [Thread-2120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:51:00.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:51:00.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:51:01.220 [DEBUG] [Thread-2120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:51:01.221 [DEBUG] [Thread-2120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:51:01.269 [DEBUG] [Thread-2120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:51:01.269 [DEBUG] [Thread-2120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:51:01.278 [DEBUG] [Thread-2120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:51:01.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:51:01.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:51:01.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:51:01.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:51:01.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:51:01.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:51:01.315 [DEBUG] [Thread-2120] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:51:12.370 [DEBUG] [Thread-2122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:51:21.550 [DEBUG] [Thread-2123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:51:22.197 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:51:22.199 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:51:27.410 [DEBUG] [Thread-2124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:51:31.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:51:31.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:51:31.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:51:32.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 51, 2), 1.11, 92.97, 0.0, 22.83, 12.28, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:51:32.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:51:02
2025-12-25T00:51:32.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:51:32.323 [DEBUG] [Thread-2125] [transport.py] [_log()] starting thread (client mode): 0xb9579db0
2025-12-25T00:51:32.323 [DEBUG] [Thread-2125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:51:32.338 [DEBUG] [Thread-2125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:51:32.338 [INFO] [Thread-2125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:51:32.341 [DEBUG] [Thread-2125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] client lang: <none>
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] server lang: <none>
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] kex follows: False
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] Compression: none
2025-12-25T00:51:32.342 [DEBUG] [Thread-2125] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:51:32.360 [DEBUG] [Thread-2125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:51:32.360 [DEBUG] [Thread-2125] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:51:32.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:51:32.361 [DEBUG] [Thread-2125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:51:32.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:51:32.363 [DEBUG] [Thread-2125] [transport.py] [_log()] userauth is OK
2025-12-25T00:51:32.363 [DEBUG] [Thread-2125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:51:32.364 [DEBUG] [Thread-2125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:51:32.364 [DEBUG] [Thread-2125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:51:32.364 [DEBUG] [Thread-2125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:51:32.388 [INFO] [Thread-2125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:51:32.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:51:33.042 [DEBUG] [Thread-2125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:51:33.042 [DEBUG] [Thread-2125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:51:33.043 [DEBUG] [Thread-2125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:51:33.083 [DEBUG] [Thread-2125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:51:33.083 [DEBUG] [Thread-2125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:51:33.086 [DEBUG] [Thread-2125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:51:33.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:51:33.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:51:33.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:51:33.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:51:33.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:51:33.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:51:33.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:51:33.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:51:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:51:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.952143 -999.00  +12.20  13.78     91  +10.90 1 1 1 3 1     0    0 1.11 -11.00 ZNESW 19.3 13.8 151.4 25.0 13.4 -14.8 13.2 -14.1 13.0 -13.2 13.3 -14.9
2025-12-25T00:51:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:51:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:51:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.952143
2025-12-25T00:51:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:51:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:51:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:51:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:51:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:51:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:51:02', tmtdew=1.11, humidity=92.97, cloud=0.0, wind=22.83, temperature=12.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:51:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:49:00')
2025-12-25T00:51:33.114 [DEBUG] [Thread-2125] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:51:33.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:51:33.208 [DEBUG] [Thread-2128] [transport.py] [_log()] starting thread (client mode): 0xb957b370
2025-12-25T00:51:33.208 [DEBUG] [Thread-2128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:51:33.222 [DEBUG] [Thread-2128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:51:33.222 [INFO] [Thread-2128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:51:33.229 [DEBUG] [Thread-2128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] client lang: <none>
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] server lang: <none>
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] kex follows: False
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:51:33.230 [DEBUG] [Thread-2128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:51:33.231 [DEBUG] [Thread-2128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:51:33.231 [DEBUG] [Thread-2128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:51:33.231 [DEBUG] [Thread-2128] [transport.py] [_log()] Compression: none
2025-12-25T00:51:33.231 [DEBUG] [Thread-2128] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:51:33.286 [DEBUG] [Thread-2128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:51:33.287 [DEBUG] [Thread-2128] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:51:33.287 [DEBUG] [Thread-2128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:51:33.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:51:33.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:51:33.343 [DEBUG] [Thread-2128] [transport.py] [_log()] userauth is OK
2025-12-25T00:51:33.343 [DEBUG] [Thread-2128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:51:33.343 [DEBUG] [Thread-2128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:51:33.343 [DEBUG] [Thread-2128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:51:33.343 [DEBUG] [Thread-2128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:51:33.362 [INFO] [Thread-2128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:51:33.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:51:33.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:51:34.236 [DEBUG] [Thread-2128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:51:34.236 [DEBUG] [Thread-2128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:51:34.284 [DEBUG] [Thread-2128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:51:34.284 [DEBUG] [Thread-2128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:51:34.294 [DEBUG] [Thread-2128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:51:34.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:51:34.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:51:34.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:51:34.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:51:34.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:51:34.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:51:34.332 [DEBUG] [Thread-2128] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:51:42.445 [DEBUG] [Thread-2130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:51:57.494 [DEBUG] [Thread-2131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:52:04.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:52:04.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:52:04.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:52:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 51, 34), 0.74, 95.33, 0.0, 26.26, 8.02, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:52:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:51:34
2025-12-25T00:52:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:52:05.324 [DEBUG] [Thread-2132] [transport.py] [_log()] starting thread (client mode): 0xb957b730
2025-12-25T00:52:05.324 [DEBUG] [Thread-2132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:52:05.344 [DEBUG] [Thread-2132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:52:05.344 [INFO] [Thread-2132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:52:05.347 [DEBUG] [Thread-2132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:52:05.347 [DEBUG] [Thread-2132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:52:05.347 [DEBUG] [Thread-2132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:52:05.347 [DEBUG] [Thread-2132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:52:05.347 [DEBUG] [Thread-2132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:52:05.347 [DEBUG] [Thread-2132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:52:05.347 [DEBUG] [Thread-2132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:52:05.347 [DEBUG] [Thread-2132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] client lang: <none>
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] server lang: <none>
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] kex follows: False
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] Compression: none
2025-12-25T00:52:05.348 [DEBUG] [Thread-2132] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:52:05.366 [DEBUG] [Thread-2132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:52:05.366 [DEBUG] [Thread-2132] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:52:05.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:52:05.367 [DEBUG] [Thread-2132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:52:05.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:52:05.370 [DEBUG] [Thread-2132] [transport.py] [_log()] userauth is OK
2025-12-25T00:52:05.370 [DEBUG] [Thread-2132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:52:05.370 [DEBUG] [Thread-2132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:52:05.370 [DEBUG] [Thread-2132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:52:05.370 [DEBUG] [Thread-2132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:52:05.391 [INFO] [Thread-2132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:52:05.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:52:06.044 [DEBUG] [Thread-2132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:52:06.044 [DEBUG] [Thread-2132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:52:06.044 [DEBUG] [Thread-2132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:52:06.085 [DEBUG] [Thread-2132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:52:06.085 [DEBUG] [Thread-2132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:52:06.088 [DEBUG] [Thread-2132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:52:06.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:52:06.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:52:06.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:52:06.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:52:06.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:52:06.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:52:06.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:52:06.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:52:06.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:52:06.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.952490 -999.00  +12.20  16.37     91  +10.90 1 1 1 3 1     0    0 1.08 -11.32 ZNESW 14.8 16.4 151.8 22.1 13.3 -11.5 13.2 -13.3 13.0 -10.6 13.3 -13.1
2025-12-25T00:52:06.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:52:06.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:52:06.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.952490
2025-12-25T00:52:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:52:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:52:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:52:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:52:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:52:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:51:34', tmtdew=0.74, humidity=95.33, cloud=0.0, wind=26.26, temperature=8.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:51:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:49:00')
2025-12-25T00:52:06.114 [DEBUG] [Thread-2132] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:52:06.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:52:06.207 [DEBUG] [Thread-2135] [transport.py] [_log()] starting thread (client mode): 0xb9579720
2025-12-25T00:52:06.207 [DEBUG] [Thread-2135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:52:06.221 [DEBUG] [Thread-2135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:52:06.221 [INFO] [Thread-2135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] client lang: <none>
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] server lang: <none>
2025-12-25T00:52:06.228 [DEBUG] [Thread-2135] [transport.py] [_log()] kex follows: False
2025-12-25T00:52:06.229 [DEBUG] [Thread-2135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:52:06.229 [DEBUG] [Thread-2135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:52:06.229 [DEBUG] [Thread-2135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:52:06.229 [DEBUG] [Thread-2135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:52:06.229 [DEBUG] [Thread-2135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:52:06.229 [DEBUG] [Thread-2135] [transport.py] [_log()] Compression: none
2025-12-25T00:52:06.229 [DEBUG] [Thread-2135] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:52:06.289 [DEBUG] [Thread-2135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:52:06.290 [DEBUG] [Thread-2135] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:52:06.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:52:06.291 [DEBUG] [Thread-2135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:52:06.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:52:06.347 [DEBUG] [Thread-2135] [transport.py] [_log()] userauth is OK
2025-12-25T00:52:06.347 [DEBUG] [Thread-2135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:52:06.348 [DEBUG] [Thread-2135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:52:06.348 [DEBUG] [Thread-2135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:52:06.348 [DEBUG] [Thread-2135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:52:06.367 [INFO] [Thread-2135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:52:06.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:52:06.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:52:07.185 [DEBUG] [Thread-2135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:52:07.185 [DEBUG] [Thread-2135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:52:07.232 [DEBUG] [Thread-2135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:52:07.233 [DEBUG] [Thread-2135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:52:07.241 [DEBUG] [Thread-2135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:52:07.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:52:07.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:52:07.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
2025-12-25T00:52:07.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:52:07.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:52:07.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:52:07.271 [DEBUG] [Thread-2135] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:52:12.529 [DEBUG] [Thread-2137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:52:21.614 [DEBUG] [Thread-2138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:52:22.402 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:52:22.404 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:52:27.576 [DEBUG] [Thread-2139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:52:37.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:52:37.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:52:37.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:52:37.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 52, 6), 0.74, 95.34, 0.0, 28.87, 8.05, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:52:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:52:06
2025-12-25T00:52:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:52:38.273 [DEBUG] [Thread-2140] [transport.py] [_log()] starting thread (client mode): 0xbbfcfe20
2025-12-25T00:52:38.273 [DEBUG] [Thread-2140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:52:38.290 [DEBUG] [Thread-2140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:52:38.290 [INFO] [Thread-2140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] client lang: <none>
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] server lang: <none>
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] kex follows: False
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:52:38.291 [DEBUG] [Thread-2140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:52:38.292 [DEBUG] [Thread-2140] [transport.py] [_log()] Compression: none
2025-12-25T00:52:38.292 [DEBUG] [Thread-2140] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:52:38.299 [DEBUG] [Thread-2140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:52:38.299 [DEBUG] [Thread-2140] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:52:38.300 [DEBUG] [Thread-2140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:52:38.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:52:38.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:52:38.301 [DEBUG] [Thread-2140] [transport.py] [_log()] userauth is OK
2025-12-25T00:52:38.301 [DEBUG] [Thread-2140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:52:38.301 [DEBUG] [Thread-2140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:52:38.301 [DEBUG] [Thread-2140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:52:38.301 [DEBUG] [Thread-2140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:52:38.319 [INFO] [Thread-2140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:52:38.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:52:38.899 [DEBUG] [Thread-2140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:52:38.900 [DEBUG] [Thread-2140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:52:38.900 [DEBUG] [Thread-2140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:52:38.940 [DEBUG] [Thread-2140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:52:38.940 [DEBUG] [Thread-2140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:52:38.943 [DEBUG] [Thread-2140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:52:38.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:52:38.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:52:38.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:52:38.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:52:38.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:52:38.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:52:38.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.952837 -999.00  +12.20  17.80     91  +10.90 1 2 1 3 1     0    0 1.03 -12.20 ZNesW 17.1 17.8 142.0 22.8 13.3 -12.5 13.2 -13.4 13.1 -11.1 13.4 -14.1
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.952837
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:52:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:52:06', tmtdew=0.74, humidity=95.34, cloud=0.0, wind=28.87, temperature=8.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:52:05.117', atlas_cloud=2, atlas_rain=1, zp_data=[1.97375, 2.5452500000000002, 2.6582500000000007, nan, 2.4625000000000004, 1.9352500000000008, 2.0045, 1.6622500000000002, 1.878499999999999, 2.9610000000000003, 3.0672499999999996, nan, 2.101, 2.0062499999999996, 1.6149999999999993, 1.6499999999999995, 2.5272499999999996, 2.8105, 2.626999999999999, 2.156249999999999, 2.0199999999999987, 1.8567499999999981, 1.7402500000000014, 1.56475, 2.6229999999999993, nan, 2.66275, 1.7610000000000001, 1.4580000000000002, 1.7920000000000007, 1.0420000000000007, 1.2470000000000008, nan], zp_timestamp='2025-12-24T22:49:00')
2025-12-25T00:52:38.958 [DEBUG] [Thread-2140] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:52:39.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:52:39.042 [DEBUG] [Thread-2143] [transport.py] [_log()] starting thread (client mode): 0xb95d7a60
2025-12-25T00:52:39.042 [DEBUG] [Thread-2143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:52:39.057 [DEBUG] [Thread-2143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:52:39.057 [INFO] [Thread-2143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:52:39.064 [DEBUG] [Thread-2143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] client lang: <none>
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] server lang: <none>
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] kex follows: False
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] Compression: none
2025-12-25T00:52:39.065 [DEBUG] [Thread-2143] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:52:39.122 [DEBUG] [Thread-2143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:52:39.122 [DEBUG] [Thread-2143] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:52:39.122 [DEBUG] [Thread-2143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:52:39.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:52:39.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:52:39.178 [DEBUG] [Thread-2143] [transport.py] [_log()] userauth is OK
2025-12-25T00:52:39.179 [DEBUG] [Thread-2143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:52:39.179 [DEBUG] [Thread-2143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:52:39.179 [DEBUG] [Thread-2143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:52:39.179 [DEBUG] [Thread-2143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:52:39.192 [INFO] [Thread-2143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:52:39.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:52:39.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:52:40.043 [DEBUG] [Thread-2143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:52:40.043 [DEBUG] [Thread-2143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:52:40.090 [DEBUG] [Thread-2143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:52:40.090 [DEBUG] [Thread-2143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:52:40.099 [DEBUG] [Thread-2143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:52:40.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:52:40.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')
2025-12-25T00:52:40.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
2025-12-25T00:52:40.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:52:40.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:52:40.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:52:40.130 [DEBUG] [Thread-2143] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:52:42.604 [DEBUG] [Thread-2145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:52:57.654 [DEBUG] [Thread-2146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:53:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:53:10.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:53:10.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:53:10.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 52, 38), 0.71, 95.34, 0.0, 30.3, 7.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:53:10.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:52:38
2025-12-25T00:53:11.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:53:11.189 [DEBUG] [Thread-2147] [transport.py] [_log()] starting thread (client mode): 0xb95b1cc0
2025-12-25T00:53:11.189 [DEBUG] [Thread-2147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:53:11.209 [DEBUG] [Thread-2147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:53:11.209 [INFO] [Thread-2147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] client lang: <none>
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] server lang: <none>
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] kex follows: False
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] Compression: none
2025-12-25T00:53:11.212 [DEBUG] [Thread-2147] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:53:11.226 [DEBUG] [Thread-2147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:53:11.227 [DEBUG] [Thread-2147] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:53:11.227 [DEBUG] [Thread-2147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:53:11.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:53:11.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:53:11.227 [DEBUG] [Thread-2147] [transport.py] [_log()] userauth is OK
2025-12-25T00:53:11.227 [DEBUG] [Thread-2147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:53:11.228 [DEBUG] [Thread-2147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:53:11.228 [DEBUG] [Thread-2147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:53:11.228 [DEBUG] [Thread-2147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:53:11.255 [INFO] [Thread-2147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:53:11.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:53:11.911 [DEBUG] [Thread-2147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:53:11.911 [DEBUG] [Thread-2147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:53:11.911 [DEBUG] [Thread-2147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:53:11.951 [DEBUG] [Thread-2147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:53:11.951 [DEBUG] [Thread-2147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:53:11.954 [DEBUG] [Thread-2147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:53:11.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:53:11.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:53:11.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:53:11.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:53:11.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:53:11.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:53:11.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.953185 -999.00  +12.10  28.12     91  +10.90 1 2 1 3 1     0    0 1.08 -10.82 ZNesW 20.3 28.1 138.2 32.4 13.3 -18.6 13.2 -18.2 13.0 -16.8 13.3 -18.3
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.953185
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:53:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:52:38', tmtdew=0.71, humidity=95.34, cloud=0.0, wind=30.3, temperature=7.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:52:35.184', atlas_cloud=2, atlas_rain=1, zp_data=[1.3207499999999994, 1.37725, 1.4452500000000006, 1.2719999999999985, 1.0404999999999998, 1.5302500000000006, 1.4969999999999999, 1.3392500000000007, 1.3089999999999993, 1.5140000000000002, 1.41925, 1.1210000000000013, 1.3119999999999994, 1.3212499999999991, 0.9919999999999991, 1.147499999999999, 1.4877500000000001, 2.1310000000000002, 1.5429999999999993, 1.1232499999999987, 0.8739999999999988, 1.098749999999999, 0.9487500000000004, 0.9627499999999998, 1.626999999999999, 1.3689999999999998, 1.07275, 0.9939999999999998, 0.8804999999999996, 0.9720000000000013, 0.8810000000000011, 1.1195000000000004, 1.8002499999999992], zp_timestamp='2025-12-24T22:52:00')
2025-12-25T00:53:11.973 [DEBUG] [Thread-2147] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:53:12.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:53:12.058 [DEBUG] [Thread-2150] [transport.py] [_log()] starting thread (client mode): 0xb95b2650
2025-12-25T00:53:12.058 [DEBUG] [Thread-2150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:53:12.072 [DEBUG] [Thread-2150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:53:12.072 [INFO] [Thread-2150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] client lang: <none>
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] server lang: <none>
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] kex follows: False
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] Compression: none
2025-12-25T00:53:12.080 [DEBUG] [Thread-2150] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:53:12.138 [DEBUG] [Thread-2150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:53:12.138 [DEBUG] [Thread-2150] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:53:12.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:53:12.138 [DEBUG] [Thread-2150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:53:12.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:53:12.195 [DEBUG] [Thread-2150] [transport.py] [_log()] userauth is OK
2025-12-25T00:53:12.195 [DEBUG] [Thread-2150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:53:12.195 [DEBUG] [Thread-2150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:53:12.195 [DEBUG] [Thread-2150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:53:12.195 [DEBUG] [Thread-2150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:53:12.211 [INFO] [Thread-2150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:53:12.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:53:12.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:53:12.686 [DEBUG] [Thread-2152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:53:13.035 [DEBUG] [Thread-2150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:53:13.035 [DEBUG] [Thread-2150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:53:13.083 [DEBUG] [Thread-2150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:53:13.083 [DEBUG] [Thread-2150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:53:13.092 [DEBUG] [Thread-2150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:53:13.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:53:13.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:53:13.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:53:13.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:53:13.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:53:13.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:53:13.123 [DEBUG] [Thread-2150] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:53:21.700 [DEBUG] [Thread-2153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:53:22.608 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:53:22.609 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:53:27.736 [DEBUG] [Thread-2154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:53:42.772 [DEBUG] [Thread-2155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:53:43.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:53:43.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:53:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:53:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 53, 10), 0.71, 95.33, 0.0, 28.62, 7.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:53:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:53:10
2025-12-25T00:53:44.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:53:44.198 [DEBUG] [Thread-2156] [transport.py] [_log()] starting thread (client mode): 0xbbfce350
2025-12-25T00:53:44.198 [DEBUG] [Thread-2156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:53:44.218 [DEBUG] [Thread-2156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:53:44.219 [INFO] [Thread-2156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] client lang: <none>
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] server lang: <none>
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] kex follows: False
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] Compression: none
2025-12-25T00:53:44.222 [DEBUG] [Thread-2156] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:53:44.238 [DEBUG] [Thread-2156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:53:44.238 [DEBUG] [Thread-2156] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:53:44.239 [DEBUG] [Thread-2156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:53:44.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:53:44.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:53:44.239 [DEBUG] [Thread-2156] [transport.py] [_log()] userauth is OK
2025-12-25T00:53:44.239 [DEBUG] [Thread-2156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:53:44.239 [DEBUG] [Thread-2156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:53:44.239 [DEBUG] [Thread-2156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:53:44.239 [DEBUG] [Thread-2156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:53:44.258 [INFO] [Thread-2156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:53:44.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:53:44.849 [DEBUG] [Thread-2156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:53:44.849 [DEBUG] [Thread-2156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:53:44.849 [DEBUG] [Thread-2156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:53:44.890 [DEBUG] [Thread-2156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:53:44.890 [DEBUG] [Thread-2156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:53:44.892 [DEBUG] [Thread-2156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:53:44.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:53:44.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:53:44.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:53:44.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:53:44.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:53:44.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:53:44.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:53:44.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:53:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:53:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.953532 -999.00  +12.10  18.45     91  +10.80 1 2 1 3 1     0    0 1.04 -11.25 ZneSW 24.5 18.4 160.2 30.5 13.3 -18.6 13.2 -15.4 13.0 -16.7 13.3 -15.8
2025-12-25T00:53:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:53:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:53:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.953532
2025-12-25T00:53:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:53:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:53:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:53:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:53:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:53:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:53:10', tmtdew=0.71, humidity=95.33, cloud=0.0, wind=28.62, temperature=7.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:53:05.165', atlas_cloud=2, atlas_rain=1, zp_data=[1.3207499999999994, 1.37725, 1.4452500000000006, 1.2719999999999985, 1.0404999999999998, 1.5302500000000006, 1.4969999999999999, 1.3392500000000007, 1.3089999999999993, 1.5140000000000002, 1.41925, 1.1210000000000013, 1.3119999999999994, 1.3212499999999991, 0.9919999999999991, 1.147499999999999, 1.4877500000000001, 2.1310000000000002, 1.5429999999999993, 1.1232499999999987, 0.8739999999999988, 1.098749999999999, 0.9487500000000004, 0.9627499999999998, 1.626999999999999, 1.3689999999999998, 1.07275, 0.9939999999999998, 0.8804999999999996, 0.9720000000000013, 0.8810000000000011, 1.1195000000000004, 1.8002499999999992], zp_timestamp='2025-12-24T22:52:00')
2025-12-25T00:53:44.911 [DEBUG] [Thread-2156] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:53:44.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:53:44.995 [DEBUG] [Thread-2159] [transport.py] [_log()] starting thread (client mode): 0xbbfcea70
2025-12-25T00:53:44.995 [DEBUG] [Thread-2159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:53:45.012 [DEBUG] [Thread-2159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:53:45.012 [INFO] [Thread-2159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:53:45.019 [DEBUG] [Thread-2159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] client lang: <none>
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] server lang: <none>
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] kex follows: False
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] Compression: none
2025-12-25T00:53:45.020 [DEBUG] [Thread-2159] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:53:45.078 [DEBUG] [Thread-2159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:53:45.078 [DEBUG] [Thread-2159] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:53:45.078 [DEBUG] [Thread-2159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:53:45.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:53:45.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:53:45.135 [DEBUG] [Thread-2159] [transport.py] [_log()] userauth is OK
2025-12-25T00:53:45.135 [DEBUG] [Thread-2159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:53:45.135 [DEBUG] [Thread-2159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:53:45.135 [DEBUG] [Thread-2159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:53:45.135 [DEBUG] [Thread-2159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:53:45.152 [INFO] [Thread-2159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:53:45.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:53:45.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:53:45.944 [DEBUG] [Thread-2159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:53:45.944 [DEBUG] [Thread-2159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:53:45.991 [DEBUG] [Thread-2159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:53:45.991 [DEBUG] [Thread-2159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:53:46.000 [DEBUG] [Thread-2159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:53:46.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:53:46.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:53:46.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:53:46.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:53:46.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:53:46.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:53:46.032 [DEBUG] [Thread-2159] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:53:57.808 [DEBUG] [Thread-2161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:54:12.862 [DEBUG] [Thread-2162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:54:16.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:54:16.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:54:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:54:16.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 53, 42), 0.71, 95.66, 0.0, 29.77, 7.94, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:54:16.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:53:42
2025-12-25T00:54:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:54:17.102 [DEBUG] [Thread-2163] [transport.py] [_log()] starting thread (client mode): 0xb9546530
2025-12-25T00:54:17.102 [DEBUG] [Thread-2163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:54:17.122 [DEBUG] [Thread-2163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:54:17.122 [INFO] [Thread-2163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] client lang: <none>
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] server lang: <none>
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] kex follows: False
2025-12-25T00:54:17.125 [DEBUG] [Thread-2163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:54:17.126 [DEBUG] [Thread-2163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:54:17.126 [DEBUG] [Thread-2163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:54:17.126 [DEBUG] [Thread-2163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:54:17.126 [DEBUG] [Thread-2163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:54:17.126 [DEBUG] [Thread-2163] [transport.py] [_log()] Compression: none
2025-12-25T00:54:17.126 [DEBUG] [Thread-2163] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:54:17.141 [DEBUG] [Thread-2163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:54:17.142 [DEBUG] [Thread-2163] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:54:17.142 [DEBUG] [Thread-2163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:54:17.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:54:17.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:54:17.143 [DEBUG] [Thread-2163] [transport.py] [_log()] userauth is OK
2025-12-25T00:54:17.143 [DEBUG] [Thread-2163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:54:17.143 [DEBUG] [Thread-2163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:54:17.143 [DEBUG] [Thread-2163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:54:17.143 [DEBUG] [Thread-2163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:54:17.155 [INFO] [Thread-2163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:54:17.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:54:17.806 [DEBUG] [Thread-2163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:54:17.807 [DEBUG] [Thread-2163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:54:17.807 [DEBUG] [Thread-2163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:54:17.848 [DEBUG] [Thread-2163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:54:17.848 [DEBUG] [Thread-2163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:54:17.852 [DEBUG] [Thread-2163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:54:17.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:54:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:54:17.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:54:17.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:54:17.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:54:17.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:54:17.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:54:17.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:54:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:54:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.954226 -999.00  +12.10  25.18     92  +10.80 1 1 1 3 1     0    0 1.05 -11.32 ZNESW 24.7 25.2 138.8 30.4 13.2 -11.8 13.1 -11.6 13.0 -10.7 13.3 -13.1
2025-12-25T00:54:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:54:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:54:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.954226
2025-12-25T00:54:17.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:54:17.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:54:17.882 [DEBUG] [Thread-2163] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:54:17.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:54:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:54:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:54:17.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:53:42', tmtdew=0.71, humidity=95.66, cloud=0.0, wind=29.77, temperature=7.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:54:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[1.3207499999999994, 1.37725, 1.4452500000000006, 1.2719999999999985, 1.0404999999999998, 1.5302500000000006, 1.4969999999999999, 1.3392500000000007, 1.3089999999999993, 1.5140000000000002, 1.41925, 1.1210000000000013, 1.3119999999999994, 1.3212499999999991, 0.9919999999999991, 1.147499999999999, 1.4877500000000001, 2.1310000000000002, 1.5429999999999993, 1.1232499999999987, 0.8739999999999988, 1.098749999999999, 0.9487500000000004, 0.9627499999999998, 1.626999999999999, 1.3689999999999998, 1.07275, 0.9939999999999998, 0.8804999999999996, 0.9720000000000013, 0.8810000000000011, 1.1195000000000004, 1.8002499999999992], zp_timestamp='2025-12-24T22:52:00')
2025-12-25T00:54:17.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:54:17.979 [DEBUG] [Thread-2166] [transport.py] [_log()] starting thread (client mode): 0xb957ab00
2025-12-25T00:54:17.979 [DEBUG] [Thread-2166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:54:17.994 [DEBUG] [Thread-2166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:54:17.994 [INFO] [Thread-2166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:54:18.005 [DEBUG] [Thread-2166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] client lang: <none>
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] server lang: <none>
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] kex follows: False
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:54:18.006 [DEBUG] [Thread-2166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:54:18.007 [DEBUG] [Thread-2166] [transport.py] [_log()] Compression: none
2025-12-25T00:54:18.007 [DEBUG] [Thread-2166] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:54:18.064 [DEBUG] [Thread-2166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:54:18.064 [DEBUG] [Thread-2166] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:54:18.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:54:18.065 [DEBUG] [Thread-2166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:54:18.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:54:18.124 [DEBUG] [Thread-2166] [transport.py] [_log()] userauth is OK
2025-12-25T00:54:18.124 [DEBUG] [Thread-2166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:54:18.124 [DEBUG] [Thread-2166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:54:18.124 [DEBUG] [Thread-2166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:54:18.124 [DEBUG] [Thread-2166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:54:18.145 [INFO] [Thread-2166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:54:18.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:54:18.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:54:18.962 [DEBUG] [Thread-2166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:54:18.962 [DEBUG] [Thread-2166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:54:19.010 [DEBUG] [Thread-2166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:54:19.010 [DEBUG] [Thread-2166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:54:19.020 [DEBUG] [Thread-2166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:54:19.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:54:19.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:54:19.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:54:19.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:54:19.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:54:19.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:54:19.056 [DEBUG] [Thread-2166] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:54:21.778 [DEBUG] [Thread-2168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:54:22.811 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:54:22.812 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:54:27.896 [DEBUG] [Thread-2169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:54:42.938 [DEBUG] [Thread-2170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:54:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:54:49.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:54:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:54:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 54, 14), 0.7, 95.71, 0.0, 27.76, 7.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:54:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:54:14
2025-12-25T00:54:49.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:54:50.087 [DEBUG] [Thread-2171] [transport.py] [_log()] starting thread (client mode): 0xb95b3e20
2025-12-25T00:54:50.087 [DEBUG] [Thread-2171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:54:50.107 [DEBUG] [Thread-2171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:54:50.107 [INFO] [Thread-2171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] client lang: <none>
2025-12-25T00:54:50.110 [DEBUG] [Thread-2171] [transport.py] [_log()] server lang: <none>
2025-12-25T00:54:50.111 [DEBUG] [Thread-2171] [transport.py] [_log()] kex follows: False
2025-12-25T00:54:50.111 [DEBUG] [Thread-2171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:54:50.111 [DEBUG] [Thread-2171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:54:50.111 [DEBUG] [Thread-2171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:54:50.111 [DEBUG] [Thread-2171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:54:50.111 [DEBUG] [Thread-2171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:54:50.111 [DEBUG] [Thread-2171] [transport.py] [_log()] Compression: none
2025-12-25T00:54:50.111 [DEBUG] [Thread-2171] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:54:50.129 [DEBUG] [Thread-2171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:54:50.129 [DEBUG] [Thread-2171] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:54:50.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:54:50.130 [DEBUG] [Thread-2171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:54:50.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:54:50.132 [DEBUG] [Thread-2171] [transport.py] [_log()] userauth is OK
2025-12-25T00:54:50.132 [DEBUG] [Thread-2171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:54:50.133 [DEBUG] [Thread-2171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:54:50.133 [DEBUG] [Thread-2171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:54:50.133 [DEBUG] [Thread-2171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:54:50.150 [INFO] [Thread-2171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:54:50.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:54:50.728 [DEBUG] [Thread-2171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:54:50.728 [DEBUG] [Thread-2171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:54:50.729 [DEBUG] [Thread-2171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:54:50.769 [DEBUG] [Thread-2171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:54:50.769 [DEBUG] [Thread-2171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:54:50.772 [DEBUG] [Thread-2171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:54:50.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:54:50.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:54:50.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:54:50.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:54:50.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:54:50.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:54:50.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:54:50.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:54:50.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:54:50.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.954573 -999.00  +12.10  24.27     92  +10.80 1 1 1 3 1     0    0 1.05 -11.11 ZNESW 21.3 24.3 151.2 30.2 13.2 -16.7 13.1 -15.8 12.9 -15.5 13.3 -16.4
2025-12-25T00:54:50.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:54:50.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:54:50.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.954573
2025-12-25T00:54:50.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:54:50.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:54:50.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:54:50.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:54:50.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:54:50.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:54:14', tmtdew=0.7, humidity=95.71, cloud=0.0, wind=27.76, temperature=7.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:54:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[1.3207499999999994, 1.37725, 1.4452500000000006, 1.2719999999999985, 1.0404999999999998, 1.5302500000000006, 1.4969999999999999, 1.3392500000000007, 1.3089999999999993, 1.5140000000000002, 1.41925, 1.1210000000000013, 1.3119999999999994, 1.3212499999999991, 0.9919999999999991, 1.147499999999999, 1.4877500000000001, 2.1310000000000002, 1.5429999999999993, 1.1232499999999987, 0.8739999999999988, 1.098749999999999, 0.9487500000000004, 0.9627499999999998, 1.626999999999999, 1.3689999999999998, 1.07275, 0.9939999999999998, 0.8804999999999996, 0.9720000000000013, 0.8810000000000011, 1.1195000000000004, 1.8002499999999992], zp_timestamp='2025-12-24T22:52:00')
2025-12-25T00:54:50.799 [DEBUG] [Thread-2171] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:54:50.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:54:50.893 [DEBUG] [Thread-2174] [transport.py] [_log()] starting thread (client mode): 0xb9579b70
2025-12-25T00:54:50.893 [DEBUG] [Thread-2174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:54:50.908 [DEBUG] [Thread-2174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:54:50.908 [INFO] [Thread-2174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:54:50.915 [DEBUG] [Thread-2174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] client lang: <none>
2025-12-25T00:54:50.916 [DEBUG] [Thread-2174] [transport.py] [_log()] server lang: <none>
2025-12-25T00:54:50.917 [DEBUG] [Thread-2174] [transport.py] [_log()] kex follows: False
2025-12-25T00:54:50.917 [DEBUG] [Thread-2174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:54:50.917 [DEBUG] [Thread-2174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:54:50.917 [DEBUG] [Thread-2174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:54:50.917 [DEBUG] [Thread-2174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:54:50.917 [DEBUG] [Thread-2174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:54:50.917 [DEBUG] [Thread-2174] [transport.py] [_log()] Compression: none
2025-12-25T00:54:50.917 [DEBUG] [Thread-2174] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:54:50.974 [DEBUG] [Thread-2174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:54:50.974 [DEBUG] [Thread-2174] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:54:50.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:54:50.975 [DEBUG] [Thread-2174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:54:50.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:54:51.032 [DEBUG] [Thread-2174] [transport.py] [_log()] userauth is OK
2025-12-25T00:54:51.033 [DEBUG] [Thread-2174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:54:51.033 [DEBUG] [Thread-2174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:54:51.033 [DEBUG] [Thread-2174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:54:51.033 [DEBUG] [Thread-2174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:54:51.051 [INFO] [Thread-2174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:54:51.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:54:51.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:54:51.876 [DEBUG] [Thread-2174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:54:51.876 [DEBUG] [Thread-2174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:54:51.924 [DEBUG] [Thread-2174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:54:51.924 [DEBUG] [Thread-2174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:54:51.935 [DEBUG] [Thread-2174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:54:51.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:54:51.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:54:51.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:54:51.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:54:51.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:54:51.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:54:51.973 [DEBUG] [Thread-2174] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:54:57.971 [DEBUG] [Thread-2176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:55:13.017 [DEBUG] [Thread-2177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:55:21.853 [DEBUG] [Thread-2178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:55:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:55:21.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:55:21.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:55:22.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 55, 19), 0.69, 95.74, 0.0, 29.22, 7.99, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:55:22.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:55:19
2025-12-25T00:55:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:55:22.967 [DEBUG] [Thread-2179] [transport.py] [_log()] starting thread (client mode): 0xb9545990
2025-12-25T00:55:22.967 [DEBUG] [Thread-2179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:55:22.982 [DEBUG] [Thread-2179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:55:22.983 [INFO] [Thread-2179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] client lang: <none>
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] server lang: <none>
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] kex follows: False
2025-12-25T00:55:22.986 [DEBUG] [Thread-2179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:55:22.987 [DEBUG] [Thread-2179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:55:22.987 [DEBUG] [Thread-2179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:55:22.987 [DEBUG] [Thread-2179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:55:22.987 [DEBUG] [Thread-2179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:55:22.987 [DEBUG] [Thread-2179] [transport.py] [_log()] Compression: none
2025-12-25T00:55:22.987 [DEBUG] [Thread-2179] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:55:23.004 [DEBUG] [Thread-2179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:55:23.005 [DEBUG] [Thread-2179] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:55:23.006 [DEBUG] [Thread-2179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:55:23.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:55:23.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:55:23.013 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:55:23.014 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:55:23.049 [DEBUG] [Thread-2179] [transport.py] [_log()] userauth is OK
2025-12-25T00:55:23.050 [DEBUG] [Thread-2179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:55:23.050 [DEBUG] [Thread-2179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:55:23.051 [DEBUG] [Thread-2179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:55:23.051 [DEBUG] [Thread-2179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:55:23.084 [INFO] [Thread-2179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:55:23.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:55:23.760 [DEBUG] [Thread-2179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:55:23.761 [DEBUG] [Thread-2179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:55:23.761 [DEBUG] [Thread-2179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:55:23.801 [DEBUG] [Thread-2179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:55:23.801 [DEBUG] [Thread-2179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:55:23.805 [DEBUG] [Thread-2179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:55:23.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:55:23.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:55:23.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:55:23.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:55:23.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:55:23.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:55:23.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:55:23.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:55:23.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:55:23.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.954920 -999.00  +12.10  19.63     92  +10.80 1 2 1 3 1     0    0 1.09 -10.06 zNe.W 24.3 19.6 141.0 27.7 13.2 -13.7 13.2 -12.8 13.0 -12.6 13.3 -13.7
2025-12-25T00:55:23.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:55:23.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:55:23.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.954920
2025-12-25T00:55:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:55:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:55:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:55:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:55:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:55:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:55:19', tmtdew=0.69, humidity=95.74, cloud=0.0, wind=29.22, temperature=7.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:55:05.088', atlas_cloud=2, atlas_rain=1, zp_data=[1.3207499999999994, 1.37725, 1.4452500000000006, 1.2719999999999985, 1.0404999999999998, 1.5302500000000006, 1.4969999999999999, 1.3392500000000007, 1.3089999999999993, 1.5140000000000002, 1.41925, 1.1210000000000013, 1.3119999999999994, 1.3212499999999991, 0.9919999999999991, 1.147499999999999, 1.4877500000000001, 2.1310000000000002, 1.5429999999999993, 1.1232499999999987, 0.8739999999999988, 1.098749999999999, 0.9487500000000004, 0.9627499999999998, 1.626999999999999, 1.3689999999999998, 1.07275, 0.9939999999999998, 0.8804999999999996, 0.9720000000000013, 0.8810000000000011, 1.1195000000000004, 1.8002499999999992], zp_timestamp='2025-12-24T22:52:00')
2025-12-25T00:55:23.832 [DEBUG] [Thread-2179] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:55:23.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:55:23.927 [DEBUG] [Thread-2182] [transport.py] [_log()] starting thread (client mode): 0xb9547490
2025-12-25T00:55:23.927 [DEBUG] [Thread-2182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:55:23.941 [DEBUG] [Thread-2182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:55:23.941 [INFO] [Thread-2182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:55:23.949 [DEBUG] [Thread-2182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:55:23.950 [DEBUG] [Thread-2182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:55:23.950 [DEBUG] [Thread-2182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:55:23.950 [DEBUG] [Thread-2182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:55:23.950 [DEBUG] [Thread-2182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:55:23.950 [DEBUG] [Thread-2182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:55:23.950 [DEBUG] [Thread-2182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] client lang: <none>
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] server lang: <none>
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] kex follows: False
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:55:23.951 [DEBUG] [Thread-2182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:55:23.952 [DEBUG] [Thread-2182] [transport.py] [_log()] Compression: none
2025-12-25T00:55:23.952 [DEBUG] [Thread-2182] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:55:24.008 [DEBUG] [Thread-2182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:55:24.008 [DEBUG] [Thread-2182] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:55:24.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:55:24.009 [DEBUG] [Thread-2182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:55:24.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:55:24.064 [DEBUG] [Thread-2182] [transport.py] [_log()] userauth is OK
2025-12-25T00:55:24.065 [DEBUG] [Thread-2182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:55:24.065 [DEBUG] [Thread-2182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:55:24.065 [DEBUG] [Thread-2182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:55:24.065 [DEBUG] [Thread-2182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:55:24.084 [INFO] [Thread-2182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:55:24.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:55:24.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:55:24.942 [DEBUG] [Thread-2182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:55:24.942 [DEBUG] [Thread-2182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:55:24.990 [DEBUG] [Thread-2182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:55:24.990 [DEBUG] [Thread-2182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:55:24.999 [DEBUG] [Thread-2182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:55:25.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:55:25.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')
2025-12-25T00:55:25.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:55:25.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:55:25.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:55:25.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:55:25.036 [DEBUG] [Thread-2182] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:55:28.050 [DEBUG] [Thread-2184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:55:43.101 [DEBUG] [Thread-2185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:55:55.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:55:55.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:55:55.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:55:55.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 55, 51), 0.66, 95.76, 0.0, 22.97, 7.99, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:55:55.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:55:51
2025-12-25T00:55:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:55:56.045 [DEBUG] [Thread-2186] [transport.py] [_log()] starting thread (client mode): 0xb9546680
2025-12-25T00:55:56.045 [DEBUG] [Thread-2186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:55:56.064 [DEBUG] [Thread-2186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:55:56.064 [INFO] [Thread-2186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:55:56.067 [DEBUG] [Thread-2186] [transport.py] [_log()] client lang: <none>
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] server lang: <none>
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] kex follows: False
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] Compression: none
2025-12-25T00:55:56.068 [DEBUG] [Thread-2186] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:55:56.084 [DEBUG] [Thread-2186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:55:56.085 [DEBUG] [Thread-2186] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:55:56.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:55:56.086 [DEBUG] [Thread-2186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:55:56.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:55:56.088 [DEBUG] [Thread-2186] [transport.py] [_log()] userauth is OK
2025-12-25T00:55:56.088 [DEBUG] [Thread-2186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:55:56.088 [DEBUG] [Thread-2186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:55:56.088 [DEBUG] [Thread-2186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:55:56.088 [DEBUG] [Thread-2186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:55:56.102 [INFO] [Thread-2186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:55:56.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:55:56.691 [DEBUG] [Thread-2186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:55:56.692 [DEBUG] [Thread-2186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:55:56.692 [DEBUG] [Thread-2186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:55:56.733 [DEBUG] [Thread-2186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:55:56.733 [DEBUG] [Thread-2186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:55:56.736 [DEBUG] [Thread-2186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:55:56.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:55:56.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:55:56.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:55:56.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:55:56.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:55:56.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:55:56.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:55:56.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:55:56.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:55:56.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.955268 -999.00  +12.10  22.36     92  +10.80 1 2 1 3 1     0    0 1.08 -10.51 ZNEsW 20.9 22.4 151.2 30.4 13.2 -16.2 13.1 -18.8 12.9 -15.1 13.2 -18.5
2025-12-25T00:55:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:55:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:55:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.955268
2025-12-25T00:55:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:55:56.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:55:56.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:55:56.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:55:56.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:55:56.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:55:51', tmtdew=0.66, humidity=95.76, cloud=0.0, wind=22.97, temperature=7.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:55:35.155', atlas_cloud=2, atlas_rain=1, zp_data=[1.3207499999999994, 1.37725, 1.4452500000000006, 1.2719999999999985, 1.0404999999999998, 1.5302500000000006, 1.4969999999999999, 1.3392500000000007, 1.3089999999999993, 1.5140000000000002, 1.41925, 1.1210000000000013, 1.3119999999999994, 1.3212499999999991, 0.9919999999999991, 1.147499999999999, 1.4877500000000001, 2.1310000000000002, 1.5429999999999993, 1.1232499999999987, 0.8739999999999988, 1.098749999999999, 0.9487500000000004, 0.9627499999999998, 1.626999999999999, 1.3689999999999998, 1.07275, 0.9939999999999998, 0.8804999999999996, 0.9720000000000013, 0.8810000000000011, 1.1195000000000004, 1.8002499999999992], zp_timestamp='2025-12-24T22:52:00')
2025-12-25T00:55:56.754 [DEBUG] [Thread-2186] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:55:56.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:55:56.848 [DEBUG] [Thread-2189] [transport.py] [_log()] starting thread (client mode): 0xb9546380
2025-12-25T00:55:56.848 [DEBUG] [Thread-2189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:55:56.862 [DEBUG] [Thread-2189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:55:56.862 [INFO] [Thread-2189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:55:56.870 [DEBUG] [Thread-2189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:55:56.870 [DEBUG] [Thread-2189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:55:56.870 [DEBUG] [Thread-2189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:55:56.870 [DEBUG] [Thread-2189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:55:56.870 [DEBUG] [Thread-2189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:55:56.870 [DEBUG] [Thread-2189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] client lang: <none>
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] server lang: <none>
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] kex follows: False
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] Compression: none
2025-12-25T00:55:56.871 [DEBUG] [Thread-2189] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:55:56.929 [DEBUG] [Thread-2189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:55:56.929 [DEBUG] [Thread-2189] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:55:56.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:55:56.930 [DEBUG] [Thread-2189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:55:56.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:55:56.987 [DEBUG] [Thread-2189] [transport.py] [_log()] userauth is OK
2025-12-25T00:55:56.987 [DEBUG] [Thread-2189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:55:56.988 [DEBUG] [Thread-2189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:55:56.988 [DEBUG] [Thread-2189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:55:56.988 [DEBUG] [Thread-2189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:55:57.007 [INFO] [Thread-2189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:55:57.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:55:57.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:55:57.810 [DEBUG] [Thread-2189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:55:57.810 [DEBUG] [Thread-2189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:55:57.858 [DEBUG] [Thread-2189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:55:57.858 [DEBUG] [Thread-2189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:55:57.867 [DEBUG] [Thread-2189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:55:57.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:55:57.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:55:57.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:55:57.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:55:57.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:55:57.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:55:57.904 [DEBUG] [Thread-2189] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:55:58.128 [DEBUG] [Thread-2191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:56:13.180 [DEBUG] [Thread-2192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:56:21.912 [DEBUG] [Thread-2193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:56:23.219 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:56:23.220 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:56:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:56:27.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:56:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:56:28.211 [DEBUG] [Thread-2194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:56:28.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 56, 23), 0.66, 95.77, 0.0, 25.62, 7.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:56:28.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:56:23
2025-12-25T00:56:28.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:56:28.909 [DEBUG] [Thread-2195] [transport.py] [_log()] starting thread (client mode): 0xb95440a0
2025-12-25T00:56:28.910 [DEBUG] [Thread-2195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:56:28.930 [DEBUG] [Thread-2195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:56:28.930 [INFO] [Thread-2195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:56:28.933 [DEBUG] [Thread-2195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:56:28.933 [DEBUG] [Thread-2195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:56:28.933 [DEBUG] [Thread-2195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:56:28.933 [DEBUG] [Thread-2195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:56:28.933 [DEBUG] [Thread-2195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] client lang: <none>
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] server lang: <none>
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] kex follows: False
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] Compression: none
2025-12-25T00:56:28.934 [DEBUG] [Thread-2195] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:56:28.952 [DEBUG] [Thread-2195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:56:28.952 [DEBUG] [Thread-2195] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:56:28.953 [DEBUG] [Thread-2195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:56:28.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:56:28.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:56:28.955 [DEBUG] [Thread-2195] [transport.py] [_log()] userauth is OK
2025-12-25T00:56:28.955 [DEBUG] [Thread-2195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:56:28.955 [DEBUG] [Thread-2195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:56:28.955 [DEBUG] [Thread-2195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:56:28.955 [DEBUG] [Thread-2195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:56:28.990 [INFO] [Thread-2195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:56:28.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:56:29.646 [DEBUG] [Thread-2195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:56:29.646 [DEBUG] [Thread-2195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:56:29.647 [DEBUG] [Thread-2195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:56:29.687 [DEBUG] [Thread-2195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:56:29.687 [DEBUG] [Thread-2195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:56:29.691 [DEBUG] [Thread-2195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:56:29.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:56:29.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:56:29.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:56:29.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:56:29.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:56:29.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:56:29.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:56:29.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:56:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:56:29.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.955268 -999.00  +12.10  22.36     92  +10.80 1 2 1 3 1     0    0 1.08 -10.51 ZNEsW 20.9 22.4 151.2 30.4 13.2 -16.2 13.1 -18.8 12.9 -15.1 13.2 -18.5
2025-12-25T00:56:29.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:56:29.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:56:29.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.955268
2025-12-25T00:56:29.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:56:29.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:56:29.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:56:29.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:56:29.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:56:29.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:56:23', tmtdew=0.66, humidity=95.77, cloud=0.0, wind=25.62, temperature=7.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:55:35.155', atlas_cloud=2, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:54:00')
2025-12-25T00:56:29.719 [DEBUG] [Thread-2195] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:56:29.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:56:29.813 [DEBUG] [Thread-2198] [transport.py] [_log()] starting thread (client mode): 0xb9544ca0
2025-12-25T00:56:29.813 [DEBUG] [Thread-2198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:56:29.827 [DEBUG] [Thread-2198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:56:29.827 [INFO] [Thread-2198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] client lang: <none>
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] server lang: <none>
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] kex follows: False
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:56:29.835 [DEBUG] [Thread-2198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:56:29.836 [DEBUG] [Thread-2198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:56:29.836 [DEBUG] [Thread-2198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:56:29.836 [DEBUG] [Thread-2198] [transport.py] [_log()] Compression: none
2025-12-25T00:56:29.836 [DEBUG] [Thread-2198] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:56:29.894 [DEBUG] [Thread-2198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:56:29.894 [DEBUG] [Thread-2198] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:56:29.895 [DEBUG] [Thread-2198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:56:29.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:56:29.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:56:29.953 [DEBUG] [Thread-2198] [transport.py] [_log()] userauth is OK
2025-12-25T00:56:29.953 [DEBUG] [Thread-2198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:56:29.953 [DEBUG] [Thread-2198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:56:29.953 [DEBUG] [Thread-2198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:56:29.954 [DEBUG] [Thread-2198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:56:29.974 [INFO] [Thread-2198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:56:29.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:56:29.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:56:30.791 [DEBUG] [Thread-2198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:56:30.792 [DEBUG] [Thread-2198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:56:30.840 [DEBUG] [Thread-2198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:56:30.840 [DEBUG] [Thread-2198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:56:30.850 [DEBUG] [Thread-2198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:56:30.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:56:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:56:30.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:56:30.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:56:30.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:56:30.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:56:30.886 [DEBUG] [Thread-2198] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:56:43.246 [DEBUG] [Thread-2200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:56:58.296 [DEBUG] [Thread-2201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:57:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:57:00.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:57:00.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
2025-12-25T00:57:01.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 56, 55), 0.65, 95.78, 0.0, 25.9, 7.95, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:57:01.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:56:55
2025-12-25T00:57:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:57:01.906 [DEBUG] [Thread-2202] [transport.py] [_log()] starting thread (client mode): 0xbbfcfac0
2025-12-25T00:57:01.906 [DEBUG] [Thread-2202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:57:01.926 [DEBUG] [Thread-2202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:57:01.926 [INFO] [Thread-2202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] client lang: <none>
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] server lang: <none>
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] kex follows: False
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] Compression: none
2025-12-25T00:57:01.929 [DEBUG] [Thread-2202] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:57:01.943 [DEBUG] [Thread-2202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:57:01.943 [DEBUG] [Thread-2202] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:57:01.943 [DEBUG] [Thread-2202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:57:01.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:57:01.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:57:01.944 [DEBUG] [Thread-2202] [transport.py] [_log()] userauth is OK
2025-12-25T00:57:01.944 [DEBUG] [Thread-2202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:57:01.944 [DEBUG] [Thread-2202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:57:01.944 [DEBUG] [Thread-2202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:57:01.944 [DEBUG] [Thread-2202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:57:01.952 [INFO] [Thread-2202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:57:01.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:57:02.757 [DEBUG] [Thread-2202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:57:02.757 [DEBUG] [Thread-2202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:57:02.757 [DEBUG] [Thread-2202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:57:02.797 [DEBUG] [Thread-2202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:57:02.797 [DEBUG] [Thread-2202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:57:02.799 [DEBUG] [Thread-2202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:57:02.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:57:02.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:57:02.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:57:02.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:57:02.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:57:02.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:57:02.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.955615 -999.00  +12.10  24.57     92  +10.80 1 2 1 3 1     0    0 1.08 -10.49 ZNEsW 21.5 24.6 147.2 28.4 13.2 -18.7 13.1 -18.1 13.0 -17.0 13.2 -17.7
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.955615
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:57:02.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:56:55', tmtdew=0.65, humidity=95.78, cloud=0.0, wind=25.9, temperature=7.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:56:05.136', atlas_cloud=2, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:54:00')
2025-12-25T00:57:02.817 [DEBUG] [Thread-2202] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:57:02.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:57:02.901 [DEBUG] [Thread-2205] [transport.py] [_log()] starting thread (client mode): 0xb9559f90
2025-12-25T00:57:02.901 [DEBUG] [Thread-2205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:57:02.915 [DEBUG] [Thread-2205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:57:02.915 [INFO] [Thread-2205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] client lang: <none>
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] server lang: <none>
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] kex follows: False
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] Compression: none
2025-12-25T00:57:02.923 [DEBUG] [Thread-2205] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:57:02.979 [DEBUG] [Thread-2205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:57:02.979 [DEBUG] [Thread-2205] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:57:02.979 [DEBUG] [Thread-2205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:57:02.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:57:02.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:57:03.037 [DEBUG] [Thread-2205] [transport.py] [_log()] userauth is OK
2025-12-25T00:57:03.037 [DEBUG] [Thread-2205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:57:03.037 [DEBUG] [Thread-2205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:57:03.037 [DEBUG] [Thread-2205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:57:03.037 [DEBUG] [Thread-2205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:57:03.050 [INFO] [Thread-2205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:57:03.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:57:03.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:57:03.871 [DEBUG] [Thread-2205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:57:03.871 [DEBUG] [Thread-2205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:57:03.920 [DEBUG] [Thread-2205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:57:03.920 [DEBUG] [Thread-2205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:57:03.928 [DEBUG] [Thread-2205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:57:03.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:57:03.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:57:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:57:03.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:57:03.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:57:03.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:57:03.959 [DEBUG] [Thread-2205] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:57:13.332 [DEBUG] [Thread-2207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:57:21.972 [DEBUG] [Thread-2208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:57:23.424 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:57:23.426 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:57:28.383 [DEBUG] [Thread-2209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:57:33.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:57:33.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:57:33.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:57:34.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 57, 27), 0.65, 95.79, 0.0, 29.24, 7.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:57:34.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:57:27
2025-12-25T00:57:34.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:57:34.951 [DEBUG] [Thread-2210] [transport.py] [_log()] starting thread (client mode): 0xb955b790
2025-12-25T00:57:34.951 [DEBUG] [Thread-2210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:57:34.971 [DEBUG] [Thread-2210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:57:34.971 [INFO] [Thread-2210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:57:34.974 [DEBUG] [Thread-2210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:57:34.974 [DEBUG] [Thread-2210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:57:34.974 [DEBUG] [Thread-2210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:57:34.974 [DEBUG] [Thread-2210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] client lang: <none>
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] server lang: <none>
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] kex follows: False
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] Compression: none
2025-12-25T00:57:34.975 [DEBUG] [Thread-2210] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:57:34.992 [DEBUG] [Thread-2210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:57:34.993 [DEBUG] [Thread-2210] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:57:34.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:57:34.994 [DEBUG] [Thread-2210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:57:34.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:57:35.037 [DEBUG] [Thread-2210] [transport.py] [_log()] userauth is OK
2025-12-25T00:57:35.038 [DEBUG] [Thread-2210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:57:35.038 [DEBUG] [Thread-2210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:57:35.038 [DEBUG] [Thread-2210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:57:35.038 [DEBUG] [Thread-2210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:57:35.069 [INFO] [Thread-2210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:57:35.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:57:35.701 [DEBUG] [Thread-2210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:57:35.702 [DEBUG] [Thread-2210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:57:35.702 [DEBUG] [Thread-2210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:57:35.742 [DEBUG] [Thread-2210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:57:35.743 [DEBUG] [Thread-2210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:57:35.745 [DEBUG] [Thread-2210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:57:35.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:57:35.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:57:35.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:57:35.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:57:35.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:57:35.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:57:35.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:57:35.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:57:35.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:57:35.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.955962 -999.00  +12.10  15.03     92  +10.80 1 2 1 3 1     0    0 1.04 -11.32 ZNEsW 15.5 15.0 158.2 24.5 13.2 -12.5 13.1 -11.5 12.9 -11.5 13.2 -11.7
2025-12-25T00:57:35.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:57:35.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:57:35.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.955962
2025-12-25T00:57:35.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:57:35.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:57:35.765 [DEBUG] [Thread-2210] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:57:35.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:57:35.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:57:35.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:57:35.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:57:27', tmtdew=0.65, humidity=95.79, cloud=0.0, wind=29.24, temperature=7.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:56:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:54:00')
2025-12-25T00:57:35.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:57:35.862 [DEBUG] [Thread-2213] [transport.py] [_log()] starting thread (client mode): 0xb9559180
2025-12-25T00:57:35.862 [DEBUG] [Thread-2213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:57:35.876 [DEBUG] [Thread-2213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:57:35.876 [INFO] [Thread-2213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:57:35.884 [DEBUG] [Thread-2213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:57:35.884 [DEBUG] [Thread-2213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:57:35.884 [DEBUG] [Thread-2213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] client lang: <none>
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] server lang: <none>
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] kex follows: False
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:57:35.885 [DEBUG] [Thread-2213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:57:35.886 [DEBUG] [Thread-2213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:57:35.886 [DEBUG] [Thread-2213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:57:35.886 [DEBUG] [Thread-2213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:57:35.886 [DEBUG] [Thread-2213] [transport.py] [_log()] Compression: none
2025-12-25T00:57:35.886 [DEBUG] [Thread-2213] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:57:35.942 [DEBUG] [Thread-2213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:57:35.943 [DEBUG] [Thread-2213] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:57:35.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:57:35.944 [DEBUG] [Thread-2213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:57:35.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:57:35.998 [DEBUG] [Thread-2213] [transport.py] [_log()] userauth is OK
2025-12-25T00:57:35.998 [DEBUG] [Thread-2213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:57:35.998 [DEBUG] [Thread-2213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:57:35.998 [DEBUG] [Thread-2213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:57:35.998 [DEBUG] [Thread-2213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:57:36.020 [INFO] [Thread-2213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:57:36.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:57:36.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:57:36.834 [DEBUG] [Thread-2213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:57:36.834 [DEBUG] [Thread-2213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:57:36.882 [DEBUG] [Thread-2213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:57:36.882 [DEBUG] [Thread-2213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:57:36.891 [DEBUG] [Thread-2213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:57:36.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:57:36.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:57:36.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:57:36.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:57:36.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:57:36.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:57:36.928 [DEBUG] [Thread-2213] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:57:43.412 [DEBUG] [Thread-2215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:57:58.451 [DEBUG] [Thread-2216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:58:06.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:58:06.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:58:06.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
2025-12-25T00:58:07.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 57, 59), 0.61, 95.81, 0.0, 26.5, 7.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:58:07.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:57:59
2025-12-25T00:58:07.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:58:07.922 [DEBUG] [Thread-2217] [transport.py] [_log()] starting thread (client mode): 0xb955bdc0
2025-12-25T00:58:07.922 [DEBUG] [Thread-2217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:58:07.943 [DEBUG] [Thread-2217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:58:07.944 [INFO] [Thread-2217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:58:07.944 [DEBUG] [Thread-2217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] client lang: <none>
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] server lang: <none>
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] kex follows: False
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] Compression: none
2025-12-25T00:58:07.945 [DEBUG] [Thread-2217] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:58:07.965 [DEBUG] [Thread-2217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:58:07.965 [DEBUG] [Thread-2217] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:58:07.966 [DEBUG] [Thread-2217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:58:07.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:58:07.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:58:07.968 [DEBUG] [Thread-2217] [transport.py] [_log()] userauth is OK
2025-12-25T00:58:07.969 [DEBUG] [Thread-2217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:58:07.969 [DEBUG] [Thread-2217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:58:07.969 [DEBUG] [Thread-2217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:58:07.969 [DEBUG] [Thread-2217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:58:07.984 [INFO] [Thread-2217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:58:07.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:58:08.828 [DEBUG] [Thread-2217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:58:08.828 [DEBUG] [Thread-2217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:58:08.829 [DEBUG] [Thread-2217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:58:08.869 [DEBUG] [Thread-2217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:58:08.869 [DEBUG] [Thread-2217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:58:08.873 [DEBUG] [Thread-2217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:58:08.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:58:08.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:58:08.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:58:08.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:58:08.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:58:08.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:58:08.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:58:08.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:58:08.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:58:08.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.956657 -999.00  +12.00  17.34     92  +10.80 1 2 1 3 1     0    0 1.07 -10.17 ZN.SW 19.2 17.3 146.5 28.0 13.2 -14.3 13.1 -12.1 12.9 -13.6 13.2 -12.7
2025-12-25T00:58:08.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:58:08.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:58:08.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.956657
2025-12-25T00:58:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:58:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:58:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:58:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:58:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:58:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:57:59', tmtdew=0.61, humidity=95.81, cloud=0.0, wind=26.5, temperature=7.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:57:35.165', atlas_cloud=2, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:54:00')
2025-12-25T00:58:08.899 [DEBUG] [Thread-2217] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:58:08.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:58:08.990 [DEBUG] [Thread-2220] [transport.py] [_log()] starting thread (client mode): 0xb955ac50
2025-12-25T00:58:08.990 [DEBUG] [Thread-2220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:58:09.004 [DEBUG] [Thread-2220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:58:09.005 [INFO] [Thread-2220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:58:09.014 [DEBUG] [Thread-2220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:58:09.014 [DEBUG] [Thread-2220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:58:09.014 [DEBUG] [Thread-2220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] client lang: <none>
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] server lang: <none>
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] kex follows: False
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] Compression: none
2025-12-25T00:58:09.015 [DEBUG] [Thread-2220] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:58:09.071 [DEBUG] [Thread-2220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:58:09.072 [DEBUG] [Thread-2220] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:58:09.072 [DEBUG] [Thread-2220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:58:09.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:58:09.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:58:09.133 [DEBUG] [Thread-2220] [transport.py] [_log()] userauth is OK
2025-12-25T00:58:09.133 [DEBUG] [Thread-2220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:58:09.134 [DEBUG] [Thread-2220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:58:09.134 [DEBUG] [Thread-2220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:58:09.134 [DEBUG] [Thread-2220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:58:09.154 [INFO] [Thread-2220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:58:09.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:58:09.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:58:10.010 [DEBUG] [Thread-2220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:58:10.010 [DEBUG] [Thread-2220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:58:10.058 [DEBUG] [Thread-2220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:58:10.058 [DEBUG] [Thread-2220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:58:10.067 [DEBUG] [Thread-2220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:58:10.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:58:10.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:58:10.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:58:10.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:58:10.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:58:10.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:58:10.112 [DEBUG] [Thread-2220] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:58:13.487 [DEBUG] [Thread-2222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:58:22.025 [DEBUG] [Thread-2223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:58:23.627 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:58:23.628 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:58:28.543 [DEBUG] [Thread-2224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:58:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:58:40.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:58:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:58:40.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 58, 31), 0.61, 95.82, 0.0, 27.42, 7.89, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:58:40.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:58:31
2025-12-25T00:58:40.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:58:41.097 [DEBUG] [Thread-2225] [transport.py] [_log()] starting thread (client mode): 0xb95582b0
2025-12-25T00:58:41.097 [DEBUG] [Thread-2225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:58:41.117 [DEBUG] [Thread-2225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:58:41.117 [INFO] [Thread-2225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] client lang: <none>
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] server lang: <none>
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] kex follows: False
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] Compression: none
2025-12-25T00:58:41.121 [DEBUG] [Thread-2225] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:58:41.135 [DEBUG] [Thread-2225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:58:41.135 [DEBUG] [Thread-2225] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:58:41.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:58:41.136 [DEBUG] [Thread-2225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:58:41.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:58:41.139 [DEBUG] [Thread-2225] [transport.py] [_log()] userauth is OK
2025-12-25T00:58:41.139 [DEBUG] [Thread-2225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:58:41.139 [DEBUG] [Thread-2225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:58:41.139 [DEBUG] [Thread-2225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:58:41.139 [DEBUG] [Thread-2225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:58:41.163 [INFO] [Thread-2225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:58:41.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:58:41.828 [DEBUG] [Thread-2225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:58:41.828 [DEBUG] [Thread-2225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:58:41.829 [DEBUG] [Thread-2225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:58:41.869 [DEBUG] [Thread-2225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:58:41.869 [DEBUG] [Thread-2225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:58:41.873 [DEBUG] [Thread-2225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:58:41.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:58:41.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:58:41.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:58:41.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:58:41.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:58:41.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:58:41.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:58:41.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:58:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:58:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.957004 -999.00  +12.00  25.33     92  +10.80 1 2 1 3 1     0    0 1.07 -10.89 ZN.SW 19.4 25.3 155.2 29.7 13.2 -15.7 13.1 -17.8 12.9 -15.1 13.2 -18.1
2025-12-25T00:58:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:58:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:58:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.957004
2025-12-25T00:58:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:58:41.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:58:41.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:58:41.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:58:41.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T00:58:41.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:58:31', tmtdew=0.61, humidity=95.82, cloud=0.0, wind=27.42, temperature=7.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:58:05.146', atlas_cloud=2, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:54:00')
2025-12-25T00:58:41.899 [DEBUG] [Thread-2225] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:58:41.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:58:41.991 [DEBUG] [Thread-2228] [transport.py] [_log()] starting thread (client mode): 0xb9558670
2025-12-25T00:58:41.992 [DEBUG] [Thread-2228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:58:42.007 [DEBUG] [Thread-2228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:58:42.007 [INFO] [Thread-2228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:58:42.019 [DEBUG] [Thread-2228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:58:42.019 [DEBUG] [Thread-2228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:58:42.019 [DEBUG] [Thread-2228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:58:42.019 [DEBUG] [Thread-2228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:58:42.019 [DEBUG] [Thread-2228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:58:42.019 [DEBUG] [Thread-2228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] client lang: <none>
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] server lang: <none>
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] kex follows: False
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] Compression: none
2025-12-25T00:58:42.020 [DEBUG] [Thread-2228] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:58:42.074 [DEBUG] [Thread-2228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:58:42.075 [DEBUG] [Thread-2228] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:58:42.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:58:42.075 [DEBUG] [Thread-2228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:58:42.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:58:42.131 [DEBUG] [Thread-2228] [transport.py] [_log()] userauth is OK
2025-12-25T00:58:42.131 [DEBUG] [Thread-2228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:58:42.131 [DEBUG] [Thread-2228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:58:42.131 [DEBUG] [Thread-2228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:58:42.131 [DEBUG] [Thread-2228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:58:42.150 [INFO] [Thread-2228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:58:42.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:58:42.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:58:42.930 [DEBUG] [Thread-2228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:58:42.930 [DEBUG] [Thread-2228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:58:42.978 [DEBUG] [Thread-2228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:58:42.978 [DEBUG] [Thread-2228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:58:42.987 [DEBUG] [Thread-2228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:58:42.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:58:42.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')
2025-12-25T00:58:43.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') -> 00000000
2025-12-25T00:58:43.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:58:43.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:58:43.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:58:43.023 [DEBUG] [Thread-2228] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:58:43.580 [DEBUG] [Thread-2230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:58:58.633 [DEBUG] [Thread-2231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:59:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:59:13.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:59: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
2025-12-25T00:59:13.660 [DEBUG] [Thread-2232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:59:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 59, 3), 0.61, 95.82, 0.0, 27.95, 7.89, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:59:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:59:03
2025-12-25T00:59:13.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:59:14.035 [DEBUG] [Thread-2233] [transport.py] [_log()] starting thread (client mode): 0xbbfcd2d0
2025-12-25T00:59:14.035 [DEBUG] [Thread-2233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:59:14.054 [DEBUG] [Thread-2233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:59:14.054 [INFO] [Thread-2233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:59:14.057 [DEBUG] [Thread-2233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:59:14.057 [DEBUG] [Thread-2233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:59:14.057 [DEBUG] [Thread-2233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:59:14.057 [DEBUG] [Thread-2233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:59:14.057 [DEBUG] [Thread-2233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] client lang: <none>
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] server lang: <none>
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] kex follows: False
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] Compression: none
2025-12-25T00:59:14.058 [DEBUG] [Thread-2233] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:59:14.075 [DEBUG] [Thread-2233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:59:14.075 [DEBUG] [Thread-2233] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:59:14.076 [DEBUG] [Thread-2233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:59:14.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:59:14.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:59:14.077 [DEBUG] [Thread-2233] [transport.py] [_log()] userauth is OK
2025-12-25T00:59:14.077 [DEBUG] [Thread-2233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:59:14.078 [DEBUG] [Thread-2233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:59:14.078 [DEBUG] [Thread-2233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:59:14.078 [DEBUG] [Thread-2233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:59:14.097 [INFO] [Thread-2233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:59:14.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:59:14.888 [DEBUG] [Thread-2233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:59:14.888 [DEBUG] [Thread-2233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:59:14.888 [DEBUG] [Thread-2233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:59:14.929 [DEBUG] [Thread-2233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:59:14.929 [DEBUG] [Thread-2233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:59:14.930 [DEBUG] [Thread-2233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:59:14.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:59:14.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:59:14.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:59:14.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:59:14.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:59:14.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:59:14.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:59:14.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:59:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:59:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.957351 -999.00  +12.00  23.15     92  +10.80 1 1 1 3 1     0    0 1.06 -10.74 ZNESW 24.4 23.1 148.2 28.9 13.2 -19.5 13.0 -18.9 12.8 -17.7 13.2 -18.6
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.957351
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:59:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:59:03', tmtdew=0.61, humidity=95.82, cloud=0.0, wind=27.95, temperature=7.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:58:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:58:00')
2025-12-25T00:59:14.949 [DEBUG] [Thread-2233] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:59:15.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:59:15.033 [DEBUG] [Thread-2236] [transport.py] [_log()] starting thread (client mode): 0xb955bdc0
2025-12-25T00:59:15.033 [DEBUG] [Thread-2236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:59:15.048 [DEBUG] [Thread-2236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:59:15.048 [INFO] [Thread-2236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] client lang: <none>
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] server lang: <none>
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] kex follows: False
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] Compression: none
2025-12-25T00:59:15.056 [DEBUG] [Thread-2236] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:59:15.116 [DEBUG] [Thread-2236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:59:15.116 [DEBUG] [Thread-2236] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:59:15.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:59:15.117 [DEBUG] [Thread-2236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:59:15.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:59:15.172 [DEBUG] [Thread-2236] [transport.py] [_log()] userauth is OK
2025-12-25T00:59:15.173 [DEBUG] [Thread-2236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:59:15.173 [DEBUG] [Thread-2236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:59:15.173 [DEBUG] [Thread-2236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:59:15.173 [DEBUG] [Thread-2236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:59:15.198 [INFO] [Thread-2236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:59:15.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:59:15.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:59:16.001 [DEBUG] [Thread-2236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:59:16.001 [DEBUG] [Thread-2236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:59:16.050 [DEBUG] [Thread-2236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:59:16.050 [DEBUG] [Thread-2236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:59:16.059 [DEBUG] [Thread-2236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:59:16.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:59:16.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:59:16.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:59:16.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:59:16.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:59:16.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:59:16.096 [DEBUG] [Thread-2236] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:59:22.093 [DEBUG] [Thread-2238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:59:23.830 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:59:23.832 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:59:28.692 [DEBUG] [Thread-2239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:59:43.739 [DEBUG] [Thread-2240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T00:59:46.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T00:59:46.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T00:59:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T00:59:46.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 0, 59, 35), 0.6, 95.9, 0.0, 29.33, 7.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T00:59:46.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 00:59:35
2025-12-25T00:59:46.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T00:59:47.056 [DEBUG] [Thread-2241] [transport.py] [_log()] starting thread (client mode): 0xb955b2e0
2025-12-25T00:59:47.056 [DEBUG] [Thread-2241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:59:47.076 [DEBUG] [Thread-2241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T00:59:47.076 [INFO] [Thread-2241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T00:59:47.079 [DEBUG] [Thread-2241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] client lang: <none>
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] server lang: <none>
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] kex follows: False
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] Compression: none
2025-12-25T00:59:47.080 [DEBUG] [Thread-2241] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:59:47.097 [DEBUG] [Thread-2241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:59:47.098 [DEBUG] [Thread-2241] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:59:47.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T00:59:47.099 [DEBUG] [Thread-2241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T00:59:47.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:59:47.101 [DEBUG] [Thread-2241] [transport.py] [_log()] userauth is OK
2025-12-25T00:59:47.101 [DEBUG] [Thread-2241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:59:47.101 [DEBUG] [Thread-2241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:59:47.101 [DEBUG] [Thread-2241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T00:59:47.101 [DEBUG] [Thread-2241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:59:47.120 [INFO] [Thread-2241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:59:47.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:59:47.753 [DEBUG] [Thread-2241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:59:47.753 [DEBUG] [Thread-2241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:59:47.753 [DEBUG] [Thread-2241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T00:59:47.795 [DEBUG] [Thread-2241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:59:47.795 [DEBUG] [Thread-2241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:59:47.798 [DEBUG] [Thread-2241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:59:47.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:59:47.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T00:59:47.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T00:59:47.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T00:59:47.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:59:47.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T00:59:47.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:59:47.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:59:47.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T00:59:47.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.957698 -999.00  +12.00  18.10     92  +10.80 1 1 1 3 1     0    0 1.03 -10.79 ZNESW 22.3 18.1 155.0 31.2 13.2 -19.2 13.0 -18.0 12.8 -17.4 13.1 -17.3
2025-12-25T00:59:47.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T00:59:47.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T00:59:47.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.957698
2025-12-25T00:59:47.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T00:59:47.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T00:59:47.825 [DEBUG] [Thread-2241] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:59:47.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T00:59:47.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T00:59:47.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T00:59:47.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T00:59:35', tmtdew=0.6, humidity=95.9, cloud=0.0, wind=29.33, temperature=7.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:59:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:58:00')
2025-12-25T00:59:47.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T00:59:47.915 [DEBUG] [Thread-2244] [transport.py] [_log()] starting thread (client mode): 0xb955b250
2025-12-25T00:59:47.915 [DEBUG] [Thread-2244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T00:59:47.930 [DEBUG] [Thread-2244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T00:59:47.930 [INFO] [Thread-2244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] client lang: <none>
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] server lang: <none>
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] kex follows: False
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] Compression: none
2025-12-25T00:59:47.938 [DEBUG] [Thread-2244] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T00:59:47.997 [DEBUG] [Thread-2244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T00:59:47.997 [DEBUG] [Thread-2244] [transport.py] [_log()] Switch to new keys ...
2025-12-25T00:59:47.998 [DEBUG] [Thread-2244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T00:59:47.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T00:59:47.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T00:59:48.057 [DEBUG] [Thread-2244] [transport.py] [_log()] userauth is OK
2025-12-25T00:59:48.058 [DEBUG] [Thread-2244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T00:59:48.058 [DEBUG] [Thread-2244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T00:59:48.058 [DEBUG] [Thread-2244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T00:59:48.058 [DEBUG] [Thread-2244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T00:59:48.077 [INFO] [Thread-2244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T00:59:48.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T00:59:48.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T00:59:48.895 [DEBUG] [Thread-2244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T00:59:48.895 [DEBUG] [Thread-2244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T00:59:48.943 [DEBUG] [Thread-2244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T00:59:48.943 [DEBUG] [Thread-2244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T00:59:48.953 [DEBUG] [Thread-2244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T00:59:48.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T00:59:48.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T00:59:48.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T00:59:48.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T00:59:48.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T00:59:48.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T00:59:48.990 [DEBUG] [Thread-2244] [transport.py] [_log()] EOF in transport thread
2025-12-25T00:59:58.776 [DEBUG] [Thread-2246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:00:13.831 [DEBUG] [Thread-2247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:00:19.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:00:19.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:00:19.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:00:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 0, 7), 0.6, 95.89, 0.0, 29.47, 7.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:00:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:00:07
2025-12-25T01:00:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:00:20.040 [DEBUG] [Thread-2248] [transport.py] [_log()] starting thread (client mode): 0xb9547c10
2025-12-25T01:00:20.040 [DEBUG] [Thread-2248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:00:20.060 [DEBUG] [Thread-2248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:00:20.060 [INFO] [Thread-2248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] client lang: <none>
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] server lang: <none>
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] kex follows: False
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] Compression: none
2025-12-25T01:00:20.063 [DEBUG] [Thread-2248] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:00:20.078 [DEBUG] [Thread-2248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:00:20.078 [DEBUG] [Thread-2248] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:00:20.078 [DEBUG] [Thread-2248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:00:20.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:00:20.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:00:20.079 [DEBUG] [Thread-2248] [transport.py] [_log()] userauth is OK
2025-12-25T01:00:20.079 [DEBUG] [Thread-2248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:00:20.079 [DEBUG] [Thread-2248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:00:20.079 [DEBUG] [Thread-2248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:00:20.079 [DEBUG] [Thread-2248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:00:20.091 [INFO] [Thread-2248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:00:20.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:00:20.980 [DEBUG] [Thread-2248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:00:20.980 [DEBUG] [Thread-2248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:00:20.980 [DEBUG] [Thread-2248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:00:21.022 [DEBUG] [Thread-2248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:00:21.022 [DEBUG] [Thread-2248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:00:21.024 [DEBUG] [Thread-2248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:00:21.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:00:21.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:00:21.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:00:21.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:00:21.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:00:21.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:00:21.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.958045 -999.00  +12.00  23.04     92  +10.80 1 1 1 3 1     0    0 0.98 -11.82 ZNESW 20.4 23.0 155.6 31.9 13.2 -17.5 12.9 -17.1 12.8 -16.9 13.1 -16.1
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.958045
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T01:00:21.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:00:07', tmtdew=0.6, humidity=95.89, cloud=0.0, wind=29.47, temperature=7.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T22:59:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:58:00')
2025-12-25T01:00:21.044 [DEBUG] [Thread-2248] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:00:21.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:00:21.128 [DEBUG] [Thread-2251] [transport.py] [_log()] starting thread (client mode): 0xb9546b90
2025-12-25T01:00:21.128 [DEBUG] [Thread-2251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:00:21.143 [DEBUG] [Thread-2251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:00:21.143 [INFO] [Thread-2251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:00:21.150 [DEBUG] [Thread-2251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:00:21.150 [DEBUG] [Thread-2251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:00:21.150 [DEBUG] [Thread-2251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:00:21.150 [DEBUG] [Thread-2251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:00:21.150 [DEBUG] [Thread-2251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:00:21.150 [DEBUG] [Thread-2251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:00:21.150 [DEBUG] [Thread-2251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] client lang: <none>
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] server lang: <none>
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] kex follows: False
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] Compression: none
2025-12-25T01:00:21.151 [DEBUG] [Thread-2251] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:00:21.205 [DEBUG] [Thread-2251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:00:21.205 [DEBUG] [Thread-2251] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:00:21.206 [DEBUG] [Thread-2251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:00:21.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:00:21.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:00:21.262 [DEBUG] [Thread-2251] [transport.py] [_log()] userauth is OK
2025-12-25T01:00:21.263 [DEBUG] [Thread-2251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:00:21.263 [DEBUG] [Thread-2251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:00:21.263 [DEBUG] [Thread-2251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:00:21.263 [DEBUG] [Thread-2251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:00:21.277 [INFO] [Thread-2251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:00:21.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:00:21.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:00:22.086 [DEBUG] [Thread-2251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:00:22.086 [DEBUG] [Thread-2251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:00:22.138 [DEBUG] [Thread-2251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:00:22.138 [DEBUG] [Thread-2251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:00:22.150 [DEBUG] [Thread-2251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:00:22.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:00:22.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:00:22.168 [DEBUG] [Thread-2253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:00:22.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:00:22.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:00:22.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:00:22.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:00:22.185 [DEBUG] [Thread-2251] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:00:24.036 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:00:24.037 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:00:28.862 [DEBUG] [Thread-2254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:00:43.916 [DEBUG] [Thread-2255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:00:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:00:52.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:00:52.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:00:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 0, 39), 0.6, 95.89, 0.0, 22.76, 7.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:00:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:00:39
2025-12-25T01:00:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:00:53.161 [DEBUG] [Thread-2256] [transport.py] [_log()] starting thread (client mode): 0xb95459f0
2025-12-25T01:00:53.161 [DEBUG] [Thread-2256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:00:53.182 [DEBUG] [Thread-2256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:00:53.182 [INFO] [Thread-2256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] client lang: <none>
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] server lang: <none>
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] kex follows: False
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] Compression: none
2025-12-25T01:00:53.185 [DEBUG] [Thread-2256] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:00:53.202 [DEBUG] [Thread-2256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:00:53.202 [DEBUG] [Thread-2256] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:00:53.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:00:53.203 [DEBUG] [Thread-2256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:00:53.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:00:53.205 [DEBUG] [Thread-2256] [transport.py] [_log()] userauth is OK
2025-12-25T01:00:53.205 [DEBUG] [Thread-2256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:00:53.205 [DEBUG] [Thread-2256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:00:53.205 [DEBUG] [Thread-2256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:00:53.205 [DEBUG] [Thread-2256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:00:53.228 [INFO] [Thread-2256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:00:53.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:00:53.876 [DEBUG] [Thread-2256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:00:53.877 [DEBUG] [Thread-2256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:00:53.877 [DEBUG] [Thread-2256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:00:53.918 [DEBUG] [Thread-2256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:00:53.918 [DEBUG] [Thread-2256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:00:53.921 [DEBUG] [Thread-2256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:00:53.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:00:53.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:00:53.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:00:53.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:00:53.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:00:53.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:00:53.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:00:53.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:00:53.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:00:53.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.958392 -999.00  +12.00  21.82     92  +10.80 1 2 1 3 1     0    0 0.99 -11.79 zNESW 15.6 21.8 158.8 31.8 13.1 -16.7 12.9 -16.5 12.8 -16.5 13.1 -16.9
2025-12-25T01:00:53.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:00:53.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:00:53.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.958392
2025-12-25T01:00:53.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:00:53.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:00:53.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:00:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:00:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T01:00:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:00:39', tmtdew=0.6, humidity=95.89, cloud=0.0, wind=22.76, temperature=7.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:00:05.069', atlas_cloud=2, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:58:00')
2025-12-25T01:00:53.944 [DEBUG] [Thread-2256] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:00:54.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:00:54.039 [DEBUG] [Thread-2259] [transport.py] [_log()] starting thread (client mode): 0xb95598d0
2025-12-25T01:00:54.039 [DEBUG] [Thread-2259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:00:54.053 [DEBUG] [Thread-2259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:00:54.053 [INFO] [Thread-2259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:00:54.060 [DEBUG] [Thread-2259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] client lang: <none>
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] server lang: <none>
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] kex follows: False
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:00:54.061 [DEBUG] [Thread-2259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:00:54.062 [DEBUG] [Thread-2259] [transport.py] [_log()] Compression: none
2025-12-25T01:00:54.062 [DEBUG] [Thread-2259] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:00:54.116 [DEBUG] [Thread-2259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:00:54.117 [DEBUG] [Thread-2259] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:00:54.117 [DEBUG] [Thread-2259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:00:54.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:00:54.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:00:54.173 [DEBUG] [Thread-2259] [transport.py] [_log()] userauth is OK
2025-12-25T01:00:54.173 [DEBUG] [Thread-2259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:00:54.173 [DEBUG] [Thread-2259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:00:54.173 [DEBUG] [Thread-2259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:00:54.173 [DEBUG] [Thread-2259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:00:54.192 [INFO] [Thread-2259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:00:54.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:00:54.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:00:55.012 [DEBUG] [Thread-2259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:00:55.012 [DEBUG] [Thread-2259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:00:55.060 [DEBUG] [Thread-2259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:00:55.060 [DEBUG] [Thread-2259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:00:55.070 [DEBUG] [Thread-2259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:00:55.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:00:55.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:00: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') -> 00000000
2025-12-25T01:00:55.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:00:55.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:00:55.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:00:55.108 [DEBUG] [Thread-2259] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:00:58.946 [DEBUG] [Thread-2261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:01:13.985 [DEBUG] [Thread-2262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:01:22.229 [DEBUG] [Thread-2263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:01:24.241 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:01:24.243 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:01:25.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:01:25.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:01:25.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:01:25.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 1, 11), 0.6, 95.88, 0.0, 25.58, 7.9, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:01:25.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:01:11
2025-12-25T01:01:25.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:01:26.084 [DEBUG] [Thread-2264] [transport.py] [_log()] starting thread (client mode): 0xb9546a10
2025-12-25T01:01:26.084 [DEBUG] [Thread-2264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:01:26.107 [DEBUG] [Thread-2264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:01:26.107 [INFO] [Thread-2264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:01:26.110 [DEBUG] [Thread-2264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:01:26.110 [DEBUG] [Thread-2264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] client lang: <none>
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] server lang: <none>
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] kex follows: False
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] Compression: none
2025-12-25T01:01:26.111 [DEBUG] [Thread-2264] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:01:26.131 [DEBUG] [Thread-2264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:01:26.132 [DEBUG] [Thread-2264] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:01:26.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:01:26.133 [DEBUG] [Thread-2264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:01:26.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:01:26.135 [DEBUG] [Thread-2264] [transport.py] [_log()] userauth is OK
2025-12-25T01:01:26.135 [DEBUG] [Thread-2264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:01:26.135 [DEBUG] [Thread-2264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:01:26.135 [DEBUG] [Thread-2264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:01:26.135 [DEBUG] [Thread-2264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:01:26.165 [INFO] [Thread-2264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:01:26.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:01:26.960 [DEBUG] [Thread-2264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:01:26.961 [DEBUG] [Thread-2264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:01:26.961 [DEBUG] [Thread-2264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:01:27.001 [DEBUG] [Thread-2264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:01:27.001 [DEBUG] [Thread-2264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:01:27.005 [DEBUG] [Thread-2264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:01:27.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:01:27.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:01:27.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:01:27.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:01:27.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:01:27.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:01:27.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:01:27.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:01:27.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:01:27.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.958740 -999.00  +12.00  20.93     92  +10.80 1 2 1 3 1     0    0 0.98 -12.13 zNESW 17.8 20.9 150.8 30.4 13.1 -14.2 12.9 -12.5 12.8 -12.0 13.1 -13.1
2025-12-25T01:01:27.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:01:27.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:01:27.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.958740
2025-12-25T01:01:27.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:01:27.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:01:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:01:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:01:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T01:01:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:01:11', tmtdew=0.6, humidity=95.88, cloud=0.0, wind=25.58, temperature=7.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:00:35.136', atlas_cloud=2, atlas_rain=1, zp_data=[1.8347499999999997, 1.94625, 2.1762500000000005, 2.0684999999999993, 1.9064999999999994, 1.9787500000000016, 1.8779999999999992, 1.7607500000000007, 1.8699999999999992, 1.9720000000000004, 2.74625, nan, 1.7184999999999997, 1.4492499999999993, 1.1729999999999992, 1.4709999999999992, 1.8747500000000006, nan, nan, nan, 1.448999999999999, 0.9267499999999984, 1.1812500000000004, 1.4392500000000004, 2.1134999999999993, nan, 4.03075, nan, 1.1840000000000002, 0.7510000000000012, 1.0220000000000011, 1.442000000000001, nan], zp_timestamp='2025-12-24T22:58:00')
2025-12-25T01:01:27.031 [DEBUG] [Thread-2264] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:01:27.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:01:27.125 [DEBUG] [Thread-2267] [transport.py] [_log()] starting thread (client mode): 0xb9544790
2025-12-25T01:01:27.126 [DEBUG] [Thread-2267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:01:27.139 [DEBUG] [Thread-2267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:01:27.140 [INFO] [Thread-2267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:01:27.147 [DEBUG] [Thread-2267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:01:27.148 [DEBUG] [Thread-2267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:01:27.148 [DEBUG] [Thread-2267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:01:27.148 [DEBUG] [Thread-2267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:01:27.148 [DEBUG] [Thread-2267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:01:27.148 [DEBUG] [Thread-2267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:01:27.148 [DEBUG] [Thread-2267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:01:27.148 [DEBUG] [Thread-2267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:01:27.148 [DEBUG] [Thread-2267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] client lang: <none>
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] server lang: <none>
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] kex follows: False
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:01:27.149 [DEBUG] [Thread-2267] [transport.py] [_log()] Compression: none
2025-12-25T01:01:27.150 [DEBUG] [Thread-2267] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:01:27.208 [DEBUG] [Thread-2267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:01:27.208 [DEBUG] [Thread-2267] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:01:27.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:01:27.210 [DEBUG] [Thread-2267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:01:27.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:01:27.267 [DEBUG] [Thread-2267] [transport.py] [_log()] userauth is OK
2025-12-25T01:01:27.268 [DEBUG] [Thread-2267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:01:27.268 [DEBUG] [Thread-2267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:01:27.268 [DEBUG] [Thread-2267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:01:27.268 [DEBUG] [Thread-2267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:01:27.286 [INFO] [Thread-2267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:01:27.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:01:27.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:01:28.084 [DEBUG] [Thread-2267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:01:28.085 [DEBUG] [Thread-2267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:01:28.132 [DEBUG] [Thread-2267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:01:28.133 [DEBUG] [Thread-2267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:01:28.141 [DEBUG] [Thread-2267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:01:28.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:01:28.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:01:28.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:01:28.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:01:28.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:01:28.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:01:28.175 [DEBUG] [Thread-2267] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:01:29.017 [DEBUG] [Thread-2269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:01:44.065 [DEBUG] [Thread-2270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:01:58.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:01:58.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:01:58.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:01:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 1, 43), 0.59, 96.27, 0.0, 26.24, 7.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:01:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:01:43
2025-12-25T01:01:58.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:01:59.094 [DEBUG] [Thread-2271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:01:59.139 [DEBUG] [Thread-2272] [transport.py] [_log()] starting thread (client mode): 0xb95b1090
2025-12-25T01:01:59.139 [DEBUG] [Thread-2272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:01:59.160 [DEBUG] [Thread-2272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:01:59.160 [INFO] [Thread-2272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] client lang: <none>
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] server lang: <none>
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] kex follows: False
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] Compression: none
2025-12-25T01:01:59.163 [DEBUG] [Thread-2272] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:01:59.181 [DEBUG] [Thread-2272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:01:59.181 [DEBUG] [Thread-2272] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:01:59.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:01:59.182 [DEBUG] [Thread-2272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:01:59.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:01:59.184 [DEBUG] [Thread-2272] [transport.py] [_log()] userauth is OK
2025-12-25T01:01:59.184 [DEBUG] [Thread-2272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:01:59.184 [DEBUG] [Thread-2272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:01:59.184 [DEBUG] [Thread-2272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:01:59.185 [DEBUG] [Thread-2272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:01:59.207 [INFO] [Thread-2272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:01:59.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:01:59.863 [DEBUG] [Thread-2272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:01:59.863 [DEBUG] [Thread-2272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:01:59.863 [DEBUG] [Thread-2272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:01:59.904 [DEBUG] [Thread-2272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:01:59.904 [DEBUG] [Thread-2272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:01:59.907 [DEBUG] [Thread-2272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:01:59.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:01:59.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:01:59.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:01:59.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:01:59.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:01:59.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:01:59.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:01:59.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:01:59.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:01:59.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.959434 -999.00  +11.90  19.79     92  +10.80 1 2 1 3 1     0    0 0.94 -12.56 .NEsW 21.9 19.8 156.8 29.4 13.1 -12.9 13.0 -11.2 12.8 -12.4 13.1 -12.1
2025-12-25T01:01:59.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:01:59.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:01:59.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.959434
2025-12-25T01:01:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:01:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:01:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:01:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:01:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T01:01:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:01:43', tmtdew=0.59, humidity=96.27, cloud=0.0, wind=26.24, temperature=7.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:01:35.098', atlas_cloud=2, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:00:00')
2025-12-25T01:01:59.932 [DEBUG] [Thread-2272] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:02:00.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:02:00.026 [DEBUG] [Thread-2275] [transport.py] [_log()] starting thread (client mode): 0xb95b31f0
2025-12-25T01:02:00.026 [DEBUG] [Thread-2275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:02:00.041 [DEBUG] [Thread-2275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:02:00.041 [INFO] [Thread-2275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] client lang: <none>
2025-12-25T01:02:00.051 [DEBUG] [Thread-2275] [transport.py] [_log()] server lang: <none>
2025-12-25T01:02:00.052 [DEBUG] [Thread-2275] [transport.py] [_log()] kex follows: False
2025-12-25T01:02:00.052 [DEBUG] [Thread-2275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:02:00.052 [DEBUG] [Thread-2275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:02:00.052 [DEBUG] [Thread-2275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:02:00.052 [DEBUG] [Thread-2275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:02:00.052 [DEBUG] [Thread-2275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:02:00.052 [DEBUG] [Thread-2275] [transport.py] [_log()] Compression: none
2025-12-25T01:02:00.052 [DEBUG] [Thread-2275] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:02:00.109 [DEBUG] [Thread-2275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:02:00.109 [DEBUG] [Thread-2275] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:02:00.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:02:00.110 [DEBUG] [Thread-2275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:02:00.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:02:00.168 [DEBUG] [Thread-2275] [transport.py] [_log()] userauth is OK
2025-12-25T01:02:00.168 [DEBUG] [Thread-2275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:02:00.169 [DEBUG] [Thread-2275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:02:00.169 [DEBUG] [Thread-2275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:02:00.169 [DEBUG] [Thread-2275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:02:00.193 [INFO] [Thread-2275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:02:00.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:02:00.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:02:01.018 [DEBUG] [Thread-2275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:02:01.018 [DEBUG] [Thread-2275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:02:01.066 [DEBUG] [Thread-2275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:02:01.066 [DEBUG] [Thread-2275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:02:01.076 [DEBUG] [Thread-2275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:02:01.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:02:01.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:02:01.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:02:01.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:02:01.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:02:01.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:02:01.112 [DEBUG] [Thread-2275] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:02:14.126 [DEBUG] [Thread-2277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:02:22.305 [DEBUG] [Thread-2278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:02:24.459 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:02:24.461 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:02:29.170 [DEBUG] [Thread-2279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:02:31.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:02:31.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:02:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:02:31.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 2, 15), 0.59, 96.3, 0.0, 24.49, 7.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:02:31.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:02:15
2025-12-25T01:02:31.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:02:32.102 [DEBUG] [Thread-2280] [transport.py] [_log()] starting thread (client mode): 0xb955b0a0
2025-12-25T01:02:32.102 [DEBUG] [Thread-2280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:02:32.122 [DEBUG] [Thread-2280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:02:32.122 [INFO] [Thread-2280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:02:32.125 [DEBUG] [Thread-2280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:02:32.125 [DEBUG] [Thread-2280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:02:32.125 [DEBUG] [Thread-2280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:02:32.125 [DEBUG] [Thread-2280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:02:32.125 [DEBUG] [Thread-2280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:02:32.125 [DEBUG] [Thread-2280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] client lang: <none>
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] server lang: <none>
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] kex follows: False
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] Compression: none
2025-12-25T01:02:32.126 [DEBUG] [Thread-2280] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:02:32.134 [DEBUG] [Thread-2280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:02:32.135 [DEBUG] [Thread-2280] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:02:32.135 [DEBUG] [Thread-2280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:02:32.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:02:32.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:02:32.137 [DEBUG] [Thread-2280] [transport.py] [_log()] userauth is OK
2025-12-25T01:02:32.138 [DEBUG] [Thread-2280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:02:32.138 [DEBUG] [Thread-2280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:02:32.138 [DEBUG] [Thread-2280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:02:32.138 [DEBUG] [Thread-2280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:02:32.163 [INFO] [Thread-2280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:02:32.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:02:32.777 [DEBUG] [Thread-2280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:02:32.778 [DEBUG] [Thread-2280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:02:32.778 [DEBUG] [Thread-2280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:02:32.819 [DEBUG] [Thread-2280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:02:32.819 [DEBUG] [Thread-2280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:02:32.823 [DEBUG] [Thread-2280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:02:32.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:02:32.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:02:32.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:02:32.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:02:32.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:02:32.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:02:32.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:02:32.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:02:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:02:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.959782 -999.00  +11.90  22.31     92  +10.80 1 3 1 3 1     0    0 0.91 -13.05 .NeSW 23.8 22.3 157.0 30.6 13.1 -10.6 12.9 -9.4 12.8 -10.0 13.2 -11.0
2025-12-25T01:02:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:02:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:02:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.959782
2025-12-25T01:02:32.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:02:32.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:02:32.843 [DEBUG] [Thread-2280] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:02:32.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:02:32.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:02:32.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:02:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:02:15', tmtdew=0.59, humidity=96.3, cloud=0.0, wind=24.49, temperature=7.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:02:05.165', atlas_cloud=3, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:00:00')
2025-12-25T01:02:32.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:02:32.950 [DEBUG] [Thread-2283] [transport.py] [_log()] starting thread (client mode): 0xb9544d90
2025-12-25T01:02:32.950 [DEBUG] [Thread-2283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:02:32.965 [DEBUG] [Thread-2283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:02:32.965 [INFO] [Thread-2283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] client lang: <none>
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] server lang: <none>
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] kex follows: False
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:02:32.973 [DEBUG] [Thread-2283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:02:32.974 [DEBUG] [Thread-2283] [transport.py] [_log()] Compression: none
2025-12-25T01:02:32.974 [DEBUG] [Thread-2283] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:02:33.031 [DEBUG] [Thread-2283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:02:33.032 [DEBUG] [Thread-2283] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:02:33.032 [DEBUG] [Thread-2283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:02:33.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:02:33.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:02:33.087 [DEBUG] [Thread-2283] [transport.py] [_log()] userauth is OK
2025-12-25T01:02:33.088 [DEBUG] [Thread-2283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:02:33.088 [DEBUG] [Thread-2283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:02:33.088 [DEBUG] [Thread-2283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:02:33.088 [DEBUG] [Thread-2283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:02:33.106 [INFO] [Thread-2283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:02:33.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:02:33.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:02:33.911 [DEBUG] [Thread-2283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:02:33.911 [DEBUG] [Thread-2283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:02:33.959 [DEBUG] [Thread-2283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:02:33.960 [DEBUG] [Thread-2283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:02:33.971 [DEBUG] [Thread-2283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:02:33.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:02:33.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:02:33.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:02:34.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:02:34.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:02:34.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:02:34.012 [DEBUG] [Thread-2283] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:02:44.207 [DEBUG] [Thread-2285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:02:59.262 [DEBUG] [Thread-2286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:03:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:03:04.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:03:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:03:04.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 2, 47), 0.59, 96.28, 0.0, 25.3, 7.91, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:03:04.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:02:47
2025-12-25T01:03:04.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:03:05.014 [DEBUG] [Thread-2287] [transport.py] [_log()] starting thread (client mode): 0xb957aa40
2025-12-25T01:03:05.014 [DEBUG] [Thread-2287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:03:05.035 [DEBUG] [Thread-2287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:03:05.035 [INFO] [Thread-2287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:03:05.038 [DEBUG] [Thread-2287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] client lang: <none>
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] server lang: <none>
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] kex follows: False
2025-12-25T01:03:05.039 [DEBUG] [Thread-2287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:03:05.040 [DEBUG] [Thread-2287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:03:05.040 [DEBUG] [Thread-2287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:03:05.040 [DEBUG] [Thread-2287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:03:05.040 [DEBUG] [Thread-2287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:03:05.040 [DEBUG] [Thread-2287] [transport.py] [_log()] Compression: none
2025-12-25T01:03:05.040 [DEBUG] [Thread-2287] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:03:05.059 [DEBUG] [Thread-2287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:03:05.060 [DEBUG] [Thread-2287] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:03:05.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:03:05.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:03:05.062 [DEBUG] [Thread-2287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:03:05.063 [DEBUG] [Thread-2287] [transport.py] [_log()] userauth is OK
2025-12-25T01:03:05.063 [DEBUG] [Thread-2287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:03:05.063 [DEBUG] [Thread-2287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:03:05.063 [DEBUG] [Thread-2287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:03:05.063 [DEBUG] [Thread-2287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:03:05.087 [INFO] [Thread-2287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:03:05.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:03:05.745 [DEBUG] [Thread-2287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:03:05.745 [DEBUG] [Thread-2287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:03:05.745 [DEBUG] [Thread-2287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:03:05.786 [DEBUG] [Thread-2287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:03:05.786 [DEBUG] [Thread-2287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:03:05.788 [DEBUG] [Thread-2287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:03:05.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:03:05.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:03:05.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:03:05.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:03:05.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:03:05.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:03:05.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:03:05.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:03:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:03:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.960129 -999.00  +11.90  20.76     92  +10.80 1 3 1 3 1     0    0 0.91 -14.11 .NeSW 20.1 20.8 159.4 27.5 13.2 -9.8 13.0 -7.7 12.8 -9.0 13.1 -8.2
2025-12-25T01:03:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:03:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:03:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.960129
2025-12-25T01:03:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:03:05.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:03:05.809 [DEBUG] [Thread-2287] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:03:05.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:03:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:03:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:03:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:02:47', tmtdew=0.59, humidity=96.28, cloud=0.0, wind=25.3, temperature=7.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:02:35.146', atlas_cloud=3, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:00:00')
2025-12-25T01:03:05.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:03:05.903 [DEBUG] [Thread-2290] [transport.py] [_log()] starting thread (client mode): 0xb6b03790
2025-12-25T01:03:05.904 [DEBUG] [Thread-2290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:03:05.919 [DEBUG] [Thread-2290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:03:05.920 [INFO] [Thread-2290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:03:05.927 [DEBUG] [Thread-2290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:03:05.927 [DEBUG] [Thread-2290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:03:05.927 [DEBUG] [Thread-2290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] client lang: <none>
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] server lang: <none>
2025-12-25T01:03:05.928 [DEBUG] [Thread-2290] [transport.py] [_log()] kex follows: False
2025-12-25T01:03:05.929 [DEBUG] [Thread-2290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:03:05.929 [DEBUG] [Thread-2290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:03:05.929 [DEBUG] [Thread-2290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:03:05.929 [DEBUG] [Thread-2290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:03:05.929 [DEBUG] [Thread-2290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:03:05.929 [DEBUG] [Thread-2290] [transport.py] [_log()] Compression: none
2025-12-25T01:03:05.929 [DEBUG] [Thread-2290] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:03:05.986 [DEBUG] [Thread-2290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:03:05.987 [DEBUG] [Thread-2290] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:03:05.987 [DEBUG] [Thread-2290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:03:05.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:03:05.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:03:06.042 [DEBUG] [Thread-2290] [transport.py] [_log()] userauth is OK
2025-12-25T01:03:06.042 [DEBUG] [Thread-2290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:03:06.042 [DEBUG] [Thread-2290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:03:06.043 [DEBUG] [Thread-2290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:03:06.043 [DEBUG] [Thread-2290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:03:06.061 [INFO] [Thread-2290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:03:06.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:03:06.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:03:06.912 [DEBUG] [Thread-2290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:03:06.913 [DEBUG] [Thread-2290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:03:06.961 [DEBUG] [Thread-2290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:03:06.961 [DEBUG] [Thread-2290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:03:06.970 [DEBUG] [Thread-2290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:03:06.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:03:06.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:03:06.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:03:06.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:03:06.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:03:06.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:03:07.007 [DEBUG] [Thread-2290] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:03:14.302 [DEBUG] [Thread-2292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:03:22.369 [DEBUG] [Thread-2293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:03:24.681 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:03:24.682 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:03:29.351 [DEBUG] [Thread-2294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:03:37.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:03:37.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:03:37.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:03:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 3, 19), 0.59, 96.3, 0.0, 24.61, 7.91, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:03:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:03:19
2025-12-25T01:03:37.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:03:37.993 [DEBUG] [Thread-2295] [transport.py] [_log()] starting thread (client mode): 0xb9544bb0
2025-12-25T01:03:37.993 [DEBUG] [Thread-2295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:03:38.016 [DEBUG] [Thread-2295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:03:38.016 [INFO] [Thread-2295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:03:38.020 [DEBUG] [Thread-2295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:03:38.020 [DEBUG] [Thread-2295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:03:38.020 [DEBUG] [Thread-2295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:03:38.020 [DEBUG] [Thread-2295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:03:38.020 [DEBUG] [Thread-2295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:03:38.020 [DEBUG] [Thread-2295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:03:38.020 [DEBUG] [Thread-2295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:03:38.020 [DEBUG] [Thread-2295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] client lang: <none>
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] server lang: <none>
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] kex follows: False
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] Compression: none
2025-12-25T01:03:38.021 [DEBUG] [Thread-2295] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:03:38.039 [DEBUG] [Thread-2295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:03:38.040 [DEBUG] [Thread-2295] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:03:38.040 [DEBUG] [Thread-2295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:03:38.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:03:38.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:03:38.043 [DEBUG] [Thread-2295] [transport.py] [_log()] userauth is OK
2025-12-25T01:03:38.043 [DEBUG] [Thread-2295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:03:38.043 [DEBUG] [Thread-2295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:03:38.043 [DEBUG] [Thread-2295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:03:38.043 [DEBUG] [Thread-2295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:03:38.070 [INFO] [Thread-2295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:03:38.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:03:38.684 [DEBUG] [Thread-2295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:03:38.685 [DEBUG] [Thread-2295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:03:38.685 [DEBUG] [Thread-2295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:03:38.726 [DEBUG] [Thread-2295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:03:38.726 [DEBUG] [Thread-2295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:03:38.730 [DEBUG] [Thread-2295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:03:38.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:03:38.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:03:38.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:03:38.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:03:38.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:03:38.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:03:38.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:03:38.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:03:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:03:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.960476 -999.00  +11.90  15.44     92  +10.80 1 3 1 3 1     0    0 0.88 -14.79 .N.sW 14.5 15.4 158.0 22.0 13.2 -7.4 13.0 -5.3 12.8 -6.3 13.2 -5.8
2025-12-25T01:03:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:03:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:03:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.960476
2025-12-25T01:03:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:03:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:03:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:03:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:03:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:03:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:03:19', tmtdew=0.59, humidity=96.3, cloud=0.0, wind=24.61, temperature=7.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:03:05.126', atlas_cloud=3, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:00:00')
2025-12-25T01:03:38.759 [DEBUG] [Thread-2295] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:03:38.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:03:38.860 [DEBUG] [Thread-2298] [transport.py] [_log()] starting thread (client mode): 0xb9558e80
2025-12-25T01:03:38.860 [DEBUG] [Thread-2298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:03:38.875 [DEBUG] [Thread-2298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:03:38.875 [INFO] [Thread-2298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:03:38.882 [DEBUG] [Thread-2298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:03:38.883 [DEBUG] [Thread-2298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:03:38.883 [DEBUG] [Thread-2298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:03:38.883 [DEBUG] [Thread-2298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] client lang: <none>
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] server lang: <none>
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] kex follows: False
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] Compression: none
2025-12-25T01:03:38.884 [DEBUG] [Thread-2298] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:03:38.940 [DEBUG] [Thread-2298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:03:38.941 [DEBUG] [Thread-2298] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:03:38.941 [DEBUG] [Thread-2298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:03:38.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:03:38.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:03:38.996 [DEBUG] [Thread-2298] [transport.py] [_log()] userauth is OK
2025-12-25T01:03:38.997 [DEBUG] [Thread-2298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:03:38.997 [DEBUG] [Thread-2298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:03:38.997 [DEBUG] [Thread-2298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:03:38.997 [DEBUG] [Thread-2298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:03:39.015 [INFO] [Thread-2298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:03:39.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:03:39.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:03:39.830 [DEBUG] [Thread-2298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:03:39.830 [DEBUG] [Thread-2298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:03:39.878 [DEBUG] [Thread-2298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:03:39.878 [DEBUG] [Thread-2298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:03:39.887 [DEBUG] [Thread-2298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:03:39.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:03:39.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:03:39.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:03:39.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:03:39.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:03:39.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:03:39.922 [DEBUG] [Thread-2298] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:03:44.382 [DEBUG] [Thread-2300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:03:59.432 [DEBUG] [Thread-2301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:04:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:04:09.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:04:09.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:04:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 3, 51), 0.59, 96.31, 0.0, 21.49, 7.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:04:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:03:51
2025-12-25T01:04:10.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:04:10.955 [DEBUG] [Thread-2302] [transport.py] [_log()] starting thread (client mode): 0xb957a4a0
2025-12-25T01:04:10.955 [DEBUG] [Thread-2302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:04:10.975 [DEBUG] [Thread-2302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:04:10.975 [INFO] [Thread-2302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:04:10.978 [DEBUG] [Thread-2302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] client lang: <none>
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] server lang: <none>
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] kex follows: False
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] Compression: none
2025-12-25T01:04:10.979 [DEBUG] [Thread-2302] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:04:10.998 [DEBUG] [Thread-2302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:04:10.998 [DEBUG] [Thread-2302] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:04:10.998 [DEBUG] [Thread-2302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:04:10.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:04:10.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:04:10.999 [DEBUG] [Thread-2302] [transport.py] [_log()] userauth is OK
2025-12-25T01:04:10.999 [DEBUG] [Thread-2302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:04:10.999 [DEBUG] [Thread-2302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:04:10.999 [DEBUG] [Thread-2302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:04:10.999 [DEBUG] [Thread-2302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:04:11.008 [INFO] [Thread-2302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:04:11.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:04:11.657 [DEBUG] [Thread-2302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:04:11.657 [DEBUG] [Thread-2302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:04:11.657 [DEBUG] [Thread-2302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:04:11.697 [DEBUG] [Thread-2302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:04:11.697 [DEBUG] [Thread-2302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:04:11.699 [DEBUG] [Thread-2302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:04:11.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:04:11.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:04:11.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:04:11.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:04:11.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:04:11.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:04:11.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:04:11.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:04:11.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:04:11.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.960823 -999.00  +12.00  12.40     92  +10.80 1 3 1 3 1     0    0 0.79 -16.79 .N.sW 14.6 12.4 155.4 21.4 13.2 -8.6 13.1 -9.5 12.9 -9.1 13.2 -10.4
2025-12-25T01:04:11.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:04:11.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:04:11.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.960823
2025-12-25T01:04:11.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:03:51', tmtdew=0.59, humidity=96.31, cloud=0.0, wind=21.49, temperature=7.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:03:35.107', atlas_cloud=3, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:00:00')
2025-12-25T01:04:11.717 [DEBUG] [Thread-2302] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:04:11.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:04:11.801 [DEBUG] [Thread-2305] [transport.py] [_log()] starting thread (client mode): 0xb95b2950
2025-12-25T01:04:11.801 [DEBUG] [Thread-2305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:04:11.816 [DEBUG] [Thread-2305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:04:11.816 [INFO] [Thread-2305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:04:11.823 [DEBUG] [Thread-2305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:04:11.823 [DEBUG] [Thread-2305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:04:11.823 [DEBUG] [Thread-2305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:04:11.823 [DEBUG] [Thread-2305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:04:11.823 [DEBUG] [Thread-2305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:04:11.823 [DEBUG] [Thread-2305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] client lang: <none>
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] server lang: <none>
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] kex follows: False
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] Compression: none
2025-12-25T01:04:11.824 [DEBUG] [Thread-2305] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:04:11.881 [DEBUG] [Thread-2305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:04:11.881 [DEBUG] [Thread-2305] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:04:11.882 [DEBUG] [Thread-2305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:04:11.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:04:11.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:04:11.938 [DEBUG] [Thread-2305] [transport.py] [_log()] userauth is OK
2025-12-25T01:04:11.938 [DEBUG] [Thread-2305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:04:11.938 [DEBUG] [Thread-2305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:04:11.938 [DEBUG] [Thread-2305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:04:11.938 [DEBUG] [Thread-2305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:04:11.953 [INFO] [Thread-2305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:04:11.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:04:11.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:04:12.782 [DEBUG] [Thread-2305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:04:12.782 [DEBUG] [Thread-2305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:04:12.830 [DEBUG] [Thread-2305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:04:12.830 [DEBUG] [Thread-2305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:04:12.839 [DEBUG] [Thread-2305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:04:12.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:04:12.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:04:12.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
2025-12-25T01:04:12.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:04:12.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:04:12.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:04:12.871 [DEBUG] [Thread-2305] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:04:14.463 [DEBUG] [Thread-2307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:04:22.453 [DEBUG] [Thread-2308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:04:24.884 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:04:24.885 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:04:29.503 [DEBUG] [Thread-2309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:04:42.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:04:42.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:04:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:04:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 4, 23), 0.59, 96.32, 0.0, 20.84, 7.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:04:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:04:23
2025-12-25T01:04:43.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:04:43.878 [DEBUG] [Thread-2310] [transport.py] [_log()] starting thread (client mode): 0xb95b0670
2025-12-25T01:04:43.878 [DEBUG] [Thread-2310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:04:43.890 [DEBUG] [Thread-2310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:04:43.890 [INFO] [Thread-2310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] client lang: <none>
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] server lang: <none>
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] kex follows: False
2025-12-25T01:04:43.892 [DEBUG] [Thread-2310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:04:43.893 [DEBUG] [Thread-2310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:04:43.893 [DEBUG] [Thread-2310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:04:43.893 [DEBUG] [Thread-2310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:04:43.893 [DEBUG] [Thread-2310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:04:43.893 [DEBUG] [Thread-2310] [transport.py] [_log()] Compression: none
2025-12-25T01:04:43.893 [DEBUG] [Thread-2310] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:04:43.902 [DEBUG] [Thread-2310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:04:43.903 [DEBUG] [Thread-2310] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:04:43.903 [DEBUG] [Thread-2310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:04:43.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:04:43.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:04:43.904 [DEBUG] [Thread-2310] [transport.py] [_log()] userauth is OK
2025-12-25T01:04:43.904 [DEBUG] [Thread-2310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:04:43.904 [DEBUG] [Thread-2310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:04:43.904 [DEBUG] [Thread-2310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:04:43.904 [DEBUG] [Thread-2310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:04:43.926 [INFO] [Thread-2310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:04:43.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:04:44.543 [DEBUG] [Thread-2312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:04:44.580 [DEBUG] [Thread-2310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:04:44.580 [DEBUG] [Thread-2310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:04:44.580 [DEBUG] [Thread-2310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:04:44.621 [DEBUG] [Thread-2310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:04:44.621 [DEBUG] [Thread-2310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:04:44.624 [DEBUG] [Thread-2310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:04:44.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:04:44.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:04:44.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:04:44.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:04:44.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:04:44.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:04:44.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:04:44.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.961171 -999.00  +12.00  15.42     92  +10.80 1 3 1 3 1     0    0 0.84 -15.81 ----- 15.8 15.4 160.2 21.9 13.2 -10.6 13.1 -9.1 12.9 -10.0 13.2 -9.4
2025-12-25T01:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.961171
2025-12-25T01:04:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:04:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:04:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:04:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:04:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:04:44.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:04:23', tmtdew=0.59, humidity=96.32, cloud=0.0, wind=20.84, temperature=7.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:04:05.174', atlas_cloud=3, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:00:00')
2025-12-25T01:04:44.651 [DEBUG] [Thread-2310] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:04:44.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:04:44.755 [DEBUG] [Thread-2314] [transport.py] [_log()] starting thread (client mode): 0xb95d5000
2025-12-25T01:04:44.755 [DEBUG] [Thread-2314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:04:44.769 [DEBUG] [Thread-2314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:04:44.769 [INFO] [Thread-2314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] client lang: <none>
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] server lang: <none>
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] kex follows: False
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:04:44.777 [DEBUG] [Thread-2314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:04:44.778 [DEBUG] [Thread-2314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:04:44.778 [DEBUG] [Thread-2314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:04:44.778 [DEBUG] [Thread-2314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:04:44.778 [DEBUG] [Thread-2314] [transport.py] [_log()] Compression: none
2025-12-25T01:04:44.778 [DEBUG] [Thread-2314] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:04:44.837 [DEBUG] [Thread-2314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:04:44.837 [DEBUG] [Thread-2314] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:04:44.838 [DEBUG] [Thread-2314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:04:44.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:04:44.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:04:44.898 [DEBUG] [Thread-2314] [transport.py] [_log()] userauth is OK
2025-12-25T01:04:44.898 [DEBUG] [Thread-2314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:04:44.899 [DEBUG] [Thread-2314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:04:44.899 [DEBUG] [Thread-2314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:04:44.899 [DEBUG] [Thread-2314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:04:44.916 [INFO] [Thread-2314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:04:44.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:04:44.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:04:45.747 [DEBUG] [Thread-2314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:04:45.747 [DEBUG] [Thread-2314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:04:45.795 [DEBUG] [Thread-2314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:04:45.796 [DEBUG] [Thread-2314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:04:45.804 [DEBUG] [Thread-2314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:04:45.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:04:45.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:04:45.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:04:45.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:04:45.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:04:45.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:04:45.838 [DEBUG] [Thread-2314] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:04:59.575 [DEBUG] [Thread-2316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:05:14.633 [DEBUG] [Thread-2317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:05:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:05:15.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:05:15.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:05:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 4, 55), 0.58, 96.35, 0.0, 24.39, 7.91, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:05:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:04:55
2025-12-25T01:05:16.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:05:16.850 [DEBUG] [Thread-2318] [transport.py] [_log()] starting thread (client mode): 0xb95d66e0
2025-12-25T01:05:16.851 [DEBUG] [Thread-2318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:05:16.870 [DEBUG] [Thread-2318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:05:16.870 [INFO] [Thread-2318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:05:16.873 [DEBUG] [Thread-2318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] client lang: <none>
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] server lang: <none>
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] kex follows: False
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:05:16.874 [DEBUG] [Thread-2318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:05:16.875 [DEBUG] [Thread-2318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:05:16.875 [DEBUG] [Thread-2318] [transport.py] [_log()] Compression: none
2025-12-25T01:05:16.875 [DEBUG] [Thread-2318] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:05:16.893 [DEBUG] [Thread-2318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:05:16.894 [DEBUG] [Thread-2318] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:05:16.894 [DEBUG] [Thread-2318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:05:16.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:05:16.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:05:16.896 [DEBUG] [Thread-2318] [transport.py] [_log()] userauth is OK
2025-12-25T01:05:16.897 [DEBUG] [Thread-2318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:05:16.897 [DEBUG] [Thread-2318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:05:16.897 [DEBUG] [Thread-2318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:05:16.897 [DEBUG] [Thread-2318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:05:16.921 [INFO] [Thread-2318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:05:16.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:05:17.571 [DEBUG] [Thread-2318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:05:17.571 [DEBUG] [Thread-2318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:05:17.572 [DEBUG] [Thread-2318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:05:17.612 [DEBUG] [Thread-2318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:05:17.612 [DEBUG] [Thread-2318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:05:17.616 [DEBUG] [Thread-2318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:05:17.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:05:17.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:05:17.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:05:17.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:05:17.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:05:17.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:05:17.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:05:17.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:05:17.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:05:17.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.961865 -999.00  +12.00  17.19     92  +10.80 1 3 1 3 1     0    0 0.85 -14.54 ...S. 15.3 17.2 157.0 26.0 13.2 -8.4 13.1 -8.1 12.9 -8.5 13.2 -8.3
2025-12-25T01:05:17.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:05:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:05:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.961865
2025-12-25T01:05:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:05:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:05:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:05:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:05:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:05:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:04:55', tmtdew=0.58, humidity=96.35, cloud=0.0, wind=24.39, temperature=7.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:05:05.136', atlas_cloud=3, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:02:00')
2025-12-25T01:05:17.643 [DEBUG] [Thread-2318] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:05:17.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:05:17.740 [DEBUG] [Thread-2321] [transport.py] [_log()] starting thread (client mode): 0xb95b3f40
2025-12-25T01:05:17.740 [DEBUG] [Thread-2321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:05:17.755 [DEBUG] [Thread-2321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:05:17.756 [INFO] [Thread-2321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:05:17.763 [DEBUG] [Thread-2321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:05:17.763 [DEBUG] [Thread-2321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:05:17.763 [DEBUG] [Thread-2321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:05:17.763 [DEBUG] [Thread-2321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:05:17.763 [DEBUG] [Thread-2321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:05:17.763 [DEBUG] [Thread-2321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] client lang: <none>
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] server lang: <none>
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] kex follows: False
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] Compression: none
2025-12-25T01:05:17.764 [DEBUG] [Thread-2321] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:05:17.820 [DEBUG] [Thread-2321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:05:17.821 [DEBUG] [Thread-2321] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:05:17.821 [DEBUG] [Thread-2321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:05:17.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:05:17.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:05:17.876 [DEBUG] [Thread-2321] [transport.py] [_log()] userauth is OK
2025-12-25T01:05:17.876 [DEBUG] [Thread-2321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:05:17.877 [DEBUG] [Thread-2321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:05:17.877 [DEBUG] [Thread-2321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:05:17.877 [DEBUG] [Thread-2321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:05:17.896 [INFO] [Thread-2321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:05:17.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:05:17.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:05:18.720 [DEBUG] [Thread-2321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:05:18.720 [DEBUG] [Thread-2321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:05:18.768 [DEBUG] [Thread-2321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:05:18.768 [DEBUG] [Thread-2321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:05:18.778 [DEBUG] [Thread-2321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:05:18.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:05:18.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:05:18.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:05:18.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:05:18.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:05:18.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:05:18.815 [DEBUG] [Thread-2321] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:05:22.510 [DEBUG] [Thread-2323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:05:25.092 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:05:25.093 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:05:29.665 [DEBUG] [Thread-2324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:05:44.709 [DEBUG] [Thread-2325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:05:48.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:05:48.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:05:48.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:05:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 5, 27), 0.58, 96.34, 0.0, 21.69, 7.89, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:05:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:05:27
2025-12-25T01:05:49.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:05:49.825 [DEBUG] [Thread-2326] [transport.py] [_log()] starting thread (client mode): 0xb6b030a0
2025-12-25T01:05:49.826 [DEBUG] [Thread-2326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:05:49.845 [DEBUG] [Thread-2326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:05:49.846 [INFO] [Thread-2326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:05:49.848 [DEBUG] [Thread-2326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:05:49.848 [DEBUG] [Thread-2326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:05:49.848 [DEBUG] [Thread-2326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:05:49.848 [DEBUG] [Thread-2326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] client lang: <none>
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] server lang: <none>
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] kex follows: False
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:05:49.849 [DEBUG] [Thread-2326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:05:49.850 [DEBUG] [Thread-2326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:05:49.850 [DEBUG] [Thread-2326] [transport.py] [_log()] Compression: none
2025-12-25T01:05:49.850 [DEBUG] [Thread-2326] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:05:49.869 [DEBUG] [Thread-2326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:05:49.870 [DEBUG] [Thread-2326] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:05:49.871 [DEBUG] [Thread-2326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:05:49.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:05:49.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:05:49.873 [DEBUG] [Thread-2326] [transport.py] [_log()] userauth is OK
2025-12-25T01:05:49.873 [DEBUG] [Thread-2326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:05:49.874 [DEBUG] [Thread-2326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:05:49.874 [DEBUG] [Thread-2326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:05:49.874 [DEBUG] [Thread-2326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:05:49.899 [INFO] [Thread-2326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:05:49.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:05:50.533 [DEBUG] [Thread-2326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:05:50.534 [DEBUG] [Thread-2326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:05:50.534 [DEBUG] [Thread-2326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:05:50.575 [DEBUG] [Thread-2326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:05:50.575 [DEBUG] [Thread-2326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:05:50.579 [DEBUG] [Thread-2326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:05:50.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:05:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:05:50.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:05:50.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:05:50.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:05:50.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:05:50.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:05:50.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:05:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:05:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.962212 -999.00  +11.90  19.86     92  +10.80 1 3 1 3 1     0    0 0.84 -14.83 ...S. 16.0 19.9 138.2 29.0 13.3 -9.9 13.1 -9.7 13.0 -9.2 13.2 -10.4
2025-12-25T01:05:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:05:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:05:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.962212
2025-12-25T01:05:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:05:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:05:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:05:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:05:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:05:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:05:27', tmtdew=0.58, humidity=96.34, cloud=0.0, wind=21.69, temperature=7.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:05:35.117', atlas_cloud=3, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:02:00')
2025-12-25T01:05:50.607 [DEBUG] [Thread-2326] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:05:50.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:05:50.701 [DEBUG] [Thread-2329] [transport.py] [_log()] starting thread (client mode): 0xb95b2260
2025-12-25T01:05:50.701 [DEBUG] [Thread-2329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:05:50.715 [DEBUG] [Thread-2329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:05:50.715 [INFO] [Thread-2329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:05:50.723 [DEBUG] [Thread-2329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:05:50.723 [DEBUG] [Thread-2329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:05:50.724 [DEBUG] [Thread-2329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:05:50.724 [DEBUG] [Thread-2329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:05:50.724 [DEBUG] [Thread-2329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:05:50.724 [DEBUG] [Thread-2329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:05:50.724 [DEBUG] [Thread-2329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:05:50.724 [DEBUG] [Thread-2329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:05:50.724 [DEBUG] [Thread-2329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:05:50.724 [DEBUG] [Thread-2329] [transport.py] [_log()] client lang: <none>
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] server lang: <none>
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] kex follows: False
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] Compression: none
2025-12-25T01:05:50.725 [DEBUG] [Thread-2329] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:05:50.783 [DEBUG] [Thread-2329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:05:50.784 [DEBUG] [Thread-2329] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:05:50.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:05:50.785 [DEBUG] [Thread-2329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:05:50.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:05:50.839 [DEBUG] [Thread-2329] [transport.py] [_log()] userauth is OK
2025-12-25T01:05:50.839 [DEBUG] [Thread-2329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:05:50.839 [DEBUG] [Thread-2329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:05:50.840 [DEBUG] [Thread-2329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:05:50.840 [DEBUG] [Thread-2329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:05:50.858 [INFO] [Thread-2329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:05:50.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:05:50.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:05:51.643 [DEBUG] [Thread-2329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:05:51.644 [DEBUG] [Thread-2329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:05:51.692 [DEBUG] [Thread-2329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:05:51.692 [DEBUG] [Thread-2329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:05:51.702 [DEBUG] [Thread-2329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:05:51.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:05:51.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:05:51.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:05:51.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:05:51.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:05:51.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:05:51.738 [DEBUG] [Thread-2329] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:05:59.746 [DEBUG] [Thread-2331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:06:14.802 [DEBUG] [Thread-2332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:06:21.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:06:21.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:06:21.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:06:22.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 5, 59), 0.58, 96.39, 0.0, 21.91, 7.94, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:06:22.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:05:59
2025-12-25T01:06:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:06:22.581 [DEBUG] [Thread-2333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:06:22.713 [DEBUG] [Thread-2334] [transport.py] [_log()] starting thread (client mode): 0xb95d7310
2025-12-25T01:06:22.713 [DEBUG] [Thread-2334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:06:22.734 [DEBUG] [Thread-2334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:06:22.734 [INFO] [Thread-2334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:06:22.735 [DEBUG] [Thread-2334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] client lang: <none>
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] server lang: <none>
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] kex follows: False
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:06:22.736 [DEBUG] [Thread-2334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:06:22.737 [DEBUG] [Thread-2334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:06:22.737 [DEBUG] [Thread-2334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:06:22.737 [DEBUG] [Thread-2334] [transport.py] [_log()] Compression: none
2025-12-25T01:06:22.737 [DEBUG] [Thread-2334] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:06:22.746 [DEBUG] [Thread-2334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:06:22.746 [DEBUG] [Thread-2334] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:06:22.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:06:22.747 [DEBUG] [Thread-2334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:06:22.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:06:22.749 [DEBUG] [Thread-2334] [transport.py] [_log()] userauth is OK
2025-12-25T01:06:22.749 [DEBUG] [Thread-2334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:06:22.749 [DEBUG] [Thread-2334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:06:22.749 [DEBUG] [Thread-2334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:06:22.749 [DEBUG] [Thread-2334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:06:22.774 [INFO] [Thread-2334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:06:22.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:06:23.464 [DEBUG] [Thread-2334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:06:23.464 [DEBUG] [Thread-2334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:06:23.465 [DEBUG] [Thread-2334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:06:23.505 [DEBUG] [Thread-2334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:06:23.505 [DEBUG] [Thread-2334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:06:23.508 [DEBUG] [Thread-2334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:06:23.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:06:23.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:06:23.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:06:23.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:06:23.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:06:23.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:06:23.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:06:23.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:06:23.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:06:23.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.962559 -999.00  +11.90  17.29     92  +10.80 1 2 1 3 1     0    0 0.83 -14.80 .N.S. 13.9 17.3 145.8 22.7 13.2 -11.9 13.1 -10.0 12.9 -10.3 13.3 -10.6
2025-12-25T01:06:23.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:06:23.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:06:23.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.962559
2025-12-25T01:06:23.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:06:23.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:06:23.534 [DEBUG] [Thread-2334] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:06:23.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:06:23.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:06:23.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T01:06:23.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:05:59', tmtdew=0.58, humidity=96.39, cloud=0.0, wind=21.91, temperature=7.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:06:05.098', atlas_cloud=2, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:02:00')
2025-12-25T01:06:23.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:06:23.634 [DEBUG] [Thread-2337] [transport.py] [_log()] starting thread (client mode): 0xb95d68f0
2025-12-25T01:06:23.635 [DEBUG] [Thread-2337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:06:23.649 [DEBUG] [Thread-2337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:06:23.649 [INFO] [Thread-2337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:06:23.656 [DEBUG] [Thread-2337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] client lang: <none>
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] server lang: <none>
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] kex follows: False
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] Compression: none
2025-12-25T01:06:23.657 [DEBUG] [Thread-2337] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:06:23.713 [DEBUG] [Thread-2337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:06:23.714 [DEBUG] [Thread-2337] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:06:23.714 [DEBUG] [Thread-2337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:06:23.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:06:23.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:06:23.770 [DEBUG] [Thread-2337] [transport.py] [_log()] userauth is OK
2025-12-25T01:06:23.771 [DEBUG] [Thread-2337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:06:23.771 [DEBUG] [Thread-2337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:06:23.771 [DEBUG] [Thread-2337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:06:23.771 [DEBUG] [Thread-2337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:06:23.789 [INFO] [Thread-2337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:06:23.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:06:23.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:06:24.637 [DEBUG] [Thread-2337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:06:24.638 [DEBUG] [Thread-2337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:06:24.686 [DEBUG] [Thread-2337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:06:24.686 [DEBUG] [Thread-2337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:06:24.695 [DEBUG] [Thread-2337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:06:24.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:06:24.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:06:24.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:06:24.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:06:24.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:06:24.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:06:24.732 [DEBUG] [Thread-2337] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:06:25.294 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:06:25.295 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:06:29.841 [DEBUG] [Thread-2339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:06:44.890 [DEBUG] [Thread-2340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:06:54.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:06:54.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:06:54.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:06:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 6, 32), 0.86, 94.59, 0.0, 21.42, 12.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:06:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:06:32
2025-12-25T01:06:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:06:55.731 [DEBUG] [Thread-2341] [transport.py] [_log()] starting thread (client mode): 0xb9546d70
2025-12-25T01:06:55.731 [DEBUG] [Thread-2341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:06:55.750 [DEBUG] [Thread-2341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:06:55.750 [INFO] [Thread-2341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:06:55.754 [DEBUG] [Thread-2341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:06:55.754 [DEBUG] [Thread-2341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:06:55.754 [DEBUG] [Thread-2341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:06:55.754 [DEBUG] [Thread-2341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:06:55.754 [DEBUG] [Thread-2341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:06:55.754 [DEBUG] [Thread-2341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:06:55.754 [DEBUG] [Thread-2341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] client lang: <none>
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] server lang: <none>
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] kex follows: False
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] Compression: none
2025-12-25T01:06:55.755 [DEBUG] [Thread-2341] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:06:55.775 [DEBUG] [Thread-2341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:06:55.776 [DEBUG] [Thread-2341] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:06:55.777 [DEBUG] [Thread-2341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:06:55.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:06:55.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:06:55.779 [DEBUG] [Thread-2341] [transport.py] [_log()] userauth is OK
2025-12-25T01:06:55.779 [DEBUG] [Thread-2341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:06:55.779 [DEBUG] [Thread-2341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:06:55.779 [DEBUG] [Thread-2341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:06:55.780 [DEBUG] [Thread-2341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:06:55.802 [INFO] [Thread-2341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:06:55.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:06:56.398 [DEBUG] [Thread-2341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:06:56.398 [DEBUG] [Thread-2341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:06:56.398 [DEBUG] [Thread-2341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:06:56.439 [DEBUG] [Thread-2341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:06:56.439 [DEBUG] [Thread-2341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:06:56.443 [DEBUG] [Thread-2341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:06:56.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:06:56.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:06:56.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:06:56.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:06:56.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:06:56.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:06:56.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:06:56.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:06:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:06:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.962907 -999.00  +12.00  16.98     92  +10.80 1 2 1 3 1     0    0 0.86 -14.10 .N.S. 18.0 17.0 152.4 23.0 13.3 -11.4 13.1 -11.0 12.9 -10.6 13.3 -11.4
2025-12-25T01:06:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:06:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:06:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.962907
2025-12-25T01:06:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:06:56.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:06:56.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:06:56.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:06:56.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T01:06:56.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:06:32', tmtdew=0.86, humidity=94.59, cloud=0.0, wind=21.42, temperature=12.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:06:35.165', atlas_cloud=2, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:02:00')
2025-12-25T01:06:56.468 [DEBUG] [Thread-2341] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:06:56.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:06:56.572 [DEBUG] [Thread-2344] [transport.py] [_log()] starting thread (client mode): 0xb95d7eb0
2025-12-25T01:06:56.572 [DEBUG] [Thread-2344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:06:56.587 [DEBUG] [Thread-2344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:06:56.587 [INFO] [Thread-2344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:06:56.595 [DEBUG] [Thread-2344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:06:56.595 [DEBUG] [Thread-2344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:06:56.595 [DEBUG] [Thread-2344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:06:56.595 [DEBUG] [Thread-2344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:06:56.595 [DEBUG] [Thread-2344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:06:56.595 [DEBUG] [Thread-2344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:06:56.595 [DEBUG] [Thread-2344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] client lang: <none>
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] server lang: <none>
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] kex follows: False
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] Compression: none
2025-12-25T01:06:56.596 [DEBUG] [Thread-2344] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:06:56.653 [DEBUG] [Thread-2344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:06:56.653 [DEBUG] [Thread-2344] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:06:56.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:06:56.654 [DEBUG] [Thread-2344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:06:56.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:06:56.709 [DEBUG] [Thread-2344] [transport.py] [_log()] userauth is OK
2025-12-25T01:06:56.709 [DEBUG] [Thread-2344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:06:56.709 [DEBUG] [Thread-2344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:06:56.709 [DEBUG] [Thread-2344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:06:56.709 [DEBUG] [Thread-2344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:06:56.728 [INFO] [Thread-2344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:06:56.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:06:56.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:06:57.570 [DEBUG] [Thread-2344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:06:57.570 [DEBUG] [Thread-2344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:06:57.618 [DEBUG] [Thread-2344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:06:57.619 [DEBUG] [Thread-2344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:06:57.628 [DEBUG] [Thread-2344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:06:57.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:06:57.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:06:57.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:06:57.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:06:57.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:06:57.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:06:57.664 [DEBUG] [Thread-2344] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:06:59.924 [DEBUG] [Thread-2346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:07:14.977 [DEBUG] [Thread-2347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:07:22.636 [DEBUG] [Thread-2348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:07:25.499 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:07:25.500 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:07:27.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:07:27.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:07:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:07:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 7, 4), 0.86, 94.59, 0.0, 24.98, 12.08, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:07:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:07:04
2025-12-25T01:07:28.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:07:28.699 [DEBUG] [Thread-2349] [transport.py] [_log()] starting thread (client mode): 0xb9590d60
2025-12-25T01:07:28.699 [DEBUG] [Thread-2349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:07:28.718 [DEBUG] [Thread-2349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:07:28.718 [INFO] [Thread-2349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] client lang: <none>
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] server lang: <none>
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] kex follows: False
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] Compression: none
2025-12-25T01:07:28.721 [DEBUG] [Thread-2349] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:07:28.740 [DEBUG] [Thread-2349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:07:28.741 [DEBUG] [Thread-2349] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:07:28.741 [DEBUG] [Thread-2349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:07:28.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:07:28.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:07:28.742 [DEBUG] [Thread-2349] [transport.py] [_log()] userauth is OK
2025-12-25T01:07:28.742 [DEBUG] [Thread-2349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:07:28.742 [DEBUG] [Thread-2349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:07:28.742 [DEBUG] [Thread-2349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:07:28.742 [DEBUG] [Thread-2349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:07:28.757 [INFO] [Thread-2349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:07:28.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:07:29.324 [DEBUG] [Thread-2349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:07:29.324 [DEBUG] [Thread-2349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:07:29.324 [DEBUG] [Thread-2349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:07:29.365 [DEBUG] [Thread-2349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:07:29.365 [DEBUG] [Thread-2349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:07:29.367 [DEBUG] [Thread-2349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:07:29.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:07:29.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:07:29.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:07:29.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:07:29.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:07:29.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:07:29.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:07:29.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:07:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:07:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.963254 -999.00  +11.90  16.98     92  +10.80 1 3 1 3 1     0    0 0.82 -14.44 .Ne.W 16.4 17.0 148.6 24.7 13.3 -9.2 13.1 -9.5 13.0 -9.5 13.3 -9.4
2025-12-25T01:07:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:07:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:07:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.963254
2025-12-25T01:07:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:07:29.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:07:29.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:07:29.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:07:29.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:07:29.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:07:04', tmtdew=0.86, humidity=94.59, cloud=0.0, wind=24.98, temperature=12.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:07:05.146', atlas_cloud=3, atlas_rain=1, zp_data=[1.4247499999999995, 0.9952500000000004, 0.9817499999999999, 1.543499999999999, 1.3795000000000002, 1.6932500000000008, 1.5779999999999994, 1.3872500000000008, 0.8614999999999995, 0.7240000000000002, 0.7797499999999999, 0.9799999999999995, 1.237, 1.1902499999999998, 0.8449999999999998, 0.9330000000000007, 0.7482499999999996, 0.7004999999999999, 0.637999999999999, 0.6472499999999988, 0.7569999999999988, 0.6242499999999991, 0.8012500000000005, 0.9227499999999997, 0.9189999999999996, 0.8905000000000003, 0.8387499999999992, 0.588000000000001, 0.5030000000000001, 0.5410000000000004, 0.746500000000001, 0.9310000000000009, 1.0927499999999988], zp_timestamp='2025-12-24T23:02:00')
2025-12-25T01:07:29.386 [DEBUG] [Thread-2349] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:07:29.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:07:29.470 [DEBUG] [Thread-2352] [transport.py] [_log()] starting thread (client mode): 0xb9544d90
2025-12-25T01:07:29.470 [DEBUG] [Thread-2352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:07:29.485 [DEBUG] [Thread-2352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:07:29.485 [INFO] [Thread-2352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:07:29.492 [DEBUG] [Thread-2352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:07:29.492 [DEBUG] [Thread-2352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] client lang: <none>
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] server lang: <none>
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] kex follows: False
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] Compression: none
2025-12-25T01:07:29.493 [DEBUG] [Thread-2352] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:07:29.549 [DEBUG] [Thread-2352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:07:29.549 [DEBUG] [Thread-2352] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:07:29.550 [DEBUG] [Thread-2352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:07:29.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:07:29.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:07:29.607 [DEBUG] [Thread-2352] [transport.py] [_log()] userauth is OK
2025-12-25T01:07:29.607 [DEBUG] [Thread-2352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:07:29.607 [DEBUG] [Thread-2352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:07:29.607 [DEBUG] [Thread-2352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:07:29.607 [DEBUG] [Thread-2352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:07:29.624 [INFO] [Thread-2352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:07:29.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:07:29.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:07:30.011 [DEBUG] [Thread-2354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:07:30.445 [DEBUG] [Thread-2352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:07:30.445 [DEBUG] [Thread-2352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:07:30.492 [DEBUG] [Thread-2352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:07:30.492 [DEBUG] [Thread-2352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:07:30.501 [DEBUG] [Thread-2352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:07:30.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:07:30.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:07:30.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:07:30.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:07:30.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:07:30.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:07:30.532 [DEBUG] [Thread-2352] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:07:45.047 [DEBUG] [Thread-2355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:08:00.087 [DEBUG] [Thread-2356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:08:00.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:08:00.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:08:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:08:01.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 7, 36), 0.81, 94.6, 0.0, 21.56, 12.0, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:08:01.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:07:36
2025-12-25T01:08:01.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:08:01.533 [DEBUG] [Thread-2357] [transport.py] [_log()] starting thread (client mode): 0xb9546740
2025-12-25T01:08:01.533 [DEBUG] [Thread-2357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:08:01.552 [DEBUG] [Thread-2357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:08:01.552 [INFO] [Thread-2357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:08:01.555 [DEBUG] [Thread-2357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:08:01.555 [DEBUG] [Thread-2357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:08:01.555 [DEBUG] [Thread-2357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:08:01.555 [DEBUG] [Thread-2357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:08:01.555 [DEBUG] [Thread-2357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:08:01.555 [DEBUG] [Thread-2357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] client lang: <none>
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] server lang: <none>
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] kex follows: False
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] Compression: none
2025-12-25T01:08:01.556 [DEBUG] [Thread-2357] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:08:01.574 [DEBUG] [Thread-2357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:08:01.575 [DEBUG] [Thread-2357] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:08:01.575 [DEBUG] [Thread-2357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:08:01.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:08:01.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:08:01.577 [DEBUG] [Thread-2357] [transport.py] [_log()] userauth is OK
2025-12-25T01:08:01.577 [DEBUG] [Thread-2357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:08:01.577 [DEBUG] [Thread-2357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:08:01.577 [DEBUG] [Thread-2357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:08:01.578 [DEBUG] [Thread-2357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:08:01.596 [INFO] [Thread-2357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:08:01.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:08:02.180 [DEBUG] [Thread-2357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:08:02.180 [DEBUG] [Thread-2357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:08:02.181 [DEBUG] [Thread-2357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:08:02.221 [DEBUG] [Thread-2357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:08:02.221 [DEBUG] [Thread-2357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:08:02.225 [DEBUG] [Thread-2357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:08:02.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:08:02.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:08:02.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:08:02.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:08:02.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:08:02.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:08:02.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:08:02.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:08:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:08:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.963254 -999.00  +11.90  16.98     92  +10.80 1 3 1 3 1     0    0 0.82 -14.44 .Ne.W 16.4 17.0 148.6 24.7 13.3 -9.2 13.1 -9.5 13.0 -9.5 13.3 -9.4
2025-12-25T01:08:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:08:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:08:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.963254
2025-12-25T01:08:02.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:08:02.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:08:02.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:08:02.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:08:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:08:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:07:36', tmtdew=0.81, humidity=94.6, cloud=0.0, wind=21.56, temperature=12.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:07:05.146', atlas_cloud=3, atlas_rain=1, zp_data=[2.9567499999999995, 2.6812500000000004, nan, nan, nan, nan, nan, nan, 2.588499999999999, nan, 3.2712499999999993, nan, nan, 2.39625, 1.434499999999999, nan, nan, nan, nan, nan, 2.3499999999999988, 1.9137499999999985, 2.5832500000000005, nan, nan, nan, nan, nan, nan, 1.7485000000000017, 2.719000000000001, nan, nan], zp_timestamp='2025-12-24T23:07:00')
2025-12-25T01:08:02.252 [DEBUG] [Thread-2357] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:08:02.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:08:02.340 [DEBUG] [Thread-2360] [transport.py] [_log()] starting thread (client mode): 0xb95933a0
2025-12-25T01:08:02.341 [DEBUG] [Thread-2360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:08:02.355 [DEBUG] [Thread-2360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:08:02.355 [INFO] [Thread-2360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:08:02.363 [DEBUG] [Thread-2360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:08:02.363 [DEBUG] [Thread-2360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:08:02.363 [DEBUG] [Thread-2360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:08:02.363 [DEBUG] [Thread-2360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:08:02.363 [DEBUG] [Thread-2360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] client lang: <none>
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] server lang: <none>
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] kex follows: False
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] Compression: none
2025-12-25T01:08:02.364 [DEBUG] [Thread-2360] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:08:02.423 [DEBUG] [Thread-2360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:08:02.424 [DEBUG] [Thread-2360] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:08:02.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:08:02.425 [DEBUG] [Thread-2360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:08:02.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:08:02.483 [DEBUG] [Thread-2360] [transport.py] [_log()] userauth is OK
2025-12-25T01:08:02.483 [DEBUG] [Thread-2360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:08:02.483 [DEBUG] [Thread-2360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:08:02.483 [DEBUG] [Thread-2360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:08:02.483 [DEBUG] [Thread-2360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:08:02.497 [INFO] [Thread-2360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:08:02.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:08:02.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:08:03.334 [DEBUG] [Thread-2360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:08:03.335 [DEBUG] [Thread-2360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:08:03.383 [DEBUG] [Thread-2360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:08:03.383 [DEBUG] [Thread-2360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:08:03.392 [DEBUG] [Thread-2360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:08:03.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:08: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')
2025-12-25T01:08:03.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:08:03.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:08:03.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:08:03.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:08:03.429 [DEBUG] [Thread-2360] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:08:15.119 [DEBUG] [Thread-2362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:08:22.716 [DEBUG] [Thread-2363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:08:25.741 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:08:25.742 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:08:30.174 [DEBUG] [Thread-2364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:08:33.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:08:33.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:08:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:08:34.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 8, 8), 0.81, 94.62, 0.0, 22.32, 12.02, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:08:34.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:08:08
2025-12-25T01:08:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:08:34.400 [DEBUG] [Thread-2365] [transport.py] [_log()] starting thread (client mode): 0xb6b02b00
2025-12-25T01:08:34.400 [DEBUG] [Thread-2365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:08:34.420 [DEBUG] [Thread-2365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:08:34.421 [INFO] [Thread-2365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:08:34.424 [DEBUG] [Thread-2365] [transport.py] [_log()] client lang: <none>
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] server lang: <none>
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] kex follows: False
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] Compression: none
2025-12-25T01:08:34.425 [DEBUG] [Thread-2365] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:08:34.443 [DEBUG] [Thread-2365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:08:34.444 [DEBUG] [Thread-2365] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:08:34.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:08:34.445 [DEBUG] [Thread-2365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:08:34.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:08:34.446 [DEBUG] [Thread-2365] [transport.py] [_log()] userauth is OK
2025-12-25T01:08:34.447 [DEBUG] [Thread-2365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:08:34.447 [DEBUG] [Thread-2365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:08:34.447 [DEBUG] [Thread-2365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:08:34.447 [DEBUG] [Thread-2365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:08:34.482 [INFO] [Thread-2365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:08:34.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:08:35.082 [DEBUG] [Thread-2365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:08:35.082 [DEBUG] [Thread-2365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:08:35.082 [DEBUG] [Thread-2365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:08:35.123 [DEBUG] [Thread-2365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:08:35.123 [DEBUG] [Thread-2365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:08:35.127 [DEBUG] [Thread-2365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:08:35.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:08:35.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:08:35.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:08:35.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:08:35.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:08:35.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:08:35.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:08:35.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:08:35.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:08:35.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.963601 -999.00  +11.90  16.02     92  +10.80 1 2 1 3 1     0    0 0.82 -15.33 .Ne.W 17.7 16.0 148.6 23.5 13.3 -11.4 13.2 -10.8 13.0 -11.5 13.3 -11.0
2025-12-25T01:08:35.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:08:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:08:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.963601
2025-12-25T01:08:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:08:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:08:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:08:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:08:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T01:08:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:08:08', tmtdew=0.81, humidity=94.62, cloud=0.0, wind=22.32, temperature=12.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:07:35.126', atlas_cloud=2, atlas_rain=1, zp_data=[2.9567499999999995, 2.6812500000000004, nan, nan, nan, nan, nan, nan, 2.588499999999999, nan, 3.2712499999999993, nan, nan, 2.39625, 1.434499999999999, nan, nan, nan, nan, nan, 2.3499999999999988, 1.9137499999999985, 2.5832500000000005, nan, nan, nan, nan, nan, nan, 1.7485000000000017, 2.719000000000001, nan, nan], zp_timestamp='2025-12-24T23:07:00')
2025-12-25T01:08:35.153 [DEBUG] [Thread-2365] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:08:35.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:08:35.250 [DEBUG] [Thread-2368] [transport.py] [_log()] starting thread (client mode): 0xb9593490
2025-12-25T01:08:35.251 [DEBUG] [Thread-2368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:08:35.265 [DEBUG] [Thread-2368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:08:35.265 [INFO] [Thread-2368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] client lang: <none>
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] server lang: <none>
2025-12-25T01:08:35.273 [DEBUG] [Thread-2368] [transport.py] [_log()] kex follows: False
2025-12-25T01:08:35.274 [DEBUG] [Thread-2368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:08:35.274 [DEBUG] [Thread-2368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:08:35.274 [DEBUG] [Thread-2368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:08:35.274 [DEBUG] [Thread-2368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:08:35.274 [DEBUG] [Thread-2368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:08:35.274 [DEBUG] [Thread-2368] [transport.py] [_log()] Compression: none
2025-12-25T01:08:35.274 [DEBUG] [Thread-2368] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:08:35.334 [DEBUG] [Thread-2368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:08:35.335 [DEBUG] [Thread-2368] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:08:35.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:08:35.336 [DEBUG] [Thread-2368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:08:35.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:08:35.390 [DEBUG] [Thread-2368] [transport.py] [_log()] userauth is OK
2025-12-25T01:08:35.390 [DEBUG] [Thread-2368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:08:35.390 [DEBUG] [Thread-2368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:08:35.390 [DEBUG] [Thread-2368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:08:35.390 [DEBUG] [Thread-2368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:08:35.409 [INFO] [Thread-2368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:08:35.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:08:35.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:08:36.276 [DEBUG] [Thread-2368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:08:36.276 [DEBUG] [Thread-2368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:08:36.324 [DEBUG] [Thread-2368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:08:36.324 [DEBUG] [Thread-2368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:08:36.334 [DEBUG] [Thread-2368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:08:36.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:08:36.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:08:36.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:08:36.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:08:36.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:08:36.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:08:36.370 [DEBUG] [Thread-2368] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:08:45.206 [DEBUG] [Thread-2370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:09:00.248 [DEBUG] [Thread-2371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:09:06.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:09:06.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:09:06.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:09:07.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 8, 40), 0.8, 94.65, 0.0, 21.03, 12.08, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:09:07.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:08:40
2025-12-25T01:09:07.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:09:07.368 [DEBUG] [Thread-2372] [transport.py] [_log()] starting thread (client mode): 0xb9590b50
2025-12-25T01:09:07.368 [DEBUG] [Thread-2372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:09:07.388 [DEBUG] [Thread-2372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:09:07.388 [INFO] [Thread-2372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] client lang: <none>
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] server lang: <none>
2025-12-25T01:09:07.391 [DEBUG] [Thread-2372] [transport.py] [_log()] kex follows: False
2025-12-25T01:09:07.392 [DEBUG] [Thread-2372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:09:07.392 [DEBUG] [Thread-2372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:09:07.392 [DEBUG] [Thread-2372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:09:07.392 [DEBUG] [Thread-2372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:09:07.392 [DEBUG] [Thread-2372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:09:07.392 [DEBUG] [Thread-2372] [transport.py] [_log()] Compression: none
2025-12-25T01:09:07.392 [DEBUG] [Thread-2372] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:09:07.407 [DEBUG] [Thread-2372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:09:07.408 [DEBUG] [Thread-2372] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:09:07.408 [DEBUG] [Thread-2372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:09:07.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:09:07.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:09:07.409 [DEBUG] [Thread-2372] [transport.py] [_log()] userauth is OK
2025-12-25T01:09:07.409 [DEBUG] [Thread-2372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:09:07.409 [DEBUG] [Thread-2372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:09:07.409 [DEBUG] [Thread-2372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:09:07.409 [DEBUG] [Thread-2372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:09:07.422 [INFO] [Thread-2372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:09:07.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:09:08.064 [DEBUG] [Thread-2372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:09:08.065 [DEBUG] [Thread-2372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:09:08.065 [DEBUG] [Thread-2372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:09:08.106 [DEBUG] [Thread-2372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:09:08.106 [DEBUG] [Thread-2372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:09:08.110 [DEBUG] [Thread-2372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:09:08.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:09:08.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:09:08.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:09:08.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:09:08.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:09:08.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:09:08.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:09:08.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.963948 -999.00  +11.90  17.87     92  +10.80 1 3 1 3 1     0    0 0.80 -14.41 ..eS. 19.7 17.9 139.4 23.4 13.3 -8.8 13.1 -10.4 13.0 -9.1 13.3 -11.1
2025-12-25T01:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.963948
2025-12-25T01:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:09:08.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:09:08.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:09:08.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:09:08.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:09:08.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:08:40', tmtdew=0.8, humidity=94.65, cloud=0.0, wind=21.03, temperature=12.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:08:05.107', atlas_cloud=3, atlas_rain=1, zp_data=[2.9567499999999995, 2.6812500000000004, nan, nan, nan, nan, nan, nan, 2.588499999999999, nan, 3.2712499999999993, nan, nan, 2.39625, 1.434499999999999, nan, nan, nan, nan, nan, 2.3499999999999988, 1.9137499999999985, 2.5832500000000005, nan, nan, nan, nan, nan, nan, 1.7485000000000017, 2.719000000000001, nan, nan], zp_timestamp='2025-12-24T23:07:00')
2025-12-25T01:09:08.134 [DEBUG] [Thread-2372] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:09:08.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:09:08.226 [DEBUG] [Thread-2375] [transport.py] [_log()] starting thread (client mode): 0xb9593a90
2025-12-25T01:09:08.226 [DEBUG] [Thread-2375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:09:08.241 [DEBUG] [Thread-2375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:09:08.241 [INFO] [Thread-2375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:09:08.249 [DEBUG] [Thread-2375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:09:08.249 [DEBUG] [Thread-2375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:09:08.249 [DEBUG] [Thread-2375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:09:08.249 [DEBUG] [Thread-2375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:09:08.249 [DEBUG] [Thread-2375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:09:08.249 [DEBUG] [Thread-2375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:09:08.249 [DEBUG] [Thread-2375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:09:08.249 [DEBUG] [Thread-2375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] client lang: <none>
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] server lang: <none>
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] kex follows: False
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] Compression: none
2025-12-25T01:09:08.250 [DEBUG] [Thread-2375] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:09:08.309 [DEBUG] [Thread-2375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:09:08.309 [DEBUG] [Thread-2375] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:09:08.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:09:08.310 [DEBUG] [Thread-2375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:09:08.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:09:08.366 [DEBUG] [Thread-2375] [transport.py] [_log()] userauth is OK
2025-12-25T01:09:08.366 [DEBUG] [Thread-2375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:09:08.366 [DEBUG] [Thread-2375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:09:08.366 [DEBUG] [Thread-2375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:09:08.366 [DEBUG] [Thread-2375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:09:08.387 [INFO] [Thread-2375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:09:08.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:09:08.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:09:09.209 [DEBUG] [Thread-2375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:09:09.209 [DEBUG] [Thread-2375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:09:09.257 [DEBUG] [Thread-2375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:09:09.257 [DEBUG] [Thread-2375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:09:09.266 [DEBUG] [Thread-2375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:09:09.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:09:09.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:09:09.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:09:09.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:09:09.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:09:09.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:09:09.303 [DEBUG] [Thread-2375] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:09:15.283 [DEBUG] [Thread-2377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:09:22.769 [DEBUG] [Thread-2378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:09:25.946 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:09:25.946 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:09:30.330 [DEBUG] [Thread-2379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:09:39.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:09:39.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:09:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:09:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 9, 12), 0.8, 94.69, 0.0, 19.11, 12.1, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:09:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:09:12
2025-12-25T01:09:40.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:09:40.294 [DEBUG] [Thread-2380] [transport.py] [_log()] starting thread (client mode): 0xb9591000
2025-12-25T01:09:40.294 [DEBUG] [Thread-2380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:09:40.314 [DEBUG] [Thread-2380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:09:40.314 [INFO] [Thread-2380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:09:40.317 [DEBUG] [Thread-2380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:09:40.317 [DEBUG] [Thread-2380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:09:40.317 [DEBUG] [Thread-2380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:09:40.317 [DEBUG] [Thread-2380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] client lang: <none>
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] server lang: <none>
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] kex follows: False
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:09:40.318 [DEBUG] [Thread-2380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:09:40.319 [DEBUG] [Thread-2380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:09:40.319 [DEBUG] [Thread-2380] [transport.py] [_log()] Compression: none
2025-12-25T01:09:40.319 [DEBUG] [Thread-2380] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:09:40.339 [DEBUG] [Thread-2380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:09:40.340 [DEBUG] [Thread-2380] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:09:40.340 [DEBUG] [Thread-2380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:09:40.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:09:40.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:09:40.342 [DEBUG] [Thread-2380] [transport.py] [_log()] userauth is OK
2025-12-25T01:09:40.342 [DEBUG] [Thread-2380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:09:40.343 [DEBUG] [Thread-2380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:09:40.343 [DEBUG] [Thread-2380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:09:40.343 [DEBUG] [Thread-2380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:09:40.366 [INFO] [Thread-2380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:09:40.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:09:40.996 [DEBUG] [Thread-2380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:09:40.996 [DEBUG] [Thread-2380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:09:40.997 [DEBUG] [Thread-2380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:09:41.037 [DEBUG] [Thread-2380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:09:41.037 [DEBUG] [Thread-2380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:09:41.041 [DEBUG] [Thread-2380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:09:41.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:09:41.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:09:41.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:09:41.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:09:41.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:09:41.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:09:41.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:09:41.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:09:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:09:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.964643 -999.00  +11.90  19.82     92  +10.80 1 3 1 3 1     0    0 0.78 -16.17 .N.sW 18.4 19.8 149.4 22.0 13.3 -7.9 13.2 -7.4 13.0 -8.4 13.3 -7.7
2025-12-25T01:09:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:09:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:09:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.964643
2025-12-25T01:09:41.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:09:41.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:09:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:09:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:09:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:09:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:09:12', tmtdew=0.8, humidity=94.69, cloud=0.0, wind=19.11, temperature=12.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:09:05.155', atlas_cloud=3, atlas_rain=1, zp_data=[2.9567499999999995, 2.6812500000000004, nan, nan, nan, nan, nan, nan, 2.588499999999999, nan, 3.2712499999999993, nan, nan, 2.39625, 1.434499999999999, nan, nan, nan, nan, nan, 2.3499999999999988, 1.9137499999999985, 2.5832500000000005, nan, nan, nan, nan, nan, nan, 1.7485000000000017, 2.719000000000001, nan, nan], zp_timestamp='2025-12-24T23:07:00')
2025-12-25T01:09:41.069 [DEBUG] [Thread-2380] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:09:41.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:09:41.174 [DEBUG] [Thread-2383] [transport.py] [_log()] starting thread (client mode): 0xb9593d30
2025-12-25T01:09:41.174 [DEBUG] [Thread-2383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:09:41.192 [DEBUG] [Thread-2383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:09:41.192 [INFO] [Thread-2383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:09:41.199 [DEBUG] [Thread-2383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] client lang: <none>
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] server lang: <none>
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] kex follows: False
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] Compression: none
2025-12-25T01:09:41.200 [DEBUG] [Thread-2383] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:09:41.260 [DEBUG] [Thread-2383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:09:41.261 [DEBUG] [Thread-2383] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:09:41.261 [DEBUG] [Thread-2383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:09:41.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:09:41.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:09:41.320 [DEBUG] [Thread-2383] [transport.py] [_log()] userauth is OK
2025-12-25T01:09:41.320 [DEBUG] [Thread-2383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:09:41.320 [DEBUG] [Thread-2383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:09:41.320 [DEBUG] [Thread-2383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:09:41.320 [DEBUG] [Thread-2383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:09:41.338 [INFO] [Thread-2383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:09:41.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:09:41.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:09:42.132 [DEBUG] [Thread-2383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:09:42.132 [DEBUG] [Thread-2383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:09:42.180 [DEBUG] [Thread-2383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:09:42.180 [DEBUG] [Thread-2383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:09:42.189 [DEBUG] [Thread-2383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:09:42.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:09:42.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:09:42.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:09:42.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:09:42.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:09:42.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:09:42.226 [DEBUG] [Thread-2383] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:09:45.367 [DEBUG] [Thread-2385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:10:00.407 [DEBUG] [Thread-2386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:10:12.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:10:12.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:10:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:10:12.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 9, 44), 0.8, 94.67, 0.0, 21.6, 12.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:10:12.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:09:44
2025-12-25T01:10:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:10:13.205 [DEBUG] [Thread-2387] [transport.py] [_log()] starting thread (client mode): 0xb95937f0
2025-12-25T01:10:13.206 [DEBUG] [Thread-2387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:10:13.219 [DEBUG] [Thread-2387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:10:13.219 [INFO] [Thread-2387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:10:13.222 [DEBUG] [Thread-2387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:10:13.222 [DEBUG] [Thread-2387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:10:13.222 [DEBUG] [Thread-2387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:10:13.222 [DEBUG] [Thread-2387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:10:13.222 [DEBUG] [Thread-2387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:10:13.222 [DEBUG] [Thread-2387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:10:13.222 [DEBUG] [Thread-2387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] client lang: <none>
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] server lang: <none>
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] kex follows: False
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] Compression: none
2025-12-25T01:10:13.223 [DEBUG] [Thread-2387] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:10:13.233 [DEBUG] [Thread-2387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:10:13.234 [DEBUG] [Thread-2387] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:10:13.234 [DEBUG] [Thread-2387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:10:13.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:10:13.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:10:13.236 [DEBUG] [Thread-2387] [transport.py] [_log()] userauth is OK
2025-12-25T01:10:13.236 [DEBUG] [Thread-2387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:10:13.236 [DEBUG] [Thread-2387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:10:13.236 [DEBUG] [Thread-2387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:10:13.236 [DEBUG] [Thread-2387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:10:13.260 [INFO] [Thread-2387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:10:13.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:10:14.119 [DEBUG] [Thread-2387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:10:14.119 [DEBUG] [Thread-2387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:10:14.120 [DEBUG] [Thread-2387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:10:14.160 [DEBUG] [Thread-2387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:10:14.160 [DEBUG] [Thread-2387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:10:14.164 [DEBUG] [Thread-2387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:10:14.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:10:14.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:10:14.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:10:14.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:10:14.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:10:14.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:10:14.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:10:14.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:10:14.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:10:14.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.964989 -999.00  +11.90  20.45     92  +10.80 1 3 1 3 1     0    0 0.78 -15.63 .N.SW 17.6 20.4 134.0 23.0 13.3 -7.9 13.2 -6.8 13.0 -8.0 13.3 -7.1
2025-12-25T01:10:14.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:10:14.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:10:14.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.964989
2025-12-25T01:10:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:10:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:10:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:10:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:10:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:10:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:09:44', tmtdew=0.8, humidity=94.67, cloud=0.0, wind=21.6, temperature=12.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:09:35.050', atlas_cloud=3, atlas_rain=1, zp_data=[2.9567499999999995, 2.6812500000000004, nan, nan, nan, nan, nan, nan, 2.588499999999999, nan, 3.2712499999999993, nan, nan, 2.39625, 1.434499999999999, nan, nan, nan, nan, nan, 2.3499999999999988, 1.9137499999999985, 2.5832500000000005, nan, nan, nan, nan, nan, nan, 1.7485000000000017, 2.719000000000001, nan, nan], zp_timestamp='2025-12-24T23:07:00')
2025-12-25T01:10:14.195 [DEBUG] [Thread-2387] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:10:14.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:10:14.298 [DEBUG] [Thread-2390] [transport.py] [_log()] starting thread (client mode): 0xb9590490
2025-12-25T01:10:14.299 [DEBUG] [Thread-2390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:10:14.316 [DEBUG] [Thread-2390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:10:14.317 [INFO] [Thread-2390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:10:14.327 [DEBUG] [Thread-2390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] client lang: <none>
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] server lang: <none>
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] kex follows: False
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:10:14.328 [DEBUG] [Thread-2390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:10:14.329 [DEBUG] [Thread-2390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:10:14.329 [DEBUG] [Thread-2390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:10:14.329 [DEBUG] [Thread-2390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:10:14.329 [DEBUG] [Thread-2390] [transport.py] [_log()] Compression: none
2025-12-25T01:10:14.329 [DEBUG] [Thread-2390] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:10:14.383 [DEBUG] [Thread-2390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:10:14.383 [DEBUG] [Thread-2390] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:10:14.384 [DEBUG] [Thread-2390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:10:14.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:10:14.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:10:14.439 [DEBUG] [Thread-2390] [transport.py] [_log()] userauth is OK
2025-12-25T01:10:14.439 [DEBUG] [Thread-2390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:10:14.439 [DEBUG] [Thread-2390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:10:14.439 [DEBUG] [Thread-2390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:10:14.439 [DEBUG] [Thread-2390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:10:14.458 [INFO] [Thread-2390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:10:14.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:10:14.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:10:15.289 [DEBUG] [Thread-2390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:10:15.289 [DEBUG] [Thread-2390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:10:15.337 [DEBUG] [Thread-2390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:10:15.337 [DEBUG] [Thread-2390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:10:15.346 [DEBUG] [Thread-2390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:10:15.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:10:15.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:10:15.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:10:15.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:10:15.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:10:15.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:10:15.382 [DEBUG] [Thread-2390] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:10:15.437 [DEBUG] [Thread-2392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:10:22.842 [DEBUG] [Thread-2393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:10:26.210 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:10:26.211 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:10:30.487 [DEBUG] [Thread-2394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:10:45.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:10:45.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:10:45.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:10:45.520 [DEBUG] [Thread-2395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:10:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 10, 16), 0.8, 94.67, 0.0, 20.7, 12.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:10:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:10:16
2025-12-25T01:10:46.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:10:46.380 [DEBUG] [Thread-2396] [transport.py] [_log()] starting thread (client mode): 0xb6b00670
2025-12-25T01:10:46.380 [DEBUG] [Thread-2396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:10:46.401 [DEBUG] [Thread-2396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:10:46.401 [INFO] [Thread-2396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:10:46.404 [DEBUG] [Thread-2396] [transport.py] [_log()] client lang: <none>
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] server lang: <none>
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] kex follows: False
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] Compression: none
2025-12-25T01:10:46.405 [DEBUG] [Thread-2396] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:10:46.423 [DEBUG] [Thread-2396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:10:46.423 [DEBUG] [Thread-2396] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:10:46.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:10:46.424 [DEBUG] [Thread-2396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:10:46.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:10:46.426 [DEBUG] [Thread-2396] [transport.py] [_log()] userauth is OK
2025-12-25T01:10:46.427 [DEBUG] [Thread-2396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:10:46.427 [DEBUG] [Thread-2396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:10:46.427 [DEBUG] [Thread-2396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:10:46.427 [DEBUG] [Thread-2396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:10:46.452 [INFO] [Thread-2396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:10:46.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:10:47.092 [DEBUG] [Thread-2396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:10:47.092 [DEBUG] [Thread-2396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:10:47.092 [DEBUG] [Thread-2396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:10:47.133 [DEBUG] [Thread-2396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:10:47.133 [DEBUG] [Thread-2396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:10:47.135 [DEBUG] [Thread-2396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:10:47.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:10:47.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:10:47.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:10:47.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:10:47.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:10:47.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:10:47.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.965337 -999.00  +12.00  14.93     92  +10.80 1 3 1 3 1     0    0 0.78 -15.06 .N.SW 16.8 14.9 147.4 23.6 13.4 -7.3 13.2 -6.1 13.0 -7.1 13.4 -6.4
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.965337
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:10:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:10:16', tmtdew=0.8, humidity=94.67, cloud=0.0, wind=20.7, temperature=12.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:10:05.117', atlas_cloud=3, atlas_rain=1, zp_data=[2.9567499999999995, 2.6812500000000004, nan, nan, nan, nan, nan, nan, 2.588499999999999, nan, 3.2712499999999993, nan, nan, 2.39625, 1.434499999999999, nan, nan, nan, nan, nan, 2.3499999999999988, 1.9137499999999985, 2.5832500000000005, nan, nan, nan, nan, nan, nan, 1.7485000000000017, 2.719000000000001, nan, nan], zp_timestamp='2025-12-24T23:07:00')
2025-12-25T01:10:47.154 [DEBUG] [Thread-2396] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:10:47.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:10:47.235 [DEBUG] [Thread-2399] [transport.py] [_log()] starting thread (client mode): 0xb9593a00
2025-12-25T01:10:47.235 [DEBUG] [Thread-2399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:10:47.250 [DEBUG] [Thread-2399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:10:47.250 [INFO] [Thread-2399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:10:47.257 [DEBUG] [Thread-2399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:10:47.257 [DEBUG] [Thread-2399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:10:47.257 [DEBUG] [Thread-2399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:10:47.257 [DEBUG] [Thread-2399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:10:47.257 [DEBUG] [Thread-2399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:10:47.257 [DEBUG] [Thread-2399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] client lang: <none>
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] server lang: <none>
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] kex follows: False
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] Compression: none
2025-12-25T01:10:47.258 [DEBUG] [Thread-2399] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:10:47.315 [DEBUG] [Thread-2399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:10:47.315 [DEBUG] [Thread-2399] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:10:47.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:10:47.316 [DEBUG] [Thread-2399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:10:47.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:10:47.371 [DEBUG] [Thread-2399] [transport.py] [_log()] userauth is OK
2025-12-25T01:10:47.371 [DEBUG] [Thread-2399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:10:47.371 [DEBUG] [Thread-2399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:10:47.371 [DEBUG] [Thread-2399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:10:47.372 [DEBUG] [Thread-2399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:10:47.390 [INFO] [Thread-2399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:10:47.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:10:47.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:10:48.231 [DEBUG] [Thread-2399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:10:48.232 [DEBUG] [Thread-2399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:10:48.280 [DEBUG] [Thread-2399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:10:48.280 [DEBUG] [Thread-2399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:10:48.289 [DEBUG] [Thread-2399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:10:48.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:10:48.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:10:48.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') -> 00000000
2025-12-25T01:10:48.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:10:48.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:10:48.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:10:48.326 [DEBUG] [Thread-2399] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:11:00.553 [DEBUG] [Thread-2401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:11:15.603 [DEBUG] [Thread-2402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:11:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:11:18.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:11: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
2025-12-25T01:11:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 10, 48), 0.79, 94.72, 0.0, 21.02, 12.02, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:11:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:10:48
2025-12-25T01:11:19.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:11:19.378 [DEBUG] [Thread-2403] [transport.py] [_log()] starting thread (client mode): 0xb6b00670
2025-12-25T01:11:19.379 [DEBUG] [Thread-2403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:11:19.399 [DEBUG] [Thread-2403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:11:19.399 [INFO] [Thread-2403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] client lang: <none>
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] server lang: <none>
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] kex follows: False
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:11:19.402 [DEBUG] [Thread-2403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:11:19.403 [DEBUG] [Thread-2403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:11:19.403 [DEBUG] [Thread-2403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:11:19.403 [DEBUG] [Thread-2403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:11:19.403 [DEBUG] [Thread-2403] [transport.py] [_log()] Compression: none
2025-12-25T01:11:19.403 [DEBUG] [Thread-2403] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:11:19.417 [DEBUG] [Thread-2403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:11:19.418 [DEBUG] [Thread-2403] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:11:19.418 [DEBUG] [Thread-2403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:11:19.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:11:19.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:11:19.419 [DEBUG] [Thread-2403] [transport.py] [_log()] userauth is OK
2025-12-25T01:11:19.419 [DEBUG] [Thread-2403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:11:19.419 [DEBUG] [Thread-2403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:11:19.419 [DEBUG] [Thread-2403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:11:19.419 [DEBUG] [Thread-2403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:11:19.437 [INFO] [Thread-2403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:11:19.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:11:20.090 [DEBUG] [Thread-2403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:11:20.090 [DEBUG] [Thread-2403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:11:20.090 [DEBUG] [Thread-2403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:11:20.130 [DEBUG] [Thread-2403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:11:20.131 [DEBUG] [Thread-2403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:11:20.133 [DEBUG] [Thread-2403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:11:20.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:11:20.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:11:20.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:11:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:11:20.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:11:20.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:11:20.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:11:20.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:11:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:11:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.965684 -999.00  +11.90  21.38     92  +10.80 1 3 1 3 1     0    0 0.78 -14.74 ----- 17.9 21.4 136.4 26.4 13.4 -5.7 13.2 -5.0 13.0 -5.6 13.3 -5.5
2025-12-25T01:11:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:11:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:11:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.965684
2025-12-25T01:11:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:11:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:11:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:11:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:11:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:11:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:10:48', tmtdew=0.79, humidity=94.72, cloud=0.0, wind=21.02, temperature=12.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:10:35.098', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:11:20.154 [DEBUG] [Thread-2403] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:11:20.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:11:20.238 [DEBUG] [Thread-2406] [transport.py] [_log()] starting thread (client mode): 0xb95d6920
2025-12-25T01:11:20.238 [DEBUG] [Thread-2406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:11:20.253 [DEBUG] [Thread-2406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:11:20.253 [INFO] [Thread-2406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:11:20.260 [DEBUG] [Thread-2406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] client lang: <none>
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] server lang: <none>
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] kex follows: False
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] Compression: none
2025-12-25T01:11:20.261 [DEBUG] [Thread-2406] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:11:20.316 [DEBUG] [Thread-2406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:11:20.316 [DEBUG] [Thread-2406] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:11:20.316 [DEBUG] [Thread-2406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:11:20.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:11:20.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:11:20.373 [DEBUG] [Thread-2406] [transport.py] [_log()] userauth is OK
2025-12-25T01:11:20.373 [DEBUG] [Thread-2406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:11:20.373 [DEBUG] [Thread-2406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:11:20.373 [DEBUG] [Thread-2406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:11:20.373 [DEBUG] [Thread-2406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:11:20.387 [INFO] [Thread-2406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:11:20.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:11:20.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:11:21.243 [DEBUG] [Thread-2406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:11:21.243 [DEBUG] [Thread-2406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:11:21.290 [DEBUG] [Thread-2406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:11:21.290 [DEBUG] [Thread-2406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:11:21.298 [DEBUG] [Thread-2406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:11:21.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:11:21.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:11:21.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:11:21.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:11:21.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:11:21.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:11:21.330 [DEBUG] [Thread-2406] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:11:22.916 [DEBUG] [Thread-2408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:11:26.415 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:11:26.416 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:11:30.637 [DEBUG] [Thread-2409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:11:45.691 [DEBUG] [Thread-2410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:11:51.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:11:51.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:11:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:11:52.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 11, 20), 0.8, 94.67, 0.0, 23.08, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:11:52.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:11:20
2025-12-25T01:11:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:11:52.323 [DEBUG] [Thread-2411] [transport.py] [_log()] starting thread (client mode): 0xb9593ee0
2025-12-25T01:11:52.323 [DEBUG] [Thread-2411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:11:52.342 [DEBUG] [Thread-2411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:11:52.342 [INFO] [Thread-2411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] client lang: <none>
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] server lang: <none>
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] kex follows: False
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:11:52.346 [DEBUG] [Thread-2411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:11:52.347 [DEBUG] [Thread-2411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:11:52.347 [DEBUG] [Thread-2411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:11:52.347 [DEBUG] [Thread-2411] [transport.py] [_log()] Compression: none
2025-12-25T01:11:52.347 [DEBUG] [Thread-2411] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:11:52.363 [DEBUG] [Thread-2411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:11:52.364 [DEBUG] [Thread-2411] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:11:52.364 [DEBUG] [Thread-2411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:11:52.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:11:52.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:11:52.366 [DEBUG] [Thread-2411] [transport.py] [_log()] userauth is OK
2025-12-25T01:11:52.366 [DEBUG] [Thread-2411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:11:52.366 [DEBUG] [Thread-2411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:11:52.366 [DEBUG] [Thread-2411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:11:52.367 [DEBUG] [Thread-2411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:11:52.387 [INFO] [Thread-2411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:11:52.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:11:53.039 [DEBUG] [Thread-2411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:11:53.039 [DEBUG] [Thread-2411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:11:53.040 [DEBUG] [Thread-2411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:11:53.080 [DEBUG] [Thread-2411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:11:53.080 [DEBUG] [Thread-2411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:11:53.082 [DEBUG] [Thread-2411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:11:53.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:11:53.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:11:53.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:11:53.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:11:53.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:11:53.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:11:53.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:11:53.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:11:53.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:11:53.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.966031 -999.00  +12.00  20.17     92  +10.80 1 3 1 3 1     0    0 0.81 -14.39 ----- 16.0 20.2 147.6 26.3 13.4 -6.9 13.3 -7.6 13.0 -7.4 13.4 -7.9
2025-12-25T01:11:53.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:11:53.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:11:53.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.966031
2025-12-25T01:11:53.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:11:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:11:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:11:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:11:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:11:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:11:20', tmtdew=0.8, humidity=94.67, cloud=0.0, wind=23.08, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:11:05.078', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:11:53.104 [DEBUG] [Thread-2411] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:11:53.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:11:53.197 [DEBUG] [Thread-2414] [transport.py] [_log()] starting thread (client mode): 0xb9590cd0
2025-12-25T01:11:53.197 [DEBUG] [Thread-2414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:11:53.212 [DEBUG] [Thread-2414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:11:53.212 [INFO] [Thread-2414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] client lang: <none>
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] server lang: <none>
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] kex follows: False
2025-12-25T01:11:53.219 [DEBUG] [Thread-2414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:11:53.220 [DEBUG] [Thread-2414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:11:53.220 [DEBUG] [Thread-2414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:11:53.220 [DEBUG] [Thread-2414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:11:53.220 [DEBUG] [Thread-2414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:11:53.220 [DEBUG] [Thread-2414] [transport.py] [_log()] Compression: none
2025-12-25T01:11:53.220 [DEBUG] [Thread-2414] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:11:53.275 [DEBUG] [Thread-2414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:11:53.275 [DEBUG] [Thread-2414] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:11:53.276 [DEBUG] [Thread-2414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:11:53.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:11:53.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:11:53.332 [DEBUG] [Thread-2414] [transport.py] [_log()] userauth is OK
2025-12-25T01:11:53.332 [DEBUG] [Thread-2414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:11:53.332 [DEBUG] [Thread-2414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:11:53.332 [DEBUG] [Thread-2414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:11:53.333 [DEBUG] [Thread-2414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:11:53.347 [INFO] [Thread-2414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:11:53.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:11:53.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:11:54.195 [DEBUG] [Thread-2414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:11:54.195 [DEBUG] [Thread-2414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:11:54.245 [DEBUG] [Thread-2414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:11:54.245 [DEBUG] [Thread-2414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:11:54.253 [DEBUG] [Thread-2414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:11:54.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:11:54.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:11:54.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:11:54.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:11:54.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:11:54.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:11:54.284 [DEBUG] [Thread-2414] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:12:00.720 [DEBUG] [Thread-2416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:12:15.758 [DEBUG] [Thread-2417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:12:22.983 [DEBUG] [Thread-2418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:12:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:12:24.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:12:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:12:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 11, 52), 0.78, 95.27, 0.0, 21.81, 12.08, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:12:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:11:52
2025-12-25T01:12:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:12:25.288 [DEBUG] [Thread-2419] [transport.py] [_log()] starting thread (client mode): 0xb95d7400
2025-12-25T01:12:25.288 [DEBUG] [Thread-2419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:12:25.308 [DEBUG] [Thread-2419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:12:25.308 [INFO] [Thread-2419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:12:25.311 [DEBUG] [Thread-2419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] client lang: <none>
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] server lang: <none>
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] kex follows: False
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] Compression: none
2025-12-25T01:12:25.312 [DEBUG] [Thread-2419] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:12:25.319 [DEBUG] [Thread-2419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:12:25.320 [DEBUG] [Thread-2419] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:12:25.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:12:25.320 [DEBUG] [Thread-2419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:12:25.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:12:25.321 [DEBUG] [Thread-2419] [transport.py] [_log()] userauth is OK
2025-12-25T01:12:25.321 [DEBUG] [Thread-2419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:12:25.321 [DEBUG] [Thread-2419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:12:25.321 [DEBUG] [Thread-2419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:12:25.321 [DEBUG] [Thread-2419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:12:25.340 [INFO] [Thread-2419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:12:25.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:12:25.971 [DEBUG] [Thread-2419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:12:25.971 [DEBUG] [Thread-2419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:12:25.971 [DEBUG] [Thread-2419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:12:26.013 [DEBUG] [Thread-2419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:12:26.013 [DEBUG] [Thread-2419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:12:26.015 [DEBUG] [Thread-2419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:12:26.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:12:26.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:12:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:12:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:12:26.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:12:26.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:12:26.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:12:26.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:12:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:12:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.966379 -999.00  +12.00  16.77     92  +10.80 1 3 1 3 1     0    0 0.78 -14.61 ----- 19.2 16.8 139.8 24.2 13.4 -7.1 13.3 -6.8 13.1 -7.2 13.4 -7.1
2025-12-25T01:12:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:12:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:12:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.966379
2025-12-25T01:12:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:12:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:12:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:12:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:12:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:12:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:11:52', tmtdew=0.78, humidity=95.27, cloud=0.0, wind=21.81, temperature=12.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:11:35.146', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:12:26.033 [DEBUG] [Thread-2419] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:12:26.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:12:26.120 [DEBUG] [Thread-2422] [transport.py] [_log()] starting thread (client mode): 0xb957a710
2025-12-25T01:12:26.120 [DEBUG] [Thread-2422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:12:26.135 [DEBUG] [Thread-2422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:12:26.135 [INFO] [Thread-2422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:12:26.142 [DEBUG] [Thread-2422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] client lang: <none>
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] server lang: <none>
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] kex follows: False
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] Compression: none
2025-12-25T01:12:26.143 [DEBUG] [Thread-2422] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:12:26.199 [DEBUG] [Thread-2422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:12:26.199 [DEBUG] [Thread-2422] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:12:26.199 [DEBUG] [Thread-2422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:12:26.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:12:26.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:12:26.256 [DEBUG] [Thread-2422] [transport.py] [_log()] userauth is OK
2025-12-25T01:12:26.256 [DEBUG] [Thread-2422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:12:26.256 [DEBUG] [Thread-2422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:12:26.256 [DEBUG] [Thread-2422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:12:26.256 [DEBUG] [Thread-2422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:12:26.271 [INFO] [Thread-2422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:12:26.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:12:26.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:12:26.658 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:12:26.659 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:12:27.188 [DEBUG] [Thread-2422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:12:27.188 [DEBUG] [Thread-2422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:12:27.236 [DEBUG] [Thread-2422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:12:27.236 [DEBUG] [Thread-2422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:12:27.245 [DEBUG] [Thread-2422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:12:27.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:12:27.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:12: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') -> 00000000
2025-12-25T01:12:27.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:12:27.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:12:27.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:12:27.282 [DEBUG] [Thread-2422] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:12:30.792 [DEBUG] [Thread-2424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:12:45.844 [DEBUG] [Thread-2425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:12:57.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:12:57.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:12:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:12:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 12, 24), 0.79, 95.24, 0.0, 20.94, 12.05, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:12:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:12:24
2025-12-25T01:12:58.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:12:58.368 [DEBUG] [Thread-2426] [transport.py] [_log()] starting thread (client mode): 0xb95917e0
2025-12-25T01:12:58.368 [DEBUG] [Thread-2426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:12:58.387 [DEBUG] [Thread-2426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:12:58.388 [INFO] [Thread-2426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] client lang: <none>
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] server lang: <none>
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] kex follows: False
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:12:58.391 [DEBUG] [Thread-2426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:12:58.392 [DEBUG] [Thread-2426] [transport.py] [_log()] Compression: none
2025-12-25T01:12:58.392 [DEBUG] [Thread-2426] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:12:58.409 [DEBUG] [Thread-2426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:12:58.409 [DEBUG] [Thread-2426] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:12:58.410 [DEBUG] [Thread-2426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:12:58.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:12:58.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:12:58.411 [DEBUG] [Thread-2426] [transport.py] [_log()] userauth is OK
2025-12-25T01:12:58.411 [DEBUG] [Thread-2426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:12:58.411 [DEBUG] [Thread-2426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:12:58.411 [DEBUG] [Thread-2426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:12:58.411 [DEBUG] [Thread-2426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:12:58.421 [INFO] [Thread-2426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:12:58.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:12:59.074 [DEBUG] [Thread-2426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:12:59.074 [DEBUG] [Thread-2426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:12:59.074 [DEBUG] [Thread-2426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:12:59.115 [DEBUG] [Thread-2426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:12:59.115 [DEBUG] [Thread-2426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:12:59.117 [DEBUG] [Thread-2426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:12:59.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:12:59.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:12:59.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:12:59.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:12:59.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:12:59.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:12:59.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:12:59.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.966726 -999.00  +12.00  18.76     92  +10.90 1 3 1 3 1     0    0 0.79 -14.33 ----- 18.4 18.8 143.8 25.3 13.4 -4.8 13.3 -4.2 13.1 -5.2 13.4 -4.1
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.966726
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:12:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:12:24', tmtdew=0.79, humidity=95.24, cloud=0.0, wind=20.94, temperature=12.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:12:05.126', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:12:59.137 [DEBUG] [Thread-2426] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:12:59.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:12:59.218 [DEBUG] [Thread-2429] [transport.py] [_log()] starting thread (client mode): 0xb95b1e70
2025-12-25T01:12:59.218 [DEBUG] [Thread-2429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:12:59.232 [DEBUG] [Thread-2429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:12:59.232 [INFO] [Thread-2429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] client lang: <none>
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] server lang: <none>
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] kex follows: False
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:12:59.240 [DEBUG] [Thread-2429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:12:59.241 [DEBUG] [Thread-2429] [transport.py] [_log()] Compression: none
2025-12-25T01:12:59.241 [DEBUG] [Thread-2429] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:12:59.299 [DEBUG] [Thread-2429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:12:59.300 [DEBUG] [Thread-2429] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:12:59.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:12:59.301 [DEBUG] [Thread-2429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:12:59.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:12:59.356 [DEBUG] [Thread-2429] [transport.py] [_log()] userauth is OK
2025-12-25T01:12:59.356 [DEBUG] [Thread-2429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:12:59.356 [DEBUG] [Thread-2429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:12:59.357 [DEBUG] [Thread-2429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:12:59.357 [DEBUG] [Thread-2429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:12:59.378 [INFO] [Thread-2429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:12:59.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:12:59.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:13:00.252 [DEBUG] [Thread-2429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:13:00.253 [DEBUG] [Thread-2429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:13:00.301 [DEBUG] [Thread-2429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:13:00.301 [DEBUG] [Thread-2429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:13:00.310 [DEBUG] [Thread-2429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:13:00.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:13:00.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:13:00.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
2025-12-25T01:13:00.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:13:00.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:13:00.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:13:00.347 [DEBUG] [Thread-2429] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:13:00.879 [DEBUG] [Thread-2431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:13:15.931 [DEBUG] [Thread-2432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:13:23.062 [DEBUG] [Thread-2433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:13:26.862 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:13:26.864 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:13:30.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:13:30.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:13:30.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:13:30.961 [DEBUG] [Thread-2434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:13:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 12, 56), 0.78, 95.27, 0.0, 21.83, 12.08, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:13:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:12:56
2025-12-25T01:13:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:13:31.399 [DEBUG] [Thread-2435] [transport.py] [_log()] starting thread (client mode): 0xb95b11b0
2025-12-25T01:13:31.399 [DEBUG] [Thread-2435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:13:31.420 [DEBUG] [Thread-2435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:13:31.420 [INFO] [Thread-2435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] client lang: <none>
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] server lang: <none>
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] kex follows: False
2025-12-25T01:13:31.423 [DEBUG] [Thread-2435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:13:31.424 [DEBUG] [Thread-2435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:13:31.424 [DEBUG] [Thread-2435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:13:31.424 [DEBUG] [Thread-2435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:13:31.424 [DEBUG] [Thread-2435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:13:31.424 [DEBUG] [Thread-2435] [transport.py] [_log()] Compression: none
2025-12-25T01:13:31.424 [DEBUG] [Thread-2435] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:13:31.441 [DEBUG] [Thread-2435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:13:31.442 [DEBUG] [Thread-2435] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:13:31.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:13:31.443 [DEBUG] [Thread-2435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:13:31.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:13:31.445 [DEBUG] [Thread-2435] [transport.py] [_log()] userauth is OK
2025-12-25T01:13:31.445 [DEBUG] [Thread-2435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:13:31.445 [DEBUG] [Thread-2435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:13:31.445 [DEBUG] [Thread-2435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:13:31.445 [DEBUG] [Thread-2435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:13:31.463 [INFO] [Thread-2435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:13:31.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:13:32.042 [DEBUG] [Thread-2435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:13:32.042 [DEBUG] [Thread-2435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:13:32.042 [DEBUG] [Thread-2435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:13:32.083 [DEBUG] [Thread-2435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:13:32.084 [DEBUG] [Thread-2435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:13:32.087 [DEBUG] [Thread-2435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:13:32.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:13:32.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:13:32.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:13:32.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:13:32.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:13:32.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:13:32.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:13:32.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:13:32.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:13:32.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.967420 -999.00  +12.00  21.23     92  +10.90 1 3 1 3 1     0    0 0.81 -13.67 ----- 17.4 21.2 139.6 24.1 13.5 -5.2 13.3 -4.5 13.2 -4.9 13.4 -4.7
2025-12-25T01:13:32.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:13:32.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:13:32.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.967420
2025-12-25T01:13:32.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:13:32.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:13:32.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:13:32.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:13:32.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:13:32.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:12:56', tmtdew=0.78, humidity=95.27, cloud=0.0, wind=21.83, temperature=12.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:13:05.088', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:13:32.113 [DEBUG] [Thread-2435] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:13:32.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:13:32.210 [DEBUG] [Thread-2438] [transport.py] [_log()] starting thread (client mode): 0xb9592c50
2025-12-25T01:13:32.210 [DEBUG] [Thread-2438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:13:32.227 [DEBUG] [Thread-2438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:13:32.227 [INFO] [Thread-2438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:13:32.235 [DEBUG] [Thread-2438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:13:32.235 [DEBUG] [Thread-2438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:13:32.235 [DEBUG] [Thread-2438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:13:32.235 [DEBUG] [Thread-2438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:13:32.235 [DEBUG] [Thread-2438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:13:32.235 [DEBUG] [Thread-2438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:13:32.236 [DEBUG] [Thread-2438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:13:32.236 [DEBUG] [Thread-2438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:13:32.236 [DEBUG] [Thread-2438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:13:32.236 [DEBUG] [Thread-2438] [transport.py] [_log()] client lang: <none>
2025-12-25T01:13:32.236 [DEBUG] [Thread-2438] [transport.py] [_log()] server lang: <none>
2025-12-25T01:13:32.236 [DEBUG] [Thread-2438] [transport.py] [_log()] kex follows: False
2025-12-25T01:13:32.236 [DEBUG] [Thread-2438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:13:32.236 [DEBUG] [Thread-2438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:13:32.237 [DEBUG] [Thread-2438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:13:32.237 [DEBUG] [Thread-2438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:13:32.237 [DEBUG] [Thread-2438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:13:32.237 [DEBUG] [Thread-2438] [transport.py] [_log()] Compression: none
2025-12-25T01:13:32.237 [DEBUG] [Thread-2438] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:13:32.297 [DEBUG] [Thread-2438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:13:32.298 [DEBUG] [Thread-2438] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:13:32.298 [DEBUG] [Thread-2438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:13:32.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:13:32.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:13:32.359 [DEBUG] [Thread-2438] [transport.py] [_log()] userauth is OK
2025-12-25T01:13:32.360 [DEBUG] [Thread-2438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:13:32.360 [DEBUG] [Thread-2438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:13:32.360 [DEBUG] [Thread-2438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:13:32.360 [DEBUG] [Thread-2438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:13:32.378 [INFO] [Thread-2438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:13:32.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:13:32.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:13:33.242 [DEBUG] [Thread-2438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:13:33.242 [DEBUG] [Thread-2438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:13:33.290 [DEBUG] [Thread-2438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:13:33.290 [DEBUG] [Thread-2438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:13:33.300 [DEBUG] [Thread-2438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:13:33.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:13:33.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:13:33.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:13:33.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:13:33.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:13:33.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:13:33.338 [DEBUG] [Thread-2438] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:13:45.994 [DEBUG] [Thread-2440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:14:01.037 [DEBUG] [Thread-2441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:14:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:14:03.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:14:03.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
2025-12-25T01:14:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 13, 28), 0.79, 95.23, 0.0, 21.79, 12.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:14:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:13:28
2025-12-25T01:14:04.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:14:04.337 [DEBUG] [Thread-2442] [transport.py] [_log()] starting thread (client mode): 0xb6b02440
2025-12-25T01:14:04.337 [DEBUG] [Thread-2442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:14:04.357 [DEBUG] [Thread-2442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:14:04.357 [INFO] [Thread-2442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] client lang: <none>
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] server lang: <none>
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] kex follows: False
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:14:04.360 [DEBUG] [Thread-2442] [transport.py] [_log()] Compression: none
2025-12-25T01:14:04.361 [DEBUG] [Thread-2442] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:14:04.377 [DEBUG] [Thread-2442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:14:04.377 [DEBUG] [Thread-2442] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:14:04.378 [DEBUG] [Thread-2442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:14:04.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:14:04.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:14:04.380 [DEBUG] [Thread-2442] [transport.py] [_log()] userauth is OK
2025-12-25T01:14:04.380 [DEBUG] [Thread-2442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:14:04.380 [DEBUG] [Thread-2442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:14:04.380 [DEBUG] [Thread-2442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:14:04.380 [DEBUG] [Thread-2442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:14:04.404 [INFO] [Thread-2442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:14:04.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:14:05.052 [DEBUG] [Thread-2442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:14:05.052 [DEBUG] [Thread-2442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:14:05.052 [DEBUG] [Thread-2442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:14:05.093 [DEBUG] [Thread-2442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:14:05.093 [DEBUG] [Thread-2442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:14:05.095 [DEBUG] [Thread-2442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:14:05.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:14:05.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:14:05.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:14:05.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:14:05.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:14:05.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:14:05.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:14:05.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:14:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:14:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.967767 -999.00  +12.00  20.35     92  +10.90 1 3 1 3 1     0    0 0.82 -13.19 ----- 21.4 20.4 143.6 24.2 13.5 -5.1 13.4 -4.3 13.2 -5.0 13.5 -4.5
2025-12-25T01:14:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:14:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:14:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.967767
2025-12-25T01:14:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:14:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:14:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:14:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:14:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:14:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:13:28', tmtdew=0.79, humidity=95.23, cloud=0.0, wind=21.79, temperature=12.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:13:35.069', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:14:05.119 [DEBUG] [Thread-2442] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:14:05.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:14:05.223 [DEBUG] [Thread-2445] [transport.py] [_log()] starting thread (client mode): 0xb9590a30
2025-12-25T01:14:05.223 [DEBUG] [Thread-2445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:14:05.237 [DEBUG] [Thread-2445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:14:05.237 [INFO] [Thread-2445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] client lang: <none>
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] server lang: <none>
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] kex follows: False
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] Compression: none
2025-12-25T01:14:05.245 [DEBUG] [Thread-2445] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:14:05.306 [DEBUG] [Thread-2445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:14:05.306 [DEBUG] [Thread-2445] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:14:05.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:14:05.307 [DEBUG] [Thread-2445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:14:05.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:14:05.362 [DEBUG] [Thread-2445] [transport.py] [_log()] userauth is OK
2025-12-25T01:14:05.362 [DEBUG] [Thread-2445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:14:05.362 [DEBUG] [Thread-2445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:14:05.362 [DEBUG] [Thread-2445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:14:05.362 [DEBUG] [Thread-2445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:14:05.381 [INFO] [Thread-2445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:14:05.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:14:05.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:14:06.211 [DEBUG] [Thread-2445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:14:06.212 [DEBUG] [Thread-2445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:14:06.259 [DEBUG] [Thread-2445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:14:06.260 [DEBUG] [Thread-2445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:14:06.268 [DEBUG] [Thread-2445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:14:06.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:14:06.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:14:06.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
2025-12-25T01:14:06.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:14:06.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:14:06.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:14:06.302 [DEBUG] [Thread-2445] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:14:16.070 [DEBUG] [Thread-2447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:14:23.134 [DEBUG] [Thread-2448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:14:27.073 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:14:27.074 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:14:31.131 [DEBUG] [Thread-2449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:14:36.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:14:36.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:14:36.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:14:37.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 14, 32), 0.78, 95.25, 0.0, 22.32, 12.03, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:14:37.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:14:32
2025-12-25T01:14:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:14:37.347 [DEBUG] [Thread-2450] [transport.py] [_log()] starting thread (client mode): 0xb95b1930
2025-12-25T01:14:37.347 [DEBUG] [Thread-2450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:14:37.367 [DEBUG] [Thread-2450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:14:37.367 [INFO] [Thread-2450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] client lang: <none>
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] server lang: <none>
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] kex follows: False
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] Compression: none
2025-12-25T01:14:37.371 [DEBUG] [Thread-2450] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:14:37.387 [DEBUG] [Thread-2450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:14:37.387 [DEBUG] [Thread-2450] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:14:37.387 [DEBUG] [Thread-2450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:14:37.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:14:37.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:14:37.388 [DEBUG] [Thread-2450] [transport.py] [_log()] userauth is OK
2025-12-25T01:14:37.388 [DEBUG] [Thread-2450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:14:37.388 [DEBUG] [Thread-2450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:14:37.388 [DEBUG] [Thread-2450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:14:37.388 [DEBUG] [Thread-2450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:14:37.407 [INFO] [Thread-2450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:14:37.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:14:38.032 [DEBUG] [Thread-2450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:14:38.032 [DEBUG] [Thread-2450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:14:38.032 [DEBUG] [Thread-2450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:14:38.073 [DEBUG] [Thread-2450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:14:38.073 [DEBUG] [Thread-2450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:14:38.076 [DEBUG] [Thread-2450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:14:38.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:14:38.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:14:38.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:14:38.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:14:38.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:14:38.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:14:38.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:14:38.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:14:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:14:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.968115 -999.00  +12.00  17.72     92  +10.90 1 3 1 3 1     0    0 0.85 -12.02 ----- 21.6 17.7 156.6 23.0 13.5 -5.8 13.4 -5.1 13.2 -5.4 13.5 -6.2
2025-12-25T01:14:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:14:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:14:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.968115
2025-12-25T01:14:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:14:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:14:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:14:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:14:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:14:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:14:32', tmtdew=0.78, humidity=95.25, cloud=0.0, wind=22.32, temperature=12.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:14:05.136', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:14:38.096 [DEBUG] [Thread-2450] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:14:38.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:14:38.185 [DEBUG] [Thread-2453] [transport.py] [_log()] starting thread (client mode): 0xb95926e0
2025-12-25T01:14:38.186 [DEBUG] [Thread-2453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:14:38.201 [DEBUG] [Thread-2453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:14:38.201 [INFO] [Thread-2453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] client lang: <none>
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] server lang: <none>
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] kex follows: False
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] Compression: none
2025-12-25T01:14:38.210 [DEBUG] [Thread-2453] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:14:38.265 [DEBUG] [Thread-2453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:14:38.265 [DEBUG] [Thread-2453] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:14:38.265 [DEBUG] [Thread-2453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:14:38.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:14:38.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:14:38.326 [DEBUG] [Thread-2453] [transport.py] [_log()] userauth is OK
2025-12-25T01:14:38.326 [DEBUG] [Thread-2453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:14:38.326 [DEBUG] [Thread-2453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:14:38.326 [DEBUG] [Thread-2453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:14:38.326 [DEBUG] [Thread-2453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:14:38.342 [INFO] [Thread-2453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:14:38.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:14:38.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:14:39.181 [DEBUG] [Thread-2453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:14:39.182 [DEBUG] [Thread-2453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:14:39.229 [DEBUG] [Thread-2453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:14:39.229 [DEBUG] [Thread-2453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:14:39.238 [DEBUG] [Thread-2453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:14:39.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:14:39.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:14:39.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:14:39.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:14:39.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:14:39.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:14:39.269 [DEBUG] [Thread-2453] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:14:46.162 [DEBUG] [Thread-2455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:15:01.210 [DEBUG] [Thread-2456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:15:09.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:15:09.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:15:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:15:09.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 15, 4), 0.77, 95.32, 0.0, 23.29, 12.08, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:15:09.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:15:04
2025-12-25T01:15:10.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:15:10.242 [DEBUG] [Thread-2457] [transport.py] [_log()] starting thread (client mode): 0xb95d4250
2025-12-25T01:15:10.243 [DEBUG] [Thread-2457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:15:10.265 [DEBUG] [Thread-2457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:15:10.266 [INFO] [Thread-2457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:15:10.269 [DEBUG] [Thread-2457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:15:10.269 [DEBUG] [Thread-2457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] client lang: <none>
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] server lang: <none>
2025-12-25T01:15:10.270 [DEBUG] [Thread-2457] [transport.py] [_log()] kex follows: False
2025-12-25T01:15:10.271 [DEBUG] [Thread-2457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:15:10.271 [DEBUG] [Thread-2457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:15:10.271 [DEBUG] [Thread-2457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:15:10.271 [DEBUG] [Thread-2457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:15:10.271 [DEBUG] [Thread-2457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:15:10.271 [DEBUG] [Thread-2457] [transport.py] [_log()] Compression: none
2025-12-25T01:15:10.271 [DEBUG] [Thread-2457] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:15:10.290 [DEBUG] [Thread-2457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:15:10.291 [DEBUG] [Thread-2457] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:15:10.291 [DEBUG] [Thread-2457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:15:10.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:15:10.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:15:10.293 [DEBUG] [Thread-2457] [transport.py] [_log()] userauth is OK
2025-12-25T01:15:10.293 [DEBUG] [Thread-2457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:15:10.294 [DEBUG] [Thread-2457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:15:10.294 [DEBUG] [Thread-2457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:15:10.294 [DEBUG] [Thread-2457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:15:10.318 [INFO] [Thread-2457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:15:10.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:15:10.940 [DEBUG] [Thread-2457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:15:10.940 [DEBUG] [Thread-2457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:15:10.940 [DEBUG] [Thread-2457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:15:10.981 [DEBUG] [Thread-2457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:15:10.981 [DEBUG] [Thread-2457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:15:10.984 [DEBUG] [Thread-2457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:15:10.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:15:10.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:15:11.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:15:11.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:15:11.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:15:11.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:15:11.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:15:11.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:15:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:15:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.968462 -999.00  +12.00  15.55     92  +10.90 1 3 1 3 1     0    0 0.80 -12.97 ----- 15.7 15.6 145.0 24.4 13.5 -6.0 13.4 -5.1 13.2 -5.8 13.5 -5.9
2025-12-25T01:15:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:15:11.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:15:11.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.968462
2025-12-25T01:15:11.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:15:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:15:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:15:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:15:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:15:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:15:04', tmtdew=0.77, humidity=95.32, cloud=0.0, wind=23.29, temperature=12.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:14:35.117', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:15:11.011 [DEBUG] [Thread-2457] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:15:11.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:15:16.237 [DEBUG] [Thread-2460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:15:23.212 [DEBUG] [Thread-2461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:15:27.279 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:15:27.280 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:15:31.281 [DEBUG] [Thread-2462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:15:46.320 [DEBUG] [Thread-2463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:16:01.358 [DEBUG] [Thread-2464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:16:16.396 [DEBUG] [Thread-2465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:16:23.278 [DEBUG] [Thread-2466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:16:27.485 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:16:27.486 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:16:31.432 [DEBUG] [Thread-2467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:16:46.469 [DEBUG] [Thread-2468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:17:01.506 [DEBUG] [Thread-2469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:17:16.539 [DEBUG] [Thread-2470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:17:23.353 [DEBUG] [Thread-2471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:17:25.077 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-25T01:17:27.691 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:17:27.692 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:17:31.572 [DEBUG] [Thread-2472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:17:46.607 [DEBUG] [Thread-2473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:17:55.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:17:55.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:17:55.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:17:55.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 17, 45), 0.72, 95.35, 0.0, 20.54, 12.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:17:55.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:17:45
2025-12-25T01:17:55.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:17:56.113 [DEBUG] [Thread-2474] [transport.py] [_log()] starting thread (client mode): 0xb9579d80
2025-12-25T01:17:56.113 [DEBUG] [Thread-2474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:17:56.133 [DEBUG] [Thread-2474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:17:56.133 [INFO] [Thread-2474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] client lang: <none>
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] server lang: <none>
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] kex follows: False
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:17:56.137 [DEBUG] [Thread-2474] [transport.py] [_log()] Compression: none
2025-12-25T01:17:56.138 [DEBUG] [Thread-2474] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:17:56.155 [DEBUG] [Thread-2474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:17:56.156 [DEBUG] [Thread-2474] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:17:56.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:17:56.157 [DEBUG] [Thread-2474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:17:56.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:17:56.159 [DEBUG] [Thread-2474] [transport.py] [_log()] userauth is OK
2025-12-25T01:17:56.159 [DEBUG] [Thread-2474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:17:56.159 [DEBUG] [Thread-2474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:17:56.159 [DEBUG] [Thread-2474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:17:56.160 [DEBUG] [Thread-2474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:17:56.184 [INFO] [Thread-2474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:17:56.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:17:56.847 [DEBUG] [Thread-2474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:17:56.847 [DEBUG] [Thread-2474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:17:56.848 [DEBUG] [Thread-2474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:17:56.889 [DEBUG] [Thread-2474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:17:56.889 [DEBUG] [Thread-2474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:17:56.893 [DEBUG] [Thread-2474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:17:56.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:17:56.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:17:56.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:17:56.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:17:56.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:17:56.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:17:56.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:17:56.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:17:56.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:17:56.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.970545 -999.00  +12.10  14.12     92  +10.90 1 3 1 3 1     0    0 0.78 -13.26 ----- 14.9 14.1 146.8 22.5 13.6 -4.5 13.5 -4.2 13.3 -4.4 13.6 -4.0
2025-12-25T01:17:56.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:17:56.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:17:56.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.970545
2025-12-25T01:17:56.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:17:56.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:17:56.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:17:56.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:17:56.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:17:56.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:17:45', tmtdew=0.72, humidity=95.35, cloud=0.0, wind=20.54, temperature=12.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:17:35.088', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:17:56.922 [DEBUG] [Thread-2474] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:17:57.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:17:57.017 [DEBUG] [Thread-2477] [transport.py] [_log()] starting thread (client mode): 0xb9591a20
2025-12-25T01:17:57.017 [DEBUG] [Thread-2477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:17:57.035 [DEBUG] [Thread-2477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:17:57.036 [INFO] [Thread-2477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:17:57.045 [DEBUG] [Thread-2477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:17:57.045 [DEBUG] [Thread-2477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:17:57.046 [DEBUG] [Thread-2477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:17:57.046 [DEBUG] [Thread-2477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:17:57.046 [DEBUG] [Thread-2477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:17:57.046 [DEBUG] [Thread-2477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:17:57.046 [DEBUG] [Thread-2477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] client lang: <none>
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] server lang: <none>
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] kex follows: False
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] Compression: none
2025-12-25T01:17:57.047 [DEBUG] [Thread-2477] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:17:57.104 [DEBUG] [Thread-2477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:17:57.104 [DEBUG] [Thread-2477] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:17:57.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:17:57.106 [DEBUG] [Thread-2477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:17:57.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:17:57.160 [DEBUG] [Thread-2477] [transport.py] [_log()] userauth is OK
2025-12-25T01:17:57.160 [DEBUG] [Thread-2477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:17:57.160 [DEBUG] [Thread-2477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:17:57.160 [DEBUG] [Thread-2477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:17:57.161 [DEBUG] [Thread-2477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:17:57.180 [INFO] [Thread-2477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:17:57.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:17:57.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:17:57.989 [DEBUG] [Thread-2477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:17:57.990 [DEBUG] [Thread-2477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:17:58.038 [DEBUG] [Thread-2477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:17:58.038 [DEBUG] [Thread-2477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:17:58.047 [DEBUG] [Thread-2477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:17:58.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:17:58.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:17:58.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:17:58.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:17:58.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:17:58.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:17:58.083 [DEBUG] [Thread-2477] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:18:01.637 [DEBUG] [Thread-2479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:18:16.687 [DEBUG] [Thread-2480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:18:23.428 [DEBUG] [Thread-2481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:18:27.895 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:18:27.897 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:18:28.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:18:28.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:18:28.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:18:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 18, 17), 0.71, 95.38, 0.0, 22.13, 12.1, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:18:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:18:17
2025-12-25T01:18:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:18:29.120 [DEBUG] [Thread-2482] [transport.py] [_log()] starting thread (client mode): 0xbbfcffd0
2025-12-25T01:18:29.120 [DEBUG] [Thread-2482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:18:29.141 [DEBUG] [Thread-2482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:18:29.141 [INFO] [Thread-2482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] client lang: <none>
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] server lang: <none>
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] kex follows: False
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] Compression: none
2025-12-25T01:18:29.144 [DEBUG] [Thread-2482] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:18:29.160 [DEBUG] [Thread-2482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:18:29.160 [DEBUG] [Thread-2482] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:18:29.160 [DEBUG] [Thread-2482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:18:29.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:18:29.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:18:29.161 [DEBUG] [Thread-2482] [transport.py] [_log()] userauth is OK
2025-12-25T01:18:29.161 [DEBUG] [Thread-2482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:18:29.161 [DEBUG] [Thread-2482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:18:29.161 [DEBUG] [Thread-2482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:18:29.161 [DEBUG] [Thread-2482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:18:29.178 [INFO] [Thread-2482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:18:29.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:18:29.809 [DEBUG] [Thread-2482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:18:29.809 [DEBUG] [Thread-2482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:18:29.809 [DEBUG] [Thread-2482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:18:29.851 [DEBUG] [Thread-2482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:18:29.851 [DEBUG] [Thread-2482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:18:29.853 [DEBUG] [Thread-2482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:18:29.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:18:29.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:18:29.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:18:29.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:18:29.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:18:29.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:18:29.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.970892 -999.00  +12.10  18.03     92  +10.90 1 3 1 3 1     0    0 0.74 -13.44 ----- 19.2 18.0 141.2 23.6 13.6 -5.3 13.5 -5.4 13.3 -5.3 13.6 -5.0
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.970892
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:18:29.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:18:17', tmtdew=0.71, humidity=95.38, cloud=0.0, wind=22.13, temperature=12.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:18:05.069', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:18:29.874 [DEBUG] [Thread-2482] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:18:29.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:18:29.957 [DEBUG] [Thread-2485] [transport.py] [_log()] starting thread (client mode): 0xb957a5c0
2025-12-25T01:18:29.958 [DEBUG] [Thread-2485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:18:29.972 [DEBUG] [Thread-2485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:18:29.972 [INFO] [Thread-2485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] client lang: <none>
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] server lang: <none>
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] kex follows: False
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] Compression: none
2025-12-25T01:18:29.980 [DEBUG] [Thread-2485] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:18:30.037 [DEBUG] [Thread-2485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:18:30.037 [DEBUG] [Thread-2485] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:18:30.037 [DEBUG] [Thread-2485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:18:30.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:18:30.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:18:30.095 [DEBUG] [Thread-2485] [transport.py] [_log()] userauth is OK
2025-12-25T01:18:30.095 [DEBUG] [Thread-2485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:18:30.095 [DEBUG] [Thread-2485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:18:30.095 [DEBUG] [Thread-2485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:18:30.095 [DEBUG] [Thread-2485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:18:30.109 [INFO] [Thread-2485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:18:30.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:18:30.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:18:30.962 [DEBUG] [Thread-2485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:18:30.962 [DEBUG] [Thread-2485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:18:31.010 [DEBUG] [Thread-2485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:18:31.010 [DEBUG] [Thread-2485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:18:31.018 [DEBUG] [Thread-2485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:18:31.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:18:31.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:18:31.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:18:31.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:18:31.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:18:31.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:18:31.050 [DEBUG] [Thread-2485] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:18:31.719 [DEBUG] [Thread-2487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:18:46.772 [DEBUG] [Thread-2488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:19:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:19:01.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:19:01.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
2025-12-25T01:19:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 18, 49), 0.72, 95.35, 0.0, 23.66, 12.02, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:19:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:18:49
2025-12-25T01:19:01.808 [DEBUG] [Thread-2489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:19:01.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:19:02.053 [DEBUG] [Thread-2490] [transport.py] [_log()] starting thread (client mode): 0xb957a950
2025-12-25T01:19:02.053 [DEBUG] [Thread-2490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:19:02.074 [DEBUG] [Thread-2490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:19:02.074 [INFO] [Thread-2490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:19:02.078 [DEBUG] [Thread-2490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:19:02.078 [DEBUG] [Thread-2490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:19:02.078 [DEBUG] [Thread-2490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:19:02.078 [DEBUG] [Thread-2490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:19:02.078 [DEBUG] [Thread-2490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:19:02.078 [DEBUG] [Thread-2490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:19:02.078 [DEBUG] [Thread-2490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] client lang: <none>
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] server lang: <none>
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] kex follows: False
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:19:02.079 [DEBUG] [Thread-2490] [transport.py] [_log()] Compression: none
2025-12-25T01:19:02.080 [DEBUG] [Thread-2490] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:19:02.098 [DEBUG] [Thread-2490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:19:02.098 [DEBUG] [Thread-2490] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:19:02.099 [DEBUG] [Thread-2490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:19:02.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:19:02.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:19:02.101 [DEBUG] [Thread-2490] [transport.py] [_log()] userauth is OK
2025-12-25T01:19:02.101 [DEBUG] [Thread-2490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:19:02.101 [DEBUG] [Thread-2490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:19:02.101 [DEBUG] [Thread-2490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:19:02.101 [DEBUG] [Thread-2490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:19:02.125 [INFO] [Thread-2490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:19:02.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:19:02.730 [DEBUG] [Thread-2490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:19:02.731 [DEBUG] [Thread-2490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:19:02.731 [DEBUG] [Thread-2490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:19:02.771 [DEBUG] [Thread-2490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:19:02.771 [DEBUG] [Thread-2490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:19:02.775 [DEBUG] [Thread-2490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:19:02.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:19:02.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:19:02.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:19:02.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:19:02.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:19:02.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:19:02.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:19:02.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:19:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:19:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.971240 -999.00  +12.00  14.99     92  +10.90 1 3 1 3 1     0    0 0.84 -12.82 ----- 19.4 15.0 144.4 21.6 13.6 -6.5 13.5 -6.4 13.3 -6.6 13.6 -5.3
2025-12-25T01:19:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:19:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:19:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.971240
2025-12-25T01:19:02.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:19:02.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:19:02.801 [DEBUG] [Thread-2490] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:19:02.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:19:02.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:19:02.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:19:02.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:18:49', tmtdew=0.72, humidity=95.35, cloud=0.0, wind=23.66, temperature=12.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:18:35.136', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:19:02.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:19:02.898 [DEBUG] [Thread-2493] [transport.py] [_log()] starting thread (client mode): 0xb9591540
2025-12-25T01:19:02.898 [DEBUG] [Thread-2493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:19:02.912 [DEBUG] [Thread-2493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:19:02.912 [INFO] [Thread-2493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:19:02.920 [DEBUG] [Thread-2493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:19:02.920 [DEBUG] [Thread-2493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:19:02.920 [DEBUG] [Thread-2493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:19:02.920 [DEBUG] [Thread-2493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:19:02.920 [DEBUG] [Thread-2493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] client lang: <none>
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] server lang: <none>
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] kex follows: False
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] Compression: none
2025-12-25T01:19:02.921 [DEBUG] [Thread-2493] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:19:02.981 [DEBUG] [Thread-2493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:19:02.982 [DEBUG] [Thread-2493] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:19:02.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:19:02.983 [DEBUG] [Thread-2493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:19:02.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:19:03.039 [DEBUG] [Thread-2493] [transport.py] [_log()] userauth is OK
2025-12-25T01:19:03.039 [DEBUG] [Thread-2493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:19:03.040 [DEBUG] [Thread-2493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:19:03.040 [DEBUG] [Thread-2493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:19:03.040 [DEBUG] [Thread-2493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:19:03.061 [INFO] [Thread-2493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:19:03.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:19:03.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:19:03.899 [DEBUG] [Thread-2493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:19:03.899 [DEBUG] [Thread-2493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:19:03.947 [DEBUG] [Thread-2493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:19:03.947 [DEBUG] [Thread-2493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:19:03.957 [DEBUG] [Thread-2493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:19:03.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:19:03.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:19:03.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
2025-12-25T01:19:03.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:19:03.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:19:03.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:19:03.992 [DEBUG] [Thread-2493] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:19:16.837 [DEBUG] [Thread-2495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:19:23.490 [DEBUG] [Thread-2496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:19:28.101 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:19:28.102 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:19:31.888 [DEBUG] [Thread-2497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:19:33.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:19:33.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:19:34.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:19:34.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 19, 21), 0.72, 95.33, 0.0, 22.43, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:19:34.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:19:21
2025-12-25T01:19:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:19:34.987 [DEBUG] [Thread-2498] [transport.py] [_log()] starting thread (client mode): 0xb957a380
2025-12-25T01:19:34.987 [DEBUG] [Thread-2498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:19:35.007 [DEBUG] [Thread-2498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:19:35.007 [INFO] [Thread-2498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:19:35.010 [DEBUG] [Thread-2498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:19:35.010 [DEBUG] [Thread-2498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] client lang: <none>
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] server lang: <none>
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] kex follows: False
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] Compression: none
2025-12-25T01:19:35.011 [DEBUG] [Thread-2498] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:19:35.027 [DEBUG] [Thread-2498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:19:35.028 [DEBUG] [Thread-2498] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:19:35.028 [DEBUG] [Thread-2498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:19:35.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:19:35.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:19:35.030 [DEBUG] [Thread-2498] [transport.py] [_log()] userauth is OK
2025-12-25T01:19:35.030 [DEBUG] [Thread-2498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:19:35.030 [DEBUG] [Thread-2498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:19:35.031 [DEBUG] [Thread-2498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:19:35.031 [DEBUG] [Thread-2498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:19:35.052 [INFO] [Thread-2498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:19:35.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:19:35.706 [DEBUG] [Thread-2498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:19:35.706 [DEBUG] [Thread-2498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:19:35.706 [DEBUG] [Thread-2498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:19:35.747 [DEBUG] [Thread-2498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:19:35.747 [DEBUG] [Thread-2498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:19:35.750 [DEBUG] [Thread-2498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:19:35.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:19:35.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:19:35.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:19:35.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:19:35.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:19:35.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:19:35.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:19:35.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:19:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:19:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.971587 -999.00  +12.00  17.50     92  +10.90 1 3 1 3 1     0    0 0.77 -12.47 ----- 18.7 17.5 154.2 26.5 13.6 -5.0 13.5 -4.9 13.2 -5.2 13.6 -6.2
2025-12-25T01:19:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:19:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:19:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.971587
2025-12-25T01:19:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:19:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:19:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:19:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:19:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:19:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:19:21', tmtdew=0.72, humidity=95.33, cloud=0.0, wind=22.43, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:19:05.117', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:19:35.774 [DEBUG] [Thread-2498] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:19:35.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:19:35.869 [DEBUG] [Thread-2501] [transport.py] [_log()] starting thread (client mode): 0xb957ad10
2025-12-25T01:19:35.869 [DEBUG] [Thread-2501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:19:35.884 [DEBUG] [Thread-2501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:19:35.884 [INFO] [Thread-2501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:19:35.892 [DEBUG] [Thread-2501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:19:35.892 [DEBUG] [Thread-2501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:19:35.892 [DEBUG] [Thread-2501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:19:35.892 [DEBUG] [Thread-2501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:19:35.893 [DEBUG] [Thread-2501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:19:35.893 [DEBUG] [Thread-2501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:19:35.893 [DEBUG] [Thread-2501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:19:35.893 [DEBUG] [Thread-2501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:19:35.893 [DEBUG] [Thread-2501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:19:35.893 [DEBUG] [Thread-2501] [transport.py] [_log()] client lang: <none>
2025-12-25T01:19:35.893 [DEBUG] [Thread-2501] [transport.py] [_log()] server lang: <none>
2025-12-25T01:19:35.893 [DEBUG] [Thread-2501] [transport.py] [_log()] kex follows: False
2025-12-25T01:19:35.894 [DEBUG] [Thread-2501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:19:35.894 [DEBUG] [Thread-2501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:19:35.894 [DEBUG] [Thread-2501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:19:35.894 [DEBUG] [Thread-2501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:19:35.894 [DEBUG] [Thread-2501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:19:35.894 [DEBUG] [Thread-2501] [transport.py] [_log()] Compression: none
2025-12-25T01:19:35.894 [DEBUG] [Thread-2501] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:19:35.950 [DEBUG] [Thread-2501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:19:35.951 [DEBUG] [Thread-2501] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:19:35.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:19:35.952 [DEBUG] [Thread-2501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:19:35.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:19:36.007 [DEBUG] [Thread-2501] [transport.py] [_log()] userauth is OK
2025-12-25T01:19:36.007 [DEBUG] [Thread-2501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:19:36.007 [DEBUG] [Thread-2501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:19:36.007 [DEBUG] [Thread-2501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:19:36.007 [DEBUG] [Thread-2501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:19:36.029 [INFO] [Thread-2501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:19:36.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:19:36.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:19:36.832 [DEBUG] [Thread-2501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:19:36.833 [DEBUG] [Thread-2501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:19:36.881 [DEBUG] [Thread-2501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:19:36.881 [DEBUG] [Thread-2501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:19:36.890 [DEBUG] [Thread-2501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:19:36.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:19:36.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:19:36.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:19:36.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:19:36.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:19:36.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:19:36.926 [DEBUG] [Thread-2501] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:19:46.921 [DEBUG] [Thread-2503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:20:01.972 [DEBUG] [Thread-2504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:20:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:20:06.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:20:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:20:07.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 19, 53), 0.71, 95.38, 0.0, 22.96, 12.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:20:07.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:19:53
2025-12-25T01:20:07.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:20:07.897 [DEBUG] [Thread-2505] [transport.py] [_log()] starting thread (client mode): 0xb95d63b0
2025-12-25T01:20:07.898 [DEBUG] [Thread-2505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:20:07.918 [DEBUG] [Thread-2505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:20:07.919 [INFO] [Thread-2505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] client lang: <none>
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] server lang: <none>
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] kex follows: False
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] Compression: none
2025-12-25T01:20:07.922 [DEBUG] [Thread-2505] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:20:07.940 [DEBUG] [Thread-2505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:20:07.940 [DEBUG] [Thread-2505] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:20:07.941 [DEBUG] [Thread-2505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:20:07.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:20:07.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:20:07.943 [DEBUG] [Thread-2505] [transport.py] [_log()] userauth is OK
2025-12-25T01:20:07.943 [DEBUG] [Thread-2505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:20:07.943 [DEBUG] [Thread-2505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:20:07.943 [DEBUG] [Thread-2505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:20:07.943 [DEBUG] [Thread-2505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:20:07.962 [INFO] [Thread-2505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:20:07.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:20:08.855 [DEBUG] [Thread-2505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:20:08.855 [DEBUG] [Thread-2505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:20:08.856 [DEBUG] [Thread-2505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:20:08.895 [DEBUG] [Thread-2505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:20:08.896 [DEBUG] [Thread-2505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:20:08.898 [DEBUG] [Thread-2505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:20:08.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:20:08.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:20:08.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:20:08.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:20:08.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:20:08.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:20:08.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:20:08.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:20:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:20:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.971934 -999.00  +12.10  19.99     92  +10.90 1 3 1 3 1     0    0 0.82 -11.72 ----- 18.9 20.0 145.8 24.4 13.6 -6.4 13.5 -5.7 13.3 -6.6 13.6 -5.6
2025-12-25T01:20:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:20:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:20:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.971934
2025-12-25T01:20:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:20:08.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:20:08.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:20:08.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:20:08.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:20:08.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:19:53', tmtdew=0.71, humidity=95.38, cloud=0.0, wind=22.96, temperature=12.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:19:35.098', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:20:08.937 [DEBUG] [Thread-2505] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:20:09.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:20:09.030 [DEBUG] [Thread-2508] [transport.py] [_log()] starting thread (client mode): 0xb95474f0
2025-12-25T01:20:09.031 [DEBUG] [Thread-2508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:20:09.045 [DEBUG] [Thread-2508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:20:09.046 [INFO] [Thread-2508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:20:09.053 [DEBUG] [Thread-2508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:20:09.053 [DEBUG] [Thread-2508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:20:09.053 [DEBUG] [Thread-2508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:20:09.053 [DEBUG] [Thread-2508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] client lang: <none>
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] server lang: <none>
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] kex follows: False
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] Compression: none
2025-12-25T01:20:09.054 [DEBUG] [Thread-2508] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:20:09.110 [DEBUG] [Thread-2508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:20:09.111 [DEBUG] [Thread-2508] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:20:09.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:20:09.112 [DEBUG] [Thread-2508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:20:09.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:20:09.166 [DEBUG] [Thread-2508] [transport.py] [_log()] userauth is OK
2025-12-25T01:20:09.167 [DEBUG] [Thread-2508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:20:09.167 [DEBUG] [Thread-2508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:20:09.167 [DEBUG] [Thread-2508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:20:09.167 [DEBUG] [Thread-2508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:20:09.186 [INFO] [Thread-2508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:20:09.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:20:09.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:20:10.038 [DEBUG] [Thread-2508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:20:10.038 [DEBUG] [Thread-2508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:20:10.086 [DEBUG] [Thread-2508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:20:10.086 [DEBUG] [Thread-2508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:20:10.094 [DEBUG] [Thread-2508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:20:10.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:20:10.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:20:10.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
2025-12-25T01:20:10.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:20:10.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:20:10.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:20:10.131 [DEBUG] [Thread-2508] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:20:17.008 [DEBUG] [Thread-2510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:20:23.569 [DEBUG] [Thread-2511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:20:28.305 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:20:28.306 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:20:32.064 [DEBUG] [Thread-2512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:20:40.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:20:40.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:20:40.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
2025-12-25T01:20:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 20, 25), 0.71, 95.39, 0.0, 24.12, 12.08, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:20:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:20:25
2025-12-25T01:20:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:20:41.122 [DEBUG] [Thread-2513] [transport.py] [_log()] starting thread (client mode): 0xb9593550
2025-12-25T01:20:41.123 [DEBUG] [Thread-2513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:20:41.144 [DEBUG] [Thread-2513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:20:41.144 [INFO] [Thread-2513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] client lang: <none>
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] server lang: <none>
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] kex follows: False
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:20:41.147 [DEBUG] [Thread-2513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:20:41.148 [DEBUG] [Thread-2513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:20:41.148 [DEBUG] [Thread-2513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:20:41.148 [DEBUG] [Thread-2513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:20:41.148 [DEBUG] [Thread-2513] [transport.py] [_log()] Compression: none
2025-12-25T01:20:41.148 [DEBUG] [Thread-2513] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:20:41.164 [DEBUG] [Thread-2513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:20:41.165 [DEBUG] [Thread-2513] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:20:41.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:20:41.166 [DEBUG] [Thread-2513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:20:41.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:20:41.168 [DEBUG] [Thread-2513] [transport.py] [_log()] userauth is OK
2025-12-25T01:20:41.168 [DEBUG] [Thread-2513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:20:41.168 [DEBUG] [Thread-2513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:20:41.168 [DEBUG] [Thread-2513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:20:41.168 [DEBUG] [Thread-2513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:20:41.192 [INFO] [Thread-2513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:20:41.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:20:41.863 [DEBUG] [Thread-2513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:20:41.863 [DEBUG] [Thread-2513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:20:41.864 [DEBUG] [Thread-2513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:20:41.904 [DEBUG] [Thread-2513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:20:41.904 [DEBUG] [Thread-2513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:20:41.908 [DEBUG] [Thread-2513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:20:41.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:20:41.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:20:41.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:20:41.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:20:41.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:20:41.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:20:41.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:20:41.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:20:41.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:20:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.972281 -999.00  +12.00  19.29     92  +10.90 1 3 1 3 1     0    0 0.87 -10.37 ----- 22.7 19.3 148.6 22.7 13.7 -4.3 13.4 -4.1 13.3 -4.2 13.7 -5.7
2025-12-25T01:20:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:20:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:20:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.972281
2025-12-25T01:20:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:20:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:20:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:20:41.935 [DEBUG] [Thread-2513] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:20:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:20:41.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:20:41.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:20:25', tmtdew=0.71, humidity=95.39, cloud=0.0, wind=24.12, temperature=12.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:20:05.078', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:20:42.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:20:42.030 [DEBUG] [Thread-2516] [transport.py] [_log()] starting thread (client mode): 0xb9590790
2025-12-25T01:20:42.030 [DEBUG] [Thread-2516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:20:42.046 [DEBUG] [Thread-2516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:20:42.046 [INFO] [Thread-2516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:20:42.053 [DEBUG] [Thread-2516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] client lang: <none>
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] server lang: <none>
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] kex follows: False
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:20:42.054 [DEBUG] [Thread-2516] [transport.py] [_log()] Compression: none
2025-12-25T01:20:42.055 [DEBUG] [Thread-2516] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:20:42.114 [DEBUG] [Thread-2516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:20:42.114 [DEBUG] [Thread-2516] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:20:42.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:20:42.116 [DEBUG] [Thread-2516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:20:42.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:20:42.170 [DEBUG] [Thread-2516] [transport.py] [_log()] userauth is OK
2025-12-25T01:20:42.170 [DEBUG] [Thread-2516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:20:42.171 [DEBUG] [Thread-2516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:20:42.171 [DEBUG] [Thread-2516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:20:42.171 [DEBUG] [Thread-2516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:20:42.190 [INFO] [Thread-2516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:20:42.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:20:42.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:20:43.004 [DEBUG] [Thread-2516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:20:43.005 [DEBUG] [Thread-2516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:20:43.052 [DEBUG] [Thread-2516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:20:43.052 [DEBUG] [Thread-2516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:20:43.062 [DEBUG] [Thread-2516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:20:43.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:20:43.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:20:43.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:20:43.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:20:43.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:20:43.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:20:43.105 [DEBUG] [Thread-2516] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:20:47.100 [DEBUG] [Thread-2518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:21:02.138 [DEBUG] [Thread-2519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:21:13.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:21:13.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:21:13.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:21:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 20, 57), 0.71, 95.39, 0.0, 25.16, 11.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:21:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:20:57
2025-12-25T01:21:13.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:21:14.059 [DEBUG] [Thread-2520] [transport.py] [_log()] starting thread (client mode): 0xb95d7eb0
2025-12-25T01:21:14.059 [DEBUG] [Thread-2520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:21:14.080 [DEBUG] [Thread-2520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:21:14.080 [INFO] [Thread-2520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] client lang: <none>
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] server lang: <none>
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] kex follows: False
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:21:14.083 [DEBUG] [Thread-2520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:21:14.084 [DEBUG] [Thread-2520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:21:14.084 [DEBUG] [Thread-2520] [transport.py] [_log()] Compression: none
2025-12-25T01:21:14.084 [DEBUG] [Thread-2520] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:21:14.099 [DEBUG] [Thread-2520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:21:14.099 [DEBUG] [Thread-2520] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:21:14.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:21:14.100 [DEBUG] [Thread-2520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:21:14.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:21:14.141 [DEBUG] [Thread-2520] [transport.py] [_log()] userauth is OK
2025-12-25T01:21:14.141 [DEBUG] [Thread-2520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:21:14.141 [DEBUG] [Thread-2520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:21:14.142 [DEBUG] [Thread-2520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:21:14.142 [DEBUG] [Thread-2520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:21:14.173 [INFO] [Thread-2520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:21:14.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:21:14.828 [DEBUG] [Thread-2520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:21:14.828 [DEBUG] [Thread-2520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:21:14.829 [DEBUG] [Thread-2520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:21:14.869 [DEBUG] [Thread-2520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:21:14.869 [DEBUG] [Thread-2520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:21:14.873 [DEBUG] [Thread-2520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:21:14.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:21:14.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:21:14.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:21:14.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:21:14.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:21:14.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:21:14.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:21:14.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:21:14.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:21:14.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.972628 -999.00  +12.00  17.93     92  +10.80 1 3 1 3 1     0    0 0.83 -9.87 ----- 15.0 17.9 163.8 28.0 13.6 -7.2 13.5 -6.1 13.3 -6.6 13.6 -5.8
2025-12-25T01:21:14.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:21:14.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:21:14.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.972628
2025-12-25T01:21:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:21:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:21:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:21:14.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:21:14.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:21:14.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:20:57', tmtdew=0.71, humidity=95.39, cloud=0.0, wind=25.16, temperature=11.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:20:35.059', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:21:14.902 [DEBUG] [Thread-2520] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:21:14.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:21:14.996 [DEBUG] [Thread-2523] [transport.py] [_log()] starting thread (client mode): 0xb9592b90
2025-12-25T01:21:14.996 [DEBUG] [Thread-2523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:21:15.014 [DEBUG] [Thread-2523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:21:15.015 [INFO] [Thread-2523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:21:15.022 [DEBUG] [Thread-2523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:21:15.022 [DEBUG] [Thread-2523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] client lang: <none>
2025-12-25T01:21:15.023 [DEBUG] [Thread-2523] [transport.py] [_log()] server lang: <none>
2025-12-25T01:21:15.024 [DEBUG] [Thread-2523] [transport.py] [_log()] kex follows: False
2025-12-25T01:21:15.024 [DEBUG] [Thread-2523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:21:15.024 [DEBUG] [Thread-2523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:21:15.024 [DEBUG] [Thread-2523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:21:15.024 [DEBUG] [Thread-2523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:21:15.024 [DEBUG] [Thread-2523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:21:15.024 [DEBUG] [Thread-2523] [transport.py] [_log()] Compression: none
2025-12-25T01:21:15.025 [DEBUG] [Thread-2523] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:21:15.081 [DEBUG] [Thread-2523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:21:15.081 [DEBUG] [Thread-2523] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:21:15.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:21:15.082 [DEBUG] [Thread-2523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:21:15.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:21:15.137 [DEBUG] [Thread-2523] [transport.py] [_log()] userauth is OK
2025-12-25T01:21:15.138 [DEBUG] [Thread-2523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:21:15.138 [DEBUG] [Thread-2523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:21:15.138 [DEBUG] [Thread-2523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:21:15.138 [DEBUG] [Thread-2523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:21:15.158 [INFO] [Thread-2523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:21:15.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:21:15.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:21:15.960 [DEBUG] [Thread-2523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:21:15.961 [DEBUG] [Thread-2523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:21:16.008 [DEBUG] [Thread-2523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:21:16.008 [DEBUG] [Thread-2523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:21:16.017 [DEBUG] [Thread-2523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:21:16.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:21:16.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:21:16.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:21:16.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:21:16.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:21:16.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:21:16.055 [DEBUG] [Thread-2523] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:21:17.166 [DEBUG] [Thread-2525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:21:23.626 [DEBUG] [Thread-2526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:21:28.508 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:21:28.509 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:21:32.216 [DEBUG] [Thread-2527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:21:46.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:21:46.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:21:46.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
2025-12-25T01:21:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 21, 29), 0.71, 95.39, 0.0, 24.6, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:21:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:21:29
2025-12-25T01:21:46.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:21:47.108 [DEBUG] [Thread-2528] [transport.py] [_log()] starting thread (client mode): 0xb95457b0
2025-12-25T01:21:47.108 [DEBUG] [Thread-2528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:21:47.122 [DEBUG] [Thread-2528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:21:47.122 [INFO] [Thread-2528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:21:47.124 [DEBUG] [Thread-2528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:21:47.124 [DEBUG] [Thread-2528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:21:47.124 [DEBUG] [Thread-2528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:21:47.124 [DEBUG] [Thread-2528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] client lang: <none>
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] server lang: <none>
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] kex follows: False
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] Compression: none
2025-12-25T01:21:47.125 [DEBUG] [Thread-2528] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:21:47.137 [DEBUG] [Thread-2528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:21:47.137 [DEBUG] [Thread-2528] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:21:47.137 [DEBUG] [Thread-2528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:21:47.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:21:47.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:21:47.138 [DEBUG] [Thread-2528] [transport.py] [_log()] userauth is OK
2025-12-25T01:21:47.138 [DEBUG] [Thread-2528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:21:47.138 [DEBUG] [Thread-2528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:21:47.138 [DEBUG] [Thread-2528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:21:47.138 [DEBUG] [Thread-2528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:21:47.148 [INFO] [Thread-2528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:21:47.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:21:47.249 [DEBUG] [Thread-2530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:21:47.793 [DEBUG] [Thread-2528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:21:47.793 [DEBUG] [Thread-2528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:21:47.793 [DEBUG] [Thread-2528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:21:47.834 [DEBUG] [Thread-2528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:21:47.834 [DEBUG] [Thread-2528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:21:47.837 [DEBUG] [Thread-2528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:21:47.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:21:47.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:21:47.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:21:47.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:21:47.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:21:47.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:21:47.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:21:47.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:21:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:21:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.973323 -999.00  +12.00  11.24     92  +10.80 1 3 1 3 1     0    0 0.86 -9.49 ----- 17.6 11.2 147.3 23.4 13.6 -4.5 13.5 -4.3 13.3 -4.7 13.6 -5.5
2025-12-25T01:21:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:21:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:21:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.973323
2025-12-25T01:21:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:21:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:21:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:21:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:21:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:21:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:21:29', tmtdew=0.71, humidity=95.39, cloud=0.0, wind=24.6, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:21:35.107', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:21:47.855 [DEBUG] [Thread-2528] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:21:47.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:21:47.954 [DEBUG] [Thread-2532] [transport.py] [_log()] starting thread (client mode): 0xb9544760
2025-12-25T01:21:47.954 [DEBUG] [Thread-2532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:21:47.969 [DEBUG] [Thread-2532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:21:47.969 [INFO] [Thread-2532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:21:47.976 [DEBUG] [Thread-2532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:21:47.976 [DEBUG] [Thread-2532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:21:47.976 [DEBUG] [Thread-2532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:21:47.976 [DEBUG] [Thread-2532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:21:47.976 [DEBUG] [Thread-2532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:21:47.976 [DEBUG] [Thread-2532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:21:47.976 [DEBUG] [Thread-2532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:21:47.976 [DEBUG] [Thread-2532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] client lang: <none>
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] server lang: <none>
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] kex follows: False
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] Compression: none
2025-12-25T01:21:47.977 [DEBUG] [Thread-2532] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:21:48.036 [DEBUG] [Thread-2532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:21:48.036 [DEBUG] [Thread-2532] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:21:48.036 [DEBUG] [Thread-2532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:21:48.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:21:48.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:21:48.093 [DEBUG] [Thread-2532] [transport.py] [_log()] userauth is OK
2025-12-25T01:21:48.093 [DEBUG] [Thread-2532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:21:48.093 [DEBUG] [Thread-2532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:21:48.093 [DEBUG] [Thread-2532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:21:48.093 [DEBUG] [Thread-2532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:21:48.107 [INFO] [Thread-2532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:21:48.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:21:48.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:21:48.934 [DEBUG] [Thread-2532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:21:48.934 [DEBUG] [Thread-2532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:21:48.981 [DEBUG] [Thread-2532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:21:48.981 [DEBUG] [Thread-2532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:21:48.989 [DEBUG] [Thread-2532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:21:48.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:21:48.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:21:49.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') -> 00000000
2025-12-25T01:21:49.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:21:49.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:21:49.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:21:49.021 [DEBUG] [Thread-2532] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:22:02.278 [DEBUG] [Thread-2534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:22:17.321 [DEBUG] [Thread-2535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:22:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:22:19.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:22:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:22:19.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 22, 1), 0.72, 95.37, 0.0, 24.14, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:22:19.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:22:01
2025-12-25T01:22:19.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:22:20.019 [DEBUG] [Thread-2536] [transport.py] [_log()] starting thread (client mode): 0xb95465c0
2025-12-25T01:22:20.019 [DEBUG] [Thread-2536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:22:20.035 [DEBUG] [Thread-2536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:22:20.036 [INFO] [Thread-2536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:22:20.038 [DEBUG] [Thread-2536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] client lang: <none>
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] server lang: <none>
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] kex follows: False
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] Compression: none
2025-12-25T01:22:20.039 [DEBUG] [Thread-2536] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:22:20.059 [DEBUG] [Thread-2536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:22:20.059 [DEBUG] [Thread-2536] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:22:20.060 [DEBUG] [Thread-2536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:22:20.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:22:20.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:22:20.062 [DEBUG] [Thread-2536] [transport.py] [_log()] userauth is OK
2025-12-25T01:22:20.062 [DEBUG] [Thread-2536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:22:20.062 [DEBUG] [Thread-2536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:22:20.062 [DEBUG] [Thread-2536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:22:20.062 [DEBUG] [Thread-2536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:22:20.085 [INFO] [Thread-2536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:22:20.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:22:20.748 [DEBUG] [Thread-2536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:22:20.748 [DEBUG] [Thread-2536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:22:20.748 [DEBUG] [Thread-2536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:22:20.788 [DEBUG] [Thread-2536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:22:20.789 [DEBUG] [Thread-2536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:22:20.791 [DEBUG] [Thread-2536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:22:20.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:22:20.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:22:20.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:22:20.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:22:20.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:22:20.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:22:20.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:22:20.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:22:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:22:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.973670 -999.00  +12.00  18.37     92  +10.90 1 3 1 3 1     0    0 0.91 -8.66 ----- 18.7 18.4 142.6 20.3 13.7 -3.8 13.5 -3.8 13.3 -4.0 13.7 -4.0
2025-12-25T01:22:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:22:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:22:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.973670
2025-12-25T01:22:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:22:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:22:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:22:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:22:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:22:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:22:01', tmtdew=0.72, humidity=95.37, cloud=0.0, wind=24.14, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:22:05.088', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:22:20.811 [DEBUG] [Thread-2536] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:22:20.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:22:20.892 [DEBUG] [Thread-2539] [transport.py] [_log()] starting thread (client mode): 0xb95475b0
2025-12-25T01:22:20.892 [DEBUG] [Thread-2539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:22:20.908 [DEBUG] [Thread-2539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:22:20.908 [INFO] [Thread-2539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:22:20.915 [DEBUG] [Thread-2539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:22:20.915 [DEBUG] [Thread-2539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:22:20.915 [DEBUG] [Thread-2539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:22:20.915 [DEBUG] [Thread-2539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:22:20.915 [DEBUG] [Thread-2539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] client lang: <none>
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] server lang: <none>
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] kex follows: False
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] Compression: none
2025-12-25T01:22:20.916 [DEBUG] [Thread-2539] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:22:20.972 [DEBUG] [Thread-2539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:22:20.973 [DEBUG] [Thread-2539] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:22:20.973 [DEBUG] [Thread-2539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:22:20.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:22:20.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:22:21.029 [DEBUG] [Thread-2539] [transport.py] [_log()] userauth is OK
2025-12-25T01:22:21.029 [DEBUG] [Thread-2539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:22:21.029 [DEBUG] [Thread-2539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:22:21.029 [DEBUG] [Thread-2539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:22:21.029 [DEBUG] [Thread-2539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:22:21.049 [INFO] [Thread-2539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:22:21.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:22:21.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:22:21.864 [DEBUG] [Thread-2539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:22:21.865 [DEBUG] [Thread-2539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:22:21.914 [DEBUG] [Thread-2539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:22:21.914 [DEBUG] [Thread-2539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:22:21.927 [DEBUG] [Thread-2539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:22:21.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:22:21.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:22:21.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:22:21.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:22:21.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:22:21.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:22:21.963 [DEBUG] [Thread-2539] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:22:23.678 [DEBUG] [Thread-2541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:22:28.711 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:22:28.712 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:22:32.352 [DEBUG] [Thread-2542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:22:47.397 [DEBUG] [Thread-2543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:22:51.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:22:51.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:22:51.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:22:52.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 22, 33), 0.71, 95.4, 0.0, 20.13, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:22:52.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:22:33
2025-12-25T01:22:52.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:22:52.972 [DEBUG] [Thread-2544] [transport.py] [_log()] starting thread (client mode): 0xb9558fd0
2025-12-25T01:22:52.972 [DEBUG] [Thread-2544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:22:52.992 [DEBUG] [Thread-2544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:22:52.992 [INFO] [Thread-2544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:22:52.995 [DEBUG] [Thread-2544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] client lang: <none>
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] server lang: <none>
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] kex follows: False
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:22:52.996 [DEBUG] [Thread-2544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:22:52.997 [DEBUG] [Thread-2544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:22:52.997 [DEBUG] [Thread-2544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:22:52.997 [DEBUG] [Thread-2544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:22:52.997 [DEBUG] [Thread-2544] [transport.py] [_log()] Compression: none
2025-12-25T01:22:52.997 [DEBUG] [Thread-2544] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:22:53.015 [DEBUG] [Thread-2544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:22:53.015 [DEBUG] [Thread-2544] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:22:53.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:22:53.016 [DEBUG] [Thread-2544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:22:53.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:22:53.018 [DEBUG] [Thread-2544] [transport.py] [_log()] userauth is OK
2025-12-25T01:22:53.019 [DEBUG] [Thread-2544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:22:53.019 [DEBUG] [Thread-2544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:22:53.019 [DEBUG] [Thread-2544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:22:53.019 [DEBUG] [Thread-2544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:22:53.036 [INFO] [Thread-2544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:22:53.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:22:53.623 [DEBUG] [Thread-2544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:22:53.623 [DEBUG] [Thread-2544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:22:53.624 [DEBUG] [Thread-2544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:22:53.664 [DEBUG] [Thread-2544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:22:53.664 [DEBUG] [Thread-2544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:22:53.668 [DEBUG] [Thread-2544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:22:53.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:22:53.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:22:53.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:22:53.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:22:53.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:22:53.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:22:53.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:22:53.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:22:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:22:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.974017 -999.00  +11.90  22.85     92  +10.80 1 3 1 3 1     0    0 0.89 -8.23 ----- 20.8 22.9 138.6 26.9 13.7 -3.9 13.6 -4.1 13.4 -4.0 13.7 -3.8
2025-12-25T01:22:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:22:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:22:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.974017
2025-12-25T01:22:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:22:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:22:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:22:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:22:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:22:53.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:22:33', tmtdew=0.71, humidity=95.4, cloud=0.0, wind=20.13, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:22:35.069', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:22:53.694 [DEBUG] [Thread-2544] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:22:53.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:22:53.788 [DEBUG] [Thread-2547] [transport.py] [_log()] starting thread (client mode): 0xb95580d0
2025-12-25T01:22:53.788 [DEBUG] [Thread-2547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:22:53.804 [DEBUG] [Thread-2547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:22:53.804 [INFO] [Thread-2547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:22:53.812 [DEBUG] [Thread-2547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:22:53.813 [DEBUG] [Thread-2547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:22:53.813 [DEBUG] [Thread-2547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:22:53.813 [DEBUG] [Thread-2547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:22:53.813 [DEBUG] [Thread-2547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:22:53.813 [DEBUG] [Thread-2547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:22:53.813 [DEBUG] [Thread-2547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] client lang: <none>
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] server lang: <none>
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] kex follows: False
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] Compression: none
2025-12-25T01:22:53.814 [DEBUG] [Thread-2547] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:22:53.873 [DEBUG] [Thread-2547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:22:53.873 [DEBUG] [Thread-2547] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:22:53.874 [DEBUG] [Thread-2547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:22:53.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:22:53.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:22:53.929 [DEBUG] [Thread-2547] [transport.py] [_log()] userauth is OK
2025-12-25T01:22:53.929 [DEBUG] [Thread-2547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:22:53.929 [DEBUG] [Thread-2547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:22:53.930 [DEBUG] [Thread-2547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:22:53.930 [DEBUG] [Thread-2547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:22:53.949 [INFO] [Thread-2547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:22:53.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:22:53.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:22:54.790 [DEBUG] [Thread-2547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:22:54.790 [DEBUG] [Thread-2547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:22:54.839 [DEBUG] [Thread-2547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:22:54.839 [DEBUG] [Thread-2547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:22:54.849 [DEBUG] [Thread-2547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:22:54.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:22:54.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:22:54.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:22:54.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:22:54.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:22:54.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:22:54.886 [DEBUG] [Thread-2547] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:23:02.429 [DEBUG] [Thread-2549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:23:17.468 [DEBUG] [Thread-2550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:23:23.754 [DEBUG] [Thread-2551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:23:24.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:23:24.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:23:24.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
2025-12-25T01:23:25.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 23, 6), 0.7, 95.47, 0.0, 24.63, 12.0, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:23:25.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:23:06
2025-12-25T01:23:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:23:25.853 [DEBUG] [Thread-2552] [transport.py] [_log()] starting thread (client mode): 0xb9547d60
2025-12-25T01:23:25.853 [DEBUG] [Thread-2552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:23:25.873 [DEBUG] [Thread-2552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:23:25.874 [INFO] [Thread-2552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:23:25.876 [DEBUG] [Thread-2552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] client lang: <none>
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] server lang: <none>
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] kex follows: False
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] Compression: none
2025-12-25T01:23:25.877 [DEBUG] [Thread-2552] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:23:25.897 [DEBUG] [Thread-2552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:23:25.897 [DEBUG] [Thread-2552] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:23:25.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:23:25.898 [DEBUG] [Thread-2552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:23:25.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:23:25.900 [DEBUG] [Thread-2552] [transport.py] [_log()] userauth is OK
2025-12-25T01:23:25.901 [DEBUG] [Thread-2552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:23:25.901 [DEBUG] [Thread-2552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:23:25.901 [DEBUG] [Thread-2552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:23:25.901 [DEBUG] [Thread-2552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:23:25.925 [INFO] [Thread-2552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:23:25.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:23:26.493 [DEBUG] [Thread-2552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:23:26.493 [DEBUG] [Thread-2552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:23:26.493 [DEBUG] [Thread-2552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:23:26.534 [DEBUG] [Thread-2552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:23:26.534 [DEBUG] [Thread-2552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:23:26.537 [DEBUG] [Thread-2552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:23:26.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:23:26.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:23:26.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:23:26.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:23:26.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:23:26.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:23:26.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:23:26.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:23:26.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:23:26.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.974364 -999.00  +11.90  24.03     92  +10.80 1 3 1 3 1     0    0 0.92 -7.80 ----- 19.4 24.0 137.8 26.9 13.6 -4.0 13.5 -3.4 13.4 -4.0 13.7 -4.5
2025-12-25T01:23:26.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:23:26.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:23:26.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.974364
2025-12-25T01:23:26.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:23:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:23:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:23:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:23:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:23:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:23:06', tmtdew=0.7, humidity=95.47, cloud=0.0, wind=24.63, temperature=12.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:23:05.050', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:23:26.563 [DEBUG] [Thread-2552] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:23:26.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:23:26.659 [DEBUG] [Thread-2555] [transport.py] [_log()] starting thread (client mode): 0xb9547190
2025-12-25T01:23:26.660 [DEBUG] [Thread-2555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:23:26.675 [DEBUG] [Thread-2555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:23:26.675 [INFO] [Thread-2555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:23:26.683 [DEBUG] [Thread-2555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:23:26.683 [DEBUG] [Thread-2555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:23:26.683 [DEBUG] [Thread-2555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:23:26.683 [DEBUG] [Thread-2555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:23:26.683 [DEBUG] [Thread-2555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:23:26.683 [DEBUG] [Thread-2555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:23:26.683 [DEBUG] [Thread-2555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:23:26.683 [DEBUG] [Thread-2555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] client lang: <none>
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] server lang: <none>
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] kex follows: False
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] Compression: none
2025-12-25T01:23:26.684 [DEBUG] [Thread-2555] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:23:26.745 [DEBUG] [Thread-2555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:23:26.745 [DEBUG] [Thread-2555] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:23:26.746 [DEBUG] [Thread-2555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:23:26.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:23:26.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:23:26.801 [DEBUG] [Thread-2555] [transport.py] [_log()] userauth is OK
2025-12-25T01:23:26.801 [DEBUG] [Thread-2555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:23:26.801 [DEBUG] [Thread-2555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:23:26.801 [DEBUG] [Thread-2555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:23:26.802 [DEBUG] [Thread-2555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:23:26.822 [INFO] [Thread-2555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:23:26.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:23:26.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:23:27.756 [DEBUG] [Thread-2555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:23:27.756 [DEBUG] [Thread-2555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:23:27.804 [DEBUG] [Thread-2555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:23:27.804 [DEBUG] [Thread-2555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:23:27.813 [DEBUG] [Thread-2555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:23:27.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:23:27.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:23:27.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:23:27.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:23:27.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:23:27.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:23:27.850 [DEBUG] [Thread-2555] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:23:28.913 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:23:28.914 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:23:32.507 [DEBUG] [Thread-2557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:23:47.549 [DEBUG] [Thread-2558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:23:57.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:23:57.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:23:57.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
2025-12-25T01:23:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 23, 38), 0.66, 95.42, 0.0, 24.21, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:23:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:23:38
2025-12-25T01:23:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:23:58.849 [DEBUG] [Thread-2559] [transport.py] [_log()] starting thread (client mode): 0xb955a200
2025-12-25T01:23:58.849 [DEBUG] [Thread-2559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:23:58.869 [DEBUG] [Thread-2559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:23:58.869 [INFO] [Thread-2559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] client lang: <none>
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] server lang: <none>
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] kex follows: False
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] Compression: none
2025-12-25T01:23:58.873 [DEBUG] [Thread-2559] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:23:58.890 [DEBUG] [Thread-2559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:23:58.891 [DEBUG] [Thread-2559] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:23:58.891 [DEBUG] [Thread-2559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:23:58.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:23:58.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:23:58.893 [DEBUG] [Thread-2559] [transport.py] [_log()] userauth is OK
2025-12-25T01:23:58.893 [DEBUG] [Thread-2559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:23:58.894 [DEBUG] [Thread-2559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:23:58.894 [DEBUG] [Thread-2559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:23:58.894 [DEBUG] [Thread-2559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:23:58.912 [INFO] [Thread-2559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:23:58.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:23:59.486 [DEBUG] [Thread-2559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:23:59.486 [DEBUG] [Thread-2559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:23:59.487 [DEBUG] [Thread-2559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:23:59.527 [DEBUG] [Thread-2559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:23:59.527 [DEBUG] [Thread-2559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:23:59.529 [DEBUG] [Thread-2559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:23:59.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:23:59.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:23:59.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:23:59.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:23:59.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:23:59.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:23:59.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:23:59.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:23:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:23:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.974712 -999.00  +11.90  22.79     93  +10.80 1 3 1 3 1     0    0 0.94 -6.95 ----- 21.1 22.8 143.6 23.9 13.6 -3.7 13.5 -3.9 13.4 -4.0 13.6 -4.3
2025-12-25T01:23:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:23:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:23:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.974712
2025-12-25T01:23:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:23:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:23:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:23:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:23:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:23:59.546 [DEBUG] [Thread-2559] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:23:59.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:23:38', tmtdew=0.66, humidity=95.42, cloud=0.0, wind=24.21, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:23:35.117', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:23:59.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:23:59.644 [DEBUG] [Thread-2562] [transport.py] [_log()] starting thread (client mode): 0xb95593f0
2025-12-25T01:23:59.645 [DEBUG] [Thread-2562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:23:59.659 [DEBUG] [Thread-2562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:23:59.659 [INFO] [Thread-2562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:23:59.667 [DEBUG] [Thread-2562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:23:59.667 [DEBUG] [Thread-2562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:23:59.667 [DEBUG] [Thread-2562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:23:59.667 [DEBUG] [Thread-2562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:23:59.668 [DEBUG] [Thread-2562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:23:59.668 [DEBUG] [Thread-2562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:23:59.668 [DEBUG] [Thread-2562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:23:59.668 [DEBUG] [Thread-2562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:23:59.668 [DEBUG] [Thread-2562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:23:59.668 [DEBUG] [Thread-2562] [transport.py] [_log()] client lang: <none>
2025-12-25T01:23:59.668 [DEBUG] [Thread-2562] [transport.py] [_log()] server lang: <none>
2025-12-25T01:23:59.668 [DEBUG] [Thread-2562] [transport.py] [_log()] kex follows: False
2025-12-25T01:23:59.669 [DEBUG] [Thread-2562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:23:59.669 [DEBUG] [Thread-2562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:23:59.669 [DEBUG] [Thread-2562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:23:59.669 [DEBUG] [Thread-2562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:23:59.669 [DEBUG] [Thread-2562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:23:59.669 [DEBUG] [Thread-2562] [transport.py] [_log()] Compression: none
2025-12-25T01:23:59.670 [DEBUG] [Thread-2562] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:23:59.725 [DEBUG] [Thread-2562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:23:59.725 [DEBUG] [Thread-2562] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:23:59.726 [DEBUG] [Thread-2562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:23:59.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:23:59.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:23:59.780 [DEBUG] [Thread-2562] [transport.py] [_log()] userauth is OK
2025-12-25T01:23:59.781 [DEBUG] [Thread-2562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:23:59.781 [DEBUG] [Thread-2562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:23:59.781 [DEBUG] [Thread-2562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:23:59.781 [DEBUG] [Thread-2562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:23:59.801 [INFO] [Thread-2562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:23:59.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:23:59.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:24:00.604 [DEBUG] [Thread-2562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:24:00.605 [DEBUG] [Thread-2562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:24:00.653 [DEBUG] [Thread-2562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:24:00.653 [DEBUG] [Thread-2562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:24:00.662 [DEBUG] [Thread-2562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:24:00.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:24:00.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:24:00.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:24:00.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:24:00.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:24:00.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:24:00.699 [DEBUG] [Thread-2562] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:24:02.587 [DEBUG] [Thread-2564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:24:17.635 [DEBUG] [Thread-2565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:24:23.827 [DEBUG] [Thread-2566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:24:29.117 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:24:29.118 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:24:30.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:24:30.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:24:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:24:31.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 24, 10), 0.65, 95.48, 0.0, 23.08, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:24:31.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:24:10
2025-12-25T01:24:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:24:31.670 [DEBUG] [Thread-2567] [transport.py] [_log()] starting thread (client mode): 0xb9558220
2025-12-25T01:24:31.670 [DEBUG] [Thread-2567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:24:31.691 [DEBUG] [Thread-2567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:24:31.691 [INFO] [Thread-2567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] client lang: <none>
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] server lang: <none>
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] kex follows: False
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] Compression: none
2025-12-25T01:24:31.694 [DEBUG] [Thread-2567] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:24:31.712 [DEBUG] [Thread-2567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:24:31.713 [DEBUG] [Thread-2567] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:24:31.713 [DEBUG] [Thread-2567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:24:31.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:24:31.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:24:31.715 [DEBUG] [Thread-2567] [transport.py] [_log()] userauth is OK
2025-12-25T01:24:31.716 [DEBUG] [Thread-2567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:24:31.716 [DEBUG] [Thread-2567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:24:31.716 [DEBUG] [Thread-2567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:24:31.716 [DEBUG] [Thread-2567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:24:31.751 [INFO] [Thread-2567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:24:31.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:24:32.395 [DEBUG] [Thread-2567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:24:32.395 [DEBUG] [Thread-2567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:24:32.396 [DEBUG] [Thread-2567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:24:32.436 [DEBUG] [Thread-2567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:24:32.436 [DEBUG] [Thread-2567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:24:32.439 [DEBUG] [Thread-2567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:24:32.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:24:32.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:24:32.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:24:32.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:24:32.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:24:32.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:24:32.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:24:32.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:24:32.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:24:32.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.974712 -999.00  +11.90  22.79     93  +10.80 1 3 1 3 1     0    0 0.94 -6.95 ----- 21.1 22.8 143.6 23.9 13.6 -3.7 13.5 -3.9 13.4 -4.0 13.6 -4.3
2025-12-25T01:24:32.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:24:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:24:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.974712
2025-12-25T01:24:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:24:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:24:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:24:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:24:32.465 [DEBUG] [Thread-2567] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:24:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:24:32.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:24:10', tmtdew=0.65, humidity=95.48, cloud=0.0, wind=23.08, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:23:35.117', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:24:32.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:24:32.559 [DEBUG] [Thread-2570] [transport.py] [_log()] starting thread (client mode): 0xb95b2b00
2025-12-25T01:24:32.560 [DEBUG] [Thread-2570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:24:32.576 [DEBUG] [Thread-2570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:24:32.576 [INFO] [Thread-2570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:24:32.583 [DEBUG] [Thread-2570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] client lang: <none>
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] server lang: <none>
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] kex follows: False
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:24:32.584 [DEBUG] [Thread-2570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:24:32.585 [DEBUG] [Thread-2570] [transport.py] [_log()] Compression: none
2025-12-25T01:24:32.585 [DEBUG] [Thread-2570] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:24:32.646 [DEBUG] [Thread-2570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:24:32.646 [DEBUG] [Thread-2570] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:24:32.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:24:32.647 [DEBUG] [Thread-2570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:24:32.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:24:32.668 [DEBUG] [Thread-2572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:24:32.708 [DEBUG] [Thread-2570] [transport.py] [_log()] userauth is OK
2025-12-25T01:24:32.708 [DEBUG] [Thread-2570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:24:32.709 [DEBUG] [Thread-2570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:24:32.709 [DEBUG] [Thread-2570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:24:32.709 [DEBUG] [Thread-2570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:24:32.728 [INFO] [Thread-2570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:24:32.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:24:32.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:24:33.540 [DEBUG] [Thread-2570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:24:33.540 [DEBUG] [Thread-2570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:24:33.588 [DEBUG] [Thread-2570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:24:33.589 [DEBUG] [Thread-2570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:24:33.599 [DEBUG] [Thread-2570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:24:33.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:24:33.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')
2025-12-25T01:24:33.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:24:33.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:24:33.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:24:33.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:24:33.636 [DEBUG] [Thread-2570] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:24:47.717 [DEBUG] [Thread-2573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:25:02.753 [DEBUG] [Thread-2574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:25:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:25:03.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:25:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:25:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 24, 42), 0.65, 95.47, 0.0, 22.39, 11.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:25:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:24:42
2025-12-25T01:25:04.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:25:04.633 [DEBUG] [Thread-2575] [transport.py] [_log()] starting thread (client mode): 0xb95475b0
2025-12-25T01:25:04.633 [DEBUG] [Thread-2575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:25:04.654 [DEBUG] [Thread-2575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:25:04.654 [INFO] [Thread-2575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:25:04.657 [DEBUG] [Thread-2575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:25:04.657 [DEBUG] [Thread-2575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:25:04.657 [DEBUG] [Thread-2575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:25:04.657 [DEBUG] [Thread-2575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:25:04.657 [DEBUG] [Thread-2575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:25:04.657 [DEBUG] [Thread-2575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] client lang: <none>
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] server lang: <none>
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] kex follows: False
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] Compression: none
2025-12-25T01:25:04.658 [DEBUG] [Thread-2575] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:25:04.667 [DEBUG] [Thread-2575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:25:04.667 [DEBUG] [Thread-2575] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:25:04.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:25:04.668 [DEBUG] [Thread-2575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:25:04.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:25:04.670 [DEBUG] [Thread-2575] [transport.py] [_log()] userauth is OK
2025-12-25T01:25:04.670 [DEBUG] [Thread-2575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:25:04.670 [DEBUG] [Thread-2575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:25:04.670 [DEBUG] [Thread-2575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:25:04.671 [DEBUG] [Thread-2575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:25:04.688 [INFO] [Thread-2575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:25:04.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:25:05.663 [DEBUG] [Thread-2575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:25:05.663 [DEBUG] [Thread-2575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:25:05.664 [DEBUG] [Thread-2575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:25:05.706 [DEBUG] [Thread-2575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:25:05.706 [DEBUG] [Thread-2575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:25:05.708 [DEBUG] [Thread-2575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:25:05.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:25:05.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:25:05.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:25:05.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:25:05.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:25:05.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:25:05.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:25:05.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:25:05.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:25:05.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.975059 -999.00  +11.90  17.37     93  +10.80 1 3 1 3 1     0    0 0.94 -7.20 ----- 21.6 17.4 143.4 24.9 13.7 -4.7 13.6 -4.6 13.4 -4.9 13.6 -5.3
2025-12-25T01:25:05.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:25:05.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:25:05.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.975059
2025-12-25T01:25:05.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:25:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:25:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:25:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:25:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:25:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:24:42', tmtdew=0.65, humidity=95.47, cloud=0.0, wind=22.39, temperature=11.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:24:05.098', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:25:05.733 [DEBUG] [Thread-2575] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:25:05.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:25:05.828 [DEBUG] [Thread-2578] [transport.py] [_log()] starting thread (client mode): 0xb955b5b0
2025-12-25T01:25:05.828 [DEBUG] [Thread-2578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:25:05.843 [DEBUG] [Thread-2578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:25:05.843 [INFO] [Thread-2578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:25:05.851 [DEBUG] [Thread-2578] [transport.py] [_log()] client lang: <none>
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] server lang: <none>
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] kex follows: False
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] Compression: none
2025-12-25T01:25:05.852 [DEBUG] [Thread-2578] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:25:05.912 [DEBUG] [Thread-2578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:25:05.912 [DEBUG] [Thread-2578] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:25:05.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:25:05.914 [DEBUG] [Thread-2578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:25:05.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:25:05.972 [DEBUG] [Thread-2578] [transport.py] [_log()] userauth is OK
2025-12-25T01:25:05.972 [DEBUG] [Thread-2578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:25:05.972 [DEBUG] [Thread-2578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:25:05.972 [DEBUG] [Thread-2578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:25:05.972 [DEBUG] [Thread-2578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:25:05.991 [INFO] [Thread-2578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:25:05.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:25:05.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:25:06.903 [DEBUG] [Thread-2578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:25:06.910 [DEBUG] [Thread-2578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:25:06.951 [DEBUG] [Thread-2578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:25:06.951 [DEBUG] [Thread-2578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:25:06.961 [DEBUG] [Thread-2578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:25:06.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:25:06.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:25:06.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:25:06.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:25:06.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:25:06.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:25:06.997 [DEBUG] [Thread-2578] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:25:17.786 [DEBUG] [Thread-2580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:25:23.885 [DEBUG] [Thread-2581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:25:29.319 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:25:29.320 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:25:32.842 [DEBUG] [Thread-2582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:25:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:25:37.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:25:37.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
2025-12-25T01:25:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 25, 14), 0.65, 95.48, 0.0, 24.56, 11.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:25:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:25:14
2025-12-25T01:25:37.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:25:38.028 [DEBUG] [Thread-2583] [transport.py] [_log()] starting thread (client mode): 0xb957ad40
2025-12-25T01:25:38.029 [DEBUG] [Thread-2583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:25:38.049 [DEBUG] [Thread-2583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:25:38.049 [INFO] [Thread-2583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:25:38.052 [DEBUG] [Thread-2583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:25:38.052 [DEBUG] [Thread-2583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:25:38.052 [DEBUG] [Thread-2583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:25:38.052 [DEBUG] [Thread-2583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:25:38.052 [DEBUG] [Thread-2583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] client lang: <none>
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] server lang: <none>
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] kex follows: False
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] Compression: none
2025-12-25T01:25:38.053 [DEBUG] [Thread-2583] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:25:38.069 [DEBUG] [Thread-2583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:25:38.070 [DEBUG] [Thread-2583] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:25:38.070 [DEBUG] [Thread-2583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:25:38.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:25:38.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:25:38.071 [DEBUG] [Thread-2583] [transport.py] [_log()] userauth is OK
2025-12-25T01:25:38.071 [DEBUG] [Thread-2583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:25:38.071 [DEBUG] [Thread-2583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:25:38.071 [DEBUG] [Thread-2583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:25:38.071 [DEBUG] [Thread-2583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:25:38.080 [INFO] [Thread-2583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:25:38.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:25:38.734 [DEBUG] [Thread-2583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:25:38.734 [DEBUG] [Thread-2583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:25:38.734 [DEBUG] [Thread-2583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:25:38.775 [DEBUG] [Thread-2583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:25:38.775 [DEBUG] [Thread-2583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:25:38.777 [DEBUG] [Thread-2583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:25:38.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:25:38.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:25:38.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:25:38.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:25:38.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:25:38.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:25:38.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:25:38.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.975406 -999.00  +11.90  15.24     93  +10.80 1 3 1 3 1     0    0 0.96 -6.65 ----- 20.0 15.2 163.0 30.1 13.6 -5.7 13.5 -6.2 13.4 -6.6 13.7 -5.1
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.975406
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:25:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:25:14', tmtdew=0.65, humidity=95.48, cloud=0.0, wind=24.56, temperature=11.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:24:35.078', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:25:38.797 [DEBUG] [Thread-2583] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:25:38.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:25:38.880 [DEBUG] [Thread-2586] [transport.py] [_log()] starting thread (client mode): 0xb9578e20
2025-12-25T01:25:38.880 [DEBUG] [Thread-2586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:25:38.894 [DEBUG] [Thread-2586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:25:38.894 [INFO] [Thread-2586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:25:38.901 [DEBUG] [Thread-2586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:25:38.901 [DEBUG] [Thread-2586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] client lang: <none>
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] server lang: <none>
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] kex follows: False
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] Compression: none
2025-12-25T01:25:38.902 [DEBUG] [Thread-2586] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:25:38.958 [DEBUG] [Thread-2586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:25:38.958 [DEBUG] [Thread-2586] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:25:38.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:25:38.959 [DEBUG] [Thread-2586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:25:38.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:25:39.015 [DEBUG] [Thread-2586] [transport.py] [_log()] userauth is OK
2025-12-25T01:25:39.015 [DEBUG] [Thread-2586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:25:39.015 [DEBUG] [Thread-2586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:25:39.015 [DEBUG] [Thread-2586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:25:39.015 [DEBUG] [Thread-2586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:25:39.029 [INFO] [Thread-2586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:25:39.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:25:39.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:25:39.835 [DEBUG] [Thread-2586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:25:39.835 [DEBUG] [Thread-2586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:25:39.882 [DEBUG] [Thread-2586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:25:39.882 [DEBUG] [Thread-2586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:25:39.891 [DEBUG] [Thread-2586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:25:39.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:25:39.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:25:39.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
2025-12-25T01:25:39.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:25:39.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:25:39.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:25:39.922 [DEBUG] [Thread-2586] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:25:47.874 [DEBUG] [Thread-2588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:26:02.913 [DEBUG] [Thread-2589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:26:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:26:09.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:26:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:26:10.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 25, 46), 0.64, 95.5, 0.0, 24.03, 12.0, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:26:10.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:25:46
2025-12-25T01:26:10.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:26:10.876 [DEBUG] [Thread-2590] [transport.py] [_log()] starting thread (client mode): 0xb95595d0
2025-12-25T01:26:10.876 [DEBUG] [Thread-2590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:26:10.896 [DEBUG] [Thread-2590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:26:10.896 [INFO] [Thread-2590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:26:10.897 [DEBUG] [Thread-2590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:26:10.897 [DEBUG] [Thread-2590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:26:10.897 [DEBUG] [Thread-2590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:26:10.897 [DEBUG] [Thread-2590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:26:10.897 [DEBUG] [Thread-2590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:26:10.897 [DEBUG] [Thread-2590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:26:10.897 [DEBUG] [Thread-2590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:26:10.897 [DEBUG] [Thread-2590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] client lang: <none>
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] server lang: <none>
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] kex follows: False
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] Compression: none
2025-12-25T01:26:10.898 [DEBUG] [Thread-2590] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:26:10.910 [DEBUG] [Thread-2590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:26:10.910 [DEBUG] [Thread-2590] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:26:10.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:26:10.911 [DEBUG] [Thread-2590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:26:10.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:26:10.913 [DEBUG] [Thread-2590] [transport.py] [_log()] userauth is OK
2025-12-25T01:26:10.913 [DEBUG] [Thread-2590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:26:10.913 [DEBUG] [Thread-2590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:26:10.913 [DEBUG] [Thread-2590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:26:10.913 [DEBUG] [Thread-2590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:26:10.929 [INFO] [Thread-2590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:26:10.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:26:11.706 [DEBUG] [Thread-2590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:26:11.706 [DEBUG] [Thread-2590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:26:11.706 [DEBUG] [Thread-2590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:26:11.747 [DEBUG] [Thread-2590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:26:11.747 [DEBUG] [Thread-2590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:26:11.750 [DEBUG] [Thread-2590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:26:11.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:26:11.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:26:11.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:26:11.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:26:11.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:26:11.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:26:11.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:26:11.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:26:11.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:26:11.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.976100 -999.00  +11.90  18.44     93  +10.80 1 3 1 3 1     0    0 0.96 -5.50 ----- 19.9 18.4 145.4 23.2 13.6 -4.8 13.5 -4.9 13.3 -5.0 13.6 -5.3
2025-12-25T01:26:11.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:26:11.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:26:11.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.976100
2025-12-25T01:26:11.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:26:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:26:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:26:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:26:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:26:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:25:46', tmtdew=0.64, humidity=95.5, cloud=0.0, wind=24.03, temperature=12.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:25:35.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:26:11.778 [DEBUG] [Thread-2590] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:26:11.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:26:11.870 [DEBUG] [Thread-2593] [transport.py] [_log()] starting thread (client mode): 0xb9559750
2025-12-25T01:26:11.870 [DEBUG] [Thread-2593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:26:11.885 [DEBUG] [Thread-2593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:26:11.886 [INFO] [Thread-2593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:26:11.893 [DEBUG] [Thread-2593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:26:11.893 [DEBUG] [Thread-2593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:26:11.893 [DEBUG] [Thread-2593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:26:11.893 [DEBUG] [Thread-2593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:26:11.893 [DEBUG] [Thread-2593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:26:11.893 [DEBUG] [Thread-2593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:26:11.893 [DEBUG] [Thread-2593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] client lang: <none>
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] server lang: <none>
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] kex follows: False
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:26:11.894 [DEBUG] [Thread-2593] [transport.py] [_log()] Compression: none
2025-12-25T01:26:11.895 [DEBUG] [Thread-2593] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:26:11.955 [DEBUG] [Thread-2593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:26:11.956 [DEBUG] [Thread-2593] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:26:11.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:26:11.957 [DEBUG] [Thread-2593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:26:11.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:26:12.015 [DEBUG] [Thread-2593] [transport.py] [_log()] userauth is OK
2025-12-25T01:26:12.016 [DEBUG] [Thread-2593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:26:12.016 [DEBUG] [Thread-2593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:26:12.016 [DEBUG] [Thread-2593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:26:12.016 [DEBUG] [Thread-2593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:26:12.041 [INFO] [Thread-2593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:26:12.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:26:12.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:26:12.884 [DEBUG] [Thread-2593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:26:12.884 [DEBUG] [Thread-2593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:26:12.932 [DEBUG] [Thread-2593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:26:12.932 [DEBUG] [Thread-2593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:26:12.941 [DEBUG] [Thread-2593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:26:12.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:26:12.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:26:12.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:26:12.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:26:12.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:26:12.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:26:12.978 [DEBUG] [Thread-2593] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:26:17.947 [DEBUG] [Thread-2595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:26:23.940 [DEBUG] [Thread-2596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:26:29.522 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:26:29.523 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:26:32.991 [DEBUG] [Thread-2597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:26:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:26:43.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:26:43.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:26:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 26, 18), 0.64, 95.52, 0.0, 24.86, 11.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:26:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:26:18
2025-12-25T01:26:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:26:43.975 [DEBUG] [Thread-2598] [transport.py] [_log()] starting thread (client mode): 0xb955a020
2025-12-25T01:26:43.975 [DEBUG] [Thread-2598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:26:43.996 [DEBUG] [Thread-2598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:26:43.997 [INFO] [Thread-2598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] client lang: <none>
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] server lang: <none>
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] kex follows: False
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:26:44.000 [DEBUG] [Thread-2598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:26:44.001 [DEBUG] [Thread-2598] [transport.py] [_log()] Compression: none
2025-12-25T01:26:44.001 [DEBUG] [Thread-2598] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:26:44.017 [DEBUG] [Thread-2598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:26:44.017 [DEBUG] [Thread-2598] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:26:44.018 [DEBUG] [Thread-2598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:26:44.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:26:44.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:26:44.020 [DEBUG] [Thread-2598] [transport.py] [_log()] userauth is OK
2025-12-25T01:26:44.020 [DEBUG] [Thread-2598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:26:44.020 [DEBUG] [Thread-2598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:26:44.020 [DEBUG] [Thread-2598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:26:44.020 [DEBUG] [Thread-2598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:26:44.044 [INFO] [Thread-2598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:26:44.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:26:44.681 [DEBUG] [Thread-2598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:26:44.684 [DEBUG] [Thread-2598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:26:44.685 [DEBUG] [Thread-2598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:26:44.722 [DEBUG] [Thread-2598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:26:44.722 [DEBUG] [Thread-2598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:26:44.725 [DEBUG] [Thread-2598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:26:44.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:26:44.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:26:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:26:44.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:26:44.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:26:44.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:26:44.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:26:44.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:26:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:26:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.976448 -999.00  +11.90  20.69     93  +10.80 1 3 1 3 1     0    0 0.98 -4.97 ----- 22.7 20.7 143.4 27.0 13.6 -5.2 13.5 -4.5 13.3 -5.2 13.6 -6.4
2025-12-25T01:26:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:26:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:26:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.976448
2025-12-25T01:26:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:26:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:26:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:26:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:26:44.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:26:44.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:26:18', tmtdew=0.64, humidity=95.52, cloud=0.0, wind=24.86, temperature=11.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:26:05.107', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:26:44.750 [DEBUG] [Thread-2598] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:26:44.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:26:44.843 [DEBUG] [Thread-2601] [transport.py] [_log()] starting thread (client mode): 0xbbfcffd0
2025-12-25T01:26:44.843 [DEBUG] [Thread-2601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:26:44.858 [DEBUG] [Thread-2601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:26:44.858 [INFO] [Thread-2601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] client lang: <none>
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] server lang: <none>
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] kex follows: False
2025-12-25T01:26:44.866 [DEBUG] [Thread-2601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:26:44.867 [DEBUG] [Thread-2601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:26:44.867 [DEBUG] [Thread-2601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:26:44.867 [DEBUG] [Thread-2601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:26:44.867 [DEBUG] [Thread-2601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:26:44.867 [DEBUG] [Thread-2601] [transport.py] [_log()] Compression: none
2025-12-25T01:26:44.867 [DEBUG] [Thread-2601] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:26:44.926 [DEBUG] [Thread-2601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:26:44.927 [DEBUG] [Thread-2601] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:26:44.927 [DEBUG] [Thread-2601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:26:44.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:26:44.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:26:44.983 [DEBUG] [Thread-2601] [transport.py] [_log()] userauth is OK
2025-12-25T01:26:44.983 [DEBUG] [Thread-2601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:26:44.983 [DEBUG] [Thread-2601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:26:44.983 [DEBUG] [Thread-2601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:26:44.983 [DEBUG] [Thread-2601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:26:45.006 [INFO] [Thread-2601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:26:45.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:26:45.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:26:45.829 [DEBUG] [Thread-2601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:26:45.829 [DEBUG] [Thread-2601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:26:45.877 [DEBUG] [Thread-2601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:26:45.877 [DEBUG] [Thread-2601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:26:45.886 [DEBUG] [Thread-2601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:26:45.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:26:45.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:26:45.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:26:45.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:26:45.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:26:45.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:26:45.919 [DEBUG] [Thread-2601] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:26:48.027 [DEBUG] [Thread-2603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:27:03.062 [DEBUG] [Thread-2604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:27:15.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:27:15.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:27:15.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:27:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 26, 50), 0.7, 95.48, 0.0, 22.81, 11.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:27:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:26:50
2025-12-25T01:27:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:27:16.902 [DEBUG] [Thread-2605] [transport.py] [_log()] starting thread (client mode): 0xb955b5b0
2025-12-25T01:27:16.902 [DEBUG] [Thread-2605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:27:16.922 [DEBUG] [Thread-2605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:27:16.922 [INFO] [Thread-2605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:27:16.925 [DEBUG] [Thread-2605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:27:16.925 [DEBUG] [Thread-2605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:27:16.925 [DEBUG] [Thread-2605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] client lang: <none>
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] server lang: <none>
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] kex follows: False
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] Compression: none
2025-12-25T01:27:16.926 [DEBUG] [Thread-2605] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:27:16.945 [DEBUG] [Thread-2605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:27:16.946 [DEBUG] [Thread-2605] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:27:16.947 [DEBUG] [Thread-2605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:27:16.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:27:16.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:27:16.949 [DEBUG] [Thread-2605] [transport.py] [_log()] userauth is OK
2025-12-25T01:27:16.949 [DEBUG] [Thread-2605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:27:16.949 [DEBUG] [Thread-2605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:27:16.950 [DEBUG] [Thread-2605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:27:16.950 [DEBUG] [Thread-2605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:27:16.973 [INFO] [Thread-2605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:27:16.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:27:17.752 [DEBUG] [Thread-2605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:27:17.752 [DEBUG] [Thread-2605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:27:17.753 [DEBUG] [Thread-2605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:27:17.793 [DEBUG] [Thread-2605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:27:17.793 [DEBUG] [Thread-2605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:27:17.796 [DEBUG] [Thread-2605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:27:17.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:27:17.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:27:17.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:27:17.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:27:17.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:27:17.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:27:17.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:27:17.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:27:17.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:27:17.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.976795 -999.00  +11.90  16.16     93  +10.80 1 3 1 3 1     0    0 0.99 -4.65 ----- 18.2 16.2 154.2 30.9 13.6 -4.5 13.5 -4.8 13.3 -5.0 13.6 -4.9
2025-12-25T01:27:17.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:27:17.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:27:17.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.976795
2025-12-25T01:27:17.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:27:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:27:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:27:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:27:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:27:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:26:50', tmtdew=0.7, humidity=95.48, cloud=0.0, wind=22.81, temperature=11.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:26:35.088', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:27:17.823 [DEBUG] [Thread-2605] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:27:17.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:27:17.916 [DEBUG] [Thread-2608] [transport.py] [_log()] starting thread (client mode): 0xb6b01cf0
2025-12-25T01:27:17.916 [DEBUG] [Thread-2608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:27:17.931 [DEBUG] [Thread-2608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:27:17.931 [INFO] [Thread-2608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:27:17.939 [DEBUG] [Thread-2608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:27:17.939 [DEBUG] [Thread-2608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:27:17.939 [DEBUG] [Thread-2608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:27:17.939 [DEBUG] [Thread-2608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:27:17.939 [DEBUG] [Thread-2608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] client lang: <none>
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] server lang: <none>
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] kex follows: False
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:27:17.940 [DEBUG] [Thread-2608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:27:17.941 [DEBUG] [Thread-2608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:27:17.941 [DEBUG] [Thread-2608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:27:17.941 [DEBUG] [Thread-2608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:27:17.941 [DEBUG] [Thread-2608] [transport.py] [_log()] Compression: none
2025-12-25T01:27:17.941 [DEBUG] [Thread-2608] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:27:18.000 [DEBUG] [Thread-2608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:27:18.000 [DEBUG] [Thread-2608] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:27:18.001 [DEBUG] [Thread-2608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:27:18.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:27:18.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:27:18.059 [DEBUG] [Thread-2608] [transport.py] [_log()] userauth is OK
2025-12-25T01:27:18.059 [DEBUG] [Thread-2608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:27:18.059 [DEBUG] [Thread-2608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:27:18.060 [DEBUG] [Thread-2608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:27:18.060 [DEBUG] [Thread-2608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:27:18.080 [INFO] [Thread-2608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:27:18.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:27:18.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:27:18.097 [DEBUG] [Thread-2610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:27:18.967 [DEBUG] [Thread-2608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:27:18.968 [DEBUG] [Thread-2608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:27:19.016 [DEBUG] [Thread-2608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:27:19.016 [DEBUG] [Thread-2608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:27:19.025 [DEBUG] [Thread-2608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:27:19.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:27:19.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:27:19.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:27:19.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:27:19.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:27:19.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:27:19.060 [DEBUG] [Thread-2608] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:27:23.998 [DEBUG] [Thread-2611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:27:29.725 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:27:29.726 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:27:33.155 [DEBUG] [Thread-2612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:27:48.186 [DEBUG] [Thread-2613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:27:49.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:27:49.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:27:49.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
2025-12-25T01:27:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 27, 22), 0.69, 95.55, 0.0, 25.04, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:27:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:27:22
2025-12-25T01:27:49.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:27:50.050 [DEBUG] [Thread-2614] [transport.py] [_log()] starting thread (client mode): 0xb9545f30
2025-12-25T01:27:50.050 [DEBUG] [Thread-2614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:27:50.073 [DEBUG] [Thread-2614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:27:50.073 [INFO] [Thread-2614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:27:50.076 [DEBUG] [Thread-2614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] client lang: <none>
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] server lang: <none>
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] kex follows: False
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] Compression: none
2025-12-25T01:27:50.077 [DEBUG] [Thread-2614] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:27:50.098 [DEBUG] [Thread-2614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:27:50.099 [DEBUG] [Thread-2614] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:27:50.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:27:50.101 [DEBUG] [Thread-2614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:27:50.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:27:50.103 [DEBUG] [Thread-2614] [transport.py] [_log()] userauth is OK
2025-12-25T01:27:50.104 [DEBUG] [Thread-2614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:27:50.104 [DEBUG] [Thread-2614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:27:50.104 [DEBUG] [Thread-2614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:27:50.104 [DEBUG] [Thread-2614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:27:50.133 [INFO] [Thread-2614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:27:50.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:27:50.778 [DEBUG] [Thread-2614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:27:50.778 [DEBUG] [Thread-2614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:27:50.779 [DEBUG] [Thread-2614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:27:50.819 [DEBUG] [Thread-2614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:27:50.819 [DEBUG] [Thread-2614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:27:50.823 [DEBUG] [Thread-2614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:27:50.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:27:50.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:27:50.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:27:50.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:27:50.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:27:50.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:27:50.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:27:50.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:27:50.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:27:50.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.977142 -999.00  +11.90  20.68     93  +10.80 1 3 1 3 1     0    0 1.00 -3.97 ----- 20.9 20.7 143.6 23.9 13.6 -4.3 13.5 -3.5 13.3 -4.2 13.6 -5.8
2025-12-25T01:27:50.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:27:50.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:27:50.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.977142
2025-12-25T01:27:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:27:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:27:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:27:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:27:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:27:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:27:22', tmtdew=0.69, humidity=95.55, cloud=0.0, wind=25.04, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:27:05.069', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:27:50.840 [DEBUG] [Thread-2614] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:27:50.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:27:50.933 [DEBUG] [Thread-2617] [transport.py] [_log()] starting thread (client mode): 0xb955b520
2025-12-25T01:27:50.933 [DEBUG] [Thread-2617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:27:50.947 [DEBUG] [Thread-2617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:27:50.947 [INFO] [Thread-2617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:27:50.956 [DEBUG] [Thread-2617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:27:50.956 [DEBUG] [Thread-2617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:27:50.956 [DEBUG] [Thread-2617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:27:50.956 [DEBUG] [Thread-2617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:27:50.956 [DEBUG] [Thread-2617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] client lang: <none>
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] server lang: <none>
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] kex follows: False
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:27:50.957 [DEBUG] [Thread-2617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:27:50.958 [DEBUG] [Thread-2617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:27:50.958 [DEBUG] [Thread-2617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:27:50.958 [DEBUG] [Thread-2617] [transport.py] [_log()] Compression: none
2025-12-25T01:27:50.958 [DEBUG] [Thread-2617] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:27:51.014 [DEBUG] [Thread-2617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:27:51.014 [DEBUG] [Thread-2617] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:27:51.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:27:51.015 [DEBUG] [Thread-2617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:27:51.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:27:51.071 [DEBUG] [Thread-2617] [transport.py] [_log()] userauth is OK
2025-12-25T01:27:51.071 [DEBUG] [Thread-2617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:27:51.071 [DEBUG] [Thread-2617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:27:51.072 [DEBUG] [Thread-2617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:27:51.072 [DEBUG] [Thread-2617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:27:51.089 [INFO] [Thread-2617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:27:51.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:27:51.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:27:51.911 [DEBUG] [Thread-2617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:27:51.911 [DEBUG] [Thread-2617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:27:51.959 [DEBUG] [Thread-2617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:27:51.959 [DEBUG] [Thread-2617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:27:51.969 [DEBUG] [Thread-2617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:27:51.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:27:51.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:27:51.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:27:52.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:27:52.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:27:52.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:27:52.010 [DEBUG] [Thread-2617] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:28:03.221 [DEBUG] [Thread-2619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:28:18.271 [DEBUG] [Thread-2620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:28:22.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:28:22.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:28:22.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:28:22.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 27, 54), 0.64, 96.02, 0.0, 26.8, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:28:22.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:27:54
2025-12-25T01:28:22.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:28:23.012 [DEBUG] [Thread-2621] [transport.py] [_log()] starting thread (client mode): 0xb9559510
2025-12-25T01:28:23.013 [DEBUG] [Thread-2621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:28:23.036 [DEBUG] [Thread-2621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:28:23.036 [INFO] [Thread-2621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:28:23.038 [DEBUG] [Thread-2621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] client lang: <none>
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] server lang: <none>
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] kex follows: False
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] Compression: none
2025-12-25T01:28:23.039 [DEBUG] [Thread-2621] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:28:23.060 [DEBUG] [Thread-2621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:28:23.060 [DEBUG] [Thread-2621] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:28:23.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:28:23.061 [DEBUG] [Thread-2621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:28:23.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:28:23.063 [DEBUG] [Thread-2621] [transport.py] [_log()] userauth is OK
2025-12-25T01:28:23.063 [DEBUG] [Thread-2621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:28:23.064 [DEBUG] [Thread-2621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:28:23.064 [DEBUG] [Thread-2621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:28:23.064 [DEBUG] [Thread-2621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:28:23.083 [INFO] [Thread-2621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:28:23.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:28:23.759 [DEBUG] [Thread-2621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:28:23.759 [DEBUG] [Thread-2621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:28:23.760 [DEBUG] [Thread-2621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:28:23.800 [DEBUG] [Thread-2621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:28:23.800 [DEBUG] [Thread-2621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:28:23.803 [DEBUG] [Thread-2621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:28:23.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:28:23.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:28:23.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:28:23.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:28:23.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:28:23.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:28:23.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:28:23.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:28:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:28:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.977489 -999.00  +11.90  22.02     93  +10.80 1 3 1 3 1     0    0 1.04 -3.42 ----- 19.9 22.0 140.4 26.0 13.6 -4.2 13.6 -3.8 13.3 -4.2 13.6 -4.1
2025-12-25T01:28:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:28:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:28:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.977489
2025-12-25T01:28:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:28:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:28:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:28:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:28:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:28:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:27:54', tmtdew=0.64, humidity=96.02, cloud=0.0, wind=26.8, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:27:35.050', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:28:23.828 [DEBUG] [Thread-2621] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:28:23.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:28:23.922 [DEBUG] [Thread-2624] [transport.py] [_log()] starting thread (client mode): 0xb9578e20
2025-12-25T01:28:23.922 [DEBUG] [Thread-2624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:28:23.940 [DEBUG] [Thread-2624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:28:23.940 [INFO] [Thread-2624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:28:23.947 [DEBUG] [Thread-2624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:28:23.947 [DEBUG] [Thread-2624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] client lang: <none>
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] server lang: <none>
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] kex follows: False
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] Compression: none
2025-12-25T01:28:23.948 [DEBUG] [Thread-2624] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:28:24.006 [DEBUG] [Thread-2624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:28:24.006 [DEBUG] [Thread-2624] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:28:24.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:28:24.008 [DEBUG] [Thread-2624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:28:24.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:28:24.062 [DEBUG] [Thread-2624] [transport.py] [_log()] userauth is OK
2025-12-25T01:28:24.062 [DEBUG] [Thread-2624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:28:24.062 [DEBUG] [Thread-2624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:28:24.062 [DEBUG] [Thread-2624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:28:24.062 [DEBUG] [Thread-2624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:28:24.070 [DEBUG] [Thread-2626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:28:24.076 [INFO] [Thread-2624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:28:24.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:28:24.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:28:24.922 [DEBUG] [Thread-2624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:28:24.923 [DEBUG] [Thread-2624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:28:24.971 [DEBUG] [Thread-2624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:28:24.971 [DEBUG] [Thread-2624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:28:24.980 [DEBUG] [Thread-2624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:28:24.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:28:24.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:28:25.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:28:25.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:28:25.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:28:25.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:28:25.021 [DEBUG] [Thread-2624] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:28:29.926 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:28:29.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:28:33.302 [DEBUG] [Thread-2627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:28:48.362 [DEBUG] [Thread-2628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:28:55.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:28:55.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:28:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:28:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 28, 26), 0.63, 96.07, 0.0, 25.5, 11.95, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:28:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:28:26
2025-12-25T01:28:55.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:28:56.054 [DEBUG] [Thread-2629] [transport.py] [_log()] starting thread (client mode): 0xb6b02b00
2025-12-25T01:28:56.054 [DEBUG] [Thread-2629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:28:56.075 [DEBUG] [Thread-2629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:28:56.075 [INFO] [Thread-2629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:28:56.078 [DEBUG] [Thread-2629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:28:56.078 [DEBUG] [Thread-2629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:28:56.078 [DEBUG] [Thread-2629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] client lang: <none>
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] server lang: <none>
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] kex follows: False
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] Compression: none
2025-12-25T01:28:56.079 [DEBUG] [Thread-2629] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:28:56.096 [DEBUG] [Thread-2629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:28:56.097 [DEBUG] [Thread-2629] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:28:56.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:28:56.097 [DEBUG] [Thread-2629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:28:56.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:28:56.098 [DEBUG] [Thread-2629] [transport.py] [_log()] userauth is OK
2025-12-25T01:28:56.098 [DEBUG] [Thread-2629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:28:56.098 [DEBUG] [Thread-2629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:28:56.098 [DEBUG] [Thread-2629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:28:56.098 [DEBUG] [Thread-2629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:28:56.120 [INFO] [Thread-2629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:28:56.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:28:56.750 [DEBUG] [Thread-2629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:28:56.751 [DEBUG] [Thread-2629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:28:56.751 [DEBUG] [Thread-2629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:28:56.792 [DEBUG] [Thread-2629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:28:56.792 [DEBUG] [Thread-2629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:28:56.794 [DEBUG] [Thread-2629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:28:56.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:28:56.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:28:56.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:28:56.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:28:56.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:28:56.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:28:56.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:28:56.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:28:56.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:28:56.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.977837 -999.00  +11.90  15.37     93  +10.80 1 3 1 3 1     0    0 1.04 -3.05 ----- 15.9 15.4 149.2 22.9 13.6 -3.6 13.5 -3.7 13.4 -3.8 13.7 -3.9
2025-12-25T01:28:56.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:28:56.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:28:56.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.977837
2025-12-25T01:28:56.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:28:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:28:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:28:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:28:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:28:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:28:26', tmtdew=0.63, humidity=96.07, cloud=0.0, wind=25.5, temperature=11.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:28:05.117', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:28:56.813 [DEBUG] [Thread-2629] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:28:56.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:28:56.899 [DEBUG] [Thread-2632] [transport.py] [_log()] starting thread (client mode): 0xb95460e0
2025-12-25T01:28:56.899 [DEBUG] [Thread-2632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:28:56.913 [DEBUG] [Thread-2632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:28:56.913 [INFO] [Thread-2632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] client lang: <none>
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] server lang: <none>
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] kex follows: False
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] Compression: none
2025-12-25T01:28:56.921 [DEBUG] [Thread-2632] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:28:56.976 [DEBUG] [Thread-2632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:28:56.976 [DEBUG] [Thread-2632] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:28:56.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:28:56.977 [DEBUG] [Thread-2632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:28:56.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:28:57.034 [DEBUG] [Thread-2632] [transport.py] [_log()] userauth is OK
2025-12-25T01:28:57.034 [DEBUG] [Thread-2632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:28:57.034 [DEBUG] [Thread-2632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:28:57.034 [DEBUG] [Thread-2632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:28:57.034 [DEBUG] [Thread-2632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:28:57.051 [INFO] [Thread-2632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:28:57.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:28:57.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:28:57.864 [DEBUG] [Thread-2632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:28:57.864 [DEBUG] [Thread-2632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:28:57.912 [DEBUG] [Thread-2632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:28:57.912 [DEBUG] [Thread-2632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:28:57.920 [DEBUG] [Thread-2632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:28:57.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:28:57.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:28:57.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:28:57.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:28:57.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:28:57.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:28:57.952 [DEBUG] [Thread-2632] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:29:03.393 [DEBUG] [Thread-2634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:29:18.446 [DEBUG] [Thread-2635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:29:24.138 [DEBUG] [Thread-2636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:29:27.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:29:27.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:29:27.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:29:28.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 28, 58), 0.64, 96.03, 0.0, 25.9, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:29:28.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:28:58
2025-12-25T01:29:28.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:29:28.955 [DEBUG] [Thread-2637] [transport.py] [_log()] starting thread (client mode): 0xb95591e0
2025-12-25T01:29:28.955 [DEBUG] [Thread-2637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:29:28.975 [DEBUG] [Thread-2637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:29:28.975 [INFO] [Thread-2637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] client lang: <none>
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] server lang: <none>
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] kex follows: False
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:29:28.978 [DEBUG] [Thread-2637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:29:28.979 [DEBUG] [Thread-2637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:29:28.979 [DEBUG] [Thread-2637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:29:28.979 [DEBUG] [Thread-2637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:29:28.979 [DEBUG] [Thread-2637] [transport.py] [_log()] Compression: none
2025-12-25T01:29:28.979 [DEBUG] [Thread-2637] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:29:28.995 [DEBUG] [Thread-2637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:29:28.995 [DEBUG] [Thread-2637] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:29:28.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:29:28.996 [DEBUG] [Thread-2637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:29:28.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:29:28.999 [DEBUG] [Thread-2637] [transport.py] [_log()] userauth is OK
2025-12-25T01:29:28.999 [DEBUG] [Thread-2637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:29:28.999 [DEBUG] [Thread-2637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:29:28.999 [DEBUG] [Thread-2637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:29:29.000 [DEBUG] [Thread-2637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:29:29.018 [INFO] [Thread-2637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:29:29.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:29:29.753 [DEBUG] [Thread-2637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:29:29.753 [DEBUG] [Thread-2637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:29:29.754 [DEBUG] [Thread-2637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:29:29.794 [DEBUG] [Thread-2637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:29:29.795 [DEBUG] [Thread-2637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:29:29.798 [DEBUG] [Thread-2637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:29:29.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:29:29.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:29:29.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:29:29.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:29:29.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:29:29.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:29:29.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:29:29.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:29:29.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:29:29.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.978184 -999.00  +11.90  23.98     93  +10.80 1 3 1 3 1     0    0 1.01 -3.07 ----- 18.6 24.0 144.4 27.0 13.7 -4.8 13.5 -4.9 13.3 -5.3 13.7 -4.5
2025-12-25T01:29:29.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:29:29.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:29:29.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.978184
2025-12-25T01:29:29.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:29:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:29:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:29:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:29:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:29:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:28:58', tmtdew=0.64, humidity=96.03, cloud=0.0, wind=25.9, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:28:35.098', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:29:29.826 [DEBUG] [Thread-2637] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:29:29.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:29:29.915 [DEBUG] [Thread-2640] [transport.py] [_log()] starting thread (client mode): 0xb9579000
2025-12-25T01:29:29.915 [DEBUG] [Thread-2640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:29:29.930 [DEBUG] [Thread-2640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:29:29.930 [INFO] [Thread-2640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] client lang: <none>
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] server lang: <none>
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] kex follows: False
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:29:29.938 [DEBUG] [Thread-2640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:29:29.939 [DEBUG] [Thread-2640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:29:29.939 [DEBUG] [Thread-2640] [transport.py] [_log()] Compression: none
2025-12-25T01:29:29.939 [DEBUG] [Thread-2640] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:29:29.998 [DEBUG] [Thread-2640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:29:29.999 [DEBUG] [Thread-2640] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:29:29.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:29:30.000 [DEBUG] [Thread-2640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:29:30.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:29:30.058 [DEBUG] [Thread-2640] [transport.py] [_log()] userauth is OK
2025-12-25T01:29:30.058 [DEBUG] [Thread-2640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:29:30.058 [DEBUG] [Thread-2640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:29:30.059 [DEBUG] [Thread-2640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:29:30.059 [DEBUG] [Thread-2640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:29:30.077 [INFO] [Thread-2640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:29:30.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:29:30.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:29:30.131 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:29:30.132 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:29:30.883 [DEBUG] [Thread-2640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:29:30.883 [DEBUG] [Thread-2640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:29:30.931 [DEBUG] [Thread-2640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:29:30.932 [DEBUG] [Thread-2640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:29:30.940 [DEBUG] [Thread-2640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:29:30.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:29:30.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:29:30.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:29:30.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:29:30.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:29:30.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:29:30.972 [DEBUG] [Thread-2640] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:29:33.481 [DEBUG] [Thread-2642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:29:48.521 [DEBUG] [Thread-2643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:30:00.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:30:00.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:30:00.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
2025-12-25T01:30:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 29, 30), 0.63, 96.07, 0.0, 24.31, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:30:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:29:30
2025-12-25T01:30:01.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:30:02.032 [DEBUG] [Thread-2644] [transport.py] [_log()] starting thread (client mode): 0xb9593fd0
2025-12-25T01:30:02.032 [DEBUG] [Thread-2644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:30:02.043 [DEBUG] [Thread-2644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:30:02.043 [INFO] [Thread-2644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] client lang: <none>
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] server lang: <none>
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] kex follows: False
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] Compression: none
2025-12-25T01:30:02.044 [DEBUG] [Thread-2644] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:30:02.051 [DEBUG] [Thread-2644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:30:02.051 [DEBUG] [Thread-2644] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:30:02.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:30:02.052 [DEBUG] [Thread-2644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:30:02.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:30:02.052 [DEBUG] [Thread-2644] [transport.py] [_log()] userauth is OK
2025-12-25T01:30:02.052 [DEBUG] [Thread-2644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:30:02.052 [DEBUG] [Thread-2644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:30:02.052 [DEBUG] [Thread-2644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:30:02.052 [DEBUG] [Thread-2644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:30:02.067 [INFO] [Thread-2644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:30:02.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:30:02.653 [DEBUG] [Thread-2644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:30:02.653 [DEBUG] [Thread-2644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:30:02.653 [DEBUG] [Thread-2644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:30:02.696 [DEBUG] [Thread-2644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:30:02.696 [DEBUG] [Thread-2644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:30:02.699 [DEBUG] [Thread-2644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:30:02.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:30:02.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:30:02.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:30:02.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:30:02.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:30:02.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:30:02.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:30:02.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:30:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:30:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.978878 -999.00  +11.80  18.12     93  +10.80 1 3 1 3 1     0    0 1.03 -3.11 ----- 15.3 18.1 162.0 29.1 13.6 -5.7 13.5 -5.5 13.4 -5.9 13.7 -6.1
2025-12-25T01:30:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:30:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:30:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.978878
2025-12-25T01:30:02.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:30:02.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:30:02.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:30:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:30:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:30:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:29:30', tmtdew=0.63, humidity=96.07, cloud=0.0, wind=24.31, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:29:35.059', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:30:02.726 [DEBUG] [Thread-2644] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:30:02.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:30:02.821 [DEBUG] [Thread-2647] [transport.py] [_log()] starting thread (client mode): 0xb9559030
2025-12-25T01:30:02.821 [DEBUG] [Thread-2647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:30:02.836 [DEBUG] [Thread-2647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:30:02.836 [INFO] [Thread-2647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:30:02.843 [DEBUG] [Thread-2647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] client lang: <none>
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] server lang: <none>
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] kex follows: False
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] Compression: none
2025-12-25T01:30:02.844 [DEBUG] [Thread-2647] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:30:02.902 [DEBUG] [Thread-2647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:30:02.902 [DEBUG] [Thread-2647] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:30:02.903 [DEBUG] [Thread-2647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:30:02.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:30:02.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:30:02.962 [DEBUG] [Thread-2647] [transport.py] [_log()] userauth is OK
2025-12-25T01:30:02.962 [DEBUG] [Thread-2647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:30:02.962 [DEBUG] [Thread-2647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:30:02.962 [DEBUG] [Thread-2647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:30:02.963 [DEBUG] [Thread-2647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:30:02.981 [INFO] [Thread-2647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:30:02.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:30:02.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:30:03.560 [DEBUG] [Thread-2649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:30:03.834 [DEBUG] [Thread-2647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:30:03.834 [DEBUG] [Thread-2647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:30:03.881 [DEBUG] [Thread-2647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:30:03.881 [DEBUG] [Thread-2647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:30:03.889 [DEBUG] [Thread-2647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:30:03.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:30:03.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:30:03.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:30:03.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:30:03.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:30:03.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:30:03.921 [DEBUG] [Thread-2647] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:30:18.608 [DEBUG] [Thread-2650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:30:24.213 [DEBUG] [Thread-2651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:30:30.329 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:30:30.330 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:30:33.647 [DEBUG] [Thread-2652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:30:33.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:30:33.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:30:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:30:34.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 30, 3), 0.63, 96.1, 0.0, 23.96, 11.95, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:30:34.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:30:03
2025-12-25T01:30:34.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:30:34.920 [DEBUG] [Thread-2653] [transport.py] [_log()] starting thread (client mode): 0xb95b1960
2025-12-25T01:30:34.920 [DEBUG] [Thread-2653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:30:34.941 [DEBUG] [Thread-2653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:30:34.941 [INFO] [Thread-2653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:30:34.944 [DEBUG] [Thread-2653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:30:34.944 [DEBUG] [Thread-2653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:30:34.944 [DEBUG] [Thread-2653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:30:34.944 [DEBUG] [Thread-2653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:30:34.944 [DEBUG] [Thread-2653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] client lang: <none>
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] server lang: <none>
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] kex follows: False
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:30:34.945 [DEBUG] [Thread-2653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:30:34.946 [DEBUG] [Thread-2653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:30:34.946 [DEBUG] [Thread-2653] [transport.py] [_log()] Compression: none
2025-12-25T01:30:34.946 [DEBUG] [Thread-2653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:30:34.964 [DEBUG] [Thread-2653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:30:34.964 [DEBUG] [Thread-2653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:30:34.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:30:34.966 [DEBUG] [Thread-2653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:30:34.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:30:34.968 [DEBUG] [Thread-2653] [transport.py] [_log()] userauth is OK
2025-12-25T01:30:34.968 [DEBUG] [Thread-2653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:30:34.968 [DEBUG] [Thread-2653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:30:34.968 [DEBUG] [Thread-2653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:30:34.968 [DEBUG] [Thread-2653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:30:34.985 [INFO] [Thread-2653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:30:34.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:30:35.868 [DEBUG] [Thread-2653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:30:35.868 [DEBUG] [Thread-2653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:30:35.868 [DEBUG] [Thread-2653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:30:35.908 [DEBUG] [Thread-2653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:30:35.908 [DEBUG] [Thread-2653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:30:35.910 [DEBUG] [Thread-2653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:30:35.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:30:35.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:30:35.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:30:35.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:30:35.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:30:35.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:30:35.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.979225 -999.00  +11.80  18.17     93  +10.80 1 3 1 3 1     0    0 1.01 -3.15 ----- 18.0 18.2 158.2 24.7 13.6 -5.5 13.4 -5.0 13.3 -5.7 13.6 -6.2
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.979225
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:30:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:30:03', tmtdew=0.63, humidity=96.1, cloud=0.0, wind=23.96, temperature=11.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:30:05.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:30:35.930 [DEBUG] [Thread-2653] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:30:36.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:30:36.014 [DEBUG] [Thread-2656] [transport.py] [_log()] starting thread (client mode): 0xb95938e0
2025-12-25T01:30:36.014 [DEBUG] [Thread-2656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:30:36.029 [DEBUG] [Thread-2656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:30:36.029 [INFO] [Thread-2656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:30:36.036 [DEBUG] [Thread-2656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:30:36.036 [DEBUG] [Thread-2656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:30:36.036 [DEBUG] [Thread-2656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:30:36.036 [DEBUG] [Thread-2656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:30:36.036 [DEBUG] [Thread-2656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:30:36.036 [DEBUG] [Thread-2656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:30:36.036 [DEBUG] [Thread-2656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:30:36.036 [DEBUG] [Thread-2656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] client lang: <none>
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] server lang: <none>
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] kex follows: False
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] Compression: none
2025-12-25T01:30:36.037 [DEBUG] [Thread-2656] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:30:36.097 [DEBUG] [Thread-2656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:30:36.097 [DEBUG] [Thread-2656] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:30:36.098 [DEBUG] [Thread-2656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:30:36.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:30:36.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:30:36.153 [DEBUG] [Thread-2656] [transport.py] [_log()] userauth is OK
2025-12-25T01:30:36.153 [DEBUG] [Thread-2656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:30:36.153 [DEBUG] [Thread-2656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:30:36.153 [DEBUG] [Thread-2656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:30:36.153 [DEBUG] [Thread-2656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:30:36.168 [INFO] [Thread-2656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:30:36.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:30:36.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:30:37.053 [DEBUG] [Thread-2656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:30:37.054 [DEBUG] [Thread-2656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:30:37.101 [DEBUG] [Thread-2656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:30:37.101 [DEBUG] [Thread-2656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:30:37.110 [DEBUG] [Thread-2656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:30:37.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:30:37.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:30:37.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:30:37.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:30:37.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:30:37.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:30:37.141 [DEBUG] [Thread-2656] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:30:48.683 [DEBUG] [Thread-2658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:31:03.742 [DEBUG] [Thread-2659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:31:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:31:07.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:31:07.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:31:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 30, 35), 0.63, 96.1, 0.0, 25.02, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:31:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:30:35
2025-12-25T01:31:08.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:31:08.158 [DEBUG] [Thread-2660] [transport.py] [_log()] starting thread (client mode): 0xb6b030a0
2025-12-25T01:31:08.158 [DEBUG] [Thread-2660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:31:08.178 [DEBUG] [Thread-2660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:31:08.178 [INFO] [Thread-2660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] client lang: <none>
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] server lang: <none>
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] kex follows: False
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:31:08.181 [DEBUG] [Thread-2660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:31:08.182 [DEBUG] [Thread-2660] [transport.py] [_log()] Compression: none
2025-12-25T01:31:08.182 [DEBUG] [Thread-2660] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:31:08.196 [DEBUG] [Thread-2660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:31:08.197 [DEBUG] [Thread-2660] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:31:08.197 [DEBUG] [Thread-2660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:31:08.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:31:08.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:31:08.197 [DEBUG] [Thread-2660] [transport.py] [_log()] userauth is OK
2025-12-25T01:31:08.198 [DEBUG] [Thread-2660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:31:08.198 [DEBUG] [Thread-2660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:31:08.198 [DEBUG] [Thread-2660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:31:08.198 [DEBUG] [Thread-2660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:31:08.216 [INFO] [Thread-2660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:31:08.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:31:08.854 [DEBUG] [Thread-2660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:31:08.854 [DEBUG] [Thread-2660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:31:08.854 [DEBUG] [Thread-2660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:31:08.895 [DEBUG] [Thread-2660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:31:08.896 [DEBUG] [Thread-2660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:31:08.898 [DEBUG] [Thread-2660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:31:08.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:31:08.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:31:08.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:31:08.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:31:08.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:31:08.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:31:08.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.979573 -999.00  +11.80  16.37     93  +10.80 1 3 1 3 1     0    0 1.02 -3.20 ----- 17.9 16.4 151.0 25.6 13.6 -5.0 13.4 -4.8 13.3 -5.4 13.6 -5.4
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.979573
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:31:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:30:35', tmtdew=0.63, humidity=96.1, cloud=0.0, wind=25.02, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:30:35.107', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:31:08.915 [DEBUG] [Thread-2660] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:31:08.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:31:09.002 [DEBUG] [Thread-2663] [transport.py] [_log()] starting thread (client mode): 0xb9590cd0
2025-12-25T01:31:09.002 [DEBUG] [Thread-2663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:31:09.017 [DEBUG] [Thread-2663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:31:09.017 [INFO] [Thread-2663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:31:09.024 [DEBUG] [Thread-2663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:31:09.024 [DEBUG] [Thread-2663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:31:09.024 [DEBUG] [Thread-2663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:31:09.024 [DEBUG] [Thread-2663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] client lang: <none>
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] server lang: <none>
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] kex follows: False
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] Compression: none
2025-12-25T01:31:09.025 [DEBUG] [Thread-2663] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:31:09.080 [DEBUG] [Thread-2663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:31:09.080 [DEBUG] [Thread-2663] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:31:09.080 [DEBUG] [Thread-2663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:31:09.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:31:09.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:31:09.137 [DEBUG] [Thread-2663] [transport.py] [_log()] userauth is OK
2025-12-25T01:31:09.137 [DEBUG] [Thread-2663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:31:09.137 [DEBUG] [Thread-2663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:31:09.137 [DEBUG] [Thread-2663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:31:09.137 [DEBUG] [Thread-2663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:31:09.152 [INFO] [Thread-2663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:31:09.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:31:09.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:31:09.997 [DEBUG] [Thread-2663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:31:09.997 [DEBUG] [Thread-2663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:31:10.045 [DEBUG] [Thread-2663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:31:10.045 [DEBUG] [Thread-2663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:31:10.055 [DEBUG] [Thread-2663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:31:10.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:31:10.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:31:10.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:31:10.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:31:10.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:31:10.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:31:10.091 [DEBUG] [Thread-2663] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:31:18.778 [DEBUG] [Thread-2665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:31:24.298 [DEBUG] [Thread-2666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:31:30.544 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:31:30.545 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:31:33.837 [DEBUG] [Thread-2667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:31:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:31:40.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:31:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:31:40.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 31, 7), 0.63, 96.07, 0.0, 23.86, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:31:40.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:31:07
2025-12-25T01:31:41.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:31:41.171 [DEBUG] [Thread-2668] [transport.py] [_log()] starting thread (client mode): 0xb955b640
2025-12-25T01:31:41.171 [DEBUG] [Thread-2668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:31:41.191 [DEBUG] [Thread-2668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:31:41.191 [INFO] [Thread-2668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] client lang: <none>
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] server lang: <none>
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] kex follows: False
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:31:41.194 [DEBUG] [Thread-2668] [transport.py] [_log()] Compression: none
2025-12-25T01:31:41.195 [DEBUG] [Thread-2668] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:31:41.211 [DEBUG] [Thread-2668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:31:41.211 [DEBUG] [Thread-2668] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:31:41.211 [DEBUG] [Thread-2668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:31:41.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:31:41.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:31:41.212 [DEBUG] [Thread-2668] [transport.py] [_log()] userauth is OK
2025-12-25T01:31:41.212 [DEBUG] [Thread-2668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:31:41.212 [DEBUG] [Thread-2668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:31:41.212 [DEBUG] [Thread-2668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:31:41.212 [DEBUG] [Thread-2668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:31:41.239 [INFO] [Thread-2668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:31:41.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:31:42.028 [DEBUG] [Thread-2668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:31:42.028 [DEBUG] [Thread-2668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:31:42.029 [DEBUG] [Thread-2668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:31:42.069 [DEBUG] [Thread-2668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:31:42.069 [DEBUG] [Thread-2668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:31:42.072 [DEBUG] [Thread-2668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:31:42.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:31:42.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:31:42.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:31:42.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:31:42.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:31:42.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:31:42.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:31:42.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:31:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:31:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.979920 -999.00  +11.80  16.37     93  +10.80 1 3 1 3 1     0    0 1.03 -3.37 ----- 16.3 16.4 143.0 23.3 13.6 -3.6 13.4 -3.4 13.2 -3.6 13.6 -4.4
2025-12-25T01:31:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:31:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:31:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.979920
2025-12-25T01:31:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:31:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:31:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:31:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:31:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:31:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:31:07', tmtdew=0.63, humidity=96.07, cloud=0.0, wind=23.86, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:31:05.088', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:31:42.097 [DEBUG] [Thread-2668] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:31:42.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:31:42.193 [DEBUG] [Thread-2671] [transport.py] [_log()] starting thread (client mode): 0xb955a170
2025-12-25T01:31:42.193 [DEBUG] [Thread-2671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:31:42.207 [DEBUG] [Thread-2671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:31:42.207 [INFO] [Thread-2671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] client lang: <none>
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] server lang: <none>
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] kex follows: False
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:31:42.215 [DEBUG] [Thread-2671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:31:42.216 [DEBUG] [Thread-2671] [transport.py] [_log()] Compression: none
2025-12-25T01:31:42.216 [DEBUG] [Thread-2671] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:31:42.273 [DEBUG] [Thread-2671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:31:42.273 [DEBUG] [Thread-2671] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:31:42.274 [DEBUG] [Thread-2671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:31:42.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:31:42.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:31:42.329 [DEBUG] [Thread-2671] [transport.py] [_log()] userauth is OK
2025-12-25T01:31:42.330 [DEBUG] [Thread-2671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:31:42.330 [DEBUG] [Thread-2671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:31:42.330 [DEBUG] [Thread-2671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:31:42.330 [DEBUG] [Thread-2671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:31:42.348 [INFO] [Thread-2671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:31:42.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:31:42.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:31:43.140 [DEBUG] [Thread-2671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:31:43.141 [DEBUG] [Thread-2671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:31:43.188 [DEBUG] [Thread-2671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:31:43.189 [DEBUG] [Thread-2671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:31:43.197 [DEBUG] [Thread-2671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:31:43.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:31:43.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:31:43.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:31:43.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:31:43.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:31:43.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:31:43.239 [DEBUG] [Thread-2671] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:31:48.872 [DEBUG] [Thread-2673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:32:03.924 [DEBUG] [Thread-2674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:32:13.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:32:13.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:32:13.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:32:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 31, 39), 0.58, 96.08, 0.0, 23.36, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:32:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:31:39
2025-12-25T01:32:14.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:32:14.272 [DEBUG] [Thread-2675] [transport.py] [_log()] starting thread (client mode): 0xb95797e0
2025-12-25T01:32:14.273 [DEBUG] [Thread-2675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:32:14.295 [DEBUG] [Thread-2675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:32:14.295 [INFO] [Thread-2675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] client lang: <none>
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] server lang: <none>
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] kex follows: False
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:32:14.298 [DEBUG] [Thread-2675] [transport.py] [_log()] Compression: none
2025-12-25T01:32:14.299 [DEBUG] [Thread-2675] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:32:14.316 [DEBUG] [Thread-2675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:32:14.316 [DEBUG] [Thread-2675] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:32:14.317 [DEBUG] [Thread-2675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:32:14.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:32:14.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:32:14.319 [DEBUG] [Thread-2675] [transport.py] [_log()] userauth is OK
2025-12-25T01:32:14.319 [DEBUG] [Thread-2675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:32:14.319 [DEBUG] [Thread-2675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:32:14.320 [DEBUG] [Thread-2675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:32:14.320 [DEBUG] [Thread-2675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:32:14.344 [INFO] [Thread-2675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:32:14.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:32:14.990 [DEBUG] [Thread-2675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:32:14.991 [DEBUG] [Thread-2675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:32:14.991 [DEBUG] [Thread-2675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:32:15.032 [DEBUG] [Thread-2675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:32:15.032 [DEBUG] [Thread-2675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:32:15.036 [DEBUG] [Thread-2675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:32:15.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:32:15.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:32:15.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:32:15.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:32:15.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:32:15.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:32:15.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:32:15.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:32:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:32:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.980267 -999.00  +11.80  13.23     93  +10.80 1 3 1 3 1     0    0 0.99 -3.76 ----- 19.1 13.2 156.0 26.6 13.6 -4.0 13.5 -3.7 13.3 -4.1 13.6 -3.6
2025-12-25T01:32:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:32:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:32:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.980267
2025-12-25T01:32:15.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:32:15.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:32:15.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:32:15.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:32:15.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:32:15.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:31:39', tmtdew=0.58, humidity=96.08, cloud=0.0, wind=23.36, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:31:35.069', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:32:15.064 [DEBUG] [Thread-2675] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:32:15.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:32:15.158 [DEBUG] [Thread-2678] [transport.py] [_log()] starting thread (client mode): 0xb9591090
2025-12-25T01:32:15.158 [DEBUG] [Thread-2678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:32:15.173 [DEBUG] [Thread-2678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:32:15.173 [INFO] [Thread-2678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:32:15.180 [DEBUG] [Thread-2678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:32:15.180 [DEBUG] [Thread-2678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:32:15.180 [DEBUG] [Thread-2678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:32:15.180 [DEBUG] [Thread-2678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] client lang: <none>
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] server lang: <none>
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] kex follows: False
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] Compression: none
2025-12-25T01:32:15.181 [DEBUG] [Thread-2678] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:32:15.237 [DEBUG] [Thread-2678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:32:15.238 [DEBUG] [Thread-2678] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:32:15.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:32:15.239 [DEBUG] [Thread-2678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:32:15.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:32:15.293 [DEBUG] [Thread-2678] [transport.py] [_log()] userauth is OK
2025-12-25T01:32:15.294 [DEBUG] [Thread-2678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:32:15.294 [DEBUG] [Thread-2678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:32:15.294 [DEBUG] [Thread-2678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:32:15.294 [DEBUG] [Thread-2678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:32:15.312 [INFO] [Thread-2678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:32:15.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:32:15.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:32:16.126 [DEBUG] [Thread-2678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:32:16.127 [DEBUG] [Thread-2678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:32:16.175 [DEBUG] [Thread-2678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:32:16.175 [DEBUG] [Thread-2678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:32:16.184 [DEBUG] [Thread-2678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:32:16.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:32:16.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:32:16.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:32:16.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:32:16.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:32:16.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:32:16.221 [DEBUG] [Thread-2678] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:32:18.956 [DEBUG] [Thread-2680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:32:24.356 [DEBUG] [Thread-2681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:32:30.750 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:32:30.751 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:32:34.019 [DEBUG] [Thread-2682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:32:46.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:32:46.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:32:46.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:32:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 32, 43), 0.63, 96.12, 0.0, 25.53, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:32:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:32:43
2025-12-25T01:32:47.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:32:47.271 [DEBUG] [Thread-2683] [transport.py] [_log()] starting thread (client mode): 0xb9578e50
2025-12-25T01:32:47.271 [DEBUG] [Thread-2683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:32:47.289 [DEBUG] [Thread-2683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:32:47.289 [INFO] [Thread-2683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] client lang: <none>
2025-12-25T01:32:47.292 [DEBUG] [Thread-2683] [transport.py] [_log()] server lang: <none>
2025-12-25T01:32:47.293 [DEBUG] [Thread-2683] [transport.py] [_log()] kex follows: False
2025-12-25T01:32:47.293 [DEBUG] [Thread-2683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:32:47.293 [DEBUG] [Thread-2683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:32:47.293 [DEBUG] [Thread-2683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:32:47.293 [DEBUG] [Thread-2683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:32:47.293 [DEBUG] [Thread-2683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:32:47.293 [DEBUG] [Thread-2683] [transport.py] [_log()] Compression: none
2025-12-25T01:32:47.293 [DEBUG] [Thread-2683] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:32:47.310 [DEBUG] [Thread-2683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:32:47.310 [DEBUG] [Thread-2683] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:32:47.310 [DEBUG] [Thread-2683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:32:47.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:32:47.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:32:47.311 [DEBUG] [Thread-2683] [transport.py] [_log()] userauth is OK
2025-12-25T01:32:47.311 [DEBUG] [Thread-2683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:32:47.311 [DEBUG] [Thread-2683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:32:47.311 [DEBUG] [Thread-2683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:32:47.311 [DEBUG] [Thread-2683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:32:47.325 [INFO] [Thread-2683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:32:47.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:32:48.107 [DEBUG] [Thread-2683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:32:48.107 [DEBUG] [Thread-2683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:32:48.107 [DEBUG] [Thread-2683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:32:48.148 [DEBUG] [Thread-2683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:32:48.148 [DEBUG] [Thread-2683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:32:48.150 [DEBUG] [Thread-2683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:32:48.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:32:48.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:32:48.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:32:48.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:32:48.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:32:48.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:32:48.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:32:48.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.980615 -999.00  +11.80  14.54     93  +10.80 1 3 1 3 1     0    0 0.97 -4.59 ----- 15.0 14.5 155.4 22.9 13.6 -4.4 13.4 -3.9 13.3 -4.5 13.6 -4.8
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.980615
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:32:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:32:43', tmtdew=0.63, humidity=96.12, cloud=0.0, wind=25.53, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:32:05.136', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:32:48.169 [DEBUG] [Thread-2683] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:32:48.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:32:48.257 [DEBUG] [Thread-2686] [transport.py] [_log()] starting thread (client mode): 0xb95f2cb0
2025-12-25T01:32:48.257 [DEBUG] [Thread-2686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:32:48.271 [DEBUG] [Thread-2686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:32:48.271 [INFO] [Thread-2686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] client lang: <none>
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] server lang: <none>
2025-12-25T01:32:48.279 [DEBUG] [Thread-2686] [transport.py] [_log()] kex follows: False
2025-12-25T01:32:48.280 [DEBUG] [Thread-2686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:32:48.280 [DEBUG] [Thread-2686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:32:48.280 [DEBUG] [Thread-2686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:32:48.280 [DEBUG] [Thread-2686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:32:48.280 [DEBUG] [Thread-2686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:32:48.280 [DEBUG] [Thread-2686] [transport.py] [_log()] Compression: none
2025-12-25T01:32:48.280 [DEBUG] [Thread-2686] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:32:48.336 [DEBUG] [Thread-2686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:32:48.336 [DEBUG] [Thread-2686] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:32:48.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:32:48.336 [DEBUG] [Thread-2686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:32:48.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:32:48.393 [DEBUG] [Thread-2686] [transport.py] [_log()] userauth is OK
2025-12-25T01:32:48.393 [DEBUG] [Thread-2686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:32:48.393 [DEBUG] [Thread-2686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:32:48.393 [DEBUG] [Thread-2686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:32:48.393 [DEBUG] [Thread-2686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:32:48.409 [INFO] [Thread-2686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:32:48.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:32:48.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:32:49.052 [DEBUG] [Thread-2688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:32:49.228 [DEBUG] [Thread-2686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:32:49.228 [DEBUG] [Thread-2686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:32:49.276 [DEBUG] [Thread-2686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:32:49.276 [DEBUG] [Thread-2686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:32:49.284 [DEBUG] [Thread-2686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:32:49.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:32:49.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')
2025-12-25T01:32:49.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:32:49.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:32:49.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:32:49.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:32:49.314 [DEBUG] [Thread-2686] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:33:04.101 [DEBUG] [Thread-2689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:33:19.134 [DEBUG] [Thread-2690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:33:19.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:33:19.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:33:19.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:33:20.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 33, 15), 0.63, 96.12, 0.0, 24.93, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:33:20.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:33:15
2025-12-25T01:33:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:33:20.316 [DEBUG] [Thread-2691] [transport.py] [_log()] starting thread (client mode): 0xb95f06a0
2025-12-25T01:33:20.316 [DEBUG] [Thread-2691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:33:20.336 [DEBUG] [Thread-2691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:33:20.337 [INFO] [Thread-2691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] client lang: <none>
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] server lang: <none>
2025-12-25T01:33:20.340 [DEBUG] [Thread-2691] [transport.py] [_log()] kex follows: False
2025-12-25T01:33:20.341 [DEBUG] [Thread-2691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:33:20.341 [DEBUG] [Thread-2691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:33:20.341 [DEBUG] [Thread-2691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:33:20.341 [DEBUG] [Thread-2691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:33:20.341 [DEBUG] [Thread-2691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:33:20.341 [DEBUG] [Thread-2691] [transport.py] [_log()] Compression: none
2025-12-25T01:33:20.341 [DEBUG] [Thread-2691] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:33:20.359 [DEBUG] [Thread-2691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:33:20.360 [DEBUG] [Thread-2691] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:33:20.360 [DEBUG] [Thread-2691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:33:20.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:33:20.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:33:20.362 [DEBUG] [Thread-2691] [transport.py] [_log()] userauth is OK
2025-12-25T01:33:20.362 [DEBUG] [Thread-2691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:33:20.362 [DEBUG] [Thread-2691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:33:20.363 [DEBUG] [Thread-2691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:33:20.363 [DEBUG] [Thread-2691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:33:20.397 [INFO] [Thread-2691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:33:20.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:33:21.025 [DEBUG] [Thread-2691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:33:21.025 [DEBUG] [Thread-2691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:33:21.025 [DEBUG] [Thread-2691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:33:21.066 [DEBUG] [Thread-2691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:33:21.066 [DEBUG] [Thread-2691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:33:21.069 [DEBUG] [Thread-2691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:33:21.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:33:21.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:33:21.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:33:21.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:33:21.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:33:21.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:33:21.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:33:21.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:33:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:33:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.980961 -999.00  +11.90  13.50     93  +10.80 1 3 1 3 1     0    0 0.97 -4.66 ----- 19.0 13.5 145.8 19.0 13.6 -4.2 13.5 -3.7 13.3 -4.0 13.6 -4.7
2025-12-25T01:33:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:33:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:33:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.980961
2025-12-25T01:33:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:33:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:33:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:33:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:33:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:33:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:33:15', tmtdew=0.63, humidity=96.12, cloud=0.0, wind=24.93, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:32:35.030', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:33:21.093 [DEBUG] [Thread-2691] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:33:21.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:33:21.200 [DEBUG] [Thread-2694] [transport.py] [_log()] starting thread (client mode): 0xb95f0760
2025-12-25T01:33:21.200 [DEBUG] [Thread-2694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:33:21.215 [DEBUG] [Thread-2694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:33:21.215 [INFO] [Thread-2694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] client lang: <none>
2025-12-25T01:33:21.223 [DEBUG] [Thread-2694] [transport.py] [_log()] server lang: <none>
2025-12-25T01:33:21.224 [DEBUG] [Thread-2694] [transport.py] [_log()] kex follows: False
2025-12-25T01:33:21.224 [DEBUG] [Thread-2694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:33:21.224 [DEBUG] [Thread-2694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:33:21.224 [DEBUG] [Thread-2694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:33:21.224 [DEBUG] [Thread-2694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:33:21.224 [DEBUG] [Thread-2694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:33:21.224 [DEBUG] [Thread-2694] [transport.py] [_log()] Compression: none
2025-12-25T01:33:21.224 [DEBUG] [Thread-2694] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:33:21.287 [DEBUG] [Thread-2694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:33:21.287 [DEBUG] [Thread-2694] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:33:21.288 [DEBUG] [Thread-2694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:33:21.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:33:21.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:33:21.348 [DEBUG] [Thread-2694] [transport.py] [_log()] userauth is OK
2025-12-25T01:33:21.348 [DEBUG] [Thread-2694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:33:21.349 [DEBUG] [Thread-2694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:33:21.349 [DEBUG] [Thread-2694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:33:21.349 [DEBUG] [Thread-2694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:33:21.367 [INFO] [Thread-2694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:33:21.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:33:21.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:33:22.256 [DEBUG] [Thread-2694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:33:22.257 [DEBUG] [Thread-2694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:33:22.305 [DEBUG] [Thread-2694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:33:22.306 [DEBUG] [Thread-2694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:33:22.315 [DEBUG] [Thread-2694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:33:22.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:33:22.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')
2025-12-25T01:33:22.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:33:22.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:33:22.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:33:22.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:33:22.353 [DEBUG] [Thread-2694] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:33:24.425 [DEBUG] [Thread-2696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:33:30.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:33:30.956 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:33:34.169 [DEBUG] [Thread-2697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:33:49.219 [DEBUG] [Thread-2698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:33:52.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:33:52.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:33:52.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:33:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 33, 47), 0.57, 96.12, 0.0, 25.28, 11.9, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:33:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:33:47
2025-12-25T01:33:53.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:33:53.329 [DEBUG] [Thread-2699] [transport.py] [_log()] starting thread (client mode): 0xb6b01cf0
2025-12-25T01:33:53.329 [DEBUG] [Thread-2699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:33:53.350 [DEBUG] [Thread-2699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:33:53.350 [INFO] [Thread-2699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] client lang: <none>
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] server lang: <none>
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] kex follows: False
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:33:53.353 [DEBUG] [Thread-2699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:33:53.354 [DEBUG] [Thread-2699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:33:53.354 [DEBUG] [Thread-2699] [transport.py] [_log()] Compression: none
2025-12-25T01:33:53.354 [DEBUG] [Thread-2699] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:33:53.372 [DEBUG] [Thread-2699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:33:53.372 [DEBUG] [Thread-2699] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:33:53.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:33:53.373 [DEBUG] [Thread-2699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:33:53.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:33:53.375 [DEBUG] [Thread-2699] [transport.py] [_log()] userauth is OK
2025-12-25T01:33:53.376 [DEBUG] [Thread-2699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:33:53.376 [DEBUG] [Thread-2699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:33:53.376 [DEBUG] [Thread-2699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:33:53.376 [DEBUG] [Thread-2699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:33:53.399 [INFO] [Thread-2699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:33:53.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:33:54.196 [DEBUG] [Thread-2699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:33:54.196 [DEBUG] [Thread-2699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:33:54.196 [DEBUG] [Thread-2699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:33:54.237 [DEBUG] [Thread-2699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:33:54.237 [DEBUG] [Thread-2699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:33:54.239 [DEBUG] [Thread-2699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:33:54.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:33:54.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:33:54.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:33:54.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:33:54.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:33:54.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:33:54.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:33:54.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:33:54.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:33:54.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.981309 -999.00  +11.90  15.73     93  +10.80 1 3 1 3 1     0    0 0.96 -4.74 ----- 17.6 15.7 143.4 23.7 13.6 -4.1 13.4 -3.8 13.3 -4.2 13.7 -4.3
2025-12-25T01:33:54.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:33:54.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:33:54.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.981309
2025-12-25T01:33:54.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:33:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:33:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:33:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:33:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:33:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:33:47', tmtdew=0.57, humidity=96.12, cloud=0.0, wind=25.28, temperature=11.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:33:05.098', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:33:54.264 [DEBUG] [Thread-2699] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:33:54.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:33:54.358 [DEBUG] [Thread-2702] [transport.py] [_log()] starting thread (client mode): 0xb957ba30
2025-12-25T01:33:54.358 [DEBUG] [Thread-2702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:33:54.378 [DEBUG] [Thread-2702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:33:54.378 [INFO] [Thread-2702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:33:54.385 [DEBUG] [Thread-2702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:33:54.385 [DEBUG] [Thread-2702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] client lang: <none>
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] server lang: <none>
2025-12-25T01:33:54.386 [DEBUG] [Thread-2702] [transport.py] [_log()] kex follows: False
2025-12-25T01:33:54.387 [DEBUG] [Thread-2702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:33:54.387 [DEBUG] [Thread-2702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:33:54.387 [DEBUG] [Thread-2702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:33:54.387 [DEBUG] [Thread-2702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:33:54.387 [DEBUG] [Thread-2702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:33:54.387 [DEBUG] [Thread-2702] [transport.py] [_log()] Compression: none
2025-12-25T01:33:54.387 [DEBUG] [Thread-2702] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:33:54.443 [DEBUG] [Thread-2702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:33:54.443 [DEBUG] [Thread-2702] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:33:54.444 [DEBUG] [Thread-2702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:33:54.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:33:54.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:33:54.503 [DEBUG] [Thread-2702] [transport.py] [_log()] userauth is OK
2025-12-25T01:33:54.503 [DEBUG] [Thread-2702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:33:54.503 [DEBUG] [Thread-2702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:33:54.504 [DEBUG] [Thread-2702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:33:54.504 [DEBUG] [Thread-2702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:33:54.523 [INFO] [Thread-2702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:33:54.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:33:54.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:33:55.368 [DEBUG] [Thread-2702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:33:55.368 [DEBUG] [Thread-2702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:33:55.416 [DEBUG] [Thread-2702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:33:55.416 [DEBUG] [Thread-2702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:33:55.425 [DEBUG] [Thread-2702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:33:55.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:33:55.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:33:55.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:33:55.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:33:55.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:33:55.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:33:55.459 [DEBUG] [Thread-2702] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:34:04.250 [DEBUG] [Thread-2704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:34:19.290 [DEBUG] [Thread-2705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:34:24.504 [DEBUG] [Thread-2706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:34:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:34:25.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:34:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:34:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 34, 19), 0.57, 96.15, 0.0, 24.17, 11.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:34:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:34:19
2025-12-25T01:34:26.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:34:26.471 [DEBUG] [Thread-2707] [transport.py] [_log()] starting thread (client mode): 0xb95f1810
2025-12-25T01:34:26.471 [DEBUG] [Thread-2707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:34:26.491 [DEBUG] [Thread-2707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:34:26.491 [INFO] [Thread-2707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:34:26.494 [DEBUG] [Thread-2707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:34:26.494 [DEBUG] [Thread-2707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:34:26.494 [DEBUG] [Thread-2707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:34:26.494 [DEBUG] [Thread-2707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:34:26.494 [DEBUG] [Thread-2707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:34:26.494 [DEBUG] [Thread-2707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:34:26.494 [DEBUG] [Thread-2707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:34:26.494 [DEBUG] [Thread-2707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] client lang: <none>
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] server lang: <none>
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] kex follows: False
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] Compression: none
2025-12-25T01:34:26.495 [DEBUG] [Thread-2707] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:34:26.511 [DEBUG] [Thread-2707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:34:26.511 [DEBUG] [Thread-2707] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:34:26.512 [DEBUG] [Thread-2707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:34:26.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:34:26.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:34:26.514 [DEBUG] [Thread-2707] [transport.py] [_log()] userauth is OK
2025-12-25T01:34:26.514 [DEBUG] [Thread-2707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:34:26.514 [DEBUG] [Thread-2707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:34:26.514 [DEBUG] [Thread-2707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:34:26.514 [DEBUG] [Thread-2707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:34:26.538 [INFO] [Thread-2707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:34:26.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:34:27.180 [DEBUG] [Thread-2707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:34:27.180 [DEBUG] [Thread-2707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:34:27.181 [DEBUG] [Thread-2707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:34:27.221 [DEBUG] [Thread-2707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:34:27.221 [DEBUG] [Thread-2707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:34:27.225 [DEBUG] [Thread-2707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:34:27.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:34:27.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:34:27.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:34:27.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:34:27.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:34:27.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:34:27.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:34:27.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:34:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:34:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.982003 -999.00  +12.00  16.93     93  +10.90 1 3 1 3 1     0    0 0.97 -4.80 ----- 18.1 16.9 141.0 22.1 13.7 -3.4 13.5 -3.4 13.3 -3.8 13.7 -3.8
2025-12-25T01:34:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:34:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:34:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.982003
2025-12-25T01:34:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:34:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:34:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:34:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:34:27.253 [DEBUG] [Thread-2707] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:34:27.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:34:27.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:34:19', tmtdew=0.57, humidity=96.15, cloud=0.0, wind=24.17, temperature=11.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:34:05.059', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:34:27.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:34:27.349 [DEBUG] [Thread-2710] [transport.py] [_log()] starting thread (client mode): 0xb95f00a0
2025-12-25T01:34:27.349 [DEBUG] [Thread-2710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:34:27.364 [DEBUG] [Thread-2710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:34:27.364 [INFO] [Thread-2710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] client lang: <none>
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] server lang: <none>
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] kex follows: False
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:34:27.372 [DEBUG] [Thread-2710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:34:27.373 [DEBUG] [Thread-2710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:34:27.373 [DEBUG] [Thread-2710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:34:27.373 [DEBUG] [Thread-2710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:34:27.373 [DEBUG] [Thread-2710] [transport.py] [_log()] Compression: none
2025-12-25T01:34:27.373 [DEBUG] [Thread-2710] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:34:27.431 [DEBUG] [Thread-2710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:34:27.431 [DEBUG] [Thread-2710] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:34:27.432 [DEBUG] [Thread-2710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:34:27.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:34:27.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:34:27.487 [DEBUG] [Thread-2710] [transport.py] [_log()] userauth is OK
2025-12-25T01:34:27.487 [DEBUG] [Thread-2710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:34:27.487 [DEBUG] [Thread-2710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:34:27.487 [DEBUG] [Thread-2710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:34:27.487 [DEBUG] [Thread-2710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:34:27.510 [INFO] [Thread-2710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:34:27.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:34:27.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:34:28.348 [DEBUG] [Thread-2710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:34:28.348 [DEBUG] [Thread-2710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:34:28.396 [DEBUG] [Thread-2710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:34:28.396 [DEBUG] [Thread-2710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:34:28.407 [DEBUG] [Thread-2710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:34:28.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:34:28.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:34:28.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:34:28.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:34:28.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:34:28.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:34:28.444 [DEBUG] [Thread-2710] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:34:31.161 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:34:31.162 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:34:34.326 [DEBUG] [Thread-2712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:34:49.374 [DEBUG] [Thread-2713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:34:58.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:34:58.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:34:58.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:34:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 34, 51), 0.57, 96.15, 0.0, 21.97, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:34:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:34:51
2025-12-25T01:34:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:34:59.455 [DEBUG] [Thread-2714] [transport.py] [_log()] starting thread (client mode): 0xb957b490
2025-12-25T01:34:59.455 [DEBUG] [Thread-2714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:34:59.474 [DEBUG] [Thread-2714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:34:59.474 [INFO] [Thread-2714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] client lang: <none>
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] server lang: <none>
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] kex follows: False
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] Compression: none
2025-12-25T01:34:59.478 [DEBUG] [Thread-2714] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:34:59.495 [DEBUG] [Thread-2714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:34:59.496 [DEBUG] [Thread-2714] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:34:59.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:34:59.497 [DEBUG] [Thread-2714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:34:59.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:34:59.499 [DEBUG] [Thread-2714] [transport.py] [_log()] userauth is OK
2025-12-25T01:34:59.499 [DEBUG] [Thread-2714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:34:59.499 [DEBUG] [Thread-2714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:34:59.499 [DEBUG] [Thread-2714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:34:59.500 [DEBUG] [Thread-2714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:34:59.523 [INFO] [Thread-2714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:34:59.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:35:00.119 [DEBUG] [Thread-2714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:35:00.119 [DEBUG] [Thread-2714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:35:00.119 [DEBUG] [Thread-2714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:35:00.160 [DEBUG] [Thread-2714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:35:00.160 [DEBUG] [Thread-2714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:35:00.164 [DEBUG] [Thread-2714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:35:00.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:35:00.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:35:00.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:35:00.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:35:00.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:35:00.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:35:00.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:35:00.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:35:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:35:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.982350 -999.00  +12.00  15.39     93  +10.90 1 3 1 3 1     0    0 0.95 -4.52 ----- 19.5 15.4 139.8 22.5 13.7 -3.4 13.6 -3.1 13.4 -3.2 13.7 -3.5
2025-12-25T01:35:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:35:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:35:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.982350
2025-12-25T01:35:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:35:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:35:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:35:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:35:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:35:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:34:51', tmtdew=0.57, humidity=96.15, cloud=0.0, wind=21.97, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:34:35.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:35:00.184 [DEBUG] [Thread-2714] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:35:00.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:35:00.278 [DEBUG] [Thread-2717] [transport.py] [_log()] starting thread (client mode): 0xb95781f0
2025-12-25T01:35:00.279 [DEBUG] [Thread-2717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:35:00.296 [DEBUG] [Thread-2717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:35:00.296 [INFO] [Thread-2717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:35:00.304 [DEBUG] [Thread-2717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:35:00.304 [DEBUG] [Thread-2717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:35:00.304 [DEBUG] [Thread-2717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:35:00.304 [DEBUG] [Thread-2717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:35:00.304 [DEBUG] [Thread-2717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:35:00.305 [DEBUG] [Thread-2717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:35:00.305 [DEBUG] [Thread-2717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:35:00.305 [DEBUG] [Thread-2717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:35:00.305 [DEBUG] [Thread-2717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:35:00.305 [DEBUG] [Thread-2717] [transport.py] [_log()] client lang: <none>
2025-12-25T01:35:00.305 [DEBUG] [Thread-2717] [transport.py] [_log()] server lang: <none>
2025-12-25T01:35:00.305 [DEBUG] [Thread-2717] [transport.py] [_log()] kex follows: False
2025-12-25T01:35:00.305 [DEBUG] [Thread-2717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:35:00.306 [DEBUG] [Thread-2717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:35:00.306 [DEBUG] [Thread-2717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:35:00.306 [DEBUG] [Thread-2717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:35:00.306 [DEBUG] [Thread-2717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:35:00.306 [DEBUG] [Thread-2717] [transport.py] [_log()] Compression: none
2025-12-25T01:35:00.306 [DEBUG] [Thread-2717] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:35:00.364 [DEBUG] [Thread-2717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:35:00.364 [DEBUG] [Thread-2717] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:35:00.365 [DEBUG] [Thread-2717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:35:00.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:35:00.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:35:00.423 [DEBUG] [Thread-2717] [transport.py] [_log()] userauth is OK
2025-12-25T01:35:00.423 [DEBUG] [Thread-2717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:35:00.424 [DEBUG] [Thread-2717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:35:00.424 [DEBUG] [Thread-2717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:35:00.424 [DEBUG] [Thread-2717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:35:00.444 [INFO] [Thread-2717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:35:00.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:35:00.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:35:01.278 [DEBUG] [Thread-2717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:35:01.278 [DEBUG] [Thread-2717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:35:01.326 [DEBUG] [Thread-2717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:35:01.326 [DEBUG] [Thread-2717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:35:01.335 [DEBUG] [Thread-2717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:35:01.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:35:01.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:35:01.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:35:01.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:35:01.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:35:01.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:35:01.372 [DEBUG] [Thread-2717] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:35:04.409 [DEBUG] [Thread-2719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:35:19.447 [DEBUG] [Thread-2720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:35:24.559 [DEBUG] [Thread-2721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:35:31.365 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:35:31.366 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:35:31.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:35:31.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:35:31.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:35:32.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 35, 23), 0.57, 96.15, 0.0, 21.91, 11.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:35:32.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:35:23
2025-12-25T01:35:32.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:35:32.371 [DEBUG] [Thread-2722] [transport.py] [_log()] starting thread (client mode): 0xb95f1cf0
2025-12-25T01:35:32.371 [DEBUG] [Thread-2722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:35:32.395 [DEBUG] [Thread-2722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:35:32.396 [INFO] [Thread-2722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:35:32.399 [DEBUG] [Thread-2722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:35:32.400 [DEBUG] [Thread-2722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:35:32.400 [DEBUG] [Thread-2722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:35:32.400 [DEBUG] [Thread-2722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:35:32.400 [DEBUG] [Thread-2722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:35:32.400 [DEBUG] [Thread-2722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:35:32.400 [DEBUG] [Thread-2722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:35:32.400 [DEBUG] [Thread-2722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:35:32.400 [DEBUG] [Thread-2722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] client lang: <none>
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] server lang: <none>
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] kex follows: False
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] Compression: none
2025-12-25T01:35:32.401 [DEBUG] [Thread-2722] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:35:32.418 [DEBUG] [Thread-2722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:35:32.419 [DEBUG] [Thread-2722] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:35:32.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:35:32.420 [DEBUG] [Thread-2722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:35:32.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:35:32.461 [DEBUG] [Thread-2722] [transport.py] [_log()] userauth is OK
2025-12-25T01:35:32.461 [DEBUG] [Thread-2722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:35:32.462 [DEBUG] [Thread-2722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:35:32.462 [DEBUG] [Thread-2722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:35:32.462 [DEBUG] [Thread-2722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:35:32.498 [INFO] [Thread-2722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:35:32.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:35:33.133 [DEBUG] [Thread-2722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:35:33.133 [DEBUG] [Thread-2722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:35:33.133 [DEBUG] [Thread-2722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:35:33.174 [DEBUG] [Thread-2722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:35:33.174 [DEBUG] [Thread-2722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:35:33.178 [DEBUG] [Thread-2722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:35:33.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:35:33.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:35:33.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:35:33.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:35:33.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:35:33.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:35:33.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:35:33.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:35:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:35:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.982697 -999.00  +11.90  21.23     93  +10.80 1 3 1 3 1     0    0 0.97 -3.98 ----- 18.6 21.2 149.8 26.0 13.7 -4.5 13.6 -4.3 13.4 -4.6 13.7 -3.6
2025-12-25T01:35:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:35:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:35:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.982697
2025-12-25T01:35:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:35:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:35:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:35:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:35:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:35:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:35:23', tmtdew=0.57, humidity=96.15, cloud=0.0, wind=21.91, temperature=11.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:35:05.021', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:35:33.204 [DEBUG] [Thread-2722] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:35:33.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:35:33.299 [DEBUG] [Thread-2725] [transport.py] [_log()] starting thread (client mode): 0xb9579d80
2025-12-25T01:35:33.299 [DEBUG] [Thread-2725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:35:33.313 [DEBUG] [Thread-2725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:35:33.313 [INFO] [Thread-2725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] client lang: <none>
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] server lang: <none>
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] kex follows: False
2025-12-25T01:35:33.320 [DEBUG] [Thread-2725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:35:33.321 [DEBUG] [Thread-2725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:35:33.321 [DEBUG] [Thread-2725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:35:33.321 [DEBUG] [Thread-2725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:35:33.321 [DEBUG] [Thread-2725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:35:33.321 [DEBUG] [Thread-2725] [transport.py] [_log()] Compression: none
2025-12-25T01:35:33.321 [DEBUG] [Thread-2725] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:35:33.379 [DEBUG] [Thread-2725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:35:33.379 [DEBUG] [Thread-2725] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:35:33.380 [DEBUG] [Thread-2725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:35:33.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:35:33.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:35:33.435 [DEBUG] [Thread-2725] [transport.py] [_log()] userauth is OK
2025-12-25T01:35:33.435 [DEBUG] [Thread-2725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:35:33.436 [DEBUG] [Thread-2725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:35:33.436 [DEBUG] [Thread-2725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:35:33.436 [DEBUG] [Thread-2725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:35:33.454 [INFO] [Thread-2725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:35:33.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:35:33.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:35:34.278 [DEBUG] [Thread-2725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:35:34.278 [DEBUG] [Thread-2725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:35:34.326 [DEBUG] [Thread-2725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:35:34.326 [DEBUG] [Thread-2725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:35:34.335 [DEBUG] [Thread-2725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:35:34.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:35:34.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:35:34.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:35:34.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:35:34.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:35:34.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:35:34.372 [DEBUG] [Thread-2725] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:35:34.479 [DEBUG] [Thread-2727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:35:49.531 [DEBUG] [Thread-2728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:36:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:36:04.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:36:04.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:36:04.563 [DEBUG] [Thread-2729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:36:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 35, 55), 0.61, 96.18, 0.0, 23.43, 11.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:36:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:35:55
2025-12-25T01:36:05.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:36:05.427 [DEBUG] [Thread-2730] [transport.py] [_log()] starting thread (client mode): 0xb6b01cf0
2025-12-25T01:36:05.427 [DEBUG] [Thread-2730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:36:05.448 [DEBUG] [Thread-2730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:36:05.448 [INFO] [Thread-2730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] client lang: <none>
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] server lang: <none>
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] kex follows: False
2025-12-25T01:36:05.451 [DEBUG] [Thread-2730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:36:05.452 [DEBUG] [Thread-2730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:36:05.452 [DEBUG] [Thread-2730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:36:05.452 [DEBUG] [Thread-2730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:36:05.452 [DEBUG] [Thread-2730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:36:05.452 [DEBUG] [Thread-2730] [transport.py] [_log()] Compression: none
2025-12-25T01:36:05.452 [DEBUG] [Thread-2730] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:36:05.470 [DEBUG] [Thread-2730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:36:05.470 [DEBUG] [Thread-2730] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:36:05.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:36:05.471 [DEBUG] [Thread-2730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:36:05.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:36:05.472 [DEBUG] [Thread-2730] [transport.py] [_log()] userauth is OK
2025-12-25T01:36:05.472 [DEBUG] [Thread-2730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:36:05.472 [DEBUG] [Thread-2730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:36:05.472 [DEBUG] [Thread-2730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:36:05.472 [DEBUG] [Thread-2730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:36:05.487 [INFO] [Thread-2730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:36:05.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:36:06.121 [DEBUG] [Thread-2730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:36:06.121 [DEBUG] [Thread-2730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:36:06.121 [DEBUG] [Thread-2730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:36:06.163 [DEBUG] [Thread-2730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:36:06.163 [DEBUG] [Thread-2730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:36:06.165 [DEBUG] [Thread-2730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:36:06.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:36:06.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:36:06.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:36:06.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:36:06.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:36:06.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:36:06.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.983045 -999.00  +11.90  13.74     93  +10.80 1 3 1 3 1     0    0 0.99 -3.64 ----- 15.9 13.7 153.5 27.2 13.7 -4.0 13.6 -3.9 13.4 -4.1 13.7 -3.9
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.983045
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:36:06.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:35:55', tmtdew=0.61, humidity=96.18, cloud=0.0, wind=23.43, temperature=11.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:35:35.088', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:36:06.182 [DEBUG] [Thread-2730] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:36:06.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:36:06.267 [DEBUG] [Thread-2733] [transport.py] [_log()] starting thread (client mode): 0xb95f0790
2025-12-25T01:36:06.267 [DEBUG] [Thread-2733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:36:06.285 [DEBUG] [Thread-2733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:36:06.285 [INFO] [Thread-2733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:36:06.292 [DEBUG] [Thread-2733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:36:06.292 [DEBUG] [Thread-2733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:36:06.292 [DEBUG] [Thread-2733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:36:06.292 [DEBUG] [Thread-2733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] client lang: <none>
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] server lang: <none>
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] kex follows: False
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] Compression: none
2025-12-25T01:36:06.293 [DEBUG] [Thread-2733] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:36:06.349 [DEBUG] [Thread-2733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:36:06.349 [DEBUG] [Thread-2733] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:36:06.349 [DEBUG] [Thread-2733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:36:06.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:36:06.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:36:06.406 [DEBUG] [Thread-2733] [transport.py] [_log()] userauth is OK
2025-12-25T01:36:06.407 [DEBUG] [Thread-2733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:36:06.407 [DEBUG] [Thread-2733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:36:06.407 [DEBUG] [Thread-2733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:36:06.407 [DEBUG] [Thread-2733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:36:06.420 [INFO] [Thread-2733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:36:06.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:36:06.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:36:07.266 [DEBUG] [Thread-2733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:36:07.266 [DEBUG] [Thread-2733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:36:07.314 [DEBUG] [Thread-2733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:36:07.315 [DEBUG] [Thread-2733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:36:07.324 [DEBUG] [Thread-2733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:36:07.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:36:07.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:36:07.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:36:07.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:36:07.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:36:07.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:36:07.361 [DEBUG] [Thread-2733] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:36:19.597 [DEBUG] [Thread-2735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:36:24.634 [DEBUG] [Thread-2736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:36:31.570 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:36:31.571 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:36:34.649 [DEBUG] [Thread-2737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:36:37.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:36:37.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:36:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:36:38.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 36, 27), 0.62, 96.17, 0.0, 23.82, 11.98, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:36:38.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:36:27
2025-12-25T01:36:38.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:36:38.363 [DEBUG] [Thread-2738] [transport.py] [_log()] starting thread (client mode): 0xb95d4a90
2025-12-25T01:36:38.363 [DEBUG] [Thread-2738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:36:38.383 [DEBUG] [Thread-2738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:36:38.383 [INFO] [Thread-2738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:36:38.386 [DEBUG] [Thread-2738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:36:38.386 [DEBUG] [Thread-2738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:36:38.386 [DEBUG] [Thread-2738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] client lang: <none>
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] server lang: <none>
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] kex follows: False
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] Compression: none
2025-12-25T01:36:38.387 [DEBUG] [Thread-2738] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:36:38.405 [DEBUG] [Thread-2738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:36:38.406 [DEBUG] [Thread-2738] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:36:38.406 [DEBUG] [Thread-2738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:36:38.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:36:38.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:36:38.449 [DEBUG] [Thread-2738] [transport.py] [_log()] userauth is OK
2025-12-25T01:36:38.449 [DEBUG] [Thread-2738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:36:38.449 [DEBUG] [Thread-2738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:36:38.449 [DEBUG] [Thread-2738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:36:38.450 [DEBUG] [Thread-2738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:36:38.470 [INFO] [Thread-2738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:36:38.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:36:39.061 [DEBUG] [Thread-2738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:36:39.061 [DEBUG] [Thread-2738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:36:39.061 [DEBUG] [Thread-2738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:36:39.102 [DEBUG] [Thread-2738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:36:39.102 [DEBUG] [Thread-2738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:36:39.106 [DEBUG] [Thread-2738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:36:39.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:36:39.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:36:39.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:36:39.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:36:39.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:36:39.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:36:39.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:36:39.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:36:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:36:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.983392 -999.00  +11.90  16.46     93  +10.80 1 3 1 3 1     0    0 1.00 -3.53 ----- 16.4 16.5 146.6 26.7 13.7 -4.6 13.6 -4.9 13.4 -4.8 13.7 -4.7
2025-12-25T01:36:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:36:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:36:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.983392
2025-12-25T01:36:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:36:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:36:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:36:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:36:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:36:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:36:27', tmtdew=0.62, humidity=96.17, cloud=0.0, wind=23.82, temperature=11.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:36:05.069', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:36:39.132 [DEBUG] [Thread-2738] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:36:39.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:36:39.225 [DEBUG] [Thread-2741] [transport.py] [_log()] starting thread (client mode): 0xb95d5f60
2025-12-25T01:36:39.225 [DEBUG] [Thread-2741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:36:39.240 [DEBUG] [Thread-2741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:36:39.240 [INFO] [Thread-2741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:36:39.248 [DEBUG] [Thread-2741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:36:39.248 [DEBUG] [Thread-2741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:36:39.248 [DEBUG] [Thread-2741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:36:39.248 [DEBUG] [Thread-2741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:36:39.248 [DEBUG] [Thread-2741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] client lang: <none>
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] server lang: <none>
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] kex follows: False
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:36:39.249 [DEBUG] [Thread-2741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:36:39.250 [DEBUG] [Thread-2741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:36:39.250 [DEBUG] [Thread-2741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:36:39.250 [DEBUG] [Thread-2741] [transport.py] [_log()] Compression: none
2025-12-25T01:36:39.250 [DEBUG] [Thread-2741] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:36:39.308 [DEBUG] [Thread-2741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:36:39.308 [DEBUG] [Thread-2741] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:36:39.309 [DEBUG] [Thread-2741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:36:39.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:36:39.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:36:39.363 [DEBUG] [Thread-2741] [transport.py] [_log()] userauth is OK
2025-12-25T01:36:39.364 [DEBUG] [Thread-2741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:36:39.364 [DEBUG] [Thread-2741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:36:39.364 [DEBUG] [Thread-2741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:36:39.364 [DEBUG] [Thread-2741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:36:39.382 [INFO] [Thread-2741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:36:39.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:36:39.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:36:40.213 [DEBUG] [Thread-2741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:36:40.213 [DEBUG] [Thread-2741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:36:40.260 [DEBUG] [Thread-2741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:36:40.260 [DEBUG] [Thread-2741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:36:40.268 [DEBUG] [Thread-2741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:36:40.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:36:40.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:36:40.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:36:40.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:36:40.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:36:40.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:36:40.300 [DEBUG] [Thread-2741] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:36:49.683 [DEBUG] [Thread-2743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:37:04.736 [DEBUG] [Thread-2744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:37:10.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:37:10.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:37:10.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:37:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 36, 59), 0.57, 96.17, 0.0, 25.48, 11.9, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:37:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:36:59
2025-12-25T01:37:11.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:37:11.283 [DEBUG] [Thread-2745] [transport.py] [_log()] starting thread (client mode): 0xb95d63b0
2025-12-25T01:37:11.284 [DEBUG] [Thread-2745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:37:11.304 [DEBUG] [Thread-2745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:37:11.304 [INFO] [Thread-2745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:37:11.307 [DEBUG] [Thread-2745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:37:11.307 [DEBUG] [Thread-2745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:37:11.307 [DEBUG] [Thread-2745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:37:11.307 [DEBUG] [Thread-2745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:37:11.307 [DEBUG] [Thread-2745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:37:11.307 [DEBUG] [Thread-2745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:37:11.307 [DEBUG] [Thread-2745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] client lang: <none>
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] server lang: <none>
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] kex follows: False
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] Compression: none
2025-12-25T01:37:11.308 [DEBUG] [Thread-2745] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:37:11.324 [DEBUG] [Thread-2745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:37:11.324 [DEBUG] [Thread-2745] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:37:11.325 [DEBUG] [Thread-2745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:37:11.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:37:11.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:37:11.369 [DEBUG] [Thread-2745] [transport.py] [_log()] userauth is OK
2025-12-25T01:37:11.369 [DEBUG] [Thread-2745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:37:11.370 [DEBUG] [Thread-2745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:37:11.370 [DEBUG] [Thread-2745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:37:11.370 [DEBUG] [Thread-2745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:37:11.407 [INFO] [Thread-2745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:37:11.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:37:12.070 [DEBUG] [Thread-2745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:37:12.071 [DEBUG] [Thread-2745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:37:12.072 [DEBUG] [Thread-2745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:37:12.112 [DEBUG] [Thread-2745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:37:12.112 [DEBUG] [Thread-2745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:37:12.116 [DEBUG] [Thread-2745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:37:12.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:37:12.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:37:12.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:37:12.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:37:12.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:37:12.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:37:12.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:37:12.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:37:12.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:37:12.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.983739 -999.00  +11.80  20.47     93  +10.80 1 3 1 3 1     0    0 1.02 -3.57 ----- 21.0 20.5 156.8 30.0 13.7 -4.5 13.5 -4.5 13.3 -4.9 13.7 -4.9
2025-12-25T01:37:12.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:37:12.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:37:12.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.983739
2025-12-25T01:37:12.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:37:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:37:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:37:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:37:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:37:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:36:59', tmtdew=0.57, humidity=96.17, cloud=0.0, wind=25.48, temperature=11.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:36:35.050', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:37:12.141 [DEBUG] [Thread-2745] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:37:12.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:37:12.234 [DEBUG] [Thread-2748] [transport.py] [_log()] starting thread (client mode): 0xb9592d70
2025-12-25T01:37:12.234 [DEBUG] [Thread-2748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:37:12.248 [DEBUG] [Thread-2748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:37:12.248 [INFO] [Thread-2748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:37:12.256 [DEBUG] [Thread-2748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:37:12.256 [DEBUG] [Thread-2748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:37:12.256 [DEBUG] [Thread-2748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:37:12.256 [DEBUG] [Thread-2748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:37:12.256 [DEBUG] [Thread-2748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:37:12.256 [DEBUG] [Thread-2748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] client lang: <none>
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] server lang: <none>
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] kex follows: False
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:37:12.257 [DEBUG] [Thread-2748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:37:12.258 [DEBUG] [Thread-2748] [transport.py] [_log()] Compression: none
2025-12-25T01:37:12.259 [DEBUG] [Thread-2748] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:37:12.316 [DEBUG] [Thread-2748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:37:12.316 [DEBUG] [Thread-2748] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:37:12.317 [DEBUG] [Thread-2748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:37:12.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:37:12.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:37:12.372 [DEBUG] [Thread-2748] [transport.py] [_log()] userauth is OK
2025-12-25T01:37:12.372 [DEBUG] [Thread-2748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:37:12.372 [DEBUG] [Thread-2748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:37:12.372 [DEBUG] [Thread-2748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:37:12.372 [DEBUG] [Thread-2748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:37:12.396 [INFO] [Thread-2748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:37:12.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:37:12.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:37:13.185 [DEBUG] [Thread-2748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:37:13.185 [DEBUG] [Thread-2748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:37:13.233 [DEBUG] [Thread-2748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:37:13.233 [DEBUG] [Thread-2748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:37:13.241 [DEBUG] [Thread-2748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:37:13.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:37:13.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:37:13.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:37:13.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:37:13.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:37:13.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:37:13.277 [DEBUG] [Thread-2748] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:37:19.770 [DEBUG] [Thread-2750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:37:24.715 [DEBUG] [Thread-2751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:37:31.772 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:37:31.774 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:37:34.807 [DEBUG] [Thread-2752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:37:43.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:37:43.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:37:43.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
2025-12-25T01:37:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 37, 32), 0.57, 96.13, 0.0, 24.9, 11.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:37:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:37:32
2025-12-25T01:37:44.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:37:44.295 [DEBUG] [Thread-2753] [transport.py] [_log()] starting thread (client mode): 0xb95d51e0
2025-12-25T01:37:44.295 [DEBUG] [Thread-2753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:37:44.316 [DEBUG] [Thread-2753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:37:44.316 [INFO] [Thread-2753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:37:44.319 [DEBUG] [Thread-2753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:37:44.319 [DEBUG] [Thread-2753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:37:44.319 [DEBUG] [Thread-2753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] client lang: <none>
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] server lang: <none>
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] kex follows: False
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] Compression: none
2025-12-25T01:37:44.320 [DEBUG] [Thread-2753] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:37:44.338 [DEBUG] [Thread-2753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:37:44.338 [DEBUG] [Thread-2753] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:37:44.339 [DEBUG] [Thread-2753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:37:44.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:37:44.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:37:44.341 [DEBUG] [Thread-2753] [transport.py] [_log()] userauth is OK
2025-12-25T01:37:44.341 [DEBUG] [Thread-2753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:37:44.341 [DEBUG] [Thread-2753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:37:44.341 [DEBUG] [Thread-2753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:37:44.341 [DEBUG] [Thread-2753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:37:44.377 [INFO] [Thread-2753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:37:44.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:37:45.037 [DEBUG] [Thread-2753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:37:45.037 [DEBUG] [Thread-2753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:37:45.037 [DEBUG] [Thread-2753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:37:45.078 [DEBUG] [Thread-2753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:37:45.078 [DEBUG] [Thread-2753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:37:45.082 [DEBUG] [Thread-2753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:37:45.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:37:45.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:37:45.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:37:45.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:37:45.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:37:45.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:37:45.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:37:45.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:37:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:37:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.984086 -999.00  +11.80  15.74     93  +10.80 1 3 1 3 1     0    0 1.00 -3.71 ----- 20.2 15.7 159.4 27.8 13.7 -4.8 13.5 -4.6 13.4 -4.9 13.7 -4.5
2025-12-25T01:37:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:37:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:37:45.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.984086
2025-12-25T01:37:45.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:37:45.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:37:45.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:37:45.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:37:45.109 [DEBUG] [Thread-2753] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:37:45.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:37:45.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:37:32', tmtdew=0.57, humidity=96.13, cloud=0.0, wind=24.9, temperature=11.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:37:05.030', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:37:45.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:37:45.203 [DEBUG] [Thread-2756] [transport.py] [_log()] starting thread (client mode): 0xb95d46d0
2025-12-25T01:37:45.203 [DEBUG] [Thread-2756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:37:45.218 [DEBUG] [Thread-2756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:37:45.218 [INFO] [Thread-2756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] client lang: <none>
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] server lang: <none>
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] kex follows: False
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:37:45.226 [DEBUG] [Thread-2756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:37:45.227 [DEBUG] [Thread-2756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:37:45.227 [DEBUG] [Thread-2756] [transport.py] [_log()] Compression: none
2025-12-25T01:37:45.227 [DEBUG] [Thread-2756] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:37:45.283 [DEBUG] [Thread-2756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:37:45.284 [DEBUG] [Thread-2756] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:37:45.285 [DEBUG] [Thread-2756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:37:45.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:37:45.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:37:45.339 [DEBUG] [Thread-2756] [transport.py] [_log()] userauth is OK
2025-12-25T01:37:45.339 [DEBUG] [Thread-2756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:37:45.340 [DEBUG] [Thread-2756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:37:45.340 [DEBUG] [Thread-2756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:37:45.340 [DEBUG] [Thread-2756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:37:45.361 [INFO] [Thread-2756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:37:45.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:37:45.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:37:46.203 [DEBUG] [Thread-2756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:37:46.203 [DEBUG] [Thread-2756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:37:46.251 [DEBUG] [Thread-2756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:37:46.251 [DEBUG] [Thread-2756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:37:46.260 [DEBUG] [Thread-2756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:37:46.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:37:46.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')
2025-12-25T01:37:46.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:37:46.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:37:46.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:37:46.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:37:46.297 [DEBUG] [Thread-2756] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:37:49.848 [DEBUG] [Thread-2758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:38:04.894 [DEBUG] [Thread-2759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:38:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:38:16.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:38: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
2025-12-25T01:38:17.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 38, 4), 0.56, 96.2, 0.0, 24.74, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:38:17.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:38:04
2025-12-25T01:38:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:38:17.295 [DEBUG] [Thread-2760] [transport.py] [_log()] starting thread (client mode): 0xb95913f0
2025-12-25T01:38:17.295 [DEBUG] [Thread-2760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:38:17.317 [DEBUG] [Thread-2760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:38:17.317 [INFO] [Thread-2760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] client lang: <none>
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] server lang: <none>
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] kex follows: False
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:38:17.320 [DEBUG] [Thread-2760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:38:17.321 [DEBUG] [Thread-2760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:38:17.321 [DEBUG] [Thread-2760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:38:17.321 [DEBUG] [Thread-2760] [transport.py] [_log()] Compression: none
2025-12-25T01:38:17.321 [DEBUG] [Thread-2760] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:38:17.338 [DEBUG] [Thread-2760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:38:17.339 [DEBUG] [Thread-2760] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:38:17.340 [DEBUG] [Thread-2760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:38:17.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:38:17.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:38:17.342 [DEBUG] [Thread-2760] [transport.py] [_log()] userauth is OK
2025-12-25T01:38:17.343 [DEBUG] [Thread-2760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:38:17.343 [DEBUG] [Thread-2760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:38:17.343 [DEBUG] [Thread-2760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:38:17.343 [DEBUG] [Thread-2760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:38:17.367 [INFO] [Thread-2760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:38:17.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:38:18.017 [DEBUG] [Thread-2760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:38:18.017 [DEBUG] [Thread-2760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:38:18.017 [DEBUG] [Thread-2760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:38:18.058 [DEBUG] [Thread-2760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:38:18.058 [DEBUG] [Thread-2760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:38:18.061 [DEBUG] [Thread-2760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:38:18.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:38:18.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:38:18.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:38:18.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:38:18.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:38:18.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:38:18.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:38:18.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:38:18.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:38:18.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.984781 -999.00  +11.90  15.54     93  +10.80 1 3 1 3 1     0    0 0.93 -4.67 ----- 15.3 15.5 158.8 20.8 13.6 -4.0 13.5 -3.7 13.4 -4.0 13.7 -4.0
2025-12-25T01:38:18.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:38:18.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:38:18.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.984781
2025-12-25T01:38:18.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:38:18.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:38:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:38:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:38:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:38:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:38:04', tmtdew=0.56, humidity=96.2, cloud=0.0, wind=24.74, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:38:05.078', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:38:18.089 [DEBUG] [Thread-2760] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:38:18.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:38:18.192 [DEBUG] [Thread-2763] [transport.py] [_log()] starting thread (client mode): 0xb95d66e0
2025-12-25T01:38:18.192 [DEBUG] [Thread-2763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:38:18.207 [DEBUG] [Thread-2763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:38:18.207 [INFO] [Thread-2763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] client lang: <none>
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] server lang: <none>
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] kex follows: False
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:38:18.215 [DEBUG] [Thread-2763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:38:18.216 [DEBUG] [Thread-2763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:38:18.216 [DEBUG] [Thread-2763] [transport.py] [_log()] Compression: none
2025-12-25T01:38:18.216 [DEBUG] [Thread-2763] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:38:18.271 [DEBUG] [Thread-2763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:38:18.272 [DEBUG] [Thread-2763] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:38:18.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:38:18.273 [DEBUG] [Thread-2763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:38:18.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:38:18.328 [DEBUG] [Thread-2763] [transport.py] [_log()] userauth is OK
2025-12-25T01:38:18.329 [DEBUG] [Thread-2763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:38:18.329 [DEBUG] [Thread-2763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:38:18.329 [DEBUG] [Thread-2763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:38:18.329 [DEBUG] [Thread-2763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:38:18.348 [INFO] [Thread-2763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:38:18.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:38:18.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:38:19.205 [DEBUG] [Thread-2763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:38:19.205 [DEBUG] [Thread-2763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:38:19.253 [DEBUG] [Thread-2763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:38:19.253 [DEBUG] [Thread-2763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:38:19.262 [DEBUG] [Thread-2763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:38:19.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:38:19.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:38:19.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:38:19.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:38:19.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:38:19.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:38:19.299 [DEBUG] [Thread-2763] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:38:19.929 [DEBUG] [Thread-2765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:38:24.791 [DEBUG] [Thread-2766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:38:31.977 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:38:31.978 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:38:34.980 [DEBUG] [Thread-2767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:38:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:38:49.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:38:49.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
2025-12-25T01:38:50.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 38, 36), 0.56, 96.2, 0.0, 23.66, 11.9, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:38:50.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:38:36
2025-12-25T01:38:50.014 [DEBUG] [Thread-2768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:38:50.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:38:50.294 [DEBUG] [Thread-2769] [transport.py] [_log()] starting thread (client mode): 0xb95f0550
2025-12-25T01:38:50.294 [DEBUG] [Thread-2769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:38:50.315 [DEBUG] [Thread-2769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:38:50.315 [INFO] [Thread-2769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:38:50.318 [DEBUG] [Thread-2769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:38:50.318 [DEBUG] [Thread-2769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:38:50.318 [DEBUG] [Thread-2769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:38:50.318 [DEBUG] [Thread-2769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:38:50.318 [DEBUG] [Thread-2769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] client lang: <none>
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] server lang: <none>
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] kex follows: False
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:38:50.319 [DEBUG] [Thread-2769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:38:50.320 [DEBUG] [Thread-2769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:38:50.320 [DEBUG] [Thread-2769] [transport.py] [_log()] Compression: none
2025-12-25T01:38:50.320 [DEBUG] [Thread-2769] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:38:50.339 [DEBUG] [Thread-2769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:38:50.340 [DEBUG] [Thread-2769] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:38:50.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:38:50.342 [DEBUG] [Thread-2769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:38:50.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:38:50.344 [DEBUG] [Thread-2769] [transport.py] [_log()] userauth is OK
2025-12-25T01:38:50.344 [DEBUG] [Thread-2769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:38:50.345 [DEBUG] [Thread-2769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:38:50.345 [DEBUG] [Thread-2769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:38:50.345 [DEBUG] [Thread-2769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:38:50.378 [INFO] [Thread-2769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:38:50.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:38:51.056 [DEBUG] [Thread-2769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:38:51.057 [DEBUG] [Thread-2769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:38:51.057 [DEBUG] [Thread-2769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:38:51.098 [DEBUG] [Thread-2769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:38:51.098 [DEBUG] [Thread-2769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:38:51.102 [DEBUG] [Thread-2769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:38:51.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:38:51.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:38:51.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:38:51.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:38:51.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:38:51.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:38:51.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:38:51.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:38:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:38:51.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.985128 -999.00  +11.80  19.39     93  +10.80 1 3 1 3 1     0    0 0.96 -5.27 ----- 21.0 19.4 144.8 23.4 13.7 -4.0 13.5 -4.1 13.4 -4.4 13.7 -4.2
2025-12-25T01:38:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:38:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:38:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.985128
2025-12-25T01:38:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:38:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:38:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:38:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:38:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:38:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:38:36', tmtdew=0.56, humidity=96.2, cloud=0.0, wind=23.66, temperature=11.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:38:35.059', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:38:51.128 [DEBUG] [Thread-2769] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:38:51.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:38:51.221 [DEBUG] [Thread-2772] [transport.py] [_log()] starting thread (client mode): 0xb95d7be0
2025-12-25T01:38:51.221 [DEBUG] [Thread-2772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:38:51.236 [DEBUG] [Thread-2772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:38:51.236 [INFO] [Thread-2772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:38:51.244 [DEBUG] [Thread-2772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:38:51.244 [DEBUG] [Thread-2772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:38:51.244 [DEBUG] [Thread-2772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:38:51.244 [DEBUG] [Thread-2772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:38:51.244 [DEBUG] [Thread-2772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:38:51.244 [DEBUG] [Thread-2772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] client lang: <none>
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] server lang: <none>
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] kex follows: False
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:38:51.245 [DEBUG] [Thread-2772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:38:51.246 [DEBUG] [Thread-2772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:38:51.246 [DEBUG] [Thread-2772] [transport.py] [_log()] Compression: none
2025-12-25T01:38:51.246 [DEBUG] [Thread-2772] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:38:51.304 [DEBUG] [Thread-2772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:38:51.304 [DEBUG] [Thread-2772] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:38:51.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:38:51.306 [DEBUG] [Thread-2772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:38:51.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:38:51.360 [DEBUG] [Thread-2772] [transport.py] [_log()] userauth is OK
2025-12-25T01:38:51.361 [DEBUG] [Thread-2772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:38:51.361 [DEBUG] [Thread-2772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:38:51.361 [DEBUG] [Thread-2772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:38:51.361 [DEBUG] [Thread-2772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:38:51.381 [INFO] [Thread-2772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:38:51.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:38:51.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:38:52.176 [DEBUG] [Thread-2772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:38:52.176 [DEBUG] [Thread-2772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:38:52.224 [DEBUG] [Thread-2772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:38:52.224 [DEBUG] [Thread-2772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:38:52.234 [DEBUG] [Thread-2772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:38:52.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:38:52.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:38:52.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:38:52.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:38:52.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:38:52.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:38:52.273 [DEBUG] [Thread-2772] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:39:05.048 [DEBUG] [Thread-2774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:39:20.103 [DEBUG] [Thread-2775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:39:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:39:22.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:39:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:39:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 39, 8), 0.56, 96.23, 0.0, 22.53, 11.93, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:39:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:39:08
2025-12-25T01:39:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:39:23.286 [DEBUG] [Thread-2776] [transport.py] [_log()] starting thread (client mode): 0xb95b1960
2025-12-25T01:39:23.286 [DEBUG] [Thread-2776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:39:23.306 [DEBUG] [Thread-2776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:39:23.307 [INFO] [Thread-2776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:39:23.309 [DEBUG] [Thread-2776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:39:23.309 [DEBUG] [Thread-2776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:39:23.309 [DEBUG] [Thread-2776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:39:23.309 [DEBUG] [Thread-2776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] client lang: <none>
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] server lang: <none>
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] kex follows: False
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] Compression: none
2025-12-25T01:39:23.310 [DEBUG] [Thread-2776] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:39:23.328 [DEBUG] [Thread-2776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:39:23.328 [DEBUG] [Thread-2776] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:39:23.329 [DEBUG] [Thread-2776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:39:23.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:39:23.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:39:23.331 [DEBUG] [Thread-2776] [transport.py] [_log()] userauth is OK
2025-12-25T01:39:23.331 [DEBUG] [Thread-2776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:39:23.331 [DEBUG] [Thread-2776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:39:23.331 [DEBUG] [Thread-2776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:39:23.332 [DEBUG] [Thread-2776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:39:23.353 [INFO] [Thread-2776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:39:23.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:39:24.030 [DEBUG] [Thread-2776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:39:24.030 [DEBUG] [Thread-2776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:39:24.030 [DEBUG] [Thread-2776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:39:24.071 [DEBUG] [Thread-2776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:39:24.071 [DEBUG] [Thread-2776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:39:24.074 [DEBUG] [Thread-2776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:39:24.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:39:24.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:39:24.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:39:24.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:39:24.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:39:24.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:39:24.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:39:24.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:39:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:39:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.985475 -999.00  +11.90  17.24     93  +10.80 1 3 1 3 1     0    0 0.92 -5.65 ----- 16.1 17.2 147.5 23.0 13.7 -3.6 13.5 -3.2 13.3 -3.7 13.6 -4.9
2025-12-25T01:39:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:39:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:39:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.985475
2025-12-25T01:39:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:39:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:39:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:39:24.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:39:24.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:39:24.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:39:08', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=22.53, temperature=11.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:39:05.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:39:24.100 [DEBUG] [Thread-2776] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:39:24.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:39:24.195 [DEBUG] [Thread-2779] [transport.py] [_log()] starting thread (client mode): 0xb9591750
2025-12-25T01:39:24.195 [DEBUG] [Thread-2779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:39:24.210 [DEBUG] [Thread-2779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:39:24.210 [INFO] [Thread-2779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:39:24.218 [DEBUG] [Thread-2779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:39:24.218 [DEBUG] [Thread-2779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:39:24.218 [DEBUG] [Thread-2779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:39:24.218 [DEBUG] [Thread-2779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:39:24.218 [DEBUG] [Thread-2779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] client lang: <none>
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] server lang: <none>
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] kex follows: False
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:39:24.219 [DEBUG] [Thread-2779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:39:24.220 [DEBUG] [Thread-2779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:39:24.220 [DEBUG] [Thread-2779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:39:24.220 [DEBUG] [Thread-2779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:39:24.220 [DEBUG] [Thread-2779] [transport.py] [_log()] Compression: none
2025-12-25T01:39:24.220 [DEBUG] [Thread-2779] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:39:24.280 [DEBUG] [Thread-2779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:39:24.281 [DEBUG] [Thread-2779] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:39:24.282 [DEBUG] [Thread-2779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:39:24.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:39:24.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:39:24.336 [DEBUG] [Thread-2779] [transport.py] [_log()] userauth is OK
2025-12-25T01:39:24.337 [DEBUG] [Thread-2779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:39:24.337 [DEBUG] [Thread-2779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:39:24.337 [DEBUG] [Thread-2779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:39:24.337 [DEBUG] [Thread-2779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:39:24.357 [INFO] [Thread-2779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:39:24.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:39:24.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:39:24.857 [DEBUG] [Thread-2781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:39:25.154 [DEBUG] [Thread-2779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:39:25.154 [DEBUG] [Thread-2779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:39:25.202 [DEBUG] [Thread-2779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:39:25.202 [DEBUG] [Thread-2779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:39:25.212 [DEBUG] [Thread-2779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:39:25.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:39:25.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:39:25.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:39:25.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:39:25.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:39:25.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:39:25.248 [DEBUG] [Thread-2779] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:39:32.182 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:39:32.183 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:39:35.132 [DEBUG] [Thread-2782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:39:50.183 [DEBUG] [Thread-2783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:39:55.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:39:55.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:39:55.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:39:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 39, 40), 0.56, 96.22, 0.0, 23.71, 11.9, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:39:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:39:40
2025-12-25T01:39:56.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:39:56.318 [DEBUG] [Thread-2784] [transport.py] [_log()] starting thread (client mode): 0xb95d4ee0
2025-12-25T01:39:56.318 [DEBUG] [Thread-2784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:39:56.338 [DEBUG] [Thread-2784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:39:56.338 [INFO] [Thread-2784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] client lang: <none>
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] server lang: <none>
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] kex follows: False
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] Compression: none
2025-12-25T01:39:56.341 [DEBUG] [Thread-2784] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:39:56.349 [DEBUG] [Thread-2784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:39:56.349 [DEBUG] [Thread-2784] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:39:56.349 [DEBUG] [Thread-2784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:39:56.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:39:56.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:39:56.350 [DEBUG] [Thread-2784] [transport.py] [_log()] userauth is OK
2025-12-25T01:39:56.350 [DEBUG] [Thread-2784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:39:56.350 [DEBUG] [Thread-2784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:39:56.350 [DEBUG] [Thread-2784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:39:56.350 [DEBUG] [Thread-2784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:39:56.360 [INFO] [Thread-2784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:39:56.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:39:56.959 [DEBUG] [Thread-2784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:39:56.959 [DEBUG] [Thread-2784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:39:56.959 [DEBUG] [Thread-2784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:39:57.000 [DEBUG] [Thread-2784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:39:57.000 [DEBUG] [Thread-2784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:39:57.002 [DEBUG] [Thread-2784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:39:57.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:39:57.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:39:57.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:39:57.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:39:57.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:39:57.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:39:57.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.985822 -999.00  +11.80  18.58     93  +10.80 1 3 1 3 1     0    0 0.91 -5.52 ----- 23.9 18.6 154.3 25.9 13.7 -3.8 13.5 -3.5 13.3 -3.6 13.7 -3.2
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.985822
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:39:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:39:40', tmtdew=0.56, humidity=96.22, cloud=0.0, wind=23.71, temperature=11.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:39:35.021', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:39:57.020 [DEBUG] [Thread-2784] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:39:57.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:39:57.103 [DEBUG] [Thread-2787] [transport.py] [_log()] starting thread (client mode): 0xb95783d0
2025-12-25T01:39:57.103 [DEBUG] [Thread-2787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:39:57.118 [DEBUG] [Thread-2787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:39:57.118 [INFO] [Thread-2787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] client lang: <none>
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] server lang: <none>
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] kex follows: False
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:39:57.126 [DEBUG] [Thread-2787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:39:57.127 [DEBUG] [Thread-2787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:39:57.127 [DEBUG] [Thread-2787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:39:57.127 [DEBUG] [Thread-2787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:39:57.127 [DEBUG] [Thread-2787] [transport.py] [_log()] Compression: none
2025-12-25T01:39:57.127 [DEBUG] [Thread-2787] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:39:57.182 [DEBUG] [Thread-2787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:39:57.183 [DEBUG] [Thread-2787] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:39:57.183 [DEBUG] [Thread-2787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:39:57.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:39:57.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:39:57.239 [DEBUG] [Thread-2787] [transport.py] [_log()] userauth is OK
2025-12-25T01:39:57.239 [DEBUG] [Thread-2787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:39:57.239 [DEBUG] [Thread-2787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:39:57.239 [DEBUG] [Thread-2787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:39:57.240 [DEBUG] [Thread-2787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:39:57.257 [INFO] [Thread-2787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:39:57.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:39:57.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:39:58.078 [DEBUG] [Thread-2787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:39:58.078 [DEBUG] [Thread-2787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:39:58.126 [DEBUG] [Thread-2787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:39:58.127 [DEBUG] [Thread-2787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:39:58.135 [DEBUG] [Thread-2787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:39:58.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:39:58.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:39:58.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:39:58.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:39:58.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:39:58.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:39:58.167 [DEBUG] [Thread-2787] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:40:05.216 [DEBUG] [Thread-2789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:40:20.267 [DEBUG] [Thread-2790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:40:24.913 [DEBUG] [Thread-2791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:40:28.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:40:28.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:40:28.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:40:28.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 40, 12), 0.56, 96.2, 0.0, 23.75, 11.88, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:40:28.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:40:12
2025-12-25T01:40:29.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:40:29.186 [DEBUG] [Thread-2792] [transport.py] [_log()] starting thread (client mode): 0xb95f1420
2025-12-25T01:40:29.186 [DEBUG] [Thread-2792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:40:29.205 [DEBUG] [Thread-2792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:40:29.205 [INFO] [Thread-2792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] client lang: <none>
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] server lang: <none>
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] kex follows: False
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] Compression: none
2025-12-25T01:40:29.207 [DEBUG] [Thread-2792] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:40:29.221 [DEBUG] [Thread-2792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:40:29.221 [DEBUG] [Thread-2792] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:40:29.222 [DEBUG] [Thread-2792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:40:29.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:40:29.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:40:29.223 [DEBUG] [Thread-2792] [transport.py] [_log()] userauth is OK
2025-12-25T01:40:29.223 [DEBUG] [Thread-2792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:40:29.224 [DEBUG] [Thread-2792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:40:29.224 [DEBUG] [Thread-2792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:40:29.224 [DEBUG] [Thread-2792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:40:29.237 [INFO] [Thread-2792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:40:29.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:40:29.836 [DEBUG] [Thread-2792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:40:29.836 [DEBUG] [Thread-2792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:40:29.836 [DEBUG] [Thread-2792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:40:29.877 [DEBUG] [Thread-2792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:40:29.877 [DEBUG] [Thread-2792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:40:29.880 [DEBUG] [Thread-2792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:40:29.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:40:29.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:40:29.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:40:29.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:40:29.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:40:29.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:40:29.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:40:29.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:40:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:40:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.986169 -999.00  +11.80  14.53     93  +10.70 1 3 1 3 1     0    0 0.89 -5.38 ----- 16.2 14.5 152.8 24.9 13.7 -4.2 13.5 -4.0 13.3 -4.2 13.7 -3.8
2025-12-25T01:40:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:40:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:40:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.986169
2025-12-25T01:40:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:40:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:40:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:40:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:40:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:40:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:40:12', tmtdew=0.56, humidity=96.2, cloud=0.0, wind=23.75, temperature=11.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:40:05.002', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:40:29.906 [DEBUG] [Thread-2792] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:40:29.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:40:30.013 [DEBUG] [Thread-2795] [transport.py] [_log()] starting thread (client mode): 0xb95f0280
2025-12-25T01:40:30.013 [DEBUG] [Thread-2795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:40:30.031 [DEBUG] [Thread-2795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:40:30.031 [INFO] [Thread-2795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:40:30.039 [DEBUG] [Thread-2795] [transport.py] [_log()] client lang: <none>
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] server lang: <none>
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] kex follows: False
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] Compression: none
2025-12-25T01:40:30.040 [DEBUG] [Thread-2795] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:40:30.097 [DEBUG] [Thread-2795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:40:30.098 [DEBUG] [Thread-2795] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:40:30.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:40:30.099 [DEBUG] [Thread-2795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:40:30.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:40:30.156 [DEBUG] [Thread-2795] [transport.py] [_log()] userauth is OK
2025-12-25T01:40:30.157 [DEBUG] [Thread-2795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:40:30.157 [DEBUG] [Thread-2795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:40:30.157 [DEBUG] [Thread-2795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:40:30.157 [DEBUG] [Thread-2795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:40:30.177 [INFO] [Thread-2795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:40:30.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:40:30.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:40:30.990 [DEBUG] [Thread-2795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:40:30.990 [DEBUG] [Thread-2795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:40:31.038 [DEBUG] [Thread-2795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:40:31.038 [DEBUG] [Thread-2795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:40:31.047 [DEBUG] [Thread-2795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:40:31.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:40:31.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:40:31.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:40:31.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:40:31.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:40:31.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:40:31.083 [DEBUG] [Thread-2795] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:40:32.385 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:40:32.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:40:35.299 [DEBUG] [Thread-2797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:40:50.350 [DEBUG] [Thread-2798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:41:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:41:01.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:41:01.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:41:01.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 40, 44), 0.55, 96.25, 0.0, 27.0, 11.88, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:41:01.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:40:44
2025-12-25T01:41:01.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:41:02.085 [DEBUG] [Thread-2799] [transport.py] [_log()] starting thread (client mode): 0xb9593340
2025-12-25T01:41:02.085 [DEBUG] [Thread-2799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:41:02.102 [DEBUG] [Thread-2799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:41:02.102 [INFO] [Thread-2799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] client lang: <none>
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] server lang: <none>
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] kex follows: False
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] Compression: none
2025-12-25T01:41:02.104 [DEBUG] [Thread-2799] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:41:02.113 [DEBUG] [Thread-2799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:41:02.113 [DEBUG] [Thread-2799] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:41:02.114 [DEBUG] [Thread-2799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:41:02.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:41:02.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:41:02.115 [DEBUG] [Thread-2799] [transport.py] [_log()] userauth is OK
2025-12-25T01:41:02.115 [DEBUG] [Thread-2799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:41:02.115 [DEBUG] [Thread-2799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:41:02.115 [DEBUG] [Thread-2799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:41:02.115 [DEBUG] [Thread-2799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:41:02.149 [INFO] [Thread-2799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:41:02.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:41:02.718 [DEBUG] [Thread-2799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:41:02.719 [DEBUG] [Thread-2799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:41:02.719 [DEBUG] [Thread-2799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:41:02.760 [DEBUG] [Thread-2799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:41:02.760 [DEBUG] [Thread-2799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:41:02.763 [DEBUG] [Thread-2799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:41:02.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:41:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:41:02.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:41:02.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:41:02.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:41:02.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:41:02.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:41:02.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:41:02.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:41:02.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.986517 -999.00  +11.80  19.60     93  +10.80 1 3 1 3 1     0    0 0.92 -5.96 ----- 20.5 19.6 165.2 25.1 13.7 -3.5 13.5 -3.5 13.3 -3.6 13.6 -3.8
2025-12-25T01:41:02.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:41:02.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:41:02.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.986517
2025-12-25T01:41:02.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:41:02.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:41:02.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:41:02.789 [DEBUG] [Thread-2799] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:41:02.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:41:02.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:41:02.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:40:44', tmtdew=0.55, humidity=96.25, cloud=0.0, wind=27.0, temperature=11.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:40:35.069', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:41:02.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:41:02.879 [DEBUG] [Thread-2802] [transport.py] [_log()] starting thread (client mode): 0xb95f2c50
2025-12-25T01:41:02.879 [DEBUG] [Thread-2802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:41:02.894 [DEBUG] [Thread-2802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:41:02.894 [INFO] [Thread-2802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:41:02.902 [DEBUG] [Thread-2802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] client lang: <none>
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] server lang: <none>
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] kex follows: False
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] Compression: none
2025-12-25T01:41:02.903 [DEBUG] [Thread-2802] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:41:02.962 [DEBUG] [Thread-2802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:41:02.963 [DEBUG] [Thread-2802] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:41:02.963 [DEBUG] [Thread-2802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:41:02.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:41:02.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:41:03.020 [DEBUG] [Thread-2802] [transport.py] [_log()] userauth is OK
2025-12-25T01:41:03.021 [DEBUG] [Thread-2802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:41:03.021 [DEBUG] [Thread-2802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:41:03.021 [DEBUG] [Thread-2802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:41:03.021 [DEBUG] [Thread-2802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:41:03.040 [INFO] [Thread-2802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:41:03.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:41:03.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:41:03.918 [DEBUG] [Thread-2802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:41:03.918 [DEBUG] [Thread-2802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:41:03.966 [DEBUG] [Thread-2802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:41:03.966 [DEBUG] [Thread-2802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:41:03.975 [DEBUG] [Thread-2802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:41:03.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:41:03.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:41:03.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:41:04.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:41:04.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:41:04.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:41:04.009 [DEBUG] [Thread-2802] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:41:05.388 [DEBUG] [Thread-2804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:41:20.438 [DEBUG] [Thread-2805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:41:24.981 [DEBUG] [Thread-2806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:41:32.602 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:41:32.603 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:41:34.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:41:34.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:41:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:41:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 41, 16), 0.55, 96.27, 0.0, 26.24, 11.92, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:41:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:41:16
2025-12-25T01:41:34.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:41:35.000 [DEBUG] [Thread-2807] [transport.py] [_log()] starting thread (client mode): 0xb955b640
2025-12-25T01:41:35.000 [DEBUG] [Thread-2807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:41:35.016 [DEBUG] [Thread-2807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:41:35.016 [INFO] [Thread-2807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:41:35.017 [DEBUG] [Thread-2807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:41:35.017 [DEBUG] [Thread-2807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:41:35.017 [DEBUG] [Thread-2807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] client lang: <none>
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] server lang: <none>
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] kex follows: False
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] Compression: none
2025-12-25T01:41:35.018 [DEBUG] [Thread-2807] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:41:35.029 [DEBUG] [Thread-2807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:41:35.029 [DEBUG] [Thread-2807] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:41:35.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:41:35.030 [DEBUG] [Thread-2807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:41:35.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:41:35.031 [DEBUG] [Thread-2807] [transport.py] [_log()] userauth is OK
2025-12-25T01:41:35.031 [DEBUG] [Thread-2807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:41:35.031 [DEBUG] [Thread-2807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:41:35.031 [DEBUG] [Thread-2807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:41:35.031 [DEBUG] [Thread-2807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:41:35.049 [INFO] [Thread-2807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:41:35.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:41:35.474 [DEBUG] [Thread-2809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:41:35.641 [DEBUG] [Thread-2807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:41:35.641 [DEBUG] [Thread-2807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:41:35.642 [DEBUG] [Thread-2807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:41:35.682 [DEBUG] [Thread-2807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:41:35.683 [DEBUG] [Thread-2807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:41:35.684 [DEBUG] [Thread-2807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:41:35.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:41:35.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:41:35.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:41:35.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:41:35.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:41:35.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:41:35.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:41:35.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:41:35.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:41:35.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.986864 -999.00  +11.80  17.27     93  +10.80 1 3 1 3 1     0    0 0.91 -5.86 ----- 20.4 17.3 141.4 25.5 13.6 -4.9 13.5 -5.0 13.3 -5.2 13.7 -3.9
2025-12-25T01:41:35.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:41:35.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:41:35.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.986864
2025-12-25T01:41:35.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:41:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:41:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:41:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:41:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:41:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:41:16', tmtdew=0.55, humidity=96.27, cloud=0.0, wind=26.24, temperature=11.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:41:05.050', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:41:35.703 [DEBUG] [Thread-2807] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:41:35.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:41:35.799 [DEBUG] [Thread-2811] [transport.py] [_log()] starting thread (client mode): 0xb9559030
2025-12-25T01:41:35.799 [DEBUG] [Thread-2811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:41:35.813 [DEBUG] [Thread-2811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:41:35.813 [INFO] [Thread-2811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:41:35.820 [DEBUG] [Thread-2811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:41:35.821 [DEBUG] [Thread-2811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:41:35.821 [DEBUG] [Thread-2811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:41:35.821 [DEBUG] [Thread-2811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:41:35.821 [DEBUG] [Thread-2811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:41:35.821 [DEBUG] [Thread-2811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:41:35.821 [DEBUG] [Thread-2811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:41:35.821 [DEBUG] [Thread-2811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:41:35.821 [DEBUG] [Thread-2811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] client lang: <none>
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] server lang: <none>
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] kex follows: False
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:41:35.822 [DEBUG] [Thread-2811] [transport.py] [_log()] Compression: none
2025-12-25T01:41:35.823 [DEBUG] [Thread-2811] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:41:35.881 [DEBUG] [Thread-2811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:41:35.881 [DEBUG] [Thread-2811] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:41:35.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:41:35.883 [DEBUG] [Thread-2811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:41:35.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:41:35.937 [DEBUG] [Thread-2811] [transport.py] [_log()] userauth is OK
2025-12-25T01:41:35.937 [DEBUG] [Thread-2811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:41:35.937 [DEBUG] [Thread-2811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:41:35.937 [DEBUG] [Thread-2811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:41:35.937 [DEBUG] [Thread-2811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:41:35.955 [INFO] [Thread-2811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:41:35.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:41:35.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:41:36.760 [DEBUG] [Thread-2811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:41:36.760 [DEBUG] [Thread-2811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:41:36.808 [DEBUG] [Thread-2811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:41:36.808 [DEBUG] [Thread-2811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:41:36.817 [DEBUG] [Thread-2811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:41:36.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:41:36.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:41:36.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
2025-12-25T01:41:36.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:41:36.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:41:36.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:41:36.851 [DEBUG] [Thread-2811] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:41:50.502 [DEBUG] [Thread-2813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:42:05.541 [DEBUG] [Thread-2814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:42:06.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:42:06.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:42:06.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:42:07.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 41, 48), 0.55, 96.25, 0.0, 22.53, 11.87, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:42:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:41:48
2025-12-25T01:42:07.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:42:07.830 [DEBUG] [Thread-2815] [transport.py] [_log()] starting thread (client mode): 0xb95b1c60
2025-12-25T01:42:07.830 [DEBUG] [Thread-2815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:42:07.849 [DEBUG] [Thread-2815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:42:07.849 [INFO] [Thread-2815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] client lang: <none>
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] server lang: <none>
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] kex follows: False
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] Compression: none
2025-12-25T01:42:07.852 [DEBUG] [Thread-2815] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:42:07.861 [DEBUG] [Thread-2815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:42:07.861 [DEBUG] [Thread-2815] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:42:07.861 [DEBUG] [Thread-2815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:42:07.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:42:07.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:42:07.863 [DEBUG] [Thread-2815] [transport.py] [_log()] userauth is OK
2025-12-25T01:42:07.863 [DEBUG] [Thread-2815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:42:07.863 [DEBUG] [Thread-2815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:42:07.863 [DEBUG] [Thread-2815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:42:07.863 [DEBUG] [Thread-2815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:42:07.897 [INFO] [Thread-2815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:42:07.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:42:08.497 [DEBUG] [Thread-2815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:42:08.497 [DEBUG] [Thread-2815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:42:08.498 [DEBUG] [Thread-2815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:42:08.538 [DEBUG] [Thread-2815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:42:08.538 [DEBUG] [Thread-2815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:42:08.542 [DEBUG] [Thread-2815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:42:08.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:42:08.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:42:08.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:42:08.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:42:08.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:42:08.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:42:08.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:42:08.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:42:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:42:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.987211 -999.00  +11.90  23.45     93  +10.90 1 3 1 3 1     0    0 0.92 -6.16 ----- 25.5 23.4 145.0 26.2 13.7 -4.9 13.4 -4.7 13.3 -5.1 13.6 -7.7
2025-12-25T01:42:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:42:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:42:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.987211
2025-12-25T01:42:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:42:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:42:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:42:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:42:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:42:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:41:48', tmtdew=0.55, humidity=96.25, cloud=0.0, wind=22.53, temperature=11.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:41:35.030', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:42:08.571 [DEBUG] [Thread-2815] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:42:08.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:42:08.665 [DEBUG] [Thread-2818] [transport.py] [_log()] starting thread (client mode): 0xb9544eb0
2025-12-25T01:42:08.665 [DEBUG] [Thread-2818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:42:08.682 [DEBUG] [Thread-2818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:42:08.682 [INFO] [Thread-2818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] client lang: <none>
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] server lang: <none>
2025-12-25T01:42:08.690 [DEBUG] [Thread-2818] [transport.py] [_log()] kex follows: False
2025-12-25T01:42:08.691 [DEBUG] [Thread-2818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:42:08.691 [DEBUG] [Thread-2818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:42:08.691 [DEBUG] [Thread-2818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:42:08.691 [DEBUG] [Thread-2818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:42:08.691 [DEBUG] [Thread-2818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:42:08.691 [DEBUG] [Thread-2818] [transport.py] [_log()] Compression: none
2025-12-25T01:42:08.691 [DEBUG] [Thread-2818] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:42:08.749 [DEBUG] [Thread-2818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:42:08.750 [DEBUG] [Thread-2818] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:42:08.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:42:08.751 [DEBUG] [Thread-2818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:42:08.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:42:08.809 [DEBUG] [Thread-2818] [transport.py] [_log()] userauth is OK
2025-12-25T01:42:08.809 [DEBUG] [Thread-2818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:42:08.809 [DEBUG] [Thread-2818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:42:08.809 [DEBUG] [Thread-2818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:42:08.809 [DEBUG] [Thread-2818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:42:08.828 [INFO] [Thread-2818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:42:08.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:42:08.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:42:09.637 [DEBUG] [Thread-2818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:42:09.638 [DEBUG] [Thread-2818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:42:09.686 [DEBUG] [Thread-2818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:42:09.686 [DEBUG] [Thread-2818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:42:09.695 [DEBUG] [Thread-2818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:42:09.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:42:09.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:42:09.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:42:09.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:42:09.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:42:09.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:42:09.733 [DEBUG] [Thread-2818] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:42:20.576 [DEBUG] [Thread-2820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:42:25.060 [DEBUG] [Thread-2821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:42:32.808 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:42:32.809 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:42:35.620 [DEBUG] [Thread-2822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:42:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:42:39.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:42:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:42:40.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 42, 20), 0.56, 96.23, 0.0, 24.0, 11.87, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:42:40.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:42:20
2025-12-25T01:42:40.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:42:40.728 [DEBUG] [Thread-2823] [transport.py] [_log()] starting thread (client mode): 0xb955b460
2025-12-25T01:42:40.728 [DEBUG] [Thread-2823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:42:40.748 [DEBUG] [Thread-2823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:42:40.749 [INFO] [Thread-2823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:42:40.752 [DEBUG] [Thread-2823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:42:40.752 [DEBUG] [Thread-2823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:42:40.752 [DEBUG] [Thread-2823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:42:40.752 [DEBUG] [Thread-2823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] client lang: <none>
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] server lang: <none>
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] kex follows: False
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:42:40.753 [DEBUG] [Thread-2823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:42:40.754 [DEBUG] [Thread-2823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:42:40.754 [DEBUG] [Thread-2823] [transport.py] [_log()] Compression: none
2025-12-25T01:42:40.754 [DEBUG] [Thread-2823] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:42:40.772 [DEBUG] [Thread-2823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:42:40.773 [DEBUG] [Thread-2823] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:42:40.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:42:40.774 [DEBUG] [Thread-2823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:42:40.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:42:40.776 [DEBUG] [Thread-2823] [transport.py] [_log()] userauth is OK
2025-12-25T01:42:40.777 [DEBUG] [Thread-2823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:42:40.777 [DEBUG] [Thread-2823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:42:40.777 [DEBUG] [Thread-2823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:42:40.777 [DEBUG] [Thread-2823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:42:40.813 [INFO] [Thread-2823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:42:40.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:42:41.406 [DEBUG] [Thread-2823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:42:41.406 [DEBUG] [Thread-2823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:42:41.407 [DEBUG] [Thread-2823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:42:41.448 [DEBUG] [Thread-2823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:42:41.448 [DEBUG] [Thread-2823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:42:41.451 [DEBUG] [Thread-2823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:42:41.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:42:41.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:42:41.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:42:41.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:42:41.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:42:41.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:42:41.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:42:41.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:42:41.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:42:41.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.987211 -999.00  +11.90  23.45     93  +10.90 1 3 1 3 1     0    0 0.92 -6.16 ----- 25.5 23.4 145.0 26.2 13.7 -4.9 13.4 -4.7 13.3 -5.1 13.6 -7.7
2025-12-25T01:42:41.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:42:41.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:42:41.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.987211
2025-12-25T01:42:41.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:42:41.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:42:41.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:42:41.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:42:41.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:42:41.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:42:20', tmtdew=0.56, humidity=96.23, cloud=0.0, wind=24.0, temperature=11.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:41:35.030', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:42:41.477 [DEBUG] [Thread-2823] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:42:41.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:42:41.582 [DEBUG] [Thread-2826] [transport.py] [_log()] starting thread (client mode): 0xb95586d0
2025-12-25T01:42:41.583 [DEBUG] [Thread-2826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:42:41.597 [DEBUG] [Thread-2826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:42:41.597 [INFO] [Thread-2826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:42:41.604 [DEBUG] [Thread-2826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] client lang: <none>
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] server lang: <none>
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] kex follows: False
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] Compression: none
2025-12-25T01:42:41.605 [DEBUG] [Thread-2826] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:42:41.665 [DEBUG] [Thread-2826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:42:41.665 [DEBUG] [Thread-2826] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:42:41.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:42:41.666 [DEBUG] [Thread-2826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:42:41.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:42:41.720 [DEBUG] [Thread-2826] [transport.py] [_log()] userauth is OK
2025-12-25T01:42:41.721 [DEBUG] [Thread-2826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:42:41.721 [DEBUG] [Thread-2826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:42:41.721 [DEBUG] [Thread-2826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:42:41.721 [DEBUG] [Thread-2826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:42:41.739 [INFO] [Thread-2826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:42:41.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:42:41.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:42:42.531 [DEBUG] [Thread-2826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:42:42.532 [DEBUG] [Thread-2826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:42:42.579 [DEBUG] [Thread-2826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:42:42.579 [DEBUG] [Thread-2826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:42:42.589 [DEBUG] [Thread-2826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:42:42.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:42:42.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:42:42.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:42:42.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:42:42.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:42:42.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:42:42.626 [DEBUG] [Thread-2826] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:42:50.652 [DEBUG] [Thread-2828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:43:05.705 [DEBUG] [Thread-2829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:43:12.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:43:12.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:43:12.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:43:13.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 42, 52), 0.55, 96.3, 0.0, 22.94, 11.88, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:43:13.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:42:52
2025-12-25T01:43:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:43:13.669 [DEBUG] [Thread-2830] [transport.py] [_log()] starting thread (client mode): 0xb6b00d90
2025-12-25T01:43:13.669 [DEBUG] [Thread-2830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:43:13.691 [DEBUG] [Thread-2830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:43:13.691 [INFO] [Thread-2830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:43:13.692 [DEBUG] [Thread-2830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:43:13.692 [DEBUG] [Thread-2830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:43:13.692 [DEBUG] [Thread-2830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:43:13.692 [DEBUG] [Thread-2830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:43:13.692 [DEBUG] [Thread-2830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] client lang: <none>
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] server lang: <none>
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] kex follows: False
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] Compression: none
2025-12-25T01:43:13.693 [DEBUG] [Thread-2830] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:43:13.711 [DEBUG] [Thread-2830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:43:13.711 [DEBUG] [Thread-2830] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:43:13.711 [DEBUG] [Thread-2830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:43:13.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:43:13.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:43:13.712 [DEBUG] [Thread-2830] [transport.py] [_log()] userauth is OK
2025-12-25T01:43:13.712 [DEBUG] [Thread-2830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:43:13.712 [DEBUG] [Thread-2830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:43:13.712 [DEBUG] [Thread-2830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:43:13.712 [DEBUG] [Thread-2830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:43:13.723 [INFO] [Thread-2830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:43:13.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:43:14.348 [DEBUG] [Thread-2830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:43:14.348 [DEBUG] [Thread-2830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:43:14.348 [DEBUG] [Thread-2830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:43:14.388 [DEBUG] [Thread-2830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:43:14.388 [DEBUG] [Thread-2830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:43:14.391 [DEBUG] [Thread-2830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:43:14.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:43:14.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:43:14.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:43:14.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:43:14.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:43:14.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:43:14.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.987906 -999.00  +11.80  24.01     93  +10.70 1 3 1 3 1     0    0 0.84 -7.02 ----- 20.7 24.0 132.0 27.0 13.6 -5.4 13.5 -4.8 13.3 -5.3 13.6 -6.2
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.987906
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:43:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:42:52', tmtdew=0.55, humidity=96.3, cloud=0.0, wind=22.94, temperature=11.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:42:35.078', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:43:14.413 [DEBUG] [Thread-2830] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:43:14.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:43:14.497 [DEBUG] [Thread-2833] [transport.py] [_log()] starting thread (client mode): 0xb9590ac0
2025-12-25T01:43:14.498 [DEBUG] [Thread-2833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:43:14.512 [DEBUG] [Thread-2833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:43:14.512 [INFO] [Thread-2833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] client lang: <none>
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] server lang: <none>
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] kex follows: False
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] Compression: none
2025-12-25T01:43:14.520 [DEBUG] [Thread-2833] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:43:14.575 [DEBUG] [Thread-2833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:43:14.576 [DEBUG] [Thread-2833] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:43:14.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:43:14.576 [DEBUG] [Thread-2833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:43:14.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:43:14.632 [DEBUG] [Thread-2833] [transport.py] [_log()] userauth is OK
2025-12-25T01:43:14.632 [DEBUG] [Thread-2833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:43:14.632 [DEBUG] [Thread-2833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:43:14.632 [DEBUG] [Thread-2833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:43:14.632 [DEBUG] [Thread-2833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:43:14.647 [INFO] [Thread-2833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:43:14.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:43:14.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:43:15.439 [DEBUG] [Thread-2833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:43:15.439 [DEBUG] [Thread-2833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:43:15.487 [DEBUG] [Thread-2833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:43:15.488 [DEBUG] [Thread-2833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:43:15.496 [DEBUG] [Thread-2833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:43:15.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:43:15.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:43:15.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:43:15.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:43:15.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:43:15.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:43:15.528 [DEBUG] [Thread-2833] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:43:20.741 [DEBUG] [Thread-2835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:43:25.137 [DEBUG] [Thread-2836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:43:33.068 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:43:33.069 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:43:35.796 [DEBUG] [Thread-2837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:43:45.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:43:45.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:43: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
2025-12-25T01:43:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 43, 24), 0.54, 96.35, 0.0, 24.49, 11.87, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:43:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:43:24
2025-12-25T01:43:46.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:43:46.540 [DEBUG] [Thread-2838] [transport.py] [_log()] starting thread (client mode): 0xb9590460
2025-12-25T01:43:46.540 [DEBUG] [Thread-2838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:43:46.560 [DEBUG] [Thread-2838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:43:46.560 [INFO] [Thread-2838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] client lang: <none>
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] server lang: <none>
2025-12-25T01:43:46.564 [DEBUG] [Thread-2838] [transport.py] [_log()] kex follows: False
2025-12-25T01:43:46.565 [DEBUG] [Thread-2838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:43:46.565 [DEBUG] [Thread-2838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:43:46.565 [DEBUG] [Thread-2838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:43:46.565 [DEBUG] [Thread-2838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:43:46.565 [DEBUG] [Thread-2838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:43:46.565 [DEBUG] [Thread-2838] [transport.py] [_log()] Compression: none
2025-12-25T01:43:46.565 [DEBUG] [Thread-2838] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:43:46.575 [DEBUG] [Thread-2838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:43:46.576 [DEBUG] [Thread-2838] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:43:46.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:43:46.577 [DEBUG] [Thread-2838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:43:46.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:43:46.579 [DEBUG] [Thread-2838] [transport.py] [_log()] userauth is OK
2025-12-25T01:43:46.579 [DEBUG] [Thread-2838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:43:46.579 [DEBUG] [Thread-2838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:43:46.579 [DEBUG] [Thread-2838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:43:46.579 [DEBUG] [Thread-2838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:43:46.614 [INFO] [Thread-2838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:43:46.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:43:47.234 [DEBUG] [Thread-2838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:43:47.234 [DEBUG] [Thread-2838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:43:47.234 [DEBUG] [Thread-2838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:43:47.274 [DEBUG] [Thread-2838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:43:47.274 [DEBUG] [Thread-2838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:43:47.277 [DEBUG] [Thread-2838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:43:47.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:43:47.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:43:47.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:43:47.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:43:47.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:43:47.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:43:47.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.988253 -999.00  +11.80  20.19     93  +10.80 1 3 1 3 1     0    0 0.88 -6.98 ----- 23.1 20.2 144.8 25.2 13.6 -6.9 13.5 -6.8 13.3 -7.0 13.6 -6.7
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.988253
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:43:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:43:24', tmtdew=0.54, humidity=96.35, cloud=0.0, wind=24.49, temperature=11.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:43:05.059', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:43:47.295 [DEBUG] [Thread-2838] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:43:47.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:43:47.377 [DEBUG] [Thread-2841] [transport.py] [_log()] starting thread (client mode): 0xb9558970
2025-12-25T01:43:47.377 [DEBUG] [Thread-2841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:43:47.391 [DEBUG] [Thread-2841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:43:47.391 [INFO] [Thread-2841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] client lang: <none>
2025-12-25T01:43:47.399 [DEBUG] [Thread-2841] [transport.py] [_log()] server lang: <none>
2025-12-25T01:43:47.400 [DEBUG] [Thread-2841] [transport.py] [_log()] kex follows: False
2025-12-25T01:43:47.400 [DEBUG] [Thread-2841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:43:47.400 [DEBUG] [Thread-2841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:43:47.400 [DEBUG] [Thread-2841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:43:47.400 [DEBUG] [Thread-2841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:43:47.400 [DEBUG] [Thread-2841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:43:47.400 [DEBUG] [Thread-2841] [transport.py] [_log()] Compression: none
2025-12-25T01:43:47.400 [DEBUG] [Thread-2841] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:43:47.456 [DEBUG] [Thread-2841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:43:47.456 [DEBUG] [Thread-2841] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:43:47.457 [DEBUG] [Thread-2841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:43:47.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:43:47.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:43:47.512 [DEBUG] [Thread-2841] [transport.py] [_log()] userauth is OK
2025-12-25T01:43:47.512 [DEBUG] [Thread-2841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:43:47.512 [DEBUG] [Thread-2841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:43:47.512 [DEBUG] [Thread-2841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:43:47.512 [DEBUG] [Thread-2841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:43:47.533 [INFO] [Thread-2841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:43:47.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:43:47.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:43:48.339 [DEBUG] [Thread-2841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:43:48.339 [DEBUG] [Thread-2841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:43:48.387 [DEBUG] [Thread-2841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:43:48.388 [DEBUG] [Thread-2841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:43:48.396 [DEBUG] [Thread-2841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:43:48.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:43:48.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')
2025-12-25T01:43:48.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:43:48.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:43:48.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:43:48.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:43:48.430 [DEBUG] [Thread-2841] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:43:50.827 [DEBUG] [Thread-2843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:44:05.865 [DEBUG] [Thread-2844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:44:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:44:18.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:44:18.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:44:19.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 43, 56), 0.54, 96.32, 0.0, 24.24, 11.83, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:44:19.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:43:56
2025-12-25T01:44:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:44:19.404 [DEBUG] [Thread-2845] [transport.py] [_log()] starting thread (client mode): 0xb95581c0
2025-12-25T01:44:19.404 [DEBUG] [Thread-2845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:44:19.424 [DEBUG] [Thread-2845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:44:19.424 [INFO] [Thread-2845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:44:19.427 [DEBUG] [Thread-2845] [transport.py] [_log()] client lang: <none>
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] server lang: <none>
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] kex follows: False
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] Compression: none
2025-12-25T01:44:19.428 [DEBUG] [Thread-2845] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:44:19.447 [DEBUG] [Thread-2845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:44:19.448 [DEBUG] [Thread-2845] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:44:19.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:44:19.449 [DEBUG] [Thread-2845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:44:19.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:44:19.452 [DEBUG] [Thread-2845] [transport.py] [_log()] userauth is OK
2025-12-25T01:44:19.452 [DEBUG] [Thread-2845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:44:19.452 [DEBUG] [Thread-2845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:44:19.452 [DEBUG] [Thread-2845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:44:19.452 [DEBUG] [Thread-2845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:44:19.475 [INFO] [Thread-2845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:44:19.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:44:20.129 [DEBUG] [Thread-2845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:44:20.129 [DEBUG] [Thread-2845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:44:20.130 [DEBUG] [Thread-2845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:44:20.171 [DEBUG] [Thread-2845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:44:20.171 [DEBUG] [Thread-2845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:44:20.173 [DEBUG] [Thread-2845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:44:20.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:44:20.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:44:20.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:44:20.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:44:20.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:44:20.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:44:20.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:44:20.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:44:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:44:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.988600 -999.00  +11.80  21.47     93  +10.70 1 3 1 3 1     0    0 0.86 -6.93 ----- 20.5 21.5 141.8 24.9 13.6 -7.3 13.5 -6.3 13.3 -6.7 13.6 -6.7
2025-12-25T01:44:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:44:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:44:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.988600
2025-12-25T01:44:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:44:20.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:44:20.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:44:20.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:44:20.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:44:20.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:43:56', tmtdew=0.54, humidity=96.32, cloud=0.0, wind=24.24, temperature=11.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:43:35.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:44:20.198 [DEBUG] [Thread-2845] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:44:20.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:44:20.291 [DEBUG] [Thread-2848] [transport.py] [_log()] starting thread (client mode): 0xb9544910
2025-12-25T01:44:20.291 [DEBUG] [Thread-2848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:44:20.306 [DEBUG] [Thread-2848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:44:20.306 [INFO] [Thread-2848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:44:20.313 [DEBUG] [Thread-2848] [transport.py] [_log()] client lang: <none>
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] server lang: <none>
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] kex follows: False
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] Compression: none
2025-12-25T01:44:20.314 [DEBUG] [Thread-2848] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:44:20.371 [DEBUG] [Thread-2848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:44:20.372 [DEBUG] [Thread-2848] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:44:20.372 [DEBUG] [Thread-2848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:44:20.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:44:20.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:44:20.428 [DEBUG] [Thread-2848] [transport.py] [_log()] userauth is OK
2025-12-25T01:44:20.428 [DEBUG] [Thread-2848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:44:20.428 [DEBUG] [Thread-2848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:44:20.428 [DEBUG] [Thread-2848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:44:20.428 [DEBUG] [Thread-2848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:44:20.447 [INFO] [Thread-2848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:44:20.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:44:20.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:44:20.905 [DEBUG] [Thread-2850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:44:21.298 [DEBUG] [Thread-2848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:44:21.299 [DEBUG] [Thread-2848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:44:21.347 [DEBUG] [Thread-2848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:44:21.347 [DEBUG] [Thread-2848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:44:21.356 [DEBUG] [Thread-2848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:44:21.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:44:21.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:44:21.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:44:21.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:44:21.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:44:21.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:44:21.393 [DEBUG] [Thread-2848] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:44:25.212 [DEBUG] [Thread-2851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:44:33.271 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:44:33.272 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:44:35.953 [DEBUG] [Thread-2852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:44:50.990 [DEBUG] [Thread-2853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:44:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:44:51.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:44:51.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:44:52.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 44, 28), 0.54, 96.35, 0.0, 23.5, 11.87, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:44:52.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:44:28
2025-12-25T01:44:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:44:52.360 [DEBUG] [Thread-2854] [transport.py] [_log()] starting thread (client mode): 0xb95d5870
2025-12-25T01:44:52.360 [DEBUG] [Thread-2854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:44:52.380 [DEBUG] [Thread-2854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:44:52.380 [INFO] [Thread-2854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:44:52.381 [DEBUG] [Thread-2854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] client lang: <none>
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] server lang: <none>
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] kex follows: False
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:44:52.382 [DEBUG] [Thread-2854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:44:52.383 [DEBUG] [Thread-2854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:44:52.383 [DEBUG] [Thread-2854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:44:52.383 [DEBUG] [Thread-2854] [transport.py] [_log()] Compression: none
2025-12-25T01:44:52.383 [DEBUG] [Thread-2854] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:44:52.393 [DEBUG] [Thread-2854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:44:52.394 [DEBUG] [Thread-2854] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:44:52.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:44:52.395 [DEBUG] [Thread-2854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:44:52.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:44:52.397 [DEBUG] [Thread-2854] [transport.py] [_log()] userauth is OK
2025-12-25T01:44:52.397 [DEBUG] [Thread-2854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:44:52.398 [DEBUG] [Thread-2854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:44:52.398 [DEBUG] [Thread-2854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:44:52.398 [DEBUG] [Thread-2854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:44:52.423 [INFO] [Thread-2854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:44:52.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:44:53.077 [DEBUG] [Thread-2854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:44:53.077 [DEBUG] [Thread-2854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:44:53.078 [DEBUG] [Thread-2854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:44:53.118 [DEBUG] [Thread-2854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:44:53.118 [DEBUG] [Thread-2854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:44:53.121 [DEBUG] [Thread-2854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:44:53.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:44:53.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:44:53.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:44:53.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:44:53.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:44:53.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:44:53.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:44:53.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:44:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:44:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.988947 -999.00  +11.80  22.78     93  +10.80 1 3 1 3 1     0    0 0.86 -7.46 Z...W 21.5 22.8 136.4 27.3 13.6 -5.0 13.5 -5.0 13.3 -5.5 13.6 -7.3
2025-12-25T01:44:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:44:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:44:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.988947
2025-12-25T01:44:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:44:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:44:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:44:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:44:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:44:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:44:28', tmtdew=0.54, humidity=96.35, cloud=0.0, wind=23.5, temperature=11.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:44:05.021', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:44:53.149 [DEBUG] [Thread-2854] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:44:53.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:44:53.242 [DEBUG] [Thread-2857] [transport.py] [_log()] starting thread (client mode): 0xb95d4550
2025-12-25T01:44:53.243 [DEBUG] [Thread-2857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:44:53.257 [DEBUG] [Thread-2857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:44:53.257 [INFO] [Thread-2857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:44:53.265 [DEBUG] [Thread-2857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:44:53.265 [DEBUG] [Thread-2857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:44:53.265 [DEBUG] [Thread-2857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:44:53.265 [DEBUG] [Thread-2857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:44:53.265 [DEBUG] [Thread-2857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:44:53.265 [DEBUG] [Thread-2857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] client lang: <none>
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] server lang: <none>
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] kex follows: False
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] Compression: none
2025-12-25T01:44:53.266 [DEBUG] [Thread-2857] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:44:53.329 [DEBUG] [Thread-2857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:44:53.329 [DEBUG] [Thread-2857] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:44:53.330 [DEBUG] [Thread-2857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:44:53.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:44:53.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:44:53.388 [DEBUG] [Thread-2857] [transport.py] [_log()] userauth is OK
2025-12-25T01:44:53.389 [DEBUG] [Thread-2857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:44:53.389 [DEBUG] [Thread-2857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:44:53.389 [DEBUG] [Thread-2857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:44:53.389 [DEBUG] [Thread-2857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:44:53.408 [INFO] [Thread-2857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:44:53.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:44:53.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:44:54.234 [DEBUG] [Thread-2857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:44:54.235 [DEBUG] [Thread-2857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:44:54.283 [DEBUG] [Thread-2857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:44:54.283 [DEBUG] [Thread-2857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:44:54.292 [DEBUG] [Thread-2857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:44:54.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:44:54.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')
2025-12-25T01:44:54.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:44:54.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:44:54.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:44:54.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:44:54.329 [DEBUG] [Thread-2857] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:45:06.025 [DEBUG] [Thread-2859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:45:21.081 [DEBUG] [Thread-2860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:45:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:45:24.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:45:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:45:25.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 45), 0.59, 96.32, 0.0, 23.75, 11.83, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:45:25.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:45:00
2025-12-25T01:45:25.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:45:25.279 [DEBUG] [Thread-2861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:45:25.308 [DEBUG] [Thread-2862] [transport.py] [_log()] starting thread (client mode): 0xb9546590
2025-12-25T01:45:25.308 [DEBUG] [Thread-2862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:45:25.327 [DEBUG] [Thread-2862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:45:25.327 [INFO] [Thread-2862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:45:25.330 [DEBUG] [Thread-2862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:45:25.330 [DEBUG] [Thread-2862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] client lang: <none>
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] server lang: <none>
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] kex follows: False
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] Compression: none
2025-12-25T01:45:25.331 [DEBUG] [Thread-2862] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:45:25.340 [DEBUG] [Thread-2862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:45:25.340 [DEBUG] [Thread-2862] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:45:25.341 [DEBUG] [Thread-2862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:45:25.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:45:25.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:45:25.343 [DEBUG] [Thread-2862] [transport.py] [_log()] userauth is OK
2025-12-25T01:45:25.343 [DEBUG] [Thread-2862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:45:25.343 [DEBUG] [Thread-2862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:45:25.343 [DEBUG] [Thread-2862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:45:25.343 [DEBUG] [Thread-2862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:45:25.366 [INFO] [Thread-2862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:45:25.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:45:26.048 [DEBUG] [Thread-2862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:45:26.048 [DEBUG] [Thread-2862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:45:26.048 [DEBUG] [Thread-2862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:45:26.089 [DEBUG] [Thread-2862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:45:26.089 [DEBUG] [Thread-2862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:45:26.092 [DEBUG] [Thread-2862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:45:26.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:45:26.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:45:26.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:45:26.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:45:26.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:45:26.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:45:26.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:45:26.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:45:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:45:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.989294 -999.00  +11.80  23.54     93  +10.80 1 3 1 3 1     0    0 0.85 -6.79 Z...W 18.9 23.5 144.4 28.3 13.6 -3.7 13.5 -3.9 13.3 -4.4 13.6 -4.2
2025-12-25T01:45:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:45:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:45:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.989294
2025-12-25T01:45:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:45:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:45:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:45:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:45:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:45:26.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:45:00', tmtdew=0.59, humidity=96.32, cloud=0.0, wind=23.75, temperature=11.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:44:35.002', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:45:26.121 [DEBUG] [Thread-2862] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:45:26.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:45:26.218 [DEBUG] [Thread-2865] [transport.py] [_log()] starting thread (client mode): 0xb9558c40
2025-12-25T01:45:26.218 [DEBUG] [Thread-2865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:45:26.234 [DEBUG] [Thread-2865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:45:26.234 [INFO] [Thread-2865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:45:26.243 [DEBUG] [Thread-2865] [transport.py] [_log()] client lang: <none>
2025-12-25T01:45:26.244 [DEBUG] [Thread-2865] [transport.py] [_log()] server lang: <none>
2025-12-25T01:45:26.244 [DEBUG] [Thread-2865] [transport.py] [_log()] kex follows: False
2025-12-25T01:45:26.244 [DEBUG] [Thread-2865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:45:26.244 [DEBUG] [Thread-2865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:45:26.244 [DEBUG] [Thread-2865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:45:26.244 [DEBUG] [Thread-2865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:45:26.244 [DEBUG] [Thread-2865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:45:26.244 [DEBUG] [Thread-2865] [transport.py] [_log()] Compression: none
2025-12-25T01:45:26.245 [DEBUG] [Thread-2865] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:45:26.301 [DEBUG] [Thread-2865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:45:26.302 [DEBUG] [Thread-2865] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:45:26.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:45:26.303 [DEBUG] [Thread-2865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:45:26.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:45:26.357 [DEBUG] [Thread-2865] [transport.py] [_log()] userauth is OK
2025-12-25T01:45:26.358 [DEBUG] [Thread-2865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:45:26.358 [DEBUG] [Thread-2865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:45:26.358 [DEBUG] [Thread-2865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:45:26.358 [DEBUG] [Thread-2865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:45:26.377 [INFO] [Thread-2865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:45:26.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:45:26.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:45:27.214 [DEBUG] [Thread-2865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:45:27.214 [DEBUG] [Thread-2865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:45:27.263 [DEBUG] [Thread-2865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:45:27.264 [DEBUG] [Thread-2865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:45:27.273 [DEBUG] [Thread-2865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:45:27.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:45:27.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:45:27.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:45:27.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:45:27.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:45:27.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:45:27.315 [DEBUG] [Thread-2865] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:45:33.490 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:45:33.491 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:45:36.119 [DEBUG] [Thread-2867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:45:51.167 [DEBUG] [Thread-2868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:45:57.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:45:57.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:45:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:45:58.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 45, 33), 0.58, 96.4, 0.0, 22.48, 11.85, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:45:58.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:45:33
2025-12-25T01:45:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:45:58.322 [DEBUG] [Thread-2869] [transport.py] [_log()] starting thread (client mode): 0xb95d5ae0
2025-12-25T01:45:58.322 [DEBUG] [Thread-2869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:45:58.342 [DEBUG] [Thread-2869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:45:58.342 [INFO] [Thread-2869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] client lang: <none>
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] server lang: <none>
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] kex follows: False
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:45:58.345 [DEBUG] [Thread-2869] [transport.py] [_log()] Compression: none
2025-12-25T01:45:58.346 [DEBUG] [Thread-2869] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:45:58.361 [DEBUG] [Thread-2869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:45:58.362 [DEBUG] [Thread-2869] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:45:58.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:45:58.363 [DEBUG] [Thread-2869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:45:58.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:45:58.365 [DEBUG] [Thread-2869] [transport.py] [_log()] userauth is OK
2025-12-25T01:45:58.365 [DEBUG] [Thread-2869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:45:58.365 [DEBUG] [Thread-2869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:45:58.365 [DEBUG] [Thread-2869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:45:58.365 [DEBUG] [Thread-2869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:45:58.389 [INFO] [Thread-2869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:45:58.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:45:59.007 [DEBUG] [Thread-2869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:45:59.007 [DEBUG] [Thread-2869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:45:59.007 [DEBUG] [Thread-2869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:45:59.049 [DEBUG] [Thread-2869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:45:59.049 [DEBUG] [Thread-2869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:45:59.052 [DEBUG] [Thread-2869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:45:59.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:45:59.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:45:59.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:45:59.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:45:59.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:45:59.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:45:59.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:45:59.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:45:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:45:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.989641 -999.00  +11.80  14.71     93  +10.80 1 3 1 3 1     0    0 0.86 -7.38 ----- 18.6 14.7 153.4 21.5 13.6 -3.3 13.5 -3.1 13.3 -3.2 13.6 -4.0
2025-12-25T01:45:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:45:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:45:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.989641
2025-12-25T01:45:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:45:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:45:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:45:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:45:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:45:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:45:33', tmtdew=0.58, humidity=96.4, cloud=0.0, wind=22.48, temperature=11.85, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:45:04.982', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:45:59.080 [DEBUG] [Thread-2869] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:45:59.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:45:59.175 [DEBUG] [Thread-2872] [transport.py] [_log()] starting thread (client mode): 0xb95d7400
2025-12-25T01:45:59.176 [DEBUG] [Thread-2872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:45:59.190 [DEBUG] [Thread-2872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:45:59.190 [INFO] [Thread-2872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:45:59.198 [DEBUG] [Thread-2872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:45:59.198 [DEBUG] [Thread-2872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:45:59.198 [DEBUG] [Thread-2872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:45:59.198 [DEBUG] [Thread-2872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] client lang: <none>
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] server lang: <none>
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] kex follows: False
2025-12-25T01:45:59.199 [DEBUG] [Thread-2872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:45:59.200 [DEBUG] [Thread-2872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:45:59.200 [DEBUG] [Thread-2872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:45:59.200 [DEBUG] [Thread-2872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:45:59.200 [DEBUG] [Thread-2872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:45:59.200 [DEBUG] [Thread-2872] [transport.py] [_log()] Compression: none
2025-12-25T01:45:59.200 [DEBUG] [Thread-2872] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:45:59.260 [DEBUG] [Thread-2872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:45:59.261 [DEBUG] [Thread-2872] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:45:59.262 [DEBUG] [Thread-2872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:45:59.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:45:59.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:45:59.317 [DEBUG] [Thread-2872] [transport.py] [_log()] userauth is OK
2025-12-25T01:45:59.318 [DEBUG] [Thread-2872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:45:59.318 [DEBUG] [Thread-2872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:45:59.318 [DEBUG] [Thread-2872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:45:59.318 [DEBUG] [Thread-2872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:45:59.337 [INFO] [Thread-2872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:45:59.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:45:59.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:46:00.176 [DEBUG] [Thread-2872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:46:00.176 [DEBUG] [Thread-2872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:46:00.224 [DEBUG] [Thread-2872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:46:00.224 [DEBUG] [Thread-2872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:46:00.234 [DEBUG] [Thread-2872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:46:00.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:46:00.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:46:00.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:46:00.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:46:00.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:46:00.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:46:00.272 [DEBUG] [Thread-2872] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:46:06.196 [DEBUG] [Thread-2874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:46:21.246 [DEBUG] [Thread-2875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:46:25.348 [DEBUG] [Thread-2876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:46:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:46:30.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:46:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:46:31.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 46, 5), 0.58, 96.4, 0.0, 23.77, 11.88, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:46:31.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:46:05
2025-12-25T01:46:31.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:46:31.285 [DEBUG] [Thread-2877] [transport.py] [_log()] starting thread (client mode): 0xb95b1f60
2025-12-25T01:46:31.285 [DEBUG] [Thread-2877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:46:31.306 [DEBUG] [Thread-2877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:46:31.306 [INFO] [Thread-2877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:46:31.309 [DEBUG] [Thread-2877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:46:31.309 [DEBUG] [Thread-2877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] client lang: <none>
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] server lang: <none>
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] kex follows: False
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:46:31.310 [DEBUG] [Thread-2877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:46:31.311 [DEBUG] [Thread-2877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:46:31.311 [DEBUG] [Thread-2877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:46:31.311 [DEBUG] [Thread-2877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:46:31.311 [DEBUG] [Thread-2877] [transport.py] [_log()] Compression: none
2025-12-25T01:46:31.311 [DEBUG] [Thread-2877] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:46:31.330 [DEBUG] [Thread-2877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:46:31.331 [DEBUG] [Thread-2877] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:46:31.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:46:31.332 [DEBUG] [Thread-2877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:46:31.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:46:31.334 [DEBUG] [Thread-2877] [transport.py] [_log()] userauth is OK
2025-12-25T01:46:31.334 [DEBUG] [Thread-2877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:46:31.334 [DEBUG] [Thread-2877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:46:31.334 [DEBUG] [Thread-2877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:46:31.334 [DEBUG] [Thread-2877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:46:31.360 [INFO] [Thread-2877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:46:31.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:46:31.990 [DEBUG] [Thread-2877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:46:31.990 [DEBUG] [Thread-2877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:46:31.991 [DEBUG] [Thread-2877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:46:32.031 [DEBUG] [Thread-2877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:46:32.031 [DEBUG] [Thread-2877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:46:32.034 [DEBUG] [Thread-2877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:46:32.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:46:32.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:46:32.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:46:32.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:46:32.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:46:32.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:46:32.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:46:32.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:46:32.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:46:32.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.990000 -999.00  +11.80  26.37     93  +10.80 1 3 1 3 1     0    0 0.83 -7.59 ----- 24.1 26.4 137.6 28.7 13.6 -4.6 13.4 -4.3 13.3 -4.6 13.6 -3.5
2025-12-25T01:46:32.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:46:32.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:46:32.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.990000
2025-12-25T01:46:32.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:46:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:46:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:46:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:46:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:46:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:46:05', tmtdew=0.58, humidity=96.4, cloud=0.0, wind=23.77, temperature=11.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:45:36.000', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:46:32.064 [DEBUG] [Thread-2877] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:46:32.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:46:32.159 [DEBUG] [Thread-2880] [transport.py] [_log()] starting thread (client mode): 0xb95d5b10
2025-12-25T01:46:32.159 [DEBUG] [Thread-2880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:46:32.174 [DEBUG] [Thread-2880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:46:32.174 [INFO] [Thread-2880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:46:32.181 [DEBUG] [Thread-2880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] client lang: <none>
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] server lang: <none>
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] kex follows: False
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] Compression: none
2025-12-25T01:46:32.182 [DEBUG] [Thread-2880] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:46:32.241 [DEBUG] [Thread-2880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:46:32.241 [DEBUG] [Thread-2880] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:46:32.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:46:32.243 [DEBUG] [Thread-2880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:46:32.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:46:32.297 [DEBUG] [Thread-2880] [transport.py] [_log()] userauth is OK
2025-12-25T01:46:32.297 [DEBUG] [Thread-2880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:46:32.297 [DEBUG] [Thread-2880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:46:32.297 [DEBUG] [Thread-2880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:46:32.298 [DEBUG] [Thread-2880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:46:32.321 [INFO] [Thread-2880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:46:32.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:46:32.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:46:33.155 [DEBUG] [Thread-2880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:46:33.155 [DEBUG] [Thread-2880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:46:33.203 [DEBUG] [Thread-2880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:46:33.203 [DEBUG] [Thread-2880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:46:33.212 [DEBUG] [Thread-2880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:46:33.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:46:33.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:46:33.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
2025-12-25T01:46:33.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:46:33.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:46:33.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:46:33.249 [DEBUG] [Thread-2880] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:46:33.696 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:46:33.697 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:46:36.277 [DEBUG] [Thread-2882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:46:51.338 [DEBUG] [Thread-2883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:47:03.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:47:03.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:47:03.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:47:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 46, 37), 0.53, 96.42, 0.0, 25.28, 11.87, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:47:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:46:37
2025-12-25T01:47:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:47:04.285 [DEBUG] [Thread-2884] [transport.py] [_log()] starting thread (client mode): 0xb9546230
2025-12-25T01:47:04.285 [DEBUG] [Thread-2884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:47:04.304 [DEBUG] [Thread-2884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:47:04.304 [INFO] [Thread-2884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:47:04.307 [DEBUG] [Thread-2884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] client lang: <none>
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] server lang: <none>
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] kex follows: False
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] Compression: none
2025-12-25T01:47:04.308 [DEBUG] [Thread-2884] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:47:04.322 [DEBUG] [Thread-2884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:47:04.323 [DEBUG] [Thread-2884] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:47:04.323 [DEBUG] [Thread-2884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:47:04.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:47:04.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:47:04.324 [DEBUG] [Thread-2884] [transport.py] [_log()] userauth is OK
2025-12-25T01:47:04.324 [DEBUG] [Thread-2884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:47:04.324 [DEBUG] [Thread-2884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:47:04.324 [DEBUG] [Thread-2884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:47:04.324 [DEBUG] [Thread-2884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:47:04.334 [INFO] [Thread-2884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:47:04.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:47:04.979 [DEBUG] [Thread-2884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:47:04.979 [DEBUG] [Thread-2884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:47:04.979 [DEBUG] [Thread-2884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:47:05.019 [DEBUG] [Thread-2884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:47:05.020 [DEBUG] [Thread-2884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:47:05.022 [DEBUG] [Thread-2884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:47:05.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:47:05.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:47:05.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:47:05.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:47:05.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:47:05.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:47:05.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.990684 -999.00  +11.70  25.09     93  +10.70 1 3 1 3 1     0    0 0.79 -8.40 ----- 16.8 25.1 144.9 29.8 13.6 -3.8 13.4 -3.4 13.3 -3.9 13.6 -3.7
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.990684
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:47:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:46:37', tmtdew=0.53, humidity=96.42, cloud=0.0, wind=25.28, temperature=11.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:46:35.098', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:47:05.040 [DEBUG] [Thread-2884] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:47:05.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:47:05.124 [DEBUG] [Thread-2887] [transport.py] [_log()] starting thread (client mode): 0xb95471f0
2025-12-25T01:47:05.124 [DEBUG] [Thread-2887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:47:05.139 [DEBUG] [Thread-2887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:47:05.139 [INFO] [Thread-2887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:47:05.146 [DEBUG] [Thread-2887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:47:05.146 [DEBUG] [Thread-2887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:47:05.146 [DEBUG] [Thread-2887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:47:05.146 [DEBUG] [Thread-2887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] client lang: <none>
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] server lang: <none>
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] kex follows: False
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] Compression: none
2025-12-25T01:47:05.147 [DEBUG] [Thread-2887] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:47:05.203 [DEBUG] [Thread-2887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:47:05.204 [DEBUG] [Thread-2887] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:47:05.204 [DEBUG] [Thread-2887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:47:05.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:47:05.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:47:05.264 [DEBUG] [Thread-2887] [transport.py] [_log()] userauth is OK
2025-12-25T01:47:05.264 [DEBUG] [Thread-2887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:47:05.264 [DEBUG] [Thread-2887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:47:05.264 [DEBUG] [Thread-2887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:47:05.264 [DEBUG] [Thread-2887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:47:05.281 [INFO] [Thread-2887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:47:05.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:47:05.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:47:06.104 [DEBUG] [Thread-2887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:47:06.104 [DEBUG] [Thread-2887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:47:06.152 [DEBUG] [Thread-2887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:47:06.152 [DEBUG] [Thread-2887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:47:06.160 [DEBUG] [Thread-2887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:47:06.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:47:06.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:47:06.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:47:06.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:47:06.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:47:06.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:47:06.192 [DEBUG] [Thread-2887] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:47:06.370 [DEBUG] [Thread-2889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:47:21.418 [DEBUG] [Thread-2890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:47:25.422 [DEBUG] [Thread-2891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:47:33.948 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:47:33.950 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:47:36.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:47:36.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:47:36.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:47:36.454 [DEBUG] [Thread-2892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:47:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 47, 9), 0.53, 96.42, 0.0, 26.68, 11.83, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:47:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:47:09
2025-12-25T01:47:37.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:47:37.180 [DEBUG] [Thread-2893] [transport.py] [_log()] starting thread (client mode): 0xb957ae30
2025-12-25T01:47:37.180 [DEBUG] [Thread-2893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:47:37.200 [DEBUG] [Thread-2893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:47:37.200 [INFO] [Thread-2893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] client lang: <none>
2025-12-25T01:47:37.203 [DEBUG] [Thread-2893] [transport.py] [_log()] server lang: <none>
2025-12-25T01:47:37.204 [DEBUG] [Thread-2893] [transport.py] [_log()] kex follows: False
2025-12-25T01:47:37.204 [DEBUG] [Thread-2893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:47:37.204 [DEBUG] [Thread-2893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:47:37.204 [DEBUG] [Thread-2893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:47:37.204 [DEBUG] [Thread-2893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:47:37.204 [DEBUG] [Thread-2893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:47:37.204 [DEBUG] [Thread-2893] [transport.py] [_log()] Compression: none
2025-12-25T01:47:37.204 [DEBUG] [Thread-2893] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:47:37.221 [DEBUG] [Thread-2893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:47:37.222 [DEBUG] [Thread-2893] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:47:37.222 [DEBUG] [Thread-2893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:47:37.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:47:37.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:47:37.224 [DEBUG] [Thread-2893] [transport.py] [_log()] userauth is OK
2025-12-25T01:47:37.224 [DEBUG] [Thread-2893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:47:37.225 [DEBUG] [Thread-2893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:47:37.225 [DEBUG] [Thread-2893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:47:37.225 [DEBUG] [Thread-2893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:47:37.239 [INFO] [Thread-2893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:47:37.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:47:37.889 [DEBUG] [Thread-2893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:47:37.890 [DEBUG] [Thread-2893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:47:37.890 [DEBUG] [Thread-2893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:47:37.930 [DEBUG] [Thread-2893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:47:37.930 [DEBUG] [Thread-2893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:47:37.934 [DEBUG] [Thread-2893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:47:37.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:47:37.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:47:37.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:47:37.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:47:37.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:47:37.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:47:37.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:47:37.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:47:37.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:47:37.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.991031 -999.00  +11.70  21.75     93  +10.80 1 3 1 3 1     0    0 0.80 -8.58 ----- 20.6 21.8 141.6 28.7 13.6 -3.6 13.4 -3.7 13.2 -3.8 13.6 -3.9
2025-12-25T01:47:37.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:47:37.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:47:37.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.991031
2025-12-25T01:47:37.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:47:37.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:47:37.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:47:37.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:47:37.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:47:37.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:47:09', tmtdew=0.53, humidity=96.42, cloud=0.0, wind=26.68, temperature=11.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:47:05.078', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:47:37.961 [DEBUG] [Thread-2893] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:47:38.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:47:38.061 [DEBUG] [Thread-2896] [transport.py] [_log()] starting thread (client mode): 0xb9578ca0
2025-12-25T01:47:38.061 [DEBUG] [Thread-2896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:47:38.076 [DEBUG] [Thread-2896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:47:38.076 [INFO] [Thread-2896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:47:38.083 [DEBUG] [Thread-2896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:47:38.083 [DEBUG] [Thread-2896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:47:38.083 [DEBUG] [Thread-2896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:47:38.083 [DEBUG] [Thread-2896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:47:38.083 [DEBUG] [Thread-2896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:47:38.083 [DEBUG] [Thread-2896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:47:38.083 [DEBUG] [Thread-2896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] client lang: <none>
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] server lang: <none>
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] kex follows: False
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] Compression: none
2025-12-25T01:47:38.084 [DEBUG] [Thread-2896] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:47:38.140 [DEBUG] [Thread-2896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:47:38.141 [DEBUG] [Thread-2896] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:47:38.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:47:38.142 [DEBUG] [Thread-2896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:47:38.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:47:38.197 [DEBUG] [Thread-2896] [transport.py] [_log()] userauth is OK
2025-12-25T01:47:38.197 [DEBUG] [Thread-2896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:47:38.198 [DEBUG] [Thread-2896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:47:38.198 [DEBUG] [Thread-2896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:47:38.198 [DEBUG] [Thread-2896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:47:38.218 [INFO] [Thread-2896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:47:38.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:47:38.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:47:39.041 [DEBUG] [Thread-2896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:47:39.042 [DEBUG] [Thread-2896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:47:39.090 [DEBUG] [Thread-2896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:47:39.090 [DEBUG] [Thread-2896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:47:39.100 [DEBUG] [Thread-2896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:47:39.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:47:39.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:47: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
2025-12-25T01:47:39.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:47:39.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:47:39.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:47:39.143 [DEBUG] [Thread-2896] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:47:51.485 [DEBUG] [Thread-2898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:48:06.530 [DEBUG] [Thread-2899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:48:09.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:48:09.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:48:09.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:48:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 47, 41), 0.52, 96.43, 0.0, 23.91, 11.88, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:48:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:47:41
2025-12-25T01:48:09.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:48:10.125 [DEBUG] [Thread-2900] [transport.py] [_log()] starting thread (client mode): 0xb9593cd0
2025-12-25T01:48:10.125 [DEBUG] [Thread-2900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:48:10.146 [DEBUG] [Thread-2900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:48:10.146 [INFO] [Thread-2900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] client lang: <none>
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] server lang: <none>
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] kex follows: False
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:48:10.147 [DEBUG] [Thread-2900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:48:10.148 [DEBUG] [Thread-2900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:48:10.148 [DEBUG] [Thread-2900] [transport.py] [_log()] Compression: none
2025-12-25T01:48:10.148 [DEBUG] [Thread-2900] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:48:10.160 [DEBUG] [Thread-2900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:48:10.161 [DEBUG] [Thread-2900] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:48:10.161 [DEBUG] [Thread-2900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:48:10.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:48:10.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:48:10.162 [DEBUG] [Thread-2900] [transport.py] [_log()] userauth is OK
2025-12-25T01:48:10.162 [DEBUG] [Thread-2900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:48:10.163 [DEBUG] [Thread-2900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:48:10.163 [DEBUG] [Thread-2900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:48:10.163 [DEBUG] [Thread-2900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:48:10.186 [INFO] [Thread-2900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:48:10.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:48:10.792 [DEBUG] [Thread-2900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:48:10.792 [DEBUG] [Thread-2900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:48:10.792 [DEBUG] [Thread-2900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:48:10.833 [DEBUG] [Thread-2900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:48:10.833 [DEBUG] [Thread-2900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:48:10.836 [DEBUG] [Thread-2900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:48:10.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:48:10.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:48:10.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:48:10.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:48:10.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:48:10.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:48:10.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:48:10.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:48:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:48:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.991378 -999.00  +11.80  19.17     93  +10.90 1 3 1 3 1     0    0 0.80 -8.27 ----- 19.5 19.2 142.0 25.6 13.6 -4.2 13.4 -4.2 13.3 -4.2 13.6 -4.3
2025-12-25T01:48:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:48:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:48:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.991378
2025-12-25T01:48:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:48:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:48:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:48:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:48:10.862 [DEBUG] [Thread-2900] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:48:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:48:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:47:41', tmtdew=0.52, humidity=96.43, cloud=0.0, wind=23.91, temperature=11.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:47:35.059', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:48:10.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:48:10.956 [DEBUG] [Thread-2903] [transport.py] [_log()] starting thread (client mode): 0xb95b33d0
2025-12-25T01:48:10.957 [DEBUG] [Thread-2903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:48:10.970 [DEBUG] [Thread-2903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:48:10.971 [INFO] [Thread-2903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:48:10.978 [DEBUG] [Thread-2903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:48:10.978 [DEBUG] [Thread-2903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:48:10.978 [DEBUG] [Thread-2903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:48:10.978 [DEBUG] [Thread-2903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] client lang: <none>
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] server lang: <none>
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] kex follows: False
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:48:10.979 [DEBUG] [Thread-2903] [transport.py] [_log()] Compression: none
2025-12-25T01:48:10.980 [DEBUG] [Thread-2903] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:48:11.039 [DEBUG] [Thread-2903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:48:11.039 [DEBUG] [Thread-2903] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:48:11.040 [DEBUG] [Thread-2903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:48:11.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:48:11.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:48:11.097 [DEBUG] [Thread-2903] [transport.py] [_log()] userauth is OK
2025-12-25T01:48:11.097 [DEBUG] [Thread-2903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:48:11.098 [DEBUG] [Thread-2903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:48:11.098 [DEBUG] [Thread-2903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:48:11.098 [DEBUG] [Thread-2903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:48:11.116 [INFO] [Thread-2903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:48:11.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:48:11.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:48:11.967 [DEBUG] [Thread-2903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:48:11.967 [DEBUG] [Thread-2903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:48:12.015 [DEBUG] [Thread-2903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:48:12.016 [DEBUG] [Thread-2903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:48:12.025 [DEBUG] [Thread-2903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:48:12.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:48:12.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:48:12.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:48:12.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:48:12.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:48:12.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:48:12.061 [DEBUG] [Thread-2903] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:48:21.564 [DEBUG] [Thread-2905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:48:25.476 [DEBUG] [Thread-2906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:48:34.154 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:48:34.155 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:48:36.602 [DEBUG] [Thread-2907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:48:42.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:48:42.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:48:42.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:48:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 48, 13), 0.52, 96.45, 0.0, 23.87, 11.9, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:48:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:48:13
2025-12-25T01:48:42.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:48:43.057 [DEBUG] [Thread-2908] [transport.py] [_log()] starting thread (client mode): 0xb9579b40
2025-12-25T01:48:43.057 [DEBUG] [Thread-2908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:48:43.079 [DEBUG] [Thread-2908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:48:43.080 [INFO] [Thread-2908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:48:43.082 [DEBUG] [Thread-2908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:48:43.082 [DEBUG] [Thread-2908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] client lang: <none>
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] server lang: <none>
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] kex follows: False
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] Compression: none
2025-12-25T01:48:43.083 [DEBUG] [Thread-2908] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:48:43.101 [DEBUG] [Thread-2908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:48:43.101 [DEBUG] [Thread-2908] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:48:43.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:48:43.102 [DEBUG] [Thread-2908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:48:43.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:48:43.104 [DEBUG] [Thread-2908] [transport.py] [_log()] userauth is OK
2025-12-25T01:48:43.105 [DEBUG] [Thread-2908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:48:43.105 [DEBUG] [Thread-2908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:48:43.105 [DEBUG] [Thread-2908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:48:43.105 [DEBUG] [Thread-2908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:48:43.129 [INFO] [Thread-2908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:48:43.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:48:43.752 [DEBUG] [Thread-2908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:48:43.753 [DEBUG] [Thread-2908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:48:43.753 [DEBUG] [Thread-2908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:48:43.794 [DEBUG] [Thread-2908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:48:43.794 [DEBUG] [Thread-2908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:48:43.798 [DEBUG] [Thread-2908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:48:43.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:48:43.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:48:43.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:48:43.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:48:43.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:48:43.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:48:43.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:48:43.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:48:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:48:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.991725 -999.00  +11.80  14.65     93  +10.80 1 3 1 3 1     0    0 0.78 -9.00 ----- 12.7 14.7 159.0 23.9 13.6 -5.4 13.4 -4.8 13.3 -5.2 13.6 -4.3
2025-12-25T01:48:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:48:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:48:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.991725
2025-12-25T01:48:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:48:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:48:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:48:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:48:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:48:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:48:13', tmtdew=0.52, humidity=96.45, cloud=0.0, wind=23.87, temperature=11.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:48:05.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:48:43.825 [DEBUG] [Thread-2908] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:48:43.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:48:43.920 [DEBUG] [Thread-2911] [transport.py] [_log()] starting thread (client mode): 0xb9546440
2025-12-25T01:48:43.920 [DEBUG] [Thread-2911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:48:43.934 [DEBUG] [Thread-2911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:48:43.935 [INFO] [Thread-2911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:48:43.942 [DEBUG] [Thread-2911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:48:43.942 [DEBUG] [Thread-2911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:48:43.942 [DEBUG] [Thread-2911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:48:43.942 [DEBUG] [Thread-2911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] client lang: <none>
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] server lang: <none>
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] kex follows: False
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] Compression: none
2025-12-25T01:48:43.943 [DEBUG] [Thread-2911] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:48:44.000 [DEBUG] [Thread-2911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:48:44.001 [DEBUG] [Thread-2911] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:48:44.001 [DEBUG] [Thread-2911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:48:44.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:48:44.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:48:44.056 [DEBUG] [Thread-2911] [transport.py] [_log()] userauth is OK
2025-12-25T01:48:44.056 [DEBUG] [Thread-2911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:48:44.057 [DEBUG] [Thread-2911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:48:44.057 [DEBUG] [Thread-2911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:48:44.057 [DEBUG] [Thread-2911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:48:44.076 [INFO] [Thread-2911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:48:44.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:48:44.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:48:44.874 [DEBUG] [Thread-2911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:48:44.874 [DEBUG] [Thread-2911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:48:44.922 [DEBUG] [Thread-2911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:48:44.922 [DEBUG] [Thread-2911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:48:44.932 [DEBUG] [Thread-2911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:48:44.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:48:44.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:48:44.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:48:44.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:48:44.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:48:44.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:48:44.968 [DEBUG] [Thread-2911] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:48:51.636 [DEBUG] [Thread-2913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:49:06.692 [DEBUG] [Thread-2914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:49:14.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:49:14.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:49:14.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:49:15.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 48, 45), 0.52, 96.43, 0.0, 24.24, 11.82, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:49:15.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:48:45
2025-12-25T01:49:15.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:49:15.942 [DEBUG] [Thread-2915] [transport.py] [_log()] starting thread (client mode): 0xb95918d0
2025-12-25T01:49:15.942 [DEBUG] [Thread-2915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:49:15.962 [DEBUG] [Thread-2915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:49:15.962 [INFO] [Thread-2915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:49:15.963 [DEBUG] [Thread-2915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:49:15.963 [DEBUG] [Thread-2915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:49:15.963 [DEBUG] [Thread-2915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:49:15.963 [DEBUG] [Thread-2915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:49:15.963 [DEBUG] [Thread-2915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:49:15.963 [DEBUG] [Thread-2915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:49:15.963 [DEBUG] [Thread-2915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] client lang: <none>
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] server lang: <none>
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] kex follows: False
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] Compression: none
2025-12-25T01:49:15.964 [DEBUG] [Thread-2915] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:49:15.975 [DEBUG] [Thread-2915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:49:15.976 [DEBUG] [Thread-2915] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:49:15.976 [DEBUG] [Thread-2915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:49:15.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:49:15.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:49:15.978 [DEBUG] [Thread-2915] [transport.py] [_log()] userauth is OK
2025-12-25T01:49:15.978 [DEBUG] [Thread-2915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:49:15.978 [DEBUG] [Thread-2915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:49:15.978 [DEBUG] [Thread-2915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:49:15.978 [DEBUG] [Thread-2915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:49:15.996 [INFO] [Thread-2915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:49:15.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:49:16.586 [DEBUG] [Thread-2915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:49:16.586 [DEBUG] [Thread-2915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:49:16.587 [DEBUG] [Thread-2915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:49:16.627 [DEBUG] [Thread-2915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:49:16.627 [DEBUG] [Thread-2915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:49:16.631 [DEBUG] [Thread-2915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:49:16.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:49:16.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:49:16.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:49:16.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:49:16.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:49:16.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:49:16.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:49:16.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:49:16.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:49:16.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.992072 -999.00  +11.80  18.63     93  +10.80 1 3 1 3 1     0    0 0.79 -8.16 ----- 18.3 18.6 160.4 22.6 13.6 -3.7 13.4 -3.4 13.2 -3.8 13.6 -4.2
2025-12-25T01:49:16.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:49:16.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:49:16.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.992072
2025-12-25T01:49:16.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:49:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:49:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:49:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:49:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:49:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:48:45', tmtdew=0.52, humidity=96.43, cloud=0.0, wind=24.24, temperature=11.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:48:35.021', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:49:16.655 [DEBUG] [Thread-2915] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:49:16.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:49:16.750 [DEBUG] [Thread-2918] [transport.py] [_log()] starting thread (client mode): 0xb95593f0
2025-12-25T01:49:16.750 [DEBUG] [Thread-2918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:49:16.764 [DEBUG] [Thread-2918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:49:16.765 [INFO] [Thread-2918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:49:16.772 [DEBUG] [Thread-2918] [transport.py] [_log()] client lang: <none>
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] server lang: <none>
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] kex follows: False
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] Compression: none
2025-12-25T01:49:16.773 [DEBUG] [Thread-2918] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:49:16.833 [DEBUG] [Thread-2918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:49:16.833 [DEBUG] [Thread-2918] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:49:16.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:49:16.835 [DEBUG] [Thread-2918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:49:16.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:49:16.889 [DEBUG] [Thread-2918] [transport.py] [_log()] userauth is OK
2025-12-25T01:49:16.889 [DEBUG] [Thread-2918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:49:16.889 [DEBUG] [Thread-2918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:49:16.890 [DEBUG] [Thread-2918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:49:16.890 [DEBUG] [Thread-2918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:49:16.910 [INFO] [Thread-2918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:49:16.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:49:16.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:49:17.754 [DEBUG] [Thread-2918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:49:17.755 [DEBUG] [Thread-2918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:49:17.803 [DEBUG] [Thread-2918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:49:17.803 [DEBUG] [Thread-2918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:49:17.812 [DEBUG] [Thread-2918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:49:17.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:49:17.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:49:17.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:49:17.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:49:17.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:49:17.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:49:17.846 [DEBUG] [Thread-2918] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:49:21.728 [DEBUG] [Thread-2920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:49:25.545 [DEBUG] [Thread-2921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:49:34.357 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:49:34.358 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:49:36.778 [DEBUG] [Thread-2922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:49:47.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:49:47.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:49:47.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:49:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 49, 17), 0.52, 96.43, 0.0, 23.87, 11.8, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:49:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:49:17
2025-12-25T01:49:48.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:49:48.855 [DEBUG] [Thread-2923] [transport.py] [_log()] starting thread (client mode): 0xb95d5ae0
2025-12-25T01:49:48.855 [DEBUG] [Thread-2923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:49:48.875 [DEBUG] [Thread-2923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:49:48.875 [INFO] [Thread-2923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] client lang: <none>
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] server lang: <none>
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] kex follows: False
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] Compression: none
2025-12-25T01:49:48.879 [DEBUG] [Thread-2923] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:49:48.898 [DEBUG] [Thread-2923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:49:48.898 [DEBUG] [Thread-2923] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:49:48.899 [DEBUG] [Thread-2923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:49:48.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:49:48.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:49:48.901 [DEBUG] [Thread-2923] [transport.py] [_log()] userauth is OK
2025-12-25T01:49:48.901 [DEBUG] [Thread-2923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:49:48.902 [DEBUG] [Thread-2923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:49:48.902 [DEBUG] [Thread-2923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:49:48.902 [DEBUG] [Thread-2923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:49:48.933 [INFO] [Thread-2923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:49:48.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:49:49.550 [DEBUG] [Thread-2923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:49:49.551 [DEBUG] [Thread-2923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:49:49.551 [DEBUG] [Thread-2923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:49:49.592 [DEBUG] [Thread-2923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:49:49.592 [DEBUG] [Thread-2923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:49:49.596 [DEBUG] [Thread-2923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:49:49.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:49:49.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:49:49.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:49:49.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:49:49.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:49:49.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:49:49.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:49:49.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:49:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:49:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.992419 -999.00  +11.80  18.87     93  +10.80 1 3 1 3 1     0    0 0.79 -8.35 ----- 21.8 18.9 157.0 24.1 13.6 -3.3 13.4 -2.8 13.2 -3.4 13.6 -3.5
2025-12-25T01:49:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:49:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:49:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.992419
2025-12-25T01:49:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:49:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:49:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:49:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:49:49.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:49:49.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:49:17', tmtdew=0.52, humidity=96.43, cloud=0.0, wind=23.87, temperature=11.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:49:05.002', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:49:49.623 [DEBUG] [Thread-2923] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:49:49.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:49:49.718 [DEBUG] [Thread-2926] [transport.py] [_log()] starting thread (client mode): 0xb9545b10
2025-12-25T01:49:49.718 [DEBUG] [Thread-2926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:49:49.732 [DEBUG] [Thread-2926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:49:49.732 [INFO] [Thread-2926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] client lang: <none>
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] server lang: <none>
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] kex follows: False
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:49:49.740 [DEBUG] [Thread-2926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:49:49.741 [DEBUG] [Thread-2926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:49:49.741 [DEBUG] [Thread-2926] [transport.py] [_log()] Compression: none
2025-12-25T01:49:49.741 [DEBUG] [Thread-2926] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:49:49.797 [DEBUG] [Thread-2926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:49:49.797 [DEBUG] [Thread-2926] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:49:49.798 [DEBUG] [Thread-2926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:49:49.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:49:49.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:49:49.852 [DEBUG] [Thread-2926] [transport.py] [_log()] userauth is OK
2025-12-25T01:49:49.853 [DEBUG] [Thread-2926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:49:49.853 [DEBUG] [Thread-2926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:49:49.853 [DEBUG] [Thread-2926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:49:49.853 [DEBUG] [Thread-2926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:49:49.873 [INFO] [Thread-2926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:49:49.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:49:49.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:49:50.722 [DEBUG] [Thread-2926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:49:50.722 [DEBUG] [Thread-2926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:49:50.770 [DEBUG] [Thread-2926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:49:50.771 [DEBUG] [Thread-2926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:49:50.779 [DEBUG] [Thread-2926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:49:50.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:49:50.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:49:50.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:49:50.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:49:50.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:49:50.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:49:50.811 [DEBUG] [Thread-2926] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:49:51.807 [DEBUG] [Thread-2928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:50:06.847 [DEBUG] [Thread-2929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:50:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:50:20.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:50:20.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
2025-12-25T01:50:21.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 49, 49), 0.57, 96.45, 0.0, 29.13, 11.87, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:50:21.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:49:49
2025-12-25T01:50:21.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:50:21.827 [DEBUG] [Thread-2930] [transport.py] [_log()] starting thread (client mode): 0xb95d4ca0
2025-12-25T01:50:21.827 [DEBUG] [Thread-2930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:50:21.847 [DEBUG] [Thread-2930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:50:21.847 [INFO] [Thread-2930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] client lang: <none>
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] server lang: <none>
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] kex follows: False
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] Compression: none
2025-12-25T01:50:21.851 [DEBUG] [Thread-2930] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:50:21.866 [DEBUG] [Thread-2930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:50:21.866 [DEBUG] [Thread-2930] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:50:21.866 [DEBUG] [Thread-2930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:50:21.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:50:21.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:50:21.867 [DEBUG] [Thread-2930] [transport.py] [_log()] userauth is OK
2025-12-25T01:50:21.867 [DEBUG] [Thread-2930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:50:21.867 [DEBUG] [Thread-2930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:50:21.867 [DEBUG] [Thread-2930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:50:21.867 [DEBUG] [Thread-2930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:50:21.874 [DEBUG] [Thread-2932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:50:21.877 [INFO] [Thread-2930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:50:21.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:50:22.502 [DEBUG] [Thread-2930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:50:22.502 [DEBUG] [Thread-2930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:50:22.502 [DEBUG] [Thread-2930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:50:22.543 [DEBUG] [Thread-2930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:50:22.543 [DEBUG] [Thread-2930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:50:22.546 [DEBUG] [Thread-2930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:50:22.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:50:22.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:50:22.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:50:22.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:50:22.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:50:22.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:50:22.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:50:22.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:50:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:50:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.992778 -999.00  +11.80  16.35     93  +10.80 1 3 1 3 1     0    0 0.81 -8.14 ----- 18.9 16.4 160.4 23.1 13.6 -3.6 13.4 -3.2 13.2 -3.6 13.6 -3.8
2025-12-25T01:50:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:50:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:50:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.992778
2025-12-25T01:50:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:50:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:50:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:50:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:50:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:50:22.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:49:49', tmtdew=0.57, humidity=96.45, cloud=0.0, wind=29.13, temperature=11.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:49:36.019', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:50:22.563 [DEBUG] [Thread-2930] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:50:22.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:50:22.651 [DEBUG] [Thread-2934] [transport.py] [_log()] starting thread (client mode): 0xb9546ef0
2025-12-25T01:50:22.651 [DEBUG] [Thread-2934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:50:22.665 [DEBUG] [Thread-2934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:50:22.665 [INFO] [Thread-2934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:50:22.672 [DEBUG] [Thread-2934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:50:22.672 [DEBUG] [Thread-2934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:50:22.672 [DEBUG] [Thread-2934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:50:22.672 [DEBUG] [Thread-2934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:50:22.672 [DEBUG] [Thread-2934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:50:22.672 [DEBUG] [Thread-2934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] client lang: <none>
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] server lang: <none>
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] kex follows: False
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] Compression: none
2025-12-25T01:50:22.673 [DEBUG] [Thread-2934] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:50:22.731 [DEBUG] [Thread-2934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:50:22.732 [DEBUG] [Thread-2934] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:50:22.732 [DEBUG] [Thread-2934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:50:22.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:50:22.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:50:22.788 [DEBUG] [Thread-2934] [transport.py] [_log()] userauth is OK
2025-12-25T01:50:22.788 [DEBUG] [Thread-2934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:50:22.788 [DEBUG] [Thread-2934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:50:22.788 [DEBUG] [Thread-2934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:50:22.788 [DEBUG] [Thread-2934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:50:22.806 [INFO] [Thread-2934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:50:22.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:50:22.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:50:23.629 [DEBUG] [Thread-2934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:50:23.629 [DEBUG] [Thread-2934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:50:23.676 [DEBUG] [Thread-2934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:50:23.677 [DEBUG] [Thread-2934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:50:23.685 [DEBUG] [Thread-2934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:50:23.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:50:23.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:50:23.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:50:23.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:50:23.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:50:23.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:50:23.717 [DEBUG] [Thread-2934] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:50:25.634 [DEBUG] [Thread-2936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:50:34.588 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:50:34.589 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:50:36.907 [DEBUG] [Thread-2937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:50:51.961 [DEBUG] [Thread-2938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:50:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:50:53.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:50:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:50:54.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 50, 21), 0.57, 96.43, 0.0, 29.4, 11.83, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:50:54.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:50:21
2025-12-25T01:50:54.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:50:54.761 [DEBUG] [Thread-2939] [transport.py] [_log()] starting thread (client mode): 0xb95f3fd0
2025-12-25T01:50:54.761 [DEBUG] [Thread-2939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:50:54.781 [DEBUG] [Thread-2939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:50:54.781 [INFO] [Thread-2939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] client lang: <none>
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] server lang: <none>
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] kex follows: False
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] Compression: none
2025-12-25T01:50:54.784 [DEBUG] [Thread-2939] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:50:54.795 [DEBUG] [Thread-2939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:50:54.795 [DEBUG] [Thread-2939] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:50:54.795 [DEBUG] [Thread-2939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:50:54.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:50:54.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:50:54.796 [DEBUG] [Thread-2939] [transport.py] [_log()] userauth is OK
2025-12-25T01:50:54.796 [DEBUG] [Thread-2939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:50:54.796 [DEBUG] [Thread-2939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:50:54.796 [DEBUG] [Thread-2939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:50:54.796 [DEBUG] [Thread-2939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:50:54.814 [INFO] [Thread-2939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:50:54.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:50:55.486 [DEBUG] [Thread-2939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:50:55.486 [DEBUG] [Thread-2939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:50:55.486 [DEBUG] [Thread-2939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:50:55.527 [DEBUG] [Thread-2939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:50:55.527 [DEBUG] [Thread-2939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:50:55.529 [DEBUG] [Thread-2939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:50:55.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:50:55.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:50:55.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:50:55.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:50:55.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:50:55.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:50:55.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:50:55.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:50:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:50:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.993125 -999.00  +11.70  17.42     93  +10.80 1 3 1 3 1     0    0 0.81 -8.18 ----- 19.4 17.4 163.0 23.8 13.5 -4.0 13.3 -3.6 13.2 -4.0 13.6 -3.5
2025-12-25T01:50:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:50:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:50:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.993125
2025-12-25T01:50:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:50:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:50:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:50:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:50:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:50:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:50:21', tmtdew=0.57, humidity=96.43, cloud=0.0, wind=29.4, temperature=11.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:50:06.000', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:50:55.546 [DEBUG] [Thread-2939] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:50:55.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:50:55.631 [DEBUG] [Thread-2942] [transport.py] [_log()] starting thread (client mode): 0xb9593160
2025-12-25T01:50:55.631 [DEBUG] [Thread-2942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:50:55.645 [DEBUG] [Thread-2942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:50:55.645 [INFO] [Thread-2942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] client lang: <none>
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] server lang: <none>
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] kex follows: False
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] Compression: none
2025-12-25T01:50:55.653 [DEBUG] [Thread-2942] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:50:55.711 [DEBUG] [Thread-2942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:50:55.711 [DEBUG] [Thread-2942] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:50:55.712 [DEBUG] [Thread-2942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:50:55.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:50:55.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:50:55.771 [DEBUG] [Thread-2942] [transport.py] [_log()] userauth is OK
2025-12-25T01:50:55.771 [DEBUG] [Thread-2942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:50:55.771 [DEBUG] [Thread-2942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:50:55.771 [DEBUG] [Thread-2942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:50:55.772 [DEBUG] [Thread-2942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:50:55.786 [INFO] [Thread-2942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:50:55.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:50:55.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:50:56.599 [DEBUG] [Thread-2942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:50:56.599 [DEBUG] [Thread-2942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:50:56.647 [DEBUG] [Thread-2942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:50:56.648 [DEBUG] [Thread-2942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:50:56.657 [DEBUG] [Thread-2942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:50:56.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:50:56.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:50:56.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:50:56.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:50:56.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:50:56.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:50:56.697 [DEBUG] [Thread-2942] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:51:06.991 [DEBUG] [Thread-2944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:51:22.041 [DEBUG] [Thread-2945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:51:25.707 [DEBUG] [Thread-2946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:51:26.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:51:26.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:51:26.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:51:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 50, 53), 0.51, 96.5, 0.0, 20.79, 11.83, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:51:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:50:53
2025-12-25T01:51:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:51:27.728 [DEBUG] [Thread-2947] [transport.py] [_log()] starting thread (client mode): 0xb95470a0
2025-12-25T01:51:27.728 [DEBUG] [Thread-2947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:51:27.749 [DEBUG] [Thread-2947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:51:27.749 [INFO] [Thread-2947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] client lang: <none>
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] server lang: <none>
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] kex follows: False
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] Compression: none
2025-12-25T01:51:27.753 [DEBUG] [Thread-2947] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:51:27.768 [DEBUG] [Thread-2947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:51:27.768 [DEBUG] [Thread-2947] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:51:27.768 [DEBUG] [Thread-2947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:51:27.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:51:27.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:51:27.769 [DEBUG] [Thread-2947] [transport.py] [_log()] userauth is OK
2025-12-25T01:51:27.769 [DEBUG] [Thread-2947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:51:27.769 [DEBUG] [Thread-2947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:51:27.769 [DEBUG] [Thread-2947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:51:27.769 [DEBUG] [Thread-2947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:51:27.777 [INFO] [Thread-2947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:51:27.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:51:28.423 [DEBUG] [Thread-2947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:51:28.423 [DEBUG] [Thread-2947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:51:28.423 [DEBUG] [Thread-2947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:51:28.465 [DEBUG] [Thread-2947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:51:28.465 [DEBUG] [Thread-2947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:51:28.467 [DEBUG] [Thread-2947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:51:28.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:51:28.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:51:28.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:51:28.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:51:28.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:51:28.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:51:28.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.993808 -999.00  +11.70  16.34     93  +10.80 1 3 1 3 1     0    0 0.75 -9.04 ----- 16.4 16.3 148.4 24.6 13.6 -3.6 13.3 -3.8 13.2 -3.8 13.6 -3.8
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.993808
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:51:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:50:53', tmtdew=0.51, humidity=96.5, cloud=0.0, wind=20.79, temperature=11.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:51:05.011', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:51:28.487 [DEBUG] [Thread-2947] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:51:28.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:51:28.570 [DEBUG] [Thread-2950] [transport.py] [_log()] starting thread (client mode): 0xb9591c00
2025-12-25T01:51:28.570 [DEBUG] [Thread-2950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:51:28.585 [DEBUG] [Thread-2950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:51:28.585 [INFO] [Thread-2950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] client lang: <none>
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] server lang: <none>
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] kex follows: False
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:51:28.592 [DEBUG] [Thread-2950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:51:28.593 [DEBUG] [Thread-2950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:51:28.593 [DEBUG] [Thread-2950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:51:28.593 [DEBUG] [Thread-2950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:51:28.593 [DEBUG] [Thread-2950] [transport.py] [_log()] Compression: none
2025-12-25T01:51:28.593 [DEBUG] [Thread-2950] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:51:28.647 [DEBUG] [Thread-2950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:51:28.647 [DEBUG] [Thread-2950] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:51:28.647 [DEBUG] [Thread-2950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:51:28.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:51:28.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:51:28.704 [DEBUG] [Thread-2950] [transport.py] [_log()] userauth is OK
2025-12-25T01:51:28.704 [DEBUG] [Thread-2950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:51:28.704 [DEBUG] [Thread-2950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:51:28.704 [DEBUG] [Thread-2950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:51:28.704 [DEBUG] [Thread-2950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:51:28.719 [INFO] [Thread-2950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:51:28.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:51:28.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:51:29.545 [DEBUG] [Thread-2950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:51:29.545 [DEBUG] [Thread-2950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:51:29.593 [DEBUG] [Thread-2950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:51:29.593 [DEBUG] [Thread-2950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:51:29.602 [DEBUG] [Thread-2950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:51:29.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:51:29.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:51:29.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:51:29.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:51:29.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:51:29.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:51:29.639 [DEBUG] [Thread-2950] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:51:34.791 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:51:34.792 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:51:37.078 [DEBUG] [Thread-2952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:51:52.116 [DEBUG] [Thread-2953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:51:59.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:51:59.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:51:59.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:52:00.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 51, 25), 0.51, 96.52, 0.0, 22.74, 11.8, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:52:00.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:51:25
2025-12-25T01:52:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:52:00.696 [DEBUG] [Thread-2954] [transport.py] [_log()] starting thread (client mode): 0xb9579030
2025-12-25T01:52:00.696 [DEBUG] [Thread-2954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:52:00.716 [DEBUG] [Thread-2954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:52:00.716 [INFO] [Thread-2954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] client lang: <none>
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] server lang: <none>
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] kex follows: False
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] Compression: none
2025-12-25T01:52:00.719 [DEBUG] [Thread-2954] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:52:00.733 [DEBUG] [Thread-2954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:52:00.733 [DEBUG] [Thread-2954] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:52:00.733 [DEBUG] [Thread-2954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:52:00.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:52:00.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:52:00.734 [DEBUG] [Thread-2954] [transport.py] [_log()] userauth is OK
2025-12-25T01:52:00.734 [DEBUG] [Thread-2954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:52:00.734 [DEBUG] [Thread-2954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:52:00.734 [DEBUG] [Thread-2954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:52:00.734 [DEBUG] [Thread-2954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:52:00.744 [INFO] [Thread-2954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:52:00.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:52:01.386 [DEBUG] [Thread-2954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:52:01.386 [DEBUG] [Thread-2954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:52:01.387 [DEBUG] [Thread-2954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:52:01.427 [DEBUG] [Thread-2954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:52:01.427 [DEBUG] [Thread-2954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:52:01.430 [DEBUG] [Thread-2954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:52:01.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:52:01.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:52:01.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:52:01.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:52:01.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:52:01.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:52:01.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:52:01.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:52:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:52:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.994155 -999.00  +11.80  16.73     94  +10.80 1 3 1 3 1     0    0 0.72 -9.73 ----- 15.7 16.7 157.8 21.2 13.5 -3.2 13.3 -3.0 13.2 -3.2 13.6 -3.7
2025-12-25T01:52:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:52:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:52:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.994155
2025-12-25T01:52:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:52:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:52:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:52:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:52:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:52:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:51:25', tmtdew=0.51, humidity=96.52, cloud=0.0, wind=22.74, temperature=11.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:51:34.992', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:52:01.456 [DEBUG] [Thread-2954] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:52:01.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:52:01.552 [DEBUG] [Thread-2957] [transport.py] [_log()] starting thread (client mode): 0xb9545ae0
2025-12-25T01:52:01.552 [DEBUG] [Thread-2957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:52:01.566 [DEBUG] [Thread-2957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:52:01.566 [INFO] [Thread-2957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:52:01.574 [DEBUG] [Thread-2957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:52:01.574 [DEBUG] [Thread-2957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:52:01.574 [DEBUG] [Thread-2957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:52:01.574 [DEBUG] [Thread-2957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:52:01.574 [DEBUG] [Thread-2957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:52:01.574 [DEBUG] [Thread-2957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:52:01.574 [DEBUG] [Thread-2957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] client lang: <none>
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] server lang: <none>
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] kex follows: False
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] Compression: none
2025-12-25T01:52:01.575 [DEBUG] [Thread-2957] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:52:01.633 [DEBUG] [Thread-2957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:52:01.634 [DEBUG] [Thread-2957] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:52:01.634 [DEBUG] [Thread-2957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:52:01.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:52:01.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:52:01.689 [DEBUG] [Thread-2957] [transport.py] [_log()] userauth is OK
2025-12-25T01:52:01.689 [DEBUG] [Thread-2957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:52:01.689 [DEBUG] [Thread-2957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:52:01.689 [DEBUG] [Thread-2957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:52:01.690 [DEBUG] [Thread-2957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:52:01.709 [INFO] [Thread-2957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:52:01.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:52:01.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:52:02.549 [DEBUG] [Thread-2957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:52:02.549 [DEBUG] [Thread-2957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:52:02.597 [DEBUG] [Thread-2957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:52:02.597 [DEBUG] [Thread-2957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:52:02.606 [DEBUG] [Thread-2957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:52:02.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:52:02.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:52:02.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:52:02.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:52:02.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:52:02.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:52:02.643 [DEBUG] [Thread-2957] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:52:07.151 [DEBUG] [Thread-2959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:52:22.209 [DEBUG] [Thread-2960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:52:25.795 [DEBUG] [Thread-2961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:52:32.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:52:32.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:52:32.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:52:33.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 51, 58), 0.51, 96.53, 0.0, 24.86, 11.82, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:52:33.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:51:58
2025-12-25T01:52:33.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:52:33.658 [DEBUG] [Thread-2962] [transport.py] [_log()] starting thread (client mode): 0xb95f2920
2025-12-25T01:52:33.658 [DEBUG] [Thread-2962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:52:33.680 [DEBUG] [Thread-2962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:52:33.680 [INFO] [Thread-2962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] client lang: <none>
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] server lang: <none>
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] kex follows: False
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:52:33.683 [DEBUG] [Thread-2962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:52:33.684 [DEBUG] [Thread-2962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:52:33.684 [DEBUG] [Thread-2962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:52:33.684 [DEBUG] [Thread-2962] [transport.py] [_log()] Compression: none
2025-12-25T01:52:33.684 [DEBUG] [Thread-2962] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:52:33.702 [DEBUG] [Thread-2962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:52:33.703 [DEBUG] [Thread-2962] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:52:33.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:52:33.704 [DEBUG] [Thread-2962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:52:33.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:52:33.706 [DEBUG] [Thread-2962] [transport.py] [_log()] userauth is OK
2025-12-25T01:52:33.706 [DEBUG] [Thread-2962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:52:33.706 [DEBUG] [Thread-2962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:52:33.706 [DEBUG] [Thread-2962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:52:33.707 [DEBUG] [Thread-2962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:52:33.732 [INFO] [Thread-2962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:52:33.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:52:34.407 [DEBUG] [Thread-2962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:52:34.407 [DEBUG] [Thread-2962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:52:34.408 [DEBUG] [Thread-2962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:52:34.448 [DEBUG] [Thread-2962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:52:34.448 [DEBUG] [Thread-2962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:52:34.451 [DEBUG] [Thread-2962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:52:34.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:52:34.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:52:34.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:52:34.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:52:34.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:52:34.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:52:34.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:52:34.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:52:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:52:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.994503 -999.00  +11.80  21.08     94  +10.80 1 3 1 3 1     0    0 0.74 -9.94 ----- 27.2 21.1 141.8 29.0 13.6 -3.4 13.4 -3.2 13.2 -3.3 13.6 -3.4
2025-12-25T01:52:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:52:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:52:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.994503
2025-12-25T01:52:34.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:52:34.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:52:34.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:52:34.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:52:34.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:52:34.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:51:58', tmtdew=0.51, humidity=96.53, cloud=0.0, wind=24.86, temperature=11.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:52:05.059', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:52:34.477 [DEBUG] [Thread-2962] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:52:34.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:52:34.571 [DEBUG] [Thread-2965] [transport.py] [_log()] starting thread (client mode): 0xb95f2e30
2025-12-25T01:52:34.571 [DEBUG] [Thread-2965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:52:34.586 [DEBUG] [Thread-2965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:52:34.586 [INFO] [Thread-2965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:52:34.594 [DEBUG] [Thread-2965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:52:34.594 [DEBUG] [Thread-2965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:52:34.594 [DEBUG] [Thread-2965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:52:34.594 [DEBUG] [Thread-2965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:52:34.594 [DEBUG] [Thread-2965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:52:34.594 [DEBUG] [Thread-2965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:52:34.594 [DEBUG] [Thread-2965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] client lang: <none>
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] server lang: <none>
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] kex follows: False
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:52:34.595 [DEBUG] [Thread-2965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:52:34.596 [DEBUG] [Thread-2965] [transport.py] [_log()] Compression: none
2025-12-25T01:52:34.596 [DEBUG] [Thread-2965] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:52:34.653 [DEBUG] [Thread-2965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:52:34.653 [DEBUG] [Thread-2965] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:52:34.654 [DEBUG] [Thread-2965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:52:34.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:52:34.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:52:34.709 [DEBUG] [Thread-2965] [transport.py] [_log()] userauth is OK
2025-12-25T01:52:34.709 [DEBUG] [Thread-2965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:52:34.709 [DEBUG] [Thread-2965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:52:34.709 [DEBUG] [Thread-2965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:52:34.709 [DEBUG] [Thread-2965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:52:34.727 [INFO] [Thread-2965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:52:34.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:52:34.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:52:34.997 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:52:34.998 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:52:35.529 [DEBUG] [Thread-2965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:52:35.530 [DEBUG] [Thread-2965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:52:35.578 [DEBUG] [Thread-2965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:52:35.578 [DEBUG] [Thread-2965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:52:35.587 [DEBUG] [Thread-2965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:52:35.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:52:35.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:52:35.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
2025-12-25T01:52:35.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:52:35.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:52:35.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:52:35.620 [DEBUG] [Thread-2965] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:52:37.245 [DEBUG] [Thread-2967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:52:52.304 [DEBUG] [Thread-2968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:53:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:53:05.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:53:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:53:06.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 53, 2), 0.51, 96.53, 0.0, 23.66, 11.82, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:53:06.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:53:02
2025-12-25T01:53:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:53:06.624 [DEBUG] [Thread-2969] [transport.py] [_log()] starting thread (client mode): 0xb9593190
2025-12-25T01:53:06.624 [DEBUG] [Thread-2969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:53:06.634 [DEBUG] [Thread-2969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:53:06.634 [INFO] [Thread-2969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:53:06.635 [DEBUG] [Thread-2969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] client lang: <none>
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] server lang: <none>
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] kex follows: False
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] Compression: none
2025-12-25T01:53:06.636 [DEBUG] [Thread-2969] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:53:06.644 [DEBUG] [Thread-2969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:53:06.645 [DEBUG] [Thread-2969] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:53:06.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:53:06.646 [DEBUG] [Thread-2969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:53:06.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:53:06.646 [DEBUG] [Thread-2969] [transport.py] [_log()] userauth is OK
2025-12-25T01:53:06.646 [DEBUG] [Thread-2969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:53:06.647 [DEBUG] [Thread-2969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:53:06.647 [DEBUG] [Thread-2969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:53:06.647 [DEBUG] [Thread-2969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:53:06.663 [INFO] [Thread-2969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:53:06.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:53:07.217 [DEBUG] [Thread-2969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:53:07.217 [DEBUG] [Thread-2969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:53:07.218 [DEBUG] [Thread-2969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:53:07.258 [DEBUG] [Thread-2969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:53:07.259 [DEBUG] [Thread-2969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:53:07.262 [DEBUG] [Thread-2969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:53:07.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:53:07.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:53:07.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:53:07.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:53:07.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:53:07.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:53:07.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:53:07.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:53:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:53:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.994850 -999.00  +11.70  17.40     93  +10.80 1 3 1 3 1     0    0 0.72 -9.97 ----- 20.4 17.4 146.6 25.6 13.5 -3.7 13.4 -3.8 13.2 -3.5 13.5 -3.4
2025-12-25T01:53:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:53:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:53:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.994850
2025-12-25T01:53:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:53:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:53:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:53:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:53:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:53:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:53:02', tmtdew=0.51, humidity=96.53, cloud=0.0, wind=23.66, temperature=11.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:52:35.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:53:07.288 [DEBUG] [Thread-2969] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:53:07.333 [DEBUG] [Thread-2972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:53:07.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:53:07.382 [DEBUG] [Thread-2973] [transport.py] [_log()] starting thread (client mode): 0xb95b3100
2025-12-25T01:53:07.382 [DEBUG] [Thread-2973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:53:07.397 [DEBUG] [Thread-2973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:53:07.397 [INFO] [Thread-2973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:53:07.405 [DEBUG] [Thread-2973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:53:07.405 [DEBUG] [Thread-2973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] client lang: <none>
2025-12-25T01:53:07.406 [DEBUG] [Thread-2973] [transport.py] [_log()] server lang: <none>
2025-12-25T01:53:07.407 [DEBUG] [Thread-2973] [transport.py] [_log()] kex follows: False
2025-12-25T01:53:07.407 [DEBUG] [Thread-2973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:53:07.407 [DEBUG] [Thread-2973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:53:07.407 [DEBUG] [Thread-2973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:53:07.407 [DEBUG] [Thread-2973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:53:07.407 [DEBUG] [Thread-2973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:53:07.407 [DEBUG] [Thread-2973] [transport.py] [_log()] Compression: none
2025-12-25T01:53:07.407 [DEBUG] [Thread-2973] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:53:07.465 [DEBUG] [Thread-2973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:53:07.465 [DEBUG] [Thread-2973] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:53:07.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:53:07.466 [DEBUG] [Thread-2973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:53:07.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:53:07.521 [DEBUG] [Thread-2973] [transport.py] [_log()] userauth is OK
2025-12-25T01:53:07.521 [DEBUG] [Thread-2973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:53:07.521 [DEBUG] [Thread-2973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:53:07.522 [DEBUG] [Thread-2973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:53:07.522 [DEBUG] [Thread-2973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:53:07.541 [INFO] [Thread-2973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:53:07.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:53:07.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:53:08.371 [DEBUG] [Thread-2973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:53:08.371 [DEBUG] [Thread-2973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:53:08.422 [DEBUG] [Thread-2973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:53:08.422 [DEBUG] [Thread-2973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:53:08.430 [DEBUG] [Thread-2973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:53:08.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:53:08.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:53:08.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:53:08.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:53:08.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:53:08.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:53:08.462 [DEBUG] [Thread-2973] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:53:22.379 [DEBUG] [Thread-2975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:53:25.880 [DEBUG] [Thread-2976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:53:35.203 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:53:35.204 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:53:37.411 [DEBUG] [Thread-2977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:53:38.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:53:38.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:53:38.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:53:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 53, 34), 0.51, 96.52, 0.0, 23.96, 11.82, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:53:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:53:34
2025-12-25T01:53:39.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:53:39.456 [DEBUG] [Thread-2978] [transport.py] [_log()] starting thread (client mode): 0xb6b158a0
2025-12-25T01:53:39.457 [DEBUG] [Thread-2978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:53:39.477 [DEBUG] [Thread-2978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:53:39.477 [INFO] [Thread-2978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:53:39.480 [DEBUG] [Thread-2978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:53:39.480 [DEBUG] [Thread-2978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:53:39.480 [DEBUG] [Thread-2978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:53:39.480 [DEBUG] [Thread-2978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:53:39.480 [DEBUG] [Thread-2978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:53:39.480 [DEBUG] [Thread-2978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] client lang: <none>
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] server lang: <none>
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] kex follows: False
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:53:39.481 [DEBUG] [Thread-2978] [transport.py] [_log()] Compression: none
2025-12-25T01:53:39.482 [DEBUG] [Thread-2978] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:53:39.499 [DEBUG] [Thread-2978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:53:39.500 [DEBUG] [Thread-2978] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:53:39.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:53:39.501 [DEBUG] [Thread-2978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:53:39.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:53:39.503 [DEBUG] [Thread-2978] [transport.py] [_log()] userauth is OK
2025-12-25T01:53:39.503 [DEBUG] [Thread-2978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:53:39.503 [DEBUG] [Thread-2978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:53:39.503 [DEBUG] [Thread-2978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:53:39.503 [DEBUG] [Thread-2978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:53:39.539 [INFO] [Thread-2978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:53:39.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:53:40.173 [DEBUG] [Thread-2978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:53:40.173 [DEBUG] [Thread-2978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:53:40.174 [DEBUG] [Thread-2978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:53:40.214 [DEBUG] [Thread-2978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:53:40.214 [DEBUG] [Thread-2978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:53:40.218 [DEBUG] [Thread-2978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:53:40.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:53:40.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:53:40.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:53:40.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:53:40.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:53:40.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:53:40.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:53:40.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:53:40.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:53:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.995197 -999.00  +11.70  13.96     94  +10.80 1 3 1 3 1     0    0 0.74 -9.67 ----- 26.5 14.0 143.8 29.4 13.6 -4.6 13.4 -4.7 13.2 -5.2 13.6 -2.8
2025-12-25T01:53:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:53:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:53:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.995197
2025-12-25T01:53:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:53:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:53:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:53:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:53:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:53:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:53:34', tmtdew=0.51, humidity=96.52, cloud=0.0, wind=23.96, temperature=11.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:53:05.021', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:53:40.247 [DEBUG] [Thread-2978] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:53:40.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:53:40.340 [DEBUG] [Thread-2981] [transport.py] [_log()] starting thread (client mode): 0xb95f3d00
2025-12-25T01:53:40.340 [DEBUG] [Thread-2981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:53:40.354 [DEBUG] [Thread-2981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:53:40.354 [INFO] [Thread-2981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] client lang: <none>
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] server lang: <none>
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] kex follows: False
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:53:40.362 [DEBUG] [Thread-2981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:53:40.363 [DEBUG] [Thread-2981] [transport.py] [_log()] Compression: none
2025-12-25T01:53:40.363 [DEBUG] [Thread-2981] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:53:40.420 [DEBUG] [Thread-2981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:53:40.420 [DEBUG] [Thread-2981] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:53:40.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:53:40.421 [DEBUG] [Thread-2981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:53:40.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:53:40.476 [DEBUG] [Thread-2981] [transport.py] [_log()] userauth is OK
2025-12-25T01:53:40.477 [DEBUG] [Thread-2981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:53:40.477 [DEBUG] [Thread-2981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:53:40.477 [DEBUG] [Thread-2981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:53:40.477 [DEBUG] [Thread-2981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:53:40.496 [INFO] [Thread-2981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:53:40.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:53:40.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:53:41.318 [DEBUG] [Thread-2981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:53:41.318 [DEBUG] [Thread-2981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:53:41.366 [DEBUG] [Thread-2981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:53:41.366 [DEBUG] [Thread-2981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:53:41.374 [DEBUG] [Thread-2981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:53:41.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:53: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')
2025-12-25T01:53:41.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:53:41.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:53:41.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:53:41.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:53:41.410 [DEBUG] [Thread-2981] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:53:52.441 [DEBUG] [Thread-2983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:54:07.490 [DEBUG] [Thread-2984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:54:11.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:54:11.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:54:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:54:12.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 54, 6), 0.5, 96.55, 0.0, 24.08, 11.78, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:54:12.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:54:06
2025-12-25T01:54:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:54:12.424 [DEBUG] [Thread-2985] [transport.py] [_log()] starting thread (client mode): 0xb95f1de0
2025-12-25T01:54:12.424 [DEBUG] [Thread-2985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:54:12.439 [DEBUG] [Thread-2985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:54:12.439 [INFO] [Thread-2985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:54:12.442 [DEBUG] [Thread-2985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:54:12.442 [DEBUG] [Thread-2985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:54:12.442 [DEBUG] [Thread-2985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:54:12.442 [DEBUG] [Thread-2985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:54:12.442 [DEBUG] [Thread-2985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:54:12.442 [DEBUG] [Thread-2985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:54:12.442 [DEBUG] [Thread-2985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:54:12.442 [DEBUG] [Thread-2985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] client lang: <none>
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] server lang: <none>
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] kex follows: False
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] Compression: none
2025-12-25T01:54:12.443 [DEBUG] [Thread-2985] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:54:12.455 [DEBUG] [Thread-2985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:54:12.455 [DEBUG] [Thread-2985] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:54:12.455 [DEBUG] [Thread-2985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:54:12.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:54:12.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:54:12.496 [DEBUG] [Thread-2985] [transport.py] [_log()] userauth is OK
2025-12-25T01:54:12.496 [DEBUG] [Thread-2985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:54:12.496 [DEBUG] [Thread-2985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:54:12.496 [DEBUG] [Thread-2985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:54:12.496 [DEBUG] [Thread-2985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:54:12.527 [INFO] [Thread-2985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:54:12.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:54:13.130 [DEBUG] [Thread-2985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:54:13.130 [DEBUG] [Thread-2985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:54:13.130 [DEBUG] [Thread-2985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:54:13.172 [DEBUG] [Thread-2985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:54:13.172 [DEBUG] [Thread-2985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:54:13.174 [DEBUG] [Thread-2985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:54:13.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:54:13.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:54:13.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:54:13.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:54:13.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:54:13.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:54:13.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.995544 -999.00  +11.70  16.61     94  +10.80 1 3 1 3 1     0    0 0.70 -10.05 ----- 17.9 16.6 156.2 28.1 13.6 -3.7 13.4 -3.6 13.2 -4.3 13.6 -3.7
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.995544
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:54:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:54:06', tmtdew=0.5, humidity=96.55, cloud=0.0, wind=24.08, temperature=11.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:53:35.002', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:54:13.193 [DEBUG] [Thread-2985] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:54:13.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:54:13.275 [DEBUG] [Thread-2988] [transport.py] [_log()] starting thread (client mode): 0xb9546050
2025-12-25T01:54:13.275 [DEBUG] [Thread-2988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:54:13.290 [DEBUG] [Thread-2988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:54:13.290 [INFO] [Thread-2988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] client lang: <none>
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] server lang: <none>
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] kex follows: False
2025-12-25T01:54:13.297 [DEBUG] [Thread-2988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:54:13.298 [DEBUG] [Thread-2988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:54:13.298 [DEBUG] [Thread-2988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:54:13.298 [DEBUG] [Thread-2988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:54:13.298 [DEBUG] [Thread-2988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:54:13.298 [DEBUG] [Thread-2988] [transport.py] [_log()] Compression: none
2025-12-25T01:54:13.298 [DEBUG] [Thread-2988] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:54:13.354 [DEBUG] [Thread-2988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:54:13.355 [DEBUG] [Thread-2988] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:54:13.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:54:13.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:54:13.355 [DEBUG] [Thread-2988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:54:13.412 [DEBUG] [Thread-2988] [transport.py] [_log()] userauth is OK
2025-12-25T01:54:13.412 [DEBUG] [Thread-2988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:54:13.412 [DEBUG] [Thread-2988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:54:13.412 [DEBUG] [Thread-2988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:54:13.412 [DEBUG] [Thread-2988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:54:13.429 [INFO] [Thread-2988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:54:13.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:54:13.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:54:14.248 [DEBUG] [Thread-2988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:54:14.248 [DEBUG] [Thread-2988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:54:14.296 [DEBUG] [Thread-2988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:54:14.296 [DEBUG] [Thread-2988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:54:14.305 [DEBUG] [Thread-2988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:54:14.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:54:14.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:54:14.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:54:14.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:54:14.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:54:14.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:54:14.340 [DEBUG] [Thread-2988] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:54:22.521 [DEBUG] [Thread-2990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:54:25.952 [DEBUG] [Thread-2991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:54:35.404 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:54:35.405 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:54:37.570 [DEBUG] [Thread-2992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:54:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:54:44.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:54:44.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:54:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 54, 38), 0.51, 96.53, 0.0, 23.98, 11.77, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:54:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:54:38
2025-12-25T01:54:45.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:54:45.327 [DEBUG] [Thread-2993] [transport.py] [_log()] starting thread (client mode): 0xb6b17f10
2025-12-25T01:54:45.327 [DEBUG] [Thread-2993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:54:45.350 [DEBUG] [Thread-2993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:54:45.350 [INFO] [Thread-2993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:54:45.353 [DEBUG] [Thread-2993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] client lang: <none>
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] server lang: <none>
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] kex follows: False
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] Compression: none
2025-12-25T01:54:45.354 [DEBUG] [Thread-2993] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:54:45.372 [DEBUG] [Thread-2993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:54:45.373 [DEBUG] [Thread-2993] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:54:45.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:54:45.374 [DEBUG] [Thread-2993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:54:45.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:54:45.376 [DEBUG] [Thread-2993] [transport.py] [_log()] userauth is OK
2025-12-25T01:54:45.376 [DEBUG] [Thread-2993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:54:45.376 [DEBUG] [Thread-2993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:54:45.377 [DEBUG] [Thread-2993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:54:45.377 [DEBUG] [Thread-2993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:54:45.412 [INFO] [Thread-2993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:54:45.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:54:46.055 [DEBUG] [Thread-2993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:54:46.056 [DEBUG] [Thread-2993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:54:46.056 [DEBUG] [Thread-2993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:54:46.096 [DEBUG] [Thread-2993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:54:46.096 [DEBUG] [Thread-2993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:54:46.099 [DEBUG] [Thread-2993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:54:46.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:54:46.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:54:46.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:54:46.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:54:46.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:54:46.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:54:46.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:54:46.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:54:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:54:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.995892 -999.00  +11.70  19.48     94  +10.80 1 3 1 3 1     0    0 0.69 -10.86 ----- 19.1 19.5 142.4 27.3 13.5 -3.7 13.4 -3.8 13.2 -4.0 13.5 -3.5
2025-12-25T01:54:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:54:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:54:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.995892
2025-12-25T01:54:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:54:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:54:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:54:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:54:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:54:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:54:38', tmtdew=0.51, humidity=96.53, cloud=0.0, wind=23.98, temperature=11.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:54:05.069', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:54:46.128 [DEBUG] [Thread-2993] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:54:46.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:54:46.223 [DEBUG] [Thread-2996] [transport.py] [_log()] starting thread (client mode): 0xb9544eb0
2025-12-25T01:54:46.223 [DEBUG] [Thread-2996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:54:46.238 [DEBUG] [Thread-2996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:54:46.238 [INFO] [Thread-2996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:54:46.245 [DEBUG] [Thread-2996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:54:46.245 [DEBUG] [Thread-2996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:54:46.245 [DEBUG] [Thread-2996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:54:46.245 [DEBUG] [Thread-2996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] client lang: <none>
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] server lang: <none>
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] kex follows: False
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] Compression: none
2025-12-25T01:54:46.246 [DEBUG] [Thread-2996] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:54:46.305 [DEBUG] [Thread-2996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:54:46.305 [DEBUG] [Thread-2996] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:54:46.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:54:46.307 [DEBUG] [Thread-2996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:54:46.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:54:46.361 [DEBUG] [Thread-2996] [transport.py] [_log()] userauth is OK
2025-12-25T01:54:46.361 [DEBUG] [Thread-2996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:54:46.361 [DEBUG] [Thread-2996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:54:46.361 [DEBUG] [Thread-2996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:54:46.361 [DEBUG] [Thread-2996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:54:46.380 [INFO] [Thread-2996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:54:46.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:54:46.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:54:47.245 [DEBUG] [Thread-2996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:54:47.245 [DEBUG] [Thread-2996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:54:47.293 [DEBUG] [Thread-2996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:54:47.294 [DEBUG] [Thread-2996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:54:47.302 [DEBUG] [Thread-2996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:54:47.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:54:47.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:54:47.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:54:47.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:54:47.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:54:47.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:54:47.333 [DEBUG] [Thread-2996] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:54:52.602 [DEBUG] [Thread-2998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:55:07.640 [DEBUG] [Thread-2999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:55:17.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:55:17.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:55:17.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:55:18.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 55, 10), 0.51, 96.52, 0.0, 22.06, 11.74, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:55:18.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:55:10
2025-12-25T01:55:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:55:18.339 [DEBUG] [Thread-3000] [transport.py] [_log()] starting thread (client mode): 0xb6b14cd0
2025-12-25T01:55:18.339 [DEBUG] [Thread-3000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:55:18.359 [DEBUG] [Thread-3000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:55:18.359 [INFO] [Thread-3000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:55:18.362 [DEBUG] [Thread-3000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:55:18.362 [DEBUG] [Thread-3000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:55:18.362 [DEBUG] [Thread-3000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:55:18.362 [DEBUG] [Thread-3000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:55:18.362 [DEBUG] [Thread-3000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:55:18.362 [DEBUG] [Thread-3000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] client lang: <none>
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] server lang: <none>
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] kex follows: False
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] Compression: none
2025-12-25T01:55:18.363 [DEBUG] [Thread-3000] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:55:18.381 [DEBUG] [Thread-3000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:55:18.381 [DEBUG] [Thread-3000] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:55:18.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:55:18.383 [DEBUG] [Thread-3000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:55:18.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:55:18.385 [DEBUG] [Thread-3000] [transport.py] [_log()] userauth is OK
2025-12-25T01:55:18.385 [DEBUG] [Thread-3000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:55:18.385 [DEBUG] [Thread-3000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:55:18.385 [DEBUG] [Thread-3000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:55:18.386 [DEBUG] [Thread-3000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:55:18.405 [INFO] [Thread-3000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:55:18.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:55:18.996 [DEBUG] [Thread-3000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:55:18.997 [DEBUG] [Thread-3000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:55:18.997 [DEBUG] [Thread-3000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:55:19.038 [DEBUG] [Thread-3000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:55:19.038 [DEBUG] [Thread-3000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:55:19.042 [DEBUG] [Thread-3000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:55:19.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:55:19.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:55:19.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:55:19.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:55:19.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:55:19.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:55:19.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:55:19.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:55:19.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:55:19.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.996597 -999.00  +11.80  19.30     94  +10.80 1 3 1 3 1     0    0 0.72 -9.93 ----- 22.4 19.3 142.0 22.3 13.6 -5.0 13.4 -4.6 13.2 -5.3 13.6 -2.4
2025-12-25T01:55:19.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:55:19.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:55:19.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.996597
2025-12-25T01:55:19.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:55:19.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:55:19.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:55:19.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:55:19.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:55:19.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:55:10', tmtdew=0.51, humidity=96.52, cloud=0.0, wind=22.06, temperature=11.74, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:55:05.981', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:55:19.062 [DEBUG] [Thread-3000] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:55:19.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:55:19.159 [DEBUG] [Thread-3003] [transport.py] [_log()] starting thread (client mode): 0xb6b174c0
2025-12-25T01:55:19.159 [DEBUG] [Thread-3003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:55:19.174 [DEBUG] [Thread-3003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:55:19.174 [INFO] [Thread-3003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] client lang: <none>
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] server lang: <none>
2025-12-25T01:55:19.182 [DEBUG] [Thread-3003] [transport.py] [_log()] kex follows: False
2025-12-25T01:55:19.183 [DEBUG] [Thread-3003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:55:19.183 [DEBUG] [Thread-3003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:55:19.183 [DEBUG] [Thread-3003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:55:19.183 [DEBUG] [Thread-3003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:55:19.183 [DEBUG] [Thread-3003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:55:19.183 [DEBUG] [Thread-3003] [transport.py] [_log()] Compression: none
2025-12-25T01:55:19.183 [DEBUG] [Thread-3003] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:55:19.241 [DEBUG] [Thread-3003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:55:19.241 [DEBUG] [Thread-3003] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:55:19.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:55:19.242 [DEBUG] [Thread-3003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:55:19.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:55:19.297 [DEBUG] [Thread-3003] [transport.py] [_log()] userauth is OK
2025-12-25T01:55:19.297 [DEBUG] [Thread-3003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:55:19.297 [DEBUG] [Thread-3003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:55:19.297 [DEBUG] [Thread-3003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:55:19.297 [DEBUG] [Thread-3003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:55:19.317 [INFO] [Thread-3003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:55:19.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:55:19.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:55:20.202 [DEBUG] [Thread-3003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:55:20.202 [DEBUG] [Thread-3003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:55:20.249 [DEBUG] [Thread-3003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:55:20.250 [DEBUG] [Thread-3003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:55:20.258 [DEBUG] [Thread-3003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:55:20.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:55:20.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:55:20.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:55:20.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:55:20.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:55:20.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:55:20.292 [DEBUG] [Thread-3003] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:55:22.675 [DEBUG] [Thread-3005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:55:26.030 [DEBUG] [Thread-3006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:55:35.608 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:55:35.609 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:55:37.728 [DEBUG] [Thread-3007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:55:50.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:55:50.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:55:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:55:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 55, 42), 0.49, 96.62, 0.0, 25.02, 11.79, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:55:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:55:42
2025-12-25T01:55:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:55:51.308 [DEBUG] [Thread-3008] [transport.py] [_log()] starting thread (client mode): 0xb6b17b20
2025-12-25T01:55:51.309 [DEBUG] [Thread-3008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:55:51.330 [DEBUG] [Thread-3008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:55:51.330 [INFO] [Thread-3008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:55:51.333 [DEBUG] [Thread-3008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:55:51.333 [DEBUG] [Thread-3008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:55:51.333 [DEBUG] [Thread-3008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] client lang: <none>
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] server lang: <none>
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] kex follows: False
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:55:51.334 [DEBUG] [Thread-3008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:55:51.335 [DEBUG] [Thread-3008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:55:51.335 [DEBUG] [Thread-3008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:55:51.335 [DEBUG] [Thread-3008] [transport.py] [_log()] Compression: none
2025-12-25T01:55:51.335 [DEBUG] [Thread-3008] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:55:51.353 [DEBUG] [Thread-3008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:55:51.354 [DEBUG] [Thread-3008] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:55:51.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:55:51.355 [DEBUG] [Thread-3008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:55:51.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:55:51.358 [DEBUG] [Thread-3008] [transport.py] [_log()] userauth is OK
2025-12-25T01:55:51.358 [DEBUG] [Thread-3008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:55:51.358 [DEBUG] [Thread-3008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:55:51.359 [DEBUG] [Thread-3008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:55:51.359 [DEBUG] [Thread-3008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:55:51.381 [INFO] [Thread-3008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:55:51.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:55:52.016 [DEBUG] [Thread-3008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:55:52.016 [DEBUG] [Thread-3008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:55:52.017 [DEBUG] [Thread-3008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:55:52.058 [DEBUG] [Thread-3008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:55:52.058 [DEBUG] [Thread-3008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:55:52.061 [DEBUG] [Thread-3008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:55:52.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:55:52.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:55:52.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:55:52.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:55:52.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:55:52.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:55:52.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:55:52.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:55:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:55:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.996933 -999.00  +11.70  23.21     93  +10.70 1 3 1 3 1     0    0 0.70 -9.77 ----- 20.7 23.2 140.4 27.9 13.6 -4.2 13.4 -4.0 13.2 -4.1 13.5 -6.2
2025-12-25T01:55:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:55:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:55:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.996933
2025-12-25T01:55:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:55:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:55:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:55:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:55:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:55:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:55:42', tmtdew=0.49, humidity=96.62, cloud=0.0, wind=25.02, temperature=11.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:55:35.011', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:55:52.088 [DEBUG] [Thread-3008] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:55:52.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:55:52.181 [DEBUG] [Thread-3011] [transport.py] [_log()] starting thread (client mode): 0xb6b14a00
2025-12-25T01:55:52.181 [DEBUG] [Thread-3011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:55:52.195 [DEBUG] [Thread-3011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:55:52.195 [INFO] [Thread-3011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] client lang: <none>
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] server lang: <none>
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] kex follows: False
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:55:52.203 [DEBUG] [Thread-3011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:55:52.204 [DEBUG] [Thread-3011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:55:52.204 [DEBUG] [Thread-3011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:55:52.204 [DEBUG] [Thread-3011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:55:52.204 [DEBUG] [Thread-3011] [transport.py] [_log()] Compression: none
2025-12-25T01:55:52.204 [DEBUG] [Thread-3011] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:55:52.264 [DEBUG] [Thread-3011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:55:52.265 [DEBUG] [Thread-3011] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:55:52.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:55:52.266 [DEBUG] [Thread-3011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:55:52.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:55:52.320 [DEBUG] [Thread-3011] [transport.py] [_log()] userauth is OK
2025-12-25T01:55:52.320 [DEBUG] [Thread-3011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:55:52.321 [DEBUG] [Thread-3011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:55:52.321 [DEBUG] [Thread-3011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:55:52.321 [DEBUG] [Thread-3011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:55:52.339 [INFO] [Thread-3011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:55:52.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:55:52.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:55:52.766 [DEBUG] [Thread-3013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:55:53.160 [DEBUG] [Thread-3011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:55:53.160 [DEBUG] [Thread-3011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:55:53.208 [DEBUG] [Thread-3011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:55:53.208 [DEBUG] [Thread-3011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:55:53.218 [DEBUG] [Thread-3011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:55:53.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:55:53.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:55:53.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:55:53.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:55:53.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:55:53.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:55:53.256 [DEBUG] [Thread-3011] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:56:07.820 [DEBUG] [Thread-3014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:56:22.850 [DEBUG] [Thread-3015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:56:23.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:56:23.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:56:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:56:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 56, 14), 0.49, 96.63, 0.0, 26.03, 11.82, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:56:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:56:14
2025-12-25T01:56:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:56:24.250 [DEBUG] [Thread-3016] [transport.py] [_log()] starting thread (client mode): 0xb6b14b80
2025-12-25T01:56:24.250 [DEBUG] [Thread-3016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:56:24.270 [DEBUG] [Thread-3016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:56:24.270 [INFO] [Thread-3016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] client lang: <none>
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] server lang: <none>
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] kex follows: False
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] Compression: none
2025-12-25T01:56:24.273 [DEBUG] [Thread-3016] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:56:24.290 [DEBUG] [Thread-3016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:56:24.290 [DEBUG] [Thread-3016] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:56:24.291 [DEBUG] [Thread-3016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:56:24.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:56:24.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:56:24.292 [DEBUG] [Thread-3016] [transport.py] [_log()] userauth is OK
2025-12-25T01:56:24.293 [DEBUG] [Thread-3016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:56:24.293 [DEBUG] [Thread-3016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:56:24.293 [DEBUG] [Thread-3016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:56:24.293 [DEBUG] [Thread-3016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:56:24.307 [INFO] [Thread-3016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:56:24.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:56:24.967 [DEBUG] [Thread-3016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:56:24.968 [DEBUG] [Thread-3016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:56:24.968 [DEBUG] [Thread-3016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:56:25.009 [DEBUG] [Thread-3016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:56:25.010 [DEBUG] [Thread-3016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:56:25.013 [DEBUG] [Thread-3016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:56:25.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:56:25.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:56:25.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:56:25.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:56:25.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:56:25.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:56:25.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:56:25.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:56:25.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:56:25.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.997280 -999.00  +11.60  22.75     93  +10.70 1 3 1 3 1     0    0 0.69 -9.74 ----- 16.9 22.8 142.6 27.9 13.5 -3.1 13.4 -3.0 13.3 -3.2 13.6 -4.2
2025-12-25T01:56:25.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:56:25.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:56:25.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.997280
2025-12-25T01:56:25.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:56:25.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:56:25.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:56:25.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:56:25.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:56:25.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:56:14', tmtdew=0.49, humidity=96.63, cloud=0.0, wind=26.03, temperature=11.82, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:56:04.992', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:56:25.040 [DEBUG] [Thread-3016] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:56:25.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:56:25.137 [DEBUG] [Thread-3019] [transport.py] [_log()] starting thread (client mode): 0xb957a8f0
2025-12-25T01:56:25.137 [DEBUG] [Thread-3019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:56:25.152 [DEBUG] [Thread-3019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:56:25.152 [INFO] [Thread-3019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:56:25.160 [DEBUG] [Thread-3019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:56:25.160 [DEBUG] [Thread-3019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:56:25.161 [DEBUG] [Thread-3019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:56:25.161 [DEBUG] [Thread-3019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:56:25.161 [DEBUG] [Thread-3019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:56:25.161 [DEBUG] [Thread-3019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:56:25.161 [DEBUG] [Thread-3019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:56:25.161 [DEBUG] [Thread-3019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:56:25.161 [DEBUG] [Thread-3019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:56:25.161 [DEBUG] [Thread-3019] [transport.py] [_log()] client lang: <none>
2025-12-25T01:56:25.162 [DEBUG] [Thread-3019] [transport.py] [_log()] server lang: <none>
2025-12-25T01:56:25.162 [DEBUG] [Thread-3019] [transport.py] [_log()] kex follows: False
2025-12-25T01:56:25.162 [DEBUG] [Thread-3019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:56:25.162 [DEBUG] [Thread-3019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:56:25.162 [DEBUG] [Thread-3019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:56:25.162 [DEBUG] [Thread-3019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:56:25.162 [DEBUG] [Thread-3019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:56:25.163 [DEBUG] [Thread-3019] [transport.py] [_log()] Compression: none
2025-12-25T01:56:25.163 [DEBUG] [Thread-3019] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:56:25.224 [DEBUG] [Thread-3019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:56:25.224 [DEBUG] [Thread-3019] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:56:25.225 [DEBUG] [Thread-3019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:56:25.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:56:25.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:56:25.281 [DEBUG] [Thread-3019] [transport.py] [_log()] userauth is OK
2025-12-25T01:56:25.281 [DEBUG] [Thread-3019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:56:25.281 [DEBUG] [Thread-3019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:56:25.281 [DEBUG] [Thread-3019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:56:25.281 [DEBUG] [Thread-3019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:56:25.301 [INFO] [Thread-3019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:56:25.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:56:25.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:56:26.108 [DEBUG] [Thread-3021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:56:26.151 [DEBUG] [Thread-3019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:56:26.151 [DEBUG] [Thread-3019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:56:26.199 [DEBUG] [Thread-3019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:56:26.199 [DEBUG] [Thread-3019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:56:26.208 [DEBUG] [Thread-3019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:56:26.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:56:26.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:56:26.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:56:26.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:56:26.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:56:26.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:56:26.250 [DEBUG] [Thread-3019] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:56:35.810 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:56:35.812 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:56:37.881 [DEBUG] [Thread-3022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:56:52.929 [DEBUG] [Thread-3023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:56:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:56:56.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:56:56.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:56:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 56, 46), 0.49, 96.62, 0.0, 26.43, 11.7, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:56:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:56:46
2025-12-25T01:56:57.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:56:57.232 [DEBUG] [Thread-3024] [transport.py] [_log()] starting thread (client mode): 0xb6b17d30
2025-12-25T01:56:57.232 [DEBUG] [Thread-3024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:56:57.252 [DEBUG] [Thread-3024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:56:57.252 [INFO] [Thread-3024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] client lang: <none>
2025-12-25T01:56:57.255 [DEBUG] [Thread-3024] [transport.py] [_log()] server lang: <none>
2025-12-25T01:56:57.256 [DEBUG] [Thread-3024] [transport.py] [_log()] kex follows: False
2025-12-25T01:56:57.256 [DEBUG] [Thread-3024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:56:57.256 [DEBUG] [Thread-3024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:56:57.256 [DEBUG] [Thread-3024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:56:57.256 [DEBUG] [Thread-3024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:56:57.256 [DEBUG] [Thread-3024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:56:57.256 [DEBUG] [Thread-3024] [transport.py] [_log()] Compression: none
2025-12-25T01:56:57.256 [DEBUG] [Thread-3024] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:56:57.275 [DEBUG] [Thread-3024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:56:57.275 [DEBUG] [Thread-3024] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:56:57.276 [DEBUG] [Thread-3024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:56:57.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:56:57.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:56:57.279 [DEBUG] [Thread-3024] [transport.py] [_log()] userauth is OK
2025-12-25T01:56:57.279 [DEBUG] [Thread-3024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:56:57.279 [DEBUG] [Thread-3024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:56:57.279 [DEBUG] [Thread-3024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:56:57.279 [DEBUG] [Thread-3024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:56:57.303 [INFO] [Thread-3024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:56:57.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:56:57.892 [DEBUG] [Thread-3024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:56:57.893 [DEBUG] [Thread-3024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:56:57.893 [DEBUG] [Thread-3024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:56:57.933 [DEBUG] [Thread-3024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:56:57.933 [DEBUG] [Thread-3024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:56:57.937 [DEBUG] [Thread-3024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:56:57.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:56:57.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:56:57.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:56:57.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:56:57.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:56:57.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:56:57.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:56:57.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:56:57.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:56:57.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.997627 -999.00  +11.60  23.29     94  +10.70 1 3 1 3 1     0    0 0.73 -9.51 ----- 19.6 23.3 142.2 26.7 13.6 -4.1 13.4 -3.8 13.2 -4.2 13.5 -3.1
2025-12-25T01:56:57.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:56:57.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:56:57.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.997627
2025-12-25T01:56:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:56:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:56:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:56:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:56:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:56:57.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:56:46', tmtdew=0.49, humidity=96.62, cloud=0.0, wind=26.43, temperature=11.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:56:34.973', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:56:57.963 [DEBUG] [Thread-3024] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:56:58.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:56:58.058 [DEBUG] [Thread-3027] [transport.py] [_log()] starting thread (client mode): 0xb6b15900
2025-12-25T01:56:58.058 [DEBUG] [Thread-3027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:56:58.074 [DEBUG] [Thread-3027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:56:58.074 [INFO] [Thread-3027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:56:58.081 [DEBUG] [Thread-3027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:56:58.081 [DEBUG] [Thread-3027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:56:58.081 [DEBUG] [Thread-3027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] client lang: <none>
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] server lang: <none>
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] kex follows: False
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:56:58.082 [DEBUG] [Thread-3027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:56:58.083 [DEBUG] [Thread-3027] [transport.py] [_log()] Compression: none
2025-12-25T01:56:58.083 [DEBUG] [Thread-3027] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:56:58.139 [DEBUG] [Thread-3027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:56:58.140 [DEBUG] [Thread-3027] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:56:58.140 [DEBUG] [Thread-3027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:56:58.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:56:58.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:56:58.196 [DEBUG] [Thread-3027] [transport.py] [_log()] userauth is OK
2025-12-25T01:56:58.196 [DEBUG] [Thread-3027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:56:58.196 [DEBUG] [Thread-3027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:56:58.196 [DEBUG] [Thread-3027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:56:58.196 [DEBUG] [Thread-3027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:56:58.218 [INFO] [Thread-3027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:56:58.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:56:58.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:56:59.049 [DEBUG] [Thread-3027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:56:59.050 [DEBUG] [Thread-3027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:56:59.098 [DEBUG] [Thread-3027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:56:59.098 [DEBUG] [Thread-3027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:56:59.108 [DEBUG] [Thread-3027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:56:59.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:56:59.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:56:59.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:56:59.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:56:59.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:56:59.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:56:59.149 [DEBUG] [Thread-3027] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:57:07.962 [DEBUG] [Thread-3029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:57:23.015 [DEBUG] [Thread-3030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:57:26.177 [DEBUG] [Thread-3031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:57:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:57:29.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:57:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:57:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 57, 19), 0.49, 96.62, 0.0, 27.93, 11.72, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:57:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:57:19
2025-12-25T01:57:30.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:57:30.161 [DEBUG] [Thread-3032] [transport.py] [_log()] starting thread (client mode): 0xb95f32b0
2025-12-25T01:57:30.161 [DEBUG] [Thread-3032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:57:30.180 [DEBUG] [Thread-3032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:57:30.180 [INFO] [Thread-3032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] client lang: <none>
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] server lang: <none>
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] kex follows: False
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] Compression: none
2025-12-25T01:57:30.183 [DEBUG] [Thread-3032] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:57:30.199 [DEBUG] [Thread-3032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:57:30.199 [DEBUG] [Thread-3032] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:57:30.199 [DEBUG] [Thread-3032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:57:30.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:57:30.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:57:30.200 [DEBUG] [Thread-3032] [transport.py] [_log()] userauth is OK
2025-12-25T01:57:30.200 [DEBUG] [Thread-3032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:57:30.200 [DEBUG] [Thread-3032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:57:30.200 [DEBUG] [Thread-3032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:57:30.200 [DEBUG] [Thread-3032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:57:30.219 [INFO] [Thread-3032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:57:30.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:57:30.820 [DEBUG] [Thread-3032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:57:30.820 [DEBUG] [Thread-3032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:57:30.820 [DEBUG] [Thread-3032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:57:30.863 [DEBUG] [Thread-3032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:57:30.863 [DEBUG] [Thread-3032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:57:30.865 [DEBUG] [Thread-3032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:57:30.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:57:30.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:57:30.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:57:30.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:57:30.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:57:30.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:57:30.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:57:30.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:57:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.997975 -999.00  +11.70  14.40     94  +10.80 1 3 1 3 1     0    0 0.72 -9.17 ----- 14.0 14.4 139.6 24.1 13.5 -3.5 13.4 -3.1 13.2 -3.5 13.6 -3.3
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.997975
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:57:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:57:19', tmtdew=0.49, humidity=96.62, cloud=0.0, wind=27.93, temperature=11.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:57:05.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:57:30.883 [DEBUG] [Thread-3032] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:57:30.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:57:30.968 [DEBUG] [Thread-3035] [transport.py] [_log()] starting thread (client mode): 0xb95d69b0
2025-12-25T01:57:30.968 [DEBUG] [Thread-3035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:57:30.984 [DEBUG] [Thread-3035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:57:30.984 [INFO] [Thread-3035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] client lang: <none>
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] server lang: <none>
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] kex follows: False
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] Compression: none
2025-12-25T01:57:30.992 [DEBUG] [Thread-3035] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:57:31.054 [DEBUG] [Thread-3035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:57:31.055 [DEBUG] [Thread-3035] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:57:31.055 [DEBUG] [Thread-3035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:57:31.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:57:31.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:57:31.117 [DEBUG] [Thread-3035] [transport.py] [_log()] userauth is OK
2025-12-25T01:57:31.117 [DEBUG] [Thread-3035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:57:31.117 [DEBUG] [Thread-3035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:57:31.117 [DEBUG] [Thread-3035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:57:31.117 [DEBUG] [Thread-3035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:57:31.131 [INFO] [Thread-3035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:57:31.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:57:31.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:57:32.053 [DEBUG] [Thread-3035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:57:32.053 [DEBUG] [Thread-3035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:57:32.101 [DEBUG] [Thread-3035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:57:32.101 [DEBUG] [Thread-3035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:57:32.110 [DEBUG] [Thread-3035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:57:32.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:57:32.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:57:32.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:57:32.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:57:32.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:57:32.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:57:32.141 [DEBUG] [Thread-3035] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:57:36.014 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:57:36.015 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:57:38.047 [DEBUG] [Thread-3037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:57:53.104 [DEBUG] [Thread-3038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:58:02.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:58:02.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:58:02.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:58:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 57, 51), 0.49, 96.63, 0.0, 26.43, 11.77, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:58:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:57:51
2025-12-25T01:58:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:58:03.138 [DEBUG] [Thread-3039] [transport.py] [_log()] starting thread (client mode): 0xb95f1150
2025-12-25T01:58:03.138 [DEBUG] [Thread-3039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:58:03.149 [DEBUG] [Thread-3039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:58:03.149 [INFO] [Thread-3039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:58:03.150 [DEBUG] [Thread-3039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:58:03.150 [DEBUG] [Thread-3039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:58:03.150 [DEBUG] [Thread-3039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:58:03.150 [DEBUG] [Thread-3039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:58:03.150 [DEBUG] [Thread-3039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:58:03.150 [DEBUG] [Thread-3039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] client lang: <none>
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] server lang: <none>
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] kex follows: False
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] Compression: none
2025-12-25T01:58:03.151 [DEBUG] [Thread-3039] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:58:03.159 [DEBUG] [Thread-3039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:58:03.159 [DEBUG] [Thread-3039] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:58:03.160 [DEBUG] [Thread-3039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:58:03.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:58:03.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:58:03.161 [DEBUG] [Thread-3039] [transport.py] [_log()] userauth is OK
2025-12-25T01:58:03.161 [DEBUG] [Thread-3039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:58:03.161 [DEBUG] [Thread-3039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:58:03.161 [DEBUG] [Thread-3039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:58:03.162 [DEBUG] [Thread-3039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:58:03.175 [INFO] [Thread-3039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:58:03.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:58:03.728 [DEBUG] [Thread-3039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:58:03.728 [DEBUG] [Thread-3039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:58:03.729 [DEBUG] [Thread-3039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:58:03.769 [DEBUG] [Thread-3039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:58:03.769 [DEBUG] [Thread-3039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:58:03.773 [DEBUG] [Thread-3039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:58:03.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:58:03.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:58:03.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:58:03.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:58:03.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:58:03.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:58:03.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:58:03.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:58:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:58:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.998322 -999.00  +11.70  19.66     94  +10.80 1 3 1 3 1     0    0 0.73 -8.85 ----- 21.4 19.7 142.0 26.0 13.5 -3.9 13.4 -3.9 13.3 -4.0 13.6 -4.0
2025-12-25T01:58:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:58:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:58:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.998322
2025-12-25T01:58:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:58:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:58:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:58:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:58:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:58:03.801 [DEBUG] [Thread-3039] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:58:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:57:51', tmtdew=0.49, humidity=96.63, cloud=0.0, wind=26.43, temperature=11.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:57:35.021', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:58:03.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:58:03.895 [DEBUG] [Thread-3042] [transport.py] [_log()] starting thread (client mode): 0xb95f13c0
2025-12-25T01:58:03.895 [DEBUG] [Thread-3042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:58:03.909 [DEBUG] [Thread-3042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:58:03.909 [INFO] [Thread-3042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] client lang: <none>
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] server lang: <none>
2025-12-25T01:58:03.917 [DEBUG] [Thread-3042] [transport.py] [_log()] kex follows: False
2025-12-25T01:58:03.918 [DEBUG] [Thread-3042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:58:03.918 [DEBUG] [Thread-3042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:58:03.918 [DEBUG] [Thread-3042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:58:03.918 [DEBUG] [Thread-3042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:58:03.918 [DEBUG] [Thread-3042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:58:03.918 [DEBUG] [Thread-3042] [transport.py] [_log()] Compression: none
2025-12-25T01:58:03.918 [DEBUG] [Thread-3042] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:58:03.975 [DEBUG] [Thread-3042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:58:03.975 [DEBUG] [Thread-3042] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:58:03.975 [DEBUG] [Thread-3042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:58:03.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:58:03.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:58:04.032 [DEBUG] [Thread-3042] [transport.py] [_log()] userauth is OK
2025-12-25T01:58:04.032 [DEBUG] [Thread-3042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:58:04.032 [DEBUG] [Thread-3042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:58:04.032 [DEBUG] [Thread-3042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:58:04.032 [DEBUG] [Thread-3042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:58:04.052 [INFO] [Thread-3042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:58:04.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:58:04.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:58:04.871 [DEBUG] [Thread-3042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:58:04.871 [DEBUG] [Thread-3042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:58:04.919 [DEBUG] [Thread-3042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:58:04.919 [DEBUG] [Thread-3042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:58:04.929 [DEBUG] [Thread-3042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:58:04.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:58:04.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:58:04.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:58:04.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:58:04.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:58:04.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:58:04.965 [DEBUG] [Thread-3042] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:58:08.133 [DEBUG] [Thread-3044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:58:23.176 [DEBUG] [Thread-3045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:58:26.252 [DEBUG] [Thread-3046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:58:34.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:58:34.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:58:34.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:58:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 58, 23), 0.48, 96.68, 0.0, 26.47, 11.75, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:58:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:58:23
2025-12-25T01:58:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:58:35.925 [DEBUG] [Thread-3047] [transport.py] [_log()] starting thread (client mode): 0xb95d69b0
2025-12-25T01:58:35.925 [DEBUG] [Thread-3047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:58:35.947 [DEBUG] [Thread-3047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:58:35.947 [INFO] [Thread-3047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:58:35.950 [DEBUG] [Thread-3047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] client lang: <none>
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] server lang: <none>
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] kex follows: False
2025-12-25T01:58:35.951 [DEBUG] [Thread-3047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:58:35.952 [DEBUG] [Thread-3047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:58:35.952 [DEBUG] [Thread-3047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:58:35.952 [DEBUG] [Thread-3047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:58:35.952 [DEBUG] [Thread-3047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:58:35.952 [DEBUG] [Thread-3047] [transport.py] [_log()] Compression: none
2025-12-25T01:58:35.952 [DEBUG] [Thread-3047] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:58:35.969 [DEBUG] [Thread-3047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:58:35.970 [DEBUG] [Thread-3047] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:58:35.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:58:35.971 [DEBUG] [Thread-3047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:58:35.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:58:35.973 [DEBUG] [Thread-3047] [transport.py] [_log()] userauth is OK
2025-12-25T01:58:35.973 [DEBUG] [Thread-3047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:58:35.973 [DEBUG] [Thread-3047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:58:35.973 [DEBUG] [Thread-3047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:58:35.974 [DEBUG] [Thread-3047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:58:35.999 [INFO] [Thread-3047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:58:35.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:58:36.220 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:58:36.222 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:58:36.643 [DEBUG] [Thread-3047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:58:36.643 [DEBUG] [Thread-3047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:58:36.643 [DEBUG] [Thread-3047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:58:36.684 [DEBUG] [Thread-3047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:58:36.684 [DEBUG] [Thread-3047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:58:36.689 [DEBUG] [Thread-3047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:58:36.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:58:36.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:58:36.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:58:36.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:58:36.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:58:36.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:58:36.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:58:36.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:58:36.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:58:36.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.998669 -999.00  +11.70  16.29     94  +10.80 1 3 1 3 1     0    0 0.73 -8.74 ----- 17.5 16.3 134.4 22.5 13.6 -4.9 13.4 -5.0 13.2 -5.4 13.6 -4.2
2025-12-25T01:58:36.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:58:36.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:58:36.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.998669
2025-12-25T01:58:36.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:58:36.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:58:36.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:58:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:58:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:58:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:58:23', tmtdew=0.48, humidity=96.68, cloud=0.0, wind=26.47, temperature=11.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:58:05.002', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:58:36.716 [DEBUG] [Thread-3047] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:58:36.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:58:36.810 [DEBUG] [Thread-3050] [transport.py] [_log()] starting thread (client mode): 0xb6b16b30
2025-12-25T01:58:36.810 [DEBUG] [Thread-3050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:58:36.824 [DEBUG] [Thread-3050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:58:36.824 [INFO] [Thread-3050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] client lang: <none>
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] server lang: <none>
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] kex follows: False
2025-12-25T01:58:36.832 [DEBUG] [Thread-3050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:58:36.833 [DEBUG] [Thread-3050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:58:36.833 [DEBUG] [Thread-3050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:58:36.833 [DEBUG] [Thread-3050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:58:36.833 [DEBUG] [Thread-3050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:58:36.833 [DEBUG] [Thread-3050] [transport.py] [_log()] Compression: none
2025-12-25T01:58:36.833 [DEBUG] [Thread-3050] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:58:36.892 [DEBUG] [Thread-3050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:58:36.892 [DEBUG] [Thread-3050] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:58:36.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:58:36.894 [DEBUG] [Thread-3050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:58:36.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:58:36.948 [DEBUG] [Thread-3050] [transport.py] [_log()] userauth is OK
2025-12-25T01:58:36.949 [DEBUG] [Thread-3050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:58:36.949 [DEBUG] [Thread-3050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:58:36.949 [DEBUG] [Thread-3050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:58:36.949 [DEBUG] [Thread-3050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:58:36.968 [INFO] [Thread-3050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:58:36.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:58:36.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:58:37.851 [DEBUG] [Thread-3050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:58:37.852 [DEBUG] [Thread-3050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:58:37.899 [DEBUG] [Thread-3050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:58:37.900 [DEBUG] [Thread-3050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:58:37.908 [DEBUG] [Thread-3050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:58:37.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:58: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')
2025-12-25T01:58: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
2025-12-25T01:58:37.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:58:37.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:58:37.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:58:37.942 [DEBUG] [Thread-3050] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:58:38.212 [DEBUG] [Thread-3052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:58:53.263 [DEBUG] [Thread-3053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:59:07.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:59:07.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:59:07.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:59:08.296 [DEBUG] [Thread-3054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:59:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 58, 55), 0.49, 96.63, 0.0, 25.92, 11.72, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:59:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:58:55
2025-12-25T01:59:08.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:59:08.937 [DEBUG] [Thread-3055] [transport.py] [_log()] starting thread (client mode): 0xb6b16bf0
2025-12-25T01:59:08.937 [DEBUG] [Thread-3055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:59:08.958 [DEBUG] [Thread-3055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:59:08.958 [INFO] [Thread-3055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:59:08.962 [DEBUG] [Thread-3055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:59:08.962 [DEBUG] [Thread-3055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:59:08.962 [DEBUG] [Thread-3055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:59:08.962 [DEBUG] [Thread-3055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:59:08.962 [DEBUG] [Thread-3055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:59:08.962 [DEBUG] [Thread-3055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:59:08.962 [DEBUG] [Thread-3055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] client lang: <none>
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] server lang: <none>
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] kex follows: False
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:59:08.963 [DEBUG] [Thread-3055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:59:08.964 [DEBUG] [Thread-3055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:59:08.964 [DEBUG] [Thread-3055] [transport.py] [_log()] Compression: none
2025-12-25T01:59:08.964 [DEBUG] [Thread-3055] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:59:08.976 [DEBUG] [Thread-3055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:59:08.977 [DEBUG] [Thread-3055] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:59:08.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:59:08.978 [DEBUG] [Thread-3055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:59:08.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:59:08.980 [DEBUG] [Thread-3055] [transport.py] [_log()] userauth is OK
2025-12-25T01:59:08.980 [DEBUG] [Thread-3055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:59:08.980 [DEBUG] [Thread-3055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:59:08.980 [DEBUG] [Thread-3055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:59:08.980 [DEBUG] [Thread-3055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:59:09.004 [INFO] [Thread-3055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:59:09.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:59:09.564 [DEBUG] [Thread-3055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:59:09.565 [DEBUG] [Thread-3055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:59:09.565 [DEBUG] [Thread-3055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:59:09.606 [DEBUG] [Thread-3055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:59:09.606 [DEBUG] [Thread-3055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:59:09.609 [DEBUG] [Thread-3055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:59:09.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:59:09.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:59:09.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:59:09.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:59:09.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:59:09.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:59:09.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:59:09.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:59:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:59:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.999364 -999.00  +11.80  23.06     94  +10.80 1 3 1 3 1     0    0 0.74 -8.58 ----- 22.8 23.1 144.0 24.9 13.6 -4.1 13.4 -3.7 13.3 -3.9 13.6 -4.7
2025-12-25T01:59:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:59:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:59:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.999364
2025-12-25T01:59:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:59:09.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:59:09.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:59:09.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:59:09.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:59:09.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:58:55', tmtdew=0.49, humidity=96.63, cloud=0.0, wind=25.92, temperature=11.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:59:05.050', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:59:09.628 [DEBUG] [Thread-3055] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:59:09.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:59:09.731 [DEBUG] [Thread-3058] [transport.py] [_log()] starting thread (client mode): 0xb95b1de0
2025-12-25T01:59:09.731 [DEBUG] [Thread-3058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:59:09.746 [DEBUG] [Thread-3058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:59:09.746 [INFO] [Thread-3058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] client lang: <none>
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] server lang: <none>
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] kex follows: False
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] Compression: none
2025-12-25T01:59:09.753 [DEBUG] [Thread-3058] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:59:09.819 [DEBUG] [Thread-3058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:59:09.819 [DEBUG] [Thread-3058] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:59:09.819 [DEBUG] [Thread-3058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:59:09.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:59:09.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:59:09.876 [DEBUG] [Thread-3058] [transport.py] [_log()] userauth is OK
2025-12-25T01:59:09.876 [DEBUG] [Thread-3058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:59:09.876 [DEBUG] [Thread-3058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:59:09.876 [DEBUG] [Thread-3058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:59:09.876 [DEBUG] [Thread-3058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:59:09.891 [INFO] [Thread-3058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:59:09.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:59:09.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:59:10.690 [DEBUG] [Thread-3058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:59:10.690 [DEBUG] [Thread-3058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:59:10.738 [DEBUG] [Thread-3058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:59:10.738 [DEBUG] [Thread-3058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:59:10.747 [DEBUG] [Thread-3058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:59:10.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:59:10.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:59:10.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
2025-12-25T01:59:10.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:59:10.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:59:10.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:59:10.784 [DEBUG] [Thread-3058] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:59:23.331 [DEBUG] [Thread-3060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:59:26.305 [DEBUG] [Thread-3061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:59:36.425 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:59:36.427 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:59:38.390 [DEBUG] [Thread-3062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T01:59:40.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T01:59:40.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T01:59:40.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T01:59:41.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 59, 27), 0.49, 96.63, 0.0, 26.56, 11.7, 2, 2, 0, 2, 0, 0),)
2025-12-25T01:59:41.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:59:27
2025-12-25T01:59:41.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T01:59:41.779 [DEBUG] [Thread-3063] [transport.py] [_log()] starting thread (client mode): 0xb6b17760
2025-12-25T01:59:41.779 [DEBUG] [Thread-3063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:59:41.799 [DEBUG] [Thread-3063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T01:59:41.799 [INFO] [Thread-3063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] client lang: <none>
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] server lang: <none>
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] kex follows: False
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] Compression: none
2025-12-25T01:59:41.802 [DEBUG] [Thread-3063] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:59:41.820 [DEBUG] [Thread-3063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:59:41.820 [DEBUG] [Thread-3063] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:59:41.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T01:59:41.821 [DEBUG] [Thread-3063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T01:59:41.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:59:41.824 [DEBUG] [Thread-3063] [transport.py] [_log()] userauth is OK
2025-12-25T01:59:41.824 [DEBUG] [Thread-3063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:59:41.824 [DEBUG] [Thread-3063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:59:41.824 [DEBUG] [Thread-3063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T01:59:41.824 [DEBUG] [Thread-3063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:59:41.849 [INFO] [Thread-3063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:59:41.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:59:42.469 [DEBUG] [Thread-3063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:59:42.469 [DEBUG] [Thread-3063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:59:42.470 [DEBUG] [Thread-3063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T01:59:42.510 [DEBUG] [Thread-3063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:59:42.510 [DEBUG] [Thread-3063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:59:42.514 [DEBUG] [Thread-3063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:59:42.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:59:42.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T01:59:42.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T01:59:42.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T01:59:42.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:59:42.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T01:59:42.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:59:42.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:59:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T01:59:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.999364 -999.00  +11.80  23.06     94  +10.80 1 3 1 3 1     0    0 0.74 -8.58 ----- 22.8 23.1 144.0 24.9 13.6 -4.1 13.4 -3.7 13.3 -3.9 13.6 -4.7
2025-12-25T01:59:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T01:59:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T01:59:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.999364
2025-12-25T01:59:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T01:59:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T01:59:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T01:59:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T01:59:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T01:59:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:59:27', tmtdew=0.49, humidity=96.63, cloud=0.0, wind=26.56, temperature=11.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:59:05.050', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T01:59:42.540 [DEBUG] [Thread-3063] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:59:42.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T01:59:42.633 [DEBUG] [Thread-3066] [transport.py] [_log()] starting thread (client mode): 0xb6b152d0
2025-12-25T01:59:42.633 [DEBUG] [Thread-3066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T01:59:42.648 [DEBUG] [Thread-3066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T01:59:42.648 [INFO] [Thread-3066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T01:59:42.655 [DEBUG] [Thread-3066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T01:59:42.656 [DEBUG] [Thread-3066] [transport.py] [_log()] client lang: <none>
2025-12-25T01:59:42.657 [DEBUG] [Thread-3066] [transport.py] [_log()] server lang: <none>
2025-12-25T01:59:42.657 [DEBUG] [Thread-3066] [transport.py] [_log()] kex follows: False
2025-12-25T01:59:42.657 [DEBUG] [Thread-3066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T01:59:42.657 [DEBUG] [Thread-3066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T01:59:42.657 [DEBUG] [Thread-3066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T01:59:42.657 [DEBUG] [Thread-3066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T01:59:42.657 [DEBUG] [Thread-3066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T01:59:42.657 [DEBUG] [Thread-3066] [transport.py] [_log()] Compression: none
2025-12-25T01:59:42.658 [DEBUG] [Thread-3066] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T01:59:42.717 [DEBUG] [Thread-3066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T01:59:42.718 [DEBUG] [Thread-3066] [transport.py] [_log()] Switch to new keys ...
2025-12-25T01:59:42.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T01:59:42.719 [DEBUG] [Thread-3066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T01:59:42.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T01:59:42.776 [DEBUG] [Thread-3066] [transport.py] [_log()] userauth is OK
2025-12-25T01:59:42.777 [DEBUG] [Thread-3066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T01:59:42.777 [DEBUG] [Thread-3066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T01:59:42.777 [DEBUG] [Thread-3066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T01:59:42.777 [DEBUG] [Thread-3066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T01:59:42.795 [INFO] [Thread-3066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T01:59:42.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T01:59:42.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T01:59:43.601 [DEBUG] [Thread-3066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T01:59:43.601 [DEBUG] [Thread-3066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T01:59:43.649 [DEBUG] [Thread-3066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T01:59:43.649 [DEBUG] [Thread-3066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T01:59:43.658 [DEBUG] [Thread-3066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T01:59:43.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T01:59:43.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T01:59:43.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T01:59:43.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T01:59:43.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T01:59:43.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T01:59:43.694 [DEBUG] [Thread-3066] [transport.py] [_log()] EOF in transport thread
2025-12-25T01:59:53.429 [DEBUG] [Thread-3068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:00:08.485 [DEBUG] [Thread-3069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:00:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:00:13.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:00:13.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:00:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 1, 59, 59), 0.49, 96.63, 0.0, 25.3, 11.67, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:00:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 01:59:59
2025-12-25T02:00:14.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:00:14.673 [DEBUG] [Thread-3070] [transport.py] [_log()] starting thread (client mode): 0xb95f23b0
2025-12-25T02:00:14.674 [DEBUG] [Thread-3070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:00:14.697 [DEBUG] [Thread-3070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:00:14.697 [INFO] [Thread-3070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:00:14.700 [DEBUG] [Thread-3070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:00:14.700 [DEBUG] [Thread-3070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:00:14.700 [DEBUG] [Thread-3070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:00:14.700 [DEBUG] [Thread-3070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] client lang: <none>
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] server lang: <none>
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] kex follows: False
2025-12-25T02:00:14.701 [DEBUG] [Thread-3070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:00:14.702 [DEBUG] [Thread-3070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:00:14.702 [DEBUG] [Thread-3070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:00:14.702 [DEBUG] [Thread-3070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:00:14.702 [DEBUG] [Thread-3070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:00:14.702 [DEBUG] [Thread-3070] [transport.py] [_log()] Compression: none
2025-12-25T02:00:14.702 [DEBUG] [Thread-3070] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:00:14.722 [DEBUG] [Thread-3070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:00:14.723 [DEBUG] [Thread-3070] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:00:14.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:00:14.724 [DEBUG] [Thread-3070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:00:14.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:00:14.726 [DEBUG] [Thread-3070] [transport.py] [_log()] userauth is OK
2025-12-25T02:00:14.726 [DEBUG] [Thread-3070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:00:14.726 [DEBUG] [Thread-3070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:00:14.726 [DEBUG] [Thread-3070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:00:14.726 [DEBUG] [Thread-3070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:00:14.751 [INFO] [Thread-3070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:00:14.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:00:15.346 [DEBUG] [Thread-3070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:00:15.347 [DEBUG] [Thread-3070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:00:15.348 [DEBUG] [Thread-3070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:00:15.388 [DEBUG] [Thread-3070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:00:15.388 [DEBUG] [Thread-3070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:00:15.392 [DEBUG] [Thread-3070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:00:15.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:00:15.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:00:15.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:00:15.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:00:15.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:00:15.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:00:15.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:00:15.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:00:15.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:00:15.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61033.999722 -999.00  +11.80  24.51     94  +10.90 1 3 1 3 1     0    0 0.74 -8.78 ----- 20.5 24.5 136.4 27.4 13.6 -3.6 13.4 -3.6 13.2 -3.8 13.6 -3.5
2025-12-25T02:00:15.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:00:15.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:00:15.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61033.999722
2025-12-25T02:00:15.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:00:15.418 [DEBUG] [Thread-3070] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:00:15.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:00:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:00:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:00:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:00:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T01:59:59', tmtdew=0.49, humidity=96.63, cloud=0.0, wind=25.3, temperature=11.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-24T23:59:35.981', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:00:15.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:00:15.521 [DEBUG] [Thread-3073] [transport.py] [_log()] starting thread (client mode): 0xb6b15ae0
2025-12-25T02:00:15.521 [DEBUG] [Thread-3073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:00:15.536 [DEBUG] [Thread-3073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:00:15.536 [INFO] [Thread-3073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] client lang: <none>
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] server lang: <none>
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] kex follows: False
2025-12-25T02:00:15.543 [DEBUG] [Thread-3073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:00:15.544 [DEBUG] [Thread-3073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:00:15.544 [DEBUG] [Thread-3073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:00:15.544 [DEBUG] [Thread-3073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:00:15.544 [DEBUG] [Thread-3073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:00:15.544 [DEBUG] [Thread-3073] [transport.py] [_log()] Compression: none
2025-12-25T02:00:15.544 [DEBUG] [Thread-3073] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:00:15.600 [DEBUG] [Thread-3073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:00:15.601 [DEBUG] [Thread-3073] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:00:15.601 [DEBUG] [Thread-3073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:00:15.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:00:15.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:00:15.656 [DEBUG] [Thread-3073] [transport.py] [_log()] userauth is OK
2025-12-25T02:00:15.657 [DEBUG] [Thread-3073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:00:15.657 [DEBUG] [Thread-3073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:00:15.657 [DEBUG] [Thread-3073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:00:15.657 [DEBUG] [Thread-3073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:00:15.676 [INFO] [Thread-3073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:00:15.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:00:15.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:00:16.513 [DEBUG] [Thread-3073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:00:16.513 [DEBUG] [Thread-3073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:00:16.561 [DEBUG] [Thread-3073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:00:16.561 [DEBUG] [Thread-3073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:00:16.570 [DEBUG] [Thread-3073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:00:16.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:00:16.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')
2025-12-25T02:00:16.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:00:16.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:00:16.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:00:16.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:00:16.606 [DEBUG] [Thread-3073] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:00:23.518 [DEBUG] [Thread-3075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:00:26.393 [DEBUG] [Thread-3076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:00:36.629 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:00:36.630 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:00:38.573 [DEBUG] [Thread-3077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:00:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:00:46.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:00:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:00:47.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 0, 31), 0.48, 96.72, 0.0, 25.44, 11.72, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:00:47.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:00:31
2025-12-25T02:00:47.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:00:47.669 [DEBUG] [Thread-3078] [transport.py] [_log()] starting thread (client mode): 0xb95906a0
2025-12-25T02:00:47.669 [DEBUG] [Thread-3078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:00:47.689 [DEBUG] [Thread-3078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:00:47.689 [INFO] [Thread-3078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] client lang: <none>
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] server lang: <none>
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] kex follows: False
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:00:47.692 [DEBUG] [Thread-3078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:00:47.693 [DEBUG] [Thread-3078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:00:47.693 [DEBUG] [Thread-3078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:00:47.693 [DEBUG] [Thread-3078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:00:47.693 [DEBUG] [Thread-3078] [transport.py] [_log()] Compression: none
2025-12-25T02:00:47.693 [DEBUG] [Thread-3078] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:00:47.708 [DEBUG] [Thread-3078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:00:47.708 [DEBUG] [Thread-3078] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:00:47.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:00:47.709 [DEBUG] [Thread-3078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:00:47.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:00:47.710 [DEBUG] [Thread-3078] [transport.py] [_log()] userauth is OK
2025-12-25T02:00:47.710 [DEBUG] [Thread-3078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:00:47.710 [DEBUG] [Thread-3078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:00:47.710 [DEBUG] [Thread-3078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:00:47.710 [DEBUG] [Thread-3078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:00:47.719 [INFO] [Thread-3078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:00:47.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:00:48.352 [DEBUG] [Thread-3078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:00:48.352 [DEBUG] [Thread-3078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:00:48.353 [DEBUG] [Thread-3078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:00:48.393 [DEBUG] [Thread-3078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:00:48.393 [DEBUG] [Thread-3078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:00:48.396 [DEBUG] [Thread-3078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:00:48.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:00:48.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:00:48.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:00:48.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:00:48.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:00:48.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:00:48.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:00:48.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:00:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:00:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.000069 -999.00  +11.70  18.01     93  +10.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.4 18.0 147.8 25.4 13.5 -4.4 13.4 -4.2 13.2 -4.6 13.6 -5.1
2025-12-25T02:00:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:00:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:00:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.000069
2025-12-25T02:00:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:00:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:00:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:00:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:00:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:00:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:00:31', tmtdew=0.48, humidity=96.72, cloud=0.0, wind=25.44, temperature=11.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:00:05.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:00:48.419 [DEBUG] [Thread-3078] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:00:48.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:00:48.521 [DEBUG] [Thread-3081] [transport.py] [_log()] starting thread (client mode): 0xb95f3f40
2025-12-25T02:00:48.521 [DEBUG] [Thread-3081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:00:48.536 [DEBUG] [Thread-3081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:00:48.536 [INFO] [Thread-3081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:00:48.543 [DEBUG] [Thread-3081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] client lang: <none>
2025-12-25T02:00:48.544 [DEBUG] [Thread-3081] [transport.py] [_log()] server lang: <none>
2025-12-25T02:00:48.545 [DEBUG] [Thread-3081] [transport.py] [_log()] kex follows: False
2025-12-25T02:00:48.545 [DEBUG] [Thread-3081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:00:48.545 [DEBUG] [Thread-3081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:00:48.545 [DEBUG] [Thread-3081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:00:48.545 [DEBUG] [Thread-3081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:00:48.545 [DEBUG] [Thread-3081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:00:48.545 [DEBUG] [Thread-3081] [transport.py] [_log()] Compression: none
2025-12-25T02:00:48.545 [DEBUG] [Thread-3081] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:00:48.604 [DEBUG] [Thread-3081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:00:48.604 [DEBUG] [Thread-3081] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:00:48.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:00:48.605 [DEBUG] [Thread-3081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:00:48.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:00:48.659 [DEBUG] [Thread-3081] [transport.py] [_log()] userauth is OK
2025-12-25T02:00:48.660 [DEBUG] [Thread-3081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:00:48.660 [DEBUG] [Thread-3081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:00:48.660 [DEBUG] [Thread-3081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:00:48.660 [DEBUG] [Thread-3081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:00:48.683 [INFO] [Thread-3081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:00:48.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:00:48.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:00:49.576 [DEBUG] [Thread-3081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:00:49.576 [DEBUG] [Thread-3081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:00:49.624 [DEBUG] [Thread-3081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:00:49.625 [DEBUG] [Thread-3081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:00:49.633 [DEBUG] [Thread-3081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:00:49.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:00:49.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:00:49.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:00:49.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:00:49.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:00:49.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:00:49.666 [DEBUG] [Thread-3081] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:00:53.606 [DEBUG] [Thread-3083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:01:08.661 [DEBUG] [Thread-3084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:01:19.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:01:19.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:01:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:01:20.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 1, 3), 0.48, 96.72, 0.0, 24.16, 11.74, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:01:20.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:01:03
2025-12-25T02:01:20.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:01:20.626 [DEBUG] [Thread-3085] [transport.py] [_log()] starting thread (client mode): 0xb95b3be0
2025-12-25T02:01:20.626 [DEBUG] [Thread-3085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:01:20.646 [DEBUG] [Thread-3085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:01:20.646 [INFO] [Thread-3085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:01:20.650 [DEBUG] [Thread-3085] [transport.py] [_log()] client lang: <none>
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] server lang: <none>
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] kex follows: False
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] Compression: none
2025-12-25T02:01:20.651 [DEBUG] [Thread-3085] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:01:20.670 [DEBUG] [Thread-3085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:01:20.671 [DEBUG] [Thread-3085] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:01:20.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:01:20.672 [DEBUG] [Thread-3085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:01:20.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:01:20.674 [DEBUG] [Thread-3085] [transport.py] [_log()] userauth is OK
2025-12-25T02:01:20.675 [DEBUG] [Thread-3085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:01:20.675 [DEBUG] [Thread-3085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:01:20.675 [DEBUG] [Thread-3085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:01:20.675 [DEBUG] [Thread-3085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:01:20.698 [INFO] [Thread-3085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:01:20.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:01:21.339 [DEBUG] [Thread-3085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:01:21.339 [DEBUG] [Thread-3085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:01:21.339 [DEBUG] [Thread-3085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:01:21.380 [DEBUG] [Thread-3085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:01:21.381 [DEBUG] [Thread-3085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:01:21.383 [DEBUG] [Thread-3085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:01:21.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:01:21.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:01:21.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:01:21.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:01:21.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:01:21.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:01:21.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.000405 -999.00  +11.70  20.71     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 26.1 20.7 156.8 32.7 13.5 -7.9 13.3 -7.7 13.2 -7.4 13.6 -6.6
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.000405
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:01:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:01:03', tmtdew=0.48, humidity=96.72, cloud=0.0, wind=24.16, temperature=11.74, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:00:34.992', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:01:21.402 [DEBUG] [Thread-3085] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:01:21.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:01:21.484 [DEBUG] [Thread-3088] [transport.py] [_log()] starting thread (client mode): 0xb95f0b20
2025-12-25T02:01:21.485 [DEBUG] [Thread-3088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:01:21.499 [DEBUG] [Thread-3088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:01:21.499 [INFO] [Thread-3088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] client lang: <none>
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] server lang: <none>
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] kex follows: False
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:01:21.506 [DEBUG] [Thread-3088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:01:21.507 [DEBUG] [Thread-3088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:01:21.507 [DEBUG] [Thread-3088] [transport.py] [_log()] Compression: none
2025-12-25T02:01:21.507 [DEBUG] [Thread-3088] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:01:21.562 [DEBUG] [Thread-3088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:01:21.562 [DEBUG] [Thread-3088] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:01:21.562 [DEBUG] [Thread-3088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:01:21.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:01:21.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:01:21.619 [DEBUG] [Thread-3088] [transport.py] [_log()] userauth is OK
2025-12-25T02:01:21.620 [DEBUG] [Thread-3088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:01:21.620 [DEBUG] [Thread-3088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:01:21.620 [DEBUG] [Thread-3088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:01:21.620 [DEBUG] [Thread-3088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:01:21.633 [INFO] [Thread-3088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:01:21.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:01:21.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:01:22.456 [DEBUG] [Thread-3088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:01:22.457 [DEBUG] [Thread-3088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:01:22.504 [DEBUG] [Thread-3088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:01:22.504 [DEBUG] [Thread-3088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:01:22.512 [DEBUG] [Thread-3088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:01:22.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:01:22.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:01:22.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:01:22.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:01:22.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:01:22.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:01:22.544 [DEBUG] [Thread-3088] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:01:23.695 [DEBUG] [Thread-3090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:01:26.451 [DEBUG] [Thread-3091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:01:36.833 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:01:36.834 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:01:38.735 [DEBUG] [Thread-3092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:01:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:01:52.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:01:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:01:53.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 1, 35), 0.48, 96.7, 0.0, 25.64, 11.72, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:01:53.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:01:35
2025-12-25T02:01:53.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:01:53.537 [DEBUG] [Thread-3093] [transport.py] [_log()] starting thread (client mode): 0xb9593010
2025-12-25T02:01:53.537 [DEBUG] [Thread-3093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:01:53.553 [DEBUG] [Thread-3093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:01:53.553 [INFO] [Thread-3093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:01:53.556 [DEBUG] [Thread-3093] [transport.py] [_log()] client lang: <none>
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] server lang: <none>
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] kex follows: False
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] Compression: none
2025-12-25T02:01:53.557 [DEBUG] [Thread-3093] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:01:53.574 [DEBUG] [Thread-3093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:01:53.575 [DEBUG] [Thread-3093] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:01:53.575 [DEBUG] [Thread-3093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:01:53.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:01:53.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:01:53.577 [DEBUG] [Thread-3093] [transport.py] [_log()] userauth is OK
2025-12-25T02:01:53.578 [DEBUG] [Thread-3093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:01:53.578 [DEBUG] [Thread-3093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:01:53.578 [DEBUG] [Thread-3093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:01:53.578 [DEBUG] [Thread-3093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:01:53.603 [INFO] [Thread-3093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:01:53.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:01:53.775 [DEBUG] [Thread-3095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:01:54.213 [DEBUG] [Thread-3093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:01:54.214 [DEBUG] [Thread-3093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:01:54.214 [DEBUG] [Thread-3093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:01:54.255 [DEBUG] [Thread-3093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:01:54.255 [DEBUG] [Thread-3093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:01:54.258 [DEBUG] [Thread-3093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:01:54.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:01:54.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:01:54.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:01:54.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:01:54.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:01:54.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:01:54.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:01:54.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:01:54.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:01:54.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.000752 -999.00  +11.60  22.95     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 Z...w 22.7 22.9 142.0 27.4 13.5 -7.0 13.3 -5.7 13.2 -6.6 13.5 -5.4
2025-12-25T02:01:54.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:01:54.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:01:54.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.000752
2025-12-25T02:01:54.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:01:54.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:01:54.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:01:54.286 [DEBUG] [Thread-3093] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:01:54.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:01:54.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:01:54.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:01:35', tmtdew=0.48, humidity=96.7, cloud=0.0, wind=25.64, temperature=11.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:01:04.973', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:01:54.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:01:54.377 [DEBUG] [Thread-3097] [transport.py] [_log()] starting thread (client mode): 0xb95b1090
2025-12-25T02:01:54.378 [DEBUG] [Thread-3097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:01:54.392 [DEBUG] [Thread-3097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:01:54.392 [INFO] [Thread-3097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:01:54.399 [DEBUG] [Thread-3097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] client lang: <none>
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] server lang: <none>
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] kex follows: False
2025-12-25T02:01:54.400 [DEBUG] [Thread-3097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:01:54.401 [DEBUG] [Thread-3097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:01:54.401 [DEBUG] [Thread-3097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:01:54.401 [DEBUG] [Thread-3097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:01:54.401 [DEBUG] [Thread-3097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:01:54.401 [DEBUG] [Thread-3097] [transport.py] [_log()] Compression: none
2025-12-25T02:01:54.401 [DEBUG] [Thread-3097] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:01:54.459 [DEBUG] [Thread-3097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:01:54.460 [DEBUG] [Thread-3097] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:01:54.460 [DEBUG] [Thread-3097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:01:54.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:01:54.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:01:54.516 [DEBUG] [Thread-3097] [transport.py] [_log()] userauth is OK
2025-12-25T02:01:54.516 [DEBUG] [Thread-3097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:01:54.516 [DEBUG] [Thread-3097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:01:54.517 [DEBUG] [Thread-3097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:01:54.517 [DEBUG] [Thread-3097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:01:54.536 [INFO] [Thread-3097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:01:54.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:01:54.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:01:55.354 [DEBUG] [Thread-3097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:01:55.354 [DEBUG] [Thread-3097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:01:55.402 [DEBUG] [Thread-3097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:01:55.402 [DEBUG] [Thread-3097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:01:55.411 [DEBUG] [Thread-3097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:01:55.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:01:55.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:01:55.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:01:55.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:01:55.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:01:55.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:01:55.446 [DEBUG] [Thread-3097] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:02:08.804 [DEBUG] [Thread-3099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:02:23.845 [DEBUG] [Thread-3100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:02:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:02:25.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:02:25.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:02:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 2, 7), 0.48, 96.7, 0.0, 24.49, 11.7, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:02:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:02:07
2025-12-25T02:02:26.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:02:26.444 [DEBUG] [Thread-3101] [transport.py] [_log()] starting thread (client mode): 0xb95b0040
2025-12-25T02:02:26.444 [DEBUG] [Thread-3101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:02:26.465 [DEBUG] [Thread-3101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:02:26.465 [INFO] [Thread-3101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:02:26.466 [DEBUG] [Thread-3101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:02:26.466 [DEBUG] [Thread-3101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:02:26.466 [DEBUG] [Thread-3101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:02:26.466 [DEBUG] [Thread-3101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:02:26.466 [DEBUG] [Thread-3101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:02:26.466 [DEBUG] [Thread-3101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:02:26.466 [DEBUG] [Thread-3101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:02:26.466 [DEBUG] [Thread-3101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] client lang: <none>
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] server lang: <none>
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] kex follows: False
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] Compression: none
2025-12-25T02:02:26.467 [DEBUG] [Thread-3101] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:02:26.474 [DEBUG] [Thread-3101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:02:26.474 [DEBUG] [Thread-3101] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:02:26.474 [DEBUG] [Thread-3101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:02:26.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:02:26.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:02:26.474 [DEBUG] [Thread-3101] [transport.py] [_log()] userauth is OK
2025-12-25T02:02:26.474 [DEBUG] [Thread-3101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:02:26.474 [DEBUG] [Thread-3101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:02:26.474 [DEBUG] [Thread-3101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:02:26.474 [DEBUG] [Thread-3101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:02:26.483 [INFO] [Thread-3101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:02:26.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:02:26.507 [DEBUG] [Thread-3103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:02:27.128 [DEBUG] [Thread-3101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:02:27.128 [DEBUG] [Thread-3101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:02:27.129 [DEBUG] [Thread-3101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:02:27.169 [DEBUG] [Thread-3101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:02:27.169 [DEBUG] [Thread-3101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:02:27.173 [DEBUG] [Thread-3101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:02:27.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:02:27.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:02:27.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:02:27.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:02:27.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:02:27.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:02:27.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:02:27.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:02:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:02:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.001100 -999.00  +11.60  20.71     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ....W 21.1 20.7 146.2 27.4 13.4 -4.7 13.3 -4.4 13.2 -4.5 13.5 -7.0
2025-12-25T02:02:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:02:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:02:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.001100
2025-12-25T02:02:27.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:02:27.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:02:27.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:02:27.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:02:27.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:02:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:02:07', tmtdew=0.48, humidity=96.7, cloud=0.0, wind=24.49, temperature=11.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:01:35.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:02:27.201 [DEBUG] [Thread-3101] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:02:27.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:02:27.295 [DEBUG] [Thread-3105] [transport.py] [_log()] starting thread (client mode): 0xb955add0
2025-12-25T02:02:27.295 [DEBUG] [Thread-3105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:02:27.309 [DEBUG] [Thread-3105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:02:27.309 [INFO] [Thread-3105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] client lang: <none>
2025-12-25T02:02:27.317 [DEBUG] [Thread-3105] [transport.py] [_log()] server lang: <none>
2025-12-25T02:02:27.318 [DEBUG] [Thread-3105] [transport.py] [_log()] kex follows: False
2025-12-25T02:02:27.318 [DEBUG] [Thread-3105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:02:27.318 [DEBUG] [Thread-3105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:02:27.318 [DEBUG] [Thread-3105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:02:27.318 [DEBUG] [Thread-3105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:02:27.318 [DEBUG] [Thread-3105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:02:27.318 [DEBUG] [Thread-3105] [transport.py] [_log()] Compression: none
2025-12-25T02:02:27.318 [DEBUG] [Thread-3105] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:02:27.377 [DEBUG] [Thread-3105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:02:27.378 [DEBUG] [Thread-3105] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:02:27.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:02:27.379 [DEBUG] [Thread-3105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:02:27.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:02:27.436 [DEBUG] [Thread-3105] [transport.py] [_log()] userauth is OK
2025-12-25T02:02:27.436 [DEBUG] [Thread-3105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:02:27.437 [DEBUG] [Thread-3105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:02:27.437 [DEBUG] [Thread-3105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:02:27.437 [DEBUG] [Thread-3105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:02:27.455 [INFO] [Thread-3105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:02:27.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:02:27.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:02:28.293 [DEBUG] [Thread-3105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:02:28.293 [DEBUG] [Thread-3105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:02:28.341 [DEBUG] [Thread-3105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:02:28.341 [DEBUG] [Thread-3105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:02:28.351 [DEBUG] [Thread-3105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:02:28.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:02:28.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')
2025-12-25T02:02:28.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:02:28.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:02:28.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:02:28.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:02:28.386 [DEBUG] [Thread-3105] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:02:37.035 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:02:37.037 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:02:38.881 [DEBUG] [Thread-3107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:02:53.917 [DEBUG] [Thread-3108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:02:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:02:58.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:02:58.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:02:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 2, 39), 0.47, 96.77, 0.0, 27.4, 11.72, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:02:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:02:39
2025-12-25T02:02:59.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:02:59.401 [DEBUG] [Thread-3109] [transport.py] [_log()] starting thread (client mode): 0xb95b2710
2025-12-25T02:02:59.401 [DEBUG] [Thread-3109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:02:59.420 [DEBUG] [Thread-3109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:02:59.420 [INFO] [Thread-3109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] client lang: <none>
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] server lang: <none>
2025-12-25T02:02:59.424 [DEBUG] [Thread-3109] [transport.py] [_log()] kex follows: False
2025-12-25T02:02:59.425 [DEBUG] [Thread-3109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:02:59.425 [DEBUG] [Thread-3109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:02:59.425 [DEBUG] [Thread-3109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:02:59.425 [DEBUG] [Thread-3109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:02:59.425 [DEBUG] [Thread-3109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:02:59.425 [DEBUG] [Thread-3109] [transport.py] [_log()] Compression: none
2025-12-25T02:02:59.425 [DEBUG] [Thread-3109] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:02:59.443 [DEBUG] [Thread-3109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:02:59.444 [DEBUG] [Thread-3109] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:02:59.445 [DEBUG] [Thread-3109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:02:59.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:02:59.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:02:59.447 [DEBUG] [Thread-3109] [transport.py] [_log()] userauth is OK
2025-12-25T02:02:59.447 [DEBUG] [Thread-3109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:02:59.447 [DEBUG] [Thread-3109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:02:59.447 [DEBUG] [Thread-3109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:02:59.447 [DEBUG] [Thread-3109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:02:59.467 [INFO] [Thread-3109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:02:59.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:03:00.118 [DEBUG] [Thread-3109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:03:00.119 [DEBUG] [Thread-3109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:03:00.119 [DEBUG] [Thread-3109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:03:00.159 [DEBUG] [Thread-3109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:03:00.159 [DEBUG] [Thread-3109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:03:00.163 [DEBUG] [Thread-3109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:03:00.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:03:00.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:03:00.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:03:00.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:03:00.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:03:00.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:03:00.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:03:00.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:03:00.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:03:00.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.001447 -999.00  +11.70  25.41     94  +10.80 1 3 1 3 1     0    0 -999.00 0.00 ....W 27.2 25.4 143.6 30.7 13.4 -6.1 13.3 -5.8 13.2 -6.1 13.5 -4.7
2025-12-25T02:03:00.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:03:00.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:03:00.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.001447
2025-12-25T02:03:00.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:03:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:03:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:03:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:03:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:03:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:02:39', tmtdew=0.47, humidity=96.77, cloud=0.0, wind=27.4, temperature=11.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:02:05.021', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:03:00.189 [DEBUG] [Thread-3109] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:03:00.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:03:00.285 [DEBUG] [Thread-3112] [transport.py] [_log()] starting thread (client mode): 0xb95f2bc0
2025-12-25T02:03:00.285 [DEBUG] [Thread-3112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:03:00.303 [DEBUG] [Thread-3112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:03:00.303 [INFO] [Thread-3112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:03:00.310 [DEBUG] [Thread-3112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:03:00.311 [DEBUG] [Thread-3112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:03:00.311 [DEBUG] [Thread-3112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:03:00.311 [DEBUG] [Thread-3112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:03:00.311 [DEBUG] [Thread-3112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:03:00.311 [DEBUG] [Thread-3112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:03:00.311 [DEBUG] [Thread-3112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:03:00.312 [DEBUG] [Thread-3112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:03:00.312 [DEBUG] [Thread-3112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:03:00.312 [DEBUG] [Thread-3112] [transport.py] [_log()] client lang: <none>
2025-12-25T02:03:00.312 [DEBUG] [Thread-3112] [transport.py] [_log()] server lang: <none>
2025-12-25T02:03:00.312 [DEBUG] [Thread-3112] [transport.py] [_log()] kex follows: False
2025-12-25T02:03:00.312 [DEBUG] [Thread-3112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:03:00.312 [DEBUG] [Thread-3112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:03:00.312 [DEBUG] [Thread-3112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:03:00.313 [DEBUG] [Thread-3112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:03:00.313 [DEBUG] [Thread-3112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:03:00.313 [DEBUG] [Thread-3112] [transport.py] [_log()] Compression: none
2025-12-25T02:03:00.313 [DEBUG] [Thread-3112] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:03:00.369 [DEBUG] [Thread-3112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:03:00.369 [DEBUG] [Thread-3112] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:03:00.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:03:00.370 [DEBUG] [Thread-3112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:03:00.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:03:00.428 [DEBUG] [Thread-3112] [transport.py] [_log()] userauth is OK
2025-12-25T02:03:00.428 [DEBUG] [Thread-3112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:03:00.428 [DEBUG] [Thread-3112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:03:00.429 [DEBUG] [Thread-3112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:03:00.429 [DEBUG] [Thread-3112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:03:00.448 [INFO] [Thread-3112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:03:00.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:03:00.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:03:01.317 [DEBUG] [Thread-3112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:03:01.317 [DEBUG] [Thread-3112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:03:01.365 [DEBUG] [Thread-3112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:03:01.365 [DEBUG] [Thread-3112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:03:01.375 [DEBUG] [Thread-3112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:03:01.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:03:01.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:03: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') -> 00000000
2025-12-25T02:03:01.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:03:01.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:03:01.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:03:01.411 [DEBUG] [Thread-3112] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:03:08.952 [DEBUG] [Thread-3114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:03:24.005 [DEBUG] [Thread-3115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:03:26.585 [DEBUG] [Thread-3116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:03:31.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:03:31.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:03:31.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:03:32.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 3, 11), 0.48, 96.73, 0.0, 26.59, 11.69, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:03:32.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:03:11
2025-12-25T02:03:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:03:32.384 [DEBUG] [Thread-3117] [transport.py] [_log()] starting thread (client mode): 0xb6b22e90
2025-12-25T02:03:32.384 [DEBUG] [Thread-3117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:03:32.405 [DEBUG] [Thread-3117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:03:32.405 [INFO] [Thread-3117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:03:32.408 [DEBUG] [Thread-3117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] client lang: <none>
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] server lang: <none>
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] kex follows: False
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] Compression: none
2025-12-25T02:03:32.409 [DEBUG] [Thread-3117] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:03:32.427 [DEBUG] [Thread-3117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:03:32.428 [DEBUG] [Thread-3117] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:03:32.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:03:32.429 [DEBUG] [Thread-3117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:03:32.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:03:32.431 [DEBUG] [Thread-3117] [transport.py] [_log()] userauth is OK
2025-12-25T02:03:32.431 [DEBUG] [Thread-3117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:03:32.432 [DEBUG] [Thread-3117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:03:32.432 [DEBUG] [Thread-3117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:03:32.432 [DEBUG] [Thread-3117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:03:32.456 [INFO] [Thread-3117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:03:32.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:03:33.110 [DEBUG] [Thread-3117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:03:33.110 [DEBUG] [Thread-3117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:03:33.111 [DEBUG] [Thread-3117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:03:33.151 [DEBUG] [Thread-3117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:03:33.151 [DEBUG] [Thread-3117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:03:33.154 [DEBUG] [Thread-3117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:03:33.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:03:33.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:03:33.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:03:33.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:03:33.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:03:33.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:03:33.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:03:33.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:03:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:03:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.001794 -999.00  +11.60  22.11     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ....W 24.6 22.1 151.8 30.0 13.4 -4.0 13.3 -3.9 13.2 -4.3 13.5 -6.9
2025-12-25T02:03:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:03:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:03:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.001794
2025-12-25T02:03:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:03:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:03:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:03:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:03:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:03:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:03:11', tmtdew=0.48, humidity=96.73, cloud=0.0, wind=26.59, temperature=11.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:02:35.002', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:03:33.181 [DEBUG] [Thread-3117] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:03:33.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:03:33.274 [DEBUG] [Thread-3120] [transport.py] [_log()] starting thread (client mode): 0xb6b21ed0
2025-12-25T02:03:33.274 [DEBUG] [Thread-3120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:03:33.289 [DEBUG] [Thread-3120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:03:33.289 [INFO] [Thread-3120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] client lang: <none>
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] server lang: <none>
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] kex follows: False
2025-12-25T02:03:33.297 [DEBUG] [Thread-3120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:03:33.298 [DEBUG] [Thread-3120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:03:33.298 [DEBUG] [Thread-3120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:03:33.298 [DEBUG] [Thread-3120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:03:33.298 [DEBUG] [Thread-3120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:03:33.298 [DEBUG] [Thread-3120] [transport.py] [_log()] Compression: none
2025-12-25T02:03:33.298 [DEBUG] [Thread-3120] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:03:33.356 [DEBUG] [Thread-3120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:03:33.356 [DEBUG] [Thread-3120] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:03:33.357 [DEBUG] [Thread-3120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:03:33.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:03:33.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:03:33.412 [DEBUG] [Thread-3120] [transport.py] [_log()] userauth is OK
2025-12-25T02:03:33.412 [DEBUG] [Thread-3120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:03:33.412 [DEBUG] [Thread-3120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:03:33.412 [DEBUG] [Thread-3120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:03:33.412 [DEBUG] [Thread-3120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:03:33.431 [INFO] [Thread-3120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:03:33.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:03:33.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:03:34.256 [DEBUG] [Thread-3120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:03:34.256 [DEBUG] [Thread-3120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:03:34.307 [DEBUG] [Thread-3120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:03:34.307 [DEBUG] [Thread-3120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:03:34.317 [DEBUG] [Thread-3120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:03:34.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:03:34.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:03:34.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
2025-12-25T02:03:34.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:03:34.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:03:34.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:03:34.354 [DEBUG] [Thread-3120] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:03:37.239 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:03:37.241 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:03:39.044 [DEBUG] [Thread-3122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:03:54.095 [DEBUG] [Thread-3123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:04:04.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:04:04.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:04:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:04:05.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 3, 43), 0.48, 96.73, 0.0, 25.09, 11.65, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:04:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:03:43
2025-12-25T02:04:05.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:04:05.320 [DEBUG] [Thread-3124] [transport.py] [_log()] starting thread (client mode): 0xb6b21210
2025-12-25T02:04:05.320 [DEBUG] [Thread-3124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:04:05.342 [DEBUG] [Thread-3124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:04:05.342 [INFO] [Thread-3124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:04:05.345 [DEBUG] [Thread-3124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] client lang: <none>
2025-12-25T02:04:05.346 [DEBUG] [Thread-3124] [transport.py] [_log()] server lang: <none>
2025-12-25T02:04:05.347 [DEBUG] [Thread-3124] [transport.py] [_log()] kex follows: False
2025-12-25T02:04:05.347 [DEBUG] [Thread-3124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:04:05.347 [DEBUG] [Thread-3124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:04:05.347 [DEBUG] [Thread-3124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:04:05.347 [DEBUG] [Thread-3124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:04:05.347 [DEBUG] [Thread-3124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:04:05.347 [DEBUG] [Thread-3124] [transport.py] [_log()] Compression: none
2025-12-25T02:04:05.347 [DEBUG] [Thread-3124] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:04:05.365 [DEBUG] [Thread-3124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:04:05.366 [DEBUG] [Thread-3124] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:04:05.367 [DEBUG] [Thread-3124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:04:05.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:04:05.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:04:05.368 [DEBUG] [Thread-3124] [transport.py] [_log()] userauth is OK
2025-12-25T02:04:05.369 [DEBUG] [Thread-3124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:04:05.369 [DEBUG] [Thread-3124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:04:05.369 [DEBUG] [Thread-3124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:04:05.369 [DEBUG] [Thread-3124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:04:05.390 [INFO] [Thread-3124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:04:05.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:04:06.070 [DEBUG] [Thread-3124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:04:06.070 [DEBUG] [Thread-3124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:04:06.071 [DEBUG] [Thread-3124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:04:06.111 [DEBUG] [Thread-3124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:04:06.111 [DEBUG] [Thread-3124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:04:06.115 [DEBUG] [Thread-3124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:04:06.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:04:06.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:04:06.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:04:06.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:04:06.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:04:06.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:04:06.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:04:06.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:04:06.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:04:06.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.002489 -999.00  +11.60  21.69     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 23.9 21.7 147.4 31.1 13.4 -5.9 13.3 -6.0 13.1 -5.8 13.4 -9.0
2025-12-25T02:04:06.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:04:06.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:04:06.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.002489
2025-12-25T02:04:06.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:04:06.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:04:06.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:04:06.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:04:06.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:04:06.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:03:43', tmtdew=0.48, humidity=96.73, cloud=0.0, wind=25.09, temperature=11.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:03:35.050', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:04:06.141 [DEBUG] [Thread-3124] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:04:06.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:04:06.234 [DEBUG] [Thread-3127] [transport.py] [_log()] starting thread (client mode): 0xb6b23760
2025-12-25T02:04:06.234 [DEBUG] [Thread-3127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:04:06.249 [DEBUG] [Thread-3127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:04:06.249 [INFO] [Thread-3127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:04:06.256 [DEBUG] [Thread-3127] [transport.py] [_log()] client lang: <none>
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] server lang: <none>
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] kex follows: False
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] Compression: none
2025-12-25T02:04:06.257 [DEBUG] [Thread-3127] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:04:06.317 [DEBUG] [Thread-3127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:04:06.318 [DEBUG] [Thread-3127] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:04:06.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:04:06.319 [DEBUG] [Thread-3127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:04:06.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:04:06.376 [DEBUG] [Thread-3127] [transport.py] [_log()] userauth is OK
2025-12-25T02:04:06.376 [DEBUG] [Thread-3127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:04:06.376 [DEBUG] [Thread-3127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:04:06.376 [DEBUG] [Thread-3127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:04:06.376 [DEBUG] [Thread-3127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:04:06.397 [INFO] [Thread-3127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:04:06.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:04:06.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:04:07.194 [DEBUG] [Thread-3127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:04:07.195 [DEBUG] [Thread-3127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:04:07.242 [DEBUG] [Thread-3127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:04:07.242 [DEBUG] [Thread-3127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:04:07.251 [DEBUG] [Thread-3127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:04:07.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:04:07.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:04:07.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:04:07.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:04:07.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:04:07.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:04:07.289 [DEBUG] [Thread-3127] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:04:09.126 [DEBUG] [Thread-3129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:04:24.176 [DEBUG] [Thread-3130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:04:26.662 [DEBUG] [Thread-3131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:04:37.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:04:37.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:04:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:04:37.441 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:04:37.442 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:04:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 4, 15), 0.48, 96.72, 0.0, 22.3, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:04:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:04:15
2025-12-25T02:04:38.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:04:38.336 [DEBUG] [Thread-3132] [transport.py] [_log()] starting thread (client mode): 0xb9590bb0
2025-12-25T02:04:38.336 [DEBUG] [Thread-3132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:04:38.357 [DEBUG] [Thread-3132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:04:38.357 [INFO] [Thread-3132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] client lang: <none>
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] server lang: <none>
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] kex follows: False
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:04:38.360 [DEBUG] [Thread-3132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:04:38.361 [DEBUG] [Thread-3132] [transport.py] [_log()] Compression: none
2025-12-25T02:04:38.361 [DEBUG] [Thread-3132] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:04:38.376 [DEBUG] [Thread-3132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:04:38.376 [DEBUG] [Thread-3132] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:04:38.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:04:38.376 [DEBUG] [Thread-3132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:04:38.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:04:38.377 [DEBUG] [Thread-3132] [transport.py] [_log()] userauth is OK
2025-12-25T02:04:38.377 [DEBUG] [Thread-3132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:04:38.377 [DEBUG] [Thread-3132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:04:38.377 [DEBUG] [Thread-3132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:04:38.377 [DEBUG] [Thread-3132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:04:38.386 [INFO] [Thread-3132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:04:38.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:04:39.037 [DEBUG] [Thread-3132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:04:39.037 [DEBUG] [Thread-3132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:04:39.038 [DEBUG] [Thread-3132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:04:39.079 [DEBUG] [Thread-3132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:04:39.079 [DEBUG] [Thread-3132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:04:39.081 [DEBUG] [Thread-3132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:04:39.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:04:39.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:04:39.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:04:39.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:04:39.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:04:39.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:04:39.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:04:39.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:04:39.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:04:39.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.002836 -999.00  +11.50  24.52     94  +10.60 1 3 1 3 1     0    0 -999.00 0.00 ----- 21.1 24.5 141.6 27.5 13.4 -5.8 13.3 -5.7 13.1 -6.0 13.4 -5.9
2025-12-25T02:04:39.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:04:39.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:04:39.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.002836
2025-12-25T02:04:39.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:04:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:04:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:04:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:04:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:04:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:04:15', tmtdew=0.48, humidity=96.72, cloud=0.0, wind=22.3, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:04:05.030', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:04:39.101 [DEBUG] [Thread-3132] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:04:39.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:04:39.184 [DEBUG] [Thread-3135] [transport.py] [_log()] starting thread (client mode): 0xb9592bc0
2025-12-25T02:04:39.184 [DEBUG] [Thread-3135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:04:39.199 [DEBUG] [Thread-3135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:04:39.199 [INFO] [Thread-3135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] client lang: <none>
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] server lang: <none>
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] kex follows: False
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] Compression: none
2025-12-25T02:04:39.206 [DEBUG] [Thread-3135] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:04:39.209 [DEBUG] [Thread-3137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:04:39.261 [DEBUG] [Thread-3135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:04:39.262 [DEBUG] [Thread-3135] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:04:39.262 [DEBUG] [Thread-3135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:04:39.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:04:39.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:04:39.324 [DEBUG] [Thread-3135] [transport.py] [_log()] userauth is OK
2025-12-25T02:04:39.324 [DEBUG] [Thread-3135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:04:39.324 [DEBUG] [Thread-3135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:04:39.324 [DEBUG] [Thread-3135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:04:39.324 [DEBUG] [Thread-3135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:04:39.338 [INFO] [Thread-3135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:04:39.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:04:39.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:04:40.181 [DEBUG] [Thread-3135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:04:40.181 [DEBUG] [Thread-3135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:04:40.228 [DEBUG] [Thread-3135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:04:40.229 [DEBUG] [Thread-3135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:04:40.237 [DEBUG] [Thread-3135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:04:40.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:04:40.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:04:40.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:04:40.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:04:40.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:04:40.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:04:40.268 [DEBUG] [Thread-3135] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:04:54.248 [DEBUG] [Thread-3138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:05:09.281 [DEBUG] [Thread-3139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:05:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:05:10.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:05:10.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:05:10.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 4, 47), 0.47, 96.78, 0.0, 27.03, 11.64, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:05:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:04:47
2025-12-25T02:05:11.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:05:11.256 [DEBUG] [Thread-3140] [transport.py] [_log()] starting thread (client mode): 0xb95f2200
2025-12-25T02:05:11.256 [DEBUG] [Thread-3140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:05:11.277 [DEBUG] [Thread-3140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:05:11.277 [INFO] [Thread-3140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:05:11.280 [DEBUG] [Thread-3140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:05:11.280 [DEBUG] [Thread-3140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:05:11.280 [DEBUG] [Thread-3140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:05:11.280 [DEBUG] [Thread-3140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:05:11.280 [DEBUG] [Thread-3140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:05:11.280 [DEBUG] [Thread-3140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:05:11.280 [DEBUG] [Thread-3140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] client lang: <none>
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] server lang: <none>
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] kex follows: False
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] Compression: none
2025-12-25T02:05:11.281 [DEBUG] [Thread-3140] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:05:11.299 [DEBUG] [Thread-3140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:05:11.300 [DEBUG] [Thread-3140] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:05:11.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:05:11.301 [DEBUG] [Thread-3140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:05:11.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:05:11.302 [DEBUG] [Thread-3140] [transport.py] [_log()] userauth is OK
2025-12-25T02:05:11.303 [DEBUG] [Thread-3140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:05:11.303 [DEBUG] [Thread-3140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:05:11.303 [DEBUG] [Thread-3140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:05:11.303 [DEBUG] [Thread-3140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:05:11.326 [INFO] [Thread-3140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:05:11.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:05:12.279 [DEBUG] [Thread-3140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:05:12.279 [DEBUG] [Thread-3140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:05:12.279 [DEBUG] [Thread-3140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:05:12.320 [DEBUG] [Thread-3140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:05:12.320 [DEBUG] [Thread-3140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:05:12.323 [DEBUG] [Thread-3140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:05:12.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:05:12.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:05:12.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:05:12.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:05:12.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:05:12.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:05:12.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:05:12.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:05:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:05:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.003194 -999.00  +11.50  24.21     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 20.0 24.2 141.2 28.2 13.4 -7.8 13.2 -7.7 13.1 -7.7 13.4 -6.1
2025-12-25T02:05:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:05:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:05:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.003194
2025-12-25T02:05:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:05:12.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:05:12.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:05:12.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:05:12.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:05:12.346 [DEBUG] [Thread-3140] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:05:12.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:04:47', tmtdew=0.47, humidity=96.78, cloud=0.0, wind=27.03, temperature=11.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:04:35.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:05:12.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:05:12.450 [DEBUG] [Thread-3143] [transport.py] [_log()] starting thread (client mode): 0xb9591ff0
2025-12-25T02:05:12.451 [DEBUG] [Thread-3143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:05:12.470 [DEBUG] [Thread-3143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:05:12.470 [INFO] [Thread-3143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] client lang: <none>
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] server lang: <none>
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] kex follows: False
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:05:12.478 [DEBUG] [Thread-3143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:05:12.479 [DEBUG] [Thread-3143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:05:12.479 [DEBUG] [Thread-3143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:05:12.479 [DEBUG] [Thread-3143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:05:12.479 [DEBUG] [Thread-3143] [transport.py] [_log()] Compression: none
2025-12-25T02:05:12.479 [DEBUG] [Thread-3143] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:05:12.535 [DEBUG] [Thread-3143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:05:12.536 [DEBUG] [Thread-3143] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:05:12.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:05:12.537 [DEBUG] [Thread-3143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:05:12.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:05:12.591 [DEBUG] [Thread-3143] [transport.py] [_log()] userauth is OK
2025-12-25T02:05:12.591 [DEBUG] [Thread-3143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:05:12.591 [DEBUG] [Thread-3143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:05:12.591 [DEBUG] [Thread-3143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:05:12.591 [DEBUG] [Thread-3143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:05:12.605 [INFO] [Thread-3143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:05:12.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:05:12.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:05:13.406 [DEBUG] [Thread-3143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:05:13.406 [DEBUG] [Thread-3143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:05:13.455 [DEBUG] [Thread-3143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:05:13.455 [DEBUG] [Thread-3143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:05:13.465 [DEBUG] [Thread-3143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:05:13.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:05:13.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')
2025-12-25T02:05:13.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:05:13.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:05:13.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:05:13.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:05:13.501 [DEBUG] [Thread-3143] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:05:24.312 [DEBUG] [Thread-3145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:05:26.718 [DEBUG] [Thread-3146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:05:37.644 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:05:37.646 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:05:39.376 [DEBUG] [Thread-3147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:05:43.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:05:43.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:05:43.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:05:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 5, 19), 0.46, 96.8, 0.0, 26.5, 11.64, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:05:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:05:19
2025-12-25T02:05:44.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:05:44.475 [DEBUG] [Thread-3148] [transport.py] [_log()] starting thread (client mode): 0xb6b20190
2025-12-25T02:05:44.475 [DEBUG] [Thread-3148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:05:44.495 [DEBUG] [Thread-3148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:05:44.496 [INFO] [Thread-3148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:05:44.498 [DEBUG] [Thread-3148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] client lang: <none>
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] server lang: <none>
2025-12-25T02:05:44.499 [DEBUG] [Thread-3148] [transport.py] [_log()] kex follows: False
2025-12-25T02:05:44.500 [DEBUG] [Thread-3148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:05:44.500 [DEBUG] [Thread-3148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:05:44.500 [DEBUG] [Thread-3148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:05:44.500 [DEBUG] [Thread-3148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:05:44.500 [DEBUG] [Thread-3148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:05:44.500 [DEBUG] [Thread-3148] [transport.py] [_log()] Compression: none
2025-12-25T02:05:44.502 [DEBUG] [Thread-3148] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:05:44.521 [DEBUG] [Thread-3148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:05:44.522 [DEBUG] [Thread-3148] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:05:44.523 [DEBUG] [Thread-3148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:05:44.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:05:44.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:05:44.525 [DEBUG] [Thread-3148] [transport.py] [_log()] userauth is OK
2025-12-25T02:05:44.525 [DEBUG] [Thread-3148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:05:44.525 [DEBUG] [Thread-3148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:05:44.525 [DEBUG] [Thread-3148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:05:44.525 [DEBUG] [Thread-3148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:05:44.550 [INFO] [Thread-3148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:05:44.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:05:45.196 [DEBUG] [Thread-3148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:05:45.196 [DEBUG] [Thread-3148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:05:45.196 [DEBUG] [Thread-3148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:05:45.237 [DEBUG] [Thread-3148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:05:45.237 [DEBUG] [Thread-3148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:05:45.241 [DEBUG] [Thread-3148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:05:45.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:05:45.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:05:45.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:05:45.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:05:45.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:05:45.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:05:45.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:05:45.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:05:45.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:05:45.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.003541 -999.00  +11.50  14.39     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 22.0 14.4 146.2 29.8 13.3 -5.7 13.2 -6.3 13.1 -5.9 13.4 -5.4
2025-12-25T02:05:45.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:05:45.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:05:45.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.003541
2025-12-25T02:05:45.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:05:45.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:05:45.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:05:45.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:05:45.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:05:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:05:19', tmtdew=0.46, humidity=96.8, cloud=0.0, wind=26.5, temperature=11.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:05:05.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:05:45.268 [DEBUG] [Thread-3148] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:05:45.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:05:45.362 [DEBUG] [Thread-3151] [transport.py] [_log()] starting thread (client mode): 0xb9593790
2025-12-25T02:05:45.362 [DEBUG] [Thread-3151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:05:45.377 [DEBUG] [Thread-3151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:05:45.377 [INFO] [Thread-3151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:05:45.385 [DEBUG] [Thread-3151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:05:45.385 [DEBUG] [Thread-3151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:05:45.385 [DEBUG] [Thread-3151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:05:45.385 [DEBUG] [Thread-3151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:05:45.385 [DEBUG] [Thread-3151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:05:45.385 [DEBUG] [Thread-3151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] client lang: <none>
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] server lang: <none>
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] kex follows: False
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] Compression: none
2025-12-25T02:05:45.386 [DEBUG] [Thread-3151] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:05:45.443 [DEBUG] [Thread-3151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:05:45.443 [DEBUG] [Thread-3151] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:05:45.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:05:45.444 [DEBUG] [Thread-3151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:05:45.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:05:45.499 [DEBUG] [Thread-3151] [transport.py] [_log()] userauth is OK
2025-12-25T02:05:45.499 [DEBUG] [Thread-3151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:05:45.499 [DEBUG] [Thread-3151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:05:45.499 [DEBUG] [Thread-3151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:05:45.499 [DEBUG] [Thread-3151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:05:45.522 [INFO] [Thread-3151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:05:45.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:05:45.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:05:46.364 [DEBUG] [Thread-3151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:05:46.364 [DEBUG] [Thread-3151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:05:46.413 [DEBUG] [Thread-3151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:05:46.413 [DEBUG] [Thread-3151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:05:46.422 [DEBUG] [Thread-3151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:05:46.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:05:46.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:05:46.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:05:46.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:05:46.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:05:46.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:05:46.459 [DEBUG] [Thread-3151] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:05:54.407 [DEBUG] [Thread-3153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:06:09.449 [DEBUG] [Thread-3154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:06:16.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:06:16.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:06:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:06:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 5, 51), 0.42, 96.8, 0.0, 24.05, 11.67, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:06:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:05:51
2025-12-25T02:06:17.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:06:17.441 [DEBUG] [Thread-3155] [transport.py] [_log()] starting thread (client mode): 0xb6b20400
2025-12-25T02:06:17.441 [DEBUG] [Thread-3155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:06:17.462 [DEBUG] [Thread-3155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:06:17.462 [INFO] [Thread-3155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:06:17.465 [DEBUG] [Thread-3155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:06:17.465 [DEBUG] [Thread-3155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] client lang: <none>
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] server lang: <none>
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] kex follows: False
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] Compression: none
2025-12-25T02:06:17.466 [DEBUG] [Thread-3155] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:06:17.484 [DEBUG] [Thread-3155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:06:17.485 [DEBUG] [Thread-3155] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:06:17.486 [DEBUG] [Thread-3155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:06:17.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:06:17.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:06:17.488 [DEBUG] [Thread-3155] [transport.py] [_log()] userauth is OK
2025-12-25T02:06:17.488 [DEBUG] [Thread-3155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:06:17.488 [DEBUG] [Thread-3155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:06:17.488 [DEBUG] [Thread-3155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:06:17.488 [DEBUG] [Thread-3155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:06:17.512 [INFO] [Thread-3155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:06:17.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:06:18.157 [DEBUG] [Thread-3155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:06:18.157 [DEBUG] [Thread-3155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:06:18.158 [DEBUG] [Thread-3155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:06:18.198 [DEBUG] [Thread-3155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:06:18.198 [DEBUG] [Thread-3155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:06:18.201 [DEBUG] [Thread-3155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:06:18.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:06:18.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:06:18.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:06:18.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:06:18.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:06:18.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:06:18.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:06:18.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:06:18.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:06:18.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.003889 -999.00  +11.60  19.69     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.7 19.7 145.4 27.1 13.3 -5.7 13.2 -5.7 13.1 -5.7 13.3 -7.0
2025-12-25T02:06:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:06:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:06:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.003889
2025-12-25T02:06:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:06:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:06:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:06:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:06:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:06:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:05:51', tmtdew=0.42, humidity=96.8, cloud=0.0, wind=24.05, temperature=11.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:05:36.010', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:06:18.229 [DEBUG] [Thread-3155] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:06:18.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:06:18.323 [DEBUG] [Thread-3158] [transport.py] [_log()] starting thread (client mode): 0xb6b20040
2025-12-25T02:06:18.323 [DEBUG] [Thread-3158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:06:18.338 [DEBUG] [Thread-3158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:06:18.339 [INFO] [Thread-3158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:06:18.348 [DEBUG] [Thread-3158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:06:18.348 [DEBUG] [Thread-3158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:06:18.348 [DEBUG] [Thread-3158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:06:18.348 [DEBUG] [Thread-3158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:06:18.349 [DEBUG] [Thread-3158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:06:18.349 [DEBUG] [Thread-3158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:06:18.349 [DEBUG] [Thread-3158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:06:18.349 [DEBUG] [Thread-3158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:06:18.349 [DEBUG] [Thread-3158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:06:18.349 [DEBUG] [Thread-3158] [transport.py] [_log()] client lang: <none>
2025-12-25T02:06:18.349 [DEBUG] [Thread-3158] [transport.py] [_log()] server lang: <none>
2025-12-25T02:06:18.349 [DEBUG] [Thread-3158] [transport.py] [_log()] kex follows: False
2025-12-25T02:06:18.350 [DEBUG] [Thread-3158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:06:18.350 [DEBUG] [Thread-3158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:06:18.350 [DEBUG] [Thread-3158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:06:18.350 [DEBUG] [Thread-3158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:06:18.350 [DEBUG] [Thread-3158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:06:18.350 [DEBUG] [Thread-3158] [transport.py] [_log()] Compression: none
2025-12-25T02:06:18.350 [DEBUG] [Thread-3158] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:06:18.404 [DEBUG] [Thread-3158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:06:18.404 [DEBUG] [Thread-3158] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:06:18.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:06:18.405 [DEBUG] [Thread-3158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:06:18.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:06:18.460 [DEBUG] [Thread-3158] [transport.py] [_log()] userauth is OK
2025-12-25T02:06:18.460 [DEBUG] [Thread-3158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:06:18.460 [DEBUG] [Thread-3158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:06:18.461 [DEBUG] [Thread-3158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:06:18.461 [DEBUG] [Thread-3158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:06:18.480 [INFO] [Thread-3158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:06:18.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:06:18.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:06:19.290 [DEBUG] [Thread-3158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:06:19.291 [DEBUG] [Thread-3158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:06:19.339 [DEBUG] [Thread-3158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:06:19.339 [DEBUG] [Thread-3158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:06:19.348 [DEBUG] [Thread-3158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:06:19.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:06:19.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:06:19.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:06:19.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:06:19.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:06:19.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:06:19.385 [DEBUG] [Thread-3158] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:06:24.487 [DEBUG] [Thread-3160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:06:26.788 [DEBUG] [Thread-3161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:06:37.848 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:06:37.849 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:06:39.535 [DEBUG] [Thread-3162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:06:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:06:49.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:06:49.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:06:50.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 6, 24), 0.41, 96.83, 0.0, 23.86, 11.67, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:06:50.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:06:24
2025-12-25T02:06:50.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:06:50.384 [DEBUG] [Thread-3163] [transport.py] [_log()] starting thread (client mode): 0xb9546d70
2025-12-25T02:06:50.384 [DEBUG] [Thread-3163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:06:50.406 [DEBUG] [Thread-3163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:06:50.406 [INFO] [Thread-3163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:06:50.409 [DEBUG] [Thread-3163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:06:50.409 [DEBUG] [Thread-3163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:06:50.409 [DEBUG] [Thread-3163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:06:50.409 [DEBUG] [Thread-3163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] client lang: <none>
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] server lang: <none>
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] kex follows: False
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:06:50.410 [DEBUG] [Thread-3163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:06:50.411 [DEBUG] [Thread-3163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:06:50.411 [DEBUG] [Thread-3163] [transport.py] [_log()] Compression: none
2025-12-25T02:06:50.411 [DEBUG] [Thread-3163] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:06:50.427 [DEBUG] [Thread-3163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:06:50.428 [DEBUG] [Thread-3163] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:06:50.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:06:50.429 [DEBUG] [Thread-3163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:06:50.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:06:50.431 [DEBUG] [Thread-3163] [transport.py] [_log()] userauth is OK
2025-12-25T02:06:50.431 [DEBUG] [Thread-3163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:06:50.431 [DEBUG] [Thread-3163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:06:50.431 [DEBUG] [Thread-3163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:06:50.431 [DEBUG] [Thread-3163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:06:50.454 [INFO] [Thread-3163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:06:50.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:06:51.125 [DEBUG] [Thread-3163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:06:51.125 [DEBUG] [Thread-3163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:06:51.125 [DEBUG] [Thread-3163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:06:51.166 [DEBUG] [Thread-3163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:06:51.167 [DEBUG] [Thread-3163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:06:51.170 [DEBUG] [Thread-3163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:06:51.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:06:51.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:06:51.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:06:51.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:06:51.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:06:51.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:06:51.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:06:51.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:06:51.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:06:51.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.004225 -999.00  +11.50  23.01     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.2 23.0 144.0 26.9 13.3 -6.4 13.2 -6.1 13.1 -5.7 13.4 -6.1
2025-12-25T02:06:51.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:06:51.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:06:51.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.004225
2025-12-25T02:06:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:06:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:06:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:06:51.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:06:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:06:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:06:24', tmtdew=0.41, humidity=96.83, cloud=0.0, wind=23.86, temperature=11.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:06:05.040', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-24T23:09:00')
2025-12-25T02:06:51.197 [DEBUG] [Thread-3163] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:06:51.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:06:54.573 [DEBUG] [Thread-3166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:07:09.622 [DEBUG] [Thread-3167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:07:24.651 [DEBUG] [Thread-3168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:07:26.864 [DEBUG] [Thread-3169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:07:38.052 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:07:38.053 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:07:39.686 [DEBUG] [Thread-3170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:07:54.718 [DEBUG] [Thread-3171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:08:09.750 [DEBUG] [Thread-3172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:08:24.787 [DEBUG] [Thread-3173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:08:26.933 [DEBUG] [Thread-3174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:08:38.256 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:08:38.257 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:08:39.822 [DEBUG] [Thread-3175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:08:54.860 [DEBUG] [Thread-3176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:09:05.749 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-25T02:09:09.895 [DEBUG] [Thread-3177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:09:24.927 [DEBUG] [Thread-3178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:09:27.001 [DEBUG] [Thread-3179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:09:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:09:35.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:09:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:09:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 9, 4), 0.46, 96.82, 0.0, 24.47, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:09:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:09:04
2025-12-25T02:09:36.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:09:36.768 [DEBUG] [Thread-3180] [transport.py] [_log()] starting thread (client mode): 0xb6b23a00
2025-12-25T02:09:36.768 [DEBUG] [Thread-3180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:09:36.789 [DEBUG] [Thread-3180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:09:36.789 [INFO] [Thread-3180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] client lang: <none>
2025-12-25T02:09:36.790 [DEBUG] [Thread-3180] [transport.py] [_log()] server lang: <none>
2025-12-25T02:09:36.791 [DEBUG] [Thread-3180] [transport.py] [_log()] kex follows: False
2025-12-25T02:09:36.791 [DEBUG] [Thread-3180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:09:36.791 [DEBUG] [Thread-3180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:09:36.791 [DEBUG] [Thread-3180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:09:36.791 [DEBUG] [Thread-3180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:09:36.791 [DEBUG] [Thread-3180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:09:36.791 [DEBUG] [Thread-3180] [transport.py] [_log()] Compression: none
2025-12-25T02:09:36.791 [DEBUG] [Thread-3180] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:09:36.803 [DEBUG] [Thread-3180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:09:36.803 [DEBUG] [Thread-3180] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:09:36.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:09:36.804 [DEBUG] [Thread-3180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:09:36.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:09:36.804 [DEBUG] [Thread-3180] [transport.py] [_log()] userauth is OK
2025-12-25T02:09:36.804 [DEBUG] [Thread-3180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:09:36.804 [DEBUG] [Thread-3180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:09:36.804 [DEBUG] [Thread-3180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:09:36.804 [DEBUG] [Thread-3180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:09:36.819 [INFO] [Thread-3180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:09:36.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:09:37.425 [DEBUG] [Thread-3180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:09:37.425 [DEBUG] [Thread-3180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:09:37.425 [DEBUG] [Thread-3180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:09:37.466 [DEBUG] [Thread-3180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:09:37.466 [DEBUG] [Thread-3180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:09:37.468 [DEBUG] [Thread-3180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:09:37.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:09:37.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:09:37.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:09:37.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:09:37.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:09:37.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:09:37.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.006319 -999.00  +11.50  20.82     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 Z...W 19.4 20.8 142.2 23.6 13.3 -5.5 13.2 -4.9 13.0 -6.5 13.3 -6.2
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.006319
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:09:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:09:04', tmtdew=0.46, humidity=96.82, cloud=0.0, wind=24.47, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:09:05.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-25T00:06:00')
2025-12-25T02:09:37.480 [DEBUG] [Thread-3180] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:09:37.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:09:37.564 [DEBUG] [Thread-3183] [transport.py] [_log()] starting thread (client mode): 0xb6b23490
2025-12-25T02:09:37.565 [DEBUG] [Thread-3183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:09:37.579 [DEBUG] [Thread-3183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:09:37.579 [INFO] [Thread-3183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] client lang: <none>
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] server lang: <none>
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] kex follows: False
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:09:37.586 [DEBUG] [Thread-3183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:09:37.587 [DEBUG] [Thread-3183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:09:37.587 [DEBUG] [Thread-3183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:09:37.587 [DEBUG] [Thread-3183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:09:37.587 [DEBUG] [Thread-3183] [transport.py] [_log()] Compression: none
2025-12-25T02:09:37.587 [DEBUG] [Thread-3183] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:09:37.647 [DEBUG] [Thread-3183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:09:37.648 [DEBUG] [Thread-3183] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:09:37.648 [DEBUG] [Thread-3183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:09:37.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:09:37.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:09:37.704 [DEBUG] [Thread-3183] [transport.py] [_log()] userauth is OK
2025-12-25T02:09:37.704 [DEBUG] [Thread-3183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:09:37.704 [DEBUG] [Thread-3183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:09:37.704 [DEBUG] [Thread-3183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:09:37.704 [DEBUG] [Thread-3183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:09:37.718 [INFO] [Thread-3183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:09:37.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:09:37.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:09:38.455 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:09:38.456 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:09:38.556 [DEBUG] [Thread-3183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:09:38.556 [DEBUG] [Thread-3183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:09:38.604 [DEBUG] [Thread-3183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:09:38.604 [DEBUG] [Thread-3183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:09:38.613 [DEBUG] [Thread-3183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:09:38.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:09: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')
2025-12-25T02:09:38.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:09:38.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:09:38.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:09:38.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:09:38.645 [DEBUG] [Thread-3183] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:09:39.970 [DEBUG] [Thread-3185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:09:55.028 [DEBUG] [Thread-3186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:10:08.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:10:08.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:10: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
2025-12-25T02:10:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 9, 36), 0.45, 96.87, 0.0, 21.14, 11.69, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:10:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:09:36
2025-12-25T02:10:09.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:10:09.734 [DEBUG] [Thread-3187] [transport.py] [_log()] starting thread (client mode): 0xb6b217b0
2025-12-25T02:10:09.734 [DEBUG] [Thread-3187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:10:09.749 [DEBUG] [Thread-3187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:10:09.749 [INFO] [Thread-3187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] client lang: <none>
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] server lang: <none>
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] kex follows: False
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] Compression: none
2025-12-25T02:10:09.753 [DEBUG] [Thread-3187] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:10:09.770 [DEBUG] [Thread-3187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:10:09.770 [DEBUG] [Thread-3187] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:10:09.770 [DEBUG] [Thread-3187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:10:09.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:10:09.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:10:09.771 [DEBUG] [Thread-3187] [transport.py] [_log()] userauth is OK
2025-12-25T02:10:09.771 [DEBUG] [Thread-3187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:10:09.771 [DEBUG] [Thread-3187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:10:09.771 [DEBUG] [Thread-3187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:10:09.771 [DEBUG] [Thread-3187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:10:09.792 [INFO] [Thread-3187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:10:09.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:10:10.061 [DEBUG] [Thread-3189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:10:10.512 [DEBUG] [Thread-3187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:10:10.512 [DEBUG] [Thread-3187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:10:10.512 [DEBUG] [Thread-3187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:10:10.554 [DEBUG] [Thread-3187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:10:10.554 [DEBUG] [Thread-3187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:10:10.558 [DEBUG] [Thread-3187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:10:10.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:10:10.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:10:10.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:10:10.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:10:10.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:10:10.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:10:10.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.006666 -999.00  +11.60  15.34     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 Z...W 13.2 15.3 153.9 22.8 13.3 -5.3 13.2 -5.0 13.0 -5.6 13.3 -6.6
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.006666
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:10:10.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:09:36', tmtdew=0.45, humidity=96.87, cloud=0.0, wind=21.14, temperature=11.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:09:35.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-25T00:06:00')
2025-12-25T02:10:10.581 [DEBUG] [Thread-3187] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:10:10.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:10:10.665 [DEBUG] [Thread-3191] [transport.py] [_log()] starting thread (client mode): 0xb9559540
2025-12-25T02:10:10.665 [DEBUG] [Thread-3191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:10:10.679 [DEBUG] [Thread-3191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:10:10.679 [INFO] [Thread-3191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] client lang: <none>
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] server lang: <none>
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] kex follows: False
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:10:10.686 [DEBUG] [Thread-3191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:10:10.687 [DEBUG] [Thread-3191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:10:10.687 [DEBUG] [Thread-3191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:10:10.687 [DEBUG] [Thread-3191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:10:10.687 [DEBUG] [Thread-3191] [transport.py] [_log()] Compression: none
2025-12-25T02:10:10.687 [DEBUG] [Thread-3191] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:10:10.745 [DEBUG] [Thread-3191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:10:10.746 [DEBUG] [Thread-3191] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:10:10.746 [DEBUG] [Thread-3191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:10:10.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:10:10.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:10:10.800 [DEBUG] [Thread-3191] [transport.py] [_log()] userauth is OK
2025-12-25T02:10:10.800 [DEBUG] [Thread-3191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:10:10.800 [DEBUG] [Thread-3191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:10:10.800 [DEBUG] [Thread-3191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:10:10.800 [DEBUG] [Thread-3191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:10:10.816 [INFO] [Thread-3191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:10:10.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:10:10.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:10:11.647 [DEBUG] [Thread-3191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:10:11.647 [DEBUG] [Thread-3191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:10:11.695 [DEBUG] [Thread-3191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:10:11.695 [DEBUG] [Thread-3191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:10:11.704 [DEBUG] [Thread-3191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:10:11.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:10:11.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:10:11.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
2025-12-25T02:10:11.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:10:11.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:10:11.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:10:11.739 [DEBUG] [Thread-3191] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:10:25.094 [DEBUG] [Thread-3193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:10:27.059 [DEBUG] [Thread-3194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:10:38.658 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:10:38.660 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:10:40.148 [DEBUG] [Thread-3195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:10:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:10:41.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:10:41.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:10:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 10, 8), 0.45, 96.92, 0.0, 21.53, 11.67, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:10:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:10:08
2025-12-25T02:10:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:10:42.781 [DEBUG] [Thread-3196] [transport.py] [_log()] starting thread (client mode): 0xb6b205e0
2025-12-25T02:10:42.781 [DEBUG] [Thread-3196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:10:42.801 [DEBUG] [Thread-3196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:10:42.801 [INFO] [Thread-3196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:10:42.804 [DEBUG] [Thread-3196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:10:42.804 [DEBUG] [Thread-3196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:10:42.804 [DEBUG] [Thread-3196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:10:42.804 [DEBUG] [Thread-3196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:10:42.804 [DEBUG] [Thread-3196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:10:42.804 [DEBUG] [Thread-3196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:10:42.804 [DEBUG] [Thread-3196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:10:42.804 [DEBUG] [Thread-3196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] client lang: <none>
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] server lang: <none>
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] kex follows: False
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] Compression: none
2025-12-25T02:10:42.805 [DEBUG] [Thread-3196] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:10:42.820 [DEBUG] [Thread-3196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:10:42.820 [DEBUG] [Thread-3196] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:10:42.820 [DEBUG] [Thread-3196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:10:42.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:10:42.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:10:42.821 [DEBUG] [Thread-3196] [transport.py] [_log()] userauth is OK
2025-12-25T02:10:42.821 [DEBUG] [Thread-3196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:10:42.821 [DEBUG] [Thread-3196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:10:42.821 [DEBUG] [Thread-3196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:10:42.821 [DEBUG] [Thread-3196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:10:42.830 [INFO] [Thread-3196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:10:42.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:10:43.473 [DEBUG] [Thread-3196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:10:43.474 [DEBUG] [Thread-3196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:10:43.474 [DEBUG] [Thread-3196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:10:43.515 [DEBUG] [Thread-3196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:10:43.515 [DEBUG] [Thread-3196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:10:43.519 [DEBUG] [Thread-3196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:10:43.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:10:43.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:10:43.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:10:43.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:10:43.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:10:43.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:10:43.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:10:43.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:10:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:10:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.007014 -999.00  +11.50  21.43     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.1 21.4 142.4 25.7 13.3 -4.8 13.2 -4.5 13.0 -5.2 13.3 -5.0
2025-12-25T02:10:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:10:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:10:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.007014
2025-12-25T02:10:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:10:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:10:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:10:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:10:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:10:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:10:08', tmtdew=0.45, humidity=96.92, cloud=0.0, wind=21.53, temperature=11.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:10:06.010', atlas_cloud=3, atlas_rain=1, zp_data=[2.66775, 2.5722500000000004, 2.6892500000000004, nan, nan, nan, nan, 2.3552500000000007, 2.352499999999999, nan, 2.3272499999999994, 2.481, 2.3979999999999997, 2.063249999999999, 1.5489999999999995, nan, 2.54425, nan, 2.5759999999999996, 2.0512499999999987, 1.7049999999999983, 1.7417499999999988, 2.489250000000001, nan, nan, nan, nan, nan, 1.46, 1.5470000000000006, 2.8550000000000013, nan, nan], zp_timestamp='2025-12-25T00:06:00')
2025-12-25T02:10:43.544 [DEBUG] [Thread-3196] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:10:43.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:10:43.637 [DEBUG] [Thread-3199] [transport.py] [_log()] starting thread (client mode): 0xb6b22b90
2025-12-25T02:10:43.637 [DEBUG] [Thread-3199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:10:43.652 [DEBUG] [Thread-3199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:10:43.652 [INFO] [Thread-3199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:10:43.659 [DEBUG] [Thread-3199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:10:43.659 [DEBUG] [Thread-3199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:10:43.659 [DEBUG] [Thread-3199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:10:43.659 [DEBUG] [Thread-3199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:10:43.659 [DEBUG] [Thread-3199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] client lang: <none>
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] server lang: <none>
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] kex follows: False
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] Compression: none
2025-12-25T02:10:43.660 [DEBUG] [Thread-3199] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:10:43.717 [DEBUG] [Thread-3199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:10:43.717 [DEBUG] [Thread-3199] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:10:43.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:10:43.719 [DEBUG] [Thread-3199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:10:43.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:10:43.773 [DEBUG] [Thread-3199] [transport.py] [_log()] userauth is OK
2025-12-25T02:10:43.774 [DEBUG] [Thread-3199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:10:43.774 [DEBUG] [Thread-3199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:10:43.774 [DEBUG] [Thread-3199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:10:43.774 [DEBUG] [Thread-3199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:10:43.794 [INFO] [Thread-3199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:10:43.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:10:43.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:10:44.595 [DEBUG] [Thread-3199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:10:44.596 [DEBUG] [Thread-3199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:10:44.644 [DEBUG] [Thread-3199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:10:44.644 [DEBUG] [Thread-3199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:10:44.653 [DEBUG] [Thread-3199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:10:44.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:10:44.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:10:44.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:10:44.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:10:44.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:10:44.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:10:44.690 [DEBUG] [Thread-3199] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:10:55.184 [DEBUG] [Thread-3201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:11:10.233 [DEBUG] [Thread-3202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:11:14.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:11:14.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:11:14.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:11:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 10, 40), 0.45, 96.87, 0.0, 20.54, 11.67, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:11:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:10:40
2025-12-25T02:11:15.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:11:15.688 [DEBUG] [Thread-3203] [transport.py] [_log()] starting thread (client mode): 0xb95d7c70
2025-12-25T02:11:15.689 [DEBUG] [Thread-3203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:11:15.711 [DEBUG] [Thread-3203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:11:15.711 [INFO] [Thread-3203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] client lang: <none>
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] server lang: <none>
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] kex follows: False
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] Compression: none
2025-12-25T02:11:15.714 [DEBUG] [Thread-3203] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:11:15.731 [DEBUG] [Thread-3203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:11:15.732 [DEBUG] [Thread-3203] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:11:15.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:11:15.732 [DEBUG] [Thread-3203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:11:15.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:11:15.735 [DEBUG] [Thread-3203] [transport.py] [_log()] userauth is OK
2025-12-25T02:11:15.735 [DEBUG] [Thread-3203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:11:15.735 [DEBUG] [Thread-3203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:11:15.735 [DEBUG] [Thread-3203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:11:15.735 [DEBUG] [Thread-3203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:11:15.759 [INFO] [Thread-3203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:11:15.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:11:16.386 [DEBUG] [Thread-3203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:11:16.386 [DEBUG] [Thread-3203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:11:16.387 [DEBUG] [Thread-3203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:11:16.428 [DEBUG] [Thread-3203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:11:16.428 [DEBUG] [Thread-3203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:11:16.431 [DEBUG] [Thread-3203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:11:16.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:11:16.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:11:16.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:11:16.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:11:16.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:11:16.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:11:16.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:11:16.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:11:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:11:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.007361 -999.00  +11.50  18.58     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.4 18.6 143.6 24.6 13.3 -4.7 13.2 -4.6 13.0 -4.4 13.3 -6.1
2025-12-25T02:11:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:11:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:11:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.007361
2025-12-25T02:11:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:11:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:11:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:11:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:11:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:11:16.456 [DEBUG] [Thread-3203] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:11:16.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:10:40', tmtdew=0.45, humidity=96.87, cloud=0.0, wind=20.54, temperature=11.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:10:35.990', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:11:16.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:11:16.550 [DEBUG] [Thread-3206] [transport.py] [_log()] starting thread (client mode): 0xb95d4a90
2025-12-25T02:11:16.550 [DEBUG] [Thread-3206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:11:16.569 [DEBUG] [Thread-3206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:11:16.569 [INFO] [Thread-3206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:11:16.576 [DEBUG] [Thread-3206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] client lang: <none>
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] server lang: <none>
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] kex follows: False
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:11:16.577 [DEBUG] [Thread-3206] [transport.py] [_log()] Compression: none
2025-12-25T02:11:16.578 [DEBUG] [Thread-3206] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:11:16.643 [DEBUG] [Thread-3206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:11:16.643 [DEBUG] [Thread-3206] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:11:16.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:11:16.644 [DEBUG] [Thread-3206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:11:16.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:11:16.700 [DEBUG] [Thread-3206] [transport.py] [_log()] userauth is OK
2025-12-25T02:11:16.701 [DEBUG] [Thread-3206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:11:16.701 [DEBUG] [Thread-3206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:11:16.701 [DEBUG] [Thread-3206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:11:16.701 [DEBUG] [Thread-3206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:11:16.716 [INFO] [Thread-3206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:11:16.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:11:16.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:11:17.542 [DEBUG] [Thread-3206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:11:17.542 [DEBUG] [Thread-3206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:11:17.590 [DEBUG] [Thread-3206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:11:17.590 [DEBUG] [Thread-3206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:11:17.599 [DEBUG] [Thread-3206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:11:17.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:11:17.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')
2025-12-25T02:11:17.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:11:17.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:11:17.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:11:17.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:11:17.636 [DEBUG] [Thread-3206] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:11:25.263 [DEBUG] [Thread-3208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:11:27.138 [DEBUG] [Thread-3209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:11:38.863 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:11:38.865 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:11:40.319 [DEBUG] [Thread-3210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:11:47.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:11:47.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:11:47.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:11:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 11, 44), 0.44, 96.95, 0.0, 19.6, 11.72, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:11:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:11:44
2025-12-25T02:11:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:11:48.710 [DEBUG] [Thread-3211] [transport.py] [_log()] starting thread (client mode): 0xb6b22020
2025-12-25T02:11:48.710 [DEBUG] [Thread-3211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:11:48.729 [DEBUG] [Thread-3211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:11:48.729 [INFO] [Thread-3211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] client lang: <none>
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] server lang: <none>
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] kex follows: False
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] Compression: none
2025-12-25T02:11:48.733 [DEBUG] [Thread-3211] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:11:48.747 [DEBUG] [Thread-3211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:11:48.747 [DEBUG] [Thread-3211] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:11:48.747 [DEBUG] [Thread-3211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:11:48.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:11:48.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:11:48.748 [DEBUG] [Thread-3211] [transport.py] [_log()] userauth is OK
2025-12-25T02:11:48.748 [DEBUG] [Thread-3211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:11:48.748 [DEBUG] [Thread-3211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:11:48.748 [DEBUG] [Thread-3211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:11:48.748 [DEBUG] [Thread-3211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:11:48.763 [INFO] [Thread-3211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:11:48.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:11:49.403 [DEBUG] [Thread-3211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:11:49.403 [DEBUG] [Thread-3211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:11:49.403 [DEBUG] [Thread-3211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:11:49.444 [DEBUG] [Thread-3211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:11:49.444 [DEBUG] [Thread-3211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:11:49.446 [DEBUG] [Thread-3211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:11:49.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:11:49.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:11:49.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:11:49.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:11:49.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:11:49.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:11:49.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.008055 -999.00  +11.50  20.67     94  +10.60 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.4 20.7 159.6 25.7 13.3 -5.8 13.2 -5.2 13.0 -6.7 13.3 -6.1
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.008055
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:11:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:11:44', tmtdew=0.44, humidity=96.95, cloud=0.0, wind=19.6, temperature=11.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:11:35.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:11:49.465 [DEBUG] [Thread-3211] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:11:49.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:11:49.548 [DEBUG] [Thread-3214] [transport.py] [_log()] starting thread (client mode): 0xb6b01270
2025-12-25T02:11:49.548 [DEBUG] [Thread-3214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:11:49.563 [DEBUG] [Thread-3214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:11:49.563 [INFO] [Thread-3214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] client lang: <none>
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] server lang: <none>
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] kex follows: False
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] Compression: none
2025-12-25T02:11:49.571 [DEBUG] [Thread-3214] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:11:49.628 [DEBUG] [Thread-3214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:11:49.628 [DEBUG] [Thread-3214] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:11:49.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:11:49.628 [DEBUG] [Thread-3214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:11:49.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:11:49.685 [DEBUG] [Thread-3214] [transport.py] [_log()] userauth is OK
2025-12-25T02:11:49.685 [DEBUG] [Thread-3214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:11:49.685 [DEBUG] [Thread-3214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:11:49.685 [DEBUG] [Thread-3214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:11:49.685 [DEBUG] [Thread-3214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:11:49.699 [INFO] [Thread-3214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:11:49.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:11:49.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:11:50.546 [DEBUG] [Thread-3214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:11:50.546 [DEBUG] [Thread-3214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:11:50.593 [DEBUG] [Thread-3214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:11:50.593 [DEBUG] [Thread-3214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:11:50.601 [DEBUG] [Thread-3214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:11:50.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:11:50.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')
2025-12-25T02:11:50.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:11:50.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:11:50.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:11:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:11:50.632 [DEBUG] [Thread-3214] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:11:55.353 [DEBUG] [Thread-3216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:12:10.406 [DEBUG] [Thread-3217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:12:20.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:12:20.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:12:20.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:12:21.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 12, 16), 0.45, 96.88, 0.0, 20.26, 11.65, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:12:21.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:12:16
2025-12-25T02:12:21.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:12:21.626 [DEBUG] [Thread-3218] [transport.py] [_log()] starting thread (client mode): 0xb95d66e0
2025-12-25T02:12:21.626 [DEBUG] [Thread-3218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:12:21.647 [DEBUG] [Thread-3218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:12:21.648 [INFO] [Thread-3218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:12:21.650 [DEBUG] [Thread-3218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] client lang: <none>
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] server lang: <none>
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] kex follows: False
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] Compression: none
2025-12-25T02:12:21.651 [DEBUG] [Thread-3218] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:12:21.669 [DEBUG] [Thread-3218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:12:21.669 [DEBUG] [Thread-3218] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:12:21.670 [DEBUG] [Thread-3218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:12:21.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:12:21.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:12:21.672 [DEBUG] [Thread-3218] [transport.py] [_log()] userauth is OK
2025-12-25T02:12:21.672 [DEBUG] [Thread-3218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:12:21.672 [DEBUG] [Thread-3218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:12:21.672 [DEBUG] [Thread-3218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:12:21.672 [DEBUG] [Thread-3218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:12:21.696 [INFO] [Thread-3218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:12:21.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:12:22.355 [DEBUG] [Thread-3218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:12:22.356 [DEBUG] [Thread-3218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:12:22.356 [DEBUG] [Thread-3218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:12:22.396 [DEBUG] [Thread-3218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:12:22.396 [DEBUG] [Thread-3218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:12:22.400 [DEBUG] [Thread-3218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:12:22.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:12:22.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:12:22.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:12:22.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:12:22.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:12:22.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:12:22.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:12:22.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:12:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:12:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.008403 -999.00  +11.50  14.26     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 Z...w 15.7 14.3 147.4 21.1 13.3 -5.8 13.2 -5.1 13.0 -5.4 13.3 -5.1
2025-12-25T02:12:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:12:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:12:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.008403
2025-12-25T02:12:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:12:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:12:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:12:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:12:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:12:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:12:16', tmtdew=0.45, humidity=96.88, cloud=0.0, wind=20.26, temperature=11.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:12:06.019', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:12:22.427 [DEBUG] [Thread-3218] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:12:22.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:12:22.522 [DEBUG] [Thread-3221] [transport.py] [_log()] starting thread (client mode): 0xb95d68c0
2025-12-25T02:12:22.522 [DEBUG] [Thread-3221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:12:22.536 [DEBUG] [Thread-3221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:12:22.536 [INFO] [Thread-3221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:12:22.543 [DEBUG] [Thread-3221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] client lang: <none>
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] server lang: <none>
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] kex follows: False
2025-12-25T02:12:22.544 [DEBUG] [Thread-3221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:12:22.545 [DEBUG] [Thread-3221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:12:22.545 [DEBUG] [Thread-3221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:12:22.545 [DEBUG] [Thread-3221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:12:22.545 [DEBUG] [Thread-3221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:12:22.545 [DEBUG] [Thread-3221] [transport.py] [_log()] Compression: none
2025-12-25T02:12:22.545 [DEBUG] [Thread-3221] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:12:22.600 [DEBUG] [Thread-3221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:12:22.600 [DEBUG] [Thread-3221] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:12:22.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:12:22.600 [DEBUG] [Thread-3221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:12:22.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:12:22.658 [DEBUG] [Thread-3221] [transport.py] [_log()] userauth is OK
2025-12-25T02:12:22.658 [DEBUG] [Thread-3221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:12:22.658 [DEBUG] [Thread-3221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:12:22.658 [DEBUG] [Thread-3221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:12:22.658 [DEBUG] [Thread-3221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:12:22.682 [INFO] [Thread-3221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:12:22.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:12:22.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:12:23.498 [DEBUG] [Thread-3221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:12:23.498 [DEBUG] [Thread-3221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:12:23.549 [DEBUG] [Thread-3221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:12:23.550 [DEBUG] [Thread-3221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:12:23.562 [DEBUG] [Thread-3221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:12:23.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:12:23.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')
2025-12-25T02:12:23.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:12:23.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:12:23.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:12:23.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:12:23.600 [DEBUG] [Thread-3221] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:12:25.439 [DEBUG] [Thread-3223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:12:27.227 [DEBUG] [Thread-3224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:12:39.068 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:12:39.069 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:12:40.478 [DEBUG] [Thread-3225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:12:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:12:53.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:12:53.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:12:54.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 12, 48), 0.45, 96.92, 0.0, 21.95, 11.62, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:12:54.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:12:48
2025-12-25T02:12:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:12:54.611 [DEBUG] [Thread-3226] [transport.py] [_log()] starting thread (client mode): 0xb6b21900
2025-12-25T02:12:54.611 [DEBUG] [Thread-3226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:12:54.633 [DEBUG] [Thread-3226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:12:54.633 [INFO] [Thread-3226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:12:54.636 [DEBUG] [Thread-3226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:12:54.636 [DEBUG] [Thread-3226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:12:54.636 [DEBUG] [Thread-3226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:12:54.636 [DEBUG] [Thread-3226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:12:54.636 [DEBUG] [Thread-3226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:12:54.636 [DEBUG] [Thread-3226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] client lang: <none>
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] server lang: <none>
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] kex follows: False
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:12:54.637 [DEBUG] [Thread-3226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:12:54.638 [DEBUG] [Thread-3226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:12:54.638 [DEBUG] [Thread-3226] [transport.py] [_log()] Compression: none
2025-12-25T02:12:54.638 [DEBUG] [Thread-3226] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:12:54.658 [DEBUG] [Thread-3226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:12:54.658 [DEBUG] [Thread-3226] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:12:54.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:12:54.660 [DEBUG] [Thread-3226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:12:54.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:12:54.662 [DEBUG] [Thread-3226] [transport.py] [_log()] userauth is OK
2025-12-25T02:12:54.662 [DEBUG] [Thread-3226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:12:54.662 [DEBUG] [Thread-3226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:12:54.662 [DEBUG] [Thread-3226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:12:54.662 [DEBUG] [Thread-3226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:12:54.687 [INFO] [Thread-3226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:12:54.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:12:55.353 [DEBUG] [Thread-3226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:12:55.353 [DEBUG] [Thread-3226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:12:55.353 [DEBUG] [Thread-3226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:12:55.394 [DEBUG] [Thread-3226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:12:55.394 [DEBUG] [Thread-3226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:12:55.397 [DEBUG] [Thread-3226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:12:55.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:12:55.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:12:55.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:12:55.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:12:55.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:12:55.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:12:55.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:12:55.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:12:55.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:12:55.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.008750 -999.00  +11.50  18.06     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.3 18.1 157.8 22.6 13.3 -5.2 13.2 -5.4 13.0 -5.5 13.3 -6.5
2025-12-25T02:12:55.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:12:55.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:12:55.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.008750
2025-12-25T02:12:55.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:12:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:12:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:12:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:12:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:12:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:12:48', tmtdew=0.45, humidity=96.92, cloud=0.0, wind=21.95, temperature=11.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:12:36.000', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:12:55.418 [DEBUG] [Thread-3226] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:12:55.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:12:55.511 [DEBUG] [Thread-3229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:12:55.515 [DEBUG] [Thread-3230] [transport.py] [_log()] starting thread (client mode): 0xb95903a0
2025-12-25T02:12:55.515 [DEBUG] [Thread-3230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:12:55.530 [DEBUG] [Thread-3230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:12:55.530 [INFO] [Thread-3230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:12:55.537 [DEBUG] [Thread-3230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:12:55.537 [DEBUG] [Thread-3230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] client lang: <none>
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] server lang: <none>
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] kex follows: False
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] Compression: none
2025-12-25T02:12:55.538 [DEBUG] [Thread-3230] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:12:55.601 [DEBUG] [Thread-3230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:12:55.601 [DEBUG] [Thread-3230] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:12:55.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:12:55.602 [DEBUG] [Thread-3230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:12:55.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:12:55.658 [DEBUG] [Thread-3230] [transport.py] [_log()] userauth is OK
2025-12-25T02:12:55.658 [DEBUG] [Thread-3230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:12:55.658 [DEBUG] [Thread-3230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:12:55.658 [DEBUG] [Thread-3230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:12:55.658 [DEBUG] [Thread-3230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:12:55.677 [INFO] [Thread-3230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:12:55.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:12:55.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:12:56.474 [DEBUG] [Thread-3230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:12:56.474 [DEBUG] [Thread-3230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:12:56.522 [DEBUG] [Thread-3230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:12:56.522 [DEBUG] [Thread-3230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:12:56.531 [DEBUG] [Thread-3230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:12:56.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:12:56.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:12:56.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:12:56.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:12:56.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:12:56.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:12:56.567 [DEBUG] [Thread-3230] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:13:10.547 [DEBUG] [Thread-3232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:13:25.582 [DEBUG] [Thread-3233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:13:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:13:26.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:13:26.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:13:27.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 13, 20), 0.43, 97.05, 0.0, 21.05, 11.87, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:13:27.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:13:20
2025-12-25T02:13:27.299 [DEBUG] [Thread-3234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:13:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:13:27.576 [DEBUG] [Thread-3235] [transport.py] [_log()] starting thread (client mode): 0xb95d43a0
2025-12-25T02:13:27.576 [DEBUG] [Thread-3235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:13:27.596 [DEBUG] [Thread-3235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:13:27.596 [INFO] [Thread-3235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:13:27.599 [DEBUG] [Thread-3235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] client lang: <none>
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] server lang: <none>
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] kex follows: False
2025-12-25T02:13:27.600 [DEBUG] [Thread-3235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:13:27.601 [DEBUG] [Thread-3235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:13:27.601 [DEBUG] [Thread-3235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:13:27.601 [DEBUG] [Thread-3235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:13:27.601 [DEBUG] [Thread-3235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:13:27.601 [DEBUG] [Thread-3235] [transport.py] [_log()] Compression: none
2025-12-25T02:13:27.601 [DEBUG] [Thread-3235] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:13:27.620 [DEBUG] [Thread-3235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:13:27.621 [DEBUG] [Thread-3235] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:13:27.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:13:27.622 [DEBUG] [Thread-3235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:13:27.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:13:27.625 [DEBUG] [Thread-3235] [transport.py] [_log()] userauth is OK
2025-12-25T02:13:27.625 [DEBUG] [Thread-3235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:13:27.625 [DEBUG] [Thread-3235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:13:27.625 [DEBUG] [Thread-3235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:13:27.625 [DEBUG] [Thread-3235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:13:27.649 [INFO] [Thread-3235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:13:27.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:13:28.316 [DEBUG] [Thread-3235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:13:28.317 [DEBUG] [Thread-3235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:13:28.317 [DEBUG] [Thread-3235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:13:28.358 [DEBUG] [Thread-3235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:13:28.358 [DEBUG] [Thread-3235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:13:28.361 [DEBUG] [Thread-3235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:13:28.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:13:28.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:13:28.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:13:28.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:13:28.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:13:28.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:13:28.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:13:28.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:13:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:13:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.009097 -999.00  +11.50  13.62     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.6 13.6 159.8 18.0 13.3 -6.3 13.2 -5.9 13.0 -5.2 13.3 -5.2
2025-12-25T02:13:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:13:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:13:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.009097
2025-12-25T02:13:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:13:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:13:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:13:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:13:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:13:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:13:20', tmtdew=0.43, humidity=97.05, cloud=0.0, wind=21.05, temperature=11.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:13:05.981', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:13:28.389 [DEBUG] [Thread-3235] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:13:28.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:13:28.482 [DEBUG] [Thread-3238] [transport.py] [_log()] starting thread (client mode): 0xb6b23580
2025-12-25T02:13:28.482 [DEBUG] [Thread-3238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:13:28.497 [DEBUG] [Thread-3238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:13:28.497 [INFO] [Thread-3238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:13:28.504 [DEBUG] [Thread-3238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:13:28.505 [DEBUG] [Thread-3238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:13:28.505 [DEBUG] [Thread-3238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:13:28.505 [DEBUG] [Thread-3238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:13:28.505 [DEBUG] [Thread-3238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:13:28.505 [DEBUG] [Thread-3238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:13:28.505 [DEBUG] [Thread-3238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:13:28.505 [DEBUG] [Thread-3238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:13:28.505 [DEBUG] [Thread-3238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:13:28.506 [DEBUG] [Thread-3238] [transport.py] [_log()] client lang: <none>
2025-12-25T02:13:28.506 [DEBUG] [Thread-3238] [transport.py] [_log()] server lang: <none>
2025-12-25T02:13:28.506 [DEBUG] [Thread-3238] [transport.py] [_log()] kex follows: False
2025-12-25T02:13:28.506 [DEBUG] [Thread-3238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:13:28.506 [DEBUG] [Thread-3238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:13:28.506 [DEBUG] [Thread-3238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:13:28.506 [DEBUG] [Thread-3238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:13:28.506 [DEBUG] [Thread-3238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:13:28.507 [DEBUG] [Thread-3238] [transport.py] [_log()] Compression: none
2025-12-25T02:13:28.507 [DEBUG] [Thread-3238] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:13:28.568 [DEBUG] [Thread-3238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:13:28.568 [DEBUG] [Thread-3238] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:13:28.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:13:28.569 [DEBUG] [Thread-3238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:13:28.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:13:28.626 [DEBUG] [Thread-3238] [transport.py] [_log()] userauth is OK
2025-12-25T02:13:28.626 [DEBUG] [Thread-3238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:13:28.626 [DEBUG] [Thread-3238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:13:28.626 [DEBUG] [Thread-3238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:13:28.626 [DEBUG] [Thread-3238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:13:28.644 [INFO] [Thread-3238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:13:28.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:13:28.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:13:29.462 [DEBUG] [Thread-3238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:13:29.463 [DEBUG] [Thread-3238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:13:29.512 [DEBUG] [Thread-3238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:13:29.512 [DEBUG] [Thread-3238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:13:29.521 [DEBUG] [Thread-3238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:13:29.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:13:29.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:13:29.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:13:29.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:13:29.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:13:29.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:13:29.558 [DEBUG] [Thread-3238] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:13:39.272 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:13:39.273 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:13:40.616 [DEBUG] [Thread-3240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:13:55.662 [DEBUG] [Thread-3241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:13:59.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:13:59.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:13:59.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:14:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 13, 52), 0.44, 96.96, 0.0, 21.79, 11.7, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:14:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:13:52
2025-12-25T02:14:00.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:14:00.555 [DEBUG] [Thread-3242] [transport.py] [_log()] starting thread (client mode): 0xb6b20700
2025-12-25T02:14:00.555 [DEBUG] [Thread-3242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:14:00.575 [DEBUG] [Thread-3242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:14:00.575 [INFO] [Thread-3242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] client lang: <none>
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] server lang: <none>
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] kex follows: False
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:14:00.578 [DEBUG] [Thread-3242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:14:00.579 [DEBUG] [Thread-3242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:14:00.579 [DEBUG] [Thread-3242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:14:00.579 [DEBUG] [Thread-3242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:14:00.579 [DEBUG] [Thread-3242] [transport.py] [_log()] Compression: none
2025-12-25T02:14:00.579 [DEBUG] [Thread-3242] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:14:00.597 [DEBUG] [Thread-3242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:14:00.597 [DEBUG] [Thread-3242] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:14:00.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:14:00.599 [DEBUG] [Thread-3242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:14:00.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:14:00.600 [DEBUG] [Thread-3242] [transport.py] [_log()] userauth is OK
2025-12-25T02:14:00.601 [DEBUG] [Thread-3242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:14:00.601 [DEBUG] [Thread-3242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:14:00.601 [DEBUG] [Thread-3242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:14:00.601 [DEBUG] [Thread-3242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:14:00.626 [INFO] [Thread-3242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:14:00.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:14:01.269 [DEBUG] [Thread-3242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:14:01.269 [DEBUG] [Thread-3242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:14:01.270 [DEBUG] [Thread-3242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:14:01.310 [DEBUG] [Thread-3242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:14:01.310 [DEBUG] [Thread-3242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:14:01.313 [DEBUG] [Thread-3242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:14:01.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:14:01.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:14:01.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:14:01.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:14:01.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:14:01.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:14:01.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:14:01.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:14:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:14:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.009444 -999.00  +11.50  13.33     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.7 13.3 153.8 19.7 13.3 -6.3 13.2 -4.8 13.0 -5.8 13.3 -6.1
2025-12-25T02:14:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:14:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:14:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.009444
2025-12-25T02:14:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:14:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:14:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:14:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:14:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:14:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:13:52', tmtdew=0.44, humidity=96.96, cloud=0.0, wind=21.79, temperature=11.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:13:35.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:14:01.342 [DEBUG] [Thread-3242] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:14:01.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:14:01.438 [DEBUG] [Thread-3245] [transport.py] [_log()] starting thread (client mode): 0xb6b22c20
2025-12-25T02:14:01.439 [DEBUG] [Thread-3245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:14:01.453 [DEBUG] [Thread-3245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:14:01.453 [INFO] [Thread-3245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:14:01.460 [DEBUG] [Thread-3245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:14:01.460 [DEBUG] [Thread-3245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] client lang: <none>
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] server lang: <none>
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] kex follows: False
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] Compression: none
2025-12-25T02:14:01.461 [DEBUG] [Thread-3245] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:14:01.522 [DEBUG] [Thread-3245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:14:01.523 [DEBUG] [Thread-3245] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:14:01.523 [DEBUG] [Thread-3245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:14:01.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:14:01.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:14:01.578 [DEBUG] [Thread-3245] [transport.py] [_log()] userauth is OK
2025-12-25T02:14:01.578 [DEBUG] [Thread-3245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:14:01.578 [DEBUG] [Thread-3245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:14:01.579 [DEBUG] [Thread-3245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:14:01.579 [DEBUG] [Thread-3245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:14:01.596 [INFO] [Thread-3245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:14:01.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:14:01.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:14:02.459 [DEBUG] [Thread-3245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:14:02.460 [DEBUG] [Thread-3245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:14:02.507 [DEBUG] [Thread-3245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:14:02.507 [DEBUG] [Thread-3245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:14:02.516 [DEBUG] [Thread-3245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:14:02.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:14:02.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:14: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') -> 00000000
2025-12-25T02:14:02.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:14:02.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:14:02.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:14:02.553 [DEBUG] [Thread-3245] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:14:10.700 [DEBUG] [Thread-3247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:14:25.747 [DEBUG] [Thread-3248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:14:27.373 [DEBUG] [Thread-3249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:14:32.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:14:32.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:14:32.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:14:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 14, 24), 0.44, 96.96, 0.0, 22.53, 11.67, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:14:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:14:24
2025-12-25T02:14:33.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:14:33.536 [DEBUG] [Thread-3250] [transport.py] [_log()] starting thread (client mode): 0xb6b23310
2025-12-25T02:14:33.536 [DEBUG] [Thread-3250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:14:33.556 [DEBUG] [Thread-3250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:14:33.556 [INFO] [Thread-3250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] client lang: <none>
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] server lang: <none>
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] kex follows: False
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] Compression: none
2025-12-25T02:14:33.559 [DEBUG] [Thread-3250] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:14:33.579 [DEBUG] [Thread-3250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:14:33.579 [DEBUG] [Thread-3250] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:14:33.580 [DEBUG] [Thread-3250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:14:33.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:14:33.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:14:33.582 [DEBUG] [Thread-3250] [transport.py] [_log()] userauth is OK
2025-12-25T02:14:33.582 [DEBUG] [Thread-3250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:14:33.582 [DEBUG] [Thread-3250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:14:33.582 [DEBUG] [Thread-3250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:14:33.582 [DEBUG] [Thread-3250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:14:33.607 [INFO] [Thread-3250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:14:33.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:14:34.233 [DEBUG] [Thread-3250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:14:34.234 [DEBUG] [Thread-3250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:14:34.234 [DEBUG] [Thread-3250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:14:34.275 [DEBUG] [Thread-3250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:14:34.275 [DEBUG] [Thread-3250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:14:34.279 [DEBUG] [Thread-3250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:14:34.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:14:34.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:14:34.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:14:34.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:14:34.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:14:34.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:14:34.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:14:34.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:14:34.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:14:34.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.009792 -999.00  +11.50  14.29     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.1 14.3 144.8 18.5 13.3 -4.9 13.2 -2.9 13.0 -4.7 13.3 -3.8
2025-12-25T02:14:34.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:14:34.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:14:34.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.009792
2025-12-25T02:14:34.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:14:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:14:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:14:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:14:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:14:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:14:24', tmtdew=0.44, humidity=96.96, cloud=0.0, wind=22.53, temperature=11.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:14:06.029', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:14:34.306 [DEBUG] [Thread-3250] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:14:34.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:14:34.412 [DEBUG] [Thread-3253] [transport.py] [_log()] starting thread (client mode): 0xb95b1de0
2025-12-25T02:14:34.412 [DEBUG] [Thread-3253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:14:34.426 [DEBUG] [Thread-3253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:14:34.426 [INFO] [Thread-3253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:14:34.434 [DEBUG] [Thread-3253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:14:34.434 [DEBUG] [Thread-3253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:14:34.434 [DEBUG] [Thread-3253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:14:34.434 [DEBUG] [Thread-3253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:14:34.434 [DEBUG] [Thread-3253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:14:34.434 [DEBUG] [Thread-3253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] client lang: <none>
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] server lang: <none>
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] kex follows: False
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:14:34.435 [DEBUG] [Thread-3253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:14:34.436 [DEBUG] [Thread-3253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:14:34.436 [DEBUG] [Thread-3253] [transport.py] [_log()] Compression: none
2025-12-25T02:14:34.436 [DEBUG] [Thread-3253] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:14:34.493 [DEBUG] [Thread-3253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:14:34.494 [DEBUG] [Thread-3253] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:14:34.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:14:34.495 [DEBUG] [Thread-3253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:14:34.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:14:34.549 [DEBUG] [Thread-3253] [transport.py] [_log()] userauth is OK
2025-12-25T02:14:34.550 [DEBUG] [Thread-3253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:14:34.550 [DEBUG] [Thread-3253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:14:34.550 [DEBUG] [Thread-3253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:14:34.550 [DEBUG] [Thread-3253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:14:34.573 [INFO] [Thread-3253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:14:34.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:14:34.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:14:35.387 [DEBUG] [Thread-3253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:14:35.387 [DEBUG] [Thread-3253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:14:35.435 [DEBUG] [Thread-3253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:14:35.435 [DEBUG] [Thread-3253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:14:35.444 [DEBUG] [Thread-3253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:14:35.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:14:35.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:14:35.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:14:35.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:14:35.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:14:35.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:14:35.477 [DEBUG] [Thread-3253] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:14:39.481 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:14:39.482 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:14:40.779 [DEBUG] [Thread-3255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:14:55.835 [DEBUG] [Thread-3256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:15:05.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:15:05.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:15:05.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:15:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 14, 56), 0.44, 96.96, 0.0, 24.63, 11.69, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:15:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:14:56
2025-12-25T02:15:06.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:15:06.488 [DEBUG] [Thread-3257] [transport.py] [_log()] starting thread (client mode): 0xb957a4a0
2025-12-25T02:15:06.488 [DEBUG] [Thread-3257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:15:06.507 [DEBUG] [Thread-3257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:15:06.507 [INFO] [Thread-3257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] client lang: <none>
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] server lang: <none>
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] kex follows: False
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:15:06.509 [DEBUG] [Thread-3257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:15:06.510 [DEBUG] [Thread-3257] [transport.py] [_log()] Compression: none
2025-12-25T02:15:06.510 [DEBUG] [Thread-3257] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:15:06.518 [DEBUG] [Thread-3257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:15:06.518 [DEBUG] [Thread-3257] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:15:06.518 [DEBUG] [Thread-3257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:15:06.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:15:06.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:15:06.519 [DEBUG] [Thread-3257] [transport.py] [_log()] userauth is OK
2025-12-25T02:15:06.519 [DEBUG] [Thread-3257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:15:06.519 [DEBUG] [Thread-3257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:15:06.519 [DEBUG] [Thread-3257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:15:06.519 [DEBUG] [Thread-3257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:15:06.531 [INFO] [Thread-3257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:15:06.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:15:08.479 [DEBUG] [Thread-3257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:15:08.479 [DEBUG] [Thread-3257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:15:08.479 [DEBUG] [Thread-3257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:15:08.520 [DEBUG] [Thread-3257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:15:08.520 [DEBUG] [Thread-3257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:15:08.523 [DEBUG] [Thread-3257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:15:08.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:15:08.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:15:08.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:15:08.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:15:08.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:15:08.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:15:08.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:15:08.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:15:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:15:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.010138 -999.00  +11.60  13.42     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.1 13.4 163.0 18.2 13.4 -3.2 13.2 -4.1 13.1 -3.3 13.4 -3.7
2025-12-25T02:15:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:15:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:15:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.010138
2025-12-25T02:15:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:15:08.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:15:08.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:15:08.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:15:08.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:15:08.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:14:56', tmtdew=0.44, humidity=96.96, cloud=0.0, wind=24.63, temperature=11.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:14:35.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:15:08.550 [DEBUG] [Thread-3257] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:15:08.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:15:08.644 [DEBUG] [Thread-3260] [transport.py] [_log()] starting thread (client mode): 0xb6b20820
2025-12-25T02:15:08.644 [DEBUG] [Thread-3260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:15:08.658 [DEBUG] [Thread-3260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:15:08.659 [INFO] [Thread-3260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:15:08.666 [DEBUG] [Thread-3260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:15:08.666 [DEBUG] [Thread-3260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:15:08.666 [DEBUG] [Thread-3260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] client lang: <none>
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] server lang: <none>
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] kex follows: False
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:15:08.667 [DEBUG] [Thread-3260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:15:08.668 [DEBUG] [Thread-3260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:15:08.668 [DEBUG] [Thread-3260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:15:08.668 [DEBUG] [Thread-3260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:15:08.668 [DEBUG] [Thread-3260] [transport.py] [_log()] Compression: none
2025-12-25T02:15:08.668 [DEBUG] [Thread-3260] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:15:08.726 [DEBUG] [Thread-3260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:15:08.727 [DEBUG] [Thread-3260] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:15:08.727 [DEBUG] [Thread-3260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:15:08.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:15:08.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:15:08.782 [DEBUG] [Thread-3260] [transport.py] [_log()] userauth is OK
2025-12-25T02:15:08.782 [DEBUG] [Thread-3260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:15:08.783 [DEBUG] [Thread-3260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:15:08.783 [DEBUG] [Thread-3260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:15:08.783 [DEBUG] [Thread-3260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:15:08.802 [INFO] [Thread-3260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:15:08.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:15:08.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:15:09.642 [DEBUG] [Thread-3260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:15:09.642 [DEBUG] [Thread-3260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:15:09.690 [DEBUG] [Thread-3260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:15:09.690 [DEBUG] [Thread-3260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:15:09.699 [DEBUG] [Thread-3260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:15:09.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:15:09.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:15:09.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
2025-12-25T02:15:09.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:15:09.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:15:09.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:15:09.736 [DEBUG] [Thread-3260] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:15:10.865 [DEBUG] [Thread-3262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:15:25.917 [DEBUG] [Thread-3263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:15:27.435 [DEBUG] [Thread-3264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:15:39.694 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:15:39.695 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:15:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:15:39.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:15:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:15:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 15, 28), 0.44, 96.97, 0.0, 23.06, 11.69, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:15:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:15:28
2025-12-25T02:15:40.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:15:40.784 [DEBUG] [Thread-3265] [transport.py] [_log()] starting thread (client mode): 0xb6b17850
2025-12-25T02:15:40.784 [DEBUG] [Thread-3265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:15:40.804 [DEBUG] [Thread-3265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:15:40.804 [INFO] [Thread-3265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] client lang: <none>
2025-12-25T02:15:40.807 [DEBUG] [Thread-3265] [transport.py] [_log()] server lang: <none>
2025-12-25T02:15:40.808 [DEBUG] [Thread-3265] [transport.py] [_log()] kex follows: False
2025-12-25T02:15:40.808 [DEBUG] [Thread-3265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:15:40.808 [DEBUG] [Thread-3265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:15:40.808 [DEBUG] [Thread-3265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:15:40.808 [DEBUG] [Thread-3265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:15:40.808 [DEBUG] [Thread-3265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:15:40.808 [DEBUG] [Thread-3265] [transport.py] [_log()] Compression: none
2025-12-25T02:15:40.808 [DEBUG] [Thread-3265] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:15:40.824 [DEBUG] [Thread-3265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:15:40.824 [DEBUG] [Thread-3265] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:15:40.824 [DEBUG] [Thread-3265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:15:40.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:15:40.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:15:40.825 [DEBUG] [Thread-3265] [transport.py] [_log()] userauth is OK
2025-12-25T02:15:40.825 [DEBUG] [Thread-3265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:15:40.825 [DEBUG] [Thread-3265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:15:40.825 [DEBUG] [Thread-3265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:15:40.825 [DEBUG] [Thread-3265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:15:40.837 [INFO] [Thread-3265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:15:40.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:15:40.949 [DEBUG] [Thread-3267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:15:41.473 [DEBUG] [Thread-3265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:15:41.473 [DEBUG] [Thread-3265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:15:41.473 [DEBUG] [Thread-3265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:15:41.513 [DEBUG] [Thread-3265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:15:41.513 [DEBUG] [Thread-3265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:15:41.515 [DEBUG] [Thread-3265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:15:41.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:15:41.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:15:41.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:15:41.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:15:41.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:15:41.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:15:41.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:15:41.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:15:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:15:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.010138 -999.00  +11.60  13.42     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.1 13.4 163.0 18.2 13.4 -3.2 13.2 -4.1 13.1 -3.3 13.4 -3.7
2025-12-25T02:15:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:15:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:15:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.010138
2025-12-25T02:15:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:15:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:15:41.534 [DEBUG] [Thread-3265] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:15:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:15:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:15:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:15:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:15:28', tmtdew=0.44, humidity=96.97, cloud=0.0, wind=23.06, temperature=11.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:14:35.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:15:41.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:15:41.622 [DEBUG] [Thread-3269] [transport.py] [_log()] starting thread (client mode): 0xb95f1450
2025-12-25T02:15:41.622 [DEBUG] [Thread-3269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:15:41.636 [DEBUG] [Thread-3269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:15:41.636 [INFO] [Thread-3269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] client lang: <none>
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] server lang: <none>
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] kex follows: False
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] Compression: none
2025-12-25T02:15:41.643 [DEBUG] [Thread-3269] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:15:41.700 [DEBUG] [Thread-3269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:15:41.700 [DEBUG] [Thread-3269] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:15:41.700 [DEBUG] [Thread-3269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:15:41.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:15:41.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:15:41.757 [DEBUG] [Thread-3269] [transport.py] [_log()] userauth is OK
2025-12-25T02:15:41.757 [DEBUG] [Thread-3269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:15:41.757 [DEBUG] [Thread-3269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:15:41.757 [DEBUG] [Thread-3269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:15:41.757 [DEBUG] [Thread-3269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:15:41.771 [INFO] [Thread-3269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:15:41.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:15:41.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:15:42.582 [DEBUG] [Thread-3269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:15:42.582 [DEBUG] [Thread-3269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:15:42.629 [DEBUG] [Thread-3269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:15:42.629 [DEBUG] [Thread-3269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:15:42.637 [DEBUG] [Thread-3269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:15:42.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:15:42.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:15:42.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
2025-12-25T02:15:42.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:15:42.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:15:42.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:15:42.668 [DEBUG] [Thread-3269] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:15:55.979 [DEBUG] [Thread-3271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:16:11.032 [DEBUG] [Thread-3272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:16:12.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:16:12.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:16:12.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:16:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 16), 0.44, 96.93, 0.0, 21.76, 11.64, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:16:13.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:16:00
2025-12-25T02:16:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:16:13.662 [DEBUG] [Thread-3273] [transport.py] [_log()] starting thread (client mode): 0xb9579030
2025-12-25T02:16:13.662 [DEBUG] [Thread-3273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:16:13.681 [DEBUG] [Thread-3273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:16:13.681 [INFO] [Thread-3273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:16:13.684 [DEBUG] [Thread-3273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] client lang: <none>
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] server lang: <none>
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] kex follows: False
2025-12-25T02:16:13.685 [DEBUG] [Thread-3273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:16:13.686 [DEBUG] [Thread-3273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:16:13.686 [DEBUG] [Thread-3273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:16:13.686 [DEBUG] [Thread-3273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:16:13.686 [DEBUG] [Thread-3273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:16:13.686 [DEBUG] [Thread-3273] [transport.py] [_log()] Compression: none
2025-12-25T02:16:13.686 [DEBUG] [Thread-3273] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:16:13.706 [DEBUG] [Thread-3273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:16:13.707 [DEBUG] [Thread-3273] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:16:13.708 [DEBUG] [Thread-3273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:16:13.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:16:13.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:16:13.710 [DEBUG] [Thread-3273] [transport.py] [_log()] userauth is OK
2025-12-25T02:16:13.710 [DEBUG] [Thread-3273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:16:13.710 [DEBUG] [Thread-3273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:16:13.710 [DEBUG] [Thread-3273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:16:13.710 [DEBUG] [Thread-3273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:16:13.733 [INFO] [Thread-3273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:16:13.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:16:14.389 [DEBUG] [Thread-3273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:16:14.390 [DEBUG] [Thread-3273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:16:14.390 [DEBUG] [Thread-3273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:16:14.431 [DEBUG] [Thread-3273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:16:14.431 [DEBUG] [Thread-3273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:16:14.434 [DEBUG] [Thread-3273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:16:14.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:16:14.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:16:14.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:16:14.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:16:14.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:16:14.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:16:14.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:16:14.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:16:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.010833 -999.00  +11.50  16.45     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.3 16.4 147.6 27.8 13.3 -4.6 13.2 -6.7 13.0 -4.3 13.3 -5.1
2025-12-25T02:16:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:16:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:16:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.010833
2025-12-25T02:16:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:16:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:16:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:16:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:16:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:16:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:16:00', tmtdew=0.44, humidity=96.93, cloud=0.0, wind=21.76, temperature=11.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:15:35.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:16:14.461 [DEBUG] [Thread-3273] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:16:14.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:16:14.554 [DEBUG] [Thread-3276] [transport.py] [_log()] starting thread (client mode): 0xb6b16f80
2025-12-25T02:16:14.554 [DEBUG] [Thread-3276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:16:14.568 [DEBUG] [Thread-3276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:16:14.568 [INFO] [Thread-3276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:16:14.576 [DEBUG] [Thread-3276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:16:14.576 [DEBUG] [Thread-3276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:16:14.576 [DEBUG] [Thread-3276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:16:14.576 [DEBUG] [Thread-3276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] client lang: <none>
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] server lang: <none>
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] kex follows: False
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] Compression: none
2025-12-25T02:16:14.577 [DEBUG] [Thread-3276] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:16:14.634 [DEBUG] [Thread-3276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:16:14.634 [DEBUG] [Thread-3276] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:16:14.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:16:14.636 [DEBUG] [Thread-3276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:16:14.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:16:14.690 [DEBUG] [Thread-3276] [transport.py] [_log()] userauth is OK
2025-12-25T02:16:14.691 [DEBUG] [Thread-3276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:16:14.691 [DEBUG] [Thread-3276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:16:14.691 [DEBUG] [Thread-3276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:16:14.691 [DEBUG] [Thread-3276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:16:14.710 [INFO] [Thread-3276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:16:14.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:16:14.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:16:15.541 [DEBUG] [Thread-3276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:16:15.542 [DEBUG] [Thread-3276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:16:15.591 [DEBUG] [Thread-3276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:16:15.591 [DEBUG] [Thread-3276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:16:15.600 [DEBUG] [Thread-3276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:16:15.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:16:15.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:16:15.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:16:15.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:16:15.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:16:15.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:16:15.634 [DEBUG] [Thread-3276] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:16:26.064 [DEBUG] [Thread-3278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:16:27.494 [DEBUG] [Thread-3279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:16:39.976 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:16:39.978 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:16:41.116 [DEBUG] [Thread-3280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:16:45.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:16:45.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:16: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
2025-12-25T02:16:46.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 16, 32), 0.44, 96.98, 0.0, 23.52, 11.62, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:16:46.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:16:32
2025-12-25T02:16:46.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:16:46.633 [DEBUG] [Thread-3281] [transport.py] [_log()] starting thread (client mode): 0xb9558d30
2025-12-25T02:16:46.633 [DEBUG] [Thread-3281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:16:46.649 [DEBUG] [Thread-3281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:16:46.649 [INFO] [Thread-3281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] client lang: <none>
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] server lang: <none>
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] kex follows: False
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:16:46.652 [DEBUG] [Thread-3281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:16:46.653 [DEBUG] [Thread-3281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:16:46.653 [DEBUG] [Thread-3281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:16:46.653 [DEBUG] [Thread-3281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:16:46.653 [DEBUG] [Thread-3281] [transport.py] [_log()] Compression: none
2025-12-25T02:16:46.653 [DEBUG] [Thread-3281] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:16:46.671 [DEBUG] [Thread-3281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:16:46.671 [DEBUG] [Thread-3281] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:16:46.672 [DEBUG] [Thread-3281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:16:46.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:16:46.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:16:46.674 [DEBUG] [Thread-3281] [transport.py] [_log()] userauth is OK
2025-12-25T02:16:46.674 [DEBUG] [Thread-3281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:16:46.674 [DEBUG] [Thread-3281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:16:46.674 [DEBUG] [Thread-3281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:16:46.674 [DEBUG] [Thread-3281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:16:46.698 [INFO] [Thread-3281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:16:46.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:16:47.363 [DEBUG] [Thread-3281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:16:47.363 [DEBUG] [Thread-3281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:16:47.363 [DEBUG] [Thread-3281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:16:47.404 [DEBUG] [Thread-3281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:16:47.404 [DEBUG] [Thread-3281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:16:47.408 [DEBUG] [Thread-3281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:16:47.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:16:47.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:16:47.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:16:47.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:16:47.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:16:47.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:16:47.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:16:47.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:16:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:16:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.011180 -999.00  +11.50  19.48     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.6 19.5 155.0 22.0 13.3 -6.9 13.2 -3.2 13.0 -7.4 13.3 -5.2
2025-12-25T02:16:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:16:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:16:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.011180
2025-12-25T02:16:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:16:47.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:16:47.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:16:47.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:16:47.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:16:47.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:16:32', tmtdew=0.44, humidity=96.98, cloud=0.0, wind=23.52, temperature=11.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:16:05.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:16:47.428 [DEBUG] [Thread-3281] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:16:47.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:16:47.521 [DEBUG] [Thread-3284] [transport.py] [_log()] starting thread (client mode): 0xb6b23160
2025-12-25T02:16:47.521 [DEBUG] [Thread-3284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:16:47.536 [DEBUG] [Thread-3284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:16:47.536 [INFO] [Thread-3284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:16:47.543 [DEBUG] [Thread-3284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:16:47.543 [DEBUG] [Thread-3284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] client lang: <none>
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] server lang: <none>
2025-12-25T02:16:47.544 [DEBUG] [Thread-3284] [transport.py] [_log()] kex follows: False
2025-12-25T02:16:47.545 [DEBUG] [Thread-3284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:16:47.545 [DEBUG] [Thread-3284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:16:47.545 [DEBUG] [Thread-3284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:16:47.545 [DEBUG] [Thread-3284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:16:47.545 [DEBUG] [Thread-3284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:16:47.546 [DEBUG] [Thread-3284] [transport.py] [_log()] Compression: none
2025-12-25T02:16:47.546 [DEBUG] [Thread-3284] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:16:47.602 [DEBUG] [Thread-3284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:16:47.602 [DEBUG] [Thread-3284] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:16:47.603 [DEBUG] [Thread-3284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:16:47.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:16:47.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:16:47.658 [DEBUG] [Thread-3284] [transport.py] [_log()] userauth is OK
2025-12-25T02:16:47.658 [DEBUG] [Thread-3284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:16:47.658 [DEBUG] [Thread-3284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:16:47.658 [DEBUG] [Thread-3284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:16:47.658 [DEBUG] [Thread-3284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:16:47.677 [INFO] [Thread-3284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:16:47.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:16:47.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:16:48.526 [DEBUG] [Thread-3284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:16:48.526 [DEBUG] [Thread-3284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:16:48.574 [DEBUG] [Thread-3284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:16:48.574 [DEBUG] [Thread-3284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:16:48.583 [DEBUG] [Thread-3284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:16:48.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:16:48.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')
2025-12-25T02:16:48.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:16:48.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:16:48.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:16:48.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:16:48.618 [DEBUG] [Thread-3284] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:16:56.153 [DEBUG] [Thread-3286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:17:11.201 [DEBUG] [Thread-3287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:17:18.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:17:18.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:17:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:17:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 17, 4), 0.43, 97.0, 0.0, 24.23, 11.64, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:17:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:17:04
2025-12-25T02:17:19.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:17:19.578 [DEBUG] [Thread-3288] [transport.py] [_log()] starting thread (client mode): 0xb6b174f0
2025-12-25T02:17:19.578 [DEBUG] [Thread-3288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:17:19.599 [DEBUG] [Thread-3288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:17:19.599 [INFO] [Thread-3288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:17:19.602 [DEBUG] [Thread-3288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:17:19.602 [DEBUG] [Thread-3288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:17:19.602 [DEBUG] [Thread-3288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] client lang: <none>
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] server lang: <none>
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] kex follows: False
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:17:19.603 [DEBUG] [Thread-3288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:17:19.604 [DEBUG] [Thread-3288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:17:19.604 [DEBUG] [Thread-3288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:17:19.604 [DEBUG] [Thread-3288] [transport.py] [_log()] Compression: none
2025-12-25T02:17:19.604 [DEBUG] [Thread-3288] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:17:19.624 [DEBUG] [Thread-3288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:17:19.624 [DEBUG] [Thread-3288] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:17:19.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:17:19.625 [DEBUG] [Thread-3288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:17:19.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:17:19.627 [DEBUG] [Thread-3288] [transport.py] [_log()] userauth is OK
2025-12-25T02:17:19.628 [DEBUG] [Thread-3288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:17:19.628 [DEBUG] [Thread-3288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:17:19.628 [DEBUG] [Thread-3288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:17:19.628 [DEBUG] [Thread-3288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:17:19.651 [INFO] [Thread-3288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:17:19.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:17:20.293 [DEBUG] [Thread-3288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:17:20.293 [DEBUG] [Thread-3288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:17:20.294 [DEBUG] [Thread-3288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:17:20.334 [DEBUG] [Thread-3288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:17:20.334 [DEBUG] [Thread-3288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:17:20.337 [DEBUG] [Thread-3288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:17:20.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:17:20.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:17:20.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:17:20.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:17:20.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:17:20.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:17:20.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:17:20.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:17:20.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:17:20.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.011528 -999.00  +11.50  15.82     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 Z...W 16.2 15.8 146.4 23.5 13.3 -3.7 13.2 -4.6 13.0 -3.5 13.3 -3.9
2025-12-25T02:17:20.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:17:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:17:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.011528
2025-12-25T02:17:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:17:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:17:20.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:17:20.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:17:20.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:17:20.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:17:04', tmtdew=0.43, humidity=97.0, cloud=0.0, wind=24.23, temperature=11.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:16:36.019', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:17:20.361 [DEBUG] [Thread-3288] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:17:20.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:17:20.455 [DEBUG] [Thread-3291] [transport.py] [_log()] starting thread (client mode): 0xb95f13c0
2025-12-25T02:17:20.456 [DEBUG] [Thread-3291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:17:20.469 [DEBUG] [Thread-3291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:17:20.470 [INFO] [Thread-3291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:17:20.477 [DEBUG] [Thread-3291] [transport.py] [_log()] client lang: <none>
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] server lang: <none>
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] kex follows: False
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] Compression: none
2025-12-25T02:17:20.478 [DEBUG] [Thread-3291] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:17:20.533 [DEBUG] [Thread-3291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:17:20.534 [DEBUG] [Thread-3291] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:17:20.534 [DEBUG] [Thread-3291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:17:20.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:17:20.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:17:20.590 [DEBUG] [Thread-3291] [transport.py] [_log()] userauth is OK
2025-12-25T02:17:20.590 [DEBUG] [Thread-3291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:17:20.591 [DEBUG] [Thread-3291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:17:20.591 [DEBUG] [Thread-3291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:17:20.591 [DEBUG] [Thread-3291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:17:20.609 [INFO] [Thread-3291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:17:20.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:17:20.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:17:21.435 [DEBUG] [Thread-3291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:17:21.435 [DEBUG] [Thread-3291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:17:21.483 [DEBUG] [Thread-3291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:17:21.483 [DEBUG] [Thread-3291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:17:21.493 [DEBUG] [Thread-3291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:17:21.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:17: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')
2025-12-25T02:17:21.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:17:21.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:17:21.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:17:21.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:17:21.529 [DEBUG] [Thread-3291] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:17:26.237 [DEBUG] [Thread-3293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:17:27.568 [DEBUG] [Thread-3294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:17:40.178 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:17:40.178 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:17:41.295 [DEBUG] [Thread-3295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:17:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:17:51.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:17:51.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:17:52.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 17, 36), 0.44, 96.98, 0.0, 20.89, 11.59, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:17:52.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:17:36
2025-12-25T02:17:52.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:17:52.521 [DEBUG] [Thread-3296] [transport.py] [_log()] starting thread (client mode): 0xb95f3a00
2025-12-25T02:17:52.521 [DEBUG] [Thread-3296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:17:52.541 [DEBUG] [Thread-3296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:17:52.541 [INFO] [Thread-3296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] client lang: <none>
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] server lang: <none>
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] kex follows: False
2025-12-25T02:17:52.542 [DEBUG] [Thread-3296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:17:52.543 [DEBUG] [Thread-3296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:17:52.543 [DEBUG] [Thread-3296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:17:52.543 [DEBUG] [Thread-3296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:17:52.543 [DEBUG] [Thread-3296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:17:52.543 [DEBUG] [Thread-3296] [transport.py] [_log()] Compression: none
2025-12-25T02:17:52.543 [DEBUG] [Thread-3296] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:17:52.556 [DEBUG] [Thread-3296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:17:52.556 [DEBUG] [Thread-3296] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:17:52.557 [DEBUG] [Thread-3296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:17:52.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:17:52.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:17:52.558 [DEBUG] [Thread-3296] [transport.py] [_log()] userauth is OK
2025-12-25T02:17:52.558 [DEBUG] [Thread-3296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:17:52.558 [DEBUG] [Thread-3296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:17:52.559 [DEBUG] [Thread-3296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:17:52.559 [DEBUG] [Thread-3296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:17:52.576 [INFO] [Thread-3296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:17:52.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:17:53.311 [DEBUG] [Thread-3296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:17:53.312 [DEBUG] [Thread-3296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:17:53.312 [DEBUG] [Thread-3296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:17:53.353 [DEBUG] [Thread-3296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:17:53.353 [DEBUG] [Thread-3296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:17:53.356 [DEBUG] [Thread-3296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:17:53.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:17:53.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:17:53.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:17:53.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:17:53.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:17:53.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:17:53.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:17:53.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:17:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:17:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.011875 -999.00  +11.50  14.54     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 Z...W 18.2 14.5 148.6 21.0 13.3 -4.7 13.2 -5.0 13.0 -4.3 13.3 -4.1
2025-12-25T02:17:53.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:17:53.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:17:53.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.011875
2025-12-25T02:17:53.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:17:53.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:17:53.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:17:53.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:17:53.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:17:53.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:17:36', tmtdew=0.44, humidity=96.98, cloud=0.0, wind=20.89, temperature=11.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:17:06.000', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:17:53.381 [DEBUG] [Thread-3296] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:17:53.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:17:53.474 [DEBUG] [Thread-3299] [transport.py] [_log()] starting thread (client mode): 0xb6b17190
2025-12-25T02:17:53.474 [DEBUG] [Thread-3299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:17:53.488 [DEBUG] [Thread-3299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:17:53.489 [INFO] [Thread-3299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] client lang: <none>
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] server lang: <none>
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] kex follows: False
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:17:53.496 [DEBUG] [Thread-3299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:17:53.497 [DEBUG] [Thread-3299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:17:53.497 [DEBUG] [Thread-3299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:17:53.497 [DEBUG] [Thread-3299] [transport.py] [_log()] Compression: none
2025-12-25T02:17:53.497 [DEBUG] [Thread-3299] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:17:53.553 [DEBUG] [Thread-3299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:17:53.554 [DEBUG] [Thread-3299] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:17:53.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:17:53.555 [DEBUG] [Thread-3299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:17:53.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:17:53.610 [DEBUG] [Thread-3299] [transport.py] [_log()] userauth is OK
2025-12-25T02:17:53.611 [DEBUG] [Thread-3299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:17:53.611 [DEBUG] [Thread-3299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:17:53.611 [DEBUG] [Thread-3299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:17:53.611 [DEBUG] [Thread-3299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:17:53.629 [INFO] [Thread-3299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:17:53.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:17:53.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:17:54.456 [DEBUG] [Thread-3299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:17:54.457 [DEBUG] [Thread-3299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:17:54.504 [DEBUG] [Thread-3299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:17:54.504 [DEBUG] [Thread-3299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:17:54.513 [DEBUG] [Thread-3299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:17:54.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:17:54.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:17:54.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:17:54.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:17:54.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:17:54.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:17:54.550 [DEBUG] [Thread-3299] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:17:56.324 [DEBUG] [Thread-3301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:18:11.375 [DEBUG] [Thread-3302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:18:24.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:18:24.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:18:24.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:18:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 18, 9), 0.44, 96.98, 0.0, 21.26, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:18:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:18:09
2025-12-25T02:18:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:18:25.548 [DEBUG] [Thread-3303] [transport.py] [_log()] starting thread (client mode): 0xb6b174f0
2025-12-25T02:18:25.548 [DEBUG] [Thread-3303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:18:25.568 [DEBUG] [Thread-3303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:18:25.568 [INFO] [Thread-3303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] client lang: <none>
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] server lang: <none>
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] kex follows: False
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] Compression: none
2025-12-25T02:18:25.572 [DEBUG] [Thread-3303] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:18:25.589 [DEBUG] [Thread-3303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:18:25.590 [DEBUG] [Thread-3303] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:18:25.591 [DEBUG] [Thread-3303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:18:25.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:18:25.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:18:25.593 [DEBUG] [Thread-3303] [transport.py] [_log()] userauth is OK
2025-12-25T02:18:25.593 [DEBUG] [Thread-3303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:18:25.593 [DEBUG] [Thread-3303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:18:25.593 [DEBUG] [Thread-3303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:18:25.593 [DEBUG] [Thread-3303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:18:25.616 [INFO] [Thread-3303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:18:25.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:18:26.242 [DEBUG] [Thread-3303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:18:26.242 [DEBUG] [Thread-3303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:18:26.243 [DEBUG] [Thread-3303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:18:26.282 [DEBUG] [Thread-3303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:18:26.283 [DEBUG] [Thread-3303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:18:26.286 [DEBUG] [Thread-3303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:18:26.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:18:26.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:18:26.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:18:26.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:18:26.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:18:26.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:18:26.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:18:26.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:18:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:18:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.012222 -999.00  +11.50  22.85     94  +10.60 1 3 1 3 1     0    0 -999.00 0.00 Z...W 22.7 22.9 167.8 26.4 13.3 -5.6 13.1 -4.6 13.0 -5.7 13.3 -8.3
2025-12-25T02:18:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:18:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:18:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.012222
2025-12-25T02:18:26.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:18:26.312 [DEBUG] [Thread-3303] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:18:26.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:18:26.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:18:26.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:18:26.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:18:26.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:18:09', tmtdew=0.44, humidity=96.98, cloud=0.0, wind=21.26, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:17:35.981', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:18:26.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:18:26.403 [DEBUG] [Thread-3306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:18:26.407 [DEBUG] [Thread-3307] [transport.py] [_log()] starting thread (client mode): 0xb6b23310
2025-12-25T02:18:26.407 [DEBUG] [Thread-3307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:18:26.422 [DEBUG] [Thread-3307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:18:26.422 [INFO] [Thread-3307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:18:26.430 [DEBUG] [Thread-3307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:18:26.430 [DEBUG] [Thread-3307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:18:26.430 [DEBUG] [Thread-3307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:18:26.430 [DEBUG] [Thread-3307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:18:26.430 [DEBUG] [Thread-3307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:18:26.430 [DEBUG] [Thread-3307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:18:26.430 [DEBUG] [Thread-3307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:18:26.430 [DEBUG] [Thread-3307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] client lang: <none>
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] server lang: <none>
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] kex follows: False
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] Compression: none
2025-12-25T02:18:26.431 [DEBUG] [Thread-3307] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:18:26.487 [DEBUG] [Thread-3307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:18:26.488 [DEBUG] [Thread-3307] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:18:26.488 [DEBUG] [Thread-3307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:18:26.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:18:26.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:18:26.546 [DEBUG] [Thread-3307] [transport.py] [_log()] userauth is OK
2025-12-25T02:18:26.547 [DEBUG] [Thread-3307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:18:26.547 [DEBUG] [Thread-3307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:18:26.547 [DEBUG] [Thread-3307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:18:26.547 [DEBUG] [Thread-3307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:18:26.567 [INFO] [Thread-3307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:18:26.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:18:26.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:18:27.401 [DEBUG] [Thread-3307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:18:27.401 [DEBUG] [Thread-3307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:18:27.449 [DEBUG] [Thread-3307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:18:27.449 [DEBUG] [Thread-3307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:18:27.458 [DEBUG] [Thread-3307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:18:27.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:18:27.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:18:27.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:18:27.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:18:27.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:18:27.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:18:27.493 [DEBUG] [Thread-3307] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:18:27.642 [DEBUG] [Thread-3309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:18:40.385 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:18:40.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:18:41.446 [DEBUG] [Thread-3310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:18:56.478 [DEBUG] [Thread-3311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:18:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:18:57.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:18:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:18:58.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 18, 41), 0.43, 97.0, 0.0, 21.31, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:18:58.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:18:41
2025-12-25T02:18:58.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:18:58.532 [DEBUG] [Thread-3312] [transport.py] [_log()] starting thread (client mode): 0xb6b22cb0
2025-12-25T02:18:58.532 [DEBUG] [Thread-3312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:18:58.554 [DEBUG] [Thread-3312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:18:58.554 [INFO] [Thread-3312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] client lang: <none>
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] server lang: <none>
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] kex follows: False
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] Compression: none
2025-12-25T02:18:58.558 [DEBUG] [Thread-3312] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:18:58.573 [DEBUG] [Thread-3312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:18:58.574 [DEBUG] [Thread-3312] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:18:58.574 [DEBUG] [Thread-3312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:18:58.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:18:58.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:18:58.575 [DEBUG] [Thread-3312] [transport.py] [_log()] userauth is OK
2025-12-25T02:18:58.575 [DEBUG] [Thread-3312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:18:58.575 [DEBUG] [Thread-3312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:18:58.575 [DEBUG] [Thread-3312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:18:58.575 [DEBUG] [Thread-3312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:18:58.584 [INFO] [Thread-3312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:18:58.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:18:59.311 [DEBUG] [Thread-3312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:18:59.311 [DEBUG] [Thread-3312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:18:59.312 [DEBUG] [Thread-3312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:18:59.352 [DEBUG] [Thread-3312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:18:59.352 [DEBUG] [Thread-3312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:18:59.354 [DEBUG] [Thread-3312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:18:59.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:18:59.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:18:59.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:18:59.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:18:59.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:18:59.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:18:59.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:18:59.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:18:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:18:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.012569 -999.00  +11.40  17.35     94  +10.60 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.9 17.4 142.4 22.0 13.3 -4.4 13.1 -4.8 12.9 -4.6 13.3 -4.8
2025-12-25T02:18:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:18:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:18:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.012569
2025-12-25T02:18:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:18:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:18:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:18:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:18:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:18:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:18:41', tmtdew=0.43, humidity=97.0, cloud=0.0, wind=21.31, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:18:05.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:18:59.374 [DEBUG] [Thread-3312] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:18:59.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:18:59.458 [DEBUG] [Thread-3315] [transport.py] [_log()] starting thread (client mode): 0xb6b282b0
2025-12-25T02:18:59.459 [DEBUG] [Thread-3315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:18:59.474 [DEBUG] [Thread-3315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:18:59.474 [INFO] [Thread-3315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] client lang: <none>
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] server lang: <none>
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] kex follows: False
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:18:59.481 [DEBUG] [Thread-3315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:18:59.482 [DEBUG] [Thread-3315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:18:59.482 [DEBUG] [Thread-3315] [transport.py] [_log()] Compression: none
2025-12-25T02:18:59.482 [DEBUG] [Thread-3315] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:18:59.537 [DEBUG] [Thread-3315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:18:59.537 [DEBUG] [Thread-3315] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:18:59.538 [DEBUG] [Thread-3315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:18:59.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:18:59.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:18:59.594 [DEBUG] [Thread-3315] [transport.py] [_log()] userauth is OK
2025-12-25T02:18:59.594 [DEBUG] [Thread-3315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:18:59.595 [DEBUG] [Thread-3315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:18:59.595 [DEBUG] [Thread-3315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:18:59.595 [DEBUG] [Thread-3315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:18:59.608 [INFO] [Thread-3315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:18:59.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:18:59.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:19:00.447 [DEBUG] [Thread-3315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:19:00.447 [DEBUG] [Thread-3315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:19:00.496 [DEBUG] [Thread-3315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:19:00.496 [DEBUG] [Thread-3315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:19:00.506 [DEBUG] [Thread-3315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:19:00.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:19:00.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:19:00.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:19:00.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:19:00.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:19:00.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:19:00.538 [DEBUG] [Thread-3315] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:19:11.511 [DEBUG] [Thread-3317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:19:26.563 [DEBUG] [Thread-3318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:19:27.717 [DEBUG] [Thread-3319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:19:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:19:30.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:19: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
2025-12-25T02:19:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 19, 13), 0.43, 97.02, 0.0, 21.26, 11.62, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:19:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:19:13
2025-12-25T02:19:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:19:31.535 [DEBUG] [Thread-3320] [transport.py] [_log()] starting thread (client mode): 0xb6b28e50
2025-12-25T02:19:31.536 [DEBUG] [Thread-3320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:19:31.556 [DEBUG] [Thread-3320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:19:31.556 [INFO] [Thread-3320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] client lang: <none>
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] server lang: <none>
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] kex follows: False
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:19:31.559 [DEBUG] [Thread-3320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:19:31.560 [DEBUG] [Thread-3320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:19:31.560 [DEBUG] [Thread-3320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:19:31.560 [DEBUG] [Thread-3320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:19:31.560 [DEBUG] [Thread-3320] [transport.py] [_log()] Compression: none
2025-12-25T02:19:31.560 [DEBUG] [Thread-3320] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:19:31.577 [DEBUG] [Thread-3320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:19:31.577 [DEBUG] [Thread-3320] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:19:31.578 [DEBUG] [Thread-3320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:19:31.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:19:31.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:19:31.580 [DEBUG] [Thread-3320] [transport.py] [_log()] userauth is OK
2025-12-25T02:19:31.580 [DEBUG] [Thread-3320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:19:31.580 [DEBUG] [Thread-3320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:19:31.580 [DEBUG] [Thread-3320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:19:31.580 [DEBUG] [Thread-3320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:19:31.604 [INFO] [Thread-3320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:19:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:19:32.244 [DEBUG] [Thread-3320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:19:32.244 [DEBUG] [Thread-3320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:19:32.244 [DEBUG] [Thread-3320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:19:32.285 [DEBUG] [Thread-3320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:19:32.285 [DEBUG] [Thread-3320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:19:32.289 [DEBUG] [Thread-3320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:19:32.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:19:32.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:19:32.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:19:32.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:19:32.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:19:32.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:19:32.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:19:32.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:19:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:19:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.012916 -999.00  +11.50  17.89     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.5 17.9 167.8 21.8 13.3 -5.0 13.2 -4.5 13.0 -4.8 13.3 -4.9
2025-12-25T02:19:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:19:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:19:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.012916
2025-12-25T02:19:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:19:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:19:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:19:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:19:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:19:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:19:13', tmtdew=0.43, humidity=97.02, cloud=0.0, wind=21.26, temperature=11.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:18:35.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:19:32.315 [DEBUG] [Thread-3320] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:19:32.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:19:32.414 [DEBUG] [Thread-3323] [transport.py] [_log()] starting thread (client mode): 0xb6b2ac80
2025-12-25T02:19:32.414 [DEBUG] [Thread-3323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:19:32.429 [DEBUG] [Thread-3323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:19:32.429 [INFO] [Thread-3323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] client lang: <none>
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] server lang: <none>
2025-12-25T02:19:32.436 [DEBUG] [Thread-3323] [transport.py] [_log()] kex follows: False
2025-12-25T02:19:32.437 [DEBUG] [Thread-3323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:19:32.437 [DEBUG] [Thread-3323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:19:32.437 [DEBUG] [Thread-3323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:19:32.437 [DEBUG] [Thread-3323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:19:32.437 [DEBUG] [Thread-3323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:19:32.437 [DEBUG] [Thread-3323] [transport.py] [_log()] Compression: none
2025-12-25T02:19:32.437 [DEBUG] [Thread-3323] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:19:32.494 [DEBUG] [Thread-3323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:19:32.494 [DEBUG] [Thread-3323] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:19:32.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:19:32.496 [DEBUG] [Thread-3323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:19:32.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:19:32.551 [DEBUG] [Thread-3323] [transport.py] [_log()] userauth is OK
2025-12-25T02:19:32.551 [DEBUG] [Thread-3323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:19:32.551 [DEBUG] [Thread-3323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:19:32.551 [DEBUG] [Thread-3323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:19:32.551 [DEBUG] [Thread-3323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:19:32.570 [INFO] [Thread-3323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:19:32.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:19:32.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:19:33.392 [DEBUG] [Thread-3323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:19:33.392 [DEBUG] [Thread-3323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:19:33.440 [DEBUG] [Thread-3323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:19:33.440 [DEBUG] [Thread-3323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:19:33.448 [DEBUG] [Thread-3323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:19:33.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:19:33.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')
2025-12-25T02:19:33.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
2025-12-25T02:19:33.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:19:33.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:19:33.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:19:33.480 [DEBUG] [Thread-3323] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:19:40.590 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:19:40.592 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:19:41.595 [DEBUG] [Thread-3325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:19:56.644 [DEBUG] [Thread-3326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:20:03.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:20:03.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:20:03.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:20:04.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 19, 45), 0.42, 97.07, 0.0, 23.82, 11.59, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:20:04.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:19:45
2025-12-25T02:20:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:20:04.464 [DEBUG] [Thread-3327] [transport.py] [_log()] starting thread (client mode): 0xb6b2a4d0
2025-12-25T02:20:04.464 [DEBUG] [Thread-3327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:20:04.484 [DEBUG] [Thread-3327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:20:04.485 [INFO] [Thread-3327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:20:04.488 [DEBUG] [Thread-3327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:20:04.488 [DEBUG] [Thread-3327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:20:04.488 [DEBUG] [Thread-3327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:20:04.488 [DEBUG] [Thread-3327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:20:04.488 [DEBUG] [Thread-3327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:20:04.488 [DEBUG] [Thread-3327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:20:04.488 [DEBUG] [Thread-3327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:20:04.488 [DEBUG] [Thread-3327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] client lang: <none>
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] server lang: <none>
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] kex follows: False
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] Compression: none
2025-12-25T02:20:04.489 [DEBUG] [Thread-3327] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:20:04.507 [DEBUG] [Thread-3327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:20:04.508 [DEBUG] [Thread-3327] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:20:04.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:20:04.509 [DEBUG] [Thread-3327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:20:04.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:20:04.511 [DEBUG] [Thread-3327] [transport.py] [_log()] userauth is OK
2025-12-25T02:20:04.511 [DEBUG] [Thread-3327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:20:04.511 [DEBUG] [Thread-3327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:20:04.511 [DEBUG] [Thread-3327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:20:04.511 [DEBUG] [Thread-3327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:20:04.547 [INFO] [Thread-3327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:20:04.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:20:11.682 [DEBUG] [Thread-3329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:20:15.924 [DEBUG] [Thread-3327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:20:15.924 [DEBUG] [Thread-3327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:20:15.924 [DEBUG] [Thread-3327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:20:15.965 [DEBUG] [Thread-3327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:20:15.965 [DEBUG] [Thread-3327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:20:15.967 [DEBUG] [Thread-3327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:20:16.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:20:16.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:20:16.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:20:16.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:20:16.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:20:16.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:20:16.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.013611 -999.00  +11.50  18.40     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.3 18.4 170.0 23.2 13.3 -2.9 13.2 -2.7 13.0 -2.7 13.3 -2.5
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.013611
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:20:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:19:45', tmtdew=0.42, humidity=97.07, cloud=0.0, wind=23.82, temperature=11.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:19:35.990', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:20:16.068 [DEBUG] [Thread-3327] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:20:16.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:20:16.154 [DEBUG] [Thread-3331] [transport.py] [_log()] starting thread (client mode): 0xb6b28910
2025-12-25T02:20:16.154 [DEBUG] [Thread-3331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:20:16.168 [DEBUG] [Thread-3331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:20:16.169 [INFO] [Thread-3331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] client lang: <none>
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] server lang: <none>
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] kex follows: False
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:20:16.176 [DEBUG] [Thread-3331] [transport.py] [_log()] Compression: none
2025-12-25T02:20:16.177 [DEBUG] [Thread-3331] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:20:16.233 [DEBUG] [Thread-3331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:20:16.233 [DEBUG] [Thread-3331] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:20:16.233 [DEBUG] [Thread-3331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:20:16.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:20:16.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:20:16.290 [DEBUG] [Thread-3331] [transport.py] [_log()] userauth is OK
2025-12-25T02:20:16.290 [DEBUG] [Thread-3331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:20:16.290 [DEBUG] [Thread-3331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:20:16.290 [DEBUG] [Thread-3331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:20:16.290 [DEBUG] [Thread-3331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:20:16.307 [INFO] [Thread-3331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:20:16.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:20:16.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:20:17.130 [DEBUG] [Thread-3331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:20:17.131 [DEBUG] [Thread-3331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:20:17.178 [DEBUG] [Thread-3331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:20:17.179 [DEBUG] [Thread-3331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:20:17.187 [DEBUG] [Thread-3331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:20:17.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:20:17.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')
2025-12-25T02:20:17.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
2025-12-25T02:20:17.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:20:17.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:20:17.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:20:17.220 [DEBUG] [Thread-3331] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:20:26.714 [DEBUG] [Thread-3333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:20:27.802 [DEBUG] [Thread-3334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:20:40.795 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:20:40.797 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:20:41.769 [DEBUG] [Thread-3335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:20:47.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:20:47.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:20:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:20:47.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 20, 17), 0.42, 97.08, 0.0, 22.89, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:20:47.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:20:17
2025-12-25T02:20:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:20:48.224 [DEBUG] [Thread-3336] [transport.py] [_log()] starting thread (client mode): 0xb6b2a7a0
2025-12-25T02:20:48.224 [DEBUG] [Thread-3336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:20:48.245 [DEBUG] [Thread-3336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:20:48.245 [INFO] [Thread-3336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] client lang: <none>
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] server lang: <none>
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] kex follows: False
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] Compression: none
2025-12-25T02:20:48.248 [DEBUG] [Thread-3336] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:20:48.265 [DEBUG] [Thread-3336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:20:48.266 [DEBUG] [Thread-3336] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:20:48.266 [DEBUG] [Thread-3336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:20:48.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:20:48.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:20:48.268 [DEBUG] [Thread-3336] [transport.py] [_log()] userauth is OK
2025-12-25T02:20:48.269 [DEBUG] [Thread-3336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:20:48.269 [DEBUG] [Thread-3336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:20:48.269 [DEBUG] [Thread-3336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:20:48.269 [DEBUG] [Thread-3336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:20:48.293 [INFO] [Thread-3336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:20:48.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:20:48.941 [DEBUG] [Thread-3336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:20:48.941 [DEBUG] [Thread-3336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:20:48.942 [DEBUG] [Thread-3336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:20:48.982 [DEBUG] [Thread-3336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:20:48.982 [DEBUG] [Thread-3336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:20:48.985 [DEBUG] [Thread-3336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:20:48.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:20:48.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:20:49.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:20:49.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:20:49.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:20:49.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:20:49.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.013958 -999.00  +11.50  17.58     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.4 17.6 165.4 21.9 13.3 -3.2 13.2 -5.1 13.0 -3.2 13.3 -5.1
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.013958
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:20:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:20:17', tmtdew=0.42, humidity=97.08, cloud=0.0, wind=22.89, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:20:05.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:20:49.008 [DEBUG] [Thread-3336] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:20:49.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:20:49.090 [DEBUG] [Thread-3339] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae60
2025-12-25T02:20:49.090 [DEBUG] [Thread-3339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:20:49.105 [DEBUG] [Thread-3339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:20:49.105 [INFO] [Thread-3339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:20:49.113 [DEBUG] [Thread-3339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:20:49.113 [DEBUG] [Thread-3339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:20:49.113 [DEBUG] [Thread-3339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:20:49.113 [DEBUG] [Thread-3339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:20:49.113 [DEBUG] [Thread-3339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:20:49.113 [DEBUG] [Thread-3339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:20:49.113 [DEBUG] [Thread-3339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] client lang: <none>
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] server lang: <none>
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] kex follows: False
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] Compression: none
2025-12-25T02:20:49.114 [DEBUG] [Thread-3339] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:20:49.175 [DEBUG] [Thread-3339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:20:49.176 [DEBUG] [Thread-3339] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:20:49.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:20:49.177 [DEBUG] [Thread-3339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:20:49.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:20:49.235 [DEBUG] [Thread-3339] [transport.py] [_log()] userauth is OK
2025-12-25T02:20:49.235 [DEBUG] [Thread-3339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:20:49.235 [DEBUG] [Thread-3339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:20:49.235 [DEBUG] [Thread-3339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:20:49.235 [DEBUG] [Thread-3339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:20:49.254 [INFO] [Thread-3339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:20:49.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:20:49.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:20:50.102 [DEBUG] [Thread-3339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:20:50.102 [DEBUG] [Thread-3339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:20:50.150 [DEBUG] [Thread-3339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:20:50.150 [DEBUG] [Thread-3339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:20:50.159 [DEBUG] [Thread-3339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:20:50.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:20:50.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')
2025-12-25T02:20:50.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
2025-12-25T02:20:50.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:20:50.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:20:50.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:20:50.195 [DEBUG] [Thread-3339] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:20:56.797 [DEBUG] [Thread-3341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:21:11.839 [DEBUG] [Thread-3342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:21:20.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:21:20.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:21:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:21:20.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 20, 49), 0.42, 97.08, 0.0, 19.67, 11.64, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:21:20.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:20:49
2025-12-25T02:21:21.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:21:21.159 [DEBUG] [Thread-3343] [transport.py] [_log()] starting thread (client mode): 0xb6b2b6a0
2025-12-25T02:21:21.159 [DEBUG] [Thread-3343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:21:21.180 [DEBUG] [Thread-3343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:21:21.180 [INFO] [Thread-3343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] client lang: <none>
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] server lang: <none>
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] kex follows: False
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] Compression: none
2025-12-25T02:21:21.183 [DEBUG] [Thread-3343] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:21:21.200 [DEBUG] [Thread-3343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:21:21.200 [DEBUG] [Thread-3343] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:21:21.201 [DEBUG] [Thread-3343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:21:21.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:21:21.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:21:21.203 [DEBUG] [Thread-3343] [transport.py] [_log()] userauth is OK
2025-12-25T02:21:21.203 [DEBUG] [Thread-3343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:21:21.203 [DEBUG] [Thread-3343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:21:21.203 [DEBUG] [Thread-3343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:21:21.203 [DEBUG] [Thread-3343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:21:21.220 [INFO] [Thread-3343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:21:21.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:21:21.968 [DEBUG] [Thread-3343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:21:21.968 [DEBUG] [Thread-3343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:21:21.968 [DEBUG] [Thread-3343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:21:22.009 [DEBUG] [Thread-3343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:21:22.009 [DEBUG] [Thread-3343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:21:22.011 [DEBUG] [Thread-3343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:21:22.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:21:22.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:21:22.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:21:22.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:21:22.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:21:22.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:21:22.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.014305 -999.00  +11.50  16.47     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.4 16.5 171.0 22.3 13.3 -5.2 13.1 -6.3 13.0 -5.0 13.3 -5.7
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.014305
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:21:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:20:49', tmtdew=0.42, humidity=97.08, cloud=0.0, wind=19.67, temperature=11.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:20:35.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:21:22.028 [DEBUG] [Thread-3343] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:21:22.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:21:22.114 [DEBUG] [Thread-3346] [transport.py] [_log()] starting thread (client mode): 0xb95f10f0
2025-12-25T02:21:22.114 [DEBUG] [Thread-3346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:21:22.132 [DEBUG] [Thread-3346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:21:22.132 [INFO] [Thread-3346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:21:22.139 [DEBUG] [Thread-3346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] client lang: <none>
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] server lang: <none>
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] kex follows: False
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] Compression: none
2025-12-25T02:21:22.140 [DEBUG] [Thread-3346] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:21:22.197 [DEBUG] [Thread-3346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:21:22.197 [DEBUG] [Thread-3346] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:21:22.197 [DEBUG] [Thread-3346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:21:22.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:21:22.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:21:22.254 [DEBUG] [Thread-3346] [transport.py] [_log()] userauth is OK
2025-12-25T02:21:22.254 [DEBUG] [Thread-3346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:21:22.254 [DEBUG] [Thread-3346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:21:22.254 [DEBUG] [Thread-3346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:21:22.254 [DEBUG] [Thread-3346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:21:22.268 [INFO] [Thread-3346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:21:22.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:21:22.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:21:23.083 [DEBUG] [Thread-3346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:21:23.083 [DEBUG] [Thread-3346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:21:23.134 [DEBUG] [Thread-3346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:21:23.134 [DEBUG] [Thread-3346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:21:23.146 [DEBUG] [Thread-3346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:21:23.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:21:23.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:21:23.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:21:23.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:21:23.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:21:23.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:21:23.177 [DEBUG] [Thread-3346] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:21:26.873 [DEBUG] [Thread-3348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:21:27.881 [DEBUG] [Thread-3349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:21:40.999 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:21:41.000 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:21:41.928 [DEBUG] [Thread-3350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:21:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:21:53.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:21:53.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:21:53.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 21, 21), 0.42, 97.08, 0.0, 19.34, 11.62, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:21:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:21:21
2025-12-25T02:21:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:21:54.161 [DEBUG] [Thread-3351] [transport.py] [_log()] starting thread (client mode): 0xb6b28460
2025-12-25T02:21:54.161 [DEBUG] [Thread-3351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:21:54.182 [DEBUG] [Thread-3351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:21:54.182 [INFO] [Thread-3351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:21:54.185 [DEBUG] [Thread-3351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:21:54.185 [DEBUG] [Thread-3351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:21:54.185 [DEBUG] [Thread-3351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] client lang: <none>
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] server lang: <none>
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] kex follows: False
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] Compression: none
2025-12-25T02:21:54.186 [DEBUG] [Thread-3351] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:21:54.201 [DEBUG] [Thread-3351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:21:54.201 [DEBUG] [Thread-3351] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:21:54.202 [DEBUG] [Thread-3351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:21:54.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:21:54.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:21:54.203 [DEBUG] [Thread-3351] [transport.py] [_log()] userauth is OK
2025-12-25T02:21:54.203 [DEBUG] [Thread-3351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:21:54.203 [DEBUG] [Thread-3351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:21:54.203 [DEBUG] [Thread-3351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:21:54.203 [DEBUG] [Thread-3351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:21:54.214 [INFO] [Thread-3351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:21:54.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:21:54.821 [DEBUG] [Thread-3351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:21:54.821 [DEBUG] [Thread-3351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:21:54.821 [DEBUG] [Thread-3351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:21:54.862 [DEBUG] [Thread-3351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:21:54.863 [DEBUG] [Thread-3351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:21:54.865 [DEBUG] [Thread-3351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:21:54.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:21:54.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:21:54.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:21:54.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:21:54.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:21:54.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:21:54.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:21:54.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.014653 -999.00  +11.50  15.98     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.7 16.0 168.0 21.9 13.3 -6.5 13.1 -5.0 13.0 -6.6 13.3 -4.7
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.014653
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:21:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:21:21', tmtdew=0.42, humidity=97.08, cloud=0.0, wind=19.34, temperature=11.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:21:06.019', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:21:54.884 [DEBUG] [Thread-3351] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:21:54.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:21:54.971 [DEBUG] [Thread-3354] [transport.py] [_log()] starting thread (client mode): 0xb6b2be20
2025-12-25T02:21:54.971 [DEBUG] [Thread-3354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:21:54.986 [DEBUG] [Thread-3354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:21:54.986 [INFO] [Thread-3354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] client lang: <none>
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] server lang: <none>
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] kex follows: False
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] Compression: none
2025-12-25T02:21:54.994 [DEBUG] [Thread-3354] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:21:55.049 [DEBUG] [Thread-3354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:21:55.049 [DEBUG] [Thread-3354] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:21:55.049 [DEBUG] [Thread-3354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:21:55.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:21:55.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:21:55.106 [DEBUG] [Thread-3354] [transport.py] [_log()] userauth is OK
2025-12-25T02:21:55.106 [DEBUG] [Thread-3354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:21:55.106 [DEBUG] [Thread-3354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:21:55.106 [DEBUG] [Thread-3354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:21:55.106 [DEBUG] [Thread-3354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:21:55.120 [INFO] [Thread-3354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:21:55.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:21:55.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:21:55.957 [DEBUG] [Thread-3354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:21:55.957 [DEBUG] [Thread-3354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:21:56.006 [DEBUG] [Thread-3354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:21:56.006 [DEBUG] [Thread-3354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:21:56.015 [DEBUG] [Thread-3354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:21:56.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:21:56.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:21:56.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:21:56.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:21:56.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:21:56.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:21:56.051 [DEBUG] [Thread-3354] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:21:56.963 [DEBUG] [Thread-3356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:22:12.007 [DEBUG] [Thread-3357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:22:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:22:26.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:22:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:22:26.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 21, 53), 0.42, 97.07, 0.0, 21.69, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:22:26.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:21:53
2025-12-25T02:22:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:22:27.037 [DEBUG] [Thread-3358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:22:27.122 [DEBUG] [Thread-3359] [transport.py] [_log()] starting thread (client mode): 0xb6b2a710
2025-12-25T02:22:27.122 [DEBUG] [Thread-3359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:22:27.144 [DEBUG] [Thread-3359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:22:27.144 [INFO] [Thread-3359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] client lang: <none>
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] server lang: <none>
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] kex follows: False
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] Compression: none
2025-12-25T02:22:27.146 [DEBUG] [Thread-3359] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:22:27.163 [DEBUG] [Thread-3359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:22:27.163 [DEBUG] [Thread-3359] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:22:27.164 [DEBUG] [Thread-3359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:22:27.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:22:27.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:22:27.164 [DEBUG] [Thread-3359] [transport.py] [_log()] userauth is OK
2025-12-25T02:22:27.164 [DEBUG] [Thread-3359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:22:27.164 [DEBUG] [Thread-3359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:22:27.164 [DEBUG] [Thread-3359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:22:27.165 [DEBUG] [Thread-3359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:22:27.177 [INFO] [Thread-3359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:22:27.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:22:27.932 [DEBUG] [Thread-3361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:22:27.961 [DEBUG] [Thread-3359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:22:27.961 [DEBUG] [Thread-3359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:22:27.961 [DEBUG] [Thread-3359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:22:28.002 [DEBUG] [Thread-3359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:22:28.002 [DEBUG] [Thread-3359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:22:28.005 [DEBUG] [Thread-3359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:22:28.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:22:28.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:22:28.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:22:28.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:22:28.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:22:28.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:22:28.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:22:28.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:22:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:22:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.015000 -999.00  +11.50  19.47     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.3 19.5 168.6 23.1 13.4 -5.4 13.2 -4.4 13.0 -5.6 13.3 -6.9
2025-12-25T02:22:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:22:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:22:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.015000
2025-12-25T02:22:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:22:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:22:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:22:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:22:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:22:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:21:53', tmtdew=0.42, humidity=97.07, cloud=0.0, wind=21.69, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:21:36.000', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:22:28.030 [DEBUG] [Thread-3359] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:22:28.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:22:28.124 [DEBUG] [Thread-3363] [transport.py] [_log()] starting thread (client mode): 0xb6b2b5b0
2025-12-25T02:22:28.124 [DEBUG] [Thread-3363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:22:28.139 [DEBUG] [Thread-3363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:22:28.139 [INFO] [Thread-3363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] client lang: <none>
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] server lang: <none>
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] kex follows: False
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:22:28.147 [DEBUG] [Thread-3363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:22:28.148 [DEBUG] [Thread-3363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:22:28.148 [DEBUG] [Thread-3363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:22:28.148 [DEBUG] [Thread-3363] [transport.py] [_log()] Compression: none
2025-12-25T02:22:28.148 [DEBUG] [Thread-3363] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:22:28.207 [DEBUG] [Thread-3363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:22:28.208 [DEBUG] [Thread-3363] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:22:28.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:22:28.209 [DEBUG] [Thread-3363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:22:28.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:22:28.267 [DEBUG] [Thread-3363] [transport.py] [_log()] userauth is OK
2025-12-25T02:22:28.267 [DEBUG] [Thread-3363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:22:28.267 [DEBUG] [Thread-3363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:22:28.267 [DEBUG] [Thread-3363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:22:28.267 [DEBUG] [Thread-3363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:22:28.286 [INFO] [Thread-3363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:22:28.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:22:28.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:22:29.111 [DEBUG] [Thread-3363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:22:29.111 [DEBUG] [Thread-3363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:22:29.159 [DEBUG] [Thread-3363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:22:29.159 [DEBUG] [Thread-3363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:22:29.169 [DEBUG] [Thread-3363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:22:29.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:22:29.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:22:29.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:22:29.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:22:29.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:22:29.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:22:29.206 [DEBUG] [Thread-3363] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:22:41.204 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:22:41.205 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:22:42.071 [DEBUG] [Thread-3365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:22:57.120 [DEBUG] [Thread-3366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:22:59.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:22:59.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:22:59.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
2025-12-25T02:22:59.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 22, 25), 0.42, 97.1, 0.0, 21.9, 11.62, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:22:59.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:22:25
2025-12-25T02:23:00.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:23:00.254 [DEBUG] [Thread-3367] [transport.py] [_log()] starting thread (client mode): 0xb6b2a8f0
2025-12-25T02:23:00.254 [DEBUG] [Thread-3367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:23:00.274 [DEBUG] [Thread-3367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:23:00.275 [INFO] [Thread-3367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] client lang: <none>
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] server lang: <none>
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] kex follows: False
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] Compression: none
2025-12-25T02:23:00.278 [DEBUG] [Thread-3367] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:23:00.293 [DEBUG] [Thread-3367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:23:00.294 [DEBUG] [Thread-3367] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:23:00.294 [DEBUG] [Thread-3367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:23:00.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:23:00.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:23:00.295 [DEBUG] [Thread-3367] [transport.py] [_log()] userauth is OK
2025-12-25T02:23:00.296 [DEBUG] [Thread-3367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:23:00.296 [DEBUG] [Thread-3367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:23:00.296 [DEBUG] [Thread-3367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:23:00.296 [DEBUG] [Thread-3367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:23:00.315 [INFO] [Thread-3367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:23:00.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:23:00.966 [DEBUG] [Thread-3367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:23:00.966 [DEBUG] [Thread-3367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:23:00.967 [DEBUG] [Thread-3367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:23:01.007 [DEBUG] [Thread-3367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:23:01.007 [DEBUG] [Thread-3367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:23:01.010 [DEBUG] [Thread-3367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:23:01.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:23:01.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:23:01.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:23:01.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:23:01.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:23:01.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:23:01.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:23:01.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:23:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:23:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.015347 -999.00  +11.50  18.05     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.9 18.1 171.6 20.3 13.3 -5.2 13.1 -5.1 13.0 -5.0 13.3 -5.8
2025-12-25T02:23:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:23:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:23:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.015347
2025-12-25T02:23:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:23:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:23:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:23:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:23:01.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:23:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:22:25', tmtdew=0.42, humidity=97.1, cloud=0.0, wind=21.9, temperature=11.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:22:05.981', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:23:01.035 [DEBUG] [Thread-3367] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:23:01.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:23:01.127 [DEBUG] [Thread-3370] [transport.py] [_log()] starting thread (client mode): 0xb95f3400
2025-12-25T02:23:01.127 [DEBUG] [Thread-3370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:23:01.142 [DEBUG] [Thread-3370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:23:01.143 [INFO] [Thread-3370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:23:01.150 [DEBUG] [Thread-3370] [transport.py] [_log()] client lang: <none>
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] server lang: <none>
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] kex follows: False
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] Compression: none
2025-12-25T02:23:01.151 [DEBUG] [Thread-3370] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:23:01.211 [DEBUG] [Thread-3370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:23:01.211 [DEBUG] [Thread-3370] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:23:01.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:23:01.213 [DEBUG] [Thread-3370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:23:01.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:23:01.267 [DEBUG] [Thread-3370] [transport.py] [_log()] userauth is OK
2025-12-25T02:23:01.267 [DEBUG] [Thread-3370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:23:01.267 [DEBUG] [Thread-3370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:23:01.268 [DEBUG] [Thread-3370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:23:01.268 [DEBUG] [Thread-3370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:23:01.287 [INFO] [Thread-3370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:23:01.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:23:01.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:23:02.127 [DEBUG] [Thread-3370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:23:02.127 [DEBUG] [Thread-3370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:23:02.175 [DEBUG] [Thread-3370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:23:02.175 [DEBUG] [Thread-3370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:23:02.184 [DEBUG] [Thread-3370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:23:02.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:23:02.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:23:02.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:23:02.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:23:02.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:23:02.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:23:02.220 [DEBUG] [Thread-3370] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:23:12.159 [DEBUG] [Thread-3372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:23:27.218 [DEBUG] [Thread-3373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:23:28.000 [DEBUG] [Thread-3374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:23:32.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:23:32.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:23:32.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:23:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 23, 29), 0.42, 97.08, 0.0, 20.26, 11.59, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:23:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:23:29
2025-12-25T02:23:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:23:33.262 [DEBUG] [Thread-3375] [transport.py] [_log()] starting thread (client mode): 0xb6b2bd90
2025-12-25T02:23:33.263 [DEBUG] [Thread-3375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:23:33.284 [DEBUG] [Thread-3375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:23:33.284 [INFO] [Thread-3375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] client lang: <none>
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] server lang: <none>
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] kex follows: False
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] Compression: none
2025-12-25T02:23:33.287 [DEBUG] [Thread-3375] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:23:33.303 [DEBUG] [Thread-3375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:23:33.303 [DEBUG] [Thread-3375] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:23:33.303 [DEBUG] [Thread-3375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:23:33.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:23:33.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:23:33.304 [DEBUG] [Thread-3375] [transport.py] [_log()] userauth is OK
2025-12-25T02:23:33.304 [DEBUG] [Thread-3375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:23:33.304 [DEBUG] [Thread-3375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:23:33.304 [DEBUG] [Thread-3375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:23:33.304 [DEBUG] [Thread-3375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:23:33.317 [INFO] [Thread-3375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:23:33.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:23:34.116 [DEBUG] [Thread-3375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:23:34.116 [DEBUG] [Thread-3375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:23:34.117 [DEBUG] [Thread-3375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:23:34.156 [DEBUG] [Thread-3375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:23:34.157 [DEBUG] [Thread-3375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:23:34.159 [DEBUG] [Thread-3375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:23:34.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:23:34.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:23:34.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:23:34.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:23:34.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:23:34.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:23:34.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:23:34.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:23:34.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:23:34.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.015694 -999.00  +11.50  19.03     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.1 19.0 164.4 19.9 13.3 -5.4 13.1 -6.2 12.9 -5.6 13.3 -6.2
2025-12-25T02:23:34.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:23:34.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:23:34.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.015694
2025-12-25T02:23:34.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:23:34.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:23:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:23:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:23:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:23:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:23:29', tmtdew=0.42, humidity=97.08, cloud=0.0, wind=20.26, temperature=11.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:22:35.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:23:34.183 [DEBUG] [Thread-3375] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:23:34.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:23:34.279 [DEBUG] [Thread-3378] [transport.py] [_log()] starting thread (client mode): 0xb6b2b9a0
2025-12-25T02:23:34.279 [DEBUG] [Thread-3378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:23:34.294 [DEBUG] [Thread-3378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:23:34.295 [INFO] [Thread-3378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:23:34.302 [DEBUG] [Thread-3378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:23:34.302 [DEBUG] [Thread-3378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] client lang: <none>
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] server lang: <none>
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] kex follows: False
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:23:34.303 [DEBUG] [Thread-3378] [transport.py] [_log()] Compression: none
2025-12-25T02:23:34.304 [DEBUG] [Thread-3378] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:23:34.367 [DEBUG] [Thread-3378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:23:34.367 [DEBUG] [Thread-3378] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:23:34.368 [DEBUG] [Thread-3378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:23:34.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:23:34.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:23:34.423 [DEBUG] [Thread-3378] [transport.py] [_log()] userauth is OK
2025-12-25T02:23:34.423 [DEBUG] [Thread-3378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:23:34.423 [DEBUG] [Thread-3378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:23:34.423 [DEBUG] [Thread-3378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:23:34.423 [DEBUG] [Thread-3378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:23:34.448 [INFO] [Thread-3378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:23:34.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:23:34.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:23:35.278 [DEBUG] [Thread-3378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:23:35.279 [DEBUG] [Thread-3378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:23:35.328 [DEBUG] [Thread-3378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:23:35.328 [DEBUG] [Thread-3378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:23:35.341 [DEBUG] [Thread-3378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:23:35.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:23:35.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:23:35.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
2025-12-25T02:23:35.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:23:35.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:23:35.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:23:35.380 [DEBUG] [Thread-3378] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:23:41.407 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:23:41.408 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:23:42.248 [DEBUG] [Thread-3380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:23:57.297 [DEBUG] [Thread-3381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:24:05.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:24:05.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:24:05.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
2025-12-25T02:24:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 24, 1), 0.41, 97.13, 0.0, 21.42, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:24:06.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:24:01
2025-12-25T02:24:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:24:06.395 [DEBUG] [Thread-3382] [transport.py] [_log()] starting thread (client mode): 0xb6b2b850
2025-12-25T02:24:06.395 [DEBUG] [Thread-3382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:24:06.415 [DEBUG] [Thread-3382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:24:06.415 [INFO] [Thread-3382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] client lang: <none>
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] server lang: <none>
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] kex follows: False
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:24:06.418 [DEBUG] [Thread-3382] [transport.py] [_log()] Compression: none
2025-12-25T02:24:06.419 [DEBUG] [Thread-3382] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:24:06.435 [DEBUG] [Thread-3382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:24:06.435 [DEBUG] [Thread-3382] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:24:06.436 [DEBUG] [Thread-3382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:24:06.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:24:06.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:24:06.438 [DEBUG] [Thread-3382] [transport.py] [_log()] userauth is OK
2025-12-25T02:24:06.438 [DEBUG] [Thread-3382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:24:06.438 [DEBUG] [Thread-3382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:24:06.438 [DEBUG] [Thread-3382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:24:06.438 [DEBUG] [Thread-3382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:24:06.463 [INFO] [Thread-3382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:24:06.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:24:07.054 [DEBUG] [Thread-3382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:24:07.054 [DEBUG] [Thread-3382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:24:07.054 [DEBUG] [Thread-3382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:24:07.095 [DEBUG] [Thread-3382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:24:07.095 [DEBUG] [Thread-3382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:24:07.097 [DEBUG] [Thread-3382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:24:07.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:24:07.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:24:07.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:24:07.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:24:07.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:24:07.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:24:07.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:24:07.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:24:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:24:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.016389 -999.00  +11.50  16.94     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.8 16.9 159.8 19.0 13.3 -6.7 13.1 -4.7 13.0 -6.3 13.3 -5.9
2025-12-25T02:24:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:24:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:24:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.016389
2025-12-25T02:24:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:24:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:24:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:24:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:24:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:24:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:24:01', tmtdew=0.41, humidity=97.13, cloud=0.0, wind=21.42, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:23:36.010', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:24:07.118 [DEBUG] [Thread-3382] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:24:07.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:24:07.200 [DEBUG] [Thread-3385] [transport.py] [_log()] starting thread (client mode): 0xb6b231c0
2025-12-25T02:24:07.201 [DEBUG] [Thread-3385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:24:07.216 [DEBUG] [Thread-3385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:24:07.216 [INFO] [Thread-3385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:24:07.224 [DEBUG] [Thread-3385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:24:07.224 [DEBUG] [Thread-3385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] client lang: <none>
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] server lang: <none>
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] kex follows: False
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] Compression: none
2025-12-25T02:24:07.225 [DEBUG] [Thread-3385] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:24:07.282 [DEBUG] [Thread-3385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:24:07.282 [DEBUG] [Thread-3385] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:24:07.282 [DEBUG] [Thread-3385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:24:07.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:24:07.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:24:07.338 [DEBUG] [Thread-3385] [transport.py] [_log()] userauth is OK
2025-12-25T02:24:07.338 [DEBUG] [Thread-3385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:24:07.338 [DEBUG] [Thread-3385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:24:07.338 [DEBUG] [Thread-3385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:24:07.338 [DEBUG] [Thread-3385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:24:07.352 [INFO] [Thread-3385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:24:07.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:24:07.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:24:08.203 [DEBUG] [Thread-3385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:24:08.203 [DEBUG] [Thread-3385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:24:08.251 [DEBUG] [Thread-3385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:24:08.251 [DEBUG] [Thread-3385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:24:08.259 [DEBUG] [Thread-3385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:24:08.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:24:08.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:24:08.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:24:08.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:24:08.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:24:08.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:24:08.290 [DEBUG] [Thread-3385] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:24:12.327 [DEBUG] [Thread-3387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:24:27.369 [DEBUG] [Thread-3388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:24:28.057 [DEBUG] [Thread-3389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:24:38.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:24:38.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:24:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:24:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 24, 33), 0.71, 95.33, 0.0, 19.13, 12.04, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:24:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:24:33
2025-12-25T02:24:39.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:24:39.303 [DEBUG] [Thread-3390] [transport.py] [_log()] starting thread (client mode): 0xb95f23b0
2025-12-25T02:24:39.303 [DEBUG] [Thread-3390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:24:39.322 [DEBUG] [Thread-3390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:24:39.322 [INFO] [Thread-3390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:24:39.325 [DEBUG] [Thread-3390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] client lang: <none>
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] server lang: <none>
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] kex follows: False
2025-12-25T02:24:39.326 [DEBUG] [Thread-3390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:24:39.327 [DEBUG] [Thread-3390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:24:39.327 [DEBUG] [Thread-3390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:24:39.327 [DEBUG] [Thread-3390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:24:39.327 [DEBUG] [Thread-3390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:24:39.327 [DEBUG] [Thread-3390] [transport.py] [_log()] Compression: none
2025-12-25T02:24:39.327 [DEBUG] [Thread-3390] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:24:39.343 [DEBUG] [Thread-3390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:24:39.344 [DEBUG] [Thread-3390] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:24:39.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:24:39.345 [DEBUG] [Thread-3390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:24:39.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:24:39.347 [DEBUG] [Thread-3390] [transport.py] [_log()] userauth is OK
2025-12-25T02:24:39.348 [DEBUG] [Thread-3390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:24:39.348 [DEBUG] [Thread-3390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:24:39.348 [DEBUG] [Thread-3390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:24:39.348 [DEBUG] [Thread-3390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:24:39.372 [INFO] [Thread-3390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:24:39.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:24:40.111 [DEBUG] [Thread-3390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:24:40.111 [DEBUG] [Thread-3390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:24:40.112 [DEBUG] [Thread-3390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:24:40.152 [DEBUG] [Thread-3390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:24:40.152 [DEBUG] [Thread-3390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:24:40.156 [DEBUG] [Thread-3390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:24:40.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:24:40.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:24:40.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:24:40.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:24:40.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:24:40.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:24:40.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:24:40.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:24:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:24:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.016736 -999.00  +11.50  16.60     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.9 16.6 169.0 22.4 13.3 -4.9 13.1 -8.3 13.0 -5.0 13.3 -5.0
2025-12-25T02:24:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:24:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:24:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.016736
2025-12-25T02:24:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:24:40.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:24:40.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:24:40.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:24:40.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:24:40.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:24:33', tmtdew=0.71, humidity=95.33, cloud=0.0, wind=19.13, temperature=12.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:24:05.990', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:24:40.175 [DEBUG] [Thread-3390] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:24:40.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:24:40.260 [DEBUG] [Thread-3393] [transport.py] [_log()] starting thread (client mode): 0xb95f0bb0
2025-12-25T02:24:40.260 [DEBUG] [Thread-3393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:24:40.274 [DEBUG] [Thread-3393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:24:40.275 [INFO] [Thread-3393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:24:40.282 [DEBUG] [Thread-3393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] client lang: <none>
2025-12-25T02:24:40.283 [DEBUG] [Thread-3393] [transport.py] [_log()] server lang: <none>
2025-12-25T02:24:40.284 [DEBUG] [Thread-3393] [transport.py] [_log()] kex follows: False
2025-12-25T02:24:40.284 [DEBUG] [Thread-3393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:24:40.284 [DEBUG] [Thread-3393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:24:40.284 [DEBUG] [Thread-3393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:24:40.284 [DEBUG] [Thread-3393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:24:40.284 [DEBUG] [Thread-3393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:24:40.284 [DEBUG] [Thread-3393] [transport.py] [_log()] Compression: none
2025-12-25T02:24:40.284 [DEBUG] [Thread-3393] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:24:40.343 [DEBUG] [Thread-3393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:24:40.343 [DEBUG] [Thread-3393] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:24:40.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:24:40.345 [DEBUG] [Thread-3393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:24:40.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:24:40.399 [DEBUG] [Thread-3393] [transport.py] [_log()] userauth is OK
2025-12-25T02:24:40.399 [DEBUG] [Thread-3393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:24:40.399 [DEBUG] [Thread-3393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:24:40.400 [DEBUG] [Thread-3393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:24:40.400 [DEBUG] [Thread-3393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:24:40.419 [INFO] [Thread-3393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:24:40.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:24:40.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:24:41.237 [DEBUG] [Thread-3393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:24:41.237 [DEBUG] [Thread-3393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:24:41.284 [DEBUG] [Thread-3393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:24:41.285 [DEBUG] [Thread-3393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:24:41.293 [DEBUG] [Thread-3393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:24:41.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:24:41.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')
2025-12-25T02:24:41.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:24:41.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:24:41.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:24:41.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:24:41.326 [DEBUG] [Thread-3393] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:24:41.612 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:24:41.613 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:24:42.404 [DEBUG] [Thread-3395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:24:57.454 [DEBUG] [Thread-3396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:25:11.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:25:11.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:25:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:25:12.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 25, 5), 0.41, 97.12, 0.0, 17.94, 11.57, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:25:12.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:25:05
2025-12-25T02:25:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:25:12.318 [DEBUG] [Thread-3397] [transport.py] [_log()] starting thread (client mode): 0xb6b2ac80
2025-12-25T02:25:12.318 [DEBUG] [Thread-3397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:25:12.338 [DEBUG] [Thread-3397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:25:12.338 [INFO] [Thread-3397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:25:12.341 [DEBUG] [Thread-3397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] client lang: <none>
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] server lang: <none>
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] kex follows: False
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:25:12.342 [DEBUG] [Thread-3397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:25:12.343 [DEBUG] [Thread-3397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:25:12.343 [DEBUG] [Thread-3397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:25:12.343 [DEBUG] [Thread-3397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:25:12.343 [DEBUG] [Thread-3397] [transport.py] [_log()] Compression: none
2025-12-25T02:25:12.343 [DEBUG] [Thread-3397] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:25:12.363 [DEBUG] [Thread-3397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:25:12.363 [DEBUG] [Thread-3397] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:25:12.364 [DEBUG] [Thread-3397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:25:12.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:25:12.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:25:12.366 [DEBUG] [Thread-3397] [transport.py] [_log()] userauth is OK
2025-12-25T02:25:12.366 [DEBUG] [Thread-3397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:25:12.366 [DEBUG] [Thread-3397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:25:12.366 [DEBUG] [Thread-3397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:25:12.366 [DEBUG] [Thread-3397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:25:12.390 [INFO] [Thread-3397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:25:12.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:25:12.491 [DEBUG] [Thread-3399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:25:13.129 [DEBUG] [Thread-3397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:25:13.129 [DEBUG] [Thread-3397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:25:13.130 [DEBUG] [Thread-3397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:25:13.170 [DEBUG] [Thread-3397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:25:13.170 [DEBUG] [Thread-3397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:25:13.174 [DEBUG] [Thread-3397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:25:13.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:25:13.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:25:13.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:25:13.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:25:13.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:25:13.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:25:13.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:25:13.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:25:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:25:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.017083 -999.00  +11.50  12.79     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.8 12.8 159.4 19.8 13.3 -9.8 13.2 -6.9 13.0 -9.1 13.3 -6.5
2025-12-25T02:25:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:25:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:25:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.017083
2025-12-25T02:25:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:25:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:25:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:25:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:25:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:25:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:25:05', tmtdew=0.41, humidity=97.12, cloud=0.0, wind=17.94, temperature=11.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:24:35.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:25:13.205 [DEBUG] [Thread-3397] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:25:13.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:25:13.298 [DEBUG] [Thread-3401] [transport.py] [_log()] starting thread (client mode): 0xb6b2b5b0
2025-12-25T02:25:13.298 [DEBUG] [Thread-3401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:25:13.312 [DEBUG] [Thread-3401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:25:13.312 [INFO] [Thread-3401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] client lang: <none>
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] server lang: <none>
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] kex follows: False
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:25:13.320 [DEBUG] [Thread-3401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:25:13.321 [DEBUG] [Thread-3401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:25:13.321 [DEBUG] [Thread-3401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:25:13.321 [DEBUG] [Thread-3401] [transport.py] [_log()] Compression: none
2025-12-25T02:25:13.321 [DEBUG] [Thread-3401] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:25:13.378 [DEBUG] [Thread-3401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:25:13.379 [DEBUG] [Thread-3401] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:25:13.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:25:13.380 [DEBUG] [Thread-3401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:25:13.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:25:13.435 [DEBUG] [Thread-3401] [transport.py] [_log()] userauth is OK
2025-12-25T02:25:13.435 [DEBUG] [Thread-3401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:25:13.435 [DEBUG] [Thread-3401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:25:13.435 [DEBUG] [Thread-3401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:25:13.435 [DEBUG] [Thread-3401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:25:13.454 [INFO] [Thread-3401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:25:13.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:25:13.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:25:14.318 [DEBUG] [Thread-3401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:25:14.318 [DEBUG] [Thread-3401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:25:14.366 [DEBUG] [Thread-3401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:25:14.366 [DEBUG] [Thread-3401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:25:14.375 [DEBUG] [Thread-3401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:25:14.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:25:14.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:25:14.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:25:14.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:25:14.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:25:14.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:25:14.412 [DEBUG] [Thread-3401] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:25:27.523 [DEBUG] [Thread-3403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:25:28.131 [DEBUG] [Thread-3404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:25:41.814 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:25:41.816 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:25:42.565 [DEBUG] [Thread-3405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:25:44.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:25:44.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:25:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:25:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 25, 37), 0.41, 97.13, 0.0, 19.18, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:25:45.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:25:37
2025-12-25T02:25:45.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:25:45.412 [DEBUG] [Thread-3406] [transport.py] [_log()] starting thread (client mode): 0xb6b287f0
2025-12-25T02:25:45.412 [DEBUG] [Thread-3406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:25:45.433 [DEBUG] [Thread-3406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:25:45.433 [INFO] [Thread-3406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:25:45.436 [DEBUG] [Thread-3406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:25:45.436 [DEBUG] [Thread-3406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:25:45.436 [DEBUG] [Thread-3406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:25:45.436 [DEBUG] [Thread-3406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:25:45.436 [DEBUG] [Thread-3406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:25:45.436 [DEBUG] [Thread-3406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] client lang: <none>
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] server lang: <none>
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] kex follows: False
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] Compression: none
2025-12-25T02:25:45.437 [DEBUG] [Thread-3406] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:25:45.454 [DEBUG] [Thread-3406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:25:45.454 [DEBUG] [Thread-3406] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:25:45.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:25:45.455 [DEBUG] [Thread-3406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:25:45.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:25:45.457 [DEBUG] [Thread-3406] [transport.py] [_log()] userauth is OK
2025-12-25T02:25:45.457 [DEBUG] [Thread-3406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:25:45.457 [DEBUG] [Thread-3406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:25:45.457 [DEBUG] [Thread-3406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:25:45.457 [DEBUG] [Thread-3406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:25:45.473 [INFO] [Thread-3406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:25:45.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:25:46.254 [DEBUG] [Thread-3406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:25:46.255 [DEBUG] [Thread-3406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:25:46.255 [DEBUG] [Thread-3406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:25:46.295 [DEBUG] [Thread-3406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:25:46.295 [DEBUG] [Thread-3406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:25:46.297 [DEBUG] [Thread-3406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:25:46.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:25:46.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:25:46.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:25:46.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:25:46.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:25:46.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:25:46.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:25:46.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:25:46.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:25:46.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.017430 -999.00  +11.50  14.72     94  +10.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.3 14.7 157.0 19.5 13.3 -6.4 13.1 -5.2 12.9 -6.5 13.4 -6.5
2025-12-25T02:25:46.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:25:46.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:25:46.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.017430
2025-12-25T02:25:46.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:25:46.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:25:46.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:25:46.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:25:46.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:25:46.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:25:37', tmtdew=0.41, humidity=97.13, cloud=0.0, wind=19.18, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:25:05.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:08:00')
2025-12-25T02:25:46.320 [DEBUG] [Thread-3406] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:25:46.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:25:46.410 [DEBUG] [Thread-3409] [transport.py] [_log()] starting thread (client mode): 0xb6b21600
2025-12-25T02:25:46.411 [DEBUG] [Thread-3409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:25:46.425 [DEBUG] [Thread-3409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:25:46.425 [INFO] [Thread-3409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:25:46.432 [DEBUG] [Thread-3409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:25:46.433 [DEBUG] [Thread-3409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:25:46.433 [DEBUG] [Thread-3409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:25:46.433 [DEBUG] [Thread-3409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:25:46.433 [DEBUG] [Thread-3409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:25:46.433 [DEBUG] [Thread-3409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:25:46.433 [DEBUG] [Thread-3409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:25:46.433 [DEBUG] [Thread-3409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:25:46.433 [DEBUG] [Thread-3409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] client lang: <none>
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] server lang: <none>
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] kex follows: False
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] Compression: none
2025-12-25T02:25:46.434 [DEBUG] [Thread-3409] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:25:46.491 [DEBUG] [Thread-3409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:25:46.491 [DEBUG] [Thread-3409] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:25:46.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:25:46.492 [DEBUG] [Thread-3409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:25:46.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:25:46.546 [DEBUG] [Thread-3409] [transport.py] [_log()] userauth is OK
2025-12-25T02:25:46.546 [DEBUG] [Thread-3409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:25:46.547 [DEBUG] [Thread-3409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:25:46.547 [DEBUG] [Thread-3409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:25:46.547 [DEBUG] [Thread-3409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:25:46.565 [INFO] [Thread-3409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:25:46.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:25:46.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:25:47.413 [DEBUG] [Thread-3409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:25:47.413 [DEBUG] [Thread-3409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:25:47.461 [DEBUG] [Thread-3409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:25:47.461 [DEBUG] [Thread-3409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:25:47.470 [DEBUG] [Thread-3409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:25:47.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:25:47.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:25:47.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:25:47.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:25:47.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:25:47.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:25:47.504 [DEBUG] [Thread-3409] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:25:57.601 [DEBUG] [Thread-3411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:26:12.651 [DEBUG] [Thread-3412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:26:17.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:26:17.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:26:17.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:26:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 26, 9), 0.41, 97.12, 0.0, 20.63, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:26:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:26:09
2025-12-25T02:26:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:26:18.513 [DEBUG] [Thread-3413] [transport.py] [_log()] starting thread (client mode): 0xb95f1180
2025-12-25T02:26:18.513 [DEBUG] [Thread-3413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:26:18.533 [DEBUG] [Thread-3413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:26:18.533 [INFO] [Thread-3413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:26:18.536 [DEBUG] [Thread-3413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:26:18.536 [DEBUG] [Thread-3413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:26:18.536 [DEBUG] [Thread-3413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:26:18.536 [DEBUG] [Thread-3413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:26:18.536 [DEBUG] [Thread-3413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:26:18.536 [DEBUG] [Thread-3413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] client lang: <none>
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] server lang: <none>
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] kex follows: False
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] Compression: none
2025-12-25T02:26:18.537 [DEBUG] [Thread-3413] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:26:18.555 [DEBUG] [Thread-3413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:26:18.556 [DEBUG] [Thread-3413] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:26:18.556 [DEBUG] [Thread-3413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:26:18.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:26:18.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:26:18.558 [DEBUG] [Thread-3413] [transport.py] [_log()] userauth is OK
2025-12-25T02:26:18.558 [DEBUG] [Thread-3413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:26:18.558 [DEBUG] [Thread-3413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:26:18.558 [DEBUG] [Thread-3413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:26:18.559 [DEBUG] [Thread-3413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:26:18.582 [INFO] [Thread-3413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:26:18.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:26:19.213 [DEBUG] [Thread-3413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:26:19.214 [DEBUG] [Thread-3413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:26:19.214 [DEBUG] [Thread-3413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:26:19.255 [DEBUG] [Thread-3413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:26:19.255 [DEBUG] [Thread-3413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:26:19.258 [DEBUG] [Thread-3413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:26:19.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:26:19.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:26:19.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:26:19.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:26:19.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:26:19.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:26:19.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:26:19.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:26:19.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:26:19.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.017777 -999.00  +11.50  11.82     94  +10.80 1 3 1 3 1     0    0 -999.00 0.00 Z...w 12.3 11.8 159.8 20.2 13.3 -5.6 13.2 -4.7 13.0 -5.6 13.3 -5.1
2025-12-25T02:26:19.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:26:19.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:26:19.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.017777
2025-12-25T02:26:19.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:26:19.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:26:19.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:26:19.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:26:19.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:26:19.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:26:09', tmtdew=0.41, humidity=97.12, cloud=0.0, wind=20.63, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:25:35.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:26:19.282 [DEBUG] [Thread-3413] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:26:19.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:26:19.377 [DEBUG] [Thread-3416] [transport.py] [_log()] starting thread (client mode): 0xb6b20100
2025-12-25T02:26:19.377 [DEBUG] [Thread-3416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:26:19.392 [DEBUG] [Thread-3416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:26:19.393 [INFO] [Thread-3416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:26:19.405 [DEBUG] [Thread-3416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:26:19.405 [DEBUG] [Thread-3416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:26:19.405 [DEBUG] [Thread-3416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:26:19.405 [DEBUG] [Thread-3416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:26:19.405 [DEBUG] [Thread-3416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:26:19.405 [DEBUG] [Thread-3416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:26:19.405 [DEBUG] [Thread-3416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] client lang: <none>
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] server lang: <none>
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] kex follows: False
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] Compression: none
2025-12-25T02:26:19.406 [DEBUG] [Thread-3416] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:26:19.463 [DEBUG] [Thread-3416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:26:19.463 [DEBUG] [Thread-3416] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:26:19.463 [DEBUG] [Thread-3416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:26:19.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:26:19.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:26:19.524 [DEBUG] [Thread-3416] [transport.py] [_log()] userauth is OK
2025-12-25T02:26:19.525 [DEBUG] [Thread-3416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:26:19.525 [DEBUG] [Thread-3416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:26:19.525 [DEBUG] [Thread-3416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:26:19.525 [DEBUG] [Thread-3416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:26:19.546 [INFO] [Thread-3416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:26:19.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:26:19.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:26:20.376 [DEBUG] [Thread-3416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:26:20.376 [DEBUG] [Thread-3416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:26:20.424 [DEBUG] [Thread-3416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:26:20.424 [DEBUG] [Thread-3416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:26:20.432 [DEBUG] [Thread-3416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:26:20.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:26:20.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:26:20.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
2025-12-25T02:26:20.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:26:20.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:26:20.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:26:20.466 [DEBUG] [Thread-3416] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:26:27.687 [DEBUG] [Thread-3418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:26:28.192 [DEBUG] [Thread-3419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:26:42.015 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:26:42.016 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:26:42.734 [DEBUG] [Thread-3420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:26:50.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:26:50.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:26:50.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:26:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 26, 41), 0.41, 97.12, 0.0, 22.43, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:26:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:26:41
2025-12-25T02:26:51.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:26:51.461 [DEBUG] [Thread-3421] [transport.py] [_log()] starting thread (client mode): 0xb6b29780
2025-12-25T02:26:51.461 [DEBUG] [Thread-3421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:26:51.481 [DEBUG] [Thread-3421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:26:51.481 [INFO] [Thread-3421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:26:51.484 [DEBUG] [Thread-3421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:26:51.484 [DEBUG] [Thread-3421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] client lang: <none>
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] server lang: <none>
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] kex follows: False
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] Compression: none
2025-12-25T02:26:51.485 [DEBUG] [Thread-3421] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:26:51.501 [DEBUG] [Thread-3421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:26:51.502 [DEBUG] [Thread-3421] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:26:51.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:26:51.503 [DEBUG] [Thread-3421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:26:51.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:26:51.505 [DEBUG] [Thread-3421] [transport.py] [_log()] userauth is OK
2025-12-25T02:26:51.505 [DEBUG] [Thread-3421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:26:51.505 [DEBUG] [Thread-3421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:26:51.505 [DEBUG] [Thread-3421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:26:51.506 [DEBUG] [Thread-3421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:26:51.522 [INFO] [Thread-3421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:26:51.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:26:52.261 [DEBUG] [Thread-3421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:26:52.261 [DEBUG] [Thread-3421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:26:52.261 [DEBUG] [Thread-3421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:26:52.302 [DEBUG] [Thread-3421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:26:52.302 [DEBUG] [Thread-3421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:26:52.305 [DEBUG] [Thread-3421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:26:52.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:26:52.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:26:52.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:26:52.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:26:52.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:26:52.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:26:52.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:26:52.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:26:52.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:26:52.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.018125 -999.00  +11.50  14.98     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 Z...w 15.6 15.0 164.0 23.1 13.4 -5.8 13.1 -6.4 13.0 -5.3 13.3 -7.1
2025-12-25T02:26:52.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:26:52.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:26:52.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.018125
2025-12-25T02:26:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:26:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:26:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:26:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:26:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:26:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:26:41', tmtdew=0.41, humidity=97.12, cloud=0.0, wind=22.43, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:26:06.000', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:26:52.334 [DEBUG] [Thread-3421] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:26:52.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:26:52.427 [DEBUG] [Thread-3424] [transport.py] [_log()] starting thread (client mode): 0xb957ac20
2025-12-25T02:26:52.427 [DEBUG] [Thread-3424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:26:52.442 [DEBUG] [Thread-3424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:26:52.442 [INFO] [Thread-3424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] client lang: <none>
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] server lang: <none>
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] kex follows: False
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:26:52.450 [DEBUG] [Thread-3424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:26:52.451 [DEBUG] [Thread-3424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:26:52.451 [DEBUG] [Thread-3424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:26:52.451 [DEBUG] [Thread-3424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:26:52.451 [DEBUG] [Thread-3424] [transport.py] [_log()] Compression: none
2025-12-25T02:26:52.451 [DEBUG] [Thread-3424] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:26:52.506 [DEBUG] [Thread-3424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:26:52.507 [DEBUG] [Thread-3424] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:26:52.508 [DEBUG] [Thread-3424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:26:52.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:26:52.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:26:52.563 [DEBUG] [Thread-3424] [transport.py] [_log()] userauth is OK
2025-12-25T02:26:52.563 [DEBUG] [Thread-3424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:26:52.563 [DEBUG] [Thread-3424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:26:52.563 [DEBUG] [Thread-3424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:26:52.563 [DEBUG] [Thread-3424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:26:52.581 [INFO] [Thread-3424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:26:52.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:26:52.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:26:53.415 [DEBUG] [Thread-3424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:26:53.415 [DEBUG] [Thread-3424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:26:53.463 [DEBUG] [Thread-3424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:26:53.463 [DEBUG] [Thread-3424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:26:53.472 [DEBUG] [Thread-3424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:26:53.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:26:53.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:26:53.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:26:53.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:26:53.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:26:53.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:26:53.506 [DEBUG] [Thread-3424] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:26:57.767 [DEBUG] [Thread-3426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:27:12.820 [DEBUG] [Thread-3427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:27:23.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:27:23.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:27:23.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:27:24.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 27, 14), 0.41, 97.16, 0.0, 22.23, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:27:24.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:27:14
2025-12-25T02:27:24.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:27:24.540 [DEBUG] [Thread-3428] [transport.py] [_log()] starting thread (client mode): 0xb95b19f0
2025-12-25T02:27:24.541 [DEBUG] [Thread-3428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:27:24.556 [DEBUG] [Thread-3428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:27:24.556 [INFO] [Thread-3428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] client lang: <none>
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] server lang: <none>
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] kex follows: False
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] Compression: none
2025-12-25T02:27:24.560 [DEBUG] [Thread-3428] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:27:24.575 [DEBUG] [Thread-3428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:27:24.575 [DEBUG] [Thread-3428] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:27:24.575 [DEBUG] [Thread-3428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:27:24.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:27:24.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:27:24.576 [DEBUG] [Thread-3428] [transport.py] [_log()] userauth is OK
2025-12-25T02:27:24.576 [DEBUG] [Thread-3428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:27:24.576 [DEBUG] [Thread-3428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:27:24.576 [DEBUG] [Thread-3428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:27:24.576 [DEBUG] [Thread-3428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:27:24.593 [INFO] [Thread-3428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:27:24.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:27:25.239 [DEBUG] [Thread-3428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:27:25.239 [DEBUG] [Thread-3428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:27:25.239 [DEBUG] [Thread-3428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:27:25.280 [DEBUG] [Thread-3428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:27:25.280 [DEBUG] [Thread-3428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:27:25.282 [DEBUG] [Thread-3428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:27:25.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:27:25.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:27:25.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:27:25.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:27:25.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:27:25.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:27:25.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.018472 -999.00  +11.50  16.03     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.9 16.0 162.8 21.6 13.4 -5.9 13.2 -6.9 12.9 -5.7 13.3 -5.9
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.018472
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:27:25.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:27:14', tmtdew=0.41, humidity=97.16, cloud=0.0, wind=22.23, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:26:35.981', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:27:25.300 [DEBUG] [Thread-3428] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:27:25.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:27:25.385 [DEBUG] [Thread-3431] [transport.py] [_log()] starting thread (client mode): 0xb6b2b010
2025-12-25T02:27:25.385 [DEBUG] [Thread-3431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:27:25.400 [DEBUG] [Thread-3431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:27:25.400 [INFO] [Thread-3431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] client lang: <none>
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] server lang: <none>
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] kex follows: False
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:27:25.407 [DEBUG] [Thread-3431] [transport.py] [_log()] Compression: none
2025-12-25T02:27:25.408 [DEBUG] [Thread-3431] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:27:25.465 [DEBUG] [Thread-3431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:27:25.465 [DEBUG] [Thread-3431] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:27:25.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:27:25.465 [DEBUG] [Thread-3431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:27:25.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:27:25.522 [DEBUG] [Thread-3431] [transport.py] [_log()] userauth is OK
2025-12-25T02:27:25.522 [DEBUG] [Thread-3431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:27:25.522 [DEBUG] [Thread-3431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:27:25.522 [DEBUG] [Thread-3431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:27:25.522 [DEBUG] [Thread-3431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:27:25.535 [INFO] [Thread-3431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:27:25.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:27:25.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:27:26.381 [DEBUG] [Thread-3431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:27:26.381 [DEBUG] [Thread-3431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:27:26.429 [DEBUG] [Thread-3431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:27:26.429 [DEBUG] [Thread-3431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:27:26.437 [DEBUG] [Thread-3431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:27:26.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:27:26.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:27:26.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:27:26.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:27:26.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:27:26.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:27:26.469 [DEBUG] [Thread-3431] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:27:27.854 [DEBUG] [Thread-3433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:27:28.269 [DEBUG] [Thread-3434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:27:42.216 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:27:42.218 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:27:42.908 [DEBUG] [Thread-3435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:27:56.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:27:56.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:27:56.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:27:57.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 27, 46), 0.41, 97.15, 0.0, 22.21, 11.59, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:27:57.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:27:46
2025-12-25T02:27:57.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:27:57.473 [DEBUG] [Thread-3436] [transport.py] [_log()] starting thread (client mode): 0xb6b229e0
2025-12-25T02:27:57.473 [DEBUG] [Thread-3436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:27:57.494 [DEBUG] [Thread-3436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:27:57.494 [INFO] [Thread-3436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] client lang: <none>
2025-12-25T02:27:57.497 [DEBUG] [Thread-3436] [transport.py] [_log()] server lang: <none>
2025-12-25T02:27:57.498 [DEBUG] [Thread-3436] [transport.py] [_log()] kex follows: False
2025-12-25T02:27:57.498 [DEBUG] [Thread-3436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:27:57.498 [DEBUG] [Thread-3436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:27:57.498 [DEBUG] [Thread-3436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:27:57.498 [DEBUG] [Thread-3436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:27:57.498 [DEBUG] [Thread-3436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:27:57.498 [DEBUG] [Thread-3436] [transport.py] [_log()] Compression: none
2025-12-25T02:27:57.498 [DEBUG] [Thread-3436] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:27:57.515 [DEBUG] [Thread-3436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:27:57.516 [DEBUG] [Thread-3436] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:27:57.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:27:57.517 [DEBUG] [Thread-3436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:27:57.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:27:57.519 [DEBUG] [Thread-3436] [transport.py] [_log()] userauth is OK
2025-12-25T02:27:57.519 [DEBUG] [Thread-3436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:27:57.519 [DEBUG] [Thread-3436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:27:57.519 [DEBUG] [Thread-3436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:27:57.519 [DEBUG] [Thread-3436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:27:57.536 [INFO] [Thread-3436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:27:57.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:27:57.943 [DEBUG] [Thread-3438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:27:58.329 [DEBUG] [Thread-3436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:27:58.330 [DEBUG] [Thread-3436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:27:58.330 [DEBUG] [Thread-3436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:27:58.371 [DEBUG] [Thread-3436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:27:58.371 [DEBUG] [Thread-3436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:27:58.372 [DEBUG] [Thread-3436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:27:58.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:27:58.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:27:58.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:27:58.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:27:58.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:27:58.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:27:58.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:27:58.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:27:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:27:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.019166 -999.00  +11.50  16.78     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 z...W 18.8 16.8 158.2 18.8 13.3 -4.7 13.2 -6.0 12.9 -4.6 13.3 -5.6
2025-12-25T02:27:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:27:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:27:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.019166
2025-12-25T02:27:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:27:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:27:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:27:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:27:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:27:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:27:46', tmtdew=0.41, humidity=97.15, cloud=0.0, wind=22.21, temperature=11.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:27:35.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:27:58.388 [DEBUG] [Thread-3436] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:27:58.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:27:58.484 [DEBUG] [Thread-3440] [transport.py] [_log()] starting thread (client mode): 0xb95d45b0
2025-12-25T02:27:58.484 [DEBUG] [Thread-3440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:27:58.498 [DEBUG] [Thread-3440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:27:58.498 [INFO] [Thread-3440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:27:58.505 [DEBUG] [Thread-3440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] client lang: <none>
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] server lang: <none>
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] kex follows: False
2025-12-25T02:27:58.506 [DEBUG] [Thread-3440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:27:58.507 [DEBUG] [Thread-3440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:27:58.507 [DEBUG] [Thread-3440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:27:58.507 [DEBUG] [Thread-3440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:27:58.507 [DEBUG] [Thread-3440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:27:58.507 [DEBUG] [Thread-3440] [transport.py] [_log()] Compression: none
2025-12-25T02:27:58.507 [DEBUG] [Thread-3440] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:27:58.562 [DEBUG] [Thread-3440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:27:58.563 [DEBUG] [Thread-3440] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:27:58.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:27:58.564 [DEBUG] [Thread-3440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:27:58.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:27:58.619 [DEBUG] [Thread-3440] [transport.py] [_log()] userauth is OK
2025-12-25T02:27:58.619 [DEBUG] [Thread-3440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:27:58.619 [DEBUG] [Thread-3440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:27:58.620 [DEBUG] [Thread-3440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:27:58.620 [DEBUG] [Thread-3440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:27:58.639 [INFO] [Thread-3440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:27:58.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:27:58.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:27:59.470 [DEBUG] [Thread-3440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:27:59.470 [DEBUG] [Thread-3440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:27:59.518 [DEBUG] [Thread-3440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:27:59.518 [DEBUG] [Thread-3440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:27:59.527 [DEBUG] [Thread-3440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:27:59.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:27:59.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')
2025-12-25T02:27:59.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:27:59.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:27:59.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:27:59.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:27:59.565 [DEBUG] [Thread-3440] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:28:12.977 [DEBUG] [Thread-3442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:28:28.023 [DEBUG] [Thread-3443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:28:28.335 [DEBUG] [Thread-3444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:28:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:28:29.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:28:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:28:30.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 28, 18), 0.41, 97.16, 0.0, 23.47, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:28:30.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:28:18
2025-12-25T02:28:30.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:28:30.553 [DEBUG] [Thread-3445] [transport.py] [_log()] starting thread (client mode): 0xb6b14f70
2025-12-25T02:28:30.554 [DEBUG] [Thread-3445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:28:30.574 [DEBUG] [Thread-3445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:28:30.574 [INFO] [Thread-3445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] client lang: <none>
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] server lang: <none>
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] kex follows: False
2025-12-25T02:28:30.577 [DEBUG] [Thread-3445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:28:30.578 [DEBUG] [Thread-3445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:28:30.578 [DEBUG] [Thread-3445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:28:30.578 [DEBUG] [Thread-3445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:28:30.578 [DEBUG] [Thread-3445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:28:30.578 [DEBUG] [Thread-3445] [transport.py] [_log()] Compression: none
2025-12-25T02:28:30.578 [DEBUG] [Thread-3445] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:28:30.593 [DEBUG] [Thread-3445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:28:30.593 [DEBUG] [Thread-3445] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:28:30.593 [DEBUG] [Thread-3445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:28:30.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:28:30.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:28:30.594 [DEBUG] [Thread-3445] [transport.py] [_log()] userauth is OK
2025-12-25T02:28:30.594 [DEBUG] [Thread-3445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:28:30.594 [DEBUG] [Thread-3445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:28:30.594 [DEBUG] [Thread-3445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:28:30.595 [DEBUG] [Thread-3445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:28:30.612 [INFO] [Thread-3445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:28:30.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:28:31.256 [DEBUG] [Thread-3445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:28:31.256 [DEBUG] [Thread-3445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:28:31.257 [DEBUG] [Thread-3445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:28:31.297 [DEBUG] [Thread-3445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:28:31.297 [DEBUG] [Thread-3445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:28:31.301 [DEBUG] [Thread-3445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:28:31.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:28:31.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:28:31.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:28:31.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:28:31.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:28:31.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:28:31.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:28:31.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:28:31.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:28:31.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.019514 -999.00  +11.50  15.91     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.6 15.9 158.7 19.0 13.3 -5.2 13.1 -6.0 13.0 -5.4 13.3 -4.7
2025-12-25T02:28:31.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:28:31.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:28:31.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.019514
2025-12-25T02:28:31.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:28:31.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:28:31.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:28:31.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:28:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:28:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:28:18', tmtdew=0.41, humidity=97.16, cloud=0.0, wind=23.47, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:28:06.010', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:28:31.329 [DEBUG] [Thread-3445] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:28:31.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:28:31.425 [DEBUG] [Thread-3448] [transport.py] [_log()] starting thread (client mode): 0xb6b28a30
2025-12-25T02:28:31.426 [DEBUG] [Thread-3448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:28:31.440 [DEBUG] [Thread-3448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:28:31.440 [INFO] [Thread-3448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] client lang: <none>
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] server lang: <none>
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] kex follows: False
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] Compression: none
2025-12-25T02:28:31.448 [DEBUG] [Thread-3448] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:28:31.507 [DEBUG] [Thread-3448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:28:31.508 [DEBUG] [Thread-3448] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:28:31.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:28:31.509 [DEBUG] [Thread-3448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:28:31.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:28:31.563 [DEBUG] [Thread-3448] [transport.py] [_log()] userauth is OK
2025-12-25T02:28:31.563 [DEBUG] [Thread-3448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:28:31.563 [DEBUG] [Thread-3448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:28:31.564 [DEBUG] [Thread-3448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:28:31.564 [DEBUG] [Thread-3448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:28:31.582 [INFO] [Thread-3448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:28:31.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:28:31.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:28:32.394 [DEBUG] [Thread-3448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:28:32.395 [DEBUG] [Thread-3448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:28:32.443 [DEBUG] [Thread-3448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:28:32.443 [DEBUG] [Thread-3448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:28:32.452 [DEBUG] [Thread-3448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:28:32.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:28:32.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:28:32.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:28:32.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:28:32.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:28:32.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:28:32.489 [DEBUG] [Thread-3448] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:28:42.422 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:28:42.423 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:28:43.054 [DEBUG] [Thread-3450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:28:58.098 [DEBUG] [Thread-3451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:29:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:29:02.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:29:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:29:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 28, 50), 0.4, 97.21, 0.0, 22.81, 11.6, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:29:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:28:50
2025-12-25T02:29:03.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:29:03.473 [DEBUG] [Thread-3452] [transport.py] [_log()] starting thread (client mode): 0xb9590190
2025-12-25T02:29:03.473 [DEBUG] [Thread-3452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:29:03.494 [DEBUG] [Thread-3452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:29:03.494 [INFO] [Thread-3452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] client lang: <none>
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] server lang: <none>
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] kex follows: False
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:29:03.497 [DEBUG] [Thread-3452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:29:03.498 [DEBUG] [Thread-3452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:29:03.498 [DEBUG] [Thread-3452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:29:03.498 [DEBUG] [Thread-3452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:29:03.498 [DEBUG] [Thread-3452] [transport.py] [_log()] Compression: none
2025-12-25T02:29:03.498 [DEBUG] [Thread-3452] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:29:03.516 [DEBUG] [Thread-3452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:29:03.517 [DEBUG] [Thread-3452] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:29:03.518 [DEBUG] [Thread-3452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:29:03.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:29:03.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:29:03.520 [DEBUG] [Thread-3452] [transport.py] [_log()] userauth is OK
2025-12-25T02:29:03.520 [DEBUG] [Thread-3452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:29:03.520 [DEBUG] [Thread-3452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:29:03.521 [DEBUG] [Thread-3452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:29:03.521 [DEBUG] [Thread-3452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:29:03.540 [INFO] [Thread-3452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:29:03.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:29:04.344 [DEBUG] [Thread-3452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:29:04.345 [DEBUG] [Thread-3452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:29:04.345 [DEBUG] [Thread-3452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:29:04.386 [DEBUG] [Thread-3452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:29:04.386 [DEBUG] [Thread-3452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:29:04.390 [DEBUG] [Thread-3452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:29:04.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:29:04.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:29:04.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:29:04.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:29:04.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:29:04.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:29:04.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:29:04.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:29:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:29:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.019861 -999.00  +11.50  13.54     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.5 13.5 154.4 20.6 13.4 -8.0 13.2 -5.2 13.0 -7.6 13.3 -7.0
2025-12-25T02:29:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:29:04.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:29:04.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.019861
2025-12-25T02:29:04.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:29:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:29:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:29:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:29:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:29:04.418 [DEBUG] [Thread-3452] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:29:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:28:50', tmtdew=0.4, humidity=97.21, cloud=0.0, wind=22.81, temperature=11.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:28:35.990', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:29:04.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:29:04.511 [DEBUG] [Thread-3455] [transport.py] [_log()] starting thread (client mode): 0xb6b23970
2025-12-25T02:29:04.512 [DEBUG] [Thread-3455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:29:04.526 [DEBUG] [Thread-3455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:29:04.527 [INFO] [Thread-3455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:29:04.534 [DEBUG] [Thread-3455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:29:04.534 [DEBUG] [Thread-3455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] client lang: <none>
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] server lang: <none>
2025-12-25T02:29:04.535 [DEBUG] [Thread-3455] [transport.py] [_log()] kex follows: False
2025-12-25T02:29:04.536 [DEBUG] [Thread-3455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:29:04.536 [DEBUG] [Thread-3455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:29:04.536 [DEBUG] [Thread-3455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:29:04.536 [DEBUG] [Thread-3455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:29:04.536 [DEBUG] [Thread-3455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:29:04.536 [DEBUG] [Thread-3455] [transport.py] [_log()] Compression: none
2025-12-25T02:29:04.536 [DEBUG] [Thread-3455] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:29:04.595 [DEBUG] [Thread-3455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:29:04.596 [DEBUG] [Thread-3455] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:29:04.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:29:04.598 [DEBUG] [Thread-3455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:29:04.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:29:04.651 [DEBUG] [Thread-3455] [transport.py] [_log()] userauth is OK
2025-12-25T02:29:04.652 [DEBUG] [Thread-3455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:29:04.652 [DEBUG] [Thread-3455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:29:04.652 [DEBUG] [Thread-3455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:29:04.652 [DEBUG] [Thread-3455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:29:04.671 [INFO] [Thread-3455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:29:04.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:29:04.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:29:05.508 [DEBUG] [Thread-3455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:29:05.509 [DEBUG] [Thread-3455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:29:05.558 [DEBUG] [Thread-3455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:29:05.558 [DEBUG] [Thread-3455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:29:05.570 [DEBUG] [Thread-3455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:29:05.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:29:05.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:29:05.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:29:05.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:29:05.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:29:05.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:29:05.615 [DEBUG] [Thread-3455] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:29:13.133 [DEBUG] [Thread-3457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:29:28.178 [DEBUG] [Thread-3458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:29:28.405 [DEBUG] [Thread-3459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:29:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:29:35.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:29:35.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:29:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 29, 22), 0.41, 97.15, 0.0, 23.64, 11.55, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:29:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:29:22
2025-12-25T02:29:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:29:36.611 [DEBUG] [Thread-3460] [transport.py] [_log()] starting thread (client mode): 0xb6b234c0
2025-12-25T02:29:36.611 [DEBUG] [Thread-3460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:29:36.630 [DEBUG] [Thread-3460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:29:36.630 [INFO] [Thread-3460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] client lang: <none>
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] server lang: <none>
2025-12-25T02:29:36.634 [DEBUG] [Thread-3460] [transport.py] [_log()] kex follows: False
2025-12-25T02:29:36.635 [DEBUG] [Thread-3460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:29:36.635 [DEBUG] [Thread-3460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:29:36.635 [DEBUG] [Thread-3460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:29:36.635 [DEBUG] [Thread-3460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:29:36.635 [DEBUG] [Thread-3460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:29:36.635 [DEBUG] [Thread-3460] [transport.py] [_log()] Compression: none
2025-12-25T02:29:36.635 [DEBUG] [Thread-3460] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:29:36.653 [DEBUG] [Thread-3460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:29:36.654 [DEBUG] [Thread-3460] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:29:36.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:29:36.655 [DEBUG] [Thread-3460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:29:36.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:29:36.657 [DEBUG] [Thread-3460] [transport.py] [_log()] userauth is OK
2025-12-25T02:29:36.657 [DEBUG] [Thread-3460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:29:36.658 [DEBUG] [Thread-3460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:29:36.658 [DEBUG] [Thread-3460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:29:36.658 [DEBUG] [Thread-3460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:29:36.693 [INFO] [Thread-3460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:29:36.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:29:37.333 [DEBUG] [Thread-3460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:29:37.333 [DEBUG] [Thread-3460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:29:37.334 [DEBUG] [Thread-3460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:29:37.375 [DEBUG] [Thread-3460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:29:37.375 [DEBUG] [Thread-3460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:29:37.378 [DEBUG] [Thread-3460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:29:37.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:29:37.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:29:37.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:29:37.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:29:37.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:29:37.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:29:37.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:29:37.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:29:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:29:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.020208 -999.00  +11.50  13.89     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 Z...w 14.7 13.9 159.2 21.0 13.3 -5.1 13.1 -5.9 12.9 -5.0 13.3 -5.6
2025-12-25T02:29:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:29:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:29:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.020208
2025-12-25T02:29:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:29:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:29:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:29:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:29:37.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:29:37.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:29:22', tmtdew=0.41, humidity=97.15, cloud=0.0, wind=23.64, temperature=11.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:29:05.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:29:37.404 [DEBUG] [Thread-3460] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:29:37.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:29:37.499 [DEBUG] [Thread-3463] [transport.py] [_log()] starting thread (client mode): 0xb955bb20
2025-12-25T02:29:37.499 [DEBUG] [Thread-3463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:29:37.515 [DEBUG] [Thread-3463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:29:37.515 [INFO] [Thread-3463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:29:37.522 [DEBUG] [Thread-3463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] client lang: <none>
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] server lang: <none>
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] kex follows: False
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] Compression: none
2025-12-25T02:29:37.523 [DEBUG] [Thread-3463] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:29:37.583 [DEBUG] [Thread-3463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:29:37.584 [DEBUG] [Thread-3463] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:29:37.584 [DEBUG] [Thread-3463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:29:37.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:29:37.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:29:37.638 [DEBUG] [Thread-3463] [transport.py] [_log()] userauth is OK
2025-12-25T02:29:37.639 [DEBUG] [Thread-3463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:29:37.639 [DEBUG] [Thread-3463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:29:37.639 [DEBUG] [Thread-3463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:29:37.639 [DEBUG] [Thread-3463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:29:37.657 [INFO] [Thread-3463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:29:37.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:29:37.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:29:38.492 [DEBUG] [Thread-3463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:29:38.493 [DEBUG] [Thread-3463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:29:38.541 [DEBUG] [Thread-3463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:29:38.541 [DEBUG] [Thread-3463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:29:38.550 [DEBUG] [Thread-3463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:29:38.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:29:38.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')
2025-12-25T02:29:38.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') -> 00000000
2025-12-25T02:29:38.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:29:38.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:29:38.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:29:38.586 [DEBUG] [Thread-3463] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:29:42.626 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:29:42.628 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:29:43.215 [DEBUG] [Thread-3465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:29:58.272 [DEBUG] [Thread-3466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:30:08.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:30:08.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:30:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:30:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 29, 54), 0.41, 97.16, 0.0, 20.33, 11.54, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:30:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:29:54
2025-12-25T02:30:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:30:09.582 [DEBUG] [Thread-3467] [transport.py] [_log()] starting thread (client mode): 0xb6b23ac0
2025-12-25T02:30:09.582 [DEBUG] [Thread-3467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:30:09.604 [DEBUG] [Thread-3467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:30:09.604 [INFO] [Thread-3467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:30:09.607 [DEBUG] [Thread-3467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] client lang: <none>
2025-12-25T02:30:09.608 [DEBUG] [Thread-3467] [transport.py] [_log()] server lang: <none>
2025-12-25T02:30:09.609 [DEBUG] [Thread-3467] [transport.py] [_log()] kex follows: False
2025-12-25T02:30:09.609 [DEBUG] [Thread-3467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:30:09.609 [DEBUG] [Thread-3467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:30:09.609 [DEBUG] [Thread-3467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:30:09.609 [DEBUG] [Thread-3467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:30:09.609 [DEBUG] [Thread-3467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:30:09.609 [DEBUG] [Thread-3467] [transport.py] [_log()] Compression: none
2025-12-25T02:30:09.609 [DEBUG] [Thread-3467] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:30:09.626 [DEBUG] [Thread-3467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:30:09.627 [DEBUG] [Thread-3467] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:30:09.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:30:09.629 [DEBUG] [Thread-3467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:30:09.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:30:09.630 [DEBUG] [Thread-3467] [transport.py] [_log()] userauth is OK
2025-12-25T02:30:09.630 [DEBUG] [Thread-3467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:30:09.631 [DEBUG] [Thread-3467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:30:09.631 [DEBUG] [Thread-3467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:30:09.631 [DEBUG] [Thread-3467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:30:09.656 [INFO] [Thread-3467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:30:09.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:30:10.954 [DEBUG] [Thread-3467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:30:10.954 [DEBUG] [Thread-3467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:30:10.954 [DEBUG] [Thread-3467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:30:10.995 [DEBUG] [Thread-3467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:30:10.995 [DEBUG] [Thread-3467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:30:10.998 [DEBUG] [Thread-3467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:30:11.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:30:11.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:30:11.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:30:11.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:30:11.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:30:11.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:30:11.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:30:11.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:30:11.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:30:11.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.020555 -999.00  +11.50  14.82     94  +10.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.8 14.8 144.8 18.4 13.3 -6.5 13.1 -5.8 12.9 -6.5 13.4 -6.3
2025-12-25T02:30:11.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:30:11.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:30:11.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.020555
2025-12-25T02:30:11.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:30:11.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:30:11.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:30:11.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:30:11.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:30:11.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:29:54', tmtdew=0.41, humidity=97.16, cloud=0.0, wind=20.33, temperature=11.54, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:29:35.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:30:11.051 [DEBUG] [Thread-3467] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:30:11.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:30:11.145 [DEBUG] [Thread-3470] [transport.py] [_log()] starting thread (client mode): 0xb6b14f70
2025-12-25T02:30:11.146 [DEBUG] [Thread-3470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:30:11.165 [DEBUG] [Thread-3470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:30:11.165 [INFO] [Thread-3470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:30:11.173 [DEBUG] [Thread-3470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:30:11.173 [DEBUG] [Thread-3470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:30:11.173 [DEBUG] [Thread-3470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:30:11.173 [DEBUG] [Thread-3470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:30:11.173 [DEBUG] [Thread-3470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:30:11.173 [DEBUG] [Thread-3470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] client lang: <none>
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] server lang: <none>
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] kex follows: False
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] Compression: none
2025-12-25T02:30:11.174 [DEBUG] [Thread-3470] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:30:11.231 [DEBUG] [Thread-3470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:30:11.231 [DEBUG] [Thread-3470] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:30:11.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:30:11.232 [DEBUG] [Thread-3470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:30:11.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:30:11.287 [DEBUG] [Thread-3470] [transport.py] [_log()] userauth is OK
2025-12-25T02:30:11.287 [DEBUG] [Thread-3470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:30:11.287 [DEBUG] [Thread-3470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:30:11.287 [DEBUG] [Thread-3470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:30:11.288 [DEBUG] [Thread-3470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:30:11.306 [INFO] [Thread-3470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:30:11.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:30:11.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:30:12.214 [DEBUG] [Thread-3470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:30:12.215 [DEBUG] [Thread-3470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:30:12.263 [DEBUG] [Thread-3470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:30:12.263 [DEBUG] [Thread-3470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:30:12.272 [DEBUG] [Thread-3470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:30:12.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:30:12.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:30:12.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:30:12.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:30:12.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:30:12.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:30:12.309 [DEBUG] [Thread-3470] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:30:13.303 [DEBUG] [Thread-3472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:30:28.352 [DEBUG] [Thread-3473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:30:28.458 [DEBUG] [Thread-3474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:30:42.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:30:42.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:30:42.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:30:42.833 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:30:42.834 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:30:43.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 30, 26), 0.41, 97.16, 0.0, 19.67, 11.52, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:30:43.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:30:26
2025-12-25T02:30:43.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:30:43.307 [DEBUG] [Thread-3475] [transport.py] [_log()] starting thread (client mode): 0xb955bd60
2025-12-25T02:30:43.307 [DEBUG] [Thread-3475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:30:43.327 [DEBUG] [Thread-3475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:30:43.327 [INFO] [Thread-3475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:30:43.330 [DEBUG] [Thread-3475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] client lang: <none>
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] server lang: <none>
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] kex follows: False
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] Compression: none
2025-12-25T02:30:43.331 [DEBUG] [Thread-3475] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:30:43.348 [DEBUG] [Thread-3475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:30:43.349 [DEBUG] [Thread-3475] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:30:43.349 [DEBUG] [Thread-3475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:30:43.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:30:43.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:30:43.383 [DEBUG] [Thread-3477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:30:43.393 [DEBUG] [Thread-3475] [transport.py] [_log()] userauth is OK
2025-12-25T02:30:43.393 [DEBUG] [Thread-3475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:30:43.393 [DEBUG] [Thread-3475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:30:43.393 [DEBUG] [Thread-3475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:30:43.394 [DEBUG] [Thread-3475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:30:43.431 [INFO] [Thread-3475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:30:43.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:30:44.051 [DEBUG] [Thread-3475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:30:44.052 [DEBUG] [Thread-3475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:30:44.052 [DEBUG] [Thread-3475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:30:44.093 [DEBUG] [Thread-3475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:30:44.093 [DEBUG] [Thread-3475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:30:44.096 [DEBUG] [Thread-3475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:30:44.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:30:44.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:30:44.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:30:44.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:30:44.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:30:44.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:30:44.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:30:44.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.020902 -999.00  +11.50  14.49     94  +10.70 1 3 1 3 1     0    0 0.66 -5.52 ----- 14.5 14.5 155.3 21.2 13.3 -6.0 13.2 -5.0 13.0 -5.6 13.3 -5.5
2025-12-25T02:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:30:44.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.020902
2025-12-25T02:30:44.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:30:44.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:30:44.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:30:44.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:30:44.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:30:44.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:30:26', tmtdew=0.41, humidity=97.16, cloud=0.0, wind=19.67, temperature=11.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:30:05.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:30:44.123 [DEBUG] [Thread-3475] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:30:44.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:30:44.216 [DEBUG] [Thread-3479] [transport.py] [_log()] starting thread (client mode): 0xb95d43a0
2025-12-25T02:30:44.216 [DEBUG] [Thread-3479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:30:44.231 [DEBUG] [Thread-3479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:30:44.231 [INFO] [Thread-3479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:30:44.238 [DEBUG] [Thread-3479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:30:44.238 [DEBUG] [Thread-3479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:30:44.238 [DEBUG] [Thread-3479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] client lang: <none>
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] server lang: <none>
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] kex follows: False
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] Compression: none
2025-12-25T02:30:44.239 [DEBUG] [Thread-3479] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:30:44.299 [DEBUG] [Thread-3479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:30:44.299 [DEBUG] [Thread-3479] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:30:44.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:30:44.300 [DEBUG] [Thread-3479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:30:44.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:30:44.354 [DEBUG] [Thread-3479] [transport.py] [_log()] userauth is OK
2025-12-25T02:30:44.355 [DEBUG] [Thread-3479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:30:44.355 [DEBUG] [Thread-3479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:30:44.355 [DEBUG] [Thread-3479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:30:44.355 [DEBUG] [Thread-3479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:30:44.378 [INFO] [Thread-3479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:30:44.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:30:44.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:30:45.215 [DEBUG] [Thread-3479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:30:45.215 [DEBUG] [Thread-3479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:30:45.263 [DEBUG] [Thread-3479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:30:45.263 [DEBUG] [Thread-3479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:30:45.272 [DEBUG] [Thread-3479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:30:45.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:30:45.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:30:45.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:30:45.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:30:45.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:30:45.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:30:45.309 [DEBUG] [Thread-3479] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:30:58.420 [DEBUG] [Thread-3481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:31:13.474 [DEBUG] [Thread-3482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:31:15.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:31:15.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:31:15.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:31:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 30, 58), 0.4, 97.2, 0.0, 19.92, 11.55, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:31:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:30:58
2025-12-25T02:31:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:31:16.358 [DEBUG] [Thread-3483] [transport.py] [_log()] starting thread (client mode): 0xb9559240
2025-12-25T02:31:16.358 [DEBUG] [Thread-3483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:31:16.379 [DEBUG] [Thread-3483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:31:16.379 [INFO] [Thread-3483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] client lang: <none>
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] server lang: <none>
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] kex follows: False
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] Compression: none
2025-12-25T02:31:16.382 [DEBUG] [Thread-3483] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:31:16.397 [DEBUG] [Thread-3483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:31:16.397 [DEBUG] [Thread-3483] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:31:16.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:31:16.397 [DEBUG] [Thread-3483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:31:16.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:31:16.398 [DEBUG] [Thread-3483] [transport.py] [_log()] userauth is OK
2025-12-25T02:31:16.398 [DEBUG] [Thread-3483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:31:16.398 [DEBUG] [Thread-3483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:31:16.398 [DEBUG] [Thread-3483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:31:16.398 [DEBUG] [Thread-3483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:31:16.415 [INFO] [Thread-3483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:31:16.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:31:16.976 [DEBUG] [Thread-3483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:31:16.976 [DEBUG] [Thread-3483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:31:16.976 [DEBUG] [Thread-3483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:31:17.017 [DEBUG] [Thread-3483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:31:17.017 [DEBUG] [Thread-3483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:31:17.019 [DEBUG] [Thread-3483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:31:17.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:31:17.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:31:17.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:31:17.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:31:17.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:31:17.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:31:17.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.021250 -999.00  +11.50  15.93     94  +10.70 1 3 1 3 1     0    0 0.68 -4.77 ----- 16.9 15.9 164.0 23.8 13.3 -7.0 13.1 -4.3 13.0 -6.2 13.3 -5.3
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.021250
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:31:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:31:17.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:30:58', tmtdew=0.4, humidity=97.2, cloud=0.0, wind=19.92, temperature=11.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:30:36.000', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:31:17.037 [DEBUG] [Thread-3483] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:31:17.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:31:17.127 [DEBUG] [Thread-3486] [transport.py] [_log()] starting thread (client mode): 0xb9590520
2025-12-25T02:31:17.128 [DEBUG] [Thread-3486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:31:17.142 [DEBUG] [Thread-3486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:31:17.142 [INFO] [Thread-3486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] client lang: <none>
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] server lang: <none>
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] kex follows: False
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] Compression: none
2025-12-25T02:31:17.150 [DEBUG] [Thread-3486] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:31:17.205 [DEBUG] [Thread-3486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:31:17.205 [DEBUG] [Thread-3486] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:31:17.205 [DEBUG] [Thread-3486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:31:17.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:31:17.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:31:17.262 [DEBUG] [Thread-3486] [transport.py] [_log()] userauth is OK
2025-12-25T02:31:17.262 [DEBUG] [Thread-3486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:31:17.262 [DEBUG] [Thread-3486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:31:17.262 [DEBUG] [Thread-3486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:31:17.262 [DEBUG] [Thread-3486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:31:17.276 [INFO] [Thread-3486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:31:17.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:31:17.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:31:18.113 [DEBUG] [Thread-3486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:31:18.113 [DEBUG] [Thread-3486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:31:18.160 [DEBUG] [Thread-3486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:31:18.160 [DEBUG] [Thread-3486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:31:18.168 [DEBUG] [Thread-3486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:31:18.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:31:18.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:31:18.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:31:18.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:31:18.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:31:18.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:31:18.199 [DEBUG] [Thread-3486] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:31:28.506 [DEBUG] [Thread-3488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:31:28.550 [DEBUG] [Thread-3489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:31:43.036 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:31:43.038 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:31:43.556 [DEBUG] [Thread-3490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:31:48.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:31:48.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:31:48.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:31:48.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 31, 30), 0.4, 97.23, 0.0, 20.38, 11.57, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:31:48.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:31:30
2025-12-25T02:31:49.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:31:49.203 [DEBUG] [Thread-3491] [transport.py] [_log()] starting thread (client mode): 0xb9590ee0
2025-12-25T02:31:49.203 [DEBUG] [Thread-3491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:31:49.223 [DEBUG] [Thread-3491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:31:49.223 [INFO] [Thread-3491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] client lang: <none>
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] server lang: <none>
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] kex follows: False
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] Compression: none
2025-12-25T02:31:49.227 [DEBUG] [Thread-3491] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:31:49.242 [DEBUG] [Thread-3491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:31:49.242 [DEBUG] [Thread-3491] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:31:49.242 [DEBUG] [Thread-3491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:31:49.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:31:49.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:31:49.244 [DEBUG] [Thread-3491] [transport.py] [_log()] userauth is OK
2025-12-25T02:31:49.245 [DEBUG] [Thread-3491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:31:49.245 [DEBUG] [Thread-3491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:31:49.245 [DEBUG] [Thread-3491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:31:49.245 [DEBUG] [Thread-3491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:31:49.266 [INFO] [Thread-3491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:31:49.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:31:49.919 [DEBUG] [Thread-3491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:31:49.919 [DEBUG] [Thread-3491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:31:49.920 [DEBUG] [Thread-3491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:31:49.960 [DEBUG] [Thread-3491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:31:49.960 [DEBUG] [Thread-3491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:31:49.964 [DEBUG] [Thread-3491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:31:49.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:31:49.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:31:49.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:31:49.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:31:49.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:31:49.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:31:49.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:31:49.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:31:49.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:31:49.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.021944 -999.00  +11.40  20.33     94  +10.60 1 3 1 3 1     0    0 0.68 -4.49 ----- 20.4 20.3 165.4 25.9 13.3 -4.6 13.1 -4.1 13.0 -4.1 13.3 -4.2
2025-12-25T02:31:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:31:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:31:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.021944
2025-12-25T02:31:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:31:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:31:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:31:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:31:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:31:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:31:30', tmtdew=0.4, humidity=97.23, cloud=0.0, wind=20.38, temperature=11.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:31:35.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:31:49.992 [DEBUG] [Thread-3491] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:31:50.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:31:50.087 [DEBUG] [Thread-3494] [transport.py] [_log()] starting thread (client mode): 0xb95b28c0
2025-12-25T02:31:50.087 [DEBUG] [Thread-3494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:31:50.103 [DEBUG] [Thread-3494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:31:50.103 [INFO] [Thread-3494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:31:50.111 [DEBUG] [Thread-3494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:31:50.111 [DEBUG] [Thread-3494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] client lang: <none>
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] server lang: <none>
2025-12-25T02:31:50.112 [DEBUG] [Thread-3494] [transport.py] [_log()] kex follows: False
2025-12-25T02:31:50.113 [DEBUG] [Thread-3494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:31:50.113 [DEBUG] [Thread-3494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:31:50.113 [DEBUG] [Thread-3494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:31:50.113 [DEBUG] [Thread-3494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:31:50.113 [DEBUG] [Thread-3494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:31:50.113 [DEBUG] [Thread-3494] [transport.py] [_log()] Compression: none
2025-12-25T02:31:50.113 [DEBUG] [Thread-3494] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:31:50.171 [DEBUG] [Thread-3494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:31:50.172 [DEBUG] [Thread-3494] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:31:50.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:31:50.174 [DEBUG] [Thread-3494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:31:50.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:31:50.226 [DEBUG] [Thread-3494] [transport.py] [_log()] userauth is OK
2025-12-25T02:31:50.227 [DEBUG] [Thread-3494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:31:50.227 [DEBUG] [Thread-3494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:31:50.227 [DEBUG] [Thread-3494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:31:50.227 [DEBUG] [Thread-3494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:31:50.249 [INFO] [Thread-3494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:31:50.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:31:50.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:31:51.099 [DEBUG] [Thread-3494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:31:51.100 [DEBUG] [Thread-3494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:31:51.146 [DEBUG] [Thread-3494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:31:51.147 [DEBUG] [Thread-3494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:31:51.155 [DEBUG] [Thread-3494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:31:51.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:31: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')
2025-12-25T02:31:51.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:31:51.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:31:51.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:31:51.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:31:51.187 [DEBUG] [Thread-3494] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:31:58.589 [DEBUG] [Thread-3496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:32:13.639 [DEBUG] [Thread-3497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:32:21.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:32:21.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:32:21.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:32:21.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 32, 2), 0.4, 97.23, 0.0, 20.7, 11.55, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:32:21.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:32:02
2025-12-25T02:32:22.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:32:22.200 [DEBUG] [Thread-3498] [transport.py] [_log()] starting thread (client mode): 0xb95b38e0
2025-12-25T02:32:22.201 [DEBUG] [Thread-3498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:32:22.212 [DEBUG] [Thread-3498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:32:22.213 [INFO] [Thread-3498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] client lang: <none>
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] server lang: <none>
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] kex follows: False
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] Compression: none
2025-12-25T02:32:22.216 [DEBUG] [Thread-3498] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:32:22.234 [DEBUG] [Thread-3498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:32:22.235 [DEBUG] [Thread-3498] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:32:22.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:32:22.236 [DEBUG] [Thread-3498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:32:22.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:32:22.239 [DEBUG] [Thread-3498] [transport.py] [_log()] userauth is OK
2025-12-25T02:32:22.239 [DEBUG] [Thread-3498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:32:22.239 [DEBUG] [Thread-3498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:32:22.239 [DEBUG] [Thread-3498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:32:22.240 [DEBUG] [Thread-3498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:32:22.277 [INFO] [Thread-3498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:32:22.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:32:22.876 [DEBUG] [Thread-3498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:32:22.876 [DEBUG] [Thread-3498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:32:22.877 [DEBUG] [Thread-3498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:32:22.917 [DEBUG] [Thread-3498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:32:22.917 [DEBUG] [Thread-3498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:32:22.921 [DEBUG] [Thread-3498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:32:22.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:32:22.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:32:22.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:32:22.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:32:22.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:32:22.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:32:22.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:32:22.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:32:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:32:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.022291 -999.00  +11.40  17.59     94  +10.60 1 3 1 3 1     0    0 0.69 -4.00 ----- 17.9 17.6 159.6 22.9 13.2 -4.1 13.1 -4.3 12.9 -4.2 13.3 -4.1
2025-12-25T02:32:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:32:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:32:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.022291
2025-12-25T02:32:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:32:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:32:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:32:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:32:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:32:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:32:02', tmtdew=0.4, humidity=97.23, cloud=0.0, wind=20.7, temperature=11.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:32:05.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:32:22.948 [DEBUG] [Thread-3498] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:32:23.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:32:23.044 [DEBUG] [Thread-3501] [transport.py] [_log()] starting thread (client mode): 0xb9578c70
2025-12-25T02:32:23.044 [DEBUG] [Thread-3501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:32:23.059 [DEBUG] [Thread-3501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:32:23.059 [INFO] [Thread-3501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:32:23.066 [DEBUG] [Thread-3501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] client lang: <none>
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] server lang: <none>
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] kex follows: False
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:32:23.067 [DEBUG] [Thread-3501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:32:23.068 [DEBUG] [Thread-3501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:32:23.068 [DEBUG] [Thread-3501] [transport.py] [_log()] Compression: none
2025-12-25T02:32:23.068 [DEBUG] [Thread-3501] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:32:23.131 [DEBUG] [Thread-3501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:32:23.131 [DEBUG] [Thread-3501] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:32:23.132 [DEBUG] [Thread-3501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:32:23.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:32:23.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:32:23.187 [DEBUG] [Thread-3501] [transport.py] [_log()] userauth is OK
2025-12-25T02:32:23.187 [DEBUG] [Thread-3501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:32:23.188 [DEBUG] [Thread-3501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:32:23.188 [DEBUG] [Thread-3501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:32:23.188 [DEBUG] [Thread-3501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:32:23.206 [INFO] [Thread-3501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:32:23.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:32:23.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:32:24.035 [DEBUG] [Thread-3501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:32:24.035 [DEBUG] [Thread-3501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:32:24.084 [DEBUG] [Thread-3501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:32:24.084 [DEBUG] [Thread-3501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:32:24.092 [DEBUG] [Thread-3501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:32:24.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:32:24.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')
2025-12-25T02:32:24.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:32:24.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:32:24.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:32:24.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:32:24.127 [DEBUG] [Thread-3501] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:32:28.610 [DEBUG] [Thread-3503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:32:28.674 [DEBUG] [Thread-3504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:32:43.241 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:32:43.242 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:32:43.721 [DEBUG] [Thread-3505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:32:54.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:32:54.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:32:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:32:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 32, 34), 0.4, 97.23, 0.0, 21.88, 11.5, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:32:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:32:34
2025-12-25T02:32:54.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:32:55.121 [DEBUG] [Thread-3506] [transport.py] [_log()] starting thread (client mode): 0xb957b520
2025-12-25T02:32:55.121 [DEBUG] [Thread-3506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:32:55.141 [DEBUG] [Thread-3506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:32:55.141 [INFO] [Thread-3506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] client lang: <none>
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] server lang: <none>
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] kex follows: False
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:32:55.144 [DEBUG] [Thread-3506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:32:55.145 [DEBUG] [Thread-3506] [transport.py] [_log()] Compression: none
2025-12-25T02:32:55.145 [DEBUG] [Thread-3506] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:32:55.160 [DEBUG] [Thread-3506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:32:55.161 [DEBUG] [Thread-3506] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:32:55.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:32:55.162 [DEBUG] [Thread-3506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:32:55.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:32:55.164 [DEBUG] [Thread-3506] [transport.py] [_log()] userauth is OK
2025-12-25T02:32:55.164 [DEBUG] [Thread-3506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:32:55.164 [DEBUG] [Thread-3506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:32:55.164 [DEBUG] [Thread-3506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:32:55.164 [DEBUG] [Thread-3506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:32:55.200 [INFO] [Thread-3506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:32:55.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:32:55.807 [DEBUG] [Thread-3506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:32:55.807 [DEBUG] [Thread-3506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:32:55.807 [DEBUG] [Thread-3506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:32:55.848 [DEBUG] [Thread-3506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:32:55.848 [DEBUG] [Thread-3506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:32:55.851 [DEBUG] [Thread-3506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:32:55.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:32:55.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:32:55.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:32:55.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:32:55.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:32:55.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:32:55.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:32:55.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:32:55.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:32:55.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.022639 -999.00  +11.40  25.21     94  +10.60 1 3 1 3 1     0    0 0.70 -3.68 ----- 24.5 25.2 164.8 27.6 13.3 -5.4 13.1 -6.3 12.9 -5.2 13.3 -7.3
2025-12-25T02:32:55.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:32:55.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:32:55.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.022639
2025-12-25T02:32:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:32:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:32:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:32:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:32:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:32:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:32:34', tmtdew=0.4, humidity=97.23, cloud=0.0, wind=21.88, temperature=11.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:32:36.010', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:32:55.878 [DEBUG] [Thread-3506] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:32:55.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:32:55.975 [DEBUG] [Thread-3509] [transport.py] [_log()] starting thread (client mode): 0xb6b15b70
2025-12-25T02:32:55.975 [DEBUG] [Thread-3509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:32:55.990 [DEBUG] [Thread-3509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:32:55.991 [INFO] [Thread-3509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:32:55.998 [DEBUG] [Thread-3509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] client lang: <none>
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] server lang: <none>
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] kex follows: False
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:32:56.000 [DEBUG] [Thread-3509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:32:56.001 [DEBUG] [Thread-3509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:32:56.001 [DEBUG] [Thread-3509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:32:56.001 [DEBUG] [Thread-3509] [transport.py] [_log()] Compression: none
2025-12-25T02:32:56.001 [DEBUG] [Thread-3509] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:32:56.059 [DEBUG] [Thread-3509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:32:56.060 [DEBUG] [Thread-3509] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:32:56.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:32:56.061 [DEBUG] [Thread-3509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:32:56.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:32:56.115 [DEBUG] [Thread-3509] [transport.py] [_log()] userauth is OK
2025-12-25T02:32:56.115 [DEBUG] [Thread-3509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:32:56.115 [DEBUG] [Thread-3509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:32:56.116 [DEBUG] [Thread-3509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:32:56.116 [DEBUG] [Thread-3509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:32:56.134 [INFO] [Thread-3509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:32:56.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:32:56.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:32:56.989 [DEBUG] [Thread-3509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:32:56.989 [DEBUG] [Thread-3509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:32:57.037 [DEBUG] [Thread-3509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:32:57.037 [DEBUG] [Thread-3509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:32:57.046 [DEBUG] [Thread-3509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:32:57.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:32:57.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:32:57.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:32:57.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:32:57.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:32:57.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:32:57.083 [DEBUG] [Thread-3509] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:32:58.759 [DEBUG] [Thread-3511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:33:13.816 [DEBUG] [Thread-3512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:33:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:33:27.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:33:27.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:33:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 33, 6), 0.39, 97.26, 0.0, 21.7, 11.52, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:33:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:33:06
2025-12-25T02:33:27.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:33:28.050 [DEBUG] [Thread-3513] [transport.py] [_log()] starting thread (client mode): 0xb6b16a40
2025-12-25T02:33:28.051 [DEBUG] [Thread-3513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:33:28.072 [DEBUG] [Thread-3513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:33:28.072 [INFO] [Thread-3513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:33:28.075 [DEBUG] [Thread-3513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:33:28.075 [DEBUG] [Thread-3513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:33:28.075 [DEBUG] [Thread-3513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:33:28.075 [DEBUG] [Thread-3513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:33:28.075 [DEBUG] [Thread-3513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:33:28.075 [DEBUG] [Thread-3513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:33:28.075 [DEBUG] [Thread-3513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:33:28.075 [DEBUG] [Thread-3513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] client lang: <none>
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] server lang: <none>
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] kex follows: False
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] Compression: none
2025-12-25T02:33:28.076 [DEBUG] [Thread-3513] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:33:28.093 [DEBUG] [Thread-3513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:33:28.094 [DEBUG] [Thread-3513] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:33:28.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:33:28.095 [DEBUG] [Thread-3513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:33:28.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:33:28.097 [DEBUG] [Thread-3513] [transport.py] [_log()] userauth is OK
2025-12-25T02:33:28.097 [DEBUG] [Thread-3513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:33:28.097 [DEBUG] [Thread-3513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:33:28.097 [DEBUG] [Thread-3513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:33:28.097 [DEBUG] [Thread-3513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:33:28.122 [INFO] [Thread-3513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:33:28.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:33:28.667 [DEBUG] [Thread-3515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:33:28.710 [DEBUG] [Thread-3513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:33:28.710 [DEBUG] [Thread-3513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:33:28.711 [DEBUG] [Thread-3513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:33:28.751 [DEBUG] [Thread-3513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:33:28.751 [DEBUG] [Thread-3513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:33:28.755 [DEBUG] [Thread-3513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:33:28.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:33:28.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:33:28.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:33:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:33:28.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:33:28.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:33:28.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:33:28.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:33:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:33:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.022986 -999.00  +11.40  16.21     94  +10.60 1 3 1 3 1     0    0 0.71 -3.30 ----- 16.9 16.2 144.0 27.5 13.3 -5.2 13.1 -5.6 12.9 -5.3 13.2 -6.6
2025-12-25T02:33:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:33:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:33:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.022986
2025-12-25T02:33:28.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:33:28.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:33:28.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:33:28.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:33:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:33:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:33:06', tmtdew=0.39, humidity=97.26, cloud=0.0, wind=21.7, temperature=11.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:33:05.990', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:33:28.782 [DEBUG] [Thread-3513] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:33:28.845 [DEBUG] [Thread-3517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:33:28.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:33:28.876 [DEBUG] [Thread-3518] [transport.py] [_log()] starting thread (client mode): 0xb957a6e0
2025-12-25T02:33:28.876 [DEBUG] [Thread-3518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:33:28.891 [DEBUG] [Thread-3518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:33:28.891 [INFO] [Thread-3518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:33:28.898 [DEBUG] [Thread-3518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:33:28.898 [DEBUG] [Thread-3518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] client lang: <none>
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] server lang: <none>
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] kex follows: False
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:33:28.899 [DEBUG] [Thread-3518] [transport.py] [_log()] Compression: none
2025-12-25T02:33:28.900 [DEBUG] [Thread-3518] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:33:28.960 [DEBUG] [Thread-3518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:33:28.961 [DEBUG] [Thread-3518] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:33:28.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:33:28.962 [DEBUG] [Thread-3518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:33:28.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:33:29.019 [DEBUG] [Thread-3518] [transport.py] [_log()] userauth is OK
2025-12-25T02:33:29.019 [DEBUG] [Thread-3518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:33:29.019 [DEBUG] [Thread-3518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:33:29.019 [DEBUG] [Thread-3518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:33:29.019 [DEBUG] [Thread-3518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:33:29.038 [INFO] [Thread-3518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:33:29.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:33:29.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:33:29.880 [DEBUG] [Thread-3518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:33:29.880 [DEBUG] [Thread-3518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:33:29.928 [DEBUG] [Thread-3518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:33:29.928 [DEBUG] [Thread-3518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:33:29.937 [DEBUG] [Thread-3518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:33:29.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:33:29.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:33:29.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:33:29.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:33:29.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:33:29.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:33:29.979 [DEBUG] [Thread-3518] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:33:43.445 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:33:43.446 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:33:43.883 [DEBUG] [Thread-3520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:33:58.920 [DEBUG] [Thread-3521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:33:59.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:33:59.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:33:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:34:00.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 33, 38), 0.4, 97.23, 0.0, 18.47, 11.52, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:34:00.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:33:38
2025-12-25T02:34:00.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:34:00.961 [DEBUG] [Thread-3522] [transport.py] [_log()] starting thread (client mode): 0xb9578eb0
2025-12-25T02:34:00.961 [DEBUG] [Thread-3522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:34:00.981 [DEBUG] [Thread-3522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:34:00.981 [INFO] [Thread-3522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] client lang: <none>
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] server lang: <none>
2025-12-25T02:34:00.984 [DEBUG] [Thread-3522] [transport.py] [_log()] kex follows: False
2025-12-25T02:34:00.985 [DEBUG] [Thread-3522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:34:00.985 [DEBUG] [Thread-3522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:34:00.985 [DEBUG] [Thread-3522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:34:00.985 [DEBUG] [Thread-3522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:34:00.985 [DEBUG] [Thread-3522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:34:00.985 [DEBUG] [Thread-3522] [transport.py] [_log()] Compression: none
2025-12-25T02:34:00.985 [DEBUG] [Thread-3522] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:34:01.002 [DEBUG] [Thread-3522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:34:01.003 [DEBUG] [Thread-3522] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:34:01.003 [DEBUG] [Thread-3522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:34:01.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:34:01.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:34:01.005 [DEBUG] [Thread-3522] [transport.py] [_log()] userauth is OK
2025-12-25T02:34:01.005 [DEBUG] [Thread-3522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:34:01.005 [DEBUG] [Thread-3522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:34:01.005 [DEBUG] [Thread-3522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:34:01.005 [DEBUG] [Thread-3522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:34:01.023 [INFO] [Thread-3522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:34:01.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:34:01.604 [DEBUG] [Thread-3522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:34:01.605 [DEBUG] [Thread-3522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:34:01.605 [DEBUG] [Thread-3522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:34:01.646 [DEBUG] [Thread-3522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:34:01.646 [DEBUG] [Thread-3522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:34:01.650 [DEBUG] [Thread-3522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:34:01.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:34:01.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:34:01.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:34:01.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:34:01.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:34:01.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:34:01.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:34:01.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:34:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:34:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.023333 -999.00  +11.40  17.37     95  +10.60 1 3 1 3 1     0    0 0.72 -2.80 ----- 15.0 17.4 168.8 19.1 13.2 -4.2 13.1 -4.3 12.9 -4.2 13.3 -4.0
2025-12-25T02:34:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:34:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:34:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.023333
2025-12-25T02:34:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:34:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:34:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:34:01.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:34:01.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:34:01.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:33:38', tmtdew=0.4, humidity=97.23, cloud=0.0, wind=18.47, temperature=11.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:33:35.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:34:01.677 [DEBUG] [Thread-3522] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:34:01.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:34:01.774 [DEBUG] [Thread-3525] [transport.py] [_log()] starting thread (client mode): 0xb9590e80
2025-12-25T02:34:01.774 [DEBUG] [Thread-3525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:34:01.789 [DEBUG] [Thread-3525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:34:01.789 [INFO] [Thread-3525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] client lang: <none>
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] server lang: <none>
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] kex follows: False
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] Compression: none
2025-12-25T02:34:01.796 [DEBUG] [Thread-3525] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:34:01.855 [DEBUG] [Thread-3525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:34:01.855 [DEBUG] [Thread-3525] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:34:01.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:34:01.857 [DEBUG] [Thread-3525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:34:01.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:34:01.911 [DEBUG] [Thread-3525] [transport.py] [_log()] userauth is OK
2025-12-25T02:34:01.911 [DEBUG] [Thread-3525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:34:01.912 [DEBUG] [Thread-3525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:34:01.912 [DEBUG] [Thread-3525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:34:01.912 [DEBUG] [Thread-3525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:34:01.934 [INFO] [Thread-3525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:34:01.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:34:01.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:34:02.770 [DEBUG] [Thread-3525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:34:02.771 [DEBUG] [Thread-3525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:34:02.819 [DEBUG] [Thread-3525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:34:02.819 [DEBUG] [Thread-3525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:34:02.828 [DEBUG] [Thread-3525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:34:02.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:34: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')
2025-12-25T02:34: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
2025-12-25T02:34:02.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:34:02.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:34:02.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:34:02.862 [DEBUG] [Thread-3525] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:34:13.954 [DEBUG] [Thread-3527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:34:28.742 [DEBUG] [Thread-3528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:34:29.006 [DEBUG] [Thread-3529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:34:32.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:34:32.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:34:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:34:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 34, 10), 0.39, 97.26, 0.0, 21.93, 11.54, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:34:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:34:10
2025-12-25T02:34:33.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:34:33.909 [DEBUG] [Thread-3530] [transport.py] [_log()] starting thread (client mode): 0xb6b15120
2025-12-25T02:34:33.909 [DEBUG] [Thread-3530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:34:33.929 [DEBUG] [Thread-3530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:34:33.929 [INFO] [Thread-3530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:34:33.932 [DEBUG] [Thread-3530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:34:33.932 [DEBUG] [Thread-3530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:34:33.932 [DEBUG] [Thread-3530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:34:33.932 [DEBUG] [Thread-3530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:34:33.932 [DEBUG] [Thread-3530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:34:33.932 [DEBUG] [Thread-3530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] client lang: <none>
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] server lang: <none>
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] kex follows: False
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] Compression: none
2025-12-25T02:34:33.933 [DEBUG] [Thread-3530] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:34:33.948 [DEBUG] [Thread-3530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:34:33.948 [DEBUG] [Thread-3530] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:34:33.948 [DEBUG] [Thread-3530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:34:33.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:34:33.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:34:33.949 [DEBUG] [Thread-3530] [transport.py] [_log()] userauth is OK
2025-12-25T02:34:33.949 [DEBUG] [Thread-3530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:34:33.949 [DEBUG] [Thread-3530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:34:33.949 [DEBUG] [Thread-3530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:34:33.949 [DEBUG] [Thread-3530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:34:33.976 [INFO] [Thread-3530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:34:33.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:34:34.630 [DEBUG] [Thread-3530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:34:34.630 [DEBUG] [Thread-3530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:34:34.630 [DEBUG] [Thread-3530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:34:34.671 [DEBUG] [Thread-3530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:34:34.671 [DEBUG] [Thread-3530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:34:34.673 [DEBUG] [Thread-3530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:34:34.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:34:34.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:34:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:34:34.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:34:34.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:34:34.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:34:34.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:34:34.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:34:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:34:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.023680 -999.00  +11.40  17.36     94  +10.60 1 3 1 3 1     0    0 0.74 -2.35 ----- 15.4 17.4 167.2 22.4 13.2 -5.4 13.1 -4.6 12.9 -5.0 13.3 -5.0
2025-12-25T02:34:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:34:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:34:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.023680
2025-12-25T02:34:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:34:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:34:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:34:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:34:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:34:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:34:10', tmtdew=0.39, humidity=97.26, cloud=0.0, wind=21.93, temperature=11.54, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:34:05.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:34:34.692 [DEBUG] [Thread-3530] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:34:34.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:34:34.782 [DEBUG] [Thread-3533] [transport.py] [_log()] starting thread (client mode): 0xb6b16cb0
2025-12-25T02:34:34.782 [DEBUG] [Thread-3533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:34:34.797 [DEBUG] [Thread-3533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:34:34.797 [INFO] [Thread-3533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] client lang: <none>
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] server lang: <none>
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] kex follows: False
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:34:34.804 [DEBUG] [Thread-3533] [transport.py] [_log()] Compression: none
2025-12-25T02:34:34.805 [DEBUG] [Thread-3533] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:34:34.861 [DEBUG] [Thread-3533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:34:34.861 [DEBUG] [Thread-3533] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:34:34.861 [DEBUG] [Thread-3533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:34:34.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:34:34.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:34:34.918 [DEBUG] [Thread-3533] [transport.py] [_log()] userauth is OK
2025-12-25T02:34:34.918 [DEBUG] [Thread-3533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:34:34.918 [DEBUG] [Thread-3533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:34:34.918 [DEBUG] [Thread-3533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:34:34.918 [DEBUG] [Thread-3533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:34:34.932 [INFO] [Thread-3533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:34:34.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:34:34.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:34:35.757 [DEBUG] [Thread-3533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:34:35.757 [DEBUG] [Thread-3533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:34:35.804 [DEBUG] [Thread-3533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:34:35.804 [DEBUG] [Thread-3533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:34:35.812 [DEBUG] [Thread-3533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:34:35.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:34:35.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:34: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
2025-12-25T02:34:35.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:34:35.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:34:35.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:34:35.844 [DEBUG] [Thread-3533] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:34:43.649 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:34:43.650 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:34:44.038 [DEBUG] [Thread-3535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:34:59.077 [DEBUG] [Thread-3536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:35:05.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:35:05.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:35:05.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
2025-12-25T02:35:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 34, 42), 0.4, 97.18, 0.0, 22.87, 11.49, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:35:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:34:42
2025-12-25T02:35:06.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:35:06.835 [DEBUG] [Thread-3537] [transport.py] [_log()] starting thread (client mode): 0xb6b21630
2025-12-25T02:35:06.835 [DEBUG] [Thread-3537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:35:06.855 [DEBUG] [Thread-3537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:35:06.855 [INFO] [Thread-3537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] client lang: <none>
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] server lang: <none>
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] kex follows: False
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] Compression: none
2025-12-25T02:35:06.859 [DEBUG] [Thread-3537] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:35:06.877 [DEBUG] [Thread-3537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:35:06.878 [DEBUG] [Thread-3537] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:35:06.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:35:06.879 [DEBUG] [Thread-3537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:35:06.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:35:06.881 [DEBUG] [Thread-3537] [transport.py] [_log()] userauth is OK
2025-12-25T02:35:06.881 [DEBUG] [Thread-3537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:35:06.882 [DEBUG] [Thread-3537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:35:06.882 [DEBUG] [Thread-3537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:35:06.882 [DEBUG] [Thread-3537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:35:06.900 [INFO] [Thread-3537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:35:06.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:35:07.583 [DEBUG] [Thread-3537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:35:07.583 [DEBUG] [Thread-3537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:35:07.584 [DEBUG] [Thread-3537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:35:07.624 [DEBUG] [Thread-3537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:35:07.624 [DEBUG] [Thread-3537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:35:07.627 [DEBUG] [Thread-3537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:35:07.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:35:07.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:35:07.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:35:07.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:35:07.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:35:07.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:35:07.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:35:07.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:35:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:35:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.024027 -999.00  +11.40  19.00     94  +10.60 1 3 1 3 1     0    0 0.73 -2.36 ----- 15.3 19.0 147.0 21.6 13.2 -5.8 13.1 -6.0 12.9 -5.6 13.3 -6.2
2025-12-25T02:35:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:35:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:35:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.024027
2025-12-25T02:35:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:35:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:35:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:35:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:35:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:35:07.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:34:42', tmtdew=0.4, humidity=97.18, cloud=0.0, wind=22.87, temperature=11.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:34:35.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:35:07.730 [DEBUG] [Thread-3537] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:35:07.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:35:07.826 [DEBUG] [Thread-3540] [transport.py] [_log()] starting thread (client mode): 0xb95f3160
2025-12-25T02:35:07.826 [DEBUG] [Thread-3540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:35:07.841 [DEBUG] [Thread-3540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:35:07.841 [INFO] [Thread-3540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] client lang: <none>
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] server lang: <none>
2025-12-25T02:35:07.849 [DEBUG] [Thread-3540] [transport.py] [_log()] kex follows: False
2025-12-25T02:35:07.850 [DEBUG] [Thread-3540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:35:07.850 [DEBUG] [Thread-3540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:35:07.850 [DEBUG] [Thread-3540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:35:07.850 [DEBUG] [Thread-3540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:35:07.850 [DEBUG] [Thread-3540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:35:07.850 [DEBUG] [Thread-3540] [transport.py] [_log()] Compression: none
2025-12-25T02:35:07.850 [DEBUG] [Thread-3540] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:35:07.906 [DEBUG] [Thread-3540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:35:07.907 [DEBUG] [Thread-3540] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:35:07.908 [DEBUG] [Thread-3540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:35:07.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:35:07.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:35:07.967 [DEBUG] [Thread-3540] [transport.py] [_log()] userauth is OK
2025-12-25T02:35:07.967 [DEBUG] [Thread-3540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:35:07.967 [DEBUG] [Thread-3540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:35:07.967 [DEBUG] [Thread-3540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:35:07.967 [DEBUG] [Thread-3540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:35:07.986 [INFO] [Thread-3540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:35:07.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:35:07.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:35:08.817 [DEBUG] [Thread-3540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:35:08.818 [DEBUG] [Thread-3540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:35:08.866 [DEBUG] [Thread-3540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:35:08.866 [DEBUG] [Thread-3540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:35:08.875 [DEBUG] [Thread-3540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:35:08.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:35:08.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:35: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
2025-12-25T02:35:08.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:35:08.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:35:08.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:35:08.910 [DEBUG] [Thread-3540] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:35:14.106 [DEBUG] [Thread-3542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:35:28.815 [DEBUG] [Thread-3543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:35:29.150 [DEBUG] [Thread-3544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:35:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:35:38.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:35: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
2025-12-25T02:35:39.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 35, 14), 0.39, 97.25, 0.0, 21.56, 11.49, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:35:39.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:35:14
2025-12-25T02:35:39.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:35:39.914 [DEBUG] [Thread-3545] [transport.py] [_log()] starting thread (client mode): 0xb9592b00
2025-12-25T02:35:39.914 [DEBUG] [Thread-3545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:35:39.933 [DEBUG] [Thread-3545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:35:39.933 [INFO] [Thread-3545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:35:39.936 [DEBUG] [Thread-3545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:35:39.936 [DEBUG] [Thread-3545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] client lang: <none>
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] server lang: <none>
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] kex follows: False
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] Compression: none
2025-12-25T02:35:39.937 [DEBUG] [Thread-3545] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:35:39.957 [DEBUG] [Thread-3545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:35:39.958 [DEBUG] [Thread-3545] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:35:39.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:35:39.959 [DEBUG] [Thread-3545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:35:39.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:35:39.961 [DEBUG] [Thread-3545] [transport.py] [_log()] userauth is OK
2025-12-25T02:35:39.961 [DEBUG] [Thread-3545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:35:39.961 [DEBUG] [Thread-3545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:35:39.961 [DEBUG] [Thread-3545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:35:39.961 [DEBUG] [Thread-3545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:35:39.982 [INFO] [Thread-3545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:35:39.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:35:40.560 [DEBUG] [Thread-3545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:35:40.560 [DEBUG] [Thread-3545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:35:40.561 [DEBUG] [Thread-3545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:35:40.601 [DEBUG] [Thread-3545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:35:40.601 [DEBUG] [Thread-3545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:35:40.604 [DEBUG] [Thread-3545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:35:40.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:35:40.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:35:40.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:35:40.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:35:40.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:35:40.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:35:40.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:35:40.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:35:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:35:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.024374 -999.00  +11.40  18.12     94  +10.60 1 3 1 3 1     0    0 0.74 -2.25 ----- 15.1 18.1 152.2 21.7 13.3 -5.5 13.1 -6.5 12.9 -5.5 13.3 -5.8
2025-12-25T02:35:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:35:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:35:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.024374
2025-12-25T02:35:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:35:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:35:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:35:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:35:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:35:40.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:35:14', tmtdew=0.39, humidity=97.25, cloud=0.0, wind=21.56, temperature=11.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:35:05.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:35:40.628 [DEBUG] [Thread-3545] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:35:40.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:35:40.720 [DEBUG] [Thread-3548] [transport.py] [_log()] starting thread (client mode): 0xb6b15390
2025-12-25T02:35:40.720 [DEBUG] [Thread-3548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:35:40.736 [DEBUG] [Thread-3548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:35:40.736 [INFO] [Thread-3548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] client lang: <none>
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] server lang: <none>
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] kex follows: False
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:35:40.744 [DEBUG] [Thread-3548] [transport.py] [_log()] Compression: none
2025-12-25T02:35:40.745 [DEBUG] [Thread-3548] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:35:40.803 [DEBUG] [Thread-3548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:35:40.803 [DEBUG] [Thread-3548] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:35:40.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:35:40.805 [DEBUG] [Thread-3548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:35:40.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:35:40.859 [DEBUG] [Thread-3548] [transport.py] [_log()] userauth is OK
2025-12-25T02:35:40.860 [DEBUG] [Thread-3548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:35:40.860 [DEBUG] [Thread-3548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:35:40.860 [DEBUG] [Thread-3548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:35:40.860 [DEBUG] [Thread-3548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:35:40.881 [INFO] [Thread-3548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:35:40.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:35:40.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:35:41.731 [DEBUG] [Thread-3548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:35:41.731 [DEBUG] [Thread-3548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:35:41.779 [DEBUG] [Thread-3548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:35:41.779 [DEBUG] [Thread-3548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:35:41.789 [DEBUG] [Thread-3548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:35:41.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:35:41.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:35:41.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:35:41.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:35:41.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:35:41.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:35:41.826 [DEBUG] [Thread-3548] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:35:43.852 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:35:43.853 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:35:44.185 [DEBUG] [Thread-3550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:35:59.225 [DEBUG] [Thread-3551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:36:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:36:11.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:36:11.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:36:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 35, 47), 0.39, 97.26, 0.0, 22.46, 11.47, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:36:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:35:47
2025-12-25T02:36:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:36:12.815 [DEBUG] [Thread-3552] [transport.py] [_log()] starting thread (client mode): 0xb95b0250
2025-12-25T02:36:12.815 [DEBUG] [Thread-3552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:36:12.835 [DEBUG] [Thread-3552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:36:12.835 [INFO] [Thread-3552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] client lang: <none>
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] server lang: <none>
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] kex follows: False
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] Compression: none
2025-12-25T02:36:12.837 [DEBUG] [Thread-3552] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:36:12.853 [DEBUG] [Thread-3552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:36:12.854 [DEBUG] [Thread-3552] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:36:12.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:36:12.855 [DEBUG] [Thread-3552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:36:12.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:36:12.857 [DEBUG] [Thread-3552] [transport.py] [_log()] userauth is OK
2025-12-25T02:36:12.857 [DEBUG] [Thread-3552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:36:12.857 [DEBUG] [Thread-3552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:36:12.857 [DEBUG] [Thread-3552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:36:12.857 [DEBUG] [Thread-3552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:36:12.877 [INFO] [Thread-3552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:36:12.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:36:13.462 [DEBUG] [Thread-3552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:36:13.463 [DEBUG] [Thread-3552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:36:13.463 [DEBUG] [Thread-3552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:36:13.504 [DEBUG] [Thread-3552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:36:13.504 [DEBUG] [Thread-3552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:36:13.507 [DEBUG] [Thread-3552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:36:13.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:36:13.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:36:13.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:36:13.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:36:13.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:36:13.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:36:13.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:36:13.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:36:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:36:13.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.025069 -999.00  +11.40  18.86     94  +10.60 1 3 1 3 1     0    0 0.73 -2.13 ----- 19.6 18.9 154.0 24.8 13.2 -6.3 13.0 -4.7 12.9 -6.4 13.2 -6.1
2025-12-25T02:36:13.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:36:13.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:36:13.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.025069
2025-12-25T02:36:13.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:36:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:36:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:36:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:36:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:36:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:35:47', tmtdew=0.39, humidity=97.26, cloud=0.0, wind=22.46, temperature=11.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:36:05.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:36:13.532 [DEBUG] [Thread-3552] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:36:13.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:36:13.626 [DEBUG] [Thread-3555] [transport.py] [_log()] starting thread (client mode): 0xb95b1db0
2025-12-25T02:36:13.626 [DEBUG] [Thread-3555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:36:13.641 [DEBUG] [Thread-3555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:36:13.641 [INFO] [Thread-3555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:36:13.648 [DEBUG] [Thread-3555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] client lang: <none>
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] server lang: <none>
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] kex follows: False
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] Compression: none
2025-12-25T02:36:13.649 [DEBUG] [Thread-3555] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:36:13.707 [DEBUG] [Thread-3555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:36:13.707 [DEBUG] [Thread-3555] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:36:13.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:36:13.708 [DEBUG] [Thread-3555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:36:13.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:36:13.763 [DEBUG] [Thread-3555] [transport.py] [_log()] userauth is OK
2025-12-25T02:36:13.763 [DEBUG] [Thread-3555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:36:13.763 [DEBUG] [Thread-3555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:36:13.763 [DEBUG] [Thread-3555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:36:13.763 [DEBUG] [Thread-3555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:36:13.782 [INFO] [Thread-3555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:36:13.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:36:13.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:36:14.262 [DEBUG] [Thread-3557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:36:14.603 [DEBUG] [Thread-3555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:36:14.603 [DEBUG] [Thread-3555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:36:14.651 [DEBUG] [Thread-3555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:36:14.651 [DEBUG] [Thread-3555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:36:14.660 [DEBUG] [Thread-3555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:36:14.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:36:14.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:36:14.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:36:14.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:36:14.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:36:14.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:36:14.694 [DEBUG] [Thread-3555] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:36:28.894 [DEBUG] [Thread-3558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:36:29.320 [DEBUG] [Thread-3559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:36:44.055 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:36:44.056 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:36:44.353 [DEBUG] [Thread-3560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:36:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:36:44.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:36:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:36:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 36, 19), 0.39, 97.26, 0.0, 21.93, 11.45, 2, 2, 2, 2, 0, 0),)
2025-12-25T02:36:45.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:36:19
2025-12-25T02:36:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:36:45.696 [DEBUG] [Thread-3561] [transport.py] [_log()] starting thread (client mode): 0xb6b16c20
2025-12-25T02:36:45.696 [DEBUG] [Thread-3561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:36:45.718 [DEBUG] [Thread-3561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:36:45.718 [INFO] [Thread-3561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:36:45.721 [DEBUG] [Thread-3561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:36:45.721 [DEBUG] [Thread-3561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:36:45.721 [DEBUG] [Thread-3561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:36:45.721 [DEBUG] [Thread-3561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:36:45.721 [DEBUG] [Thread-3561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:36:45.721 [DEBUG] [Thread-3561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:36:45.721 [DEBUG] [Thread-3561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:36:45.721 [DEBUG] [Thread-3561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] client lang: <none>
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] server lang: <none>
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] kex follows: False
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:36:45.722 [DEBUG] [Thread-3561] [transport.py] [_log()] Compression: none
2025-12-25T02:36:45.723 [DEBUG] [Thread-3561] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:36:45.733 [DEBUG] [Thread-3561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:36:45.734 [DEBUG] [Thread-3561] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:36:45.735 [DEBUG] [Thread-3561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:36:45.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:36:45.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:36:45.737 [DEBUG] [Thread-3561] [transport.py] [_log()] userauth is OK
2025-12-25T02:36:45.738 [DEBUG] [Thread-3561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:36:45.738 [DEBUG] [Thread-3561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:36:45.738 [DEBUG] [Thread-3561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:36:45.738 [DEBUG] [Thread-3561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:36:45.763 [INFO] [Thread-3561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:36:45.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:36:46.376 [DEBUG] [Thread-3561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:36:46.377 [DEBUG] [Thread-3561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:36:46.377 [DEBUG] [Thread-3561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:36:46.418 [DEBUG] [Thread-3561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:36:46.418 [DEBUG] [Thread-3561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:36:46.421 [DEBUG] [Thread-3561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:36:46.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:36:46.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:36:46.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:36:46.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:36:46.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:36:46.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:36:46.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:36:46.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:36:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:36:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.025416 -999.00  +11.40  22.02     94  +10.60 1 3 1 3 1     0    0 0.74 -2.15 Z...W 21.9 22.0 169.0 24.2 13.2 -4.4 13.0 -7.5 12.9 -4.6 13.2 -6.5
2025-12-25T02:36:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:36:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:36:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.025416
2025-12-25T02:36:46.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:36:46.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:36:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:36:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:36:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:36:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:36:19', tmtdew=0.39, humidity=97.26, cloud=0.0, wind=21.93, temperature=11.45, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:36:35.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:36:46.447 [DEBUG] [Thread-3561] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:36:46.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:36:46.538 [DEBUG] [Thread-3564] [transport.py] [_log()] starting thread (client mode): 0xb95f0ac0
2025-12-25T02:36:46.539 [DEBUG] [Thread-3564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:36:46.553 [DEBUG] [Thread-3564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:36:46.553 [INFO] [Thread-3564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] client lang: <none>
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] server lang: <none>
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] kex follows: False
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:36:46.561 [DEBUG] [Thread-3564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:36:46.562 [DEBUG] [Thread-3564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:36:46.562 [DEBUG] [Thread-3564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:36:46.562 [DEBUG] [Thread-3564] [transport.py] [_log()] Compression: none
2025-12-25T02:36:46.562 [DEBUG] [Thread-3564] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:36:46.618 [DEBUG] [Thread-3564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:36:46.619 [DEBUG] [Thread-3564] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:36:46.619 [DEBUG] [Thread-3564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:36:46.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:36:46.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:36:46.674 [DEBUG] [Thread-3564] [transport.py] [_log()] userauth is OK
2025-12-25T02:36:46.674 [DEBUG] [Thread-3564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:36:46.675 [DEBUG] [Thread-3564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:36:46.675 [DEBUG] [Thread-3564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:36:46.675 [DEBUG] [Thread-3564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:36:46.695 [INFO] [Thread-3564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:36:46.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:36:46.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:36:47.565 [DEBUG] [Thread-3564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:36:47.565 [DEBUG] [Thread-3564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:36:47.613 [DEBUG] [Thread-3564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:36:47.614 [DEBUG] [Thread-3564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:36:47.622 [DEBUG] [Thread-3564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:36:47.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:36:47.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:36:47.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:36:47.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:36:47.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:36:47.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:36:47.657 [DEBUG] [Thread-3564] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:36:59.384 [DEBUG] [Thread-3566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:37:14.444 [DEBUG] [Thread-3567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:37:17.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:37:17.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:37:17.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:37:18.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 36, 51), 0.39, 97.28, 0.0, 21.03, 11.44, 2, 2, 2, 2, 0, 0),)
2025-12-25T02:37:18.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:36:51
2025-12-25T02:37:18.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:37:18.658 [DEBUG] [Thread-3568] [transport.py] [_log()] starting thread (client mode): 0xb9558790
2025-12-25T02:37:18.658 [DEBUG] [Thread-3568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:37:18.679 [DEBUG] [Thread-3568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:37:18.679 [INFO] [Thread-3568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] client lang: <none>
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] server lang: <none>
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] kex follows: False
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:37:18.682 [DEBUG] [Thread-3568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:37:18.683 [DEBUG] [Thread-3568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:37:18.683 [DEBUG] [Thread-3568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:37:18.683 [DEBUG] [Thread-3568] [transport.py] [_log()] Compression: none
2025-12-25T02:37:18.683 [DEBUG] [Thread-3568] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:37:18.698 [DEBUG] [Thread-3568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:37:18.698 [DEBUG] [Thread-3568] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:37:18.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:37:18.700 [DEBUG] [Thread-3568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:37:18.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:37:18.701 [DEBUG] [Thread-3568] [transport.py] [_log()] userauth is OK
2025-12-25T02:37:18.702 [DEBUG] [Thread-3568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:37:18.702 [DEBUG] [Thread-3568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:37:18.702 [DEBUG] [Thread-3568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:37:18.702 [DEBUG] [Thread-3568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:37:18.727 [INFO] [Thread-3568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:37:18.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:37:19.302 [DEBUG] [Thread-3568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:37:19.302 [DEBUG] [Thread-3568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:37:19.303 [DEBUG] [Thread-3568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:37:19.343 [DEBUG] [Thread-3568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:37:19.343 [DEBUG] [Thread-3568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:37:19.347 [DEBUG] [Thread-3568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:37:19.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:37:19.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:37:19.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:37:19.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:37:19.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:37:19.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:37:19.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:37:19.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:37:19.374 [DEBUG] [Thread-3568] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:37:19.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:37:19.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.025763 -999.00  +11.30  15.42     94  +10.60 1 3 1 3 1     0    0 0.74 -2.04 Z...W 17.6 15.4 162.4 21.0 13.2 -6.2 13.0 -7.8 12.9 -6.2 13.2 -6.8
2025-12-25T02:37:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:37:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:37:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.025763
2025-12-25T02:37:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:37:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:37:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:37:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:37:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:37:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:36:51', tmtdew=0.39, humidity=97.28, cloud=0.0, wind=21.03, temperature=11.44, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:37:05.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:37:19.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:37:19.477 [DEBUG] [Thread-3571] [transport.py] [_log()] starting thread (client mode): 0xb95f3d90
2025-12-25T02:37:19.477 [DEBUG] [Thread-3571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:37:19.492 [DEBUG] [Thread-3571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:37:19.493 [INFO] [Thread-3571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] client lang: <none>
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] server lang: <none>
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] kex follows: False
2025-12-25T02:37:19.500 [DEBUG] [Thread-3571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:37:19.501 [DEBUG] [Thread-3571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:37:19.501 [DEBUG] [Thread-3571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:37:19.501 [DEBUG] [Thread-3571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:37:19.501 [DEBUG] [Thread-3571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:37:19.501 [DEBUG] [Thread-3571] [transport.py] [_log()] Compression: none
2025-12-25T02:37:19.501 [DEBUG] [Thread-3571] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:37:19.558 [DEBUG] [Thread-3571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:37:19.559 [DEBUG] [Thread-3571] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:37:19.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:37:19.560 [DEBUG] [Thread-3571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:37:19.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:37:19.615 [DEBUG] [Thread-3571] [transport.py] [_log()] userauth is OK
2025-12-25T02:37:19.615 [DEBUG] [Thread-3571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:37:19.615 [DEBUG] [Thread-3571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:37:19.615 [DEBUG] [Thread-3571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:37:19.615 [DEBUG] [Thread-3571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:37:19.633 [INFO] [Thread-3571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:37:19.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:37:19.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:37:20.492 [DEBUG] [Thread-3571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:37:20.492 [DEBUG] [Thread-3571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:37:20.540 [DEBUG] [Thread-3571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:37:20.540 [DEBUG] [Thread-3571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:37:20.550 [DEBUG] [Thread-3571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:37:20.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:37:20.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:37: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') -> 00000000
2025-12-25T02:37:20.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:37:20.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:37:20.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:37:20.586 [DEBUG] [Thread-3571] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:37:28.969 [DEBUG] [Thread-3573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:37:29.484 [DEBUG] [Thread-3574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:37:44.259 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:37:44.260 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:37:44.537 [DEBUG] [Thread-3575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:37:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:37:50.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:37:50.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
2025-12-25T02:37:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 37, 23), 0.39, 97.26, 0.0, 21.74, 11.42, 2, 2, 2, 2, 0, 0),)
2025-12-25T02:37:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:37:23
2025-12-25T02:37:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:37:51.580 [DEBUG] [Thread-3576] [transport.py] [_log()] starting thread (client mode): 0xb6b16b60
2025-12-25T02:37:51.580 [DEBUG] [Thread-3576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:37:51.603 [DEBUG] [Thread-3576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:37:51.603 [INFO] [Thread-3576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:37:51.606 [DEBUG] [Thread-3576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:37:51.606 [DEBUG] [Thread-3576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:37:51.606 [DEBUG] [Thread-3576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] client lang: <none>
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] server lang: <none>
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] kex follows: False
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:37:51.607 [DEBUG] [Thread-3576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:37:51.608 [DEBUG] [Thread-3576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:37:51.608 [DEBUG] [Thread-3576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:37:51.608 [DEBUG] [Thread-3576] [transport.py] [_log()] Compression: none
2025-12-25T02:37:51.608 [DEBUG] [Thread-3576] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:37:51.628 [DEBUG] [Thread-3576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:37:51.628 [DEBUG] [Thread-3576] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:37:51.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:37:51.629 [DEBUG] [Thread-3576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:37:51.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:37:51.631 [DEBUG] [Thread-3576] [transport.py] [_log()] userauth is OK
2025-12-25T02:37:51.632 [DEBUG] [Thread-3576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:37:51.632 [DEBUG] [Thread-3576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:37:51.632 [DEBUG] [Thread-3576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:37:51.632 [DEBUG] [Thread-3576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:37:51.666 [INFO] [Thread-3576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:37:51.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:37:52.274 [DEBUG] [Thread-3576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:37:52.274 [DEBUG] [Thread-3576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:37:52.274 [DEBUG] [Thread-3576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:37:52.315 [DEBUG] [Thread-3576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:37:52.315 [DEBUG] [Thread-3576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:37:52.319 [DEBUG] [Thread-3576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:37:52.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:37:52.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:37:52.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:37:52.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:37:52.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:37:52.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:37:52.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:37:52.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:37:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:37:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.025763 -999.00  +11.30  15.42     94  +10.60 1 3 1 3 1     0    0 0.74 -2.04 Z...W 17.6 15.4 162.4 21.0 13.2 -6.2 13.0 -7.8 12.9 -6.2 13.2 -6.8
2025-12-25T02:37:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:37:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:37:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.025763
2025-12-25T02:37:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:37:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:37:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:37:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:37:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:37:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:37:23', tmtdew=0.39, humidity=97.26, cloud=0.0, wind=21.74, temperature=11.42, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:37:05.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:37:52.344 [DEBUG] [Thread-3576] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:37:52.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:37:52.438 [DEBUG] [Thread-3579] [transport.py] [_log()] starting thread (client mode): 0xb6b15960
2025-12-25T02:37:52.438 [DEBUG] [Thread-3579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:37:52.451 [DEBUG] [Thread-3579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:37:52.452 [INFO] [Thread-3579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:37:52.459 [DEBUG] [Thread-3579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:37:52.459 [DEBUG] [Thread-3579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:37:52.459 [DEBUG] [Thread-3579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:37:52.459 [DEBUG] [Thread-3579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:37:52.459 [DEBUG] [Thread-3579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] client lang: <none>
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] server lang: <none>
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] kex follows: False
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] Compression: none
2025-12-25T02:37:52.460 [DEBUG] [Thread-3579] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:37:52.519 [DEBUG] [Thread-3579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:37:52.519 [DEBUG] [Thread-3579] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:37:52.520 [DEBUG] [Thread-3579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:37:52.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:37:52.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:37:52.575 [DEBUG] [Thread-3579] [transport.py] [_log()] userauth is OK
2025-12-25T02:37:52.575 [DEBUG] [Thread-3579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:37:52.575 [DEBUG] [Thread-3579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:37:52.575 [DEBUG] [Thread-3579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:37:52.575 [DEBUG] [Thread-3579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:37:52.593 [INFO] [Thread-3579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:37:52.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:37:52.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:37:53.416 [DEBUG] [Thread-3579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:37:53.416 [DEBUG] [Thread-3579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:37:53.464 [DEBUG] [Thread-3579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:37:53.464 [DEBUG] [Thread-3579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:37:53.474 [DEBUG] [Thread-3579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:37:53.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:37:53.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:37:53.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:37:53.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:37:53.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:37:53.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:37:53.511 [DEBUG] [Thread-3579] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:37:59.569 [DEBUG] [Thread-3581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:38:14.629 [DEBUG] [Thread-3582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:38:23.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:38:23.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:38:23.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:38:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 37, 55), 0.39, 97.26, 0.0, 23.4, 11.39, 2, 2, 2, 2, 0, 0),)
2025-12-25T02:38:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:37:55
2025-12-25T02:38:24.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:38:24.571 [DEBUG] [Thread-3583] [transport.py] [_log()] starting thread (client mode): 0xb95f3010
2025-12-25T02:38:24.571 [DEBUG] [Thread-3583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:38:24.591 [DEBUG] [Thread-3583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:38:24.591 [INFO] [Thread-3583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:38:24.594 [DEBUG] [Thread-3583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] client lang: <none>
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] server lang: <none>
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] kex follows: False
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] Compression: none
2025-12-25T02:38:24.595 [DEBUG] [Thread-3583] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:38:24.612 [DEBUG] [Thread-3583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:38:24.612 [DEBUG] [Thread-3583] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:38:24.612 [DEBUG] [Thread-3583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:38:24.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:38:24.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:38:24.613 [DEBUG] [Thread-3583] [transport.py] [_log()] userauth is OK
2025-12-25T02:38:24.613 [DEBUG] [Thread-3583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:38:24.613 [DEBUG] [Thread-3583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:38:24.613 [DEBUG] [Thread-3583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:38:24.613 [DEBUG] [Thread-3583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:38:24.626 [INFO] [Thread-3583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:38:24.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:38:25.277 [DEBUG] [Thread-3583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:38:25.277 [DEBUG] [Thread-3583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:38:25.277 [DEBUG] [Thread-3583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:38:25.318 [DEBUG] [Thread-3583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:38:25.318 [DEBUG] [Thread-3583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:38:25.321 [DEBUG] [Thread-3583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:38:25.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:38:25.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:38:25.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:38:25.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:38:25.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:38:25.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:38:25.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.026111 -999.00  +11.40  14.33     94  +10.60 1 3 1 3 1     0    0 0.73 -2.11 ----- 12.9 14.3 160.0 23.1 13.2 -6.0 13.0 -4.7 12.8 -6.1 13.2 -4.5
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.026111
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:38:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:37:55', tmtdew=0.39, humidity=97.26, cloud=0.0, wind=23.4, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:37:35.990', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:38:25.340 [DEBUG] [Thread-3583] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:38:25.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:38:25.424 [DEBUG] [Thread-3586] [transport.py] [_log()] starting thread (client mode): 0xb6b2add0
2025-12-25T02:38:25.425 [DEBUG] [Thread-3586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:38:25.438 [DEBUG] [Thread-3586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:38:25.439 [INFO] [Thread-3586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] client lang: <none>
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] server lang: <none>
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] kex follows: False
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] Compression: none
2025-12-25T02:38:25.446 [DEBUG] [Thread-3586] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:38:25.501 [DEBUG] [Thread-3586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:38:25.501 [DEBUG] [Thread-3586] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:38:25.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:38:25.501 [DEBUG] [Thread-3586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:38:25.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:38:25.560 [DEBUG] [Thread-3586] [transport.py] [_log()] userauth is OK
2025-12-25T02:38:25.560 [DEBUG] [Thread-3586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:38:25.560 [DEBUG] [Thread-3586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:38:25.560 [DEBUG] [Thread-3586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:38:25.560 [DEBUG] [Thread-3586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:38:25.576 [INFO] [Thread-3586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:38:25.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:38:25.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:38:26.405 [DEBUG] [Thread-3586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:38:26.405 [DEBUG] [Thread-3586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:38:26.456 [DEBUG] [Thread-3586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:38:26.456 [DEBUG] [Thread-3586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:38:26.464 [DEBUG] [Thread-3586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:38:26.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:38:26.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:38:26.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:38:26.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:38:26.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:38:26.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:38:26.509 [DEBUG] [Thread-3586] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:38:29.021 [DEBUG] [Thread-3588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:38:29.660 [DEBUG] [Thread-3589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:38:44.466 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:38:44.468 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:38:44.706 [DEBUG] [Thread-3590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:38:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:38:56.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:38:56.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:38:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 38, 27), 0.39, 97.25, 0.0, 21.21, 11.4, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:38:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:38:27
2025-12-25T02:38:57.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:38:57.501 [DEBUG] [Thread-3591] [transport.py] [_log()] starting thread (client mode): 0xb957a6e0
2025-12-25T02:38:57.501 [DEBUG] [Thread-3591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:38:57.521 [DEBUG] [Thread-3591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:38:57.522 [INFO] [Thread-3591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] client lang: <none>
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] server lang: <none>
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] kex follows: False
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] Compression: none
2025-12-25T02:38:57.525 [DEBUG] [Thread-3591] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:38:57.543 [DEBUG] [Thread-3591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:38:57.544 [DEBUG] [Thread-3591] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:38:57.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:38:57.545 [DEBUG] [Thread-3591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:38:57.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:38:57.547 [DEBUG] [Thread-3591] [transport.py] [_log()] userauth is OK
2025-12-25T02:38:57.547 [DEBUG] [Thread-3591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:38:57.547 [DEBUG] [Thread-3591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:38:57.547 [DEBUG] [Thread-3591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:38:57.547 [DEBUG] [Thread-3591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:38:57.584 [INFO] [Thread-3591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:38:57.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:38:58.250 [DEBUG] [Thread-3591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:38:58.250 [DEBUG] [Thread-3591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:38:58.250 [DEBUG] [Thread-3591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:38:58.292 [DEBUG] [Thread-3591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:38:58.292 [DEBUG] [Thread-3591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:38:58.295 [DEBUG] [Thread-3591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:38:58.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:38:58.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:38:58.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:38:58.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:38:58.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:38:58.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:38:58.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:38:58.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:38:58.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:38:58.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.026458 -999.00  +11.40  13.64     95  +10.60 1 3 1 3 1     0    0 0.74 -2.31 ----- 14.4 13.6 159.6 21.7 13.2 -6.4 13.0 -6.9 12.8 -6.3 13.2 -9.0
2025-12-25T02:38:58.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:38:58.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:38:58.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.026458
2025-12-25T02:38:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:38:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:38:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:38:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:38:58.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:38:58.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:38:27', tmtdew=0.39, humidity=97.25, cloud=0.0, wind=21.21, temperature=11.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:38:05.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:38:58.320 [DEBUG] [Thread-3591] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:38:58.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:38:58.412 [DEBUG] [Thread-3594] [transport.py] [_log()] starting thread (client mode): 0xb6b23280
2025-12-25T02:38:58.412 [DEBUG] [Thread-3594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:38:58.427 [DEBUG] [Thread-3594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:38:58.427 [INFO] [Thread-3594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:38:58.434 [DEBUG] [Thread-3594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:38:58.434 [DEBUG] [Thread-3594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] client lang: <none>
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] server lang: <none>
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] kex follows: False
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] Compression: none
2025-12-25T02:38:58.435 [DEBUG] [Thread-3594] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:38:58.494 [DEBUG] [Thread-3594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:38:58.495 [DEBUG] [Thread-3594] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:38:58.496 [DEBUG] [Thread-3594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:38:58.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:38:58.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:38:58.551 [DEBUG] [Thread-3594] [transport.py] [_log()] userauth is OK
2025-12-25T02:38:58.551 [DEBUG] [Thread-3594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:38:58.552 [DEBUG] [Thread-3594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:38:58.552 [DEBUG] [Thread-3594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:38:58.552 [DEBUG] [Thread-3594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:38:58.571 [INFO] [Thread-3594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:38:58.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:38:58.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:38:59.381 [DEBUG] [Thread-3594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:38:59.381 [DEBUG] [Thread-3594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:38:59.429 [DEBUG] [Thread-3594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:38:59.429 [DEBUG] [Thread-3594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:38:59.438 [DEBUG] [Thread-3594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:38:59.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:38:59.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:38:59.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
2025-12-25T02:38:59.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:38:59.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:38:59.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:38:59.475 [DEBUG] [Thread-3594] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:38:59.745 [DEBUG] [Thread-3596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:39:14.793 [DEBUG] [Thread-3597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:39:29.091 [DEBUG] [Thread-3598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:39:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:39:29.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:39:29.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
2025-12-25T02:39:29.830 [DEBUG] [Thread-3599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:39:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 38, 59), 0.39, 97.26, 0.0, 17.73, 11.34, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:39:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:38:59
2025-12-25T02:39:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:39:30.464 [DEBUG] [Thread-3600] [transport.py] [_log()] starting thread (client mode): 0xb95b1ba0
2025-12-25T02:39:30.464 [DEBUG] [Thread-3600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:39:30.486 [DEBUG] [Thread-3600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:39:30.486 [INFO] [Thread-3600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:39:30.489 [DEBUG] [Thread-3600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:39:30.489 [DEBUG] [Thread-3600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] client lang: <none>
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] server lang: <none>
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] kex follows: False
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] Compression: none
2025-12-25T02:39:30.490 [DEBUG] [Thread-3600] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:39:30.507 [DEBUG] [Thread-3600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:39:30.507 [DEBUG] [Thread-3600] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:39:30.508 [DEBUG] [Thread-3600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:39:30.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:39:30.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:39:30.510 [DEBUG] [Thread-3600] [transport.py] [_log()] userauth is OK
2025-12-25T02:39:30.510 [DEBUG] [Thread-3600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:39:30.510 [DEBUG] [Thread-3600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:39:30.510 [DEBUG] [Thread-3600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:39:30.510 [DEBUG] [Thread-3600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:39:30.535 [INFO] [Thread-3600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:39:30.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:39:31.198 [DEBUG] [Thread-3600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:39:31.199 [DEBUG] [Thread-3600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:39:31.199 [DEBUG] [Thread-3600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:39:31.240 [DEBUG] [Thread-3600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:39:31.240 [DEBUG] [Thread-3600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:39:31.243 [DEBUG] [Thread-3600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:39:31.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:39:31.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:39:31.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:39:31.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:39:31.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:39:31.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:39:31.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:39:31.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:39:31.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:39:31.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.026805 -999.00  +11.40  14.70     95  +10.60 1 3 1 3 1     0    0 0.74 -2.40 ----- 13.5 14.7 150.6 19.6 13.2 -6.2 13.1 -5.3 12.8 -5.8 13.2 -6.4
2025-12-25T02:39:31.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:39:31.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:39:31.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.026805
2025-12-25T02:39:31.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:39:31.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:39:31.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:39:31.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:39:31.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:39:31.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:38:59', tmtdew=0.39, humidity=97.26, cloud=0.0, wind=17.73, temperature=11.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:38:35.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:39:31.271 [DEBUG] [Thread-3600] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:39:31.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:39:31.365 [DEBUG] [Thread-3603] [transport.py] [_log()] starting thread (client mode): 0xb9559f30
2025-12-25T02:39:31.365 [DEBUG] [Thread-3603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:39:31.380 [DEBUG] [Thread-3603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:39:31.380 [INFO] [Thread-3603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] client lang: <none>
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] server lang: <none>
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] kex follows: False
2025-12-25T02:39:31.388 [DEBUG] [Thread-3603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:39:31.389 [DEBUG] [Thread-3603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:39:31.389 [DEBUG] [Thread-3603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:39:31.389 [DEBUG] [Thread-3603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:39:31.389 [DEBUG] [Thread-3603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:39:31.389 [DEBUG] [Thread-3603] [transport.py] [_log()] Compression: none
2025-12-25T02:39:31.389 [DEBUG] [Thread-3603] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:39:31.447 [DEBUG] [Thread-3603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:39:31.447 [DEBUG] [Thread-3603] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:39:31.448 [DEBUG] [Thread-3603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:39:31.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:39:31.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:39:31.503 [DEBUG] [Thread-3603] [transport.py] [_log()] userauth is OK
2025-12-25T02:39:31.503 [DEBUG] [Thread-3603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:39:31.503 [DEBUG] [Thread-3603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:39:31.503 [DEBUG] [Thread-3603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:39:31.503 [DEBUG] [Thread-3603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:39:31.522 [INFO] [Thread-3603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:39:31.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:39:31.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:39:32.345 [DEBUG] [Thread-3603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:39:32.345 [DEBUG] [Thread-3603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:39:32.394 [DEBUG] [Thread-3603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:39:32.394 [DEBUG] [Thread-3603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:39:32.402 [DEBUG] [Thread-3603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:39:32.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:39:32.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:39:32.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:39:32.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:39:32.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:39:32.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:39:32.433 [DEBUG] [Thread-3603] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:39:44.679 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:39:44.680 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:39:44.861 [DEBUG] [Thread-3605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:39:59.902 [DEBUG] [Thread-3606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:40:02.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:40:02.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:40:02.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:40:03.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 39, 31), 0.38, 97.3, 0.0, 18.53, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:40:03.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:39:31
2025-12-25T02:40:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:40:03.405 [DEBUG] [Thread-3607] [transport.py] [_log()] starting thread (client mode): 0xb95b0700
2025-12-25T02:40:03.405 [DEBUG] [Thread-3607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:40:03.425 [DEBUG] [Thread-3607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:40:03.425 [INFO] [Thread-3607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:40:03.428 [DEBUG] [Thread-3607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:40:03.428 [DEBUG] [Thread-3607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:40:03.428 [DEBUG] [Thread-3607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] client lang: <none>
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] server lang: <none>
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] kex follows: False
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] Compression: none
2025-12-25T02:40:03.429 [DEBUG] [Thread-3607] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:40:03.445 [DEBUG] [Thread-3607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:40:03.446 [DEBUG] [Thread-3607] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:40:03.446 [DEBUG] [Thread-3607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:40:03.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:40:03.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:40:03.448 [DEBUG] [Thread-3607] [transport.py] [_log()] userauth is OK
2025-12-25T02:40:03.448 [DEBUG] [Thread-3607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:40:03.449 [DEBUG] [Thread-3607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:40:03.449 [DEBUG] [Thread-3607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:40:03.449 [DEBUG] [Thread-3607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:40:03.486 [INFO] [Thread-3607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:40:03.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:40:04.311 [DEBUG] [Thread-3607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:40:04.311 [DEBUG] [Thread-3607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:40:04.311 [DEBUG] [Thread-3607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:40:04.352 [DEBUG] [Thread-3607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:40:04.352 [DEBUG] [Thread-3607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:40:04.355 [DEBUG] [Thread-3607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:40:04.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:40:04.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:40:04.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:40:04.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:40:04.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:40:04.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:40:04.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.027152 -999.00  +11.40  14.59     95  +10.60 1 3 1 3 1     0    0 0.73 -2.33 ----- 15.5 14.6 144.2 20.9 13.2 -5.4 13.0 -5.6 12.8 -5.3 13.2 -5.8
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.027152
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:39:31', tmtdew=0.38, humidity=97.3, cloud=0.0, wind=18.53, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:39:05.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:40:04.373 [DEBUG] [Thread-3607] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:40:04.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:40:04.457 [DEBUG] [Thread-3610] [transport.py] [_log()] starting thread (client mode): 0xb9546890
2025-12-25T02:40:04.457 [DEBUG] [Thread-3610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:40:04.472 [DEBUG] [Thread-3610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:40:04.472 [INFO] [Thread-3610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] client lang: <none>
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] server lang: <none>
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] kex follows: False
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] Compression: none
2025-12-25T02:40:04.480 [DEBUG] [Thread-3610] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:40:04.537 [DEBUG] [Thread-3610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:40:04.537 [DEBUG] [Thread-3610] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:40:04.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:40:04.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:40:04.538 [DEBUG] [Thread-3610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:40:04.594 [DEBUG] [Thread-3610] [transport.py] [_log()] userauth is OK
2025-12-25T02:40:04.594 [DEBUG] [Thread-3610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:40:04.594 [DEBUG] [Thread-3610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:40:04.594 [DEBUG] [Thread-3610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:40:04.594 [DEBUG] [Thread-3610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:40:04.608 [INFO] [Thread-3610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:40:04.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:40:04.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:40:05.475 [DEBUG] [Thread-3610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:40:05.475 [DEBUG] [Thread-3610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:40:05.523 [DEBUG] [Thread-3610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:40:05.523 [DEBUG] [Thread-3610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:40:05.531 [DEBUG] [Thread-3610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:40:05.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:40:05.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:40:05.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:40:05.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:40:05.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:40:05.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:40:05.562 [DEBUG] [Thread-3610] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:40:14.939 [DEBUG] [Thread-3612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:40:29.165 [DEBUG] [Thread-3613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:40:29.989 [DEBUG] [Thread-3614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:40:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:40:35.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:40:35.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
2025-12-25T02:40:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 40, 3), 0.39, 97.3, 0.0, 19.51, 11.4, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:40:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:40:03
2025-12-25T02:40:36.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:40:36.573 [DEBUG] [Thread-3615] [transport.py] [_log()] starting thread (client mode): 0xb95f26b0
2025-12-25T02:40:36.573 [DEBUG] [Thread-3615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:40:36.593 [DEBUG] [Thread-3615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:40:36.593 [INFO] [Thread-3615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:40:36.596 [DEBUG] [Thread-3615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:40:36.596 [DEBUG] [Thread-3615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:40:36.596 [DEBUG] [Thread-3615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:40:36.596 [DEBUG] [Thread-3615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:40:36.596 [DEBUG] [Thread-3615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:40:36.596 [DEBUG] [Thread-3615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:40:36.596 [DEBUG] [Thread-3615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:40:36.596 [DEBUG] [Thread-3615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] client lang: <none>
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] server lang: <none>
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] kex follows: False
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] Compression: none
2025-12-25T02:40:36.597 [DEBUG] [Thread-3615] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:40:36.614 [DEBUG] [Thread-3615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:40:36.615 [DEBUG] [Thread-3615] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:40:36.615 [DEBUG] [Thread-3615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:40:36.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:40:36.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:40:36.617 [DEBUG] [Thread-3615] [transport.py] [_log()] userauth is OK
2025-12-25T02:40:36.618 [DEBUG] [Thread-3615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:40:36.618 [DEBUG] [Thread-3615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:40:36.618 [DEBUG] [Thread-3615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:40:36.618 [DEBUG] [Thread-3615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:40:36.643 [INFO] [Thread-3615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:40:36.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:40:37.325 [DEBUG] [Thread-3615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:40:37.326 [DEBUG] [Thread-3615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:40:37.326 [DEBUG] [Thread-3615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:40:37.367 [DEBUG] [Thread-3615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:40:37.367 [DEBUG] [Thread-3615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:40:37.369 [DEBUG] [Thread-3615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:40:37.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:40:37.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:40:37.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:40:37.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:40:37.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:40:37.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:40:37.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.027846 -999.00  +11.40  16.41     94  +10.60 1 3 1 3 1     0    0 0.73 -1.91 ----- 17.6 16.4 142.4 23.3 13.2 -11.1 13.1 -5.5 12.9 -10.8 13.2 -5.8
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.027846
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:40:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:40:03', tmtdew=0.39, humidity=97.3, cloud=0.0, wind=19.51, temperature=11.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:40:05.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:40:37.388 [DEBUG] [Thread-3615] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:40:37.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:40:37.474 [DEBUG] [Thread-3618] [transport.py] [_log()] starting thread (client mode): 0xb6b23be0
2025-12-25T02:40:37.474 [DEBUG] [Thread-3618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:40:37.493 [DEBUG] [Thread-3618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:40:37.493 [INFO] [Thread-3618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] client lang: <none>
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] server lang: <none>
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] kex follows: False
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:40:37.500 [DEBUG] [Thread-3618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:40:37.501 [DEBUG] [Thread-3618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:40:37.501 [DEBUG] [Thread-3618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:40:37.501 [DEBUG] [Thread-3618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:40:37.501 [DEBUG] [Thread-3618] [transport.py] [_log()] Compression: none
2025-12-25T02:40:37.501 [DEBUG] [Thread-3618] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:40:37.558 [DEBUG] [Thread-3618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:40:37.558 [DEBUG] [Thread-3618] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:40:37.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:40:37.558 [DEBUG] [Thread-3618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:40:37.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:40:37.614 [DEBUG] [Thread-3618] [transport.py] [_log()] userauth is OK
2025-12-25T02:40:37.615 [DEBUG] [Thread-3618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:40:37.615 [DEBUG] [Thread-3618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:40:37.615 [DEBUG] [Thread-3618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:40:37.615 [DEBUG] [Thread-3618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:40:37.628 [INFO] [Thread-3618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:40:37.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:40:37.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:40:38.477 [DEBUG] [Thread-3618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:40:38.477 [DEBUG] [Thread-3618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:40:38.529 [DEBUG] [Thread-3618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:40:38.529 [DEBUG] [Thread-3618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:40:38.537 [DEBUG] [Thread-3618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:40:38.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:40:38.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:40:38.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:40:38.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:40:38.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:40:38.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:40:38.569 [DEBUG] [Thread-3618] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:40:44.883 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:40:44.885 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:40:45.026 [DEBUG] [Thread-3620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:41:00.082 [DEBUG] [Thread-3621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:41:08.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:41:08.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:41:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:41:09.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 40, 35), 0.38, 97.33, 0.0, 21.65, 11.44, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:41:09.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:40:35
2025-12-25T02:41:09.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:41:09.591 [DEBUG] [Thread-3622] [transport.py] [_log()] starting thread (client mode): 0xb6b28ca0
2025-12-25T02:41:09.592 [DEBUG] [Thread-3622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:41:09.612 [DEBUG] [Thread-3622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:41:09.612 [INFO] [Thread-3622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] client lang: <none>
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] server lang: <none>
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] kex follows: False
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] Compression: none
2025-12-25T02:41:09.616 [DEBUG] [Thread-3622] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:41:09.623 [DEBUG] [Thread-3622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:41:09.624 [DEBUG] [Thread-3622] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:41:09.624 [DEBUG] [Thread-3622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:41:09.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:41:09.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:41:09.625 [DEBUG] [Thread-3622] [transport.py] [_log()] userauth is OK
2025-12-25T02:41:09.625 [DEBUG] [Thread-3622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:41:09.625 [DEBUG] [Thread-3622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:41:09.625 [DEBUG] [Thread-3622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:41:09.625 [DEBUG] [Thread-3622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:41:09.634 [INFO] [Thread-3622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:41:09.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:41:10.276 [DEBUG] [Thread-3622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:41:10.276 [DEBUG] [Thread-3622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:41:10.276 [DEBUG] [Thread-3622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:41:10.316 [DEBUG] [Thread-3622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:41:10.316 [DEBUG] [Thread-3622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:41:10.318 [DEBUG] [Thread-3622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:41:10.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:41:10.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:41:10.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:41:10.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:41:10.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:41:10.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:41:10.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:41:10.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:41:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:41:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.028194 -999.00  +11.40  15.47     95  +10.60 1 3 1 3 1     0    0 0.74 -1.82 ZN..W 14.1 15.5 168.6 18.7 13.2 -6.8 13.0 -6.3 12.9 -6.2 13.2 -7.8
2025-12-25T02:41:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:41:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:41:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.028194
2025-12-25T02:41:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:41:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:41:10.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:41:10.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:41:10.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:41:10.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:40:35', tmtdew=0.38, humidity=97.33, cloud=0.0, wind=21.65, temperature=11.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:40:35.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.54575, nan, nan, nan, nan, 2.697750000000001, nan, nan, nan, nan, 3.9102499999999996, nan, nan, 2.38725, 2.136499999999999, nan, nan, nan, nan, nan, nan, 2.8147499999999983, 2.9582500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:25:00')
2025-12-25T02:41:10.336 [DEBUG] [Thread-3622] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:41:10.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:41:10.420 [DEBUG] [Thread-3625] [transport.py] [_log()] starting thread (client mode): 0xb6b2a350
2025-12-25T02:41:10.420 [DEBUG] [Thread-3625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:41:10.434 [DEBUG] [Thread-3625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:41:10.434 [INFO] [Thread-3625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:41:10.441 [DEBUG] [Thread-3625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:41:10.441 [DEBUG] [Thread-3625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:41:10.441 [DEBUG] [Thread-3625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] client lang: <none>
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] server lang: <none>
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] kex follows: False
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] Compression: none
2025-12-25T02:41:10.442 [DEBUG] [Thread-3625] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:41:10.500 [DEBUG] [Thread-3625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:41:10.500 [DEBUG] [Thread-3625] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:41:10.500 [DEBUG] [Thread-3625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:41:10.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:41:10.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:41:10.560 [DEBUG] [Thread-3625] [transport.py] [_log()] userauth is OK
2025-12-25T02:41:10.561 [DEBUG] [Thread-3625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:41:10.561 [DEBUG] [Thread-3625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:41:10.561 [DEBUG] [Thread-3625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:41:10.561 [DEBUG] [Thread-3625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:41:10.578 [INFO] [Thread-3625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:41:10.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:41:10.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:41:11.416 [DEBUG] [Thread-3625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:41:11.417 [DEBUG] [Thread-3625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:41:11.464 [DEBUG] [Thread-3625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:41:11.465 [DEBUG] [Thread-3625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:41:11.473 [DEBUG] [Thread-3625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:41:11.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:41:11.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:41:11.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:41:11.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:41:11.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:41:11.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:41:11.507 [DEBUG] [Thread-3625] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:41:15.111 [DEBUG] [Thread-3627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:41:29.241 [DEBUG] [Thread-3628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:41:30.164 [DEBUG] [Thread-3629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:41:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:41:41.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:41:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:41:42.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 41, 8), 0.38, 97.33, 0.0, 21.76, 11.42, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:41:42.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:41:08
2025-12-25T02:41:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:41:42.609 [DEBUG] [Thread-3630] [transport.py] [_log()] starting thread (client mode): 0xb6b363b0
2025-12-25T02:41:42.609 [DEBUG] [Thread-3630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:41:42.629 [DEBUG] [Thread-3630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:41:42.629 [INFO] [Thread-3630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] client lang: <none>
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] server lang: <none>
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] kex follows: False
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] Compression: none
2025-12-25T02:41:42.632 [DEBUG] [Thread-3630] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:41:42.649 [DEBUG] [Thread-3630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:41:42.649 [DEBUG] [Thread-3630] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:41:42.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:41:42.650 [DEBUG] [Thread-3630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:41:42.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:41:42.650 [DEBUG] [Thread-3630] [transport.py] [_log()] userauth is OK
2025-12-25T02:41:42.650 [DEBUG] [Thread-3630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:41:42.650 [DEBUG] [Thread-3630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:41:42.650 [DEBUG] [Thread-3630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:41:42.650 [DEBUG] [Thread-3630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:41:42.660 [INFO] [Thread-3630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:41:42.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:41:43.275 [DEBUG] [Thread-3630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:41:43.275 [DEBUG] [Thread-3630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:41:43.275 [DEBUG] [Thread-3630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:41:43.316 [DEBUG] [Thread-3630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:41:43.316 [DEBUG] [Thread-3630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:41:43.318 [DEBUG] [Thread-3630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:41:43.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:41:43.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:41:43.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:41:43.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:41:43.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:41:43.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:41:43.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.028541 -999.00  +11.40  15.59     95  +10.60 1 3 1 3 1     0    0 0.75 -1.85 ZN..W 13.8 15.6 156.0 21.5 13.2 -8.2 13.1 -7.3 12.9 -7.5 13.2 -7.8
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.028541
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:41:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:41:08', tmtdew=0.38, humidity=97.33, cloud=0.0, wind=21.76, temperature=11.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:41:05.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:41:43.338 [DEBUG] [Thread-3630] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:41:43.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:41:43.422 [DEBUG] [Thread-3633] [transport.py] [_log()] starting thread (client mode): 0xb6b35870
2025-12-25T02:41:43.422 [DEBUG] [Thread-3633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:41:43.436 [DEBUG] [Thread-3633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:41:43.436 [INFO] [Thread-3633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] client lang: <none>
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] server lang: <none>
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] kex follows: False
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] Compression: none
2025-12-25T02:41:43.444 [DEBUG] [Thread-3633] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:41:43.501 [DEBUG] [Thread-3633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:41:43.501 [DEBUG] [Thread-3633] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:41:43.501 [DEBUG] [Thread-3633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:41:43.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:41:43.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:41:43.558 [DEBUG] [Thread-3633] [transport.py] [_log()] userauth is OK
2025-12-25T02:41:43.558 [DEBUG] [Thread-3633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:41:43.558 [DEBUG] [Thread-3633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:41:43.559 [DEBUG] [Thread-3633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:41:43.559 [DEBUG] [Thread-3633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:41:43.572 [INFO] [Thread-3633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:41:43.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:41:43.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:41:44.428 [DEBUG] [Thread-3633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:41:44.428 [DEBUG] [Thread-3633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:41:44.476 [DEBUG] [Thread-3633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:41:44.476 [DEBUG] [Thread-3633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:41:44.484 [DEBUG] [Thread-3633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:41:44.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:41:44.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:41:44.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:41:44.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:41:44.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:41:44.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:41:44.517 [DEBUG] [Thread-3633] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:41:45.084 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:41:45.085 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:41:45.195 [DEBUG] [Thread-3635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:42:00.241 [DEBUG] [Thread-3636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:42:14.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:42:14.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:42:14.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:42:15.276 [DEBUG] [Thread-3637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:42:15.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 41, 40), 0.39, 97.28, 0.0, 22.8, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:42:15.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:41:40
2025-12-25T02:42:15.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:42:15.575 [DEBUG] [Thread-3638] [transport.py] [_log()] starting thread (client mode): 0xb6b37580
2025-12-25T02:42:15.575 [DEBUG] [Thread-3638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:42:15.596 [DEBUG] [Thread-3638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:42:15.597 [INFO] [Thread-3638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] client lang: <none>
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] server lang: <none>
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] kex follows: False
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] Compression: none
2025-12-25T02:42:15.599 [DEBUG] [Thread-3638] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:42:15.615 [DEBUG] [Thread-3638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:42:15.616 [DEBUG] [Thread-3638] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:42:15.616 [DEBUG] [Thread-3638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:42:15.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:42:15.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:42:15.618 [DEBUG] [Thread-3638] [transport.py] [_log()] userauth is OK
2025-12-25T02:42:15.618 [DEBUG] [Thread-3638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:42:15.618 [DEBUG] [Thread-3638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:42:15.618 [DEBUG] [Thread-3638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:42:15.618 [DEBUG] [Thread-3638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:42:15.635 [INFO] [Thread-3638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:42:15.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:42:16.321 [DEBUG] [Thread-3638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:42:16.321 [DEBUG] [Thread-3638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:42:16.321 [DEBUG] [Thread-3638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:42:16.362 [DEBUG] [Thread-3638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:42:16.362 [DEBUG] [Thread-3638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:42:16.364 [DEBUG] [Thread-3638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:42:16.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:42:16.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:42:16.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:42:16.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:42:16.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:42:16.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:42:16.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:42:16.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.028888 -999.00  +11.40  13.62     95  +10.60 1 3 1 3 1     0    0 0.75 -1.49 ZN..W 12.9 13.6 171.4 15.8 13.2 -5.7 13.0 -4.8 12.8 -6.1 13.2 -4.9
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.028888
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:42:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:41:40', tmtdew=0.39, humidity=97.28, cloud=0.0, wind=22.8, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:41:35.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:42:16.384 [DEBUG] [Thread-3638] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:42:16.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:42:16.464 [DEBUG] [Thread-3641] [transport.py] [_log()] starting thread (client mode): 0xb6b35ae0
2025-12-25T02:42:16.464 [DEBUG] [Thread-3641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:42:16.479 [DEBUG] [Thread-3641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:42:16.479 [INFO] [Thread-3641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] client lang: <none>
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] server lang: <none>
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] kex follows: False
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] Compression: none
2025-12-25T02:42:16.487 [DEBUG] [Thread-3641] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:42:16.544 [DEBUG] [Thread-3641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:42:16.545 [DEBUG] [Thread-3641] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:42:16.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:42:16.546 [DEBUG] [Thread-3641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:42:16.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:42:16.601 [DEBUG] [Thread-3641] [transport.py] [_log()] userauth is OK
2025-12-25T02:42:16.601 [DEBUG] [Thread-3641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:42:16.601 [DEBUG] [Thread-3641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:42:16.602 [DEBUG] [Thread-3641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:42:16.602 [DEBUG] [Thread-3641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:42:16.620 [INFO] [Thread-3641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:42:16.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:42:16.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:42:17.471 [DEBUG] [Thread-3641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:42:17.471 [DEBUG] [Thread-3641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:42:17.520 [DEBUG] [Thread-3641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:42:17.520 [DEBUG] [Thread-3641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:42:17.530 [DEBUG] [Thread-3641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:42:17.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:42:17.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:42:17.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
2025-12-25T02:42:17.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:42:17.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:42:17.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:42:17.566 [DEBUG] [Thread-3641] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:42:29.314 [DEBUG] [Thread-3643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:42:30.308 [DEBUG] [Thread-3644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:42:45.286 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:42:45.288 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:42:45.372 [DEBUG] [Thread-3645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:42:47.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:42:47.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:42:47.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:42:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 42, 13), 0.38, 97.31, 0.0, 21.53, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:42:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:42:13
2025-12-25T02:42:48.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:42:48.580 [DEBUG] [Thread-3646] [transport.py] [_log()] starting thread (client mode): 0xb6b36f80
2025-12-25T02:42:48.580 [DEBUG] [Thread-3646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:42:48.600 [DEBUG] [Thread-3646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:42:48.600 [INFO] [Thread-3646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:42:48.603 [DEBUG] [Thread-3646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:42:48.603 [DEBUG] [Thread-3646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:42:48.603 [DEBUG] [Thread-3646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] client lang: <none>
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] server lang: <none>
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] kex follows: False
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] Compression: none
2025-12-25T02:42:48.604 [DEBUG] [Thread-3646] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:42:48.621 [DEBUG] [Thread-3646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:42:48.622 [DEBUG] [Thread-3646] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:42:48.622 [DEBUG] [Thread-3646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:42:48.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:42:48.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:42:48.625 [DEBUG] [Thread-3646] [transport.py] [_log()] userauth is OK
2025-12-25T02:42:48.625 [DEBUG] [Thread-3646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:42:48.625 [DEBUG] [Thread-3646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:42:48.625 [DEBUG] [Thread-3646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:42:48.625 [DEBUG] [Thread-3646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:42:48.650 [INFO] [Thread-3646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:42:48.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:42:49.315 [DEBUG] [Thread-3646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:42:49.316 [DEBUG] [Thread-3646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:42:49.316 [DEBUG] [Thread-3646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:42:49.358 [DEBUG] [Thread-3646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:42:49.358 [DEBUG] [Thread-3646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:42:49.361 [DEBUG] [Thread-3646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:42:49.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:42:49.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:42:49.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:42:49.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:42:49.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:42:49.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:42:49.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:42:49.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:42:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:42:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.029236 -999.00  +11.40  16.46     95  +10.60 1 3 1 3 1     0    0 0.76 -1.11 Z...w 14.7 16.5 162.0 20.9 13.2 -4.8 13.1 -4.4 12.9 -4.8 13.2 -4.3
2025-12-25T02:42:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:42:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:42:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.029236
2025-12-25T02:42:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:42:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:42:49.386 [DEBUG] [Thread-3646] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:42:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:42:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:42:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:42:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:42:13', tmtdew=0.38, humidity=97.31, cloud=0.0, wind=21.53, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:42:05.990', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:42:49.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:42:49.472 [DEBUG] [Thread-3649] [transport.py] [_log()] starting thread (client mode): 0xb6b36380
2025-12-25T02:42:49.472 [DEBUG] [Thread-3649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:42:49.488 [DEBUG] [Thread-3649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:42:49.488 [INFO] [Thread-3649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:42:49.495 [DEBUG] [Thread-3649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:42:49.495 [DEBUG] [Thread-3649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:42:49.495 [DEBUG] [Thread-3649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] client lang: <none>
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] server lang: <none>
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] kex follows: False
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] Compression: none
2025-12-25T02:42:49.496 [DEBUG] [Thread-3649] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:42:49.555 [DEBUG] [Thread-3649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:42:49.556 [DEBUG] [Thread-3649] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:42:49.556 [DEBUG] [Thread-3649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:42:49.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:42:49.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:42:49.610 [DEBUG] [Thread-3649] [transport.py] [_log()] userauth is OK
2025-12-25T02:42:49.611 [DEBUG] [Thread-3649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:42:49.611 [DEBUG] [Thread-3649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:42:49.611 [DEBUG] [Thread-3649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:42:49.611 [DEBUG] [Thread-3649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:42:49.631 [INFO] [Thread-3649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:42:49.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:42:49.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:42:50.492 [DEBUG] [Thread-3649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:42:50.492 [DEBUG] [Thread-3649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:42:50.540 [DEBUG] [Thread-3649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:42:50.540 [DEBUG] [Thread-3649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:42:50.549 [DEBUG] [Thread-3649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:42:50.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:42:50.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:42:50.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:42:50.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:42:50.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:42:50.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:42:50.584 [DEBUG] [Thread-3649] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:43:00.402 [DEBUG] [Thread-3651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:43:15.442 [DEBUG] [Thread-3652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:43:20.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:43:20.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:43:20.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:43:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 43, 17), 0.38, 97.3, 0.0, 23.12, 11.42, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:43:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:43:17
2025-12-25T02:43:21.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:43:21.596 [DEBUG] [Thread-3653] [transport.py] [_log()] starting thread (client mode): 0xb6b37970
2025-12-25T02:43:21.596 [DEBUG] [Thread-3653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:43:21.615 [DEBUG] [Thread-3653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:43:21.616 [INFO] [Thread-3653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] client lang: <none>
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] server lang: <none>
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] kex follows: False
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] Compression: none
2025-12-25T02:43:21.619 [DEBUG] [Thread-3653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:43:21.636 [DEBUG] [Thread-3653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:43:21.637 [DEBUG] [Thread-3653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:43:21.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:43:21.638 [DEBUG] [Thread-3653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:43:21.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:43:21.640 [DEBUG] [Thread-3653] [transport.py] [_log()] userauth is OK
2025-12-25T02:43:21.640 [DEBUG] [Thread-3653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:43:21.640 [DEBUG] [Thread-3653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:43:21.640 [DEBUG] [Thread-3653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:43:21.640 [DEBUG] [Thread-3653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:43:21.661 [INFO] [Thread-3653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:43:21.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:43:22.312 [DEBUG] [Thread-3653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:43:22.312 [DEBUG] [Thread-3653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:43:22.313 [DEBUG] [Thread-3653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:43:22.353 [DEBUG] [Thread-3653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:43:22.353 [DEBUG] [Thread-3653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:43:22.357 [DEBUG] [Thread-3653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:43:22.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:43:22.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:43:22.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:43:22.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:43:22.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:43:22.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:43:22.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:43:22.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:43:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:43:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.029583 -999.00  +11.40  16.40     95  +10.60 1 3 1 3 1     0    0 0.76 -1.09 ----- 14.4 16.4 163.0 21.4 13.2 -5.5 13.0 -5.5 12.9 -5.6 13.2 -6.6
2025-12-25T02:43:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:43:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:43:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.029583
2025-12-25T02:43:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:43:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:43:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:43:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:43:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:43:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:43:17', tmtdew=0.38, humidity=97.3, cloud=0.0, wind=23.12, temperature=11.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:42:35.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:43:22.382 [DEBUG] [Thread-3653] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:43:22.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:43:22.475 [DEBUG] [Thread-3656] [transport.py] [_log()] starting thread (client mode): 0xb6b34d90
2025-12-25T02:43:22.475 [DEBUG] [Thread-3656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:43:22.490 [DEBUG] [Thread-3656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:43:22.490 [INFO] [Thread-3656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:43:22.497 [DEBUG] [Thread-3656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] client lang: <none>
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] server lang: <none>
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] kex follows: False
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] Compression: none
2025-12-25T02:43:22.498 [DEBUG] [Thread-3656] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:43:22.556 [DEBUG] [Thread-3656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:43:22.557 [DEBUG] [Thread-3656] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:43:22.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:43:22.558 [DEBUG] [Thread-3656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:43:22.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:43:22.612 [DEBUG] [Thread-3656] [transport.py] [_log()] userauth is OK
2025-12-25T02:43:22.613 [DEBUG] [Thread-3656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:43:22.613 [DEBUG] [Thread-3656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:43:22.613 [DEBUG] [Thread-3656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:43:22.613 [DEBUG] [Thread-3656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:43:22.633 [INFO] [Thread-3656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:43:22.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:43:22.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:43:23.446 [DEBUG] [Thread-3656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:43:23.446 [DEBUG] [Thread-3656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:43:23.494 [DEBUG] [Thread-3656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:43:23.494 [DEBUG] [Thread-3656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:43:23.504 [DEBUG] [Thread-3656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:43:23.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:43:23.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:43: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') -> 00000000
2025-12-25T02:43:23.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:43:23.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:43:23.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:43:23.540 [DEBUG] [Thread-3656] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:43:29.372 [DEBUG] [Thread-3658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:43:30.473 [DEBUG] [Thread-3659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:43:45.517 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:43:45.518 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:43:45.520 [DEBUG] [Thread-3660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:43:53.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:43:53.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:43:53.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:43:54.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 43, 49), 0.38, 97.35, 0.0, 20.47, 11.4, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:43:54.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:43:49
2025-12-25T02:43:54.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:43:54.531 [DEBUG] [Thread-3661] [transport.py] [_log()] starting thread (client mode): 0xb6b37d30
2025-12-25T02:43:54.531 [DEBUG] [Thread-3661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:43:54.550 [DEBUG] [Thread-3661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:43:54.550 [INFO] [Thread-3661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:43:54.553 [DEBUG] [Thread-3661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] client lang: <none>
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] server lang: <none>
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] kex follows: False
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] Compression: none
2025-12-25T02:43:54.554 [DEBUG] [Thread-3661] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:43:54.570 [DEBUG] [Thread-3661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:43:54.571 [DEBUG] [Thread-3661] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:43:54.571 [DEBUG] [Thread-3661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:43:54.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:43:54.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:43:54.573 [DEBUG] [Thread-3661] [transport.py] [_log()] userauth is OK
2025-12-25T02:43:54.574 [DEBUG] [Thread-3661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:43:54.574 [DEBUG] [Thread-3661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:43:54.574 [DEBUG] [Thread-3661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:43:54.574 [DEBUG] [Thread-3661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:43:54.598 [INFO] [Thread-3661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:43:54.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:43:55.193 [DEBUG] [Thread-3661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:43:55.193 [DEBUG] [Thread-3661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:43:55.194 [DEBUG] [Thread-3661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:43:55.235 [DEBUG] [Thread-3661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:43:55.235 [DEBUG] [Thread-3661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:43:55.239 [DEBUG] [Thread-3661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:43:55.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:43:55.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:43:55.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:43:55.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:43:55.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:43:55.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:43:55.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:43:55.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:43:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:43:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.029930 -999.00  +11.40  17.09     95  +10.60 1 3 1 3 1     0    0 0.75 -1.09 ----- 17.1 17.1 155.8 26.0 13.2 -5.6 13.0 -4.4 12.8 -5.9 13.2 -4.3
2025-12-25T02:43:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:43:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:43:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.029930
2025-12-25T02:43:55.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:43:55.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:43:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:43:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:43:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:43:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:43:49', tmtdew=0.38, humidity=97.35, cloud=0.0, wind=20.47, temperature=11.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:43:05.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:43:55.265 [DEBUG] [Thread-3661] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:43:55.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:43:55.359 [DEBUG] [Thread-3664] [transport.py] [_log()] starting thread (client mode): 0xb6b37e80
2025-12-25T02:43:55.359 [DEBUG] [Thread-3664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:43:55.373 [DEBUG] [Thread-3664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:43:55.373 [INFO] [Thread-3664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] client lang: <none>
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] server lang: <none>
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] kex follows: False
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:43:55.382 [DEBUG] [Thread-3664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:43:55.383 [DEBUG] [Thread-3664] [transport.py] [_log()] Compression: none
2025-12-25T02:43:55.383 [DEBUG] [Thread-3664] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:43:55.436 [DEBUG] [Thread-3664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:43:55.436 [DEBUG] [Thread-3664] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:43:55.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:43:55.436 [DEBUG] [Thread-3664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:43:55.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:43:55.493 [DEBUG] [Thread-3664] [transport.py] [_log()] userauth is OK
2025-12-25T02:43:55.494 [DEBUG] [Thread-3664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:43:55.494 [DEBUG] [Thread-3664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:43:55.494 [DEBUG] [Thread-3664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:43:55.494 [DEBUG] [Thread-3664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:43:55.515 [INFO] [Thread-3664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:43:55.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:43:55.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:43:56.331 [DEBUG] [Thread-3664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:43:56.331 [DEBUG] [Thread-3664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:43:56.379 [DEBUG] [Thread-3664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:43:56.379 [DEBUG] [Thread-3664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:43:56.391 [DEBUG] [Thread-3664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:43:56.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:43:56.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:43:56.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:43:56.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:43:56.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:43:56.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:43:56.426 [DEBUG] [Thread-3664] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:44:00.555 [DEBUG] [Thread-3666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:44:15.610 [DEBUG] [Thread-3667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:44:26.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:44:26.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:44:26.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:44:27.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 44, 21), 0.38, 97.33, 0.0, 20.52, 11.4, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:44:27.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:44:21
2025-12-25T02:44:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:44:27.423 [DEBUG] [Thread-3668] [transport.py] [_log()] starting thread (client mode): 0xb957ab90
2025-12-25T02:44:27.423 [DEBUG] [Thread-3668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:44:27.445 [DEBUG] [Thread-3668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:44:27.445 [INFO] [Thread-3668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:44:27.448 [DEBUG] [Thread-3668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] client lang: <none>
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] server lang: <none>
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] kex follows: False
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] Compression: none
2025-12-25T02:44:27.449 [DEBUG] [Thread-3668] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:44:27.466 [DEBUG] [Thread-3668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:44:27.467 [DEBUG] [Thread-3668] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:44:27.468 [DEBUG] [Thread-3668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:44:27.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:44:27.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:44:27.470 [DEBUG] [Thread-3668] [transport.py] [_log()] userauth is OK
2025-12-25T02:44:27.470 [DEBUG] [Thread-3668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:44:27.470 [DEBUG] [Thread-3668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:44:27.470 [DEBUG] [Thread-3668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:44:27.470 [DEBUG] [Thread-3668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:44:27.504 [INFO] [Thread-3668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:44:27.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:44:28.147 [DEBUG] [Thread-3668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:44:28.147 [DEBUG] [Thread-3668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:44:28.148 [DEBUG] [Thread-3668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:44:28.189 [DEBUG] [Thread-3668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:44:28.189 [DEBUG] [Thread-3668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:44:28.193 [DEBUG] [Thread-3668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:44:28.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:44:28.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:44:28.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:44:28.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:44:28.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:44:28.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:44:28.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:44:28.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:44:28.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:44:28.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.030277 -999.00  +11.40  17.21     95  +10.60 1 3 1 3 1     0    0 0.77 -1.09 ----- 13.6 17.2 166.6 19.0 13.2 -5.9 13.0 -5.1 12.8 -5.7 13.2 -6.1
2025-12-25T02:44:28.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:44:28.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:44:28.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.030277
2025-12-25T02:44:28.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:44:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:44:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:44:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:44:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:44:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:44:21', tmtdew=0.38, humidity=97.33, cloud=0.0, wind=20.52, temperature=11.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:43:35.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:44:28.219 [DEBUG] [Thread-3668] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:44:28.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:44:28.306 [DEBUG] [Thread-3671] [transport.py] [_log()] starting thread (client mode): 0xb6b2a230
2025-12-25T02:44:28.306 [DEBUG] [Thread-3671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:44:28.321 [DEBUG] [Thread-3671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:44:28.321 [INFO] [Thread-3671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:44:28.328 [DEBUG] [Thread-3671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:44:28.329 [DEBUG] [Thread-3671] [transport.py] [_log()] client lang: <none>
2025-12-25T02:44:28.330 [DEBUG] [Thread-3671] [transport.py] [_log()] server lang: <none>
2025-12-25T02:44:28.330 [DEBUG] [Thread-3671] [transport.py] [_log()] kex follows: False
2025-12-25T02:44:28.330 [DEBUG] [Thread-3671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:44:28.330 [DEBUG] [Thread-3671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:44:28.330 [DEBUG] [Thread-3671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:44:28.330 [DEBUG] [Thread-3671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:44:28.330 [DEBUG] [Thread-3671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:44:28.330 [DEBUG] [Thread-3671] [transport.py] [_log()] Compression: none
2025-12-25T02:44:28.331 [DEBUG] [Thread-3671] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:44:28.393 [DEBUG] [Thread-3671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:44:28.393 [DEBUG] [Thread-3671] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:44:28.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:44:28.394 [DEBUG] [Thread-3671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:44:28.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:44:28.451 [DEBUG] [Thread-3671] [transport.py] [_log()] userauth is OK
2025-12-25T02:44:28.452 [DEBUG] [Thread-3671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:44:28.452 [DEBUG] [Thread-3671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:44:28.452 [DEBUG] [Thread-3671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:44:28.452 [DEBUG] [Thread-3671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:44:28.472 [INFO] [Thread-3671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:44:28.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:44:28.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:44:29.306 [DEBUG] [Thread-3671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:44:29.306 [DEBUG] [Thread-3671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:44:29.354 [DEBUG] [Thread-3671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:44:29.354 [DEBUG] [Thread-3671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:44:29.364 [DEBUG] [Thread-3671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:44:29.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:44:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:44:29.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:44:29.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:44:29.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:44:29.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:44:29.400 [DEBUG] [Thread-3671] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:44:29.457 [DEBUG] [Thread-3673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:44:30.645 [DEBUG] [Thread-3674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:44:45.700 [DEBUG] [Thread-3675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:44:45.718 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:44:45.719 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:44:59.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:44:59.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:44:59.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
2025-12-25T02:45:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 44, 53), 0.37, 97.38, 0.0, 21.6, 11.42, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:45:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:44:53
2025-12-25T02:45:00.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:45:00.439 [DEBUG] [Thread-3676] [transport.py] [_log()] starting thread (client mode): 0xb6b37340
2025-12-25T02:45:00.439 [DEBUG] [Thread-3676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:45:00.459 [DEBUG] [Thread-3676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:45:00.459 [INFO] [Thread-3676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:45:00.462 [DEBUG] [Thread-3676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:45:00.462 [DEBUG] [Thread-3676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:45:00.462 [DEBUG] [Thread-3676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:45:00.462 [DEBUG] [Thread-3676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] client lang: <none>
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] server lang: <none>
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] kex follows: False
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] Compression: none
2025-12-25T02:45:00.463 [DEBUG] [Thread-3676] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:45:00.477 [DEBUG] [Thread-3676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:45:00.477 [DEBUG] [Thread-3676] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:45:00.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:45:00.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:45:00.478 [DEBUG] [Thread-3676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:45:00.520 [DEBUG] [Thread-3676] [transport.py] [_log()] userauth is OK
2025-12-25T02:45:00.520 [DEBUG] [Thread-3676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:45:00.520 [DEBUG] [Thread-3676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:45:00.520 [DEBUG] [Thread-3676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:45:00.520 [DEBUG] [Thread-3676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:45:00.551 [INFO] [Thread-3676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:45:00.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:45:00.729 [DEBUG] [Thread-3678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:45:01.215 [DEBUG] [Thread-3676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:45:01.216 [DEBUG] [Thread-3676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:45:01.216 [DEBUG] [Thread-3676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:45:01.256 [DEBUG] [Thread-3676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:45:01.256 [DEBUG] [Thread-3676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:45:01.259 [DEBUG] [Thread-3676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:45:01.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:45:01.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:45:01.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:45:01.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:45:01.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:45:01.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:45:01.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:45:01.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:45:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:45:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.030971 -999.00  +11.40  16.54     95  +10.60 1 3 1 3 1     0    0 0.77 -0.75 ----- 11.2 16.5 152.2 19.5 13.2 -5.2 13.0 -4.0 12.8 -4.8 13.2 -4.5
2025-12-25T02:45:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:45:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:45:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.030971
2025-12-25T02:45:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:45:01.290 [DEBUG] [Thread-3676] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:45:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:45:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:45:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:45:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:45:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:44:53', tmtdew=0.37, humidity=97.38, cloud=0.0, wind=21.6, temperature=11.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:44:35.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:45:01.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:45:01.392 [DEBUG] [Thread-3680] [transport.py] [_log()] starting thread (client mode): 0xb6b28430
2025-12-25T02:45:01.393 [DEBUG] [Thread-3680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:45:01.407 [DEBUG] [Thread-3680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:45:01.407 [INFO] [Thread-3680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:45:01.414 [DEBUG] [Thread-3680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] client lang: <none>
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] server lang: <none>
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] kex follows: False
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] Compression: none
2025-12-25T02:45:01.415 [DEBUG] [Thread-3680] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:45:01.472 [DEBUG] [Thread-3680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:45:01.473 [DEBUG] [Thread-3680] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:45:01.473 [DEBUG] [Thread-3680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:45:01.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:45:01.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:45:01.532 [DEBUG] [Thread-3680] [transport.py] [_log()] userauth is OK
2025-12-25T02:45:01.532 [DEBUG] [Thread-3680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:45:01.532 [DEBUG] [Thread-3680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:45:01.532 [DEBUG] [Thread-3680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:45:01.532 [DEBUG] [Thread-3680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:45:01.550 [INFO] [Thread-3680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:45:01.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:45:01.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:45:02.397 [DEBUG] [Thread-3680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:45:02.398 [DEBUG] [Thread-3680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:45:02.447 [DEBUG] [Thread-3680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:45:02.448 [DEBUG] [Thread-3680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:45:02.461 [DEBUG] [Thread-3680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:45:02.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:45:02.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:45:02.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
2025-12-25T02:45:02.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:45:02.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:45:02.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:45:02.504 [DEBUG] [Thread-3680] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:45:15.764 [DEBUG] [Thread-3682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:45:29.513 [DEBUG] [Thread-3683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:45:30.825 [DEBUG] [Thread-3684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:45:32.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:45:32.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:45:32.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:45:33.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 45, 25), 0.37, 97.38, 0.0, 22.16, 11.44, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:45:33.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:45:25
2025-12-25T02:45:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:45:33.464 [DEBUG] [Thread-3685] [transport.py] [_log()] starting thread (client mode): 0xb6b34280
2025-12-25T02:45:33.464 [DEBUG] [Thread-3685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:45:33.481 [DEBUG] [Thread-3685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:45:33.482 [INFO] [Thread-3685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] client lang: <none>
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] server lang: <none>
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] kex follows: False
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] Compression: none
2025-12-25T02:45:33.485 [DEBUG] [Thread-3685] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:45:33.501 [DEBUG] [Thread-3685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:45:33.501 [DEBUG] [Thread-3685] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:45:33.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:45:33.502 [DEBUG] [Thread-3685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:45:33.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:45:33.504 [DEBUG] [Thread-3685] [transport.py] [_log()] userauth is OK
2025-12-25T02:45:33.504 [DEBUG] [Thread-3685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:45:33.505 [DEBUG] [Thread-3685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:45:33.505 [DEBUG] [Thread-3685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:45:33.505 [DEBUG] [Thread-3685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:45:33.529 [INFO] [Thread-3685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:45:33.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:45:34.168 [DEBUG] [Thread-3685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:45:34.168 [DEBUG] [Thread-3685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:45:34.168 [DEBUG] [Thread-3685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:45:34.208 [DEBUG] [Thread-3685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:45:34.208 [DEBUG] [Thread-3685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:45:34.211 [DEBUG] [Thread-3685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:45:34.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:45:34.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:45:34.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:45:34.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:45:34.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:45:34.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:45:34.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.031319 -999.00  +11.40  16.44     95  +10.60 1 3 1 3 1     0    0 0.80 -0.23 ----- 14.5 16.4 162.0 20.4 13.2 -4.2 13.1 -3.3 12.9 -4.0 13.3 -3.9
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.031319
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:45:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:45:25', tmtdew=0.37, humidity=97.38, cloud=0.0, wind=22.16, temperature=11.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:45:05.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:45:34.228 [DEBUG] [Thread-3685] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:45:34.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:45:34.313 [DEBUG] [Thread-3688] [transport.py] [_log()] starting thread (client mode): 0xb6b348e0
2025-12-25T02:45:34.313 [DEBUG] [Thread-3688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:45:34.329 [DEBUG] [Thread-3688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:45:34.329 [INFO] [Thread-3688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] client lang: <none>
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] server lang: <none>
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] kex follows: False
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] Compression: none
2025-12-25T02:45:34.336 [DEBUG] [Thread-3688] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:45:34.394 [DEBUG] [Thread-3688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:45:34.394 [DEBUG] [Thread-3688] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:45:34.395 [DEBUG] [Thread-3688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:45:34.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:45:34.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:45:34.449 [DEBUG] [Thread-3688] [transport.py] [_log()] userauth is OK
2025-12-25T02:45:34.449 [DEBUG] [Thread-3688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:45:34.449 [DEBUG] [Thread-3688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:45:34.449 [DEBUG] [Thread-3688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:45:34.449 [DEBUG] [Thread-3688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:45:34.463 [INFO] [Thread-3688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:45:34.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:45:34.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:45:35.307 [DEBUG] [Thread-3688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:45:35.307 [DEBUG] [Thread-3688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:45:35.355 [DEBUG] [Thread-3688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:45:35.355 [DEBUG] [Thread-3688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:45:35.363 [DEBUG] [Thread-3688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:45:35.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:45:35.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:45:35.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:45:35.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:45:35.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:45:35.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:45:35.395 [DEBUG] [Thread-3688] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:45:45.859 [DEBUG] [Thread-3690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:45:45.921 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:45:45.922 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:46:00.907 [DEBUG] [Thread-3691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:46:05.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:46:05.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:46:05.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:46:06.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 45, 57), 0.38, 97.33, 0.0, 19.0, 11.34, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:46:06.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:45:57
2025-12-25T02:46:06.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:46:06.386 [DEBUG] [Thread-3692] [transport.py] [_log()] starting thread (client mode): 0xb6b29300
2025-12-25T02:46:06.386 [DEBUG] [Thread-3692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:46:06.406 [DEBUG] [Thread-3692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:46:06.406 [INFO] [Thread-3692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:46:06.409 [DEBUG] [Thread-3692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:46:06.409 [DEBUG] [Thread-3692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:46:06.409 [DEBUG] [Thread-3692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:46:06.409 [DEBUG] [Thread-3692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:46:06.409 [DEBUG] [Thread-3692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] client lang: <none>
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] server lang: <none>
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] kex follows: False
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] Compression: none
2025-12-25T02:46:06.410 [DEBUG] [Thread-3692] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:46:06.427 [DEBUG] [Thread-3692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:46:06.427 [DEBUG] [Thread-3692] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:46:06.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:46:06.428 [DEBUG] [Thread-3692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:46:06.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:46:06.431 [DEBUG] [Thread-3692] [transport.py] [_log()] userauth is OK
2025-12-25T02:46:06.431 [DEBUG] [Thread-3692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:46:06.431 [DEBUG] [Thread-3692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:46:06.431 [DEBUG] [Thread-3692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:46:06.431 [DEBUG] [Thread-3692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:46:06.456 [INFO] [Thread-3692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:46:06.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:46:07.093 [DEBUG] [Thread-3692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:46:07.093 [DEBUG] [Thread-3692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:46:07.093 [DEBUG] [Thread-3692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:46:07.134 [DEBUG] [Thread-3692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:46:07.134 [DEBUG] [Thread-3692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:46:07.138 [DEBUG] [Thread-3692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:46:07.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:46:07.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:46:07.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:46:07.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:46:07.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:46:07.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:46:07.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:46:07.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:46:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:46:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.031666 -999.00  +11.40  14.94     95  +10.60 1 3 1 3 1     0    0 0.81 0.09 ----- 15.8 14.9 142.4 23.6 13.2 -4.3 13.1 -4.1 12.9 -4.0 13.3 -4.4
2025-12-25T02:46:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:46:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:46:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.031666
2025-12-25T02:46:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:46:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:46:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:46:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:46:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:46:07.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:45:57', tmtdew=0.38, humidity=97.33, cloud=0.0, wind=19.0, temperature=11.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:45:35.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:46:07.166 [DEBUG] [Thread-3692] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:46:07.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:46:07.258 [DEBUG] [Thread-3695] [transport.py] [_log()] starting thread (client mode): 0xb95f01c0
2025-12-25T02:46:07.258 [DEBUG] [Thread-3695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:46:07.273 [DEBUG] [Thread-3695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:46:07.273 [INFO] [Thread-3695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:46:07.280 [DEBUG] [Thread-3695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:46:07.280 [DEBUG] [Thread-3695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] client lang: <none>
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] server lang: <none>
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] kex follows: False
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] Compression: none
2025-12-25T02:46:07.281 [DEBUG] [Thread-3695] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:46:07.344 [DEBUG] [Thread-3695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:46:07.344 [DEBUG] [Thread-3695] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:46:07.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:46:07.346 [DEBUG] [Thread-3695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:46:07.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:46:07.403 [DEBUG] [Thread-3695] [transport.py] [_log()] userauth is OK
2025-12-25T02:46:07.404 [DEBUG] [Thread-3695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:46:07.404 [DEBUG] [Thread-3695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:46:07.404 [DEBUG] [Thread-3695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:46:07.404 [DEBUG] [Thread-3695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:46:07.425 [INFO] [Thread-3695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:46:07.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:46:07.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:46:08.270 [DEBUG] [Thread-3695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:46:08.270 [DEBUG] [Thread-3695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:46:08.318 [DEBUG] [Thread-3695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:46:08.318 [DEBUG] [Thread-3695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:46:08.327 [DEBUG] [Thread-3695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:46:08.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:46:08.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:46:08.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:46:08.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:46:08.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:46:08.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:46:08.364 [DEBUG] [Thread-3695] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:46:15.942 [DEBUG] [Thread-3697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:46:29.571 [DEBUG] [Thread-3698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:46:30.977 [DEBUG] [Thread-3699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:46:38.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:46:38.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:46:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:46:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 46, 29), 0.37, 97.36, 0.0, 19.94, 11.4, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:46:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:46:29
2025-12-25T02:46:39.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:46:39.330 [DEBUG] [Thread-3700] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf40
2025-12-25T02:46:39.331 [DEBUG] [Thread-3700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:46:39.350 [DEBUG] [Thread-3700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:46:39.350 [INFO] [Thread-3700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:46:39.353 [DEBUG] [Thread-3700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:46:39.353 [DEBUG] [Thread-3700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:46:39.353 [DEBUG] [Thread-3700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:46:39.353 [DEBUG] [Thread-3700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:46:39.353 [DEBUG] [Thread-3700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] client lang: <none>
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] server lang: <none>
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] kex follows: False
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:46:39.354 [DEBUG] [Thread-3700] [transport.py] [_log()] Compression: none
2025-12-25T02:46:39.355 [DEBUG] [Thread-3700] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:46:39.373 [DEBUG] [Thread-3700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:46:39.373 [DEBUG] [Thread-3700] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:46:39.374 [DEBUG] [Thread-3700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:46:39.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:46:39.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:46:39.376 [DEBUG] [Thread-3700] [transport.py] [_log()] userauth is OK
2025-12-25T02:46:39.376 [DEBUG] [Thread-3700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:46:39.376 [DEBUG] [Thread-3700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:46:39.376 [DEBUG] [Thread-3700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:46:39.376 [DEBUG] [Thread-3700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:46:39.400 [INFO] [Thread-3700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:46:39.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:46:40.045 [DEBUG] [Thread-3700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:46:40.045 [DEBUG] [Thread-3700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:46:40.046 [DEBUG] [Thread-3700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:46:40.086 [DEBUG] [Thread-3700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:46:40.086 [DEBUG] [Thread-3700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:46:40.089 [DEBUG] [Thread-3700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:46:40.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:46:40.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:46:40.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:46:40.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:46:40.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:46:40.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:46:40.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:46:40.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:46:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:46:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.032013 -999.00  +11.40  13.41     95  +10.60 1 3 1 3 1     0    0 0.80 0.15 ----- 18.9 13.4 163.6 17.1 13.2 -4.9 13.1 -3.4 12.9 -4.8 13.2 -3.8
2025-12-25T02:46:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:46:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:46:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.032013
2025-12-25T02:46:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:46:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:46:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:46:40.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:46:40.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:46:40.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:46:29', tmtdew=0.37, humidity=97.36, cloud=0.0, wind=19.94, temperature=11.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:46:05.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:46:40.116 [DEBUG] [Thread-3700] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:46:40.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:46:40.212 [DEBUG] [Thread-3703] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae30
2025-12-25T02:46:40.213 [DEBUG] [Thread-3703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:46:40.226 [DEBUG] [Thread-3703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:46:40.226 [INFO] [Thread-3703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:46:40.233 [DEBUG] [Thread-3703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:46:40.233 [DEBUG] [Thread-3703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:46:40.233 [DEBUG] [Thread-3703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] client lang: <none>
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] server lang: <none>
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] kex follows: False
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:46:40.234 [DEBUG] [Thread-3703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:46:40.235 [DEBUG] [Thread-3703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:46:40.235 [DEBUG] [Thread-3703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:46:40.235 [DEBUG] [Thread-3703] [transport.py] [_log()] Compression: none
2025-12-25T02:46:40.235 [DEBUG] [Thread-3703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:46:40.292 [DEBUG] [Thread-3703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:46:40.293 [DEBUG] [Thread-3703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:46:40.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:46:40.294 [DEBUG] [Thread-3703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:46:40.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:46:40.349 [DEBUG] [Thread-3703] [transport.py] [_log()] userauth is OK
2025-12-25T02:46:40.349 [DEBUG] [Thread-3703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:46:40.349 [DEBUG] [Thread-3703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:46:40.349 [DEBUG] [Thread-3703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:46:40.350 [DEBUG] [Thread-3703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:46:40.369 [INFO] [Thread-3703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:46:40.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:46:40.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:46:41.188 [DEBUG] [Thread-3703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:46:41.188 [DEBUG] [Thread-3703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:46:41.236 [DEBUG] [Thread-3703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:46:41.236 [DEBUG] [Thread-3703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:46:41.246 [DEBUG] [Thread-3703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:46:41.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:46:41.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:46:41.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
2025-12-25T02:46:41.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:46:41.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:46:41.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:46:41.282 [DEBUG] [Thread-3703] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:46:46.011 [DEBUG] [Thread-3705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:46:46.127 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:46:46.128 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:47:01.067 [DEBUG] [Thread-3706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:47:11.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:47:11.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:47:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:47:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 47, 1), 0.38, 97.33, 0.0, 21.33, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:47:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:47:01
2025-12-25T02:47:12.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:47:12.243 [DEBUG] [Thread-3707] [transport.py] [_log()] starting thread (client mode): 0xb6b37250
2025-12-25T02:47:12.243 [DEBUG] [Thread-3707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:47:12.262 [DEBUG] [Thread-3707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:47:12.262 [INFO] [Thread-3707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] client lang: <none>
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] server lang: <none>
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] kex follows: False
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] Compression: none
2025-12-25T02:47:12.264 [DEBUG] [Thread-3707] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:47:12.282 [DEBUG] [Thread-3707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:47:12.283 [DEBUG] [Thread-3707] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:47:12.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:47:12.284 [DEBUG] [Thread-3707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:47:12.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:47:12.286 [DEBUG] [Thread-3707] [transport.py] [_log()] userauth is OK
2025-12-25T02:47:12.286 [DEBUG] [Thread-3707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:47:12.286 [DEBUG] [Thread-3707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:47:12.286 [DEBUG] [Thread-3707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:47:12.286 [DEBUG] [Thread-3707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:47:12.311 [INFO] [Thread-3707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:47:12.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:47:12.985 [DEBUG] [Thread-3707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:47:12.986 [DEBUG] [Thread-3707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:47:12.986 [DEBUG] [Thread-3707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:47:13.027 [DEBUG] [Thread-3707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:47:13.027 [DEBUG] [Thread-3707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:47:13.031 [DEBUG] [Thread-3707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:47:13.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:47:13.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:47:13.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:47:13.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:47:13.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:47:13.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:47:13.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:47:13.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:47:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:47:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.032360 -999.00  +11.40  17.19     95  +10.60 1 3 1 3 1     0    0 0.81 0.22 ----- 18.2 17.2 162.7 22.2 13.2 -4.2 13.1 -3.6 12.9 -3.8 13.3 -4.0
2025-12-25T02:47:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:47:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:47:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.032360
2025-12-25T02:47:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:47:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:47:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:47:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:47:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:47:13.059 [DEBUG] [Thread-3707] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:47:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:47:01', tmtdew=0.38, humidity=97.33, cloud=0.0, wind=21.33, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:46:35.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.399749999999999, nan, 2.906250000000001, nan, 2.5385, nan, nan, nan, nan, nan, 3.1072499999999996, nan, nan, 2.9652499999999993, nan, nan, nan, nan, nan, nan, nan, 2.0997499999999985, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:47:13.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:47:13.162 [DEBUG] [Thread-3710] [transport.py] [_log()] starting thread (client mode): 0xb6b342e0
2025-12-25T02:47:13.162 [DEBUG] [Thread-3710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:47:13.177 [DEBUG] [Thread-3710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:47:13.177 [INFO] [Thread-3710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:47:13.185 [DEBUG] [Thread-3710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:47:13.185 [DEBUG] [Thread-3710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:47:13.185 [DEBUG] [Thread-3710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:47:13.185 [DEBUG] [Thread-3710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:47:13.186 [DEBUG] [Thread-3710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:47:13.186 [DEBUG] [Thread-3710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:47:13.186 [DEBUG] [Thread-3710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:47:13.186 [DEBUG] [Thread-3710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:47:13.186 [DEBUG] [Thread-3710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:47:13.186 [DEBUG] [Thread-3710] [transport.py] [_log()] client lang: <none>
2025-12-25T02:47:13.186 [DEBUG] [Thread-3710] [transport.py] [_log()] server lang: <none>
2025-12-25T02:47:13.186 [DEBUG] [Thread-3710] [transport.py] [_log()] kex follows: False
2025-12-25T02:47:13.187 [DEBUG] [Thread-3710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:47:13.187 [DEBUG] [Thread-3710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:47:13.187 [DEBUG] [Thread-3710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:47:13.187 [DEBUG] [Thread-3710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:47:13.187 [DEBUG] [Thread-3710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:47:13.187 [DEBUG] [Thread-3710] [transport.py] [_log()] Compression: none
2025-12-25T02:47:13.187 [DEBUG] [Thread-3710] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:47:13.246 [DEBUG] [Thread-3710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:47:13.246 [DEBUG] [Thread-3710] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:47:13.247 [DEBUG] [Thread-3710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:47:13.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:47:13.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:47:13.301 [DEBUG] [Thread-3710] [transport.py] [_log()] userauth is OK
2025-12-25T02:47:13.302 [DEBUG] [Thread-3710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:47:13.302 [DEBUG] [Thread-3710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:47:13.302 [DEBUG] [Thread-3710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:47:13.302 [DEBUG] [Thread-3710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:47:13.321 [INFO] [Thread-3710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:47:13.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:47:13.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:47:14.147 [DEBUG] [Thread-3710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:47:14.147 [DEBUG] [Thread-3710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:47:14.195 [DEBUG] [Thread-3710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:47:14.195 [DEBUG] [Thread-3710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:47:14.204 [DEBUG] [Thread-3710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:47:14.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:47:14.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:47:14.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:47:14.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:47:14.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:47:14.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:47:14.240 [DEBUG] [Thread-3710] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:47:16.103 [DEBUG] [Thread-3712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:47:29.642 [DEBUG] [Thread-3713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:47:31.161 [DEBUG] [Thread-3714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:47:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:47:44.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:47:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:47:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 47, 33), 0.37, 97.38, 0.0, 20.03, 11.49, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:47:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:47:33
2025-12-25T02:47:45.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:47:45.244 [DEBUG] [Thread-3715] [transport.py] [_log()] starting thread (client mode): 0xb6b28b80
2025-12-25T02:47:45.244 [DEBUG] [Thread-3715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:47:45.265 [DEBUG] [Thread-3715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:47:45.265 [INFO] [Thread-3715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:47:45.268 [DEBUG] [Thread-3715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:47:45.268 [DEBUG] [Thread-3715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:47:45.268 [DEBUG] [Thread-3715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:47:45.268 [DEBUG] [Thread-3715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:47:45.268 [DEBUG] [Thread-3715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:47:45.268 [DEBUG] [Thread-3715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:47:45.268 [DEBUG] [Thread-3715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] client lang: <none>
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] server lang: <none>
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] kex follows: False
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] Compression: none
2025-12-25T02:47:45.269 [DEBUG] [Thread-3715] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:47:45.289 [DEBUG] [Thread-3715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:47:45.289 [DEBUG] [Thread-3715] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:47:45.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:47:45.290 [DEBUG] [Thread-3715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:47:45.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:47:45.293 [DEBUG] [Thread-3715] [transport.py] [_log()] userauth is OK
2025-12-25T02:47:45.293 [DEBUG] [Thread-3715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:47:45.293 [DEBUG] [Thread-3715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:47:45.293 [DEBUG] [Thread-3715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:47:45.293 [DEBUG] [Thread-3715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:47:45.319 [INFO] [Thread-3715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:47:45.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:47:45.938 [DEBUG] [Thread-3715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:47:45.939 [DEBUG] [Thread-3715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:47:45.940 [DEBUG] [Thread-3715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:47:45.979 [DEBUG] [Thread-3715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:47:45.980 [DEBUG] [Thread-3715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:47:45.983 [DEBUG] [Thread-3715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:47:45.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:47:45.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:47:45.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:47:45.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:47:46.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:47:46.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:47:46.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:47:46.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:47:46.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:47:46.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.032708 -999.00  +11.40  14.21     95  +10.60 1 3 1 3 1     0    0 0.81 0.28 ----- 15.6 14.2 162.2 18.5 13.2 -4.3 13.1 -4.5 12.9 -4.0 13.3 -4.6
2025-12-25T02:47:46.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:47:46.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:47:46.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.032708
2025-12-25T02:47:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:47:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:47:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:47:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:47:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:47:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:47:33', tmtdew=0.37, humidity=97.38, cloud=0.0, wind=20.03, temperature=11.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:47:05.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:47:46.010 [DEBUG] [Thread-3715] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:47:46.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:47:46.104 [DEBUG] [Thread-3718] [transport.py] [_log()] starting thread (client mode): 0xb95f1450
2025-12-25T02:47:46.105 [DEBUG] [Thread-3718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:47:46.119 [DEBUG] [Thread-3718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:47:46.119 [INFO] [Thread-3718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:47:46.126 [DEBUG] [Thread-3718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] client lang: <none>
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] server lang: <none>
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] kex follows: False
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] Compression: none
2025-12-25T02:47:46.127 [DEBUG] [Thread-3718] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:47:46.187 [DEBUG] [Thread-3718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:47:46.187 [DEBUG] [Thread-3718] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:47:46.188 [DEBUG] [Thread-3718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:47:46.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:47:46.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:47:46.190 [DEBUG] [Thread-3720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:47:46.242 [DEBUG] [Thread-3718] [transport.py] [_log()] userauth is OK
2025-12-25T02:47:46.242 [DEBUG] [Thread-3718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:47:46.243 [DEBUG] [Thread-3718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:47:46.243 [DEBUG] [Thread-3718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:47:46.243 [DEBUG] [Thread-3718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:47:46.266 [INFO] [Thread-3718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:47:46.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:47:46.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:47:46.330 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:47:46.332 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:47:47.090 [DEBUG] [Thread-3718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:47:47.090 [DEBUG] [Thread-3718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:47:47.138 [DEBUG] [Thread-3718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:47:47.138 [DEBUG] [Thread-3718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:47:47.147 [DEBUG] [Thread-3718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:47:47.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:47:47.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:47:47.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:47:47.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:47:47.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:47:47.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:47:47.180 [DEBUG] [Thread-3718] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:48:01.243 [DEBUG] [Thread-3721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:48:16.275 [DEBUG] [Thread-3722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:48:17.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:48:17.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:48:17.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:48:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 48, 5), 0.37, 97.38, 0.0, 21.21, 11.45, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:48:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:48:05
2025-12-25T02:48:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:48:18.173 [DEBUG] [Thread-3723] [transport.py] [_log()] starting thread (client mode): 0xb95f0a30
2025-12-25T02:48:18.173 [DEBUG] [Thread-3723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:48:18.194 [DEBUG] [Thread-3723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:48:18.194 [INFO] [Thread-3723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:48:18.197 [DEBUG] [Thread-3723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:48:18.197 [DEBUG] [Thread-3723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:48:18.197 [DEBUG] [Thread-3723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] client lang: <none>
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] server lang: <none>
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] kex follows: False
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] Compression: none
2025-12-25T02:48:18.198 [DEBUG] [Thread-3723] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:48:18.215 [DEBUG] [Thread-3723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:48:18.216 [DEBUG] [Thread-3723] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:48:18.216 [DEBUG] [Thread-3723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:48:18.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:48:18.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:48:18.218 [DEBUG] [Thread-3723] [transport.py] [_log()] userauth is OK
2025-12-25T02:48:18.219 [DEBUG] [Thread-3723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:48:18.219 [DEBUG] [Thread-3723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:48:18.219 [DEBUG] [Thread-3723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:48:18.219 [DEBUG] [Thread-3723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:48:18.243 [INFO] [Thread-3723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:48:18.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:48:18.868 [DEBUG] [Thread-3723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:48:18.868 [DEBUG] [Thread-3723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:48:18.869 [DEBUG] [Thread-3723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:48:18.909 [DEBUG] [Thread-3723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:48:18.909 [DEBUG] [Thread-3723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:48:18.912 [DEBUG] [Thread-3723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:48:18.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:48:18.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:48:18.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:48:18.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:48:18.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:48:18.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:48:18.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:48:18.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:48:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:48:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.033055 -999.00  +11.40  16.86     95  +10.60 1 3 1 3 1     0    0 0.80 0.33 ----- 16.7 16.9 174.0 22.1 13.2 -5.8 13.1 -6.1 12.9 -5.5 13.3 -5.8
2025-12-25T02:48:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:48:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:48:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.033055
2025-12-25T02:48:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:48:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:48:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:48:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:48:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:48:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:48:05', tmtdew=0.37, humidity=97.38, cloud=0.0, wind=21.21, temperature=11.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:47:35.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:48:18.940 [DEBUG] [Thread-3723] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:48:19.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:48:19.036 [DEBUG] [Thread-3726] [transport.py] [_log()] starting thread (client mode): 0xb6b28550
2025-12-25T02:48:19.036 [DEBUG] [Thread-3726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:48:19.051 [DEBUG] [Thread-3726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:48:19.051 [INFO] [Thread-3726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:48:19.058 [DEBUG] [Thread-3726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:48:19.059 [DEBUG] [Thread-3726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:48:19.059 [DEBUG] [Thread-3726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:48:19.059 [DEBUG] [Thread-3726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:48:19.059 [DEBUG] [Thread-3726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:48:19.059 [DEBUG] [Thread-3726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:48:19.059 [DEBUG] [Thread-3726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:48:19.059 [DEBUG] [Thread-3726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:48:19.060 [DEBUG] [Thread-3726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:48:19.060 [DEBUG] [Thread-3726] [transport.py] [_log()] client lang: <none>
2025-12-25T02:48:19.060 [DEBUG] [Thread-3726] [transport.py] [_log()] server lang: <none>
2025-12-25T02:48:19.060 [DEBUG] [Thread-3726] [transport.py] [_log()] kex follows: False
2025-12-25T02:48:19.060 [DEBUG] [Thread-3726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:48:19.060 [DEBUG] [Thread-3726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:48:19.060 [DEBUG] [Thread-3726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:48:19.060 [DEBUG] [Thread-3726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:48:19.061 [DEBUG] [Thread-3726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:48:19.061 [DEBUG] [Thread-3726] [transport.py] [_log()] Compression: none
2025-12-25T02:48:19.061 [DEBUG] [Thread-3726] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:48:19.116 [DEBUG] [Thread-3726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:48:19.117 [DEBUG] [Thread-3726] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:48:19.118 [DEBUG] [Thread-3726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:48:19.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:48:19.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:48:19.172 [DEBUG] [Thread-3726] [transport.py] [_log()] userauth is OK
2025-12-25T02:48:19.172 [DEBUG] [Thread-3726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:48:19.172 [DEBUG] [Thread-3726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:48:19.172 [DEBUG] [Thread-3726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:48:19.173 [DEBUG] [Thread-3726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:48:19.196 [INFO] [Thread-3726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:48:19.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:48:19.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:48:20.039 [DEBUG] [Thread-3726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:48:20.039 [DEBUG] [Thread-3726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:48:20.087 [DEBUG] [Thread-3726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:48:20.087 [DEBUG] [Thread-3726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:48:20.096 [DEBUG] [Thread-3726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:48:20.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:48: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')
2025-12-25T02:48:20.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
2025-12-25T02:48:20.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:48:20.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:48:20.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:48:20.130 [DEBUG] [Thread-3726] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:48:29.720 [DEBUG] [Thread-3728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:48:31.314 [DEBUG] [Thread-3729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:48:46.362 [DEBUG] [Thread-3730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:48:46.536 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:48:46.537 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:48:50.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:48:50.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:48:50.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:48:50.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 48, 38), 0.37, 97.38, 0.0, 20.93, 11.45, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:48:50.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:48:38
2025-12-25T02:48:51.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:48:51.178 [DEBUG] [Thread-3731] [transport.py] [_log()] starting thread (client mode): 0xb6b281f0
2025-12-25T02:48:51.178 [DEBUG] [Thread-3731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:48:51.202 [DEBUG] [Thread-3731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:48:51.202 [INFO] [Thread-3731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:48:51.206 [DEBUG] [Thread-3731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:48:51.206 [DEBUG] [Thread-3731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:48:51.206 [DEBUG] [Thread-3731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:48:51.206 [DEBUG] [Thread-3731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] client lang: <none>
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] server lang: <none>
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] kex follows: False
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] Compression: none
2025-12-25T02:48:51.207 [DEBUG] [Thread-3731] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:48:51.221 [DEBUG] [Thread-3731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:48:51.221 [DEBUG] [Thread-3731] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:48:51.221 [DEBUG] [Thread-3731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:48:51.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:48:51.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:48:51.222 [DEBUG] [Thread-3731] [transport.py] [_log()] userauth is OK
2025-12-25T02:48:51.222 [DEBUG] [Thread-3731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:48:51.222 [DEBUG] [Thread-3731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:48:51.222 [DEBUG] [Thread-3731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:48:51.222 [DEBUG] [Thread-3731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:48:51.237 [INFO] [Thread-3731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:48:51.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:48:51.843 [DEBUG] [Thread-3731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:48:51.843 [DEBUG] [Thread-3731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:48:51.843 [DEBUG] [Thread-3731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:48:51.884 [DEBUG] [Thread-3731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:48:51.884 [DEBUG] [Thread-3731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:48:51.887 [DEBUG] [Thread-3731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:48:51.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:48:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:48:51.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:48:51.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:48:51.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:48:51.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:48:51.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:48:51.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:48:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:48:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.033749 -999.00  +11.40  17.44     95  +10.60 1 3 1 3 1     0    0 0.81 0.77 Z..S. 16.4 17.4 162.0 22.0 13.3 -6.7 13.1 -7.9 12.9 -6.7 13.3 -7.5
2025-12-25T02:48:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:48:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:48:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.033749
2025-12-25T02:48:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:48:51.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:48:51.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:48:51.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:48:51.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:48:51.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:48:38', tmtdew=0.37, humidity=97.38, cloud=0.0, wind=20.93, temperature=11.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:48:35.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:48:51.904 [DEBUG] [Thread-3731] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:48:51.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:48:51.988 [DEBUG] [Thread-3734] [transport.py] [_log()] starting thread (client mode): 0xb95f13c0
2025-12-25T02:48:51.988 [DEBUG] [Thread-3734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:48:52.002 [DEBUG] [Thread-3734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:48:52.002 [INFO] [Thread-3734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] client lang: <none>
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] server lang: <none>
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] kex follows: False
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] Compression: none
2025-12-25T02:48:52.010 [DEBUG] [Thread-3734] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:48:52.067 [DEBUG] [Thread-3734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:48:52.068 [DEBUG] [Thread-3734] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:48:52.068 [DEBUG] [Thread-3734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:48:52.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:48:52.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:48:52.124 [DEBUG] [Thread-3734] [transport.py] [_log()] userauth is OK
2025-12-25T02:48:52.124 [DEBUG] [Thread-3734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:48:52.124 [DEBUG] [Thread-3734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:48:52.124 [DEBUG] [Thread-3734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:48:52.124 [DEBUG] [Thread-3734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:48:52.142 [INFO] [Thread-3734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:48:52.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:48:52.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:48:52.991 [DEBUG] [Thread-3734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:48:52.991 [DEBUG] [Thread-3734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:48:53.039 [DEBUG] [Thread-3734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:48:53.040 [DEBUG] [Thread-3734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:48:53.048 [DEBUG] [Thread-3734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:48:53.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:48:53.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:48:53.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:48:53.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:48:53.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:48:53.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:48:53.080 [DEBUG] [Thread-3734] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:49:01.399 [DEBUG] [Thread-3736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:49:16.449 [DEBUG] [Thread-3737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:49:23.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:49:23.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:49:23.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:49:23.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 49, 10), 0.37, 97.4, 0.0, 21.07, 11.44, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:49:23.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:49:10
2025-12-25T02:49:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:49:24.051 [DEBUG] [Thread-3738] [transport.py] [_log()] starting thread (client mode): 0xb95f1a50
2025-12-25T02:49:24.051 [DEBUG] [Thread-3738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:49:24.070 [DEBUG] [Thread-3738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:49:24.071 [INFO] [Thread-3738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] client lang: <none>
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] server lang: <none>
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] kex follows: False
2025-12-25T02:49:24.074 [DEBUG] [Thread-3738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:49:24.075 [DEBUG] [Thread-3738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:49:24.075 [DEBUG] [Thread-3738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:49:24.075 [DEBUG] [Thread-3738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:49:24.075 [DEBUG] [Thread-3738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:49:24.075 [DEBUG] [Thread-3738] [transport.py] [_log()] Compression: none
2025-12-25T02:49:24.075 [DEBUG] [Thread-3738] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:49:24.093 [DEBUG] [Thread-3738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:49:24.093 [DEBUG] [Thread-3738] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:49:24.094 [DEBUG] [Thread-3738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:49:24.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:49:24.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:49:24.096 [DEBUG] [Thread-3738] [transport.py] [_log()] userauth is OK
2025-12-25T02:49:24.096 [DEBUG] [Thread-3738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:49:24.096 [DEBUG] [Thread-3738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:49:24.096 [DEBUG] [Thread-3738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:49:24.096 [DEBUG] [Thread-3738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:49:24.131 [INFO] [Thread-3738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:49:24.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:49:24.763 [DEBUG] [Thread-3738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:49:24.763 [DEBUG] [Thread-3738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:49:24.764 [DEBUG] [Thread-3738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:49:24.805 [DEBUG] [Thread-3738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:49:24.805 [DEBUG] [Thread-3738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:49:24.807 [DEBUG] [Thread-3738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:49:24.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:49:24.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:49:24.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:49:24.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:49:24.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:49:24.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:49:24.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:49:24.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:49:24.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:49:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.034097 -999.00  +11.40  12.12     95  +10.60 1 3 1 3 1     0    0 0.80 0.65 Z..Sw 14.9 12.1 154.6 20.8 13.2 -8.4 13.1 -5.1 12.9 -8.6 13.2 -5.4
2025-12-25T02:49:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:49:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:49:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.034097
2025-12-25T02:49:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:49:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:49:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:49:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:49:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:49:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:49:10', tmtdew=0.37, humidity=97.4, cloud=0.0, wind=21.07, temperature=11.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:49:05.981', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:49:24.829 [DEBUG] [Thread-3738] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:49:24.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:49:24.921 [DEBUG] [Thread-3741] [transport.py] [_log()] starting thread (client mode): 0xb6b20c10
2025-12-25T02:49:24.921 [DEBUG] [Thread-3741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:49:24.935 [DEBUG] [Thread-3741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:49:24.935 [INFO] [Thread-3741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] client lang: <none>
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] server lang: <none>
2025-12-25T02:49:24.943 [DEBUG] [Thread-3741] [transport.py] [_log()] kex follows: False
2025-12-25T02:49:24.944 [DEBUG] [Thread-3741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:49:24.944 [DEBUG] [Thread-3741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:49:24.944 [DEBUG] [Thread-3741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:49:24.944 [DEBUG] [Thread-3741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:49:24.944 [DEBUG] [Thread-3741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:49:24.944 [DEBUG] [Thread-3741] [transport.py] [_log()] Compression: none
2025-12-25T02:49:24.944 [DEBUG] [Thread-3741] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:49:25.001 [DEBUG] [Thread-3741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:49:25.002 [DEBUG] [Thread-3741] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:49:25.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:49:25.003 [DEBUG] [Thread-3741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:49:25.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:49:25.057 [DEBUG] [Thread-3741] [transport.py] [_log()] userauth is OK
2025-12-25T02:49:25.058 [DEBUG] [Thread-3741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:49:25.058 [DEBUG] [Thread-3741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:49:25.058 [DEBUG] [Thread-3741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:49:25.058 [DEBUG] [Thread-3741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:49:25.077 [INFO] [Thread-3741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:49:25.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:49:25.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:49:25.928 [DEBUG] [Thread-3741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:49:25.928 [DEBUG] [Thread-3741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:49:25.976 [DEBUG] [Thread-3741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:49:25.976 [DEBUG] [Thread-3741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:49:25.985 [DEBUG] [Thread-3741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:49:25.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:49:25.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:49:26.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:49:26.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:49:26.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:49:26.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:49:26.018 [DEBUG] [Thread-3741] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:49:29.773 [DEBUG] [Thread-3743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:49:31.483 [DEBUG] [Thread-3744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:49:46.522 [DEBUG] [Thread-3745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:49:46.738 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:49:46.739 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:49:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:49:56.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:49:56.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:49:56.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 49, 42), 0.38, 97.35, 0.0, 21.3, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:49:56.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:49:42
2025-12-25T02:49:56.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:49:57.007 [DEBUG] [Thread-3746] [transport.py] [_log()] starting thread (client mode): 0xb6b2b700
2025-12-25T02:49:57.007 [DEBUG] [Thread-3746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:49:57.027 [DEBUG] [Thread-3746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:49:57.027 [INFO] [Thread-3746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] client lang: <none>
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] server lang: <none>
2025-12-25T02:49:57.031 [DEBUG] [Thread-3746] [transport.py] [_log()] kex follows: False
2025-12-25T02:49:57.032 [DEBUG] [Thread-3746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:49:57.032 [DEBUG] [Thread-3746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:49:57.032 [DEBUG] [Thread-3746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:49:57.032 [DEBUG] [Thread-3746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:49:57.032 [DEBUG] [Thread-3746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:49:57.032 [DEBUG] [Thread-3746] [transport.py] [_log()] Compression: none
2025-12-25T02:49:57.032 [DEBUG] [Thread-3746] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:49:57.049 [DEBUG] [Thread-3746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:49:57.050 [DEBUG] [Thread-3746] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:49:57.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:49:57.051 [DEBUG] [Thread-3746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:49:57.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:49:57.093 [DEBUG] [Thread-3746] [transport.py] [_log()] userauth is OK
2025-12-25T02:49:57.094 [DEBUG] [Thread-3746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:49:57.094 [DEBUG] [Thread-3746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:49:57.094 [DEBUG] [Thread-3746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:49:57.094 [DEBUG] [Thread-3746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:49:57.115 [INFO] [Thread-3746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:49:57.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:49:57.775 [DEBUG] [Thread-3746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:49:57.775 [DEBUG] [Thread-3746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:49:57.775 [DEBUG] [Thread-3746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:49:57.816 [DEBUG] [Thread-3746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:49:57.816 [DEBUG] [Thread-3746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:49:57.820 [DEBUG] [Thread-3746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:49:57.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:49:57.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:49:57.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:49:57.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:49:57.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:49:57.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:49:57.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:49:57.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:49:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:49:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.034443 -999.00  +11.40  14.62     95  +10.60 1 3 1 3 1     0    0 0.82 0.44 Z..Sw 20.6 14.6 163.8 19.3 13.2 -5.0 13.1 -4.1 12.9 -4.9 13.3 -4.3
2025-12-25T02:49:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:49:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:49:57.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.034443
2025-12-25T02:49:57.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:49:57.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:49:57.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:49:57.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:49:57.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:49:57.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:49:42', tmtdew=0.38, humidity=97.35, cloud=0.0, wind=21.3, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:49:35.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:49:57.848 [DEBUG] [Thread-3746] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:49:57.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:49:57.945 [DEBUG] [Thread-3749] [transport.py] [_log()] starting thread (client mode): 0xb6b351b0
2025-12-25T02:49:57.946 [DEBUG] [Thread-3749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:49:57.960 [DEBUG] [Thread-3749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:49:57.960 [INFO] [Thread-3749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:49:57.968 [DEBUG] [Thread-3749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:49:57.968 [DEBUG] [Thread-3749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:49:57.968 [DEBUG] [Thread-3749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:49:57.968 [DEBUG] [Thread-3749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:49:57.968 [DEBUG] [Thread-3749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:49:57.968 [DEBUG] [Thread-3749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] client lang: <none>
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] server lang: <none>
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] kex follows: False
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] Compression: none
2025-12-25T02:49:57.969 [DEBUG] [Thread-3749] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:49:58.026 [DEBUG] [Thread-3749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:49:58.027 [DEBUG] [Thread-3749] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:49:58.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:49:58.028 [DEBUG] [Thread-3749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:49:58.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:49:58.082 [DEBUG] [Thread-3749] [transport.py] [_log()] userauth is OK
2025-12-25T02:49:58.082 [DEBUG] [Thread-3749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:49:58.082 [DEBUG] [Thread-3749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:49:58.082 [DEBUG] [Thread-3749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:49:58.082 [DEBUG] [Thread-3749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:49:58.105 [INFO] [Thread-3749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:49:58.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:49:58.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:49:58.957 [DEBUG] [Thread-3749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:49:58.957 [DEBUG] [Thread-3749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:49:59.005 [DEBUG] [Thread-3749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:49:59.005 [DEBUG] [Thread-3749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:49:59.015 [DEBUG] [Thread-3749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:49:59.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:49:59.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')
2025-12-25T02:49:59.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:49:59.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:49:59.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:49:59.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:49:59.051 [DEBUG] [Thread-3749] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:50:01.557 [DEBUG] [Thread-3751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:50:16.614 [DEBUG] [Thread-3752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:50:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:50:29.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:50:29.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:50:29.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 50, 14), 0.38, 97.33, 0.0, 20.5, 11.3, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:50:29.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:50:14
2025-12-25T02:50:29.854 [DEBUG] [Thread-3753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:50:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:50:30.035 [DEBUG] [Thread-3754] [transport.py] [_log()] starting thread (client mode): 0xb6b372e0
2025-12-25T02:50:30.035 [DEBUG] [Thread-3754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:50:30.053 [DEBUG] [Thread-3754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:50:30.053 [INFO] [Thread-3754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:50:30.057 [DEBUG] [Thread-3754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:50:30.057 [DEBUG] [Thread-3754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:50:30.057 [DEBUG] [Thread-3754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:50:30.057 [DEBUG] [Thread-3754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:50:30.057 [DEBUG] [Thread-3754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:50:30.057 [DEBUG] [Thread-3754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:50:30.057 [DEBUG] [Thread-3754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:50:30.057 [DEBUG] [Thread-3754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] client lang: <none>
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] server lang: <none>
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] kex follows: False
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] Compression: none
2025-12-25T02:50:30.058 [DEBUG] [Thread-3754] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:50:30.076 [DEBUG] [Thread-3754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:50:30.077 [DEBUG] [Thread-3754] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:50:30.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:50:30.079 [DEBUG] [Thread-3754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:50:30.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:50:30.081 [DEBUG] [Thread-3754] [transport.py] [_log()] userauth is OK
2025-12-25T02:50:30.081 [DEBUG] [Thread-3754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:50:30.081 [DEBUG] [Thread-3754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:50:30.081 [DEBUG] [Thread-3754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:50:30.081 [DEBUG] [Thread-3754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:50:30.100 [INFO] [Thread-3754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:50:30.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:50:30.737 [DEBUG] [Thread-3754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:50:30.737 [DEBUG] [Thread-3754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:50:30.737 [DEBUG] [Thread-3754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:50:30.778 [DEBUG] [Thread-3754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:50:30.778 [DEBUG] [Thread-3754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:50:30.781 [DEBUG] [Thread-3754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:50:30.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:50:30.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:50:30.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:50:30.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:50:30.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:50:30.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:50:30.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:50:30.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:50:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:50:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.034791 -999.00  +11.40  15.49     95  +10.60 1 3 1 3 1     0    0 0.82 0.44 Z..Sw 14.0 15.5 160.4 21.7 13.2 -4.4 13.0 -5.0 12.9 -4.3 13.2 -5.3
2025-12-25T02:50:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:50:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:50:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.034791
2025-12-25T02:50:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:50:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:50:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:50:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:50:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:50:30.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:50:14', tmtdew=0.38, humidity=97.33, cloud=0.0, wind=20.5, temperature=11.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:50:05.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:50:30.810 [DEBUG] [Thread-3754] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:50:30.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:50:30.917 [DEBUG] [Thread-3757] [transport.py] [_log()] starting thread (client mode): 0xb6b22ad0
2025-12-25T02:50:30.918 [DEBUG] [Thread-3757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:50:30.933 [DEBUG] [Thread-3757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:50:30.933 [INFO] [Thread-3757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:50:30.941 [DEBUG] [Thread-3757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:50:30.942 [DEBUG] [Thread-3757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:50:30.942 [DEBUG] [Thread-3757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:50:30.942 [DEBUG] [Thread-3757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:50:30.942 [DEBUG] [Thread-3757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:50:30.942 [DEBUG] [Thread-3757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:50:30.942 [DEBUG] [Thread-3757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] client lang: <none>
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] server lang: <none>
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] kex follows: False
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] Compression: none
2025-12-25T02:50:30.943 [DEBUG] [Thread-3757] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:50:30.999 [DEBUG] [Thread-3757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:50:31.000 [DEBUG] [Thread-3757] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:50:31.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:50:31.001 [DEBUG] [Thread-3757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:50:31.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:50:31.055 [DEBUG] [Thread-3757] [transport.py] [_log()] userauth is OK
2025-12-25T02:50:31.055 [DEBUG] [Thread-3757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:50:31.055 [DEBUG] [Thread-3757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:50:31.056 [DEBUG] [Thread-3757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:50:31.056 [DEBUG] [Thread-3757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:50:31.074 [INFO] [Thread-3757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:50:31.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:50:31.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:50:31.647 [DEBUG] [Thread-3759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:50:31.918 [DEBUG] [Thread-3757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:50:31.918 [DEBUG] [Thread-3757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:50:31.966 [DEBUG] [Thread-3757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:50:31.966 [DEBUG] [Thread-3757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:50:31.975 [DEBUG] [Thread-3757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:50:31.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:50:31.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:50:31.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:50:32.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:50:32.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:50:32.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:50:32.012 [DEBUG] [Thread-3757] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:50:46.703 [DEBUG] [Thread-3760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:50:46.945 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:50:46.946 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:51:01.734 [DEBUG] [Thread-3761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:51:02.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:51:02.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:51:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:51:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 50, 47), 0.36, 97.43, 0.0, 20.82, 11.42, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:51:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:50:47
2025-12-25T02:51:02.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:51:03.004 [DEBUG] [Thread-3762] [transport.py] [_log()] starting thread (client mode): 0xb95f0dc0
2025-12-25T02:51:03.004 [DEBUG] [Thread-3762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:51:03.025 [DEBUG] [Thread-3762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:51:03.025 [INFO] [Thread-3762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] client lang: <none>
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] server lang: <none>
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] kex follows: False
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:51:03.029 [DEBUG] [Thread-3762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:51:03.030 [DEBUG] [Thread-3762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:51:03.030 [DEBUG] [Thread-3762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:51:03.030 [DEBUG] [Thread-3762] [transport.py] [_log()] Compression: none
2025-12-25T02:51:03.030 [DEBUG] [Thread-3762] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:51:03.041 [DEBUG] [Thread-3762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:51:03.041 [DEBUG] [Thread-3762] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:51:03.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:51:03.042 [DEBUG] [Thread-3762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:51:03.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:51:03.043 [DEBUG] [Thread-3762] [transport.py] [_log()] userauth is OK
2025-12-25T02:51:03.043 [DEBUG] [Thread-3762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:51:03.044 [DEBUG] [Thread-3762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:51:03.044 [DEBUG] [Thread-3762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:51:03.044 [DEBUG] [Thread-3762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:51:03.064 [INFO] [Thread-3762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:51:03.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:51:03.724 [DEBUG] [Thread-3762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:51:03.724 [DEBUG] [Thread-3762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:51:03.725 [DEBUG] [Thread-3762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:51:03.765 [DEBUG] [Thread-3762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:51:03.765 [DEBUG] [Thread-3762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:51:03.769 [DEBUG] [Thread-3762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:51:03.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:51:03.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:51:03.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:51:03.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:51:03.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:51:03.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:51:03.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:51:03.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:51:03.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:51:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.035138 -999.00  +11.40  14.99     95  +10.60 1 3 1 3 1     0    0 0.81 0.53 ----- 14.6 15.0 151.8 22.5 13.2 -5.6 13.0 -7.0 12.9 -5.3 13.2 -7.8
2025-12-25T02:51:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:51:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:51:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.035138
2025-12-25T02:51:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:51:03.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:51:03.794 [DEBUG] [Thread-3762] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:51:03.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:51:03.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:51:03.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:51:03.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:50:47', tmtdew=0.36, humidity=97.43, cloud=0.0, wind=20.82, temperature=11.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:50:35.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:51:03.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:51:03.885 [DEBUG] [Thread-3765] [transport.py] [_log()] starting thread (client mode): 0xb95b0610
2025-12-25T02:51:03.885 [DEBUG] [Thread-3765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:51:03.900 [DEBUG] [Thread-3765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:51:03.900 [INFO] [Thread-3765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:51:03.908 [DEBUG] [Thread-3765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] client lang: <none>
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] server lang: <none>
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] kex follows: False
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:51:03.909 [DEBUG] [Thread-3765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:51:03.910 [DEBUG] [Thread-3765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:51:03.910 [DEBUG] [Thread-3765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:51:03.910 [DEBUG] [Thread-3765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:51:03.910 [DEBUG] [Thread-3765] [transport.py] [_log()] Compression: none
2025-12-25T02:51:03.910 [DEBUG] [Thread-3765] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:51:03.968 [DEBUG] [Thread-3765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:51:03.968 [DEBUG] [Thread-3765] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:51:03.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:51:03.969 [DEBUG] [Thread-3765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:51:03.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:51:04.023 [DEBUG] [Thread-3765] [transport.py] [_log()] userauth is OK
2025-12-25T02:51:04.024 [DEBUG] [Thread-3765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:51:04.024 [DEBUG] [Thread-3765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:51:04.024 [DEBUG] [Thread-3765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:51:04.024 [DEBUG] [Thread-3765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:51:04.043 [INFO] [Thread-3765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:51:04.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:51:04.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:51:04.896 [DEBUG] [Thread-3765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:51:04.896 [DEBUG] [Thread-3765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:51:04.944 [DEBUG] [Thread-3765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:51:04.944 [DEBUG] [Thread-3765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:51:04.954 [DEBUG] [Thread-3765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:51:04.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:51:04.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:51:04.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:51:04.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:51:04.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:51:04.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:51:04.991 [DEBUG] [Thread-3765] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:51:16.770 [DEBUG] [Thread-3767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:51:29.911 [DEBUG] [Thread-3768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:51:31.823 [DEBUG] [Thread-3769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:51:34.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:51:34.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:51:34.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:51:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 51, 19), 0.36, 97.45, 0.0, 19.99, 11.42, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:51:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:51:19
2025-12-25T02:51:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:51:35.954 [DEBUG] [Thread-3770] [transport.py] [_log()] starting thread (client mode): 0xb6b178e0
2025-12-25T02:51:35.954 [DEBUG] [Thread-3770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:51:35.974 [DEBUG] [Thread-3770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:51:35.974 [INFO] [Thread-3770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:51:35.975 [DEBUG] [Thread-3770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:51:35.975 [DEBUG] [Thread-3770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:51:35.975 [DEBUG] [Thread-3770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:51:35.975 [DEBUG] [Thread-3770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] client lang: <none>
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] server lang: <none>
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] kex follows: False
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] Compression: none
2025-12-25T02:51:35.976 [DEBUG] [Thread-3770] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:51:35.985 [DEBUG] [Thread-3770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:51:35.986 [DEBUG] [Thread-3770] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:51:35.986 [DEBUG] [Thread-3770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:51:35.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:51:35.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:51:35.987 [DEBUG] [Thread-3770] [transport.py] [_log()] userauth is OK
2025-12-25T02:51:35.987 [DEBUG] [Thread-3770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:51:35.987 [DEBUG] [Thread-3770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:51:35.987 [DEBUG] [Thread-3770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:51:35.988 [DEBUG] [Thread-3770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:51:36.000 [INFO] [Thread-3770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:51:36.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:51:36.662 [DEBUG] [Thread-3770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:51:36.663 [DEBUG] [Thread-3770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:51:36.663 [DEBUG] [Thread-3770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:51:36.704 [DEBUG] [Thread-3770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:51:36.704 [DEBUG] [Thread-3770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:51:36.708 [DEBUG] [Thread-3770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:51:36.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:51:36.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:51:36.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:51:36.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:51:36.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:51:36.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:51:36.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:51:36.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:51:36.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:51:36.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.035485 -999.00  +11.40  18.17     95  +10.60 1 3 1 3 1     0    0 0.84 0.54 ----- 15.4 18.2 162.4 21.6 13.2 -7.8 13.0 -5.5 12.8 -7.5 13.2 -5.8
2025-12-25T02:51:36.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:51:36.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:51:36.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.035485
2025-12-25T02:51:36.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:51:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:51:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:51:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:51:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:51:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:51:19', tmtdew=0.36, humidity=97.45, cloud=0.0, wind=19.99, temperature=11.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:51:05.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:51:36.735 [DEBUG] [Thread-3770] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:51:36.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:51:36.829 [DEBUG] [Thread-3773] [transport.py] [_log()] starting thread (client mode): 0xb6b35000
2025-12-25T02:51:36.829 [DEBUG] [Thread-3773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:51:36.843 [DEBUG] [Thread-3773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:51:36.844 [INFO] [Thread-3773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:51:36.852 [DEBUG] [Thread-3773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:51:36.852 [DEBUG] [Thread-3773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:51:36.852 [DEBUG] [Thread-3773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:51:36.853 [DEBUG] [Thread-3773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:51:36.853 [DEBUG] [Thread-3773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:51:36.853 [DEBUG] [Thread-3773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:51:36.853 [DEBUG] [Thread-3773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:51:36.853 [DEBUG] [Thread-3773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:51:36.853 [DEBUG] [Thread-3773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:51:36.853 [DEBUG] [Thread-3773] [transport.py] [_log()] client lang: <none>
2025-12-25T02:51:36.854 [DEBUG] [Thread-3773] [transport.py] [_log()] server lang: <none>
2025-12-25T02:51:36.854 [DEBUG] [Thread-3773] [transport.py] [_log()] kex follows: False
2025-12-25T02:51:36.854 [DEBUG] [Thread-3773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:51:36.854 [DEBUG] [Thread-3773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:51:36.854 [DEBUG] [Thread-3773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:51:36.854 [DEBUG] [Thread-3773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:51:36.854 [DEBUG] [Thread-3773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:51:36.854 [DEBUG] [Thread-3773] [transport.py] [_log()] Compression: none
2025-12-25T02:51:36.855 [DEBUG] [Thread-3773] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:51:36.913 [DEBUG] [Thread-3773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:51:36.913 [DEBUG] [Thread-3773] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:51:36.914 [DEBUG] [Thread-3773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:51:36.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:51:36.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:51:36.969 [DEBUG] [Thread-3773] [transport.py] [_log()] userauth is OK
2025-12-25T02:51:36.969 [DEBUG] [Thread-3773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:51:36.970 [DEBUG] [Thread-3773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:51:36.970 [DEBUG] [Thread-3773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:51:36.970 [DEBUG] [Thread-3773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:51:36.989 [INFO] [Thread-3773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:51:36.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:51:36.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:51:37.830 [DEBUG] [Thread-3773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:51:37.830 [DEBUG] [Thread-3773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:51:37.878 [DEBUG] [Thread-3773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:51:37.878 [DEBUG] [Thread-3773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:51:37.887 [DEBUG] [Thread-3773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:51:37.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:51:37.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:51:37.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
2025-12-25T02:51:37.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:51:37.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:51:37.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:51:37.924 [DEBUG] [Thread-3773] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:51:46.853 [DEBUG] [Thread-3775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:51:47.148 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:51:47.149 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:52:01.910 [DEBUG] [Thread-3776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:52:07.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:52:07.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:52:07.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:52:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 51, 51), 0.37, 97.41, 0.0, 21.46, 11.44, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:52:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:51:51
2025-12-25T02:52:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:52:08.936 [DEBUG] [Thread-3777] [transport.py] [_log()] starting thread (client mode): 0xb95f0dc0
2025-12-25T02:52:08.936 [DEBUG] [Thread-3777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:52:08.957 [DEBUG] [Thread-3777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:52:08.957 [INFO] [Thread-3777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] client lang: <none>
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] server lang: <none>
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] kex follows: False
2025-12-25T02:52:08.960 [DEBUG] [Thread-3777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:52:08.961 [DEBUG] [Thread-3777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:52:08.961 [DEBUG] [Thread-3777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:52:08.961 [DEBUG] [Thread-3777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:52:08.961 [DEBUG] [Thread-3777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:52:08.961 [DEBUG] [Thread-3777] [transport.py] [_log()] Compression: none
2025-12-25T02:52:08.961 [DEBUG] [Thread-3777] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:52:08.979 [DEBUG] [Thread-3777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:52:08.979 [DEBUG] [Thread-3777] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:52:08.979 [DEBUG] [Thread-3777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:52:08.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:52:08.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:52:08.980 [DEBUG] [Thread-3777] [transport.py] [_log()] userauth is OK
2025-12-25T02:52:08.980 [DEBUG] [Thread-3777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:52:08.980 [DEBUG] [Thread-3777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:52:08.980 [DEBUG] [Thread-3777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:52:08.980 [DEBUG] [Thread-3777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:52:08.993 [INFO] [Thread-3777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:52:08.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:52:09.648 [DEBUG] [Thread-3777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:52:09.648 [DEBUG] [Thread-3777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:52:09.648 [DEBUG] [Thread-3777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:52:09.689 [DEBUG] [Thread-3777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:52:09.689 [DEBUG] [Thread-3777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:52:09.691 [DEBUG] [Thread-3777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:52:09.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:52:09.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:52:09.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:52:09.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:52:09.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:52:09.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:52:09.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.035833 -999.00  +11.30  16.44     95  +10.60 1 3 1 3 1     0    0 0.82 0.50 ----- 19.0 16.4 142.8 19.1 13.2 -5.3 13.1 -5.5 12.9 -5.5 13.2 -5.2
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.035833
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:52:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:52:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:52:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:52:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:51:51', tmtdew=0.37, humidity=97.41, cloud=0.0, wind=21.46, temperature=11.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:51:35.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:52:09.710 [DEBUG] [Thread-3777] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:52:09.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:52:09.795 [DEBUG] [Thread-3780] [transport.py] [_log()] starting thread (client mode): 0xb6b17af0
2025-12-25T02:52:09.795 [DEBUG] [Thread-3780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:52:09.810 [DEBUG] [Thread-3780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:52:09.810 [INFO] [Thread-3780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] client lang: <none>
2025-12-25T02:52:09.817 [DEBUG] [Thread-3780] [transport.py] [_log()] server lang: <none>
2025-12-25T02:52:09.818 [DEBUG] [Thread-3780] [transport.py] [_log()] kex follows: False
2025-12-25T02:52:09.818 [DEBUG] [Thread-3780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:52:09.818 [DEBUG] [Thread-3780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:52:09.818 [DEBUG] [Thread-3780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:52:09.818 [DEBUG] [Thread-3780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:52:09.818 [DEBUG] [Thread-3780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:52:09.818 [DEBUG] [Thread-3780] [transport.py] [_log()] Compression: none
2025-12-25T02:52:09.818 [DEBUG] [Thread-3780] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:52:09.876 [DEBUG] [Thread-3780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:52:09.876 [DEBUG] [Thread-3780] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:52:09.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:52:09.876 [DEBUG] [Thread-3780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:52:09.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:52:09.937 [DEBUG] [Thread-3780] [transport.py] [_log()] userauth is OK
2025-12-25T02:52:09.937 [DEBUG] [Thread-3780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:52:09.937 [DEBUG] [Thread-3780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:52:09.937 [DEBUG] [Thread-3780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:52:09.937 [DEBUG] [Thread-3780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:52:09.951 [INFO] [Thread-3780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:52:09.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:52:09.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:52:10.810 [DEBUG] [Thread-3780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:52:10.810 [DEBUG] [Thread-3780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:52:10.858 [DEBUG] [Thread-3780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:52:10.858 [DEBUG] [Thread-3780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:52:10.868 [DEBUG] [Thread-3780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:52:10.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:52:10.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:52:10.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:52:10.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:52:10.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:52:10.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:52:10.906 [DEBUG] [Thread-3780] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:52:16.944 [DEBUG] [Thread-3782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:52:29.987 [DEBUG] [Thread-3783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:52:32.005 [DEBUG] [Thread-3784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:52:40.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:52:40.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:52:40.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:52:41.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 52, 23), 0.37, 97.4, 0.0, 21.21, 11.37, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:52:41.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:52:23
2025-12-25T02:52:41.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:52:41.877 [DEBUG] [Thread-3785] [transport.py] [_log()] starting thread (client mode): 0xb9546890
2025-12-25T02:52:41.877 [DEBUG] [Thread-3785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:52:41.897 [DEBUG] [Thread-3785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:52:41.897 [INFO] [Thread-3785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:52:41.898 [DEBUG] [Thread-3785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:52:41.898 [DEBUG] [Thread-3785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] client lang: <none>
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] server lang: <none>
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] kex follows: False
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] Compression: none
2025-12-25T02:52:41.899 [DEBUG] [Thread-3785] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:52:41.913 [DEBUG] [Thread-3785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:52:41.914 [DEBUG] [Thread-3785] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:52:41.914 [DEBUG] [Thread-3785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:52:41.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:52:41.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:52:41.916 [DEBUG] [Thread-3785] [transport.py] [_log()] userauth is OK
2025-12-25T02:52:41.916 [DEBUG] [Thread-3785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:52:41.916 [DEBUG] [Thread-3785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:52:41.916 [DEBUG] [Thread-3785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:52:41.916 [DEBUG] [Thread-3785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:52:41.935 [INFO] [Thread-3785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:52:41.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:52:42.538 [DEBUG] [Thread-3785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:52:42.538 [DEBUG] [Thread-3785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:52:42.539 [DEBUG] [Thread-3785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:52:42.579 [DEBUG] [Thread-3785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:52:42.579 [DEBUG] [Thread-3785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:52:42.582 [DEBUG] [Thread-3785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:52:42.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:52:42.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:52:42.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:52:42.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:52:42.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:52:42.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:52:42.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:52:42.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:52:42.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:52:42.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.036527 -999.00  +11.30  16.36     95  +10.60 1 3 1 3 1     0    0 0.78 -0.40 ----- 15.6 16.4 147.5 20.1 13.2 -5.2 13.1 -4.4 12.9 -5.1 13.2 -4.8
2025-12-25T02:52:42.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:52:42.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:52:42.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.036527
2025-12-25T02:52:42.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:52:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:52:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:52:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:52:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:52:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:52:23', tmtdew=0.37, humidity=97.4, cloud=0.0, wind=21.21, temperature=11.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:52:35.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:52:42.600 [DEBUG] [Thread-3785] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:52:42.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:52:42.704 [DEBUG] [Thread-3788] [transport.py] [_log()] starting thread (client mode): 0xb9590ee0
2025-12-25T02:52:42.704 [DEBUG] [Thread-3788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:52:42.718 [DEBUG] [Thread-3788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:52:42.719 [INFO] [Thread-3788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:52:42.727 [DEBUG] [Thread-3788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:52:42.727 [DEBUG] [Thread-3788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] client lang: <none>
2025-12-25T02:52:42.728 [DEBUG] [Thread-3788] [transport.py] [_log()] server lang: <none>
2025-12-25T02:52:42.729 [DEBUG] [Thread-3788] [transport.py] [_log()] kex follows: False
2025-12-25T02:52:42.729 [DEBUG] [Thread-3788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:52:42.729 [DEBUG] [Thread-3788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:52:42.729 [DEBUG] [Thread-3788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:52:42.729 [DEBUG] [Thread-3788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:52:42.729 [DEBUG] [Thread-3788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:52:42.729 [DEBUG] [Thread-3788] [transport.py] [_log()] Compression: none
2025-12-25T02:52:42.729 [DEBUG] [Thread-3788] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:52:42.792 [DEBUG] [Thread-3788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:52:42.792 [DEBUG] [Thread-3788] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:52:42.793 [DEBUG] [Thread-3788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:52:42.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:52:42.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:52:42.854 [DEBUG] [Thread-3788] [transport.py] [_log()] userauth is OK
2025-12-25T02:52:42.854 [DEBUG] [Thread-3788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:52:42.854 [DEBUG] [Thread-3788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:52:42.854 [DEBUG] [Thread-3788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:52:42.854 [DEBUG] [Thread-3788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:52:42.873 [INFO] [Thread-3788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:52:42.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:52:42.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:52:43.702 [DEBUG] [Thread-3788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:52:43.702 [DEBUG] [Thread-3788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:52:43.755 [DEBUG] [Thread-3788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:52:43.755 [DEBUG] [Thread-3788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:52:43.768 [DEBUG] [Thread-3788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:52:43.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:52: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')
2025-12-25T02:52:43.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:52:43.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:52:43.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:52:43.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:52:43.813 [DEBUG] [Thread-3788] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:52:47.042 [DEBUG] [Thread-3790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:52:47.351 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:52:47.351 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:53:02.090 [DEBUG] [Thread-3791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:53:13.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:53:13.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:53:13.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:53:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 52, 55), 0.36, 97.43, 0.0, 20.63, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:53:14.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:52:55
2025-12-25T02:53:14.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:53:14.791 [DEBUG] [Thread-3792] [transport.py] [_log()] starting thread (client mode): 0xb9591a20
2025-12-25T02:53:14.791 [DEBUG] [Thread-3792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:53:14.806 [DEBUG] [Thread-3792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:53:14.807 [INFO] [Thread-3792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] client lang: <none>
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] server lang: <none>
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] kex follows: False
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:53:14.808 [DEBUG] [Thread-3792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:53:14.809 [DEBUG] [Thread-3792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:53:14.809 [DEBUG] [Thread-3792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:53:14.809 [DEBUG] [Thread-3792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:53:14.809 [DEBUG] [Thread-3792] [transport.py] [_log()] Compression: none
2025-12-25T02:53:14.809 [DEBUG] [Thread-3792] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:53:14.818 [DEBUG] [Thread-3792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:53:14.818 [DEBUG] [Thread-3792] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:53:14.818 [DEBUG] [Thread-3792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:53:14.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:53:14.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:53:14.820 [DEBUG] [Thread-3792] [transport.py] [_log()] userauth is OK
2025-12-25T02:53:14.820 [DEBUG] [Thread-3792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:53:14.820 [DEBUG] [Thread-3792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:53:14.820 [DEBUG] [Thread-3792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:53:14.820 [DEBUG] [Thread-3792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:53:14.832 [INFO] [Thread-3792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:53:14.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:53:15.460 [DEBUG] [Thread-3792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:53:15.460 [DEBUG] [Thread-3792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:53:15.461 [DEBUG] [Thread-3792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:53:15.500 [DEBUG] [Thread-3792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:53:15.501 [DEBUG] [Thread-3792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:53:15.503 [DEBUG] [Thread-3792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:53:15.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:53:15.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:53:15.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:53:15.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:53:15.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:53:15.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:53:15.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:53:15.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:53:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:53:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.036874 -999.00  +11.40  15.44     95  +10.60 1 3 1 3 1     0    0 0.77 -0.48 ----- 12.8 15.4 147.3 22.4 13.2 -6.9 13.1 -4.4 12.9 -6.5 13.2 -5.3
2025-12-25T02:53:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:53:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:53:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.036874
2025-12-25T02:53:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:53:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:53:15.528 [DEBUG] [Thread-3792] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:53:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:53:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:53:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:53:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:52:55', tmtdew=0.36, humidity=97.43, cloud=0.0, wind=20.63, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:53:05.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:53:15.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:53:15.629 [DEBUG] [Thread-3795] [transport.py] [_log()] starting thread (client mode): 0xb6b17040
2025-12-25T02:53:15.629 [DEBUG] [Thread-3795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:53:15.644 [DEBUG] [Thread-3795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:53:15.644 [INFO] [Thread-3795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:53:15.651 [DEBUG] [Thread-3795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:53:15.651 [DEBUG] [Thread-3795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:53:15.651 [DEBUG] [Thread-3795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:53:15.651 [DEBUG] [Thread-3795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:53:15.651 [DEBUG] [Thread-3795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:53:15.651 [DEBUG] [Thread-3795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:53:15.651 [DEBUG] [Thread-3795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:53:15.651 [DEBUG] [Thread-3795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] client lang: <none>
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] server lang: <none>
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] kex follows: False
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] Compression: none
2025-12-25T02:53:15.652 [DEBUG] [Thread-3795] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:53:15.710 [DEBUG] [Thread-3795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:53:15.711 [DEBUG] [Thread-3795] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:53:15.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:53:15.712 [DEBUG] [Thread-3795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:53:15.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:53:15.767 [DEBUG] [Thread-3795] [transport.py] [_log()] userauth is OK
2025-12-25T02:53:15.767 [DEBUG] [Thread-3795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:53:15.767 [DEBUG] [Thread-3795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:53:15.767 [DEBUG] [Thread-3795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:53:15.768 [DEBUG] [Thread-3795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:53:15.787 [INFO] [Thread-3795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:53:15.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:53:15.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:53:16.626 [DEBUG] [Thread-3795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:53:16.626 [DEBUG] [Thread-3795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:53:16.674 [DEBUG] [Thread-3795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:53:16.674 [DEBUG] [Thread-3795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:53:16.684 [DEBUG] [Thread-3795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:53:16.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:53:16.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:53:16.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
2025-12-25T02:53:16.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:53:16.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:53:16.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:53:16.720 [DEBUG] [Thread-3795] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:53:17.128 [DEBUG] [Thread-3797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:53:30.040 [DEBUG] [Thread-3798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:53:32.175 [DEBUG] [Thread-3799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:53:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:53:46.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:53:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:53:47.209 [DEBUG] [Thread-3800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:53:47.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 53, 27), 0.36, 97.43, 0.0, 20.79, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:53:47.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:53:27
2025-12-25T02:53:47.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:53:47.553 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:53:47.554 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:53:47.697 [DEBUG] [Thread-3801] [transport.py] [_log()] starting thread (client mode): 0xb95934c0
2025-12-25T02:53:47.697 [DEBUG] [Thread-3801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:53:47.708 [DEBUG] [Thread-3801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:53:47.708 [INFO] [Thread-3801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] client lang: <none>
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] server lang: <none>
2025-12-25T02:53:47.712 [DEBUG] [Thread-3801] [transport.py] [_log()] kex follows: False
2025-12-25T02:53:47.713 [DEBUG] [Thread-3801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:53:47.713 [DEBUG] [Thread-3801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:53:47.713 [DEBUG] [Thread-3801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:53:47.713 [DEBUG] [Thread-3801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:53:47.713 [DEBUG] [Thread-3801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:53:47.713 [DEBUG] [Thread-3801] [transport.py] [_log()] Compression: none
2025-12-25T02:53:47.713 [DEBUG] [Thread-3801] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:53:47.722 [DEBUG] [Thread-3801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:53:47.723 [DEBUG] [Thread-3801] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:53:47.723 [DEBUG] [Thread-3801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:53:47.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:53:47.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:53:47.724 [DEBUG] [Thread-3801] [transport.py] [_log()] userauth is OK
2025-12-25T02:53:47.724 [DEBUG] [Thread-3801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:53:47.725 [DEBUG] [Thread-3801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:53:47.725 [DEBUG] [Thread-3801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:53:47.725 [DEBUG] [Thread-3801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:53:47.746 [INFO] [Thread-3801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:53:47.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:53:48.357 [DEBUG] [Thread-3801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:53:48.358 [DEBUG] [Thread-3801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:53:48.358 [DEBUG] [Thread-3801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:53:48.398 [DEBUG] [Thread-3801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:53:48.398 [DEBUG] [Thread-3801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:53:48.401 [DEBUG] [Thread-3801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:53:48.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:53:48.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:53:48.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:53:48.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:53:48.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:53:48.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:53:48.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:53:48.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:53:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:53:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.037221 -999.00  +11.40  16.60     95  +10.60 1 3 1 3 1     0    0 0.80 -0.37 ----- 17.1 16.6 144.0 20.1 13.2 -7.5 13.1 -5.7 12.9 -7.0 13.2 -6.6
2025-12-25T02:53:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:53:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:53:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.037221
2025-12-25T02:53:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:53:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:53:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:53:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:53:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:53:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:53:27', tmtdew=0.36, humidity=97.43, cloud=0.0, wind=20.79, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:53:35.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:53:48.419 [DEBUG] [Thread-3801] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:53:48.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:53:48.525 [DEBUG] [Thread-3804] [transport.py] [_log()] starting thread (client mode): 0xb9590e80
2025-12-25T02:53:48.526 [DEBUG] [Thread-3804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:53:48.540 [DEBUG] [Thread-3804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:53:48.541 [INFO] [Thread-3804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:53:48.549 [DEBUG] [Thread-3804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:53:48.549 [DEBUG] [Thread-3804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:53:48.549 [DEBUG] [Thread-3804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:53:48.549 [DEBUG] [Thread-3804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:53:48.549 [DEBUG] [Thread-3804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:53:48.549 [DEBUG] [Thread-3804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] client lang: <none>
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] server lang: <none>
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] kex follows: False
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:53:48.550 [DEBUG] [Thread-3804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:53:48.551 [DEBUG] [Thread-3804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:53:48.551 [DEBUG] [Thread-3804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:53:48.551 [DEBUG] [Thread-3804] [transport.py] [_log()] Compression: none
2025-12-25T02:53:48.551 [DEBUG] [Thread-3804] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:53:48.613 [DEBUG] [Thread-3804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:53:48.614 [DEBUG] [Thread-3804] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:53:48.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:53:48.615 [DEBUG] [Thread-3804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:53:48.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:53:48.672 [DEBUG] [Thread-3804] [transport.py] [_log()] userauth is OK
2025-12-25T02:53:48.672 [DEBUG] [Thread-3804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:53:48.672 [DEBUG] [Thread-3804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:53:48.672 [DEBUG] [Thread-3804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:53:48.673 [DEBUG] [Thread-3804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:53:48.697 [INFO] [Thread-3804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:53:48.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:53:48.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:53:49.544 [DEBUG] [Thread-3804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:53:49.545 [DEBUG] [Thread-3804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:53:49.596 [DEBUG] [Thread-3804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:53:49.596 [DEBUG] [Thread-3804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:53:49.605 [DEBUG] [Thread-3804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:53:49.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:53:49.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:53:49.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:53:49.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:53:49.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:53:49.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:53:49.645 [DEBUG] [Thread-3804] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:54:02.238 [DEBUG] [Thread-3806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:54:17.283 [DEBUG] [Thread-3807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:54:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:54:19.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:54:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:54:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 53, 59), 0.36, 97.43, 0.0, 19.8, 11.44, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:54:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:53:59
2025-12-25T02:54:20.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:54:20.644 [DEBUG] [Thread-3808] [transport.py] [_log()] starting thread (client mode): 0xb9590850
2025-12-25T02:54:20.644 [DEBUG] [Thread-3808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:54:20.665 [DEBUG] [Thread-3808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:54:20.665 [INFO] [Thread-3808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:54:20.668 [DEBUG] [Thread-3808] [transport.py] [_log()] client lang: <none>
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] server lang: <none>
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] kex follows: False
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] Compression: none
2025-12-25T02:54:20.669 [DEBUG] [Thread-3808] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:54:20.686 [DEBUG] [Thread-3808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:54:20.687 [DEBUG] [Thread-3808] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:54:20.687 [DEBUG] [Thread-3808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:54:20.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:54:20.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:54:20.689 [DEBUG] [Thread-3808] [transport.py] [_log()] userauth is OK
2025-12-25T02:54:20.690 [DEBUG] [Thread-3808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:54:20.690 [DEBUG] [Thread-3808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:54:20.690 [DEBUG] [Thread-3808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:54:20.690 [DEBUG] [Thread-3808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:54:20.715 [INFO] [Thread-3808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:54:20.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:54:21.307 [DEBUG] [Thread-3808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:54:21.308 [DEBUG] [Thread-3808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:54:21.308 [DEBUG] [Thread-3808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:54:21.349 [DEBUG] [Thread-3808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:54:21.349 [DEBUG] [Thread-3808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:54:21.351 [DEBUG] [Thread-3808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:54:21.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:54:21.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:54:21.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:54:21.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:54:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:54:21.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:54:21.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:54:21.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:54:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:54:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.037221 -999.00  +11.40  16.60     95  +10.60 1 3 1 3 1     0    0 0.80 -0.37 ----- 17.1 16.6 144.0 20.1 13.2 -7.5 13.1 -5.7 12.9 -7.0 13.2 -6.6
2025-12-25T02:54:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:54:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:54:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.037221
2025-12-25T02:54:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:54:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:54:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:54:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:54:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:54:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:53:59', tmtdew=0.36, humidity=97.43, cloud=0.0, wind=19.8, temperature=11.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:53:35.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:54:21.374 [DEBUG] [Thread-3808] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:54:21.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:54:21.469 [DEBUG] [Thread-3811] [transport.py] [_log()] starting thread (client mode): 0xb955beb0
2025-12-25T02:54:21.469 [DEBUG] [Thread-3811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:54:21.484 [DEBUG] [Thread-3811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:54:21.484 [INFO] [Thread-3811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] client lang: <none>
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] server lang: <none>
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] kex follows: False
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:54:21.492 [DEBUG] [Thread-3811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:54:21.493 [DEBUG] [Thread-3811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:54:21.493 [DEBUG] [Thread-3811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:54:21.493 [DEBUG] [Thread-3811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:54:21.493 [DEBUG] [Thread-3811] [transport.py] [_log()] Compression: none
2025-12-25T02:54:21.493 [DEBUG] [Thread-3811] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:54:21.552 [DEBUG] [Thread-3811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:54:21.553 [DEBUG] [Thread-3811] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:54:21.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:54:21.554 [DEBUG] [Thread-3811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:54:21.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:54:21.614 [DEBUG] [Thread-3811] [transport.py] [_log()] userauth is OK
2025-12-25T02:54:21.614 [DEBUG] [Thread-3811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:54:21.615 [DEBUG] [Thread-3811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:54:21.615 [DEBUG] [Thread-3811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:54:21.615 [DEBUG] [Thread-3811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:54:21.635 [INFO] [Thread-3811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:54:21.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:54:21.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:54:22.518 [DEBUG] [Thread-3811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:54:22.518 [DEBUG] [Thread-3811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:54:22.566 [DEBUG] [Thread-3811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:54:22.566 [DEBUG] [Thread-3811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:54:22.575 [DEBUG] [Thread-3811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:54:22.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:54:22.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')
2025-12-25T02:54:22.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
2025-12-25T02:54:22.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:54:22.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:54:22.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:54:22.615 [DEBUG] [Thread-3811] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:54:30.118 [DEBUG] [Thread-3813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:54:32.318 [DEBUG] [Thread-3814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:54:47.355 [DEBUG] [Thread-3815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:54:47.756 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:54:47.756 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:54:52.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:54:52.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:54:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:54:53.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 54, 31), 0.36, 97.43, 0.0, 19.48, 11.44, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:54:53.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:54:31
2025-12-25T02:54:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:54:53.595 [DEBUG] [Thread-3816] [transport.py] [_log()] starting thread (client mode): 0xb955bbb0
2025-12-25T02:54:53.595 [DEBUG] [Thread-3816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:54:53.615 [DEBUG] [Thread-3816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:54:53.615 [INFO] [Thread-3816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:54:53.616 [DEBUG] [Thread-3816] [transport.py] [_log()] client lang: <none>
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] server lang: <none>
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] kex follows: False
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] Compression: none
2025-12-25T02:54:53.617 [DEBUG] [Thread-3816] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:54:53.630 [DEBUG] [Thread-3816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:54:53.631 [DEBUG] [Thread-3816] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:54:53.631 [DEBUG] [Thread-3816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:54:53.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:54:53.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:54:53.633 [DEBUG] [Thread-3816] [transport.py] [_log()] userauth is OK
2025-12-25T02:54:53.634 [DEBUG] [Thread-3816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:54:53.634 [DEBUG] [Thread-3816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:54:53.634 [DEBUG] [Thread-3816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:54:53.634 [DEBUG] [Thread-3816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:54:53.658 [INFO] [Thread-3816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:54:53.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:54:54.487 [DEBUG] [Thread-3816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:54:54.487 [DEBUG] [Thread-3816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:54:54.488 [DEBUG] [Thread-3816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:54:54.528 [DEBUG] [Thread-3816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:54:54.528 [DEBUG] [Thread-3816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:54:54.531 [DEBUG] [Thread-3816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:54:54.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:54:54.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:54:54.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:54:54.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:54:54.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:54:54.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:54:54.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:54:54.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:54:54.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:54:54.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.037569 -999.00  +11.30  13.95     95  +10.60 1 3 1 3 1     0    0 0.78 -0.58 ----- 12.6 13.9 151.4 19.4 13.2 -4.4 13.1 -4.1 12.9 -4.3 13.2 -4.7
2025-12-25T02:54:54.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:54:54.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:54:54.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.037569
2025-12-25T02:54:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:54:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:54:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:54:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:54:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:54:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:54:31', tmtdew=0.36, humidity=97.43, cloud=0.0, wind=19.48, temperature=11.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:54:05.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:54:54.557 [DEBUG] [Thread-3816] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:54:54.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:54:54.651 [DEBUG] [Thread-3819] [transport.py] [_log()] starting thread (client mode): 0xb95b2740
2025-12-25T02:54:54.651 [DEBUG] [Thread-3819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:54:54.666 [DEBUG] [Thread-3819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:54:54.666 [INFO] [Thread-3819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] client lang: <none>
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] server lang: <none>
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] kex follows: False
2025-12-25T02:54:54.674 [DEBUG] [Thread-3819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:54:54.675 [DEBUG] [Thread-3819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:54:54.675 [DEBUG] [Thread-3819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:54:54.675 [DEBUG] [Thread-3819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:54:54.675 [DEBUG] [Thread-3819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:54:54.675 [DEBUG] [Thread-3819] [transport.py] [_log()] Compression: none
2025-12-25T02:54:54.675 [DEBUG] [Thread-3819] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:54:54.734 [DEBUG] [Thread-3819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:54:54.735 [DEBUG] [Thread-3819] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:54:54.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:54:54.736 [DEBUG] [Thread-3819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:54:54.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:54:54.793 [DEBUG] [Thread-3819] [transport.py] [_log()] userauth is OK
2025-12-25T02:54:54.793 [DEBUG] [Thread-3819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:54:54.793 [DEBUG] [Thread-3819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:54:54.793 [DEBUG] [Thread-3819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:54:54.793 [DEBUG] [Thread-3819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:54:54.812 [INFO] [Thread-3819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:54:54.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:54:54.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:54:55.668 [DEBUG] [Thread-3819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:54:55.668 [DEBUG] [Thread-3819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:54:55.716 [DEBUG] [Thread-3819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:54:55.717 [DEBUG] [Thread-3819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:54:55.726 [DEBUG] [Thread-3819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:54:55.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:54:55.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:54:55.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:54:55.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:54:55.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:54:55.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:54:55.760 [DEBUG] [Thread-3819] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:55:02.386 [DEBUG] [Thread-3821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:55:17.437 [DEBUG] [Thread-3822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:55:25.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:55:25.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:55:25.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:55:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 55, 3), 0.36, 97.48, 0.0, 19.74, 11.49, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:55:26.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:55:03
2025-12-25T02:55:26.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:55:26.798 [DEBUG] [Thread-3823] [transport.py] [_log()] starting thread (client mode): 0xb9593400
2025-12-25T02:55:26.798 [DEBUG] [Thread-3823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:55:26.819 [DEBUG] [Thread-3823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:55:26.819 [INFO] [Thread-3823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] client lang: <none>
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] server lang: <none>
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] kex follows: False
2025-12-25T02:55:26.823 [DEBUG] [Thread-3823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:55:26.824 [DEBUG] [Thread-3823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:55:26.824 [DEBUG] [Thread-3823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:55:26.824 [DEBUG] [Thread-3823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:55:26.824 [DEBUG] [Thread-3823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:55:26.824 [DEBUG] [Thread-3823] [transport.py] [_log()] Compression: none
2025-12-25T02:55:26.824 [DEBUG] [Thread-3823] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:55:26.838 [DEBUG] [Thread-3823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:55:26.838 [DEBUG] [Thread-3823] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:55:26.838 [DEBUG] [Thread-3823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:55:26.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:55:26.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:55:26.839 [DEBUG] [Thread-3823] [transport.py] [_log()] userauth is OK
2025-12-25T02:55:26.839 [DEBUG] [Thread-3823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:55:26.839 [DEBUG] [Thread-3823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:55:26.839 [DEBUG] [Thread-3823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:55:26.839 [DEBUG] [Thread-3823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:55:26.857 [INFO] [Thread-3823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:55:26.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:55:27.516 [DEBUG] [Thread-3823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:55:27.516 [DEBUG] [Thread-3823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:55:27.516 [DEBUG] [Thread-3823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:55:27.557 [DEBUG] [Thread-3823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:55:27.557 [DEBUG] [Thread-3823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:55:27.560 [DEBUG] [Thread-3823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:55:27.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:55:27.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:55:27.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:55:27.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:55:27.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:55:27.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:55:27.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:55:27.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:55:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:55:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.037916 -999.00  +11.30  17.11     95  +10.60 1 3 1 3 1     0    0 0.76 -0.97 ----- 18.8 17.1 144.6 23.5 13.2 -6.2 13.1 -4.7 12.9 -5.6 13.2 -5.2
2025-12-25T02:55:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:55:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:55:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.037916
2025-12-25T02:55:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:55:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:55:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:55:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:55:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:55:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:55:03', tmtdew=0.36, humidity=97.48, cloud=0.0, wind=19.74, temperature=11.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:54:35.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:55:27.570 [DEBUG] [Thread-3823] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:55:27.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:55:27.654 [DEBUG] [Thread-3826] [transport.py] [_log()] starting thread (client mode): 0xb6b21930
2025-12-25T02:55:27.654 [DEBUG] [Thread-3826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:55:27.668 [DEBUG] [Thread-3826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:55:27.668 [INFO] [Thread-3826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] client lang: <none>
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] server lang: <none>
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] kex follows: False
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] Compression: none
2025-12-25T02:55:27.676 [DEBUG] [Thread-3826] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:55:27.735 [DEBUG] [Thread-3826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:55:27.736 [DEBUG] [Thread-3826] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:55:27.736 [DEBUG] [Thread-3826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:55:27.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:55:27.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:55:27.792 [DEBUG] [Thread-3826] [transport.py] [_log()] userauth is OK
2025-12-25T02:55:27.793 [DEBUG] [Thread-3826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:55:27.793 [DEBUG] [Thread-3826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:55:27.793 [DEBUG] [Thread-3826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:55:27.793 [DEBUG] [Thread-3826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:55:27.807 [INFO] [Thread-3826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:55:27.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:55:27.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:55:28.664 [DEBUG] [Thread-3826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:55:28.665 [DEBUG] [Thread-3826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:55:28.712 [DEBUG] [Thread-3826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:55:28.712 [DEBUG] [Thread-3826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:55:28.720 [DEBUG] [Thread-3826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:55:28.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:55:28.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:55:28.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:55:28.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:55:28.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:55:28.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:55:28.752 [DEBUG] [Thread-3826] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:55:30.185 [DEBUG] [Thread-3828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:55:32.470 [DEBUG] [Thread-3829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:55:47.522 [DEBUG] [Thread-3830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:55:47.958 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:55:47.958 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:55:58.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:55:58.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:55:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:55:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 55, 35), 0.37, 97.41, 0.0, 22.5, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:55:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:55:35
2025-12-25T02:55:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:55:59.740 [DEBUG] [Thread-3831] [transport.py] [_log()] starting thread (client mode): 0xb6b17370
2025-12-25T02:55:59.741 [DEBUG] [Thread-3831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:55:59.762 [DEBUG] [Thread-3831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:55:59.762 [INFO] [Thread-3831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] client lang: <none>
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] server lang: <none>
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] kex follows: False
2025-12-25T02:55:59.765 [DEBUG] [Thread-3831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:55:59.766 [DEBUG] [Thread-3831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:55:59.766 [DEBUG] [Thread-3831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:55:59.766 [DEBUG] [Thread-3831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:55:59.766 [DEBUG] [Thread-3831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:55:59.766 [DEBUG] [Thread-3831] [transport.py] [_log()] Compression: none
2025-12-25T02:55:59.766 [DEBUG] [Thread-3831] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:55:59.783 [DEBUG] [Thread-3831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:55:59.783 [DEBUG] [Thread-3831] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:55:59.783 [DEBUG] [Thread-3831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:55:59.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:55:59.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:55:59.785 [DEBUG] [Thread-3831] [transport.py] [_log()] userauth is OK
2025-12-25T02:55:59.786 [DEBUG] [Thread-3831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:55:59.786 [DEBUG] [Thread-3831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:55:59.786 [DEBUG] [Thread-3831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:55:59.786 [DEBUG] [Thread-3831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:55:59.803 [INFO] [Thread-3831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:55:59.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:56:00.615 [DEBUG] [Thread-3831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:56:00.615 [DEBUG] [Thread-3831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:56:00.616 [DEBUG] [Thread-3831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:56:00.657 [DEBUG] [Thread-3831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:56:00.657 [DEBUG] [Thread-3831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:56:00.660 [DEBUG] [Thread-3831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:56:00.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:56:00.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:56:00.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:56:00.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:56:00.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:56:00.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:56:00.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:56:00.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:56:00.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:56:00.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.038263 -999.00  +11.40  14.56     95  +10.60 1 3 1 3 1     0    0 0.75 -1.20 ----- 10.9 14.6 153.2 19.9 13.2 -4.5 13.1 -3.5 12.9 -4.9 13.2 -3.6
2025-12-25T02:56:00.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:56:00.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:56:00.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.038263
2025-12-25T02:56:00.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:56:00.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:56:00.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:56:00.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:56:00.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:56:00.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:55:35', tmtdew=0.37, humidity=97.41, cloud=0.0, wind=22.5, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:55:05.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:56:00.684 [DEBUG] [Thread-3831] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:56:00.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:56:00.784 [DEBUG] [Thread-3834] [transport.py] [_log()] starting thread (client mode): 0xb6b14ac0
2025-12-25T02:56:00.784 [DEBUG] [Thread-3834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:56:00.803 [DEBUG] [Thread-3834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:56:00.804 [INFO] [Thread-3834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:56:00.811 [DEBUG] [Thread-3834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:56:00.811 [DEBUG] [Thread-3834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] client lang: <none>
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] server lang: <none>
2025-12-25T02:56:00.812 [DEBUG] [Thread-3834] [transport.py] [_log()] kex follows: False
2025-12-25T02:56:00.813 [DEBUG] [Thread-3834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:56:00.813 [DEBUG] [Thread-3834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:56:00.813 [DEBUG] [Thread-3834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:56:00.813 [DEBUG] [Thread-3834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:56:00.813 [DEBUG] [Thread-3834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:56:00.813 [DEBUG] [Thread-3834] [transport.py] [_log()] Compression: none
2025-12-25T02:56:00.813 [DEBUG] [Thread-3834] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:56:00.869 [DEBUG] [Thread-3834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:56:00.870 [DEBUG] [Thread-3834] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:56:00.870 [DEBUG] [Thread-3834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:56:00.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:56:00.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:56:00.925 [DEBUG] [Thread-3834] [transport.py] [_log()] userauth is OK
2025-12-25T02:56:00.925 [DEBUG] [Thread-3834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:56:00.926 [DEBUG] [Thread-3834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:56:00.926 [DEBUG] [Thread-3834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:56:00.926 [DEBUG] [Thread-3834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:56:00.946 [INFO] [Thread-3834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:56:00.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:56:00.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:56:01.821 [DEBUG] [Thread-3834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:56:01.822 [DEBUG] [Thread-3834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:56:01.871 [DEBUG] [Thread-3834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:56:01.871 [DEBUG] [Thread-3834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:56:01.883 [DEBUG] [Thread-3834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:56:01.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:56:01.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:56:01.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
2025-12-25T02:56:01.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:56:01.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:56:01.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:56:01.928 [DEBUG] [Thread-3834] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:56:02.558 [DEBUG] [Thread-3836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:56:17.595 [DEBUG] [Thread-3837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:56:30.241 [DEBUG] [Thread-3838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:56:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:56:31.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:56:31.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:56:32.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 56, 7), 0.36, 97.43, 0.0, 22.96, 11.37, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:56:32.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:56:07
2025-12-25T02:56:32.633 [DEBUG] [Thread-3839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:56:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:56:32.895 [DEBUG] [Thread-3840] [transport.py] [_log()] starting thread (client mode): 0xb6b14ca0
2025-12-25T02:56:32.895 [DEBUG] [Thread-3840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:56:32.916 [DEBUG] [Thread-3840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:56:32.916 [INFO] [Thread-3840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] client lang: <none>
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] server lang: <none>
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] kex follows: False
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] Compression: none
2025-12-25T02:56:32.919 [DEBUG] [Thread-3840] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:56:32.936 [DEBUG] [Thread-3840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:56:32.937 [DEBUG] [Thread-3840] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:56:32.937 [DEBUG] [Thread-3840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:56:32.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:56:32.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:56:32.939 [DEBUG] [Thread-3840] [transport.py] [_log()] userauth is OK
2025-12-25T02:56:32.940 [DEBUG] [Thread-3840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:56:32.940 [DEBUG] [Thread-3840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:56:32.940 [DEBUG] [Thread-3840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:56:32.940 [DEBUG] [Thread-3840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:56:32.961 [INFO] [Thread-3840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:56:32.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:56:33.592 [DEBUG] [Thread-3840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:56:33.592 [DEBUG] [Thread-3840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:56:33.592 [DEBUG] [Thread-3840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:56:33.633 [DEBUG] [Thread-3840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:56:33.633 [DEBUG] [Thread-3840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:56:33.637 [DEBUG] [Thread-3840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:56:33.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:56:33.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:56:33.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:56:33.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:56:33.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:56:33.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:56:33.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:56:33.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:56:33.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:56:33.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.038610 -999.00  +11.40  13.73     95  +10.60 1 3 1 3 1     0    0 0.75 -1.40 ----- 14.8 13.7 164.3 15.9 13.2 -4.0 13.1 -3.9 12.9 -3.9 13.3 -3.9
2025-12-25T02:56:33.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:56:33.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:56:33.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.038610
2025-12-25T02:56:33.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:56:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:56:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:56:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:56:33.663 [DEBUG] [Thread-3840] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:56:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:56:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:56:07', tmtdew=0.36, humidity=97.43, cloud=0.0, wind=22.96, temperature=11.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:55:35.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:56:33.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:56:33.757 [DEBUG] [Thread-3843] [transport.py] [_log()] starting thread (client mode): 0xb95598d0
2025-12-25T02:56:33.757 [DEBUG] [Thread-3843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:56:33.772 [DEBUG] [Thread-3843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:56:33.772 [INFO] [Thread-3843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] client lang: <none>
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] server lang: <none>
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] kex follows: False
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:56:33.780 [DEBUG] [Thread-3843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:56:33.781 [DEBUG] [Thread-3843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:56:33.781 [DEBUG] [Thread-3843] [transport.py] [_log()] Compression: none
2025-12-25T02:56:33.781 [DEBUG] [Thread-3843] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:56:33.838 [DEBUG] [Thread-3843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:56:33.839 [DEBUG] [Thread-3843] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:56:33.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:56:33.840 [DEBUG] [Thread-3843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:56:33.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:56:33.894 [DEBUG] [Thread-3843] [transport.py] [_log()] userauth is OK
2025-12-25T02:56:33.895 [DEBUG] [Thread-3843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:56:33.895 [DEBUG] [Thread-3843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:56:33.896 [DEBUG] [Thread-3843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:56:33.896 [DEBUG] [Thread-3843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:56:33.914 [INFO] [Thread-3843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:56:33.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:56:33.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:56:34.764 [DEBUG] [Thread-3843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:56:34.765 [DEBUG] [Thread-3843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:56:34.813 [DEBUG] [Thread-3843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:56:34.813 [DEBUG] [Thread-3843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:56:34.822 [DEBUG] [Thread-3843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:56:34.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:56:34.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:56:34.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:56:34.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:56:34.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:56:34.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:56:34.859 [DEBUG] [Thread-3843] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:56:47.662 [DEBUG] [Thread-3845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:56:48.161 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:56:48.162 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:57:02.712 [DEBUG] [Thread-3846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:57:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:57:04.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:57:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:57:05.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 56, 40), 0.36, 97.48, 0.0, 20.59, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:57:05.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:56:40
2025-12-25T02:57:05.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:57:05.843 [DEBUG] [Thread-3847] [transport.py] [_log()] starting thread (client mode): 0xb6b22c80
2025-12-25T02:57:05.843 [DEBUG] [Thread-3847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:57:05.864 [DEBUG] [Thread-3847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:57:05.864 [INFO] [Thread-3847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:57:05.867 [DEBUG] [Thread-3847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] client lang: <none>
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] server lang: <none>
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] kex follows: False
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] Compression: none
2025-12-25T02:57:05.868 [DEBUG] [Thread-3847] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:57:05.885 [DEBUG] [Thread-3847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:57:05.885 [DEBUG] [Thread-3847] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:57:05.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:57:05.886 [DEBUG] [Thread-3847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:57:05.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:57:05.929 [DEBUG] [Thread-3847] [transport.py] [_log()] userauth is OK
2025-12-25T02:57:05.929 [DEBUG] [Thread-3847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:57:05.929 [DEBUG] [Thread-3847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:57:05.930 [DEBUG] [Thread-3847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:57:05.930 [DEBUG] [Thread-3847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:57:05.951 [INFO] [Thread-3847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:57:05.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:57:06.760 [DEBUG] [Thread-3847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:57:06.761 [DEBUG] [Thread-3847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:57:06.761 [DEBUG] [Thread-3847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:57:06.802 [DEBUG] [Thread-3847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:57:06.802 [DEBUG] [Thread-3847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:57:06.805 [DEBUG] [Thread-3847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:57:06.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:57:06.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:57:06.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:57:06.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:57:06.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:57:06.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:57:06.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:57:06.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:57:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:57:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.038958 -999.00  +11.40  11.76     95  +10.60 1 3 1 3 1     0    0 0.74 -1.45 ----- 12.1 11.8 152.8 20.6 13.3 -4.5 13.1 -4.5 12.9 -4.3 13.3 -5.2
2025-12-25T02:57:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:57:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:57:06.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.038958
2025-12-25T02:57:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:57:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:57:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:57:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:57:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:57:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:56:40', tmtdew=0.36, humidity=97.48, cloud=0.0, wind=20.59, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:56:05.971', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:57:06.831 [DEBUG] [Thread-3847] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:57:06.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:57:06.923 [DEBUG] [Thread-3850] [transport.py] [_log()] starting thread (client mode): 0xb95f0d60
2025-12-25T02:57:06.924 [DEBUG] [Thread-3850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:57:06.939 [DEBUG] [Thread-3850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:57:06.939 [INFO] [Thread-3850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:57:06.947 [DEBUG] [Thread-3850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:57:06.947 [DEBUG] [Thread-3850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:57:06.947 [DEBUG] [Thread-3850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:57:06.947 [DEBUG] [Thread-3850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:57:06.947 [DEBUG] [Thread-3850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:57:06.947 [DEBUG] [Thread-3850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] client lang: <none>
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] server lang: <none>
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] kex follows: False
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:57:06.948 [DEBUG] [Thread-3850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:57:06.949 [DEBUG] [Thread-3850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:57:06.949 [DEBUG] [Thread-3850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:57:06.949 [DEBUG] [Thread-3850] [transport.py] [_log()] Compression: none
2025-12-25T02:57:06.949 [DEBUG] [Thread-3850] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:57:07.012 [DEBUG] [Thread-3850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:57:07.012 [DEBUG] [Thread-3850] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:57:07.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:57:07.013 [DEBUG] [Thread-3850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:57:07.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:57:07.071 [DEBUG] [Thread-3850] [transport.py] [_log()] userauth is OK
2025-12-25T02:57:07.072 [DEBUG] [Thread-3850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:57:07.072 [DEBUG] [Thread-3850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:57:07.072 [DEBUG] [Thread-3850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:57:07.072 [DEBUG] [Thread-3850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:57:07.097 [INFO] [Thread-3850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:57:07.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:57:07.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:57:07.967 [DEBUG] [Thread-3850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:57:07.967 [DEBUG] [Thread-3850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:57:08.015 [DEBUG] [Thread-3850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:57:08.016 [DEBUG] [Thread-3850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:57:08.025 [DEBUG] [Thread-3850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:57:08.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:57:08.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:57: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') -> 00000000
2025-12-25T02:57:08.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:57:08.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:57:08.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:57:08.061 [DEBUG] [Thread-3850] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:57:17.747 [DEBUG] [Thread-3852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:57:30.312 [DEBUG] [Thread-3853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:57:32.796 [DEBUG] [Thread-3854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:57:38.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:57:38.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:57:38.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:57:38.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 57, 12), 0.36, 97.46, 0.0, 19.6, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:57:38.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:57:12
2025-12-25T02:57:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:57:39.014 [DEBUG] [Thread-3855] [transport.py] [_log()] starting thread (client mode): 0xb6b17370
2025-12-25T02:57:39.015 [DEBUG] [Thread-3855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:57:39.035 [DEBUG] [Thread-3855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:57:39.035 [INFO] [Thread-3855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] client lang: <none>
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] server lang: <none>
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] kex follows: False
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] Compression: none
2025-12-25T02:57:39.038 [DEBUG] [Thread-3855] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:57:39.055 [DEBUG] [Thread-3855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:57:39.055 [DEBUG] [Thread-3855] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:57:39.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:57:39.056 [DEBUG] [Thread-3855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:57:39.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:57:39.058 [DEBUG] [Thread-3855] [transport.py] [_log()] userauth is OK
2025-12-25T02:57:39.058 [DEBUG] [Thread-3855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:57:39.058 [DEBUG] [Thread-3855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:57:39.059 [DEBUG] [Thread-3855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:57:39.059 [DEBUG] [Thread-3855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:57:39.075 [INFO] [Thread-3855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:57:39.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:57:39.662 [DEBUG] [Thread-3855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:57:39.662 [DEBUG] [Thread-3855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:57:39.663 [DEBUG] [Thread-3855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:57:39.704 [DEBUG] [Thread-3855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:57:39.704 [DEBUG] [Thread-3855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:57:39.708 [DEBUG] [Thread-3855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:57:39.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:57:39.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:57:39.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:57:39.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:57:39.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:57:39.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:57:39.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:57:39.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:57:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:57:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.039652 -999.00  +11.30  16.75     95  +10.60 1 3 1 3 1     0    0 0.74 -1.50 ----- 15.6 16.8 158.2 19.1 13.2 -3.9 13.1 -5.6 12.9 -3.6 13.3 -5.6
2025-12-25T02:57:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:57:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:57:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.039652
2025-12-25T02:57:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:57:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:57:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:57:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:57:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:57:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:57:12', tmtdew=0.36, humidity=97.46, cloud=0.0, wind=19.6, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:57:05.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:57:39.734 [DEBUG] [Thread-3855] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:57:39.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:57:39.827 [DEBUG] [Thread-3858] [transport.py] [_log()] starting thread (client mode): 0xb9559480
2025-12-25T02:57:39.827 [DEBUG] [Thread-3858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:57:39.842 [DEBUG] [Thread-3858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:57:39.842 [INFO] [Thread-3858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:57:39.852 [DEBUG] [Thread-3858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:57:39.852 [DEBUG] [Thread-3858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:57:39.852 [DEBUG] [Thread-3858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:57:39.852 [DEBUG] [Thread-3858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:57:39.852 [DEBUG] [Thread-3858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:57:39.852 [DEBUG] [Thread-3858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:57:39.852 [DEBUG] [Thread-3858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:57:39.852 [DEBUG] [Thread-3858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] client lang: <none>
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] server lang: <none>
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] kex follows: False
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] Compression: none
2025-12-25T02:57:39.853 [DEBUG] [Thread-3858] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:57:39.915 [DEBUG] [Thread-3858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:57:39.916 [DEBUG] [Thread-3858] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:57:39.916 [DEBUG] [Thread-3858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:57:39.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:57:39.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:57:39.972 [DEBUG] [Thread-3858] [transport.py] [_log()] userauth is OK
2025-12-25T02:57:39.973 [DEBUG] [Thread-3858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:57:39.973 [DEBUG] [Thread-3858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:57:39.973 [DEBUG] [Thread-3858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:57:39.973 [DEBUG] [Thread-3858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:57:39.992 [INFO] [Thread-3858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:57:39.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:57:39.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:57:40.830 [DEBUG] [Thread-3858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:57:40.831 [DEBUG] [Thread-3858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:57:40.880 [DEBUG] [Thread-3858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:57:40.881 [DEBUG] [Thread-3858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:57:40.890 [DEBUG] [Thread-3858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:57:40.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:57:40.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:57:40.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:57:40.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:57:40.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:57:40.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:57:40.928 [DEBUG] [Thread-3858] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:57:47.831 [DEBUG] [Thread-3860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:57:48.363 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:57:48.365 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:58:02.884 [DEBUG] [Thread-3861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:58:10.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:58:10.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:58:10.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
2025-12-25T02:58:11.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 57, 44), 0.35, 97.5, 0.0, 21.26, 11.42, 2, 2, 0, 2, 0, 0),)
2025-12-25T02:58:11.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:57:44
2025-12-25T02:58:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:58:11.903 [DEBUG] [Thread-3862] [transport.py] [_log()] starting thread (client mode): 0xb9558970
2025-12-25T02:58:11.903 [DEBUG] [Thread-3862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:58:11.923 [DEBUG] [Thread-3862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:58:11.923 [INFO] [Thread-3862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:58:11.926 [DEBUG] [Thread-3862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:58:11.926 [DEBUG] [Thread-3862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:58:11.926 [DEBUG] [Thread-3862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:58:11.926 [DEBUG] [Thread-3862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] client lang: <none>
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] server lang: <none>
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] kex follows: False
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:58:11.927 [DEBUG] [Thread-3862] [transport.py] [_log()] Compression: none
2025-12-25T02:58:11.928 [DEBUG] [Thread-3862] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:58:11.944 [DEBUG] [Thread-3862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:58:11.945 [DEBUG] [Thread-3862] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:58:11.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:58:11.946 [DEBUG] [Thread-3862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:58:11.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:58:11.988 [DEBUG] [Thread-3862] [transport.py] [_log()] userauth is OK
2025-12-25T02:58:11.989 [DEBUG] [Thread-3862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:58:11.989 [DEBUG] [Thread-3862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:58:11.989 [DEBUG] [Thread-3862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:58:11.989 [DEBUG] [Thread-3862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:58:12.012 [INFO] [Thread-3862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:58:12.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:58:12.806 [DEBUG] [Thread-3862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:58:12.806 [DEBUG] [Thread-3862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:58:12.806 [DEBUG] [Thread-3862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:58:12.847 [DEBUG] [Thread-3862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:58:12.847 [DEBUG] [Thread-3862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:58:12.850 [DEBUG] [Thread-3862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:58:12.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:58:12.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:58:12.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:58:12.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:58:12.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:58:12.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:58:12.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:58:12.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:58:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:58:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.039999 -999.00  +11.40  13.25     95  +10.60 1 3 1 3 1     0    0 0.74 -1.64 ----- 13.6 13.2 155.8 19.3 13.3 -4.4 13.1 -3.5 12.9 -4.3 13.3 -3.9
2025-12-25T02:58:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:58:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:58:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.039999
2025-12-25T02:58:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:58:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:58:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:58:12.875 [DEBUG] [Thread-3862] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:58:12.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:58:12.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:58:12.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:57:44', tmtdew=0.35, humidity=97.5, cloud=0.0, wind=21.26, temperature=11.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:57:35.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:58:12.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:58:12.963 [DEBUG] [Thread-3865] [transport.py] [_log()] starting thread (client mode): 0xb955add0
2025-12-25T02:58:12.963 [DEBUG] [Thread-3865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:58:12.977 [DEBUG] [Thread-3865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:58:12.977 [INFO] [Thread-3865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:58:12.984 [DEBUG] [Thread-3865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:58:12.984 [DEBUG] [Thread-3865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] client lang: <none>
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] server lang: <none>
2025-12-25T02:58:12.985 [DEBUG] [Thread-3865] [transport.py] [_log()] kex follows: False
2025-12-25T02:58:12.986 [DEBUG] [Thread-3865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:58:12.986 [DEBUG] [Thread-3865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:58:12.986 [DEBUG] [Thread-3865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:58:12.986 [DEBUG] [Thread-3865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:58:12.986 [DEBUG] [Thread-3865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:58:12.986 [DEBUG] [Thread-3865] [transport.py] [_log()] Compression: none
2025-12-25T02:58:12.986 [DEBUG] [Thread-3865] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:58:13.043 [DEBUG] [Thread-3865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:58:13.043 [DEBUG] [Thread-3865] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:58:13.044 [DEBUG] [Thread-3865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:58:13.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:58:13.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:58:13.099 [DEBUG] [Thread-3865] [transport.py] [_log()] userauth is OK
2025-12-25T02:58:13.099 [DEBUG] [Thread-3865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:58:13.099 [DEBUG] [Thread-3865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:58:13.099 [DEBUG] [Thread-3865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:58:13.099 [DEBUG] [Thread-3865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:58:13.121 [INFO] [Thread-3865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:58:13.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:58:13.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:58:13.941 [DEBUG] [Thread-3865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:58:13.941 [DEBUG] [Thread-3865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:58:13.989 [DEBUG] [Thread-3865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:58:13.989 [DEBUG] [Thread-3865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:58:13.998 [DEBUG] [Thread-3865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:58:14.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:58:14.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:58:14.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') -> 00000000
2025-12-25T02:58:14.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:58:14.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:58:14.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:58:14.032 [DEBUG] [Thread-3865] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:58:17.910 [DEBUG] [Thread-3867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:58:30.374 [DEBUG] [Thread-3868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:58:32.950 [DEBUG] [Thread-3869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:58:44.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:58:44.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:58:44.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:58:44.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 58, 16), 0.36, 97.46, 0.0, 19.43, 11.42, 2, 2, 2, 2, 0, 0),)
2025-12-25T02:58:44.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:58:16
2025-12-25T02:58:44.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:58:45.001 [DEBUG] [Thread-3870] [transport.py] [_log()] starting thread (client mode): 0xb95b02e0
2025-12-25T02:58:45.001 [DEBUG] [Thread-3870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:58:45.022 [DEBUG] [Thread-3870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:58:45.022 [INFO] [Thread-3870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] client lang: <none>
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] server lang: <none>
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] kex follows: False
2025-12-25T02:58:45.025 [DEBUG] [Thread-3870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:58:45.026 [DEBUG] [Thread-3870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:58:45.026 [DEBUG] [Thread-3870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:58:45.026 [DEBUG] [Thread-3870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:58:45.026 [DEBUG] [Thread-3870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:58:45.026 [DEBUG] [Thread-3870] [transport.py] [_log()] Compression: none
2025-12-25T02:58:45.026 [DEBUG] [Thread-3870] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:58:45.043 [DEBUG] [Thread-3870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:58:45.044 [DEBUG] [Thread-3870] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:58:45.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:58:45.045 [DEBUG] [Thread-3870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:58:45.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:58:45.046 [DEBUG] [Thread-3870] [transport.py] [_log()] userauth is OK
2025-12-25T02:58:45.046 [DEBUG] [Thread-3870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:58:45.046 [DEBUG] [Thread-3870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:58:45.046 [DEBUG] [Thread-3870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:58:45.047 [DEBUG] [Thread-3870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:58:45.083 [INFO] [Thread-3870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:58:45.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:58:45.730 [DEBUG] [Thread-3870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:58:45.730 [DEBUG] [Thread-3870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:58:45.731 [DEBUG] [Thread-3870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:58:45.772 [DEBUG] [Thread-3870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:58:45.772 [DEBUG] [Thread-3870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:58:45.774 [DEBUG] [Thread-3870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:58:45.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:58:45.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:58:45.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:58:45.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:58:45.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:58:45.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:58:45.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:58:45.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:58:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:58:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.040347 -999.00  +11.40  13.49     95  +10.60 1 3 1 3 1     0    0 0.73 -1.64 ----- 14.2 13.5 156.8 21.4 13.3 -3.7 13.1 -4.6 12.9 -3.6 13.3 -5.0
2025-12-25T02:58:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:58:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:58:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.040347
2025-12-25T02:58:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:58:45.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:58:45.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:58:45.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:58:45.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:58:45.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:58:16', tmtdew=0.36, humidity=97.46, cloud=0.0, wind=19.43, temperature=11.42, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:58:05.981', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:58:45.798 [DEBUG] [Thread-3870] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:58:45.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:58:45.893 [DEBUG] [Thread-3873] [transport.py] [_log()] starting thread (client mode): 0xb6b23220
2025-12-25T02:58:45.893 [DEBUG] [Thread-3873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:58:45.907 [DEBUG] [Thread-3873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:58:45.907 [INFO] [Thread-3873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] client lang: <none>
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] server lang: <none>
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] kex follows: False
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:58:45.915 [DEBUG] [Thread-3873] [transport.py] [_log()] Compression: none
2025-12-25T02:58:45.916 [DEBUG] [Thread-3873] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:58:45.972 [DEBUG] [Thread-3873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:58:45.973 [DEBUG] [Thread-3873] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:58:45.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:58:45.974 [DEBUG] [Thread-3873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:58:45.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:58:46.028 [DEBUG] [Thread-3873] [transport.py] [_log()] userauth is OK
2025-12-25T02:58:46.029 [DEBUG] [Thread-3873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:58:46.029 [DEBUG] [Thread-3873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:58:46.029 [DEBUG] [Thread-3873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:58:46.029 [DEBUG] [Thread-3873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:58:46.047 [INFO] [Thread-3873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:58:46.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:58:46.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:58:46.871 [DEBUG] [Thread-3873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:58:46.871 [DEBUG] [Thread-3873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:58:46.919 [DEBUG] [Thread-3873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:58:46.919 [DEBUG] [Thread-3873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:58:46.928 [DEBUG] [Thread-3873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:58:46.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:58:46.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:58:46.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:58:46.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:58:46.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:58:46.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:58:46.964 [DEBUG] [Thread-3873] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:58:47.982 [DEBUG] [Thread-3875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:58:48.567 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:58:48.569 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:59:03.038 [DEBUG] [Thread-3876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:59:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:59:16.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:59:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:59:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 58, 48), 0.36, 97.46, 0.0, 20.57, 11.35, 2, 2, 2, 2, 0, 0),)
2025-12-25T02:59:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:58:48
2025-12-25T02:59:17.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:59:18.013 [DEBUG] [Thread-3877] [transport.py] [_log()] starting thread (client mode): 0xb95f1cc0
2025-12-25T02:59:18.013 [DEBUG] [Thread-3877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:59:18.033 [DEBUG] [Thread-3877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:59:18.033 [INFO] [Thread-3877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] client lang: <none>
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] server lang: <none>
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] kex follows: False
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] Compression: none
2025-12-25T02:59:18.037 [DEBUG] [Thread-3877] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:59:18.051 [DEBUG] [Thread-3877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:59:18.051 [DEBUG] [Thread-3877] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:59:18.051 [DEBUG] [Thread-3877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:59:18.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:59:18.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:59:18.052 [DEBUG] [Thread-3877] [transport.py] [_log()] userauth is OK
2025-12-25T02:59:18.052 [DEBUG] [Thread-3877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:59:18.052 [DEBUG] [Thread-3877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:59:18.052 [DEBUG] [Thread-3877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:59:18.052 [DEBUG] [Thread-3877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:59:18.061 [INFO] [Thread-3877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:59:18.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:59:18.072 [DEBUG] [Thread-3879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:59:18.855 [DEBUG] [Thread-3877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:59:18.855 [DEBUG] [Thread-3877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:59:18.855 [DEBUG] [Thread-3877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:59:18.896 [DEBUG] [Thread-3877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:59:18.896 [DEBUG] [Thread-3877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:59:18.898 [DEBUG] [Thread-3877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:59:18.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:59:18.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:59:18.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:59:18.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:59:18.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:59:18.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:59:18.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.040694 -999.00  +11.40  17.96     95  +10.60 1 3 1 3 1     0    0 0.73 -1.58 ----- 13.4 18.0 161.0 20.5 13.3 -5.9 13.1 -5.2 12.9 -5.4 13.3 -5.5
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.040694
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:59:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:58:48', tmtdew=0.36, humidity=97.46, cloud=0.0, wind=20.57, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:58:35.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:59:18.917 [DEBUG] [Thread-3877] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:59:18.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:59:19.000 [DEBUG] [Thread-3881] [transport.py] [_log()] starting thread (client mode): 0xb6b22a40
2025-12-25T02:59:19.000 [DEBUG] [Thread-3881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:59:19.014 [DEBUG] [Thread-3881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:59:19.014 [INFO] [Thread-3881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] client lang: <none>
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] server lang: <none>
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] kex follows: False
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] Compression: none
2025-12-25T02:59:19.022 [DEBUG] [Thread-3881] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:59:19.079 [DEBUG] [Thread-3881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:59:19.079 [DEBUG] [Thread-3881] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:59:19.079 [DEBUG] [Thread-3881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:59:19.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:59:19.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:59:19.136 [DEBUG] [Thread-3881] [transport.py] [_log()] userauth is OK
2025-12-25T02:59:19.136 [DEBUG] [Thread-3881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:59:19.136 [DEBUG] [Thread-3881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:59:19.136 [DEBUG] [Thread-3881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:59:19.136 [DEBUG] [Thread-3881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:59:19.150 [INFO] [Thread-3881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:59:19.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:59:19.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:59:20.016 [DEBUG] [Thread-3881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:59:20.016 [DEBUG] [Thread-3881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:59:20.063 [DEBUG] [Thread-3881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:59:20.063 [DEBUG] [Thread-3881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:59:20.072 [DEBUG] [Thread-3881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:59:20.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:59:20.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:59:20.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:59:20.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:59:20.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:59:20.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:59:20.107 [DEBUG] [Thread-3881] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:59:30.453 [DEBUG] [Thread-3883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:59:33.101 [DEBUG] [Thread-3884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:59:48.155 [DEBUG] [Thread-3885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:59:48.773 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:59:48.774 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T02:59:50.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T02:59:50.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T02:59:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T02:59:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 59, 20), 0.36, 97.48, 0.0, 20.26, 11.34, 2, 2, 2, 2, 0, 0),)
2025-12-25T02:59:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:59:20
2025-12-25T02:59:50.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T02:59:51.085 [DEBUG] [Thread-3886] [transport.py] [_log()] starting thread (client mode): 0xb6b2a890
2025-12-25T02:59:51.086 [DEBUG] [Thread-3886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:59:51.106 [DEBUG] [Thread-3886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T02:59:51.106 [INFO] [Thread-3886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] client lang: <none>
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] server lang: <none>
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] kex follows: False
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] Compression: none
2025-12-25T02:59:51.109 [DEBUG] [Thread-3886] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:59:51.127 [DEBUG] [Thread-3886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:59:51.127 [DEBUG] [Thread-3886] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:59:51.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T02:59:51.128 [DEBUG] [Thread-3886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T02:59:51.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:59:51.130 [DEBUG] [Thread-3886] [transport.py] [_log()] userauth is OK
2025-12-25T02:59:51.131 [DEBUG] [Thread-3886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:59:51.131 [DEBUG] [Thread-3886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:59:51.131 [DEBUG] [Thread-3886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T02:59:51.131 [DEBUG] [Thread-3886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:59:51.155 [INFO] [Thread-3886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:59:51.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:59:51.798 [DEBUG] [Thread-3886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:59:51.798 [DEBUG] [Thread-3886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:59:51.798 [DEBUG] [Thread-3886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T02:59:51.839 [DEBUG] [Thread-3886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:59:51.839 [DEBUG] [Thread-3886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:59:51.843 [DEBUG] [Thread-3886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:59:51.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:59:51.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T02:59:51.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T02:59:51.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T02:59:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:59:51.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T02:59:51.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:59:51.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:59:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T02:59:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.041041 -999.00  +11.30  14.41     95  +10.60 1 3 1 3 1     0    0 0.74 -1.58 ----- 14.4 14.4 171.8 20.6 13.2 -5.5 13.1 -5.2 12.9 -5.3 13.3 -6.2
2025-12-25T02:59:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T02:59:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T02:59:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.041041
2025-12-25T02:59:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T02:59:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T02:59:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T02:59:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T02:59:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T02:59:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:59:20', tmtdew=0.36, humidity=97.48, cloud=0.0, wind=20.26, temperature=11.34, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:59:05.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T02:59:51.872 [DEBUG] [Thread-3886] [transport.py] [_log()] EOF in transport thread
2025-12-25T02:59:51.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T02:59:51.976 [DEBUG] [Thread-3889] [transport.py] [_log()] starting thread (client mode): 0xb6b173a0
2025-12-25T02:59:51.977 [DEBUG] [Thread-3889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T02:59:51.991 [DEBUG] [Thread-3889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T02:59:51.991 [INFO] [Thread-3889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T02:59:51.999 [DEBUG] [Thread-3889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T02:59:51.999 [DEBUG] [Thread-3889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T02:59:51.999 [DEBUG] [Thread-3889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T02:59:51.999 [DEBUG] [Thread-3889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:59:51.999 [DEBUG] [Thread-3889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T02:59:51.999 [DEBUG] [Thread-3889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] client lang: <none>
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] server lang: <none>
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] kex follows: False
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T02:59:52.000 [DEBUG] [Thread-3889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T02:59:52.001 [DEBUG] [Thread-3889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T02:59:52.001 [DEBUG] [Thread-3889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T02:59:52.001 [DEBUG] [Thread-3889] [transport.py] [_log()] Compression: none
2025-12-25T02:59:52.001 [DEBUG] [Thread-3889] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T02:59:52.057 [DEBUG] [Thread-3889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T02:59:52.058 [DEBUG] [Thread-3889] [transport.py] [_log()] Switch to new keys ...
2025-12-25T02:59:52.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T02:59:52.060 [DEBUG] [Thread-3889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T02:59:52.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T02:59:52.114 [DEBUG] [Thread-3889] [transport.py] [_log()] userauth is OK
2025-12-25T02:59:52.115 [DEBUG] [Thread-3889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T02:59:52.115 [DEBUG] [Thread-3889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T02:59:52.115 [DEBUG] [Thread-3889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T02:59:52.115 [DEBUG] [Thread-3889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T02:59:52.134 [INFO] [Thread-3889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T02:59:52.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T02:59:52.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T02:59:52.964 [DEBUG] [Thread-3889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T02:59:52.965 [DEBUG] [Thread-3889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T02:59:53.015 [DEBUG] [Thread-3889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T02:59:53.015 [DEBUG] [Thread-3889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T02:59:53.029 [DEBUG] [Thread-3889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T02:59:53.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T02:59:53.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T02:59:53.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T02:59:53.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T02:59:53.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T02:59:53.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T02:59:53.071 [DEBUG] [Thread-3889] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:00:03.183 [DEBUG] [Thread-3891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:00:18.235 [DEBUG] [Thread-3892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:00:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:00:23.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:00:23.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:00:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 2, 59, 52), 0.35, 97.5, 0.0, 21.01, 11.39, 2, 2, 2, 2, 0, 0),)
2025-12-25T03:00:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 02:59:52
2025-12-25T03:00:23.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:00:24.068 [DEBUG] [Thread-3893] [transport.py] [_log()] starting thread (client mode): 0xb6b23130
2025-12-25T03:00:24.068 [DEBUG] [Thread-3893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:00:24.089 [DEBUG] [Thread-3893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:00:24.089 [INFO] [Thread-3893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] client lang: <none>
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] server lang: <none>
2025-12-25T03:00:24.092 [DEBUG] [Thread-3893] [transport.py] [_log()] kex follows: False
2025-12-25T03:00:24.093 [DEBUG] [Thread-3893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:00:24.093 [DEBUG] [Thread-3893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:00:24.093 [DEBUG] [Thread-3893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:00:24.093 [DEBUG] [Thread-3893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:00:24.093 [DEBUG] [Thread-3893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:00:24.093 [DEBUG] [Thread-3893] [transport.py] [_log()] Compression: none
2025-12-25T03:00:24.093 [DEBUG] [Thread-3893] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:00:24.110 [DEBUG] [Thread-3893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:00:24.111 [DEBUG] [Thread-3893] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:00:24.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:00:24.111 [DEBUG] [Thread-3893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:00:24.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:00:24.113 [DEBUG] [Thread-3893] [transport.py] [_log()] userauth is OK
2025-12-25T03:00:24.113 [DEBUG] [Thread-3893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:00:24.113 [DEBUG] [Thread-3893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:00:24.113 [DEBUG] [Thread-3893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:00:24.113 [DEBUG] [Thread-3893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:00:24.135 [INFO] [Thread-3893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:00:24.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:00:24.933 [DEBUG] [Thread-3893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:00:24.933 [DEBUG] [Thread-3893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:00:24.934 [DEBUG] [Thread-3893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:00:24.974 [DEBUG] [Thread-3893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:00:24.974 [DEBUG] [Thread-3893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:00:24.977 [DEBUG] [Thread-3893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:00:24.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:00:24.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:00:24.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:00:24.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:00:24.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:00:25.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:00:25.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:00:25.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:00:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:00:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.041388 -999.00  +11.30  12.47     95  +10.60 1 3 1 3 1     0    0 0.73 -2.09 ----- 17.6 12.5 151.4 18.6 13.3 -4.8 13.1 -5.3 12.9 -4.4 13.3 -3.8
2025-12-25T03:00:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:00:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:00:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.041388
2025-12-25T03:00:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:00:25.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:00:25.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:00:25.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:00:25.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:00:25.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T02:59:52', tmtdew=0.35, humidity=97.5, cloud=0.0, wind=21.01, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T00:59:35.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:00:25.005 [DEBUG] [Thread-3893] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:00:25.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:00:25.101 [DEBUG] [Thread-3896] [transport.py] [_log()] starting thread (client mode): 0xb6b23940
2025-12-25T03:00:25.101 [DEBUG] [Thread-3896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:00:25.115 [DEBUG] [Thread-3896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:00:25.116 [INFO] [Thread-3896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:00:25.123 [DEBUG] [Thread-3896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:00:25.123 [DEBUG] [Thread-3896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:00:25.123 [DEBUG] [Thread-3896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:00:25.123 [DEBUG] [Thread-3896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] client lang: <none>
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] server lang: <none>
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] kex follows: False
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:00:25.124 [DEBUG] [Thread-3896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:00:25.125 [DEBUG] [Thread-3896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:00:25.125 [DEBUG] [Thread-3896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:00:25.125 [DEBUG] [Thread-3896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:00:25.125 [DEBUG] [Thread-3896] [transport.py] [_log()] Compression: none
2025-12-25T03:00:25.125 [DEBUG] [Thread-3896] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:00:25.180 [DEBUG] [Thread-3896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:00:25.180 [DEBUG] [Thread-3896] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:00:25.180 [DEBUG] [Thread-3896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:00:25.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:00:25.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:00:25.237 [DEBUG] [Thread-3896] [transport.py] [_log()] userauth is OK
2025-12-25T03:00:25.237 [DEBUG] [Thread-3896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:00:25.237 [DEBUG] [Thread-3896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:00:25.237 [DEBUG] [Thread-3896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:00:25.237 [DEBUG] [Thread-3896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:00:25.251 [INFO] [Thread-3896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:00:25.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:00:25.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:00:26.084 [DEBUG] [Thread-3896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:00:26.084 [DEBUG] [Thread-3896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:00:26.132 [DEBUG] [Thread-3896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:00:26.132 [DEBUG] [Thread-3896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:00:26.141 [DEBUG] [Thread-3896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:00:26.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:00:26.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')
2025-12-25T03:00:26.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
2025-12-25T03:00:26.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:00:26.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:00:26.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:00:26.173 [DEBUG] [Thread-3896] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:00:30.509 [DEBUG] [Thread-3898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:00:33.273 [DEBUG] [Thread-3899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:00:48.325 [DEBUG] [Thread-3900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:00:48.978 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:00:48.979 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:00:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:00:56.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:00:56.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:00:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 0, 24), 0.36, 97.46, 0.0, 21.07, 11.37, 2, 2, 2, 2, 0, 0),)
2025-12-25T03:00:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:00:24
2025-12-25T03:00:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:00:57.166 [DEBUG] [Thread-3901] [transport.py] [_log()] starting thread (client mode): 0xb6b29e10
2025-12-25T03:00:57.166 [DEBUG] [Thread-3901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:00:57.187 [DEBUG] [Thread-3901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:00:57.187 [INFO] [Thread-3901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] client lang: <none>
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] server lang: <none>
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] kex follows: False
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] Compression: none
2025-12-25T03:00:57.190 [DEBUG] [Thread-3901] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:00:57.203 [DEBUG] [Thread-3901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:00:57.203 [DEBUG] [Thread-3901] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:00:57.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:00:57.203 [DEBUG] [Thread-3901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:00:57.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:00:57.204 [DEBUG] [Thread-3901] [transport.py] [_log()] userauth is OK
2025-12-25T03:00:57.204 [DEBUG] [Thread-3901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:00:57.204 [DEBUG] [Thread-3901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:00:57.204 [DEBUG] [Thread-3901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:00:57.204 [DEBUG] [Thread-3901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:00:57.219 [INFO] [Thread-3901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:00:57.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:00:57.867 [DEBUG] [Thread-3901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:00:57.867 [DEBUG] [Thread-3901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:00:57.867 [DEBUG] [Thread-3901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:00:57.909 [DEBUG] [Thread-3901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:00:57.909 [DEBUG] [Thread-3901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:00:57.911 [DEBUG] [Thread-3901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:00:57.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:00:57.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:00:57.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:00:57.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:00:57.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:00:57.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:00:57.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.041735 -999.00  +11.40  12.32     95  +10.60 1 3 1 3 1     0    0 0.73 -2.16 ----- 11.7 12.3 153.2 20.8 13.3 -5.1 13.1 -3.6 12.9 -4.4 13.3 -4.5
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.041735
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:00:57.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:00:24', tmtdew=0.36, humidity=97.46, cloud=0.0, wind=21.07, temperature=11.37, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:00:05.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:00:57.930 [DEBUG] [Thread-3901] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:00:58.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:00:58.016 [DEBUG] [Thread-3904] [transport.py] [_log()] starting thread (client mode): 0xb6b2a320
2025-12-25T03:00:58.016 [DEBUG] [Thread-3904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:00:58.031 [DEBUG] [Thread-3904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:00:58.031 [INFO] [Thread-3904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:00:58.038 [DEBUG] [Thread-3904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:00:58.038 [DEBUG] [Thread-3904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:00:58.038 [DEBUG] [Thread-3904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:00:58.038 [DEBUG] [Thread-3904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] client lang: <none>
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] server lang: <none>
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] kex follows: False
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] Compression: none
2025-12-25T03:00:58.039 [DEBUG] [Thread-3904] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:00:58.098 [DEBUG] [Thread-3904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:00:58.098 [DEBUG] [Thread-3904] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:00:58.099 [DEBUG] [Thread-3904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:00:58.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:00:58.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:00:58.153 [DEBUG] [Thread-3904] [transport.py] [_log()] userauth is OK
2025-12-25T03:00:58.153 [DEBUG] [Thread-3904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:00:58.153 [DEBUG] [Thread-3904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:00:58.153 [DEBUG] [Thread-3904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:00:58.153 [DEBUG] [Thread-3904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:00:58.167 [INFO] [Thread-3904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:00:58.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:00:58.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:00:58.988 [DEBUG] [Thread-3904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:00:58.988 [DEBUG] [Thread-3904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:00:59.035 [DEBUG] [Thread-3904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:00:59.035 [DEBUG] [Thread-3904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:00:59.044 [DEBUG] [Thread-3904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:00:59.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:00:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:00:59.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:00:59.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:00:59.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:00:59.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:00:59.076 [DEBUG] [Thread-3904] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:01:03.361 [DEBUG] [Thread-3906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:01:18.411 [DEBUG] [Thread-3907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:01:29.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:01:29.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:01:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:01:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 0, 56), 0.35, 97.5, 0.0, 16.2, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:01:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:00:56
2025-12-25T03:01:30.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:01:30.168 [DEBUG] [Thread-3908] [transport.py] [_log()] starting thread (client mode): 0xb6b15480
2025-12-25T03:01:30.168 [DEBUG] [Thread-3908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:01:30.188 [DEBUG] [Thread-3908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:01:30.188 [INFO] [Thread-3908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] client lang: <none>
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] server lang: <none>
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] kex follows: False
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:01:30.191 [DEBUG] [Thread-3908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:01:30.192 [DEBUG] [Thread-3908] [transport.py] [_log()] Compression: none
2025-12-25T03:01:30.192 [DEBUG] [Thread-3908] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:01:30.205 [DEBUG] [Thread-3908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:01:30.206 [DEBUG] [Thread-3908] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:01:30.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:01:30.206 [DEBUG] [Thread-3908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:01:30.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:01:30.207 [DEBUG] [Thread-3908] [transport.py] [_log()] userauth is OK
2025-12-25T03:01:30.207 [DEBUG] [Thread-3908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:01:30.207 [DEBUG] [Thread-3908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:01:30.207 [DEBUG] [Thread-3908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:01:30.207 [DEBUG] [Thread-3908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:01:30.216 [INFO] [Thread-3908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:01:30.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:01:30.580 [DEBUG] [Thread-3910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:01:31.005 [DEBUG] [Thread-3908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:01:31.005 [DEBUG] [Thread-3908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:01:31.005 [DEBUG] [Thread-3908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:01:31.045 [DEBUG] [Thread-3908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:01:31.045 [DEBUG] [Thread-3908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:01:31.047 [DEBUG] [Thread-3908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:01:31.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:01:31.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:01:31.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:01:31.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:01:31.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:01:31.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:01:31.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:01:31.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.042430 -999.00  +11.40  18.66     95  +10.60 1 3 1 3 1     0    0 0.72 -1.93 ----- 16.1 18.7 155.2 25.3 13.3 -4.7 13.2 -3.8 12.9 -4.5 13.3 -6.2
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.042430
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:01:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:00:56', tmtdew=0.35, humidity=97.5, cloud=0.0, wind=16.2, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:01:05.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:01:31.063 [DEBUG] [Thread-3908] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:01:31.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:01:31.145 [DEBUG] [Thread-3912] [transport.py] [_log()] starting thread (client mode): 0xb6b22a40
2025-12-25T03:01:31.145 [DEBUG] [Thread-3912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:01:31.160 [DEBUG] [Thread-3912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:01:31.160 [INFO] [Thread-3912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:01:31.168 [DEBUG] [Thread-3912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:01:31.168 [DEBUG] [Thread-3912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:01:31.168 [DEBUG] [Thread-3912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:01:31.168 [DEBUG] [Thread-3912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:01:31.168 [DEBUG] [Thread-3912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:01:31.168 [DEBUG] [Thread-3912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:01:31.168 [DEBUG] [Thread-3912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:01:31.168 [DEBUG] [Thread-3912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] client lang: <none>
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] server lang: <none>
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] kex follows: False
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:01:31.169 [DEBUG] [Thread-3912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:01:31.170 [DEBUG] [Thread-3912] [transport.py] [_log()] Compression: none
2025-12-25T03:01:31.170 [DEBUG] [Thread-3912] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:01:31.226 [DEBUG] [Thread-3912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:01:31.227 [DEBUG] [Thread-3912] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:01:31.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:01:31.228 [DEBUG] [Thread-3912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:01:31.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:01:31.282 [DEBUG] [Thread-3912] [transport.py] [_log()] userauth is OK
2025-12-25T03:01:31.283 [DEBUG] [Thread-3912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:01:31.283 [DEBUG] [Thread-3912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:01:31.283 [DEBUG] [Thread-3912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:01:31.283 [DEBUG] [Thread-3912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:01:31.301 [INFO] [Thread-3912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:01:31.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:01:31.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:01:32.144 [DEBUG] [Thread-3912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:01:32.144 [DEBUG] [Thread-3912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:01:32.192 [DEBUG] [Thread-3912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:01:32.192 [DEBUG] [Thread-3912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:01:32.201 [DEBUG] [Thread-3912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:01:32.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:01:32.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:01:32.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:01:32.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:01:32.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:01:32.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:01:32.237 [DEBUG] [Thread-3912] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:01:33.444 [DEBUG] [Thread-3914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:01:48.520 [DEBUG] [Thread-3915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:01:49.179 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:01:49.181 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:02:02.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:02:02.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:02:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:02:03.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 1, 28), 0.35, 97.55, 0.0, 18.39, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:02:03.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:01:28
2025-12-25T03:02:03.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:02:03.292 [DEBUG] [Thread-3916] [transport.py] [_log()] starting thread (client mode): 0xb955a560
2025-12-25T03:02:03.292 [DEBUG] [Thread-3916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:02:03.311 [DEBUG] [Thread-3916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:02:03.311 [INFO] [Thread-3916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] client lang: <none>
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] server lang: <none>
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] kex follows: False
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] Compression: none
2025-12-25T03:02:03.315 [DEBUG] [Thread-3916] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:02:03.332 [DEBUG] [Thread-3916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:02:03.333 [DEBUG] [Thread-3916] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:02:03.333 [DEBUG] [Thread-3916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:02:03.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:02:03.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:02:03.335 [DEBUG] [Thread-3916] [transport.py] [_log()] userauth is OK
2025-12-25T03:02:03.336 [DEBUG] [Thread-3916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:02:03.336 [DEBUG] [Thread-3916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:02:03.336 [DEBUG] [Thread-3916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:02:03.336 [DEBUG] [Thread-3916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:02:03.357 [INFO] [Thread-3916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:02:03.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:02:03.554 [DEBUG] [Thread-3918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:02:03.971 [DEBUG] [Thread-3916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:02:03.971 [DEBUG] [Thread-3916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:02:03.972 [DEBUG] [Thread-3916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:02:04.012 [DEBUG] [Thread-3916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:02:04.012 [DEBUG] [Thread-3916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:02:04.015 [DEBUG] [Thread-3916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:02:04.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:02:04.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:02:04.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:02:04.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:02:04.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:02:04.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:02:04.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:02:04.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:02:04.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:02:04.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.042777 -999.00  +11.30  13.98     95  +10.60 1 3 1 3 1     0    0 0.71 -2.26 ----- 15.7 14.0 167.6 17.4 13.3 -5.9 13.1 -6.3 12.9 -6.0 13.3 -6.1
2025-12-25T03:02:04.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:02:04.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:02:04.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.042777
2025-12-25T03:02:04.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:02:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:02:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:02:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:02:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:02:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:01:28', tmtdew=0.35, humidity=97.55, cloud=0.0, wind=18.39, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:01:35.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:02:04.040 [DEBUG] [Thread-3916] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:02:04.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:02:04.133 [DEBUG] [Thread-3920] [transport.py] [_log()] starting thread (client mode): 0xb9591990
2025-12-25T03:02:04.134 [DEBUG] [Thread-3920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:02:04.149 [DEBUG] [Thread-3920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:02:04.149 [INFO] [Thread-3920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:02:04.156 [DEBUG] [Thread-3920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] client lang: <none>
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] server lang: <none>
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] kex follows: False
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] Compression: none
2025-12-25T03:02:04.157 [DEBUG] [Thread-3920] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:02:04.215 [DEBUG] [Thread-3920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:02:04.216 [DEBUG] [Thread-3920] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:02:04.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:02:04.217 [DEBUG] [Thread-3920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:02:04.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:02:04.279 [DEBUG] [Thread-3920] [transport.py] [_log()] userauth is OK
2025-12-25T03:02:04.279 [DEBUG] [Thread-3920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:02:04.279 [DEBUG] [Thread-3920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:02:04.279 [DEBUG] [Thread-3920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:02:04.279 [DEBUG] [Thread-3920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:02:04.298 [INFO] [Thread-3920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:02:04.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:02:04.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:02:05.189 [DEBUG] [Thread-3920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:02:05.190 [DEBUG] [Thread-3920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:02:05.239 [DEBUG] [Thread-3920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:02:05.239 [DEBUG] [Thread-3920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:02:05.249 [DEBUG] [Thread-3920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:02:05.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:02:05.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:02:05.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') -> 00000000
2025-12-25T03:02:05.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:02:05.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:02:05.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:02:05.286 [DEBUG] [Thread-3920] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:02:18.593 [DEBUG] [Thread-3922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:02:30.644 [DEBUG] [Thread-3923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:02:33.641 [DEBUG] [Thread-3924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:02:35.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:02:35.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:02:35.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
2025-12-25T03:02:36.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 2), 0.35, 97.5, 0.0, 18.97, 11.37, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:02:36.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:02:00
2025-12-25T03:02:36.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:02:36.349 [DEBUG] [Thread-3925] [transport.py] [_log()] starting thread (client mode): 0xb6b36b30
2025-12-25T03:02:36.349 [DEBUG] [Thread-3925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:02:36.371 [DEBUG] [Thread-3925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:02:36.371 [INFO] [Thread-3925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] client lang: <none>
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] server lang: <none>
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] kex follows: False
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:02:36.374 [DEBUG] [Thread-3925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:02:36.375 [DEBUG] [Thread-3925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:02:36.375 [DEBUG] [Thread-3925] [transport.py] [_log()] Compression: none
2025-12-25T03:02:36.375 [DEBUG] [Thread-3925] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:02:36.390 [DEBUG] [Thread-3925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:02:36.390 [DEBUG] [Thread-3925] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:02:36.391 [DEBUG] [Thread-3925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:02:36.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:02:36.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:02:36.392 [DEBUG] [Thread-3925] [transport.py] [_log()] userauth is OK
2025-12-25T03:02:36.392 [DEBUG] [Thread-3925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:02:36.392 [DEBUG] [Thread-3925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:02:36.392 [DEBUG] [Thread-3925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:02:36.392 [DEBUG] [Thread-3925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:02:36.401 [INFO] [Thread-3925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:02:36.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:02:37.188 [DEBUG] [Thread-3925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:02:37.188 [DEBUG] [Thread-3925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:02:37.188 [DEBUG] [Thread-3925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:02:37.228 [DEBUG] [Thread-3925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:02:37.228 [DEBUG] [Thread-3925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:02:37.231 [DEBUG] [Thread-3925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:02:37.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:02:37.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:02:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:02:37.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:02:37.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:02:37.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:02:37.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.043124 -999.00  +11.40  11.30     95  +10.60 1 3 1 3 1     0    0 0.72 -2.31 ----- 12.8 11.3 152.8 16.1 13.3 -8.4 13.1 -6.2 12.9 -7.8 13.3 -6.5
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.043124
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:02:37.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:02:00', tmtdew=0.35, humidity=97.5, cloud=0.0, wind=18.97, temperature=11.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:02:05.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:02:37.252 [DEBUG] [Thread-3925] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:02:37.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:02:37.337 [DEBUG] [Thread-3928] [transport.py] [_log()] starting thread (client mode): 0xb9558b20
2025-12-25T03:02:37.337 [DEBUG] [Thread-3928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:02:37.352 [DEBUG] [Thread-3928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:02:37.352 [INFO] [Thread-3928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] client lang: <none>
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] server lang: <none>
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] kex follows: False
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] Compression: none
2025-12-25T03:02:37.360 [DEBUG] [Thread-3928] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:02:37.417 [DEBUG] [Thread-3928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:02:37.417 [DEBUG] [Thread-3928] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:02:37.418 [DEBUG] [Thread-3928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:02:37.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:02:37.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:02:37.474 [DEBUG] [Thread-3928] [transport.py] [_log()] userauth is OK
2025-12-25T03:02:37.474 [DEBUG] [Thread-3928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:02:37.474 [DEBUG] [Thread-3928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:02:37.474 [DEBUG] [Thread-3928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:02:37.474 [DEBUG] [Thread-3928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:02:37.488 [INFO] [Thread-3928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:02:37.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:02:37.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:02:38.318 [DEBUG] [Thread-3928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:02:38.318 [DEBUG] [Thread-3928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:02:38.366 [DEBUG] [Thread-3928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:02:38.366 [DEBUG] [Thread-3928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:02:38.374 [DEBUG] [Thread-3928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:02:38.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:02:38.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:02:38.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:02:38.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:02:38.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:02:38.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:02:38.405 [DEBUG] [Thread-3928] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:02:48.671 [DEBUG] [Thread-3930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:02:49.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:02:49.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:03:03.732 [DEBUG] [Thread-3931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:03:08.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:03:08.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:03:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:03:09.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 3, 4), 0.35, 97.5, 0.0, 18.47, 11.29, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:03:09.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:03:04
2025-12-25T03:03:09.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:03:09.417 [DEBUG] [Thread-3932] [transport.py] [_log()] starting thread (client mode): 0xb6b35720
2025-12-25T03:03:09.417 [DEBUG] [Thread-3932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:03:09.437 [DEBUG] [Thread-3932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:03:09.438 [INFO] [Thread-3932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:03:09.440 [DEBUG] [Thread-3932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] client lang: <none>
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] server lang: <none>
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] kex follows: False
2025-12-25T03:03:09.441 [DEBUG] [Thread-3932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:03:09.442 [DEBUG] [Thread-3932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:03:09.442 [DEBUG] [Thread-3932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:03:09.442 [DEBUG] [Thread-3932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:03:09.442 [DEBUG] [Thread-3932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:03:09.442 [DEBUG] [Thread-3932] [transport.py] [_log()] Compression: none
2025-12-25T03:03:09.442 [DEBUG] [Thread-3932] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:03:09.461 [DEBUG] [Thread-3932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:03:09.461 [DEBUG] [Thread-3932] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:03:09.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:03:09.462 [DEBUG] [Thread-3932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:03:09.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:03:09.464 [DEBUG] [Thread-3932] [transport.py] [_log()] userauth is OK
2025-12-25T03:03:09.464 [DEBUG] [Thread-3932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:03:09.464 [DEBUG] [Thread-3932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:03:09.465 [DEBUG] [Thread-3932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:03:09.465 [DEBUG] [Thread-3932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:03:09.500 [INFO] [Thread-3932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:03:09.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:03:10.168 [DEBUG] [Thread-3932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:03:10.168 [DEBUG] [Thread-3932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:03:10.168 [DEBUG] [Thread-3932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:03:10.209 [DEBUG] [Thread-3932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:03:10.209 [DEBUG] [Thread-3932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:03:10.212 [DEBUG] [Thread-3932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:03:10.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:03:10.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:03:10.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:03:10.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:03:10.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:03:10.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:03:10.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:03:10.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:03:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:03:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.043471 -999.00  +11.30  11.28     95  +10.60 1 3 1 3 1     0    0 0.71 -2.28 Z.... 13.0 11.3 156.2 19.1 13.2 -6.2 13.1 -5.8 12.9 -5.8 13.2 -7.3
2025-12-25T03:03:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:03:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:03:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.043471
2025-12-25T03:03:10.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:03:10.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:03:10.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:03:10.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:03:10.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:03:10.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:03:04', tmtdew=0.35, humidity=97.5, cloud=0.0, wind=18.47, temperature=11.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:02:35.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:03:10.238 [DEBUG] [Thread-3932] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:03:10.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:03:10.331 [DEBUG] [Thread-3935] [transport.py] [_log()] starting thread (client mode): 0xb6b371c0
2025-12-25T03:03:10.331 [DEBUG] [Thread-3935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:03:10.352 [DEBUG] [Thread-3935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:03:10.352 [INFO] [Thread-3935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:03:10.359 [DEBUG] [Thread-3935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] client lang: <none>
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] server lang: <none>
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] kex follows: False
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] Compression: none
2025-12-25T03:03:10.360 [DEBUG] [Thread-3935] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:03:10.420 [DEBUG] [Thread-3935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:03:10.420 [DEBUG] [Thread-3935] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:03:10.421 [DEBUG] [Thread-3935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:03:10.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:03:10.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:03:10.480 [DEBUG] [Thread-3935] [transport.py] [_log()] userauth is OK
2025-12-25T03:03:10.480 [DEBUG] [Thread-3935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:03:10.480 [DEBUG] [Thread-3935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:03:10.481 [DEBUG] [Thread-3935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:03:10.481 [DEBUG] [Thread-3935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:03:10.499 [INFO] [Thread-3935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:03:10.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:03:10.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:03:11.343 [DEBUG] [Thread-3935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:03:11.344 [DEBUG] [Thread-3935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:03:11.391 [DEBUG] [Thread-3935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:03:11.391 [DEBUG] [Thread-3935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:03:11.400 [DEBUG] [Thread-3935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:03:11.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:03:11.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:03: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
2025-12-25T03:03:11.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:03:11.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:03:11.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:03:11.440 [DEBUG] [Thread-3935] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:03:18.762 [DEBUG] [Thread-3937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:03:30.699 [DEBUG] [Thread-3938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:03:33.813 [DEBUG] [Thread-3939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:03:41.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:03:41.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:03:41.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:03:42.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 3, 36), 0.35, 97.55, 0.0, 19.62, 11.37, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:03:42.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:03:36
2025-12-25T03:03:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:03:42.453 [DEBUG] [Thread-3940] [transport.py] [_log()] starting thread (client mode): 0xb95f33a0
2025-12-25T03:03:42.453 [DEBUG] [Thread-3940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:03:42.472 [DEBUG] [Thread-3940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:03:42.473 [INFO] [Thread-3940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:03:42.476 [DEBUG] [Thread-3940] [transport.py] [_log()] client lang: <none>
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] server lang: <none>
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] kex follows: False
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] Compression: none
2025-12-25T03:03:42.477 [DEBUG] [Thread-3940] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:03:42.493 [DEBUG] [Thread-3940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:03:42.493 [DEBUG] [Thread-3940] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:03:42.494 [DEBUG] [Thread-3940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:03:42.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:03:42.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:03:42.496 [DEBUG] [Thread-3940] [transport.py] [_log()] userauth is OK
2025-12-25T03:03:42.496 [DEBUG] [Thread-3940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:03:42.497 [DEBUG] [Thread-3940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:03:42.497 [DEBUG] [Thread-3940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:03:42.497 [DEBUG] [Thread-3940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:03:42.515 [INFO] [Thread-3940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:03:42.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:03:43.327 [DEBUG] [Thread-3940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:03:43.327 [DEBUG] [Thread-3940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:03:43.328 [DEBUG] [Thread-3940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:03:43.368 [DEBUG] [Thread-3940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:03:43.368 [DEBUG] [Thread-3940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:03:43.372 [DEBUG] [Thread-3940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:03:43.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:03:43.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:03:43.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:03:43.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:03:43.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:03:43.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:03:43.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:03:43.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:03:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:03:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.043819 -999.00  +11.30  10.56     95  +10.60 1 3 1 3 1     0    0 0.71 -2.63 z...w 12.8 10.6 157.8 17.6 13.2 -7.2 13.1 -7.0 12.9 -6.5 13.2 -7.3
2025-12-25T03:03:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:03:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:03:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.043819
2025-12-25T03:03:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:03:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:03:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:03:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:03:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:03:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:03:36', tmtdew=0.35, humidity=97.55, cloud=0.0, wind=19.62, temperature=11.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:03:05.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:03:43.398 [DEBUG] [Thread-3940] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:03:43.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:03:43.480 [DEBUG] [Thread-3943] [transport.py] [_log()] starting thread (client mode): 0xb6b34250
2025-12-25T03:03:43.481 [DEBUG] [Thread-3943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:03:43.495 [DEBUG] [Thread-3943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:03:43.495 [INFO] [Thread-3943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:03:43.503 [DEBUG] [Thread-3943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:03:43.503 [DEBUG] [Thread-3943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:03:43.503 [DEBUG] [Thread-3943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:03:43.503 [DEBUG] [Thread-3943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:03:43.503 [DEBUG] [Thread-3943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:03:43.503 [DEBUG] [Thread-3943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] client lang: <none>
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] server lang: <none>
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] kex follows: False
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] Compression: none
2025-12-25T03:03:43.504 [DEBUG] [Thread-3943] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:03:43.564 [DEBUG] [Thread-3943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:03:43.565 [DEBUG] [Thread-3943] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:03:43.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:03:43.566 [DEBUG] [Thread-3943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:03:43.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:03:43.620 [DEBUG] [Thread-3943] [transport.py] [_log()] userauth is OK
2025-12-25T03:03:43.620 [DEBUG] [Thread-3943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:03:43.620 [DEBUG] [Thread-3943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:03:43.620 [DEBUG] [Thread-3943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:03:43.620 [DEBUG] [Thread-3943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:03:43.639 [INFO] [Thread-3943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:03:43.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:03:43.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:03:44.454 [DEBUG] [Thread-3943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:03:44.454 [DEBUG] [Thread-3943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:03:44.502 [DEBUG] [Thread-3943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:03:44.502 [DEBUG] [Thread-3943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:03:44.511 [DEBUG] [Thread-3943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:03:44.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:03:44.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:03:44.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:03:44.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:03:44.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:03:44.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:03:44.545 [DEBUG] [Thread-3943] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:03:48.846 [DEBUG] [Thread-3945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:03:49.591 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:03:49.593 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:04:03.897 [DEBUG] [Thread-3946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:04:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:04:14.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:04:14.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:04:15.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 4, 8), 0.35, 97.55, 0.0, 20.15, 11.37, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:04:15.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:04:08
2025-12-25T03:04:15.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:04:15.571 [DEBUG] [Thread-3947] [transport.py] [_log()] starting thread (client mode): 0xb6b34910
2025-12-25T03:04:15.571 [DEBUG] [Thread-3947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:04:15.593 [DEBUG] [Thread-3947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:04:15.593 [INFO] [Thread-3947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:04:15.596 [DEBUG] [Thread-3947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:04:15.596 [DEBUG] [Thread-3947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:04:15.596 [DEBUG] [Thread-3947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:04:15.596 [DEBUG] [Thread-3947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:04:15.596 [DEBUG] [Thread-3947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] client lang: <none>
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] server lang: <none>
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] kex follows: False
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:04:15.597 [DEBUG] [Thread-3947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:04:15.598 [DEBUG] [Thread-3947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:04:15.598 [DEBUG] [Thread-3947] [transport.py] [_log()] Compression: none
2025-12-25T03:04:15.598 [DEBUG] [Thread-3947] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:04:15.617 [DEBUG] [Thread-3947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:04:15.618 [DEBUG] [Thread-3947] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:04:15.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:04:15.619 [DEBUG] [Thread-3947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:04:15.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:04:15.621 [DEBUG] [Thread-3947] [transport.py] [_log()] userauth is OK
2025-12-25T03:04:15.621 [DEBUG] [Thread-3947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:04:15.622 [DEBUG] [Thread-3947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:04:15.622 [DEBUG] [Thread-3947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:04:15.622 [DEBUG] [Thread-3947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:04:15.658 [INFO] [Thread-3947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:04:15.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:04:16.281 [DEBUG] [Thread-3947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:04:16.282 [DEBUG] [Thread-3947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:04:16.282 [DEBUG] [Thread-3947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:04:16.323 [DEBUG] [Thread-3947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:04:16.323 [DEBUG] [Thread-3947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:04:16.326 [DEBUG] [Thread-3947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:04:16.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:04:16.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:04:16.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:04:16.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:04:16.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:04:16.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:04:16.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:04:16.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:04:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:04:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.044166 -999.00  +11.40  11.11     95  +10.60 1 3 1 3 1     0    0 0.70 -2.42 z...w 13.8 11.1 159.6 16.2 13.3 -10.8 13.1 -8.1 12.9 -9.8 13.3 -8.1
2025-12-25T03:04:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:04:16.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:04:16.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.044166
2025-12-25T03:04:16.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:04:16.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:04:16.353 [DEBUG] [Thread-3947] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:04:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:04:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:04:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:04:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:04:08', tmtdew=0.35, humidity=97.55, cloud=0.0, wind=20.15, temperature=11.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:03:35.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:04:16.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:04:16.443 [DEBUG] [Thread-3950] [transport.py] [_log()] starting thread (client mode): 0xb6b34e50
2025-12-25T03:04:16.443 [DEBUG] [Thread-3950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:04:16.458 [DEBUG] [Thread-3950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:04:16.458 [INFO] [Thread-3950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:04:16.466 [DEBUG] [Thread-3950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:04:16.466 [DEBUG] [Thread-3950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:04:16.466 [DEBUG] [Thread-3950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:04:16.466 [DEBUG] [Thread-3950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:04:16.466 [DEBUG] [Thread-3950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] client lang: <none>
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] server lang: <none>
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] kex follows: False
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] Compression: none
2025-12-25T03:04:16.467 [DEBUG] [Thread-3950] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:04:16.524 [DEBUG] [Thread-3950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:04:16.524 [DEBUG] [Thread-3950] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:04:16.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:04:16.526 [DEBUG] [Thread-3950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:04:16.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:04:16.580 [DEBUG] [Thread-3950] [transport.py] [_log()] userauth is OK
2025-12-25T03:04:16.581 [DEBUG] [Thread-3950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:04:16.581 [DEBUG] [Thread-3950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:04:16.581 [DEBUG] [Thread-3950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:04:16.581 [DEBUG] [Thread-3950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:04:16.601 [INFO] [Thread-3950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:04:16.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:04:16.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:04:17.453 [DEBUG] [Thread-3950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:04:17.454 [DEBUG] [Thread-3950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:04:17.502 [DEBUG] [Thread-3950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:04:17.502 [DEBUG] [Thread-3950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:04:17.511 [DEBUG] [Thread-3950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:04:17.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:04: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')
2025-12-25T03:04: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
2025-12-25T03:04:17.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:04:17.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:04:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:04:17.549 [DEBUG] [Thread-3950] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:04:18.932 [DEBUG] [Thread-3952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:04:30.756 [DEBUG] [Thread-3953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:04:33.977 [DEBUG] [Thread-3954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:04:47.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:04:47.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:04:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:04:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 4, 40), 0.35, 97.55, 0.0, 16.97, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:04:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:04:40
2025-12-25T03:04:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:04:48.593 [DEBUG] [Thread-3955] [transport.py] [_log()] starting thread (client mode): 0xb6b35a20
2025-12-25T03:04:48.593 [DEBUG] [Thread-3955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:04:48.609 [DEBUG] [Thread-3955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:04:48.609 [INFO] [Thread-3955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:04:48.612 [DEBUG] [Thread-3955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] client lang: <none>
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] server lang: <none>
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] kex follows: False
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] Compression: none
2025-12-25T03:04:48.613 [DEBUG] [Thread-3955] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:04:48.634 [DEBUG] [Thread-3955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:04:48.634 [DEBUG] [Thread-3955] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:04:48.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:04:48.635 [DEBUG] [Thread-3955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:04:48.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:04:48.638 [DEBUG] [Thread-3955] [transport.py] [_log()] userauth is OK
2025-12-25T03:04:48.638 [DEBUG] [Thread-3955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:04:48.638 [DEBUG] [Thread-3955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:04:48.638 [DEBUG] [Thread-3955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:04:48.638 [DEBUG] [Thread-3955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:04:48.673 [INFO] [Thread-3955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:04:48.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:04:49.006 [DEBUG] [Thread-3957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:04:49.337 [DEBUG] [Thread-3955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:04:49.337 [DEBUG] [Thread-3955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:04:49.338 [DEBUG] [Thread-3955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:04:49.379 [DEBUG] [Thread-3955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:04:49.379 [DEBUG] [Thread-3955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:04:49.382 [DEBUG] [Thread-3955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:04:49.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:04:49.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:04:49.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:04:49.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:04:49.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:04:49.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:04:49.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:04:49.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:04:49.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:04:49.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.044513 -999.00  +11.30  12.30     95  +10.60 1 3 1 3 1     0    0 0.71 -2.35 Zn... 16.6 12.3 147.4 21.5 13.2 -8.3 13.1 -8.0 12.9 -7.5 13.2 -9.4
2025-12-25T03:04:49.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:04:49.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:04:49.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.044513
2025-12-25T03:04:49.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:04:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:04:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:04:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:04:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:04:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:04:40', tmtdew=0.35, humidity=97.55, cloud=0.0, wind=16.97, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:04:05.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:04:49.407 [DEBUG] [Thread-3955] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:04:49.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:04:49.504 [DEBUG] [Thread-3959] [transport.py] [_log()] starting thread (client mode): 0xb6b36c80
2025-12-25T03:04:49.504 [DEBUG] [Thread-3959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:04:49.518 [DEBUG] [Thread-3959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:04:49.518 [INFO] [Thread-3959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:04:49.526 [DEBUG] [Thread-3959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:04:49.526 [DEBUG] [Thread-3959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:04:49.526 [DEBUG] [Thread-3959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:04:49.526 [DEBUG] [Thread-3959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:04:49.526 [DEBUG] [Thread-3959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:04:49.526 [DEBUG] [Thread-3959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:04:49.526 [DEBUG] [Thread-3959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] client lang: <none>
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] server lang: <none>
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] kex follows: False
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] Compression: none
2025-12-25T03:04:49.527 [DEBUG] [Thread-3959] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:04:49.585 [DEBUG] [Thread-3959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:04:49.585 [DEBUG] [Thread-3959] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:04:49.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:04:49.587 [DEBUG] [Thread-3959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:04:49.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:04:49.640 [DEBUG] [Thread-3959] [transport.py] [_log()] userauth is OK
2025-12-25T03:04:49.640 [DEBUG] [Thread-3959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:04:49.640 [DEBUG] [Thread-3959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:04:49.640 [DEBUG] [Thread-3959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:04:49.640 [DEBUG] [Thread-3959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:04:49.658 [INFO] [Thread-3959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:04:49.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:04:49.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:04:49.794 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:04:49.795 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:04:50.507 [DEBUG] [Thread-3959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:04:50.507 [DEBUG] [Thread-3959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:04:50.555 [DEBUG] [Thread-3959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:04:50.555 [DEBUG] [Thread-3959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:04:50.564 [DEBUG] [Thread-3959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:04:50.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:04:50.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:04:50.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:04:50.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:04:50.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:04:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:04:50.599 [DEBUG] [Thread-3959] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:05:04.046 [DEBUG] [Thread-3961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:05:19.093 [DEBUG] [Thread-3962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:05:20.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:05:20.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:05:20.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:05:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 5, 13), 0.34, 97.56, 0.0, 16.22, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:05:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:05:13
2025-12-25T03:05:21.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:05:21.577 [DEBUG] [Thread-3963] [transport.py] [_log()] starting thread (client mode): 0xb955b550
2025-12-25T03:05:21.577 [DEBUG] [Thread-3963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:05:21.598 [DEBUG] [Thread-3963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:05:21.598 [INFO] [Thread-3963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] client lang: <none>
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] server lang: <none>
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] kex follows: False
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] Compression: none
2025-12-25T03:05:21.601 [DEBUG] [Thread-3963] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:05:21.620 [DEBUG] [Thread-3963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:05:21.620 [DEBUG] [Thread-3963] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:05:21.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:05:21.621 [DEBUG] [Thread-3963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:05:21.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:05:21.623 [DEBUG] [Thread-3963] [transport.py] [_log()] userauth is OK
2025-12-25T03:05:21.624 [DEBUG] [Thread-3963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:05:21.624 [DEBUG] [Thread-3963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:05:21.624 [DEBUG] [Thread-3963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:05:21.624 [DEBUG] [Thread-3963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:05:21.640 [INFO] [Thread-3963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:05:21.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:05:22.268 [DEBUG] [Thread-3963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:05:22.268 [DEBUG] [Thread-3963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:05:22.269 [DEBUG] [Thread-3963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:05:22.309 [DEBUG] [Thread-3963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:05:22.309 [DEBUG] [Thread-3963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:05:22.313 [DEBUG] [Thread-3963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:05:22.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:05:22.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:05:22.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:05:22.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:05:22.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:05:22.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:05:22.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:05:22.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:05:22.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:05:22.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.045207 -999.00  +11.30  16.61     95  +10.60 1 3 1 3 1     0    0 0.68 -2.96 ZN..W 16.3 16.6 170.4 21.5 13.2 -6.5 13.1 -6.1 12.9 -6.4 13.2 -6.9
2025-12-25T03:05:22.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:05:22.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:05:22.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.045207
2025-12-25T03:05:22.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:05:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:05:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:05:22.338 [DEBUG] [Thread-3963] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:05:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:05:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:05:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:05:13', tmtdew=0.34, humidity=97.56, cloud=0.0, wind=16.22, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:05:05.885', atlas_cloud=3, atlas_rain=1, zp_data=[2.2387499999999996, nan, 2.646750000000001, 2.628499999999999, 2.7335000000000003, 2.258250000000001, 1.5694999999999997, 1.9282500000000002, nan, nan, 3.315249999999999, nan, nan, 1.92725, 1.857499999999999, 2.323999999999999, nan, nan, nan, nan, nan, 1.622749999999999, 1.8152500000000007, nan, nan, nan, nan, nan, nan, 1.9670000000000005, 2.902000000000001, nan, nan], zp_timestamp='2025-12-25T00:40:00')
2025-12-25T03:05:22.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:05:22.435 [DEBUG] [Thread-3966] [transport.py] [_log()] starting thread (client mode): 0xb95593f0
2025-12-25T03:05:22.435 [DEBUG] [Thread-3966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:05:22.451 [DEBUG] [Thread-3966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:05:22.451 [INFO] [Thread-3966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] client lang: <none>
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] server lang: <none>
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] kex follows: False
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:05:22.459 [DEBUG] [Thread-3966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:05:22.460 [DEBUG] [Thread-3966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:05:22.460 [DEBUG] [Thread-3966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:05:22.460 [DEBUG] [Thread-3966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:05:22.460 [DEBUG] [Thread-3966] [transport.py] [_log()] Compression: none
2025-12-25T03:05:22.460 [DEBUG] [Thread-3966] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:05:22.517 [DEBUG] [Thread-3966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:05:22.517 [DEBUG] [Thread-3966] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:05:22.518 [DEBUG] [Thread-3966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:05:22.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:05:22.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:05:22.573 [DEBUG] [Thread-3966] [transport.py] [_log()] userauth is OK
2025-12-25T03:05:22.573 [DEBUG] [Thread-3966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:05:22.573 [DEBUG] [Thread-3966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:05:22.573 [DEBUG] [Thread-3966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:05:22.573 [DEBUG] [Thread-3966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:05:22.595 [INFO] [Thread-3966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:05:22.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:05:22.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:05:23.468 [DEBUG] [Thread-3966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:05:23.468 [DEBUG] [Thread-3966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:05:23.516 [DEBUG] [Thread-3966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:05:23.516 [DEBUG] [Thread-3966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:05:23.525 [DEBUG] [Thread-3966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:05:23.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:05:23.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:05:23.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:05:23.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:05:23.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:05:23.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:05:23.563 [DEBUG] [Thread-3966] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:05:30.813 [DEBUG] [Thread-3968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:05:34.132 [DEBUG] [Thread-3969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:05:49.191 [DEBUG] [Thread-3970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:05:49.997 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:05:49.998 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:05:53.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:05:53.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:05:53.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
2025-12-25T03:05:54.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 5, 45), 0.35, 97.51, 0.0, 18.35, 11.32, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:05:54.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:05:45
2025-12-25T03:05:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:05:54.593 [DEBUG] [Thread-3971] [transport.py] [_log()] starting thread (client mode): 0xb6b355a0
2025-12-25T03:05:54.593 [DEBUG] [Thread-3971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:05:54.609 [DEBUG] [Thread-3971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:05:54.609 [INFO] [Thread-3971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:05:54.612 [DEBUG] [Thread-3971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:05:54.612 [DEBUG] [Thread-3971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:05:54.612 [DEBUG] [Thread-3971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:05:54.612 [DEBUG] [Thread-3971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] client lang: <none>
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] server lang: <none>
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] kex follows: False
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] Compression: none
2025-12-25T03:05:54.613 [DEBUG] [Thread-3971] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:05:54.630 [DEBUG] [Thread-3971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:05:54.630 [DEBUG] [Thread-3971] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:05:54.631 [DEBUG] [Thread-3971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:05:54.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:05:54.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:05:54.632 [DEBUG] [Thread-3971] [transport.py] [_log()] userauth is OK
2025-12-25T03:05:54.633 [DEBUG] [Thread-3971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:05:54.633 [DEBUG] [Thread-3971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:05:54.633 [DEBUG] [Thread-3971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:05:54.633 [DEBUG] [Thread-3971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:05:54.653 [INFO] [Thread-3971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:05:54.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:05:55.269 [DEBUG] [Thread-3971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:05:55.269 [DEBUG] [Thread-3971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:05:55.269 [DEBUG] [Thread-3971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:05:55.310 [DEBUG] [Thread-3971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:05:55.310 [DEBUG] [Thread-3971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:05:55.314 [DEBUG] [Thread-3971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:05:55.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:05:55.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:05:55.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:05:55.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:05:55.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:05:55.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:05:55.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:05:55.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:05:55.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:05:55.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.045555 -999.00  +11.30  17.01     95  +10.60 1 3 1 3 1     0    0 0.68 -3.11 ----- 19.3 17.0 168.8 21.7 13.2 -5.8 13.0 -6.8 12.8 -5.9 13.2 -7.1
2025-12-25T03:05:55.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:05:55.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:05:55.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.045555
2025-12-25T03:05:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:05:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:05:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:05:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:05:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:05:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:05:45', tmtdew=0.35, humidity=97.51, cloud=0.0, wind=18.35, temperature=11.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:05:35.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:05:55.339 [DEBUG] [Thread-3971] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:05:55.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:05:55.432 [DEBUG] [Thread-3974] [transport.py] [_log()] starting thread (client mode): 0xb6b37640
2025-12-25T03:05:55.432 [DEBUG] [Thread-3974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:05:55.447 [DEBUG] [Thread-3974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:05:55.447 [INFO] [Thread-3974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:05:55.454 [DEBUG] [Thread-3974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:05:55.455 [DEBUG] [Thread-3974] [transport.py] [_log()] client lang: <none>
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] server lang: <none>
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] kex follows: False
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] Compression: none
2025-12-25T03:05:55.456 [DEBUG] [Thread-3974] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:05:55.513 [DEBUG] [Thread-3974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:05:55.513 [DEBUG] [Thread-3974] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:05:55.514 [DEBUG] [Thread-3974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:05:55.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:05:55.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:05:55.568 [DEBUG] [Thread-3974] [transport.py] [_log()] userauth is OK
2025-12-25T03:05:55.568 [DEBUG] [Thread-3974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:05:55.569 [DEBUG] [Thread-3974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:05:55.569 [DEBUG] [Thread-3974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:05:55.569 [DEBUG] [Thread-3974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:05:55.591 [INFO] [Thread-3974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:05:55.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:05:55.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:05:56.393 [DEBUG] [Thread-3974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:05:56.393 [DEBUG] [Thread-3974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:05:56.441 [DEBUG] [Thread-3974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:05:56.441 [DEBUG] [Thread-3974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:05:56.450 [DEBUG] [Thread-3974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:05:56.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:05:56.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:05:56.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:05:56.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:05:56.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:05:56.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:05:56.483 [DEBUG] [Thread-3974] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:06:04.220 [DEBUG] [Thread-3976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:06:19.273 [DEBUG] [Thread-3977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:06:26.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:06:26.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:06:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:06:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 6, 17), 0.34, 97.58, 0.0, 19.53, 11.37, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:06:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:06:17
2025-12-25T03:06:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:06:27.507 [DEBUG] [Thread-3978] [transport.py] [_log()] starting thread (client mode): 0xb6b35db0
2025-12-25T03:06:27.507 [DEBUG] [Thread-3978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:06:27.527 [DEBUG] [Thread-3978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:06:27.527 [INFO] [Thread-3978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] client lang: <none>
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] server lang: <none>
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] kex follows: False
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] Compression: none
2025-12-25T03:06:27.530 [DEBUG] [Thread-3978] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:06:27.547 [DEBUG] [Thread-3978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:06:27.547 [DEBUG] [Thread-3978] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:06:27.547 [DEBUG] [Thread-3978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:06:27.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:06:27.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:06:27.548 [DEBUG] [Thread-3978] [transport.py] [_log()] userauth is OK
2025-12-25T03:06:27.548 [DEBUG] [Thread-3978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:06:27.548 [DEBUG] [Thread-3978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:06:27.548 [DEBUG] [Thread-3978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:06:27.548 [DEBUG] [Thread-3978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:06:27.563 [INFO] [Thread-3978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:06:27.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:06:28.206 [DEBUG] [Thread-3978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:06:28.206 [DEBUG] [Thread-3978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:06:28.206 [DEBUG] [Thread-3978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:06:28.247 [DEBUG] [Thread-3978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:06:28.247 [DEBUG] [Thread-3978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:06:28.249 [DEBUG] [Thread-3978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:06:28.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:06:28.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:06:28.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:06:28.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:06:28.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:06:28.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:06:28.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:06:28.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.045902 -999.00  +11.30  13.82     95  +10.60 1 3 1 3 1     0    0 0.65 -3.48 ----- 17.4 13.8 143.8 22.4 13.2 -5.4 13.0 -5.2 12.8 -5.1 13.2 -5.8
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.045902
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:06:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:06:17', tmtdew=0.34, humidity=97.58, cloud=0.0, wind=19.53, temperature=11.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:06:05.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:06:28.267 [DEBUG] [Thread-3978] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:06:28.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:06:28.351 [DEBUG] [Thread-3981] [transport.py] [_log()] starting thread (client mode): 0xb6b37c70
2025-12-25T03:06:28.351 [DEBUG] [Thread-3981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:06:28.366 [DEBUG] [Thread-3981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:06:28.366 [INFO] [Thread-3981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] client lang: <none>
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] server lang: <none>
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] kex follows: False
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] Compression: none
2025-12-25T03:06:28.374 [DEBUG] [Thread-3981] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:06:28.431 [DEBUG] [Thread-3981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:06:28.432 [DEBUG] [Thread-3981] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:06:28.432 [DEBUG] [Thread-3981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:06:28.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:06:28.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:06:28.489 [DEBUG] [Thread-3981] [transport.py] [_log()] userauth is OK
2025-12-25T03:06:28.489 [DEBUG] [Thread-3981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:06:28.489 [DEBUG] [Thread-3981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:06:28.489 [DEBUG] [Thread-3981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:06:28.489 [DEBUG] [Thread-3981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:06:28.503 [INFO] [Thread-3981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:06:28.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:06:28.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:06:29.369 [DEBUG] [Thread-3981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:06:29.370 [DEBUG] [Thread-3981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:06:29.418 [DEBUG] [Thread-3981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:06:29.418 [DEBUG] [Thread-3981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:06:29.426 [DEBUG] [Thread-3981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:06:29.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:06:29.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:06:29.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:06:29.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:06:29.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:06:29.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:06:29.461 [DEBUG] [Thread-3981] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:06:30.873 [DEBUG] [Thread-3983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:06:34.302 [DEBUG] [Thread-3984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:06:49.353 [DEBUG] [Thread-3985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:06:50.198 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:06:50.200 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:06:59.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:06:59.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:06:59.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:07:00.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 6, 49), 0.35, 97.55, 0.0, 17.87, 11.34, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:07:00.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:06:49
2025-12-25T03:07:00.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:07:00.456 [DEBUG] [Thread-3986] [transport.py] [_log()] starting thread (client mode): 0xb955a9e0
2025-12-25T03:07:00.456 [DEBUG] [Thread-3986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:07:00.478 [DEBUG] [Thread-3986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:07:00.478 [INFO] [Thread-3986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] client lang: <none>
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] server lang: <none>
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] kex follows: False
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:07:00.481 [DEBUG] [Thread-3986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:07:00.482 [DEBUG] [Thread-3986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:07:00.482 [DEBUG] [Thread-3986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:07:00.482 [DEBUG] [Thread-3986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:07:00.482 [DEBUG] [Thread-3986] [transport.py] [_log()] Compression: none
2025-12-25T03:07:00.482 [DEBUG] [Thread-3986] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:07:00.491 [DEBUG] [Thread-3986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:07:00.491 [DEBUG] [Thread-3986] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:07:00.492 [DEBUG] [Thread-3986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:07:00.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:07:00.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:07:00.494 [DEBUG] [Thread-3986] [transport.py] [_log()] userauth is OK
2025-12-25T03:07:00.494 [DEBUG] [Thread-3986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:07:00.494 [DEBUG] [Thread-3986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:07:00.494 [DEBUG] [Thread-3986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:07:00.494 [DEBUG] [Thread-3986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:07:00.531 [INFO] [Thread-3986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:07:00.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:07:01.169 [DEBUG] [Thread-3986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:07:01.169 [DEBUG] [Thread-3986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:07:01.170 [DEBUG] [Thread-3986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:07:01.210 [DEBUG] [Thread-3986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:07:01.210 [DEBUG] [Thread-3986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:07:01.214 [DEBUG] [Thread-3986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:07:01.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:07:01.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:07:01.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:07:01.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:07:01.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:07:01.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:07:01.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:07:01.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:07:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:07:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.046249 -999.00  +11.30  13.05     95  +10.50 1 3 1 3 1     0    0 0.66 -3.21 ----- 20.3 13.1 153.4 21.3 13.2 -7.6 13.0 -6.8 12.9 -7.5 13.2 -6.4
2025-12-25T03:07:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:07:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:07:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.046249
2025-12-25T03:07:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:07:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:07:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:07:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:07:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:07:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:06:49', tmtdew=0.35, humidity=97.55, cloud=0.0, wind=17.87, temperature=11.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:06:35.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:07:01.241 [DEBUG] [Thread-3986] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:07:01.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:07:01.335 [DEBUG] [Thread-3989] [transport.py] [_log()] starting thread (client mode): 0xb95588e0
2025-12-25T03:07:01.335 [DEBUG] [Thread-3989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:07:01.349 [DEBUG] [Thread-3989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:07:01.350 [INFO] [Thread-3989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:07:01.357 [DEBUG] [Thread-3989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:07:01.357 [DEBUG] [Thread-3989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] client lang: <none>
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] server lang: <none>
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] kex follows: False
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] Compression: none
2025-12-25T03:07:01.358 [DEBUG] [Thread-3989] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:07:01.417 [DEBUG] [Thread-3989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:07:01.418 [DEBUG] [Thread-3989] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:07:01.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:07:01.419 [DEBUG] [Thread-3989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:07:01.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:07:01.474 [DEBUG] [Thread-3989] [transport.py] [_log()] userauth is OK
2025-12-25T03:07:01.474 [DEBUG] [Thread-3989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:07:01.474 [DEBUG] [Thread-3989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:07:01.474 [DEBUG] [Thread-3989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:07:01.475 [DEBUG] [Thread-3989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:07:01.493 [INFO] [Thread-3989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:07:01.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:07:01.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:07:02.402 [DEBUG] [Thread-3989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:07:02.402 [DEBUG] [Thread-3989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:07:02.450 [DEBUG] [Thread-3989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:07:02.450 [DEBUG] [Thread-3989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:07:02.460 [DEBUG] [Thread-3989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:07:02.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:07:02.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:07:02.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:07:02.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:07:02.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:07:02.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:07:02.498 [DEBUG] [Thread-3989] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:07:04.388 [DEBUG] [Thread-3991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:07:19.442 [DEBUG] [Thread-3992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:07:30.929 [DEBUG] [Thread-3993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:07:32.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:07:32.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:07:32.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:07:33.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 7, 21), 0.35, 97.55, 0.0, 18.03, 11.29, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:07:33.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:07:21
2025-12-25T03:07:33.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:07:33.494 [DEBUG] [Thread-3994] [transport.py] [_log()] starting thread (client mode): 0xb6b35ea0
2025-12-25T03:07:33.494 [DEBUG] [Thread-3994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:07:33.513 [DEBUG] [Thread-3994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:07:33.513 [INFO] [Thread-3994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] client lang: <none>
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] server lang: <none>
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] kex follows: False
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:07:33.515 [DEBUG] [Thread-3994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:07:33.516 [DEBUG] [Thread-3994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:07:33.516 [DEBUG] [Thread-3994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:07:33.516 [DEBUG] [Thread-3994] [transport.py] [_log()] Compression: none
2025-12-25T03:07:33.516 [DEBUG] [Thread-3994] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:07:33.532 [DEBUG] [Thread-3994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:07:33.533 [DEBUG] [Thread-3994] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:07:33.533 [DEBUG] [Thread-3994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:07:33.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:07:33.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:07:33.535 [DEBUG] [Thread-3994] [transport.py] [_log()] userauth is OK
2025-12-25T03:07:33.536 [DEBUG] [Thread-3994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:07:33.536 [DEBUG] [Thread-3994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:07:33.536 [DEBUG] [Thread-3994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:07:33.536 [DEBUG] [Thread-3994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:07:33.559 [INFO] [Thread-3994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:07:33.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:07:34.194 [DEBUG] [Thread-3994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:07:34.194 [DEBUG] [Thread-3994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:07:34.195 [DEBUG] [Thread-3994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:07:34.235 [DEBUG] [Thread-3994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:07:34.235 [DEBUG] [Thread-3994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:07:34.239 [DEBUG] [Thread-3994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:07:34.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:07:34.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:07:34.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:07:34.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:07:34.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:07:34.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:07:34.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:07:34.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:07:34.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:07:34.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.046596 -999.00  +11.20  18.35     95  +10.50 1 3 1 3 1     0    0 0.67 -3.26 z.... 15.3 18.4 153.8 24.3 13.2 -9.7 12.9 -9.4 12.8 -10.2 13.2 -9.2
2025-12-25T03:07:34.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:07:34.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:07:34.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.046596
2025-12-25T03:07:34.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:07:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:07:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:07:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:07:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:07:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:07:21', tmtdew=0.35, humidity=97.55, cloud=0.0, wind=18.03, temperature=11.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:07:05.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:07:34.267 [DEBUG] [Thread-3994] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:07:34.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:07:34.360 [DEBUG] [Thread-3997] [transport.py] [_log()] starting thread (client mode): 0xb6b37520
2025-12-25T03:07:34.360 [DEBUG] [Thread-3997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:07:34.375 [DEBUG] [Thread-3997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:07:34.375 [INFO] [Thread-3997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] client lang: <none>
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] server lang: <none>
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] kex follows: False
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] Compression: none
2025-12-25T03:07:34.383 [DEBUG] [Thread-3997] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:07:34.441 [DEBUG] [Thread-3997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:07:34.442 [DEBUG] [Thread-3997] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:07:34.442 [DEBUG] [Thread-3997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:07:34.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:07:34.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:07:34.476 [DEBUG] [Thread-3999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:07:34.497 [DEBUG] [Thread-3997] [transport.py] [_log()] userauth is OK
2025-12-25T03:07:34.498 [DEBUG] [Thread-3997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:07:34.498 [DEBUG] [Thread-3997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:07:34.498 [DEBUG] [Thread-3997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:07:34.498 [DEBUG] [Thread-3997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:07:34.517 [INFO] [Thread-3997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:07:34.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:07:34.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:07:35.334 [DEBUG] [Thread-3997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:07:35.335 [DEBUG] [Thread-3997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:07:35.383 [DEBUG] [Thread-3997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:07:35.383 [DEBUG] [Thread-3997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:07:35.393 [DEBUG] [Thread-3997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:07:35.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:07:35.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:07:35.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:07:35.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:07:35.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:07:35.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:07:35.428 [DEBUG] [Thread-3997] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:07:49.525 [DEBUG] [Thread-4000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:07:50.403 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:07:50.403 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:08:04.556 [DEBUG] [Thread-4001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:08:05.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:08:05.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:08: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
2025-12-25T03:08:06.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 7, 54), 0.35, 97.55, 0.0, 20.41, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:08:06.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:07:54
2025-12-25T03:08:06.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:08:06.460 [DEBUG] [Thread-4002] [transport.py] [_log()] starting thread (client mode): 0xb6b2b070
2025-12-25T03:08:06.460 [DEBUG] [Thread-4002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:08:06.481 [DEBUG] [Thread-4002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:08:06.481 [INFO] [Thread-4002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:08:06.484 [DEBUG] [Thread-4002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:08:06.484 [DEBUG] [Thread-4002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] client lang: <none>
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] server lang: <none>
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] kex follows: False
2025-12-25T03:08:06.485 [DEBUG] [Thread-4002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:08:06.486 [DEBUG] [Thread-4002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:08:06.486 [DEBUG] [Thread-4002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:08:06.486 [DEBUG] [Thread-4002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:08:06.486 [DEBUG] [Thread-4002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:08:06.486 [DEBUG] [Thread-4002] [transport.py] [_log()] Compression: none
2025-12-25T03:08:06.486 [DEBUG] [Thread-4002] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:08:06.505 [DEBUG] [Thread-4002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:08:06.506 [DEBUG] [Thread-4002] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:08:06.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:08:06.507 [DEBUG] [Thread-4002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:08:06.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:08:06.509 [DEBUG] [Thread-4002] [transport.py] [_log()] userauth is OK
2025-12-25T03:08:06.509 [DEBUG] [Thread-4002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:08:06.509 [DEBUG] [Thread-4002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:08:06.509 [DEBUG] [Thread-4002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:08:06.510 [DEBUG] [Thread-4002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:08:06.527 [INFO] [Thread-4002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:08:06.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:08:07.177 [DEBUG] [Thread-4002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:08:07.177 [DEBUG] [Thread-4002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:08:07.177 [DEBUG] [Thread-4002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:08:07.218 [DEBUG] [Thread-4002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:08:07.218 [DEBUG] [Thread-4002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:08:07.222 [DEBUG] [Thread-4002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:08:07.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:08:07.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:08:07.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:08:07.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:08:07.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:08:07.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:08:07.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:08:07.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:08:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:08:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.046943 -999.00  +11.20  15.18     95  +10.50 1 3 1 3 1     0    0 0.68 -3.43 z.... 16.0 15.2 148.8 18.4 13.2 -4.9 13.0 -4.8 12.8 -4.6 13.1 -5.6
2025-12-25T03:08:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:08:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:08:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.046943
2025-12-25T03:08:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:08:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:08:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:08:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:08:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:08:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:07:54', tmtdew=0.35, humidity=97.55, cloud=0.0, wind=20.41, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:07:35.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:08:07.247 [DEBUG] [Thread-4002] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:08:07.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:08:07.350 [DEBUG] [Thread-4005] [transport.py] [_log()] starting thread (client mode): 0xb95b0700
2025-12-25T03:08:07.350 [DEBUG] [Thread-4005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:08:07.365 [DEBUG] [Thread-4005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:08:07.366 [INFO] [Thread-4005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:08:07.373 [DEBUG] [Thread-4005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:08:07.373 [DEBUG] [Thread-4005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:08:07.373 [DEBUG] [Thread-4005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:08:07.373 [DEBUG] [Thread-4005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:08:07.373 [DEBUG] [Thread-4005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] client lang: <none>
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] server lang: <none>
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] kex follows: False
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] Compression: none
2025-12-25T03:08:07.374 [DEBUG] [Thread-4005] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:08:07.430 [DEBUG] [Thread-4005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:08:07.431 [DEBUG] [Thread-4005] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:08:07.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:08:07.432 [DEBUG] [Thread-4005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:08:07.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:08:07.486 [DEBUG] [Thread-4005] [transport.py] [_log()] userauth is OK
2025-12-25T03:08:07.486 [DEBUG] [Thread-4005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:08:07.487 [DEBUG] [Thread-4005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:08:07.487 [DEBUG] [Thread-4005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:08:07.487 [DEBUG] [Thread-4005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:08:07.506 [INFO] [Thread-4005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:08:07.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:08:07.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:08:08.350 [DEBUG] [Thread-4005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:08:08.350 [DEBUG] [Thread-4005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:08:08.398 [DEBUG] [Thread-4005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:08:08.398 [DEBUG] [Thread-4005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:08:08.408 [DEBUG] [Thread-4005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:08:08.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:08:08.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:08:08.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:08:08.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:08:08.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:08:08.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:08:08.444 [DEBUG] [Thread-4005] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:08:19.593 [DEBUG] [Thread-4007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:08:30.989 [DEBUG] [Thread-4008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:08:34.652 [DEBUG] [Thread-4009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:08:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:08:38.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:08:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:08:39.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 8, 26), 0.35, 97.55, 0.0, 19.5, 11.29, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:08:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:08:26
2025-12-25T03:08:39.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:08:39.439 [DEBUG] [Thread-4010] [transport.py] [_log()] starting thread (client mode): 0xb6b28df0
2025-12-25T03:08:39.439 [DEBUG] [Thread-4010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:08:39.459 [DEBUG] [Thread-4010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:08:39.459 [INFO] [Thread-4010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:08:39.463 [DEBUG] [Thread-4010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:08:39.463 [DEBUG] [Thread-4010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] client lang: <none>
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] server lang: <none>
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] kex follows: False
2025-12-25T03:08:39.464 [DEBUG] [Thread-4010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:08:39.465 [DEBUG] [Thread-4010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:08:39.465 [DEBUG] [Thread-4010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:08:39.465 [DEBUG] [Thread-4010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:08:39.465 [DEBUG] [Thread-4010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:08:39.465 [DEBUG] [Thread-4010] [transport.py] [_log()] Compression: none
2025-12-25T03:08:39.465 [DEBUG] [Thread-4010] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:08:39.485 [DEBUG] [Thread-4010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:08:39.486 [DEBUG] [Thread-4010] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:08:39.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:08:39.488 [DEBUG] [Thread-4010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:08:39.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:08:39.490 [DEBUG] [Thread-4010] [transport.py] [_log()] userauth is OK
2025-12-25T03:08:39.490 [DEBUG] [Thread-4010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:08:39.490 [DEBUG] [Thread-4010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:08:39.490 [DEBUG] [Thread-4010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:08:39.490 [DEBUG] [Thread-4010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:08:39.504 [INFO] [Thread-4010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:08:39.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:08:40.143 [DEBUG] [Thread-4010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:08:40.144 [DEBUG] [Thread-4010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:08:40.144 [DEBUG] [Thread-4010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:08:40.184 [DEBUG] [Thread-4010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:08:40.184 [DEBUG] [Thread-4010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:08:40.188 [DEBUG] [Thread-4010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:08:40.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:08:40.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:08:40.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:08:40.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:08:40.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:08:40.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:08:40.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:08:40.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:08:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:08:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.047291 -999.00  +11.30  13.96     95  +10.60 1 3 1 3 1     0    0 0.66 -3.61 z.... 14.3 14.0 143.6 21.2 13.2 -6.4 12.9 -4.8 12.9 -5.9 13.2 -5.1
2025-12-25T03:08:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:08:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:08:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.047291
2025-12-25T03:08:40.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:08:40.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:08:40.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:08:40.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:08:40.214 [DEBUG] [Thread-4010] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:08:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:08:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:08:26', tmtdew=0.35, humidity=97.55, cloud=0.0, wind=19.5, temperature=11.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:08:05.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:08:40.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:08:40.312 [DEBUG] [Thread-4013] [transport.py] [_log()] starting thread (client mode): 0xb6b28a30
2025-12-25T03:08:40.313 [DEBUG] [Thread-4013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:08:40.328 [DEBUG] [Thread-4013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:08:40.328 [INFO] [Thread-4013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:08:40.335 [DEBUG] [Thread-4013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:08:40.335 [DEBUG] [Thread-4013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:08:40.335 [DEBUG] [Thread-4013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] client lang: <none>
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] server lang: <none>
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] kex follows: False
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] Compression: none
2025-12-25T03:08:40.336 [DEBUG] [Thread-4013] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:08:40.394 [DEBUG] [Thread-4013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:08:40.395 [DEBUG] [Thread-4013] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:08:40.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:08:40.396 [DEBUG] [Thread-4013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:08:40.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:08:40.451 [DEBUG] [Thread-4013] [transport.py] [_log()] userauth is OK
2025-12-25T03:08:40.451 [DEBUG] [Thread-4013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:08:40.451 [DEBUG] [Thread-4013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:08:40.451 [DEBUG] [Thread-4013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:08:40.451 [DEBUG] [Thread-4013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:08:40.474 [INFO] [Thread-4013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:08:40.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:08:40.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:08:41.368 [DEBUG] [Thread-4013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:08:41.368 [DEBUG] [Thread-4013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:08:41.416 [DEBUG] [Thread-4013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:08:41.416 [DEBUG] [Thread-4013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:08:41.426 [DEBUG] [Thread-4013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:08:41.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:08:41.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:08:41.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:08:41.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:08:41.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:08:41.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:08:41.462 [DEBUG] [Thread-4013] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:08:49.685 [DEBUG] [Thread-4015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:08:50.603 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:08:50.605 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:09:04.733 [DEBUG] [Thread-4016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:09:11.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:09:11.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:09:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:09:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 8, 58), 0.34, 97.6, 0.0, 19.13, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:09:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:08:58
2025-12-25T03:09:12.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:09:12.473 [DEBUG] [Thread-4017] [transport.py] [_log()] starting thread (client mode): 0xb6b37d90
2025-12-25T03:09:12.473 [DEBUG] [Thread-4017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:09:12.493 [DEBUG] [Thread-4017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:09:12.493 [INFO] [Thread-4017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:09:12.496 [DEBUG] [Thread-4017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] client lang: <none>
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] server lang: <none>
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] kex follows: False
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] Compression: none
2025-12-25T03:09:12.497 [DEBUG] [Thread-4017] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:09:12.516 [DEBUG] [Thread-4017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:09:12.516 [DEBUG] [Thread-4017] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:09:12.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:09:12.518 [DEBUG] [Thread-4017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:09:12.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:09:12.520 [DEBUG] [Thread-4017] [transport.py] [_log()] userauth is OK
2025-12-25T03:09:12.520 [DEBUG] [Thread-4017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:09:12.520 [DEBUG] [Thread-4017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:09:12.520 [DEBUG] [Thread-4017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:09:12.520 [DEBUG] [Thread-4017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:09:12.545 [INFO] [Thread-4017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:09:12.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:09:13.221 [DEBUG] [Thread-4017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:09:13.221 [DEBUG] [Thread-4017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:09:13.222 [DEBUG] [Thread-4017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:09:13.262 [DEBUG] [Thread-4017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:09:13.262 [DEBUG] [Thread-4017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:09:13.266 [DEBUG] [Thread-4017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:09:13.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:09:13.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:09:13.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:09:13.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:09:13.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:09:13.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:09:13.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:09:13.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:09:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:09:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.047985 -999.00  +11.30  12.81     95  +10.60 1 3 1 3 1     0    0 0.65 -3.68 ----- 13.0 12.8 152.0 19.9 13.2 -6.6 13.0 -5.6 12.8 -6.7 13.2 -6.1
2025-12-25T03:09:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:09:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:09:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.047985
2025-12-25T03:09:13.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:09:13.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:09:13.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:09:13.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:09:13.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:09:13.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:08:58', tmtdew=0.34, humidity=97.6, cloud=0.0, wind=19.13, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:09:05.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:09:13.293 [DEBUG] [Thread-4017] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:09:13.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:09:13.387 [DEBUG] [Thread-4020] [transport.py] [_log()] starting thread (client mode): 0xb95f2980
2025-12-25T03:09:13.387 [DEBUG] [Thread-4020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:09:13.402 [DEBUG] [Thread-4020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:09:13.402 [INFO] [Thread-4020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] client lang: <none>
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] server lang: <none>
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] kex follows: False
2025-12-25T03:09:13.410 [DEBUG] [Thread-4020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:09:13.411 [DEBUG] [Thread-4020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:09:13.411 [DEBUG] [Thread-4020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:09:13.411 [DEBUG] [Thread-4020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:09:13.411 [DEBUG] [Thread-4020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:09:13.411 [DEBUG] [Thread-4020] [transport.py] [_log()] Compression: none
2025-12-25T03:09:13.411 [DEBUG] [Thread-4020] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:09:13.467 [DEBUG] [Thread-4020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:09:13.468 [DEBUG] [Thread-4020] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:09:13.469 [DEBUG] [Thread-4020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:09:13.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:09:13.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:09:13.523 [DEBUG] [Thread-4020] [transport.py] [_log()] userauth is OK
2025-12-25T03:09:13.523 [DEBUG] [Thread-4020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:09:13.524 [DEBUG] [Thread-4020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:09:13.524 [DEBUG] [Thread-4020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:09:13.524 [DEBUG] [Thread-4020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:09:13.543 [INFO] [Thread-4020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:09:13.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:09:13.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:09:14.378 [DEBUG] [Thread-4020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:09:14.378 [DEBUG] [Thread-4020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:09:14.425 [DEBUG] [Thread-4020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:09:14.425 [DEBUG] [Thread-4020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:09:14.434 [DEBUG] [Thread-4020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:09:14.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:09:14.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:09:14.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:09:14.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:09:14.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:09:14.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:09:14.467 [DEBUG] [Thread-4020] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:09:19.766 [DEBUG] [Thread-4022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:09:31.060 [DEBUG] [Thread-4023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:09:34.812 [DEBUG] [Thread-4024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:09:44.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:09:44.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:09:44.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:09:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 9, 30), 0.34, 97.61, 0.0, 19.66, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:09:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:09:30
2025-12-25T03:09:45.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:09:45.521 [DEBUG] [Thread-4025] [transport.py] [_log()] starting thread (client mode): 0xb6b29ea0
2025-12-25T03:09:45.522 [DEBUG] [Thread-4025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:09:45.542 [DEBUG] [Thread-4025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:09:45.542 [INFO] [Thread-4025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] client lang: <none>
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] server lang: <none>
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] kex follows: False
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] Compression: none
2025-12-25T03:09:45.546 [DEBUG] [Thread-4025] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:09:45.560 [DEBUG] [Thread-4025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:09:45.560 [DEBUG] [Thread-4025] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:09:45.560 [DEBUG] [Thread-4025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:09:45.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:09:45.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:09:45.561 [DEBUG] [Thread-4025] [transport.py] [_log()] userauth is OK
2025-12-25T03:09:45.561 [DEBUG] [Thread-4025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:09:45.561 [DEBUG] [Thread-4025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:09:45.561 [DEBUG] [Thread-4025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:09:45.561 [DEBUG] [Thread-4025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:09:45.579 [INFO] [Thread-4025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:09:45.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:09:46.156 [DEBUG] [Thread-4025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:09:46.156 [DEBUG] [Thread-4025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:09:46.156 [DEBUG] [Thread-4025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:09:46.197 [DEBUG] [Thread-4025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:09:46.197 [DEBUG] [Thread-4025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:09:46.199 [DEBUG] [Thread-4025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:09:46.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:09:46.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:09:46.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:09:46.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:09:46.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:09:46.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:09:46.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.048332 -999.00  +11.30  12.09     95  +10.50 1 3 1 3 1     0    0 0.66 -3.54 ----- 16.3 12.1 157.6 21.2 13.1 -8.6 13.0 -7.8 12.8 -8.4 13.2 -7.7
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.048332
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:09:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:09:30', tmtdew=0.34, humidity=97.61, cloud=0.0, wind=19.66, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:09:35.885', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:09:46.217 [DEBUG] [Thread-4025] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:09:46.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:09:46.301 [DEBUG] [Thread-4028] [transport.py] [_log()] starting thread (client mode): 0xb6b29e40
2025-12-25T03:09:46.301 [DEBUG] [Thread-4028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:09:46.316 [DEBUG] [Thread-4028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:09:46.316 [INFO] [Thread-4028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] client lang: <none>
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] server lang: <none>
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] kex follows: False
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] Compression: none
2025-12-25T03:09:46.324 [DEBUG] [Thread-4028] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:09:46.382 [DEBUG] [Thread-4028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:09:46.382 [DEBUG] [Thread-4028] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:09:46.383 [DEBUG] [Thread-4028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:09:46.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:09:46.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:09:46.439 [DEBUG] [Thread-4028] [transport.py] [_log()] userauth is OK
2025-12-25T03:09:46.439 [DEBUG] [Thread-4028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:09:46.439 [DEBUG] [Thread-4028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:09:46.439 [DEBUG] [Thread-4028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:09:46.439 [DEBUG] [Thread-4028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:09:46.454 [INFO] [Thread-4028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:09:46.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:09:46.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:09:47.423 [DEBUG] [Thread-4028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:09:47.423 [DEBUG] [Thread-4028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:09:47.470 [DEBUG] [Thread-4028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:09:47.470 [DEBUG] [Thread-4028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:09:47.479 [DEBUG] [Thread-4028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:09:47.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:09:47.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')
2025-12-25T03:09:47.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:09:47.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:09:47.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:09:47.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:09:47.510 [DEBUG] [Thread-4028] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:09:49.849 [DEBUG] [Thread-4030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:09:50.806 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:09:50.807 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:10:04.901 [DEBUG] [Thread-4031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:10:17.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:10:17.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:10:17.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
2025-12-25T03:10:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 10, 2), 0.34, 97.58, 0.0, 18.19, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:10:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:10:02
2025-12-25T03:10:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:10:18.499 [DEBUG] [Thread-4032] [transport.py] [_log()] starting thread (client mode): 0xb95b18a0
2025-12-25T03:10:18.499 [DEBUG] [Thread-4032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:10:18.515 [DEBUG] [Thread-4032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:10:18.515 [INFO] [Thread-4032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:10:18.518 [DEBUG] [Thread-4032] [transport.py] [_log()] client lang: <none>
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] server lang: <none>
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] kex follows: False
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] Compression: none
2025-12-25T03:10:18.519 [DEBUG] [Thread-4032] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:10:18.538 [DEBUG] [Thread-4032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:10:18.539 [DEBUG] [Thread-4032] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:10:18.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:10:18.541 [DEBUG] [Thread-4032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:10:18.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:10:18.543 [DEBUG] [Thread-4032] [transport.py] [_log()] userauth is OK
2025-12-25T03:10:18.543 [DEBUG] [Thread-4032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:10:18.543 [DEBUG] [Thread-4032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:10:18.544 [DEBUG] [Thread-4032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:10:18.544 [DEBUG] [Thread-4032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:10:18.562 [INFO] [Thread-4032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:10:18.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:10:19.161 [DEBUG] [Thread-4032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:10:19.161 [DEBUG] [Thread-4032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:10:19.162 [DEBUG] [Thread-4032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:10:19.202 [DEBUG] [Thread-4032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:10:19.202 [DEBUG] [Thread-4032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:10:19.203 [DEBUG] [Thread-4032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:10:19.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:10:19.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:10:19.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:10:19.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:10:19.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:10:19.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:10:19.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.048679 -999.00  +11.30  17.56     95  +10.50 1 3 1 3 1     0    0 0.65 -3.28 ..... 18.4 17.6 165.0 22.1 13.1 -7.9 12.9 -7.1 12.8 -7.4 13.1 -8.2
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.048679
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:10:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:10:02', tmtdew=0.34, humidity=97.58, cloud=0.0, wind=18.19, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:10:05.866', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:10:19.221 [DEBUG] [Thread-4032] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:10:19.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:10:19.301 [DEBUG] [Thread-4035] [transport.py] [_log()] starting thread (client mode): 0xb6b281f0
2025-12-25T03:10:19.301 [DEBUG] [Thread-4035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:10:19.315 [DEBUG] [Thread-4035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:10:19.315 [INFO] [Thread-4035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:10:19.322 [DEBUG] [Thread-4035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] client lang: <none>
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] server lang: <none>
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] kex follows: False
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:10:19.323 [DEBUG] [Thread-4035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:10:19.324 [DEBUG] [Thread-4035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:10:19.324 [DEBUG] [Thread-4035] [transport.py] [_log()] Compression: none
2025-12-25T03:10:19.324 [DEBUG] [Thread-4035] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:10:19.379 [DEBUG] [Thread-4035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:10:19.379 [DEBUG] [Thread-4035] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:10:19.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:10:19.381 [DEBUG] [Thread-4035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:10:19.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:10:19.435 [DEBUG] [Thread-4035] [transport.py] [_log()] userauth is OK
2025-12-25T03:10:19.436 [DEBUG] [Thread-4035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:10:19.436 [DEBUG] [Thread-4035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:10:19.436 [DEBUG] [Thread-4035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:10:19.436 [DEBUG] [Thread-4035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:10:19.454 [INFO] [Thread-4035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:10:19.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:10:19.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:10:19.937 [DEBUG] [Thread-4037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:10:20.257 [DEBUG] [Thread-4035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:10:20.257 [DEBUG] [Thread-4035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:10:20.305 [DEBUG] [Thread-4035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:10:20.306 [DEBUG] [Thread-4035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:10:20.314 [DEBUG] [Thread-4035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:10:20.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:10:20.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')
2025-12-25T03:10:20.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:10:20.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:10:20.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:10:20.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:10:20.350 [DEBUG] [Thread-4035] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:10:31.135 [DEBUG] [Thread-4038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:10:34.995 [DEBUG] [Thread-4039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:10:50.030 [DEBUG] [Thread-4040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:10:50.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:10:50.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:10:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:10:51.008 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:10:51.009 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:10:51.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 10, 34), 0.34, 97.6, 0.0, 20.19, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:10:51.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:10:34
2025-12-25T03:10:51.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:10:51.363 [DEBUG] [Thread-4041] [transport.py] [_log()] starting thread (client mode): 0xb95b3700
2025-12-25T03:10:51.363 [DEBUG] [Thread-4041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:10:51.383 [DEBUG] [Thread-4041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:10:51.383 [INFO] [Thread-4041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:10:51.386 [DEBUG] [Thread-4041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] client lang: <none>
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] server lang: <none>
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] kex follows: False
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] Compression: none
2025-12-25T03:10:51.387 [DEBUG] [Thread-4041] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:10:51.403 [DEBUG] [Thread-4041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:10:51.404 [DEBUG] [Thread-4041] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:10:51.404 [DEBUG] [Thread-4041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:10:51.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:10:51.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:10:51.448 [DEBUG] [Thread-4041] [transport.py] [_log()] userauth is OK
2025-12-25T03:10:51.448 [DEBUG] [Thread-4041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:10:51.448 [DEBUG] [Thread-4041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:10:51.448 [DEBUG] [Thread-4041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:10:51.448 [DEBUG] [Thread-4041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:10:51.469 [INFO] [Thread-4041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:10:51.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:10:52.054 [DEBUG] [Thread-4041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:10:52.054 [DEBUG] [Thread-4041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:10:52.055 [DEBUG] [Thread-4041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:10:52.095 [DEBUG] [Thread-4041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:10:52.095 [DEBUG] [Thread-4041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:10:52.097 [DEBUG] [Thread-4041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:10:52.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:10:52.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:10:52.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:10:52.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:10:52.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:10:52.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:10:52.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:10:52.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:10:52.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:10:52.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.049027 -999.00  +11.20  17.68     95  +10.50 1 3 1 3 1     0    0 0.63 -3.69 ....w 18.4 17.7 154.8 21.9 13.1 -4.7 12.9 -5.5 12.8 -4.9 13.1 -6.2
2025-12-25T03:10:52.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:10:52.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:10:52.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.049027
2025-12-25T03:10:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:10:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:10:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:10:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:10:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:10:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:10:34', tmtdew=0.34, humidity=97.6, cloud=0.0, wind=20.19, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:10:35.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:10:52.121 [DEBUG] [Thread-4041] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:10:52.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:10:52.217 [DEBUG] [Thread-4044] [transport.py] [_log()] starting thread (client mode): 0xb6b227d0
2025-12-25T03:10:52.217 [DEBUG] [Thread-4044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:10:52.232 [DEBUG] [Thread-4044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:10:52.232 [INFO] [Thread-4044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] client lang: <none>
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] server lang: <none>
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] kex follows: False
2025-12-25T03:10:52.240 [DEBUG] [Thread-4044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:10:52.241 [DEBUG] [Thread-4044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:10:52.241 [DEBUG] [Thread-4044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:10:52.241 [DEBUG] [Thread-4044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:10:52.241 [DEBUG] [Thread-4044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:10:52.241 [DEBUG] [Thread-4044] [transport.py] [_log()] Compression: none
2025-12-25T03:10:52.241 [DEBUG] [Thread-4044] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:10:52.299 [DEBUG] [Thread-4044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:10:52.299 [DEBUG] [Thread-4044] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:10:52.300 [DEBUG] [Thread-4044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:10:52.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:10:52.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:10:52.355 [DEBUG] [Thread-4044] [transport.py] [_log()] userauth is OK
2025-12-25T03:10:52.355 [DEBUG] [Thread-4044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:10:52.355 [DEBUG] [Thread-4044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:10:52.355 [DEBUG] [Thread-4044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:10:52.355 [DEBUG] [Thread-4044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:10:52.378 [INFO] [Thread-4044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:10:52.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:10:52.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:10:53.214 [DEBUG] [Thread-4044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:10:53.214 [DEBUG] [Thread-4044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:10:53.263 [DEBUG] [Thread-4044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:10:53.263 [DEBUG] [Thread-4044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:10:53.272 [DEBUG] [Thread-4044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:10:53.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:10:53.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:10:53.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
2025-12-25T03:10:53.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:10:53.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:10:53.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:10:53.306 [DEBUG] [Thread-4044] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:11:05.058 [DEBUG] [Thread-4046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:11:20.112 [DEBUG] [Thread-4047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:11:23.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:11:23.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:11:23.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:11:24.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 11, 6), 0.34, 97.56, 0.0, 19.3, 11.32, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:11:24.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:11:06
2025-12-25T03:11:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:11:24.310 [DEBUG] [Thread-4048] [transport.py] [_log()] starting thread (client mode): 0xb6b2bb80
2025-12-25T03:11:24.310 [DEBUG] [Thread-4048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:11:24.330 [DEBUG] [Thread-4048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:11:24.330 [INFO] [Thread-4048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:11:24.333 [DEBUG] [Thread-4048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:11:24.333 [DEBUG] [Thread-4048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] client lang: <none>
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] server lang: <none>
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] kex follows: False
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:11:24.334 [DEBUG] [Thread-4048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:11:24.335 [DEBUG] [Thread-4048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:11:24.335 [DEBUG] [Thread-4048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:11:24.335 [DEBUG] [Thread-4048] [transport.py] [_log()] Compression: none
2025-12-25T03:11:24.335 [DEBUG] [Thread-4048] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:11:24.353 [DEBUG] [Thread-4048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:11:24.353 [DEBUG] [Thread-4048] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:11:24.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:11:24.355 [DEBUG] [Thread-4048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:11:24.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:11:24.357 [DEBUG] [Thread-4048] [transport.py] [_log()] userauth is OK
2025-12-25T03:11:24.358 [DEBUG] [Thread-4048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:11:24.358 [DEBUG] [Thread-4048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:11:24.358 [DEBUG] [Thread-4048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:11:24.358 [DEBUG] [Thread-4048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:11:24.380 [INFO] [Thread-4048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:11:24.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:11:25.028 [DEBUG] [Thread-4048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:11:25.029 [DEBUG] [Thread-4048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:11:25.029 [DEBUG] [Thread-4048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:11:25.069 [DEBUG] [Thread-4048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:11:25.069 [DEBUG] [Thread-4048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:11:25.075 [DEBUG] [Thread-4048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:11:25.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:11:25.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:11:25.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:11:25.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:11:25.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:11:25.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:11:25.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:11:25.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:11:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:11:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.049027 -999.00  +11.20  17.68     95  +10.50 1 3 1 3 1     0    0 0.63 -3.69 ....w 18.4 17.7 154.8 21.9 13.1 -4.7 12.9 -5.5 12.8 -4.9 13.1 -6.2
2025-12-25T03:11:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:11:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:11:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.049027
2025-12-25T03:11:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:11:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:11:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:11:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:11:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:11:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:11:06', tmtdew=0.34, humidity=97.56, cloud=0.0, wind=19.3, temperature=11.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:10:35.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:11:25.099 [DEBUG] [Thread-4048] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:11:25.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:11:25.199 [DEBUG] [Thread-4051] [transport.py] [_log()] starting thread (client mode): 0xb6b29f00
2025-12-25T03:11:25.200 [DEBUG] [Thread-4051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:11:25.215 [DEBUG] [Thread-4051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:11:25.215 [INFO] [Thread-4051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:11:25.222 [DEBUG] [Thread-4051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] client lang: <none>
2025-12-25T03:11:25.223 [DEBUG] [Thread-4051] [transport.py] [_log()] server lang: <none>
2025-12-25T03:11:25.224 [DEBUG] [Thread-4051] [transport.py] [_log()] kex follows: False
2025-12-25T03:11:25.224 [DEBUG] [Thread-4051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:11:25.224 [DEBUG] [Thread-4051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:11:25.224 [DEBUG] [Thread-4051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:11:25.224 [DEBUG] [Thread-4051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:11:25.224 [DEBUG] [Thread-4051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:11:25.224 [DEBUG] [Thread-4051] [transport.py] [_log()] Compression: none
2025-12-25T03:11:25.224 [DEBUG] [Thread-4051] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:11:25.279 [DEBUG] [Thread-4051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:11:25.280 [DEBUG] [Thread-4051] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:11:25.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:11:25.281 [DEBUG] [Thread-4051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:11:25.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:11:25.336 [DEBUG] [Thread-4051] [transport.py] [_log()] userauth is OK
2025-12-25T03:11:25.336 [DEBUG] [Thread-4051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:11:25.337 [DEBUG] [Thread-4051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:11:25.337 [DEBUG] [Thread-4051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:11:25.337 [DEBUG] [Thread-4051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:11:25.355 [INFO] [Thread-4051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:11:25.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:11:25.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:11:26.213 [DEBUG] [Thread-4051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:11:26.213 [DEBUG] [Thread-4051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:11:26.261 [DEBUG] [Thread-4051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:11:26.261 [DEBUG] [Thread-4051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:11:26.271 [DEBUG] [Thread-4051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:11:26.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:11:26.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:11:26.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
2025-12-25T03:11:26.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:11:26.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:11:26.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:11:26.308 [DEBUG] [Thread-4051] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:11:31.208 [DEBUG] [Thread-4053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:11:35.147 [DEBUG] [Thread-4054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:11:50.194 [DEBUG] [Thread-4055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:11:51.211 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:11:51.212 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:11:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:11:56.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:11:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:11:57.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 11, 38), 0.34, 97.61, 0.0, 19.71, 11.37, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:11:57.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:11:38
2025-12-25T03:11:57.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:11:57.294 [DEBUG] [Thread-4056] [transport.py] [_log()] starting thread (client mode): 0xb6b2a650
2025-12-25T03:11:57.294 [DEBUG] [Thread-4056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:11:57.314 [DEBUG] [Thread-4056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:11:57.315 [INFO] [Thread-4056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] client lang: <none>
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] server lang: <none>
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] kex follows: False
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:11:57.318 [DEBUG] [Thread-4056] [transport.py] [_log()] Compression: none
2025-12-25T03:11:57.319 [DEBUG] [Thread-4056] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:11:57.339 [DEBUG] [Thread-4056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:11:57.339 [DEBUG] [Thread-4056] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:11:57.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:11:57.340 [DEBUG] [Thread-4056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:11:57.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:11:57.343 [DEBUG] [Thread-4056] [transport.py] [_log()] userauth is OK
2025-12-25T03:11:57.343 [DEBUG] [Thread-4056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:11:57.343 [DEBUG] [Thread-4056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:11:57.343 [DEBUG] [Thread-4056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:11:57.343 [DEBUG] [Thread-4056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:11:57.368 [INFO] [Thread-4056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:11:57.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:11:58.027 [DEBUG] [Thread-4056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:11:58.027 [DEBUG] [Thread-4056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:11:58.028 [DEBUG] [Thread-4056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:11:58.068 [DEBUG] [Thread-4056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:11:58.068 [DEBUG] [Thread-4056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:11:58.072 [DEBUG] [Thread-4056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:11:58.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:11:58.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:11:58.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:11:58.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:11:58.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:11:58.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:11:58.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:11:58.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:11:58.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:11:58.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.049374 -999.00  +11.20  17.99     95  +10.50 1 3 1 3 1     0    0 0.64 -3.95 ....w 15.6 18.0 154.0 23.2 13.2 -5.9 13.0 -4.0 12.8 -4.9 13.1 -4.5
2025-12-25T03:11:58.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:11:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:11:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.049374
2025-12-25T03:11:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:11:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:11:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:11:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:11:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:11:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:11:38', tmtdew=0.34, humidity=97.61, cloud=0.0, wind=19.71, temperature=11.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:11:05.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:11:58.100 [DEBUG] [Thread-4056] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:11:58.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:11:58.195 [DEBUG] [Thread-4059] [transport.py] [_log()] starting thread (client mode): 0xb6b281f0
2025-12-25T03:11:58.195 [DEBUG] [Thread-4059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:11:58.209 [DEBUG] [Thread-4059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:11:58.210 [INFO] [Thread-4059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:11:58.217 [DEBUG] [Thread-4059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:11:58.217 [DEBUG] [Thread-4059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:11:58.217 [DEBUG] [Thread-4059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:11:58.217 [DEBUG] [Thread-4059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] client lang: <none>
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] server lang: <none>
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] kex follows: False
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:11:58.218 [DEBUG] [Thread-4059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:11:58.219 [DEBUG] [Thread-4059] [transport.py] [_log()] Compression: none
2025-12-25T03:11:58.219 [DEBUG] [Thread-4059] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:11:58.281 [DEBUG] [Thread-4059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:11:58.281 [DEBUG] [Thread-4059] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:11:58.282 [DEBUG] [Thread-4059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:11:58.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:11:58.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:11:58.336 [DEBUG] [Thread-4059] [transport.py] [_log()] userauth is OK
2025-12-25T03:11:58.336 [DEBUG] [Thread-4059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:11:58.337 [DEBUG] [Thread-4059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:11:58.337 [DEBUG] [Thread-4059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:11:58.337 [DEBUG] [Thread-4059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:11:58.355 [INFO] [Thread-4059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:11:58.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:11:58.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:11:59.172 [DEBUG] [Thread-4059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:11:59.173 [DEBUG] [Thread-4059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:11:59.221 [DEBUG] [Thread-4059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:11:59.221 [DEBUG] [Thread-4059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:11:59.230 [DEBUG] [Thread-4059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:11:59.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:11:59.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:11:59.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:11:59.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:11:59.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:11:59.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:11:59.267 [DEBUG] [Thread-4059] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:12:05.230 [DEBUG] [Thread-4061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:12:20.281 [DEBUG] [Thread-4062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:12:29.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:12:29.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:12:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:12:29.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 12, 11), 0.34, 97.6, 0.0, 19.48, 11.39, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:12:29.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:12:11
2025-12-25T03:12:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:12:30.250 [DEBUG] [Thread-4063] [transport.py] [_log()] starting thread (client mode): 0xb95f3070
2025-12-25T03:12:30.250 [DEBUG] [Thread-4063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:12:30.270 [DEBUG] [Thread-4063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:12:30.270 [INFO] [Thread-4063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] client lang: <none>
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] server lang: <none>
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] kex follows: False
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] Compression: none
2025-12-25T03:12:30.274 [DEBUG] [Thread-4063] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:12:30.293 [DEBUG] [Thread-4063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:12:30.293 [DEBUG] [Thread-4063] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:12:30.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:12:30.294 [DEBUG] [Thread-4063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:12:30.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:12:30.296 [DEBUG] [Thread-4063] [transport.py] [_log()] userauth is OK
2025-12-25T03:12:30.297 [DEBUG] [Thread-4063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:12:30.297 [DEBUG] [Thread-4063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:12:30.297 [DEBUG] [Thread-4063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:12:30.297 [DEBUG] [Thread-4063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:12:30.323 [INFO] [Thread-4063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:12:30.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:12:30.968 [DEBUG] [Thread-4063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:12:30.968 [DEBUG] [Thread-4063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:12:30.969 [DEBUG] [Thread-4063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:12:31.009 [DEBUG] [Thread-4063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:12:31.009 [DEBUG] [Thread-4063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:12:31.012 [DEBUG] [Thread-4063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:12:31.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:12:31.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:12:31.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:12:31.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:12:31.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:12:31.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:12:31.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:12:31.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:12:31.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:12:31.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.049721 -999.00  +11.20  17.61     95  +10.50 1 3 1 3 1     0    0 0.65 -4.12 ....w 18.9 17.6 151.4 22.8 13.1 -7.8 13.0 -6.6 12.8 -7.3 13.1 -6.9
2025-12-25T03:12:31.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:12:31.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:12:31.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.049721
2025-12-25T03:12:31.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:12:31.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:12:31.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:12:31.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:12:31.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:12:31.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:12:11', tmtdew=0.34, humidity=97.6, cloud=0.0, wind=19.48, temperature=11.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:11:35.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:12:31.040 [DEBUG] [Thread-4063] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:12:31.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:12:31.135 [DEBUG] [Thread-4066] [transport.py] [_log()] starting thread (client mode): 0xb6b29bd0
2025-12-25T03:12:31.135 [DEBUG] [Thread-4066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:12:31.150 [DEBUG] [Thread-4066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:12:31.150 [INFO] [Thread-4066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:12:31.157 [DEBUG] [Thread-4066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:12:31.157 [DEBUG] [Thread-4066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:12:31.157 [DEBUG] [Thread-4066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:12:31.157 [DEBUG] [Thread-4066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] client lang: <none>
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] server lang: <none>
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] kex follows: False
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] Compression: none
2025-12-25T03:12:31.158 [DEBUG] [Thread-4066] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:12:31.216 [DEBUG] [Thread-4066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:12:31.217 [DEBUG] [Thread-4066] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:12:31.217 [DEBUG] [Thread-4066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:12:31.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:12:31.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:12:31.262 [DEBUG] [Thread-4068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:12:31.272 [DEBUG] [Thread-4066] [transport.py] [_log()] userauth is OK
2025-12-25T03:12:31.272 [DEBUG] [Thread-4066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:12:31.272 [DEBUG] [Thread-4066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:12:31.272 [DEBUG] [Thread-4066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:12:31.272 [DEBUG] [Thread-4066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:12:31.287 [INFO] [Thread-4066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:12:31.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:12:31.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:12:32.109 [DEBUG] [Thread-4066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:12:32.109 [DEBUG] [Thread-4066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:12:32.157 [DEBUG] [Thread-4066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:12:32.157 [DEBUG] [Thread-4066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:12:32.166 [DEBUG] [Thread-4066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:12:32.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:12:32.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')
2025-12-25T03:12: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
2025-12-25T03:12:32.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:12:32.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:12:32.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:12:32.203 [DEBUG] [Thread-4066] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:12:35.312 [DEBUG] [Thread-4069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:12:50.361 [DEBUG] [Thread-4070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:12:51.416 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:12:51.417 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:13:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:13:02.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:13:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:13:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 12, 43), 0.33, 97.63, 0.0, 19.11, 11.32, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:13:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:12:43
2025-12-25T03:13:03.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:13:03.255 [DEBUG] [Thread-4071] [transport.py] [_log()] starting thread (client mode): 0xb6b23a00
2025-12-25T03:13:03.256 [DEBUG] [Thread-4071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:13:03.276 [DEBUG] [Thread-4071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:13:03.276 [INFO] [Thread-4071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:13:03.279 [DEBUG] [Thread-4071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] client lang: <none>
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] server lang: <none>
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] kex follows: False
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] Compression: none
2025-12-25T03:13:03.280 [DEBUG] [Thread-4071] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:13:03.287 [DEBUG] [Thread-4071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:13:03.287 [DEBUG] [Thread-4071] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:13:03.288 [DEBUG] [Thread-4071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:13:03.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:13:03.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:13:03.288 [DEBUG] [Thread-4071] [transport.py] [_log()] userauth is OK
2025-12-25T03:13:03.289 [DEBUG] [Thread-4071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:13:03.289 [DEBUG] [Thread-4071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:13:03.289 [DEBUG] [Thread-4071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:13:03.289 [DEBUG] [Thread-4071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:13:03.307 [INFO] [Thread-4071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:13:03.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:13:03.952 [DEBUG] [Thread-4071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:13:03.952 [DEBUG] [Thread-4071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:13:03.953 [DEBUG] [Thread-4071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:13:03.993 [DEBUG] [Thread-4071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:13:03.993 [DEBUG] [Thread-4071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:13:03.996 [DEBUG] [Thread-4071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:13:04.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:13:04.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:13:04.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:13:04.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:13:04.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:13:04.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:13:04.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:13:04.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:13:04.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:13:04.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.050069 -999.00  +11.20  14.51     95  +10.50 1 3 1 3 1     0    0 0.62 -4.33 ----- 20.0 14.5 136.6 23.8 13.1 -7.0 12.9 -7.7 12.8 -6.6 13.1 -8.1
2025-12-25T03:13:04.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:13:04.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:13:04.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.050069
2025-12-25T03:13:04.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:13:04.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:13:04.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:13:04.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:13:04.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:13:04.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:12:43', tmtdew=0.33, humidity=97.63, cloud=0.0, wind=19.11, temperature=11.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:12:05.962', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:13:04.019 [DEBUG] [Thread-4071] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:13:04.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:13:04.117 [DEBUG] [Thread-4074] [transport.py] [_log()] starting thread (client mode): 0xb95f3520
2025-12-25T03:13:04.117 [DEBUG] [Thread-4074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:13:04.131 [DEBUG] [Thread-4074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:13:04.131 [INFO] [Thread-4074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] client lang: <none>
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] server lang: <none>
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] kex follows: False
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:13:04.139 [DEBUG] [Thread-4074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:13:04.140 [DEBUG] [Thread-4074] [transport.py] [_log()] Compression: none
2025-12-25T03:13:04.140 [DEBUG] [Thread-4074] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:13:04.200 [DEBUG] [Thread-4074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:13:04.200 [DEBUG] [Thread-4074] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:13:04.201 [DEBUG] [Thread-4074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:13:04.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:13:04.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:13:04.256 [DEBUG] [Thread-4074] [transport.py] [_log()] userauth is OK
2025-12-25T03:13:04.256 [DEBUG] [Thread-4074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:13:04.257 [DEBUG] [Thread-4074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:13:04.257 [DEBUG] [Thread-4074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:13:04.257 [DEBUG] [Thread-4074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:13:04.279 [INFO] [Thread-4074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:13:04.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:13:04.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:13:05.131 [DEBUG] [Thread-4074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:13:05.131 [DEBUG] [Thread-4074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:13:05.179 [DEBUG] [Thread-4074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:13:05.179 [DEBUG] [Thread-4074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:13:05.188 [DEBUG] [Thread-4074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:13:05.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:13:05.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:13:05.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:13:05.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:13:05.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:13:05.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:13:05.222 [DEBUG] [Thread-4074] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:13:05.393 [DEBUG] [Thread-4076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:13:20.440 [DEBUG] [Thread-4077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:13:31.337 [DEBUG] [Thread-4078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:13:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:13:35.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:13:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:13:35.475 [DEBUG] [Thread-4079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:13:35.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 13, 15), 0.33, 97.65, 0.0, 20.19, 11.3, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:13:35.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:13:15
2025-12-25T03:13:36.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:13:36.215 [DEBUG] [Thread-4080] [transport.py] [_log()] starting thread (client mode): 0xb95f3c40
2025-12-25T03:13:36.215 [DEBUG] [Thread-4080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:13:36.234 [DEBUG] [Thread-4080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:13:36.234 [INFO] [Thread-4080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:13:36.237 [DEBUG] [Thread-4080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] client lang: <none>
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] server lang: <none>
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] kex follows: False
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] Compression: none
2025-12-25T03:13:36.238 [DEBUG] [Thread-4080] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:13:36.255 [DEBUG] [Thread-4080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:13:36.255 [DEBUG] [Thread-4080] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:13:36.256 [DEBUG] [Thread-4080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:13:36.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:13:36.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:13:36.258 [DEBUG] [Thread-4080] [transport.py] [_log()] userauth is OK
2025-12-25T03:13:36.259 [DEBUG] [Thread-4080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:13:36.259 [DEBUG] [Thread-4080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:13:36.259 [DEBUG] [Thread-4080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:13:36.259 [DEBUG] [Thread-4080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:13:36.284 [INFO] [Thread-4080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:13:36.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:13:36.911 [DEBUG] [Thread-4080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:13:36.911 [DEBUG] [Thread-4080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:13:36.911 [DEBUG] [Thread-4080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:13:36.952 [DEBUG] [Thread-4080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:13:36.952 [DEBUG] [Thread-4080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:13:36.954 [DEBUG] [Thread-4080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:13:36.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:13:36.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:13:36.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:13:36.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:13:36.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:13:36.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:13:36.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.050416 -999.00  +11.20  17.72     95  +10.50 1 3 1 3 1     0    0 0.62 -4.47 z.... 15.5 17.7 142.4 23.4 13.1 -5.7 12.9 -6.0 12.8 -6.2 13.1 -6.5
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.050416
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:13:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:13:15', tmtdew=0.33, humidity=97.65, cloud=0.0, wind=20.19, temperature=11.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:12:35.942', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:13:36.973 [DEBUG] [Thread-4080] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:13:37.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:13:37.061 [DEBUG] [Thread-4083] [transport.py] [_log()] starting thread (client mode): 0xb6b21f30
2025-12-25T03:13:37.061 [DEBUG] [Thread-4083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:13:37.075 [DEBUG] [Thread-4083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:13:37.075 [INFO] [Thread-4083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] client lang: <none>
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] server lang: <none>
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] kex follows: False
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:13:37.085 [DEBUG] [Thread-4083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:13:37.086 [DEBUG] [Thread-4083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:13:37.086 [DEBUG] [Thread-4083] [transport.py] [_log()] Compression: none
2025-12-25T03:13:37.086 [DEBUG] [Thread-4083] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:13:37.142 [DEBUG] [Thread-4083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:13:37.142 [DEBUG] [Thread-4083] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:13:37.142 [DEBUG] [Thread-4083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:13:37.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:13:37.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:13:37.201 [DEBUG] [Thread-4083] [transport.py] [_log()] userauth is OK
2025-12-25T03:13:37.201 [DEBUG] [Thread-4083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:13:37.201 [DEBUG] [Thread-4083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:13:37.201 [DEBUG] [Thread-4083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:13:37.201 [DEBUG] [Thread-4083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:13:37.218 [INFO] [Thread-4083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:13:37.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:13:37.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:13:38.034 [DEBUG] [Thread-4083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:13:38.034 [DEBUG] [Thread-4083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:13:38.081 [DEBUG] [Thread-4083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:13:38.081 [DEBUG] [Thread-4083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:13:38.089 [DEBUG] [Thread-4083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:13:38.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:13: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')
2025-12-25T03:13:38.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:13:38.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:13:38.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:13:38.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:13:38.120 [DEBUG] [Thread-4083] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:13:50.506 [DEBUG] [Thread-4085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:13:51.624 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:13:51.625 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:14:05.561 [DEBUG] [Thread-4086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:14:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:14:08.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:14:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:14:08.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 13, 47), 0.33, 97.65, 0.0, 19.62, 11.32, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:14:08.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:13:47
2025-12-25T03:14:08.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:14:09.115 [DEBUG] [Thread-4087] [transport.py] [_log()] starting thread (client mode): 0xb6b20730
2025-12-25T03:14:09.116 [DEBUG] [Thread-4087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:14:09.135 [DEBUG] [Thread-4087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:14:09.135 [INFO] [Thread-4087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:14:09.138 [DEBUG] [Thread-4087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:14:09.138 [DEBUG] [Thread-4087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:14:09.138 [DEBUG] [Thread-4087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:14:09.138 [DEBUG] [Thread-4087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:14:09.138 [DEBUG] [Thread-4087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] client lang: <none>
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] server lang: <none>
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] kex follows: False
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] Compression: none
2025-12-25T03:14:09.139 [DEBUG] [Thread-4087] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:14:09.156 [DEBUG] [Thread-4087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:14:09.157 [DEBUG] [Thread-4087] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:14:09.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:14:09.158 [DEBUG] [Thread-4087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:14:09.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:14:09.201 [DEBUG] [Thread-4087] [transport.py] [_log()] userauth is OK
2025-12-25T03:14:09.201 [DEBUG] [Thread-4087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:14:09.202 [DEBUG] [Thread-4087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:14:09.202 [DEBUG] [Thread-4087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:14:09.202 [DEBUG] [Thread-4087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:14:09.240 [INFO] [Thread-4087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:14:09.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:14:09.905 [DEBUG] [Thread-4087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:14:09.905 [DEBUG] [Thread-4087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:14:09.905 [DEBUG] [Thread-4087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:14:09.946 [DEBUG] [Thread-4087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:14:09.946 [DEBUG] [Thread-4087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:14:09.950 [DEBUG] [Thread-4087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:14:09.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:14:09.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:14:09.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:14:09.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:14:09.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:14:09.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:14:09.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:14:09.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:14:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:14:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.051110 -999.00  +11.30  18.99     95  +10.50 1 3 1 3 1     0    0 0.61 -4.66 ----- 13.7 19.0 154.2 22.7 13.1 -5.6 12.9 -5.0 12.8 -5.9 13.1 -5.1
2025-12-25T03:14:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:14:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:14:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.051110
2025-12-25T03:14:09.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:14:09.970 [DEBUG] [Thread-4087] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:14:09.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:14:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:14:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:14:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:14:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:13:47', tmtdew=0.33, humidity=97.65, cloud=0.0, wind=19.62, temperature=11.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:13:35.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:14:10.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:14:10.060 [DEBUG] [Thread-4090] [transport.py] [_log()] starting thread (client mode): 0xb6b36aa0
2025-12-25T03:14:10.060 [DEBUG] [Thread-4090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:14:10.075 [DEBUG] [Thread-4090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:14:10.075 [INFO] [Thread-4090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:14:10.082 [DEBUG] [Thread-4090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:14:10.082 [DEBUG] [Thread-4090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:14:10.082 [DEBUG] [Thread-4090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:14:10.082 [DEBUG] [Thread-4090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] client lang: <none>
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] server lang: <none>
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] kex follows: False
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] Compression: none
2025-12-25T03:14:10.083 [DEBUG] [Thread-4090] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:14:10.141 [DEBUG] [Thread-4090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:14:10.142 [DEBUG] [Thread-4090] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:14:10.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:14:10.143 [DEBUG] [Thread-4090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:14:10.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:14:10.197 [DEBUG] [Thread-4090] [transport.py] [_log()] userauth is OK
2025-12-25T03:14:10.198 [DEBUG] [Thread-4090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:14:10.198 [DEBUG] [Thread-4090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:14:10.198 [DEBUG] [Thread-4090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:14:10.198 [DEBUG] [Thread-4090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:14:10.217 [INFO] [Thread-4090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:14:10.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:14:10.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:14:11.012 [DEBUG] [Thread-4090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:14:11.012 [DEBUG] [Thread-4090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:14:11.060 [DEBUG] [Thread-4090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:14:11.060 [DEBUG] [Thread-4090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:14:11.069 [DEBUG] [Thread-4090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:14:11.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:14:11.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:14:11.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:14:11.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:14:11.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:14:11.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:14:11.106 [DEBUG] [Thread-4090] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:14:20.593 [DEBUG] [Thread-4092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:14:31.421 [DEBUG] [Thread-4093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:14:35.634 [DEBUG] [Thread-4094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:14:41.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:14:41.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:14:41.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:14:41.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 14, 19), 0.34, 97.58, 0.0, 20.15, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:14:41.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:14:19
2025-12-25T03:14:41.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:14:42.084 [DEBUG] [Thread-4095] [transport.py] [_log()] starting thread (client mode): 0xb6b17a60
2025-12-25T03:14:42.084 [DEBUG] [Thread-4095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:14:42.103 [DEBUG] [Thread-4095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:14:42.103 [INFO] [Thread-4095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] client lang: <none>
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] server lang: <none>
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] kex follows: False
2025-12-25T03:14:42.107 [DEBUG] [Thread-4095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:14:42.108 [DEBUG] [Thread-4095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:14:42.108 [DEBUG] [Thread-4095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:14:42.108 [DEBUG] [Thread-4095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:14:42.108 [DEBUG] [Thread-4095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:14:42.108 [DEBUG] [Thread-4095] [transport.py] [_log()] Compression: none
2025-12-25T03:14:42.108 [DEBUG] [Thread-4095] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:14:42.124 [DEBUG] [Thread-4095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:14:42.124 [DEBUG] [Thread-4095] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:14:42.125 [DEBUG] [Thread-4095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:14:42.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:14:42.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:14:42.169 [DEBUG] [Thread-4095] [transport.py] [_log()] userauth is OK
2025-12-25T03:14:42.170 [DEBUG] [Thread-4095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:14:42.170 [DEBUG] [Thread-4095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:14:42.170 [DEBUG] [Thread-4095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:14:42.170 [DEBUG] [Thread-4095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:14:42.190 [INFO] [Thread-4095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:14:42.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:14:42.773 [DEBUG] [Thread-4095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:14:42.774 [DEBUG] [Thread-4095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:14:42.774 [DEBUG] [Thread-4095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:14:42.816 [DEBUG] [Thread-4095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:14:42.816 [DEBUG] [Thread-4095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:14:42.819 [DEBUG] [Thread-4095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:14:42.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:14:42.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:14:42.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:14:42.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:14:42.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:14:42.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:14:42.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:14:42.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:14:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:14:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.051457 -999.00  +11.20  14.43     95  +10.50 1 3 1 3 1     0    0 0.62 -4.63 ----- 16.6 14.4 158.4 20.4 13.1 -4.9 12.9 -4.9 12.8 -5.0 13.1 -5.2
2025-12-25T03:14:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:14:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:14:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.051457
2025-12-25T03:14:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:14:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:14:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:14:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:14:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:14:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:14:19', tmtdew=0.34, humidity=97.58, cloud=0.0, wind=20.15, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:14:05.885', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:14:42.844 [DEBUG] [Thread-4095] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:14:42.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:14:42.939 [DEBUG] [Thread-4098] [transport.py] [_log()] starting thread (client mode): 0xb6b15d50
2025-12-25T03:14:42.939 [DEBUG] [Thread-4098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:14:42.954 [DEBUG] [Thread-4098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:14:42.954 [INFO] [Thread-4098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] client lang: <none>
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] server lang: <none>
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] kex follows: False
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] Compression: none
2025-12-25T03:14:42.962 [DEBUG] [Thread-4098] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:14:43.021 [DEBUG] [Thread-4098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:14:43.022 [DEBUG] [Thread-4098] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:14:43.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:14:43.023 [DEBUG] [Thread-4098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:14:43.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:14:43.077 [DEBUG] [Thread-4098] [transport.py] [_log()] userauth is OK
2025-12-25T03:14:43.077 [DEBUG] [Thread-4098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:14:43.078 [DEBUG] [Thread-4098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:14:43.078 [DEBUG] [Thread-4098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:14:43.078 [DEBUG] [Thread-4098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:14:43.100 [INFO] [Thread-4098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:14:43.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:14:43.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:14:43.916 [DEBUG] [Thread-4098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:14:43.916 [DEBUG] [Thread-4098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:14:43.964 [DEBUG] [Thread-4098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:14:43.964 [DEBUG] [Thread-4098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:14:43.974 [DEBUG] [Thread-4098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:14:43.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:14:43.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:14:43.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:14:44.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:14:44.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:14:44.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:14:44.009 [DEBUG] [Thread-4098] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:14:50.670 [DEBUG] [Thread-4100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:14:51.889 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:14:51.890 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:15:05.718 [DEBUG] [Thread-4101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:15:14.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:15:14.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:15:14.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:15:14.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 14, 51), 0.34, 97.56, 0.0, 20.12, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:15:14.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:14:51
2025-12-25T03:15:14.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:15:14.969 [DEBUG] [Thread-4102] [transport.py] [_log()] starting thread (client mode): 0xb6b14ee0
2025-12-25T03:15:14.970 [DEBUG] [Thread-4102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:15:14.990 [DEBUG] [Thread-4102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:15:14.990 [INFO] [Thread-4102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] client lang: <none>
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] server lang: <none>
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] kex follows: False
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] Compression: none
2025-12-25T03:15:14.994 [DEBUG] [Thread-4102] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:15:15.013 [DEBUG] [Thread-4102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:15:15.013 [DEBUG] [Thread-4102] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:15:15.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:15:15.014 [DEBUG] [Thread-4102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:15:15.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:15:15.017 [DEBUG] [Thread-4102] [transport.py] [_log()] userauth is OK
2025-12-25T03:15:15.017 [DEBUG] [Thread-4102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:15:15.017 [DEBUG] [Thread-4102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:15:15.017 [DEBUG] [Thread-4102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:15:15.018 [DEBUG] [Thread-4102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:15:15.055 [INFO] [Thread-4102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:15:15.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:15:15.703 [DEBUG] [Thread-4102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:15:15.709 [DEBUG] [Thread-4102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:15:15.710 [DEBUG] [Thread-4102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:15:15.746 [DEBUG] [Thread-4102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:15:15.746 [DEBUG] [Thread-4102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:15:15.749 [DEBUG] [Thread-4102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:15:15.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:15:15.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:15:15.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:15:15.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:15:15.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:15:15.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:15:15.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:15:15.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:15:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:15:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.051805 -999.00  +11.20  15.34     95  +10.50 1 3 1 3 1     0    0 0.59 -5.02 ----- 16.6 15.3 149.8 19.0 13.1 -5.4 12.9 -5.3 12.7 -5.1 13.1 -5.2
2025-12-25T03:15:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:15:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:15:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.051805
2025-12-25T03:15:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:15:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:15:15.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:15:15.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:15:15.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:15:15.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:14:51', tmtdew=0.34, humidity=97.56, cloud=0.0, wind=20.12, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:14:35.952', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:15:15.773 [DEBUG] [Thread-4102] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:15:15.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:15:15.871 [DEBUG] [Thread-4105] [transport.py] [_log()] starting thread (client mode): 0xb6b22f80
2025-12-25T03:15:15.871 [DEBUG] [Thread-4105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:15:15.886 [DEBUG] [Thread-4105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:15:15.886 [INFO] [Thread-4105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:15:15.893 [DEBUG] [Thread-4105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:15:15.894 [DEBUG] [Thread-4105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:15:15.894 [DEBUG] [Thread-4105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:15:15.894 [DEBUG] [Thread-4105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:15:15.894 [DEBUG] [Thread-4105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:15:15.894 [DEBUG] [Thread-4105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:15:15.894 [DEBUG] [Thread-4105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] client lang: <none>
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] server lang: <none>
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] kex follows: False
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] Compression: none
2025-12-25T03:15:15.895 [DEBUG] [Thread-4105] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:15:15.954 [DEBUG] [Thread-4105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:15:15.954 [DEBUG] [Thread-4105] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:15:15.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:15:15.955 [DEBUG] [Thread-4105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:15:15.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:15:16.010 [DEBUG] [Thread-4105] [transport.py] [_log()] userauth is OK
2025-12-25T03:15:16.010 [DEBUG] [Thread-4105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:15:16.011 [DEBUG] [Thread-4105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:15:16.011 [DEBUG] [Thread-4105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:15:16.011 [DEBUG] [Thread-4105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:15:16.029 [INFO] [Thread-4105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:15:16.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:15:16.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:15:16.848 [DEBUG] [Thread-4105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:15:16.849 [DEBUG] [Thread-4105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:15:16.897 [DEBUG] [Thread-4105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:15:16.898 [DEBUG] [Thread-4105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:15:16.907 [DEBUG] [Thread-4105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:15:16.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:15:16.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:15:16.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
2025-12-25T03:15:16.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:15:16.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:15:16.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:15:16.944 [DEBUG] [Thread-4105] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:15:20.750 [DEBUG] [Thread-4107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:15:31.477 [DEBUG] [Thread-4108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:15:35.801 [DEBUG] [Thread-4109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:15:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:15:46.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:15:46.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
2025-12-25T03:15:47.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 15, 23), 0.33, 97.63, 0.0, 20.57, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:15:47.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:15:23
2025-12-25T03:15:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:15:47.921 [DEBUG] [Thread-4110] [transport.py] [_log()] starting thread (client mode): 0xb6b22350
2025-12-25T03:15:47.921 [DEBUG] [Thread-4110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:15:47.943 [DEBUG] [Thread-4110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:15:47.943 [INFO] [Thread-4110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:15:47.946 [DEBUG] [Thread-4110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] client lang: <none>
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] server lang: <none>
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] kex follows: False
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] Compression: none
2025-12-25T03:15:47.947 [DEBUG] [Thread-4110] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:15:47.964 [DEBUG] [Thread-4110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:15:47.964 [DEBUG] [Thread-4110] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:15:47.964 [DEBUG] [Thread-4110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:15:47.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:15:47.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:15:47.965 [DEBUG] [Thread-4110] [transport.py] [_log()] userauth is OK
2025-12-25T03:15:47.965 [DEBUG] [Thread-4110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:15:47.965 [DEBUG] [Thread-4110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:15:47.965 [DEBUG] [Thread-4110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:15:47.965 [DEBUG] [Thread-4110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:15:47.980 [INFO] [Thread-4110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:15:47.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:15:48.625 [DEBUG] [Thread-4110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:15:48.625 [DEBUG] [Thread-4110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:15:48.626 [DEBUG] [Thread-4110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:15:48.666 [DEBUG] [Thread-4110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:15:48.666 [DEBUG] [Thread-4110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:15:48.669 [DEBUG] [Thread-4110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:15:48.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:15:48.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:15:48.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:15:48.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:15:48.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:15:48.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:15:48.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:15:48.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:15:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:15:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.052151 -999.00  +11.20  17.95     95  +10.50 1 3 1 3 1     0    0 0.60 -5.13 ----- 15.6 17.9 143.8 26.4 13.1 -5.7 12.9 -5.3 12.8 -4.9 13.1 -5.5
2025-12-25T03:15:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:15:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:15:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.052151
2025-12-25T03:15:48.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:15:48.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:15:48.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:15:48.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:15:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:15:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:15:23', tmtdew=0.33, humidity=97.63, cloud=0.0, wind=20.57, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:15:05.846', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:15:48.697 [DEBUG] [Thread-4110] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:15:48.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:15:48.790 [DEBUG] [Thread-4113] [transport.py] [_log()] starting thread (client mode): 0xb6b20370
2025-12-25T03:15:48.790 [DEBUG] [Thread-4113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:15:48.805 [DEBUG] [Thread-4113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:15:48.805 [INFO] [Thread-4113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:15:48.813 [DEBUG] [Thread-4113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:15:48.813 [DEBUG] [Thread-4113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:15:48.813 [DEBUG] [Thread-4113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:15:48.813 [DEBUG] [Thread-4113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:15:48.813 [DEBUG] [Thread-4113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:15:48.813 [DEBUG] [Thread-4113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:15:48.813 [DEBUG] [Thread-4113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] client lang: <none>
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] server lang: <none>
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] kex follows: False
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] Compression: none
2025-12-25T03:15:48.814 [DEBUG] [Thread-4113] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:15:48.875 [DEBUG] [Thread-4113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:15:48.875 [DEBUG] [Thread-4113] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:15:48.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:15:48.877 [DEBUG] [Thread-4113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:15:48.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:15:48.934 [DEBUG] [Thread-4113] [transport.py] [_log()] userauth is OK
2025-12-25T03:15:48.934 [DEBUG] [Thread-4113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:15:48.935 [DEBUG] [Thread-4113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:15:48.935 [DEBUG] [Thread-4113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:15:48.935 [DEBUG] [Thread-4113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:15:48.953 [INFO] [Thread-4113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:15:48.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:15:48.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:15:49.807 [DEBUG] [Thread-4113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:15:49.807 [DEBUG] [Thread-4113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:15:49.855 [DEBUG] [Thread-4113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:15:49.855 [DEBUG] [Thread-4113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:15:49.864 [DEBUG] [Thread-4113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:15:49.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:15:49.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:15:49.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:15:49.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:15:49.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:15:49.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:15:49.901 [DEBUG] [Thread-4113] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:15:50.834 [DEBUG] [Thread-4115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:15:52.095 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:15:52.097 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:16:05.883 [DEBUG] [Thread-4116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:16:19.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:16:19.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:16: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
2025-12-25T03:16:20.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 15, 55), 0.33, 97.63, 0.0, 19.41, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:16:20.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:15:55
2025-12-25T03:16:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:16:20.871 [DEBUG] [Thread-4117] [transport.py] [_log()] starting thread (client mode): 0xb6b229e0
2025-12-25T03:16:20.872 [DEBUG] [Thread-4117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:16:20.890 [DEBUG] [Thread-4117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:16:20.890 [INFO] [Thread-4117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:16:20.892 [DEBUG] [Thread-4117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] client lang: <none>
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] server lang: <none>
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] kex follows: False
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] Compression: none
2025-12-25T03:16:20.893 [DEBUG] [Thread-4117] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:16:20.907 [DEBUG] [Thread-4117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:16:20.907 [DEBUG] [Thread-4117] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:16:20.907 [DEBUG] [Thread-4117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:16:20.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:16:20.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:16:20.907 [DEBUG] [Thread-4117] [transport.py] [_log()] userauth is OK
2025-12-25T03:16:20.907 [DEBUG] [Thread-4117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:16:20.907 [DEBUG] [Thread-4117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:16:20.907 [DEBUG] [Thread-4117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:16:20.907 [DEBUG] [Thread-4117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:16:20.915 [DEBUG] [Thread-4119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:16:20.916 [INFO] [Thread-4117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:16:20.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:16:21.569 [DEBUG] [Thread-4117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:16:21.570 [DEBUG] [Thread-4117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:16:21.570 [DEBUG] [Thread-4117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:16:21.611 [DEBUG] [Thread-4117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:16:21.611 [DEBUG] [Thread-4117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:16:21.615 [DEBUG] [Thread-4117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:16:21.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:16:21.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:16:21.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:16:21.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:16:21.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:16:21.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:16:21.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:16:21.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:16:21.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:16:21.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.052499 -999.00  +11.20  18.59     95  +10.50 1 3 1 3 1     0    0 0.60 -4.85 ----- 17.2 18.6 147.4 21.1 13.1 -6.4 12.9 -5.6 12.8 -5.8 13.1 -5.6
2025-12-25T03:16:21.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:16:21.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:16:21.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.052499
2025-12-25T03:16:21.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:16:21.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:16:21.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:16:21.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:16:21.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:16:21.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:15:55', tmtdew=0.33, humidity=97.63, cloud=0.0, wind=19.41, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:15:35.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:16:21.641 [DEBUG] [Thread-4117] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:16:21.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:16:21.735 [DEBUG] [Thread-4121] [transport.py] [_log()] starting thread (client mode): 0xb95f3a00
2025-12-25T03:16:21.736 [DEBUG] [Thread-4121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:16:21.750 [DEBUG] [Thread-4121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:16:21.751 [INFO] [Thread-4121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:16:21.758 [DEBUG] [Thread-4121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:16:21.759 [DEBUG] [Thread-4121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:16:21.759 [DEBUG] [Thread-4121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:16:21.759 [DEBUG] [Thread-4121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:16:21.759 [DEBUG] [Thread-4121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:16:21.759 [DEBUG] [Thread-4121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:16:21.759 [DEBUG] [Thread-4121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:16:21.759 [DEBUG] [Thread-4121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:16:21.759 [DEBUG] [Thread-4121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:16:21.760 [DEBUG] [Thread-4121] [transport.py] [_log()] client lang: <none>
2025-12-25T03:16:21.760 [DEBUG] [Thread-4121] [transport.py] [_log()] server lang: <none>
2025-12-25T03:16:21.760 [DEBUG] [Thread-4121] [transport.py] [_log()] kex follows: False
2025-12-25T03:16:21.760 [DEBUG] [Thread-4121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:16:21.760 [DEBUG] [Thread-4121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:16:21.760 [DEBUG] [Thread-4121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:16:21.760 [DEBUG] [Thread-4121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:16:21.760 [DEBUG] [Thread-4121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:16:21.761 [DEBUG] [Thread-4121] [transport.py] [_log()] Compression: none
2025-12-25T03:16:21.761 [DEBUG] [Thread-4121] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:16:21.819 [DEBUG] [Thread-4121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:16:21.819 [DEBUG] [Thread-4121] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:16:21.820 [DEBUG] [Thread-4121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:16:21.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:16:21.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:16:21.875 [DEBUG] [Thread-4121] [transport.py] [_log()] userauth is OK
2025-12-25T03:16:21.875 [DEBUG] [Thread-4121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:16:21.875 [DEBUG] [Thread-4121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:16:21.875 [DEBUG] [Thread-4121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:16:21.875 [DEBUG] [Thread-4121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:16:21.894 [INFO] [Thread-4121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:16:21.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:16:21.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:16:22.725 [DEBUG] [Thread-4121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:16:22.726 [DEBUG] [Thread-4121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:16:22.774 [DEBUG] [Thread-4121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:16:22.774 [DEBUG] [Thread-4121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:16:22.783 [DEBUG] [Thread-4121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:16:22.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:16:22.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:16:22.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:16:22.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:16:22.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:16:22.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:16:22.820 [DEBUG] [Thread-4121] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:16:31.565 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:16:35.948 [DEBUG] [Thread-4124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:16:50.999 [DEBUG] [Thread-4125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:16:52.315 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:16:52.316 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:16:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:16:52.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:16:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:16:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 16, 27), 0.33, 97.63, 0.0, 21.0, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:16:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:16:27
2025-12-25T03:16:53.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:16:53.859 [DEBUG] [Thread-4126] [transport.py] [_log()] starting thread (client mode): 0xb6b15720
2025-12-25T03:16:53.859 [DEBUG] [Thread-4126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:16:53.879 [DEBUG] [Thread-4126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:16:53.879 [INFO] [Thread-4126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] client lang: <none>
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] server lang: <none>
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] kex follows: False
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] Compression: none
2025-12-25T03:16:53.883 [DEBUG] [Thread-4126] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:16:53.898 [DEBUG] [Thread-4126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:16:53.898 [DEBUG] [Thread-4126] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:16:53.898 [DEBUG] [Thread-4126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:16:53.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:16:53.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:16:53.899 [DEBUG] [Thread-4126] [transport.py] [_log()] userauth is OK
2025-12-25T03:16:53.899 [DEBUG] [Thread-4126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:16:53.899 [DEBUG] [Thread-4126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:16:53.899 [DEBUG] [Thread-4126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:16:53.899 [DEBUG] [Thread-4126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:16:53.928 [INFO] [Thread-4126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:16:53.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:16:54.560 [DEBUG] [Thread-4126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:16:54.560 [DEBUG] [Thread-4126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:16:54.560 [DEBUG] [Thread-4126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:16:54.601 [DEBUG] [Thread-4126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:16:54.602 [DEBUG] [Thread-4126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:16:54.604 [DEBUG] [Thread-4126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:16:54.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:16:54.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:16:54.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:16:54.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:16:54.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:16:54.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:16:54.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.052846 -999.00  +11.20  16.16     95  +10.50 1 3 1 3 1     0    0 0.61 -4.91 ----- 18.7 16.2 159.0 20.9 13.1 -6.2 12.9 -6.1 12.8 -5.7 13.1 -7.1
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.052846
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:16:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:16:27', tmtdew=0.33, humidity=97.63, cloud=0.0, wind=21.0, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:16:05.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:16:54.621 [DEBUG] [Thread-4126] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:16:54.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:16:54.705 [DEBUG] [Thread-4129] [transport.py] [_log()] starting thread (client mode): 0xb6b15c30
2025-12-25T03:16:54.705 [DEBUG] [Thread-4129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:16:54.720 [DEBUG] [Thread-4129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:16:54.720 [INFO] [Thread-4129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] client lang: <none>
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] server lang: <none>
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] kex follows: False
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:16:54.727 [DEBUG] [Thread-4129] [transport.py] [_log()] Compression: none
2025-12-25T03:16:54.728 [DEBUG] [Thread-4129] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:16:54.785 [DEBUG] [Thread-4129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:16:54.785 [DEBUG] [Thread-4129] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:16:54.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:16:54.785 [DEBUG] [Thread-4129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:16:54.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:16:54.842 [DEBUG] [Thread-4129] [transport.py] [_log()] userauth is OK
2025-12-25T03:16:54.842 [DEBUG] [Thread-4129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:16:54.842 [DEBUG] [Thread-4129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:16:54.842 [DEBUG] [Thread-4129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:16:54.842 [DEBUG] [Thread-4129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:16:54.855 [INFO] [Thread-4129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:16:54.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:16:54.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:16:55.680 [DEBUG] [Thread-4129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:16:55.680 [DEBUG] [Thread-4129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:16:55.728 [DEBUG] [Thread-4129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:16:55.728 [DEBUG] [Thread-4129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:16:55.737 [DEBUG] [Thread-4129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:16:55.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:16:55.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:16:55.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:16:55.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:16:55.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:16:55.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:16:55.769 [DEBUG] [Thread-4129] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:17:06.030 [DEBUG] [Thread-4131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:17:21.080 [DEBUG] [Thread-4132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:17:25.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:17:25.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:17:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:17:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 16, 59), 0.33, 97.61, 0.0, 20.1, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:17:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:16:59
2025-12-25T03:17:26.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:17:26.771 [DEBUG] [Thread-4133] [transport.py] [_log()] starting thread (client mode): 0xb6b16dd0
2025-12-25T03:17:26.771 [DEBUG] [Thread-4133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:17:26.791 [DEBUG] [Thread-4133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:17:26.791 [INFO] [Thread-4133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] client lang: <none>
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] server lang: <none>
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] kex follows: False
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] Compression: none
2025-12-25T03:17:26.794 [DEBUG] [Thread-4133] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:17:26.811 [DEBUG] [Thread-4133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:17:26.812 [DEBUG] [Thread-4133] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:17:26.813 [DEBUG] [Thread-4133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:17:26.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:17:26.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:17:26.814 [DEBUG] [Thread-4133] [transport.py] [_log()] userauth is OK
2025-12-25T03:17:26.815 [DEBUG] [Thread-4133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:17:26.815 [DEBUG] [Thread-4133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:17:26.815 [DEBUG] [Thread-4133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:17:26.815 [DEBUG] [Thread-4133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:17:26.832 [INFO] [Thread-4133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:17:26.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:17:27.477 [DEBUG] [Thread-4133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:17:27.478 [DEBUG] [Thread-4133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:17:27.478 [DEBUG] [Thread-4133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:17:27.519 [DEBUG] [Thread-4133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:17:27.519 [DEBUG] [Thread-4133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:17:27.523 [DEBUG] [Thread-4133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:17:27.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:17:27.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:17:27.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:17:27.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:17:27.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:17:27.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:17:27.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:17:27.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:17:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:17:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.053193 -999.00  +11.20  15.01     95  +10.50 1 3 1 3 1     0    0 0.59 -5.11 ----- 15.3 15.0 161.4 24.4 13.1 -7.0 13.0 -6.2 12.8 -7.3 13.1 -6.7
2025-12-25T03:17:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:17:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:17:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.053193
2025-12-25T03:17:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:17:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:17:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:17:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:17:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:17:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:16:59', tmtdew=0.33, humidity=97.61, cloud=0.0, wind=20.1, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:16:35.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:17:27.552 [DEBUG] [Thread-4133] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:17:27.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:17:27.636 [DEBUG] [Thread-4136] [transport.py] [_log()] starting thread (client mode): 0xb955a5f0
2025-12-25T03:17:27.636 [DEBUG] [Thread-4136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:17:27.651 [DEBUG] [Thread-4136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:17:27.651 [INFO] [Thread-4136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] client lang: <none>
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] server lang: <none>
2025-12-25T03:17:27.660 [DEBUG] [Thread-4136] [transport.py] [_log()] kex follows: False
2025-12-25T03:17:27.661 [DEBUG] [Thread-4136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:17:27.661 [DEBUG] [Thread-4136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:17:27.661 [DEBUG] [Thread-4136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:17:27.661 [DEBUG] [Thread-4136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:17:27.661 [DEBUG] [Thread-4136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:17:27.661 [DEBUG] [Thread-4136] [transport.py] [_log()] Compression: none
2025-12-25T03:17:27.661 [DEBUG] [Thread-4136] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:17:27.722 [DEBUG] [Thread-4136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:17:27.722 [DEBUG] [Thread-4136] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:17:27.722 [DEBUG] [Thread-4136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:17:27.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:17:27.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:17:27.779 [DEBUG] [Thread-4136] [transport.py] [_log()] userauth is OK
2025-12-25T03:17:27.779 [DEBUG] [Thread-4136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:17:27.779 [DEBUG] [Thread-4136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:17:27.779 [DEBUG] [Thread-4136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:17:27.779 [DEBUG] [Thread-4136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:17:27.798 [INFO] [Thread-4136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:17:27.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:17:27.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:17:28.642 [DEBUG] [Thread-4136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:17:28.642 [DEBUG] [Thread-4136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:17:28.690 [DEBUG] [Thread-4136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:17:28.690 [DEBUG] [Thread-4136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:17:28.699 [DEBUG] [Thread-4136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:17:28.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:17: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')
2025-12-25T03:17: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
2025-12-25T03:17:28.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:17:28.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:17:28.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:17:28.731 [DEBUG] [Thread-4136] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:17:31.640 [DEBUG] [Thread-4138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:17:36.113 [DEBUG] [Thread-4139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:17:51.156 [DEBUG] [Thread-4140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:17:52.517 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:17:52.518 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:17:58.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:17:58.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:17:58.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:17:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 17, 31), 0.33, 97.66, 0.0, 19.96, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:17:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:17:31
2025-12-25T03:17:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:17:59.726 [DEBUG] [Thread-4141] [transport.py] [_log()] starting thread (client mode): 0xb6b23190
2025-12-25T03:17:59.726 [DEBUG] [Thread-4141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:17:59.752 [DEBUG] [Thread-4141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:17:59.752 [INFO] [Thread-4141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] client lang: <none>
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] server lang: <none>
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] kex follows: False
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:17:59.754 [DEBUG] [Thread-4141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:17:59.755 [DEBUG] [Thread-4141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:17:59.755 [DEBUG] [Thread-4141] [transport.py] [_log()] Compression: none
2025-12-25T03:17:59.755 [DEBUG] [Thread-4141] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:17:59.772 [DEBUG] [Thread-4141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:17:59.773 [DEBUG] [Thread-4141] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:17:59.774 [DEBUG] [Thread-4141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:17:59.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:17:59.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:17:59.775 [DEBUG] [Thread-4141] [transport.py] [_log()] userauth is OK
2025-12-25T03:17:59.776 [DEBUG] [Thread-4141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:17:59.776 [DEBUG] [Thread-4141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:17:59.776 [DEBUG] [Thread-4141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:17:59.776 [DEBUG] [Thread-4141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:17:59.800 [INFO] [Thread-4141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:17:59.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:18:00.471 [DEBUG] [Thread-4141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:18:00.471 [DEBUG] [Thread-4141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:18:00.471 [DEBUG] [Thread-4141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:18:00.512 [DEBUG] [Thread-4141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:18:00.512 [DEBUG] [Thread-4141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:18:00.516 [DEBUG] [Thread-4141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:18:00.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:18:00.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:18:00.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:18:00.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:18:00.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:18:00.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:18:00.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:18:00.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:18:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:18:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.053888 -999.00  +11.20  15.57     95  +10.50 1 3 1 3 1     0    0 0.57 -5.16 ----- 15.8 15.6 160.7 22.0 13.0 -4.6 12.9 -6.5 12.7 -4.6 13.1 -6.5
2025-12-25T03:18:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:18:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:18:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.053888
2025-12-25T03:18:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:18:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:18:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:18:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:18:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:18:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:17:31', tmtdew=0.33, humidity=97.66, cloud=0.0, wind=19.96, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:17:35.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:18:00.543 [DEBUG] [Thread-4141] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:18:00.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:18:00.639 [DEBUG] [Thread-4144] [transport.py] [_log()] starting thread (client mode): 0xb6b231f0
2025-12-25T03:18:00.639 [DEBUG] [Thread-4144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:18:00.656 [DEBUG] [Thread-4144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:18:00.656 [INFO] [Thread-4144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:18:00.664 [DEBUG] [Thread-4144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:18:00.664 [DEBUG] [Thread-4144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:18:00.664 [DEBUG] [Thread-4144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:18:00.664 [DEBUG] [Thread-4144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:18:00.664 [DEBUG] [Thread-4144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:18:00.664 [DEBUG] [Thread-4144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:18:00.665 [DEBUG] [Thread-4144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:18:00.665 [DEBUG] [Thread-4144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:18:00.665 [DEBUG] [Thread-4144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:18:00.665 [DEBUG] [Thread-4144] [transport.py] [_log()] client lang: <none>
2025-12-25T03:18:00.665 [DEBUG] [Thread-4144] [transport.py] [_log()] server lang: <none>
2025-12-25T03:18:00.665 [DEBUG] [Thread-4144] [transport.py] [_log()] kex follows: False
2025-12-25T03:18:00.665 [DEBUG] [Thread-4144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:18:00.665 [DEBUG] [Thread-4144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:18:00.666 [DEBUG] [Thread-4144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:18:00.666 [DEBUG] [Thread-4144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:18:00.666 [DEBUG] [Thread-4144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:18:00.666 [DEBUG] [Thread-4144] [transport.py] [_log()] Compression: none
2025-12-25T03:18:00.666 [DEBUG] [Thread-4144] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:18:00.729 [DEBUG] [Thread-4144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:18:00.730 [DEBUG] [Thread-4144] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:18:00.730 [DEBUG] [Thread-4144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:18:00.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:18:00.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:18:00.787 [DEBUG] [Thread-4144] [transport.py] [_log()] userauth is OK
2025-12-25T03:18:00.787 [DEBUG] [Thread-4144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:18:00.787 [DEBUG] [Thread-4144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:18:00.787 [DEBUG] [Thread-4144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:18:00.787 [DEBUG] [Thread-4144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:18:00.806 [INFO] [Thread-4144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:18:00.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:18:00.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:18:01.627 [DEBUG] [Thread-4144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:18:01.627 [DEBUG] [Thread-4144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:18:01.675 [DEBUG] [Thread-4144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:18:01.675 [DEBUG] [Thread-4144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:18:01.684 [DEBUG] [Thread-4144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:18:01.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:18:01.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')
2025-12-25T03:18:01.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:18:01.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:18:01.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:18:01.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:18:01.721 [DEBUG] [Thread-4144] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:18:06.190 [DEBUG] [Thread-4146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:18:21.225 [DEBUG] [Thread-4147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:18:31.699 [DEBUG] [Thread-4148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:18:31.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:18:31.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:18: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
2025-12-25T03:18:32.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 18, 3), 0.33, 97.61, 0.0, 18.95, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:18:32.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:18:03
2025-12-25T03:18:32.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:18:32.691 [DEBUG] [Thread-4149] [transport.py] [_log()] starting thread (client mode): 0xb95f18d0
2025-12-25T03:18:32.691 [DEBUG] [Thread-4149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:18:32.712 [DEBUG] [Thread-4149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:18:32.712 [INFO] [Thread-4149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] client lang: <none>
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] server lang: <none>
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] kex follows: False
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] Compression: none
2025-12-25T03:18:32.715 [DEBUG] [Thread-4149] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:18:32.724 [DEBUG] [Thread-4149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:18:32.725 [DEBUG] [Thread-4149] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:18:32.725 [DEBUG] [Thread-4149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:18:32.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:18:32.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:18:32.727 [DEBUG] [Thread-4149] [transport.py] [_log()] userauth is OK
2025-12-25T03:18:32.727 [DEBUG] [Thread-4149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:18:32.727 [DEBUG] [Thread-4149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:18:32.727 [DEBUG] [Thread-4149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:18:32.727 [DEBUG] [Thread-4149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:18:32.745 [INFO] [Thread-4149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:18:32.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:18:33.339 [DEBUG] [Thread-4149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:18:33.340 [DEBUG] [Thread-4149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:18:33.340 [DEBUG] [Thread-4149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:18:33.380 [DEBUG] [Thread-4149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:18:33.380 [DEBUG] [Thread-4149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:18:33.384 [DEBUG] [Thread-4149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:18:33.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:18:33.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:18:33.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:18:33.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:18:33.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:18:33.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:18:33.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:18:33.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:18:33.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:18:33.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.054235 -999.00  +11.20  19.79     95  +10.50 1 3 1 3 1     0    0 0.58 -5.24 ----- 18.8 19.8 143.6 23.3 13.1 -4.5 12.9 -4.1 12.8 -4.3 13.1 -4.8
2025-12-25T03:18:33.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:18:33.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:18:33.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.054235
2025-12-25T03:18:33.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:18:33.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:18:33.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:18:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:18:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:18:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:18:03', tmtdew=0.33, humidity=97.61, cloud=0.0, wind=18.95, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:18:05.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:18:33.410 [DEBUG] [Thread-4149] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:18:33.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:18:33.504 [DEBUG] [Thread-4152] [transport.py] [_log()] starting thread (client mode): 0xb6b16950
2025-12-25T03:18:33.504 [DEBUG] [Thread-4152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:18:33.518 [DEBUG] [Thread-4152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:18:33.518 [INFO] [Thread-4152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:18:33.526 [DEBUG] [Thread-4152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] client lang: <none>
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] server lang: <none>
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] kex follows: False
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] Compression: none
2025-12-25T03:18:33.527 [DEBUG] [Thread-4152] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:18:33.588 [DEBUG] [Thread-4152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:18:33.588 [DEBUG] [Thread-4152] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:18:33.589 [DEBUG] [Thread-4152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:18:33.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:18:33.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:18:33.647 [DEBUG] [Thread-4152] [transport.py] [_log()] userauth is OK
2025-12-25T03:18:33.648 [DEBUG] [Thread-4152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:18:33.648 [DEBUG] [Thread-4152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:18:33.648 [DEBUG] [Thread-4152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:18:33.648 [DEBUG] [Thread-4152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:18:33.668 [INFO] [Thread-4152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:18:33.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:18:33.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:18:34.476 [DEBUG] [Thread-4152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:18:34.477 [DEBUG] [Thread-4152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:18:34.525 [DEBUG] [Thread-4152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:18:34.525 [DEBUG] [Thread-4152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:18:34.534 [DEBUG] [Thread-4152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:18:34.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:18:34.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:18:34.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:18:34.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:18:34.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:18:34.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:18:34.571 [DEBUG] [Thread-4152] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:18:36.266 [DEBUG] [Thread-4154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:18:51.313 [DEBUG] [Thread-4155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:18:52.720 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:18:52.721 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:19:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:19:04.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:19:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:19:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 18, 35), 0.34, 97.6, 0.0, 20.86, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:19:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:18:35
2025-12-25T03:19:05.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:19:05.573 [DEBUG] [Thread-4156] [transport.py] [_log()] starting thread (client mode): 0xb95f3ca0
2025-12-25T03:19:05.573 [DEBUG] [Thread-4156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:19:05.594 [DEBUG] [Thread-4156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:19:05.594 [INFO] [Thread-4156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:19:05.597 [DEBUG] [Thread-4156] [transport.py] [_log()] client lang: <none>
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] server lang: <none>
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] kex follows: False
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] Compression: none
2025-12-25T03:19:05.598 [DEBUG] [Thread-4156] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:19:05.616 [DEBUG] [Thread-4156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:19:05.617 [DEBUG] [Thread-4156] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:19:05.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:19:05.618 [DEBUG] [Thread-4156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:19:05.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:19:05.620 [DEBUG] [Thread-4156] [transport.py] [_log()] userauth is OK
2025-12-25T03:19:05.620 [DEBUG] [Thread-4156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:19:05.620 [DEBUG] [Thread-4156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:19:05.620 [DEBUG] [Thread-4156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:19:05.620 [DEBUG] [Thread-4156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:19:05.645 [INFO] [Thread-4156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:19:05.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:19:06.310 [DEBUG] [Thread-4156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:19:06.310 [DEBUG] [Thread-4156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:19:06.310 [DEBUG] [Thread-4156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:19:06.346 [DEBUG] [Thread-4158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:19:06.351 [DEBUG] [Thread-4156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:19:06.351 [DEBUG] [Thread-4156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:19:06.354 [DEBUG] [Thread-4156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:19:06.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:19:06.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:19:06.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:19:06.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:19:06.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:19:06.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:19:06.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:19:06.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:19:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:19:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.054582 -999.00  +11.20  15.72     95  +10.50 1 3 1 3 1     0    0 0.56 -5.48 ----- 14.1 15.7 153.0 21.1 13.1 -6.4 12.9 -5.3 12.8 -5.7 13.1 -5.6
2025-12-25T03:19:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:19:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:19:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.054582
2025-12-25T03:19:06.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:19:06.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:19:06.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:19:06.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:19:06.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:19:06.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:18:35', tmtdew=0.34, humidity=97.6, cloud=0.0, wind=20.86, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:18:35.885', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:19:06.382 [DEBUG] [Thread-4156] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:19:06.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:19:06.477 [DEBUG] [Thread-4160] [transport.py] [_log()] starting thread (client mode): 0xb6b22cb0
2025-12-25T03:19:06.477 [DEBUG] [Thread-4160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:19:06.491 [DEBUG] [Thread-4160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:19:06.492 [INFO] [Thread-4160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:19:06.499 [DEBUG] [Thread-4160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:19:06.499 [DEBUG] [Thread-4160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:19:06.500 [DEBUG] [Thread-4160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:19:06.500 [DEBUG] [Thread-4160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:19:06.500 [DEBUG] [Thread-4160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:19:06.500 [DEBUG] [Thread-4160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:19:06.500 [DEBUG] [Thread-4160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:19:06.500 [DEBUG] [Thread-4160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:19:06.500 [DEBUG] [Thread-4160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] client lang: <none>
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] server lang: <none>
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] kex follows: False
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] Compression: none
2025-12-25T03:19:06.501 [DEBUG] [Thread-4160] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:19:06.560 [DEBUG] [Thread-4160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:19:06.560 [DEBUG] [Thread-4160] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:19:06.561 [DEBUG] [Thread-4160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:19:06.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:19:06.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:19:06.616 [DEBUG] [Thread-4160] [transport.py] [_log()] userauth is OK
2025-12-25T03:19:06.616 [DEBUG] [Thread-4160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:19:06.616 [DEBUG] [Thread-4160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:19:06.616 [DEBUG] [Thread-4160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:19:06.616 [DEBUG] [Thread-4160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:19:06.634 [INFO] [Thread-4160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:19:06.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:19:06.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:19:07.444 [DEBUG] [Thread-4160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:19:07.444 [DEBUG] [Thread-4160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:19:07.492 [DEBUG] [Thread-4160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:19:07.492 [DEBUG] [Thread-4160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:19:07.502 [DEBUG] [Thread-4160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:19:07.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:19: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')
2025-12-25T03:19:07.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:19:07.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:19:07.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:19:07.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:19:07.545 [DEBUG] [Thread-4160] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:19:21.384 [DEBUG] [Thread-4162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:19:31.770 [DEBUG] [Thread-4163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:19:36.441 [DEBUG] [Thread-4164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:19:37.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:19:37.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:19:37.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:19:38.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 19, 7), 0.33, 97.65, 0.0, 21.84, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:19:38.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:19:07
2025-12-25T03:19:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:19:38.544 [DEBUG] [Thread-4165] [transport.py] [_log()] starting thread (client mode): 0xb95f10f0
2025-12-25T03:19:38.544 [DEBUG] [Thread-4165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:19:38.563 [DEBUG] [Thread-4165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:19:38.563 [INFO] [Thread-4165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:19:38.566 [DEBUG] [Thread-4165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:19:38.566 [DEBUG] [Thread-4165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] client lang: <none>
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] server lang: <none>
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] kex follows: False
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] Compression: none
2025-12-25T03:19:38.567 [DEBUG] [Thread-4165] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:19:38.585 [DEBUG] [Thread-4165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:19:38.586 [DEBUG] [Thread-4165] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:19:38.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:19:38.587 [DEBUG] [Thread-4165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:19:38.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:19:38.589 [DEBUG] [Thread-4165] [transport.py] [_log()] userauth is OK
2025-12-25T03:19:38.589 [DEBUG] [Thread-4165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:19:38.589 [DEBUG] [Thread-4165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:19:38.589 [DEBUG] [Thread-4165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:19:38.589 [DEBUG] [Thread-4165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:19:38.606 [INFO] [Thread-4165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:19:38.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:19:39.328 [DEBUG] [Thread-4165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:19:39.328 [DEBUG] [Thread-4165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:19:39.328 [DEBUG] [Thread-4165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:19:39.369 [DEBUG] [Thread-4165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:19:39.369 [DEBUG] [Thread-4165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:19:39.372 [DEBUG] [Thread-4165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:19:39.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:19:39.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:19:39.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:19:39.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:19:39.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:19:39.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:19:39.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:19:39.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:19:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:19:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.054929 -999.00  +11.20  17.76     95  +10.50 1 3 1 3 1     0    0 0.58 -5.09 ----- 16.5 17.8 153.6 23.3 13.1 -5.7 12.9 -8.4 12.7 -5.9 13.0 -8.5
2025-12-25T03:19:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:19:39.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:19:39.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.054929
2025-12-25T03:19:39.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:19:39.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:19:39.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:19:39.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:19:39.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:19:39.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:19:07', tmtdew=0.33, humidity=97.65, cloud=0.0, wind=21.84, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:19:05.866', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:19:39.399 [DEBUG] [Thread-4165] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:19:39.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:19:39.493 [DEBUG] [Thread-4168] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-25T03:19:39.493 [DEBUG] [Thread-4168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:19:39.508 [DEBUG] [Thread-4168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:19:39.509 [INFO] [Thread-4168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:19:39.516 [DEBUG] [Thread-4168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] client lang: <none>
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] server lang: <none>
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] kex follows: False
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:19:39.517 [DEBUG] [Thread-4168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:19:39.518 [DEBUG] [Thread-4168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:19:39.518 [DEBUG] [Thread-4168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:19:39.518 [DEBUG] [Thread-4168] [transport.py] [_log()] Compression: none
2025-12-25T03:19:39.518 [DEBUG] [Thread-4168] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:19:39.576 [DEBUG] [Thread-4168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:19:39.576 [DEBUG] [Thread-4168] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:19:39.577 [DEBUG] [Thread-4168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:19:39.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:19:39.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:19:39.632 [DEBUG] [Thread-4168] [transport.py] [_log()] userauth is OK
2025-12-25T03:19:39.632 [DEBUG] [Thread-4168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:19:39.632 [DEBUG] [Thread-4168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:19:39.632 [DEBUG] [Thread-4168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:19:39.632 [DEBUG] [Thread-4168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:19:39.651 [INFO] [Thread-4168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:19:39.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:19:39.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:19:40.475 [DEBUG] [Thread-4168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:19:40.476 [DEBUG] [Thread-4168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:19:40.523 [DEBUG] [Thread-4168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:19:40.523 [DEBUG] [Thread-4168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:19:40.532 [DEBUG] [Thread-4168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:19:40.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:19:40.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:19:40.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:19:40.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:19:40.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:19:40.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:19:40.563 [DEBUG] [Thread-4168] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:19:51.476 [DEBUG] [Thread-4170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:19:52.922 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:19:52.923 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:20:06.529 [DEBUG] [Thread-4171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:20:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:20:10.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:20:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:20:11.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 19, 39), 0.32, 97.7, 0.0, 22.89, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:20:11.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:19:39
2025-12-25T03:20:11.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:20:11.619 [DEBUG] [Thread-4172] [transport.py] [_log()] starting thread (client mode): 0xb95591e0
2025-12-25T03:20:11.619 [DEBUG] [Thread-4172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:20:11.640 [DEBUG] [Thread-4172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:20:11.640 [INFO] [Thread-4172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:20:11.643 [DEBUG] [Thread-4172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:20:11.643 [DEBUG] [Thread-4172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:20:11.643 [DEBUG] [Thread-4172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:20:11.643 [DEBUG] [Thread-4172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:20:11.643 [DEBUG] [Thread-4172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:20:11.643 [DEBUG] [Thread-4172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:20:11.643 [DEBUG] [Thread-4172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] client lang: <none>
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] server lang: <none>
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] kex follows: False
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] Compression: none
2025-12-25T03:20:11.644 [DEBUG] [Thread-4172] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:20:11.661 [DEBUG] [Thread-4172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:20:11.662 [DEBUG] [Thread-4172] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:20:11.662 [DEBUG] [Thread-4172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:20:11.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:20:11.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:20:11.663 [DEBUG] [Thread-4172] [transport.py] [_log()] userauth is OK
2025-12-25T03:20:11.663 [DEBUG] [Thread-4172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:20:11.663 [DEBUG] [Thread-4172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:20:11.663 [DEBUG] [Thread-4172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:20:11.663 [DEBUG] [Thread-4172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:20:11.674 [INFO] [Thread-4172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:20:11.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:20:12.555 [DEBUG] [Thread-4172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:20:12.555 [DEBUG] [Thread-4172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:20:12.555 [DEBUG] [Thread-4172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:20:12.596 [DEBUG] [Thread-4172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:20:12.596 [DEBUG] [Thread-4172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:20:12.599 [DEBUG] [Thread-4172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:20:12.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:20:12.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:20:12.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:20:12.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:20:12.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:20:12.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:20:12.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.055277 -999.00  +11.20  14.88     95  +10.50 1 3 1 3 1     0    0 0.60 -4.26 ----- 14.3 14.9 154.6 19.3 13.0 -4.4 12.9 -4.7 12.7 -4.3 13.1 -5.1
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.055277
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:20:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:19:39', tmtdew=0.32, humidity=97.7, cloud=0.0, wind=22.89, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:19:35.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:20:12.617 [DEBUG] [Thread-4172] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:20:12.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:20:12.701 [DEBUG] [Thread-4175] [transport.py] [_log()] starting thread (client mode): 0xb9559d50
2025-12-25T03:20:12.701 [DEBUG] [Thread-4175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:20:12.716 [DEBUG] [Thread-4175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:20:12.716 [INFO] [Thread-4175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:20:12.723 [DEBUG] [Thread-4175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:20:12.723 [DEBUG] [Thread-4175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] client lang: <none>
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] server lang: <none>
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] kex follows: False
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] Compression: none
2025-12-25T03:20:12.724 [DEBUG] [Thread-4175] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:20:12.778 [DEBUG] [Thread-4175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:20:12.778 [DEBUG] [Thread-4175] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:20:12.778 [DEBUG] [Thread-4175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:20:12.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:20:12.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:20:12.835 [DEBUG] [Thread-4175] [transport.py] [_log()] userauth is OK
2025-12-25T03:20:12.835 [DEBUG] [Thread-4175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:20:12.835 [DEBUG] [Thread-4175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:20:12.835 [DEBUG] [Thread-4175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:20:12.835 [DEBUG] [Thread-4175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:20:12.850 [INFO] [Thread-4175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:20:12.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:20:12.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:20:13.688 [DEBUG] [Thread-4175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:20:13.688 [DEBUG] [Thread-4175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:20:13.735 [DEBUG] [Thread-4175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:20:13.735 [DEBUG] [Thread-4175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:20:13.744 [DEBUG] [Thread-4175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:20:13.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:20:13.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:20:13.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:20:13.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:20:13.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:20:13.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:20:13.775 [DEBUG] [Thread-4175] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:20:21.561 [DEBUG] [Thread-4177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:20:31.856 [DEBUG] [Thread-4178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:20:36.618 [DEBUG] [Thread-4179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:20:43.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:20:43.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:20:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:20:44.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 20, 11), 0.33, 97.63, 0.0, 21.79, 11.2, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:20:44.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:20:11
2025-12-25T03:20:44.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:20:44.785 [DEBUG] [Thread-4180] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf40
2025-12-25T03:20:44.786 [DEBUG] [Thread-4180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:20:44.806 [DEBUG] [Thread-4180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:20:44.806 [INFO] [Thread-4180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] client lang: <none>
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] server lang: <none>
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] kex follows: False
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] Compression: none
2025-12-25T03:20:44.809 [DEBUG] [Thread-4180] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:20:44.825 [DEBUG] [Thread-4180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:20:44.825 [DEBUG] [Thread-4180] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:20:44.826 [DEBUG] [Thread-4180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:20:44.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:20:44.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:20:44.826 [DEBUG] [Thread-4180] [transport.py] [_log()] userauth is OK
2025-12-25T03:20:44.827 [DEBUG] [Thread-4180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:20:44.827 [DEBUG] [Thread-4180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:20:44.827 [DEBUG] [Thread-4180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:20:44.827 [DEBUG] [Thread-4180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:20:44.839 [INFO] [Thread-4180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:20:44.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:20:45.633 [DEBUG] [Thread-4180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:20:45.633 [DEBUG] [Thread-4180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:20:45.633 [DEBUG] [Thread-4180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:20:45.674 [DEBUG] [Thread-4180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:20:45.674 [DEBUG] [Thread-4180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:20:45.676 [DEBUG] [Thread-4180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:20:45.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:20:45.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:20:45.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:20:45.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:20:45.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:20:45.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:20:45.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.055624 -999.00  +11.20  14.90     95  +10.50 1 3 1 3 1     0    0 0.59 -4.31 ----- 14.3 14.9 157.6 21.8 13.0 -4.9 12.9 -5.9 12.8 -5.2 13.1 -6.2
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.055624
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:20:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:20:11', tmtdew=0.33, humidity=97.63, cloud=0.0, wind=21.79, temperature=11.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:20:05.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:20:45.694 [DEBUG] [Thread-4180] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:20:45.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:20:45.777 [DEBUG] [Thread-4183] [transport.py] [_log()] starting thread (client mode): 0xb95b0040
2025-12-25T03:20:45.777 [DEBUG] [Thread-4183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:20:45.792 [DEBUG] [Thread-4183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:20:45.792 [INFO] [Thread-4183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:20:45.799 [DEBUG] [Thread-4183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:20:45.799 [DEBUG] [Thread-4183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:20:45.799 [DEBUG] [Thread-4183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:20:45.799 [DEBUG] [Thread-4183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:20:45.799 [DEBUG] [Thread-4183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:20:45.799 [DEBUG] [Thread-4183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:20:45.799 [DEBUG] [Thread-4183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:20:45.799 [DEBUG] [Thread-4183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] client lang: <none>
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] server lang: <none>
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] kex follows: False
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] Compression: none
2025-12-25T03:20:45.800 [DEBUG] [Thread-4183] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:20:45.854 [DEBUG] [Thread-4183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:20:45.854 [DEBUG] [Thread-4183] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:20:45.855 [DEBUG] [Thread-4183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:20:45.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:20:45.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:20:45.915 [DEBUG] [Thread-4183] [transport.py] [_log()] userauth is OK
2025-12-25T03:20:45.915 [DEBUG] [Thread-4183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:20:45.915 [DEBUG] [Thread-4183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:20:45.915 [DEBUG] [Thread-4183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:20:45.915 [DEBUG] [Thread-4183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:20:45.929 [INFO] [Thread-4183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:20:45.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:20:45.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:20:46.833 [DEBUG] [Thread-4183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:20:46.834 [DEBUG] [Thread-4183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:20:46.881 [DEBUG] [Thread-4183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:20:46.882 [DEBUG] [Thread-4183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:20:46.891 [DEBUG] [Thread-4183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:20:46.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:20:46.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:20:46.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:20:46.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:20:46.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:20:46.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:20:46.927 [DEBUG] [Thread-4183] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:20:51.649 [DEBUG] [Thread-4185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:20:53.127 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:20:53.128 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:21:06.689 [DEBUG] [Thread-4186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:21:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:21:16.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:21:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:21:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 20, 43), 0.32, 97.68, 0.0, 20.04, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:21:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:20:43
2025-12-25T03:21:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:21:17.998 [DEBUG] [Thread-4187] [transport.py] [_log()] starting thread (client mode): 0xb6b15390
2025-12-25T03:21:17.998 [DEBUG] [Thread-4187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:21:18.021 [DEBUG] [Thread-4187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:21:18.021 [INFO] [Thread-4187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] client lang: <none>
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] server lang: <none>
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] kex follows: False
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:21:18.025 [DEBUG] [Thread-4187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:21:18.026 [DEBUG] [Thread-4187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:21:18.026 [DEBUG] [Thread-4187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:21:18.026 [DEBUG] [Thread-4187] [transport.py] [_log()] Compression: none
2025-12-25T03:21:18.026 [DEBUG] [Thread-4187] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:21:18.041 [DEBUG] [Thread-4187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:21:18.041 [DEBUG] [Thread-4187] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:21:18.041 [DEBUG] [Thread-4187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:21:18.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:21:18.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:21:18.042 [DEBUG] [Thread-4187] [transport.py] [_log()] userauth is OK
2025-12-25T03:21:18.042 [DEBUG] [Thread-4187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:21:18.042 [DEBUG] [Thread-4187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:21:18.042 [DEBUG] [Thread-4187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:21:18.042 [DEBUG] [Thread-4187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:21:18.057 [INFO] [Thread-4187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:21:18.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:21:18.667 [DEBUG] [Thread-4187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:21:18.667 [DEBUG] [Thread-4187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:21:18.668 [DEBUG] [Thread-4187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:21:18.708 [DEBUG] [Thread-4187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:21:18.708 [DEBUG] [Thread-4187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:21:18.712 [DEBUG] [Thread-4187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:21:18.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:21:18.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:21:18.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:21:18.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:21:18.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:21:18.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:21:18.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:21:18.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:21:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:21:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.055971 -999.00  +11.20  17.91     95  +10.50 1 3 1 3 1     0    0 0.62 -4.02 ----- 17.3 17.9 146.4 22.4 13.1 -6.2 12.9 -5.3 12.7 -6.8 13.1 -5.6
2025-12-25T03:21:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:21:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:21:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.055971
2025-12-25T03:21:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:21:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:21:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:21:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:21:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:21:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:20:43', tmtdew=0.32, humidity=97.68, cloud=0.0, wind=20.04, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:20:35.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:21:18.740 [DEBUG] [Thread-4187] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:21:18.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:21:18.834 [DEBUG] [Thread-4190] [transport.py] [_log()] starting thread (client mode): 0xb95f3e80
2025-12-25T03:21:18.834 [DEBUG] [Thread-4190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:21:18.848 [DEBUG] [Thread-4190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:21:18.848 [INFO] [Thread-4190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:21:18.856 [DEBUG] [Thread-4190] [transport.py] [_log()] client lang: <none>
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] server lang: <none>
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] kex follows: False
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] Compression: none
2025-12-25T03:21:18.857 [DEBUG] [Thread-4190] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:21:18.912 [DEBUG] [Thread-4190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:21:18.913 [DEBUG] [Thread-4190] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:21:18.913 [DEBUG] [Thread-4190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:21:18.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:21:18.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:21:18.969 [DEBUG] [Thread-4190] [transport.py] [_log()] userauth is OK
2025-12-25T03:21:18.969 [DEBUG] [Thread-4190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:21:18.969 [DEBUG] [Thread-4190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:21:18.969 [DEBUG] [Thread-4190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:21:18.969 [DEBUG] [Thread-4190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:21:18.989 [INFO] [Thread-4190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:21:18.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:21:18.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:21:19.819 [DEBUG] [Thread-4190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:21:19.819 [DEBUG] [Thread-4190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:21:19.869 [DEBUG] [Thread-4190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:21:19.869 [DEBUG] [Thread-4190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:21:19.879 [DEBUG] [Thread-4190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:21:19.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:21:19.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:21:19.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:21:19.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:21:19.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:21:19.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:21:19.917 [DEBUG] [Thread-4190] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:21:21.725 [DEBUG] [Thread-4192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:21:31.910 [DEBUG] [Thread-4193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:21:36.771 [DEBUG] [Thread-4194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:21:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:21:49.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:21:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:21:50.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 21, 16), 0.33, 97.65, 0.0, 19.0, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:21:50.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:21:16
2025-12-25T03:21:50.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:21:50.954 [DEBUG] [Thread-4195] [transport.py] [_log()] starting thread (client mode): 0xb95b1e70
2025-12-25T03:21:50.954 [DEBUG] [Thread-4195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:21:50.975 [DEBUG] [Thread-4195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:21:50.975 [INFO] [Thread-4195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:21:50.978 [DEBUG] [Thread-4195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:21:50.978 [DEBUG] [Thread-4195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] client lang: <none>
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] server lang: <none>
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] kex follows: False
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:21:50.979 [DEBUG] [Thread-4195] [transport.py] [_log()] Compression: none
2025-12-25T03:21:50.980 [DEBUG] [Thread-4195] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:21:50.996 [DEBUG] [Thread-4195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:21:50.997 [DEBUG] [Thread-4195] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:21:50.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:21:50.998 [DEBUG] [Thread-4195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:21:50.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:21:51.000 [DEBUG] [Thread-4195] [transport.py] [_log()] userauth is OK
2025-12-25T03:21:51.000 [DEBUG] [Thread-4195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:21:51.001 [DEBUG] [Thread-4195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:21:51.001 [DEBUG] [Thread-4195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:21:51.001 [DEBUG] [Thread-4195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:21:51.025 [INFO] [Thread-4195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:21:51.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:21:51.648 [DEBUG] [Thread-4195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:21:51.648 [DEBUG] [Thread-4195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:21:51.649 [DEBUG] [Thread-4195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:21:51.689 [DEBUG] [Thread-4195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:21:51.689 [DEBUG] [Thread-4195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:21:51.692 [DEBUG] [Thread-4195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:21:51.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:21:51.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:21:51.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:21:51.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:21:51.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:21:51.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:21:51.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:21:51.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:21:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:21:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.056318 -999.00  +11.20  16.65     95  +10.50 1 3 1 3 1     0    0 0.60 -3.78 ----- 17.2 16.6 139.2 20.4 13.1 -4.6 12.9 -5.1 12.7 -4.6 13.1 -5.1
2025-12-25T03:21:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:21:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:21:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.056318
2025-12-25T03:21:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:21:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:21:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:21:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:21:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:21:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:21:16', tmtdew=0.33, humidity=97.65, cloud=0.0, wind=19.0, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:21:05.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:21:51.719 [DEBUG] [Thread-4195] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:21:51.804 [DEBUG] [Thread-4198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:21:51.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:21:51.822 [DEBUG] [Thread-4199] [transport.py] [_log()] starting thread (client mode): 0xb955b940
2025-12-25T03:21:51.822 [DEBUG] [Thread-4199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:21:51.837 [DEBUG] [Thread-4199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:21:51.837 [INFO] [Thread-4199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:21:51.844 [DEBUG] [Thread-4199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] client lang: <none>
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] server lang: <none>
2025-12-25T03:21:51.845 [DEBUG] [Thread-4199] [transport.py] [_log()] kex follows: False
2025-12-25T03:21:51.846 [DEBUG] [Thread-4199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:21:51.846 [DEBUG] [Thread-4199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:21:51.846 [DEBUG] [Thread-4199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:21:51.846 [DEBUG] [Thread-4199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:21:51.846 [DEBUG] [Thread-4199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:21:51.846 [DEBUG] [Thread-4199] [transport.py] [_log()] Compression: none
2025-12-25T03:21:51.846 [DEBUG] [Thread-4199] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:21:51.904 [DEBUG] [Thread-4199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:21:51.904 [DEBUG] [Thread-4199] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:21:51.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:21:51.906 [DEBUG] [Thread-4199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:21:51.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:21:51.961 [DEBUG] [Thread-4199] [transport.py] [_log()] userauth is OK
2025-12-25T03:21:51.961 [DEBUG] [Thread-4199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:21:51.961 [DEBUG] [Thread-4199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:21:51.961 [DEBUG] [Thread-4199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:21:51.961 [DEBUG] [Thread-4199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:21:51.980 [INFO] [Thread-4199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:21:51.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:21:51.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:21:52.766 [DEBUG] [Thread-4199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:21:52.767 [DEBUG] [Thread-4199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:21:52.816 [DEBUG] [Thread-4199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:21:52.817 [DEBUG] [Thread-4199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:21:52.826 [DEBUG] [Thread-4199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:21:52.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:21:52.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')
2025-12-25T03:21:52.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:21:52.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:21:52.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:21:52.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:21:52.862 [DEBUG] [Thread-4199] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:21:53.330 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:21:53.332 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:22:06.841 [DEBUG] [Thread-4201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:22:21.872 [DEBUG] [Thread-4202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:22:22.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:22:22.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:22:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:22:23.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 22, 20), 0.33, 97.65, 0.0, 21.56, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:22:23.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:22:20
2025-12-25T03:22:23.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:22:23.852 [DEBUG] [Thread-4203] [transport.py] [_log()] starting thread (client mode): 0xb6b2a4d0
2025-12-25T03:22:23.852 [DEBUG] [Thread-4203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:22:23.871 [DEBUG] [Thread-4203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:22:23.872 [INFO] [Thread-4203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] client lang: <none>
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] server lang: <none>
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] kex follows: False
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] Compression: none
2025-12-25T03:22:23.874 [DEBUG] [Thread-4203] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:22:23.890 [DEBUG] [Thread-4203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:22:23.891 [DEBUG] [Thread-4203] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:22:23.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:22:23.892 [DEBUG] [Thread-4203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:22:23.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:22:23.894 [DEBUG] [Thread-4203] [transport.py] [_log()] userauth is OK
2025-12-25T03:22:23.894 [DEBUG] [Thread-4203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:22:23.894 [DEBUG] [Thread-4203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:22:23.894 [DEBUG] [Thread-4203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:22:23.894 [DEBUG] [Thread-4203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:22:23.918 [INFO] [Thread-4203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:22:23.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:22:24.573 [DEBUG] [Thread-4203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:22:24.574 [DEBUG] [Thread-4203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:22:24.574 [DEBUG] [Thread-4203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:22:24.615 [DEBUG] [Thread-4203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:22:24.615 [DEBUG] [Thread-4203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:22:24.619 [DEBUG] [Thread-4203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:22:24.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:22:24.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:22:24.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:22:24.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:22:24.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:22:24.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:22:24.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:22:24.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:22:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:22:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.057013 -999.00  +11.20  19.31     95  +10.50 1 3 1 3 1     0    0 0.60 -4.03 ----- 20.1 19.3 162.0 21.6 13.1 -6.2 12.9 -4.9 12.8 -6.6 13.1 -5.6
2025-12-25T03:22:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:22:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:22:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.057013
2025-12-25T03:22:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:22:24.644 [DEBUG] [Thread-4203] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:22:24.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:22:24.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:22:24.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:22:24.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:22:24.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:22:20', tmtdew=0.33, humidity=97.65, cloud=0.0, wind=21.56, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:22:05.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:22:24.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:22:24.738 [DEBUG] [Thread-4206] [transport.py] [_log()] starting thread (client mode): 0xb95f20b0
2025-12-25T03:22:24.738 [DEBUG] [Thread-4206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:22:24.753 [DEBUG] [Thread-4206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:22:24.753 [INFO] [Thread-4206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:22:24.760 [DEBUG] [Thread-4206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:22:24.760 [DEBUG] [Thread-4206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] client lang: <none>
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] server lang: <none>
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] kex follows: False
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] Compression: none
2025-12-25T03:22:24.761 [DEBUG] [Thread-4206] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:22:24.821 [DEBUG] [Thread-4206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:22:24.821 [DEBUG] [Thread-4206] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:22:24.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:22:24.823 [DEBUG] [Thread-4206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:22:24.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:22:24.877 [DEBUG] [Thread-4206] [transport.py] [_log()] userauth is OK
2025-12-25T03:22:24.877 [DEBUG] [Thread-4206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:22:24.877 [DEBUG] [Thread-4206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:22:24.877 [DEBUG] [Thread-4206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:22:24.877 [DEBUG] [Thread-4206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:22:24.902 [INFO] [Thread-4206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:22:24.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:22:24.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:22:25.732 [DEBUG] [Thread-4206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:22:25.732 [DEBUG] [Thread-4206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:22:25.779 [DEBUG] [Thread-4206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:22:25.779 [DEBUG] [Thread-4206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:22:25.788 [DEBUG] [Thread-4206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:22:25.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:22: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')
2025-12-25T03:22: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
2025-12-25T03:22:25.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:22:25.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:22:25.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:22:25.821 [DEBUG] [Thread-4206] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:22:31.992 [DEBUG] [Thread-4208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:22:36.903 [DEBUG] [Thread-4209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:22:51.951 [DEBUG] [Thread-4210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:22:53.535 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:22:53.535 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:22:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:22:55.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:22:55.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
2025-12-25T03:22:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 22, 52), 0.27, 97.7, 0.0, 21.62, 11.2, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:22:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:22:52
2025-12-25T03:22:56.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:22:56.825 [DEBUG] [Thread-4211] [transport.py] [_log()] starting thread (client mode): 0xb6b227d0
2025-12-25T03:22:56.825 [DEBUG] [Thread-4211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:22:56.846 [DEBUG] [Thread-4211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:22:56.846 [INFO] [Thread-4211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] client lang: <none>
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] server lang: <none>
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] kex follows: False
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] Compression: none
2025-12-25T03:22:56.849 [DEBUG] [Thread-4211] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:22:56.868 [DEBUG] [Thread-4211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:22:56.869 [DEBUG] [Thread-4211] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:22:56.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:22:56.870 [DEBUG] [Thread-4211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:22:56.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:22:56.872 [DEBUG] [Thread-4211] [transport.py] [_log()] userauth is OK
2025-12-25T03:22:56.872 [DEBUG] [Thread-4211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:22:56.872 [DEBUG] [Thread-4211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:22:56.872 [DEBUG] [Thread-4211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:22:56.872 [DEBUG] [Thread-4211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:22:56.896 [INFO] [Thread-4211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:22:56.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:22:57.487 [DEBUG] [Thread-4211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:22:57.487 [DEBUG] [Thread-4211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:22:57.488 [DEBUG] [Thread-4211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:22:57.528 [DEBUG] [Thread-4211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:22:57.528 [DEBUG] [Thread-4211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:22:57.531 [DEBUG] [Thread-4211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:22:57.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:22:57.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:22:57.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:22:57.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:22:57.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:22:57.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:22:57.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:22:57.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:22:57.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:22:57.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.057360 -999.00  +11.20  15.31     95  +10.50 1 3 1 3 1     0    0 0.59 -4.30 ----- 15.6 15.3 148.2 25.2 13.0 -6.3 12.9 -6.1 12.7 -7.4 13.1 -7.1
2025-12-25T03:22:57.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:22:57.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:22:57.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.057360
2025-12-25T03:22:57.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:22:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:22:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:22:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:22:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:22:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:22:52', tmtdew=0.27, humidity=97.7, cloud=0.0, wind=21.62, temperature=11.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:22:35.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:22:57.556 [DEBUG] [Thread-4211] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:22:57.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:22:57.661 [DEBUG] [Thread-4214] [transport.py] [_log()] starting thread (client mode): 0xb6b34af0
2025-12-25T03:22:57.661 [DEBUG] [Thread-4214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:22:57.675 [DEBUG] [Thread-4214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:22:57.675 [INFO] [Thread-4214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] client lang: <none>
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] server lang: <none>
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] kex follows: False
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:22:57.683 [DEBUG] [Thread-4214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:22:57.684 [DEBUG] [Thread-4214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:22:57.684 [DEBUG] [Thread-4214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:22:57.684 [DEBUG] [Thread-4214] [transport.py] [_log()] Compression: none
2025-12-25T03:22:57.684 [DEBUG] [Thread-4214] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:22:57.741 [DEBUG] [Thread-4214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:22:57.741 [DEBUG] [Thread-4214] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:22:57.742 [DEBUG] [Thread-4214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:22:57.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:22:57.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:22:57.801 [DEBUG] [Thread-4214] [transport.py] [_log()] userauth is OK
2025-12-25T03:22:57.802 [DEBUG] [Thread-4214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:22:57.802 [DEBUG] [Thread-4214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:22:57.802 [DEBUG] [Thread-4214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:22:57.802 [DEBUG] [Thread-4214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:22:57.819 [INFO] [Thread-4214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:22:57.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:22:57.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:22:58.651 [DEBUG] [Thread-4214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:22:58.651 [DEBUG] [Thread-4214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:22:58.699 [DEBUG] [Thread-4214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:22:58.699 [DEBUG] [Thread-4214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:22:58.708 [DEBUG] [Thread-4214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:22:58.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:22:58.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:22:58.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:22:58.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:22:58.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:22:58.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:22:58.745 [DEBUG] [Thread-4214] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:23:06.985 [DEBUG] [Thread-4216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:23:22.036 [DEBUG] [Thread-4217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:23:28.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:23:28.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:23:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:23:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 23, 24), 0.28, 97.66, 0.0, 21.91, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:23:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:23:24
2025-12-25T03:23:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:23:29.746 [DEBUG] [Thread-4218] [transport.py] [_log()] starting thread (client mode): 0xb95f1fc0
2025-12-25T03:23:29.746 [DEBUG] [Thread-4218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:23:29.765 [DEBUG] [Thread-4218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:23:29.765 [INFO] [Thread-4218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] client lang: <none>
2025-12-25T03:23:29.769 [DEBUG] [Thread-4218] [transport.py] [_log()] server lang: <none>
2025-12-25T03:23:29.770 [DEBUG] [Thread-4218] [transport.py] [_log()] kex follows: False
2025-12-25T03:23:29.770 [DEBUG] [Thread-4218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:23:29.770 [DEBUG] [Thread-4218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:23:29.770 [DEBUG] [Thread-4218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:23:29.770 [DEBUG] [Thread-4218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:23:29.770 [DEBUG] [Thread-4218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:23:29.770 [DEBUG] [Thread-4218] [transport.py] [_log()] Compression: none
2025-12-25T03:23:29.770 [DEBUG] [Thread-4218] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:23:29.787 [DEBUG] [Thread-4218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:23:29.787 [DEBUG] [Thread-4218] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:23:29.788 [DEBUG] [Thread-4218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:23:29.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:23:29.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:23:29.790 [DEBUG] [Thread-4218] [transport.py] [_log()] userauth is OK
2025-12-25T03:23:29.790 [DEBUG] [Thread-4218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:23:29.790 [DEBUG] [Thread-4218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:23:29.790 [DEBUG] [Thread-4218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:23:29.791 [DEBUG] [Thread-4218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:23:29.810 [INFO] [Thread-4218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:23:29.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:23:30.469 [DEBUG] [Thread-4218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:23:30.469 [DEBUG] [Thread-4218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:23:30.469 [DEBUG] [Thread-4218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:23:30.511 [DEBUG] [Thread-4218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:23:30.511 [DEBUG] [Thread-4218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:23:30.514 [DEBUG] [Thread-4218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:23:30.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:23:30.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:23:30.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:23:30.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:23:30.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:23:30.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:23:30.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:23:30.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:23:30.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:23:30.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.057707 -999.00  +11.20  11.61     95  +10.50 1 3 1 3 1     0    0 0.58 -4.49 Z..sw 14.9 11.6 158.6 22.2 13.1 -4.5 12.9 -4.6 12.8 -4.7 13.1 -4.5
2025-12-25T03:23:30.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:23:30.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:23:30.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.057707
2025-12-25T03:23:30.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:23:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:23:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:23:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:23:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:23:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:23:24', tmtdew=0.28, humidity=97.66, cloud=0.0, wind=21.91, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:23:05.885', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:23:30.538 [DEBUG] [Thread-4218] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:23:30.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:23:30.625 [DEBUG] [Thread-4221] [transport.py] [_log()] starting thread (client mode): 0xb95f3130
2025-12-25T03:23:30.625 [DEBUG] [Thread-4221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:23:30.639 [DEBUG] [Thread-4221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:23:30.639 [INFO] [Thread-4221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] client lang: <none>
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] server lang: <none>
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] kex follows: False
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] Compression: none
2025-12-25T03:23:30.647 [DEBUG] [Thread-4221] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:23:30.704 [DEBUG] [Thread-4221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:23:30.704 [DEBUG] [Thread-4221] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:23:30.705 [DEBUG] [Thread-4221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:23:30.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:23:30.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:23:30.761 [DEBUG] [Thread-4221] [transport.py] [_log()] userauth is OK
2025-12-25T03:23:30.762 [DEBUG] [Thread-4221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:23:30.762 [DEBUG] [Thread-4221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:23:30.762 [DEBUG] [Thread-4221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:23:30.762 [DEBUG] [Thread-4221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:23:30.781 [INFO] [Thread-4221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:23:30.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:23:30.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:23:31.606 [DEBUG] [Thread-4221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:23:31.606 [DEBUG] [Thread-4221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:23:31.654 [DEBUG] [Thread-4221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:23:31.654 [DEBUG] [Thread-4221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:23:31.663 [DEBUG] [Thread-4221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:23:31.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:23:31.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:23:31.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:23:31.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:23:31.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:23:31.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:23:31.700 [DEBUG] [Thread-4221] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:23:32.068 [DEBUG] [Thread-4223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:23:37.071 [DEBUG] [Thread-4224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:23:52.124 [DEBUG] [Thread-4225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:23:53.741 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:23:53.742 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:24:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:24:01.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:24:01.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:24:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 23, 56), 0.32, 97.71, 0.0, 22.32, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:24:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:23:56
2025-12-25T03:24:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:24:02.712 [DEBUG] [Thread-4226] [transport.py] [_log()] starting thread (client mode): 0xb6b17b20
2025-12-25T03:24:02.712 [DEBUG] [Thread-4226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:24:02.732 [DEBUG] [Thread-4226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:24:02.732 [INFO] [Thread-4226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:24:02.735 [DEBUG] [Thread-4226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] client lang: <none>
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] server lang: <none>
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] kex follows: False
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] Compression: none
2025-12-25T03:24:02.736 [DEBUG] [Thread-4226] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:24:02.750 [DEBUG] [Thread-4226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:24:02.751 [DEBUG] [Thread-4226] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:24:02.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:24:02.751 [DEBUG] [Thread-4226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:24:02.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:24:02.752 [DEBUG] [Thread-4226] [transport.py] [_log()] userauth is OK
2025-12-25T03:24:02.752 [DEBUG] [Thread-4226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:24:02.752 [DEBUG] [Thread-4226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:24:02.752 [DEBUG] [Thread-4226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:24:02.752 [DEBUG] [Thread-4226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:24:02.761 [INFO] [Thread-4226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:24:02.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:24:03.384 [DEBUG] [Thread-4226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:24:03.384 [DEBUG] [Thread-4226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:24:03.384 [DEBUG] [Thread-4226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:24:03.426 [DEBUG] [Thread-4226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:24:03.426 [DEBUG] [Thread-4226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:24:03.428 [DEBUG] [Thread-4226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:24:03.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:24:03.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:24:03.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:24:03.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:24:03.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:24:03.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:24:03.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:24:03.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:24:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:24:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.058054 -999.00  +11.20  12.56     95  +10.50 1 3 1 3 1     0    0 0.59 -4.62 Z..sw 15.0 12.6 148.8 18.9 13.1 -6.2 12.9 -5.8 12.8 -6.0 13.1 -6.2
2025-12-25T03:24:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:24:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:24:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.058054
2025-12-25T03:24:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:24:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:24:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:24:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:24:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:24:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:23:56', tmtdew=0.32, humidity=97.71, cloud=0.0, wind=22.32, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:23:35.866', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:24:03.446 [DEBUG] [Thread-4226] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:24:03.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:24:03.532 [DEBUG] [Thread-4229] [transport.py] [_log()] starting thread (client mode): 0xb6b2b190
2025-12-25T03:24:03.532 [DEBUG] [Thread-4229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:24:03.546 [DEBUG] [Thread-4229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:24:03.546 [INFO] [Thread-4229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] client lang: <none>
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] server lang: <none>
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] kex follows: False
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:24:03.554 [DEBUG] [Thread-4229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:24:03.555 [DEBUG] [Thread-4229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:24:03.555 [DEBUG] [Thread-4229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:24:03.555 [DEBUG] [Thread-4229] [transport.py] [_log()] Compression: none
2025-12-25T03:24:03.555 [DEBUG] [Thread-4229] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:24:03.612 [DEBUG] [Thread-4229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:24:03.612 [DEBUG] [Thread-4229] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:24:03.612 [DEBUG] [Thread-4229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:24:03.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:24:03.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:24:03.669 [DEBUG] [Thread-4229] [transport.py] [_log()] userauth is OK
2025-12-25T03:24:03.669 [DEBUG] [Thread-4229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:24:03.669 [DEBUG] [Thread-4229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:24:03.669 [DEBUG] [Thread-4229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:24:03.669 [DEBUG] [Thread-4229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:24:03.685 [INFO] [Thread-4229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:24:03.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:24:03.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:24:04.501 [DEBUG] [Thread-4229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:24:04.501 [DEBUG] [Thread-4229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:24:04.549 [DEBUG] [Thread-4229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:24:04.549 [DEBUG] [Thread-4229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:24:04.558 [DEBUG] [Thread-4229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:24:04.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:24:04.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:24:04.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:24:04.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:24:04.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:24:04.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:24:04.589 [DEBUG] [Thread-4229] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:24:07.155 [DEBUG] [Thread-4231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:24:22.196 [DEBUG] [Thread-4232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:24:32.123 [DEBUG] [Thread-4233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:24:34.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:24:34.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:24:34.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:24:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 24, 28), 0.32, 97.7, 0.0, 22.04, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:24:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:24:28
2025-12-25T03:24:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:24:35.579 [DEBUG] [Thread-4234] [transport.py] [_log()] starting thread (client mode): 0xb6b2a410
2025-12-25T03:24:35.579 [DEBUG] [Thread-4234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:24:35.600 [DEBUG] [Thread-4234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:24:35.600 [INFO] [Thread-4234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:24:35.604 [DEBUG] [Thread-4234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:24:35.604 [DEBUG] [Thread-4234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:24:35.604 [DEBUG] [Thread-4234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:24:35.604 [DEBUG] [Thread-4234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:24:35.604 [DEBUG] [Thread-4234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:24:35.604 [DEBUG] [Thread-4234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:24:35.604 [DEBUG] [Thread-4234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:24:35.604 [DEBUG] [Thread-4234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] client lang: <none>
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] server lang: <none>
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] kex follows: False
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:24:35.605 [DEBUG] [Thread-4234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:24:35.606 [DEBUG] [Thread-4234] [transport.py] [_log()] Compression: none
2025-12-25T03:24:35.606 [DEBUG] [Thread-4234] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:24:35.625 [DEBUG] [Thread-4234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:24:35.626 [DEBUG] [Thread-4234] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:24:35.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:24:35.627 [DEBUG] [Thread-4234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:24:35.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:24:35.629 [DEBUG] [Thread-4234] [transport.py] [_log()] userauth is OK
2025-12-25T03:24:35.629 [DEBUG] [Thread-4234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:24:35.629 [DEBUG] [Thread-4234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:24:35.629 [DEBUG] [Thread-4234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:24:35.629 [DEBUG] [Thread-4234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:24:35.653 [INFO] [Thread-4234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:24:35.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:24:36.309 [DEBUG] [Thread-4234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:24:36.309 [DEBUG] [Thread-4234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:24:36.309 [DEBUG] [Thread-4234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:24:36.350 [DEBUG] [Thread-4234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:24:36.350 [DEBUG] [Thread-4234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:24:36.354 [DEBUG] [Thread-4234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:24:36.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:24:36.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:24:36.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:24:36.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:24:36.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:24:36.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:24:36.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:24:36.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:24:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:24:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.058402 -999.00  +11.20  16.08     95  +10.50 1 3 1 3 1     0    0 0.56 -4.89 Z..sw 13.9 16.1 139.0 18.8 13.1 -4.5 12.9 -4.9 12.7 -4.3 13.1 -5.1
2025-12-25T03:24:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:24:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:24:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.058402
2025-12-25T03:24:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:24:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:24:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:24:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:24:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:24:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:24:28', tmtdew=0.32, humidity=97.7, cloud=0.0, wind=22.04, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:24:05.933', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:24:36.380 [DEBUG] [Thread-4234] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:24:36.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:24:36.473 [DEBUG] [Thread-4237] [transport.py] [_log()] starting thread (client mode): 0xb6b239d0
2025-12-25T03:24:36.473 [DEBUG] [Thread-4237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:24:36.488 [DEBUG] [Thread-4237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:24:36.488 [INFO] [Thread-4237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:24:36.495 [DEBUG] [Thread-4237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] client lang: <none>
2025-12-25T03:24:36.496 [DEBUG] [Thread-4237] [transport.py] [_log()] server lang: <none>
2025-12-25T03:24:36.497 [DEBUG] [Thread-4237] [transport.py] [_log()] kex follows: False
2025-12-25T03:24:36.497 [DEBUG] [Thread-4237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:24:36.497 [DEBUG] [Thread-4237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:24:36.497 [DEBUG] [Thread-4237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:24:36.497 [DEBUG] [Thread-4237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:24:36.497 [DEBUG] [Thread-4237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:24:36.497 [DEBUG] [Thread-4237] [transport.py] [_log()] Compression: none
2025-12-25T03:24:36.497 [DEBUG] [Thread-4237] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:24:36.554 [DEBUG] [Thread-4237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:24:36.555 [DEBUG] [Thread-4237] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:24:36.555 [DEBUG] [Thread-4237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:24:36.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:24:36.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:24:36.609 [DEBUG] [Thread-4237] [transport.py] [_log()] userauth is OK
2025-12-25T03:24:36.610 [DEBUG] [Thread-4237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:24:36.610 [DEBUG] [Thread-4237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:24:36.610 [DEBUG] [Thread-4237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:24:36.610 [DEBUG] [Thread-4237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:24:36.628 [INFO] [Thread-4237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:24:36.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:24:36.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:24:37.234 [DEBUG] [Thread-4239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:24:37.448 [DEBUG] [Thread-4237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:24:37.449 [DEBUG] [Thread-4237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:24:37.497 [DEBUG] [Thread-4237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:24:37.497 [DEBUG] [Thread-4237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:24:37.506 [DEBUG] [Thread-4237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:24:37.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:24:37.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')
2025-12-25T03:24:37.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:24:37.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:24:37.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:24:37.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:24:37.543 [DEBUG] [Thread-4237] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:24:52.294 [DEBUG] [Thread-4240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:24:53.944 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:24:53.945 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:25:07.329 [DEBUG] [Thread-4241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:25:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:25:07.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:25:07.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:25:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 24, 28), 0.32, 97.7, 0.0, 22.04, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:25:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:24:28
2025-12-25T03:25:08.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:25:08.535 [DEBUG] [Thread-4242] [transport.py] [_log()] starting thread (client mode): 0xb6b36dd0
2025-12-25T03:25:08.536 [DEBUG] [Thread-4242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:25:08.554 [DEBUG] [Thread-4242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:25:08.554 [INFO] [Thread-4242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] client lang: <none>
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] server lang: <none>
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] kex follows: False
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] Compression: none
2025-12-25T03:25:08.556 [DEBUG] [Thread-4242] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:25:08.569 [DEBUG] [Thread-4242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:25:08.569 [DEBUG] [Thread-4242] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:25:08.570 [DEBUG] [Thread-4242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:25:08.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:25:08.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:25:08.571 [DEBUG] [Thread-4242] [transport.py] [_log()] userauth is OK
2025-12-25T03:25:08.571 [DEBUG] [Thread-4242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:25:08.572 [DEBUG] [Thread-4242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:25:08.572 [DEBUG] [Thread-4242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:25:08.572 [DEBUG] [Thread-4242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:25:08.589 [INFO] [Thread-4242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:25:08.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:25:09.243 [DEBUG] [Thread-4242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:25:09.243 [DEBUG] [Thread-4242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:25:09.244 [DEBUG] [Thread-4242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:25:09.284 [DEBUG] [Thread-4242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:25:09.284 [DEBUG] [Thread-4242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:25:09.287 [DEBUG] [Thread-4242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:25:09.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:25:09.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:25:09.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:25:09.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:25:09.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:25:09.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:25:09.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:25:09.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:25:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:25:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.058749 -999.00  +11.20  16.60     95  +10.50 1 3 1 3 1     0    0 0.57 -5.06 ----- 14.5 16.6 150.4 21.9 13.1 -6.2 12.9 -4.5 12.7 -5.3 13.1 -4.5
2025-12-25T03:25:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:25:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:25:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.058749
2025-12-25T03:25:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:25:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:25:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:25:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:25:09.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:25:09.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:24:28', tmtdew=0.32, humidity=97.7, cloud=0.0, wind=22.04, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:24:35.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:25:09.318 [DEBUG] [Thread-4242] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:25:09.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:25:09.411 [DEBUG] [Thread-4245] [transport.py] [_log()] starting thread (client mode): 0xb6b356c0
2025-12-25T03:25:09.411 [DEBUG] [Thread-4245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:25:09.427 [DEBUG] [Thread-4245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:25:09.427 [INFO] [Thread-4245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] client lang: <none>
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] server lang: <none>
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] kex follows: False
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:25:09.435 [DEBUG] [Thread-4245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:25:09.436 [DEBUG] [Thread-4245] [transport.py] [_log()] Compression: none
2025-12-25T03:25:09.436 [DEBUG] [Thread-4245] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:25:09.494 [DEBUG] [Thread-4245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:25:09.494 [DEBUG] [Thread-4245] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:25:09.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:25:09.495 [DEBUG] [Thread-4245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:25:09.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:25:09.550 [DEBUG] [Thread-4245] [transport.py] [_log()] userauth is OK
2025-12-25T03:25:09.550 [DEBUG] [Thread-4245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:25:09.550 [DEBUG] [Thread-4245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:25:09.551 [DEBUG] [Thread-4245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:25:09.551 [DEBUG] [Thread-4245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:25:09.570 [INFO] [Thread-4245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:25:09.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:25:09.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:25:10.395 [DEBUG] [Thread-4245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:25:10.395 [DEBUG] [Thread-4245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:25:10.443 [DEBUG] [Thread-4245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:25:10.443 [DEBUG] [Thread-4245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:25:10.452 [DEBUG] [Thread-4245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:25:10.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:25: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')
2025-12-25T03:25:10.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:25:10.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:25:10.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:25:10.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:25:10.489 [DEBUG] [Thread-4245] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:25:22.365 [DEBUG] [Thread-4247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:25:32.191 [DEBUG] [Thread-4248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:25:37.406 [DEBUG] [Thread-4249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:25:40.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:25:40.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:25:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:25:41.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 25, 32), 0.33, 97.66, 0.0, 21.91, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:25:41.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:25:32
2025-12-25T03:25:41.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:25:41.477 [DEBUG] [Thread-4250] [transport.py] [_log()] starting thread (client mode): 0xb6b37910
2025-12-25T03:25:41.477 [DEBUG] [Thread-4250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:25:41.495 [DEBUG] [Thread-4250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:25:41.495 [INFO] [Thread-4250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] client lang: <none>
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] server lang: <none>
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] kex follows: False
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:25:41.499 [DEBUG] [Thread-4250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:25:41.500 [DEBUG] [Thread-4250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:25:41.500 [DEBUG] [Thread-4250] [transport.py] [_log()] Compression: none
2025-12-25T03:25:41.500 [DEBUG] [Thread-4250] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:25:41.514 [DEBUG] [Thread-4250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:25:41.514 [DEBUG] [Thread-4250] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:25:41.515 [DEBUG] [Thread-4250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:25:41.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:25:41.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:25:41.517 [DEBUG] [Thread-4250] [transport.py] [_log()] userauth is OK
2025-12-25T03:25:41.517 [DEBUG] [Thread-4250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:25:41.517 [DEBUG] [Thread-4250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:25:41.517 [DEBUG] [Thread-4250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:25:41.517 [DEBUG] [Thread-4250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:25:41.536 [INFO] [Thread-4250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:25:41.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:25:42.096 [DEBUG] [Thread-4250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:25:42.096 [DEBUG] [Thread-4250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:25:42.096 [DEBUG] [Thread-4250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:25:42.137 [DEBUG] [Thread-4250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:25:42.137 [DEBUG] [Thread-4250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:25:42.141 [DEBUG] [Thread-4250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:25:42.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:25:42.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:25:42.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:25:42.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:25:42.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:25:42.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:25:42.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:25:42.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:25:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:25:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.059096 -999.00  +11.20  16.69     95  +10.50 1 3 1 3 1     0    0 0.57 -5.12 ----- 13.3 16.7 164.8 19.2 13.0 -5.1 12.9 -6.0 12.8 -5.3 13.1 -5.7
2025-12-25T03:25:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:25:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:25:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.059096
2025-12-25T03:25:42.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:25:42.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:25:42.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:25:42.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:25:42.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:25:42.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:25:32', tmtdew=0.33, humidity=97.66, cloud=0.0, wind=21.91, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:25:05.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:25:42.167 [DEBUG] [Thread-4250] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:25:42.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:25:42.261 [DEBUG] [Thread-4253] [transport.py] [_log()] starting thread (client mode): 0xb6b34a60
2025-12-25T03:25:42.261 [DEBUG] [Thread-4253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:25:42.275 [DEBUG] [Thread-4253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:25:42.276 [INFO] [Thread-4253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:25:42.283 [DEBUG] [Thread-4253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:25:42.283 [DEBUG] [Thread-4253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:25:42.283 [DEBUG] [Thread-4253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:25:42.283 [DEBUG] [Thread-4253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:25:42.283 [DEBUG] [Thread-4253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] client lang: <none>
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] server lang: <none>
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] kex follows: False
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:25:42.284 [DEBUG] [Thread-4253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:25:42.285 [DEBUG] [Thread-4253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:25:42.285 [DEBUG] [Thread-4253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:25:42.285 [DEBUG] [Thread-4253] [transport.py] [_log()] Compression: none
2025-12-25T03:25:42.285 [DEBUG] [Thread-4253] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:25:42.342 [DEBUG] [Thread-4253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:25:42.342 [DEBUG] [Thread-4253] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:25:42.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:25:42.343 [DEBUG] [Thread-4253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:25:42.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:25:42.398 [DEBUG] [Thread-4253] [transport.py] [_log()] userauth is OK
2025-12-25T03:25:42.399 [DEBUG] [Thread-4253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:25:42.399 [DEBUG] [Thread-4253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:25:42.399 [DEBUG] [Thread-4253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:25:42.399 [DEBUG] [Thread-4253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:25:42.417 [INFO] [Thread-4253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:25:42.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:25:42.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:25:43.243 [DEBUG] [Thread-4253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:25:43.243 [DEBUG] [Thread-4253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:25:43.291 [DEBUG] [Thread-4253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:25:43.291 [DEBUG] [Thread-4253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:25:43.300 [DEBUG] [Thread-4253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:25:43.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:25:43.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:25:43.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:25:43.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:25:43.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:25:43.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:25:43.337 [DEBUG] [Thread-4253] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:25:52.441 [DEBUG] [Thread-4255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:25:54.146 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:25:54.147 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:26:07.490 [DEBUG] [Thread-4256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:26:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:26:13.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:26:13.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:26:14.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 26, 4), 0.32, 97.7, 0.0, 21.9, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:26:14.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:26:04
2025-12-25T03:26:14.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:26:14.305 [DEBUG] [Thread-4257] [transport.py] [_log()] starting thread (client mode): 0xb6b342b0
2025-12-25T03:26:14.305 [DEBUG] [Thread-4257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:26:14.329 [DEBUG] [Thread-4257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:26:14.329 [INFO] [Thread-4257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] client lang: <none>
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] server lang: <none>
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] kex follows: False
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:26:14.330 [DEBUG] [Thread-4257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:26:14.331 [DEBUG] [Thread-4257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:26:14.331 [DEBUG] [Thread-4257] [transport.py] [_log()] Compression: none
2025-12-25T03:26:14.331 [DEBUG] [Thread-4257] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:26:14.348 [DEBUG] [Thread-4257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:26:14.348 [DEBUG] [Thread-4257] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:26:14.349 [DEBUG] [Thread-4257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:26:14.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:26:14.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:26:14.351 [DEBUG] [Thread-4257] [transport.py] [_log()] userauth is OK
2025-12-25T03:26:14.351 [DEBUG] [Thread-4257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:26:14.351 [DEBUG] [Thread-4257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:26:14.351 [DEBUG] [Thread-4257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:26:14.351 [DEBUG] [Thread-4257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:26:14.370 [INFO] [Thread-4257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:26:14.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:26:15.006 [DEBUG] [Thread-4257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:26:15.006 [DEBUG] [Thread-4257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:26:15.007 [DEBUG] [Thread-4257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:26:15.047 [DEBUG] [Thread-4257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:26:15.047 [DEBUG] [Thread-4257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:26:15.051 [DEBUG] [Thread-4257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:26:15.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:26:15.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:26:15.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:26:15.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:26:15.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:26:15.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:26:15.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:26:15.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:26:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:26:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.059790 -999.00  +11.20  14.72     95  +10.50 1 3 1 3 1     0    0 0.59 -4.20 ----- 15.9 14.7 151.0 24.5 13.1 -5.5 12.9 -5.4 12.8 -5.8 13.1 -5.7
2025-12-25T03:26:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:26:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:26:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.059790
2025-12-25T03:26:15.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:26:15.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:26:15.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:26:15.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:26:15.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:26:15.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:26:04', tmtdew=0.32, humidity=97.7, cloud=0.0, wind=21.9, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:26:05.856', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:26:15.071 [DEBUG] [Thread-4257] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:26:15.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:26:15.164 [DEBUG] [Thread-4260] [transport.py] [_log()] starting thread (client mode): 0xb6b37880
2025-12-25T03:26:15.164 [DEBUG] [Thread-4260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:26:15.178 [DEBUG] [Thread-4260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:26:15.178 [INFO] [Thread-4260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:26:15.186 [DEBUG] [Thread-4260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] client lang: <none>
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] server lang: <none>
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] kex follows: False
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] Compression: none
2025-12-25T03:26:15.187 [DEBUG] [Thread-4260] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:26:15.242 [DEBUG] [Thread-4260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:26:15.243 [DEBUG] [Thread-4260] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:26:15.243 [DEBUG] [Thread-4260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:26:15.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:26:15.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:26:15.298 [DEBUG] [Thread-4260] [transport.py] [_log()] userauth is OK
2025-12-25T03:26:15.299 [DEBUG] [Thread-4260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:26:15.299 [DEBUG] [Thread-4260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:26:15.299 [DEBUG] [Thread-4260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:26:15.299 [DEBUG] [Thread-4260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:26:15.317 [INFO] [Thread-4260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:26:15.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:26:15.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:26:16.134 [DEBUG] [Thread-4260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:26:16.134 [DEBUG] [Thread-4260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:26:16.182 [DEBUG] [Thread-4260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:26:16.182 [DEBUG] [Thread-4260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:26:16.191 [DEBUG] [Thread-4260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:26:16.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:26:16.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:26:16.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:26:16.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:26:16.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:26:16.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:26:16.227 [DEBUG] [Thread-4260] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:26:22.528 [DEBUG] [Thread-4262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:26:32.265 [DEBUG] [Thread-4263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:26:37.581 [DEBUG] [Thread-4264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:26:46.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:26:46.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:26:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:26:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 26, 36), 0.32, 97.73, 0.0, 21.17, 11.32, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:26:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:26:36
2025-12-25T03:26:47.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:26:47.212 [DEBUG] [Thread-4265] [transport.py] [_log()] starting thread (client mode): 0xb6b15e40
2025-12-25T03:26:47.213 [DEBUG] [Thread-4265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:26:47.233 [DEBUG] [Thread-4265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:26:47.233 [INFO] [Thread-4265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] client lang: <none>
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] server lang: <none>
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] kex follows: False
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] Compression: none
2025-12-25T03:26:47.237 [DEBUG] [Thread-4265] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:26:47.253 [DEBUG] [Thread-4265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:26:47.253 [DEBUG] [Thread-4265] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:26:47.253 [DEBUG] [Thread-4265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:26:47.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:26:47.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:26:47.253 [DEBUG] [Thread-4265] [transport.py] [_log()] userauth is OK
2025-12-25T03:26:47.253 [DEBUG] [Thread-4265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:26:47.253 [DEBUG] [Thread-4265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:26:47.253 [DEBUG] [Thread-4265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:26:47.253 [DEBUG] [Thread-4265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:26:47.262 [INFO] [Thread-4265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:26:47.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:26:47.896 [DEBUG] [Thread-4265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:26:47.896 [DEBUG] [Thread-4265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:26:47.896 [DEBUG] [Thread-4265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:26:47.937 [DEBUG] [Thread-4265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:26:47.937 [DEBUG] [Thread-4265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:26:47.940 [DEBUG] [Thread-4265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:26:47.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:26:47.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:26:47.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:26:47.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:26:47.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:26:47.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:26:47.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:26:47.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:26:47.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:26:47.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.060138 -999.00  +11.20  14.54     95  +10.50 1 3 1 3 1     0    0 0.60 -3.90 ----- 15.1 14.5 155.2 21.0 13.1 -6.9 12.9 -4.8 12.7 -6.1 13.1 -5.0
2025-12-25T03:26:47.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:26:47.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:26:47.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.060138
2025-12-25T03:26:47.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:26:47.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:26:47.956 [DEBUG] [Thread-4265] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:26:47.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:26:47.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:26:47.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:26:47.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:26:36', tmtdew=0.32, humidity=97.73, cloud=0.0, wind=21.17, temperature=11.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:26:35.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:26:48.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:26:48.044 [DEBUG] [Thread-4268] [transport.py] [_log()] starting thread (client mode): 0xb6b16950
2025-12-25T03:26:48.044 [DEBUG] [Thread-4268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:26:48.058 [DEBUG] [Thread-4268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:26:48.058 [INFO] [Thread-4268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:26:48.066 [DEBUG] [Thread-4268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] client lang: <none>
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] server lang: <none>
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] kex follows: False
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:26:48.067 [DEBUG] [Thread-4268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:26:48.068 [DEBUG] [Thread-4268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:26:48.068 [DEBUG] [Thread-4268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:26:48.068 [DEBUG] [Thread-4268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:26:48.068 [DEBUG] [Thread-4268] [transport.py] [_log()] Compression: none
2025-12-25T03:26:48.068 [DEBUG] [Thread-4268] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:26:48.120 [DEBUG] [Thread-4268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:26:48.121 [DEBUG] [Thread-4268] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:26:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:26:48.121 [DEBUG] [Thread-4268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:26:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:26:48.178 [DEBUG] [Thread-4268] [transport.py] [_log()] userauth is OK
2025-12-25T03:26:48.178 [DEBUG] [Thread-4268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:26:48.179 [DEBUG] [Thread-4268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:26:48.179 [DEBUG] [Thread-4268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:26:48.179 [DEBUG] [Thread-4268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:26:48.201 [INFO] [Thread-4268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:26:48.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:26:48.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:26:49.039 [DEBUG] [Thread-4268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:26:49.040 [DEBUG] [Thread-4268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:26:49.088 [DEBUG] [Thread-4268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:26:49.088 [DEBUG] [Thread-4268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:26:49.097 [DEBUG] [Thread-4268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:26:49.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:26:49.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')
2025-12-25T03:26:49.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:26:49.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:26:49.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:26:49.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:26:49.131 [DEBUG] [Thread-4268] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:26:52.612 [DEBUG] [Thread-4270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:26:54.359 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:26:54.361 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:27:07.665 [DEBUG] [Thread-4271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:27:19.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:27:19.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:27:19.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
2025-12-25T03:27:19.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 27, 8), 0.31, 97.75, 0.0, 18.83, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:27:19.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:27:08
2025-12-25T03:27:20.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:27:20.170 [DEBUG] [Thread-4272] [transport.py] [_log()] starting thread (client mode): 0xb6b35420
2025-12-25T03:27:20.170 [DEBUG] [Thread-4272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:27:20.190 [DEBUG] [Thread-4272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:27:20.190 [INFO] [Thread-4272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] client lang: <none>
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] server lang: <none>
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] kex follows: False
2025-12-25T03:27:20.192 [DEBUG] [Thread-4272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:27:20.193 [DEBUG] [Thread-4272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:27:20.193 [DEBUG] [Thread-4272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:27:20.193 [DEBUG] [Thread-4272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:27:20.193 [DEBUG] [Thread-4272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:27:20.193 [DEBUG] [Thread-4272] [transport.py] [_log()] Compression: none
2025-12-25T03:27:20.193 [DEBUG] [Thread-4272] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:27:20.204 [DEBUG] [Thread-4272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:27:20.204 [DEBUG] [Thread-4272] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:27:20.204 [DEBUG] [Thread-4272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:27:20.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:27:20.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:27:20.205 [DEBUG] [Thread-4272] [transport.py] [_log()] userauth is OK
2025-12-25T03:27:20.205 [DEBUG] [Thread-4272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:27:20.205 [DEBUG] [Thread-4272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:27:20.205 [DEBUG] [Thread-4272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:27:20.205 [DEBUG] [Thread-4272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:27:20.215 [INFO] [Thread-4272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:27:20.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:27:20.811 [DEBUG] [Thread-4272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:27:20.811 [DEBUG] [Thread-4272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:27:20.811 [DEBUG] [Thread-4272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:27:20.851 [DEBUG] [Thread-4272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:27:20.852 [DEBUG] [Thread-4272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:27:20.853 [DEBUG] [Thread-4272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:27:20.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:27:20.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:27:20.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:27:20.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:27:20.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:27:20.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:27:20.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.060485 -999.00  +11.20  16.63     95  +10.50 1 3 1 3 1     0    0 0.62 -3.85 ----- 18.3 16.6 147.4 19.8 13.1 -4.4 12.9 -3.6 12.8 -3.9 13.1 -4.1
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.060485
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:27:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:27:08', tmtdew=0.31, humidity=97.75, cloud=0.0, wind=18.83, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:27:05.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:27:20.872 [DEBUG] [Thread-4272] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:27:20.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:27:20.959 [DEBUG] [Thread-4275] [transport.py] [_log()] starting thread (client mode): 0xb6b15660
2025-12-25T03:27:20.959 [DEBUG] [Thread-4275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:27:20.974 [DEBUG] [Thread-4275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:27:20.974 [INFO] [Thread-4275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:27:20.981 [DEBUG] [Thread-4275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:27:20.981 [DEBUG] [Thread-4275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:27:20.981 [DEBUG] [Thread-4275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] client lang: <none>
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] server lang: <none>
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] kex follows: False
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] Compression: none
2025-12-25T03:27:20.982 [DEBUG] [Thread-4275] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:27:21.037 [DEBUG] [Thread-4275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:27:21.037 [DEBUG] [Thread-4275] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:27:21.037 [DEBUG] [Thread-4275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:27:21.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:27:21.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:27:21.094 [DEBUG] [Thread-4275] [transport.py] [_log()] userauth is OK
2025-12-25T03:27:21.094 [DEBUG] [Thread-4275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:27:21.094 [DEBUG] [Thread-4275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:27:21.094 [DEBUG] [Thread-4275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:27:21.094 [DEBUG] [Thread-4275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:27:21.108 [INFO] [Thread-4275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:27:21.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:27:21.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:27:21.951 [DEBUG] [Thread-4275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:27:21.951 [DEBUG] [Thread-4275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:27:21.999 [DEBUG] [Thread-4275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:27:21.999 [DEBUG] [Thread-4275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:27:22.007 [DEBUG] [Thread-4275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:27:22.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:27:22.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:27:22.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:27:22.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:27:22.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:27:22.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:27:22.040 [DEBUG] [Thread-4275] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:27:22.695 [DEBUG] [Thread-4277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:27:32.367 [DEBUG] [Thread-4278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:27:37.738 [DEBUG] [Thread-4279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:27:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:27:52.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:27:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:27:52.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 27, 40), 0.32, 97.71, 0.0, 21.14, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:27:52.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:27:40
2025-12-25T03:27:52.774 [DEBUG] [Thread-4280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:27:52.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:27:53.030 [DEBUG] [Thread-4281] [transport.py] [_log()] starting thread (client mode): 0xb6b17070
2025-12-25T03:27:53.030 [DEBUG] [Thread-4281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:27:53.050 [DEBUG] [Thread-4281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:27:53.050 [INFO] [Thread-4281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] client lang: <none>
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] server lang: <none>
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] kex follows: False
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:27:53.054 [DEBUG] [Thread-4281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:27:53.055 [DEBUG] [Thread-4281] [transport.py] [_log()] Compression: none
2025-12-25T03:27:53.055 [DEBUG] [Thread-4281] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:27:53.071 [DEBUG] [Thread-4281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:27:53.072 [DEBUG] [Thread-4281] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:27:53.072 [DEBUG] [Thread-4281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:27:53.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:27:53.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:27:53.074 [DEBUG] [Thread-4281] [transport.py] [_log()] userauth is OK
2025-12-25T03:27:53.074 [DEBUG] [Thread-4281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:27:53.074 [DEBUG] [Thread-4281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:27:53.074 [DEBUG] [Thread-4281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:27:53.075 [DEBUG] [Thread-4281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:27:53.107 [INFO] [Thread-4281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:27:53.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:27:53.763 [DEBUG] [Thread-4281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:27:53.763 [DEBUG] [Thread-4281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:27:53.764 [DEBUG] [Thread-4281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:27:53.804 [DEBUG] [Thread-4281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:27:53.805 [DEBUG] [Thread-4281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:27:53.811 [DEBUG] [Thread-4281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:27:53.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:27:53.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:27:53.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:27:53.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:27:53.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:27:53.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:27:53.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:27:53.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:27:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:27:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.060485 -999.00  +11.20  16.63     95  +10.50 1 3 1 3 1     0    0 0.62 -3.85 ----- 18.3 16.6 147.4 19.8 13.1 -4.4 12.9 -3.6 12.8 -3.9 13.1 -4.1
2025-12-25T03:27:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:27:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:27:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.060485
2025-12-25T03:27:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:27:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:27:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:27:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:27:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:27:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:27:40', tmtdew=0.32, humidity=97.71, cloud=0.0, wind=21.14, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:27:05.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:27:53.828 [DEBUG] [Thread-4281] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:27:53.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:27:53.922 [DEBUG] [Thread-4284] [transport.py] [_log()] starting thread (client mode): 0xb6b35db0
2025-12-25T03:27:53.923 [DEBUG] [Thread-4284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:27:53.937 [DEBUG] [Thread-4284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:27:53.937 [INFO] [Thread-4284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:27:53.944 [DEBUG] [Thread-4284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] client lang: <none>
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] server lang: <none>
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] kex follows: False
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] Compression: none
2025-12-25T03:27:53.945 [DEBUG] [Thread-4284] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:27:54.002 [DEBUG] [Thread-4284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:27:54.003 [DEBUG] [Thread-4284] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:27:54.003 [DEBUG] [Thread-4284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:27:54.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:27:54.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:27:54.058 [DEBUG] [Thread-4284] [transport.py] [_log()] userauth is OK
2025-12-25T03:27:54.059 [DEBUG] [Thread-4284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:27:54.059 [DEBUG] [Thread-4284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:27:54.059 [DEBUG] [Thread-4284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:27:54.059 [DEBUG] [Thread-4284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:27:54.078 [INFO] [Thread-4284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:27:54.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:27:54.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:27:54.590 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:27:54.591 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:27:54.895 [DEBUG] [Thread-4284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:27:54.895 [DEBUG] [Thread-4284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:27:54.943 [DEBUG] [Thread-4284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:27:54.944 [DEBUG] [Thread-4284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:27:54.953 [DEBUG] [Thread-4284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:27:54.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:27:54.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')
2025-12-25T03:27:54.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
2025-12-25T03:27:54.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:27:54.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:27:54.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:27:54.987 [DEBUG] [Thread-4284] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:28:07.802 [DEBUG] [Thread-4286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:28:22.856 [DEBUG] [Thread-4287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:28:25.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:28:25.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:28:25.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:28:25.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 28, 12), 0.32, 97.73, 0.0, 22.62, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:28:25.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:28:12
2025-12-25T03:28:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:28:25.969 [DEBUG] [Thread-4288] [transport.py] [_log()] starting thread (client mode): 0xb6b35600
2025-12-25T03:28:25.969 [DEBUG] [Thread-4288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:28:25.989 [DEBUG] [Thread-4288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:28:25.989 [INFO] [Thread-4288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:28:25.992 [DEBUG] [Thread-4288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] client lang: <none>
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] server lang: <none>
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] kex follows: False
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] Compression: none
2025-12-25T03:28:25.993 [DEBUG] [Thread-4288] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:28:26.011 [DEBUG] [Thread-4288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:28:26.011 [DEBUG] [Thread-4288] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:28:26.012 [DEBUG] [Thread-4288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:28:26.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:28:26.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:28:26.014 [DEBUG] [Thread-4288] [transport.py] [_log()] userauth is OK
2025-12-25T03:28:26.014 [DEBUG] [Thread-4288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:28:26.014 [DEBUG] [Thread-4288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:28:26.014 [DEBUG] [Thread-4288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:28:26.014 [DEBUG] [Thread-4288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:28:26.035 [INFO] [Thread-4288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:28:26.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:28:26.675 [DEBUG] [Thread-4288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:28:26.676 [DEBUG] [Thread-4288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:28:26.676 [DEBUG] [Thread-4288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:28:26.717 [DEBUG] [Thread-4288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:28:26.717 [DEBUG] [Thread-4288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:28:26.721 [DEBUG] [Thread-4288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:28:26.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:28:26.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:28:26.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:28:26.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:28:26.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:28:26.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:28:26.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:28:26.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:28:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:28:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.060832 -999.00  +11.30  14.33     95  +10.60 1 3 1 3 1     0    0 0.61 -3.78 ----- 13.1 14.3 152.4 23.0 13.1 -4.0 12.9 -3.9 12.7 -3.5 13.1 -4.3
2025-12-25T03:28:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:28:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:28:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.060832
2025-12-25T03:28:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:28:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:28:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:28:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:28:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:28:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:28:12', tmtdew=0.32, humidity=97.73, cloud=0.0, wind=22.62, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:27:35.885', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:28:26.749 [DEBUG] [Thread-4288] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:28:26.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:28:26.843 [DEBUG] [Thread-4291] [transport.py] [_log()] starting thread (client mode): 0xb6b2b3a0
2025-12-25T03:28:26.843 [DEBUG] [Thread-4291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:28:26.858 [DEBUG] [Thread-4291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:28:26.859 [INFO] [Thread-4291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] client lang: <none>
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] server lang: <none>
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] kex follows: False
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:28:26.866 [DEBUG] [Thread-4291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:28:26.867 [DEBUG] [Thread-4291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:28:26.867 [DEBUG] [Thread-4291] [transport.py] [_log()] Compression: none
2025-12-25T03:28:26.867 [DEBUG] [Thread-4291] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:28:26.927 [DEBUG] [Thread-4291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:28:26.928 [DEBUG] [Thread-4291] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:28:26.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:28:26.929 [DEBUG] [Thread-4291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:28:26.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:28:26.983 [DEBUG] [Thread-4291] [transport.py] [_log()] userauth is OK
2025-12-25T03:28:26.983 [DEBUG] [Thread-4291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:28:26.984 [DEBUG] [Thread-4291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:28:26.984 [DEBUG] [Thread-4291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:28:26.984 [DEBUG] [Thread-4291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:28:27.003 [INFO] [Thread-4291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:28:27.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:28:27.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:28:27.877 [DEBUG] [Thread-4291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:28:27.877 [DEBUG] [Thread-4291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:28:27.925 [DEBUG] [Thread-4291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:28:27.925 [DEBUG] [Thread-4291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:28:27.934 [DEBUG] [Thread-4291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:28:27.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:28:27.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:28:27.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:28:27.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:28:27.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:28:27.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:28:27.974 [DEBUG] [Thread-4291] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:28:32.446 [DEBUG] [Thread-4293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:28:37.890 [DEBUG] [Thread-4294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:28:52.928 [DEBUG] [Thread-4295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:28:54.794 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:28:54.795 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:28:57.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:28:57.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:28:58.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:28:58.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 28, 44), 0.31, 97.75, 0.0, 19.09, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:28:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:28:44
2025-12-25T03:28:58.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:28:58.952 [DEBUG] [Thread-4296] [transport.py] [_log()] starting thread (client mode): 0xb6b36470
2025-12-25T03:28:58.953 [DEBUG] [Thread-4296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:28:58.972 [DEBUG] [Thread-4296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:28:58.973 [INFO] [Thread-4296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:28:58.975 [DEBUG] [Thread-4296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:28:58.975 [DEBUG] [Thread-4296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] client lang: <none>
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] server lang: <none>
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] kex follows: False
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:28:58.976 [DEBUG] [Thread-4296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:28:58.977 [DEBUG] [Thread-4296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:28:58.977 [DEBUG] [Thread-4296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:28:58.977 [DEBUG] [Thread-4296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:28:58.977 [DEBUG] [Thread-4296] [transport.py] [_log()] Compression: none
2025-12-25T03:28:58.977 [DEBUG] [Thread-4296] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:28:58.997 [DEBUG] [Thread-4296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:28:58.998 [DEBUG] [Thread-4296] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:28:58.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:28:58.999 [DEBUG] [Thread-4296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:28:58.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:28:59.001 [DEBUG] [Thread-4296] [transport.py] [_log()] userauth is OK
2025-12-25T03:28:59.001 [DEBUG] [Thread-4296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:28:59.001 [DEBUG] [Thread-4296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:28:59.001 [DEBUG] [Thread-4296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:28:59.001 [DEBUG] [Thread-4296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:28:59.025 [INFO] [Thread-4296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:28:59.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:28:59.637 [DEBUG] [Thread-4296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:28:59.637 [DEBUG] [Thread-4296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:28:59.637 [DEBUG] [Thread-4296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:28:59.678 [DEBUG] [Thread-4296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:28:59.678 [DEBUG] [Thread-4296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:28:59.682 [DEBUG] [Thread-4296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:28:59.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:28:59.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:28:59.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:28:59.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:28:59.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:28:59.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:28:59.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:28:59.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:28:59.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.061179 -999.00  +11.30  16.55     95  +10.60 1 3 1 3 1     0    0 0.63 -3.19 ----- 17.6 16.6 149.4 20.3 13.1 -4.9 12.9 -5.7 12.8 -4.2 13.1 -5.1
2025-12-25T03:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.061179
2025-12-25T03:28:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:28:59.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:28:59.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:28:59.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:28:59.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:28:59.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:28:44', tmtdew=0.31, humidity=97.75, cloud=0.0, wind=19.09, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:28:05.866', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:28:59.709 [DEBUG] [Thread-4296] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:28:59.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:28:59.804 [DEBUG] [Thread-4299] [transport.py] [_log()] starting thread (client mode): 0xb6b37190
2025-12-25T03:28:59.804 [DEBUG] [Thread-4299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:28:59.820 [DEBUG] [Thread-4299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:28:59.820 [INFO] [Thread-4299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:28:59.827 [DEBUG] [Thread-4299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] client lang: <none>
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] server lang: <none>
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] kex follows: False
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:28:59.828 [DEBUG] [Thread-4299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:28:59.829 [DEBUG] [Thread-4299] [transport.py] [_log()] Compression: none
2025-12-25T03:28:59.829 [DEBUG] [Thread-4299] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:28:59.887 [DEBUG] [Thread-4299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:28:59.888 [DEBUG] [Thread-4299] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:28:59.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:28:59.889 [DEBUG] [Thread-4299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:28:59.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:28:59.943 [DEBUG] [Thread-4299] [transport.py] [_log()] userauth is OK
2025-12-25T03:28:59.944 [DEBUG] [Thread-4299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:28:59.944 [DEBUG] [Thread-4299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:28:59.944 [DEBUG] [Thread-4299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:28:59.944 [DEBUG] [Thread-4299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:28:59.963 [INFO] [Thread-4299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:28:59.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:28:59.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:29:00.793 [DEBUG] [Thread-4299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:29:00.793 [DEBUG] [Thread-4299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:29:00.841 [DEBUG] [Thread-4299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:29:00.841 [DEBUG] [Thread-4299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:29:00.850 [DEBUG] [Thread-4299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:29:00.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:29:00.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:29:00.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:29:00.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:29:00.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:29:00.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:29:00.886 [DEBUG] [Thread-4299] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:29:07.965 [DEBUG] [Thread-4301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:29:23.014 [DEBUG] [Thread-4302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:29:30.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:29:30.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:29: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
2025-12-25T03:29:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 29, 16), 0.32, 97.7, 0.0, 19.29, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:29:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:29:16
2025-12-25T03:29:31.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:29:31.872 [DEBUG] [Thread-4303] [transport.py] [_log()] starting thread (client mode): 0xb6b177f0
2025-12-25T03:29:31.873 [DEBUG] [Thread-4303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:29:31.893 [DEBUG] [Thread-4303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:29:31.893 [INFO] [Thread-4303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] client lang: <none>
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] server lang: <none>
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] kex follows: False
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] Compression: none
2025-12-25T03:29:31.896 [DEBUG] [Thread-4303] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:29:31.915 [DEBUG] [Thread-4303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:29:31.915 [DEBUG] [Thread-4303] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:29:31.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:29:31.916 [DEBUG] [Thread-4303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:29:31.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:29:31.919 [DEBUG] [Thread-4303] [transport.py] [_log()] userauth is OK
2025-12-25T03:29:31.919 [DEBUG] [Thread-4303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:29:31.919 [DEBUG] [Thread-4303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:29:31.919 [DEBUG] [Thread-4303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:29:31.919 [DEBUG] [Thread-4303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:29:31.944 [INFO] [Thread-4303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:29:31.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:29:32.522 [DEBUG] [Thread-4305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:29:32.580 [DEBUG] [Thread-4303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:29:32.580 [DEBUG] [Thread-4303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:29:32.581 [DEBUG] [Thread-4303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:29:32.621 [DEBUG] [Thread-4303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:29:32.621 [DEBUG] [Thread-4303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:29:32.625 [DEBUG] [Thread-4303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:29:32.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:29:32.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:29:32.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:29:32.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:29:32.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:29:32.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:29:32.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:29:32.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:29:32.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:29:32.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.061526 -999.00  +11.20  17.56     95  +10.50 1 3 1 3 1     0    0 0.64 -2.94 ----- 16.0 17.6 144.6 22.3 13.1 -4.8 12.9 -6.0 12.8 -4.7 13.1 -6.5
2025-12-25T03:29:32.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:29:32.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:29:32.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.061526
2025-12-25T03:29:32.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:29:32.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:29:32.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:29:32.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:29:32.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:29:32.651 [DEBUG] [Thread-4303] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:29:32.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:29:16', tmtdew=0.32, humidity=97.7, cloud=0.0, wind=19.29, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:28:35.846', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:29:32.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:29:32.740 [DEBUG] [Thread-4307] [transport.py] [_log()] starting thread (client mode): 0xb6b354e0
2025-12-25T03:29:32.740 [DEBUG] [Thread-4307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:29:32.755 [DEBUG] [Thread-4307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:29:32.755 [INFO] [Thread-4307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:29:32.762 [DEBUG] [Thread-4307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:29:32.762 [DEBUG] [Thread-4307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] client lang: <none>
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] server lang: <none>
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] kex follows: False
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] Compression: none
2025-12-25T03:29:32.763 [DEBUG] [Thread-4307] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:29:32.819 [DEBUG] [Thread-4307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:29:32.820 [DEBUG] [Thread-4307] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:29:32.820 [DEBUG] [Thread-4307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:29:32.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:29:32.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:29:32.876 [DEBUG] [Thread-4307] [transport.py] [_log()] userauth is OK
2025-12-25T03:29:32.876 [DEBUG] [Thread-4307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:29:32.876 [DEBUG] [Thread-4307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:29:32.876 [DEBUG] [Thread-4307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:29:32.876 [DEBUG] [Thread-4307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:29:32.895 [INFO] [Thread-4307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:29:32.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:29:32.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:29:33.718 [DEBUG] [Thread-4307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:29:33.718 [DEBUG] [Thread-4307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:29:33.766 [DEBUG] [Thread-4307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:29:33.766 [DEBUG] [Thread-4307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:29:33.775 [DEBUG] [Thread-4307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:29:33.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:29:33.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:29:33.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:29:33.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:29:33.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:29:33.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:29:33.812 [DEBUG] [Thread-4307] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:29:38.050 [DEBUG] [Thread-4309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:29:53.101 [DEBUG] [Thread-4310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:29:54.996 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:29:54.997 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:30:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:30:03.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:30:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:30:04.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 29, 49), 0.32, 97.71, 0.0, 17.87, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:30:04.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:29:49
2025-12-25T03:30:04.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:30:04.804 [DEBUG] [Thread-4311] [transport.py] [_log()] starting thread (client mode): 0xb6b28310
2025-12-25T03:30:04.805 [DEBUG] [Thread-4311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:30:04.825 [DEBUG] [Thread-4311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:30:04.825 [INFO] [Thread-4311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:30:04.828 [DEBUG] [Thread-4311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] client lang: <none>
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] server lang: <none>
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] kex follows: False
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:30:04.829 [DEBUG] [Thread-4311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:30:04.830 [DEBUG] [Thread-4311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:30:04.830 [DEBUG] [Thread-4311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:30:04.830 [DEBUG] [Thread-4311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:30:04.830 [DEBUG] [Thread-4311] [transport.py] [_log()] Compression: none
2025-12-25T03:30:04.830 [DEBUG] [Thread-4311] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:30:04.848 [DEBUG] [Thread-4311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:30:04.849 [DEBUG] [Thread-4311] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:30:04.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:30:04.850 [DEBUG] [Thread-4311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:30:04.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:30:04.852 [DEBUG] [Thread-4311] [transport.py] [_log()] userauth is OK
2025-12-25T03:30:04.852 [DEBUG] [Thread-4311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:30:04.852 [DEBUG] [Thread-4311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:30:04.852 [DEBUG] [Thread-4311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:30:04.852 [DEBUG] [Thread-4311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:30:04.875 [INFO] [Thread-4311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:30:04.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:30:05.827 [DEBUG] [Thread-4311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:30:05.827 [DEBUG] [Thread-4311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:30:05.828 [DEBUG] [Thread-4311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:30:05.869 [DEBUG] [Thread-4311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:30:05.869 [DEBUG] [Thread-4311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:30:05.872 [DEBUG] [Thread-4311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:30:05.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:30:05.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:30:05.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:30:05.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:30:05.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:30:05.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:30:05.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:30:05.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:30:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:30:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.061874 -999.00  +11.30  14.02     95  +10.60 1 3 1 3 1     0    0 0.62 -2.76 ----- 12.6 14.0 146.2 20.6 13.1 -6.0 12.9 -5.4 12.8 -5.4 13.1 -5.8
2025-12-25T03:30:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:30:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:30:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.061874
2025-12-25T03:30:05.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:30:05.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:30:05.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:30:05.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:30:05.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:30:05.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:29:49', tmtdew=0.32, humidity=97.71, cloud=0.0, wind=17.87, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:29:05.914', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:30:05.897 [DEBUG] [Thread-4311] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:30:05.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:30:05.988 [DEBUG] [Thread-4314] [transport.py] [_log()] starting thread (client mode): 0xb9558b20
2025-12-25T03:30:05.988 [DEBUG] [Thread-4314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:30:06.003 [DEBUG] [Thread-4314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:30:06.003 [INFO] [Thread-4314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] client lang: <none>
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] server lang: <none>
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] kex follows: False
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:30:06.011 [DEBUG] [Thread-4314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:30:06.012 [DEBUG] [Thread-4314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:30:06.012 [DEBUG] [Thread-4314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:30:06.012 [DEBUG] [Thread-4314] [transport.py] [_log()] Compression: none
2025-12-25T03:30:06.012 [DEBUG] [Thread-4314] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:30:06.074 [DEBUG] [Thread-4314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:30:06.074 [DEBUG] [Thread-4314] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:30:06.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:30:06.075 [DEBUG] [Thread-4314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:30:06.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:30:06.137 [DEBUG] [Thread-4314] [transport.py] [_log()] userauth is OK
2025-12-25T03:30:06.137 [DEBUG] [Thread-4314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:30:06.137 [DEBUG] [Thread-4314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:30:06.137 [DEBUG] [Thread-4314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:30:06.137 [DEBUG] [Thread-4314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:30:06.158 [INFO] [Thread-4314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:30:06.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:30:06.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:30:07.019 [DEBUG] [Thread-4314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:30:07.020 [DEBUG] [Thread-4314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:30:07.067 [DEBUG] [Thread-4314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:30:07.067 [DEBUG] [Thread-4314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:30:07.076 [DEBUG] [Thread-4314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:30:07.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:30:07.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:30:07.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:30:07.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:30:07.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:30:07.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:30:07.113 [DEBUG] [Thread-4314] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:30:08.130 [DEBUG] [Thread-4316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:30:23.184 [DEBUG] [Thread-4317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:30:32.593 [DEBUG] [Thread-4318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:30:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:30:37.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:30:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:30:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 30, 21), 0.32, 97.71, 0.0, 17.42, 11.29, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:30:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:30:21
2025-12-25T03:30:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:30:38.152 [DEBUG] [Thread-4319] [transport.py] [_log()] starting thread (client mode): 0xb6b16710
2025-12-25T03:30:38.152 [DEBUG] [Thread-4319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:30:38.172 [DEBUG] [Thread-4319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:30:38.172 [INFO] [Thread-4319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:30:38.175 [DEBUG] [Thread-4319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] client lang: <none>
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] server lang: <none>
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] kex follows: False
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] Compression: none
2025-12-25T03:30:38.176 [DEBUG] [Thread-4319] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:30:38.192 [DEBUG] [Thread-4319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:30:38.192 [DEBUG] [Thread-4319] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:30:38.192 [DEBUG] [Thread-4319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:30:38.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:30:38.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:30:38.193 [DEBUG] [Thread-4319] [transport.py] [_log()] userauth is OK
2025-12-25T03:30:38.193 [DEBUG] [Thread-4319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:30:38.193 [DEBUG] [Thread-4319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:30:38.193 [DEBUG] [Thread-4319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:30:38.193 [DEBUG] [Thread-4319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:30:38.202 [INFO] [Thread-4319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:30:38.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:30:38.211 [DEBUG] [Thread-4321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:30:38.842 [DEBUG] [Thread-4319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:30:38.842 [DEBUG] [Thread-4319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:30:38.843 [DEBUG] [Thread-4319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:30:38.883 [DEBUG] [Thread-4319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:30:38.883 [DEBUG] [Thread-4319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:30:38.886 [DEBUG] [Thread-4319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:30:38.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:30:38.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:30:38.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:30:38.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:30:38.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:30:38.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:30:38.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:30:38.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.062568 -999.00  +11.20  11.95     95  +10.50 1 3 1 3 1     0    0 0.64 -2.84 ----- 13.4 11.9 160.4 20.1 13.1 -5.1 13.0 -6.0 12.8 -5.5 13.1 -6.4
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.062568
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:30:38.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:30:21', tmtdew=0.32, humidity=97.71, cloud=0.0, wind=17.42, temperature=11.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:30:05.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:30:38.910 [DEBUG] [Thread-4319] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:30:38.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:30:39.003 [DEBUG] [Thread-4323] [transport.py] [_log()] starting thread (client mode): 0xb6b299c0
2025-12-25T03:30:39.003 [DEBUG] [Thread-4323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:30:39.017 [DEBUG] [Thread-4323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:30:39.017 [INFO] [Thread-4323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:30:39.026 [DEBUG] [Thread-4323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] client lang: <none>
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] server lang: <none>
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] kex follows: False
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] Compression: none
2025-12-25T03:30:39.027 [DEBUG] [Thread-4323] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:30:39.084 [DEBUG] [Thread-4323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:30:39.085 [DEBUG] [Thread-4323] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:30:39.085 [DEBUG] [Thread-4323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:30:39.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:30:39.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:30:39.144 [DEBUG] [Thread-4323] [transport.py] [_log()] userauth is OK
2025-12-25T03:30:39.144 [DEBUG] [Thread-4323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:30:39.145 [DEBUG] [Thread-4323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:30:39.145 [DEBUG] [Thread-4323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:30:39.145 [DEBUG] [Thread-4323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:30:39.163 [INFO] [Thread-4323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:30:39.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:30:39.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:30:40.041 [DEBUG] [Thread-4323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:30:40.042 [DEBUG] [Thread-4323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:30:40.090 [DEBUG] [Thread-4323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:30:40.090 [DEBUG] [Thread-4323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:30:40.100 [DEBUG] [Thread-4323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:30:40.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:30:40.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:30:40.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') -> 00000000
2025-12-25T03:30:40.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:30:40.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:30:40.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:30:40.137 [DEBUG] [Thread-4323] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:30:53.244 [DEBUG] [Thread-4325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:30:55.201 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:30:55.202 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:31:08.299 [DEBUG] [Thread-4326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:31:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:31:10.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:31:10.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:31:10.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 30, 53), 0.31, 97.78, 0.0, 18.12, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:31:10.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:30:53
2025-12-25T03:31:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:31:11.128 [DEBUG] [Thread-4327] [transport.py] [_log()] starting thread (client mode): 0xb95f2dd0
2025-12-25T03:31:11.128 [DEBUG] [Thread-4327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:31:11.149 [DEBUG] [Thread-4327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:31:11.149 [INFO] [Thread-4327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:31:11.152 [DEBUG] [Thread-4327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:31:11.152 [DEBUG] [Thread-4327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:31:11.152 [DEBUG] [Thread-4327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] client lang: <none>
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] server lang: <none>
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] kex follows: False
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:31:11.153 [DEBUG] [Thread-4327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:31:11.154 [DEBUG] [Thread-4327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:31:11.154 [DEBUG] [Thread-4327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:31:11.154 [DEBUG] [Thread-4327] [transport.py] [_log()] Compression: none
2025-12-25T03:31:11.154 [DEBUG] [Thread-4327] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:31:11.170 [DEBUG] [Thread-4327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:31:11.171 [DEBUG] [Thread-4327] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:31:11.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:31:11.172 [DEBUG] [Thread-4327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:31:11.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:31:11.174 [DEBUG] [Thread-4327] [transport.py] [_log()] userauth is OK
2025-12-25T03:31:11.174 [DEBUG] [Thread-4327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:31:11.174 [DEBUG] [Thread-4327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:31:11.174 [DEBUG] [Thread-4327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:31:11.174 [DEBUG] [Thread-4327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:31:11.192 [INFO] [Thread-4327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:31:11.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:31:11.814 [DEBUG] [Thread-4327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:31:11.814 [DEBUG] [Thread-4327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:31:11.814 [DEBUG] [Thread-4327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:31:11.855 [DEBUG] [Thread-4327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:31:11.855 [DEBUG] [Thread-4327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:31:11.858 [DEBUG] [Thread-4327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:31:11.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:31:11.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:31:11.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:31:11.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:31:11.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:31:11.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:31:11.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:31:11.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:31:11.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:31:11.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.062915 -999.00  +11.20  16.32     95  +10.50 1 3 1 3 1     0    0 0.64 -2.49 ----- 13.5 16.3 136.4 21.8 13.1 -5.1 12.9 -3.9 12.8 -4.5 13.1 -4.2
2025-12-25T03:31:11.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:31:11.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:31:11.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.062915
2025-12-25T03:31:11.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:31:11.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:31:11.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:31:11.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:31:11.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:31:11.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:30:53', tmtdew=0.31, humidity=97.78, cloud=0.0, wind=18.12, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:30:35.856', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:31:11.876 [DEBUG] [Thread-4327] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:31:11.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:31:11.966 [DEBUG] [Thread-4330] [transport.py] [_log()] starting thread (client mode): 0xb95f0790
2025-12-25T03:31:11.966 [DEBUG] [Thread-4330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:31:11.980 [DEBUG] [Thread-4330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:31:11.980 [INFO] [Thread-4330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] client lang: <none>
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] server lang: <none>
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] kex follows: False
2025-12-25T03:31:11.987 [DEBUG] [Thread-4330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:31:11.988 [DEBUG] [Thread-4330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:31:11.988 [DEBUG] [Thread-4330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:31:11.988 [DEBUG] [Thread-4330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:31:11.988 [DEBUG] [Thread-4330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:31:11.988 [DEBUG] [Thread-4330] [transport.py] [_log()] Compression: none
2025-12-25T03:31:11.988 [DEBUG] [Thread-4330] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:31:12.042 [DEBUG] [Thread-4330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:31:12.042 [DEBUG] [Thread-4330] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:31:12.042 [DEBUG] [Thread-4330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:31:12.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:31:12.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:31:12.100 [DEBUG] [Thread-4330] [transport.py] [_log()] userauth is OK
2025-12-25T03:31:12.100 [DEBUG] [Thread-4330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:31:12.100 [DEBUG] [Thread-4330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:31:12.100 [DEBUG] [Thread-4330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:31:12.100 [DEBUG] [Thread-4330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:31:12.113 [INFO] [Thread-4330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:31:12.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:31:12.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:31:12.909 [DEBUG] [Thread-4330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:31:12.909 [DEBUG] [Thread-4330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:31:12.956 [DEBUG] [Thread-4330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:31:12.957 [DEBUG] [Thread-4330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:31:12.965 [DEBUG] [Thread-4330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:31:12.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:31:12.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:31:12.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
2025-12-25T03:31:12.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:31:12.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:31:12.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:31:12.997 [DEBUG] [Thread-4330] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:31:23.331 [DEBUG] [Thread-4332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:31:32.651 [DEBUG] [Thread-4333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:31:38.380 [DEBUG] [Thread-4334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:31:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:31:42.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:31:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:31:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 31, 25), 0.32, 97.73, 0.0, 20.24, 11.29, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:31:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:31:25
2025-12-25T03:31:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:31:43.971 [DEBUG] [Thread-4335] [transport.py] [_log()] starting thread (client mode): 0xb6b2b4f0
2025-12-25T03:31:43.971 [DEBUG] [Thread-4335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:31:43.992 [DEBUG] [Thread-4335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:31:43.992 [INFO] [Thread-4335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] client lang: <none>
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] server lang: <none>
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] kex follows: False
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] Compression: none
2025-12-25T03:31:43.995 [DEBUG] [Thread-4335] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:31:44.011 [DEBUG] [Thread-4335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:31:44.012 [DEBUG] [Thread-4335] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:31:44.012 [DEBUG] [Thread-4335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:31:44.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:31:44.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:31:44.014 [DEBUG] [Thread-4335] [transport.py] [_log()] userauth is OK
2025-12-25T03:31:44.015 [DEBUG] [Thread-4335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:31:44.015 [DEBUG] [Thread-4335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:31:44.015 [DEBUG] [Thread-4335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:31:44.015 [DEBUG] [Thread-4335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:31:44.036 [INFO] [Thread-4335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:31:44.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:31:44.683 [DEBUG] [Thread-4335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:31:44.683 [DEBUG] [Thread-4335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:31:44.684 [DEBUG] [Thread-4335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:31:44.724 [DEBUG] [Thread-4335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:31:44.724 [DEBUG] [Thread-4335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:31:44.728 [DEBUG] [Thread-4335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:31:44.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:31:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:31:44.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:31:44.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:31:44.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:31:44.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:31:44.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:31:44.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:31:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:31:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.063263 -999.00  +11.30  13.80     95  +10.60 1 3 1 3 1     0    0 0.64 -2.24 ----- 13.3 13.8 151.4 16.9 13.1 -5.8 13.0 -4.1 12.8 -5.0 13.1 -4.6
2025-12-25T03:31:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:31:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:31:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.063263
2025-12-25T03:31:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:31:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:31:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:31:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:31:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:31:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:31:25', tmtdew=0.32, humidity=97.73, cloud=0.0, wind=20.24, temperature=11.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:31:05.923', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:31:44.753 [DEBUG] [Thread-4335] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:31:44.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:31:44.846 [DEBUG] [Thread-4338] [transport.py] [_log()] starting thread (client mode): 0xb6b151e0
2025-12-25T03:31:44.847 [DEBUG] [Thread-4338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:31:44.861 [DEBUG] [Thread-4338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:31:44.861 [INFO] [Thread-4338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:31:44.870 [DEBUG] [Thread-4338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:31:44.870 [DEBUG] [Thread-4338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:31:44.870 [DEBUG] [Thread-4338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:31:44.870 [DEBUG] [Thread-4338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:31:44.870 [DEBUG] [Thread-4338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:31:44.870 [DEBUG] [Thread-4338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:31:44.871 [DEBUG] [Thread-4338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:31:44.871 [DEBUG] [Thread-4338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:31:44.871 [DEBUG] [Thread-4338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:31:44.871 [DEBUG] [Thread-4338] [transport.py] [_log()] client lang: <none>
2025-12-25T03:31:44.871 [DEBUG] [Thread-4338] [transport.py] [_log()] server lang: <none>
2025-12-25T03:31:44.871 [DEBUG] [Thread-4338] [transport.py] [_log()] kex follows: False
2025-12-25T03:31:44.879 [DEBUG] [Thread-4338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:31:44.880 [DEBUG] [Thread-4338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:31:44.880 [DEBUG] [Thread-4338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:31:44.880 [DEBUG] [Thread-4338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:31:44.880 [DEBUG] [Thread-4338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:31:44.880 [DEBUG] [Thread-4338] [transport.py] [_log()] Compression: none
2025-12-25T03:31:44.880 [DEBUG] [Thread-4338] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:31:44.929 [DEBUG] [Thread-4338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:31:44.929 [DEBUG] [Thread-4338] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:31:44.930 [DEBUG] [Thread-4338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:31:44.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:31:44.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:31:44.985 [DEBUG] [Thread-4338] [transport.py] [_log()] userauth is OK
2025-12-25T03:31:44.985 [DEBUG] [Thread-4338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:31:44.985 [DEBUG] [Thread-4338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:31:44.985 [DEBUG] [Thread-4338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:31:44.985 [DEBUG] [Thread-4338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:31:45.003 [INFO] [Thread-4338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:31:45.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:31:45.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:31:45.848 [DEBUG] [Thread-4338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:31:45.849 [DEBUG] [Thread-4338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:31:45.897 [DEBUG] [Thread-4338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:31:45.897 [DEBUG] [Thread-4338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:31:45.907 [DEBUG] [Thread-4338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:31:45.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:31:45.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:31:45.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
2025-12-25T03:31:45.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:31:45.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:31:45.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:31:45.943 [DEBUG] [Thread-4338] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:31:53.414 [DEBUG] [Thread-4340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:31:55.406 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:31:55.406 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:32:08.452 [DEBUG] [Thread-4341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:32:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:32:15.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:32:15.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:32:16.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 31, 57), 0.31, 97.75, 0.0, 20.17, 11.3, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:32:16.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:31:57
2025-12-25T03:32:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:32:16.935 [DEBUG] [Thread-4342] [transport.py] [_log()] starting thread (client mode): 0xb9558610
2025-12-25T03:32:16.936 [DEBUG] [Thread-4342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:32:16.955 [DEBUG] [Thread-4342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:32:16.956 [INFO] [Thread-4342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:32:16.959 [DEBUG] [Thread-4342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] client lang: <none>
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] server lang: <none>
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] kex follows: False
2025-12-25T03:32:16.960 [DEBUG] [Thread-4342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:32:16.961 [DEBUG] [Thread-4342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:32:16.961 [DEBUG] [Thread-4342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:32:16.961 [DEBUG] [Thread-4342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:32:16.961 [DEBUG] [Thread-4342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:32:16.961 [DEBUG] [Thread-4342] [transport.py] [_log()] Compression: none
2025-12-25T03:32:16.961 [DEBUG] [Thread-4342] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:32:16.981 [DEBUG] [Thread-4342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:32:16.981 [DEBUG] [Thread-4342] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:32:16.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:32:16.982 [DEBUG] [Thread-4342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:32:16.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:32:16.984 [DEBUG] [Thread-4342] [transport.py] [_log()] userauth is OK
2025-12-25T03:32:16.984 [DEBUG] [Thread-4342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:32:16.985 [DEBUG] [Thread-4342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:32:16.985 [DEBUG] [Thread-4342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:32:16.985 [DEBUG] [Thread-4342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:32:17.008 [INFO] [Thread-4342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:32:17.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:32:17.628 [DEBUG] [Thread-4342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:32:17.628 [DEBUG] [Thread-4342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:32:17.629 [DEBUG] [Thread-4342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:32:17.669 [DEBUG] [Thread-4342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:32:17.669 [DEBUG] [Thread-4342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:32:17.672 [DEBUG] [Thread-4342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:32:17.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:32:17.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:32:17.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:32:17.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:32:17.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:32:17.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:32:17.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:32:17.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:32:17.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:32:17.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.063610 -999.00  +11.30  15.08     95  +10.60 1 3 1 3 1     0    0 0.64 -2.24 ----- 15.4 15.1 146.7 21.2 13.1 -7.3 12.9 -6.8 12.8 -6.8 13.1 -8.1
2025-12-25T03:32:17.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:32:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:32:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.063610
2025-12-25T03:32:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:32:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:32:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:32:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:32:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:32:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:31:57', tmtdew=0.31, humidity=97.75, cloud=0.0, wind=20.17, temperature=11.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:31:35.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:32:17.698 [DEBUG] [Thread-4342] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:32:17.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:32:17.792 [DEBUG] [Thread-4345] [transport.py] [_log()] starting thread (client mode): 0xb955aa10
2025-12-25T03:32:17.793 [DEBUG] [Thread-4345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:32:17.807 [DEBUG] [Thread-4345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:32:17.807 [INFO] [Thread-4345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] client lang: <none>
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] server lang: <none>
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] kex follows: False
2025-12-25T03:32:17.815 [DEBUG] [Thread-4345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:32:17.816 [DEBUG] [Thread-4345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:32:17.816 [DEBUG] [Thread-4345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:32:17.816 [DEBUG] [Thread-4345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:32:17.816 [DEBUG] [Thread-4345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:32:17.816 [DEBUG] [Thread-4345] [transport.py] [_log()] Compression: none
2025-12-25T03:32:17.816 [DEBUG] [Thread-4345] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:32:17.872 [DEBUG] [Thread-4345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:32:17.872 [DEBUG] [Thread-4345] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:32:17.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:32:17.873 [DEBUG] [Thread-4345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:32:17.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:32:17.928 [DEBUG] [Thread-4345] [transport.py] [_log()] userauth is OK
2025-12-25T03:32:17.929 [DEBUG] [Thread-4345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:32:17.929 [DEBUG] [Thread-4345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:32:17.929 [DEBUG] [Thread-4345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:32:17.929 [DEBUG] [Thread-4345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:32:17.947 [INFO] [Thread-4345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:32:17.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:32:17.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:32:18.761 [DEBUG] [Thread-4345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:32:18.762 [DEBUG] [Thread-4345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:32:18.810 [DEBUG] [Thread-4345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:32:18.810 [DEBUG] [Thread-4345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:32:18.819 [DEBUG] [Thread-4345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:32:18.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:32:18.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:32:18.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:32:18.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:32:18.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:32:18.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:32:18.857 [DEBUG] [Thread-4345] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:32:23.486 [DEBUG] [Thread-4347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:32:32.704 [DEBUG] [Thread-4348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:32:38.535 [DEBUG] [Thread-4349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:32:48.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:32:48.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:32:48.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
2025-12-25T03:32:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 32, 29), 0.32, 97.71, 0.0, 21.62, 11.25, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:32:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:32:29
2025-12-25T03:32:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:32:49.820 [DEBUG] [Thread-4350] [transport.py] [_log()] starting thread (client mode): 0xb6b15b10
2025-12-25T03:32:49.820 [DEBUG] [Thread-4350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:32:49.840 [DEBUG] [Thread-4350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:32:49.840 [INFO] [Thread-4350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:32:49.843 [DEBUG] [Thread-4350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:32:49.843 [DEBUG] [Thread-4350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:32:49.843 [DEBUG] [Thread-4350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:32:49.843 [DEBUG] [Thread-4350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:32:49.843 [DEBUG] [Thread-4350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:32:49.843 [DEBUG] [Thread-4350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] client lang: <none>
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] server lang: <none>
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] kex follows: False
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] Compression: none
2025-12-25T03:32:49.844 [DEBUG] [Thread-4350] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:32:49.863 [DEBUG] [Thread-4350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:32:49.864 [DEBUG] [Thread-4350] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:32:49.864 [DEBUG] [Thread-4350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:32:49.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:32:49.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:32:49.866 [DEBUG] [Thread-4350] [transport.py] [_log()] userauth is OK
2025-12-25T03:32:49.866 [DEBUG] [Thread-4350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:32:49.866 [DEBUG] [Thread-4350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:32:49.866 [DEBUG] [Thread-4350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:32:49.867 [DEBUG] [Thread-4350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:32:49.883 [INFO] [Thread-4350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:32:49.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:32:50.523 [DEBUG] [Thread-4350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:32:50.523 [DEBUG] [Thread-4350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:32:50.523 [DEBUG] [Thread-4350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:32:50.564 [DEBUG] [Thread-4350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:32:50.564 [DEBUG] [Thread-4350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:32:50.568 [DEBUG] [Thread-4350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:32:50.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:32:50.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:32:50.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:32:50.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:32:50.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:32:50.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:32:50.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:32:50.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:32:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:32:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.063957 -999.00  +11.30  15.52     95  +10.60 1 3 1 3 1     0    0 0.62 -2.48 ----- 14.4 15.5 139.4 18.7 13.1 -6.4 13.0 -8.1 12.8 -6.3 13.1 -8.1
2025-12-25T03:32:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:32:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:32:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.063957
2025-12-25T03:32:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:32:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:32:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:32:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:32:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:32:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:32:29', tmtdew=0.32, humidity=97.71, cloud=0.0, wind=21.62, temperature=11.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:32:05.885', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:32:50.592 [DEBUG] [Thread-4350] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:32:50.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:32:50.679 [DEBUG] [Thread-4353] [transport.py] [_log()] starting thread (client mode): 0xb6b15510
2025-12-25T03:32:50.679 [DEBUG] [Thread-4353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:32:50.693 [DEBUG] [Thread-4353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:32:50.694 [INFO] [Thread-4353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:32:50.702 [DEBUG] [Thread-4353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:32:50.702 [DEBUG] [Thread-4353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:32:50.702 [DEBUG] [Thread-4353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:32:50.702 [DEBUG] [Thread-4353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:32:50.702 [DEBUG] [Thread-4353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:32:50.702 [DEBUG] [Thread-4353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:32:50.702 [DEBUG] [Thread-4353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] client lang: <none>
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] server lang: <none>
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] kex follows: False
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] Compression: none
2025-12-25T03:32:50.703 [DEBUG] [Thread-4353] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:32:50.765 [DEBUG] [Thread-4353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:32:50.766 [DEBUG] [Thread-4353] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:32:50.766 [DEBUG] [Thread-4353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:32:50.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:32:50.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:32:50.824 [DEBUG] [Thread-4353] [transport.py] [_log()] userauth is OK
2025-12-25T03:32:50.825 [DEBUG] [Thread-4353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:32:50.825 [DEBUG] [Thread-4353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:32:50.825 [DEBUG] [Thread-4353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:32:50.825 [DEBUG] [Thread-4353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:32:50.846 [INFO] [Thread-4353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:32:50.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:32:50.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:32:51.686 [DEBUG] [Thread-4353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:32:51.687 [DEBUG] [Thread-4353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:32:51.735 [DEBUG] [Thread-4353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:32:51.735 [DEBUG] [Thread-4353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:32:51.744 [DEBUG] [Thread-4353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:32:51.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:32:51.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:32:51.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:32:51.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:32:51.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:32:51.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:32:51.781 [DEBUG] [Thread-4353] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:32:53.572 [DEBUG] [Thread-4355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:32:55.609 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:32:55.610 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:33:08.620 [DEBUG] [Thread-4356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:33:21.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:33:21.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:33:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:33:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 33, 1), 0.32, 97.68, 0.0, 20.79, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:33:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:33:01
2025-12-25T03:33:22.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:33:22.757 [DEBUG] [Thread-4357] [transport.py] [_log()] starting thread (client mode): 0xb6b34070
2025-12-25T03:33:22.758 [DEBUG] [Thread-4357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:33:22.777 [DEBUG] [Thread-4357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:33:22.777 [INFO] [Thread-4357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:33:22.778 [DEBUG] [Thread-4357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:33:22.778 [DEBUG] [Thread-4357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:33:22.778 [DEBUG] [Thread-4357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] client lang: <none>
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] server lang: <none>
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] kex follows: False
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] Compression: none
2025-12-25T03:33:22.779 [DEBUG] [Thread-4357] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:33:22.797 [DEBUG] [Thread-4357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:33:22.798 [DEBUG] [Thread-4357] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:33:22.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:33:22.799 [DEBUG] [Thread-4357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:33:22.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:33:22.801 [DEBUG] [Thread-4357] [transport.py] [_log()] userauth is OK
2025-12-25T03:33:22.801 [DEBUG] [Thread-4357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:33:22.801 [DEBUG] [Thread-4357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:33:22.802 [DEBUG] [Thread-4357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:33:22.802 [DEBUG] [Thread-4357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:33:22.837 [INFO] [Thread-4357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:33:22.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:33:23.412 [DEBUG] [Thread-4357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:33:23.413 [DEBUG] [Thread-4357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:33:23.413 [DEBUG] [Thread-4357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:33:23.453 [DEBUG] [Thread-4357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:33:23.453 [DEBUG] [Thread-4357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:33:23.457 [DEBUG] [Thread-4357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:33:23.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:33:23.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:33:23.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:33:23.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:33:23.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:33:23.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:33:23.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:33:23.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:33:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:33:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.064304 -999.00  +11.20  14.22     95  +10.50 1 3 1 3 1     0    0 0.63 -2.42 ----- 11.2 14.2 160.2 19.7 13.1 -9.4 13.0 -5.3 12.8 -7.0 13.1 -5.7
2025-12-25T03:33:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:33:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:33:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.064304
2025-12-25T03:33:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:33:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:33:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:33:23.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:33:23.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:33:23.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:33:01', tmtdew=0.32, humidity=97.68, cloud=0.0, wind=20.79, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:32:35.866', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:33:23.482 [DEBUG] [Thread-4357] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:33:23.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:33:23.577 [DEBUG] [Thread-4360] [transport.py] [_log()] starting thread (client mode): 0xb95581c0
2025-12-25T03:33:23.577 [DEBUG] [Thread-4360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:33:23.591 [DEBUG] [Thread-4360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:33:23.591 [INFO] [Thread-4360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:33:23.599 [DEBUG] [Thread-4360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:33:23.599 [DEBUG] [Thread-4360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:33:23.599 [DEBUG] [Thread-4360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:33:23.599 [DEBUG] [Thread-4360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:33:23.599 [DEBUG] [Thread-4360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:33:23.599 [DEBUG] [Thread-4360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:33:23.599 [DEBUG] [Thread-4360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] client lang: <none>
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] server lang: <none>
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] kex follows: False
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] Compression: none
2025-12-25T03:33:23.600 [DEBUG] [Thread-4360] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:33:23.651 [DEBUG] [Thread-4362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:33:23.657 [DEBUG] [Thread-4360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:33:23.657 [DEBUG] [Thread-4360] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:33:23.658 [DEBUG] [Thread-4360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:33:23.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:33:23.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:33:23.713 [DEBUG] [Thread-4360] [transport.py] [_log()] userauth is OK
2025-12-25T03:33:23.713 [DEBUG] [Thread-4360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:33:23.714 [DEBUG] [Thread-4360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:33:23.714 [DEBUG] [Thread-4360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:33:23.714 [DEBUG] [Thread-4360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:33:23.733 [INFO] [Thread-4360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:33:23.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:33:23.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:33:24.580 [DEBUG] [Thread-4360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:33:24.581 [DEBUG] [Thread-4360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:33:24.629 [DEBUG] [Thread-4360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:33:24.629 [DEBUG] [Thread-4360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:33:24.641 [DEBUG] [Thread-4360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:33:24.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:33:24.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:33:24.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
2025-12-25T03:33:24.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:33:24.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:33:24.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:33:24.678 [DEBUG] [Thread-4360] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:33:32.781 [DEBUG] [Thread-4363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:33:38.705 [DEBUG] [Thread-4364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:33:53.738 [DEBUG] [Thread-4365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:33:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:33:54.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:33:54.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:33:55.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 33, 33), 0.54, 96.43, 0.0, 19.2, 11.54, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:33:55.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:33:33
2025-12-25T03:33:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:33:55.649 [DEBUG] [Thread-4366] [transport.py] [_log()] starting thread (client mode): 0xb95598d0
2025-12-25T03:33:55.649 [DEBUG] [Thread-4366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:33:55.669 [DEBUG] [Thread-4366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:33:55.669 [INFO] [Thread-4366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:33:55.672 [DEBUG] [Thread-4366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:33:55.672 [DEBUG] [Thread-4366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:33:55.672 [DEBUG] [Thread-4366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] client lang: <none>
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] server lang: <none>
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] kex follows: False
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] Compression: none
2025-12-25T03:33:55.673 [DEBUG] [Thread-4366] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:33:55.690 [DEBUG] [Thread-4366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:33:55.691 [DEBUG] [Thread-4366] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:33:55.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:33:55.692 [DEBUG] [Thread-4366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:33:55.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:33:55.694 [DEBUG] [Thread-4366] [transport.py] [_log()] userauth is OK
2025-12-25T03:33:55.694 [DEBUG] [Thread-4366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:33:55.694 [DEBUG] [Thread-4366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:33:55.694 [DEBUG] [Thread-4366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:33:55.694 [DEBUG] [Thread-4366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:33:55.731 [INFO] [Thread-4366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:33:55.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:33:55.810 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:33:55.812 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:33:56.371 [DEBUG] [Thread-4366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:33:56.372 [DEBUG] [Thread-4366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:33:56.372 [DEBUG] [Thread-4366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:33:56.413 [DEBUG] [Thread-4366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:33:56.414 [DEBUG] [Thread-4366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:33:56.417 [DEBUG] [Thread-4366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:33:56.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:33:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:33:56.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:33:56.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:33:56.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:33:56.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:33:56.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:33:56.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:33:56.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:33:56.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.064651 -999.00  +11.20  13.99     95  +10.50 1 3 1 3 1     0    0 0.63 -2.46 ----- 15.7 14.0 164.0 21.7 13.0 -7.4 12.9 -10.3 12.8 -7.5 13.1 -10.8
2025-12-25T03:33:56.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:33:56.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:33:56.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.064651
2025-12-25T03:33:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:33:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:33:56.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:33:56.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:33:56.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:33:56.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:33:33', tmtdew=0.54, humidity=96.43, cloud=0.0, wind=19.2, temperature=11.54, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:33:05.846', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:33:56.441 [DEBUG] [Thread-4366] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:33:56.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:33:56.535 [DEBUG] [Thread-4369] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-25T03:33:56.536 [DEBUG] [Thread-4369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:33:56.550 [DEBUG] [Thread-4369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:33:56.550 [INFO] [Thread-4369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:33:56.558 [DEBUG] [Thread-4369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:33:56.559 [DEBUG] [Thread-4369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:33:56.559 [DEBUG] [Thread-4369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:33:56.559 [DEBUG] [Thread-4369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:33:56.559 [DEBUG] [Thread-4369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:33:56.559 [DEBUG] [Thread-4369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:33:56.559 [DEBUG] [Thread-4369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:33:56.559 [DEBUG] [Thread-4369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] client lang: <none>
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] server lang: <none>
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] kex follows: False
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] Compression: none
2025-12-25T03:33:56.560 [DEBUG] [Thread-4369] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:33:56.617 [DEBUG] [Thread-4369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:33:56.618 [DEBUG] [Thread-4369] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:33:56.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:33:56.619 [DEBUG] [Thread-4369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:33:56.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:33:56.673 [DEBUG] [Thread-4369] [transport.py] [_log()] userauth is OK
2025-12-25T03:33:56.673 [DEBUG] [Thread-4369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:33:56.673 [DEBUG] [Thread-4369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:33:56.674 [DEBUG] [Thread-4369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:33:56.674 [DEBUG] [Thread-4369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:33:56.695 [INFO] [Thread-4369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:33:56.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:33:56.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:33:57.520 [DEBUG] [Thread-4369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:33:57.520 [DEBUG] [Thread-4369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:33:57.569 [DEBUG] [Thread-4369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:33:57.569 [DEBUG] [Thread-4369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:33:57.578 [DEBUG] [Thread-4369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:33:57.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:33:57.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:33:57.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:33:57.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:33:57.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:33:57.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:33:57.619 [DEBUG] [Thread-4369] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:34:08.774 [DEBUG] [Thread-4371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:34:23.826 [DEBUG] [Thread-4372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:34:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:34:27.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:34:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:34:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 34, 5), 0.26, 97.76, 0.0, 17.89, 11.19, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:34:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:34:05
2025-12-25T03:34:28.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:34:28.663 [DEBUG] [Thread-4373] [transport.py] [_log()] starting thread (client mode): 0xb6b205e0
2025-12-25T03:34:28.663 [DEBUG] [Thread-4373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:34:28.684 [DEBUG] [Thread-4373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:34:28.684 [INFO] [Thread-4373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:34:28.687 [DEBUG] [Thread-4373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:34:28.687 [DEBUG] [Thread-4373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:34:28.687 [DEBUG] [Thread-4373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:34:28.687 [DEBUG] [Thread-4373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:34:28.687 [DEBUG] [Thread-4373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:34:28.687 [DEBUG] [Thread-4373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:34:28.687 [DEBUG] [Thread-4373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] client lang: <none>
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] server lang: <none>
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] kex follows: False
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] Compression: none
2025-12-25T03:34:28.688 [DEBUG] [Thread-4373] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:34:28.702 [DEBUG] [Thread-4373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:34:28.703 [DEBUG] [Thread-4373] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:34:28.703 [DEBUG] [Thread-4373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:34:28.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:34:28.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:34:28.704 [DEBUG] [Thread-4373] [transport.py] [_log()] userauth is OK
2025-12-25T03:34:28.704 [DEBUG] [Thread-4373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:34:28.704 [DEBUG] [Thread-4373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:34:28.704 [DEBUG] [Thread-4373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:34:28.704 [DEBUG] [Thread-4373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:34:28.714 [INFO] [Thread-4373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:34:28.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:34:29.363 [DEBUG] [Thread-4373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:34:29.363 [DEBUG] [Thread-4373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:34:29.363 [DEBUG] [Thread-4373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:34:29.405 [DEBUG] [Thread-4373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:34:29.405 [DEBUG] [Thread-4373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:34:29.407 [DEBUG] [Thread-4373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:34:29.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:34:29.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:34:29.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:34:29.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:34:29.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:34:29.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:34:29.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:34:29.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.065346 -999.00  +11.20  15.18     95  +10.50 1 3 1 3 1     0    0 0.65 -2.07 z...W 12.2 15.2 146.0 17.0 13.1 -8.2 12.9 -5.3 12.8 -6.1 13.0 -5.3
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.065346
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:34:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:34:05', tmtdew=0.26, humidity=97.76, cloud=0.0, wind=17.89, temperature=11.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:34:05.894', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:34:29.427 [DEBUG] [Thread-4373] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:34:29.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:34:29.509 [DEBUG] [Thread-4376] [transport.py] [_log()] starting thread (client mode): 0xb6b22c20
2025-12-25T03:34:29.509 [DEBUG] [Thread-4376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:34:29.524 [DEBUG] [Thread-4376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:34:29.524 [INFO] [Thread-4376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:34:29.533 [DEBUG] [Thread-4376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] client lang: <none>
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] server lang: <none>
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] kex follows: False
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] Compression: none
2025-12-25T03:34:29.534 [DEBUG] [Thread-4376] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:34:29.595 [DEBUG] [Thread-4376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:34:29.595 [DEBUG] [Thread-4376] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:34:29.595 [DEBUG] [Thread-4376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:34:29.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:34:29.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:34:29.653 [DEBUG] [Thread-4376] [transport.py] [_log()] userauth is OK
2025-12-25T03:34:29.653 [DEBUG] [Thread-4376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:34:29.653 [DEBUG] [Thread-4376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:34:29.653 [DEBUG] [Thread-4376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:34:29.653 [DEBUG] [Thread-4376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:34:29.666 [INFO] [Thread-4376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:34:29.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:34:29.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:34:30.506 [DEBUG] [Thread-4376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:34:30.506 [DEBUG] [Thread-4376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:34:30.553 [DEBUG] [Thread-4376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:34:30.553 [DEBUG] [Thread-4376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:34:30.561 [DEBUG] [Thread-4376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:34:30.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:34:30.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:34:30.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:34:30.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:34:30.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:34:30.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:34:30.592 [DEBUG] [Thread-4376] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:34:32.838 [DEBUG] [Thread-4378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:34:38.857 [DEBUG] [Thread-4379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:34:53.907 [DEBUG] [Thread-4380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:34:56.015 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:34:56.017 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:35:00.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:35:00.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:35:00.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:35:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 34, 37), 0.31, 97.76, 0.0, 19.37, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:35:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:34:37
2025-12-25T03:35:01.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:35:01.591 [DEBUG] [Thread-4381] [transport.py] [_log()] starting thread (client mode): 0xb6b152a0
2025-12-25T03:35:01.591 [DEBUG] [Thread-4381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:35:01.613 [DEBUG] [Thread-4381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:35:01.613 [INFO] [Thread-4381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:35:01.616 [DEBUG] [Thread-4381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:35:01.616 [DEBUG] [Thread-4381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] client lang: <none>
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] server lang: <none>
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] kex follows: False
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] Compression: none
2025-12-25T03:35:01.617 [DEBUG] [Thread-4381] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:35:01.636 [DEBUG] [Thread-4381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:35:01.637 [DEBUG] [Thread-4381] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:35:01.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:35:01.638 [DEBUG] [Thread-4381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:35:01.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:35:01.640 [DEBUG] [Thread-4381] [transport.py] [_log()] userauth is OK
2025-12-25T03:35:01.640 [DEBUG] [Thread-4381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:35:01.640 [DEBUG] [Thread-4381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:35:01.640 [DEBUG] [Thread-4381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:35:01.640 [DEBUG] [Thread-4381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:35:01.655 [INFO] [Thread-4381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:35:01.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:35:02.257 [DEBUG] [Thread-4381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:35:02.258 [DEBUG] [Thread-4381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:35:02.258 [DEBUG] [Thread-4381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:35:02.299 [DEBUG] [Thread-4381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:35:02.300 [DEBUG] [Thread-4381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:35:02.302 [DEBUG] [Thread-4381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:35:02.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:35:02.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:35:02.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:35:02.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:35:02.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:35:02.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:35:02.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:35:02.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:35:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:35:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.065693 -999.00  +11.30  15.46     95  +10.60 1 3 1 3 1     0    0 0.64 -1.94 ----- 16.4 15.5 156.2 22.4 13.1 -6.7 12.9 -7.5 12.7 -5.7 13.1 -6.2
2025-12-25T03:35:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:35:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:35:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.065693
2025-12-25T03:35:02.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:35:02.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:35:02.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:35:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:35:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:35:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:34:37', tmtdew=0.31, humidity=97.76, cloud=0.0, wind=19.37, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:34:35.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:35:02.322 [DEBUG] [Thread-4381] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:35:02.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:35:02.418 [DEBUG] [Thread-4384] [transport.py] [_log()] starting thread (client mode): 0xb95f1090
2025-12-25T03:35:02.418 [DEBUG] [Thread-4384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:35:02.432 [DEBUG] [Thread-4384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:35:02.432 [INFO] [Thread-4384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:35:02.440 [DEBUG] [Thread-4384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:35:02.440 [DEBUG] [Thread-4384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:35:02.440 [DEBUG] [Thread-4384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:35:02.440 [DEBUG] [Thread-4384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] client lang: <none>
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] server lang: <none>
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] kex follows: False
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:35:02.441 [DEBUG] [Thread-4384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:35:02.442 [DEBUG] [Thread-4384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:35:02.442 [DEBUG] [Thread-4384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:35:02.442 [DEBUG] [Thread-4384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:35:02.442 [DEBUG] [Thread-4384] [transport.py] [_log()] Compression: none
2025-12-25T03:35:02.442 [DEBUG] [Thread-4384] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:35:02.496 [DEBUG] [Thread-4384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:35:02.496 [DEBUG] [Thread-4384] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:35:02.497 [DEBUG] [Thread-4384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:35:02.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:35:02.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:35:02.553 [DEBUG] [Thread-4384] [transport.py] [_log()] userauth is OK
2025-12-25T03:35:02.553 [DEBUG] [Thread-4384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:35:02.553 [DEBUG] [Thread-4384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:35:02.553 [DEBUG] [Thread-4384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:35:02.553 [DEBUG] [Thread-4384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:35:02.568 [INFO] [Thread-4384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:35:02.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:35:02.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:35:03.380 [DEBUG] [Thread-4384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:35:03.380 [DEBUG] [Thread-4384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:35:03.428 [DEBUG] [Thread-4384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:35:03.428 [DEBUG] [Thread-4384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:35:03.438 [DEBUG] [Thread-4384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:35:03.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:35:03.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:35:03.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:35:03.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:35:03.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:35:03.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:35:03.474 [DEBUG] [Thread-4384] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:35:08.940 [DEBUG] [Thread-4386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:35:23.987 [DEBUG] [Thread-4387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:35:32.916 [DEBUG] [Thread-4388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:35:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:35:33.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:35:33.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:35:34.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 35, 9), 0.3, 97.85, 0.0, 17.77, 11.3, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:35:34.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:35:09
2025-12-25T03:35:34.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:35:34.434 [DEBUG] [Thread-4389] [transport.py] [_log()] starting thread (client mode): 0xb6b21600
2025-12-25T03:35:34.434 [DEBUG] [Thread-4389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:35:34.454 [DEBUG] [Thread-4389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:35:34.454 [INFO] [Thread-4389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:35:34.457 [DEBUG] [Thread-4389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] client lang: <none>
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] server lang: <none>
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] kex follows: False
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] Compression: none
2025-12-25T03:35:34.458 [DEBUG] [Thread-4389] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:35:34.475 [DEBUG] [Thread-4389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:35:34.475 [DEBUG] [Thread-4389] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:35:34.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:35:34.476 [DEBUG] [Thread-4389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:35:34.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:35:34.478 [DEBUG] [Thread-4389] [transport.py] [_log()] userauth is OK
2025-12-25T03:35:34.478 [DEBUG] [Thread-4389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:35:34.479 [DEBUG] [Thread-4389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:35:34.479 [DEBUG] [Thread-4389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:35:34.479 [DEBUG] [Thread-4389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:35:34.503 [INFO] [Thread-4389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:35:34.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:35:35.144 [DEBUG] [Thread-4389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:35:35.144 [DEBUG] [Thread-4389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:35:35.145 [DEBUG] [Thread-4389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:35:35.185 [DEBUG] [Thread-4389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:35:35.185 [DEBUG] [Thread-4389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:35:35.189 [DEBUG] [Thread-4389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:35:35.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:35:35.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:35:35.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:35:35.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:35:35.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:35:35.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:35:35.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:35:35.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:35:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:35:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.066040 -999.00  +11.20  16.83     95  +10.50 1 3 1 3 1     0    0 0.64 -2.07 ..... 15.7 16.8 172.4 21.5 13.0 -6.3 12.9 -10.0 12.7 -6.6 13.1 -9.9
2025-12-25T03:35:35.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:35:35.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:35:35.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.066040
2025-12-25T03:35:35.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:35:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:35:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:35:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:35:35.216 [DEBUG] [Thread-4389] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:35:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:35:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:35:09', tmtdew=0.3, humidity=97.85, cloud=0.0, wind=17.77, temperature=11.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:35:05.856', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:35:35.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:35:35.310 [DEBUG] [Thread-4392] [transport.py] [_log()] starting thread (client mode): 0xb955ab60
2025-12-25T03:35:35.310 [DEBUG] [Thread-4392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:35:35.325 [DEBUG] [Thread-4392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:35:35.325 [INFO] [Thread-4392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] client lang: <none>
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] server lang: <none>
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] kex follows: False
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:35:35.334 [DEBUG] [Thread-4392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:35:35.335 [DEBUG] [Thread-4392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:35:35.335 [DEBUG] [Thread-4392] [transport.py] [_log()] Compression: none
2025-12-25T03:35:35.335 [DEBUG] [Thread-4392] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:35:35.394 [DEBUG] [Thread-4392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:35:35.395 [DEBUG] [Thread-4392] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:35:35.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:35:35.396 [DEBUG] [Thread-4392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:35:35.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:35:35.453 [DEBUG] [Thread-4392] [transport.py] [_log()] userauth is OK
2025-12-25T03:35:35.454 [DEBUG] [Thread-4392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:35:35.454 [DEBUG] [Thread-4392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:35:35.454 [DEBUG] [Thread-4392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:35:35.454 [DEBUG] [Thread-4392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:35:35.476 [INFO] [Thread-4392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:35:35.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:35:35.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:35:36.283 [DEBUG] [Thread-4392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:35:36.283 [DEBUG] [Thread-4392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:35:36.330 [DEBUG] [Thread-4392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:35:36.331 [DEBUG] [Thread-4392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:35:36.339 [DEBUG] [Thread-4392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:35:36.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:35:36.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:35:36.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:35:36.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:35:36.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:35:36.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:35:36.375 [DEBUG] [Thread-4392] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:35:39.024 [DEBUG] [Thread-4394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:35:54.073 [DEBUG] [Thread-4395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:35:56.221 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:35:56.222 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:36:06.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:36:06.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:36:06.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:36:07.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 35, 41), 0.31, 97.76, 0.0, 18.65, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:36:07.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:35:41
2025-12-25T03:36:07.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:36:07.350 [DEBUG] [Thread-4396] [transport.py] [_log()] starting thread (client mode): 0xb6b17a30
2025-12-25T03:36:07.350 [DEBUG] [Thread-4396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:36:07.371 [DEBUG] [Thread-4396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:36:07.371 [INFO] [Thread-4396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] client lang: <none>
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] server lang: <none>
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] kex follows: False
2025-12-25T03:36:07.375 [DEBUG] [Thread-4396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:36:07.376 [DEBUG] [Thread-4396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:36:07.376 [DEBUG] [Thread-4396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:36:07.376 [DEBUG] [Thread-4396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:36:07.376 [DEBUG] [Thread-4396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:36:07.376 [DEBUG] [Thread-4396] [transport.py] [_log()] Compression: none
2025-12-25T03:36:07.376 [DEBUG] [Thread-4396] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:36:07.393 [DEBUG] [Thread-4396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:36:07.394 [DEBUG] [Thread-4396] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:36:07.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:36:07.395 [DEBUG] [Thread-4396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:36:07.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:36:07.397 [DEBUG] [Thread-4396] [transport.py] [_log()] userauth is OK
2025-12-25T03:36:07.397 [DEBUG] [Thread-4396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:36:07.397 [DEBUG] [Thread-4396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:36:07.397 [DEBUG] [Thread-4396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:36:07.398 [DEBUG] [Thread-4396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:36:07.416 [INFO] [Thread-4396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:36:07.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:36:08.074 [DEBUG] [Thread-4396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:36:08.075 [DEBUG] [Thread-4396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:36:08.075 [DEBUG] [Thread-4396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:36:08.116 [DEBUG] [Thread-4396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:36:08.116 [DEBUG] [Thread-4396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:36:08.119 [DEBUG] [Thread-4396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:36:08.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:36:08.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:36:08.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:36:08.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:36:08.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:36:08.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:36:08.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:36:08.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:36:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:36:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.066387 -999.00  +11.20  12.20     95  +10.50 1 3 1 3 1     0    0 0.65 -2.00 ..... 11.5 12.2 159.8 19.7 13.1 -5.8 12.9 -5.2 12.7 -4.7 13.1 -5.2
2025-12-25T03:36:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:36:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:36:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.066387
2025-12-25T03:36:08.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:36:08.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:36:08.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:36:08.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:36:08.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:36:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:35:41', tmtdew=0.31, humidity=97.76, cloud=0.0, wind=18.65, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:35:35.837', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:36:08.147 [DEBUG] [Thread-4396] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:36:08.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:36:08.241 [DEBUG] [Thread-4399] [transport.py] [_log()] starting thread (client mode): 0xb6b23d60
2025-12-25T03:36:08.241 [DEBUG] [Thread-4399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:36:08.255 [DEBUG] [Thread-4399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:36:08.255 [INFO] [Thread-4399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:36:08.262 [DEBUG] [Thread-4399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:36:08.262 [DEBUG] [Thread-4399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:36:08.262 [DEBUG] [Thread-4399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:36:08.262 [DEBUG] [Thread-4399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] client lang: <none>
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] server lang: <none>
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] kex follows: False
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] Compression: none
2025-12-25T03:36:08.263 [DEBUG] [Thread-4399] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:36:08.322 [DEBUG] [Thread-4399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:36:08.322 [DEBUG] [Thread-4399] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:36:08.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:36:08.324 [DEBUG] [Thread-4399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:36:08.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:36:08.378 [DEBUG] [Thread-4399] [transport.py] [_log()] userauth is OK
2025-12-25T03:36:08.378 [DEBUG] [Thread-4399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:36:08.378 [DEBUG] [Thread-4399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:36:08.378 [DEBUG] [Thread-4399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:36:08.378 [DEBUG] [Thread-4399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:36:08.397 [INFO] [Thread-4399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:36:08.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:36:08.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:36:09.109 [DEBUG] [Thread-4401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:36:09.198 [DEBUG] [Thread-4399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:36:09.198 [DEBUG] [Thread-4399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:36:09.246 [DEBUG] [Thread-4399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:36:09.246 [DEBUG] [Thread-4399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:36:09.256 [DEBUG] [Thread-4399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:36:09.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:36:09.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:36:09.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:36:09.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:36:09.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:36:09.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:36:09.298 [DEBUG] [Thread-4399] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:36:24.156 [DEBUG] [Thread-4402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:36:32.977 [DEBUG] [Thread-4403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:36:39.189 [DEBUG] [Thread-4404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:36:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:36:39.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:36:39.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:36:40.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 36, 13), 0.31, 97.76, 0.0, 19.18, 11.19, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:36:40.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:36:13
2025-12-25T03:36:40.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:36:40.285 [DEBUG] [Thread-4405] [transport.py] [_log()] starting thread (client mode): 0xb95f0b50
2025-12-25T03:36:40.286 [DEBUG] [Thread-4405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:36:40.303 [DEBUG] [Thread-4405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:36:40.303 [INFO] [Thread-4405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] client lang: <none>
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] server lang: <none>
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] kex follows: False
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] Compression: none
2025-12-25T03:36:40.307 [DEBUG] [Thread-4405] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:36:40.324 [DEBUG] [Thread-4405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:36:40.325 [DEBUG] [Thread-4405] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:36:40.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:36:40.326 [DEBUG] [Thread-4405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:36:40.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:36:40.328 [DEBUG] [Thread-4405] [transport.py] [_log()] userauth is OK
2025-12-25T03:36:40.328 [DEBUG] [Thread-4405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:36:40.328 [DEBUG] [Thread-4405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:36:40.328 [DEBUG] [Thread-4405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:36:40.328 [DEBUG] [Thread-4405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:36:40.351 [INFO] [Thread-4405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:36:40.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:36:40.917 [DEBUG] [Thread-4405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:36:40.926 [DEBUG] [Thread-4405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:36:40.927 [DEBUG] [Thread-4405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:36:40.958 [DEBUG] [Thread-4405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:36:40.958 [DEBUG] [Thread-4405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:36:40.961 [DEBUG] [Thread-4405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:36:40.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:36:40.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:36:40.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:36:40.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:36:40.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:36:40.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:36:40.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:36:40.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:36:40.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:36:40.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.066735 -999.00  +11.20  17.85     95  +10.50 1 3 1 3 1     0    0 0.64 -2.35 ..... 11.9 17.9 154.4 20.8 13.0 -7.2 12.9 -8.0 12.8 -7.0 13.1 -9.7
2025-12-25T03:36:40.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:36:40.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:36:40.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.066735
2025-12-25T03:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:36:13', tmtdew=0.31, humidity=97.76, cloud=0.0, wind=19.18, temperature=11.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:36:05.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:04:00')
2025-12-25T03:36:40.990 [DEBUG] [Thread-4405] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:36:41.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:36:54.228 [DEBUG] [Thread-4408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:36:56.429 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:36:56.430 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:37:09.276 [DEBUG] [Thread-4409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:37:24.313 [DEBUG] [Thread-4410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:37:33.034 [DEBUG] [Thread-4411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:37:39.350 [DEBUG] [Thread-4412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:37:54.382 [DEBUG] [Thread-4413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:37:56.630 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:37:56.631 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:38:09.419 [DEBUG] [Thread-4414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:38:24.452 [DEBUG] [Thread-4415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:38:33.099 [DEBUG] [Thread-4416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:38:39.482 [DEBUG] [Thread-4417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:38:54.520 [DEBUG] [Thread-4418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:38:56.085 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-25T03:38:56.835 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:38:56.836 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:39:09.554 [DEBUG] [Thread-4419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:39:24.594 [DEBUG] [Thread-4420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:39:26.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:39:26.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:39:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:39:26.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 38, 54), 0.3, 97.83, 0.0, 19.43, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:39:26.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:38:54
2025-12-25T03:39:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:39:27.135 [DEBUG] [Thread-4421] [transport.py] [_log()] starting thread (client mode): 0xb6b48190
2025-12-25T03:39:27.135 [DEBUG] [Thread-4421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:39:27.155 [DEBUG] [Thread-4421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:39:27.156 [INFO] [Thread-4421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] client lang: <none>
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] server lang: <none>
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] kex follows: False
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] Compression: none
2025-12-25T03:39:27.159 [DEBUG] [Thread-4421] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:39:27.177 [DEBUG] [Thread-4421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:39:27.177 [DEBUG] [Thread-4421] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:39:27.177 [DEBUG] [Thread-4421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:39:27.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:39:27.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:39:27.220 [DEBUG] [Thread-4421] [transport.py] [_log()] userauth is OK
2025-12-25T03:39:27.220 [DEBUG] [Thread-4421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:39:27.220 [DEBUG] [Thread-4421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:39:27.220 [DEBUG] [Thread-4421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:39:27.220 [DEBUG] [Thread-4421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:39:27.235 [INFO] [Thread-4421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:39:27.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:39:27.896 [DEBUG] [Thread-4421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:39:27.896 [DEBUG] [Thread-4421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:39:27.896 [DEBUG] [Thread-4421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:39:27.937 [DEBUG] [Thread-4421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:39:27.938 [DEBUG] [Thread-4421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:39:27.939 [DEBUG] [Thread-4421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:39:27.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:39:27.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:39:27.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:39:27.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:39:27.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:39:27.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:39:27.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.068818 -999.00  +11.20  14.39     95  +10.50 1 3 1 3 1     0    0 0.64 -1.83 zn..W 17.8 14.4 150.6 18.1 13.0 -6.7 12.9 -6.6 12.7 -6.9 13.0 -6.5
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.068818
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:39:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:38:54', tmtdew=0.3, humidity=97.83, cloud=0.0, wind=19.43, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:39:05.875', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:39:27.956 [DEBUG] [Thread-4421] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:39:28.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:39:28.040 [DEBUG] [Thread-4424] [transport.py] [_log()] starting thread (client mode): 0xb6b48d00
2025-12-25T03:39:28.040 [DEBUG] [Thread-4424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:39:28.055 [DEBUG] [Thread-4424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:39:28.055 [INFO] [Thread-4424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] client lang: <none>
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] server lang: <none>
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] kex follows: False
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:39:28.062 [DEBUG] [Thread-4424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:39:28.063 [DEBUG] [Thread-4424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:39:28.063 [DEBUG] [Thread-4424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:39:28.063 [DEBUG] [Thread-4424] [transport.py] [_log()] Compression: none
2025-12-25T03:39:28.063 [DEBUG] [Thread-4424] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:39:28.118 [DEBUG] [Thread-4424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:39:28.118 [DEBUG] [Thread-4424] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:39:28.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:39:28.118 [DEBUG] [Thread-4424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:39:28.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:39:28.175 [DEBUG] [Thread-4424] [transport.py] [_log()] userauth is OK
2025-12-25T03:39:28.175 [DEBUG] [Thread-4424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:39:28.175 [DEBUG] [Thread-4424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:39:28.175 [DEBUG] [Thread-4424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:39:28.175 [DEBUG] [Thread-4424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:39:28.193 [INFO] [Thread-4424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:39:28.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:39:28.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:39:29.042 [DEBUG] [Thread-4424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:39:29.043 [DEBUG] [Thread-4424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:39:29.090 [DEBUG] [Thread-4424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:39:29.090 [DEBUG] [Thread-4424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:39:29.099 [DEBUG] [Thread-4424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:39:29.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:39:29.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:39:29.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:39:29.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:39:29.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:39:29.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:39:29.136 [DEBUG] [Thread-4424] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:39:33.172 [DEBUG] [Thread-4426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:39:39.629 [DEBUG] [Thread-4427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:39:54.671 [DEBUG] [Thread-4428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:39:57.038 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:39:57.039 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:39:59.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:39:59.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:39:59.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:39:59.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 39, 26), 0.3, 97.85, 0.0, 19.16, 11.29, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:39:59.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:39:26
2025-12-25T03:40:00.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:40:00.209 [DEBUG] [Thread-4429] [transport.py] [_log()] starting thread (client mode): 0xb6b4bb50
2025-12-25T03:40:00.209 [DEBUG] [Thread-4429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:40:00.228 [DEBUG] [Thread-4429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:40:00.228 [INFO] [Thread-4429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] client lang: <none>
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] server lang: <none>
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] kex follows: False
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] Compression: none
2025-12-25T03:40:00.231 [DEBUG] [Thread-4429] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:40:00.246 [DEBUG] [Thread-4429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:40:00.247 [DEBUG] [Thread-4429] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:40:00.247 [DEBUG] [Thread-4429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:40:00.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:40:00.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:40:00.247 [DEBUG] [Thread-4429] [transport.py] [_log()] userauth is OK
2025-12-25T03:40:00.247 [DEBUG] [Thread-4429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:40:00.247 [DEBUG] [Thread-4429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:40:00.247 [DEBUG] [Thread-4429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:40:00.247 [DEBUG] [Thread-4429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:40:00.262 [INFO] [Thread-4429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:40:00.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:40:00.906 [DEBUG] [Thread-4429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:40:00.906 [DEBUG] [Thread-4429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:40:00.907 [DEBUG] [Thread-4429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:40:00.947 [DEBUG] [Thread-4429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:40:00.948 [DEBUG] [Thread-4429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:40:00.951 [DEBUG] [Thread-4429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:40:00.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:40:00.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:40:00.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:40:00.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:40:00.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:40:00.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:40:00.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:40:00.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:40:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:40:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.069165 -999.00  +11.20  19.14     95  +10.50 1 3 1 3 1     0    0 0.63 -1.80 ----- 21.2 19.1 144.6 24.8 13.0 -8.1 12.9 -8.3 12.7 -7.4 13.0 -8.2
2025-12-25T03:40:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:40:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:40:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.069165
2025-12-25T03:40:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:40:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:40:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:40:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:40:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:40:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:39:26', tmtdew=0.3, humidity=97.85, cloud=0.0, wind=19.16, temperature=11.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:39:35.856', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:40:00.978 [DEBUG] [Thread-4429] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:40:01.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:40:01.073 [DEBUG] [Thread-4432] [transport.py] [_log()] starting thread (client mode): 0xb6b49f60
2025-12-25T03:40:01.073 [DEBUG] [Thread-4432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:40:01.088 [DEBUG] [Thread-4432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:40:01.089 [INFO] [Thread-4432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:40:01.096 [DEBUG] [Thread-4432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:40:01.096 [DEBUG] [Thread-4432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:40:01.096 [DEBUG] [Thread-4432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:40:01.096 [DEBUG] [Thread-4432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] client lang: <none>
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] server lang: <none>
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] kex follows: False
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] Compression: none
2025-12-25T03:40:01.097 [DEBUG] [Thread-4432] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:40:01.156 [DEBUG] [Thread-4432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:40:01.157 [DEBUG] [Thread-4432] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:40:01.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:40:01.158 [DEBUG] [Thread-4432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:40:01.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:40:01.212 [DEBUG] [Thread-4432] [transport.py] [_log()] userauth is OK
2025-12-25T03:40:01.212 [DEBUG] [Thread-4432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:40:01.212 [DEBUG] [Thread-4432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:40:01.212 [DEBUG] [Thread-4432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:40:01.212 [DEBUG] [Thread-4432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:40:01.231 [INFO] [Thread-4432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:40:01.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:40:01.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:40:02.059 [DEBUG] [Thread-4432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:40:02.060 [DEBUG] [Thread-4432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:40:02.108 [DEBUG] [Thread-4432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:40:02.108 [DEBUG] [Thread-4432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:40:02.117 [DEBUG] [Thread-4432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:40:02.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:40: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')
2025-12-25T03:40:02.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:40:02.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:40:02.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:40:02.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:40:02.154 [DEBUG] [Thread-4432] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:40:09.708 [DEBUG] [Thread-4434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:40:24.756 [DEBUG] [Thread-4435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:40:32.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:40:32.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:40:32.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:40:32.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 39, 58), 0.31, 97.78, 0.0, 18.9, 11.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:40:32.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:39:58
2025-12-25T03:40:33.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:40:33.183 [DEBUG] [Thread-4436] [transport.py] [_log()] starting thread (client mode): 0xb6b4b310
2025-12-25T03:40:33.183 [DEBUG] [Thread-4436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:40:33.204 [DEBUG] [Thread-4436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:40:33.204 [INFO] [Thread-4436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] client lang: <none>
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] server lang: <none>
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] kex follows: False
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:40:33.207 [DEBUG] [Thread-4436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:40:33.208 [DEBUG] [Thread-4436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:40:33.208 [DEBUG] [Thread-4436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:40:33.208 [DEBUG] [Thread-4436] [transport.py] [_log()] Compression: none
2025-12-25T03:40:33.208 [DEBUG] [Thread-4436] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:40:33.223 [DEBUG] [Thread-4438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:40:33.225 [DEBUG] [Thread-4436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:40:33.225 [DEBUG] [Thread-4436] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:40:33.225 [DEBUG] [Thread-4436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:40:33.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:40:33.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:40:33.226 [DEBUG] [Thread-4436] [transport.py] [_log()] userauth is OK
2025-12-25T03:40:33.226 [DEBUG] [Thread-4436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:40:33.226 [DEBUG] [Thread-4436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:40:33.226 [DEBUG] [Thread-4436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:40:33.226 [DEBUG] [Thread-4436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:40:33.236 [INFO] [Thread-4436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:40:33.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:40:33.888 [DEBUG] [Thread-4436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:40:33.888 [DEBUG] [Thread-4436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:40:33.888 [DEBUG] [Thread-4436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:40:33.929 [DEBUG] [Thread-4436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:40:33.929 [DEBUG] [Thread-4436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:40:33.933 [DEBUG] [Thread-4436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:40:33.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:40:33.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:40:33.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:40:33.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:40:33.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:40:33.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:40:33.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:40:33.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:40:33.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:40:33.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.069512 -999.00  +11.10  21.81     95  +10.40 1 3 1 3 1     0    0 0.68 -1.22 ----- 21.1 21.8 139.6 25.3 13.0 -9.0 12.9 -8.8 12.7 -6.7 12.9 -7.2
2025-12-25T03:40:33.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:40:33.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:40:33.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.069512
2025-12-25T03:40:33.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:40:33.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:40:33.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:40:33.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:40:33.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:40:33.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:39:58', tmtdew=0.31, humidity=97.78, cloud=0.0, wind=18.9, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:40:05.837', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:40:33.957 [DEBUG] [Thread-4436] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:40:34.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:40:34.050 [DEBUG] [Thread-4440] [transport.py] [_log()] starting thread (client mode): 0xb6b49090
2025-12-25T03:40:34.050 [DEBUG] [Thread-4440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:40:34.068 [DEBUG] [Thread-4440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:40:34.068 [INFO] [Thread-4440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:40:34.075 [DEBUG] [Thread-4440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:40:34.075 [DEBUG] [Thread-4440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:40:34.075 [DEBUG] [Thread-4440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:40:34.075 [DEBUG] [Thread-4440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:40:34.075 [DEBUG] [Thread-4440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] client lang: <none>
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] server lang: <none>
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] kex follows: False
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] Compression: none
2025-12-25T03:40:34.076 [DEBUG] [Thread-4440] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:40:34.136 [DEBUG] [Thread-4440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:40:34.136 [DEBUG] [Thread-4440] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:40:34.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:40:34.138 [DEBUG] [Thread-4440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:40:34.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:40:34.192 [DEBUG] [Thread-4440] [transport.py] [_log()] userauth is OK
2025-12-25T03:40:34.192 [DEBUG] [Thread-4440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:40:34.193 [DEBUG] [Thread-4440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:40:34.193 [DEBUG] [Thread-4440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:40:34.193 [DEBUG] [Thread-4440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:40:34.214 [INFO] [Thread-4440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:40:34.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:40:34.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:40:35.074 [DEBUG] [Thread-4440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:40:35.075 [DEBUG] [Thread-4440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:40:35.122 [DEBUG] [Thread-4440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:40:35.122 [DEBUG] [Thread-4440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:40:35.131 [DEBUG] [Thread-4440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:40:35.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:40:35.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:40:35.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:40:35.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:40:35.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:40:35.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:40:35.167 [DEBUG] [Thread-4440] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:40:39.795 [DEBUG] [Thread-4442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:40:54.839 [DEBUG] [Thread-4443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:40:57.239 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:40:57.240 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:41:05.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:41:05.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:41:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:41:05.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 41, 2), 0.31, 97.76, 0.0, 20.06, 11.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:41:05.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:41:02
2025-12-25T03:41:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:41:06.164 [DEBUG] [Thread-4444] [transport.py] [_log()] starting thread (client mode): 0xb6b23460
2025-12-25T03:41:06.164 [DEBUG] [Thread-4444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:41:06.183 [DEBUG] [Thread-4444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:41:06.184 [INFO] [Thread-4444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:41:06.184 [DEBUG] [Thread-4444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] client lang: <none>
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] server lang: <none>
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] kex follows: False
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] Compression: none
2025-12-25T03:41:06.185 [DEBUG] [Thread-4444] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:41:06.202 [DEBUG] [Thread-4444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:41:06.203 [DEBUG] [Thread-4444] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:41:06.203 [DEBUG] [Thread-4444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:41:06.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:41:06.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:41:06.205 [DEBUG] [Thread-4444] [transport.py] [_log()] userauth is OK
2025-12-25T03:41:06.205 [DEBUG] [Thread-4444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:41:06.205 [DEBUG] [Thread-4444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:41:06.205 [DEBUG] [Thread-4444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:41:06.206 [DEBUG] [Thread-4444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:41:06.224 [INFO] [Thread-4444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:41:06.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:41:06.860 [DEBUG] [Thread-4444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:41:06.861 [DEBUG] [Thread-4444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:41:06.861 [DEBUG] [Thread-4444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:41:06.901 [DEBUG] [Thread-4444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:41:06.901 [DEBUG] [Thread-4444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:41:06.904 [DEBUG] [Thread-4444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:41:06.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:41:06.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:41:06.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:41:06.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:41:06.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:41:06.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:41:06.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:41:06.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:41:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:41:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.069860 -999.00  +11.10  19.67     95  +10.40 1 3 1 3 1     0    0 0.65 -1.24 ....W 18.7 19.7 144.0 22.8 12.9 -6.3 12.8 -8.4 12.7 -6.2 12.9 -8.4
2025-12-25T03:41:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:41:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:41:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.069860
2025-12-25T03:41:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:41:06.934 [DEBUG] [Thread-4444] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:41:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:41:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:41:06.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:41:06.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:41:06.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:41:02', tmtdew=0.31, humidity=97.76, cloud=0.0, wind=20.06, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:40:35.904', atlas_cloud=3, atlas_rain=1, zp_data=[2.53475, nan, 2.89625, nan, nan, 2.680250000000001, nan, nan, nan, nan, nan, nan, nan, 2.3297499999999998, 2.374999999999999, nan, nan, nan, nan, nan, nan, 2.3877499999999987, 2.6202500000000004, nan, nan, nan, nan, nan, nan, 3.0310000000000006, nan, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:41:07.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:41:07.036 [DEBUG] [Thread-4447] [transport.py] [_log()] starting thread (client mode): 0xb6b22a70
2025-12-25T03:41:07.036 [DEBUG] [Thread-4447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:41:07.051 [DEBUG] [Thread-4447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:41:07.051 [INFO] [Thread-4447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:41:07.058 [DEBUG] [Thread-4447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] client lang: <none>
2025-12-25T03:41:07.059 [DEBUG] [Thread-4447] [transport.py] [_log()] server lang: <none>
2025-12-25T03:41:07.060 [DEBUG] [Thread-4447] [transport.py] [_log()] kex follows: False
2025-12-25T03:41:07.060 [DEBUG] [Thread-4447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:41:07.060 [DEBUG] [Thread-4447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:41:07.060 [DEBUG] [Thread-4447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:41:07.060 [DEBUG] [Thread-4447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:41:07.060 [DEBUG] [Thread-4447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:41:07.060 [DEBUG] [Thread-4447] [transport.py] [_log()] Compression: none
2025-12-25T03:41:07.060 [DEBUG] [Thread-4447] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:41:07.117 [DEBUG] [Thread-4447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:41:07.117 [DEBUG] [Thread-4447] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:41:07.118 [DEBUG] [Thread-4447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:41:07.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:41:07.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:41:07.172 [DEBUG] [Thread-4447] [transport.py] [_log()] userauth is OK
2025-12-25T03:41:07.173 [DEBUG] [Thread-4447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:41:07.173 [DEBUG] [Thread-4447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:41:07.173 [DEBUG] [Thread-4447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:41:07.173 [DEBUG] [Thread-4447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:41:07.197 [INFO] [Thread-4447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:41:07.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:41:07.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:41:08.051 [DEBUG] [Thread-4447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:41:08.052 [DEBUG] [Thread-4447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:41:08.099 [DEBUG] [Thread-4447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:41:08.099 [DEBUG] [Thread-4447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:41:08.108 [DEBUG] [Thread-4447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:41:08.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:41:08.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:41:08.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:41:08.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:41:08.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:41:08.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:41:08.144 [DEBUG] [Thread-4447] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:41:09.873 [DEBUG] [Thread-4449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:41:24.926 [DEBUG] [Thread-4450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:41:33.298 [DEBUG] [Thread-4451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:41:38.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:41:38.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:41:38.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:41:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 41, 34), 0.31, 97.8, 0.0, 20.56, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:41:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:41:34
2025-12-25T03:41:39.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:41:39.166 [DEBUG] [Thread-4452] [transport.py] [_log()] starting thread (client mode): 0xb6b22500
2025-12-25T03:41:39.166 [DEBUG] [Thread-4452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:41:39.187 [DEBUG] [Thread-4452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:41:39.188 [INFO] [Thread-4452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] client lang: <none>
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] server lang: <none>
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] kex follows: False
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] Compression: none
2025-12-25T03:41:39.191 [DEBUG] [Thread-4452] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:41:39.205 [DEBUG] [Thread-4452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:41:39.205 [DEBUG] [Thread-4452] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:41:39.206 [DEBUG] [Thread-4452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:41:39.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:41:39.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:41:39.206 [DEBUG] [Thread-4452] [transport.py] [_log()] userauth is OK
2025-12-25T03:41:39.206 [DEBUG] [Thread-4452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:41:39.206 [DEBUG] [Thread-4452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:41:39.206 [DEBUG] [Thread-4452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:41:39.206 [DEBUG] [Thread-4452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:41:39.222 [INFO] [Thread-4452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:41:39.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:41:39.885 [DEBUG] [Thread-4452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:41:39.885 [DEBUG] [Thread-4452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:41:39.885 [DEBUG] [Thread-4452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:41:39.926 [DEBUG] [Thread-4452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:41:39.927 [DEBUG] [Thread-4452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:41:39.929 [DEBUG] [Thread-4452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:41:39.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:41:39.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:41:39.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:41:39.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:41:39.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:41:39.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:41:39.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:41:39.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.070207 -999.00  +11.20  18.50     95  +10.50 1 3 1 3 1     0    0 0.66 -1.45 ----- 18.1 18.5 136.6 21.2 12.9 -6.6 12.8 -5.8 12.7 -5.9 12.9 -6.1
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.070207
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:41:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:41:34', tmtdew=0.31, humidity=97.8, cloud=0.0, wind=20.56, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:41:05.885', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:41:39.951 [DEBUG] [Thread-4452] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:41:39.957 [DEBUG] [Thread-4455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:41:40.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:41:40.039 [DEBUG] [Thread-4456] [transport.py] [_log()] starting thread (client mode): 0xb6b20b20
2025-12-25T03:41:40.039 [DEBUG] [Thread-4456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:41:40.054 [DEBUG] [Thread-4456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:41:40.054 [INFO] [Thread-4456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] client lang: <none>
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] server lang: <none>
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] kex follows: False
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] Compression: none
2025-12-25T03:41:40.062 [DEBUG] [Thread-4456] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:41:40.119 [DEBUG] [Thread-4456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:41:40.119 [DEBUG] [Thread-4456] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:41:40.119 [DEBUG] [Thread-4456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:41:40.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:41:40.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:41:40.176 [DEBUG] [Thread-4456] [transport.py] [_log()] userauth is OK
2025-12-25T03:41:40.176 [DEBUG] [Thread-4456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:41:40.176 [DEBUG] [Thread-4456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:41:40.176 [DEBUG] [Thread-4456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:41:40.176 [DEBUG] [Thread-4456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:41:40.193 [INFO] [Thread-4456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:41:40.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:41:40.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:41:41.009 [DEBUG] [Thread-4456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:41:41.009 [DEBUG] [Thread-4456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:41:41.058 [DEBUG] [Thread-4456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:41:41.058 [DEBUG] [Thread-4456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:41:41.066 [DEBUG] [Thread-4456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:41:41.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:41:41.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')
2025-12-25T03:41:41.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') -> 00000000
2025-12-25T03:41:41.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:41:41.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:41:41.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:41:41.098 [DEBUG] [Thread-4456] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:41:54.998 [DEBUG] [Thread-4458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:41:57.443 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:41:57.445 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:42:10.033 [DEBUG] [Thread-4459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:42:11.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:42:11.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:42:11.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:42:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 42, 6), 0.3, 97.86, 0.0, 20.86, 11.29, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:42:11.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:42:06
2025-12-25T03:42:11.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:42:12.091 [DEBUG] [Thread-4460] [transport.py] [_log()] starting thread (client mode): 0xb6b4bdf0
2025-12-25T03:42:12.091 [DEBUG] [Thread-4460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:42:12.111 [DEBUG] [Thread-4460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:42:12.111 [INFO] [Thread-4460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:42:12.114 [DEBUG] [Thread-4460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:42:12.114 [DEBUG] [Thread-4460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:42:12.114 [DEBUG] [Thread-4460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] client lang: <none>
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] server lang: <none>
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] kex follows: False
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:42:12.115 [DEBUG] [Thread-4460] [transport.py] [_log()] Compression: none
2025-12-25T03:42:12.116 [DEBUG] [Thread-4460] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:42:12.130 [DEBUG] [Thread-4460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:42:12.131 [DEBUG] [Thread-4460] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:42:12.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:42:12.132 [DEBUG] [Thread-4460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:42:12.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:42:12.173 [DEBUG] [Thread-4460] [transport.py] [_log()] userauth is OK
2025-12-25T03:42:12.173 [DEBUG] [Thread-4460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:42:12.174 [DEBUG] [Thread-4460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:42:12.174 [DEBUG] [Thread-4460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:42:12.174 [DEBUG] [Thread-4460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:42:12.200 [INFO] [Thread-4460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:42:12.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:42:12.841 [DEBUG] [Thread-4460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:42:12.842 [DEBUG] [Thread-4460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:42:12.842 [DEBUG] [Thread-4460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:42:12.883 [DEBUG] [Thread-4460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:42:12.883 [DEBUG] [Thread-4460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:42:12.886 [DEBUG] [Thread-4460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:42:12.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:42:12.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:42:12.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:42:12.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:42:12.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:42:12.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:42:12.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:42:12.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:42:12.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:42:12.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.070554 -999.00  +11.20  20.82     95  +10.50 1 3 1 3 1     0    0 0.66 -1.44 ----- 20.1 20.8 145.2 22.9 12.9 -7.3 12.9 -6.4 12.7 -7.3 12.9 -6.6
2025-12-25T03:42:12.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:42:12.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:42:12.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.070554
2025-12-25T03:42:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:42:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:42:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:42:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:42:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:42:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:42:06', tmtdew=0.3, humidity=97.86, cloud=0.0, wind=20.86, temperature=11.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:41:35.866', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:42:12.913 [DEBUG] [Thread-4460] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:42:12.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:42:13.007 [DEBUG] [Thread-4463] [transport.py] [_log()] starting thread (client mode): 0xb6b4b460
2025-12-25T03:42:13.007 [DEBUG] [Thread-4463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:42:13.022 [DEBUG] [Thread-4463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:42:13.022 [INFO] [Thread-4463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:42:13.029 [DEBUG] [Thread-4463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] client lang: <none>
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] server lang: <none>
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] kex follows: False
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] Compression: none
2025-12-25T03:42:13.030 [DEBUG] [Thread-4463] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:42:13.087 [DEBUG] [Thread-4463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:42:13.087 [DEBUG] [Thread-4463] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:42:13.087 [DEBUG] [Thread-4463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:42:13.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:42:13.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:42:13.145 [DEBUG] [Thread-4463] [transport.py] [_log()] userauth is OK
2025-12-25T03:42:13.145 [DEBUG] [Thread-4463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:42:13.145 [DEBUG] [Thread-4463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:42:13.145 [DEBUG] [Thread-4463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:42:13.145 [DEBUG] [Thread-4463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:42:13.164 [INFO] [Thread-4463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:42:13.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:42:13.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:42:14.031 [DEBUG] [Thread-4463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:42:14.031 [DEBUG] [Thread-4463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:42:14.079 [DEBUG] [Thread-4463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:42:14.079 [DEBUG] [Thread-4463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:42:14.088 [DEBUG] [Thread-4463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:42:14.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:42:14.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:42:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:42:14.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:42:14.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:42:14.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:42:14.125 [DEBUG] [Thread-4463] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:42:25.066 [DEBUG] [Thread-4465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:42:33.363 [DEBUG] [Thread-4466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:42:40.127 [DEBUG] [Thread-4467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:42:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:42:44.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:42:44.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:42:44.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 42, 38), 0.3, 97.81, 0.0, 18.72, 11.27, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:42:44.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:42:38
2025-12-25T03:42:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:42:45.114 [DEBUG] [Thread-4468] [transport.py] [_log()] starting thread (client mode): 0xb95f0a30
2025-12-25T03:42:45.114 [DEBUG] [Thread-4468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:42:45.134 [DEBUG] [Thread-4468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:42:45.134 [INFO] [Thread-4468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] client lang: <none>
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] server lang: <none>
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] kex follows: False
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:42:45.138 [DEBUG] [Thread-4468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:42:45.139 [DEBUG] [Thread-4468] [transport.py] [_log()] Compression: none
2025-12-25T03:42:45.139 [DEBUG] [Thread-4468] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:42:45.156 [DEBUG] [Thread-4468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:42:45.156 [DEBUG] [Thread-4468] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:42:45.157 [DEBUG] [Thread-4468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:42:45.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:42:45.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:42:45.159 [DEBUG] [Thread-4468] [transport.py] [_log()] userauth is OK
2025-12-25T03:42:45.159 [DEBUG] [Thread-4468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:42:45.159 [DEBUG] [Thread-4468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:42:45.159 [DEBUG] [Thread-4468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:42:45.159 [DEBUG] [Thread-4468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:42:45.184 [INFO] [Thread-4468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:42:45.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:42:45.791 [DEBUG] [Thread-4468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:42:45.792 [DEBUG] [Thread-4468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:42:45.792 [DEBUG] [Thread-4468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:42:45.832 [DEBUG] [Thread-4468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:42:45.833 [DEBUG] [Thread-4468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:42:45.835 [DEBUG] [Thread-4468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:42:45.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:42:45.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:42:45.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:42:45.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:42:45.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:42:45.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:42:45.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:42:45.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:42:45.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:42:45.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.071248 -999.00  +11.10  17.45     95  +10.50 1 3 1 3 1     0    0 0.64 -1.89 ----- 16.9 17.4 141.4 22.5 12.9 -5.8 12.8 -7.5 12.7 -6.2 12.9 -7.0
2025-12-25T03:42:45.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:42:45.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:42:45.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.071248
2025-12-25T03:42:45.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:42:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:42:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:42:45.859 [DEBUG] [Thread-4468] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:42:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:42:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:42:45.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:42:38', tmtdew=0.3, humidity=97.81, cloud=0.0, wind=18.72, temperature=11.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:42:35.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:42:45.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:42:45.968 [DEBUG] [Thread-4471] [transport.py] [_log()] starting thread (client mode): 0xb95b1e70
2025-12-25T03:42:45.968 [DEBUG] [Thread-4471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:42:45.983 [DEBUG] [Thread-4471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:42:45.983 [INFO] [Thread-4471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:42:45.990 [DEBUG] [Thread-4471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:42:45.990 [DEBUG] [Thread-4471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:42:45.990 [DEBUG] [Thread-4471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:42:45.990 [DEBUG] [Thread-4471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:42:45.990 [DEBUG] [Thread-4471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] client lang: <none>
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] server lang: <none>
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] kex follows: False
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] Compression: none
2025-12-25T03:42:45.991 [DEBUG] [Thread-4471] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:42:46.052 [DEBUG] [Thread-4471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:42:46.052 [DEBUG] [Thread-4471] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:42:46.053 [DEBUG] [Thread-4471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:42:46.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:42:46.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:42:46.108 [DEBUG] [Thread-4471] [transport.py] [_log()] userauth is OK
2025-12-25T03:42:46.108 [DEBUG] [Thread-4471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:42:46.108 [DEBUG] [Thread-4471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:42:46.108 [DEBUG] [Thread-4471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:42:46.109 [DEBUG] [Thread-4471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:42:46.131 [INFO] [Thread-4471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:42:46.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:42:46.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:42:46.952 [DEBUG] [Thread-4471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:42:46.952 [DEBUG] [Thread-4471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:42:47.000 [DEBUG] [Thread-4471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:42:47.000 [DEBUG] [Thread-4471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:42:47.009 [DEBUG] [Thread-4471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:42:47.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:42:47.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:42:47.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:42:47.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:42:47.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:42:47.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:42:47.043 [DEBUG] [Thread-4471] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:42:55.153 [DEBUG] [Thread-4473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:42:57.647 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:42:57.648 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:43:10.192 [DEBUG] [Thread-4474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:43:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:43:17.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:43:17.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
2025-12-25T03:43:17.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 43, 10), 0.3, 97.85, 0.0, 18.63, 11.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:43:17.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:43:10
2025-12-25T03:43:17.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:43:18.029 [DEBUG] [Thread-4475] [transport.py] [_log()] starting thread (client mode): 0xb95b1720
2025-12-25T03:43:18.029 [DEBUG] [Thread-4475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:43:18.044 [DEBUG] [Thread-4475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:43:18.044 [INFO] [Thread-4475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] client lang: <none>
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] server lang: <none>
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] kex follows: False
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] Compression: none
2025-12-25T03:43:18.045 [DEBUG] [Thread-4475] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:43:18.054 [DEBUG] [Thread-4475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:43:18.055 [DEBUG] [Thread-4475] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:43:18.055 [DEBUG] [Thread-4475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:43:18.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:43:18.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:43:18.056 [DEBUG] [Thread-4475] [transport.py] [_log()] userauth is OK
2025-12-25T03:43:18.056 [DEBUG] [Thread-4475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:43:18.056 [DEBUG] [Thread-4475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:43:18.056 [DEBUG] [Thread-4475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:43:18.056 [DEBUG] [Thread-4475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:43:18.077 [INFO] [Thread-4475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:43:18.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:43:18.656 [DEBUG] [Thread-4475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:43:18.657 [DEBUG] [Thread-4475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:43:18.657 [DEBUG] [Thread-4475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:43:18.697 [DEBUG] [Thread-4475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:43:18.697 [DEBUG] [Thread-4475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:43:18.700 [DEBUG] [Thread-4475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:43:18.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:43:18.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:43:18.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:43:18.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:43:18.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:43:18.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:43:18.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:43:18.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:43:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:43:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.071596 -999.00  +11.20  18.24     95  +10.50 1 3 1 3 1     0    0 0.63 -1.72 ----- 20.0 18.2 139.0 22.0 12.9 -7.4 12.9 -5.5 12.7 -6.3 12.9 -6.7
2025-12-25T03:43:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:43:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:43:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.071596
2025-12-25T03:43:18.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:43:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:43:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:43:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:43:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:43:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:43:10', tmtdew=0.3, humidity=97.85, cloud=0.0, wind=18.63, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:43:05.894', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:43:18.729 [DEBUG] [Thread-4475] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:43:18.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:43:18.823 [DEBUG] [Thread-4478] [transport.py] [_log()] starting thread (client mode): 0xb6b23910
2025-12-25T03:43:18.824 [DEBUG] [Thread-4478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:43:18.838 [DEBUG] [Thread-4478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:43:18.838 [INFO] [Thread-4478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:43:18.846 [DEBUG] [Thread-4478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:43:18.846 [DEBUG] [Thread-4478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:43:18.846 [DEBUG] [Thread-4478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:43:18.846 [DEBUG] [Thread-4478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] client lang: <none>
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] server lang: <none>
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] kex follows: False
2025-12-25T03:43:18.847 [DEBUG] [Thread-4478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:43:18.848 [DEBUG] [Thread-4478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:43:18.848 [DEBUG] [Thread-4478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:43:18.848 [DEBUG] [Thread-4478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:43:18.848 [DEBUG] [Thread-4478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:43:18.848 [DEBUG] [Thread-4478] [transport.py] [_log()] Compression: none
2025-12-25T03:43:18.848 [DEBUG] [Thread-4478] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:43:18.906 [DEBUG] [Thread-4478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:43:18.907 [DEBUG] [Thread-4478] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:43:18.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:43:18.909 [DEBUG] [Thread-4478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:43:18.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:43:18.972 [DEBUG] [Thread-4478] [transport.py] [_log()] userauth is OK
2025-12-25T03:43:18.973 [DEBUG] [Thread-4478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:43:18.973 [DEBUG] [Thread-4478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:43:18.973 [DEBUG] [Thread-4478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:43:18.974 [DEBUG] [Thread-4478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:43:18.996 [INFO] [Thread-4478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:43:18.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:43:18.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:43:19.824 [DEBUG] [Thread-4478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:43:19.824 [DEBUG] [Thread-4478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:43:19.871 [DEBUG] [Thread-4478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:43:19.872 [DEBUG] [Thread-4478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:43:19.880 [DEBUG] [Thread-4478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:43:19.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:43:19.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:43:19.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:43:19.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:43:19.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:43:19.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:43:19.919 [DEBUG] [Thread-4478] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:43:25.226 [DEBUG] [Thread-4480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:43:33.431 [DEBUG] [Thread-4481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:43:40.278 [DEBUG] [Thread-4482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:43:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:43:49.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:43:49.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:43:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 43, 42), 0.3, 97.81, 0.0, 17.56, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:43:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:43:42
2025-12-25T03:43:50.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:43:50.906 [DEBUG] [Thread-4483] [transport.py] [_log()] starting thread (client mode): 0xb6b22cb0
2025-12-25T03:43:50.906 [DEBUG] [Thread-4483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:43:50.926 [DEBUG] [Thread-4483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:43:50.926 [INFO] [Thread-4483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] client lang: <none>
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] server lang: <none>
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] kex follows: False
2025-12-25T03:43:50.930 [DEBUG] [Thread-4483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:43:50.931 [DEBUG] [Thread-4483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:43:50.931 [DEBUG] [Thread-4483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:43:50.931 [DEBUG] [Thread-4483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:43:50.931 [DEBUG] [Thread-4483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:43:50.931 [DEBUG] [Thread-4483] [transport.py] [_log()] Compression: none
2025-12-25T03:43:50.931 [DEBUG] [Thread-4483] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:43:50.948 [DEBUG] [Thread-4483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:43:50.949 [DEBUG] [Thread-4483] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:43:50.949 [DEBUG] [Thread-4483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:43:50.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:43:50.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:43:50.951 [DEBUG] [Thread-4483] [transport.py] [_log()] userauth is OK
2025-12-25T03:43:50.951 [DEBUG] [Thread-4483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:43:50.951 [DEBUG] [Thread-4483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:43:50.952 [DEBUG] [Thread-4483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:43:50.952 [DEBUG] [Thread-4483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:43:50.976 [INFO] [Thread-4483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:43:50.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:43:51.555 [DEBUG] [Thread-4483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:43:51.555 [DEBUG] [Thread-4483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:43:51.555 [DEBUG] [Thread-4483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:43:51.596 [DEBUG] [Thread-4483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:43:51.596 [DEBUG] [Thread-4483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:43:51.599 [DEBUG] [Thread-4483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:43:51.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:43:51.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:43:51.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:43:51.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:43:51.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:43:51.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:43:51.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:43:51.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:43:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:43:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.071943 -999.00  +11.10  18.73     95  +10.40 1 3 1 3 1     0    0 0.64 -1.76 ----- 18.7 18.7 140.8 24.2 12.9 -4.9 12.9 -6.5 12.7 -5.5 12.9 -6.3
2025-12-25T03:43:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:43:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:43:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.071943
2025-12-25T03:43:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:43:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:43:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:43:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:43:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:43:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:43:42', tmtdew=0.3, humidity=97.81, cloud=0.0, wind=17.56, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:43:35.875', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:43:51.627 [DEBUG] [Thread-4483] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:43:51.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:43:51.717 [DEBUG] [Thread-4486] [transport.py] [_log()] starting thread (client mode): 0xb6b228c0
2025-12-25T03:43:51.717 [DEBUG] [Thread-4486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:43:51.731 [DEBUG] [Thread-4486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:43:51.731 [INFO] [Thread-4486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:43:51.738 [DEBUG] [Thread-4486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] client lang: <none>
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] server lang: <none>
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] kex follows: False
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] Compression: none
2025-12-25T03:43:51.739 [DEBUG] [Thread-4486] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:43:51.799 [DEBUG] [Thread-4486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:43:51.799 [DEBUG] [Thread-4486] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:43:51.800 [DEBUG] [Thread-4486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:43:51.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:43:51.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:43:51.858 [DEBUG] [Thread-4486] [transport.py] [_log()] userauth is OK
2025-12-25T03:43:51.858 [DEBUG] [Thread-4486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:43:51.858 [DEBUG] [Thread-4486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:43:51.859 [DEBUG] [Thread-4486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:43:51.859 [DEBUG] [Thread-4486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:43:51.881 [INFO] [Thread-4486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:43:51.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:43:51.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:43:52.699 [DEBUG] [Thread-4486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:43:52.700 [DEBUG] [Thread-4486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:43:52.748 [DEBUG] [Thread-4486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:43:52.749 [DEBUG] [Thread-4486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:43:52.758 [DEBUG] [Thread-4486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:43:52.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:43:52.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:43:52.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:43:52.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:43:52.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:43:52.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:43:52.794 [DEBUG] [Thread-4486] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:43:55.313 [DEBUG] [Thread-4488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:43:57.848 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:43:57.850 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:44:10.365 [DEBUG] [Thread-4489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:44:22.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:44:22.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:44:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:44:23.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 44, 15), 0.31, 97.8, 0.0, 18.95, 11.26, 2, 2, 2, 2, 0, 0),)
2025-12-25T03:44:23.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:44:15
2025-12-25T03:44:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:44:23.789 [DEBUG] [Thread-4490] [transport.py] [_log()] starting thread (client mode): 0xb95f3ca0
2025-12-25T03:44:23.789 [DEBUG] [Thread-4490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:44:23.815 [DEBUG] [Thread-4490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:44:23.816 [INFO] [Thread-4490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] client lang: <none>
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] server lang: <none>
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] kex follows: False
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:44:23.818 [DEBUG] [Thread-4490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:44:23.819 [DEBUG] [Thread-4490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:44:23.819 [DEBUG] [Thread-4490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:44:23.819 [DEBUG] [Thread-4490] [transport.py] [_log()] Compression: none
2025-12-25T03:44:23.819 [DEBUG] [Thread-4490] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:44:23.834 [DEBUG] [Thread-4490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:44:23.835 [DEBUG] [Thread-4490] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:44:23.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:44:23.835 [DEBUG] [Thread-4490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:44:23.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:44:23.837 [DEBUG] [Thread-4490] [transport.py] [_log()] userauth is OK
2025-12-25T03:44:23.837 [DEBUG] [Thread-4490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:44:23.837 [DEBUG] [Thread-4490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:44:23.837 [DEBUG] [Thread-4490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:44:23.837 [DEBUG] [Thread-4490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:44:23.859 [INFO] [Thread-4490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:44:23.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:44:24.511 [DEBUG] [Thread-4490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:44:24.511 [DEBUG] [Thread-4490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:44:24.512 [DEBUG] [Thread-4490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:44:24.552 [DEBUG] [Thread-4490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:44:24.552 [DEBUG] [Thread-4490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:44:24.554 [DEBUG] [Thread-4490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:44:24.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:44:24.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:44:24.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:44:24.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:44:24.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:44:24.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:44:24.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:44:24.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:44:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:44:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.072290 -999.00  +11.10  19.20     95  +10.50 1 3 1 3 1     0    0 0.64 -1.78 ----- 15.8 19.2 146.0 20.6 12.9 -4.6 12.8 -4.2 12.7 -4.4 12.9 -4.7
2025-12-25T03:44:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:44:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:44:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.072290
2025-12-25T03:44:24.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:44:24.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:44:24.579 [DEBUG] [Thread-4490] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:44:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:44:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:44:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:44:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:44:15', tmtdew=0.31, humidity=97.8, cloud=0.0, wind=18.95, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:44:05.856', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:44:24.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:44:24.676 [DEBUG] [Thread-4493] [transport.py] [_log()] starting thread (client mode): 0xb95f1240
2025-12-25T03:44:24.676 [DEBUG] [Thread-4493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:44:24.691 [DEBUG] [Thread-4493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:44:24.691 [INFO] [Thread-4493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:44:24.699 [DEBUG] [Thread-4493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:44:24.699 [DEBUG] [Thread-4493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:44:24.699 [DEBUG] [Thread-4493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:44:24.699 [DEBUG] [Thread-4493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:44:24.699 [DEBUG] [Thread-4493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:44:24.699 [DEBUG] [Thread-4493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:44:24.699 [DEBUG] [Thread-4493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:44:24.700 [DEBUG] [Thread-4493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:44:24.700 [DEBUG] [Thread-4493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:44:24.700 [DEBUG] [Thread-4493] [transport.py] [_log()] client lang: <none>
2025-12-25T03:44:24.700 [DEBUG] [Thread-4493] [transport.py] [_log()] server lang: <none>
2025-12-25T03:44:24.700 [DEBUG] [Thread-4493] [transport.py] [_log()] kex follows: False
2025-12-25T03:44:24.700 [DEBUG] [Thread-4493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:44:24.700 [DEBUG] [Thread-4493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:44:24.700 [DEBUG] [Thread-4493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:44:24.701 [DEBUG] [Thread-4493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:44:24.701 [DEBUG] [Thread-4493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:44:24.701 [DEBUG] [Thread-4493] [transport.py] [_log()] Compression: none
2025-12-25T03:44:24.701 [DEBUG] [Thread-4493] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:44:24.762 [DEBUG] [Thread-4493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:44:24.763 [DEBUG] [Thread-4493] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:44:24.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:44:24.765 [DEBUG] [Thread-4493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:44:24.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:44:24.821 [DEBUG] [Thread-4493] [transport.py] [_log()] userauth is OK
2025-12-25T03:44:24.822 [DEBUG] [Thread-4493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:44:24.822 [DEBUG] [Thread-4493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:44:24.822 [DEBUG] [Thread-4493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:44:24.822 [DEBUG] [Thread-4493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:44:24.840 [INFO] [Thread-4493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:44:24.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:44:24.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:44:25.396 [DEBUG] [Thread-4495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:44:25.682 [DEBUG] [Thread-4493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:44:25.683 [DEBUG] [Thread-4493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:44:25.731 [DEBUG] [Thread-4493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:44:25.731 [DEBUG] [Thread-4493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:44:25.740 [DEBUG] [Thread-4493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:44:25.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:44:25.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:44:25.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:44:25.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:44:25.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:44:25.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:44:25.772 [DEBUG] [Thread-4493] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:44:33.489 [DEBUG] [Thread-4496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:44:40.449 [DEBUG] [Thread-4497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:44:55.483 [DEBUG] [Thread-4498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:44:55.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:44:55.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:44:55.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:44:56.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 44, 48), 0.3, 97.85, 0.0, 19.75, 11.24, 2, 2, 2, 2, 0, 0),)
2025-12-25T03:44:56.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:44:48
2025-12-25T03:44:56.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:44:56.788 [DEBUG] [Thread-4499] [transport.py] [_log()] starting thread (client mode): 0xb6b22f80
2025-12-25T03:44:56.788 [DEBUG] [Thread-4499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:44:56.808 [DEBUG] [Thread-4499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:44:56.808 [INFO] [Thread-4499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] client lang: <none>
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] server lang: <none>
2025-12-25T03:44:56.811 [DEBUG] [Thread-4499] [transport.py] [_log()] kex follows: False
2025-12-25T03:44:56.812 [DEBUG] [Thread-4499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:44:56.812 [DEBUG] [Thread-4499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:44:56.812 [DEBUG] [Thread-4499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:44:56.812 [DEBUG] [Thread-4499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:44:56.812 [DEBUG] [Thread-4499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:44:56.812 [DEBUG] [Thread-4499] [transport.py] [_log()] Compression: none
2025-12-25T03:44:56.812 [DEBUG] [Thread-4499] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:44:56.830 [DEBUG] [Thread-4499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:44:56.831 [DEBUG] [Thread-4499] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:44:56.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:44:56.832 [DEBUG] [Thread-4499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:44:56.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:44:56.834 [DEBUG] [Thread-4499] [transport.py] [_log()] userauth is OK
2025-12-25T03:44:56.834 [DEBUG] [Thread-4499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:44:56.834 [DEBUG] [Thread-4499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:44:56.834 [DEBUG] [Thread-4499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:44:56.834 [DEBUG] [Thread-4499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:44:56.857 [INFO] [Thread-4499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:44:56.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:44:57.446 [DEBUG] [Thread-4499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:44:57.447 [DEBUG] [Thread-4499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:44:57.447 [DEBUG] [Thread-4499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:44:57.488 [DEBUG] [Thread-4499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:44:57.488 [DEBUG] [Thread-4499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:44:57.490 [DEBUG] [Thread-4499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:44:57.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:44:57.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:44:57.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:44:57.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:44:57.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:44:57.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:44:57.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:44:57.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:44:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:44:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.072637 -999.00  +11.20  17.15     95  +10.50 1 3 1 3 1     0    0 0.62 -2.07 ----- 16.3 17.1 148.8 21.6 12.9 -4.6 12.9 -5.2 12.7 -4.8 12.9 -5.3
2025-12-25T03:44:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:44:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:44:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.072637
2025-12-25T03:44:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:44:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:44:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:44:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:44:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:44:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:44:48', tmtdew=0.3, humidity=97.85, cloud=0.0, wind=19.75, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:44:35.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:44:57.507 [DEBUG] [Thread-4499] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:44:57.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:44:57.607 [DEBUG] [Thread-4502] [transport.py] [_log()] starting thread (client mode): 0xb95b1f90
2025-12-25T03:44:57.607 [DEBUG] [Thread-4502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:44:57.622 [DEBUG] [Thread-4502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:44:57.622 [INFO] [Thread-4502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:44:57.629 [DEBUG] [Thread-4502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:44:57.629 [DEBUG] [Thread-4502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] client lang: <none>
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] server lang: <none>
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] kex follows: False
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:44:57.630 [DEBUG] [Thread-4502] [transport.py] [_log()] Compression: none
2025-12-25T03:44:57.631 [DEBUG] [Thread-4502] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:44:57.688 [DEBUG] [Thread-4502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:44:57.689 [DEBUG] [Thread-4502] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:44:57.689 [DEBUG] [Thread-4502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:44:57.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:44:57.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:44:57.745 [DEBUG] [Thread-4502] [transport.py] [_log()] userauth is OK
2025-12-25T03:44:57.745 [DEBUG] [Thread-4502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:44:57.746 [DEBUG] [Thread-4502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:44:57.746 [DEBUG] [Thread-4502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:44:57.746 [DEBUG] [Thread-4502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:44:57.768 [INFO] [Thread-4502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:44:57.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:44:57.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:44:58.052 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:44:58.053 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:44:58.626 [DEBUG] [Thread-4502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:44:58.626 [DEBUG] [Thread-4502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:44:58.673 [DEBUG] [Thread-4502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:44:58.674 [DEBUG] [Thread-4502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:44:58.682 [DEBUG] [Thread-4502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:44:58.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:44:58.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:44:58.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:44:58.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:44:58.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:44:58.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:44:58.716 [DEBUG] [Thread-4502] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:45:10.517 [DEBUG] [Thread-4504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:45:25.568 [DEBUG] [Thread-4505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:45:28.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:45:28.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:45:28.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:45:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 45, 20), 0.3, 97.81, 0.0, 20.94, 11.22, 2, 2, 2, 2, 0, 0),)
2025-12-25T03:45:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:45:20
2025-12-25T03:45:29.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:45:29.739 [DEBUG] [Thread-4506] [transport.py] [_log()] starting thread (client mode): 0xb95b0040
2025-12-25T03:45:29.739 [DEBUG] [Thread-4506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:45:29.759 [DEBUG] [Thread-4506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:45:29.759 [INFO] [Thread-4506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:45:29.762 [DEBUG] [Thread-4506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] client lang: <none>
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] server lang: <none>
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] kex follows: False
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] Compression: none
2025-12-25T03:45:29.763 [DEBUG] [Thread-4506] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:45:29.779 [DEBUG] [Thread-4506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:45:29.780 [DEBUG] [Thread-4506] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:45:29.780 [DEBUG] [Thread-4506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:45:29.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:45:29.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:45:29.781 [DEBUG] [Thread-4506] [transport.py] [_log()] userauth is OK
2025-12-25T03:45:29.781 [DEBUG] [Thread-4506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:45:29.781 [DEBUG] [Thread-4506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:45:29.781 [DEBUG] [Thread-4506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:45:29.781 [DEBUG] [Thread-4506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:45:29.791 [INFO] [Thread-4506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:45:29.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:45:30.534 [DEBUG] [Thread-4506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:45:30.534 [DEBUG] [Thread-4506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:45:30.534 [DEBUG] [Thread-4506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:45:30.575 [DEBUG] [Thread-4506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:45:30.575 [DEBUG] [Thread-4506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:45:30.577 [DEBUG] [Thread-4506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:45:30.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:45:30.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:45:30.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:45:30.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:45:30.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:45:30.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:45:30.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.072637 -999.00  +11.20  17.15     95  +10.50 1 3 1 3 1     0    0 0.62 -2.07 ----- 16.3 17.1 148.8 21.6 12.9 -4.6 12.9 -5.2 12.7 -4.8 12.9 -5.3
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.072637
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:45:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:45:20', tmtdew=0.3, humidity=97.81, cloud=0.0, wind=20.94, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:44:35.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:45:30.596 [DEBUG] [Thread-4506] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:45:30.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:45:30.680 [DEBUG] [Thread-4509] [transport.py] [_log()] starting thread (client mode): 0xb95f2740
2025-12-25T03:45:30.680 [DEBUG] [Thread-4509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:45:30.694 [DEBUG] [Thread-4509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:45:30.694 [INFO] [Thread-4509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] client lang: <none>
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] server lang: <none>
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] kex follows: False
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:45:30.702 [DEBUG] [Thread-4509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:45:30.703 [DEBUG] [Thread-4509] [transport.py] [_log()] Compression: none
2025-12-25T03:45:30.703 [DEBUG] [Thread-4509] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:45:30.760 [DEBUG] [Thread-4509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:45:30.760 [DEBUG] [Thread-4509] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:45:30.760 [DEBUG] [Thread-4509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:45:30.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:45:30.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:45:30.817 [DEBUG] [Thread-4509] [transport.py] [_log()] userauth is OK
2025-12-25T03:45:30.817 [DEBUG] [Thread-4509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:45:30.817 [DEBUG] [Thread-4509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:45:30.817 [DEBUG] [Thread-4509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:45:30.817 [DEBUG] [Thread-4509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:45:30.833 [INFO] [Thread-4509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:45:30.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:45:30.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:45:31.689 [DEBUG] [Thread-4509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:45:31.689 [DEBUG] [Thread-4509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:45:31.736 [DEBUG] [Thread-4509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:45:31.736 [DEBUG] [Thread-4509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:45:31.744 [DEBUG] [Thread-4509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:45:31.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:45:31.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')
2025-12-25T03:45:31.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:45:31.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:45:31.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:45:31.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:45:31.775 [DEBUG] [Thread-4509] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:45:33.562 [DEBUG] [Thread-4511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:45:40.602 [DEBUG] [Thread-4512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:45:55.652 [DEBUG] [Thread-4513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:45:58.300 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:45:58.301 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:46:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:46:01.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:46:01.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:46:02.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 45, 52), 0.3, 97.86, 0.0, 21.49, 11.26, 2, 2, 2, 2, 0, 0),)
2025-12-25T03:46:02.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:45:52
2025-12-25T03:46:02.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:46:02.774 [DEBUG] [Thread-4514] [transport.py] [_log()] starting thread (client mode): 0xb95598d0
2025-12-25T03:46:02.774 [DEBUG] [Thread-4514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:46:02.794 [DEBUG] [Thread-4514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:46:02.794 [INFO] [Thread-4514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:46:02.798 [DEBUG] [Thread-4514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:46:02.798 [DEBUG] [Thread-4514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:46:02.798 [DEBUG] [Thread-4514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:46:02.798 [DEBUG] [Thread-4514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:46:02.798 [DEBUG] [Thread-4514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:46:02.798 [DEBUG] [Thread-4514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:46:02.798 [DEBUG] [Thread-4514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:46:02.798 [DEBUG] [Thread-4514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] client lang: <none>
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] server lang: <none>
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] kex follows: False
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] Compression: none
2025-12-25T03:46:02.799 [DEBUG] [Thread-4514] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:46:02.815 [DEBUG] [Thread-4514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:46:02.816 [DEBUG] [Thread-4514] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:46:02.817 [DEBUG] [Thread-4514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:46:02.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:46:02.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:46:02.819 [DEBUG] [Thread-4514] [transport.py] [_log()] userauth is OK
2025-12-25T03:46:02.819 [DEBUG] [Thread-4514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:46:02.819 [DEBUG] [Thread-4514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:46:02.819 [DEBUG] [Thread-4514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:46:02.819 [DEBUG] [Thread-4514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:46:02.845 [INFO] [Thread-4514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:46:02.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:46:03.459 [DEBUG] [Thread-4514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:46:03.460 [DEBUG] [Thread-4514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:46:03.460 [DEBUG] [Thread-4514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:46:03.501 [DEBUG] [Thread-4514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:46:03.501 [DEBUG] [Thread-4514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:46:03.504 [DEBUG] [Thread-4514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:46:03.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:46:03.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:46:03.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:46:03.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:46:03.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:46:03.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:46:03.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:46:03.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:46:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:46:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.072984 -999.00  +11.20  18.19     95  +10.50 1 3 1 3 1     0    0 0.62 -2.14 ----- 16.1 18.2 142.6 20.6 12.9 -5.2 12.8 -4.2 12.7 -4.7 12.9 -4.6
2025-12-25T03:46:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:46:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:46:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.072984
2025-12-25T03:46:03.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:46:03.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:46:03.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:46:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:46:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:46:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:45:52', tmtdew=0.3, humidity=97.86, cloud=0.0, wind=21.49, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:45:05.818', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:46:03.530 [DEBUG] [Thread-4514] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:46:03.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:46:03.624 [DEBUG] [Thread-4517] [transport.py] [_log()] starting thread (client mode): 0xb95f2d40
2025-12-25T03:46:03.624 [DEBUG] [Thread-4517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:46:03.639 [DEBUG] [Thread-4517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:46:03.639 [INFO] [Thread-4517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:46:03.647 [DEBUG] [Thread-4517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:46:03.647 [DEBUG] [Thread-4517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:46:03.647 [DEBUG] [Thread-4517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:46:03.647 [DEBUG] [Thread-4517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:46:03.647 [DEBUG] [Thread-4517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:46:03.647 [DEBUG] [Thread-4517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:46:03.647 [DEBUG] [Thread-4517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:46:03.647 [DEBUG] [Thread-4517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] client lang: <none>
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] server lang: <none>
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] kex follows: False
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] Compression: none
2025-12-25T03:46:03.648 [DEBUG] [Thread-4517] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:46:03.706 [DEBUG] [Thread-4517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:46:03.706 [DEBUG] [Thread-4517] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:46:03.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:46:03.707 [DEBUG] [Thread-4517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:46:03.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:46:03.762 [DEBUG] [Thread-4517] [transport.py] [_log()] userauth is OK
2025-12-25T03:46:03.762 [DEBUG] [Thread-4517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:46:03.762 [DEBUG] [Thread-4517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:46:03.762 [DEBUG] [Thread-4517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:46:03.762 [DEBUG] [Thread-4517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:46:03.780 [INFO] [Thread-4517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:46:03.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:46:03.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:46:04.644 [DEBUG] [Thread-4517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:46:04.644 [DEBUG] [Thread-4517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:46:04.692 [DEBUG] [Thread-4517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:46:04.692 [DEBUG] [Thread-4517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:46:04.702 [DEBUG] [Thread-4517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:46:04.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:46:04.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:46:04.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:46:04.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:46:04.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:46:04.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:46:04.738 [DEBUG] [Thread-4517] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:46:10.684 [DEBUG] [Thread-4519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:46:25.730 [DEBUG] [Thread-4520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:46:33.638 [DEBUG] [Thread-4521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:46:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:46:34.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:46:34.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:46:35.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 46, 24), 0.3, 97.81, 0.0, 20.15, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:46:35.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:46:24
2025-12-25T03:46:35.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:46:35.738 [DEBUG] [Thread-4522] [transport.py] [_log()] starting thread (client mode): 0xb95b1ab0
2025-12-25T03:46:35.738 [DEBUG] [Thread-4522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:46:35.758 [DEBUG] [Thread-4522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:46:35.758 [INFO] [Thread-4522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:46:35.761 [DEBUG] [Thread-4522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] client lang: <none>
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] server lang: <none>
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] kex follows: False
2025-12-25T03:46:35.762 [DEBUG] [Thread-4522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:46:35.763 [DEBUG] [Thread-4522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:46:35.763 [DEBUG] [Thread-4522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:46:35.763 [DEBUG] [Thread-4522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:46:35.763 [DEBUG] [Thread-4522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:46:35.763 [DEBUG] [Thread-4522] [transport.py] [_log()] Compression: none
2025-12-25T03:46:35.763 [DEBUG] [Thread-4522] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:46:35.782 [DEBUG] [Thread-4522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:46:35.782 [DEBUG] [Thread-4522] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:46:35.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:46:35.783 [DEBUG] [Thread-4522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:46:35.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:46:35.785 [DEBUG] [Thread-4522] [transport.py] [_log()] userauth is OK
2025-12-25T03:46:35.786 [DEBUG] [Thread-4522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:46:35.786 [DEBUG] [Thread-4522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:46:35.786 [DEBUG] [Thread-4522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:46:35.786 [DEBUG] [Thread-4522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:46:35.810 [INFO] [Thread-4522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:46:35.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:46:36.617 [DEBUG] [Thread-4522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:46:36.617 [DEBUG] [Thread-4522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:46:36.618 [DEBUG] [Thread-4522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:46:36.658 [DEBUG] [Thread-4522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:46:36.658 [DEBUG] [Thread-4522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:46:36.662 [DEBUG] [Thread-4522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:46:36.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:46:36.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:46:36.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:46:36.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:46:36.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:46:36.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:46:36.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:46:36.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:46:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:46:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.073332 -999.00  +11.20  21.71     95  +10.50 1 3 1 3 1     0    0 0.64 -1.95 ----- 20.4 21.7 141.0 23.8 12.9 -5.1 12.9 -4.7 12.7 -4.8 12.9 -5.4
2025-12-25T03:46:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:46:36.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:46:36.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.073332
2025-12-25T03:46:36.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:46:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:46:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:46:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:46:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:46:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:46:24', tmtdew=0.3, humidity=97.81, cloud=0.0, wind=20.15, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:45:35.885', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:46:36.688 [DEBUG] [Thread-4522] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:46:36.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:46:36.785 [DEBUG] [Thread-4525] [transport.py] [_log()] starting thread (client mode): 0xb6b23160
2025-12-25T03:46:36.785 [DEBUG] [Thread-4525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:46:36.799 [DEBUG] [Thread-4525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:46:36.800 [INFO] [Thread-4525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:46:36.807 [DEBUG] [Thread-4525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:46:36.808 [DEBUG] [Thread-4525] [transport.py] [_log()] client lang: <none>
2025-12-25T03:46:36.809 [DEBUG] [Thread-4525] [transport.py] [_log()] server lang: <none>
2025-12-25T03:46:36.809 [DEBUG] [Thread-4525] [transport.py] [_log()] kex follows: False
2025-12-25T03:46:36.809 [DEBUG] [Thread-4525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:46:36.809 [DEBUG] [Thread-4525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:46:36.809 [DEBUG] [Thread-4525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:46:36.809 [DEBUG] [Thread-4525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:46:36.809 [DEBUG] [Thread-4525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:46:36.810 [DEBUG] [Thread-4525] [transport.py] [_log()] Compression: none
2025-12-25T03:46:36.810 [DEBUG] [Thread-4525] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:46:36.871 [DEBUG] [Thread-4525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:46:36.872 [DEBUG] [Thread-4525] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:46:36.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:46:36.873 [DEBUG] [Thread-4525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:46:36.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:46:36.930 [DEBUG] [Thread-4525] [transport.py] [_log()] userauth is OK
2025-12-25T03:46:36.931 [DEBUG] [Thread-4525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:46:36.931 [DEBUG] [Thread-4525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:46:36.932 [DEBUG] [Thread-4525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:46:36.932 [DEBUG] [Thread-4525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:46:36.951 [INFO] [Thread-4525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:46:36.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:46:36.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:46:37.759 [DEBUG] [Thread-4525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:46:37.759 [DEBUG] [Thread-4525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:46:37.807 [DEBUG] [Thread-4525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:46:37.807 [DEBUG] [Thread-4525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:46:37.816 [DEBUG] [Thread-4525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:46:37.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:46:37.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')
2025-12-25T03:46:37.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
2025-12-25T03:46:37.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:46:37.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:46:37.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:46:37.851 [DEBUG] [Thread-4525] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:46:40.765 [DEBUG] [Thread-4527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:46:55.820 [DEBUG] [Thread-4528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:46:58.506 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:46:58.506 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:47:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:47:07.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:47:07.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:47:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 46, 56), 0.3, 97.86, 0.0, 21.37, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:47:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:46:56
2025-12-25T03:47:08.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:47:08.847 [DEBUG] [Thread-4529] [transport.py] [_log()] starting thread (client mode): 0xb6b28760
2025-12-25T03:47:08.847 [DEBUG] [Thread-4529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:47:08.871 [DEBUG] [Thread-4529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:47:08.871 [INFO] [Thread-4529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:47:08.873 [DEBUG] [Thread-4529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:47:08.873 [DEBUG] [Thread-4529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:47:08.873 [DEBUG] [Thread-4529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:47:08.873 [DEBUG] [Thread-4529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:47:08.873 [DEBUG] [Thread-4529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:47:08.873 [DEBUG] [Thread-4529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:47:08.873 [DEBUG] [Thread-4529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:47:08.873 [DEBUG] [Thread-4529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] client lang: <none>
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] server lang: <none>
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] kex follows: False
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] Compression: none
2025-12-25T03:47:08.874 [DEBUG] [Thread-4529] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:47:08.888 [DEBUG] [Thread-4529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:47:08.889 [DEBUG] [Thread-4529] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:47:08.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:47:08.890 [DEBUG] [Thread-4529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:47:08.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:47:08.892 [DEBUG] [Thread-4529] [transport.py] [_log()] userauth is OK
2025-12-25T03:47:08.892 [DEBUG] [Thread-4529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:47:08.892 [DEBUG] [Thread-4529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:47:08.893 [DEBUG] [Thread-4529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:47:08.893 [DEBUG] [Thread-4529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:47:08.912 [INFO] [Thread-4529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:47:08.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:47:09.560 [DEBUG] [Thread-4529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:47:09.561 [DEBUG] [Thread-4529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:47:09.561 [DEBUG] [Thread-4529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:47:09.602 [DEBUG] [Thread-4529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:47:09.602 [DEBUG] [Thread-4529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:47:09.606 [DEBUG] [Thread-4529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:47:09.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:47:09.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:47:09.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:47:09.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:47:09.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:47:09.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:47:09.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:47:09.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:47:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:47:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.073679 -999.00  +11.10  19.04     95  +10.40 1 3 1 3 1     0    0 0.62 -2.21 ----- 15.9 19.0 165.4 23.5 12.9 -6.2 12.8 -5.1 12.6 -5.4 12.9 -4.7
2025-12-25T03:47:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:47:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:47:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.073679
2025-12-25T03:47:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:47:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:47:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:47:09.633 [DEBUG] [Thread-4529] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:47:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:47:09.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:47:09.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:46:56', tmtdew=0.3, humidity=97.86, cloud=0.0, wind=21.37, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:46:05.866', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:47:09.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:47:09.728 [DEBUG] [Thread-4532] [transport.py] [_log()] starting thread (client mode): 0xb95f32b0
2025-12-25T03:47:09.728 [DEBUG] [Thread-4532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:47:09.743 [DEBUG] [Thread-4532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:47:09.743 [INFO] [Thread-4532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:47:09.751 [DEBUG] [Thread-4532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:47:09.751 [DEBUG] [Thread-4532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:47:09.751 [DEBUG] [Thread-4532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] client lang: <none>
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] server lang: <none>
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] kex follows: False
2025-12-25T03:47:09.752 [DEBUG] [Thread-4532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:47:09.753 [DEBUG] [Thread-4532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:47:09.753 [DEBUG] [Thread-4532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:47:09.753 [DEBUG] [Thread-4532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:47:09.753 [DEBUG] [Thread-4532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:47:09.753 [DEBUG] [Thread-4532] [transport.py] [_log()] Compression: none
2025-12-25T03:47:09.753 [DEBUG] [Thread-4532] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:47:09.812 [DEBUG] [Thread-4532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:47:09.812 [DEBUG] [Thread-4532] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:47:09.813 [DEBUG] [Thread-4532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:47:09.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:47:09.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:47:09.871 [DEBUG] [Thread-4532] [transport.py] [_log()] userauth is OK
2025-12-25T03:47:09.871 [DEBUG] [Thread-4532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:47:09.871 [DEBUG] [Thread-4532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:47:09.871 [DEBUG] [Thread-4532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:47:09.871 [DEBUG] [Thread-4532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:47:09.890 [INFO] [Thread-4532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:47:09.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:47:09.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:47:10.733 [DEBUG] [Thread-4532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:47:10.733 [DEBUG] [Thread-4532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:47:10.781 [DEBUG] [Thread-4532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:47:10.781 [DEBUG] [Thread-4532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:47:10.790 [DEBUG] [Thread-4532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:47:10.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:47:10.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:47:10.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:47:10.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:47:10.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:47:10.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:47:10.825 [DEBUG] [Thread-4532] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:47:10.851 [DEBUG] [Thread-4534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:47:25.904 [DEBUG] [Thread-4535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:47:33.699 [DEBUG] [Thread-4536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:47:40.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:47:40.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:47:40.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:47:40.937 [DEBUG] [Thread-4537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:47:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 47, 28), 0.3, 97.85, 0.0, 20.98, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:47:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:47:28
2025-12-25T03:47:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:47:41.806 [DEBUG] [Thread-4538] [transport.py] [_log()] starting thread (client mode): 0xb95b07f0
2025-12-25T03:47:41.806 [DEBUG] [Thread-4538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:47:41.826 [DEBUG] [Thread-4538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:47:41.826 [INFO] [Thread-4538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] client lang: <none>
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] server lang: <none>
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] kex follows: False
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] Compression: none
2025-12-25T03:47:41.830 [DEBUG] [Thread-4538] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:47:41.847 [DEBUG] [Thread-4538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:47:41.848 [DEBUG] [Thread-4538] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:47:41.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:47:41.849 [DEBUG] [Thread-4538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:47:41.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:47:41.851 [DEBUG] [Thread-4538] [transport.py] [_log()] userauth is OK
2025-12-25T03:47:41.851 [DEBUG] [Thread-4538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:47:41.851 [DEBUG] [Thread-4538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:47:41.851 [DEBUG] [Thread-4538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:47:41.851 [DEBUG] [Thread-4538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:47:41.876 [INFO] [Thread-4538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:47:41.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:47:42.665 [DEBUG] [Thread-4538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:47:42.665 [DEBUG] [Thread-4538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:47:42.665 [DEBUG] [Thread-4538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:47:42.706 [DEBUG] [Thread-4538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:47:42.706 [DEBUG] [Thread-4538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:47:42.710 [DEBUG] [Thread-4538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:47:42.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:47:42.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:47:42.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:47:42.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:47:42.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:47:42.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:47:42.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:47:42.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:47:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:47:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.074373 -999.00  +11.20  12.07     95  +10.60 1 3 1 3 1     0    0 0.61 -2.25 ----- 15.8 12.1 140.0 20.2 12.9 -5.0 12.8 -4.4 12.7 -5.1 12.9 -5.2
2025-12-25T03:47:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:47:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:47:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.074373
2025-12-25T03:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:47:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:47:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:47:28', tmtdew=0.3, humidity=97.85, cloud=0.0, wind=20.98, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:47:05.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:47:42.737 [DEBUG] [Thread-4538] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:47:42.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:47:42.831 [DEBUG] [Thread-4541] [transport.py] [_log()] starting thread (client mode): 0xb6b153c0
2025-12-25T03:47:42.831 [DEBUG] [Thread-4541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:47:42.845 [DEBUG] [Thread-4541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:47:42.846 [INFO] [Thread-4541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:47:42.853 [DEBUG] [Thread-4541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:47:42.854 [DEBUG] [Thread-4541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:47:42.854 [DEBUG] [Thread-4541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:47:42.854 [DEBUG] [Thread-4541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:47:42.854 [DEBUG] [Thread-4541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:47:42.854 [DEBUG] [Thread-4541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:47:42.854 [DEBUG] [Thread-4541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:47:42.854 [DEBUG] [Thread-4541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] client lang: <none>
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] server lang: <none>
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] kex follows: False
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] Compression: none
2025-12-25T03:47:42.855 [DEBUG] [Thread-4541] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:47:42.911 [DEBUG] [Thread-4541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:47:42.911 [DEBUG] [Thread-4541] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:47:42.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:47:42.912 [DEBUG] [Thread-4541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:47:42.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:47:42.967 [DEBUG] [Thread-4541] [transport.py] [_log()] userauth is OK
2025-12-25T03:47:42.967 [DEBUG] [Thread-4541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:47:42.968 [DEBUG] [Thread-4541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:47:42.968 [DEBUG] [Thread-4541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:47:42.968 [DEBUG] [Thread-4541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:47:42.986 [INFO] [Thread-4541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:47:42.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:47:42.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:47:43.811 [DEBUG] [Thread-4541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:47:43.811 [DEBUG] [Thread-4541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:47:43.859 [DEBUG] [Thread-4541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:47:43.859 [DEBUG] [Thread-4541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:47:43.869 [DEBUG] [Thread-4541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:47:43.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:47:43.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:47: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') -> 00000000
2025-12-25T03:47:43.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:47:43.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:47:43.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:47:43.905 [DEBUG] [Thread-4541] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:47:55.969 [DEBUG] [Thread-4543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:47:58.710 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:47:58.711 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:48:11.026 [DEBUG] [Thread-4544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:48:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:48:13.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:48:13.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:48:14.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 47, 28), 0.3, 97.85, 0.0, 20.98, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:48:14.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:47:28
2025-12-25T03:48:14.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:48:14.896 [DEBUG] [Thread-4545] [transport.py] [_log()] starting thread (client mode): 0xb6b49f00
2025-12-25T03:48:14.896 [DEBUG] [Thread-4545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:48:14.911 [DEBUG] [Thread-4545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:48:14.911 [INFO] [Thread-4545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:48:14.914 [DEBUG] [Thread-4545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] client lang: <none>
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] server lang: <none>
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] kex follows: False
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:48:14.915 [DEBUG] [Thread-4545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:48:14.916 [DEBUG] [Thread-4545] [transport.py] [_log()] Compression: none
2025-12-25T03:48:14.916 [DEBUG] [Thread-4545] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:48:14.932 [DEBUG] [Thread-4545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:48:14.933 [DEBUG] [Thread-4545] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:48:14.933 [DEBUG] [Thread-4545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:48:14.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:48:14.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:48:14.935 [DEBUG] [Thread-4545] [transport.py] [_log()] userauth is OK
2025-12-25T03:48:14.936 [DEBUG] [Thread-4545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:48:14.936 [DEBUG] [Thread-4545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:48:14.936 [DEBUG] [Thread-4545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:48:14.936 [DEBUG] [Thread-4545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:48:14.961 [INFO] [Thread-4545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:48:14.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:48:15.603 [DEBUG] [Thread-4545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:48:15.604 [DEBUG] [Thread-4545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:48:15.604 [DEBUG] [Thread-4545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:48:15.645 [DEBUG] [Thread-4545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:48:15.646 [DEBUG] [Thread-4545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:48:15.649 [DEBUG] [Thread-4545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:48:15.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:48:15.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:48:15.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:48:15.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:48:15.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:48:15.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:48:15.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:48:15.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:48:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:48:15.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.074721 -999.00  +11.20  14.85     95  +10.50 1 3 1 3 1     0    0 0.62 -2.28 ----- 17.7 14.8 158.6 20.4 12.9 -4.8 12.8 -4.4 12.7 -4.4 12.9 -5.0
2025-12-25T03:48:15.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:48:15.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:48:15.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.074721
2025-12-25T03:48:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:48:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:48:15.673 [DEBUG] [Thread-4545] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:48:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:48:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:48:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:48:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:47:28', tmtdew=0.3, humidity=97.85, cloud=0.0, wind=20.98, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:47:35.894', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:48:15.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:48:15.771 [DEBUG] [Thread-4548] [transport.py] [_log()] starting thread (client mode): 0xb6b4a8f0
2025-12-25T03:48:15.772 [DEBUG] [Thread-4548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:48:15.786 [DEBUG] [Thread-4548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:48:15.786 [INFO] [Thread-4548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:48:15.793 [DEBUG] [Thread-4548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] client lang: <none>
2025-12-25T03:48:15.794 [DEBUG] [Thread-4548] [transport.py] [_log()] server lang: <none>
2025-12-25T03:48:15.795 [DEBUG] [Thread-4548] [transport.py] [_log()] kex follows: False
2025-12-25T03:48:15.795 [DEBUG] [Thread-4548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:48:15.795 [DEBUG] [Thread-4548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:48:15.795 [DEBUG] [Thread-4548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:48:15.795 [DEBUG] [Thread-4548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:48:15.795 [DEBUG] [Thread-4548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:48:15.795 [DEBUG] [Thread-4548] [transport.py] [_log()] Compression: none
2025-12-25T03:48:15.795 [DEBUG] [Thread-4548] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:48:15.850 [DEBUG] [Thread-4548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:48:15.851 [DEBUG] [Thread-4548] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:48:15.851 [DEBUG] [Thread-4548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:48:15.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:48:15.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:48:15.907 [DEBUG] [Thread-4548] [transport.py] [_log()] userauth is OK
2025-12-25T03:48:15.907 [DEBUG] [Thread-4548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:48:15.907 [DEBUG] [Thread-4548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:48:15.907 [DEBUG] [Thread-4548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:48:15.908 [DEBUG] [Thread-4548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:48:15.926 [INFO] [Thread-4548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:48:15.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:48:15.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:48:16.760 [DEBUG] [Thread-4548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:48:16.760 [DEBUG] [Thread-4548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:48:16.808 [DEBUG] [Thread-4548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:48:16.808 [DEBUG] [Thread-4548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:48:16.817 [DEBUG] [Thread-4548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:48:16.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:48:16.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:48:16.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:48:16.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:48:16.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:48:16.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:48:16.854 [DEBUG] [Thread-4548] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:48:26.061 [DEBUG] [Thread-4550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:48:33.774 [DEBUG] [Thread-4551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:48:41.112 [DEBUG] [Thread-4552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:48:46.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:48:46.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:48:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:48:47.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 48, 32), 0.3, 97.83, 0.0, 19.8, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:48:47.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:48:32
2025-12-25T03:48:47.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:48:47.901 [DEBUG] [Thread-4553] [transport.py] [_log()] starting thread (client mode): 0xb6b15030
2025-12-25T03:48:47.901 [DEBUG] [Thread-4553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:48:47.921 [DEBUG] [Thread-4553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:48:47.922 [INFO] [Thread-4553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] client lang: <none>
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] server lang: <none>
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] kex follows: False
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] Compression: none
2025-12-25T03:48:47.925 [DEBUG] [Thread-4553] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:48:47.941 [DEBUG] [Thread-4553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:48:47.941 [DEBUG] [Thread-4553] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:48:47.941 [DEBUG] [Thread-4553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:48:47.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:48:47.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:48:47.942 [DEBUG] [Thread-4553] [transport.py] [_log()] userauth is OK
2025-12-25T03:48:47.942 [DEBUG] [Thread-4553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:48:47.942 [DEBUG] [Thread-4553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:48:47.942 [DEBUG] [Thread-4553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:48:47.942 [DEBUG] [Thread-4553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:48:47.951 [INFO] [Thread-4553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:48:47.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:48:48.543 [DEBUG] [Thread-4553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:48:48.543 [DEBUG] [Thread-4553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:48:48.544 [DEBUG] [Thread-4553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:48:48.585 [DEBUG] [Thread-4553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:48:48.585 [DEBUG] [Thread-4553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:48:48.587 [DEBUG] [Thread-4553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:48:48.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:48:48.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:48:48.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:48:48.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:48:48.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:48:48.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:48:48.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:48:48.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:48:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:48:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.075068 -999.00  +11.20  16.38     95  +10.50 1 3 1 3 1     0    0 0.64 -2.11 ----- 14.7 16.4 131.2 23.5 12.9 -6.0 12.8 -5.1 12.7 -5.8 12.9 -5.2
2025-12-25T03:48:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:48:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:48:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.075068
2025-12-25T03:48:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:48:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:48:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:48:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:48:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:48:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:48:32', tmtdew=0.3, humidity=97.83, cloud=0.0, wind=19.8, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:48:05.875', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:48:48.606 [DEBUG] [Thread-4553] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:48:48.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:48:48.687 [DEBUG] [Thread-4556] [transport.py] [_log()] starting thread (client mode): 0xb6b2a620
2025-12-25T03:48:48.687 [DEBUG] [Thread-4556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:48:48.702 [DEBUG] [Thread-4556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:48:48.702 [INFO] [Thread-4556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:48:48.709 [DEBUG] [Thread-4556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] client lang: <none>
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] server lang: <none>
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] kex follows: False
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] Compression: none
2025-12-25T03:48:48.710 [DEBUG] [Thread-4556] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:48:48.764 [DEBUG] [Thread-4556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:48:48.764 [DEBUG] [Thread-4556] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:48:48.764 [DEBUG] [Thread-4556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:48:48.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:48:48.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:48:48.830 [DEBUG] [Thread-4556] [transport.py] [_log()] userauth is OK
2025-12-25T03:48:48.830 [DEBUG] [Thread-4556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:48:48.830 [DEBUG] [Thread-4556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:48:48.830 [DEBUG] [Thread-4556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:48:48.830 [DEBUG] [Thread-4556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:48:48.844 [INFO] [Thread-4556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:48:48.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:48:48.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:48:49.687 [DEBUG] [Thread-4556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:48:49.687 [DEBUG] [Thread-4556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:48:49.734 [DEBUG] [Thread-4556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:48:49.734 [DEBUG] [Thread-4556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:48:49.742 [DEBUG] [Thread-4556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:48:49.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:48:49.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')
2025-12-25T03:48:49.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:48:49.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:48:49.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:48:49.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:48:49.773 [DEBUG] [Thread-4556] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:48:56.145 [DEBUG] [Thread-4558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:48:58.913 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:48:58.914 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:49:11.192 [DEBUG] [Thread-4559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:49:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:49:19.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:49:19.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:49:20.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 49, 4), 0.3, 97.86, 0.0, 18.67, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:49:20.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:49:04
2025-12-25T03:49:20.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:49:20.773 [DEBUG] [Thread-4560] [transport.py] [_log()] starting thread (client mode): 0xb6b36080
2025-12-25T03:49:20.773 [DEBUG] [Thread-4560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:49:20.793 [DEBUG] [Thread-4560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:49:20.793 [INFO] [Thread-4560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] client lang: <none>
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] server lang: <none>
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] kex follows: False
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:49:20.796 [DEBUG] [Thread-4560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:49:20.797 [DEBUG] [Thread-4560] [transport.py] [_log()] Compression: none
2025-12-25T03:49:20.797 [DEBUG] [Thread-4560] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:49:20.813 [DEBUG] [Thread-4560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:49:20.814 [DEBUG] [Thread-4560] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:49:20.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:49:20.815 [DEBUG] [Thread-4560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:49:20.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:49:20.817 [DEBUG] [Thread-4560] [transport.py] [_log()] userauth is OK
2025-12-25T03:49:20.817 [DEBUG] [Thread-4560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:49:20.817 [DEBUG] [Thread-4560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:49:20.817 [DEBUG] [Thread-4560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:49:20.817 [DEBUG] [Thread-4560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:49:20.832 [INFO] [Thread-4560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:49:20.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:49:21.495 [DEBUG] [Thread-4560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:49:21.495 [DEBUG] [Thread-4560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:49:21.496 [DEBUG] [Thread-4560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:49:21.536 [DEBUG] [Thread-4560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:49:21.536 [DEBUG] [Thread-4560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:49:21.540 [DEBUG] [Thread-4560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:49:21.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:49:21.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:49:21.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:49:21.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:49:21.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:49:21.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:49:21.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:49:21.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:49:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:49:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.075415 -999.00  +11.20  17.75     95  +10.50 1 3 1 3 1     0    0 0.62 -2.12 ----- 15.6 17.8 156.6 23.1 12.9 -5.1 12.8 -6.0 12.7 -6.1 12.9 -5.6
2025-12-25T03:49:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:49:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:49:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.075415
2025-12-25T03:49:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:49:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:49:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:49:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:49:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:49:21.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:49:04', tmtdew=0.3, humidity=97.86, cloud=0.0, wind=18.67, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:48:35.856', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:49:21.567 [DEBUG] [Thread-4560] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:49:21.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:49:21.661 [DEBUG] [Thread-4563] [transport.py] [_log()] starting thread (client mode): 0xb6b2b340
2025-12-25T03:49:21.661 [DEBUG] [Thread-4563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:49:21.676 [DEBUG] [Thread-4563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:49:21.676 [INFO] [Thread-4563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:49:21.684 [DEBUG] [Thread-4563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:49:21.684 [DEBUG] [Thread-4563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:49:21.684 [DEBUG] [Thread-4563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] client lang: <none>
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] server lang: <none>
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] kex follows: False
2025-12-25T03:49:21.685 [DEBUG] [Thread-4563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:49:21.686 [DEBUG] [Thread-4563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:49:21.686 [DEBUG] [Thread-4563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:49:21.686 [DEBUG] [Thread-4563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:49:21.686 [DEBUG] [Thread-4563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:49:21.686 [DEBUG] [Thread-4563] [transport.py] [_log()] Compression: none
2025-12-25T03:49:21.686 [DEBUG] [Thread-4563] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:49:21.742 [DEBUG] [Thread-4563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:49:21.742 [DEBUG] [Thread-4563] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:49:21.743 [DEBUG] [Thread-4563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:49:21.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:49:21.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:49:21.803 [DEBUG] [Thread-4563] [transport.py] [_log()] userauth is OK
2025-12-25T03:49:21.804 [DEBUG] [Thread-4563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:49:21.804 [DEBUG] [Thread-4563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:49:21.804 [DEBUG] [Thread-4563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:49:21.804 [DEBUG] [Thread-4563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:49:21.822 [INFO] [Thread-4563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:49:21.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:49:21.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:49:22.691 [DEBUG] [Thread-4563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:49:22.691 [DEBUG] [Thread-4563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:49:22.739 [DEBUG] [Thread-4563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:49:22.740 [DEBUG] [Thread-4563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:49:22.749 [DEBUG] [Thread-4563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:49:22.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:49:22.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:49:22.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:49:22.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:49:22.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:49:22.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:49:22.786 [DEBUG] [Thread-4563] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:49:26.227 [DEBUG] [Thread-4565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:49:33.832 [DEBUG] [Thread-4566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:49:41.264 [DEBUG] [Thread-4567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:49:52.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:49:52.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:49:52.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:49:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 49, 36), 0.29, 97.88, 0.0, 19.02, 11.19, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:49:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:49:36
2025-12-25T03:49:53.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:49:53.778 [DEBUG] [Thread-4568] [transport.py] [_log()] starting thread (client mode): 0xb9558370
2025-12-25T03:49:53.778 [DEBUG] [Thread-4568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:49:53.798 [DEBUG] [Thread-4568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:49:53.798 [INFO] [Thread-4568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:49:53.801 [DEBUG] [Thread-4568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:49:53.801 [DEBUG] [Thread-4568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] client lang: <none>
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] server lang: <none>
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] kex follows: False
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] Compression: none
2025-12-25T03:49:53.802 [DEBUG] [Thread-4568] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:49:53.818 [DEBUG] [Thread-4568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:49:53.819 [DEBUG] [Thread-4568] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:49:53.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:49:53.820 [DEBUG] [Thread-4568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:49:53.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:49:53.822 [DEBUG] [Thread-4568] [transport.py] [_log()] userauth is OK
2025-12-25T03:49:53.822 [DEBUG] [Thread-4568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:49:53.822 [DEBUG] [Thread-4568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:49:53.822 [DEBUG] [Thread-4568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:49:53.823 [DEBUG] [Thread-4568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:49:53.838 [INFO] [Thread-4568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:49:53.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:49:54.522 [DEBUG] [Thread-4568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:49:54.522 [DEBUG] [Thread-4568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:49:54.523 [DEBUG] [Thread-4568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:49:54.563 [DEBUG] [Thread-4568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:49:54.563 [DEBUG] [Thread-4568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:49:54.567 [DEBUG] [Thread-4568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:49:54.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:49:54.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:49:54.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:49:54.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:49:54.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:49:54.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:49:54.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:49:54.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:49:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:49:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.075762 -999.00  +11.10  14.78     95  +10.50 1 3 1 3 1     0    0 0.63 -2.19 ----- 14.3 14.8 164.2 24.5 12.9 -5.5 12.8 -4.5 12.6 -5.4 12.9 -5.5
2025-12-25T03:49:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:49:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:49:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.075762
2025-12-25T03:49:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:49:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:49:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:49:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:49:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:49:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:49:36', tmtdew=0.29, humidity=97.88, cloud=0.0, wind=19.02, temperature=11.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:49:05.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:49:54.594 [DEBUG] [Thread-4568] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:49:54.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:49:54.687 [DEBUG] [Thread-4571] [transport.py] [_log()] starting thread (client mode): 0xb6b153c0
2025-12-25T03:49:54.688 [DEBUG] [Thread-4571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:49:54.702 [DEBUG] [Thread-4571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:49:54.702 [INFO] [Thread-4571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:49:54.710 [DEBUG] [Thread-4571] [transport.py] [_log()] client lang: <none>
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] server lang: <none>
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] kex follows: False
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] Compression: none
2025-12-25T03:49:54.711 [DEBUG] [Thread-4571] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:49:54.767 [DEBUG] [Thread-4571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:49:54.768 [DEBUG] [Thread-4571] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:49:54.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:49:54.769 [DEBUG] [Thread-4571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:49:54.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:49:54.824 [DEBUG] [Thread-4571] [transport.py] [_log()] userauth is OK
2025-12-25T03:49:54.824 [DEBUG] [Thread-4571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:49:54.824 [DEBUG] [Thread-4571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:49:54.824 [DEBUG] [Thread-4571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:49:54.825 [DEBUG] [Thread-4571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:49:54.844 [INFO] [Thread-4571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:49:54.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:49:54.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:49:55.679 [DEBUG] [Thread-4571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:49:55.679 [DEBUG] [Thread-4571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:49:55.727 [DEBUG] [Thread-4571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:49:55.728 [DEBUG] [Thread-4571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:49:55.737 [DEBUG] [Thread-4571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:49:55.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:49:55.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:49:55.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:49:55.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:49:55.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:49:55.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:49:55.770 [DEBUG] [Thread-4571] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:49:56.301 [DEBUG] [Thread-4573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:49:59.113 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:49:59.115 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:50:11.348 [DEBUG] [Thread-4574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:50:25.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:50:25.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:50:25.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:50:26.385 [DEBUG] [Thread-4575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:50:26.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 50, 8), 0.3, 97.83, 0.0, 18.76, 11.14, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:50:26.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:50:08
2025-12-25T03:50:26.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:50:26.770 [DEBUG] [Thread-4576] [transport.py] [_log()] starting thread (client mode): 0xb6b370d0
2025-12-25T03:50:26.770 [DEBUG] [Thread-4576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:50:26.790 [DEBUG] [Thread-4576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:50:26.790 [INFO] [Thread-4576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:50:26.793 [DEBUG] [Thread-4576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] client lang: <none>
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] server lang: <none>
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] kex follows: False
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:50:26.794 [DEBUG] [Thread-4576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:50:26.795 [DEBUG] [Thread-4576] [transport.py] [_log()] Compression: none
2025-12-25T03:50:26.795 [DEBUG] [Thread-4576] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:50:26.813 [DEBUG] [Thread-4576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:50:26.814 [DEBUG] [Thread-4576] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:50:26.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:50:26.815 [DEBUG] [Thread-4576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:50:26.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:50:26.817 [DEBUG] [Thread-4576] [transport.py] [_log()] userauth is OK
2025-12-25T03:50:26.817 [DEBUG] [Thread-4576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:50:26.817 [DEBUG] [Thread-4576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:50:26.817 [DEBUG] [Thread-4576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:50:26.817 [DEBUG] [Thread-4576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:50:26.852 [INFO] [Thread-4576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:50:26.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:50:27.534 [DEBUG] [Thread-4576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:50:27.535 [DEBUG] [Thread-4576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:50:27.536 [DEBUG] [Thread-4576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:50:27.576 [DEBUG] [Thread-4576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:50:27.576 [DEBUG] [Thread-4576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:50:27.580 [DEBUG] [Thread-4576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:50:27.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:50:27.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:50:27.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:50:27.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:50:27.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:50:27.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:50:27.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:50:27.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:50:27.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:50:27.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.076109 -999.00  +11.10  15.67     95  +10.50 1 3 1 3 1     0    0 0.59 -2.40 ----- 13.2 15.7 164.4 21.4 12.9 -6.7 12.8 -5.2 12.7 -6.7 12.9 -5.4
2025-12-25T03:50:27.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:50:27.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:50:27.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.076109
2025-12-25T03:50:27.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:50:27.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:50:27.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:50:27.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:50:27.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:50:27.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:50:08', tmtdew=0.3, humidity=97.83, cloud=0.0, wind=18.76, temperature=11.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:49:35.818', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:50:27.605 [DEBUG] [Thread-4576] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:50:27.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:50:27.699 [DEBUG] [Thread-4579] [transport.py] [_log()] starting thread (client mode): 0xb6b35270
2025-12-25T03:50:27.699 [DEBUG] [Thread-4579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:50:27.713 [DEBUG] [Thread-4579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:50:27.713 [INFO] [Thread-4579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:50:27.721 [DEBUG] [Thread-4579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] client lang: <none>
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] server lang: <none>
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] kex follows: False
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] Compression: none
2025-12-25T03:50:27.722 [DEBUG] [Thread-4579] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:50:27.781 [DEBUG] [Thread-4579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:50:27.781 [DEBUG] [Thread-4579] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:50:27.782 [DEBUG] [Thread-4579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:50:27.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:50:27.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:50:27.838 [DEBUG] [Thread-4579] [transport.py] [_log()] userauth is OK
2025-12-25T03:50:27.838 [DEBUG] [Thread-4579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:50:27.839 [DEBUG] [Thread-4579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:50:27.839 [DEBUG] [Thread-4579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:50:27.839 [DEBUG] [Thread-4579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:50:27.863 [INFO] [Thread-4579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:50:27.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:50:27.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:50:28.709 [DEBUG] [Thread-4579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:50:28.709 [DEBUG] [Thread-4579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:50:28.757 [DEBUG] [Thread-4579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:50:28.757 [DEBUG] [Thread-4579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:50:28.766 [DEBUG] [Thread-4579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:50:28.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:50:28.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:50:28.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:50:28.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:50:28.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:50:28.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:50:28.800 [DEBUG] [Thread-4579] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:50:33.914 [DEBUG] [Thread-4581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:50:41.418 [DEBUG] [Thread-4582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:50:56.468 [DEBUG] [Thread-4583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:50:58.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:50:58.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:50:58.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
2025-12-25T03:50:59.319 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:50:59.320 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:50:59.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 50, 40), 0.25, 97.85, 0.0, 18.35, 11.16, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:50:59.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:50:40
2025-12-25T03:50:59.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:50:59.800 [DEBUG] [Thread-4584] [transport.py] [_log()] starting thread (client mode): 0xb6b346a0
2025-12-25T03:50:59.801 [DEBUG] [Thread-4584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:50:59.822 [DEBUG] [Thread-4584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:50:59.823 [INFO] [Thread-4584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:50:59.825 [DEBUG] [Thread-4584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:50:59.825 [DEBUG] [Thread-4584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] client lang: <none>
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] server lang: <none>
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] kex follows: False
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] Compression: none
2025-12-25T03:50:59.826 [DEBUG] [Thread-4584] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:50:59.843 [DEBUG] [Thread-4584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:50:59.844 [DEBUG] [Thread-4584] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:50:59.844 [DEBUG] [Thread-4584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:50:59.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:50:59.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:50:59.847 [DEBUG] [Thread-4584] [transport.py] [_log()] userauth is OK
2025-12-25T03:50:59.847 [DEBUG] [Thread-4584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:50:59.847 [DEBUG] [Thread-4584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:50:59.847 [DEBUG] [Thread-4584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:50:59.847 [DEBUG] [Thread-4584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:50:59.872 [INFO] [Thread-4584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:50:59.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:51:00.529 [DEBUG] [Thread-4584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:51:00.529 [DEBUG] [Thread-4584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:51:00.530 [DEBUG] [Thread-4584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:51:00.570 [DEBUG] [Thread-4584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:51:00.570 [DEBUG] [Thread-4584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:51:00.573 [DEBUG] [Thread-4584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:51:00.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:51:00.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:51:00.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:51:00.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:51:00.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:51:00.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:51:00.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:51:00.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:51:00.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:51:00.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.076456 -999.00  +11.20  11.23     95  +10.50 1 3 1 3 1     0    0 0.60 -2.10 ----- 15.2 11.2 155.1 16.8 12.9 -7.8 12.8 -6.6 12.6 -9.2 12.9 -7.3
2025-12-25T03:51:00.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:51:00.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:51:00.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.076456
2025-12-25T03:51:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:51:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:51:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:51:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:51:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:51:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:50:40', tmtdew=0.25, humidity=97.85, cloud=0.0, wind=18.35, temperature=11.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:50:05.798', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:51:00.595 [DEBUG] [Thread-4584] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:51:00.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:51:00.696 [DEBUG] [Thread-4587] [transport.py] [_log()] starting thread (client mode): 0xb6b16830
2025-12-25T03:51:00.696 [DEBUG] [Thread-4587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:51:00.711 [DEBUG] [Thread-4587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:51:00.711 [INFO] [Thread-4587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:51:00.718 [DEBUG] [Thread-4587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] client lang: <none>
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] server lang: <none>
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] kex follows: False
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:51:00.719 [DEBUG] [Thread-4587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:51:00.720 [DEBUG] [Thread-4587] [transport.py] [_log()] Compression: none
2025-12-25T03:51:00.720 [DEBUG] [Thread-4587] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:51:00.777 [DEBUG] [Thread-4587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:51:00.778 [DEBUG] [Thread-4587] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:51:00.778 [DEBUG] [Thread-4587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:51:00.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:51:00.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:51:00.837 [DEBUG] [Thread-4587] [transport.py] [_log()] userauth is OK
2025-12-25T03:51:00.837 [DEBUG] [Thread-4587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:51:00.837 [DEBUG] [Thread-4587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:51:00.837 [DEBUG] [Thread-4587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:51:00.837 [DEBUG] [Thread-4587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:51:00.856 [INFO] [Thread-4587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:51:00.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:51:00.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:51:01.688 [DEBUG] [Thread-4587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:51:01.689 [DEBUG] [Thread-4587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:51:01.737 [DEBUG] [Thread-4587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:51:01.737 [DEBUG] [Thread-4587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:51:01.746 [DEBUG] [Thread-4587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:51:01.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:51:01.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:51:01.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
2025-12-25T03:51:01.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:51:01.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:51:01.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:51:01.783 [DEBUG] [Thread-4587] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:51:11.508 [DEBUG] [Thread-4589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:51:26.555 [DEBUG] [Thread-4590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:51:31.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:51:31.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:51:31.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:51:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 51, 12), 0.24, 97.88, 0.0, 17.93, 11.17, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:51:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:51:12
2025-12-25T03:51:32.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:51:32.785 [DEBUG] [Thread-4591] [transport.py] [_log()] starting thread (client mode): 0xb6b37760
2025-12-25T03:51:32.785 [DEBUG] [Thread-4591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:51:32.805 [DEBUG] [Thread-4591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:51:32.806 [INFO] [Thread-4591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] client lang: <none>
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] server lang: <none>
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] kex follows: False
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:51:32.809 [DEBUG] [Thread-4591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:51:32.810 [DEBUG] [Thread-4591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:51:32.810 [DEBUG] [Thread-4591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:51:32.810 [DEBUG] [Thread-4591] [transport.py] [_log()] Compression: none
2025-12-25T03:51:32.810 [DEBUG] [Thread-4591] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:51:32.827 [DEBUG] [Thread-4591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:51:32.827 [DEBUG] [Thread-4591] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:51:32.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:51:32.828 [DEBUG] [Thread-4591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:51:32.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:51:32.831 [DEBUG] [Thread-4591] [transport.py] [_log()] userauth is OK
2025-12-25T03:51:32.831 [DEBUG] [Thread-4591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:51:32.831 [DEBUG] [Thread-4591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:51:32.831 [DEBUG] [Thread-4591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:51:32.831 [DEBUG] [Thread-4591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:51:32.867 [INFO] [Thread-4591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:51:32.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:51:33.488 [DEBUG] [Thread-4591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:51:33.488 [DEBUG] [Thread-4591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:51:33.489 [DEBUG] [Thread-4591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:51:33.529 [DEBUG] [Thread-4591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:51:33.529 [DEBUG] [Thread-4591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:51:33.533 [DEBUG] [Thread-4591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:51:33.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:51:33.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:51:33.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:51:33.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:51:33.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:51:33.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:51:33.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:51:33.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.077151 -999.00  +11.20  15.72     95  +10.50 1 3 1 3 1     0    0 0.63 -1.87 ...S. 15.3 15.7 144.2 18.1 12.9 -5.7 12.8 -6.3 12.6 -5.1 12.9 -5.5
2025-12-25T03:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.077151
2025-12-25T03:51:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:51:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:51:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:51:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:51:33.560 [DEBUG] [Thread-4591] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:51:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:51:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:51:12', tmtdew=0.24, humidity=97.88, cloud=0.0, wind=17.93, temperature=11.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:51:05.846', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:51:33.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:51:33.654 [DEBUG] [Thread-4594] [transport.py] [_log()] starting thread (client mode): 0xb6b36e90
2025-12-25T03:51:33.654 [DEBUG] [Thread-4594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:51:33.669 [DEBUG] [Thread-4594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:51:33.669 [INFO] [Thread-4594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] client lang: <none>
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] server lang: <none>
2025-12-25T03:51:33.677 [DEBUG] [Thread-4594] [transport.py] [_log()] kex follows: False
2025-12-25T03:51:33.678 [DEBUG] [Thread-4594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:51:33.678 [DEBUG] [Thread-4594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:51:33.678 [DEBUG] [Thread-4594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:51:33.678 [DEBUG] [Thread-4594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:51:33.678 [DEBUG] [Thread-4594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:51:33.678 [DEBUG] [Thread-4594] [transport.py] [_log()] Compression: none
2025-12-25T03:51:33.678 [DEBUG] [Thread-4594] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:51:33.735 [DEBUG] [Thread-4594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:51:33.735 [DEBUG] [Thread-4594] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:51:33.736 [DEBUG] [Thread-4594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:51:33.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:51:33.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:51:33.791 [DEBUG] [Thread-4594] [transport.py] [_log()] userauth is OK
2025-12-25T03:51:33.792 [DEBUG] [Thread-4594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:51:33.792 [DEBUG] [Thread-4594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:51:33.792 [DEBUG] [Thread-4594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:51:33.792 [DEBUG] [Thread-4594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:51:33.810 [INFO] [Thread-4594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:51:33.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:51:33.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:51:33.991 [DEBUG] [Thread-4596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:51:34.663 [DEBUG] [Thread-4594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:51:34.664 [DEBUG] [Thread-4594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:51:34.711 [DEBUG] [Thread-4594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:51:34.711 [DEBUG] [Thread-4594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:51:34.720 [DEBUG] [Thread-4594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:51:34.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:51:34.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:51:34.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:51:34.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:51:34.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:51:34.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:51:34.757 [DEBUG] [Thread-4594] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:51:41.588 [DEBUG] [Thread-4597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:51:56.639 [DEBUG] [Thread-4598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:51:59.523 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:51:59.524 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:52:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:52:04.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:52:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:52:05.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 51, 44), 0.25, 97.85, 0.0, 17.7, 11.14, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:52:05.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:51:44
2025-12-25T03:52:05.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:52:05.796 [DEBUG] [Thread-4599] [transport.py] [_log()] starting thread (client mode): 0xb6b14ee0
2025-12-25T03:52:05.796 [DEBUG] [Thread-4599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:52:05.816 [DEBUG] [Thread-4599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:52:05.816 [INFO] [Thread-4599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:52:05.819 [DEBUG] [Thread-4599] [transport.py] [_log()] client lang: <none>
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] server lang: <none>
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] kex follows: False
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] Compression: none
2025-12-25T03:52:05.820 [DEBUG] [Thread-4599] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:52:05.829 [DEBUG] [Thread-4599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:52:05.830 [DEBUG] [Thread-4599] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:52:05.830 [DEBUG] [Thread-4599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:52:05.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:52:05.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:52:05.831 [DEBUG] [Thread-4599] [transport.py] [_log()] userauth is OK
2025-12-25T03:52:05.831 [DEBUG] [Thread-4599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:52:05.831 [DEBUG] [Thread-4599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:52:05.831 [DEBUG] [Thread-4599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:52:05.831 [DEBUG] [Thread-4599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:52:05.850 [INFO] [Thread-4599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:52:05.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:52:06.491 [DEBUG] [Thread-4599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:52:06.492 [DEBUG] [Thread-4599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:52:06.492 [DEBUG] [Thread-4599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:52:06.533 [DEBUG] [Thread-4599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:52:06.533 [DEBUG] [Thread-4599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:52:06.536 [DEBUG] [Thread-4599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:52:06.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:52:06.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:52:06.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:52:06.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:52:06.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:52:06.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:52:06.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:52:06.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:52:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:52:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.077498 -999.00  +11.20  13.30     95  +10.50 1 3 1 3 1     0    0 0.63 -1.65 ...S. 14.1 13.3 144.0 17.9 12.9 -7.7 12.8 -5.7 12.7 -6.1 12.9 -6.1
2025-12-25T03:52:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:52:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:52:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.077498
2025-12-25T03:52:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:52:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:52:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:52:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:52:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:52:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:51:44', tmtdew=0.25, humidity=97.85, cloud=0.0, wind=17.7, temperature=11.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:51:35.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:52:06.566 [DEBUG] [Thread-4599] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:52:06.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:52:06.659 [DEBUG] [Thread-4602] [transport.py] [_log()] starting thread (client mode): 0xb6b35060
2025-12-25T03:52:06.659 [DEBUG] [Thread-4602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:52:06.678 [DEBUG] [Thread-4602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:52:06.679 [INFO] [Thread-4602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:52:06.686 [DEBUG] [Thread-4602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:52:06.686 [DEBUG] [Thread-4602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] client lang: <none>
2025-12-25T03:52:06.687 [DEBUG] [Thread-4602] [transport.py] [_log()] server lang: <none>
2025-12-25T03:52:06.688 [DEBUG] [Thread-4602] [transport.py] [_log()] kex follows: False
2025-12-25T03:52:06.688 [DEBUG] [Thread-4602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:52:06.688 [DEBUG] [Thread-4602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:52:06.688 [DEBUG] [Thread-4602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:52:06.688 [DEBUG] [Thread-4602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:52:06.688 [DEBUG] [Thread-4602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:52:06.688 [DEBUG] [Thread-4602] [transport.py] [_log()] Compression: none
2025-12-25T03:52:06.689 [DEBUG] [Thread-4602] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:52:06.749 [DEBUG] [Thread-4602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:52:06.750 [DEBUG] [Thread-4602] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:52:06.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:52:06.752 [DEBUG] [Thread-4602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:52:06.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:52:06.806 [DEBUG] [Thread-4602] [transport.py] [_log()] userauth is OK
2025-12-25T03:52:06.806 [DEBUG] [Thread-4602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:52:06.807 [DEBUG] [Thread-4602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:52:06.807 [DEBUG] [Thread-4602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:52:06.807 [DEBUG] [Thread-4602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:52:06.826 [INFO] [Thread-4602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:52:06.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:52:06.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:52:07.683 [DEBUG] [Thread-4602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:52:07.683 [DEBUG] [Thread-4602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:52:07.731 [DEBUG] [Thread-4602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:52:07.731 [DEBUG] [Thread-4602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:52:07.740 [DEBUG] [Thread-4602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:52:07.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:52:07.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')
2025-12-25T03:52:07.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:52:07.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:52:07.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:52:07.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:52:07.777 [DEBUG] [Thread-4602] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:52:11.671 [DEBUG] [Thread-4604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:52:26.722 [DEBUG] [Thread-4605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:52:34.064 [DEBUG] [Thread-4606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:52:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:52:37.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:52:37.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:52:38.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 52, 16), 0.24, 97.88, 0.0, 18.67, 11.17, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:52:38.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:52:16
2025-12-25T03:52:38.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:52:38.764 [DEBUG] [Thread-4607] [transport.py] [_log()] starting thread (client mode): 0xb6b15d50
2025-12-25T03:52:38.764 [DEBUG] [Thread-4607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:52:38.785 [DEBUG] [Thread-4607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:52:38.785 [INFO] [Thread-4607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:52:38.786 [DEBUG] [Thread-4607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] client lang: <none>
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] server lang: <none>
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] kex follows: False
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] Compression: none
2025-12-25T03:52:38.787 [DEBUG] [Thread-4607] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:52:38.797 [DEBUG] [Thread-4607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:52:38.797 [DEBUG] [Thread-4607] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:52:38.797 [DEBUG] [Thread-4607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:52:38.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:52:38.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:52:38.798 [DEBUG] [Thread-4607] [transport.py] [_log()] userauth is OK
2025-12-25T03:52:38.798 [DEBUG] [Thread-4607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:52:38.798 [DEBUG] [Thread-4607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:52:38.798 [DEBUG] [Thread-4607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:52:38.798 [DEBUG] [Thread-4607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:52:38.814 [INFO] [Thread-4607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:52:38.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:52:39.436 [DEBUG] [Thread-4607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:52:39.436 [DEBUG] [Thread-4607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:52:39.436 [DEBUG] [Thread-4607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:52:39.478 [DEBUG] [Thread-4607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:52:39.478 [DEBUG] [Thread-4607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:52:39.480 [DEBUG] [Thread-4607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:52:39.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:52:39.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:52:39.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:52:39.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:52:39.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:52:39.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:52:39.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.077846 -999.00  +11.20  17.14     95  +10.50 1 3 1 3 1     0    0 0.64 -1.46 ----- 18.7 17.1 143.0 20.5 12.9 -10.3 12.8 -10.8 12.6 -9.7 12.9 -11.4
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.077846
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:52:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:52:16', tmtdew=0.24, humidity=97.88, cloud=0.0, wind=18.67, temperature=11.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:52:05.894', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:52:39.501 [DEBUG] [Thread-4607] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:52:39.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:52:39.584 [DEBUG] [Thread-4610] [transport.py] [_log()] starting thread (client mode): 0xb6b346d0
2025-12-25T03:52:39.584 [DEBUG] [Thread-4610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:52:39.599 [DEBUG] [Thread-4610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:52:39.599 [INFO] [Thread-4610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:52:39.606 [DEBUG] [Thread-4610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:52:39.606 [DEBUG] [Thread-4610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:52:39.606 [DEBUG] [Thread-4610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:52:39.606 [DEBUG] [Thread-4610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:52:39.606 [DEBUG] [Thread-4610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] client lang: <none>
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] server lang: <none>
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] kex follows: False
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] Compression: none
2025-12-25T03:52:39.607 [DEBUG] [Thread-4610] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:52:39.663 [DEBUG] [Thread-4610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:52:39.663 [DEBUG] [Thread-4610] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:52:39.663 [DEBUG] [Thread-4610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:52:39.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:52:39.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:52:39.720 [DEBUG] [Thread-4610] [transport.py] [_log()] userauth is OK
2025-12-25T03:52:39.720 [DEBUG] [Thread-4610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:52:39.720 [DEBUG] [Thread-4610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:52:39.720 [DEBUG] [Thread-4610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:52:39.720 [DEBUG] [Thread-4610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:52:39.734 [INFO] [Thread-4610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:52:39.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:52:39.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:52:40.575 [DEBUG] [Thread-4610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:52:40.575 [DEBUG] [Thread-4610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:52:40.622 [DEBUG] [Thread-4610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:52:40.622 [DEBUG] [Thread-4610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:52:40.631 [DEBUG] [Thread-4610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:52:40.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:52:40.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:52:40.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:52:40.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:52:40.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:52:40.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:52:40.662 [DEBUG] [Thread-4610] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:52:41.758 [DEBUG] [Thread-4612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:52:56.796 [DEBUG] [Thread-4613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:52:59.724 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:52:59.725 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:53:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:53:10.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:53:10.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
2025-12-25T03:53:11.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 52, 48), 0.29, 97.88, 0.0, 19.18, 11.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:53:11.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:52:48
2025-12-25T03:53:11.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:53:11.656 [DEBUG] [Thread-4614] [transport.py] [_log()] starting thread (client mode): 0xb6b17190
2025-12-25T03:53:11.656 [DEBUG] [Thread-4614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:53:11.676 [DEBUG] [Thread-4614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:53:11.677 [INFO] [Thread-4614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:53:11.680 [DEBUG] [Thread-4614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:53:11.680 [DEBUG] [Thread-4614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] client lang: <none>
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] server lang: <none>
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] kex follows: False
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:53:11.681 [DEBUG] [Thread-4614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:53:11.682 [DEBUG] [Thread-4614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:53:11.682 [DEBUG] [Thread-4614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:53:11.682 [DEBUG] [Thread-4614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:53:11.682 [DEBUG] [Thread-4614] [transport.py] [_log()] Compression: none
2025-12-25T03:53:11.682 [DEBUG] [Thread-4614] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:53:11.700 [DEBUG] [Thread-4614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:53:11.701 [DEBUG] [Thread-4614] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:53:11.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:53:11.702 [DEBUG] [Thread-4614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:53:11.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:53:11.704 [DEBUG] [Thread-4614] [transport.py] [_log()] userauth is OK
2025-12-25T03:53:11.704 [DEBUG] [Thread-4614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:53:11.704 [DEBUG] [Thread-4614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:53:11.705 [DEBUG] [Thread-4614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:53:11.705 [DEBUG] [Thread-4614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:53:11.729 [INFO] [Thread-4614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:53:11.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:53:11.837 [DEBUG] [Thread-4616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:53:12.389 [DEBUG] [Thread-4614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:53:12.390 [DEBUG] [Thread-4614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:53:12.390 [DEBUG] [Thread-4614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:53:12.431 [DEBUG] [Thread-4614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:53:12.431 [DEBUG] [Thread-4614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:53:12.435 [DEBUG] [Thread-4614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:53:12.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:53:12.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:53:12.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:53:12.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:53:12.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:53:12.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:53:12.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:53:12.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:53:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:53:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.078193 -999.00  +11.10  20.68     95  +10.40 1 3 1 3 1     0    0 0.64 -1.45 ----- 16.9 20.7 134.4 23.8 12.9 -8.2 12.8 -9.0 12.6 -6.9 12.9 -8.5
2025-12-25T03:53:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:53:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:53:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.078193
2025-12-25T03:53:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:53:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:53:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:53:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:53:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:53:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:52:48', tmtdew=0.29, humidity=97.88, cloud=0.0, wind=19.18, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:52:35.875', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:53:12.464 [DEBUG] [Thread-4614] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:53:12.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:53:12.557 [DEBUG] [Thread-4618] [transport.py] [_log()] starting thread (client mode): 0xb6b37eb0
2025-12-25T03:53:12.557 [DEBUG] [Thread-4618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:53:12.575 [DEBUG] [Thread-4618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:53:12.575 [INFO] [Thread-4618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:53:12.584 [DEBUG] [Thread-4618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] client lang: <none>
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] server lang: <none>
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] kex follows: False
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:53:12.585 [DEBUG] [Thread-4618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:53:12.586 [DEBUG] [Thread-4618] [transport.py] [_log()] Compression: none
2025-12-25T03:53:12.586 [DEBUG] [Thread-4618] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:53:12.644 [DEBUG] [Thread-4618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:53:12.644 [DEBUG] [Thread-4618] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:53:12.645 [DEBUG] [Thread-4618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:53:12.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:53:12.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:53:12.703 [DEBUG] [Thread-4618] [transport.py] [_log()] userauth is OK
2025-12-25T03:53:12.704 [DEBUG] [Thread-4618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:53:12.704 [DEBUG] [Thread-4618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:53:12.704 [DEBUG] [Thread-4618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:53:12.704 [DEBUG] [Thread-4618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:53:12.722 [INFO] [Thread-4618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:53:12.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:53:12.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:53:13.563 [DEBUG] [Thread-4618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:53:13.563 [DEBUG] [Thread-4618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:53:13.611 [DEBUG] [Thread-4618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:53:13.611 [DEBUG] [Thread-4618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:53:13.621 [DEBUG] [Thread-4618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:53:13.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:53:13.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:53:13.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:53:13.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:53:13.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:53:13.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:53:13.659 [DEBUG] [Thread-4618] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:53:26.868 [DEBUG] [Thread-4620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:53:34.147 [DEBUG] [Thread-4621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:53:41.920 [DEBUG] [Thread-4622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:53:43.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:53:43.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:53:43.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
2025-12-25T03:53:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 53, 20), 0.3, 97.86, 0.0, 19.69, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:53:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:53:20
2025-12-25T03:53:44.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:53:44.653 [DEBUG] [Thread-4623] [transport.py] [_log()] starting thread (client mode): 0xb6b29810
2025-12-25T03:53:44.653 [DEBUG] [Thread-4623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:53:44.676 [DEBUG] [Thread-4623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:53:44.676 [INFO] [Thread-4623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:53:44.680 [DEBUG] [Thread-4623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] client lang: <none>
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] server lang: <none>
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] kex follows: False
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] Compression: none
2025-12-25T03:53:44.681 [DEBUG] [Thread-4623] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:53:44.691 [DEBUG] [Thread-4623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:53:44.692 [DEBUG] [Thread-4623] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:53:44.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:53:44.693 [DEBUG] [Thread-4623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:53:44.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:53:44.695 [DEBUG] [Thread-4623] [transport.py] [_log()] userauth is OK
2025-12-25T03:53:44.695 [DEBUG] [Thread-4623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:53:44.695 [DEBUG] [Thread-4623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:53:44.695 [DEBUG] [Thread-4623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:53:44.696 [DEBUG] [Thread-4623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:53:44.720 [INFO] [Thread-4623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:53:44.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:53:45.380 [DEBUG] [Thread-4623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:53:45.380 [DEBUG] [Thread-4623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:53:45.381 [DEBUG] [Thread-4623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:53:45.421 [DEBUG] [Thread-4623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:53:45.421 [DEBUG] [Thread-4623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:53:45.424 [DEBUG] [Thread-4623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:53:45.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:53:45.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:53:45.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:53:45.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:53:45.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:53:45.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:53:45.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:53:45.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:53:45.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:53:45.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.078540 -999.00  +11.10  15.49     95  +10.40 1 3 1 3 1     0    0 0.63 -1.57 ----- 20.4 15.5 149.0 24.2 12.9 -6.4 12.8 -6.9 12.6 -6.9 12.9 -8.1
2025-12-25T03:53:45.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:53:45.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:53:45.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.078540
2025-12-25T03:53:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:53:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:53:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:53:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:53:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:53:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:53:20', tmtdew=0.3, humidity=97.86, cloud=0.0, wind=19.69, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:53:05.856', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:53:45.448 [DEBUG] [Thread-4623] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:53:45.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:53:45.543 [DEBUG] [Thread-4626] [transport.py] [_log()] starting thread (client mode): 0xb95580d0
2025-12-25T03:53:45.543 [DEBUG] [Thread-4626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:53:45.558 [DEBUG] [Thread-4626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:53:45.558 [INFO] [Thread-4626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:53:45.565 [DEBUG] [Thread-4626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] client lang: <none>
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] server lang: <none>
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] kex follows: False
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:53:45.566 [DEBUG] [Thread-4626] [transport.py] [_log()] Compression: none
2025-12-25T03:53:45.567 [DEBUG] [Thread-4626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:53:45.621 [DEBUG] [Thread-4626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:53:45.622 [DEBUG] [Thread-4626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:53:45.622 [DEBUG] [Thread-4626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:53:45.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:53:45.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:53:45.679 [DEBUG] [Thread-4626] [transport.py] [_log()] userauth is OK
2025-12-25T03:53:45.679 [DEBUG] [Thread-4626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:53:45.679 [DEBUG] [Thread-4626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:53:45.679 [DEBUG] [Thread-4626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:53:45.679 [DEBUG] [Thread-4626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:53:45.700 [INFO] [Thread-4626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:53:45.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:53:45.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:53:46.550 [DEBUG] [Thread-4626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:53:46.551 [DEBUG] [Thread-4626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:53:46.599 [DEBUG] [Thread-4626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:53:46.599 [DEBUG] [Thread-4626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:53:46.608 [DEBUG] [Thread-4626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:53:46.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:53:46.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:53:46.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:53:46.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:53:46.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:53:46.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:53:46.645 [DEBUG] [Thread-4626] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:53:56.952 [DEBUG] [Thread-4628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:53:59.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:53:59.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:54:12.001 [DEBUG] [Thread-4629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:54:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:54:16.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:54:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:54:17.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 53, 52), 0.29, 97.9, 0.0, 17.95, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:54:17.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:53:52
2025-12-25T03:54:17.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:54:17.644 [DEBUG] [Thread-4630] [transport.py] [_log()] starting thread (client mode): 0xb955a710
2025-12-25T03:54:17.644 [DEBUG] [Thread-4630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:54:17.664 [DEBUG] [Thread-4630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:54:17.664 [INFO] [Thread-4630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:54:17.667 [DEBUG] [Thread-4630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:54:17.667 [DEBUG] [Thread-4630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:54:17.667 [DEBUG] [Thread-4630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] client lang: <none>
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] server lang: <none>
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] kex follows: False
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] Compression: none
2025-12-25T03:54:17.668 [DEBUG] [Thread-4630] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:54:17.685 [DEBUG] [Thread-4630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:54:17.686 [DEBUG] [Thread-4630] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:54:17.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:54:17.687 [DEBUG] [Thread-4630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:54:17.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:54:17.689 [DEBUG] [Thread-4630] [transport.py] [_log()] userauth is OK
2025-12-25T03:54:17.689 [DEBUG] [Thread-4630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:54:17.689 [DEBUG] [Thread-4630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:54:17.690 [DEBUG] [Thread-4630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:54:17.690 [DEBUG] [Thread-4630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:54:17.713 [INFO] [Thread-4630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:54:17.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:54:18.343 [DEBUG] [Thread-4630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:54:18.343 [DEBUG] [Thread-4630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:54:18.343 [DEBUG] [Thread-4630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:54:18.384 [DEBUG] [Thread-4630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:54:18.384 [DEBUG] [Thread-4630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:54:18.387 [DEBUG] [Thread-4630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:54:18.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:54:18.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:54:18.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:54:18.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:54:18.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:54:18.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:54:18.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:54:18.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:54:18.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:54:18.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.078887 -999.00  +11.10  18.46     95  +10.50 1 3 1 3 1     0    0 0.63 -1.48 ----- 16.2 18.5 136.8 21.6 12.9 -6.2 12.8 -6.7 12.6 -7.3 12.8 -7.8
2025-12-25T03:54:18.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:54:18.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:54:18.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.078887
2025-12-25T03:54:18.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:54:18.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:54:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:54:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:54:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:54:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:53:52', tmtdew=0.29, humidity=97.9, cloud=0.0, wind=17.95, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:53:35.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:54:18.413 [DEBUG] [Thread-4630] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:54:18.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:54:18.508 [DEBUG] [Thread-4633] [transport.py] [_log()] starting thread (client mode): 0xb6b29c90
2025-12-25T03:54:18.508 [DEBUG] [Thread-4633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:54:18.522 [DEBUG] [Thread-4633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:54:18.523 [INFO] [Thread-4633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:54:18.530 [DEBUG] [Thread-4633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:54:18.530 [DEBUG] [Thread-4633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:54:18.530 [DEBUG] [Thread-4633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:54:18.530 [DEBUG] [Thread-4633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] client lang: <none>
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] server lang: <none>
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] kex follows: False
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] Compression: none
2025-12-25T03:54:18.531 [DEBUG] [Thread-4633] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:54:18.590 [DEBUG] [Thread-4633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:54:18.590 [DEBUG] [Thread-4633] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:54:18.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:54:18.591 [DEBUG] [Thread-4633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:54:18.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:54:18.646 [DEBUG] [Thread-4633] [transport.py] [_log()] userauth is OK
2025-12-25T03:54:18.646 [DEBUG] [Thread-4633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:54:18.646 [DEBUG] [Thread-4633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:54:18.646 [DEBUG] [Thread-4633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:54:18.646 [DEBUG] [Thread-4633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:54:18.665 [INFO] [Thread-4633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:54:18.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:54:18.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:54:19.484 [DEBUG] [Thread-4633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:54:19.484 [DEBUG] [Thread-4633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:54:19.532 [DEBUG] [Thread-4633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:54:19.532 [DEBUG] [Thread-4633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:54:19.541 [DEBUG] [Thread-4633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:54:19.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:54:19.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:54:19.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:54:19.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:54:19.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:54:19.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:54:19.576 [DEBUG] [Thread-4633] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:54:27.033 [DEBUG] [Thread-4635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:54:34.225 [DEBUG] [Thread-4636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:54:42.070 [DEBUG] [Thread-4637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:54:49.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:54:49.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:54:49.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:54:50.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 54, 25), 0.29, 97.9, 0.0, 18.76, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:54:50.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:54:25
2025-12-25T03:54:50.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:54:50.556 [DEBUG] [Thread-4638] [transport.py] [_log()] starting thread (client mode): 0xb95591e0
2025-12-25T03:54:50.556 [DEBUG] [Thread-4638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:54:50.577 [DEBUG] [Thread-4638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:54:50.578 [INFO] [Thread-4638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:54:50.581 [DEBUG] [Thread-4638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:54:50.581 [DEBUG] [Thread-4638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:54:50.581 [DEBUG] [Thread-4638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:54:50.581 [DEBUG] [Thread-4638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:54:50.581 [DEBUG] [Thread-4638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:54:50.581 [DEBUG] [Thread-4638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:54:50.581 [DEBUG] [Thread-4638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:54:50.581 [DEBUG] [Thread-4638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] client lang: <none>
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] server lang: <none>
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] kex follows: False
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] Compression: none
2025-12-25T03:54:50.582 [DEBUG] [Thread-4638] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:54:50.601 [DEBUG] [Thread-4638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:54:50.602 [DEBUG] [Thread-4638] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:54:50.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:54:50.603 [DEBUG] [Thread-4638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:54:50.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:54:50.605 [DEBUG] [Thread-4638] [transport.py] [_log()] userauth is OK
2025-12-25T03:54:50.605 [DEBUG] [Thread-4638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:54:50.605 [DEBUG] [Thread-4638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:54:50.605 [DEBUG] [Thread-4638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:54:50.606 [DEBUG] [Thread-4638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:54:50.643 [INFO] [Thread-4638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:54:50.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:54:51.291 [DEBUG] [Thread-4638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:54:51.291 [DEBUG] [Thread-4638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:54:51.292 [DEBUG] [Thread-4638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:54:51.332 [DEBUG] [Thread-4638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:54:51.332 [DEBUG] [Thread-4638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:54:51.334 [DEBUG] [Thread-4638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:54:51.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:54:51.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:54:51.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:54:51.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:54:51.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:54:51.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:54:51.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:54:51.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:54:51.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:54:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.079234 -999.00  +11.20  14.76     95  +10.50 1 3 1 3 1     0    0 0.64 -1.73 ----- 11.0 14.8 143.6 21.0 12.9 -7.8 12.8 -5.9 12.6 -7.3 12.8 -6.1
2025-12-25T03:54:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:54:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:54:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.079234
2025-12-25T03:54:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:54:51.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:54:51.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:54:51.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:54:51.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:54:51.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:54:25', tmtdew=0.29, humidity=97.9, cloud=0.0, wind=18.76, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:54:05.818', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:54:51.362 [DEBUG] [Thread-4638] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:54:51.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:54:51.455 [DEBUG] [Thread-4641] [transport.py] [_log()] starting thread (client mode): 0xb95f28f0
2025-12-25T03:54:51.456 [DEBUG] [Thread-4641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:54:51.471 [DEBUG] [Thread-4641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:54:51.471 [INFO] [Thread-4641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] client lang: <none>
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] server lang: <none>
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] kex follows: False
2025-12-25T03:54:51.479 [DEBUG] [Thread-4641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:54:51.480 [DEBUG] [Thread-4641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:54:51.480 [DEBUG] [Thread-4641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:54:51.480 [DEBUG] [Thread-4641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:54:51.480 [DEBUG] [Thread-4641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:54:51.480 [DEBUG] [Thread-4641] [transport.py] [_log()] Compression: none
2025-12-25T03:54:51.480 [DEBUG] [Thread-4641] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:54:51.536 [DEBUG] [Thread-4641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:54:51.536 [DEBUG] [Thread-4641] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:54:51.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:54:51.537 [DEBUG] [Thread-4641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:54:51.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:54:51.592 [DEBUG] [Thread-4641] [transport.py] [_log()] userauth is OK
2025-12-25T03:54:51.592 [DEBUG] [Thread-4641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:54:51.592 [DEBUG] [Thread-4641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:54:51.593 [DEBUG] [Thread-4641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:54:51.593 [DEBUG] [Thread-4641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:54:51.610 [INFO] [Thread-4641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:54:51.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:54:51.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:54:52.438 [DEBUG] [Thread-4641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:54:52.438 [DEBUG] [Thread-4641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:54:52.487 [DEBUG] [Thread-4641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:54:52.487 [DEBUG] [Thread-4641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:54:52.497 [DEBUG] [Thread-4641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:54:52.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:54:52.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')
2025-12-25T03:54:52.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:54:52.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:54:52.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:54:52.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:54:52.533 [DEBUG] [Thread-4641] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:54:57.105 [DEBUG] [Thread-4643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:55:00.133 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:55:00.134 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:55:12.157 [DEBUG] [Thread-4644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:55:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:55:22.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:55:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:55:23.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 54, 57), 0.29, 97.91, 0.0, 18.97, 11.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:55:23.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:54:57
2025-12-25T03:55:23.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:55:23.534 [DEBUG] [Thread-4645] [transport.py] [_log()] starting thread (client mode): 0xb95f2b60
2025-12-25T03:55:23.534 [DEBUG] [Thread-4645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:55:23.554 [DEBUG] [Thread-4645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:55:23.555 [INFO] [Thread-4645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:55:23.558 [DEBUG] [Thread-4645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] client lang: <none>
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] server lang: <none>
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] kex follows: False
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] Compression: none
2025-12-25T03:55:23.559 [DEBUG] [Thread-4645] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:55:23.580 [DEBUG] [Thread-4645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:55:23.580 [DEBUG] [Thread-4645] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:55:23.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:55:23.582 [DEBUG] [Thread-4645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:55:23.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:55:23.584 [DEBUG] [Thread-4645] [transport.py] [_log()] userauth is OK
2025-12-25T03:55:23.585 [DEBUG] [Thread-4645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:55:23.585 [DEBUG] [Thread-4645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:55:23.585 [DEBUG] [Thread-4645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:55:23.585 [DEBUG] [Thread-4645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:55:23.617 [INFO] [Thread-4645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:55:23.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:55:24.235 [DEBUG] [Thread-4645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:55:24.236 [DEBUG] [Thread-4645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:55:24.236 [DEBUG] [Thread-4645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:55:24.277 [DEBUG] [Thread-4645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:55:24.277 [DEBUG] [Thread-4645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:55:24.280 [DEBUG] [Thread-4645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:55:24.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:55:24.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:55:24.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:55:24.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:55:24.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:55:24.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:55:24.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:55:24.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:55:24.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:55:24.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.079929 -999.00  +11.10  15.98     95  +10.50 1 3 1 3 1     0    0 0.61 -2.12 ----- 13.5 16.0 144.4 18.6 12.9 -6.2 12.8 -6.6 12.7 -9.2 12.9 -8.0
2025-12-25T03:55:24.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:55:24.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:55:24.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.079929
2025-12-25T03:55:24.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:55:24.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:55:24.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:55:24.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:55:24.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:55:24.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:54:57', tmtdew=0.29, humidity=97.91, cloud=0.0, wind=18.97, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:55:05.866', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:55:24.306 [DEBUG] [Thread-4645] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:55:24.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:55:24.401 [DEBUG] [Thread-4648] [transport.py] [_log()] starting thread (client mode): 0xb6b29f60
2025-12-25T03:55:24.401 [DEBUG] [Thread-4648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:55:24.416 [DEBUG] [Thread-4648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:55:24.416 [INFO] [Thread-4648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:55:24.424 [DEBUG] [Thread-4648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:55:24.424 [DEBUG] [Thread-4648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:55:24.424 [DEBUG] [Thread-4648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:55:24.424 [DEBUG] [Thread-4648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:55:24.424 [DEBUG] [Thread-4648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] client lang: <none>
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] server lang: <none>
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] kex follows: False
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:55:24.425 [DEBUG] [Thread-4648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:55:24.426 [DEBUG] [Thread-4648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:55:24.426 [DEBUG] [Thread-4648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:55:24.426 [DEBUG] [Thread-4648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:55:24.426 [DEBUG] [Thread-4648] [transport.py] [_log()] Compression: none
2025-12-25T03:55:24.426 [DEBUG] [Thread-4648] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:55:24.484 [DEBUG] [Thread-4648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:55:24.484 [DEBUG] [Thread-4648] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:55:24.485 [DEBUG] [Thread-4648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:55:24.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:55:24.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:55:24.540 [DEBUG] [Thread-4648] [transport.py] [_log()] userauth is OK
2025-12-25T03:55:24.540 [DEBUG] [Thread-4648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:55:24.540 [DEBUG] [Thread-4648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:55:24.540 [DEBUG] [Thread-4648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:55:24.540 [DEBUG] [Thread-4648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:55:24.559 [INFO] [Thread-4648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:55:24.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:55:24.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:55:25.424 [DEBUG] [Thread-4648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:55:25.424 [DEBUG] [Thread-4648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:55:25.473 [DEBUG] [Thread-4648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:55:25.473 [DEBUG] [Thread-4648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:55:25.481 [DEBUG] [Thread-4648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:55:25.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:55: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')
2025-12-25T03:55: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
2025-12-25T03:55:25.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:55:25.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:55:25.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:55:25.514 [DEBUG] [Thread-4648] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:55:27.189 [DEBUG] [Thread-4650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:55:34.309 [DEBUG] [Thread-4651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:55:42.246 [DEBUG] [Thread-4652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:55:55.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:55:55.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:55:55.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:55:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 55, 29), 0.29, 97.91, 0.0, 18.58, 11.24, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:55:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:55:29
2025-12-25T03:55:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:55:56.574 [DEBUG] [Thread-4653] [transport.py] [_log()] starting thread (client mode): 0xb9559240
2025-12-25T03:55:56.574 [DEBUG] [Thread-4653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:55:56.588 [DEBUG] [Thread-4653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:55:56.588 [INFO] [Thread-4653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] client lang: <none>
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] server lang: <none>
2025-12-25T03:55:56.592 [DEBUG] [Thread-4653] [transport.py] [_log()] kex follows: False
2025-12-25T03:55:56.593 [DEBUG] [Thread-4653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:55:56.593 [DEBUG] [Thread-4653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:55:56.593 [DEBUG] [Thread-4653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:55:56.593 [DEBUG] [Thread-4653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:55:56.593 [DEBUG] [Thread-4653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:55:56.593 [DEBUG] [Thread-4653] [transport.py] [_log()] Compression: none
2025-12-25T03:55:56.593 [DEBUG] [Thread-4653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:55:56.610 [DEBUG] [Thread-4653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:55:56.610 [DEBUG] [Thread-4653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:55:56.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:55:56.611 [DEBUG] [Thread-4653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:55:56.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:55:56.611 [DEBUG] [Thread-4653] [transport.py] [_log()] userauth is OK
2025-12-25T03:55:56.611 [DEBUG] [Thread-4653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:55:56.611 [DEBUG] [Thread-4653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:55:56.611 [DEBUG] [Thread-4653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:55:56.611 [DEBUG] [Thread-4653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:55:56.627 [INFO] [Thread-4653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:55:56.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:55:57.275 [DEBUG] [Thread-4653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:55:57.275 [DEBUG] [Thread-4653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:55:57.275 [DEBUG] [Thread-4653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:55:57.282 [DEBUG] [Thread-4655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:55:57.317 [DEBUG] [Thread-4653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:55:57.317 [DEBUG] [Thread-4653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:55:57.319 [DEBUG] [Thread-4653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:55:57.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:55:57.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:55:57.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:55:57.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:55:57.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:55:57.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:55:57.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.080276 -999.00  +11.10  15.27     95  +10.50 1 2 1 3 1     0    0 0.60 -2.55 Z..s. 17.6 15.3 162.4 20.1 12.9 -10.0 12.7 -11.6 12.6 -8.4 12.8 -7.8
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.080276
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T03:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:55:29', tmtdew=0.29, humidity=97.91, cloud=0.0, wind=18.58, temperature=11.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:55:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:55:57.340 [DEBUG] [Thread-4653] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:55:57.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:55:57.424 [DEBUG] [Thread-4657] [transport.py] [_log()] starting thread (client mode): 0xb6b15c00
2025-12-25T03:55:57.424 [DEBUG] [Thread-4657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:55:57.439 [DEBUG] [Thread-4657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:55:57.439 [INFO] [Thread-4657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] client lang: <none>
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] server lang: <none>
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] kex follows: False
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] Compression: none
2025-12-25T03:55:57.446 [DEBUG] [Thread-4657] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:55:57.501 [DEBUG] [Thread-4657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:55:57.501 [DEBUG] [Thread-4657] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:55:57.501 [DEBUG] [Thread-4657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:55:57.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:55:57.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:55:57.558 [DEBUG] [Thread-4657] [transport.py] [_log()] userauth is OK
2025-12-25T03:55:57.558 [DEBUG] [Thread-4657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:55:57.558 [DEBUG] [Thread-4657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:55:57.558 [DEBUG] [Thread-4657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:55:57.558 [DEBUG] [Thread-4657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:55:57.572 [INFO] [Thread-4657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:55:57.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:55:57.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:55:58.402 [DEBUG] [Thread-4657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:55:58.402 [DEBUG] [Thread-4657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:55:58.450 [DEBUG] [Thread-4657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:55:58.450 [DEBUG] [Thread-4657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:55:58.459 [DEBUG] [Thread-4657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:55:58.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:55:58.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:55:58.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:55:58.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:55:58.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:55:58.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:55:58.490 [DEBUG] [Thread-4657] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:56:00.334 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:56:00.336 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:56:12.315 [DEBUG] [Thread-4659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:56:27.401 [DEBUG] [Thread-4660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:56:28.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:56:28.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:56:28.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:56:29.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 56, 1), 0.29, 97.93, 0.0, 17.77, 11.26, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:56:29.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:56:01
2025-12-25T03:56:29.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:56:29.497 [DEBUG] [Thread-4661] [transport.py] [_log()] starting thread (client mode): 0xb95f1030
2025-12-25T03:56:29.497 [DEBUG] [Thread-4661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:56:29.517 [DEBUG] [Thread-4661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:56:29.517 [INFO] [Thread-4661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:56:29.520 [DEBUG] [Thread-4661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:56:29.520 [DEBUG] [Thread-4661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] client lang: <none>
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] server lang: <none>
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] kex follows: False
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] Compression: none
2025-12-25T03:56:29.521 [DEBUG] [Thread-4661] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:56:29.538 [DEBUG] [Thread-4661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:56:29.538 [DEBUG] [Thread-4661] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:56:29.539 [DEBUG] [Thread-4661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:56:29.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:56:29.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:56:29.541 [DEBUG] [Thread-4661] [transport.py] [_log()] userauth is OK
2025-12-25T03:56:29.541 [DEBUG] [Thread-4661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:56:29.541 [DEBUG] [Thread-4661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:56:29.541 [DEBUG] [Thread-4661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:56:29.542 [DEBUG] [Thread-4661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:56:29.565 [INFO] [Thread-4661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:56:29.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:56:30.226 [DEBUG] [Thread-4661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:56:30.226 [DEBUG] [Thread-4661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:56:30.227 [DEBUG] [Thread-4661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:56:30.267 [DEBUG] [Thread-4661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:56:30.267 [DEBUG] [Thread-4661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:56:30.271 [DEBUG] [Thread-4661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:56:30.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:56:30.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:56:30.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:56:30.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:56:30.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:56:30.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:56:30.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:56:30.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:56:30.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:56:30.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.080623 -999.00  +11.10  11.90     95  +10.50 1 3 1 3 1     0    0 0.58 -2.78 Z..s. 16.2 11.9 149.0 18.8 12.8 -8.2 12.8 -7.0 12.7 -6.4 12.8 -7.1
2025-12-25T03:56:30.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:56:30.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:56:30.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.080623
2025-12-25T03:56:30.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:56:30.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:56:30.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:56:30.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:56:30.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:56:30.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:56:01', tmtdew=0.29, humidity=97.93, cloud=0.0, wind=17.77, temperature=11.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:56:05.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:56:30.300 [DEBUG] [Thread-4661] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:56:30.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:56:30.396 [DEBUG] [Thread-4664] [transport.py] [_log()] starting thread (client mode): 0xb6b34ee0
2025-12-25T03:56:30.396 [DEBUG] [Thread-4664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:56:30.411 [DEBUG] [Thread-4664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:56:30.411 [INFO] [Thread-4664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:56:30.418 [DEBUG] [Thread-4664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] client lang: <none>
2025-12-25T03:56:30.419 [DEBUG] [Thread-4664] [transport.py] [_log()] server lang: <none>
2025-12-25T03:56:30.420 [DEBUG] [Thread-4664] [transport.py] [_log()] kex follows: False
2025-12-25T03:56:30.420 [DEBUG] [Thread-4664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:56:30.420 [DEBUG] [Thread-4664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:56:30.420 [DEBUG] [Thread-4664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:56:30.420 [DEBUG] [Thread-4664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:56:30.420 [DEBUG] [Thread-4664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:56:30.420 [DEBUG] [Thread-4664] [transport.py] [_log()] Compression: none
2025-12-25T03:56:30.420 [DEBUG] [Thread-4664] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:56:30.478 [DEBUG] [Thread-4664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:56:30.478 [DEBUG] [Thread-4664] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:56:30.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:56:30.479 [DEBUG] [Thread-4664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:56:30.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:56:30.534 [DEBUG] [Thread-4664] [transport.py] [_log()] userauth is OK
2025-12-25T03:56:30.535 [DEBUG] [Thread-4664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:56:30.535 [DEBUG] [Thread-4664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:56:30.535 [DEBUG] [Thread-4664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:56:30.535 [DEBUG] [Thread-4664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:56:30.553 [INFO] [Thread-4664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:56:30.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:56:30.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:56:31.389 [DEBUG] [Thread-4664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:56:31.389 [DEBUG] [Thread-4664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:56:31.437 [DEBUG] [Thread-4664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:56:31.437 [DEBUG] [Thread-4664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:56:31.446 [DEBUG] [Thread-4664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:56:31.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:56:31.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:56:31.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
2025-12-25T03:56:31.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:56:31.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:56:31.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:56:31.483 [DEBUG] [Thread-4664] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:56:34.380 [DEBUG] [Thread-4666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:56:42.438 [DEBUG] [Thread-4667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:56:57.492 [DEBUG] [Thread-4668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:57:00.546 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:57:00.548 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:57:01.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:57:01.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:57:01.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
2025-12-25T03:57:02.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 56, 33), 0.47, 96.86, 0.0, 20.71, 11.65, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:57:02.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:56:33
2025-12-25T03:57:02.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:57:02.476 [DEBUG] [Thread-4669] [transport.py] [_log()] starting thread (client mode): 0xb95f0850
2025-12-25T03:57:02.477 [DEBUG] [Thread-4669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:57:02.498 [DEBUG] [Thread-4669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:57:02.499 [INFO] [Thread-4669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] client lang: <none>
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] server lang: <none>
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] kex follows: False
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] Compression: none
2025-12-25T03:57:02.502 [DEBUG] [Thread-4669] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:57:02.520 [DEBUG] [Thread-4669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:57:02.520 [DEBUG] [Thread-4669] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:57:02.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:57:02.521 [DEBUG] [Thread-4669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:57:02.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:57:02.523 [DEBUG] [Thread-4669] [transport.py] [_log()] userauth is OK
2025-12-25T03:57:02.524 [DEBUG] [Thread-4669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:57:02.524 [DEBUG] [Thread-4669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:57:02.524 [DEBUG] [Thread-4669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:57:02.524 [DEBUG] [Thread-4669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:57:02.549 [INFO] [Thread-4669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:57:02.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:57:03.170 [DEBUG] [Thread-4669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:57:03.170 [DEBUG] [Thread-4669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:57:03.171 [DEBUG] [Thread-4669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:57:03.211 [DEBUG] [Thread-4669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:57:03.211 [DEBUG] [Thread-4669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:57:03.214 [DEBUG] [Thread-4669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:57:03.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:57:03.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:57:03.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:57:03.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:57:03.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:57:03.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:57:03.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:57:03.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:57:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:57:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.080970 -999.00  +11.10  17.72     95  +10.50 1 3 1 3 1     0    0 0.57 -3.03 ----- 15.6 17.7 143.8 18.7 12.8 -6.8 12.7 -7.7 12.6 -9.7 12.8 -8.0
2025-12-25T03:57:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:57:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:57:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.080970
2025-12-25T03:57:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:57:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:57:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:57:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:57:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:57:03.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:56:33', tmtdew=0.47, humidity=96.86, cloud=0.0, wind=20.71, temperature=11.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:56:35.808', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:57:03.241 [DEBUG] [Thread-4669] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:57:03.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:57:03.334 [DEBUG] [Thread-4672] [transport.py] [_log()] starting thread (client mode): 0xb95f2860
2025-12-25T03:57:03.335 [DEBUG] [Thread-4672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:57:03.352 [DEBUG] [Thread-4672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:57:03.352 [INFO] [Thread-4672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] client lang: <none>
2025-12-25T03:57:03.360 [DEBUG] [Thread-4672] [transport.py] [_log()] server lang: <none>
2025-12-25T03:57:03.361 [DEBUG] [Thread-4672] [transport.py] [_log()] kex follows: False
2025-12-25T03:57:03.361 [DEBUG] [Thread-4672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:57:03.361 [DEBUG] [Thread-4672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:57:03.361 [DEBUG] [Thread-4672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:57:03.361 [DEBUG] [Thread-4672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:57:03.361 [DEBUG] [Thread-4672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:57:03.361 [DEBUG] [Thread-4672] [transport.py] [_log()] Compression: none
2025-12-25T03:57:03.361 [DEBUG] [Thread-4672] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:57:03.421 [DEBUG] [Thread-4672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:57:03.422 [DEBUG] [Thread-4672] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:57:03.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:57:03.423 [DEBUG] [Thread-4672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:57:03.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:57:03.478 [DEBUG] [Thread-4672] [transport.py] [_log()] userauth is OK
2025-12-25T03:57:03.478 [DEBUG] [Thread-4672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:57:03.478 [DEBUG] [Thread-4672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:57:03.478 [DEBUG] [Thread-4672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:57:03.478 [DEBUG] [Thread-4672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:57:03.498 [INFO] [Thread-4672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:57:03.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:57:03.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:57:04.312 [DEBUG] [Thread-4672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:57:04.312 [DEBUG] [Thread-4672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:57:04.360 [DEBUG] [Thread-4672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:57:04.361 [DEBUG] [Thread-4672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:57:04.371 [DEBUG] [Thread-4672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:57:04.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:57:04.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:57:04.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:57:04.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:57:04.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:57:04.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:57:04.407 [DEBUG] [Thread-4672] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:57:12.526 [DEBUG] [Thread-4674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:57:27.562 [DEBUG] [Thread-4675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:57:34.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:57:34.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:57:34.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:57:34.450 [DEBUG] [Thread-4676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:57:35.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 57, 5), 0.29, 97.91, 0.0, 19.83, 11.22, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:57:35.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:57:05
2025-12-25T03:57:35.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:57:35.389 [DEBUG] [Thread-4677] [transport.py] [_log()] starting thread (client mode): 0xb95b18d0
2025-12-25T03:57:35.389 [DEBUG] [Thread-4677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:57:35.411 [DEBUG] [Thread-4677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:57:35.411 [INFO] [Thread-4677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:57:35.415 [DEBUG] [Thread-4677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:57:35.415 [DEBUG] [Thread-4677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:57:35.415 [DEBUG] [Thread-4677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:57:35.415 [DEBUG] [Thread-4677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:57:35.415 [DEBUG] [Thread-4677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] client lang: <none>
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] server lang: <none>
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] kex follows: False
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:57:35.416 [DEBUG] [Thread-4677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:57:35.417 [DEBUG] [Thread-4677] [transport.py] [_log()] Compression: none
2025-12-25T03:57:35.417 [DEBUG] [Thread-4677] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:57:35.433 [DEBUG] [Thread-4677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:57:35.434 [DEBUG] [Thread-4677] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:57:35.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:57:35.435 [DEBUG] [Thread-4677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:57:35.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:57:35.436 [DEBUG] [Thread-4677] [transport.py] [_log()] userauth is OK
2025-12-25T03:57:35.436 [DEBUG] [Thread-4677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:57:35.436 [DEBUG] [Thread-4677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:57:35.436 [DEBUG] [Thread-4677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:57:35.436 [DEBUG] [Thread-4677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:57:35.467 [INFO] [Thread-4677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:57:35.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:57:36.075 [DEBUG] [Thread-4677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:57:36.075 [DEBUG] [Thread-4677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:57:36.075 [DEBUG] [Thread-4677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:57:36.116 [DEBUG] [Thread-4677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:57:36.116 [DEBUG] [Thread-4677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:57:36.119 [DEBUG] [Thread-4677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:57:36.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:57:36.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:57:36.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:57:36.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:57:36.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:57:36.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:57:36.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:57:36.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:57:36.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:57:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.081318 -999.00  +11.10  13.90     95  +10.50 1 3 1 3 1     0    0 0.57 -3.25 ----- 14.4 13.9 161.8 16.5 12.9 -8.7 12.7 -7.0 12.5 -8.7 12.8 -7.1
2025-12-25T03:57:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:57:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:57:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.081318
2025-12-25T03:57:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:57:36.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:57:36.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:57:36.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:57:36.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:57:36.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:57:05', tmtdew=0.29, humidity=97.91, cloud=0.0, wind=19.83, temperature=11.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:57:05.875', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:57:36.147 [DEBUG] [Thread-4677] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:57:36.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:57:36.241 [DEBUG] [Thread-4680] [transport.py] [_log()] starting thread (client mode): 0xb95f26b0
2025-12-25T03:57:36.241 [DEBUG] [Thread-4680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:57:36.258 [DEBUG] [Thread-4680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:57:36.258 [INFO] [Thread-4680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:57:36.266 [DEBUG] [Thread-4680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:57:36.266 [DEBUG] [Thread-4680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:57:36.267 [DEBUG] [Thread-4680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:57:36.267 [DEBUG] [Thread-4680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:57:36.267 [DEBUG] [Thread-4680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:57:36.267 [DEBUG] [Thread-4680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:57:36.267 [DEBUG] [Thread-4680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:57:36.267 [DEBUG] [Thread-4680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:57:36.267 [DEBUG] [Thread-4680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:57:36.267 [DEBUG] [Thread-4680] [transport.py] [_log()] client lang: <none>
2025-12-25T03:57:36.268 [DEBUG] [Thread-4680] [transport.py] [_log()] server lang: <none>
2025-12-25T03:57:36.268 [DEBUG] [Thread-4680] [transport.py] [_log()] kex follows: False
2025-12-25T03:57:36.268 [DEBUG] [Thread-4680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:57:36.268 [DEBUG] [Thread-4680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:57:36.268 [DEBUG] [Thread-4680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:57:36.268 [DEBUG] [Thread-4680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:57:36.268 [DEBUG] [Thread-4680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:57:36.268 [DEBUG] [Thread-4680] [transport.py] [_log()] Compression: none
2025-12-25T03:57:36.269 [DEBUG] [Thread-4680] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:57:36.325 [DEBUG] [Thread-4680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:57:36.326 [DEBUG] [Thread-4680] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:57:36.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:57:36.327 [DEBUG] [Thread-4680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:57:36.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:57:36.384 [DEBUG] [Thread-4680] [transport.py] [_log()] userauth is OK
2025-12-25T03:57:36.385 [DEBUG] [Thread-4680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:57:36.385 [DEBUG] [Thread-4680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:57:36.385 [DEBUG] [Thread-4680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:57:36.385 [DEBUG] [Thread-4680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:57:36.406 [INFO] [Thread-4680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:57:36.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:57:36.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:57:37.258 [DEBUG] [Thread-4680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:57:37.258 [DEBUG] [Thread-4680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:57:37.306 [DEBUG] [Thread-4680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:57:37.306 [DEBUG] [Thread-4680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:57:37.315 [DEBUG] [Thread-4680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:57:37.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:57:37.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')
2025-12-25T03:57:37.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:57:37.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:57:37.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:57:37.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:57:37.351 [DEBUG] [Thread-4680] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:57:42.594 [DEBUG] [Thread-4682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:57:57.643 [DEBUG] [Thread-4683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:58:00.753 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:58:00.755 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:58:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:58:07.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:58:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:58:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 57, 37), 0.24, 97.9, 0.0, 17.15, 11.17, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:58:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:57:37
2025-12-25T03:58:08.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:58:08.349 [DEBUG] [Thread-4684] [transport.py] [_log()] starting thread (client mode): 0xb6b4b370
2025-12-25T03:58:08.349 [DEBUG] [Thread-4684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:58:08.370 [DEBUG] [Thread-4684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:58:08.370 [INFO] [Thread-4684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] client lang: <none>
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] server lang: <none>
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] kex follows: False
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:58:08.372 [DEBUG] [Thread-4684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:58:08.373 [DEBUG] [Thread-4684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:58:08.373 [DEBUG] [Thread-4684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:58:08.373 [DEBUG] [Thread-4684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:58:08.373 [DEBUG] [Thread-4684] [transport.py] [_log()] Compression: none
2025-12-25T03:58:08.373 [DEBUG] [Thread-4684] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:58:08.381 [DEBUG] [Thread-4684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:58:08.382 [DEBUG] [Thread-4684] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:58:08.382 [DEBUG] [Thread-4684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:58:08.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:58:08.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:58:08.384 [DEBUG] [Thread-4684] [transport.py] [_log()] userauth is OK
2025-12-25T03:58:08.385 [DEBUG] [Thread-4684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:58:08.385 [DEBUG] [Thread-4684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:58:08.385 [DEBUG] [Thread-4684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:58:08.385 [DEBUG] [Thread-4684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:58:08.420 [INFO] [Thread-4684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:58:08.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:58:09.041 [DEBUG] [Thread-4684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:58:09.041 [DEBUG] [Thread-4684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:58:09.041 [DEBUG] [Thread-4684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:58:09.082 [DEBUG] [Thread-4684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:58:09.082 [DEBUG] [Thread-4684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:58:09.086 [DEBUG] [Thread-4684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:58:09.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:58:09.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:58:09.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:58:09.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:58:09.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:58:09.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:58:09.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:58:09.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:58:09.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:58:09.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.081665 -999.00  +11.10  16.83     95  +10.50 1 3 1 3 1     0    0 0.56 -3.44 ----- 15.5 16.8 144.4 21.1 12.8 -7.8 12.7 -6.5 12.6 -8.3 12.8 -7.5
2025-12-25T03:58:09.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:58:09.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:58:09.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.081665
2025-12-25T03:58:09.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:58:09.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:58:09.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:58:09.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:58:09.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:58:09.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:57:37', tmtdew=0.24, humidity=97.9, cloud=0.0, wind=17.15, temperature=11.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:57:35.856', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:58:09.112 [DEBUG] [Thread-4684] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:58:09.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:58:09.212 [DEBUG] [Thread-4687] [transport.py] [_log()] starting thread (client mode): 0xb6b2bac0
2025-12-25T03:58:09.212 [DEBUG] [Thread-4687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:58:09.227 [DEBUG] [Thread-4687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:58:09.227 [INFO] [Thread-4687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:58:09.234 [DEBUG] [Thread-4687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:58:09.234 [DEBUG] [Thread-4687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] client lang: <none>
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] server lang: <none>
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] kex follows: False
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] Compression: none
2025-12-25T03:58:09.235 [DEBUG] [Thread-4687] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:58:09.292 [DEBUG] [Thread-4687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:58:09.293 [DEBUG] [Thread-4687] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:58:09.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:58:09.294 [DEBUG] [Thread-4687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:58:09.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:58:09.348 [DEBUG] [Thread-4687] [transport.py] [_log()] userauth is OK
2025-12-25T03:58:09.349 [DEBUG] [Thread-4687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:58:09.349 [DEBUG] [Thread-4687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:58:09.349 [DEBUG] [Thread-4687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:58:09.349 [DEBUG] [Thread-4687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:58:09.367 [INFO] [Thread-4687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:58:09.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:58:09.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:58:10.245 [DEBUG] [Thread-4687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:58:10.245 [DEBUG] [Thread-4687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:58:10.293 [DEBUG] [Thread-4687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:58:10.293 [DEBUG] [Thread-4687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:58:10.301 [DEBUG] [Thread-4687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:58:10.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:58:10.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:58:10.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:58:10.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:58:10.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:58:10.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:58:10.333 [DEBUG] [Thread-4687] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:58:12.678 [DEBUG] [Thread-4689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:58:27.729 [DEBUG] [Thread-4690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:58:34.506 [DEBUG] [Thread-4691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:58:40.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:58:40.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:58:40.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:58:41.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 58, 9), 0.24, 97.9, 0.0, 18.35, 11.17, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:58:41.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:58:09
2025-12-25T03:58:41.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:58:41.325 [DEBUG] [Thread-4692] [transport.py] [_log()] starting thread (client mode): 0xb6b29d20
2025-12-25T03:58:41.325 [DEBUG] [Thread-4692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:58:41.346 [DEBUG] [Thread-4692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:58:41.346 [INFO] [Thread-4692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:58:41.349 [DEBUG] [Thread-4692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] client lang: <none>
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] server lang: <none>
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] kex follows: False
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] Compression: none
2025-12-25T03:58:41.350 [DEBUG] [Thread-4692] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:58:41.366 [DEBUG] [Thread-4692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:58:41.366 [DEBUG] [Thread-4692] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:58:41.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:58:41.367 [DEBUG] [Thread-4692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:58:41.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:58:41.369 [DEBUG] [Thread-4692] [transport.py] [_log()] userauth is OK
2025-12-25T03:58:41.369 [DEBUG] [Thread-4692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:58:41.369 [DEBUG] [Thread-4692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:58:41.369 [DEBUG] [Thread-4692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:58:41.369 [DEBUG] [Thread-4692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:58:41.391 [INFO] [Thread-4692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:58:41.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:58:42.034 [DEBUG] [Thread-4692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:58:42.034 [DEBUG] [Thread-4692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:58:42.035 [DEBUG] [Thread-4692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:58:42.075 [DEBUG] [Thread-4692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:58:42.075 [DEBUG] [Thread-4692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:58:42.078 [DEBUG] [Thread-4692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:58:42.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:58:42.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:58:42.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:58:42.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:58:42.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:58:42.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:58:42.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:58:42.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.082012 -999.00  +11.20  17.46     95  +10.50 1 3 1 3 1     0    0 0.58 -3.12 ----- 16.9 17.5 141.0 23.2 12.9 -8.9 12.8 -7.8 12.6 -7.2 12.8 -7.7
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.082012
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:58:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:58:09', tmtdew=0.24, humidity=97.9, cloud=0.0, wind=18.35, temperature=11.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:58:05.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:58:42.098 [DEBUG] [Thread-4692] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:58:42.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:58:42.193 [DEBUG] [Thread-4695] [transport.py] [_log()] starting thread (client mode): 0xb955a650
2025-12-25T03:58:42.193 [DEBUG] [Thread-4695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:58:42.208 [DEBUG] [Thread-4695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:58:42.208 [INFO] [Thread-4695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] client lang: <none>
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] server lang: <none>
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] kex follows: False
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] Compression: none
2025-12-25T03:58:42.216 [DEBUG] [Thread-4695] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:58:42.273 [DEBUG] [Thread-4695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:58:42.273 [DEBUG] [Thread-4695] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:58:42.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:58:42.274 [DEBUG] [Thread-4695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:58:42.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:58:42.331 [DEBUG] [Thread-4695] [transport.py] [_log()] userauth is OK
2025-12-25T03:58:42.331 [DEBUG] [Thread-4695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:58:42.331 [DEBUG] [Thread-4695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:58:42.331 [DEBUG] [Thread-4695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:58:42.331 [DEBUG] [Thread-4695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:58:42.344 [INFO] [Thread-4695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:58:42.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:58:42.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:58:42.762 [DEBUG] [Thread-4697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:58:43.149 [DEBUG] [Thread-4695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:58:43.149 [DEBUG] [Thread-4695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:58:43.197 [DEBUG] [Thread-4695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:58:43.197 [DEBUG] [Thread-4695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:58:43.205 [DEBUG] [Thread-4695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:58:43.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:58:43.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:58:43.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:58:43.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:58:43.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:58:43.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:58:43.236 [DEBUG] [Thread-4695] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:58:57.800 [DEBUG] [Thread-4698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:59:00.956 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:59:00.957 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:59:12.832 [DEBUG] [Thread-4699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:59:13.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:59:13.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:59:13.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:59:13.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 58, 41), 0.29, 97.91, 0.0, 19.25, 11.16, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:59:13.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:58:41
2025-12-25T03:59:14.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:59:14.279 [DEBUG] [Thread-4700] [transport.py] [_log()] starting thread (client mode): 0xb6b37010
2025-12-25T03:59:14.279 [DEBUG] [Thread-4700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:59:14.300 [DEBUG] [Thread-4700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:59:14.300 [INFO] [Thread-4700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] client lang: <none>
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] server lang: <none>
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] kex follows: False
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] Compression: none
2025-12-25T03:59:14.304 [DEBUG] [Thread-4700] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:59:14.320 [DEBUG] [Thread-4700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:59:14.320 [DEBUG] [Thread-4700] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:59:14.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:59:14.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:59:14.321 [DEBUG] [Thread-4700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:59:14.321 [DEBUG] [Thread-4700] [transport.py] [_log()] userauth is OK
2025-12-25T03:59:14.321 [DEBUG] [Thread-4700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:59:14.321 [DEBUG] [Thread-4700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:59:14.322 [DEBUG] [Thread-4700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:59:14.322 [DEBUG] [Thread-4700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:59:14.332 [INFO] [Thread-4700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:59:14.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:59:14.943 [DEBUG] [Thread-4700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:59:14.943 [DEBUG] [Thread-4700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:59:14.943 [DEBUG] [Thread-4700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:59:14.984 [DEBUG] [Thread-4700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:59:14.984 [DEBUG] [Thread-4700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:59:14.986 [DEBUG] [Thread-4700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:59:14.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:59:14.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:59:14.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:59:15.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:59:15.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:59:15.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:59:15.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:59:15.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:59:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:59:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.082359 -999.00  +11.20  13.20     95  +10.50 1 3 1 3 1     0    0 0.59 -2.70 ----- 11.2 13.2 154.0 18.1 12.8 -8.3 12.7 -9.0 12.6 -6.6 12.8 -7.7
2025-12-25T03:59:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:59:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:59:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.082359
2025-12-25T03:59:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:59:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:59:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:59:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:59:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:59:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:58:41', tmtdew=0.29, humidity=97.91, cloud=0.0, wind=19.25, temperature=11.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:58:35.818', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:59:15.006 [DEBUG] [Thread-4700] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:59:15.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:59:15.097 [DEBUG] [Thread-4703] [transport.py] [_log()] starting thread (client mode): 0xb6b37340
2025-12-25T03:59:15.097 [DEBUG] [Thread-4703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:59:15.112 [DEBUG] [Thread-4703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:59:15.112 [INFO] [Thread-4703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] client lang: <none>
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] server lang: <none>
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] kex follows: False
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] Compression: none
2025-12-25T03:59:15.120 [DEBUG] [Thread-4703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:59:15.177 [DEBUG] [Thread-4703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:59:15.177 [DEBUG] [Thread-4703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:59:15.177 [DEBUG] [Thread-4703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:59:15.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:59:15.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:59:15.234 [DEBUG] [Thread-4703] [transport.py] [_log()] userauth is OK
2025-12-25T03:59:15.234 [DEBUG] [Thread-4703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:59:15.234 [DEBUG] [Thread-4703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:59:15.234 [DEBUG] [Thread-4703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:59:15.234 [DEBUG] [Thread-4703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:59:15.248 [INFO] [Thread-4703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:59:15.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:59:15.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:59:16.075 [DEBUG] [Thread-4703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:59:16.075 [DEBUG] [Thread-4703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:59:16.123 [DEBUG] [Thread-4703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:59:16.123 [DEBUG] [Thread-4703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:59:16.132 [DEBUG] [Thread-4703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:59:16.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:59:16.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T03:59:16.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:59:16.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:59:16.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:59:16.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:59:16.166 [DEBUG] [Thread-4703] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:59:27.865 [DEBUG] [Thread-4705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:59:34.594 [DEBUG] [Thread-4706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:59:42.918 [DEBUG] [Thread-4707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T03:59:46.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T03:59:46.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T03:59:46.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T03:59:46.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 59, 13), 0.29, 97.93, 0.0, 19.64, 11.19, 2, 2, 0, 2, 0, 0),)
2025-12-25T03:59:46.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:59:13
2025-12-25T03:59:47.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T03:59:47.272 [DEBUG] [Thread-4708] [transport.py] [_log()] starting thread (client mode): 0xb6b229e0
2025-12-25T03:59:47.272 [DEBUG] [Thread-4708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:59:47.292 [DEBUG] [Thread-4708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T03:59:47.292 [INFO] [Thread-4708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] client lang: <none>
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] server lang: <none>
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] kex follows: False
2025-12-25T03:59:47.295 [DEBUG] [Thread-4708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:59:47.296 [DEBUG] [Thread-4708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:59:47.296 [DEBUG] [Thread-4708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:59:47.296 [DEBUG] [Thread-4708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:59:47.296 [DEBUG] [Thread-4708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:59:47.296 [DEBUG] [Thread-4708] [transport.py] [_log()] Compression: none
2025-12-25T03:59:47.296 [DEBUG] [Thread-4708] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:59:47.313 [DEBUG] [Thread-4708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:59:47.313 [DEBUG] [Thread-4708] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:59:47.314 [DEBUG] [Thread-4708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T03:59:47.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T03:59:47.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:59:47.315 [DEBUG] [Thread-4708] [transport.py] [_log()] userauth is OK
2025-12-25T03:59:47.315 [DEBUG] [Thread-4708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:59:47.315 [DEBUG] [Thread-4708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:59:47.315 [DEBUG] [Thread-4708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T03:59:47.315 [DEBUG] [Thread-4708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:59:47.325 [INFO] [Thread-4708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:59:47.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:59:47.969 [DEBUG] [Thread-4708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:59:47.969 [DEBUG] [Thread-4708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:59:47.969 [DEBUG] [Thread-4708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T03:59:48.009 [DEBUG] [Thread-4708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:59:48.009 [DEBUG] [Thread-4708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:59:48.011 [DEBUG] [Thread-4708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:59:48.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:59:48.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T03:59:48.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T03:59:48.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T03:59:48.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:59:48.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T03:59:48.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:59:48.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:59:48.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T03:59:48.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.083054 -999.00  +11.20  17.65     95  +10.50 1 3 1 3 1     0    0 0.61 -2.28 ----- 20.0 17.6 149.5 24.2 12.9 -7.5 12.7 -8.1 12.6 -6.0 12.9 -8.5
2025-12-25T03:59:48.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T03:59:48.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T03:59:48.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.083054
2025-12-25T03:59:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T03:59:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T03:59:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T03:59:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T03:59:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T03:59:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:59:13', tmtdew=0.29, humidity=97.93, cloud=0.0, wind=19.64, temperature=11.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T01:59:35.866', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T03:59:48.032 [DEBUG] [Thread-4708] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:59:48.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T03:59:48.129 [DEBUG] [Thread-4711] [transport.py] [_log()] starting thread (client mode): 0xb6b22a10
2025-12-25T03:59:48.129 [DEBUG] [Thread-4711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T03:59:48.143 [DEBUG] [Thread-4711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T03:59:48.143 [INFO] [Thread-4711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T03:59:48.150 [DEBUG] [Thread-4711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] client lang: <none>
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] server lang: <none>
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] kex follows: False
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] Compression: none
2025-12-25T03:59:48.151 [DEBUG] [Thread-4711] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T03:59:48.208 [DEBUG] [Thread-4711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T03:59:48.208 [DEBUG] [Thread-4711] [transport.py] [_log()] Switch to new keys ...
2025-12-25T03:59:48.208 [DEBUG] [Thread-4711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T03:59:48.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T03:59:48.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T03:59:48.266 [DEBUG] [Thread-4711] [transport.py] [_log()] userauth is OK
2025-12-25T03:59:48.266 [DEBUG] [Thread-4711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T03:59:48.266 [DEBUG] [Thread-4711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T03:59:48.266 [DEBUG] [Thread-4711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T03:59:48.266 [DEBUG] [Thread-4711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T03:59:48.283 [INFO] [Thread-4711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T03:59:48.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T03:59:48.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T03:59:49.131 [DEBUG] [Thread-4711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T03:59:49.131 [DEBUG] [Thread-4711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T03:59:49.179 [DEBUG] [Thread-4711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T03:59:49.179 [DEBUG] [Thread-4711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T03:59:49.187 [DEBUG] [Thread-4711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T03:59:49.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T03:59:49.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')
2025-12-25T03:59:49.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T03:59:49.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T03:59:49.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T03:59:49.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T03:59:49.217 [DEBUG] [Thread-4711] [transport.py] [_log()] EOF in transport thread
2025-12-25T03:59:57.952 [DEBUG] [Thread-4713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:00:01.162 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:00:01.163 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:00:13.007 [DEBUG] [Thread-4714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:00:19.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:00:19.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:00:19.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:00:19.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 3, 59, 45), 0.23, 97.95, 0.0, 21.93, 11.19, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:00:19.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 03:59:45
2025-12-25T04:00:20.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:00:20.289 [DEBUG] [Thread-4715] [transport.py] [_log()] starting thread (client mode): 0xb9558250
2025-12-25T04:00:20.289 [DEBUG] [Thread-4715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:00:20.310 [DEBUG] [Thread-4715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:00:20.310 [INFO] [Thread-4715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] client lang: <none>
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] server lang: <none>
2025-12-25T04:00:20.312 [DEBUG] [Thread-4715] [transport.py] [_log()] kex follows: False
2025-12-25T04:00:20.313 [DEBUG] [Thread-4715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:00:20.313 [DEBUG] [Thread-4715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:00:20.313 [DEBUG] [Thread-4715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:00:20.313 [DEBUG] [Thread-4715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:00:20.313 [DEBUG] [Thread-4715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:00:20.313 [DEBUG] [Thread-4715] [transport.py] [_log()] Compression: none
2025-12-25T04:00:20.313 [DEBUG] [Thread-4715] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:00:20.322 [DEBUG] [Thread-4715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:00:20.323 [DEBUG] [Thread-4715] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:00:20.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:00:20.324 [DEBUG] [Thread-4715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:00:20.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:00:20.326 [DEBUG] [Thread-4715] [transport.py] [_log()] userauth is OK
2025-12-25T04:00:20.326 [DEBUG] [Thread-4715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:00:20.326 [DEBUG] [Thread-4715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:00:20.326 [DEBUG] [Thread-4715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:00:20.326 [DEBUG] [Thread-4715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:00:20.348 [INFO] [Thread-4715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:00:20.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:00:20.957 [DEBUG] [Thread-4715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:00:20.957 [DEBUG] [Thread-4715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:00:20.957 [DEBUG] [Thread-4715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:00:20.999 [DEBUG] [Thread-4715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:00:20.999 [DEBUG] [Thread-4715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:00:21.001 [DEBUG] [Thread-4715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:00:21.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:00:21.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:00:21.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:00:21.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:00:21.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:00:21.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:00:21.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.083401 -999.00  +11.10  20.89     95  +10.50 1 3 1 3 1     0    0 0.60 -2.50 ----- 19.2 20.9 144.4 23.0 12.8 -6.0 12.8 -5.7 12.6 -6.5 12.8 -5.9
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.083401
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:00:21.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:00:21.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:00:21.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T03:59:45', tmtdew=0.23, humidity=97.95, cloud=0.0, wind=21.93, temperature=11.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:00:05.846', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:00:21.021 [DEBUG] [Thread-4715] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:00:21.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:00:21.104 [DEBUG] [Thread-4718] [transport.py] [_log()] starting thread (client mode): 0xb6b4b460
2025-12-25T04:00:21.104 [DEBUG] [Thread-4718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:00:21.118 [DEBUG] [Thread-4718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:00:21.118 [INFO] [Thread-4718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] client lang: <none>
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] server lang: <none>
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] kex follows: False
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] Compression: none
2025-12-25T04:00:21.126 [DEBUG] [Thread-4718] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:00:21.190 [DEBUG] [Thread-4718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:00:21.190 [DEBUG] [Thread-4718] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:00:21.190 [DEBUG] [Thread-4718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:00:21.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:00:21.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:00:21.246 [DEBUG] [Thread-4718] [transport.py] [_log()] userauth is OK
2025-12-25T04:00:21.246 [DEBUG] [Thread-4718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:00:21.246 [DEBUG] [Thread-4718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:00:21.246 [DEBUG] [Thread-4718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:00:21.246 [DEBUG] [Thread-4718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:00:21.265 [INFO] [Thread-4718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:00:21.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:00:21.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:00:22.062 [DEBUG] [Thread-4718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:00:22.062 [DEBUG] [Thread-4718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:00:22.110 [DEBUG] [Thread-4718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:00:22.110 [DEBUG] [Thread-4718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:00:22.120 [DEBUG] [Thread-4718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:00:22.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:00:22.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:00:22.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:00:22.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:00:22.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:00:22.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:00:22.156 [DEBUG] [Thread-4718] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:00:28.042 [DEBUG] [Thread-4720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:00:34.652 [DEBUG] [Thread-4721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:00:43.080 [DEBUG] [Thread-4722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:00:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:00:52.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:00:52.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:00:52.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 0, 18), 0.24, 97.93, 0.0, 21.93, 11.14, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:00:52.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:00:18
2025-12-25T04:00:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:00:53.149 [DEBUG] [Thread-4723] [transport.py] [_log()] starting thread (client mode): 0xb6b220e0
2025-12-25T04:00:53.149 [DEBUG] [Thread-4723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:00:53.170 [DEBUG] [Thread-4723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:00:53.170 [INFO] [Thread-4723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:00:53.172 [DEBUG] [Thread-4723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] client lang: <none>
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] server lang: <none>
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] kex follows: False
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] Compression: none
2025-12-25T04:00:53.173 [DEBUG] [Thread-4723] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:00:53.190 [DEBUG] [Thread-4723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:00:53.191 [DEBUG] [Thread-4723] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:00:53.191 [DEBUG] [Thread-4723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:00:53.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:00:53.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:00:53.193 [DEBUG] [Thread-4723] [transport.py] [_log()] userauth is OK
2025-12-25T04:00:53.193 [DEBUG] [Thread-4723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:00:53.194 [DEBUG] [Thread-4723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:00:53.194 [DEBUG] [Thread-4723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:00:53.194 [DEBUG] [Thread-4723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:00:53.217 [INFO] [Thread-4723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:00:53.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:00:53.883 [DEBUG] [Thread-4723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:00:53.883 [DEBUG] [Thread-4723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:00:53.883 [DEBUG] [Thread-4723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:00:53.924 [DEBUG] [Thread-4723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:00:53.924 [DEBUG] [Thread-4723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:00:53.927 [DEBUG] [Thread-4723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:00:53.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:00:53.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:00:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:00:53.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:00:53.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:00:53.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:00:53.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:00:53.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:00:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:00:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.083748 -999.00  +11.10  17.79     95  +10.50 1 3 1 3 1     0    0 0.59 -2.48 ----- 17.3 17.8 139.2 22.1 12.9 -5.7 12.8 -5.3 12.6 -5.0 12.8 -5.2
2025-12-25T04:00:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:00:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:00:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.083748
2025-12-25T04:00:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:00:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:00:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:00:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:00:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:00:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:00:18', tmtdew=0.24, humidity=97.93, cloud=0.0, wind=21.93, temperature=11.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:00:35.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:00:53.951 [DEBUG] [Thread-4723] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:00:54.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:00:54.044 [DEBUG] [Thread-4726] [transport.py] [_log()] starting thread (client mode): 0xb6b37550
2025-12-25T04:00:54.045 [DEBUG] [Thread-4726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:00:54.062 [DEBUG] [Thread-4726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:00:54.063 [INFO] [Thread-4726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:00:54.070 [DEBUG] [Thread-4726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:00:54.071 [DEBUG] [Thread-4726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:00:54.071 [DEBUG] [Thread-4726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:00:54.071 [DEBUG] [Thread-4726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:00:54.071 [DEBUG] [Thread-4726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:00:54.071 [DEBUG] [Thread-4726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:00:54.071 [DEBUG] [Thread-4726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] client lang: <none>
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] server lang: <none>
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] kex follows: False
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] Compression: none
2025-12-25T04:00:54.072 [DEBUG] [Thread-4726] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:00:54.129 [DEBUG] [Thread-4726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:00:54.130 [DEBUG] [Thread-4726] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:00:54.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:00:54.131 [DEBUG] [Thread-4726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:00:54.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:00:54.186 [DEBUG] [Thread-4726] [transport.py] [_log()] userauth is OK
2025-12-25T04:00:54.186 [DEBUG] [Thread-4726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:00:54.186 [DEBUG] [Thread-4726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:00:54.186 [DEBUG] [Thread-4726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:00:54.186 [DEBUG] [Thread-4726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:00:54.205 [INFO] [Thread-4726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:00:54.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:00:54.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:00:55.019 [DEBUG] [Thread-4726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:00:55.020 [DEBUG] [Thread-4726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:00:55.067 [DEBUG] [Thread-4726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:00:55.067 [DEBUG] [Thread-4726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:00:55.076 [DEBUG] [Thread-4726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:00:55.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:00:55.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:00: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') -> 00000000
2025-12-25T04:00:55.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:00:55.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:00:55.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:00:55.113 [DEBUG] [Thread-4726] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:00:58.114 [DEBUG] [Thread-4728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:01:01.405 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:01:01.406 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:01:13.169 [DEBUG] [Thread-4729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:01:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:01:25.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:01:25.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:01:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 0, 49), 0.28, 97.95, 0.0, 20.38, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:01:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:00:49
2025-12-25T04:01:26.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:01:26.152 [DEBUG] [Thread-4730] [transport.py] [_log()] starting thread (client mode): 0xb6b22290
2025-12-25T04:01:26.153 [DEBUG] [Thread-4730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:01:26.172 [DEBUG] [Thread-4730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:01:26.172 [INFO] [Thread-4730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] client lang: <none>
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] server lang: <none>
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] kex follows: False
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] Compression: none
2025-12-25T04:01:26.174 [DEBUG] [Thread-4730] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:01:26.192 [DEBUG] [Thread-4730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:01:26.192 [DEBUG] [Thread-4730] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:01:26.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:01:26.193 [DEBUG] [Thread-4730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:01:26.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:01:26.196 [DEBUG] [Thread-4730] [transport.py] [_log()] userauth is OK
2025-12-25T04:01:26.196 [DEBUG] [Thread-4730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:01:26.196 [DEBUG] [Thread-4730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:01:26.196 [DEBUG] [Thread-4730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:01:26.196 [DEBUG] [Thread-4730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:01:26.221 [INFO] [Thread-4730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:01:26.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:01:26.848 [DEBUG] [Thread-4730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:01:26.849 [DEBUG] [Thread-4730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:01:26.849 [DEBUG] [Thread-4730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:01:26.890 [DEBUG] [Thread-4730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:01:26.890 [DEBUG] [Thread-4730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:01:26.894 [DEBUG] [Thread-4730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:01:26.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:01:26.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:01:26.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:01:26.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:01:26.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:01:26.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:01:26.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:01:26.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:01:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:01:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.084095 -999.00  +11.10  15.56     95  +10.50 1 3 1 3 1     0    0 0.56 -3.07 ----- 15.5 15.6 155.4 19.8 12.8 -5.8 12.7 -5.7 12.6 -5.2 12.8 -4.5
2025-12-25T04:01:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:01:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:01:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.084095
2025-12-25T04:01:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:01:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:01:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:01:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:01:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:01:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:00:49', tmtdew=0.28, humidity=97.95, cloud=0.0, wind=20.38, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:01:05.808', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:01:26.924 [DEBUG] [Thread-4730] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:01:27.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:01:27.016 [DEBUG] [Thread-4733] [transport.py] [_log()] starting thread (client mode): 0xb6b21ff0
2025-12-25T04:01:27.016 [DEBUG] [Thread-4733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:01:27.032 [DEBUG] [Thread-4733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:01:27.032 [INFO] [Thread-4733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:01:27.039 [DEBUG] [Thread-4733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:01:27.039 [DEBUG] [Thread-4733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] client lang: <none>
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] server lang: <none>
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] kex follows: False
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] Compression: none
2025-12-25T04:01:27.040 [DEBUG] [Thread-4733] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:01:27.097 [DEBUG] [Thread-4733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:01:27.098 [DEBUG] [Thread-4733] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:01:27.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:01:27.099 [DEBUG] [Thread-4733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:01:27.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:01:27.153 [DEBUG] [Thread-4733] [transport.py] [_log()] userauth is OK
2025-12-25T04:01:27.153 [DEBUG] [Thread-4733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:01:27.154 [DEBUG] [Thread-4733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:01:27.154 [DEBUG] [Thread-4733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:01:27.154 [DEBUG] [Thread-4733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:01:27.173 [INFO] [Thread-4733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:01:27.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:01:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:01:28.058 [DEBUG] [Thread-4733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:01:28.058 [DEBUG] [Thread-4733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:01:28.106 [DEBUG] [Thread-4733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:01:28.106 [DEBUG] [Thread-4733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:01:28.115 [DEBUG] [Thread-4733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:01:28.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:01:28.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')
2025-12-25T04:01:28.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:01:28.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:01:28.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:01:28.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:01:28.150 [DEBUG] [Thread-4733] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:01:28.203 [DEBUG] [Thread-4735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:01:34.725 [DEBUG] [Thread-4736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:01:43.266 [DEBUG] [Thread-4737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:01:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:01:58.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:01:58.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:01:58.293 [DEBUG] [Thread-4738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:01:58.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 1, 55), 0.24, 97.93, 0.0, 20.43, 11.17, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:01:58.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:01:55
2025-12-25T04:01:58.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:01:59.142 [DEBUG] [Thread-4739] [transport.py] [_log()] starting thread (client mode): 0xb6b21ea0
2025-12-25T04:01:59.142 [DEBUG] [Thread-4739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:01:59.158 [DEBUG] [Thread-4739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:01:59.158 [INFO] [Thread-4739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:01:59.161 [DEBUG] [Thread-4739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:01:59.161 [DEBUG] [Thread-4739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:01:59.161 [DEBUG] [Thread-4739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:01:59.161 [DEBUG] [Thread-4739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] client lang: <none>
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] server lang: <none>
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] kex follows: False
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] Compression: none
2025-12-25T04:01:59.162 [DEBUG] [Thread-4739] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:01:59.180 [DEBUG] [Thread-4739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:01:59.181 [DEBUG] [Thread-4739] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:01:59.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:01:59.182 [DEBUG] [Thread-4739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:01:59.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:01:59.184 [DEBUG] [Thread-4739] [transport.py] [_log()] userauth is OK
2025-12-25T04:01:59.184 [DEBUG] [Thread-4739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:01:59.185 [DEBUG] [Thread-4739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:01:59.185 [DEBUG] [Thread-4739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:01:59.185 [DEBUG] [Thread-4739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:01:59.202 [INFO] [Thread-4739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:01:59.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:01:59.823 [DEBUG] [Thread-4739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:01:59.823 [DEBUG] [Thread-4739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:01:59.824 [DEBUG] [Thread-4739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:01:59.864 [DEBUG] [Thread-4739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:01:59.864 [DEBUG] [Thread-4739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:01:59.866 [DEBUG] [Thread-4739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:01:59.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:01:59.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:01:59.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:01:59.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:01:59.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:01:59.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:01:59.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:01:59.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:01:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:01:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.084443 -999.00  +11.10  19.53     95  +10.50 1 3 1 3 1     0    0 0.56 -3.23 ----- 21.0 19.5 143.6 22.6 12.9 -7.2 12.7 -8.7 12.6 -7.2 12.8 -12.9
2025-12-25T04:01:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:01:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:01:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.084443
2025-12-25T04:01:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:01:59.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:01:59.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:01:59.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:01:59.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:01:59.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:01:55', tmtdew=0.24, humidity=97.93, cloud=0.0, wind=20.43, temperature=11.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:01:35.875', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:01:59.893 [DEBUG] [Thread-4739] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:01:59.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:01:59.987 [DEBUG] [Thread-4742] [transport.py] [_log()] starting thread (client mode): 0xb6b4a740
2025-12-25T04:01:59.987 [DEBUG] [Thread-4742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:02:00.002 [DEBUG] [Thread-4742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:02:00.002 [INFO] [Thread-4742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:02:00.009 [DEBUG] [Thread-4742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] client lang: <none>
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] server lang: <none>
2025-12-25T04:02:00.010 [DEBUG] [Thread-4742] [transport.py] [_log()] kex follows: False
2025-12-25T04:02:00.011 [DEBUG] [Thread-4742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:02:00.011 [DEBUG] [Thread-4742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:02:00.011 [DEBUG] [Thread-4742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:02:00.011 [DEBUG] [Thread-4742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:02:00.011 [DEBUG] [Thread-4742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:02:00.011 [DEBUG] [Thread-4742] [transport.py] [_log()] Compression: none
2025-12-25T04:02:00.011 [DEBUG] [Thread-4742] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:02:00.068 [DEBUG] [Thread-4742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:02:00.069 [DEBUG] [Thread-4742] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:02:00.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:02:00.070 [DEBUG] [Thread-4742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:02:00.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:02:00.124 [DEBUG] [Thread-4742] [transport.py] [_log()] userauth is OK
2025-12-25T04:02:00.125 [DEBUG] [Thread-4742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:02:00.125 [DEBUG] [Thread-4742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:02:00.125 [DEBUG] [Thread-4742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:02:00.125 [DEBUG] [Thread-4742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:02:00.144 [INFO] [Thread-4742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:02:00.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:02:00.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:02:00.964 [DEBUG] [Thread-4742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:02:00.964 [DEBUG] [Thread-4742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:02:01.012 [DEBUG] [Thread-4742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:02:01.013 [DEBUG] [Thread-4742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:02:01.022 [DEBUG] [Thread-4742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:02:01.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:02:01.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:02:01.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:02:01.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:02:01.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:02:01.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:02:01.058 [DEBUG] [Thread-4742] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:02:01.695 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:02:01.701 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:02:13.327 [DEBUG] [Thread-4744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:02:28.375 [DEBUG] [Thread-4745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:02:31.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:02:31.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:02:31.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:02:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 2, 27), 0.23, 98.0, 0.0, 21.46, 11.21, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:02:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:02:27
2025-12-25T04:02:31.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:02:32.069 [DEBUG] [Thread-4746] [transport.py] [_log()] starting thread (client mode): 0xb6b4a8f0
2025-12-25T04:02:32.069 [DEBUG] [Thread-4746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:02:32.080 [DEBUG] [Thread-4746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:02:32.080 [INFO] [Thread-4746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] client lang: <none>
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] server lang: <none>
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] kex follows: False
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] Compression: none
2025-12-25T04:02:32.082 [DEBUG] [Thread-4746] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:02:32.093 [DEBUG] [Thread-4746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:02:32.093 [DEBUG] [Thread-4746] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:02:32.093 [DEBUG] [Thread-4746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:02:32.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:02:32.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:02:32.095 [DEBUG] [Thread-4746] [transport.py] [_log()] userauth is OK
2025-12-25T04:02:32.095 [DEBUG] [Thread-4746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:02:32.095 [DEBUG] [Thread-4746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:02:32.095 [DEBUG] [Thread-4746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:02:32.095 [DEBUG] [Thread-4746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:02:32.117 [INFO] [Thread-4746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:02:32.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:02:32.672 [DEBUG] [Thread-4746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:02:32.673 [DEBUG] [Thread-4746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:02:32.673 [DEBUG] [Thread-4746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:02:32.714 [DEBUG] [Thread-4746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:02:32.714 [DEBUG] [Thread-4746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:02:32.718 [DEBUG] [Thread-4746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:02:32.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:02:32.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:02:32.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:02:32.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:02:32.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:02:32.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:02:32.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:02:32.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:02:32.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:02:32.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.084790 -999.00  +11.10  14.94     95  +10.40 1 3 1 3 1     0    0 0.57 -2.73 ----- 13.8 14.9 142.2 20.9 12.8 -6.0 12.7 -6.0 -999.0 -999.0 12.8 -5.4
2025-12-25T04:02:32.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:02:32.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:02:32.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.084790
2025-12-25T04:02:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:02:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:02:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:02:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:02:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:02:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:02:27', tmtdew=0.23, humidity=98.0, cloud=0.0, wind=21.46, temperature=11.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:02:05.856', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:02:32.744 [DEBUG] [Thread-4746] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:02:32.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:02:32.837 [DEBUG] [Thread-4749] [transport.py] [_log()] starting thread (client mode): 0xb6b4b880
2025-12-25T04:02:32.837 [DEBUG] [Thread-4749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:02:32.852 [DEBUG] [Thread-4749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:02:32.852 [INFO] [Thread-4749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] client lang: <none>
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] server lang: <none>
2025-12-25T04:02:32.860 [DEBUG] [Thread-4749] [transport.py] [_log()] kex follows: False
2025-12-25T04:02:32.861 [DEBUG] [Thread-4749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:02:32.861 [DEBUG] [Thread-4749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:02:32.861 [DEBUG] [Thread-4749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:02:32.861 [DEBUG] [Thread-4749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:02:32.861 [DEBUG] [Thread-4749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:02:32.861 [DEBUG] [Thread-4749] [transport.py] [_log()] Compression: none
2025-12-25T04:02:32.861 [DEBUG] [Thread-4749] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:02:32.920 [DEBUG] [Thread-4749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:02:32.920 [DEBUG] [Thread-4749] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:02:32.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:02:32.921 [DEBUG] [Thread-4749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:02:32.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:02:32.976 [DEBUG] [Thread-4749] [transport.py] [_log()] userauth is OK
2025-12-25T04:02:32.976 [DEBUG] [Thread-4749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:02:32.977 [DEBUG] [Thread-4749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:02:32.977 [DEBUG] [Thread-4749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:02:32.977 [DEBUG] [Thread-4749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:02:32.995 [INFO] [Thread-4749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:02:32.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:02:32.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:02:33.855 [DEBUG] [Thread-4749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:02:33.856 [DEBUG] [Thread-4749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:02:33.903 [DEBUG] [Thread-4749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:02:33.903 [DEBUG] [Thread-4749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:02:33.912 [DEBUG] [Thread-4749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:02:33.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:02:33.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:02:33.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
2025-12-25T04:02:33.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:02:33.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:02:33.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:02:33.950 [DEBUG] [Thread-4749] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:02:34.798 [DEBUG] [Thread-4751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:02:43.406 [DEBUG] [Thread-4752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:02:58.462 [DEBUG] [Thread-4753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:03:01.956 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:03:01.957 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:03:03.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:03:03.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:03:03.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:03:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 2, 59), 0.29, 97.91, 0.0, 21.95, 11.17, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:03:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:02:59
2025-12-25T04:03:04.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:03:05.013 [DEBUG] [Thread-4754] [transport.py] [_log()] starting thread (client mode): 0xb6b4b430
2025-12-25T04:03:05.013 [DEBUG] [Thread-4754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:03:05.033 [DEBUG] [Thread-4754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:03:05.033 [INFO] [Thread-4754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] client lang: <none>
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] server lang: <none>
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] kex follows: False
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:03:05.036 [DEBUG] [Thread-4754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:03:05.037 [DEBUG] [Thread-4754] [transport.py] [_log()] Compression: none
2025-12-25T04:03:05.037 [DEBUG] [Thread-4754] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:03:05.055 [DEBUG] [Thread-4754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:03:05.055 [DEBUG] [Thread-4754] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:03:05.055 [DEBUG] [Thread-4754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:03:05.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:03:05.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:03:05.056 [DEBUG] [Thread-4754] [transport.py] [_log()] userauth is OK
2025-12-25T04:03:05.056 [DEBUG] [Thread-4754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:03:05.056 [DEBUG] [Thread-4754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:03:05.056 [DEBUG] [Thread-4754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:03:05.056 [DEBUG] [Thread-4754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:03:05.087 [INFO] [Thread-4754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:03:05.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:03:05.729 [DEBUG] [Thread-4754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:03:05.729 [DEBUG] [Thread-4754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:03:05.729 [DEBUG] [Thread-4754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:03:05.770 [DEBUG] [Thread-4754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:03:05.770 [DEBUG] [Thread-4754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:03:05.772 [DEBUG] [Thread-4754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:03:05.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:03:05.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:03:05.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:03:05.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:03:05.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:03:05.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:03:05.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:03:05.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.084790 -999.00  +11.10  14.94     95  +10.40 1 3 1 3 1     0    0 0.57 -2.73 ----- 13.8 14.9 142.2 20.9 12.8 -6.0 12.7 -6.0 -999.0 -999.0 12.8 -5.4
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.084790
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:02:59', tmtdew=0.29, humidity=97.91, cloud=0.0, wind=21.95, temperature=11.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:02:05.856', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:03:05.793 [DEBUG] [Thread-4754] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:03:05.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:03:05.875 [DEBUG] [Thread-4757] [transport.py] [_log()] starting thread (client mode): 0xb95f1cc0
2025-12-25T04:03:05.875 [DEBUG] [Thread-4757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:03:05.889 [DEBUG] [Thread-4757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:03:05.889 [INFO] [Thread-4757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:03:05.896 [DEBUG] [Thread-4757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:03:05.896 [DEBUG] [Thread-4757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] client lang: <none>
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] server lang: <none>
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] kex follows: False
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] Compression: none
2025-12-25T04:03:05.897 [DEBUG] [Thread-4757] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:03:05.954 [DEBUG] [Thread-4757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:03:05.954 [DEBUG] [Thread-4757] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:03:05.954 [DEBUG] [Thread-4757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:03:05.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:03:05.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:03:06.011 [DEBUG] [Thread-4757] [transport.py] [_log()] userauth is OK
2025-12-25T04:03:06.011 [DEBUG] [Thread-4757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:03:06.011 [DEBUG] [Thread-4757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:03:06.011 [DEBUG] [Thread-4757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:03:06.011 [DEBUG] [Thread-4757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:03:06.025 [INFO] [Thread-4757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:03:06.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:03:06.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:03:06.874 [DEBUG] [Thread-4757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:03:06.874 [DEBUG] [Thread-4757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:03:06.924 [DEBUG] [Thread-4757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:03:06.924 [DEBUG] [Thread-4757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:03:06.932 [DEBUG] [Thread-4757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:03:06.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:03:06.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:03:06.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:03:06.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:03:06.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:03:06.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:03:06.964 [DEBUG] [Thread-4757] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:03:13.498 [DEBUG] [Thread-4759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:03:28.551 [DEBUG] [Thread-4760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:03:34.875 [DEBUG] [Thread-4761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:03:36.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:03:36.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:03:36.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:03:37.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 3, 31), 0.28, 97.95, 0.0, 20.77, 11.17, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:03:37.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:03:31
2025-12-25T04:03:37.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:03:37.960 [DEBUG] [Thread-4762] [transport.py] [_log()] starting thread (client mode): 0xb6b48910
2025-12-25T04:03:37.960 [DEBUG] [Thread-4762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:03:37.981 [DEBUG] [Thread-4762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:03:37.981 [INFO] [Thread-4762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:03:37.984 [DEBUG] [Thread-4762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:03:37.984 [DEBUG] [Thread-4762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:03:37.984 [DEBUG] [Thread-4762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:03:37.984 [DEBUG] [Thread-4762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:03:37.984 [DEBUG] [Thread-4762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:03:37.984 [DEBUG] [Thread-4762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:03:37.984 [DEBUG] [Thread-4762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:03:37.984 [DEBUG] [Thread-4762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] client lang: <none>
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] server lang: <none>
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] kex follows: False
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] Compression: none
2025-12-25T04:03:37.985 [DEBUG] [Thread-4762] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:03:38.002 [DEBUG] [Thread-4762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:03:38.003 [DEBUG] [Thread-4762] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:03:38.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:03:38.003 [DEBUG] [Thread-4762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:03:38.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:03:38.006 [DEBUG] [Thread-4762] [transport.py] [_log()] userauth is OK
2025-12-25T04:03:38.006 [DEBUG] [Thread-4762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:03:38.006 [DEBUG] [Thread-4762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:03:38.006 [DEBUG] [Thread-4762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:03:38.007 [DEBUG] [Thread-4762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:03:38.029 [INFO] [Thread-4762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:03:38.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:03:38.649 [DEBUG] [Thread-4762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:03:38.649 [DEBUG] [Thread-4762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:03:38.650 [DEBUG] [Thread-4762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:03:38.690 [DEBUG] [Thread-4762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:03:38.690 [DEBUG] [Thread-4762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:03:38.693 [DEBUG] [Thread-4762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:03:38.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:03:38.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:03:38.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:03:38.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:03:38.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:03:38.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:03:38.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:03:38.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:03:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:03:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.085137 -999.00  +11.10  17.03     96  +10.50 1 3 1 3 1     0    0 0.59 -2.63 ----- 18.2 17.0 145.6 19.9 12.9 -5.3 12.7 -5.7 12.5 -6.4 12.8 -7.1
2025-12-25T04:03:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:03:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:03:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.085137
2025-12-25T04:03:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:03:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:03:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:03:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:03:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:03:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:03:31', tmtdew=0.28, humidity=97.95, cloud=0.0, wind=20.77, temperature=11.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:02:35.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:03:38.719 [DEBUG] [Thread-4762] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:03:38.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:03:38.814 [DEBUG] [Thread-4765] [transport.py] [_log()] starting thread (client mode): 0xb6b4a8c0
2025-12-25T04:03:38.814 [DEBUG] [Thread-4765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:03:38.828 [DEBUG] [Thread-4765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:03:38.828 [INFO] [Thread-4765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] client lang: <none>
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] server lang: <none>
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] kex follows: False
2025-12-25T04:03:38.836 [DEBUG] [Thread-4765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:03:38.837 [DEBUG] [Thread-4765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:03:38.837 [DEBUG] [Thread-4765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:03:38.837 [DEBUG] [Thread-4765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:03:38.837 [DEBUG] [Thread-4765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:03:38.837 [DEBUG] [Thread-4765] [transport.py] [_log()] Compression: none
2025-12-25T04:03:38.837 [DEBUG] [Thread-4765] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:03:38.895 [DEBUG] [Thread-4765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:03:38.896 [DEBUG] [Thread-4765] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:03:38.896 [DEBUG] [Thread-4765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:03:38.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:03:38.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:03:38.951 [DEBUG] [Thread-4765] [transport.py] [_log()] userauth is OK
2025-12-25T04:03:38.951 [DEBUG] [Thread-4765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:03:38.951 [DEBUG] [Thread-4765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:03:38.951 [DEBUG] [Thread-4765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:03:38.952 [DEBUG] [Thread-4765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:03:38.972 [INFO] [Thread-4765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:03:38.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:03:38.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:03:39.784 [DEBUG] [Thread-4765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:03:39.784 [DEBUG] [Thread-4765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:03:39.832 [DEBUG] [Thread-4765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:03:39.832 [DEBUG] [Thread-4765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:03:39.842 [DEBUG] [Thread-4765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:03:39.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:03: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')
2025-12-25T04:03:39.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
2025-12-25T04:03:39.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:03:39.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:03:39.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:03:39.879 [DEBUG] [Thread-4765] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:03:43.584 [DEBUG] [Thread-4767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:03:58.625 [DEBUG] [Thread-4768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:04:02.182 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:04:02.183 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:04:09.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:04:09.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:04:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:04:10.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 4, 3), 0.28, 97.95, 0.0, 21.32, 11.16, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:04:10.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:04:03
2025-12-25T04:04:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:04:10.860 [DEBUG] [Thread-4769] [transport.py] [_log()] starting thread (client mode): 0xb6b4a320
2025-12-25T04:04:10.860 [DEBUG] [Thread-4769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:04:10.879 [DEBUG] [Thread-4769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:04:10.879 [INFO] [Thread-4769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:04:10.882 [DEBUG] [Thread-4769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] client lang: <none>
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] server lang: <none>
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] kex follows: False
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] Compression: none
2025-12-25T04:04:10.883 [DEBUG] [Thread-4769] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:04:10.899 [DEBUG] [Thread-4769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:04:10.900 [DEBUG] [Thread-4769] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:04:10.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:04:10.901 [DEBUG] [Thread-4769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:04:10.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:04:10.903 [DEBUG] [Thread-4769] [transport.py] [_log()] userauth is OK
2025-12-25T04:04:10.903 [DEBUG] [Thread-4769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:04:10.903 [DEBUG] [Thread-4769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:04:10.903 [DEBUG] [Thread-4769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:04:10.904 [DEBUG] [Thread-4769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:04:10.922 [INFO] [Thread-4769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:04:10.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:04:11.564 [DEBUG] [Thread-4769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:04:11.565 [DEBUG] [Thread-4769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:04:11.565 [DEBUG] [Thread-4769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:04:11.605 [DEBUG] [Thread-4769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:04:11.605 [DEBUG] [Thread-4769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:04:11.608 [DEBUG] [Thread-4769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:04:11.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:04:11.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:04:11.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:04:11.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:04:11.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:04:11.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:04:11.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:04:11.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:04:11.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:04:11.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.085832 -999.00  +11.10  16.60     95  +10.50 1 3 1 3 1     0    0 0.59 -2.65 ----- 16.6 16.6 142.8 21.1 12.8 -6.6 12.8 -6.9 12.5 -11.5 12.8 -9.5
2025-12-25T04:04:11.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:04:11.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:04:11.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.085832
2025-12-25T04:04:11.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:04:11.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:04:11.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:04:11.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:04:11.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:04:11.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:04:03', tmtdew=0.28, humidity=97.95, cloud=0.0, wind=21.32, temperature=11.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:03:35.885', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:04:11.631 [DEBUG] [Thread-4769] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:04:11.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:04:11.724 [DEBUG] [Thread-4772] [transport.py] [_log()] starting thread (client mode): 0xb6b4bd00
2025-12-25T04:04:11.725 [DEBUG] [Thread-4772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:04:11.738 [DEBUG] [Thread-4772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:04:11.738 [INFO] [Thread-4772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:04:11.745 [DEBUG] [Thread-4772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:04:11.745 [DEBUG] [Thread-4772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] client lang: <none>
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] server lang: <none>
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] kex follows: False
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:04:11.746 [DEBUG] [Thread-4772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:04:11.747 [DEBUG] [Thread-4772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:04:11.747 [DEBUG] [Thread-4772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:04:11.747 [DEBUG] [Thread-4772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:04:11.747 [DEBUG] [Thread-4772] [transport.py] [_log()] Compression: none
2025-12-25T04:04:11.747 [DEBUG] [Thread-4772] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:04:11.804 [DEBUG] [Thread-4772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:04:11.804 [DEBUG] [Thread-4772] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:04:11.805 [DEBUG] [Thread-4772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:04:11.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:04:11.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:04:11.859 [DEBUG] [Thread-4772] [transport.py] [_log()] userauth is OK
2025-12-25T04:04:11.860 [DEBUG] [Thread-4772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:04:11.860 [DEBUG] [Thread-4772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:04:11.860 [DEBUG] [Thread-4772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:04:11.860 [DEBUG] [Thread-4772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:04:11.881 [INFO] [Thread-4772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:04:11.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:04:11.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:04:12.677 [DEBUG] [Thread-4772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:04:12.677 [DEBUG] [Thread-4772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:04:12.725 [DEBUG] [Thread-4772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:04:12.725 [DEBUG] [Thread-4772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:04:12.735 [DEBUG] [Thread-4772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:04:12.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:04:12.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:04:12.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:04:12.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:04:12.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:04:12.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:04:12.774 [DEBUG] [Thread-4772] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:04:13.658 [DEBUG] [Thread-4774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:04:28.705 [DEBUG] [Thread-4775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:04:34.932 [DEBUG] [Thread-4776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:04:42.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:04:42.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:04:42.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:04:43.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 4, 35), 0.28, 97.96, 0.0, 21.7, 11.17, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:04:43.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:04:35
2025-12-25T04:04:43.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:04:43.739 [DEBUG] [Thread-4777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:04:43.783 [DEBUG] [Thread-4778] [transport.py] [_log()] starting thread (client mode): 0xb95588b0
2025-12-25T04:04:43.783 [DEBUG] [Thread-4778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:04:43.803 [DEBUG] [Thread-4778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:04:43.803 [INFO] [Thread-4778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] client lang: <none>
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] server lang: <none>
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] kex follows: False
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:04:43.804 [DEBUG] [Thread-4778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:04:43.805 [DEBUG] [Thread-4778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:04:43.805 [DEBUG] [Thread-4778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:04:43.805 [DEBUG] [Thread-4778] [transport.py] [_log()] Compression: none
2025-12-25T04:04:43.805 [DEBUG] [Thread-4778] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:04:43.818 [DEBUG] [Thread-4778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:04:43.818 [DEBUG] [Thread-4778] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:04:43.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:04:43.819 [DEBUG] [Thread-4778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:04:43.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:04:43.822 [DEBUG] [Thread-4778] [transport.py] [_log()] userauth is OK
2025-12-25T04:04:43.822 [DEBUG] [Thread-4778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:04:43.822 [DEBUG] [Thread-4778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:04:43.822 [DEBUG] [Thread-4778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:04:43.822 [DEBUG] [Thread-4778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:04:43.840 [INFO] [Thread-4778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:04:43.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:04:44.496 [DEBUG] [Thread-4778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:04:44.496 [DEBUG] [Thread-4778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:04:44.496 [DEBUG] [Thread-4778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:04:44.537 [DEBUG] [Thread-4778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:04:44.537 [DEBUG] [Thread-4778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:04:44.541 [DEBUG] [Thread-4778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:04:44.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:04:44.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:04:44.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:04:44.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:04:44.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:04:44.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:04:44.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:04:44.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:04:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:04:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.086179 -999.00  +11.00  17.97     95  +10.40 1 3 1 3 1     0    0 0.58 -2.66 ----- 16.9 18.0 148.0 22.8 12.8 -9.5 12.7 -10.4 12.5 -10.3 12.8 -11.0
2025-12-25T04:04:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:04:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:04:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.086179
2025-12-25T04:04:44.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:04:44.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:04:44.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:04:44.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:04:44.567 [DEBUG] [Thread-4778] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:04:44.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:04:44.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:04:35', tmtdew=0.28, humidity=97.96, cloud=0.0, wind=21.7, temperature=11.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:04:05.866', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:04:44.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:04:44.660 [DEBUG] [Thread-4781] [transport.py] [_log()] starting thread (client mode): 0xb95593f0
2025-12-25T04:04:44.661 [DEBUG] [Thread-4781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:04:44.675 [DEBUG] [Thread-4781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:04:44.675 [INFO] [Thread-4781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:04:44.683 [DEBUG] [Thread-4781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:04:44.683 [DEBUG] [Thread-4781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:04:44.683 [DEBUG] [Thread-4781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] client lang: <none>
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] server lang: <none>
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] kex follows: False
2025-12-25T04:04:44.684 [DEBUG] [Thread-4781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:04:44.685 [DEBUG] [Thread-4781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:04:44.685 [DEBUG] [Thread-4781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:04:44.685 [DEBUG] [Thread-4781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:04:44.685 [DEBUG] [Thread-4781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:04:44.685 [DEBUG] [Thread-4781] [transport.py] [_log()] Compression: none
2025-12-25T04:04:44.685 [DEBUG] [Thread-4781] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:04:44.744 [DEBUG] [Thread-4781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:04:44.744 [DEBUG] [Thread-4781] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:04:44.745 [DEBUG] [Thread-4781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:04:44.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:04:44.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:04:44.803 [DEBUG] [Thread-4781] [transport.py] [_log()] userauth is OK
2025-12-25T04:04:44.803 [DEBUG] [Thread-4781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:04:44.804 [DEBUG] [Thread-4781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:04:44.804 [DEBUG] [Thread-4781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:04:44.804 [DEBUG] [Thread-4781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:04:44.822 [INFO] [Thread-4781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:04:44.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:04:44.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:04:45.671 [DEBUG] [Thread-4781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:04:45.671 [DEBUG] [Thread-4781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:04:45.719 [DEBUG] [Thread-4781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:04:45.719 [DEBUG] [Thread-4781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:04:45.728 [DEBUG] [Thread-4781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:04:45.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:04:45.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:04:45.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:04:45.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:04:45.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:04:45.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:04:45.762 [DEBUG] [Thread-4781] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:04:58.776 [DEBUG] [Thread-4783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:05:02.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:05:02.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:05:13.825 [DEBUG] [Thread-4784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:05:15.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:05:15.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:05:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:05:16.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 5, 7), 0.29, 97.9, 0.0, 19.52, 11.12, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:05:16.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:05:07
2025-12-25T04:05:16.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:05:16.776 [DEBUG] [Thread-4785] [transport.py] [_log()] starting thread (client mode): 0xb95588e0
2025-12-25T04:05:16.776 [DEBUG] [Thread-4785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:05:16.795 [DEBUG] [Thread-4785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:05:16.795 [INFO] [Thread-4785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] client lang: <none>
2025-12-25T04:05:16.798 [DEBUG] [Thread-4785] [transport.py] [_log()] server lang: <none>
2025-12-25T04:05:16.799 [DEBUG] [Thread-4785] [transport.py] [_log()] kex follows: False
2025-12-25T04:05:16.799 [DEBUG] [Thread-4785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:05:16.799 [DEBUG] [Thread-4785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:05:16.799 [DEBUG] [Thread-4785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:05:16.799 [DEBUG] [Thread-4785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:05:16.799 [DEBUG] [Thread-4785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:05:16.799 [DEBUG] [Thread-4785] [transport.py] [_log()] Compression: none
2025-12-25T04:05:16.799 [DEBUG] [Thread-4785] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:05:16.814 [DEBUG] [Thread-4785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:05:16.815 [DEBUG] [Thread-4785] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:05:16.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:05:16.815 [DEBUG] [Thread-4785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:05:16.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:05:16.818 [DEBUG] [Thread-4785] [transport.py] [_log()] userauth is OK
2025-12-25T04:05:16.818 [DEBUG] [Thread-4785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:05:16.818 [DEBUG] [Thread-4785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:05:16.818 [DEBUG] [Thread-4785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:05:16.818 [DEBUG] [Thread-4785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:05:16.844 [INFO] [Thread-4785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:05:16.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:05:17.483 [DEBUG] [Thread-4785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:05:17.484 [DEBUG] [Thread-4785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:05:17.484 [DEBUG] [Thread-4785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:05:17.525 [DEBUG] [Thread-4785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:05:17.525 [DEBUG] [Thread-4785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:05:17.528 [DEBUG] [Thread-4785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:05:17.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:05:17.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:05:17.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:05:17.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:05:17.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:05:17.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:05:17.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:05:17.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:05:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:05:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.086526 -999.00  +11.00  19.53     95  +10.40 1 3 1 3 1     0    0 0.57 -3.06 ----- 18.1 19.5 144.4 22.7 12.8 -13.1 12.7 -12.2 12.5 -9.0 12.7 -10.1
2025-12-25T04:05:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:05:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:05:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.086526
2025-12-25T04:05:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:05:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:05:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:05:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:05:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:05:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:05:07', tmtdew=0.29, humidity=97.9, cloud=0.0, wind=19.52, temperature=11.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:04:35.846', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.9582499999999996, nan, 3.2119999999999997, 2.885249999999999, nan, nan, nan, nan, nan, nan, nan, 1.9637499999999983, nan, nan, nan, nan, nan, nan, nan, 2.6140000000000008, 3.155000000000001, nan, nan], zp_timestamp='2025-12-25T01:37:00')
2025-12-25T04:05:17.555 [DEBUG] [Thread-4785] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:05:17.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:05:17.648 [DEBUG] [Thread-4788] [transport.py] [_log()] starting thread (client mode): 0xb6b49c90
2025-12-25T04:05:17.648 [DEBUG] [Thread-4788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:05:17.663 [DEBUG] [Thread-4788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:05:17.663 [INFO] [Thread-4788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:05:17.671 [DEBUG] [Thread-4788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:05:17.671 [DEBUG] [Thread-4788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:05:17.672 [DEBUG] [Thread-4788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:05:17.672 [DEBUG] [Thread-4788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:05:17.672 [DEBUG] [Thread-4788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:05:17.672 [DEBUG] [Thread-4788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:05:17.672 [DEBUG] [Thread-4788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:05:17.672 [DEBUG] [Thread-4788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:05:17.672 [DEBUG] [Thread-4788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:05:17.672 [DEBUG] [Thread-4788] [transport.py] [_log()] client lang: <none>
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] server lang: <none>
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] kex follows: False
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] Compression: none
2025-12-25T04:05:17.673 [DEBUG] [Thread-4788] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:05:17.731 [DEBUG] [Thread-4788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:05:17.732 [DEBUG] [Thread-4788] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:05:17.732 [DEBUG] [Thread-4788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:05:17.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:05:17.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:05:17.790 [DEBUG] [Thread-4788] [transport.py] [_log()] userauth is OK
2025-12-25T04:05:17.791 [DEBUG] [Thread-4788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:05:17.791 [DEBUG] [Thread-4788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:05:17.791 [DEBUG] [Thread-4788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:05:17.791 [DEBUG] [Thread-4788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:05:17.820 [INFO] [Thread-4788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:05:17.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:05:17.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:05:18.673 [DEBUG] [Thread-4788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:05:18.673 [DEBUG] [Thread-4788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:05:18.721 [DEBUG] [Thread-4788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:05:18.721 [DEBUG] [Thread-4788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:05:18.732 [DEBUG] [Thread-4788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:05:18.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:05:18.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:05: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
2025-12-25T04:05:18.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:05:18.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:05:18.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:05:18.772 [DEBUG] [Thread-4788] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:05:28.862 [DEBUG] [Thread-4790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:05:34.989 [DEBUG] [Thread-4791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:05:43.911 [DEBUG] [Thread-4792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:05:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:05:48.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:05:48.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:05:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 5, 39), 0.28, 97.96, 0.0, 19.04, 11.11, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:05:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:05:39
2025-12-25T04:05:49.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:05:49.765 [DEBUG] [Thread-4793] [transport.py] [_log()] starting thread (client mode): 0xb95f0d30
2025-12-25T04:05:49.765 [DEBUG] [Thread-4793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:05:49.777 [DEBUG] [Thread-4793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:05:49.777 [INFO] [Thread-4793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] client lang: <none>
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] server lang: <none>
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] kex follows: False
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] Compression: none
2025-12-25T04:05:49.778 [DEBUG] [Thread-4793] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:05:49.794 [DEBUG] [Thread-4793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:05:49.794 [DEBUG] [Thread-4793] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:05:49.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:05:49.795 [DEBUG] [Thread-4793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:05:49.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:05:49.797 [DEBUG] [Thread-4793] [transport.py] [_log()] userauth is OK
2025-12-25T04:05:49.797 [DEBUG] [Thread-4793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:05:49.797 [DEBUG] [Thread-4793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:05:49.797 [DEBUG] [Thread-4793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:05:49.797 [DEBUG] [Thread-4793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:05:49.811 [INFO] [Thread-4793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:05:49.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:05:50.401 [DEBUG] [Thread-4793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:05:50.401 [DEBUG] [Thread-4793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:05:50.402 [DEBUG] [Thread-4793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:05:50.442 [DEBUG] [Thread-4793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:05:50.442 [DEBUG] [Thread-4793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:05:50.446 [DEBUG] [Thread-4793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:05:50.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:05:50.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:05:50.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:05:50.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:05:50.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:05:50.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:05:50.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:05:50.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:05:50.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:05:50.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.086873 -999.00  +11.00  20.85     95  +10.40 1 3 1 3 1     0    0 0.57 -3.12 ...Sw 20.0 20.9 141.2 24.1 12.8 -8.4 12.7 -7.1 12.5 -7.2 12.7 -7.3
2025-12-25T04:05:50.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:05:50.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:05:50.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.086873
2025-12-25T04:05:50.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:05:50.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:05:50.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:05:50.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:05:50.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:05:50.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:05:39', tmtdew=0.28, humidity=97.96, cloud=0.0, wind=19.04, temperature=11.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:05:05.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:05:50.473 [DEBUG] [Thread-4793] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:05:50.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:05:51.582 [DEBUG] [Thread-4796] [transport.py] [_log()] starting thread (client mode): 0xb6b4bd30
2025-12-25T04:05:51.582 [DEBUG] [Thread-4796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:05:51.600 [DEBUG] [Thread-4796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:05:51.601 [INFO] [Thread-4796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:05:51.608 [DEBUG] [Thread-4796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:05:51.608 [DEBUG] [Thread-4796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:05:51.608 [DEBUG] [Thread-4796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:05:51.608 [DEBUG] [Thread-4796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] client lang: <none>
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] server lang: <none>
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] kex follows: False
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:05:51.609 [DEBUG] [Thread-4796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:05:51.610 [DEBUG] [Thread-4796] [transport.py] [_log()] Compression: none
2025-12-25T04:05:51.610 [DEBUG] [Thread-4796] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:05:51.670 [DEBUG] [Thread-4796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:05:51.671 [DEBUG] [Thread-4796] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:05:51.671 [DEBUG] [Thread-4796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:05:51.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:05:51.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:05:51.726 [DEBUG] [Thread-4796] [transport.py] [_log()] userauth is OK
2025-12-25T04:05:51.727 [DEBUG] [Thread-4796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:05:51.727 [DEBUG] [Thread-4796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:05:51.727 [DEBUG] [Thread-4796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:05:51.727 [DEBUG] [Thread-4796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:05:51.746 [INFO] [Thread-4796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:05:51.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:05:51.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:05:52.615 [DEBUG] [Thread-4796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:05:52.616 [DEBUG] [Thread-4796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:05:52.664 [DEBUG] [Thread-4796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:05:52.664 [DEBUG] [Thread-4796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:05:52.673 [DEBUG] [Thread-4796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:05:52.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:05:52.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:05:52.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:05:52.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:05:52.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:05:52.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:05:52.710 [DEBUG] [Thread-4796] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:05:58.945 [DEBUG] [Thread-4798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:06:02.589 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:06:02.590 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:06:14.000 [DEBUG] [Thread-4799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:06:22.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:06:22.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:06:22.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:06:23.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 6, 11), 0.29, 97.91, 0.0, 19.13, 11.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:06:23.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:06:11
2025-12-25T04:06:23.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:06:23.751 [DEBUG] [Thread-4800] [transport.py] [_log()] starting thread (client mode): 0xb95f3430
2025-12-25T04:06:23.751 [DEBUG] [Thread-4800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:06:23.771 [DEBUG] [Thread-4800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:06:23.771 [INFO] [Thread-4800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] client lang: <none>
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] server lang: <none>
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] kex follows: False
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] Compression: none
2025-12-25T04:06:23.774 [DEBUG] [Thread-4800] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:06:23.787 [DEBUG] [Thread-4800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:06:23.787 [DEBUG] [Thread-4800] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:06:23.788 [DEBUG] [Thread-4800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:06:23.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:06:23.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:06:23.788 [DEBUG] [Thread-4800] [transport.py] [_log()] userauth is OK
2025-12-25T04:06:23.788 [DEBUG] [Thread-4800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:06:23.788 [DEBUG] [Thread-4800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:06:23.788 [DEBUG] [Thread-4800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:06:23.788 [DEBUG] [Thread-4800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:06:23.803 [INFO] [Thread-4800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:06:23.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:06:24.441 [DEBUG] [Thread-4800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:06:24.442 [DEBUG] [Thread-4800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:06:24.442 [DEBUG] [Thread-4800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:06:24.483 [DEBUG] [Thread-4800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:06:24.483 [DEBUG] [Thread-4800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:06:24.487 [DEBUG] [Thread-4800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:06:24.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:06:24.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:06:24.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:06:24.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:06:24.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:06:24.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:06:24.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:06:24.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:06:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:06:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.087220 -999.00  +11.00  15.19     95  +10.40 1 3 1 3 1     0    0 0.56 -3.24 zN.sW 15.5 15.2 133.6 22.2 12.8 -6.6 12.7 -6.4 12.5 -8.6 12.7 -7.2
2025-12-25T04:06:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:06:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:06:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.087220
2025-12-25T04:06:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:06:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:06:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:06:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:06:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:06:24.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:06:11', tmtdew=0.29, humidity=97.91, cloud=0.0, wind=19.13, temperature=11.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:05:35.808', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:06:24.513 [DEBUG] [Thread-4800] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:06:24.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:06:24.610 [DEBUG] [Thread-4803] [transport.py] [_log()] starting thread (client mode): 0xb95b1db0
2025-12-25T04:06:24.610 [DEBUG] [Thread-4803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:06:24.624 [DEBUG] [Thread-4803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:06:24.624 [INFO] [Thread-4803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:06:24.631 [DEBUG] [Thread-4803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:06:24.632 [DEBUG] [Thread-4803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:06:24.632 [DEBUG] [Thread-4803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:06:24.632 [DEBUG] [Thread-4803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:06:24.632 [DEBUG] [Thread-4803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:06:24.632 [DEBUG] [Thread-4803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:06:24.632 [DEBUG] [Thread-4803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:06:24.632 [DEBUG] [Thread-4803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:06:24.632 [DEBUG] [Thread-4803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:06:24.633 [DEBUG] [Thread-4803] [transport.py] [_log()] client lang: <none>
2025-12-25T04:06:24.633 [DEBUG] [Thread-4803] [transport.py] [_log()] server lang: <none>
2025-12-25T04:06:24.633 [DEBUG] [Thread-4803] [transport.py] [_log()] kex follows: False
2025-12-25T04:06:24.633 [DEBUG] [Thread-4803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:06:24.633 [DEBUG] [Thread-4803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:06:24.633 [DEBUG] [Thread-4803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:06:24.633 [DEBUG] [Thread-4803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:06:24.633 [DEBUG] [Thread-4803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:06:24.634 [DEBUG] [Thread-4803] [transport.py] [_log()] Compression: none
2025-12-25T04:06:24.634 [DEBUG] [Thread-4803] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:06:24.691 [DEBUG] [Thread-4803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:06:24.692 [DEBUG] [Thread-4803] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:06:24.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:06:24.693 [DEBUG] [Thread-4803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:06:24.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:06:24.750 [DEBUG] [Thread-4803] [transport.py] [_log()] userauth is OK
2025-12-25T04:06:24.750 [DEBUG] [Thread-4803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:06:24.750 [DEBUG] [Thread-4803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:06:24.750 [DEBUG] [Thread-4803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:06:24.750 [DEBUG] [Thread-4803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:06:24.769 [INFO] [Thread-4803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:06:24.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:06:24.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:06:25.601 [DEBUG] [Thread-4803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:06:25.601 [DEBUG] [Thread-4803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:06:25.649 [DEBUG] [Thread-4803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:06:25.650 [DEBUG] [Thread-4803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:06:25.658 [DEBUG] [Thread-4803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:06:25.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:06:25.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:06:25.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:06:25.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:06:25.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:06:25.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:06:25.690 [DEBUG] [Thread-4803] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:06:29.029 [DEBUG] [Thread-4805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:06:35.065 [DEBUG] [Thread-4806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:06:44.083 [DEBUG] [Thread-4807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:06:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:06:55.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:06:55.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:06:56.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 6, 43), 0.28, 98.0, 0.0, 19.37, 11.12, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:06:56.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:06:43
2025-12-25T04:06:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:06:56.677 [DEBUG] [Thread-4808] [transport.py] [_log()] starting thread (client mode): 0xb95586a0
2025-12-25T04:06:56.677 [DEBUG] [Thread-4808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:06:56.696 [DEBUG] [Thread-4808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:06:56.696 [INFO] [Thread-4808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:06:56.699 [DEBUG] [Thread-4808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:06:56.699 [DEBUG] [Thread-4808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:06:56.699 [DEBUG] [Thread-4808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:06:56.699 [DEBUG] [Thread-4808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:06:56.699 [DEBUG] [Thread-4808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:06:56.699 [DEBUG] [Thread-4808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:06:56.699 [DEBUG] [Thread-4808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:06:56.699 [DEBUG] [Thread-4808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] client lang: <none>
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] server lang: <none>
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] kex follows: False
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] Compression: none
2025-12-25T04:06:56.700 [DEBUG] [Thread-4808] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:06:56.708 [DEBUG] [Thread-4808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:06:56.709 [DEBUG] [Thread-4808] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:06:56.709 [DEBUG] [Thread-4808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:06:56.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:06:56.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:06:56.711 [DEBUG] [Thread-4808] [transport.py] [_log()] userauth is OK
2025-12-25T04:06:56.711 [DEBUG] [Thread-4808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:06:56.711 [DEBUG] [Thread-4808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:06:56.712 [DEBUG] [Thread-4808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:06:56.712 [DEBUG] [Thread-4808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:06:56.747 [INFO] [Thread-4808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:06:56.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:06:57.394 [DEBUG] [Thread-4808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:06:57.394 [DEBUG] [Thread-4808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:06:57.394 [DEBUG] [Thread-4808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:06:57.435 [DEBUG] [Thread-4808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:06:57.435 [DEBUG] [Thread-4808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:06:57.438 [DEBUG] [Thread-4808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:06:57.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:06:57.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:06:57.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:06:57.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:06:57.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:06:57.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:06:57.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.087568 -999.00  +11.10  12.44     96  +10.50 1 3 1 3 1     0    0 0.54 -3.34 zN.sW 12.7 12.4 149.4 19.1 12.8 -8.7 12.7 -8.6 12.5 -6.4 12.7 -8.9
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.087568
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:06:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:06:43', tmtdew=0.28, humidity=98.0, cloud=0.0, wind=19.37, temperature=11.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:06:05.875', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:06:57.457 [DEBUG] [Thread-4808] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:06:57.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:06:57.541 [DEBUG] [Thread-4811] [transport.py] [_log()] starting thread (client mode): 0xb95f1930
2025-12-25T04:06:57.541 [DEBUG] [Thread-4811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:06:57.560 [DEBUG] [Thread-4811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:06:57.560 [INFO] [Thread-4811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:06:57.567 [DEBUG] [Thread-4811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:06:57.567 [DEBUG] [Thread-4811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:06:57.567 [DEBUG] [Thread-4811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] client lang: <none>
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] server lang: <none>
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] kex follows: False
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] Compression: none
2025-12-25T04:06:57.568 [DEBUG] [Thread-4811] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:06:57.624 [DEBUG] [Thread-4811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:06:57.624 [DEBUG] [Thread-4811] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:06:57.624 [DEBUG] [Thread-4811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:06:57.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:06:57.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:06:57.681 [DEBUG] [Thread-4811] [transport.py] [_log()] userauth is OK
2025-12-25T04:06:57.681 [DEBUG] [Thread-4811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:06:57.681 [DEBUG] [Thread-4811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:06:57.681 [DEBUG] [Thread-4811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:06:57.681 [DEBUG] [Thread-4811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:06:57.695 [INFO] [Thread-4811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:06:57.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:06:57.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:06:58.559 [DEBUG] [Thread-4811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:06:58.559 [DEBUG] [Thread-4811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:06:58.607 [DEBUG] [Thread-4811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:06:58.607 [DEBUG] [Thread-4811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:06:58.616 [DEBUG] [Thread-4811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:06:58.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:06:58.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:06:58.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:06:58.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:06:58.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:06:58.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:06:58.647 [DEBUG] [Thread-4811] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:06:59.114 [DEBUG] [Thread-4813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:07:02.793 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:07:02.794 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:07:14.155 [DEBUG] [Thread-4814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:07:28.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:07:28.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:07:28.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:07:29.187 [DEBUG] [Thread-4815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:07:29.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 7, 15), 0.28, 97.98, 0.0, 19.73, 11.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:07:29.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:07:15
2025-12-25T04:07:29.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:07:29.633 [DEBUG] [Thread-4816] [transport.py] [_log()] starting thread (client mode): 0xb95f3520
2025-12-25T04:07:29.633 [DEBUG] [Thread-4816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:07:29.654 [DEBUG] [Thread-4816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:07:29.654 [INFO] [Thread-4816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:07:29.657 [DEBUG] [Thread-4816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] client lang: <none>
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] server lang: <none>
2025-12-25T04:07:29.658 [DEBUG] [Thread-4816] [transport.py] [_log()] kex follows: False
2025-12-25T04:07:29.659 [DEBUG] [Thread-4816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:07:29.659 [DEBUG] [Thread-4816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:07:29.659 [DEBUG] [Thread-4816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:07:29.659 [DEBUG] [Thread-4816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:07:29.659 [DEBUG] [Thread-4816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:07:29.659 [DEBUG] [Thread-4816] [transport.py] [_log()] Compression: none
2025-12-25T04:07:29.659 [DEBUG] [Thread-4816] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:07:29.679 [DEBUG] [Thread-4816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:07:29.680 [DEBUG] [Thread-4816] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:07:29.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:07:29.682 [DEBUG] [Thread-4816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:07:29.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:07:29.684 [DEBUG] [Thread-4816] [transport.py] [_log()] userauth is OK
2025-12-25T04:07:29.684 [DEBUG] [Thread-4816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:07:29.684 [DEBUG] [Thread-4816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:07:29.684 [DEBUG] [Thread-4816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:07:29.684 [DEBUG] [Thread-4816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:07:29.721 [INFO] [Thread-4816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:07:29.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:07:30.358 [DEBUG] [Thread-4816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:07:30.358 [DEBUG] [Thread-4816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:07:30.359 [DEBUG] [Thread-4816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:07:30.399 [DEBUG] [Thread-4816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:07:30.399 [DEBUG] [Thread-4816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:07:30.403 [DEBUG] [Thread-4816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:07:30.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:07:30.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:07:30.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:07:30.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:07:30.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:07:30.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:07:30.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:07:30.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:07:30.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:07:30.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.087915 -999.00  +11.10  13.67     96  +10.50 1 3 1 3 1     0    0 0.55 -3.20 ----- 14.6 13.7 146.4 18.6 12.8 -8.6 12.7 -9.1 12.5 -6.5 12.7 -8.8
2025-12-25T04:07:30.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:07:30.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:07:30.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.087915
2025-12-25T04:07:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:07:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:07:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:07:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:07:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:07:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:07:15', tmtdew=0.28, humidity=97.98, cloud=0.0, wind=19.73, temperature=11.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:06:35.856', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:07:30.430 [DEBUG] [Thread-4816] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:07:30.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:07:30.523 [DEBUG] [Thread-4819] [transport.py] [_log()] starting thread (client mode): 0xb95b18d0
2025-12-25T04:07:30.524 [DEBUG] [Thread-4819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:07:30.539 [DEBUG] [Thread-4819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:07:30.539 [INFO] [Thread-4819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:07:30.547 [DEBUG] [Thread-4819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:07:30.547 [DEBUG] [Thread-4819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:07:30.547 [DEBUG] [Thread-4819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:07:30.547 [DEBUG] [Thread-4819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:07:30.547 [DEBUG] [Thread-4819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:07:30.547 [DEBUG] [Thread-4819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] client lang: <none>
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] server lang: <none>
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] kex follows: False
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] Compression: none
2025-12-25T04:07:30.548 [DEBUG] [Thread-4819] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:07:30.605 [DEBUG] [Thread-4819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:07:30.606 [DEBUG] [Thread-4819] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:07:30.606 [DEBUG] [Thread-4819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:07:30.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:07:30.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:07:30.661 [DEBUG] [Thread-4819] [transport.py] [_log()] userauth is OK
2025-12-25T04:07:30.662 [DEBUG] [Thread-4819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:07:30.662 [DEBUG] [Thread-4819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:07:30.662 [DEBUG] [Thread-4819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:07:30.662 [DEBUG] [Thread-4819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:07:30.681 [INFO] [Thread-4819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:07:30.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:07:30.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:07:31.475 [DEBUG] [Thread-4819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:07:31.475 [DEBUG] [Thread-4819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:07:31.523 [DEBUG] [Thread-4819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:07:31.523 [DEBUG] [Thread-4819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:07:31.532 [DEBUG] [Thread-4819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:07:31.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:07:31.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')
2025-12-25T04:07:31.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
2025-12-25T04:07:31.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:07:31.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:07:31.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:07:31.569 [DEBUG] [Thread-4819] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:07:35.138 [DEBUG] [Thread-4821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:07:44.220 [DEBUG] [Thread-4822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:07:59.278 [DEBUG] [Thread-4823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:08:01.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:08:01.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:08:01.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:08:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 7, 47), 0.28, 97.96, 0.0, 16.94, 11.12, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:08:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:07:47
2025-12-25T04:08:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:08:02.553 [DEBUG] [Thread-4824] [transport.py] [_log()] starting thread (client mode): 0xb6b37580
2025-12-25T04:08:02.553 [DEBUG] [Thread-4824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:08:02.574 [DEBUG] [Thread-4824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:08:02.574 [INFO] [Thread-4824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] client lang: <none>
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] server lang: <none>
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] kex follows: False
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:08:02.577 [DEBUG] [Thread-4824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:08:02.578 [DEBUG] [Thread-4824] [transport.py] [_log()] Compression: none
2025-12-25T04:08:02.578 [DEBUG] [Thread-4824] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:08:02.595 [DEBUG] [Thread-4824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:08:02.595 [DEBUG] [Thread-4824] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:08:02.596 [DEBUG] [Thread-4824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:08:02.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:08:02.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:08:02.598 [DEBUG] [Thread-4824] [transport.py] [_log()] userauth is OK
2025-12-25T04:08:02.599 [DEBUG] [Thread-4824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:08:02.599 [DEBUG] [Thread-4824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:08:02.599 [DEBUG] [Thread-4824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:08:02.599 [DEBUG] [Thread-4824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:08:02.637 [INFO] [Thread-4824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:08:02.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:08:02.999 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:08:03.000 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:08:03.252 [DEBUG] [Thread-4824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:08:03.252 [DEBUG] [Thread-4824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:08:03.252 [DEBUG] [Thread-4824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:08:03.293 [DEBUG] [Thread-4824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:08:03.293 [DEBUG] [Thread-4824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:08:03.296 [DEBUG] [Thread-4824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:08:03.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:08:03.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:08:03.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:08:03.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:08:03.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:08:03.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:08:03.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:08:03.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:08:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:08:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.088609 -999.00  +11.10  18.61     96  +10.40 1 3 1 3 1     0    0 0.56 -2.85 ....W 17.8 18.6 144.2 22.6 12.8 -8.8 12.7 -8.9 12.5 -9.2 12.8 -9.1
2025-12-25T04:08:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:08:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:08:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.088609
2025-12-25T04:08:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:08:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:08:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:08:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:08:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:08:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:07:47', tmtdew=0.28, humidity=97.96, cloud=0.0, wind=16.94, temperature=11.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:07:35.818', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:08:03.322 [DEBUG] [Thread-4824] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:08:03.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:08:03.416 [DEBUG] [Thread-4827] [transport.py] [_log()] starting thread (client mode): 0xb6b23670
2025-12-25T04:08:03.416 [DEBUG] [Thread-4827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:08:03.431 [DEBUG] [Thread-4827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:08:03.431 [INFO] [Thread-4827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:08:03.439 [DEBUG] [Thread-4827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:08:03.439 [DEBUG] [Thread-4827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] client lang: <none>
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] server lang: <none>
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] kex follows: False
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] Compression: none
2025-12-25T04:08:03.440 [DEBUG] [Thread-4827] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:08:03.499 [DEBUG] [Thread-4827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:08:03.499 [DEBUG] [Thread-4827] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:08:03.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:08:03.500 [DEBUG] [Thread-4827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:08:03.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:08:03.557 [DEBUG] [Thread-4827] [transport.py] [_log()] userauth is OK
2025-12-25T04:08:03.557 [DEBUG] [Thread-4827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:08:03.558 [DEBUG] [Thread-4827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:08:03.558 [DEBUG] [Thread-4827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:08:03.558 [DEBUG] [Thread-4827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:08:03.581 [INFO] [Thread-4827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:08:03.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:08:03.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:08:04.427 [DEBUG] [Thread-4827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:08:04.427 [DEBUG] [Thread-4827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:08:04.476 [DEBUG] [Thread-4827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:08:04.476 [DEBUG] [Thread-4827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:08:04.485 [DEBUG] [Thread-4827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:08:04.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:08:04.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')
2025-12-25T04:08:04.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:08:04.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:08:04.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:08:04.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:08:04.520 [DEBUG] [Thread-4827] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:08:14.316 [DEBUG] [Thread-4829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:08:29.367 [DEBUG] [Thread-4830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:08:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:08:34.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:08:34.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:08:35.191 [DEBUG] [Thread-4831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:08:35.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 8, 20), 0.28, 97.98, 0.0, 16.89, 11.16, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:08:35.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:08:20
2025-12-25T04:08:35.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:08:35.522 [DEBUG] [Thread-4832] [transport.py] [_log()] starting thread (client mode): 0xb6b36d70
2025-12-25T04:08:35.522 [DEBUG] [Thread-4832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:08:35.542 [DEBUG] [Thread-4832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:08:35.542 [INFO] [Thread-4832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] client lang: <none>
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] server lang: <none>
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] kex follows: False
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] Compression: none
2025-12-25T04:08:35.546 [DEBUG] [Thread-4832] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:08:35.563 [DEBUG] [Thread-4832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:08:35.563 [DEBUG] [Thread-4832] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:08:35.564 [DEBUG] [Thread-4832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:08:35.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:08:35.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:08:35.566 [DEBUG] [Thread-4832] [transport.py] [_log()] userauth is OK
2025-12-25T04:08:35.566 [DEBUG] [Thread-4832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:08:35.566 [DEBUG] [Thread-4832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:08:35.566 [DEBUG] [Thread-4832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:08:35.566 [DEBUG] [Thread-4832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:08:35.587 [INFO] [Thread-4832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:08:35.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:08:36.212 [DEBUG] [Thread-4832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:08:36.212 [DEBUG] [Thread-4832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:08:36.212 [DEBUG] [Thread-4832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:08:36.253 [DEBUG] [Thread-4832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:08:36.253 [DEBUG] [Thread-4832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:08:36.257 [DEBUG] [Thread-4832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:08:36.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:08:36.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:08:36.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:08:36.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:08:36.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:08:36.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:08:36.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:08:36.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:08:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:08:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.088956 -999.00  +11.10  16.73     96  +10.40 1 3 1 3 1     0    0 0.57 -2.42 ....W 13.7 16.7 145.6 22.6 12.7 -9.5 12.7 -9.0 12.4 -9.7 12.8 -9.7
2025-12-25T04:08:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:08:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:08:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.088956
2025-12-25T04:08:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:08:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:08:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:08:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:08:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:08:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:08:20', tmtdew=0.28, humidity=97.98, cloud=0.0, wind=16.89, temperature=11.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:08:05.798', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:08:36.285 [DEBUG] [Thread-4832] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:08:36.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:08:36.379 [DEBUG] [Thread-4835] [transport.py] [_log()] starting thread (client mode): 0xb6b37df0
2025-12-25T04:08:36.379 [DEBUG] [Thread-4835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:08:36.392 [DEBUG] [Thread-4835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:08:36.392 [INFO] [Thread-4835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:08:36.400 [DEBUG] [Thread-4835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:08:36.400 [DEBUG] [Thread-4835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:08:36.400 [DEBUG] [Thread-4835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:08:36.400 [DEBUG] [Thread-4835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:08:36.400 [DEBUG] [Thread-4835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:08:36.400 [DEBUG] [Thread-4835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] client lang: <none>
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] server lang: <none>
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] kex follows: False
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] Compression: none
2025-12-25T04:08:36.401 [DEBUG] [Thread-4835] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:08:36.457 [DEBUG] [Thread-4835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:08:36.458 [DEBUG] [Thread-4835] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:08:36.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:08:36.459 [DEBUG] [Thread-4835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:08:36.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:08:36.513 [DEBUG] [Thread-4835] [transport.py] [_log()] userauth is OK
2025-12-25T04:08:36.514 [DEBUG] [Thread-4835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:08:36.514 [DEBUG] [Thread-4835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:08:36.514 [DEBUG] [Thread-4835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:08:36.514 [DEBUG] [Thread-4835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:08:36.533 [INFO] [Thread-4835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:08:36.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:08:36.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:08:37.340 [DEBUG] [Thread-4835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:08:37.340 [DEBUG] [Thread-4835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:08:37.388 [DEBUG] [Thread-4835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:08:37.388 [DEBUG] [Thread-4835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:08:37.397 [DEBUG] [Thread-4835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:08:37.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:08:37.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:08:37.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:08:37.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:08:37.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:08:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:08:37.433 [DEBUG] [Thread-4835] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:08:44.405 [DEBUG] [Thread-4837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:08:59.451 [DEBUG] [Thread-4838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:09:03.202 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:09:03.204 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:09:07.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:09:07.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:09:07.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:09:08.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 8, 52), 0.28, 97.98, 0.0, 18.35, 11.12, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:09:08.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:08:52
2025-12-25T04:09:08.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:09:08.406 [DEBUG] [Thread-4839] [transport.py] [_log()] starting thread (client mode): 0xb95f20b0
2025-12-25T04:09:08.406 [DEBUG] [Thread-4839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:09:08.428 [DEBUG] [Thread-4839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:09:08.428 [INFO] [Thread-4839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:09:08.429 [DEBUG] [Thread-4839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] client lang: <none>
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] server lang: <none>
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] kex follows: False
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] Compression: none
2025-12-25T04:09:08.430 [DEBUG] [Thread-4839] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:09:08.439 [DEBUG] [Thread-4839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:09:08.439 [DEBUG] [Thread-4839] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:09:08.440 [DEBUG] [Thread-4839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:09:08.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:09:08.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:09:08.441 [DEBUG] [Thread-4839] [transport.py] [_log()] userauth is OK
2025-12-25T04:09:08.441 [DEBUG] [Thread-4839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:09:08.442 [DEBUG] [Thread-4839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:09:08.442 [DEBUG] [Thread-4839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:09:08.442 [DEBUG] [Thread-4839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:09:08.459 [INFO] [Thread-4839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:09:08.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:09:09.108 [DEBUG] [Thread-4839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:09:09.108 [DEBUG] [Thread-4839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:09:09.108 [DEBUG] [Thread-4839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:09:09.149 [DEBUG] [Thread-4839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:09:09.149 [DEBUG] [Thread-4839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:09:09.152 [DEBUG] [Thread-4839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:09:09.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:09:09.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:09:09.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:09:09.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:09:09.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:09:09.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:09:09.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:09:09.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:09:09.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:09:09.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.089304 -999.00  +11.00  16.20     96  +10.40 1 3 1 3 1     0    0 0.58 -2.38 ...Sw 17.8 16.2 141.8 21.1 12.8 -8.3 12.7 -7.8 12.4 -7.6 12.7 -8.5
2025-12-25T04:09:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:09:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:09:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.089304
2025-12-25T04:09:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:09:09.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:09:09.180 [DEBUG] [Thread-4839] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:09:09.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:09:09.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:09:09.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:09:09.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:08:52', tmtdew=0.28, humidity=97.98, cloud=0.0, wind=18.35, temperature=11.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:08:35.866', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:09:09.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:09:09.274 [DEBUG] [Thread-4842] [transport.py] [_log()] starting thread (client mode): 0xb6b49420
2025-12-25T04:09:09.274 [DEBUG] [Thread-4842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:09:09.288 [DEBUG] [Thread-4842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:09:09.288 [INFO] [Thread-4842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] client lang: <none>
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] server lang: <none>
2025-12-25T04:09:09.296 [DEBUG] [Thread-4842] [transport.py] [_log()] kex follows: False
2025-12-25T04:09:09.297 [DEBUG] [Thread-4842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:09:09.297 [DEBUG] [Thread-4842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:09:09.297 [DEBUG] [Thread-4842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:09:09.297 [DEBUG] [Thread-4842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:09:09.297 [DEBUG] [Thread-4842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:09:09.297 [DEBUG] [Thread-4842] [transport.py] [_log()] Compression: none
2025-12-25T04:09:09.297 [DEBUG] [Thread-4842] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:09:09.357 [DEBUG] [Thread-4842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:09:09.357 [DEBUG] [Thread-4842] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:09:09.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:09:09.358 [DEBUG] [Thread-4842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:09:09.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:09:09.413 [DEBUG] [Thread-4842] [transport.py] [_log()] userauth is OK
2025-12-25T04:09:09.413 [DEBUG] [Thread-4842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:09:09.413 [DEBUG] [Thread-4842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:09:09.413 [DEBUG] [Thread-4842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:09:09.413 [DEBUG] [Thread-4842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:09:09.433 [INFO] [Thread-4842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:09:09.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:09:09.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:09:10.306 [DEBUG] [Thread-4842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:09:10.306 [DEBUG] [Thread-4842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:09:10.355 [DEBUG] [Thread-4842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:09:10.355 [DEBUG] [Thread-4842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:09:10.365 [DEBUG] [Thread-4842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:09:10.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:09:10.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:09:10.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:09:10.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:09:10.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:09:10.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:09:10.405 [DEBUG] [Thread-4842] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:09:14.483 [DEBUG] [Thread-4844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:09:29.541 [DEBUG] [Thread-4845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:09:35.254 [DEBUG] [Thread-4846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:09:40.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:09:40.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:09:40.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:09:41.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 9, 24), 0.28, 97.98, 0.0, 17.12, 11.16, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:09:41.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:09:24
2025-12-25T04:09:41.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:09:41.407 [DEBUG] [Thread-4847] [transport.py] [_log()] starting thread (client mode): 0xb9559480
2025-12-25T04:09:41.407 [DEBUG] [Thread-4847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:09:41.429 [DEBUG] [Thread-4847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:09:41.429 [INFO] [Thread-4847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:09:41.432 [DEBUG] [Thread-4847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:09:41.432 [DEBUG] [Thread-4847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:09:41.432 [DEBUG] [Thread-4847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] client lang: <none>
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] server lang: <none>
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] kex follows: False
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] Compression: none
2025-12-25T04:09:41.433 [DEBUG] [Thread-4847] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:09:41.451 [DEBUG] [Thread-4847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:09:41.451 [DEBUG] [Thread-4847] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:09:41.452 [DEBUG] [Thread-4847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:09:41.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:09:41.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:09:41.454 [DEBUG] [Thread-4847] [transport.py] [_log()] userauth is OK
2025-12-25T04:09:41.454 [DEBUG] [Thread-4847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:09:41.454 [DEBUG] [Thread-4847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:09:41.454 [DEBUG] [Thread-4847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:09:41.454 [DEBUG] [Thread-4847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:09:41.476 [INFO] [Thread-4847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:09:41.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:09:42.140 [DEBUG] [Thread-4847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:09:42.140 [DEBUG] [Thread-4847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:09:42.141 [DEBUG] [Thread-4847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:09:42.181 [DEBUG] [Thread-4847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:09:42.181 [DEBUG] [Thread-4847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:09:42.184 [DEBUG] [Thread-4847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:09:42.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:09:42.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:09:42.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:09:42.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:09:42.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:09:42.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:09:42.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:09:42.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:09:42.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:09:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.089651 -999.00  +11.00  14.75     96  +10.40 1 3 1 3 1     0    0 0.59 -2.55 ----- 19.7 14.8 138.2 22.1 12.8 -7.9 12.7 -8.5 12.4 -8.0 12.7 -9.0
2025-12-25T04:09:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:09:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:09:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.089651
2025-12-25T04:09:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:09:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:09:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:09:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:09:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:09:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:09:24', tmtdew=0.28, humidity=97.98, cloud=0.0, wind=17.12, temperature=11.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:09:05.846', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:09:42.211 [DEBUG] [Thread-4847] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:09:42.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:09:42.305 [DEBUG] [Thread-4850] [transport.py] [_log()] starting thread (client mode): 0xb6b21cf0
2025-12-25T04:09:42.306 [DEBUG] [Thread-4850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:09:42.320 [DEBUG] [Thread-4850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:09:42.321 [INFO] [Thread-4850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:09:42.328 [DEBUG] [Thread-4850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:09:42.329 [DEBUG] [Thread-4850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:09:42.329 [DEBUG] [Thread-4850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:09:42.329 [DEBUG] [Thread-4850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:09:42.329 [DEBUG] [Thread-4850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:09:42.329 [DEBUG] [Thread-4850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:09:42.329 [DEBUG] [Thread-4850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:09:42.329 [DEBUG] [Thread-4850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:09:42.329 [DEBUG] [Thread-4850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] client lang: <none>
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] server lang: <none>
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] kex follows: False
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] Compression: none
2025-12-25T04:09:42.330 [DEBUG] [Thread-4850] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:09:42.391 [DEBUG] [Thread-4850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:09:42.391 [DEBUG] [Thread-4850] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:09:42.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:09:42.392 [DEBUG] [Thread-4850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:09:42.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:09:42.452 [DEBUG] [Thread-4850] [transport.py] [_log()] userauth is OK
2025-12-25T04:09:42.453 [DEBUG] [Thread-4850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:09:42.453 [DEBUG] [Thread-4850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:09:42.453 [DEBUG] [Thread-4850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:09:42.453 [DEBUG] [Thread-4850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:09:42.477 [INFO] [Thread-4850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:09:42.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:09:42.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:09:43.296 [DEBUG] [Thread-4850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:09:43.297 [DEBUG] [Thread-4850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:09:43.344 [DEBUG] [Thread-4850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:09:43.344 [DEBUG] [Thread-4850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:09:43.354 [DEBUG] [Thread-4850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:09:43.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:09:43.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')
2025-12-25T04:09:43.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:09:43.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:09:43.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:09:43.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:09:43.390 [DEBUG] [Thread-4850] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:09:44.575 [DEBUG] [Thread-4852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:09:59.626 [DEBUG] [Thread-4853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:10:03.408 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:10:03.409 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:10:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:10:13.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:10:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:10:14.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 9, 56), 0.23, 97.98, 0.0, 19.69, 11.09, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:10:14.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:09:56
2025-12-25T04:10:14.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:10:14.447 [DEBUG] [Thread-4854] [transport.py] [_log()] starting thread (client mode): 0xb6b4aa40
2025-12-25T04:10:14.447 [DEBUG] [Thread-4854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:10:14.471 [DEBUG] [Thread-4854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:10:14.471 [INFO] [Thread-4854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:10:14.474 [DEBUG] [Thread-4854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:10:14.474 [DEBUG] [Thread-4854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:10:14.474 [DEBUG] [Thread-4854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:10:14.474 [DEBUG] [Thread-4854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] client lang: <none>
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] server lang: <none>
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] kex follows: False
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] Compression: none
2025-12-25T04:10:14.475 [DEBUG] [Thread-4854] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:10:14.494 [DEBUG] [Thread-4854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:10:14.494 [DEBUG] [Thread-4854] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:10:14.494 [DEBUG] [Thread-4854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:10:14.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:10:14.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:10:14.495 [DEBUG] [Thread-4854] [transport.py] [_log()] userauth is OK
2025-12-25T04:10:14.496 [DEBUG] [Thread-4854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:10:14.496 [DEBUG] [Thread-4854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:10:14.496 [DEBUG] [Thread-4854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:10:14.496 [DEBUG] [Thread-4854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:10:14.507 [INFO] [Thread-4854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:10:14.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:10:14.660 [DEBUG] [Thread-4856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:10:15.044 [DEBUG] [Thread-4854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:10:15.044 [DEBUG] [Thread-4854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:10:15.044 [DEBUG] [Thread-4854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:10:15.086 [DEBUG] [Thread-4854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:10:15.086 [DEBUG] [Thread-4854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:10:15.088 [DEBUG] [Thread-4854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:10:15.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:10:15.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:10:15.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:10:15.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:10:15.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:10:15.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:10:15.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:10:15.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:10:15.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:10:15.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.089998 -999.00  +11.10  17.23     96  +10.50 1 3 1 3 1     0    0 0.57 -2.49 ----- 17.2 17.2 147.0 20.1 12.7 -9.5 12.7 -9.4 12.4 -8.7 12.8 -8.4
2025-12-25T04:10:15.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:10:15.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:10:15.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.089998
2025-12-25T04:10:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:10:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:10:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:10:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:10:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:10:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:09:56', tmtdew=0.23, humidity=97.98, cloud=0.0, wind=19.69, temperature=11.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:09:35.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:10:15.107 [DEBUG] [Thread-4854] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:10:15.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:10:15.190 [DEBUG] [Thread-4858] [transport.py] [_log()] starting thread (client mode): 0xb9559f30
2025-12-25T04:10:15.191 [DEBUG] [Thread-4858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:10:15.205 [DEBUG] [Thread-4858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:10:15.205 [INFO] [Thread-4858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] client lang: <none>
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] server lang: <none>
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] kex follows: False
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] Compression: none
2025-12-25T04:10:15.213 [DEBUG] [Thread-4858] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:10:15.270 [DEBUG] [Thread-4858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:10:15.270 [DEBUG] [Thread-4858] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:10:15.270 [DEBUG] [Thread-4858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:10:15.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:10:15.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:10:15.327 [DEBUG] [Thread-4858] [transport.py] [_log()] userauth is OK
2025-12-25T04:10:15.327 [DEBUG] [Thread-4858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:10:15.328 [DEBUG] [Thread-4858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:10:15.328 [DEBUG] [Thread-4858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:10:15.328 [DEBUG] [Thread-4858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:10:15.341 [INFO] [Thread-4858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:10:15.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:10:15.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:10:16.185 [DEBUG] [Thread-4858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:10:16.185 [DEBUG] [Thread-4858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:10:16.233 [DEBUG] [Thread-4858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:10:16.233 [DEBUG] [Thread-4858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:10:16.241 [DEBUG] [Thread-4858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:10:16.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:10:16.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:10:16.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:10:16.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:10:16.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:10:16.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:10:16.273 [DEBUG] [Thread-4858] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:10:29.686 [DEBUG] [Thread-4860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:10:35.331 [DEBUG] [Thread-4861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:10:44.732 [DEBUG] [Thread-4862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:10:46.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:10:46.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:10:46.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:10:47.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 10, 28), 0.22, 98.03, 0.0, 19.22, 11.12, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:10:47.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:10:28
2025-12-25T04:10:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:10:47.277 [DEBUG] [Thread-4863] [transport.py] [_log()] starting thread (client mode): 0xb6b49360
2025-12-25T04:10:47.277 [DEBUG] [Thread-4863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:10:47.298 [DEBUG] [Thread-4863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:10:47.298 [INFO] [Thread-4863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] client lang: <none>
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] server lang: <none>
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] kex follows: False
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] Compression: none
2025-12-25T04:10:47.302 [DEBUG] [Thread-4863] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:10:47.318 [DEBUG] [Thread-4863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:10:47.318 [DEBUG] [Thread-4863] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:10:47.318 [DEBUG] [Thread-4863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:10:47.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:10:47.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:10:47.319 [DEBUG] [Thread-4863] [transport.py] [_log()] userauth is OK
2025-12-25T04:10:47.319 [DEBUG] [Thread-4863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:10:47.319 [DEBUG] [Thread-4863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:10:47.319 [DEBUG] [Thread-4863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:10:47.319 [DEBUG] [Thread-4863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:10:47.346 [INFO] [Thread-4863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:10:47.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:10:47.984 [DEBUG] [Thread-4863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:10:47.984 [DEBUG] [Thread-4863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:10:47.985 [DEBUG] [Thread-4863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:10:48.026 [DEBUG] [Thread-4863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:10:48.026 [DEBUG] [Thread-4863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:10:48.028 [DEBUG] [Thread-4863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:10:48.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:10:48.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:10:48.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:10:48.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:10:48.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:10:48.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:10:48.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:10:48.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:10:48.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:10:48.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.090345 -999.00  +11.00  15.19     96  +10.40 1 3 1 3 1     0    0 0.58 -2.28 ----- 16.4 15.2 148.6 22.0 12.7 -9.9 12.7 -10.4 12.4 -8.7 12.7 -9.9
2025-12-25T04:10:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:10:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:10:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.090345
2025-12-25T04:10:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:10:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:10:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:10:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:10:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:10:48.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:10:28', tmtdew=0.22, humidity=98.03, cloud=0.0, wind=19.22, temperature=11.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:10:05.808', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:10:48.050 [DEBUG] [Thread-4863] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:10:48.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:10:48.159 [DEBUG] [Thread-4866] [transport.py] [_log()] starting thread (client mode): 0xb6b2ab60
2025-12-25T04:10:48.159 [DEBUG] [Thread-4866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:10:48.173 [DEBUG] [Thread-4866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:10:48.173 [INFO] [Thread-4866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] client lang: <none>
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] server lang: <none>
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] kex follows: False
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] Compression: none
2025-12-25T04:10:48.181 [DEBUG] [Thread-4866] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:10:48.240 [DEBUG] [Thread-4866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:10:48.241 [DEBUG] [Thread-4866] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:10:48.241 [DEBUG] [Thread-4866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:10:48.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:10:48.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:10:48.300 [DEBUG] [Thread-4866] [transport.py] [_log()] userauth is OK
2025-12-25T04:10:48.300 [DEBUG] [Thread-4866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:10:48.301 [DEBUG] [Thread-4866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:10:48.301 [DEBUG] [Thread-4866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:10:48.301 [DEBUG] [Thread-4866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:10:48.320 [INFO] [Thread-4866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:10:48.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:10:48.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:10:49.149 [DEBUG] [Thread-4866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:10:49.149 [DEBUG] [Thread-4866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:10:49.197 [DEBUG] [Thread-4866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:10:49.197 [DEBUG] [Thread-4866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:10:49.206 [DEBUG] [Thread-4866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:10:49.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:10:49.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:10:49.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:10:49.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:10:49.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:10:49.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:10:49.243 [DEBUG] [Thread-4866] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:10:59.771 [DEBUG] [Thread-4868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:11:03.675 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:11:03.677 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:11:14.819 [DEBUG] [Thread-4869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:11:19.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:11:19.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:11:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:11:19.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 10, 28), 0.22, 98.03, 0.0, 19.22, 11.12, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:11:19.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:10:28
2025-12-25T04:11:20.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:11:20.229 [DEBUG] [Thread-4870] [transport.py] [_log()] starting thread (client mode): 0xb6b2acb0
2025-12-25T04:11:20.230 [DEBUG] [Thread-4870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:11:20.250 [DEBUG] [Thread-4870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:11:20.250 [INFO] [Thread-4870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] client lang: <none>
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] server lang: <none>
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] kex follows: False
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] Compression: none
2025-12-25T04:11:20.252 [DEBUG] [Thread-4870] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:11:20.265 [DEBUG] [Thread-4870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:11:20.265 [DEBUG] [Thread-4870] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:11:20.266 [DEBUG] [Thread-4870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:11:20.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:11:20.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:11:20.268 [DEBUG] [Thread-4870] [transport.py] [_log()] userauth is OK
2025-12-25T04:11:20.268 [DEBUG] [Thread-4870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:11:20.268 [DEBUG] [Thread-4870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:11:20.268 [DEBUG] [Thread-4870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:11:20.268 [DEBUG] [Thread-4870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:11:20.302 [INFO] [Thread-4870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:11:20.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:11:21.048 [DEBUG] [Thread-4870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:11:21.048 [DEBUG] [Thread-4870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:11:21.048 [DEBUG] [Thread-4870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:11:21.089 [DEBUG] [Thread-4870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:11:21.089 [DEBUG] [Thread-4870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:11:21.092 [DEBUG] [Thread-4870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:11:21.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:11:21.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:11:21.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:11:21.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:11:21.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:11:21.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:11:21.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:11:21.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:11:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:11:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.090693 -999.00  +11.00  17.22     96  +10.40 1 3 1 3 1     0    0 0.57 -2.47 ----- 16.6 17.2 145.8 22.5 12.7 -10.9 12.6 -11.2 12.4 -9.1 12.7 -8.3
2025-12-25T04:11:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:11:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:11:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.090693
2025-12-25T04:11:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:11:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:11:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:11:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:11:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:11:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:10:28', tmtdew=0.22, humidity=98.03, cloud=0.0, wind=19.22, temperature=11.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:10:35.875', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:11:21.118 [DEBUG] [Thread-4870] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:11:21.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:11:21.209 [DEBUG] [Thread-4873] [transport.py] [_log()] starting thread (client mode): 0xb6b23850
2025-12-25T04:11:21.210 [DEBUG] [Thread-4873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:11:21.226 [DEBUG] [Thread-4873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:11:21.226 [INFO] [Thread-4873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:11:21.233 [DEBUG] [Thread-4873] [transport.py] [_log()] client lang: <none>
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] server lang: <none>
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] kex follows: False
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] Compression: none
2025-12-25T04:11:21.234 [DEBUG] [Thread-4873] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:11:21.291 [DEBUG] [Thread-4873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:11:21.291 [DEBUG] [Thread-4873] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:11:21.292 [DEBUG] [Thread-4873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:11:21.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:11:21.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:11:21.347 [DEBUG] [Thread-4873] [transport.py] [_log()] userauth is OK
2025-12-25T04:11:21.347 [DEBUG] [Thread-4873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:11:21.348 [DEBUG] [Thread-4873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:11:21.348 [DEBUG] [Thread-4873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:11:21.348 [DEBUG] [Thread-4873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:11:21.368 [INFO] [Thread-4873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:11:21.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:11:21.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:11:22.277 [DEBUG] [Thread-4873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:11:22.277 [DEBUG] [Thread-4873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:11:22.325 [DEBUG] [Thread-4873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:11:22.325 [DEBUG] [Thread-4873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:11:22.335 [DEBUG] [Thread-4873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:11:22.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:11:22.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:11:22.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:11:22.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:11:22.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:11:22.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:11:22.371 [DEBUG] [Thread-4873] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:11:29.854 [DEBUG] [Thread-4875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:11:35.384 [DEBUG] [Thread-4876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:11:44.911 [DEBUG] [Thread-4877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:11:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:11:52.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:11:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:11:53.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 11, 32), 0.28, 97.96, 0.0, 19.16, 11.04, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:11:53.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:11:32
2025-12-25T04:11:53.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:11:53.365 [DEBUG] [Thread-4878] [transport.py] [_log()] starting thread (client mode): 0xb6b2bd00
2025-12-25T04:11:53.365 [DEBUG] [Thread-4878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:11:53.385 [DEBUG] [Thread-4878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:11:53.385 [INFO] [Thread-4878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:11:53.386 [DEBUG] [Thread-4878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] client lang: <none>
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] server lang: <none>
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] kex follows: False
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] Compression: none
2025-12-25T04:11:53.387 [DEBUG] [Thread-4878] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:11:53.396 [DEBUG] [Thread-4878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:11:53.397 [DEBUG] [Thread-4878] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:11:53.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:11:53.398 [DEBUG] [Thread-4878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:11:53.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:11:53.399 [DEBUG] [Thread-4878] [transport.py] [_log()] userauth is OK
2025-12-25T04:11:53.400 [DEBUG] [Thread-4878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:11:53.400 [DEBUG] [Thread-4878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:11:53.400 [DEBUG] [Thread-4878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:11:53.400 [DEBUG] [Thread-4878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:11:53.424 [INFO] [Thread-4878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:11:53.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:11:54.100 [DEBUG] [Thread-4878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:11:54.100 [DEBUG] [Thread-4878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:11:54.101 [DEBUG] [Thread-4878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:11:54.141 [DEBUG] [Thread-4878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:11:54.141 [DEBUG] [Thread-4878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:11:54.145 [DEBUG] [Thread-4878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:11:54.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:11:54.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:11:54.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:11:54.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:11:54.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:11:54.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:11:54.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.091040 -999.00  +11.10  15.92     96  +10.50 1 3 1 3 1     0    0 0.57 -2.50 ...S. 19.5 15.9 142.4 19.5 12.7 -8.9 12.6 -8.2 12.4 -8.8 12.7 -10.6
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.091040
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:11:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:11:32', tmtdew=0.28, humidity=97.96, cloud=0.0, wind=19.16, temperature=11.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:11:05.856', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:11:54.170 [DEBUG] [Thread-4878] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:11:54.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:11:54.256 [DEBUG] [Thread-4881] [transport.py] [_log()] starting thread (client mode): 0xb95f3910
2025-12-25T04:11:54.256 [DEBUG] [Thread-4881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:11:54.271 [DEBUG] [Thread-4881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:11:54.271 [INFO] [Thread-4881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:11:54.278 [DEBUG] [Thread-4881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] client lang: <none>
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] server lang: <none>
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] kex follows: False
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] Compression: none
2025-12-25T04:11:54.279 [DEBUG] [Thread-4881] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:11:54.335 [DEBUG] [Thread-4881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:11:54.336 [DEBUG] [Thread-4881] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:11:54.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:11:54.337 [DEBUG] [Thread-4881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:11:54.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:11:54.391 [DEBUG] [Thread-4881] [transport.py] [_log()] userauth is OK
2025-12-25T04:11:54.391 [DEBUG] [Thread-4881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:11:54.392 [DEBUG] [Thread-4881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:11:54.392 [DEBUG] [Thread-4881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:11:54.392 [DEBUG] [Thread-4881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:11:54.410 [INFO] [Thread-4881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:11:54.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:11:54.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:11:55.233 [DEBUG] [Thread-4881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:11:55.233 [DEBUG] [Thread-4881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:11:55.281 [DEBUG] [Thread-4881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:11:55.281 [DEBUG] [Thread-4881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:11:55.290 [DEBUG] [Thread-4881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:11:55.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:11:55.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:11:55.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') -> 00000000
2025-12-25T04:11:55.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:11:55.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:11:55.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:11:55.325 [DEBUG] [Thread-4881] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:11:59.951 [DEBUG] [Thread-4883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:12:03.881 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:12:03.882 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:12:14.994 [DEBUG] [Thread-4884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:12:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:12:25.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:12:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:12:26.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 12, 4), 0.28, 97.96, 0.0, 18.28, 11.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:12:26.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:12:04
2025-12-25T04:12:26.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:12:26.343 [DEBUG] [Thread-4885] [transport.py] [_log()] starting thread (client mode): 0xb6b2b3a0
2025-12-25T04:12:26.344 [DEBUG] [Thread-4885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:12:26.364 [DEBUG] [Thread-4885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:12:26.365 [INFO] [Thread-4885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:12:26.367 [DEBUG] [Thread-4885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] client lang: <none>
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] server lang: <none>
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] kex follows: False
2025-12-25T04:12:26.368 [DEBUG] [Thread-4885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:12:26.369 [DEBUG] [Thread-4885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:12:26.369 [DEBUG] [Thread-4885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:12:26.369 [DEBUG] [Thread-4885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:12:26.369 [DEBUG] [Thread-4885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:12:26.369 [DEBUG] [Thread-4885] [transport.py] [_log()] Compression: none
2025-12-25T04:12:26.369 [DEBUG] [Thread-4885] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:12:26.395 [DEBUG] [Thread-4885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:12:26.395 [DEBUG] [Thread-4885] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:12:26.396 [DEBUG] [Thread-4885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:12:26.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:12:26.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:12:26.398 [DEBUG] [Thread-4885] [transport.py] [_log()] userauth is OK
2025-12-25T04:12:26.398 [DEBUG] [Thread-4885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:12:26.398 [DEBUG] [Thread-4885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:12:26.398 [DEBUG] [Thread-4885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:12:26.398 [DEBUG] [Thread-4885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:12:26.418 [INFO] [Thread-4885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:12:26.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:12:27.009 [DEBUG] [Thread-4885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:12:27.010 [DEBUG] [Thread-4885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:12:27.010 [DEBUG] [Thread-4885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:12:27.051 [DEBUG] [Thread-4885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:12:27.051 [DEBUG] [Thread-4885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:12:27.054 [DEBUG] [Thread-4885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:12:27.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:12:27.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:12:27.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:12:27.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:12:27.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:12:27.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:12:27.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:12:27.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.091734 -999.00  +11.00  17.31     96  +10.40 1 2 1 3 1     0    0 0.56 -2.55 ..... 17.5 17.3 139.0 22.1 12.7 -10.2 12.6 -9.7 12.3 -10.9 12.6 -7.7
2025-12-25T04:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:12:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.091734
2025-12-25T04:12:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:12:27.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:12:27.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:12:27.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:12:27.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T04:12:27.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:12:04', tmtdew=0.28, humidity=97.96, cloud=0.0, wind=18.28, temperature=11.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:12:05.818', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:12:27.079 [DEBUG] [Thread-4885] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:12:27.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:12:27.170 [DEBUG] [Thread-4888] [transport.py] [_log()] starting thread (client mode): 0xb6b2a440
2025-12-25T04:12:27.170 [DEBUG] [Thread-4888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:12:27.185 [DEBUG] [Thread-4888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:12:27.185 [INFO] [Thread-4888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:12:27.194 [DEBUG] [Thread-4888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:12:27.194 [DEBUG] [Thread-4888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:12:27.194 [DEBUG] [Thread-4888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:12:27.194 [DEBUG] [Thread-4888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:12:27.194 [DEBUG] [Thread-4888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:12:27.194 [DEBUG] [Thread-4888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:12:27.194 [DEBUG] [Thread-4888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:12:27.194 [DEBUG] [Thread-4888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] client lang: <none>
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] server lang: <none>
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] kex follows: False
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] Compression: none
2025-12-25T04:12:27.195 [DEBUG] [Thread-4888] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:12:27.253 [DEBUG] [Thread-4888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:12:27.254 [DEBUG] [Thread-4888] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:12:27.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:12:27.255 [DEBUG] [Thread-4888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:12:27.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:12:27.317 [DEBUG] [Thread-4888] [transport.py] [_log()] userauth is OK
2025-12-25T04:12:27.317 [DEBUG] [Thread-4888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:12:27.317 [DEBUG] [Thread-4888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:12:27.317 [DEBUG] [Thread-4888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:12:27.317 [DEBUG] [Thread-4888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:12:27.339 [INFO] [Thread-4888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:12:27.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:12:27.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:12:28.188 [DEBUG] [Thread-4888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:12:28.188 [DEBUG] [Thread-4888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:12:28.239 [DEBUG] [Thread-4888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:12:28.239 [DEBUG] [Thread-4888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:12:28.253 [DEBUG] [Thread-4888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:12:28.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:12:28.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:12:28.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:12:28.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:12:28.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:12:28.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:12:28.297 [DEBUG] [Thread-4888] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:12:30.026 [DEBUG] [Thread-4890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:12:35.464 [DEBUG] [Thread-4891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:12:45.083 [DEBUG] [Thread-4892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:12:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:12:58.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:12:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:12:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 12, 36), 0.28, 98.0, 0.0, 18.6, 11.14, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:12:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:12:36
2025-12-25T04:12:59.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:12:59.301 [DEBUG] [Thread-4893] [transport.py] [_log()] starting thread (client mode): 0xb6b28d30
2025-12-25T04:12:59.302 [DEBUG] [Thread-4893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:12:59.323 [DEBUG] [Thread-4893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:12:59.324 [INFO] [Thread-4893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:12:59.327 [DEBUG] [Thread-4893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:12:59.327 [DEBUG] [Thread-4893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:12:59.327 [DEBUG] [Thread-4893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:12:59.327 [DEBUG] [Thread-4893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] client lang: <none>
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] server lang: <none>
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] kex follows: False
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:12:59.328 [DEBUG] [Thread-4893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:12:59.329 [DEBUG] [Thread-4893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:12:59.329 [DEBUG] [Thread-4893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:12:59.329 [DEBUG] [Thread-4893] [transport.py] [_log()] Compression: none
2025-12-25T04:12:59.329 [DEBUG] [Thread-4893] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:12:59.348 [DEBUG] [Thread-4893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:12:59.349 [DEBUG] [Thread-4893] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:12:59.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:12:59.350 [DEBUG] [Thread-4893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:12:59.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:12:59.352 [DEBUG] [Thread-4893] [transport.py] [_log()] userauth is OK
2025-12-25T04:12:59.352 [DEBUG] [Thread-4893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:12:59.352 [DEBUG] [Thread-4893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:12:59.352 [DEBUG] [Thread-4893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:12:59.352 [DEBUG] [Thread-4893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:12:59.390 [INFO] [Thread-4893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:12:59.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:13:00.026 [DEBUG] [Thread-4893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:13:00.026 [DEBUG] [Thread-4893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:13:00.027 [DEBUG] [Thread-4893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:13:00.067 [DEBUG] [Thread-4893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:13:00.068 [DEBUG] [Thread-4893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:13:00.072 [DEBUG] [Thread-4893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:13:00.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:13:00.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:13:00.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:13:00.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:13:00.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:13:00.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:13:00.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:13:00.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:13:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:13:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.092081 -999.00  +11.00  17.80     96  +10.40 1 2 1 3 1     0    0 0.55 -2.65 Z..Sw 15.5 17.8 141.8 21.5 12.7 -10.3 12.6 -10.4 12.3 -10.2 12.6 -9.1
2025-12-25T04:13:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:13:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:13:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.092081
2025-12-25T04:13:00.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:13:00.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:13:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:13:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:13:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T04:13:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:12:36', tmtdew=0.28, humidity=98.0, cloud=0.0, wind=18.6, temperature=11.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:12:35.798', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:13:00.099 [DEBUG] [Thread-4893] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:13:00.116 [DEBUG] [Thread-4896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:13:00.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:13:00.196 [DEBUG] [Thread-4897] [transport.py] [_log()] starting thread (client mode): 0xb6b29cc0
2025-12-25T04:13:00.196 [DEBUG] [Thread-4897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:13:00.211 [DEBUG] [Thread-4897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:13:00.211 [INFO] [Thread-4897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:13:00.218 [DEBUG] [Thread-4897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:13:00.218 [DEBUG] [Thread-4897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:13:00.218 [DEBUG] [Thread-4897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] client lang: <none>
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] server lang: <none>
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] kex follows: False
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] Compression: none
2025-12-25T04:13:00.219 [DEBUG] [Thread-4897] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:13:00.278 [DEBUG] [Thread-4897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:13:00.279 [DEBUG] [Thread-4897] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:13:00.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:13:00.280 [DEBUG] [Thread-4897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:13:00.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:13:00.336 [DEBUG] [Thread-4897] [transport.py] [_log()] userauth is OK
2025-12-25T04:13:00.336 [DEBUG] [Thread-4897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:13:00.336 [DEBUG] [Thread-4897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:13:00.337 [DEBUG] [Thread-4897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:13:00.337 [DEBUG] [Thread-4897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:13:00.355 [INFO] [Thread-4897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:13:00.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:13:00.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:13:01.173 [DEBUG] [Thread-4897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:13:01.174 [DEBUG] [Thread-4897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:13:01.222 [DEBUG] [Thread-4897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:13:01.222 [DEBUG] [Thread-4897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:13:01.231 [DEBUG] [Thread-4897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:13:01.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:13:01.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:13: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
2025-12-25T04:13:01.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:13:01.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:13:01.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:13:01.268 [DEBUG] [Thread-4897] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:13:04.107 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:13:04.108 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:13:15.155 [DEBUG] [Thread-4899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:13:30.188 [DEBUG] [Thread-4900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:13:31.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:13:31.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:13:31.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
2025-12-25T04:13:32.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 13, 8), 0.27, 98.01, 0.0, 19.25, 11.09, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:13:32.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:13:08
2025-12-25T04:13:32.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:13:32.325 [DEBUG] [Thread-4901] [transport.py] [_log()] starting thread (client mode): 0xb6b2a8f0
2025-12-25T04:13:32.325 [DEBUG] [Thread-4901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:13:32.346 [DEBUG] [Thread-4901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:13:32.346 [INFO] [Thread-4901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] client lang: <none>
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] server lang: <none>
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] kex follows: False
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] Compression: none
2025-12-25T04:13:32.349 [DEBUG] [Thread-4901] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:13:32.367 [DEBUG] [Thread-4901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:13:32.367 [DEBUG] [Thread-4901] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:13:32.367 [DEBUG] [Thread-4901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:13:32.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:13:32.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:13:32.368 [DEBUG] [Thread-4901] [transport.py] [_log()] userauth is OK
2025-12-25T04:13:32.368 [DEBUG] [Thread-4901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:13:32.368 [DEBUG] [Thread-4901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:13:32.368 [DEBUG] [Thread-4901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:13:32.368 [DEBUG] [Thread-4901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:13:32.378 [INFO] [Thread-4901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:13:32.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:13:32.969 [DEBUG] [Thread-4901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:13:32.969 [DEBUG] [Thread-4901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:13:32.969 [DEBUG] [Thread-4901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:13:33.011 [DEBUG] [Thread-4901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:13:33.011 [DEBUG] [Thread-4901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:13:33.013 [DEBUG] [Thread-4901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:13:33.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:13:33.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:13:33.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:13:33.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:13:33.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:13:33.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:13:33.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:13:33.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:13:33.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:13:33.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.092429 -999.00  +11.10  12.39     96  +10.50 1 3 1 3 1     0    0 0.56 -2.67 Z..Sw 12.7 12.4 147.0 20.4 12.7 -9.9 12.6 -9.9 12.3 -7.4 12.7 -10.4
2025-12-25T04:13:33.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:13:33.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:13:33.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.092429
2025-12-25T04:13:33.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:13:33.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:13:33.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:13:33.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:13:33.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:13:33.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:13:08', tmtdew=0.27, humidity=98.01, cloud=0.0, wind=19.25, temperature=11.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:13:05.866', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:13:33.033 [DEBUG] [Thread-4901] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:13:33.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:13:33.126 [DEBUG] [Thread-4904] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae90
2025-12-25T04:13:33.126 [DEBUG] [Thread-4904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:13:33.142 [DEBUG] [Thread-4904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:13:33.142 [INFO] [Thread-4904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] client lang: <none>
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] server lang: <none>
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] kex follows: False
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] Compression: none
2025-12-25T04:13:33.149 [DEBUG] [Thread-4904] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:13:33.205 [DEBUG] [Thread-4904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:13:33.205 [DEBUG] [Thread-4904] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:13:33.205 [DEBUG] [Thread-4904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:13:33.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:13:33.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:13:33.262 [DEBUG] [Thread-4904] [transport.py] [_log()] userauth is OK
2025-12-25T04:13:33.263 [DEBUG] [Thread-4904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:13:33.263 [DEBUG] [Thread-4904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:13:33.263 [DEBUG] [Thread-4904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:13:33.263 [DEBUG] [Thread-4904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:13:33.277 [INFO] [Thread-4904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:13:33.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:13:33.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:13:34.171 [DEBUG] [Thread-4904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:13:34.171 [DEBUG] [Thread-4904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:13:34.219 [DEBUG] [Thread-4904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:13:34.219 [DEBUG] [Thread-4904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:13:34.228 [DEBUG] [Thread-4904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:13:34.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:13:34.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:13:34.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:13:34.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:13:34.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:13:34.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:13:34.264 [DEBUG] [Thread-4904] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:13:35.550 [DEBUG] [Thread-4906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:13:45.221 [DEBUG] [Thread-4907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:14:00.276 [DEBUG] [Thread-4908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:14:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:14:04.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:14:04.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
2025-12-25T04:14:04.314 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:14:04.315 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:14:05.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 13, 40), 0.23, 97.98, 0.0, 21.35, 11.06, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:14:05.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:13:40
2025-12-25T04:14:05.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:14:05.284 [DEBUG] [Thread-4909] [transport.py] [_log()] starting thread (client mode): 0xb6b2a5f0
2025-12-25T04:14:05.284 [DEBUG] [Thread-4909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:14:05.302 [DEBUG] [Thread-4909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:14:05.302 [INFO] [Thread-4909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] client lang: <none>
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] server lang: <none>
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] kex follows: False
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] Compression: none
2025-12-25T04:14:05.306 [DEBUG] [Thread-4909] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:14:05.323 [DEBUG] [Thread-4909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:14:05.323 [DEBUG] [Thread-4909] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:14:05.323 [DEBUG] [Thread-4909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:14:05.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:14:05.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:14:05.324 [DEBUG] [Thread-4909] [transport.py] [_log()] userauth is OK
2025-12-25T04:14:05.324 [DEBUG] [Thread-4909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:14:05.324 [DEBUG] [Thread-4909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:14:05.324 [DEBUG] [Thread-4909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:14:05.324 [DEBUG] [Thread-4909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:14:05.340 [INFO] [Thread-4909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:14:05.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:14:05.981 [DEBUG] [Thread-4909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:14:05.982 [DEBUG] [Thread-4909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:14:05.982 [DEBUG] [Thread-4909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:14:06.023 [DEBUG] [Thread-4909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:14:06.023 [DEBUG] [Thread-4909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:14:06.026 [DEBUG] [Thread-4909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:14:06.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:14:06.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:14:06.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:14:06.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:14:06.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:14:06.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:14:06.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:14:06.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:14:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:14:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.092776 -999.00  +11.10  15.34     96  +10.50 1 2 1 3 1     0    0 0.55 -2.87 Z..Sw 17.2 15.3 135.0 19.5 12.7 -10.5 12.6 -10.8 12.4 -9.7 12.7 -10.8
2025-12-25T04:14:06.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:14:06.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:14:06.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.092776
2025-12-25T04:14:06.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:14:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:14:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:14:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:14:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T04:14:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:13:40', tmtdew=0.23, humidity=97.98, cloud=0.0, wind=21.35, temperature=11.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:13:35.846', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:14:06.054 [DEBUG] [Thread-4909] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:14:06.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:14:06.152 [DEBUG] [Thread-4912] [transport.py] [_log()] starting thread (client mode): 0xb6b14c10
2025-12-25T04:14:06.152 [DEBUG] [Thread-4912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:14:06.169 [DEBUG] [Thread-4912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:14:06.170 [INFO] [Thread-4912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:14:06.181 [DEBUG] [Thread-4912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:14:06.181 [DEBUG] [Thread-4912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] client lang: <none>
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] server lang: <none>
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] kex follows: False
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:14:06.182 [DEBUG] [Thread-4912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:14:06.183 [DEBUG] [Thread-4912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:14:06.183 [DEBUG] [Thread-4912] [transport.py] [_log()] Compression: none
2025-12-25T04:14:06.183 [DEBUG] [Thread-4912] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:14:06.238 [DEBUG] [Thread-4912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:14:06.239 [DEBUG] [Thread-4912] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:14:06.239 [DEBUG] [Thread-4912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:14:06.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:14:06.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:14:06.297 [DEBUG] [Thread-4912] [transport.py] [_log()] userauth is OK
2025-12-25T04:14:06.297 [DEBUG] [Thread-4912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:14:06.298 [DEBUG] [Thread-4912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:14:06.298 [DEBUG] [Thread-4912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:14:06.298 [DEBUG] [Thread-4912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:14:06.321 [INFO] [Thread-4912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:14:06.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:14:06.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:14:07.210 [DEBUG] [Thread-4912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:14:07.210 [DEBUG] [Thread-4912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:14:07.258 [DEBUG] [Thread-4912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:14:07.258 [DEBUG] [Thread-4912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:14:07.266 [DEBUG] [Thread-4912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:14:07.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:14:07.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')
2025-12-25T04:14:07.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:14:07.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:14:07.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:14:07.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:14:07.298 [DEBUG] [Thread-4912] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:14:15.312 [DEBUG] [Thread-4914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:14:30.370 [DEBUG] [Thread-4915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:14:35.608 [DEBUG] [Thread-4916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:14:37.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:14:37.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:14: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
2025-12-25T04:14:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 14, 12), 0.22, 98.01, 0.0, 20.2, 11.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:14:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:14:12
2025-12-25T04:14:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:14:38.311 [DEBUG] [Thread-4917] [transport.py] [_log()] starting thread (client mode): 0xb6b2b1c0
2025-12-25T04:14:38.311 [DEBUG] [Thread-4917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:14:38.331 [DEBUG] [Thread-4917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:14:38.331 [INFO] [Thread-4917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:14:38.335 [DEBUG] [Thread-4917] [transport.py] [_log()] client lang: <none>
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] server lang: <none>
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] kex follows: False
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] Compression: none
2025-12-25T04:14:38.336 [DEBUG] [Thread-4917] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:14:38.354 [DEBUG] [Thread-4917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:14:38.354 [DEBUG] [Thread-4917] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:14:38.355 [DEBUG] [Thread-4917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:14:38.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:14:38.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:14:38.396 [DEBUG] [Thread-4917] [transport.py] [_log()] userauth is OK
2025-12-25T04:14:38.397 [DEBUG] [Thread-4917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:14:38.397 [DEBUG] [Thread-4917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:14:38.397 [DEBUG] [Thread-4917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:14:38.397 [DEBUG] [Thread-4917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:14:38.416 [INFO] [Thread-4917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:14:38.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:14:39.007 [DEBUG] [Thread-4917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:14:39.007 [DEBUG] [Thread-4917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:14:39.008 [DEBUG] [Thread-4917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:14:39.049 [DEBUG] [Thread-4917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:14:39.049 [DEBUG] [Thread-4917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:14:39.052 [DEBUG] [Thread-4917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:14:39.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:14:39.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:14:39.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:14:39.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:14:39.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:14:39.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:14:39.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:14:39.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:14:39.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:14:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.093123 -999.00  +11.00  13.59     96  +10.40 1 2 1 3 1     0    0 0.55 -2.87 ...s. 15.6 13.6 142.0 20.9 12.7 -10.4 12.5 -10.2 12.4 -10.3 12.7 -11.5
2025-12-25T04:14:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:14:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:14:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.093123
2025-12-25T04:14:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:14:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:14:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:14:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:14:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T04:14:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:14:12', tmtdew=0.22, humidity=98.01, cloud=0.0, wind=20.2, temperature=11.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:14:05.827', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:14:39.077 [DEBUG] [Thread-4917] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:14:39.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:14:39.174 [DEBUG] [Thread-4920] [transport.py] [_log()] starting thread (client mode): 0xb6b28730
2025-12-25T04:14:39.174 [DEBUG] [Thread-4920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:14:39.189 [DEBUG] [Thread-4920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:14:39.189 [INFO] [Thread-4920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:14:39.196 [DEBUG] [Thread-4920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] client lang: <none>
2025-12-25T04:14:39.197 [DEBUG] [Thread-4920] [transport.py] [_log()] server lang: <none>
2025-12-25T04:14:39.198 [DEBUG] [Thread-4920] [transport.py] [_log()] kex follows: False
2025-12-25T04:14:39.198 [DEBUG] [Thread-4920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:14:39.198 [DEBUG] [Thread-4920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:14:39.198 [DEBUG] [Thread-4920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:14:39.198 [DEBUG] [Thread-4920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:14:39.198 [DEBUG] [Thread-4920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:14:39.198 [DEBUG] [Thread-4920] [transport.py] [_log()] Compression: none
2025-12-25T04:14:39.198 [DEBUG] [Thread-4920] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:14:39.258 [DEBUG] [Thread-4920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:14:39.259 [DEBUG] [Thread-4920] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:14:39.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:14:39.260 [DEBUG] [Thread-4920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:14:39.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:14:39.319 [DEBUG] [Thread-4920] [transport.py] [_log()] userauth is OK
2025-12-25T04:14:39.319 [DEBUG] [Thread-4920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:14:39.319 [DEBUG] [Thread-4920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:14:39.319 [DEBUG] [Thread-4920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:14:39.319 [DEBUG] [Thread-4920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:14:39.335 [INFO] [Thread-4920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:14:39.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:14:39.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:14:40.171 [DEBUG] [Thread-4920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:14:40.171 [DEBUG] [Thread-4920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:14:40.219 [DEBUG] [Thread-4920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:14:40.219 [DEBUG] [Thread-4920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:14:40.228 [DEBUG] [Thread-4920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:14:40.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:14: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')
2025-12-25T04:14:40.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:14:40.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:14:40.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:14:40.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:14:40.262 [DEBUG] [Thread-4920] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:14:45.401 [DEBUG] [Thread-4922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:15:00.447 [DEBUG] [Thread-4923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:15:04.541 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:15:04.542 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:15:10.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:15:10.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:15:10.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:15:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 14, 44), 0.27, 98.03, 0.0, 19.73, 11.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:15:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:14:44
2025-12-25T04:15:11.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:15:11.235 [DEBUG] [Thread-4924] [transport.py] [_log()] starting thread (client mode): 0xb6b350c0
2025-12-25T04:15:11.235 [DEBUG] [Thread-4924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:15:11.255 [DEBUG] [Thread-4924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:15:11.255 [INFO] [Thread-4924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] client lang: <none>
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] server lang: <none>
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] kex follows: False
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:15:11.259 [DEBUG] [Thread-4924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:15:11.260 [DEBUG] [Thread-4924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:15:11.260 [DEBUG] [Thread-4924] [transport.py] [_log()] Compression: none
2025-12-25T04:15:11.260 [DEBUG] [Thread-4924] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:15:11.278 [DEBUG] [Thread-4924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:15:11.278 [DEBUG] [Thread-4924] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:15:11.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:15:11.279 [DEBUG] [Thread-4924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:15:11.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:15:11.281 [DEBUG] [Thread-4924] [transport.py] [_log()] userauth is OK
2025-12-25T04:15:11.281 [DEBUG] [Thread-4924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:15:11.281 [DEBUG] [Thread-4924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:15:11.282 [DEBUG] [Thread-4924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:15:11.282 [DEBUG] [Thread-4924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:15:11.306 [INFO] [Thread-4924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:15:11.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:15:12.115 [DEBUG] [Thread-4924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:15:12.115 [DEBUG] [Thread-4924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:15:12.115 [DEBUG] [Thread-4924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:15:12.157 [DEBUG] [Thread-4924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:15:12.157 [DEBUG] [Thread-4924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:15:12.160 [DEBUG] [Thread-4924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:15:12.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:15:12.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:15:12.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:15:12.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:15:12.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:15:12.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:15:12.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:15:12.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:15:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:15:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.093470 -999.00  +11.00  13.01     96  +10.40 1 3 1 3 1     0    0 0.56 -2.96 ..... 14.1 13.0 142.0 18.9 12.6 -9.1 12.6 -8.7 12.3 -8.7 12.6 -10.6
2025-12-25T04:15:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:15:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:15:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.093470
2025-12-25T04:15:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:15:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:15:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:15:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:15:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:15:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:14:44', tmtdew=0.27, humidity=98.03, cloud=0.0, wind=19.73, temperature=11.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:14:35.808', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:15:12.186 [DEBUG] [Thread-4924] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:15:12.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:15:12.277 [DEBUG] [Thread-4927] [transport.py] [_log()] starting thread (client mode): 0xb6b28370
2025-12-25T04:15:12.277 [DEBUG] [Thread-4927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:15:12.291 [DEBUG] [Thread-4927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:15:12.291 [INFO] [Thread-4927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:15:12.298 [DEBUG] [Thread-4927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:15:12.298 [DEBUG] [Thread-4927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] client lang: <none>
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] server lang: <none>
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] kex follows: False
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:15:12.299 [DEBUG] [Thread-4927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:15:12.300 [DEBUG] [Thread-4927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:15:12.300 [DEBUG] [Thread-4927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:15:12.300 [DEBUG] [Thread-4927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:15:12.300 [DEBUG] [Thread-4927] [transport.py] [_log()] Compression: none
2025-12-25T04:15:12.300 [DEBUG] [Thread-4927] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:15:12.359 [DEBUG] [Thread-4927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:15:12.360 [DEBUG] [Thread-4927] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:15:12.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:15:12.361 [DEBUG] [Thread-4927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:15:12.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:15:12.420 [DEBUG] [Thread-4927] [transport.py] [_log()] userauth is OK
2025-12-25T04:15:12.420 [DEBUG] [Thread-4927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:15:12.420 [DEBUG] [Thread-4927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:15:12.421 [DEBUG] [Thread-4927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:15:12.421 [DEBUG] [Thread-4927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:15:12.440 [INFO] [Thread-4927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:15:12.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:15:12.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:15:13.254 [DEBUG] [Thread-4927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:15:13.254 [DEBUG] [Thread-4927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:15:13.302 [DEBUG] [Thread-4927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:15:13.302 [DEBUG] [Thread-4927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:15:13.311 [DEBUG] [Thread-4927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:15:13.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:15:13.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:15:13.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:15:13.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:15:13.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:15:13.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:15:13.348 [DEBUG] [Thread-4927] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:15:15.486 [DEBUG] [Thread-4929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:15:30.540 [DEBUG] [Thread-4930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:15:35.701 [DEBUG] [Thread-4931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:15:43.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:15:43.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:15:43.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:15:44.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 15, 16), 0.27, 98.01, 0.0, 20.4, 11.06, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:15:44.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:15:16
2025-12-25T04:15:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:15:44.351 [DEBUG] [Thread-4932] [transport.py] [_log()] starting thread (client mode): 0xb6b2a440
2025-12-25T04:15:44.351 [DEBUG] [Thread-4932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:15:44.371 [DEBUG] [Thread-4932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:15:44.372 [INFO] [Thread-4932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:15:44.374 [DEBUG] [Thread-4932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:15:44.374 [DEBUG] [Thread-4932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:15:44.374 [DEBUG] [Thread-4932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:15:44.374 [DEBUG] [Thread-4932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:15:44.374 [DEBUG] [Thread-4932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] client lang: <none>
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] server lang: <none>
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] kex follows: False
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] Compression: none
2025-12-25T04:15:44.375 [DEBUG] [Thread-4932] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:15:44.392 [DEBUG] [Thread-4932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:15:44.393 [DEBUG] [Thread-4932] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:15:44.393 [DEBUG] [Thread-4932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:15:44.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:15:44.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:15:44.437 [DEBUG] [Thread-4932] [transport.py] [_log()] userauth is OK
2025-12-25T04:15:44.437 [DEBUG] [Thread-4932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:15:44.437 [DEBUG] [Thread-4932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:15:44.437 [DEBUG] [Thread-4932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:15:44.438 [DEBUG] [Thread-4932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:15:44.480 [INFO] [Thread-4932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:15:44.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:15:45.093 [DEBUG] [Thread-4932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:15:45.093 [DEBUG] [Thread-4932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:15:45.093 [DEBUG] [Thread-4932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:15:45.134 [DEBUG] [Thread-4932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:15:45.134 [DEBUG] [Thread-4932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:15:45.137 [DEBUG] [Thread-4932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:15:45.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:15:45.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:15:45.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:15:45.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:15:45.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:15:45.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:15:45.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:15:45.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:15:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:15:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.093817 -999.00  +11.00  16.26     96  +10.40 1 3 1 3 1     0    0 0.54 -3.07 ....W 15.5 16.3 140.2 22.1 12.6 -9.5 12.6 -9.3 12.4 -9.3 12.7 -9.4
2025-12-25T04:15:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:15:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:15:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.093817
2025-12-25T04:15:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:15:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:15:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:15:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:15:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:15:45.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:15:16', tmtdew=0.27, humidity=98.01, cloud=0.0, wind=20.4, temperature=11.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:15:05.789', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:15:45.163 [DEBUG] [Thread-4932] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:15:45.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:15:45.256 [DEBUG] [Thread-4935] [transport.py] [_log()] starting thread (client mode): 0xb955b550
2025-12-25T04:15:45.256 [DEBUG] [Thread-4935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:15:45.271 [DEBUG] [Thread-4935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:15:45.271 [INFO] [Thread-4935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] client lang: <none>
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] server lang: <none>
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] kex follows: False
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:15:45.279 [DEBUG] [Thread-4935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:15:45.280 [DEBUG] [Thread-4935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:15:45.280 [DEBUG] [Thread-4935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:15:45.280 [DEBUG] [Thread-4935] [transport.py] [_log()] Compression: none
2025-12-25T04:15:45.280 [DEBUG] [Thread-4935] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:15:45.338 [DEBUG] [Thread-4935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:15:45.339 [DEBUG] [Thread-4935] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:15:45.339 [DEBUG] [Thread-4935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:15:45.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:15:45.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:15:45.394 [DEBUG] [Thread-4935] [transport.py] [_log()] userauth is OK
2025-12-25T04:15:45.394 [DEBUG] [Thread-4935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:15:45.394 [DEBUG] [Thread-4935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:15:45.394 [DEBUG] [Thread-4935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:15:45.395 [DEBUG] [Thread-4935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:15:45.412 [INFO] [Thread-4935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:15:45.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:15:45.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:15:45.576 [DEBUG] [Thread-4937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:15:46.233 [DEBUG] [Thread-4935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:15:46.234 [DEBUG] [Thread-4935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:15:46.282 [DEBUG] [Thread-4935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:15:46.282 [DEBUG] [Thread-4935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:15:46.291 [DEBUG] [Thread-4935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:15:46.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:15:46.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:15:46.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:15:46.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:15:46.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:15:46.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:15:46.328 [DEBUG] [Thread-4935] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:16:00.626 [DEBUG] [Thread-4938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:16:04.745 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:16:04.745 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:16:15.662 [DEBUG] [Thread-4939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:16:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:16:16.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:16:16.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
2025-12-25T04:16:17.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 15, 48), 0.27, 98.01, 0.0, 17.12, 11.06, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:16:17.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:15:48
2025-12-25T04:16:17.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:16:17.335 [DEBUG] [Thread-4940] [transport.py] [_log()] starting thread (client mode): 0xb6b16bf0
2025-12-25T04:16:17.335 [DEBUG] [Thread-4940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:16:17.355 [DEBUG] [Thread-4940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:16:17.355 [INFO] [Thread-4940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] client lang: <none>
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] server lang: <none>
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] kex follows: False
2025-12-25T04:16:17.359 [DEBUG] [Thread-4940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:16:17.360 [DEBUG] [Thread-4940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:16:17.360 [DEBUG] [Thread-4940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:16:17.360 [DEBUG] [Thread-4940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:16:17.360 [DEBUG] [Thread-4940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:16:17.360 [DEBUG] [Thread-4940] [transport.py] [_log()] Compression: none
2025-12-25T04:16:17.360 [DEBUG] [Thread-4940] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:16:17.377 [DEBUG] [Thread-4940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:16:17.377 [DEBUG] [Thread-4940] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:16:17.378 [DEBUG] [Thread-4940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:16:17.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:16:17.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:16:17.380 [DEBUG] [Thread-4940] [transport.py] [_log()] userauth is OK
2025-12-25T04:16:17.380 [DEBUG] [Thread-4940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:16:17.380 [DEBUG] [Thread-4940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:16:17.380 [DEBUG] [Thread-4940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:16:17.380 [DEBUG] [Thread-4940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:16:17.403 [INFO] [Thread-4940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:16:17.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:16:18.065 [DEBUG] [Thread-4940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:16:18.065 [DEBUG] [Thread-4940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:16:18.065 [DEBUG] [Thread-4940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:16:18.107 [DEBUG] [Thread-4940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:16:18.107 [DEBUG] [Thread-4940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:16:18.109 [DEBUG] [Thread-4940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:16:18.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:16:18.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:16:18.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:16:18.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:16:18.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:16:18.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:16:18.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:16:18.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:16:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:16:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.094512 -999.00  +11.00  16.13     96  +10.40 1 3 1 3 1     0    0 0.52 -3.59 ....W 15.5 16.1 142.4 21.7 12.6 -7.3 12.6 -7.4 12.3 -7.5 12.7 -8.2
2025-12-25T04:16:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:16:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:16:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.094512
2025-12-25T04:16:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:16:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:16:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:16:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:16:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:16:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:15:48', tmtdew=0.27, humidity=98.01, cloud=0.0, wind=17.12, temperature=11.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:16:05.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:16:18.133 [DEBUG] [Thread-4940] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:16:18.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:16:30.699 [DEBUG] [Thread-4943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:16:35.778 [DEBUG] [Thread-4944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:16:45.746 [DEBUG] [Thread-4945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:17:00.778 [DEBUG] [Thread-4946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:17:04.949 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:17:04.950 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:17:15.811 [DEBUG] [Thread-4947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:17:30.842 [DEBUG] [Thread-4948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:17:35.879 [DEBUG] [Thread-4949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:17:45.880 [DEBUG] [Thread-4950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:18:00.912 [DEBUG] [Thread-4951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:18:05.152 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:18:05.153 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:18:15.943 [DEBUG] [Thread-4952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:18:30.976 [DEBUG] [Thread-4953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:18:31.765 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-25T04:18:35.942 [DEBUG] [Thread-4954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:18:46.005 [DEBUG] [Thread-4955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:19:01.039 [DEBUG] [Thread-4956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:19:01.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:19:01.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:19:01.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:19:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 18, 28), 0.27, 98.01, 0.0, 21.79, 11.06, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:19:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:18:28
2025-12-25T04:19:02.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:19:02.849 [DEBUG] [Thread-4957] [transport.py] [_log()] starting thread (client mode): 0xb6b17190
2025-12-25T04:19:02.849 [DEBUG] [Thread-4957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:19:02.869 [DEBUG] [Thread-4957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:19:02.869 [INFO] [Thread-4957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:19:02.872 [DEBUG] [Thread-4957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:19:02.872 [DEBUG] [Thread-4957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:19:02.872 [DEBUG] [Thread-4957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:19:02.872 [DEBUG] [Thread-4957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:19:02.872 [DEBUG] [Thread-4957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:19:02.872 [DEBUG] [Thread-4957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] client lang: <none>
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] server lang: <none>
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] kex follows: False
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] Compression: none
2025-12-25T04:19:02.873 [DEBUG] [Thread-4957] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:19:02.891 [DEBUG] [Thread-4957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:19:02.891 [DEBUG] [Thread-4957] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:19:02.892 [DEBUG] [Thread-4957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:19:02.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:19:02.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:19:02.893 [DEBUG] [Thread-4957] [transport.py] [_log()] userauth is OK
2025-12-25T04:19:02.893 [DEBUG] [Thread-4957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:19:02.893 [DEBUG] [Thread-4957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:19:02.893 [DEBUG] [Thread-4957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:19:02.893 [DEBUG] [Thread-4957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:19:02.902 [INFO] [Thread-4957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:19:02.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:19:03.513 [DEBUG] [Thread-4957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:19:03.513 [DEBUG] [Thread-4957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:19:03.513 [DEBUG] [Thread-4957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:19:03.554 [DEBUG] [Thread-4957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:19:03.554 [DEBUG] [Thread-4957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:19:03.558 [DEBUG] [Thread-4957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:19:03.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:19:03.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:19:03.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:19:03.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:19:03.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:19:03.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:19:03.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:19:03.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:19:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:19:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.096248 -999.00  +11.00  16.03     96  +10.40 1 3 1 3 1     0    0 0.55 -2.93 ----- 19.1 16.0 149.2 25.7 12.6 -7.1 12.5 -6.6 12.3 -7.0 12.6 -8.8
2025-12-25T04:19:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:19:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:19:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.096248
2025-12-25T04:19:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:19:03.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:19:03.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:19:03.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:19:03.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:19:03.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:18:28', tmtdew=0.27, humidity=98.01, cloud=0.0, wind=21.79, temperature=11.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:18:35.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:19:03.580 [DEBUG] [Thread-4957] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:19:03.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:19:03.673 [DEBUG] [Thread-4960] [transport.py] [_log()] starting thread (client mode): 0xb6b35a80
2025-12-25T04:19:03.673 [DEBUG] [Thread-4960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:19:03.687 [DEBUG] [Thread-4960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:19:03.687 [INFO] [Thread-4960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] client lang: <none>
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] server lang: <none>
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] kex follows: False
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:19:03.695 [DEBUG] [Thread-4960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:19:03.696 [DEBUG] [Thread-4960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:19:03.696 [DEBUG] [Thread-4960] [transport.py] [_log()] Compression: none
2025-12-25T04:19:03.696 [DEBUG] [Thread-4960] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:19:03.754 [DEBUG] [Thread-4960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:19:03.754 [DEBUG] [Thread-4960] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:19:03.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:19:03.756 [DEBUG] [Thread-4960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:19:03.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:19:03.810 [DEBUG] [Thread-4960] [transport.py] [_log()] userauth is OK
2025-12-25T04:19:03.811 [DEBUG] [Thread-4960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:19:03.811 [DEBUG] [Thread-4960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:19:03.811 [DEBUG] [Thread-4960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:19:03.811 [DEBUG] [Thread-4960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:19:03.837 [INFO] [Thread-4960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:19:03.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:19:03.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:19:04.680 [DEBUG] [Thread-4960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:19:04.681 [DEBUG] [Thread-4960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:19:04.730 [DEBUG] [Thread-4960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:19:04.731 [DEBUG] [Thread-4960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:19:04.742 [DEBUG] [Thread-4960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:19:04.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:19:04.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:19:04.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:19:04.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:19:04.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:19:04.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:19:04.785 [DEBUG] [Thread-4960] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:19:05.355 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:19:05.356 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:19:16.075 [DEBUG] [Thread-4962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:19:31.122 [DEBUG] [Thread-4963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:19:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:19:34.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:19:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:19:35.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 19), 0.27, 98.05, 0.0, 21.12, 11.07, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:19:35.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:19:00
2025-12-25T04:19:35.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:19:35.829 [DEBUG] [Thread-4964] [transport.py] [_log()] starting thread (client mode): 0xb6b29f00
2025-12-25T04:19:35.829 [DEBUG] [Thread-4964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:19:35.848 [DEBUG] [Thread-4964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:19:35.849 [INFO] [Thread-4964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:19:35.851 [DEBUG] [Thread-4964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] client lang: <none>
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] server lang: <none>
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] kex follows: False
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] Compression: none
2025-12-25T04:19:35.852 [DEBUG] [Thread-4964] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:19:35.866 [DEBUG] [Thread-4964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:19:35.866 [DEBUG] [Thread-4964] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:19:35.866 [DEBUG] [Thread-4964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:19:35.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:19:35.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:19:35.868 [DEBUG] [Thread-4964] [transport.py] [_log()] userauth is OK
2025-12-25T04:19:35.869 [DEBUG] [Thread-4964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:19:35.869 [DEBUG] [Thread-4964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:19:35.869 [DEBUG] [Thread-4964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:19:35.869 [DEBUG] [Thread-4964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:19:35.888 [INFO] [Thread-4964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:19:35.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:19:36.015 [DEBUG] [Thread-4966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:19:36.475 [DEBUG] [Thread-4964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:19:36.475 [DEBUG] [Thread-4964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:19:36.476 [DEBUG] [Thread-4964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:19:36.516 [DEBUG] [Thread-4964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:19:36.516 [DEBUG] [Thread-4964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:19:36.519 [DEBUG] [Thread-4964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:19:36.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:19:36.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:19:36.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:19:36.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:19:36.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:19:36.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:19:36.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:19:36.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:19:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:19:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.096595 -999.00  +11.00  18.61     96  +10.40 1 3 1 3 1     0    0 0.53 -2.97 ----- 16.0 18.6 140.2 21.5 12.6 -9.3 12.5 -8.8 12.3 -9.0 12.6 -7.7
2025-12-25T04:19:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:19:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:19:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.096595
2025-12-25T04:19:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:19:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:19:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:19:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:19:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:19:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:19:00', tmtdew=0.27, humidity=98.05, cloud=0.0, wind=21.12, temperature=11.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:19:05.808', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:19:36.542 [DEBUG] [Thread-4964] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:19:36.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:19:36.635 [DEBUG] [Thread-4968] [transport.py] [_log()] starting thread (client mode): 0xb6b20d30
2025-12-25T04:19:36.635 [DEBUG] [Thread-4968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:19:36.653 [DEBUG] [Thread-4968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:19:36.653 [INFO] [Thread-4968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:19:36.661 [DEBUG] [Thread-4968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:19:36.661 [DEBUG] [Thread-4968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:19:36.661 [DEBUG] [Thread-4968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:19:36.661 [DEBUG] [Thread-4968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] client lang: <none>
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] server lang: <none>
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] kex follows: False
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] Compression: none
2025-12-25T04:19:36.662 [DEBUG] [Thread-4968] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:19:36.722 [DEBUG] [Thread-4968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:19:36.722 [DEBUG] [Thread-4968] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:19:36.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:19:36.723 [DEBUG] [Thread-4968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:19:36.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:19:36.778 [DEBUG] [Thread-4968] [transport.py] [_log()] userauth is OK
2025-12-25T04:19:36.778 [DEBUG] [Thread-4968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:19:36.778 [DEBUG] [Thread-4968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:19:36.779 [DEBUG] [Thread-4968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:19:36.779 [DEBUG] [Thread-4968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:19:36.798 [INFO] [Thread-4968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:19:36.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:19:36.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:19:37.598 [DEBUG] [Thread-4968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:19:37.598 [DEBUG] [Thread-4968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:19:37.646 [DEBUG] [Thread-4968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:19:37.646 [DEBUG] [Thread-4968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:19:37.655 [DEBUG] [Thread-4968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:19:37.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:19:37.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:19:37.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:19:37.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:19:37.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:19:37.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:19:37.692 [DEBUG] [Thread-4968] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:19:46.156 [DEBUG] [Thread-4970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:20:01.205 [DEBUG] [Thread-4971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:20:05.558 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:20:05.558 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:20:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:20:07.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:20:07.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:20:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 19, 32), 0.45, 96.99, 0.0, 21.35, 11.35, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:20:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:19:32
2025-12-25T04:20:08.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:20:08.732 [DEBUG] [Thread-4972] [transport.py] [_log()] starting thread (client mode): 0xb95f06a0
2025-12-25T04:20:08.732 [DEBUG] [Thread-4972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:20:08.753 [DEBUG] [Thread-4972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:20:08.754 [INFO] [Thread-4972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:20:08.757 [DEBUG] [Thread-4972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] client lang: <none>
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] server lang: <none>
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] kex follows: False
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] Compression: none
2025-12-25T04:20:08.758 [DEBUG] [Thread-4972] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:20:08.768 [DEBUG] [Thread-4972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:20:08.769 [DEBUG] [Thread-4972] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:20:08.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:20:08.771 [DEBUG] [Thread-4972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:20:08.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:20:08.773 [DEBUG] [Thread-4972] [transport.py] [_log()] userauth is OK
2025-12-25T04:20:08.773 [DEBUG] [Thread-4972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:20:08.773 [DEBUG] [Thread-4972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:20:08.773 [DEBUG] [Thread-4972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:20:08.773 [DEBUG] [Thread-4972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:20:08.804 [INFO] [Thread-4972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:20:08.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:20:09.873 [DEBUG] [Thread-4972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:20:09.873 [DEBUG] [Thread-4972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:20:09.874 [DEBUG] [Thread-4972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:20:09.914 [DEBUG] [Thread-4972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:20:09.914 [DEBUG] [Thread-4972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:20:09.917 [DEBUG] [Thread-4972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:20:09.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:20:09.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:20:09.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:20:09.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:20:09.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:20:09.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:20:09.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:20:09.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:20:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:20:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.097289 -999.00  +11.00  18.36     96  +10.40 1 3 1 3 1     0    0 0.52 -3.29 ..... 17.5 18.4 144.6 23.4 12.7 -6.7 12.5 -6.2 12.3 -6.2 12.6 -7.1
2025-12-25T04:20:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:20:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:20:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.097289
2025-12-25T04:20:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:20:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:20:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:20:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:20:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:20:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:19:32', tmtdew=0.45, humidity=96.99, cloud=0.0, wind=21.35, temperature=11.35, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:20:05.770', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:20:09.936 [DEBUG] [Thread-4972] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:20:10.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:20:10.027 [DEBUG] [Thread-4975] [transport.py] [_log()] starting thread (client mode): 0xb95f23b0
2025-12-25T04:20:10.027 [DEBUG] [Thread-4975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:20:10.042 [DEBUG] [Thread-4975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:20:10.042 [INFO] [Thread-4975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] client lang: <none>
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] server lang: <none>
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] kex follows: False
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:20:10.050 [DEBUG] [Thread-4975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:20:10.051 [DEBUG] [Thread-4975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:20:10.051 [DEBUG] [Thread-4975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:20:10.051 [DEBUG] [Thread-4975] [transport.py] [_log()] Compression: none
2025-12-25T04:20:10.051 [DEBUG] [Thread-4975] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:20:10.110 [DEBUG] [Thread-4975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:20:10.110 [DEBUG] [Thread-4975] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:20:10.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:20:10.111 [DEBUG] [Thread-4975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:20:10.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:20:10.166 [DEBUG] [Thread-4975] [transport.py] [_log()] userauth is OK
2025-12-25T04:20:10.166 [DEBUG] [Thread-4975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:20:10.167 [DEBUG] [Thread-4975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:20:10.167 [DEBUG] [Thread-4975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:20:10.167 [DEBUG] [Thread-4975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:20:10.186 [INFO] [Thread-4975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:20:10.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:20:10.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:20:11.007 [DEBUG] [Thread-4975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:20:11.007 [DEBUG] [Thread-4975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:20:11.055 [DEBUG] [Thread-4975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:20:11.055 [DEBUG] [Thread-4975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:20:11.064 [DEBUG] [Thread-4975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:20:11.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:20:11.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:20:11.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') -> 00000000
2025-12-25T04:20:11.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:20:11.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:20:11.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:20:11.100 [DEBUG] [Thread-4975] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:20:16.236 [DEBUG] [Thread-4977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:20:31.291 [DEBUG] [Thread-4978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:20:36.071 [DEBUG] [Thread-4979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:20:41.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:20:41.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:20:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:20:41.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 20, 37), 0.21, 98.08, 0.0, 21.47, 11.09, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:20:41.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:20:37
2025-12-25T04:20:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:20:42.100 [DEBUG] [Thread-4980] [transport.py] [_log()] starting thread (client mode): 0xb95f1900
2025-12-25T04:20:42.100 [DEBUG] [Thread-4980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:20:42.121 [DEBUG] [Thread-4980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:20:42.121 [INFO] [Thread-4980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] client lang: <none>
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] server lang: <none>
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] kex follows: False
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:20:42.124 [DEBUG] [Thread-4980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:20:42.125 [DEBUG] [Thread-4980] [transport.py] [_log()] Compression: none
2025-12-25T04:20:42.125 [DEBUG] [Thread-4980] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:20:42.142 [DEBUG] [Thread-4980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:20:42.142 [DEBUG] [Thread-4980] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:20:42.142 [DEBUG] [Thread-4980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:20:42.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:20:42.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:20:42.143 [DEBUG] [Thread-4980] [transport.py] [_log()] userauth is OK
2025-12-25T04:20:42.143 [DEBUG] [Thread-4980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:20:42.143 [DEBUG] [Thread-4980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:20:42.143 [DEBUG] [Thread-4980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:20:42.143 [DEBUG] [Thread-4980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:20:42.152 [INFO] [Thread-4980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:20:42.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:20:42.790 [DEBUG] [Thread-4980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:20:42.790 [DEBUG] [Thread-4980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:20:42.791 [DEBUG] [Thread-4980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:20:42.831 [DEBUG] [Thread-4980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:20:42.831 [DEBUG] [Thread-4980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:20:42.835 [DEBUG] [Thread-4980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:20:42.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:20:42.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:20:42.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:20:42.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:20:42.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:20:42.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:20:42.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:20:42.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:20:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:20:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.097289 -999.00  +11.00  18.36     96  +10.40 1 3 1 3 1     0    0 0.52 -3.29 ..... 17.5 18.4 144.6 23.4 12.7 -6.7 12.5 -6.2 12.3 -6.2 12.6 -7.1
2025-12-25T04:20:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:20:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:20:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.097289
2025-12-25T04:20:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:20:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:20:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:20:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:20:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:20:42.862 [DEBUG] [Thread-4980] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:20:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:20:37', tmtdew=0.21, humidity=98.08, cloud=0.0, wind=21.47, temperature=11.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:20:05.770', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:20:42.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:20:42.952 [DEBUG] [Thread-4983] [transport.py] [_log()] starting thread (client mode): 0xb6b2b400
2025-12-25T04:20:42.953 [DEBUG] [Thread-4983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:20:42.967 [DEBUG] [Thread-4983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:20:42.967 [INFO] [Thread-4983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:20:42.975 [DEBUG] [Thread-4983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:20:42.975 [DEBUG] [Thread-4983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:20:42.975 [DEBUG] [Thread-4983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:20:42.975 [DEBUG] [Thread-4983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:20:42.975 [DEBUG] [Thread-4983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:20:42.975 [DEBUG] [Thread-4983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] client lang: <none>
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] server lang: <none>
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] kex follows: False
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:20:42.976 [DEBUG] [Thread-4983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:20:42.977 [DEBUG] [Thread-4983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:20:42.977 [DEBUG] [Thread-4983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:20:42.977 [DEBUG] [Thread-4983] [transport.py] [_log()] Compression: none
2025-12-25T04:20:42.977 [DEBUG] [Thread-4983] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:20:43.033 [DEBUG] [Thread-4983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:20:43.034 [DEBUG] [Thread-4983] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:20:43.034 [DEBUG] [Thread-4983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:20:43.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:20:43.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:20:43.090 [DEBUG] [Thread-4983] [transport.py] [_log()] userauth is OK
2025-12-25T04:20:43.090 [DEBUG] [Thread-4983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:20:43.090 [DEBUG] [Thread-4983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:20:43.090 [DEBUG] [Thread-4983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:20:43.091 [DEBUG] [Thread-4983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:20:43.115 [INFO] [Thread-4983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:20:43.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:20:43.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:20:43.945 [DEBUG] [Thread-4983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:20:43.946 [DEBUG] [Thread-4983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:20:43.994 [DEBUG] [Thread-4983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:20:43.994 [DEBUG] [Thread-4983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:20:44.003 [DEBUG] [Thread-4983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:20:44.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:20:44.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:20:44.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:20:44.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:20:44.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:20:44.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:20:44.037 [DEBUG] [Thread-4983] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:20:46.324 [DEBUG] [Thread-4985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:21:01.374 [DEBUG] [Thread-4986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:21:05.757 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:21:05.758 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:21:14.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:21:14.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:21:14.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:21:14.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 21, 10), 0.21, 98.06, 0.0, 20.98, 11.06, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:21:14.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:21:10
2025-12-25T04:21:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:21:15.047 [DEBUG] [Thread-4987] [transport.py] [_log()] starting thread (client mode): 0xb6b158d0
2025-12-25T04:21:15.047 [DEBUG] [Thread-4987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:21:15.068 [DEBUG] [Thread-4987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:21:15.068 [INFO] [Thread-4987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] client lang: <none>
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] server lang: <none>
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] kex follows: False
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:21:15.071 [DEBUG] [Thread-4987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:21:15.072 [DEBUG] [Thread-4987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:21:15.072 [DEBUG] [Thread-4987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:21:15.072 [DEBUG] [Thread-4987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:21:15.072 [DEBUG] [Thread-4987] [transport.py] [_log()] Compression: none
2025-12-25T04:21:15.072 [DEBUG] [Thread-4987] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:21:15.087 [DEBUG] [Thread-4987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:21:15.088 [DEBUG] [Thread-4987] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:21:15.088 [DEBUG] [Thread-4987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:21:15.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:21:15.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:21:15.132 [DEBUG] [Thread-4987] [transport.py] [_log()] userauth is OK
2025-12-25T04:21:15.132 [DEBUG] [Thread-4987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:21:15.132 [DEBUG] [Thread-4987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:21:15.132 [DEBUG] [Thread-4987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:21:15.132 [DEBUG] [Thread-4987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:21:15.159 [INFO] [Thread-4987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:21:15.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:21:15.954 [DEBUG] [Thread-4987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:21:15.954 [DEBUG] [Thread-4987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:21:15.954 [DEBUG] [Thread-4987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:21:15.996 [DEBUG] [Thread-4987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:21:15.996 [DEBUG] [Thread-4987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:21:15.998 [DEBUG] [Thread-4987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:21:16.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:21:16.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:21:16.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:21:16.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:21:16.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:21:16.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:21:16.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.097637 -999.00  +11.00  17.91     96  +10.40 1 3 1 3 1     0    0 0.53 -3.03 ----- 15.2 17.9 139.6 25.3 12.6 -7.5 12.5 -7.3 12.4 -7.1 12.6 -7.1
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.097637
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:21:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:21:16.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:21:16.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:21:10', tmtdew=0.21, humidity=98.06, cloud=0.0, wind=20.98, temperature=11.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:20:35.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:21:16.016 [DEBUG] [Thread-4987] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:21:16.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:21:16.100 [DEBUG] [Thread-4990] [transport.py] [_log()] starting thread (client mode): 0xb6b2ace0
2025-12-25T04:21:16.101 [DEBUG] [Thread-4990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:21:16.115 [DEBUG] [Thread-4990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:21:16.115 [INFO] [Thread-4990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] client lang: <none>
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] server lang: <none>
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] kex follows: False
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] Compression: none
2025-12-25T04:21:16.123 [DEBUG] [Thread-4990] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:21:16.180 [DEBUG] [Thread-4990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:21:16.180 [DEBUG] [Thread-4990] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:21:16.180 [DEBUG] [Thread-4990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:21:16.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:21:16.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:21:16.238 [DEBUG] [Thread-4990] [transport.py] [_log()] userauth is OK
2025-12-25T04:21:16.238 [DEBUG] [Thread-4990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:21:16.238 [DEBUG] [Thread-4990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:21:16.238 [DEBUG] [Thread-4990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:21:16.238 [DEBUG] [Thread-4990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:21:16.252 [INFO] [Thread-4990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:21:16.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:21:16.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:21:16.408 [DEBUG] [Thread-4992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:21:17.106 [DEBUG] [Thread-4990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:21:17.106 [DEBUG] [Thread-4990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:21:17.154 [DEBUG] [Thread-4990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:21:17.154 [DEBUG] [Thread-4990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:21:17.162 [DEBUG] [Thread-4990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:21:17.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:21:17.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:21:17.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:21:17.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:21:17.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:21:17.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:21:17.193 [DEBUG] [Thread-4990] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:21:31.448 [DEBUG] [Thread-4993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:21:36.143 [DEBUG] [Thread-4994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:21:46.485 [DEBUG] [Thread-4995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:21:47.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:21:47.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:21:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:21:47.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 21, 42), 0.21, 98.06, 0.0, 20.57, 11.04, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:21:47.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:21:42
2025-12-25T04:21:48.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:21:48.217 [DEBUG] [Thread-4996] [transport.py] [_log()] starting thread (client mode): 0xb95b1ab0
2025-12-25T04:21:48.217 [DEBUG] [Thread-4996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:21:48.237 [DEBUG] [Thread-4996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:21:48.237 [INFO] [Thread-4996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] client lang: <none>
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] server lang: <none>
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] kex follows: False
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] Compression: none
2025-12-25T04:21:48.240 [DEBUG] [Thread-4996] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:21:48.257 [DEBUG] [Thread-4996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:21:48.258 [DEBUG] [Thread-4996] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:21:48.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:21:48.259 [DEBUG] [Thread-4996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:21:48.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:21:48.261 [DEBUG] [Thread-4996] [transport.py] [_log()] userauth is OK
2025-12-25T04:21:48.261 [DEBUG] [Thread-4996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:21:48.261 [DEBUG] [Thread-4996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:21:48.261 [DEBUG] [Thread-4996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:21:48.261 [DEBUG] [Thread-4996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:21:48.285 [INFO] [Thread-4996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:21:48.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:21:48.943 [DEBUG] [Thread-4996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:21:48.943 [DEBUG] [Thread-4996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:21:48.943 [DEBUG] [Thread-4996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:21:48.984 [DEBUG] [Thread-4996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:21:48.984 [DEBUG] [Thread-4996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:21:48.987 [DEBUG] [Thread-4996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:21:48.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:21:48.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:21:49.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:21:49.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:21:49.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:21:49.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:21:49.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:21:49.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:21:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:21:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.097984 -999.00  +11.00  16.34     96  +10.40 1 3 1 3 1     0    0 0.53 -2.76 ----- 19.8 16.3 153.0 21.0 12.6 -8.6 12.5 -8.0 12.3 -7.3 12.6 -7.8
2025-12-25T04:21:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:21:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:21:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.097984
2025-12-25T04:21:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:21:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:21:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:21:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:21:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:21:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:21:42', tmtdew=0.21, humidity=98.06, cloud=0.0, wind=20.57, temperature=11.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:21:05.818', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:21:49.014 [DEBUG] [Thread-4996] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:21:49.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:21:49.099 [DEBUG] [Thread-4999] [transport.py] [_log()] starting thread (client mode): 0xb6b355d0
2025-12-25T04:21:49.099 [DEBUG] [Thread-4999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:21:49.117 [DEBUG] [Thread-4999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:21:49.117 [INFO] [Thread-4999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:21:49.125 [DEBUG] [Thread-4999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:21:49.126 [DEBUG] [Thread-4999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:21:49.126 [DEBUG] [Thread-4999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:21:49.126 [DEBUG] [Thread-4999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:21:49.126 [DEBUG] [Thread-4999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] client lang: <none>
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] server lang: <none>
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] kex follows: False
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] Compression: none
2025-12-25T04:21:49.127 [DEBUG] [Thread-4999] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:21:49.186 [DEBUG] [Thread-4999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:21:49.187 [DEBUG] [Thread-4999] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:21:49.187 [DEBUG] [Thread-4999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:21:49.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:21:49.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:21:49.245 [DEBUG] [Thread-4999] [transport.py] [_log()] userauth is OK
2025-12-25T04:21:49.246 [DEBUG] [Thread-4999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:21:49.246 [DEBUG] [Thread-4999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:21:49.246 [DEBUG] [Thread-4999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:21:49.246 [DEBUG] [Thread-4999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:21:49.266 [INFO] [Thread-4999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:21:49.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:21:49.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:21:50.132 [DEBUG] [Thread-4999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:21:50.132 [DEBUG] [Thread-4999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:21:50.180 [DEBUG] [Thread-4999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:21:50.180 [DEBUG] [Thread-4999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:21:50.189 [DEBUG] [Thread-4999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:21:50.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:21:50.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:21:50.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:21:50.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:21:50.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:21:50.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:21:50.223 [DEBUG] [Thread-4999] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:22:01.516 [DEBUG] [Thread-5001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:22:05.960 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:22:05.961 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:22:16.567 [DEBUG] [Thread-5002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:22:20.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:22:20.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:22:20.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:22:20.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 22, 14), 0.21, 98.06, 0.0, 20.84, 11.06, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:22:20.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:22:14
2025-12-25T04:22:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:22:21.229 [DEBUG] [Thread-5003] [transport.py] [_log()] starting thread (client mode): 0xb6b16fe0
2025-12-25T04:22:21.229 [DEBUG] [Thread-5003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:22:21.249 [DEBUG] [Thread-5003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:22:21.249 [INFO] [Thread-5003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:22:21.250 [DEBUG] [Thread-5003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] client lang: <none>
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] server lang: <none>
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] kex follows: False
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:22:21.251 [DEBUG] [Thread-5003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:22:21.252 [DEBUG] [Thread-5003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:22:21.252 [DEBUG] [Thread-5003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:22:21.252 [DEBUG] [Thread-5003] [transport.py] [_log()] Compression: none
2025-12-25T04:22:21.252 [DEBUG] [Thread-5003] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:22:21.261 [DEBUG] [Thread-5003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:22:21.261 [DEBUG] [Thread-5003] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:22:21.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:22:21.262 [DEBUG] [Thread-5003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:22:21.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:22:21.263 [DEBUG] [Thread-5003] [transport.py] [_log()] userauth is OK
2025-12-25T04:22:21.263 [DEBUG] [Thread-5003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:22:21.263 [DEBUG] [Thread-5003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:22:21.264 [DEBUG] [Thread-5003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:22:21.264 [DEBUG] [Thread-5003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:22:21.276 [INFO] [Thread-5003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:22:21.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:22:22.017 [DEBUG] [Thread-5003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:22:22.017 [DEBUG] [Thread-5003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:22:22.018 [DEBUG] [Thread-5003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:22:22.058 [DEBUG] [Thread-5003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:22:22.058 [DEBUG] [Thread-5003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:22:22.062 [DEBUG] [Thread-5003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:22:22.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:22:22.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:22:22.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:22:22.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:22:22.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:22:22.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:22:22.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:22:22.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:22:22.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:22:22.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.098331 -999.00  +11.00  17.03     96  +10.40 1 3 1 3 1     0    0 0.53 -2.70 ----- 18.6 17.0 162.1 23.4 12.6 -8.2 12.5 -8.3 12.3 -7.3 12.6 -6.4
2025-12-25T04:22:22.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:22:22.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:22:22.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.098331
2025-12-25T04:22:22.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:22:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:22:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:22:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:22:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:22:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:22:14', tmtdew=0.21, humidity=98.06, cloud=0.0, wind=20.84, temperature=11.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:21:35.798', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:22:22.090 [DEBUG] [Thread-5003] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:22:22.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:22:22.179 [DEBUG] [Thread-5006] [transport.py] [_log()] starting thread (client mode): 0xb6b222f0
2025-12-25T04:22:22.179 [DEBUG] [Thread-5006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:22:22.193 [DEBUG] [Thread-5006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:22:22.193 [INFO] [Thread-5006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:22:22.200 [DEBUG] [Thread-5006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:22:22.200 [DEBUG] [Thread-5006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] client lang: <none>
2025-12-25T04:22:22.201 [DEBUG] [Thread-5006] [transport.py] [_log()] server lang: <none>
2025-12-25T04:22:22.202 [DEBUG] [Thread-5006] [transport.py] [_log()] kex follows: False
2025-12-25T04:22:22.202 [DEBUG] [Thread-5006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:22:22.202 [DEBUG] [Thread-5006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:22:22.202 [DEBUG] [Thread-5006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:22:22.202 [DEBUG] [Thread-5006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:22:22.202 [DEBUG] [Thread-5006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:22:22.202 [DEBUG] [Thread-5006] [transport.py] [_log()] Compression: none
2025-12-25T04:22:22.203 [DEBUG] [Thread-5006] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:22:22.257 [DEBUG] [Thread-5006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:22:22.257 [DEBUG] [Thread-5006] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:22:22.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:22:22.258 [DEBUG] [Thread-5006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:22:22.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:22:22.314 [DEBUG] [Thread-5006] [transport.py] [_log()] userauth is OK
2025-12-25T04:22:22.314 [DEBUG] [Thread-5006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:22:22.314 [DEBUG] [Thread-5006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:22:22.314 [DEBUG] [Thread-5006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:22:22.314 [DEBUG] [Thread-5006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:22:22.333 [INFO] [Thread-5006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:22:22.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:22:22.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:22:23.182 [DEBUG] [Thread-5006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:22:23.182 [DEBUG] [Thread-5006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:22:23.230 [DEBUG] [Thread-5006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:22:23.230 [DEBUG] [Thread-5006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:22:23.239 [DEBUG] [Thread-5006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:22:23.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:22:23.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:22:23.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:22:23.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:22:23.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:22:23.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:22:23.276 [DEBUG] [Thread-5006] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:22:31.599 [DEBUG] [Thread-5008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:22:36.218 [DEBUG] [Thread-5009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:22:46.646 [DEBUG] [Thread-5010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:22:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:22:53.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:22:53.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:22:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 22, 46), 0.22, 98.05, 0.0, 21.32, 10.99, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:22:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:22:46
2025-12-25T04:22:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:22:54.256 [DEBUG] [Thread-5011] [transport.py] [_log()] starting thread (client mode): 0xb6b227a0
2025-12-25T04:22:54.256 [DEBUG] [Thread-5011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:22:54.276 [DEBUG] [Thread-5011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:22:54.277 [INFO] [Thread-5011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:22:54.280 [DEBUG] [Thread-5011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:22:54.280 [DEBUG] [Thread-5011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:22:54.280 [DEBUG] [Thread-5011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:22:54.280 [DEBUG] [Thread-5011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:22:54.280 [DEBUG] [Thread-5011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:22:54.280 [DEBUG] [Thread-5011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:22:54.280 [DEBUG] [Thread-5011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] client lang: <none>
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] server lang: <none>
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] kex follows: False
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] Compression: none
2025-12-25T04:22:54.281 [DEBUG] [Thread-5011] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:22:54.296 [DEBUG] [Thread-5011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:22:54.297 [DEBUG] [Thread-5011] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:22:54.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:22:54.298 [DEBUG] [Thread-5011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:22:54.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:22:54.300 [DEBUG] [Thread-5011] [transport.py] [_log()] userauth is OK
2025-12-25T04:22:54.300 [DEBUG] [Thread-5011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:22:54.300 [DEBUG] [Thread-5011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:22:54.300 [DEBUG] [Thread-5011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:22:54.300 [DEBUG] [Thread-5011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:22:54.316 [INFO] [Thread-5011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:22:54.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:22:54.984 [DEBUG] [Thread-5011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:22:54.984 [DEBUG] [Thread-5011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:22:54.985 [DEBUG] [Thread-5011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:22:55.025 [DEBUG] [Thread-5011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:22:55.025 [DEBUG] [Thread-5011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:22:55.029 [DEBUG] [Thread-5011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:22:55.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:22:55.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:22:55.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:22:55.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:22:55.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:22:55.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:22:55.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:22:55.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:22:55.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:22:55.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.098678 -999.00  +10.90  15.43     96  +10.30 1 3 1 3 1     0    0 0.53 -2.44 ..... 23.2 15.4 151.6 23.4 12.6 -7.1 12.4 -7.0 12.3 -7.7 12.6 -7.2
2025-12-25T04:22:55.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:22:55.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:22:55.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.098678
2025-12-25T04:22:55.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:22:55.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:22:55.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:22:55.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:22:55.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:22:55.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:22:46', tmtdew=0.22, humidity=98.05, cloud=0.0, wind=21.32, temperature=10.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:22:05.779', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:22:55.055 [DEBUG] [Thread-5011] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:22:55.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:22:55.160 [DEBUG] [Thread-5014] [transport.py] [_log()] starting thread (client mode): 0xb6b22320
2025-12-25T04:22:55.160 [DEBUG] [Thread-5014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:22:55.175 [DEBUG] [Thread-5014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:22:55.175 [INFO] [Thread-5014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:22:55.183 [DEBUG] [Thread-5014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:22:55.183 [DEBUG] [Thread-5014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:22:55.183 [DEBUG] [Thread-5014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:22:55.183 [DEBUG] [Thread-5014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] client lang: <none>
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] server lang: <none>
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] kex follows: False
2025-12-25T04:22:55.184 [DEBUG] [Thread-5014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:22:55.185 [DEBUG] [Thread-5014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:22:55.185 [DEBUG] [Thread-5014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:22:55.185 [DEBUG] [Thread-5014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:22:55.185 [DEBUG] [Thread-5014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:22:55.185 [DEBUG] [Thread-5014] [transport.py] [_log()] Compression: none
2025-12-25T04:22:55.185 [DEBUG] [Thread-5014] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:22:55.241 [DEBUG] [Thread-5014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:22:55.242 [DEBUG] [Thread-5014] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:22:55.242 [DEBUG] [Thread-5014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:22:55.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:22:55.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:22:55.297 [DEBUG] [Thread-5014] [transport.py] [_log()] userauth is OK
2025-12-25T04:22:55.297 [DEBUG] [Thread-5014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:22:55.297 [DEBUG] [Thread-5014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:22:55.297 [DEBUG] [Thread-5014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:22:55.297 [DEBUG] [Thread-5014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:22:55.319 [INFO] [Thread-5014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:22:55.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:22:55.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:22:56.150 [DEBUG] [Thread-5014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:22:56.151 [DEBUG] [Thread-5014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:22:56.199 [DEBUG] [Thread-5014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:22:56.199 [DEBUG] [Thread-5014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:22:56.209 [DEBUG] [Thread-5014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:22:56.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:22:56.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:22:56.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:22:56.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:22:56.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:22:56.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:22:56.246 [DEBUG] [Thread-5014] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:23:01.678 [DEBUG] [Thread-5016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:23:06.164 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:23:06.165 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:23:16.716 [DEBUG] [Thread-5017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:23:26.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:23:26.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:23:26.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:23:26.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 23, 18), 0.22, 98.03, 0.0, 20.73, 10.96, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:23:26.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:23:18
2025-12-25T04:23:27.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:23:27.233 [DEBUG] [Thread-5018] [transport.py] [_log()] starting thread (client mode): 0xb6b2b460
2025-12-25T04:23:27.233 [DEBUG] [Thread-5018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:23:27.254 [DEBUG] [Thread-5018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:23:27.254 [INFO] [Thread-5018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:23:27.258 [DEBUG] [Thread-5018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] client lang: <none>
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] server lang: <none>
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] kex follows: False
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] Compression: none
2025-12-25T04:23:27.259 [DEBUG] [Thread-5018] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:23:27.277 [DEBUG] [Thread-5018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:23:27.277 [DEBUG] [Thread-5018] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:23:27.278 [DEBUG] [Thread-5018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:23:27.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:23:27.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:23:27.280 [DEBUG] [Thread-5018] [transport.py] [_log()] userauth is OK
2025-12-25T04:23:27.280 [DEBUG] [Thread-5018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:23:27.280 [DEBUG] [Thread-5018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:23:27.280 [DEBUG] [Thread-5018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:23:27.281 [DEBUG] [Thread-5018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:23:27.316 [INFO] [Thread-5018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:23:27.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:23:28.100 [DEBUG] [Thread-5018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:23:28.101 [DEBUG] [Thread-5018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:23:28.101 [DEBUG] [Thread-5018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:23:28.142 [DEBUG] [Thread-5018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:23:28.143 [DEBUG] [Thread-5018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:23:28.145 [DEBUG] [Thread-5018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:23:28.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:23:28.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:23:28.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:23:28.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:23:28.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:23:28.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:23:28.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:23:28.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:23:28.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:23:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.099026 -999.00  +10.90  18.83     96  +10.30 1 3 1 3 1     0    0 0.55 -2.42 ----- 15.9 18.8 145.2 22.8 12.6 -9.0 12.4 -9.1 12.3 -9.0 12.6 -9.1
2025-12-25T04:23:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:23:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:23:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.099026
2025-12-25T04:23:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:23:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:23:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:23:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:23:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:23:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:23:18', tmtdew=0.22, humidity=98.03, cloud=0.0, wind=20.73, temperature=10.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:22:35.846', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:23:28.171 [DEBUG] [Thread-5018] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:23:28.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:23:28.276 [DEBUG] [Thread-5021] [transport.py] [_log()] starting thread (client mode): 0xb6b4a170
2025-12-25T04:23:28.276 [DEBUG] [Thread-5021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:23:28.291 [DEBUG] [Thread-5021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:23:28.291 [INFO] [Thread-5021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:23:28.298 [DEBUG] [Thread-5021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:23:28.298 [DEBUG] [Thread-5021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] client lang: <none>
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] server lang: <none>
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] kex follows: False
2025-12-25T04:23:28.299 [DEBUG] [Thread-5021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:23:28.300 [DEBUG] [Thread-5021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:23:28.300 [DEBUG] [Thread-5021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:23:28.300 [DEBUG] [Thread-5021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:23:28.300 [DEBUG] [Thread-5021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:23:28.300 [DEBUG] [Thread-5021] [transport.py] [_log()] Compression: none
2025-12-25T04:23:28.300 [DEBUG] [Thread-5021] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:23:28.357 [DEBUG] [Thread-5021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:23:28.358 [DEBUG] [Thread-5021] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:23:28.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:23:28.359 [DEBUG] [Thread-5021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:23:28.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:23:28.417 [DEBUG] [Thread-5021] [transport.py] [_log()] userauth is OK
2025-12-25T04:23:28.418 [DEBUG] [Thread-5021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:23:28.418 [DEBUG] [Thread-5021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:23:28.418 [DEBUG] [Thread-5021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:23:28.418 [DEBUG] [Thread-5021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:23:28.436 [INFO] [Thread-5021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:23:28.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:23:28.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:23:29.327 [DEBUG] [Thread-5021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:23:29.327 [DEBUG] [Thread-5021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:23:29.375 [DEBUG] [Thread-5021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:23:29.375 [DEBUG] [Thread-5021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:23:29.385 [DEBUG] [Thread-5021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:23:29.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:23:29.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:23:29.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:23:29.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:23:29.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:23:29.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:23:29.422 [DEBUG] [Thread-5021] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:23:31.748 [DEBUG] [Thread-5023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:23:36.295 [DEBUG] [Thread-5024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:23:46.803 [DEBUG] [Thread-5025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:23:59.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:23:59.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:23:59.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:24:00.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 23, 50), 0.26, 98.08, 0.0, 18.09, 11.04, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:24:00.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:23:50
2025-12-25T04:24:00.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:24:00.396 [DEBUG] [Thread-5026] [transport.py] [_log()] starting thread (client mode): 0xb6b350c0
2025-12-25T04:24:00.396 [DEBUG] [Thread-5026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:24:00.419 [DEBUG] [Thread-5026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:24:00.419 [INFO] [Thread-5026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:24:00.422 [DEBUG] [Thread-5026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:24:00.422 [DEBUG] [Thread-5026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:24:00.422 [DEBUG] [Thread-5026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] client lang: <none>
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] server lang: <none>
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] kex follows: False
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] Compression: none
2025-12-25T04:24:00.423 [DEBUG] [Thread-5026] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:24:00.441 [DEBUG] [Thread-5026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:24:00.442 [DEBUG] [Thread-5026] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:24:00.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:24:00.443 [DEBUG] [Thread-5026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:24:00.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:24:00.445 [DEBUG] [Thread-5026] [transport.py] [_log()] userauth is OK
2025-12-25T04:24:00.445 [DEBUG] [Thread-5026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:24:00.445 [DEBUG] [Thread-5026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:24:00.446 [DEBUG] [Thread-5026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:24:00.446 [DEBUG] [Thread-5026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:24:00.480 [INFO] [Thread-5026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:24:00.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:24:01.131 [DEBUG] [Thread-5026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:24:01.132 [DEBUG] [Thread-5026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:24:01.132 [DEBUG] [Thread-5026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:24:01.173 [DEBUG] [Thread-5026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:24:01.173 [DEBUG] [Thread-5026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:24:01.177 [DEBUG] [Thread-5026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:24:01.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:24:01.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:24:01.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:24:01.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:24:01.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:24:01.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:24:01.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:24:01.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:24:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:24:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.099373 -999.00  +11.00  18.53     96  +10.40 1 3 1 3 1     0    0 0.55 -2.33 ----- 20.0 18.5 143.8 22.2 12.6 -7.0 12.4 -6.9 12.3 -7.2 12.6 -10.0
2025-12-25T04:24:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:24:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:24:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.099373
2025-12-25T04:24:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:24:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:24:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:24:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:24:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:24:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:23:50', tmtdew=0.26, humidity=98.08, cloud=0.0, wind=18.09, temperature=11.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:23:05.827', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:24:01.203 [DEBUG] [Thread-5026] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:24:01.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:24:01.298 [DEBUG] [Thread-5029] [transport.py] [_log()] starting thread (client mode): 0xb6b49210
2025-12-25T04:24:01.298 [DEBUG] [Thread-5029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:24:01.313 [DEBUG] [Thread-5029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:24:01.313 [INFO] [Thread-5029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] client lang: <none>
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] server lang: <none>
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] kex follows: False
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:24:01.321 [DEBUG] [Thread-5029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:24:01.322 [DEBUG] [Thread-5029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:24:01.322 [DEBUG] [Thread-5029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:24:01.322 [DEBUG] [Thread-5029] [transport.py] [_log()] Compression: none
2025-12-25T04:24:01.322 [DEBUG] [Thread-5029] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:24:01.377 [DEBUG] [Thread-5029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:24:01.378 [DEBUG] [Thread-5029] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:24:01.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:24:01.379 [DEBUG] [Thread-5029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:24:01.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:24:01.433 [DEBUG] [Thread-5029] [transport.py] [_log()] userauth is OK
2025-12-25T04:24:01.434 [DEBUG] [Thread-5029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:24:01.434 [DEBUG] [Thread-5029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:24:01.434 [DEBUG] [Thread-5029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:24:01.434 [DEBUG] [Thread-5029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:24:01.453 [INFO] [Thread-5029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:24:01.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:24:01.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:24:01.841 [DEBUG] [Thread-5031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:24:02.308 [DEBUG] [Thread-5029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:24:02.308 [DEBUG] [Thread-5029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:24:02.356 [DEBUG] [Thread-5029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:24:02.356 [DEBUG] [Thread-5029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:24:02.365 [DEBUG] [Thread-5029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:24:02.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:24:02.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:24: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
2025-12-25T04:24:02.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:24:02.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:24:02.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:24:02.402 [DEBUG] [Thread-5029] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:24:06.365 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:24:06.367 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:24:16.896 [DEBUG] [Thread-5032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:24:31.933 [DEBUG] [Thread-5033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:24:32.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:24:32.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:24:32.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:24:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 24, 22), 0.27, 98.05, 0.0, 18.26, 11.02, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:24:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:24:22
2025-12-25T04:24:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:24:33.457 [DEBUG] [Thread-5034] [transport.py] [_log()] starting thread (client mode): 0xb6b15720
2025-12-25T04:24:33.457 [DEBUG] [Thread-5034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:24:33.479 [DEBUG] [Thread-5034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:24:33.479 [INFO] [Thread-5034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:24:33.482 [DEBUG] [Thread-5034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:24:33.482 [DEBUG] [Thread-5034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] client lang: <none>
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] server lang: <none>
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] kex follows: False
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] Compression: none
2025-12-25T04:24:33.483 [DEBUG] [Thread-5034] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:24:33.490 [DEBUG] [Thread-5034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:24:33.490 [DEBUG] [Thread-5034] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:24:33.490 [DEBUG] [Thread-5034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:24:33.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:24:33.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:24:33.491 [DEBUG] [Thread-5034] [transport.py] [_log()] userauth is OK
2025-12-25T04:24:33.491 [DEBUG] [Thread-5034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:24:33.491 [DEBUG] [Thread-5034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:24:33.491 [DEBUG] [Thread-5034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:24:33.491 [DEBUG] [Thread-5034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:24:33.502 [INFO] [Thread-5034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:24:33.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:24:34.337 [DEBUG] [Thread-5034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:24:34.337 [DEBUG] [Thread-5034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:24:34.337 [DEBUG] [Thread-5034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:24:34.378 [DEBUG] [Thread-5034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:24:34.378 [DEBUG] [Thread-5034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:24:34.381 [DEBUG] [Thread-5034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:24:34.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:24:34.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:24:34.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:24:34.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:24:34.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:24:34.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:24:34.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.099720 -999.00  +10.90  19.12     96  +10.40 1 3 1 3 1     0    0 0.55 -2.23 ----- 15.5 19.1 144.2 21.9 12.6 -9.8 12.4 -9.5 12.3 -8.4 12.5 -11.1
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.099720
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:24:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:24:22', tmtdew=0.27, humidity=98.05, cloud=0.0, wind=18.26, temperature=11.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:23:35.808', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:24:34.400 [DEBUG] [Thread-5034] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:24:34.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:24:34.484 [DEBUG] [Thread-5037] [transport.py] [_log()] starting thread (client mode): 0xb6b35a80
2025-12-25T04:24:34.484 [DEBUG] [Thread-5037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:24:34.499 [DEBUG] [Thread-5037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:24:34.499 [INFO] [Thread-5037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:24:34.506 [DEBUG] [Thread-5037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:24:34.506 [DEBUG] [Thread-5037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:24:34.506 [DEBUG] [Thread-5037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:24:34.506 [DEBUG] [Thread-5037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:24:34.506 [DEBUG] [Thread-5037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] client lang: <none>
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] server lang: <none>
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] kex follows: False
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] Compression: none
2025-12-25T04:24:34.507 [DEBUG] [Thread-5037] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:24:34.564 [DEBUG] [Thread-5037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:24:34.564 [DEBUG] [Thread-5037] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:24:34.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:24:34.565 [DEBUG] [Thread-5037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:24:34.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:24:34.621 [DEBUG] [Thread-5037] [transport.py] [_log()] userauth is OK
2025-12-25T04:24:34.621 [DEBUG] [Thread-5037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:24:34.621 [DEBUG] [Thread-5037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:24:34.621 [DEBUG] [Thread-5037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:24:34.621 [DEBUG] [Thread-5037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:24:34.639 [INFO] [Thread-5037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:24:34.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:24:34.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:24:35.490 [DEBUG] [Thread-5037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:24:35.490 [DEBUG] [Thread-5037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:24:35.538 [DEBUG] [Thread-5037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:24:35.538 [DEBUG] [Thread-5037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:24:35.546 [DEBUG] [Thread-5037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:24:35.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:24:35.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')
2025-12-25T04:24:35.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:24:35.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:24:35.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:24:35.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:24:35.577 [DEBUG] [Thread-5037] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:24:36.370 [DEBUG] [Thread-5039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:24:46.968 [DEBUG] [Thread-5040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:25:02.026 [DEBUG] [Thread-5041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:25:05.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:25:05.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:25:05.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:25:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 24, 54), 0.26, 98.06, 0.0, 18.17, 11.04, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:25:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:24:54
2025-12-25T04:25:06.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:25:06.566 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:25:06.567 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:25:06.576 [DEBUG] [Thread-5042] [transport.py] [_log()] starting thread (client mode): 0xb6b21750
2025-12-25T04:25:06.576 [DEBUG] [Thread-5042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:25:06.596 [DEBUG] [Thread-5042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:25:06.597 [INFO] [Thread-5042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] client lang: <none>
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] server lang: <none>
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] kex follows: False
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] Compression: none
2025-12-25T04:25:06.598 [DEBUG] [Thread-5042] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:25:06.608 [DEBUG] [Thread-5042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:25:06.608 [DEBUG] [Thread-5042] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:25:06.609 [DEBUG] [Thread-5042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:25:06.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:25:06.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:25:06.610 [DEBUG] [Thread-5042] [transport.py] [_log()] userauth is OK
2025-12-25T04:25:06.610 [DEBUG] [Thread-5042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:25:06.611 [DEBUG] [Thread-5042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:25:06.611 [DEBUG] [Thread-5042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:25:06.611 [DEBUG] [Thread-5042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:25:06.629 [INFO] [Thread-5042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:25:06.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:25:07.605 [DEBUG] [Thread-5042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:25:07.605 [DEBUG] [Thread-5042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:25:07.606 [DEBUG] [Thread-5042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:25:07.646 [DEBUG] [Thread-5042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:25:07.646 [DEBUG] [Thread-5042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:25:07.650 [DEBUG] [Thread-5042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:25:07.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:25:07.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:25:07.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:25:07.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:25:07.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:25:07.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:25:07.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:25:07.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:25:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:25:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.100414 -999.00  +10.90  20.04     96  +10.30 1 3 1 3 1     0    0 0.53 -2.49 ...SW 17.7 20.0 145.0 23.1 12.5 -9.1 12.4 -8.3 12.3 -10.3 12.5 -8.4
2025-12-25T04:25:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:25:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:25:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.100414
2025-12-25T04:25:07.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:25:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:25:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:25:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:25:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:25:07.678 [DEBUG] [Thread-5042] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:25:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:24:54', tmtdew=0.26, humidity=98.06, cloud=0.0, wind=18.17, temperature=11.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:24:35.770', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:25:07.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:25:07.772 [DEBUG] [Thread-5045] [transport.py] [_log()] starting thread (client mode): 0xb6b4b250
2025-12-25T04:25:07.772 [DEBUG] [Thread-5045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:25:07.788 [DEBUG] [Thread-5045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:25:07.789 [INFO] [Thread-5045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:25:07.797 [DEBUG] [Thread-5045] [transport.py] [_log()] client lang: <none>
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] server lang: <none>
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] kex follows: False
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] Compression: none
2025-12-25T04:25:07.798 [DEBUG] [Thread-5045] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:25:07.853 [DEBUG] [Thread-5045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:25:07.853 [DEBUG] [Thread-5045] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:25:07.853 [DEBUG] [Thread-5045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:25:07.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:25:07.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:25:07.910 [DEBUG] [Thread-5045] [transport.py] [_log()] userauth is OK
2025-12-25T04:25:07.911 [DEBUG] [Thread-5045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:25:07.911 [DEBUG] [Thread-5045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:25:07.911 [DEBUG] [Thread-5045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:25:07.911 [DEBUG] [Thread-5045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:25:07.935 [INFO] [Thread-5045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:25:07.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:25:07.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:25:08.778 [DEBUG] [Thread-5045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:25:08.778 [DEBUG] [Thread-5045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:25:08.826 [DEBUG] [Thread-5045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:25:08.826 [DEBUG] [Thread-5045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:25:08.835 [DEBUG] [Thread-5045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:25:08.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:25:08.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:25:08.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:25:08.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:25:08.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:25:08.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:25:08.877 [DEBUG] [Thread-5045] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:25:17.057 [DEBUG] [Thread-5047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:25:32.102 [DEBUG] [Thread-5048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:25:36.442 [DEBUG] [Thread-5049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:25:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:25:38.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:25:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:25:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 25, 26), 0.27, 98.03, 0.0, 18.72, 11.02, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:25:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:25:26
2025-12-25T04:25:39.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:25:39.878 [DEBUG] [Thread-5050] [transport.py] [_log()] starting thread (client mode): 0xb6b4a560
2025-12-25T04:25:39.878 [DEBUG] [Thread-5050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:25:39.899 [DEBUG] [Thread-5050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:25:39.899 [INFO] [Thread-5050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] client lang: <none>
2025-12-25T04:25:39.903 [DEBUG] [Thread-5050] [transport.py] [_log()] server lang: <none>
2025-12-25T04:25:39.904 [DEBUG] [Thread-5050] [transport.py] [_log()] kex follows: False
2025-12-25T04:25:39.904 [DEBUG] [Thread-5050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:25:39.904 [DEBUG] [Thread-5050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:25:39.904 [DEBUG] [Thread-5050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:25:39.904 [DEBUG] [Thread-5050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:25:39.904 [DEBUG] [Thread-5050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:25:39.904 [DEBUG] [Thread-5050] [transport.py] [_log()] Compression: none
2025-12-25T04:25:39.904 [DEBUG] [Thread-5050] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:25:39.922 [DEBUG] [Thread-5050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:25:39.922 [DEBUG] [Thread-5050] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:25:39.923 [DEBUG] [Thread-5050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:25:39.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:25:39.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:25:39.925 [DEBUG] [Thread-5050] [transport.py] [_log()] userauth is OK
2025-12-25T04:25:39.925 [DEBUG] [Thread-5050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:25:39.925 [DEBUG] [Thread-5050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:25:39.925 [DEBUG] [Thread-5050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:25:39.925 [DEBUG] [Thread-5050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:25:39.951 [INFO] [Thread-5050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:25:39.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:25:40.724 [DEBUG] [Thread-5050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:25:40.724 [DEBUG] [Thread-5050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:25:40.724 [DEBUG] [Thread-5050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:25:40.765 [DEBUG] [Thread-5050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:25:40.765 [DEBUG] [Thread-5050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:25:40.768 [DEBUG] [Thread-5050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:25:40.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:25:40.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:25:40.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:25:40.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:25:40.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:25:40.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:25:40.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:25:40.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:25:40.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:25:40.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.100762 -999.00  +10.90  15.63     96  +10.40 1 3 1 3 1     0    0 0.53 -2.63 ..... 14.8 15.6 144.6 21.4 12.5 -10.5 12.5 -10.3 12.3 -8.6 12.5 -11.2
2025-12-25T04:25:40.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:25:40.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:25:40.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.100762
2025-12-25T04:25:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:25:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:25:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:25:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:25:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:25:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:25:26', tmtdew=0.27, humidity=98.03, cloud=0.0, wind=18.72, temperature=11.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:25:05.837', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:25:40.794 [DEBUG] [Thread-5050] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:25:40.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:25:40.892 [DEBUG] [Thread-5053] [transport.py] [_log()] starting thread (client mode): 0xb6b623e0
2025-12-25T04:25:40.892 [DEBUG] [Thread-5053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:25:40.907 [DEBUG] [Thread-5053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:25:40.907 [INFO] [Thread-5053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:25:40.915 [DEBUG] [Thread-5053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:25:40.915 [DEBUG] [Thread-5053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:25:40.915 [DEBUG] [Thread-5053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:25:40.915 [DEBUG] [Thread-5053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:25:40.915 [DEBUG] [Thread-5053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:25:40.915 [DEBUG] [Thread-5053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:25:40.915 [DEBUG] [Thread-5053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] client lang: <none>
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] server lang: <none>
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] kex follows: False
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:25:40.916 [DEBUG] [Thread-5053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:25:40.917 [DEBUG] [Thread-5053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:25:40.917 [DEBUG] [Thread-5053] [transport.py] [_log()] Compression: none
2025-12-25T04:25:40.917 [DEBUG] [Thread-5053] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:25:40.974 [DEBUG] [Thread-5053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:25:40.975 [DEBUG] [Thread-5053] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:25:40.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:25:40.977 [DEBUG] [Thread-5053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:25:40.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:25:41.030 [DEBUG] [Thread-5053] [transport.py] [_log()] userauth is OK
2025-12-25T04:25:41.031 [DEBUG] [Thread-5053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:25:41.031 [DEBUG] [Thread-5053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:25:41.032 [DEBUG] [Thread-5053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:25:41.032 [DEBUG] [Thread-5053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:25:41.051 [INFO] [Thread-5053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:25:41.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:25:41.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:25:41.840 [DEBUG] [Thread-5053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:25:41.841 [DEBUG] [Thread-5053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:25:41.889 [DEBUG] [Thread-5053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:25:41.889 [DEBUG] [Thread-5053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:25:41.899 [DEBUG] [Thread-5053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:25:41.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:25:41.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')
2025-12-25T04:25:41.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:25:41.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:25:41.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:25:41.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:25:41.935 [DEBUG] [Thread-5053] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:25:47.142 [DEBUG] [Thread-5055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:26:02.187 [DEBUG] [Thread-5056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:26:06.765 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:26:06.767 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:26:11.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:26:11.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:26:11.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:26:12.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 25, 58), 0.26, 98.06, 0.0, 20.1, 11.02, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:26:12.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:25:58
2025-12-25T04:26:12.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:26:12.933 [DEBUG] [Thread-5057] [transport.py] [_log()] starting thread (client mode): 0xb6b63700
2025-12-25T04:26:12.933 [DEBUG] [Thread-5057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:26:12.953 [DEBUG] [Thread-5057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:26:12.953 [INFO] [Thread-5057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:26:12.956 [DEBUG] [Thread-5057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] client lang: <none>
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] server lang: <none>
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] kex follows: False
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:26:12.957 [DEBUG] [Thread-5057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:26:12.958 [DEBUG] [Thread-5057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:26:12.958 [DEBUG] [Thread-5057] [transport.py] [_log()] Compression: none
2025-12-25T04:26:12.958 [DEBUG] [Thread-5057] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:26:12.975 [DEBUG] [Thread-5057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:26:12.975 [DEBUG] [Thread-5057] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:26:12.976 [DEBUG] [Thread-5057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:26:12.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:26:12.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:26:12.978 [DEBUG] [Thread-5057] [transport.py] [_log()] userauth is OK
2025-12-25T04:26:12.978 [DEBUG] [Thread-5057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:26:12.978 [DEBUG] [Thread-5057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:26:12.978 [DEBUG] [Thread-5057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:26:12.979 [DEBUG] [Thread-5057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:26:13.004 [INFO] [Thread-5057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:26:13.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:26:13.650 [DEBUG] [Thread-5057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:26:13.650 [DEBUG] [Thread-5057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:26:13.651 [DEBUG] [Thread-5057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:26:13.691 [DEBUG] [Thread-5057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:26:13.691 [DEBUG] [Thread-5057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:26:13.695 [DEBUG] [Thread-5057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:26:13.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:26:13.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:26:13.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:26:13.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:26:13.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:26:13.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:26:13.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:26:13.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:26:13.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:26:13.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.101109 -999.00  +11.00  18.74     96  +10.40 1 2 1 3 1     0    0 0.53 -2.92 ...SW 19.8 18.7 140.8 21.6 12.5 -10.1 12.4 -10.0 12.2 -11.4 12.5 -8.2
2025-12-25T04:26:13.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:26:13.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:26:13.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.101109
2025-12-25T04:26:13.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:26:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:26:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:26:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:26:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T04:26:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:25:58', tmtdew=0.26, humidity=98.06, cloud=0.0, wind=20.1, temperature=11.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:25:35.818', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:26:13.721 [DEBUG] [Thread-5057] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:26:13.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:26:13.820 [DEBUG] [Thread-5060] [transport.py] [_log()] starting thread (client mode): 0xb6b15c00
2025-12-25T04:26:13.820 [DEBUG] [Thread-5060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:26:13.835 [DEBUG] [Thread-5060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:26:13.835 [INFO] [Thread-5060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:26:13.843 [DEBUG] [Thread-5060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:26:13.843 [DEBUG] [Thread-5060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] client lang: <none>
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] server lang: <none>
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] kex follows: False
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:26:13.844 [DEBUG] [Thread-5060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:26:13.845 [DEBUG] [Thread-5060] [transport.py] [_log()] Compression: none
2025-12-25T04:26:13.845 [DEBUG] [Thread-5060] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:26:13.910 [DEBUG] [Thread-5060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:26:13.911 [DEBUG] [Thread-5060] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:26:13.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:26:13.912 [DEBUG] [Thread-5060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:26:13.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:26:13.971 [DEBUG] [Thread-5060] [transport.py] [_log()] userauth is OK
2025-12-25T04:26:13.972 [DEBUG] [Thread-5060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:26:13.972 [DEBUG] [Thread-5060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:26:13.972 [DEBUG] [Thread-5060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:26:13.972 [DEBUG] [Thread-5060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:26:13.994 [INFO] [Thread-5060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:26:13.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:26:13.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:26:14.832 [DEBUG] [Thread-5060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:26:14.833 [DEBUG] [Thread-5060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:26:14.881 [DEBUG] [Thread-5060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:26:14.881 [DEBUG] [Thread-5060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:26:14.890 [DEBUG] [Thread-5060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:26:14.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:26:14.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:26:14.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:26:14.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:26:14.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:26:14.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:26:14.927 [DEBUG] [Thread-5060] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:26:17.224 [DEBUG] [Thread-5062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:26:32.273 [DEBUG] [Thread-5063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:26:36.506 [DEBUG] [Thread-5064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:26:44.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:26:44.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:26:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:26:45.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 26, 30), 0.26, 98.06, 0.0, 20.47, 11.02, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:26:45.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:26:30
2025-12-25T04:26:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:26:45.903 [DEBUG] [Thread-5065] [transport.py] [_log()] starting thread (client mode): 0xb6b15d50
2025-12-25T04:26:45.903 [DEBUG] [Thread-5065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:26:45.923 [DEBUG] [Thread-5065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:26:45.923 [INFO] [Thread-5065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:26:45.926 [DEBUG] [Thread-5065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:26:45.926 [DEBUG] [Thread-5065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:26:45.926 [DEBUG] [Thread-5065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] client lang: <none>
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] server lang: <none>
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] kex follows: False
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:26:45.927 [DEBUG] [Thread-5065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:26:45.928 [DEBUG] [Thread-5065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:26:45.928 [DEBUG] [Thread-5065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:26:45.928 [DEBUG] [Thread-5065] [transport.py] [_log()] Compression: none
2025-12-25T04:26:45.928 [DEBUG] [Thread-5065] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:26:45.947 [DEBUG] [Thread-5065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:26:45.947 [DEBUG] [Thread-5065] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:26:45.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:26:45.949 [DEBUG] [Thread-5065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:26:45.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:26:45.989 [DEBUG] [Thread-5065] [transport.py] [_log()] userauth is OK
2025-12-25T04:26:45.989 [DEBUG] [Thread-5065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:26:45.990 [DEBUG] [Thread-5065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:26:45.990 [DEBUG] [Thread-5065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:26:45.990 [DEBUG] [Thread-5065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:26:46.021 [INFO] [Thread-5065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:26:46.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:26:46.792 [DEBUG] [Thread-5065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:26:46.793 [DEBUG] [Thread-5065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:26:46.793 [DEBUG] [Thread-5065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:26:46.834 [DEBUG] [Thread-5065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:26:46.834 [DEBUG] [Thread-5065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:26:46.838 [DEBUG] [Thread-5065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:26:46.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:26:46.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:26:46.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:26:46.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:26:46.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:26:46.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:26:46.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:26:46.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:26:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:26:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.101456 -999.00  +10.90  14.69     96  +10.30 1 2 1 3 1     0    0 0.52 -3.06 ...SW 20.5 14.7 148.8 22.8 12.5 -11.8 12.4 -11.9 12.3 -9.9 12.5 -12.6
2025-12-25T04:26:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:26:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:26:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.101456
2025-12-25T04:26:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:26:46.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:26:46.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:26:46.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:26:46.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T04:26:46.865 [DEBUG] [Thread-5065] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:26:46.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:26:30', tmtdew=0.26, humidity=98.06, cloud=0.0, wind=20.47, temperature=11.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:26:05.798', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:26:46.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:26:46.959 [DEBUG] [Thread-5068] [transport.py] [_log()] starting thread (client mode): 0xb6b61660
2025-12-25T04:26:46.959 [DEBUG] [Thread-5068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:26:46.973 [DEBUG] [Thread-5068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:26:46.973 [INFO] [Thread-5068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:26:46.981 [DEBUG] [Thread-5068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:26:46.981 [DEBUG] [Thread-5068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] client lang: <none>
2025-12-25T04:26:46.982 [DEBUG] [Thread-5068] [transport.py] [_log()] server lang: <none>
2025-12-25T04:26:46.983 [DEBUG] [Thread-5068] [transport.py] [_log()] kex follows: False
2025-12-25T04:26:46.983 [DEBUG] [Thread-5068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:26:46.983 [DEBUG] [Thread-5068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:26:46.983 [DEBUG] [Thread-5068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:26:46.983 [DEBUG] [Thread-5068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:26:46.983 [DEBUG] [Thread-5068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:26:46.983 [DEBUG] [Thread-5068] [transport.py] [_log()] Compression: none
2025-12-25T04:26:46.983 [DEBUG] [Thread-5068] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:26:47.038 [DEBUG] [Thread-5068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:26:47.039 [DEBUG] [Thread-5068] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:26:47.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:26:47.040 [DEBUG] [Thread-5068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:26:47.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:26:47.094 [DEBUG] [Thread-5068] [transport.py] [_log()] userauth is OK
2025-12-25T04:26:47.094 [DEBUG] [Thread-5068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:26:47.095 [DEBUG] [Thread-5068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:26:47.095 [DEBUG] [Thread-5068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:26:47.095 [DEBUG] [Thread-5068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:26:47.114 [INFO] [Thread-5068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:26:47.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:26:47.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:26:47.304 [DEBUG] [Thread-5070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:26:48.009 [DEBUG] [Thread-5068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:26:48.009 [DEBUG] [Thread-5068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:26:48.056 [DEBUG] [Thread-5068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:26:48.057 [DEBUG] [Thread-5068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:26:48.065 [DEBUG] [Thread-5068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:26:48.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:26:48.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')
2025-12-25T04:26:48.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') -> 00000000
2025-12-25T04:26:48.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:26:48.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:26:48.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:26:48.098 [DEBUG] [Thread-5068] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:27:02.356 [DEBUG] [Thread-5071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:27:06.968 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:27:06.969 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:27:17.390 [DEBUG] [Thread-5072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:27:18.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:27:18.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:27:18.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:27:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 27, 2), 0.27, 98.01, 0.0, 20.52, 10.99, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:27:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:27:02
2025-12-25T04:27:18.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:27:19.092 [DEBUG] [Thread-5073] [transport.py] [_log()] starting thread (client mode): 0xb6b15810
2025-12-25T04:27:19.092 [DEBUG] [Thread-5073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:27:19.111 [DEBUG] [Thread-5073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:27:19.111 [INFO] [Thread-5073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] client lang: <none>
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] server lang: <none>
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] kex follows: False
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] Compression: none
2025-12-25T04:27:19.115 [DEBUG] [Thread-5073] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:27:19.132 [DEBUG] [Thread-5073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:27:19.132 [DEBUG] [Thread-5073] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:27:19.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:27:19.133 [DEBUG] [Thread-5073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:27:19.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:27:19.136 [DEBUG] [Thread-5073] [transport.py] [_log()] userauth is OK
2025-12-25T04:27:19.136 [DEBUG] [Thread-5073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:27:19.136 [DEBUG] [Thread-5073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:27:19.136 [DEBUG] [Thread-5073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:27:19.136 [DEBUG] [Thread-5073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:27:19.151 [INFO] [Thread-5073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:27:19.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:27:19.790 [DEBUG] [Thread-5073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:27:19.790 [DEBUG] [Thread-5073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:27:19.790 [DEBUG] [Thread-5073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:27:19.831 [DEBUG] [Thread-5073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:27:19.831 [DEBUG] [Thread-5073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:27:19.833 [DEBUG] [Thread-5073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:27:19.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:27:19.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:27:19.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:27:19.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:27:19.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:27:19.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:27:19.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:27:19.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:27:19.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:27:19.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.101803 -999.00  +10.90  17.68     96  +10.30 1 3 1 3 1     0    0 0.52 -2.97 ...SW 14.8 17.7 140.8 20.3 12.5 -9.6 12.4 -9.1 12.2 -10.4 12.5 -8.5
2025-12-25T04:27:19.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:27:19.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:27:19.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.101803
2025-12-25T04:27:19.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:27:19.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:27:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:27:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:27:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:27:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:27:02', tmtdew=0.27, humidity=98.01, cloud=0.0, wind=20.52, temperature=10.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:26:35.779', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:27:19.859 [DEBUG] [Thread-5073] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:27:19.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:27:19.953 [DEBUG] [Thread-5076] [transport.py] [_log()] starting thread (client mode): 0xb6b14ee0
2025-12-25T04:27:19.954 [DEBUG] [Thread-5076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:27:19.968 [DEBUG] [Thread-5076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:27:19.969 [INFO] [Thread-5076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:27:19.976 [DEBUG] [Thread-5076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] client lang: <none>
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] server lang: <none>
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] kex follows: False
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] Compression: none
2025-12-25T04:27:19.977 [DEBUG] [Thread-5076] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:27:20.034 [DEBUG] [Thread-5076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:27:20.034 [DEBUG] [Thread-5076] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:27:20.035 [DEBUG] [Thread-5076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:27:20.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:27:20.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:27:20.090 [DEBUG] [Thread-5076] [transport.py] [_log()] userauth is OK
2025-12-25T04:27:20.090 [DEBUG] [Thread-5076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:27:20.090 [DEBUG] [Thread-5076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:27:20.090 [DEBUG] [Thread-5076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:27:20.090 [DEBUG] [Thread-5076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:27:20.109 [INFO] [Thread-5076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:27:20.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:27:20.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:27:20.981 [DEBUG] [Thread-5076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:27:20.981 [DEBUG] [Thread-5076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:27:21.030 [DEBUG] [Thread-5076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:27:21.030 [DEBUG] [Thread-5076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:27:21.038 [DEBUG] [Thread-5076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:27:21.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:27:21.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:27:21.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:27:21.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:27:21.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:27:21.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:27:21.071 [DEBUG] [Thread-5076] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:27:32.422 [DEBUG] [Thread-5078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:27:36.580 [DEBUG] [Thread-5079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:27:47.474 [DEBUG] [Thread-5080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:27:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:27:51.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:27:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:27:51.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 27, 34), 0.21, 98.06, 0.0, 20.8, 10.96, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:27:51.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:27:34
2025-12-25T04:27:51.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:27:52.058 [DEBUG] [Thread-5081] [transport.py] [_log()] starting thread (client mode): 0xb6b49570
2025-12-25T04:27:52.058 [DEBUG] [Thread-5081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:27:52.078 [DEBUG] [Thread-5081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:27:52.078 [INFO] [Thread-5081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:27:52.081 [DEBUG] [Thread-5081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:27:52.081 [DEBUG] [Thread-5081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] client lang: <none>
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] server lang: <none>
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] kex follows: False
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] Compression: none
2025-12-25T04:27:52.082 [DEBUG] [Thread-5081] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:27:52.100 [DEBUG] [Thread-5081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:27:52.100 [DEBUG] [Thread-5081] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:27:52.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:27:52.101 [DEBUG] [Thread-5081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:27:52.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:27:52.104 [DEBUG] [Thread-5081] [transport.py] [_log()] userauth is OK
2025-12-25T04:27:52.104 [DEBUG] [Thread-5081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:27:52.104 [DEBUG] [Thread-5081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:27:52.104 [DEBUG] [Thread-5081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:27:52.104 [DEBUG] [Thread-5081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:27:52.129 [INFO] [Thread-5081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:27:52.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:27:52.872 [DEBUG] [Thread-5081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:27:52.872 [DEBUG] [Thread-5081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:27:52.872 [DEBUG] [Thread-5081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:27:52.913 [DEBUG] [Thread-5081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:27:52.913 [DEBUG] [Thread-5081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:27:52.917 [DEBUG] [Thread-5081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:27:52.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:27:52.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:27:52.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:27:52.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:27:52.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:27:52.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:27:52.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:27:52.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:27:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:27:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.102151 -999.00  +11.00  16.17     96  +10.40 1 3 1 3 1     1    0 0.51 -3.05 ...SW 14.2 16.2 150.4 21.2 12.5 -9.7 12.4 -9.6 12.2 -8.2 12.5 -10.5
2025-12-25T04:27:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:27:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:27:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.102151
2025-12-25T04:27:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:27:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:27:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:27:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:27:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-25T04:27:52.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:27:34', tmtdew=0.21, humidity=98.06, cloud=0.0, wind=20.8, temperature=10.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:27:05.846', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:27:52.938 [DEBUG] [Thread-5081] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:27:53.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:27:53.031 [DEBUG] [Thread-5084] [transport.py] [_log()] starting thread (client mode): 0xb6b4b310
2025-12-25T04:27:53.031 [DEBUG] [Thread-5084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:27:53.045 [DEBUG] [Thread-5084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:27:53.045 [INFO] [Thread-5084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:27:53.052 [DEBUG] [Thread-5084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] client lang: <none>
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] server lang: <none>
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] kex follows: False
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] Compression: none
2025-12-25T04:27:53.053 [DEBUG] [Thread-5084] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:27:53.114 [DEBUG] [Thread-5084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:27:53.115 [DEBUG] [Thread-5084] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:27:53.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:27:53.116 [DEBUG] [Thread-5084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:27:53.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:27:53.170 [DEBUG] [Thread-5084] [transport.py] [_log()] userauth is OK
2025-12-25T04:27:53.170 [DEBUG] [Thread-5084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:27:53.171 [DEBUG] [Thread-5084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:27:53.171 [DEBUG] [Thread-5084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:27:53.171 [DEBUG] [Thread-5084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:27:53.194 [INFO] [Thread-5084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:27:53.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:27:53.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:27:54.024 [DEBUG] [Thread-5084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:27:54.024 [DEBUG] [Thread-5084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:27:54.073 [DEBUG] [Thread-5084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:27:54.073 [DEBUG] [Thread-5084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:27:54.084 [DEBUG] [Thread-5084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:27:54.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:27:54.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')
2025-12-25T04:27:54.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:27:54.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:27:54.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:27:54.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:27:54.119 [DEBUG] [Thread-5084] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:28:02.506 [DEBUG] [Thread-5086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:28:07.170 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:28:07.171 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:28:17.559 [DEBUG] [Thread-5087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:28:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:28:24.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:28:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:28:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 28, 6), 0.21, 98.06, 0.0, 21.05, 10.97, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:28:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:28:06
2025-12-25T04:28:25.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:28:25.159 [DEBUG] [Thread-5088] [transport.py] [_log()] starting thread (client mode): 0xb6b16890
2025-12-25T04:28:25.159 [DEBUG] [Thread-5088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:28:25.178 [DEBUG] [Thread-5088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:28:25.179 [INFO] [Thread-5088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] client lang: <none>
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] server lang: <none>
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] kex follows: False
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] Compression: none
2025-12-25T04:28:25.182 [DEBUG] [Thread-5088] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:28:25.198 [DEBUG] [Thread-5088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:28:25.198 [DEBUG] [Thread-5088] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:28:25.198 [DEBUG] [Thread-5088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:28:25.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:28:25.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:28:25.199 [DEBUG] [Thread-5088] [transport.py] [_log()] userauth is OK
2025-12-25T04:28:25.199 [DEBUG] [Thread-5088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:28:25.199 [DEBUG] [Thread-5088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:28:25.199 [DEBUG] [Thread-5088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:28:25.199 [DEBUG] [Thread-5088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:28:25.208 [INFO] [Thread-5088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:28:25.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:28:25.826 [DEBUG] [Thread-5088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:28:25.826 [DEBUG] [Thread-5088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:28:25.826 [DEBUG] [Thread-5088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:28:25.866 [DEBUG] [Thread-5088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:28:25.867 [DEBUG] [Thread-5088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:28:25.869 [DEBUG] [Thread-5088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:28:25.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:28:25.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:28:25.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:28:25.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:28:25.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:28:25.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:28:25.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.102498 -999.00  +10.90  15.69     96  +10.30 1 2 1 3 1     1    0 0.51 -3.32 ...SW 15.2 15.7 156.5 22.0 12.5 -8.9 12.4 -9.2 12.2 -11.0 12.5 -8.3
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.102498
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T04:28:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:28:06', tmtdew=0.21, humidity=98.06, cloud=0.0, wind=21.05, temperature=10.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:27:35.827', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:28:25.889 [DEBUG] [Thread-5088] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:28:25.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:28:25.977 [DEBUG] [Thread-5091] [transport.py] [_log()] starting thread (client mode): 0xb95f23e0
2025-12-25T04:28:25.977 [DEBUG] [Thread-5091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:28:25.994 [DEBUG] [Thread-5091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:28:25.994 [INFO] [Thread-5091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] client lang: <none>
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] server lang: <none>
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] kex follows: False
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] Compression: none
2025-12-25T04:28:26.002 [DEBUG] [Thread-5091] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:28:26.057 [DEBUG] [Thread-5091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:28:26.057 [DEBUG] [Thread-5091] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:28:26.057 [DEBUG] [Thread-5091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:28:26.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:28:26.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:28:26.114 [DEBUG] [Thread-5091] [transport.py] [_log()] userauth is OK
2025-12-25T04:28:26.114 [DEBUG] [Thread-5091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:28:26.114 [DEBUG] [Thread-5091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:28:26.114 [DEBUG] [Thread-5091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:28:26.114 [DEBUG] [Thread-5091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:28:26.128 [INFO] [Thread-5091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:28:26.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:28:26.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:28:27.004 [DEBUG] [Thread-5091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:28:27.004 [DEBUG] [Thread-5091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:28:27.052 [DEBUG] [Thread-5091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:28:27.052 [DEBUG] [Thread-5091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:28:27.061 [DEBUG] [Thread-5091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:28:27.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:28:27.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T04:28: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') -> 00000000
2025-12-25T04:28:27.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:28:27.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:28:27.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:28:27.092 [DEBUG] [Thread-5091] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:28:32.597 [DEBUG] [Thread-5093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:28:36.670 [DEBUG] [Thread-5094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:28:47.646 [DEBUG] [Thread-5095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:28:57.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:28:57.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:28:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T04:28:57.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 28, 38), 0.26, 98.08, 0.0, 20.47, 10.99, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:28:57.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:28:38
2025-12-25T04:28:57.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:28:58.100 [DEBUG] [Thread-5096] [transport.py] [_log()] starting thread (client mode): 0xb6b4a2f0
2025-12-25T04:28:58.101 [DEBUG] [Thread-5096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:28:58.121 [DEBUG] [Thread-5096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:28:58.121 [INFO] [Thread-5096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:28:58.125 [DEBUG] [Thread-5096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:28:58.125 [DEBUG] [Thread-5096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:28:58.125 [DEBUG] [Thread-5096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:28:58.125 [DEBUG] [Thread-5096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] client lang: <none>
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] server lang: <none>
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] kex follows: False
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:28:58.126 [DEBUG] [Thread-5096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:28:58.127 [DEBUG] [Thread-5096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:28:58.127 [DEBUG] [Thread-5096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:28:58.127 [DEBUG] [Thread-5096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:28:58.127 [DEBUG] [Thread-5096] [transport.py] [_log()] Compression: none
2025-12-25T04:28:58.127 [DEBUG] [Thread-5096] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:28:58.144 [DEBUG] [Thread-5096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:28:58.145 [DEBUG] [Thread-5096] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:28:58.145 [DEBUG] [Thread-5096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:28:58.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:28:58.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:28:58.147 [DEBUG] [Thread-5096] [transport.py] [_log()] userauth is OK
2025-12-25T04:28:58.148 [DEBUG] [Thread-5096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:28:58.148 [DEBUG] [Thread-5096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:28:58.148 [DEBUG] [Thread-5096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:28:58.148 [DEBUG] [Thread-5096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:28:58.171 [INFO] [Thread-5096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:28:58.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:28:58.970 [DEBUG] [Thread-5096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:28:58.971 [DEBUG] [Thread-5096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:28:58.971 [DEBUG] [Thread-5096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:28:59.012 [DEBUG] [Thread-5096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:28:59.012 [DEBUG] [Thread-5096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:28:59.016 [DEBUG] [Thread-5096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:28:59.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:28:59.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:28:59.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:28:59.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:28:59.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:28:59.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:28:59.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:28:59.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:28:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:28:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.103192 -999.00  +10.90  18.46     96  +10.30 1 2 1 3 1     1    0 0.52 -3.01 ----- 15.4 18.5 141.6 20.7 12.4 -10.2 12.3 -10.1 12.2 -10.5 12.5 -11.5
2025-12-25T04:28:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:28:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:28:59.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.103192
2025-12-25T04:28:59.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T04:28:59.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T04:28:59.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T04:28:59.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T04:28:59.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T04:28:59.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T04:28:38', tmtdew=0.26, humidity=98.08, cloud=0.0, wind=20.47, temperature=10.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T02:28:35.789', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T04:28:59.043 [DEBUG] [Thread-5096] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:28:59.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T04:28:59.141 [DEBUG] [Thread-5099] [transport.py] [_log()] starting thread (client mode): 0xb6b4b4c0
2025-12-25T04:28:59.141 [DEBUG] [Thread-5099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:28:59.156 [DEBUG] [Thread-5099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T04:28:59.156 [INFO] [Thread-5099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] client lang: <none>
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] server lang: <none>
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] kex follows: False
2025-12-25T04:28:59.164 [DEBUG] [Thread-5099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:28:59.165 [DEBUG] [Thread-5099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:28:59.165 [DEBUG] [Thread-5099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:28:59.165 [DEBUG] [Thread-5099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:28:59.165 [DEBUG] [Thread-5099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:28:59.165 [DEBUG] [Thread-5099] [transport.py] [_log()] Compression: none
2025-12-25T04:28:59.165 [DEBUG] [Thread-5099] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:28:59.222 [DEBUG] [Thread-5099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:28:59.223 [DEBUG] [Thread-5099] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:28:59.224 [DEBUG] [Thread-5099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T04:28:59.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T04:28:59.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:28:59.279 [DEBUG] [Thread-5099] [transport.py] [_log()] userauth is OK
2025-12-25T04:28:59.279 [DEBUG] [Thread-5099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:28:59.279 [DEBUG] [Thread-5099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:28:59.279 [DEBUG] [Thread-5099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T04:28:59.279 [DEBUG] [Thread-5099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:28:59.298 [INFO] [Thread-5099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:28:59.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T04:28:59.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:29:00.118 [DEBUG] [Thread-5099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:29:00.119 [DEBUG] [Thread-5099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:29:00.167 [DEBUG] [Thread-5099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:29:00.167 [DEBUG] [Thread-5099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:29:00.177 [DEBUG] [Thread-5099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:29:00.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:29:00.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')
2025-12-25T04:29:00.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T04:29:00.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:29:00.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:29:00.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:29:00.213 [DEBUG] [Thread-5099] [transport.py] [_log()] EOF in transport thread
2025-12-25T04:29:02.679 [DEBUG] [Thread-5101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:29:07.369 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:29:07.370 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:29:17.717 [DEBUG] [Thread-5102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T04:29:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T04:29:30.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T04:29: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
2025-12-25T04:29:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 4, 29, 10), 0.26, 98.08, 0.0, 20.31, 11.01, 2, 2, 0, 2, 0, 0),)
2025-12-25T04:29:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 04:29:10
2025-12-25T04:29:31.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T04:29:31.225 [DEBUG] [Thread-5103] [transport.py] [_log()] starting thread (client mode): 0xb6b17760
2025-12-25T04:29:31.225 [DEBUG] [Thread-5103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T04:29:31.245 [DEBUG] [Thread-5103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T04:29:31.245 [INFO] [Thread-5103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T04:29:31.248 [DEBUG] [Thread-5103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] client lang: <none>
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] server lang: <none>
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] kex follows: False
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] Compression: none
2025-12-25T04:29:31.249 [DEBUG] [Thread-5103] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T04:29:31.266 [DEBUG] [Thread-5103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T04:29:31.266 [DEBUG] [Thread-5103] [transport.py] [_log()] Switch to new keys ...
2025-12-25T04:29:31.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T04:29:31.267 [DEBUG] [Thread-5103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T04:29:31.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T04:29:31.269 [DEBUG] [Thread-5103] [transport.py] [_log()] userauth is OK
2025-12-25T04:29:31.269 [DEBUG] [Thread-5103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T04:29:31.269 [DEBUG] [Thread-5103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T04:29:31.269 [DEBUG] [Thread-5103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T04:29:31.269 [DEBUG] [Thread-5103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T04:29:31.304 [INFO] [Thread-5103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T04:29:31.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T04:29:31.937 [DEBUG] [Thread-5103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T04:29:31.937 [DEBUG] [Thread-5103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T04:29:31.937 [DEBUG] [Thread-5103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T04:29:31.978 [DEBUG] [Thread-5103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T04:29:31.978 [DEBUG] [Thread-5103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T04:29:31.981 [DEBUG] [Thread-5103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T04:29:31.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T04:29:31.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T04:29:31.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T04:29:31.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T04:29:32.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T04:29:32.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T04:29:32.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T04:29:32.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T04:29:32.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T04:29:32.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.103539 -999.00  +10.90  15.25     96  +10.30 1 2 1 3 1     1    0 0.53 -2.61 ----- 16.3 15.2 144.0 22.3 12.5 -12.5 12.3 -12.2 12.2 -10.9 12.4 -13.2
2025-12-25T04:29:32.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T04:29:32.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T04:29:32.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()
[file cut: first 33554432 bytes kept]
[document cut: first 32640303 of 33554432 characters kept]
